@carlonicora/nestjs-neo4jsonapi 2.5.2 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/base.config.d.ts.map +1 -1
- package/dist/config/base.config.js +1 -0
- package/dist/config/base.config.js.map +1 -1
- package/dist/config/interfaces/config.ai.interface.d.ts +15 -0
- package/dist/config/interfaces/config.ai.interface.d.ts.map +1 -1
- package/dist/core/llm/services/audio.llm.service.d.ts +16 -8
- package/dist/core/llm/services/audio.llm.service.d.ts.map +1 -1
- package/dist/core/llm/services/audio.llm.service.js +41 -19
- package/dist/core/llm/services/audio.llm.service.js.map +1 -1
- package/dist/foundations/tokenusage/common/tokenusage.target-labels.d.ts +89 -0
- package/dist/foundations/tokenusage/common/tokenusage.target-labels.d.ts.map +1 -0
- package/dist/foundations/tokenusage/common/tokenusage.target-labels.js +79 -0
- package/dist/foundations/tokenusage/common/tokenusage.target-labels.js.map +1 -0
- package/dist/foundations/tokenusage/controllers/tokenusage.admin.controller.d.ts +1 -1
- package/dist/foundations/tokenusage/controllers/tokenusage.admin.controller.d.ts.map +1 -1
- package/dist/foundations/tokenusage/controllers/tokenusage.admin.controller.js +8 -3
- package/dist/foundations/tokenusage/controllers/tokenusage.admin.controller.js.map +1 -1
- package/dist/foundations/tokenusage/controllers/tokenusage.report.controller.d.ts +35 -0
- package/dist/foundations/tokenusage/controllers/tokenusage.report.controller.d.ts.map +1 -0
- package/dist/foundations/tokenusage/controllers/tokenusage.report.controller.js +133 -0
- package/dist/foundations/tokenusage/controllers/tokenusage.report.controller.js.map +1 -0
- package/dist/foundations/tokenusage/entities/tokenusage-admin-breakdown.d.ts +2 -7
- package/dist/foundations/tokenusage/entities/tokenusage-admin-breakdown.d.ts.map +1 -1
- package/dist/foundations/tokenusage/entities/tokenusage-admin-breakdown.js +2 -6
- package/dist/foundations/tokenusage/entities/tokenusage-admin-breakdown.js.map +1 -1
- package/dist/foundations/tokenusage/entities/tokenusage-admin-summary.d.ts +2 -7
- package/dist/foundations/tokenusage/entities/tokenusage-admin-summary.d.ts.map +1 -1
- package/dist/foundations/tokenusage/entities/tokenusage-admin-summary.js +2 -6
- package/dist/foundations/tokenusage/entities/tokenusage-admin-summary.js.map +1 -1
- package/dist/foundations/tokenusage/entities/tokenusage-admin-timeline.d.ts +2 -7
- package/dist/foundations/tokenusage/entities/tokenusage-admin-timeline.d.ts.map +1 -1
- package/dist/foundations/tokenusage/entities/tokenusage-admin-timeline.js +2 -6
- package/dist/foundations/tokenusage/entities/tokenusage-admin-timeline.js.map +1 -1
- package/dist/foundations/tokenusage/entities/tokenusage-report-breakdown.d.ts +20 -0
- package/dist/foundations/tokenusage/entities/tokenusage-report-breakdown.d.ts.map +1 -0
- package/dist/foundations/tokenusage/entities/tokenusage-report-breakdown.js +17 -0
- package/dist/foundations/tokenusage/entities/tokenusage-report-breakdown.js.map +1 -0
- package/dist/foundations/tokenusage/entities/tokenusage-report-breakdown.meta.d.ts +3 -0
- package/dist/foundations/tokenusage/entities/tokenusage-report-breakdown.meta.d.ts.map +1 -0
- package/dist/foundations/tokenusage/entities/tokenusage-report-breakdown.meta.js +10 -0
- package/dist/foundations/tokenusage/entities/tokenusage-report-breakdown.meta.js.map +1 -0
- package/dist/foundations/tokenusage/entities/tokenusage-report-summary.d.ts +19 -0
- package/dist/foundations/tokenusage/entities/tokenusage-report-summary.d.ts.map +1 -0
- package/dist/foundations/tokenusage/entities/tokenusage-report-summary.js +16 -0
- package/dist/foundations/tokenusage/entities/tokenusage-report-summary.js.map +1 -0
- package/dist/foundations/tokenusage/entities/tokenusage-report-summary.meta.d.ts +3 -0
- package/dist/foundations/tokenusage/entities/tokenusage-report-summary.meta.d.ts.map +1 -0
- package/dist/foundations/tokenusage/entities/tokenusage-report-summary.meta.js +10 -0
- package/dist/foundations/tokenusage/entities/tokenusage-report-summary.meta.js.map +1 -0
- package/dist/foundations/tokenusage/entities/tokenusage-report-timeline.d.ts +17 -0
- package/dist/foundations/tokenusage/entities/tokenusage-report-timeline.d.ts.map +1 -0
- package/dist/foundations/tokenusage/entities/tokenusage-report-timeline.js +17 -0
- package/dist/foundations/tokenusage/entities/tokenusage-report-timeline.js.map +1 -0
- package/dist/foundations/tokenusage/entities/tokenusage-report-timeline.meta.d.ts +3 -0
- package/dist/foundations/tokenusage/entities/tokenusage-report-timeline.meta.d.ts.map +1 -0
- package/dist/foundations/tokenusage/entities/tokenusage-report-timeline.meta.js +10 -0
- package/dist/foundations/tokenusage/entities/tokenusage-report-timeline.meta.js.map +1 -0
- package/dist/foundations/tokenusage/entities/usage-metric.fields.d.ts +48 -0
- package/dist/foundations/tokenusage/entities/usage-metric.fields.d.ts.map +1 -0
- package/dist/foundations/tokenusage/entities/usage-metric.fields.js +24 -0
- package/dist/foundations/tokenusage/entities/usage-metric.fields.js.map +1 -0
- package/dist/foundations/tokenusage/index.d.ts +11 -0
- package/dist/foundations/tokenusage/index.d.ts.map +1 -1
- package/dist/foundations/tokenusage/index.js +24 -1
- package/dist/foundations/tokenusage/index.js.map +1 -1
- package/dist/foundations/tokenusage/repositories/tokenusage.admin.repository.d.ts +13 -2
- package/dist/foundations/tokenusage/repositories/tokenusage.admin.repository.d.ts.map +1 -1
- package/dist/foundations/tokenusage/repositories/tokenusage.admin.repository.js +43 -2
- package/dist/foundations/tokenusage/repositories/tokenusage.admin.repository.js.map +1 -1
- package/dist/foundations/tokenusage/repositories/tokenusage.report.repository.d.ts +104 -0
- package/dist/foundations/tokenusage/repositories/tokenusage.report.repository.d.ts.map +1 -0
- package/dist/foundations/tokenusage/repositories/tokenusage.report.repository.js +286 -0
- package/dist/foundations/tokenusage/repositories/tokenusage.report.repository.js.map +1 -0
- package/dist/foundations/tokenusage/services/tokenusage.admin.service.d.ts +3 -1
- package/dist/foundations/tokenusage/services/tokenusage.admin.service.d.ts.map +1 -1
- package/dist/foundations/tokenusage/services/tokenusage.admin.service.js +1 -0
- package/dist/foundations/tokenusage/services/tokenusage.admin.service.js.map +1 -1
- package/dist/foundations/tokenusage/services/tokenusage.report.service.d.ts +43 -0
- package/dist/foundations/tokenusage/services/tokenusage.report.service.d.ts.map +1 -0
- package/dist/foundations/tokenusage/services/tokenusage.report.service.js +73 -0
- package/dist/foundations/tokenusage/services/tokenusage.report.service.js.map +1 -0
- package/dist/foundations/tokenusage/tokenusage.module.d.ts.map +1 -1
- package/dist/foundations/tokenusage/tokenusage.module.js +16 -2
- package/dist/foundations/tokenusage/tokenusage.module.js.map +1 -1
- package/dist/foundations/user/repositories/user.repository.d.ts.map +1 -1
- package/dist/foundations/user/repositories/user.repository.js +5 -1
- package/dist/foundations/user/repositories/user.repository.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,286 @@
|
|
|
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
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.TokenUsageReportRepository = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const nestjs_cls_1 = require("nestjs-cls");
|
|
18
|
+
const abstract_repository_1 = require("../../../core/neo4j/abstracts/abstract.repository");
|
|
19
|
+
const neo4j_service_1 = require("../../../core/neo4j/services/neo4j.service");
|
|
20
|
+
const security_service_1 = require("../../../core/security/services/security.service");
|
|
21
|
+
const tokenusage_target_labels_1 = require("../common/tokenusage.target-labels");
|
|
22
|
+
const tokenusage_1 = require("../entities/tokenusage");
|
|
23
|
+
const tokenusage_meta_1 = require("../entities/tokenusage.meta");
|
|
24
|
+
const NODE = tokenusage_meta_1.tokenUsageMeta.nodeName; // "tokenusage"
|
|
25
|
+
/**
|
|
26
|
+
* The date.truncate units this repository may emit, keyed by granularity. A
|
|
27
|
+
* lookup rather than an interpolation of the caller's string: nothing that did
|
|
28
|
+
* not come from this table can ever reach the query text.
|
|
29
|
+
*/
|
|
30
|
+
const TRUNCATION_UNITS = {
|
|
31
|
+
week: "week",
|
|
32
|
+
month: "month",
|
|
33
|
+
};
|
|
34
|
+
/** The metric column each breakdown orders by. Same closed-lookup rule. */
|
|
35
|
+
const ORDER_COLUMNS = {
|
|
36
|
+
credits: "credits",
|
|
37
|
+
tokens: "tokens",
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Self-service token-usage reporting: the caller's OWN company, nothing else.
|
|
41
|
+
*
|
|
42
|
+
* This is the deliberate mirror image of TokenUsageAdminRepository. That class
|
|
43
|
+
* carries a file-level lint-ignore and omits buildDefaultMatch() because a
|
|
44
|
+
* platform-wide dashboard must not be scoped to the caller. THIS class must be
|
|
45
|
+
* scoped, so every query below goes through buildDefaultMatch(), which injects
|
|
46
|
+
* the CLS company filter. There is deliberately no file-level ignore header
|
|
47
|
+
* here, and no companyId parameter anywhere in this file: a self-service caller
|
|
48
|
+
* cannot name a company, so there is nothing to spoof.
|
|
49
|
+
*
|
|
50
|
+
* Rollup RETURNs are scalar columns, not graph nodes, so readOne()/readMany()
|
|
51
|
+
* cannot map them - entityFactory.createGraphList expects nodes. Same shape and
|
|
52
|
+
* same rationale as TokenUsageRepository.findAggregatedByDateAndType in this
|
|
53
|
+
* folder, which is the canonical company-scoped aggregation.
|
|
54
|
+
*
|
|
55
|
+
* EVERY traversal constrains its target label. The company traversal inherits
|
|
56
|
+
* the label constraint from Neo4jService.initQuery()'s preamble, which binds
|
|
57
|
+
* (company:Company {id: $companyId}); the target traversal below constrains
|
|
58
|
+
* (grp:<AllowlistedLabel>). The write bug fixed in tokenusage.repository.ts left
|
|
59
|
+
* label-less nodes on exactly these relationships, and an unconstrained match
|
|
60
|
+
* returns them.
|
|
61
|
+
*
|
|
62
|
+
* It does NOT override onModuleInit: the :TokenUsage indexes belong to
|
|
63
|
+
* TokenUsageRepository, and duplicating the CREATE INDEX would be a second
|
|
64
|
+
* writer for one schema object.
|
|
65
|
+
*/
|
|
66
|
+
let TokenUsageReportRepository = class TokenUsageReportRepository extends abstract_repository_1.AbstractRepository {
|
|
67
|
+
constructor(neo4j, securityService, clsService, targetLabels = []) {
|
|
68
|
+
super(neo4j, securityService, clsService);
|
|
69
|
+
this.targetLabels = targetLabels;
|
|
70
|
+
this.descriptor = tokenusage_1.TokenUsageDescriptor;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Two rows: the requested window and the equal-length span immediately
|
|
74
|
+
* preceding it, which is what the KPI tile's delta is measured against.
|
|
75
|
+
*
|
|
76
|
+
* Both rows are ALWAYS returned, zero-filled when the database has nothing —
|
|
77
|
+
* the tiles then never have to branch on a missing window.
|
|
78
|
+
*/
|
|
79
|
+
async findSummary(params) {
|
|
80
|
+
const span = new Date(params.to).getTime() - new Date(params.from).getTime();
|
|
81
|
+
const previousFrom = new Date(new Date(params.from).getTime() - span).toISOString();
|
|
82
|
+
const query = this.neo4j.initQuery();
|
|
83
|
+
query.queryParams = { ...query.queryParams, from: params.from, to: params.to, previousFrom };
|
|
84
|
+
query.query += `
|
|
85
|
+
${this.buildDefaultMatch()}
|
|
86
|
+
WHERE ${NODE}.createdAt >= datetime($previousFrom) AND ${NODE}.createdAt <= datetime($to)
|
|
87
|
+
|
|
88
|
+
WITH ${NODE},
|
|
89
|
+
CASE WHEN ${NODE}.createdAt >= datetime($from) THEN 'current' ELSE 'previous' END AS window
|
|
90
|
+
|
|
91
|
+
RETURN window AS window,
|
|
92
|
+
${this._metricProjection()}
|
|
93
|
+
`;
|
|
94
|
+
const result = await this.neo4j.read(query.query, query.queryParams); // nja-lint-ignore: buildDefaultMatch()-scoped scalar aggregation — non-entity shape
|
|
95
|
+
const found = new Map();
|
|
96
|
+
for (const record of result.records) {
|
|
97
|
+
// nja-lint-ignore: aggregation rows, not entity nodes
|
|
98
|
+
const window = record.get("window");
|
|
99
|
+
found.set(window, { id: window, window, ...this._metrics(record) });
|
|
100
|
+
}
|
|
101
|
+
return ["current", "previous"].map((window) => found.get(window) ??
|
|
102
|
+
{
|
|
103
|
+
id: window,
|
|
104
|
+
window,
|
|
105
|
+
cost: 0,
|
|
106
|
+
credits: 0,
|
|
107
|
+
tokensIn: 0,
|
|
108
|
+
tokensOut: 0,
|
|
109
|
+
cached: 0,
|
|
110
|
+
calls: 0,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* One row per (bucket, operation type). `stackBy` is accepted for signature
|
|
115
|
+
* parity with the administrative timeline but only "type" is meaningful inside
|
|
116
|
+
* a single tenant, so it is not interpolated anywhere.
|
|
117
|
+
*/
|
|
118
|
+
async findTimeline(params) {
|
|
119
|
+
const query = this.neo4j.initQuery();
|
|
120
|
+
query.queryParams = { ...query.queryParams, from: params.from, to: params.to };
|
|
121
|
+
const unit = params.granularity === "day" ? undefined : TRUNCATION_UNITS[params.granularity];
|
|
122
|
+
const bucketExpression = unit ? `date.truncate('${unit}', date(${NODE}.createdAt))` : `date(${NODE}.createdAt)`;
|
|
123
|
+
query.query += `
|
|
124
|
+
${this.buildDefaultMatch()}
|
|
125
|
+
WHERE ${NODE}.createdAt >= datetime($from) AND ${NODE}.createdAt <= datetime($to)
|
|
126
|
+
|
|
127
|
+
WITH ${NODE},
|
|
128
|
+
${bucketExpression} AS bucket,
|
|
129
|
+
${NODE}.tokenUsageType AS series
|
|
130
|
+
|
|
131
|
+
RETURN toString(bucket) AS bucket,
|
|
132
|
+
series AS series,
|
|
133
|
+
${this._metricProjection()}
|
|
134
|
+
ORDER BY bucket ASC, series ASC
|
|
135
|
+
`;
|
|
136
|
+
const result = await this.neo4j.read(query.query, query.queryParams); // nja-lint-ignore: buildDefaultMatch()-scoped scalar aggregation — non-entity shape
|
|
137
|
+
return result.records.map((record) => {
|
|
138
|
+
// nja-lint-ignore: aggregation rows, not entity nodes
|
|
139
|
+
const bucket = record.get("bucket");
|
|
140
|
+
const series = record.get("series");
|
|
141
|
+
return {
|
|
142
|
+
id: `${bucket}|${series}`,
|
|
143
|
+
bucket,
|
|
144
|
+
series,
|
|
145
|
+
...this._metrics(record),
|
|
146
|
+
};
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Ranked rows for one dimension, ordered by the SELECTED metric.
|
|
151
|
+
*
|
|
152
|
+
* Ordering by the selected metric rather than unconditionally by cost is not
|
|
153
|
+
* cosmetic: credits are max(minCreditsPerRecord, round4(cost / creditCost)),
|
|
154
|
+
* and that floor breaks proportionality for cheap calls — so a credits panel
|
|
155
|
+
* ranked by cost is visibly mis-ordered whenever the two diverge.
|
|
156
|
+
*
|
|
157
|
+
* Everything past `limit` is folded into a single "other" row so the shares
|
|
158
|
+
* still sum to 100 percent.
|
|
159
|
+
*/
|
|
160
|
+
async findBreakdown(params) {
|
|
161
|
+
let grouping;
|
|
162
|
+
let projection;
|
|
163
|
+
if (params.dimension === "target") {
|
|
164
|
+
// Label and relationship types come from the allowlist, not the request —
|
|
165
|
+
// see _resolveTarget and normaliseTargetLabel.
|
|
166
|
+
grouping = (0, tokenusage_target_labels_1.buildTargetGrouping)({
|
|
167
|
+
target: this._resolveTarget(params.targetLabel),
|
|
168
|
+
nodeName: NODE,
|
|
169
|
+
carried: [],
|
|
170
|
+
});
|
|
171
|
+
projection = `
|
|
172
|
+
grp.id AS id,
|
|
173
|
+
coalesce(grp.name, grp.title) AS label,
|
|
174
|
+
null AS sublabel,`;
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
grouping = `WITH ${NODE}, ${NODE}.tokenUsageType AS grp`;
|
|
178
|
+
projection = `
|
|
179
|
+
grp AS id,
|
|
180
|
+
grp AS label,
|
|
181
|
+
null AS sublabel,`;
|
|
182
|
+
}
|
|
183
|
+
const query = this.neo4j.initQuery();
|
|
184
|
+
query.queryParams = { ...query.queryParams, from: params.from, to: params.to };
|
|
185
|
+
query.query += `
|
|
186
|
+
${this.buildDefaultMatch()}
|
|
187
|
+
WHERE ${NODE}.createdAt >= datetime($from) AND ${NODE}.createdAt <= datetime($to)
|
|
188
|
+
${grouping}
|
|
189
|
+
|
|
190
|
+
RETURN ${projection}
|
|
191
|
+
${this._metricProjection()}
|
|
192
|
+
ORDER BY ${ORDER_COLUMNS[params.metric]} DESC
|
|
193
|
+
`;
|
|
194
|
+
const result = await this.neo4j.read(query.query, query.queryParams); // nja-lint-ignore: buildDefaultMatch()-scoped scalar aggregation — non-entity shape
|
|
195
|
+
const all = result.records.map((record) => {
|
|
196
|
+
// nja-lint-ignore: aggregation rows, not entity nodes
|
|
197
|
+
const sublabel = record.get("sublabel");
|
|
198
|
+
return {
|
|
199
|
+
id: record.get("id") ?? "unknown",
|
|
200
|
+
label: record.get("label") ?? record.get("id") ?? "unknown",
|
|
201
|
+
...(sublabel ? { sublabel: sublabel } : {}),
|
|
202
|
+
...this._metrics(record),
|
|
203
|
+
};
|
|
204
|
+
});
|
|
205
|
+
if (all.length <= params.limit)
|
|
206
|
+
return all;
|
|
207
|
+
const kept = all.slice(0, params.limit);
|
|
208
|
+
const folded = all.slice(params.limit);
|
|
209
|
+
kept.push({
|
|
210
|
+
id: "other",
|
|
211
|
+
label: "other",
|
|
212
|
+
cost: folded.reduce((sum, row) => sum + row.cost, 0),
|
|
213
|
+
credits: folded.reduce((sum, row) => sum + row.credits, 0),
|
|
214
|
+
tokensIn: folded.reduce((sum, row) => sum + row.tokensIn, 0),
|
|
215
|
+
tokensOut: folded.reduce((sum, row) => sum + row.tokensOut, 0),
|
|
216
|
+
cached: folded.reduce((sum, row) => sum + row.cached, 0),
|
|
217
|
+
calls: folded.reduce((sum, row) => sum + row.calls, 0),
|
|
218
|
+
});
|
|
219
|
+
return kept;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* The six metric columns, identical in all three queries.
|
|
223
|
+
*
|
|
224
|
+
* `tokens` is projected as a column of its own so ORDER BY can name it — a
|
|
225
|
+
* Cypher ORDER BY cannot reference an expression built from two aggregates
|
|
226
|
+
* unless that expression is itself projected.
|
|
227
|
+
*/
|
|
228
|
+
_metricProjection() {
|
|
229
|
+
return `
|
|
230
|
+
sum(toFloat(${NODE}.cost)) AS cost,
|
|
231
|
+
sum(toFloat(${NODE}.credits)) AS credits,
|
|
232
|
+
sum(toInteger(${NODE}.inputTokens)) AS tokensIn,
|
|
233
|
+
sum(toInteger(${NODE}.outputTokens)) AS tokensOut,
|
|
234
|
+
sum(toInteger(${NODE}.cachedInputTokens)) AS cached,
|
|
235
|
+
count(${NODE}) AS calls,
|
|
236
|
+
sum(toInteger(${NODE}.inputTokens)) + sum(toInteger(${NODE}.outputTokens)) AS tokens`;
|
|
237
|
+
}
|
|
238
|
+
_metrics(record) {
|
|
239
|
+
return {
|
|
240
|
+
cost: this.toNumber(record.get("cost")),
|
|
241
|
+
credits: this.toNumber(record.get("credits")),
|
|
242
|
+
tokensIn: this.toNumber(record.get("tokensIn")),
|
|
243
|
+
tokensOut: this.toNumber(record.get("tokensOut")),
|
|
244
|
+
cached: this.toNumber(record.get("cached")),
|
|
245
|
+
calls: this.toNumber(record.get("calls")),
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Resolves the requested label against the host application's allowlist and
|
|
250
|
+
* returns the ALLOWLIST'S OWN string, never the caller's. An empty allowlist
|
|
251
|
+
* means the app never opted in, so every target request is refused.
|
|
252
|
+
*/
|
|
253
|
+
_resolveTarget(requested) {
|
|
254
|
+
const available = this.targetLabels.map(tokenusage_target_labels_1.normaliseTargetLabel);
|
|
255
|
+
const match = available.find((target) => target.label === requested);
|
|
256
|
+
if (!match)
|
|
257
|
+
throw new common_1.BadRequestException(available.length === 0
|
|
258
|
+
? "dimension=target is not enabled for this application"
|
|
259
|
+
: `targetLabel must be one of ${available.map((target) => target.label).join(", ")}`);
|
|
260
|
+
return match;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Neo4j hands integers back as driver Integer objects. Same helper, same
|
|
264
|
+
* shape, as TokenUsageRepository.toNumber — AbstractRepository does not
|
|
265
|
+
* provide one, and the aggregation path is the only place that needs it.
|
|
266
|
+
*/
|
|
267
|
+
toNumber(value) {
|
|
268
|
+
if (value === null || value === undefined)
|
|
269
|
+
return 0;
|
|
270
|
+
if (typeof value === "number")
|
|
271
|
+
return value;
|
|
272
|
+
if (typeof value.toNumber === "function")
|
|
273
|
+
return value.toNumber();
|
|
274
|
+
return Number(value) || 0;
|
|
275
|
+
}
|
|
276
|
+
};
|
|
277
|
+
exports.TokenUsageReportRepository = TokenUsageReportRepository;
|
|
278
|
+
exports.TokenUsageReportRepository = TokenUsageReportRepository = __decorate([
|
|
279
|
+
(0, common_1.Injectable)(),
|
|
280
|
+
__param(3, (0, common_1.Optional)()),
|
|
281
|
+
__param(3, (0, common_1.Inject)(tokenusage_target_labels_1.TOKEN_USAGE_TARGET_LABELS)),
|
|
282
|
+
__metadata("design:paramtypes", [neo4j_service_1.Neo4jService,
|
|
283
|
+
security_service_1.SecurityService,
|
|
284
|
+
nestjs_cls_1.ClsService, Array])
|
|
285
|
+
], TokenUsageReportRepository);
|
|
286
|
+
//# sourceMappingURL=tokenusage.report.repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenusage.report.repository.js","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/repositories/tokenusage.report.repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ClsService } from "nestjs-cls";
|
|
2
2
|
import { JsonApiService } from "../../../core/jsonapi/services/jsonapi.service";
|
|
3
3
|
import { AbstractService } from "../../../core/neo4j/abstracts/abstract.service";
|
|
4
|
+
import { TokenUsageDimension } from "../common/tokenusage.target-labels";
|
|
4
5
|
import { TokenUsage, TokenUsageDescriptor } from "../entities/tokenusage";
|
|
5
6
|
import { TokenUsageAdminRepository } from "../repositories/tokenusage.admin.repository";
|
|
6
7
|
/**
|
|
@@ -41,7 +42,8 @@ export declare class TokenUsageAdminService extends AbstractService<TokenUsage,
|
|
|
41
42
|
getBreakdown(params: {
|
|
42
43
|
from: string;
|
|
43
44
|
to: string;
|
|
44
|
-
dimension:
|
|
45
|
+
dimension: TokenUsageDimension;
|
|
46
|
+
targetLabel?: string;
|
|
45
47
|
scope: "customer" | "platform";
|
|
46
48
|
companyId?: string;
|
|
47
49
|
limit: number;
|
|
@@ -1 +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,
|
|
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,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,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,mBAAmB,CAAC;QAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,EAAE,UAAU,GAAG,UAAU,CAAC;QAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;KACf,GAAG,OAAO,CAAC,GAAG,CAAC;CAajB"}
|
|
@@ -67,6 +67,7 @@ let TokenUsageAdminService = class TokenUsageAdminService extends abstract_servi
|
|
|
67
67
|
from: params.from,
|
|
68
68
|
to: params.to,
|
|
69
69
|
dimension: params.dimension,
|
|
70
|
+
targetLabel: params.targetLabel,
|
|
70
71
|
scope: params.scope,
|
|
71
72
|
companyId: params.companyId,
|
|
72
73
|
limit: params.limit,
|
|
@@ -1 +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;
|
|
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;AAEjF,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,MAQlB;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,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,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;AA5DY,wDAAsB;iCAAtB,sBAAsB;IADlC,IAAA,mBAAU,GAAE;qCAKO,gCAAc;QACgB,uDAAyB;QAC3D,uBAAU;GANb,sBAAsB,CA4DlC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
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 { TokenUsageReportDimension, TokenUsageReportMetric } from "../common/tokenusage.target-labels";
|
|
5
|
+
import { TokenUsage, TokenUsageDescriptor } from "../entities/tokenusage";
|
|
6
|
+
import { TokenUsageReportRepository } from "../repositories/tokenusage.report.repository";
|
|
7
|
+
/**
|
|
8
|
+
* Serialises the self-service reporting rollups as JSON:API documents.
|
|
9
|
+
*
|
|
10
|
+
* Same generics, descriptor and super() argument order as its two siblings in
|
|
11
|
+
* this folder, so all three tokenusage services are wired identically.
|
|
12
|
+
* `descriptor` and the inherited `model` are the TokenUsage entity — that is
|
|
13
|
+
* what the repository reads and what the base class needs to be coherent — while
|
|
14
|
+
* the three methods below serialise with the AGGREGATE descriptors' models,
|
|
15
|
+
* because their return shapes are rollups, not TokenUsage nodes.
|
|
16
|
+
*
|
|
17
|
+
* JSON:API documents are built exclusively by the framework; nothing here
|
|
18
|
+
* hand-assembles a { data: { type, attributes } } object.
|
|
19
|
+
*/
|
|
20
|
+
export declare class TokenUsageReportService extends AbstractService<TokenUsage, typeof TokenUsageDescriptor.relationships> {
|
|
21
|
+
protected readonly tokenUsageReportRepository: TokenUsageReportRepository;
|
|
22
|
+
protected readonly descriptor: import("../../..").EntityDescriptor<TokenUsage, {}>;
|
|
23
|
+
constructor(jsonApiService: JsonApiService, tokenUsageReportRepository: TokenUsageReportRepository, clsService: ClsService);
|
|
24
|
+
getSummary(params: {
|
|
25
|
+
from: string;
|
|
26
|
+
to: string;
|
|
27
|
+
}): Promise<any>;
|
|
28
|
+
getTimeline(params: {
|
|
29
|
+
from: string;
|
|
30
|
+
to: string;
|
|
31
|
+
granularity: "day" | "week" | "month";
|
|
32
|
+
stackBy: "type";
|
|
33
|
+
}): Promise<any>;
|
|
34
|
+
getBreakdown(params: {
|
|
35
|
+
from: string;
|
|
36
|
+
to: string;
|
|
37
|
+
dimension: TokenUsageReportDimension;
|
|
38
|
+
targetLabel?: string;
|
|
39
|
+
metric: TokenUsageReportMetric;
|
|
40
|
+
limit: number;
|
|
41
|
+
}): Promise<any>;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=tokenusage.report.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenusage.report.service.d.ts","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/services/tokenusage.report.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,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AACvG,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAI1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,8CAA8C,CAAC;AAE1F;;;;;;;;;;;;GAYG;AACH,qBACa,uBAAwB,SAAQ,eAAe,CAAC,UAAU,EAAE,OAAO,oBAAoB,CAAC,aAAa,CAAC;IAK/G,SAAS,CAAC,QAAQ,CAAC,0BAA0B,EAAE,0BAA0B;IAJ3E,SAAS,CAAC,QAAQ,CAAC,UAAU,sDAAwB;gBAGnD,cAAc,EAAE,cAAc,EACX,0BAA0B,EAAE,0BAA0B,EACzE,UAAU,EAAE,UAAU;IAKlB,UAAU,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAM9D,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,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC,GAAG,CAAC;IAWV,YAAY,CAAC,MAAM,EAAE;QACzB,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,SAAS,EAAE,yBAAyB,CAAC;QACrC,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,sBAAsB,CAAC;QAC/B,KAAK,EAAE,MAAM,CAAC;KACf,GAAG,OAAO,CAAC,GAAG,CAAC;CAYjB"}
|
|
@@ -0,0 +1,73 @@
|
|
|
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.TokenUsageReportService = 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_report_breakdown_1 = require("../entities/tokenusage-report-breakdown");
|
|
19
|
+
const tokenusage_report_summary_1 = require("../entities/tokenusage-report-summary");
|
|
20
|
+
const tokenusage_report_timeline_1 = require("../entities/tokenusage-report-timeline");
|
|
21
|
+
const tokenusage_report_repository_1 = require("../repositories/tokenusage.report.repository");
|
|
22
|
+
/**
|
|
23
|
+
* Serialises the self-service reporting rollups as JSON:API documents.
|
|
24
|
+
*
|
|
25
|
+
* Same generics, descriptor and super() argument order as its two siblings in
|
|
26
|
+
* this folder, so all three tokenusage services are wired identically.
|
|
27
|
+
* `descriptor` and the inherited `model` are the TokenUsage entity — that is
|
|
28
|
+
* what the repository reads and what the base class needs to be coherent — while
|
|
29
|
+
* the three methods below serialise with the AGGREGATE descriptors' models,
|
|
30
|
+
* because their return shapes are rollups, not TokenUsage nodes.
|
|
31
|
+
*
|
|
32
|
+
* JSON:API documents are built exclusively by the framework; nothing here
|
|
33
|
+
* hand-assembles a { data: { type, attributes } } object.
|
|
34
|
+
*/
|
|
35
|
+
let TokenUsageReportService = class TokenUsageReportService extends abstract_service_1.AbstractService {
|
|
36
|
+
constructor(jsonApiService, tokenUsageReportRepository, clsService) {
|
|
37
|
+
super(jsonApiService, tokenUsageReportRepository, clsService, tokenusage_1.TokenUsageDescriptor.model);
|
|
38
|
+
this.tokenUsageReportRepository = tokenUsageReportRepository;
|
|
39
|
+
this.descriptor = tokenusage_1.TokenUsageDescriptor;
|
|
40
|
+
}
|
|
41
|
+
async getSummary(params) {
|
|
42
|
+
const rows = await this.tokenUsageReportRepository.findSummary({ from: params.from, to: params.to });
|
|
43
|
+
return this.jsonApiService.buildList(tokenusage_report_summary_1.TokenUsageReportSummaryDescriptor.model, rows);
|
|
44
|
+
}
|
|
45
|
+
async getTimeline(params) {
|
|
46
|
+
const rows = await this.tokenUsageReportRepository.findTimeline({
|
|
47
|
+
from: params.from,
|
|
48
|
+
to: params.to,
|
|
49
|
+
granularity: params.granularity,
|
|
50
|
+
stackBy: params.stackBy,
|
|
51
|
+
});
|
|
52
|
+
return this.jsonApiService.buildList(tokenusage_report_timeline_1.TokenUsageReportTimelineDescriptor.model, rows);
|
|
53
|
+
}
|
|
54
|
+
async getBreakdown(params) {
|
|
55
|
+
const rows = await this.tokenUsageReportRepository.findBreakdown({
|
|
56
|
+
from: params.from,
|
|
57
|
+
to: params.to,
|
|
58
|
+
dimension: params.dimension,
|
|
59
|
+
targetLabel: params.targetLabel,
|
|
60
|
+
metric: params.metric,
|
|
61
|
+
limit: params.limit,
|
|
62
|
+
});
|
|
63
|
+
return this.jsonApiService.buildList(tokenusage_report_breakdown_1.TokenUsageReportBreakdownDescriptor.model, rows);
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
exports.TokenUsageReportService = TokenUsageReportService;
|
|
67
|
+
exports.TokenUsageReportService = TokenUsageReportService = __decorate([
|
|
68
|
+
(0, common_1.Injectable)(),
|
|
69
|
+
__metadata("design:paramtypes", [jsonapi_service_1.JsonApiService,
|
|
70
|
+
tokenusage_report_repository_1.TokenUsageReportRepository,
|
|
71
|
+
nestjs_cls_1.ClsService])
|
|
72
|
+
], TokenUsageReportService);
|
|
73
|
+
//# sourceMappingURL=tokenusage.report.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenusage.report.service.js","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/services/tokenusage.report.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,2CAAwC;AACxC,oFAAgF;AAChF,qFAAiF;AAEjF,uDAA0E;AAC1E,yFAA8F;AAC9F,qFAA0F;AAC1F,uFAA4F;AAC5F,+FAA0F;AAE1F;;;;;;;;;;;;GAYG;AAEI,IAAM,uBAAuB,GAA7B,MAAM,uBAAwB,SAAQ,kCAAsE;IAGjH,YACE,cAA8B,EACX,0BAAsD,EACzE,UAAsB;QAEtB,KAAK,CAAC,cAAc,EAAE,0BAA0B,EAAE,UAAU,EAAE,iCAAoB,CAAC,KAAK,CAAC,CAAC;QAHvE,+BAA0B,GAA1B,0BAA0B,CAA4B;QAJxD,eAAU,GAAG,iCAAoB,CAAC;IAQrD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAoC;QACnD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QAErG,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,6DAAiC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACtF,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAKjB;QACC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAAC,YAAY,CAAC;YAC9D,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,+DAAkC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACvF,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAOlB;QACC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAAC,aAAa,CAAC;YAC/D,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,iEAAmC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACxF,CAAC;CACF,CAAA;AApDY,0DAAuB;kCAAvB,uBAAuB;IADnC,IAAA,mBAAU,GAAE;qCAKO,gCAAc;QACiB,yDAA0B;QAC7D,uBAAU;GANb,uBAAuB,CAoDnC"}
|
|
@@ -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;
|
|
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;AAkBtD,qBAoBa,gBAAiB,YAAW,YAAY;IACnD,YAAY;CASb"}
|
|
@@ -10,13 +10,19 @@ exports.TokenUsageModule = void 0;
|
|
|
10
10
|
const common_1 = require("@nestjs/common");
|
|
11
11
|
const registry_1 = require("../../common/registries/registry");
|
|
12
12
|
const tokenusage_admin_controller_1 = require("./controllers/tokenusage.admin.controller");
|
|
13
|
+
const tokenusage_report_controller_1 = require("./controllers/tokenusage.report.controller");
|
|
13
14
|
const tokenusage_1 = require("./entities/tokenusage");
|
|
14
15
|
const tokenusage_admin_breakdown_1 = require("./entities/tokenusage-admin-breakdown");
|
|
15
16
|
const tokenusage_admin_summary_1 = require("./entities/tokenusage-admin-summary");
|
|
16
17
|
const tokenusage_admin_timeline_1 = require("./entities/tokenusage-admin-timeline");
|
|
18
|
+
const tokenusage_report_breakdown_1 = require("./entities/tokenusage-report-breakdown");
|
|
19
|
+
const tokenusage_report_summary_1 = require("./entities/tokenusage-report-summary");
|
|
20
|
+
const tokenusage_report_timeline_1 = require("./entities/tokenusage-report-timeline");
|
|
17
21
|
const tokenusage_admin_repository_1 = require("./repositories/tokenusage.admin.repository");
|
|
22
|
+
const tokenusage_report_repository_1 = require("./repositories/tokenusage.report.repository");
|
|
18
23
|
const tokenusage_repository_1 = require("./repositories/tokenusage.repository");
|
|
19
24
|
const tokenusage_admin_service_1 = require("./services/tokenusage.admin.service");
|
|
25
|
+
const tokenusage_report_service_1 = require("./services/tokenusage.report.service");
|
|
20
26
|
const tokenusage_service_1 = require("./services/tokenusage.service");
|
|
21
27
|
let TokenUsageModule = class TokenUsageModule {
|
|
22
28
|
onModuleInit() {
|
|
@@ -24,23 +30,31 @@ let TokenUsageModule = class TokenUsageModule {
|
|
|
24
30
|
registry_1.modelRegistry.register(tokenusage_admin_summary_1.TokenUsageAdminSummaryDescriptor.model);
|
|
25
31
|
registry_1.modelRegistry.register(tokenusage_admin_timeline_1.TokenUsageAdminTimelineDescriptor.model);
|
|
26
32
|
registry_1.modelRegistry.register(tokenusage_admin_breakdown_1.TokenUsageAdminBreakdownDescriptor.model);
|
|
33
|
+
registry_1.modelRegistry.register(tokenusage_report_summary_1.TokenUsageReportSummaryDescriptor.model);
|
|
34
|
+
registry_1.modelRegistry.register(tokenusage_report_timeline_1.TokenUsageReportTimelineDescriptor.model);
|
|
35
|
+
registry_1.modelRegistry.register(tokenusage_report_breakdown_1.TokenUsageReportBreakdownDescriptor.model);
|
|
27
36
|
}
|
|
28
37
|
};
|
|
29
38
|
exports.TokenUsageModule = TokenUsageModule;
|
|
30
39
|
exports.TokenUsageModule = TokenUsageModule = __decorate([
|
|
31
40
|
(0, common_1.Module)({
|
|
32
|
-
controllers: [tokenusage_admin_controller_1.TokenUsageAdminController],
|
|
41
|
+
controllers: [tokenusage_admin_controller_1.TokenUsageAdminController, tokenusage_report_controller_1.TokenUsageReportController],
|
|
33
42
|
providers: [
|
|
34
43
|
tokenusage_1.TokenUsageDescriptor.model.serialiser,
|
|
35
44
|
tokenusage_admin_summary_1.TokenUsageAdminSummaryDescriptor.model.serialiser,
|
|
36
45
|
tokenusage_admin_timeline_1.TokenUsageAdminTimelineDescriptor.model.serialiser,
|
|
37
46
|
tokenusage_admin_breakdown_1.TokenUsageAdminBreakdownDescriptor.model.serialiser,
|
|
47
|
+
tokenusage_report_summary_1.TokenUsageReportSummaryDescriptor.model.serialiser,
|
|
48
|
+
tokenusage_report_timeline_1.TokenUsageReportTimelineDescriptor.model.serialiser,
|
|
49
|
+
tokenusage_report_breakdown_1.TokenUsageReportBreakdownDescriptor.model.serialiser,
|
|
38
50
|
tokenusage_repository_1.TokenUsageRepository,
|
|
39
51
|
tokenusage_admin_repository_1.TokenUsageAdminRepository,
|
|
52
|
+
tokenusage_report_repository_1.TokenUsageReportRepository,
|
|
40
53
|
tokenusage_service_1.TokenUsageService,
|
|
41
54
|
tokenusage_admin_service_1.TokenUsageAdminService,
|
|
55
|
+
tokenusage_report_service_1.TokenUsageReportService,
|
|
42
56
|
],
|
|
43
|
-
exports: [tokenusage_service_1.TokenUsageService, tokenusage_admin_service_1.TokenUsageAdminService],
|
|
57
|
+
exports: [tokenusage_service_1.TokenUsageService, tokenusage_admin_service_1.TokenUsageAdminService, tokenusage_report_service_1.TokenUsageReportService],
|
|
44
58
|
imports: [],
|
|
45
59
|
})
|
|
46
60
|
], 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,2FAAsF;AACtF,sDAA6D;AAC7D,sFAA2F;AAC3F,kFAAuF;AACvF,oFAAyF;AACzF,4FAAuF;AACvF,gFAA4E;AAC5E,kFAA6E;AAC7E,sEAAkE;
|
|
1
|
+
{"version":3,"file":"tokenusage.module.js","sourceRoot":"","sources":["../../../src/foundations/tokenusage/tokenusage.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAsD;AACtD,+DAAiE;AACjE,2FAAsF;AACtF,6FAAwF;AACxF,sDAA6D;AAC7D,sFAA2F;AAC3F,kFAAuF;AACvF,oFAAyF;AACzF,wFAA6F;AAC7F,oFAAyF;AACzF,sFAA2F;AAC3F,4FAAuF;AACvF,8FAAyF;AACzF,gFAA4E;AAC5E,kFAA6E;AAC7E,oFAA+E;AAC/E,sEAAkE;AAsB3D,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;QACjE,wBAAa,CAAC,QAAQ,CAAC,6DAAiC,CAAC,KAAK,CAAC,CAAC;QAChE,wBAAa,CAAC,QAAQ,CAAC,+DAAkC,CAAC,KAAK,CAAC,CAAC;QACjE,wBAAa,CAAC,QAAQ,CAAC,iEAAmC,CAAC,KAAK,CAAC,CAAC;IACpE,CAAC;CACF,CAAA;AAVY,4CAAgB;2BAAhB,gBAAgB;IApB5B,IAAA,eAAM,EAAC;QACN,WAAW,EAAE,CAAC,uDAAyB,EAAE,yDAA0B,CAAC;QACpE,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,6DAAiC,CAAC,KAAK,CAAC,UAAU;YAClD,+DAAkC,CAAC,KAAK,CAAC,UAAU;YACnD,iEAAmC,CAAC,KAAK,CAAC,UAAU;YACpD,4CAAoB;YACpB,uDAAyB;YACzB,yDAA0B;YAC1B,sCAAiB;YACjB,iDAAsB;YACtB,mDAAuB;SACxB;QACD,OAAO,EAAE,CAAC,sCAAiB,EAAE,iDAAsB,EAAE,mDAAuB,CAAC;QAC7E,OAAO,EAAE,EAAE;KACZ,CAAC;GACW,gBAAgB,CAU5B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.repository.d.ts","sourceRoot":"","sources":["../../../../src/foundations/user/repositories/user.repository.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,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;AAYnF,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAEhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAE5E;;;;;;;;;;;;;;GAcG;AACH,qBACa,cAAe,SAAQ,kBAAkB,CAAC,IAAI,EAAE,OAAO,cAAc,CAAC,aAAa,CAAC;IAO7F,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB;IANzD,SAAS,CAAC,QAAQ,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;;OAAkB;gBAG7C,KAAK,EAAE,YAAY,EACnB,eAAe,EAAE,eAAe,EAChC,UAAU,EAAE,UAAU,EACH,iBAAiB,EAAE,iBAAiB;IAKzD;;;;;;;OAOG;IACG,YAAY;IAQZ,gBAAgB,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;IAmB9D,eAAe,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBhE;;;;OAIG;IACG,qBAAqB,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA+BhE,YAAY,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAsDvD,YAAY,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B3E,WAAW,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAgC/E,UAAU,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBnD,QAAQ,CAAC,MAAM,EAAE;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,MAAM,CAAC,EAAE,sBAAsB,CAAC;KACjC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"user.repository.d.ts","sourceRoot":"","sources":["../../../../src/foundations/user/repositories/user.repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -267,8 +267,12 @@ let UserRepository = class UserRepository extends abstract_repository_1.Abstract
|
|
|
267
267
|
query.query += `
|
|
268
268
|
{CURSOR}
|
|
269
269
|
|
|
270
|
+
// The company is what makes the platform-wide list readable: an
|
|
271
|
+
// administrator browsing every user needs to see which company each one
|
|
272
|
+
// belongs to. OPTIONAL, because a system administrator belongs to none.
|
|
273
|
+
OPTIONAL MATCH (${user_meta_1.userMeta.nodeName})-[:BELONGS_TO]->(${user_meta_1.userMeta.nodeName}_${company_meta_1.companyMeta.nodeName}:${company_meta_1.companyMeta.labelName})
|
|
270
274
|
${(0, membership_query_1.membershipRoleMatch)({ userAlias: user_meta_1.userMeta.nodeName, roleAlias: `${user_meta_1.userMeta.nodeName}_role` })}
|
|
271
|
-
RETURN ${user_meta_1.userMeta.nodeName}, ${user_meta_1.userMeta.nodeName}_role
|
|
275
|
+
RETURN ${user_meta_1.userMeta.nodeName}, ${user_meta_1.userMeta.nodeName}_role, ${user_meta_1.userMeta.nodeName}_${company_meta_1.companyMeta.nodeName}
|
|
272
276
|
`;
|
|
273
277
|
return this.neo4j.readMany(query);
|
|
274
278
|
}
|