@lssm/lib.metering 0.0.0-canary-20251210171026 → 0.0.0-canary-20251212210835

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 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/modules.notifications` - Threshold alerts
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-20251210171026",
3
+ "version": "0.0.0-canary-20251212210835",
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
  "./*": "./*"