@carlonicora/nestjs-neo4jsonapi 1.116.0 → 1.118.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 (134) hide show
  1. package/dist/common/guards/jwt.auth.admin.guard.d.ts +3 -2
  2. package/dist/common/guards/jwt.auth.admin.guard.d.ts.map +1 -1
  3. package/dist/common/guards/jwt.auth.admin.guard.js +19 -4
  4. package/dist/common/guards/jwt.auth.admin.guard.js.map +1 -1
  5. package/dist/common/helpers/define-entity.d.ts +11 -1
  6. package/dist/common/helpers/define-entity.d.ts.map +1 -1
  7. package/dist/common/helpers/define-entity.js +7 -0
  8. package/dist/common/helpers/define-entity.js.map +1 -1
  9. package/dist/common/tokens.d.ts +4 -0
  10. package/dist/common/tokens.d.ts.map +1 -1
  11. package/dist/config/base.config.d.ts.map +1 -1
  12. package/dist/config/base.config.js +8 -0
  13. package/dist/config/base.config.js.map +1 -1
  14. package/dist/config/interfaces/base.config.interface.d.ts +2 -0
  15. package/dist/config/interfaces/base.config.interface.d.ts.map +1 -1
  16. package/dist/config/interfaces/config.ai.interface.d.ts +8 -0
  17. package/dist/config/interfaces/config.ai.interface.d.ts.map +1 -1
  18. package/dist/config/interfaces/config.credits.interface.d.ts +24 -0
  19. package/dist/config/interfaces/config.credits.interface.d.ts.map +1 -0
  20. package/dist/config/interfaces/config.credits.interface.js +3 -0
  21. package/dist/config/interfaces/config.credits.interface.js.map +1 -0
  22. package/dist/config/interfaces/index.d.ts +1 -0
  23. package/dist/config/interfaces/index.d.ts.map +1 -1
  24. package/dist/config/interfaces/index.js +1 -0
  25. package/dist/config/interfaces/index.js.map +1 -1
  26. package/dist/core/llm/services/embedder.service.d.ts +36 -2
  27. package/dist/core/llm/services/embedder.service.d.ts.map +1 -1
  28. package/dist/core/llm/services/embedder.service.js +87 -7
  29. package/dist/core/llm/services/embedder.service.js.map +1 -1
  30. package/dist/core/neo4j/abstracts/abstract.repository.d.ts.map +1 -1
  31. package/dist/core/neo4j/abstracts/abstract.repository.js +6 -2
  32. package/dist/core/neo4j/abstracts/abstract.repository.js.map +1 -1
  33. package/dist/foundations/community/repositories/community.repository.d.ts.map +1 -1
  34. package/dist/foundations/community/repositories/community.repository.js +2 -1
  35. package/dist/foundations/community/repositories/community.repository.js.map +1 -1
  36. package/dist/foundations/company/dtos/company.post.dto.d.ts +3 -3
  37. package/dist/foundations/company/dtos/company.post.dto.d.ts.map +1 -1
  38. package/dist/foundations/company/dtos/company.post.dto.js +3 -3
  39. package/dist/foundations/company/dtos/company.post.dto.js.map +1 -1
  40. package/dist/foundations/company/dtos/company.put.dto.d.ts +3 -3
  41. package/dist/foundations/company/dtos/company.put.dto.d.ts.map +1 -1
  42. package/dist/foundations/company/dtos/company.put.dto.js +3 -3
  43. package/dist/foundations/company/dtos/company.put.dto.js.map +1 -1
  44. package/dist/foundations/company/entities/company.d.ts +3 -3
  45. package/dist/foundations/company/entities/company.d.ts.map +1 -1
  46. package/dist/foundations/company/entities/company.js +3 -3
  47. package/dist/foundations/company/entities/company.js.map +1 -1
  48. package/dist/foundations/company/repositories/company.repository.d.ts +31 -24
  49. package/dist/foundations/company/repositories/company.repository.d.ts.map +1 -1
  50. package/dist/foundations/company/repositories/company.repository.js +66 -77
  51. package/dist/foundations/company/repositories/company.repository.js.map +1 -1
  52. package/dist/foundations/company/services/company.service.d.ts +8 -9
  53. package/dist/foundations/company/services/company.service.d.ts.map +1 -1
  54. package/dist/foundations/company/services/company.service.js +29 -32
  55. package/dist/foundations/company/services/company.service.js.map +1 -1
  56. package/dist/foundations/notification/repositories/notification.repository.d.ts.map +1 -1
  57. package/dist/foundations/notification/repositories/notification.repository.js +2 -1
  58. package/dist/foundations/notification/repositories/notification.repository.js.map +1 -1
  59. package/dist/foundations/referral/services/referral.service.js +4 -4
  60. package/dist/foundations/referral/services/referral.service.js.map +1 -1
  61. package/dist/foundations/stripe-customer/repositories/stripe-customer.repository.js +1 -1
  62. package/dist/foundations/stripe-customer/repositories/stripe-customer.repository.js.map +1 -1
  63. package/dist/foundations/stripe-subscription/repositories/stripe-subscription.repository.d.ts.map +1 -1
  64. package/dist/foundations/stripe-subscription/repositories/stripe-subscription.repository.js +3 -2
  65. package/dist/foundations/stripe-subscription/repositories/stripe-subscription.repository.js.map +1 -1
  66. package/dist/foundations/stripe-subscription/services/token-allocation.service.d.ts +1 -1
  67. package/dist/foundations/stripe-subscription/services/token-allocation.service.js +10 -10
  68. package/dist/foundations/stripe-subscription/services/token-allocation.service.js.map +1 -1
  69. package/dist/foundations/stripe-trial/services/trial.service.js +2 -2
  70. package/dist/foundations/stripe-trial/services/trial.service.js.map +1 -1
  71. package/dist/foundations/stripe-webhook/processors/stripe-webhook.processor.js +2 -2
  72. package/dist/foundations/stripe-webhook/processors/stripe-webhook.processor.js.map +1 -1
  73. package/dist/foundations/tokenusage/controllers/tokenusage.admin.controller.d.ts +27 -0
  74. package/dist/foundations/tokenusage/controllers/tokenusage.admin.controller.d.ts.map +1 -0
  75. package/dist/foundations/tokenusage/controllers/tokenusage.admin.controller.js +136 -0
  76. package/dist/foundations/tokenusage/controllers/tokenusage.admin.controller.js.map +1 -0
  77. package/dist/foundations/tokenusage/entities/tokenusage-admin-breakdown.d.ts +26 -0
  78. package/dist/foundations/tokenusage/entities/tokenusage-admin-breakdown.d.ts.map +1 -0
  79. package/dist/foundations/tokenusage/entities/tokenusage-admin-breakdown.js +24 -0
  80. package/dist/foundations/tokenusage/entities/tokenusage-admin-breakdown.js.map +1 -0
  81. package/dist/foundations/tokenusage/entities/tokenusage-admin-breakdown.meta.d.ts +3 -0
  82. package/dist/foundations/tokenusage/entities/tokenusage-admin-breakdown.meta.d.ts.map +1 -0
  83. package/dist/foundations/tokenusage/entities/tokenusage-admin-breakdown.meta.js +10 -0
  84. package/dist/foundations/tokenusage/entities/tokenusage-admin-breakdown.meta.js.map +1 -0
  85. package/dist/foundations/tokenusage/entities/tokenusage-admin-summary.d.ts +24 -0
  86. package/dist/foundations/tokenusage/entities/tokenusage-admin-summary.d.ts.map +1 -0
  87. package/dist/foundations/tokenusage/entities/tokenusage-admin-summary.js +21 -0
  88. package/dist/foundations/tokenusage/entities/tokenusage-admin-summary.js.map +1 -0
  89. package/dist/foundations/tokenusage/entities/tokenusage-admin-summary.meta.d.ts +3 -0
  90. package/dist/foundations/tokenusage/entities/tokenusage-admin-summary.meta.d.ts.map +1 -0
  91. package/dist/foundations/tokenusage/entities/tokenusage-admin-summary.meta.js +10 -0
  92. package/dist/foundations/tokenusage/entities/tokenusage-admin-summary.meta.js.map +1 -0
  93. package/dist/foundations/tokenusage/entities/tokenusage-admin-timeline.d.ts +22 -0
  94. package/dist/foundations/tokenusage/entities/tokenusage-admin-timeline.d.ts.map +1 -0
  95. package/dist/foundations/tokenusage/entities/tokenusage-admin-timeline.js +21 -0
  96. package/dist/foundations/tokenusage/entities/tokenusage-admin-timeline.js.map +1 -0
  97. package/dist/foundations/tokenusage/entities/tokenusage-admin-timeline.meta.d.ts +3 -0
  98. package/dist/foundations/tokenusage/entities/tokenusage-admin-timeline.meta.d.ts.map +1 -0
  99. package/dist/foundations/tokenusage/entities/tokenusage-admin-timeline.meta.js +10 -0
  100. package/dist/foundations/tokenusage/entities/tokenusage-admin-timeline.meta.js.map +1 -0
  101. package/dist/foundations/tokenusage/entities/tokenusage.d.ts +1 -0
  102. package/dist/foundations/tokenusage/entities/tokenusage.d.ts.map +1 -1
  103. package/dist/foundations/tokenusage/entities/tokenusage.js +4 -0
  104. package/dist/foundations/tokenusage/entities/tokenusage.js.map +1 -1
  105. package/dist/foundations/tokenusage/enums/tokenusage.type.d.ts +2 -1
  106. package/dist/foundations/tokenusage/enums/tokenusage.type.d.ts.map +1 -1
  107. package/dist/foundations/tokenusage/enums/tokenusage.type.js +1 -0
  108. package/dist/foundations/tokenusage/enums/tokenusage.type.js.map +1 -1
  109. package/dist/foundations/tokenusage/events/tokenusage.events.d.ts +2 -0
  110. package/dist/foundations/tokenusage/events/tokenusage.events.d.ts.map +1 -1
  111. package/dist/foundations/tokenusage/index.d.ts +10 -1
  112. package/dist/foundations/tokenusage/index.d.ts.map +1 -1
  113. package/dist/foundations/tokenusage/index.js +19 -1
  114. package/dist/foundations/tokenusage/index.js.map +1 -1
  115. package/dist/foundations/tokenusage/repositories/tokenusage.admin.repository.d.ts +73 -0
  116. package/dist/foundations/tokenusage/repositories/tokenusage.admin.repository.d.ts.map +1 -0
  117. package/dist/foundations/tokenusage/repositories/tokenusage.admin.repository.js +342 -0
  118. package/dist/foundations/tokenusage/repositories/tokenusage.admin.repository.js.map +1 -0
  119. package/dist/foundations/tokenusage/repositories/tokenusage.repository.d.ts +78 -3
  120. package/dist/foundations/tokenusage/repositories/tokenusage.repository.d.ts.map +1 -1
  121. package/dist/foundations/tokenusage/repositories/tokenusage.repository.js +155 -5
  122. package/dist/foundations/tokenusage/repositories/tokenusage.repository.js.map +1 -1
  123. package/dist/foundations/tokenusage/services/tokenusage.admin.service.d.ts +50 -0
  124. package/dist/foundations/tokenusage/services/tokenusage.admin.service.d.ts.map +1 -0
  125. package/dist/foundations/tokenusage/services/tokenusage.admin.service.js +84 -0
  126. package/dist/foundations/tokenusage/services/tokenusage.admin.service.js.map +1 -0
  127. package/dist/foundations/tokenusage/services/tokenusage.service.d.ts +37 -1
  128. package/dist/foundations/tokenusage/services/tokenusage.service.d.ts.map +1 -1
  129. package/dist/foundations/tokenusage/services/tokenusage.service.js +56 -5
  130. package/dist/foundations/tokenusage/services/tokenusage.service.js.map +1 -1
  131. package/dist/foundations/tokenusage/tokenusage.module.d.ts.map +1 -1
  132. package/dist/foundations/tokenusage/tokenusage.module.js +21 -3
  133. package/dist/foundations/tokenusage/tokenusage.module.js.map +1 -1
  134. package/package.json +2 -1
