@carlonicora/nestjs-neo4jsonapi 1.117.0 → 1.119.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 (165) hide show
  1. package/dist/agents/contextualiser/contexts/contextualiser.context.d.ts +30 -0
  2. package/dist/agents/contextualiser/contexts/contextualiser.context.d.ts.map +1 -1
  3. package/dist/agents/contextualiser/contexts/notebook.context.d.ts +10 -0
  4. package/dist/agents/contextualiser/contexts/notebook.context.d.ts.map +1 -1
  5. package/dist/agents/contextualiser/contexts/notebook.context.js +2 -0
  6. package/dist/agents/contextualiser/contexts/notebook.context.js.map +1 -1
  7. package/dist/agents/contextualiser/contextualiser.module.d.ts.map +1 -1
  8. package/dist/agents/contextualiser/contextualiser.module.js +4 -2
  9. package/dist/agents/contextualiser/contextualiser.module.js.map +1 -1
  10. package/dist/agents/contextualiser/interfaces/contextualiser.response.interface.d.ts +2 -4
  11. package/dist/agents/contextualiser/interfaces/contextualiser.response.interface.d.ts.map +1 -1
  12. package/dist/agents/contextualiser/interfaces/retrieval.source.interface.d.ts +38 -0
  13. package/dist/agents/contextualiser/interfaces/retrieval.source.interface.d.ts.map +1 -0
  14. package/dist/agents/contextualiser/interfaces/retrieval.source.interface.js +8 -0
  15. package/dist/agents/contextualiser/interfaces/retrieval.source.interface.js.map +1 -0
  16. package/dist/agents/contextualiser/nodes/chunk.node.service.d.ts +3 -1
  17. package/dist/agents/contextualiser/nodes/chunk.node.service.d.ts.map +1 -1
  18. package/dist/agents/contextualiser/nodes/chunk.node.service.js +12 -2
  19. package/dist/agents/contextualiser/nodes/chunk.node.service.js.map +1 -1
  20. package/dist/agents/contextualiser/nodes/chunk.vector.node.service.d.ts +4 -1
  21. package/dist/agents/contextualiser/nodes/chunk.vector.node.service.d.ts.map +1 -1
  22. package/dist/agents/contextualiser/nodes/chunk.vector.node.service.js +59 -12
  23. package/dist/agents/contextualiser/nodes/chunk.vector.node.service.js.map +1 -1
  24. package/dist/agents/contextualiser/nodes/keyconcepts.node.service.js +1 -1
  25. package/dist/agents/contextualiser/nodes/keyconcepts.node.service.js.map +1 -1
  26. package/dist/agents/contextualiser/services/contextualiser.service.d.ts +11 -1
  27. package/dist/agents/contextualiser/services/contextualiser.service.d.ts.map +1 -1
  28. package/dist/agents/contextualiser/services/contextualiser.service.js +25 -4
  29. package/dist/agents/contextualiser/services/contextualiser.service.js.map +1 -1
  30. package/dist/agents/drift/drift.module.d.ts.map +1 -1
  31. package/dist/agents/drift/drift.module.js +9 -2
  32. package/dist/agents/drift/drift.module.js.map +1 -1
  33. package/dist/agents/graph.creator/interfaces/chunk.analysis.interface.d.ts +3 -0
  34. package/dist/agents/graph.creator/interfaces/chunk.analysis.interface.d.ts.map +1 -1
  35. package/dist/agents/graph.creator/services/graph.creator.service.d.ts +11 -0
  36. package/dist/agents/graph.creator/services/graph.creator.service.d.ts.map +1 -1
  37. package/dist/agents/graph.creator/services/graph.creator.service.js +12 -1
  38. package/dist/agents/graph.creator/services/graph.creator.service.js.map +1 -1
  39. package/dist/agents/index.d.ts +5 -1
  40. package/dist/agents/index.d.ts.map +1 -1
  41. package/dist/agents/index.js +4 -1
  42. package/dist/agents/index.js.map +1 -1
  43. package/dist/agents/prompts/index.d.ts +3 -1
  44. package/dist/agents/prompts/index.d.ts.map +1 -1
  45. package/dist/agents/prompts/index.js +8 -2
  46. package/dist/agents/prompts/index.js.map +1 -1
  47. package/dist/agents/responder/contexts/responder.context.d.ts +102 -0
  48. package/dist/agents/responder/contexts/responder.context.d.ts.map +1 -1
  49. package/dist/agents/responder/contexts/responder.context.js +2 -0
  50. package/dist/agents/responder/contexts/responder.context.js.map +1 -1
  51. package/dist/agents/responder/interfaces/responder.response.interface.d.ts +4 -0
  52. package/dist/agents/responder/interfaces/responder.response.interface.d.ts.map +1 -1
  53. package/dist/agents/responder/interfaces/unified.trace.interface.d.ts +13 -0
  54. package/dist/agents/responder/interfaces/unified.trace.interface.d.ts.map +1 -1
  55. package/dist/agents/responder/nodes/planner.node.service.d.ts +6 -2
  56. package/dist/agents/responder/nodes/planner.node.service.d.ts.map +1 -1
  57. package/dist/agents/responder/nodes/planner.node.service.js +10 -5
  58. package/dist/agents/responder/nodes/planner.node.service.js.map +1 -1
  59. package/dist/agents/responder/nodes/responder.answer.node.service.d.ts +6 -0
  60. package/dist/agents/responder/nodes/responder.answer.node.service.d.ts.map +1 -1
  61. package/dist/agents/responder/nodes/responder.answer.node.service.js +12 -1
  62. package/dist/agents/responder/nodes/responder.answer.node.service.js.map +1 -1
  63. package/dist/agents/responder/responder.module.d.ts.map +1 -1
  64. package/dist/agents/responder/responder.module.js +6 -2
  65. package/dist/agents/responder/responder.module.js.map +1 -1
  66. package/dist/agents/responder/services/responder.service.d.ts +20 -1
  67. package/dist/agents/responder/services/responder.service.d.ts.map +1 -1
  68. package/dist/agents/responder/services/responder.service.js +61 -4
  69. package/dist/agents/responder/services/responder.service.js.map +1 -1
  70. package/dist/agents/summariser/services/summariser.service.d.ts +1 -0
  71. package/dist/agents/summariser/services/summariser.service.d.ts.map +1 -1
  72. package/dist/agents/summariser/services/summariser.service.js +20 -1
  73. package/dist/agents/summariser/services/summariser.service.js.map +1 -1
  74. package/dist/agents/summariser/utils/tldr.sanitizer.d.ts +18 -0
  75. package/dist/agents/summariser/utils/tldr.sanitizer.d.ts.map +1 -0
  76. package/dist/agents/summariser/utils/tldr.sanitizer.js +44 -0
  77. package/dist/agents/summariser/utils/tldr.sanitizer.js.map +1 -0
  78. package/dist/common/helpers/define-entity.d.ts +11 -1
  79. package/dist/common/helpers/define-entity.d.ts.map +1 -1
  80. package/dist/common/helpers/define-entity.js +7 -0
  81. package/dist/common/helpers/define-entity.js.map +1 -1
  82. package/dist/common/interfaces/agents/graph.creator.interface.d.ts +10 -4
  83. package/dist/common/interfaces/agents/graph.creator.interface.d.ts.map +1 -1
  84. package/dist/config/base.config.d.ts +6 -0
  85. package/dist/config/base.config.d.ts.map +1 -1
  86. package/dist/config/base.config.js +2 -0
  87. package/dist/config/base.config.js.map +1 -1
  88. package/dist/config/interfaces/base.config.interface.d.ts +4 -0
  89. package/dist/config/interfaces/base.config.interface.d.ts.map +1 -1
  90. package/dist/config/interfaces/config.prompts.interface.d.ts +1 -0
  91. package/dist/config/interfaces/config.prompts.interface.d.ts.map +1 -1
  92. package/dist/config/interfaces/config.responder.interface.d.ts +21 -0
  93. package/dist/config/interfaces/config.responder.interface.d.ts.map +1 -0
  94. package/dist/config/interfaces/config.responder.interface.js +3 -0
  95. package/dist/config/interfaces/config.responder.interface.js.map +1 -0
  96. package/dist/config/interfaces/config.summariser.interface.d.ts +21 -0
  97. package/dist/config/interfaces/config.summariser.interface.d.ts.map +1 -0
  98. package/dist/config/interfaces/config.summariser.interface.js +3 -0
  99. package/dist/config/interfaces/config.summariser.interface.js.map +1 -0
  100. package/dist/config/interfaces/index.d.ts +2 -0
  101. package/dist/config/interfaces/index.d.ts.map +1 -1
  102. package/dist/config/interfaces/index.js +2 -0
  103. package/dist/config/interfaces/index.js.map +1 -1
  104. package/dist/core/neo4j/abstracts/abstract.repository.d.ts.map +1 -1
  105. package/dist/core/neo4j/abstracts/abstract.repository.js +6 -2
  106. package/dist/core/neo4j/abstracts/abstract.repository.js.map +1 -1
  107. package/dist/foundations/community/repositories/community.repository.d.ts.map +1 -1
  108. package/dist/foundations/community/repositories/community.repository.js +2 -1
  109. package/dist/foundations/community/repositories/community.repository.js.map +1 -1
  110. package/dist/foundations/notification/repositories/notification.repository.d.ts.map +1 -1
  111. package/dist/foundations/notification/repositories/notification.repository.js +2 -1
  112. package/dist/foundations/notification/repositories/notification.repository.js.map +1 -1
  113. package/dist/foundations/stripe-customer/repositories/stripe-customer.repository.js +1 -1
  114. package/dist/foundations/stripe-customer/repositories/stripe-customer.repository.js.map +1 -1
  115. package/dist/foundations/stripe-subscription/repositories/stripe-subscription.repository.d.ts.map +1 -1
  116. package/dist/foundations/stripe-subscription/repositories/stripe-subscription.repository.js +3 -2
  117. package/dist/foundations/stripe-subscription/repositories/stripe-subscription.repository.js.map +1 -1
  118. package/dist/foundations/tokenusage/controllers/tokenusage.admin.controller.d.ts +27 -0
  119. package/dist/foundations/tokenusage/controllers/tokenusage.admin.controller.d.ts.map +1 -0
  120. package/dist/foundations/tokenusage/controllers/tokenusage.admin.controller.js +136 -0
  121. package/dist/foundations/tokenusage/controllers/tokenusage.admin.controller.js.map +1 -0
  122. package/dist/foundations/tokenusage/entities/tokenusage-admin-breakdown.d.ts +26 -0
  123. package/dist/foundations/tokenusage/entities/tokenusage-admin-breakdown.d.ts.map +1 -0
  124. package/dist/foundations/tokenusage/entities/tokenusage-admin-breakdown.js +24 -0
  125. package/dist/foundations/tokenusage/entities/tokenusage-admin-breakdown.js.map +1 -0
  126. package/dist/foundations/tokenusage/entities/tokenusage-admin-breakdown.meta.d.ts +3 -0
  127. package/dist/foundations/tokenusage/entities/tokenusage-admin-breakdown.meta.d.ts.map +1 -0
  128. package/dist/foundations/tokenusage/entities/tokenusage-admin-breakdown.meta.js +10 -0
  129. package/dist/foundations/tokenusage/entities/tokenusage-admin-breakdown.meta.js.map +1 -0
  130. package/dist/foundations/tokenusage/entities/tokenusage-admin-summary.d.ts +24 -0
  131. package/dist/foundations/tokenusage/entities/tokenusage-admin-summary.d.ts.map +1 -0
  132. package/dist/foundations/tokenusage/entities/tokenusage-admin-summary.js +21 -0
  133. package/dist/foundations/tokenusage/entities/tokenusage-admin-summary.js.map +1 -0
  134. package/dist/foundations/tokenusage/entities/tokenusage-admin-summary.meta.d.ts +3 -0
  135. package/dist/foundations/tokenusage/entities/tokenusage-admin-summary.meta.d.ts.map +1 -0
  136. package/dist/foundations/tokenusage/entities/tokenusage-admin-summary.meta.js +10 -0
  137. package/dist/foundations/tokenusage/entities/tokenusage-admin-summary.meta.js.map +1 -0
  138. package/dist/foundations/tokenusage/entities/tokenusage-admin-timeline.d.ts +22 -0
  139. package/dist/foundations/tokenusage/entities/tokenusage-admin-timeline.d.ts.map +1 -0
  140. package/dist/foundations/tokenusage/entities/tokenusage-admin-timeline.js +21 -0
  141. package/dist/foundations/tokenusage/entities/tokenusage-admin-timeline.js.map +1 -0
  142. package/dist/foundations/tokenusage/entities/tokenusage-admin-timeline.meta.d.ts +3 -0
  143. package/dist/foundations/tokenusage/entities/tokenusage-admin-timeline.meta.d.ts.map +1 -0
  144. package/dist/foundations/tokenusage/entities/tokenusage-admin-timeline.meta.js +10 -0
  145. package/dist/foundations/tokenusage/entities/tokenusage-admin-timeline.meta.js.map +1 -0
  146. package/dist/foundations/tokenusage/index.d.ts +9 -0
  147. package/dist/foundations/tokenusage/index.d.ts.map +1 -1
  148. package/dist/foundations/tokenusage/index.js +19 -1
  149. package/dist/foundations/tokenusage/index.js.map +1 -1
  150. package/dist/foundations/tokenusage/repositories/tokenusage.admin.repository.d.ts +73 -0
  151. package/dist/foundations/tokenusage/repositories/tokenusage.admin.repository.d.ts.map +1 -0
  152. package/dist/foundations/tokenusage/repositories/tokenusage.admin.repository.js +342 -0
  153. package/dist/foundations/tokenusage/repositories/tokenusage.admin.repository.js.map +1 -0
  154. package/dist/foundations/tokenusage/repositories/tokenusage.repository.d.ts +21 -3
  155. package/dist/foundations/tokenusage/repositories/tokenusage.repository.d.ts.map +1 -1
  156. package/dist/foundations/tokenusage/repositories/tokenusage.repository.js +30 -5
  157. package/dist/foundations/tokenusage/repositories/tokenusage.repository.js.map +1 -1
  158. package/dist/foundations/tokenusage/services/tokenusage.admin.service.d.ts +50 -0
  159. package/dist/foundations/tokenusage/services/tokenusage.admin.service.d.ts.map +1 -0
  160. package/dist/foundations/tokenusage/services/tokenusage.admin.service.js +84 -0
  161. package/dist/foundations/tokenusage/services/tokenusage.admin.service.js.map +1 -0
  162. package/dist/foundations/tokenusage/tokenusage.module.d.ts.map +1 -1
  163. package/dist/foundations/tokenusage/tokenusage.module.js +21 -3
  164. package/dist/foundations/tokenusage/tokenusage.module.js.map +1 -1
  165. package/package.json +1 -1
