@lssm/lib.metering 0.0.0-canary-20251210082611 → 0.0.0-canary-20251212004227
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/README.md +1 -1
- package/dist/docs/index.js +1 -0
- package/dist/docs/metering.docblock.js +47 -0
- package/dist/index.js +1 -1
- package/package.json +5 -1
package/README.md
CHANGED
|
@@ -162,7 +162,7 @@ await aggregator.aggregate({
|
|
|
162
162
|
This module integrates with:
|
|
163
163
|
|
|
164
164
|
- `@lssm/lib.jobs` - Scheduled aggregation jobs
|
|
165
|
-
- `@lssm/
|
|
165
|
+
- `@lssm/module.notifications` - Threshold alerts
|
|
166
166
|
- `@lssm/lib.identity-rbac` - Subject resolution
|
|
167
167
|
|
|
168
168
|
## Schema Contribution
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./metering.docblock.js";
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import{registerDocBlocks as e}from"@lssm/lib.contracts/docs";e([{id:`docs.metering.usage`,title:`Usage Metering & Billing Core`,summary:`Reusable usage/metering layer with metric definitions, usage ingestion, aggregation, thresholds, and alerts for billing or quotas.`,kind:`reference`,visibility:`public`,route:`/docs/metering/usage`,tags:[`metering`,`usage`,`billing`,`quotas`],body:`## Capabilities
|
|
2
|
+
|
|
3
|
+
- **Entities**: MetricDefinition, UsageRecord, UsageSummary, UsageThreshold, UsageAlert.
|
|
4
|
+
- **Contracts**: define/list metrics; record usage (batch + idempotent); retrieve usage by subject; manage thresholds and alerts.
|
|
5
|
+
- **Aggregation**: hourly/daily/weekly/monthly rollups with SUM/COUNT/AVG/MIN/MAX/LAST strategies.
|
|
6
|
+
- **Events**: usage.recorded, usage.aggregated, threshold.exceeded (see events export).
|
|
7
|
+
|
|
8
|
+
## Usage
|
|
9
|
+
|
|
10
|
+
1) Compose schema
|
|
11
|
+
- Add \`meteringSchemaContribution\` to your schema composition.
|
|
12
|
+
|
|
13
|
+
2) Register contracts/events
|
|
14
|
+
- Import from \`@lssm/lib.metering\` into your spec registry.
|
|
15
|
+
|
|
16
|
+
3) Ingest usage
|
|
17
|
+
- Use \`recordUsage\` contract (see contracts export) from application services whenever a billable/important action happens (e.g., agent run, API call).
|
|
18
|
+
|
|
19
|
+
4) Aggregate + thresholds
|
|
20
|
+
- Run scheduled jobs using \`aggregateUsage\` helper to roll up summaries.
|
|
21
|
+
- Configure \`UsageThreshold\` to emit alerts or blocking actions; pipe alerts into Notifications/Audit.
|
|
22
|
+
|
|
23
|
+
## Example
|
|
24
|
+
|
|
25
|
+
\`\`\`ts
|
|
26
|
+
import { meteringSchemaContribution } from '@lssm/lib.metering';
|
|
27
|
+
import { aggregateUsage } from '@lssm/lib.metering/aggregation';
|
|
28
|
+
|
|
29
|
+
// schema composition
|
|
30
|
+
const schema = {
|
|
31
|
+
modules: [meteringSchemaContribution],
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
// aggregation job
|
|
35
|
+
await aggregateUsage({
|
|
36
|
+
metrics: metricRepository,
|
|
37
|
+
usage: usageRepository,
|
|
38
|
+
period: 'DAILY',
|
|
39
|
+
});
|
|
40
|
+
\`\`\`,
|
|
41
|
+
|
|
42
|
+
## Guardrails
|
|
43
|
+
|
|
44
|
+
- Keep metric keys stable; store quantities as decimals for currency/units.
|
|
45
|
+
- Use idempotency keys for external ingestion; avoid PII in metric metadata.
|
|
46
|
+
- Scope by org/user for multi-tenant isolation; emit audit + analytics events on changes.
|
|
47
|
+
`}]);
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{MeteringEvents as e,MetricDefinedEvent as t,MetricUpdatedEvent as n,ThresholdApproachingEvent as r,ThresholdCreatedEvent as i,ThresholdExceededEvent as a,UsageAggregatedEvent as o,UsageBatchRecordedEvent as s,UsageRecordedEvent as c}from"./events.js";import{AggregationTypeEnum as l,MetricDefinitionEntity as u,PeriodTypeEnum as d,ResetPeriodEnum as f,ThresholdActionEnum as p,UsageAlertEntity as m,UsageRecordEntity as h,UsageSummaryEntity as g,UsageThresholdEntity as _,meteringEntities as v,meteringSchemaContribution as y}from"./entities/index.js";import{CreateThresholdContract as b,DefineMetricContract as x,DeleteMetricContract as S,DeleteThresholdContract as C,GetMetricContract as w,GetUsageContract as T,GetUsageSummaryContract as E,ListMetricsContract as D,ListThresholdsContract as O,MetricDefinitionModel as k,RecordBatchUsageContract as A,RecordUsageContract as j,UpdateMetricContract as M,UpdateThresholdContract as N,UsageRecordModel as P,UsageSummaryModel as F,UsageThresholdModel as I}from"./contracts/index.js";import{InMemoryUsageStorage as L,UsageAggregator as R,formatPeriodKey as z,getPeriodEnd as B,getPeriodStart as V}from"./aggregation/index.js";export{l as AggregationTypeEnum,b as CreateThresholdContract,x as DefineMetricContract,S as DeleteMetricContract,C as DeleteThresholdContract,w as GetMetricContract,T as GetUsageContract,E as GetUsageSummaryContract,L as InMemoryUsageStorage,D as ListMetricsContract,O as ListThresholdsContract,e as MeteringEvents,t as MetricDefinedEvent,u as MetricDefinitionEntity,k as MetricDefinitionModel,n as MetricUpdatedEvent,d as PeriodTypeEnum,A as RecordBatchUsageContract,j as RecordUsageContract,f as ResetPeriodEnum,p as ThresholdActionEnum,r as ThresholdApproachingEvent,i as ThresholdCreatedEvent,a as ThresholdExceededEvent,M as UpdateMetricContract,N as UpdateThresholdContract,o as UsageAggregatedEvent,R as UsageAggregator,m as UsageAlertEntity,s as UsageBatchRecordedEvent,h as UsageRecordEntity,P as UsageRecordModel,c as UsageRecordedEvent,g as UsageSummaryEntity,F as UsageSummaryModel,_ as UsageThresholdEntity,I as UsageThresholdModel,z as formatPeriodKey,B as getPeriodEnd,V as getPeriodStart,v as meteringEntities,y as meteringSchemaContribution};
|
|
1
|
+
import{MeteringEvents as e,MetricDefinedEvent as t,MetricUpdatedEvent as n,ThresholdApproachingEvent as r,ThresholdCreatedEvent as i,ThresholdExceededEvent as a,UsageAggregatedEvent as o,UsageBatchRecordedEvent as s,UsageRecordedEvent as c}from"./events.js";import{AggregationTypeEnum as l,MetricDefinitionEntity as u,PeriodTypeEnum as d,ResetPeriodEnum as f,ThresholdActionEnum as p,UsageAlertEntity as m,UsageRecordEntity as h,UsageSummaryEntity as g,UsageThresholdEntity as _,meteringEntities as v,meteringSchemaContribution as y}from"./entities/index.js";import{CreateThresholdContract as b,DefineMetricContract as x,DeleteMetricContract as S,DeleteThresholdContract as C,GetMetricContract as w,GetUsageContract as T,GetUsageSummaryContract as E,ListMetricsContract as D,ListThresholdsContract as O,MetricDefinitionModel as k,RecordBatchUsageContract as A,RecordUsageContract as j,UpdateMetricContract as M,UpdateThresholdContract as N,UsageRecordModel as P,UsageSummaryModel as F,UsageThresholdModel as I}from"./contracts/index.js";import{InMemoryUsageStorage as L,UsageAggregator as R,formatPeriodKey as z,getPeriodEnd as B,getPeriodStart as V}from"./aggregation/index.js";import"./docs/index.js";export{l as AggregationTypeEnum,b as CreateThresholdContract,x as DefineMetricContract,S as DeleteMetricContract,C as DeleteThresholdContract,w as GetMetricContract,T as GetUsageContract,E as GetUsageSummaryContract,L as InMemoryUsageStorage,D as ListMetricsContract,O as ListThresholdsContract,e as MeteringEvents,t as MetricDefinedEvent,u as MetricDefinitionEntity,k as MetricDefinitionModel,n as MetricUpdatedEvent,d as PeriodTypeEnum,A as RecordBatchUsageContract,j as RecordUsageContract,f as ResetPeriodEnum,p as ThresholdActionEnum,r as ThresholdApproachingEvent,i as ThresholdCreatedEvent,a as ThresholdExceededEvent,M as UpdateMetricContract,N as UpdateThresholdContract,o as UsageAggregatedEvent,R as UsageAggregator,m as UsageAlertEntity,s as UsageBatchRecordedEvent,h as UsageRecordEntity,P as UsageRecordModel,c as UsageRecordedEvent,g as UsageSummaryEntity,F as UsageSummaryModel,_ as UsageThresholdEntity,I as UsageThresholdModel,z as formatPeriodKey,B as getPeriodEnd,V as getPeriodStart,v as meteringEntities,y as meteringSchemaContribution};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lssm/lib.metering",
|
|
3
|
-
"version": "0.0.0-canary-
|
|
3
|
+
"version": "0.0.0-canary-20251212004227",
|
|
4
4
|
"description": "Usage metering and billing core module for ContractSpec applications",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -30,6 +30,8 @@
|
|
|
30
30
|
".": "./src/index.ts",
|
|
31
31
|
"./aggregation": "./src/aggregation/index.ts",
|
|
32
32
|
"./contracts": "./src/contracts/index.ts",
|
|
33
|
+
"./docs": "./src/docs/index.ts",
|
|
34
|
+
"./docs/metering.docblock": "./src/docs/metering.docblock.ts",
|
|
33
35
|
"./entities": "./src/entities/index.ts",
|
|
34
36
|
"./events": "./src/events.ts",
|
|
35
37
|
"./*": "./*"
|
|
@@ -45,6 +47,8 @@
|
|
|
45
47
|
".": "./dist/index.js",
|
|
46
48
|
"./aggregation": "./dist/aggregation/index.js",
|
|
47
49
|
"./contracts": "./dist/contracts/index.js",
|
|
50
|
+
"./docs": "./dist/docs/index.js",
|
|
51
|
+
"./docs/metering.docblock": "./dist/docs/metering.docblock.js",
|
|
48
52
|
"./entities": "./dist/entities/index.js",
|
|
49
53
|
"./events": "./dist/events.js",
|
|
50
54
|
"./*": "./*"
|