@carlonicora/nestjs-neo4jsonapi 2.6.0 → 2.7.1
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/stripe-price/repositories/stripe-price.repository.js +8 -8
- package/dist/foundations/stripe-price/repositories/stripe-price.repository.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/package.json +1 -1
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TOKEN_USAGE_TARGET_LABELS = void 0;
|
|
4
|
+
exports.normaliseTargetLabel = normaliseTargetLabel;
|
|
5
|
+
exports.buildTargetGrouping = buildTargetGrouping;
|
|
6
|
+
/**
|
|
7
|
+
* The Neo4j labels a consuming application allows the token-usage breakdown to
|
|
8
|
+
* group by through the polymorphic USED_FOR edge.
|
|
9
|
+
*
|
|
10
|
+
* The label SELECTS A CYPHER CLAUSE — it is not a bound value — so it can never
|
|
11
|
+
* be taken from the request unchecked. The repository matches the requested
|
|
12
|
+
* label against this allowlist and throws BadRequestException on a miss; nothing
|
|
13
|
+
* that did not come from here ever reaches the query text.
|
|
14
|
+
*
|
|
15
|
+
* Supplied by the app from a @Global() module, mirroring
|
|
16
|
+
* ASSISTANT_SEED_CONTEXT_PROVIDERS: the library's TokenUsageModule cannot import
|
|
17
|
+
* an application feature module, and consumes this with
|
|
18
|
+
* @Optional() @Inject(TOKEN_USAGE_TARGET_LABELS). Absent → [] → dimension=target
|
|
19
|
+
* is rejected, which is the correct default for an app that has not opted in.
|
|
20
|
+
*/
|
|
21
|
+
exports.TOKEN_USAGE_TARGET_LABELS = Symbol("TOKEN_USAGE_TARGET_LABELS");
|
|
22
|
+
/**
|
|
23
|
+
* Neo4j labels and relationship types are identifiers, not values, so they
|
|
24
|
+
* cannot be parameterised. Everything interpolated into a query is checked
|
|
25
|
+
* against this first — a second lock behind the allowlist, so a typo or a
|
|
26
|
+
* careless app config fails loudly instead of producing arbitrary Cypher.
|
|
27
|
+
*/
|
|
28
|
+
const SAFE_IDENTIFIER = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
29
|
+
/** Applies the defaults and rejects anything that is not a plain identifier. */
|
|
30
|
+
function normaliseTargetLabel(entry) {
|
|
31
|
+
const resolved = typeof entry === "string"
|
|
32
|
+
? { label: entry, via: [], maxDepth: 0 }
|
|
33
|
+
: { label: entry.label, via: entry.via ?? [], maxDepth: entry.maxDepth ?? 1 };
|
|
34
|
+
if (!SAFE_IDENTIFIER.test(resolved.label))
|
|
35
|
+
throw new Error(`TOKEN_USAGE_TARGET_LABELS: "${resolved.label}" is not a valid Neo4j label`);
|
|
36
|
+
for (const relationship of resolved.via)
|
|
37
|
+
if (!SAFE_IDENTIFIER.test(relationship))
|
|
38
|
+
throw new Error(`TOKEN_USAGE_TARGET_LABELS: "${relationship}" is not a valid relationship type`);
|
|
39
|
+
return resolved;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* The Cypher that binds `grp` to the entity a usage row is attributed to.
|
|
43
|
+
*
|
|
44
|
+
* Lives here rather than in either repository because the administrative and
|
|
45
|
+
* the self-service breakdowns must group identically — two copies of this
|
|
46
|
+
* traversal would drift, and the two surfaces would then report different
|
|
47
|
+
* totals for the same window.
|
|
48
|
+
*
|
|
49
|
+
* With no rollup it is the original direct match. With one, the traversal is
|
|
50
|
+
* `*0..maxDepth`: depth zero keeps rows that already point at the target label,
|
|
51
|
+
* so a campaign named directly and a campaign reached through its session land
|
|
52
|
+
* in the same bucket.
|
|
53
|
+
*
|
|
54
|
+
* `head(collect(...))` is deliberate. An entity reachable from two targets would
|
|
55
|
+
* otherwise multiply its row and be counted once per path, inflating the totals;
|
|
56
|
+
* collapsing to one target per usage record keeps the column summing to the same
|
|
57
|
+
* figure the by-operation panel reports. Ordering by id makes the pick stable
|
|
58
|
+
* across requests rather than dependent on traversal order.
|
|
59
|
+
*
|
|
60
|
+
* @param carried the variables that must survive into the grouping, in order —
|
|
61
|
+
* the admin query carries its company node, the report query does not.
|
|
62
|
+
*/
|
|
63
|
+
function buildTargetGrouping(params) {
|
|
64
|
+
const { target, nodeName, carried } = params;
|
|
65
|
+
const carry = [nodeName, ...carried].join(", ");
|
|
66
|
+
if (target.via.length === 0 || target.maxDepth === 0)
|
|
67
|
+
return `MATCH (${nodeName})-[:USED_FOR]->(grp:${target.label})\n WITH ${carry}, grp`;
|
|
68
|
+
// One leading colon, then bare types: `:A|B`. Neo4j rejects the repeated-colon
|
|
69
|
+
// form `:A|:B` whenever a variable length is attached, which this always has.
|
|
70
|
+
const relationships = `:${target.via.join("|")}`;
|
|
71
|
+
return [
|
|
72
|
+
`MATCH (${nodeName})-[:USED_FOR]->(usageTarget)`,
|
|
73
|
+
` OPTIONAL MATCH (usageTarget)-[${relationships}*0..${target.maxDepth}]->(rollup:${target.label})`,
|
|
74
|
+
` WITH ${carry}, usageTarget, rollup ORDER BY rollup.id`,
|
|
75
|
+
` WITH ${carry}, head(collect(rollup)) AS grp`,
|
|
76
|
+
` WHERE grp IS NOT NULL`,
|
|
77
|
+
].join("\n");
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=tokenusage.target-labels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenusage.target-labels.js","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/common/tokenusage.target-labels.ts"],"names":[],"mappings":";;;AA4EA,oDAcC;AAwBD,kDAsBC;AAxID;;;;;;;;;;;;;;GAcG;AACU,QAAA,yBAAyB,GAAG,MAAM,CAAC,2BAA2B,CAAC,CAAC;AAoD7E;;;;;GAKG;AACH,MAAM,eAAe,GAAG,0BAA0B,CAAC;AAEnD,gFAAgF;AAChF,SAAgB,oBAAoB,CAAC,KAA4B;IAC/D,MAAM,QAAQ,GACZ,OAAO,KAAK,KAAK,QAAQ;QACvB,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE;QACxC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC;IAElF,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,+BAA+B,QAAQ,CAAC,KAAK,8BAA8B,CAAC,CAAC;IAE/F,KAAK,MAAM,YAAY,IAAI,QAAQ,CAAC,GAAG;QACrC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,+BAA+B,YAAY,oCAAoC,CAAC,CAAC;IAErG,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,SAAgB,mBAAmB,CAAC,MAInC;IACC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAC7C,MAAM,KAAK,GAAG,CAAC,QAAQ,EAAE,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEhD,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC;QAClD,OAAO,UAAU,QAAQ,uBAAuB,MAAM,CAAC,KAAK,iBAAiB,KAAK,OAAO,CAAC;IAE5F,+EAA+E;IAC/E,8EAA8E;IAC9E,MAAM,aAAa,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IAEjD,OAAO;QACL,UAAU,QAAQ,8BAA8B;QAChD,uCAAuC,aAAa,OAAO,MAAM,CAAC,QAAQ,cAAc,MAAM,CAAC,KAAK,GAAG;QACvG,cAAc,KAAK,0CAA0C;QAC7D,cAAc,KAAK,gCAAgC;QACnD,6BAA6B;KAC9B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|
|
@@ -20,7 +20,7 @@ export declare class TokenUsageAdminController {
|
|
|
20
20
|
constructor(service: TokenUsageAdminService);
|
|
21
21
|
getSummary(reply: FastifyReply, from?: string, to?: string, companyId?: string): Promise<void>;
|
|
22
22
|
getTimeline(reply: FastifyReply, from?: string, to?: string, granularity?: string, stackBy?: string, companyId?: string): Promise<void>;
|
|
23
|
-
getBreakdown(reply: FastifyReply, from?: string, to?: string, dimension?: string, scope?: string, companyId?: string, limit?: string): Promise<void>;
|
|
23
|
+
getBreakdown(reply: FastifyReply, from?: string, to?: string, dimension?: string, scope?: string, companyId?: string, limit?: string, targetLabel?: string): Promise<void>;
|
|
24
24
|
private _oneOf;
|
|
25
25
|
private _range;
|
|
26
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenusage.admin.controller.d.ts","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/controllers/tokenusage.admin.controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAKvC,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAU9E;;;;;;;;;;;;;;GAcG;AACH,qBAEa,yBAAyB;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,sBAAsB;IAItD,UAAU,CACP,KAAK,EAAE,YAAY,EACX,IAAI,CAAC,EAAE,MAAM,EACf,EAAE,CAAC,EAAE,MAAM,EACJ,SAAS,CAAC,EAAE,MAAM;IAQlC,WAAW,CACR,KAAK,EAAE,YAAY,EACX,IAAI,CAAC,EAAE,MAAM,EACf,EAAE,CAAC,EAAE,MAAM,EACF,WAAW,CAAC,EAAE,MAAM,EACxB,OAAO,CAAC,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM;IAelC,YAAY,CACT,KAAK,EAAE,YAAY,EACX,IAAI,CAAC,EAAE,MAAM,EACf,EAAE,CAAC,EAAE,MAAM,EACJ,SAAS,CAAC,EAAE,MAAM,EACtB,KAAK,CAAC,EAAE,MAAM,EACV,SAAS,CAAC,EAAE,MAAM,EACtB,KAAK,CAAC,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"tokenusage.admin.controller.d.ts","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/controllers/tokenusage.admin.controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAKvC,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAU9E;;;;;;;;;;;;;;GAcG;AACH,qBAEa,yBAAyB;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,sBAAsB;IAItD,UAAU,CACP,KAAK,EAAE,YAAY,EACX,IAAI,CAAC,EAAE,MAAM,EACf,EAAE,CAAC,EAAE,MAAM,EACJ,SAAS,CAAC,EAAE,MAAM;IAQlC,WAAW,CACR,KAAK,EAAE,YAAY,EACX,IAAI,CAAC,EAAE,MAAM,EACf,EAAE,CAAC,EAAE,MAAM,EACF,WAAW,CAAC,EAAE,MAAM,EACxB,OAAO,CAAC,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM;IAelC,YAAY,CACT,KAAK,EAAE,YAAY,EACX,IAAI,CAAC,EAAE,MAAM,EACf,EAAE,CAAC,EAAE,MAAM,EACJ,SAAS,CAAC,EAAE,MAAM,EACtB,KAAK,CAAC,EAAE,MAAM,EACV,SAAS,CAAC,EAAE,MAAM,EACtB,KAAK,CAAC,EAAE,MAAM,EACR,WAAW,CAAC,EAAE,MAAM;IAsB5C,OAAO,CAAC,MAAM;IAOd,OAAO,CAAC,MAAM;CAWf"}
|
|
@@ -21,7 +21,7 @@ const tokenusage_meta_1 = require("../entities/tokenusage.meta");
|
|
|
21
21
|
const tokenusage_admin_service_1 = require("../services/tokenusage.admin.service");
|
|
22
22
|
const GRANULARITIES = ["day", "week", "month"];
|
|
23
23
|
const STACK_BY = ["scope", "type", "company"];
|
|
24
|
-
const DIMENSIONS = ["company", "user", "operation"];
|
|
24
|
+
const DIMENSIONS = ["company", "user", "operation", "target"];
|
|
25
25
|
const SCOPES = ["customer", "platform"];
|
|
26
26
|
const DEFAULT_WINDOW_DAYS = 30;
|
|
27
27
|
const ONE_DAY_MS = 24 * 60 * 60 * 1000;
|
|
@@ -57,7 +57,7 @@ let TokenUsageAdminController = class TokenUsageAdminController {
|
|
|
57
57
|
companyId,
|
|
58
58
|
}));
|
|
59
59
|
}
|
|
60
|
-
async getBreakdown(reply, from, to, dimension, scope, companyId, limit) {
|
|
60
|
+
async getBreakdown(reply, from, to, dimension, scope, companyId, limit, targetLabel) {
|
|
61
61
|
const range = this._range(from, to);
|
|
62
62
|
const parsedLimit = limit === undefined ? 10 : Number(limit);
|
|
63
63
|
if (!Number.isInteger(parsedLimit) || parsedLimit < 1 || parsedLimit > 100)
|
|
@@ -65,6 +65,10 @@ let TokenUsageAdminController = class TokenUsageAdminController {
|
|
|
65
65
|
reply.send(await this.service.getBreakdown({
|
|
66
66
|
...range,
|
|
67
67
|
dimension: this._oneOf(dimension, DIMENSIONS, "company"),
|
|
68
|
+
// Passed through raw on purpose: the allowlist is application-specific
|
|
69
|
+
// and injected into the repository, which is the single place that
|
|
70
|
+
// validates it. Do not add a second allowlist here.
|
|
71
|
+
targetLabel,
|
|
68
72
|
scope: this._oneOf(scope, SCOPES, "customer"),
|
|
69
73
|
companyId,
|
|
70
74
|
limit: parsedLimit,
|
|
@@ -124,8 +128,9 @@ __decorate([
|
|
|
124
128
|
__param(4, (0, common_1.Query)("scope")),
|
|
125
129
|
__param(5, (0, common_1.Query)("companyId")),
|
|
126
130
|
__param(6, (0, common_1.Query)("limit")),
|
|
131
|
+
__param(7, (0, common_1.Query)("targetLabel")),
|
|
127
132
|
__metadata("design:type", Function),
|
|
128
|
-
__metadata("design:paramtypes", [Object, String, String, String, String, String, String]),
|
|
133
|
+
__metadata("design:paramtypes", [Object, String, String, String, String, String, String, String]),
|
|
129
134
|
__metadata("design:returntype", Promise)
|
|
130
135
|
], TokenUsageAdminController.prototype, "getBreakdown", null);
|
|
131
136
|
exports.TokenUsageAdminController = TokenUsageAdminController = __decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenusage.admin.controller.js","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/controllers/tokenusage.admin.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA6F;AAE7F,yEAAqE;AACrE,gFAAmE;AACnE,0EAAqE;AACrE,iEAA6D;AAC7D,mFAA8E;AAE9E,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAU,CAAC;AACxD,MAAM,QAAQ,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAU,CAAC;AACvD,MAAM,UAAU,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"tokenusage.admin.controller.js","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/controllers/tokenusage.admin.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { FastifyReply } from "fastify";
|
|
2
|
+
import { TokenUsageReportService } from "../services/tokenusage.report.service";
|
|
3
|
+
/**
|
|
4
|
+
* Self-service token-usage reporting: the caller's own company only.
|
|
5
|
+
*
|
|
6
|
+
* NO @Roles decorator anywhere — any authenticated user may read their own
|
|
7
|
+
* company's usage. Scoping is the repository's job (buildDefaultMatch injects
|
|
8
|
+
* the CLS company), and no route here accepts a companyId, so there is nothing
|
|
9
|
+
* for a caller to point at somebody else's data.
|
|
10
|
+
*
|
|
11
|
+
* `metric` is allowlisted to credits and tokens: COST IS DELIBERATELY ABSENT.
|
|
12
|
+
* Customers are billed in credits, and exposing the platform's monetary cost
|
|
13
|
+
* would leak margin — enforcing that only in the UI would leave it one query
|
|
14
|
+
* string away, so the boundary refuses it.
|
|
15
|
+
*
|
|
16
|
+
* Mounted at /tokenusages/reports/* — no overlap with /tokenusages,
|
|
17
|
+
* /tokenusages/summary, /tokenusages/aggregated (a consuming app's own routes)
|
|
18
|
+
* or /tokenusages/administration/*, so importing TokenUsageModule cannot
|
|
19
|
+
* duplicate a Fastify route.
|
|
20
|
+
*
|
|
21
|
+
* Enum query params are validated against closed allowlists here rather than in
|
|
22
|
+
* a DTO: DTOs are body validation for POST/PUT/PATCH, and GET filters use bare
|
|
23
|
+
* @Query params. The allowlist matters — granularity and dimension select a
|
|
24
|
+
* Cypher clause, they are not bound values.
|
|
25
|
+
*/
|
|
26
|
+
export declare class TokenUsageReportController {
|
|
27
|
+
private readonly service;
|
|
28
|
+
constructor(service: TokenUsageReportService);
|
|
29
|
+
getSummary(reply: FastifyReply, from?: string, to?: string): Promise<void>;
|
|
30
|
+
getTimeline(reply: FastifyReply, from?: string, to?: string, granularity?: string): Promise<void>;
|
|
31
|
+
getBreakdown(reply: FastifyReply, from?: string, to?: string, dimension?: string, targetLabel?: string, metric?: string, limit?: string): Promise<void>;
|
|
32
|
+
private _oneOf;
|
|
33
|
+
private _range;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=tokenusage.report.controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenusage.report.controller.d.ts","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/controllers/tokenusage.report.controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGvC,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAShF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAEa,0BAA0B;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,uBAAuB;IAGvD,UAAU,CAAQ,KAAK,EAAE,YAAY,EAAiB,IAAI,CAAC,EAAE,MAAM,EAAe,EAAE,CAAC,EAAE,MAAM;IAK7F,WAAW,CACR,KAAK,EAAE,YAAY,EACX,IAAI,CAAC,EAAE,MAAM,EACf,EAAE,CAAC,EAAE,MAAM,EACF,WAAW,CAAC,EAAE,MAAM;IActC,YAAY,CACT,KAAK,EAAE,YAAY,EACX,IAAI,CAAC,EAAE,MAAM,EACf,EAAE,CAAC,EAAE,MAAM,EACJ,SAAS,CAAC,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,MAAM,EACzB,MAAM,CAAC,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,MAAM;IAiBhC,OAAO,CAAC,MAAM;IAOd,OAAO,CAAC,MAAM;CAWf"}
|
|
@@ -0,0 +1,133 @@
|
|
|
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.TokenUsageReportController = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const jwt_auth_guard_1 = require("../../../common/guards/jwt.auth.guard");
|
|
18
|
+
const tokenusage_meta_1 = require("../entities/tokenusage.meta");
|
|
19
|
+
const tokenusage_report_service_1 = require("../services/tokenusage.report.service");
|
|
20
|
+
const GRANULARITIES = ["day", "week", "month"];
|
|
21
|
+
const DIMENSIONS = ["operation", "target"];
|
|
22
|
+
const METRICS = ["credits", "tokens"];
|
|
23
|
+
const DEFAULT_WINDOW_DAYS = 30;
|
|
24
|
+
const ONE_DAY_MS = 24 * 60 * 60 * 1000;
|
|
25
|
+
/**
|
|
26
|
+
* Self-service token-usage reporting: the caller's own company only.
|
|
27
|
+
*
|
|
28
|
+
* NO @Roles decorator anywhere — any authenticated user may read their own
|
|
29
|
+
* company's usage. Scoping is the repository's job (buildDefaultMatch injects
|
|
30
|
+
* the CLS company), and no route here accepts a companyId, so there is nothing
|
|
31
|
+
* for a caller to point at somebody else's data.
|
|
32
|
+
*
|
|
33
|
+
* `metric` is allowlisted to credits and tokens: COST IS DELIBERATELY ABSENT.
|
|
34
|
+
* Customers are billed in credits, and exposing the platform's monetary cost
|
|
35
|
+
* would leak margin — enforcing that only in the UI would leave it one query
|
|
36
|
+
* string away, so the boundary refuses it.
|
|
37
|
+
*
|
|
38
|
+
* Mounted at /tokenusages/reports/* — no overlap with /tokenusages,
|
|
39
|
+
* /tokenusages/summary, /tokenusages/aggregated (a consuming app's own routes)
|
|
40
|
+
* or /tokenusages/administration/*, so importing TokenUsageModule cannot
|
|
41
|
+
* duplicate a Fastify route.
|
|
42
|
+
*
|
|
43
|
+
* Enum query params are validated against closed allowlists here rather than in
|
|
44
|
+
* a DTO: DTOs are body validation for POST/PUT/PATCH, and GET filters use bare
|
|
45
|
+
* @Query params. The allowlist matters — granularity and dimension select a
|
|
46
|
+
* Cypher clause, they are not bound values.
|
|
47
|
+
*/
|
|
48
|
+
let TokenUsageReportController = class TokenUsageReportController {
|
|
49
|
+
constructor(service) {
|
|
50
|
+
this.service = service;
|
|
51
|
+
}
|
|
52
|
+
async getSummary(reply, from, to) {
|
|
53
|
+
reply.send(await this.service.getSummary(this._range(from, to)));
|
|
54
|
+
}
|
|
55
|
+
async getTimeline(reply, from, to, granularity) {
|
|
56
|
+
reply.send(await this.service.getTimeline({
|
|
57
|
+
...this._range(from, to),
|
|
58
|
+
granularity: this._oneOf(granularity, GRANULARITIES, "day"),
|
|
59
|
+
// Pinned, not accepted: scope and company stacking are meaningless
|
|
60
|
+
// inside a single tenant, so "type" is the only series this surface has.
|
|
61
|
+
stackBy: "type",
|
|
62
|
+
}));
|
|
63
|
+
}
|
|
64
|
+
async getBreakdown(reply, from, to, dimension, targetLabel, metric, limit) {
|
|
65
|
+
const parsedLimit = limit === undefined ? 10 : Number(limit);
|
|
66
|
+
if (!Number.isInteger(parsedLimit) || parsedLimit < 1 || parsedLimit > 100)
|
|
67
|
+
throw new common_1.BadRequestException("limit must be an integer between 1 and 100");
|
|
68
|
+
reply.send(await this.service.getBreakdown({
|
|
69
|
+
...this._range(from, to),
|
|
70
|
+
dimension: this._oneOf(dimension, DIMENSIONS, "operation"),
|
|
71
|
+
targetLabel,
|
|
72
|
+
metric: this._oneOf(metric, METRICS, "credits"),
|
|
73
|
+
limit: parsedLimit,
|
|
74
|
+
}));
|
|
75
|
+
}
|
|
76
|
+
_oneOf(value, allowed, fallback) {
|
|
77
|
+
if (value === undefined)
|
|
78
|
+
return fallback;
|
|
79
|
+
if (!allowed.includes(value))
|
|
80
|
+
throw new common_1.BadRequestException(`Expected one of ${allowed.join(", ")}, received "${value}"`);
|
|
81
|
+
return value;
|
|
82
|
+
}
|
|
83
|
+
_range(from, to) {
|
|
84
|
+
const toDate = to ? new Date(to) : new Date();
|
|
85
|
+
if (Number.isNaN(toDate.getTime()))
|
|
86
|
+
throw new common_1.BadRequestException("`to` is not a valid date");
|
|
87
|
+
const fromDate = from ? new Date(from) : new Date(toDate.getTime() - DEFAULT_WINDOW_DAYS * ONE_DAY_MS);
|
|
88
|
+
if (Number.isNaN(fromDate.getTime()))
|
|
89
|
+
throw new common_1.BadRequestException("`from` is not a valid date");
|
|
90
|
+
if (fromDate > toDate)
|
|
91
|
+
throw new common_1.BadRequestException("`from` must not be later than `to`");
|
|
92
|
+
return { from: fromDate.toISOString(), to: toDate.toISOString() };
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
exports.TokenUsageReportController = TokenUsageReportController;
|
|
96
|
+
__decorate([
|
|
97
|
+
(0, common_1.Get)(`${tokenusage_meta_1.tokenUsageMeta.endpoint}/reports/summary`),
|
|
98
|
+
__param(0, (0, common_1.Res)()),
|
|
99
|
+
__param(1, (0, common_1.Query)("from")),
|
|
100
|
+
__param(2, (0, common_1.Query)("to")),
|
|
101
|
+
__metadata("design:type", Function),
|
|
102
|
+
__metadata("design:paramtypes", [Object, String, String]),
|
|
103
|
+
__metadata("design:returntype", Promise)
|
|
104
|
+
], TokenUsageReportController.prototype, "getSummary", null);
|
|
105
|
+
__decorate([
|
|
106
|
+
(0, common_1.Get)(`${tokenusage_meta_1.tokenUsageMeta.endpoint}/reports/timeline`),
|
|
107
|
+
__param(0, (0, common_1.Res)()),
|
|
108
|
+
__param(1, (0, common_1.Query)("from")),
|
|
109
|
+
__param(2, (0, common_1.Query)("to")),
|
|
110
|
+
__param(3, (0, common_1.Query)("granularity")),
|
|
111
|
+
__metadata("design:type", Function),
|
|
112
|
+
__metadata("design:paramtypes", [Object, String, String, String]),
|
|
113
|
+
__metadata("design:returntype", Promise)
|
|
114
|
+
], TokenUsageReportController.prototype, "getTimeline", null);
|
|
115
|
+
__decorate([
|
|
116
|
+
(0, common_1.Get)(`${tokenusage_meta_1.tokenUsageMeta.endpoint}/reports/breakdown`),
|
|
117
|
+
__param(0, (0, common_1.Res)()),
|
|
118
|
+
__param(1, (0, common_1.Query)("from")),
|
|
119
|
+
__param(2, (0, common_1.Query)("to")),
|
|
120
|
+
__param(3, (0, common_1.Query)("dimension")),
|
|
121
|
+
__param(4, (0, common_1.Query)("targetLabel")),
|
|
122
|
+
__param(5, (0, common_1.Query)("metric")),
|
|
123
|
+
__param(6, (0, common_1.Query)("limit")),
|
|
124
|
+
__metadata("design:type", Function),
|
|
125
|
+
__metadata("design:paramtypes", [Object, String, String, String, String, String, String]),
|
|
126
|
+
__metadata("design:returntype", Promise)
|
|
127
|
+
], TokenUsageReportController.prototype, "getBreakdown", null);
|
|
128
|
+
exports.TokenUsageReportController = TokenUsageReportController = __decorate([
|
|
129
|
+
(0, common_1.UseGuards)(jwt_auth_guard_1.JwtAuthGuard),
|
|
130
|
+
(0, common_1.Controller)(),
|
|
131
|
+
__metadata("design:paramtypes", [tokenusage_report_service_1.TokenUsageReportService])
|
|
132
|
+
], TokenUsageReportController);
|
|
133
|
+
//# sourceMappingURL=tokenusage.report.controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenusage.report.controller.js","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/controllers/tokenusage.report.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Entity } from "../../../common/abstracts/entity";
|
|
2
|
+
import { UsageMetrics } from "./usage-metric.fields";
|
|
2
3
|
/**
|
|
3
4
|
* One ranked row of a breakdown. The same shape serves all three dimensions —
|
|
4
5
|
* company, user and operation — which is why the three "by-X" endpoints
|
|
@@ -12,15 +13,9 @@ import { Entity } from "../../../common/abstracts/entity";
|
|
|
12
13
|
export type TokenUsageAdminBreakdownEntity = Entity & {
|
|
13
14
|
label: string;
|
|
14
15
|
sublabel?: string;
|
|
15
|
-
cost: number;
|
|
16
|
-
credits: number;
|
|
17
|
-
tokensIn: number;
|
|
18
|
-
tokensOut: number;
|
|
19
|
-
cached: number;
|
|
20
|
-
calls: number;
|
|
21
16
|
activeUsers?: number;
|
|
22
17
|
monthlyCredits?: number;
|
|
23
18
|
availableMonthlyCredits?: number;
|
|
24
|
-
};
|
|
19
|
+
} & UsageMetrics;
|
|
25
20
|
export declare const TokenUsageAdminBreakdownDescriptor: import("../../..").EntityDescriptor<TokenUsageAdminBreakdownEntity, {}>;
|
|
26
21
|
//# sourceMappingURL=tokenusage-admin-breakdown.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenusage-admin-breakdown.d.ts","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/entities/tokenusage-admin-breakdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"tokenusage-admin-breakdown.d.ts","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/entities/tokenusage-admin-breakdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAG1D,OAAO,EAAqB,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAExE;;;;;;;;;GASG;AACH,MAAM,MAAM,8BAA8B,GAAG,MAAM,GAAG;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC,GAAG,YAAY,CAAC;AAEjB,eAAO,MAAM,kCAAkC,yEAe7C,CAAC"}
|
|
@@ -3,18 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.TokenUsageAdminBreakdownDescriptor = void 0;
|
|
4
4
|
const define_entity_1 = require("../../../common/helpers/define-entity");
|
|
5
5
|
const tokenusage_admin_breakdown_meta_1 = require("./tokenusage-admin-breakdown.meta");
|
|
6
|
+
const usage_metric_fields_1 = require("./usage-metric.fields");
|
|
6
7
|
exports.TokenUsageAdminBreakdownDescriptor = (0, define_entity_1.defineEntity)()({
|
|
7
8
|
...tokenusage_admin_breakdown_meta_1.tokenUsageAdminBreakdownMeta,
|
|
8
9
|
isCompanyScoped: false,
|
|
9
10
|
fields: {
|
|
10
11
|
label: { type: "string", required: true },
|
|
11
12
|
sublabel: { type: "string" },
|
|
12
|
-
|
|
13
|
-
credits: { type: "number", required: true },
|
|
14
|
-
tokensIn: { type: "number", required: true },
|
|
15
|
-
tokensOut: { type: "number", required: true },
|
|
16
|
-
cached: { type: "number", required: true },
|
|
17
|
-
calls: { type: "number", required: true },
|
|
13
|
+
...usage_metric_fields_1.usageMetricFields,
|
|
18
14
|
activeUsers: { type: "number" },
|
|
19
15
|
monthlyCredits: { type: "number" },
|
|
20
16
|
availableMonthlyCredits: { type: "number" },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenusage-admin-breakdown.js","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/entities/tokenusage-admin-breakdown.ts"],"names":[],"mappings":";;;AACA,yEAAqE;AACrE,uFAAiF;
|
|
1
|
+
{"version":3,"file":"tokenusage-admin-breakdown.js","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/entities/tokenusage-admin-breakdown.ts"],"names":[],"mappings":";;;AACA,yEAAqE;AACrE,uFAAiF;AACjF,+DAAwE;AAoB3D,QAAA,kCAAkC,GAAG,IAAA,4BAAY,GAAkC,CAAC;IAC/F,GAAG,8DAA4B;IAE/B,eAAe,EAAE,KAAK;IAEtB,MAAM,EAAE;QACN,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;QACzC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC5B,GAAG,uCAAiB;QACpB,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC/B,cAAc,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAClC,uBAAuB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;KAC5C;IAED,aAAa,EAAE,EAAE;CAClB,CAAC,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Entity } from "../../../common/abstracts/entity";
|
|
2
|
+
import { UsageMetrics } from "./usage-metric.fields";
|
|
2
3
|
/**
|
|
3
4
|
* One row of the admin summary: a cost centre observed over one time window.
|
|
4
5
|
*
|
|
@@ -13,12 +14,6 @@ import { Entity } from "../../../common/abstracts/entity";
|
|
|
13
14
|
export type TokenUsageAdminSummaryEntity = Entity & {
|
|
14
15
|
scope: string;
|
|
15
16
|
window: string;
|
|
16
|
-
|
|
17
|
-
credits: number;
|
|
18
|
-
tokensIn: number;
|
|
19
|
-
tokensOut: number;
|
|
20
|
-
cached: number;
|
|
21
|
-
calls: number;
|
|
22
|
-
};
|
|
17
|
+
} & UsageMetrics;
|
|
23
18
|
export declare const TokenUsageAdminSummaryDescriptor: import("../../..").EntityDescriptor<TokenUsageAdminSummaryEntity, {}>;
|
|
24
19
|
//# sourceMappingURL=tokenusage-admin-summary.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenusage-admin-summary.d.ts","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/entities/tokenusage-admin-summary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"tokenusage-admin-summary.d.ts","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/entities/tokenusage-admin-summary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAG1D,OAAO,EAAqB,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAExE;;;;;;;;;;GAUG;AACH,MAAM,MAAM,4BAA4B,GAAG,MAAM,GAAG;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,YAAY,CAAC;AAEjB,eAAO,MAAM,gCAAgC,uEAY3C,CAAC"}
|
|
@@ -3,18 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.TokenUsageAdminSummaryDescriptor = void 0;
|
|
4
4
|
const define_entity_1 = require("../../../common/helpers/define-entity");
|
|
5
5
|
const tokenusage_admin_summary_meta_1 = require("./tokenusage-admin-summary.meta");
|
|
6
|
+
const usage_metric_fields_1 = require("./usage-metric.fields");
|
|
6
7
|
exports.TokenUsageAdminSummaryDescriptor = (0, define_entity_1.defineEntity)()({
|
|
7
8
|
...tokenusage_admin_summary_meta_1.tokenUsageAdminSummaryMeta,
|
|
8
9
|
isCompanyScoped: false,
|
|
9
10
|
fields: {
|
|
10
11
|
scope: { type: "string", required: true },
|
|
11
12
|
window: { type: "string", required: true },
|
|
12
|
-
|
|
13
|
-
credits: { type: "number", required: true },
|
|
14
|
-
tokensIn: { type: "number", required: true },
|
|
15
|
-
tokensOut: { type: "number", required: true },
|
|
16
|
-
cached: { type: "number", required: true },
|
|
17
|
-
calls: { type: "number", required: true },
|
|
13
|
+
...usage_metric_fields_1.usageMetricFields,
|
|
18
14
|
},
|
|
19
15
|
relationships: {},
|
|
20
16
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenusage-admin-summary.js","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/entities/tokenusage-admin-summary.ts"],"names":[],"mappings":";;;AACA,yEAAqE;AACrE,mFAA6E;
|
|
1
|
+
{"version":3,"file":"tokenusage-admin-summary.js","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/entities/tokenusage-admin-summary.ts"],"names":[],"mappings":";;;AACA,yEAAqE;AACrE,mFAA6E;AAC7E,+DAAwE;AAkB3D,QAAA,gCAAgC,GAAG,IAAA,4BAAY,GAAgC,CAAC;IAC3F,GAAG,0DAA0B;IAE7B,eAAe,EAAE,KAAK;IAEtB,MAAM,EAAE;QACN,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;QACzC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC1C,GAAG,uCAAiB;KACrB;IAED,aAAa,EAAE,EAAE;CAClB,CAAC,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Entity } from "../../../common/abstracts/entity";
|
|
2
|
+
import { UsageMetrics } from "./usage-metric.fields";
|
|
2
3
|
/**
|
|
3
4
|
* One (bucket, series) cell of the usage-over-time chart. Rows are flat; the
|
|
4
5
|
* frontend pivots them into stacked columns.
|
|
@@ -11,12 +12,6 @@ import { Entity } from "../../../common/abstracts/entity";
|
|
|
11
12
|
export type TokenUsageAdminTimelineEntity = Entity & {
|
|
12
13
|
bucket: string;
|
|
13
14
|
series: string;
|
|
14
|
-
|
|
15
|
-
credits: number;
|
|
16
|
-
tokensIn: number;
|
|
17
|
-
tokensOut: number;
|
|
18
|
-
cached: number;
|
|
19
|
-
calls: number;
|
|
20
|
-
};
|
|
15
|
+
} & UsageMetrics;
|
|
21
16
|
export declare const TokenUsageAdminTimelineDescriptor: import("../../..").EntityDescriptor<TokenUsageAdminTimelineEntity, {}>;
|
|
22
17
|
//# sourceMappingURL=tokenusage-admin-timeline.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenusage-admin-timeline.d.ts","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/entities/tokenusage-admin-timeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"tokenusage-admin-timeline.d.ts","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/entities/tokenusage-admin-timeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAG1D,OAAO,EAAqB,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAExE;;;;;;;;GAQG;AACH,MAAM,MAAM,6BAA6B,GAAG,MAAM,GAAG;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,YAAY,CAAC;AAEjB,eAAO,MAAM,iCAAiC,wEAY5C,CAAC"}
|
|
@@ -3,18 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.TokenUsageAdminTimelineDescriptor = void 0;
|
|
4
4
|
const define_entity_1 = require("../../../common/helpers/define-entity");
|
|
5
5
|
const tokenusage_admin_timeline_meta_1 = require("./tokenusage-admin-timeline.meta");
|
|
6
|
+
const usage_metric_fields_1 = require("./usage-metric.fields");
|
|
6
7
|
exports.TokenUsageAdminTimelineDescriptor = (0, define_entity_1.defineEntity)()({
|
|
7
8
|
...tokenusage_admin_timeline_meta_1.tokenUsageAdminTimelineMeta,
|
|
8
9
|
isCompanyScoped: false,
|
|
9
10
|
fields: {
|
|
10
11
|
bucket: { type: "date", required: true },
|
|
11
12
|
series: { type: "string", required: true },
|
|
12
|
-
|
|
13
|
-
credits: { type: "number", required: true },
|
|
14
|
-
tokensIn: { type: "number", required: true },
|
|
15
|
-
tokensOut: { type: "number", required: true },
|
|
16
|
-
cached: { type: "number", required: true },
|
|
17
|
-
calls: { type: "number", required: true },
|
|
13
|
+
...usage_metric_fields_1.usageMetricFields,
|
|
18
14
|
},
|
|
19
15
|
relationships: {},
|
|
20
16
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenusage-admin-timeline.js","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/entities/tokenusage-admin-timeline.ts"],"names":[],"mappings":";;;AACA,yEAAqE;AACrE,qFAA+E;
|
|
1
|
+
{"version":3,"file":"tokenusage-admin-timeline.js","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/entities/tokenusage-admin-timeline.ts"],"names":[],"mappings":";;;AACA,yEAAqE;AACrE,qFAA+E;AAC/E,+DAAwE;AAgB3D,QAAA,iCAAiC,GAAG,IAAA,4BAAY,GAAiC,CAAC;IAC7F,GAAG,4DAA2B;IAE9B,eAAe,EAAE,KAAK;IAEtB,MAAM,EAAE;QACN,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;QACxC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC1C,GAAG,uCAAiB;KACrB;IAED,aAAa,EAAE,EAAE;CAClB,CAAC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Entity } from "../../../common/abstracts/entity";
|
|
2
|
+
import { UsageMetrics } from "./usage-metric.fields";
|
|
3
|
+
/**
|
|
4
|
+
* One ranked row of a self-service breakdown. The same shape serves both
|
|
5
|
+
* dimensions — operation and target — which is why the two "by-X" panels
|
|
6
|
+
* collapse into a single `breakdown?dimension=` route.
|
|
7
|
+
*
|
|
8
|
+
* Deliberately WITHOUT the administrative breakdown's activeUsers /
|
|
9
|
+
* monthlyCredits / availableMonthlyCredits: those exist for the company
|
|
10
|
+
* dimension only, and the self-service page reads the caller's own balances from
|
|
11
|
+
* CurrentUserContext instead.
|
|
12
|
+
*
|
|
13
|
+
* NOT a Neo4j node — serialisation shape only.
|
|
14
|
+
*/
|
|
15
|
+
export type TokenUsageReportBreakdownEntity = Entity & {
|
|
16
|
+
label: string;
|
|
17
|
+
sublabel?: string;
|
|
18
|
+
} & UsageMetrics;
|
|
19
|
+
export declare const TokenUsageReportBreakdownDescriptor: import("../../..").EntityDescriptor<TokenUsageReportBreakdownEntity, {}>;
|
|
20
|
+
//# sourceMappingURL=tokenusage-report-breakdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenusage-report-breakdown.d.ts","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/entities/tokenusage-report-breakdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAG1D,OAAO,EAAqB,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAExE;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,+BAA+B,GAAG,MAAM,GAAG;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,YAAY,CAAC;AAEjB,eAAO,MAAM,mCAAmC,0EAY9C,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TokenUsageReportBreakdownDescriptor = void 0;
|
|
4
|
+
const define_entity_1 = require("../../../common/helpers/define-entity");
|
|
5
|
+
const tokenusage_report_breakdown_meta_1 = require("./tokenusage-report-breakdown.meta");
|
|
6
|
+
const usage_metric_fields_1 = require("./usage-metric.fields");
|
|
7
|
+
exports.TokenUsageReportBreakdownDescriptor = (0, define_entity_1.defineEntity)()({
|
|
8
|
+
...tokenusage_report_breakdown_meta_1.tokenUsageReportBreakdownMeta,
|
|
9
|
+
isCompanyScoped: false,
|
|
10
|
+
fields: {
|
|
11
|
+
label: { type: "string", required: true },
|
|
12
|
+
sublabel: { type: "string" },
|
|
13
|
+
...usage_metric_fields_1.usageMetricFields,
|
|
14
|
+
},
|
|
15
|
+
relationships: {},
|
|
16
|
+
});
|
|
17
|
+
//# sourceMappingURL=tokenusage-report-breakdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenusage-report-breakdown.js","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/entities/tokenusage-report-breakdown.ts"],"names":[],"mappings":";;;AACA,yEAAqE;AACrE,yFAAmF;AACnF,+DAAwE;AAmB3D,QAAA,mCAAmC,GAAG,IAAA,4BAAY,GAAmC,CAAC;IACjG,GAAG,gEAA6B;IAEhC,eAAe,EAAE,KAAK;IAEtB,MAAM,EAAE;QACN,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;QACzC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC5B,GAAG,uCAAiB;KACrB;IAED,aAAa,EAAE,EAAE;CAClB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenusage-report-breakdown.meta.d.ts","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/entities/tokenusage-report-breakdown.meta.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gDAAgD,CAAC;AAE1E,eAAO,MAAM,6BAA6B,EAAE,QAK3C,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.tokenUsageReportBreakdownMeta = void 0;
|
|
4
|
+
exports.tokenUsageReportBreakdownMeta = {
|
|
5
|
+
type: "tokenusage-report-breakdowns",
|
|
6
|
+
endpoint: "tokenusages/reports/breakdown",
|
|
7
|
+
nodeName: "tokenUsageReportBreakdown",
|
|
8
|
+
labelName: "TokenUsageReportBreakdown",
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=tokenusage-report-breakdown.meta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenusage-report-breakdown.meta.js","sourceRoot":"","sources":["../../../../src/foundations/tokenusage/entities/tokenusage-report-breakdown.meta.ts"],"names":[],"mappings":";;;AAEa,QAAA,6BAA6B,GAAa;IACrD,IAAI,EAAE,8BAA8B;IACpC,QAAQ,EAAE,+BAA+B;IACzC,QAAQ,EAAE,2BAA2B;IACrC,SAAS,EAAE,2BAA2B;CACvC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Entity } from "../../../common/abstracts/entity";
|
|
2
|
+
import { UsageMetrics } from "./usage-metric.fields";
|
|
3
|
+
/**
|
|
4
|
+
* One row of the self-service summary: the caller's own company observed over
|
|
5
|
+
* one time window.
|
|
6
|
+
*
|
|
7
|
+
* TWO rows are returned per request — window "current" and "previous" — which is
|
|
8
|
+
* what lets the KPI tile render both the value and its delta without a second
|
|
9
|
+
* call. There is no `scope` field: the administrative customer/platform split is
|
|
10
|
+
* meaningless inside a single tenant.
|
|
11
|
+
*
|
|
12
|
+
* NOT a Neo4j node: there is no TokenUsageReportSummary label. It is a
|
|
13
|
+
* serialisation shape only, exactly like TokenUsageAdminSummaryDescriptor.
|
|
14
|
+
*/
|
|
15
|
+
export type TokenUsageReportSummaryEntity = Entity & {
|
|
16
|
+
window: string;
|
|
17
|
+
} & UsageMetrics;
|
|
18
|
+
export declare const TokenUsageReportSummaryDescriptor: import("../../..").EntityDescriptor<TokenUsageReportSummaryEntity, {}>;
|
|
19
|
+
//# sourceMappingURL=tokenusage-report-summary.d.ts.map
|