@@ -0,0 +1,342 @@
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.TokenUsageAdminRepository = void 0;
13
+ // nja-lint-ignore-file: cross-tenant administrative read repository.
14
+ //
15
+ // Every query here deliberately omits buildDefaultMatch(): that helper scopes to
16
+ // the CALLER's company via CLS, which is exactly wrong for a platform-wide admin
17
+ // dashboard. Access is gated instead by the controller's JwtAuthGuard +
18
+ // @Roles(Administrator) (see tokenusage.admin.controller.ts). Rollup RETURNs are
19
+ // scalar columns, not graph nodes, so readOne()/readMany() cannot map them —
20
+ // entityFactory.createGraphList expects nodes. Same shape and same rationale as
21
+ // apps/api/src/features/administration/platform-kpi/repositories/platform-kpi.read.repository.ts.
22
+ //
23
+ // The architecture gate raises a FILE-LEVEL manual-query-no-company-scope finding
24
+ // on this shape; per-line ignores do not clear it, so this header note is the
25
+ // documented resolution.
26
+ const common_1 = require("@nestjs/common");
27
+ const nestjs_cls_1 = require("nestjs-cls");
28
+ const define_entity_1 = require("../../../common/helpers/define-entity");
29
+ const abstract_repository_1 = require("../../../core/neo4j/abstracts/abstract.repository");
30
+ const neo4j_service_1 = require("../../../core/neo4j/services/neo4j.service");
31
+ const security_service_1 = require("../../../core/security/services/security.service");
32
+ const tokenusage_admin_timeline_1 = require("../entities/tokenusage-admin-timeline");
33
+ const tokenusage_1 = require("../entities/tokenusage");
34
+ const tokenusage_meta_1 = require("../entities/tokenusage.meta");
35
+ const NODE = tokenusage_meta_1.tokenUsageMeta.nodeName; // "tokenusage"
36
+ /**
37
+ * The `date.truncate` units this repository is allowed to emit, keyed by the
38
+ * granularity it accepts. A lookup rather than a raw interpolation of the
39
+ * caller's string: nothing that did not come from this table can ever reach the
40
+ * query text.
41
+ */
42
+ const TRUNCATION_UNITS = {
43
+ week: "week",
44
+ month: "month",
45
+ };
46
+ const toNumber = (v) => {
47
+ if (v === null || v === undefined)
48
+ return 0;
49
+ if (typeof v === "number")
50
+ return v;
51
+ if (typeof v.toNumber === "function")
52
+ return v.toNumber();
53
+ return Number(v) || 0;
54
+ };
55
+ const round = (v, dp) => {
56
+ const f = 10 ** dp;
57
+ return Math.round(v * f) / f;
58
+ };
59
+ /**
60
+ * Cross-tenant reporting queries behind /tokenusages/administration/*.
61
+ *
62
+ * Extends AbstractRepository for the shared Neo4j/security/CLS plumbing and the
63
+ * descriptor typing; none of the inherited finders are used, for the reasons in
64
+ * the file header, and it deliberately does NOT override onModuleInit — the
65
+ * :TokenUsage indexes belong to TokenUsageRepository.
66
+ *
67
+ * EVERY traversal constrains its target label — `->(:Company)`, `->(:User)`.
68
+ * The write bug fixed in tokenusage.repository.ts left 12,237 label-less nodes
69
+ * on exactly these two relationships; an unconstrained match returns them.
70
+ */
71
+ let TokenUsageAdminRepository = class TokenUsageAdminRepository extends abstract_repository_1.AbstractRepository {
72
+ constructor(neo4j, securityService, clsService) {
73
+ super(neo4j, securityService, clsService);
74
+ this.descriptor = tokenusage_1.TokenUsageDescriptor;
75
+ }
76
+ /**
77
+ * Six rows: {customer, platform, total} × {current, previous}. The previous
78
+ * window is the equal-length span immediately preceding `from`, which is what
79
+ * the KPI tiles' deltas are computed against.
80
+ */
81
+ async findSummary(params) {
82
+ const previous = this._previousWindow(params.from, params.to);
83
+ const [current, prior] = await Promise.all([
84
+ this._scopeTotals({ from: params.from, to: params.to, companyId: params.companyId }),
85
+ this._scopeTotals({ from: previous.from, to: previous.to, companyId: params.companyId }),
86
+ ]);
87
+ return [...this._withTotal(current, "current"), ...this._withTotal(prior, "previous")];
88
+ }
89
+ async findTimeline(params) {
90
+ const query = this.neo4j.initQuery();
91
+ query.queryParams = {
92
+ ...query.queryParams,
93
+ from: params.from,
94
+ to: params.to,
95
+ companyId: params.companyId ?? null,
96
+ // Cypher accepts a parameter for date.truncate's unit (verified against
97
+ // DozerDB 5.26), so the granularity is bound rather than interpolated —
98
+ // the "always parameterised, never interpolated" guardrail applies here
99
+ // even though _truncationUnit() already whitelists the value.
100
+ granularity: params.granularity === "day" ? null : this._truncationUnit(params.granularity),
101
+ };
102
+ const bucket = params.granularity === "day" ? `date(${NODE}.createdAt)` : `date.truncate($granularity, ${NODE}.createdAt)`;
103
+ const series = params.stackBy === "type"
104
+ ? `${NODE}.tokenUsageType`
105
+ : params.stackBy === "company"
106
+ ? `coalesce(c.name, 'platform')`
107
+ : `CASE WHEN c IS NULL THEN 'platform' ELSE 'customer' END`;
108
+ query.query += `
109
+ MATCH (${NODE}:${tokenusage_meta_1.tokenUsageMeta.labelName})
110
+ WHERE ${NODE}.createdAt >= datetime($from) AND ${NODE}.createdAt <= datetime($to)
111
+ OPTIONAL MATCH (${NODE})-[:BELONGS_TO]->(c:Company)
112
+ WITH ${NODE}, c
113
+ WHERE $companyId IS NULL OR c.id = $companyId
114
+ WITH ${bucket} AS bucket, ${series} AS series, ${NODE}
115
+ RETURN bucket AS bucket,
116
+ series AS series,
117
+ sum(toFloat(${NODE}.cost)) AS cost,
118
+ sum(toFloat(${NODE}.credits)) AS credits,
119
+ sum(toInteger(${NODE}.inputTokens)) AS tokensIn,
120
+ sum(toInteger(${NODE}.outputTokens)) AS tokensOut,
121
+ sum(toInteger(${NODE}.cachedInputTokens)) AS cached,
122
+ count(${NODE}) AS calls
123
+ ORDER BY bucket ASC, series ASC
124
+ `;
125
+ const result = await this.neo4j.read(query.query, query.queryParams);
126
+ // The driver hands back a native Neo4j Date. convertFieldValue is the
127
+ // framework's single implementation of the descriptor-typed read-path
128
+ // conversion — the same one the auto-generated mapper() uses. Never
129
+ // toString() it in Cypher, never re-format it here. The field type is read
130
+ // off the descriptor so the two can never drift.
131
+ const bucketType = tokenusage_admin_timeline_1.TokenUsageAdminTimelineDescriptor.fields.bucket?.type ?? "date";
132
+ return result.records.map((r) => {
133
+ const bucketValue = (0, define_entity_1.convertFieldValue)(r.get("bucket"), bucketType);
134
+ const seriesValue = r.get("series");
135
+ return {
136
+ id: `${bucketValue}|${seriesValue}`,
137
+ bucket: bucketValue,
138
+ series: seriesValue,
139
+ ...this._metrics(r),
140
+ };
141
+ });
142
+ }
143
+ /**
144
+ * Ranked rows, descending by cost, truncated to `limit` with the exact
145
+ * remainder folded into a single "other" row. The full ordered set is fetched
146
+ * and sliced in JS so the remainder is exact rather than a second query's
147
+ * approximation. Above ~1000 companies, move the LIMIT into Cypher and take
148
+ * the remainder from findSummary() instead.
149
+ */
150
+ async findBreakdown(params) {
151
+ const query = this.neo4j.initQuery();
152
+ query.queryParams = {
153
+ ...query.queryParams,
154
+ from: params.from,
155
+ to: params.to,
156
+ companyId: params.companyId ?? null,
157
+ };
158
+ const companyMatch = params.scope === "customer"
159
+ ? `MATCH (${NODE})-[:BELONGS_TO]->(c:Company)`
160
+ : `OPTIONAL MATCH (${NODE})-[:BELONGS_TO]->(c:Company)\n WITH ${NODE}, c\n WHERE c IS NULL`;
161
+ // activeUsers is only meaningful for the company dimension; the optional
162
+ // match is emitted only there so the other dimensions do not pay for it.
163
+ const activeUserMatch = params.dimension === "company" ? `OPTIONAL MATCH (${NODE})-[:TRIGGERED_BY]->(u:User)` : "";
164
+ let grouping;
165
+ let projection;
166
+ if (params.dimension === "company") {
167
+ // `u` is carried through the WITH: dropping it here would leave
168
+ // count(DISTINCT u) referencing an out-of-scope variable.
169
+ grouping = `WITH ${NODE}, c AS grp, u`;
170
+ projection = `
171
+ grp.id AS id,
172
+ grp.name AS label,
173
+ null AS sublabel,
174
+ count(DISTINCT u) AS activeUsers,
175
+ head(collect(grp.monthlyCredits)) AS monthlyCredits,
176
+ head(collect(grp.availableMonthlyCredits)) AS availableMonthlyCredits,`;
177
+ }
178
+ else if (params.dimension === "user") {
179
+ grouping = `MATCH (${NODE})-[:TRIGGERED_BY]->(u:User)\n WITH ${NODE}, c, u AS grp`;
180
+ projection = `
181
+ grp.id AS id,
182
+ coalesce(grp.name, grp.email) AS label,
183
+ head(collect(c.name)) AS sublabel,
184
+ null AS activeUsers,
185
+ null AS monthlyCredits,
186
+ null AS availableMonthlyCredits,`;
187
+ }
188
+ else {
189
+ grouping = `WITH ${NODE}, c, ${NODE}.tokenUsageType AS grp`;
190
+ projection = `
191
+ grp AS id,
192
+ grp AS label,
193
+ null AS sublabel,
194
+ null AS activeUsers,
195
+ null AS monthlyCredits,
196
+ null AS availableMonthlyCredits,`;
197
+ }
198
+ query.query += `
199
+ MATCH (${NODE}:${tokenusage_meta_1.tokenUsageMeta.labelName})
200
+ WHERE ${NODE}.createdAt >= datetime($from) AND ${NODE}.createdAt <= datetime($to)
201
+ ${companyMatch}
202
+ WITH ${NODE}, c
203
+ WHERE $companyId IS NULL OR c.id = $companyId
204
+ ${activeUserMatch}
205
+ ${grouping}
206
+ RETURN ${projection}
207
+ sum(toFloat(${NODE}.cost)) AS cost,
208
+ sum(toFloat(${NODE}.credits)) AS credits,
209
+ sum(toInteger(${NODE}.inputTokens)) AS tokensIn,
210
+ sum(toInteger(${NODE}.outputTokens)) AS tokensOut,
211
+ sum(toInteger(${NODE}.cachedInputTokens)) AS cached,
212
+ count(${NODE}) AS calls
213
+ ORDER BY cost DESC
214
+ `;
215
+ const result = await this.neo4j.read(query.query, query.queryParams);
216
+ const all = result.records.map((r) => {
217
+ const sublabel = r.get("sublabel");
218
+ const activeUsers = r.get("activeUsers");
219
+ const monthlyCredits = r.get("monthlyCredits");
220
+ const availableMonthlyCredits = r.get("availableMonthlyCredits");
221
+ return {
222
+ id: r.get("id"),
223
+ label: r.get("label") ?? r.get("id"),
224
+ ...(sublabel ? { sublabel: sublabel } : {}),
225
+ ...(activeUsers === null || activeUsers === undefined ? {} : { activeUsers: toNumber(activeUsers) }),
226
+ ...(monthlyCredits === null || monthlyCredits === undefined
227
+ ? {}
228
+ : { monthlyCredits: toNumber(monthlyCredits) }),
229
+ ...(availableMonthlyCredits === null || availableMonthlyCredits === undefined
230
+ ? {}
231
+ : { availableMonthlyCredits: toNumber(availableMonthlyCredits) }),
232
+ ...this._metrics(r),
233
+ };
234
+ });
235
+ if (all.length <= params.limit)
236
+ return all;
237
+ const top = all.slice(0, params.limit);
238
+ const tail = all.slice(params.limit);
239
+ const other = {
240
+ id: "other",
241
+ label: "other",
242
+ cost: round(tail.reduce((s, r) => s + r.cost, 0), 4),
243
+ credits: round(tail.reduce((s, r) => s + r.credits, 0), 2),
244
+ tokensIn: tail.reduce((s, r) => s + r.tokensIn, 0),
245
+ tokensOut: tail.reduce((s, r) => s + r.tokensOut, 0),
246
+ cached: tail.reduce((s, r) => s + r.cached, 0),
247
+ calls: tail.reduce((s, r) => s + r.calls, 0),
248
+ };
249
+ return [...top, other];
250
+ }
251
+ /** Scalar rollup split by cost centre for one window. */
252
+ async _scopeTotals(params) {
253
+ const query = this.neo4j.initQuery();
254
+ query.queryParams = {
255
+ ...query.queryParams,
256
+ from: params.from,
257
+ to: params.to,
258
+ companyId: params.companyId ?? null,
259
+ };
260
+ query.query += `
261
+ MATCH (${NODE}:${tokenusage_meta_1.tokenUsageMeta.labelName})
262
+ WHERE ${NODE}.createdAt >= datetime($from) AND ${NODE}.createdAt <= datetime($to)
263
+ OPTIONAL MATCH (${NODE})-[:BELONGS_TO]->(c:Company)
264
+ WITH ${NODE}, c
265
+ WHERE $companyId IS NULL OR c.id = $companyId
266
+ WITH CASE WHEN c IS NULL THEN 'platform' ELSE 'customer' END AS scope, ${NODE}
267
+ RETURN scope AS scope,
268
+ sum(toFloat(${NODE}.cost)) AS cost,
269
+ sum(toFloat(${NODE}.credits)) AS credits,
270
+ sum(toInteger(${NODE}.inputTokens)) AS tokensIn,
271
+ sum(toInteger(${NODE}.outputTokens)) AS tokensOut,
272
+ sum(toInteger(${NODE}.cachedInputTokens)) AS cached,
273
+ count(${NODE}) AS calls
274
+ `;
275
+ const result = await this.neo4j.read(query.query, query.queryParams);
276
+ return result.records.map((r) => ({ scope: r.get("scope"), ...this._metrics(r) }));
277
+ }
278
+ /**
279
+ * Guarantees both cost centres are present (zero-filled when a window has no
280
+ * rows) and appends their sum as the "total" scope, so the tiles never have to
281
+ * branch on a missing row.
282
+ */
283
+ _withTotal(rows, window) {
284
+ const zero = { cost: 0, credits: 0, tokensIn: 0, tokensOut: 0, cached: 0, calls: 0 };
285
+ const find = (scope) => rows.find((r) => r.scope === scope) ?? { scope, ...zero };
286
+ const customer = find("customer");
287
+ const platform = find("platform");
288
+ const total = {
289
+ scope: "total",
290
+ cost: round(customer.cost + platform.cost, 4),
291
+ credits: round(customer.credits + platform.credits, 2),
292
+ tokensIn: customer.tokensIn + platform.tokensIn,
293
+ tokensOut: customer.tokensOut + platform.tokensOut,
294
+ cached: customer.cached + platform.cached,
295
+ calls: customer.calls + platform.calls,
296
+ };
297
+ return [customer, platform, total].map((r) => ({
298
+ id: `${r.scope}|${window}`,
299
+ scope: r.scope,
300
+ window,
301
+ cost: r.cost,
302
+ credits: r.credits,
303
+ tokensIn: r.tokensIn,
304
+ tokensOut: r.tokensOut,
305
+ cached: r.cached,
306
+ calls: r.calls,
307
+ }));
308
+ }
309
+ /** The equal-length span immediately preceding `from`. */
310
+ _previousWindow(from, to) {
311
+ const fromMs = new Date(from).getTime();
312
+ const toMs = new Date(to).getTime();
313
+ const span = Math.max(0, toMs - fromMs);
314
+ return { from: new Date(fromMs - span).toISOString(), to: new Date(fromMs).toISOString() };
315
+ }
316
+ /**
317
+ * Resolves a granularity to the `date.truncate` unit it may emit. Throws
318
+ * rather than interpolating anything the table does not know about.
319
+ */
320
+ _truncationUnit(granularity) {
321
+ const unit = TRUNCATION_UNITS[granularity];
322
+ if (!unit)
323
+ throw new Error(`Unsupported timeline granularity: ${granularity}`);
324
+ return unit;
325
+ }
326
+ _metrics(record) {
327
+ return {
328
+ cost: round(toNumber(record.get("cost")), 4),
329
+ credits: round(toNumber(record.get("credits")), 2),
330
+ tokensIn: toNumber(record.get("tokensIn")),
331
+ tokensOut: toNumber(record.get("tokensOut")),
332
+ cached: toNumber(record.get("cached")),
333
+ calls: toNumber(record.get("calls")),
334
+ };
335
+ }
336
+ };
337
+ exports.TokenUsageAdminRepository = TokenUsageAdminRepository;
338
+ exports.TokenUsageAdminRepository = TokenUsageAdminRepository = __decorate([
339
+ (0, common_1.Injectable)(),
340
+ __metadata("design:paramtypes", [neo4j_service_1.Neo4jService, security_service_1.SecurityService, nestjs_cls_1.ClsService])
341
+ ], TokenUsageAdminRepository);
342
+ //# sourceMappingURL=tokenusage.admin.repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenusage.admin.repository.js","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/repositories/tokenusage.admin.repository.ts"],"names":[],"mappings":"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"}
@@ -41,15 +41,33 @@ export interface TokenUsageSummary {
41
41
  * never by a registry lookup: Nest constructs providers long before
42
42
  * `onModuleInit`, where models are registered.
43
43
  *
44
- * `onModuleInit` is INHERITED rather than declared: `AbstractRepository.onModuleInit`
45
- * emits `CREATE CONSTRAINT tokenusage_id IF NOT EXISTS FOR (tokenusage:TokenUsage)
44
+ * `onModuleInit` DELEGATES to `AbstractRepository.onModuleInit` first, which emits
45
+ * `CREATE CONSTRAINT tokenusage_id IF NOT EXISTS FOR (tokenusage:TokenUsage)
46
46
  * REQUIRE tokenusage.id IS UNIQUE` from `descriptor.constraints` — byte-identical to
47
47
  * the constraint this repository used to declare by hand — plus the FULLTEXT index
48
- * derived from the descriptor's string fields.
48
+ * derived from the descriptor's string fields. It then adds the one index the
49
+ * descriptor cannot express; see the override below.
49
50
  */
50
51
  export declare class TokenUsageRepository extends AbstractRepository<TokenUsage, typeof TokenUsageDescriptor.relationships> {
51
52
  protected readonly descriptor: import("../../..").EntityDescriptor<TokenUsage, {}>;
52
53
  constructor(neo4j: Neo4jService, securityService: SecurityService, clsService: ClsService);
54
+ /**
55
+ * Adds the range index every date-filtered finder here depends on —
56
+ * findByCompany, findAggregatedByDateAndType, findUsageSummary, and the
57
+ * cross-tenant admin queries in TokenUsageAdminRepository. Without it each of
58
+ * them scans the whole :TokenUsage label, which is the fastest-growing label
59
+ * in the database.
60
+ *
61
+ * There is no declarative way to express a non-FULLTEXT index via
62
+ * defineEntity(): EntityDescriptor.indexes is hard-coded to the string-field
63
+ * fulltext index, and AbstractRepository.onModuleInit only acts on
64
+ * type === "FULLTEXT". Hence the explicit override — same pattern, and same
65
+ * stated reason, as UserActivityRepository.
66
+ *
67
+ * super.onModuleInit() MUST be called first: it creates the descriptor-derived
68
+ * id constraint and fulltext index. Dropping it would silently remove both.
69
+ */
70
+ onModuleInit(): Promise<void>;
53
71
  /**
54
72
  * Custom create (KEPT — "non-standard relationships" rule): USED_FOR's target is
55
73
  * polymorphic (any entity label — Content, Chunk, Conversation, ...), which the
@@ -1 +1 @@
1
- {"version":3,"file":"tokenusage.repository.d.ts","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/repositories/tokenusage.repository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,sBAAsB,EAAE,MAAM,2DAA2D,CAAC;AACnG,OAAO,EAAE,kBAAkB,EAAE,MAAM,mDAAmD,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,kDAAkD,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAGxF;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBACa,oBAAqB,SAAQ,kBAAkB,CAAC,UAAU,EAAE,OAAO,oBAAoB,CAAC,aAAa,CAAC;IACjH,SAAS,CAAC,QAAQ,CAAC,UAAU,sDAAwB;gBAEzC,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU;IAIzF;;;;;;;;;OASG;IACG,MAAM,CAAC,MAAM,EAAE;QACnB,EAAE,EAAE,MAAM,CAAC;QACX,cAAc,EAAE,MAAM,CAAC;QACvB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,cAAc,EAAE,MAAM,CAAC;QACvB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,GAAG,OAAO,CAAC,IAAI,CAAC;IAqCjB;;;;OAIG;IACG,aAAa,CAAC,MAAM,EAAE;QAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,MAAM,CAAC,EAAE,sBAAsB,CAAC;KACjC,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IA6BzB;;;;OAIG;IACG,2BAA2B,CAAC,MAAM,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IA2CpH;;OAEG;IACG,gBAAgB,CAAC,MAAM,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA4CpG,OAAO,CAAC,QAAQ;CAMjB"}
1
+ {"version":3,"file":"tokenusage.repository.d.ts","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/repositories/tokenusage.repository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,sBAAsB,EAAE,MAAM,2DAA2D,CAAC;AACnG,OAAO,EAAE,kBAAkB,EAAE,MAAM,mDAAmD,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,kDAAkD,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAGxF;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBACa,oBAAqB,SAAQ,kBAAkB,CAAC,UAAU,EAAE,OAAO,oBAAoB,CAAC,aAAa,CAAC;IACjH,SAAS,CAAC,QAAQ,CAAC,UAAU,sDAAwB;gBAEzC,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU;IAIzF;;;;;;;;;;;;;;;OAeG;IACY,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAU5C;;;;;;;;;OASG;IACG,MAAM,CAAC,MAAM,EAAE;QACnB,EAAE,EAAE,MAAM,CAAC;QACX,cAAc,EAAE,MAAM,CAAC;QACvB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,cAAc,EAAE,MAAM,CAAC;QACvB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,GAAG,OAAO,CAAC,IAAI,CAAC;IAsCjB;;;;OAIG;IACG,aAAa,CAAC,MAAM,EAAE;QAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,MAAM,CAAC,EAAE,sBAAsB,CAAC;KACjC,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IA6BzB;;;;OAIG;IACG,2BAA2B,CAAC,MAAM,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IA2CpH;;OAEG;IACG,gBAAgB,CAAC,MAAM,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA4CpG,OAAO,CAAC,QAAQ;CAMjB"}
@@ -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
@@ -61,6 +85,7 @@ let TokenUsageRepository = class TokenUsageRepository extends abstract_repositor
61
85
  cost: params.cost ?? 0,
62
86
  credits: params.credits ?? 0,
63
87
  };
88
+ // Guarded: initQuery() binds this variable only when the id is in CLS; an unbound CREATE target creates an orphan node.
64
89
  query.query += `
65
90
  CREATE (${tokenusage_meta_1.tokenUsageMeta.nodeName}:${tokenusage_meta_1.tokenUsageMeta.labelName} {
66
91
  id: $id,
@@ -73,8 +98,8 @@ let TokenUsageRepository = class TokenUsageRepository extends abstract_repositor
73
98
  createdAt: datetime(),
74
99
  updatedAt: datetime()
75
100
  })
76
- CREATE (${tokenusage_meta_1.tokenUsageMeta.nodeName})-[:BELONGS_TO]->(company)
77
- 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)` : ``}
78
103
  WITH ${tokenusage_meta_1.tokenUsageMeta.nodeName}
79
104
  MATCH (relEntity:${params.relationshipType} {id: $relationshipId})
80
105
  CREATE (${tokenusage_meta_1.tokenUsageMeta.nodeName})-[:USED_FOR]->(relEntity)
@@ -1 +1 @@
1
- {"version":3,"file":"tokenusage.repository.js","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/repositories/tokenusage.repository.ts"],"names":[],"mappings":"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"}
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"}