@@ -27,17 +27,41 @@ const tokenusage_meta_1 = require("../../tokenusage/entities/tokenusage.meta");
27
27
  * never by a registry lookup: Nest constructs providers long before
28
28
  * `onModuleInit`, where models are registered.
29
29
  *
30
- * `onModuleInit` is INHERITED rather than declared: `AbstractRepository.onModuleInit`
31
- * emits `CREATE CONSTRAINT tokenusage_id IF NOT EXISTS FOR (tokenusage:TokenUsage)
30
+ * `onModuleInit` DELEGATES to `AbstractRepository.onModuleInit` first, which emits
31
+ * `CREATE CONSTRAINT tokenusage_id IF NOT EXISTS FOR (tokenusage:TokenUsage)
32
32
  * REQUIRE tokenusage.id IS UNIQUE` from `descriptor.constraints` — byte-identical to
33
33
  * the constraint this repository used to declare by hand — plus the FULLTEXT index
34
- * derived from the descriptor's string fields.
34
+ * derived from the descriptor's string fields. It then adds the one index the
35
+ * descriptor cannot express; see the override below.
35
36
  */
36
37
  let TokenUsageRepository = class TokenUsageRepository extends abstract_repository_1.AbstractRepository {
37
38
  constructor(neo4j, securityService, clsService) {
38
39
  super(neo4j, securityService, clsService);
39
40
  this.descriptor = tokenusage_1.TokenUsageDescriptor;
40
41
  }
42
+ /**
43
+ * Adds the range index every date-filtered finder here depends on —
44
+ * findByCompany, findAggregatedByDateAndType, findUsageSummary, and the
45
+ * cross-tenant admin queries in TokenUsageAdminRepository. Without it each of
46
+ * them scans the whole :TokenUsage label, which is the fastest-growing label
47
+ * in the database.
48
+ *
49
+ * There is no declarative way to express a non-FULLTEXT index via
50
+ * defineEntity(): EntityDescriptor.indexes is hard-coded to the string-field
51
+ * fulltext index, and AbstractRepository.onModuleInit only acts on
52
+ * type === "FULLTEXT". Hence the explicit override — same pattern, and same
53
+ * stated reason, as UserActivityRepository.
54
+ *
55
+ * super.onModuleInit() MUST be called first: it creates the descriptor-derived
56
+ * id constraint and fulltext index. Dropping it would silently remove both.
57
+ */
58
+ async onModuleInit() {
59
+ await super.onModuleInit();
60
+ const { nodeName, labelName } = this.descriptor.model;
61
+ await this.neo4j.writeOne({
62
+ query: `CREATE INDEX ${nodeName}_createdAt IF NOT EXISTS FOR (${nodeName}:${labelName}) ON (${nodeName}.createdAt)`,
63
+ });
64
+ }
41
65
  /**
42
66
  * Custom create (KEPT — "non-standard relationships" rule): USED_FOR's target is
43
67
  * polymorphic (any entity label — Content, Chunk, Conversation, ...), which the
@@ -59,7 +83,9 @@ let TokenUsageRepository = class TokenUsageRepository extends abstract_repositor
59
83
  cachedInputTokens: params.cachedInputTokens ?? 0,
60
84
  relationshipId: params.relationshipId,
61
85
  cost: params.cost ?? 0,
86
+ credits: params.credits ?? 0,
62
87
  };
88
+ // Guarded: initQuery() binds this variable only when the id is in CLS; an unbound CREATE target creates an orphan node.
63
89
  query.query += `
64
90
  CREATE (${tokenusage_meta_1.tokenUsageMeta.nodeName}:${tokenusage_meta_1.tokenUsageMeta.labelName} {
65
91
  id: $id,
@@ -68,17 +94,141 @@ let TokenUsageRepository = class TokenUsageRepository extends abstract_repositor
68
94
  outputTokens: $outputTokens,
69
95
  cachedInputTokens: $cachedInputTokens,
70
96
  cost: $cost,
97
+ credits: $credits,
71
98
  createdAt: datetime(),
72
99
  updatedAt: datetime()
73
100
  })
74
- CREATE (${tokenusage_meta_1.tokenUsageMeta.nodeName})-[:BELONGS_TO]->(company)
75
- CREATE (${tokenusage_meta_1.tokenUsageMeta.nodeName})-[:TRIGGERED_BY]->(currentUser)
101
+ ${query.queryParams.companyId ? `CREATE (${tokenusage_meta_1.tokenUsageMeta.nodeName})-[:BELONGS_TO]->(company)` : ``}
102
+ ${query.queryParams.currentUserId ? `CREATE (${tokenusage_meta_1.tokenUsageMeta.nodeName})-[:TRIGGERED_BY]->(currentUser)` : ``}
76
103
  WITH ${tokenusage_meta_1.tokenUsageMeta.nodeName}
77
104
  MATCH (relEntity:${params.relationshipType} {id: $relationshipId})
78
105
  CREATE (${tokenusage_meta_1.tokenUsageMeta.nodeName})-[:USED_FOR]->(relEntity)
79
106
  `;
80
107
  await this.neo4j.writeOne(query);
81
108
  }
109
+ /**
110
+ * Custom list (KEPT — date-range + tokenUsageType filtering is not expressible via the
111
+ * inherited descriptor-driven find()). Reuses buildDefaultMatch()/buildReturnStatement()
112
+ * for company scoping and security consistency.
113
+ */
114
+ async findByCompany(params) {
115
+ const query = this.neo4j.initQuery({ serialiser: tokenusage_1.TokenUsageDescriptor.model, cursor: params.cursor });
116
+ if (params.startDate) {
117
+ query.queryParams = { ...query.queryParams, startDate: params.startDate };
118
+ }
119
+ if (params.endDate) {
120
+ query.queryParams = { ...query.queryParams, endDate: params.endDate };
121
+ }
122
+ if (params.tokenUsageType) {
123
+ query.queryParams = { ...query.queryParams, tokenUsageType: params.tokenUsageType };
124
+ }
125
+ query.query += `
126
+ ${this.buildDefaultMatch()}
127
+ ${this.securityService.userHasAccess({ validator: () => this.buildUserHasAccess() })}
128
+ ${params.startDate ? `WHERE ${tokenusage_meta_1.tokenUsageMeta.nodeName}.createdAt >= datetime($startDate)` : ""}
129
+ ${params.endDate ? `${params.startDate ? "AND" : "WHERE"} ${tokenusage_meta_1.tokenUsageMeta.nodeName}.createdAt <= datetime($endDate)` : ""}
130
+ ${params.tokenUsageType ? `${params.startDate || params.endDate ? "AND" : "WHERE"} ${tokenusage_meta_1.tokenUsageMeta.nodeName}.tokenUsageType = $tokenUsageType` : ""}
131
+
132
+ ORDER BY ${tokenusage_meta_1.tokenUsageMeta.nodeName}.createdAt DESC
133
+ {CURSOR}
134
+
135
+ ${this.buildReturnStatement()}
136
+ `;
137
+ return this.neo4j.readMany(query);
138
+ }
139
+ /**
140
+ * Aggregation query (KEPT — "aggregations" rule): returns grouped totals, not
141
+ * TokenUsage entities, so it intentionally bypasses readMany()/the serialiser — there
142
+ * is nothing to map onto the entity type.
143
+ */
144
+ async findAggregatedByDateAndType(params) {
145
+ const query = this.neo4j.initQuery();
146
+ if (params.startDate) {
147
+ query.queryParams = { ...query.queryParams, startDate: params.startDate };
148
+ }
149
+ if (params.endDate) {
150
+ query.queryParams = { ...query.queryParams, endDate: params.endDate };
151
+ }
152
+ query.query += `
153
+ ${this.buildDefaultMatch()}
154
+ ${params.startDate ? `WHERE ${tokenusage_meta_1.tokenUsageMeta.nodeName}.createdAt >= datetime($startDate)` : ""}
155
+ ${params.endDate ? `${params.startDate ? "AND" : "WHERE"} ${tokenusage_meta_1.tokenUsageMeta.nodeName}.createdAt <= datetime($endDate)` : ""}
156
+
157
+ WITH date(${tokenusage_meta_1.tokenUsageMeta.nodeName}.createdAt) as usageDate,
158
+ ${tokenusage_meta_1.tokenUsageMeta.nodeName}.tokenUsageType as usageType,
159
+ ${tokenusage_meta_1.tokenUsageMeta.nodeName}
160
+
161
+ RETURN toString(usageDate) as date,
162
+ usageType as tokenUsageType,
163
+ round(sum(toFloat(${tokenusage_meta_1.tokenUsageMeta.nodeName}.credits)), 2) as totalCredits,
164
+ sum(toInteger(${tokenusage_meta_1.tokenUsageMeta.nodeName}.inputTokens)) as totalInputTokens,
165
+ sum(toInteger(${tokenusage_meta_1.tokenUsageMeta.nodeName}.outputTokens)) as totalOutputTokens,
166
+ sum(toFloat(${tokenusage_meta_1.tokenUsageMeta.nodeName}.cost)) as totalCost,
167
+ count(${tokenusage_meta_1.tokenUsageMeta.nodeName}) as count
168
+ ORDER BY date DESC, tokenUsageType
169
+ `;
170
+ const result = await this.neo4j.read(query.query, query.queryParams); // nja-lint-ignore: buildDefaultMatch()-scoped scalar aggregation — non-entity shape
171
+ return result.records.map((record) => ({
172
+ // nja-lint-ignore: aggregation rows, not entity nodes
173
+ date: record.get("date"),
174
+ tokenUsageType: record.get("tokenUsageType"),
175
+ totalCredits: this.toNumber(record.get("totalCredits")),
176
+ totalInputTokens: this.toNumber(record.get("totalInputTokens")),
177
+ totalOutputTokens: this.toNumber(record.get("totalOutputTokens")),
178
+ totalCost: this.toNumber(record.get("totalCost")),
179
+ count: this.toNumber(record.get("count")),
180
+ }));
181
+ }
182
+ /**
183
+ * Aggregation query (KEPT — see findAggregatedByDateAndType above), single-row totals.
184
+ */
185
+ async findUsageSummary(params) {
186
+ const query = this.neo4j.initQuery();
187
+ if (params.startDate) {
188
+ query.queryParams = { ...query.queryParams, startDate: params.startDate };
189
+ }
190
+ if (params.endDate) {
191
+ query.queryParams = { ...query.queryParams, endDate: params.endDate };
192
+ }
193
+ query.query += `
194
+ ${this.buildDefaultMatch()}
195
+ ${params.startDate ? `WHERE ${tokenusage_meta_1.tokenUsageMeta.nodeName}.createdAt >= datetime($startDate)` : ""}
196
+ ${params.endDate ? `${params.startDate ? "AND" : "WHERE"} ${tokenusage_meta_1.tokenUsageMeta.nodeName}.createdAt <= datetime($endDate)` : ""}
197
+
198
+ RETURN round(sum(toFloat(${tokenusage_meta_1.tokenUsageMeta.nodeName}.credits)), 2) as totalCredits,
199
+ sum(toInteger(${tokenusage_meta_1.tokenUsageMeta.nodeName}.inputTokens)) as totalInputTokens,
200
+ sum(toInteger(${tokenusage_meta_1.tokenUsageMeta.nodeName}.outputTokens)) as totalOutputTokens,
201
+ sum(toFloat(${tokenusage_meta_1.tokenUsageMeta.nodeName}.cost)) as totalCost,
202
+ count(${tokenusage_meta_1.tokenUsageMeta.nodeName}) as count
203
+ `;
204
+ const result = await this.neo4j.read(query.query, query.queryParams); // nja-lint-ignore: buildDefaultMatch()-scoped scalar aggregation — non-entity shape
205
+ if (result.records.length === 0) {
206
+ return {
207
+ totalCredits: 0,
208
+ totalInputTokens: 0,
209
+ totalOutputTokens: 0,
210
+ totalCost: 0,
211
+ count: 0,
212
+ };
213
+ }
214
+ const record = result.records[0];
215
+ return {
216
+ totalCredits: this.toNumber(record.get("totalCredits")),
217
+ totalInputTokens: this.toNumber(record.get("totalInputTokens")),
218
+ totalOutputTokens: this.toNumber(record.get("totalOutputTokens")),
219
+ totalCost: this.toNumber(record.get("totalCost")),
220
+ count: this.toNumber(record.get("count")),
221
+ };
222
+ }
223
+ toNumber(value) {
224
+ if (value === null || value === undefined)
225
+ return 0;
226
+ if (typeof value === "number")
227
+ return value;
228
+ if (typeof value.toNumber === "function")
229
+ return value.toNumber();
230
+ return Number(value) || 0;
231
+ }
82
232
  };
83
233
  exports.TokenUsageRepository = TokenUsageRepository;
84
234
  exports.TokenUsageRepository = TokenUsageRepository = __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"tokenusage.repository.js","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/repositories/tokenusage.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,2CAAwC;AACxC,2FAAuF;AACvF,8EAA0E;AAC1E,uFAAmF;AACnF,qEAAwF;AACxF,+EAA2E;AAE3E;;;;;;;;;;;;;;;GAeG;AAEI,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,wCAAyE;IAGjH,YAAY,KAAmB,EAAE,eAAgC,EAAE,UAAsB;QACvF,KAAK,CAAC,KAAK,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;QAHzB,eAAU,GAAG,iCAAoB,CAAC;IAIrD,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,MAAM,CAAC,MASZ;QACC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QAErC,KAAK,CAAC,WAAW,GAAG;YAClB,GAAG,KAAK,CAAC,WAAW;YACpB,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,IAAI,CAAC;YAChD,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC;SACvB,CAAC;QAEF,KAAK,CAAC,KAAK,IAAI;gBACH,gCAAc,CAAC,QAAQ,IAAI,gCAAc,CAAC,SAAS;;;;;;;;;;gBAUnD,gCAAc,CAAC,QAAQ;gBACvB,gCAAc,CAAC,QAAQ;aAC1B,gCAAc,CAAC,QAAQ;yBACX,MAAM,CAAC,gBAAgB;gBAChC,gCAAc,CAAC,QAAQ;KAClC,CAAC;QAEF,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;CACF,CAAA;AA5DY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,mBAAU,GAAE;qCAIQ,4BAAY,EAAmB,kCAAe,EAAc,uBAAU;GAH9E,oBAAoB,CA4DhC"}
1
+ {"version":3,"file":"tokenusage.repository.js","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/repositories/tokenusage.repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import { ClsService } from "nestjs-cls";
2
+ import { JsonApiService } from "../../../core/jsonapi/services/jsonapi.service";
3
+ import { AbstractService } from "../../../core/neo4j/abstracts/abstract.service";
4
+ import { TokenUsage, TokenUsageDescriptor } from "../entities/tokenusage";
5
+ import { TokenUsageAdminRepository } from "../repositories/tokenusage.admin.repository";
6
+ /**
7
+ * Serialises the cross-tenant reporting rollups as JSON:API documents.
8
+ *
9
+ * Extends AbstractService with the same generics, descriptor and super()
10
+ * argument order as its sibling TokenUsageService in this folder, so both
11
+ * services in the tokenusage foundation are wired identically. The inherited
12
+ * generic CRUD (find / findById / create / put / patch / delete) is not reachable
13
+ * from any route on TokenUsageAdminController — the three reporting endpoints are
14
+ * the whole surface — but is available to a consuming app that mounts its own
15
+ * controller, exactly as the docblock on TokenUsageService already notes.
16
+ *
17
+ * `descriptor` and the inherited `model` are the TokenUsage entity: that is what
18
+ * the repository reads and what the base class needs to be coherent. The three
19
+ * methods below deliberately serialise with the AGGREGATE descriptors' models
20
+ * instead, because their return shapes are rollups, not TokenUsage nodes.
21
+ *
22
+ * JSON:API documents are built exclusively by the framework — nothing here
23
+ * hand-assembles a { data: { type, attributes } } object.
24
+ */
25
+ export declare class TokenUsageAdminService extends AbstractService<TokenUsage, typeof TokenUsageDescriptor.relationships> {
26
+ protected readonly tokenUsageAdminRepository: TokenUsageAdminRepository;
27
+ protected readonly descriptor: import("../../..").EntityDescriptor<TokenUsage, {}>;
28
+ constructor(jsonApiService: JsonApiService, tokenUsageAdminRepository: TokenUsageAdminRepository, clsService: ClsService);
29
+ getSummary(params: {
30
+ from: string;
31
+ to: string;
32
+ companyId?: string;
33
+ }): Promise<any>;
34
+ getTimeline(params: {
35
+ from: string;
36
+ to: string;
37
+ granularity: "day" | "week" | "month";
38
+ stackBy: "scope" | "type" | "company";
39
+ companyId?: string;
40
+ }): Promise<any>;
41
+ getBreakdown(params: {
42
+ from: string;
43
+ to: string;
44
+ dimension: "company" | "user" | "operation";
45
+ scope: "customer" | "platform";
46
+ companyId?: string;
47
+ limit: number;
48
+ }): Promise<any>;
49
+ }
50
+ //# sourceMappingURL=tokenusage.admin.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenusage.admin.service.d.ts","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/services/tokenusage.admin.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAI1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,6CAA6C,CAAC;AAExF;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBACa,sBAAuB,SAAQ,eAAe,CAAC,UAAU,EAAE,OAAO,oBAAoB,CAAC,aAAa,CAAC;IAK9G,SAAS,CAAC,QAAQ,CAAC,yBAAyB,EAAE,yBAAyB;IAJzE,SAAS,CAAC,QAAQ,CAAC,UAAU,sDAAwB;gBAGnD,cAAc,EAAE,cAAc,EACX,yBAAyB,EAAE,yBAAyB,EACvE,UAAU,EAAE,UAAU;IAKlB,UAAU,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAUlF,WAAW,CAAC,MAAM,EAAE;QACxB,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,WAAW,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;QACtC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;QACtC,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,OAAO,CAAC,GAAG,CAAC;IAYV,YAAY,CAAC,MAAM,EAAE;QACzB,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,SAAS,EAAE,SAAS,GAAG,MAAM,GAAG,WAAW,CAAC;QAC5C,KAAK,EAAE,UAAU,GAAG,UAAU,CAAC;QAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;KACf,GAAG,OAAO,CAAC,GAAG,CAAC;CAYjB"}
@@ -0,0 +1,84 @@
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.TokenUsageAdminService = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const nestjs_cls_1 = require("nestjs-cls");
15
+ const jsonapi_service_1 = require("../../../core/jsonapi/services/jsonapi.service");
16
+ const abstract_service_1 = require("../../../core/neo4j/abstracts/abstract.service");
17
+ const tokenusage_1 = require("../entities/tokenusage");
18
+ const tokenusage_admin_breakdown_1 = require("../entities/tokenusage-admin-breakdown");
19
+ const tokenusage_admin_summary_1 = require("../entities/tokenusage-admin-summary");
20
+ const tokenusage_admin_timeline_1 = require("../entities/tokenusage-admin-timeline");
21
+ const tokenusage_admin_repository_1 = require("../repositories/tokenusage.admin.repository");
22
+ /**
23
+ * Serialises the cross-tenant reporting rollups as JSON:API documents.
24
+ *
25
+ * Extends AbstractService with the same generics, descriptor and super()
26
+ * argument order as its sibling TokenUsageService in this folder, so both
27
+ * services in the tokenusage foundation are wired identically. The inherited
28
+ * generic CRUD (find / findById / create / put / patch / delete) is not reachable
29
+ * from any route on TokenUsageAdminController — the three reporting endpoints are
30
+ * the whole surface — but is available to a consuming app that mounts its own
31
+ * controller, exactly as the docblock on TokenUsageService already notes.
32
+ *
33
+ * `descriptor` and the inherited `model` are the TokenUsage entity: that is what
34
+ * the repository reads and what the base class needs to be coherent. The three
35
+ * methods below deliberately serialise with the AGGREGATE descriptors' models
36
+ * instead, because their return shapes are rollups, not TokenUsage nodes.
37
+ *
38
+ * JSON:API documents are built exclusively by the framework — nothing here
39
+ * hand-assembles a { data: { type, attributes } } object.
40
+ */
41
+ let TokenUsageAdminService = class TokenUsageAdminService extends abstract_service_1.AbstractService {
42
+ constructor(jsonApiService, tokenUsageAdminRepository, clsService) {
43
+ super(jsonApiService, tokenUsageAdminRepository, clsService, tokenusage_1.TokenUsageDescriptor.model);
44
+ this.tokenUsageAdminRepository = tokenUsageAdminRepository;
45
+ this.descriptor = tokenusage_1.TokenUsageDescriptor;
46
+ }
47
+ async getSummary(params) {
48
+ const rows = await this.tokenUsageAdminRepository.findSummary({
49
+ from: params.from,
50
+ to: params.to,
51
+ companyId: params.companyId,
52
+ });
53
+ return this.jsonApiService.buildList(tokenusage_admin_summary_1.TokenUsageAdminSummaryDescriptor.model, rows);
54
+ }
55
+ async getTimeline(params) {
56
+ const rows = await this.tokenUsageAdminRepository.findTimeline({
57
+ from: params.from,
58
+ to: params.to,
59
+ granularity: params.granularity,
60
+ stackBy: params.stackBy,
61
+ companyId: params.companyId,
62
+ });
63
+ return this.jsonApiService.buildList(tokenusage_admin_timeline_1.TokenUsageAdminTimelineDescriptor.model, rows);
64
+ }
65
+ async getBreakdown(params) {
66
+ const rows = await this.tokenUsageAdminRepository.findBreakdown({
67
+ from: params.from,
68
+ to: params.to,
69
+ dimension: params.dimension,
70
+ scope: params.scope,
71
+ companyId: params.companyId,
72
+ limit: params.limit,
73
+ });
74
+ return this.jsonApiService.buildList(tokenusage_admin_breakdown_1.TokenUsageAdminBreakdownDescriptor.model, rows);
75
+ }
76
+ };
77
+ exports.TokenUsageAdminService = TokenUsageAdminService;
78
+ exports.TokenUsageAdminService = TokenUsageAdminService = __decorate([
79
+ (0, common_1.Injectable)(),
80
+ __metadata("design:paramtypes", [jsonapi_service_1.JsonApiService,
81
+ tokenusage_admin_repository_1.TokenUsageAdminRepository,
82
+ nestjs_cls_1.ClsService])
83
+ ], TokenUsageAdminService);
84
+ //# sourceMappingURL=tokenusage.admin.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenusage.admin.service.js","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/services/tokenusage.admin.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,2CAAwC;AACxC,oFAAgF;AAChF,qFAAiF;AACjF,uDAA0E;AAC1E,uFAA4F;AAC5F,mFAAwF;AACxF,qFAA0F;AAC1F,6FAAwF;AAExF;;;;;;;;;;;;;;;;;;GAkBG;AAEI,IAAM,sBAAsB,GAA5B,MAAM,sBAAuB,SAAQ,kCAAsE;IAGhH,YACE,cAA8B,EACX,yBAAoD,EACvE,UAAsB;QAEtB,KAAK,CAAC,cAAc,EAAE,yBAAyB,EAAE,UAAU,EAAE,iCAAoB,CAAC,KAAK,CAAC,CAAC;QAHtE,8BAAyB,GAAzB,yBAAyB,CAA2B;QAJtD,eAAU,GAAG,iCAAoB,CAAC;IAQrD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAwD;QACvE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,WAAW,CAAC;YAC5D,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,2DAAgC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACrF,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAMjB;QACC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,YAAY,CAAC;YAC7D,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,6DAAiC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACtF,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAOlB;QACC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,aAAa,CAAC;YAC9D,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,+DAAkC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACvF,CAAC;CACF,CAAA;AA1DY,wDAAsB;iCAAtB,sBAAsB;IADlC,IAAA,mBAAU,GAAE;qCAKO,gCAAc;QACgB,uDAAyB;QAC3D,uBAAU;GANb,sBAAsB,CA0DlC"}
@@ -7,7 +7,7 @@ import { TokenUsageInterface } from "../../../common/interfaces/token.usage.inte
7
7
  import { JsonApiService } from "../../../core/jsonapi/services/jsonapi.service";
8
8
  import { AbstractService } from "../../../core/neo4j/abstracts/abstract.service";
9
9
  import { TokenUsage, TokenUsageDescriptor } from "../../tokenusage/entities/tokenusage";
10
- import { TokenUsageRepository } from "../../tokenusage/repositories/tokenusage.repository";
10
+ import { TokenUsageAggregated, TokenUsageRepository, TokenUsageSummary } from "../../tokenusage/repositories/tokenusage.repository";
11
11
  import { ModelWeight } from "../../../core/llm/enums/model.weight";
12
12
  /**
13
13
  * TokenUsage service.
@@ -49,6 +49,12 @@ export declare class TokenUsageService extends AbstractService<TokenUsage, typeo
49
49
  useVisionCosts?: boolean;
50
50
  modelWeight?: ModelWeight;
51
51
  }): number;
52
+ /**
53
+ * Persists one usage record and converts its monetary cost into billing
54
+ * credits: `credits = max(minCreditsPerRecord, round2(cost / creditCost))`.
55
+ * `creditCost` absent or 0 disables credits entirely (records store 0 and no
56
+ * balance is deducted), so consumers without a `credits` config are unaffected.
57
+ */
52
58
  recordTokenUsage(params: {
53
59
  tokens: TokenUsageInterface;
54
60
  type: string;
@@ -56,6 +62,36 @@ export declare class TokenUsageService extends AbstractService<TokenUsage, typeo
56
62
  relationshipType: string;
57
63
  useVisionCosts?: boolean;
58
64
  modelWeight?: ModelWeight;
65
+ /** When false the per-record credits floor (`minCreditsPerRecord`) is skipped — sub-cent calls (embeddings) must not be floored. Defaults to true. */
66
+ applyMinimum?: boolean;
67
+ /** Pre-computed cost in euros; when provided `computeCost` is skipped (embeddings: estimated tokens × the embedder rate). */
68
+ costOverride?: number;
59
69
  }): Promise<void>;
70
+ /**
71
+ * KEPT (custom filtering not covered by inherited find()): date-range + tokenUsageType
72
+ * filtering. Backs GET /tokenusages in consuming apps.
73
+ */
74
+ findByCompany(params: {
75
+ query: any;
76
+ startDate?: string;
77
+ endDate?: string;
78
+ tokenUsageType?: string;
79
+ }): Promise<any>;
80
+ /**
81
+ * KEPT (raw aggregation, not JSON:API entities — inherited find()/findById() can't
82
+ * produce this shape). Backs GET /tokenusages/aggregated in consuming apps.
83
+ */
84
+ getUsageByDateAndType(params: {
85
+ startDate?: string;
86
+ endDate?: string;
87
+ }): Promise<TokenUsageAggregated[]>;
88
+ /**
89
+ * KEPT (raw aggregation — see getUsageByDateAndType above). Backs GET
90
+ * /tokenusages/summary in consuming apps.
91
+ */
92
+ getUsageSummary(params: {
93
+ startDate?: string;
94
+ endDate?: string;
95
+ }): Promise<TokenUsageSummary>;
60
96
  }
61
97
  //# sourceMappingURL=tokenusage.service.d.ts.map
@@ -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,EAAE,MAAM,4BAA4B,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kDAAkD,CAAC;AACvF,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,EAAE,oBAAoB,EAAE,MAAM,qDAAqD,CAAC;AAC3F,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;IAY3G,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;KAC3B,GAAG,OAAO,CAAC,IAAI,CAAC;CAiClB"}
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;;;;;OAKG;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"}
@@ -16,6 +16,7 @@ const config_1 = require("@nestjs/config");
16
16
  const event_emitter_1 = require("@nestjs/event-emitter");
17
17
  const crypto_1 = require("crypto");
18
18
  const nestjs_cls_1 = require("nestjs-cls");
19
+ const jsonapi_paginator_1 = require("../../../core/jsonapi/serialisers/jsonapi.paginator");
19
20
  const jsonapi_service_1 = require("../../../core/jsonapi/services/jsonapi.service");
20
21
  const abstract_service_1 = require("../../../core/neo4j/abstracts/abstract.service");
21
22
  const tokenusage_1 = require("../../tokenusage/entities/tokenusage");
@@ -81,12 +82,26 @@ let TokenUsageService = TokenUsageService_1 = class TokenUsageService extends ab
81
82
  const cost = uncachedInput * inputRate + cached * cachedRate + params.tokens.output * outputRate;
82
83
  return cost / 1_000_000;
83
84
  }
85
+ /**
86
+ * Persists one usage record and converts its monetary cost into billing
87
+ * credits: `credits = max(minCreditsPerRecord, round2(cost / creditCost))`.
88
+ * `creditCost` absent or 0 disables credits entirely (records store 0 and no
89
+ * balance is deducted), so consumers without a `credits` config are unaffected.
90
+ */
84
91
  async recordTokenUsage(params) {
85
- const cost = this.computeCost({
86
- tokens: params.tokens,
87
- useVisionCosts: params.useVisionCosts,
88
- modelWeight: params.modelWeight,
89
- });
92
+ const cost = params.costOverride ??
93
+ this.computeCost({
94
+ tokens: params.tokens,
95
+ useVisionCosts: params.useVisionCosts,
96
+ modelWeight: params.modelWeight,
97
+ });
98
+ const creditsConfig = this.configService.get("credits");
99
+ let credits = 0;
100
+ if (creditsConfig && creditsConfig.creditCost > 0) {
101
+ credits = Math.round((cost / creditsConfig.creditCost) * 100) / 100;
102
+ if (params.applyMinimum !== false)
103
+ credits = Math.max(creditsConfig.minCreditsPerRecord, credits);
104
+ }
90
105
  await this.tokenUsageRepository.create({
91
106
  id: (0, crypto_1.randomUUID)(),
92
107
  tokenUsageType: params.type,
@@ -94,6 +109,7 @@ let TokenUsageService = TokenUsageService_1 = class TokenUsageService extends ab
94
109
  outputTokens: params.tokens.output,
95
110
  cachedInputTokens: params.tokens.cached ?? 0,
96
111
  cost: cost,
112
+ credits: credits,
97
113
  relationshipId: params.relationshipId,
98
114
  relationshipType: params.relationshipType,
99
115
  });
@@ -104,6 +120,8 @@ let TokenUsageService = TokenUsageService_1 = class TokenUsageService extends ab
104
120
  const payload = {
105
121
  input: params.tokens.input,
106
122
  output: params.tokens.output,
123
+ cost: cost,
124
+ credits: credits,
107
125
  };
108
126
  this.eventEmitter.emit(tokenusage_events_1.TOKEN_USAGE_RECORDED_EVENT, payload);
109
127
  }
@@ -111,6 +129,39 @@ let TokenUsageService = TokenUsageService_1 = class TokenUsageService extends ab
111
129
  this.logger.warn(`Failed to emit ${tokenusage_events_1.TOKEN_USAGE_RECORDED_EVENT}: ${error instanceof Error ? error.message : String(error)}`);
112
130
  }
113
131
  }
132
+ /**
133
+ * KEPT (custom filtering not covered by inherited find()): date-range + tokenUsageType
134
+ * filtering. Backs GET /tokenusages in consuming apps.
135
+ */
136
+ async findByCompany(params) {
137
+ const paginator = new jsonapi_paginator_1.JsonApiPaginator(params.query);
138
+ return this.jsonApiService.buildList(tokenusage_1.TokenUsageDescriptor.model, await this.tokenUsageRepository.findByCompany({
139
+ startDate: params.startDate,
140
+ endDate: params.endDate,
141
+ tokenUsageType: params.tokenUsageType,
142
+ cursor: paginator.generateCursor(),
143
+ }), paginator);
144
+ }
145
+ /**
146
+ * KEPT (raw aggregation, not JSON:API entities — inherited find()/findById() can't
147
+ * produce this shape). Backs GET /tokenusages/aggregated in consuming apps.
148
+ */
149
+ async getUsageByDateAndType(params) {
150
+ return this.tokenUsageRepository.findAggregatedByDateAndType({
151
+ startDate: params.startDate,
152
+ endDate: params.endDate,
153
+ });
154
+ }
155
+ /**
156
+ * KEPT (raw aggregation — see getUsageByDateAndType above). Backs GET
157
+ * /tokenusages/summary in consuming apps.
158
+ */
159
+ async getUsageSummary(params) {
160
+ return this.tokenUsageRepository.findUsageSummary({
161
+ startDate: params.startDate,
162
+ endDate: params.endDate,
163
+ });
164
+ }
114
165
  };
115
166
  exports.TokenUsageService = TokenUsageService;
116
167
  exports.TokenUsageService = TokenUsageService = TokenUsageService_1 = __decorate([
@@ -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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tokenusage.module.d.ts","sourceRoot":"","sources":["../../../src/foundations/tokenusage/tokenusage.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAMtD,qBAMa,gBAAiB,YAAW,YAAY;IACnD,YAAY;CAGb"}
1
+ {"version":3,"file":"tokenusage.module.d.ts","sourceRoot":"","sources":["../../../src/foundations/tokenusage/tokenusage.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAYtD,qBAea,gBAAiB,YAAW,YAAY;IACnD,YAAY;CAMb"}
@@ -9,20 +9,38 @@ Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.TokenUsageModule = void 0;
10
10
  const common_1 = require("@nestjs/common");
11
11
  const registry_1 = require("../../common/registries/registry");
12
+ const tokenusage_admin_controller_1 = require("./controllers/tokenusage.admin.controller");
12
13
  const tokenusage_1 = require("./entities/tokenusage");
14
+ const tokenusage_admin_breakdown_1 = require("./entities/tokenusage-admin-breakdown");
15
+ const tokenusage_admin_summary_1 = require("./entities/tokenusage-admin-summary");
16
+ const tokenusage_admin_timeline_1 = require("./entities/tokenusage-admin-timeline");
17
+ const tokenusage_admin_repository_1 = require("./repositories/tokenusage.admin.repository");
13
18
  const tokenusage_repository_1 = require("./repositories/tokenusage.repository");
19
+ const tokenusage_admin_service_1 = require("./services/tokenusage.admin.service");
14
20
  const tokenusage_service_1 = require("./services/tokenusage.service");
15
21
  let TokenUsageModule = class TokenUsageModule {
16
22
  onModuleInit() {
17
23
  registry_1.modelRegistry.register(tokenusage_1.TokenUsageDescriptor.model);
24
+ registry_1.modelRegistry.register(tokenusage_admin_summary_1.TokenUsageAdminSummaryDescriptor.model);
25
+ registry_1.modelRegistry.register(tokenusage_admin_timeline_1.TokenUsageAdminTimelineDescriptor.model);
26
+ registry_1.modelRegistry.register(tokenusage_admin_breakdown_1.TokenUsageAdminBreakdownDescriptor.model);
18
27
  }
19
28
  };
20
29
  exports.TokenUsageModule = TokenUsageModule;
21
30
  exports.TokenUsageModule = TokenUsageModule = __decorate([
22
31
  (0, common_1.Module)({
23
- controllers: [],
24
- providers: [tokenusage_1.TokenUsageDescriptor.model.serialiser, tokenusage_repository_1.TokenUsageRepository, tokenusage_service_1.TokenUsageService],
25
- exports: [tokenusage_service_1.TokenUsageService],
32
+ controllers: [tokenusage_admin_controller_1.TokenUsageAdminController],
33
+ providers: [
34
+ tokenusage_1.TokenUsageDescriptor.model.serialiser,
35
+ tokenusage_admin_summary_1.TokenUsageAdminSummaryDescriptor.model.serialiser,
36
+ tokenusage_admin_timeline_1.TokenUsageAdminTimelineDescriptor.model.serialiser,
37
+ tokenusage_admin_breakdown_1.TokenUsageAdminBreakdownDescriptor.model.serialiser,
38
+ tokenusage_repository_1.TokenUsageRepository,
39
+ tokenusage_admin_repository_1.TokenUsageAdminRepository,
40
+ tokenusage_service_1.TokenUsageService,
41
+ tokenusage_admin_service_1.TokenUsageAdminService,
42
+ ],
43
+ exports: [tokenusage_service_1.TokenUsageService, tokenusage_admin_service_1.TokenUsageAdminService],
26
44
  imports: [],
27
45
  })
28
46
  ], TokenUsageModule);
@@ -1 +1 @@
1
- {"version":3,"file":"tokenusage.module.js","sourceRoot":"","sources":["../../../src/foundations/tokenusage/tokenusage.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAsD;AACtD,+DAAiE;AACjE,sDAA6D;AAC7D,gFAA4E;AAC5E,sEAAkE;AAQ3D,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAC3B,YAAY;QACV,wBAAa,CAAC,QAAQ,CAAC,iCAAoB,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC;CACF,CAAA;AAJY,4CAAgB;2BAAhB,gBAAgB;IAN5B,IAAA,eAAM,EAAC;QACN,WAAW,EAAE,EAAE;QACf,SAAS,EAAE,CAAC,iCAAoB,CAAC,KAAK,CAAC,UAAU,EAAE,4CAAoB,EAAE,sCAAiB,CAAC;QAC3F,OAAO,EAAE,CAAC,sCAAiB,CAAC;QAC5B,OAAO,EAAE,EAAE;KACZ,CAAC;GACW,gBAAgB,CAI5B"}
1
+ {"version":3,"file":"tokenusage.module.js","sourceRoot":"","sources":["../../../src/foundations/tokenusage/tokenusage.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAsD;AACtD,+DAAiE;AACjE,2FAAsF;AACtF,sDAA6D;AAC7D,sFAA2F;AAC3F,kFAAuF;AACvF,oFAAyF;AACzF,4FAAuF;AACvF,gFAA4E;AAC5E,kFAA6E;AAC7E,sEAAkE;AAiB3D,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAC3B,YAAY;QACV,wBAAa,CAAC,QAAQ,CAAC,iCAAoB,CAAC,KAAK,CAAC,CAAC;QACnD,wBAAa,CAAC,QAAQ,CAAC,2DAAgC,CAAC,KAAK,CAAC,CAAC;QAC/D,wBAAa,CAAC,QAAQ,CAAC,6DAAiC,CAAC,KAAK,CAAC,CAAC;QAChE,wBAAa,CAAC,QAAQ,CAAC,+DAAkC,CAAC,KAAK,CAAC,CAAC;IACnE,CAAC;CACF,CAAA;AAPY,4CAAgB;2BAAhB,gBAAgB;IAf5B,IAAA,eAAM,EAAC;QACN,WAAW,EAAE,CAAC,uDAAyB,CAAC;QACxC,SAAS,EAAE;YACT,iCAAoB,CAAC,KAAK,CAAC,UAAU;YACrC,2DAAgC,CAAC,KAAK,CAAC,UAAU;YACjD,6DAAiC,CAAC,KAAK,CAAC,UAAU;YAClD,+DAAkC,CAAC,KAAK,CAAC,UAAU;YACnD,4CAAoB;YACpB,uDAAyB;YACzB,sCAAiB;YACjB,iDAAsB;SACvB;QACD,OAAO,EAAE,CAAC,sCAAiB,EAAE,iDAAsB,CAAC;QACpD,OAAO,EAAE,EAAE;KACZ,CAAC;GACW,gBAAgB,CAO5B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@carlonicora/nestjs-neo4jsonapi",
3
- "version": "1.116.0",
3
+ "version": "1.118.0",
4
4
  "description": "NestJS foundation package with JSON:API, Neo4j, Redis, LangChain agents, and common utilities",
5
5
  "author": "Carlo Nicora",
6
6
  "license": "GPL-3.0-or-later",
@@ -107,6 +107,7 @@
107
107
  "gray-matter": "^4.0.3",
108
108
  "handlebars": "^4.7.9",
109
109
  "ioredis": "^5.11.1",
110
+ "js-tiktoken": "^1.0.21",
110
111
  "js-yaml": "^5.2.2",
111
112
  "jszip": "^3.10.1",
112
113
  "langsmith": "^0.8.8",