@lssm/lib.metering 0.0.0-canary-20251221193616 → 0.0.0-canary-20251223010757

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. package/dist/contracts/index.d.ts +290 -290
  2. package/dist/contracts/index.js +150 -151
  3. package/dist/contracts/index.js.map +1 -1
  4. package/dist/docs/metering.docblock.js +1 -2
  5. package/dist/docs/metering.docblock.js.map +1 -1
  6. package/dist/entities/index.d.ts +185 -185
  7. package/dist/entities/index.d.ts.map +1 -1
  8. package/dist/entities/index.js +112 -112
  9. package/dist/entities/index.js.map +1 -1
  10. package/dist/events.d.ts +135 -135
  11. package/dist/events.d.ts.map +1 -1
  12. package/dist/events.js +69 -70
  13. package/dist/events.js.map +1 -1
  14. package/package.json +6 -6
  15. package/dist/contracts/dist/_virtual/rolldown_runtime.js +0 -6
  16. package/dist/contracts/dist/_virtual/rolldown_runtime.js.map +0 -1
  17. package/dist/contracts/dist/capabilities/index.js +0 -1
  18. package/dist/contracts/dist/capabilities/openbanking.js +0 -89
  19. package/dist/contracts/dist/capabilities/openbanking.js.map +0 -1
  20. package/dist/contracts/dist/client/index.js +0 -5
  21. package/dist/contracts/dist/client/react/feature-render.js +0 -3
  22. package/dist/contracts/dist/client/react/form-render.js +0 -5
  23. package/dist/contracts/dist/client/react/index.js +0 -4
  24. package/dist/contracts/dist/contract-registry/index.js +0 -1
  25. package/dist/contracts/dist/contract-registry/schemas.js +0 -61
  26. package/dist/contracts/dist/contract-registry/schemas.js.map +0 -1
  27. package/dist/contracts/dist/data-views/data-views.js +0 -7
  28. package/dist/contracts/dist/data-views/data-views.js.map +0 -1
  29. package/dist/contracts/dist/docs/accessibility_wcag_compliance_specs.docblock.js +0 -17
  30. package/dist/contracts/dist/docs/accessibility_wcag_compliance_specs.docblock.js.map +0 -1
  31. package/dist/contracts/dist/docs/index.js +0 -25
  32. package/dist/contracts/dist/docs/meta.docs.js +0 -30
  33. package/dist/contracts/dist/docs/meta.docs.js.map +0 -1
  34. package/dist/contracts/dist/docs/presentations.js +0 -72
  35. package/dist/contracts/dist/docs/presentations.js.map +0 -1
  36. package/dist/contracts/dist/docs/registry.js +0 -45
  37. package/dist/contracts/dist/docs/registry.js.map +0 -1
  38. package/dist/contracts/dist/docs/tech/auth/better-auth-nextjs.docblock.js +0 -81
  39. package/dist/contracts/dist/docs/tech/auth/better-auth-nextjs.docblock.js.map +0 -1
  40. package/dist/contracts/dist/docs/tech/contracts/openapi-export.docblock.js +0 -58
  41. package/dist/contracts/dist/docs/tech/contracts/openapi-export.docblock.js.map +0 -1
  42. package/dist/contracts/dist/docs/tech/lifecycle-stage-system.docblock.js +0 -17
  43. package/dist/contracts/dist/docs/tech/lifecycle-stage-system.docblock.js.map +0 -1
  44. package/dist/contracts/dist/docs/tech/llm/llm-integration.docblock.js +0 -358
  45. package/dist/contracts/dist/docs/tech/llm/llm-integration.docblock.js.map +0 -1
  46. package/dist/contracts/dist/docs/tech/mcp-endpoints.docblock.js +0 -38
  47. package/dist/contracts/dist/docs/tech/mcp-endpoints.docblock.js.map +0 -1
  48. package/dist/contracts/dist/docs/tech/presentation-runtime.docblock.js +0 -17
  49. package/dist/contracts/dist/docs/tech/presentation-runtime.docblock.js.map +0 -1
  50. package/dist/contracts/dist/docs/tech/schema/README.docblock.js +0 -21
  51. package/dist/contracts/dist/docs/tech/schema/README.docblock.js.map +0 -1
  52. package/dist/contracts/dist/docs/tech/studio/learning-events.docblock.js +0 -49
  53. package/dist/contracts/dist/docs/tech/studio/learning-events.docblock.js.map +0 -1
  54. package/dist/contracts/dist/docs/tech/studio/learning-journeys.docblock.js +0 -80
  55. package/dist/contracts/dist/docs/tech/studio/learning-journeys.docblock.js.map +0 -1
  56. package/dist/contracts/dist/docs/tech/studio/platform-admin-panel.docblock.js +0 -85
  57. package/dist/contracts/dist/docs/tech/studio/platform-admin-panel.docblock.js.map +0 -1
  58. package/dist/contracts/dist/docs/tech/studio/project-access-teams.docblock.js +0 -46
  59. package/dist/contracts/dist/docs/tech/studio/project-access-teams.docblock.js.map +0 -1
  60. package/dist/contracts/dist/docs/tech/studio/project-routing.docblock.js +0 -68
  61. package/dist/contracts/dist/docs/tech/studio/project-routing.docblock.js.map +0 -1
  62. package/dist/contracts/dist/docs/tech/studio/sandbox-unlogged.docblock.js +0 -41
  63. package/dist/contracts/dist/docs/tech/studio/sandbox-unlogged.docblock.js.map +0 -1
  64. package/dist/contracts/dist/docs/tech/studio/team-invitations.docblock.js +0 -70
  65. package/dist/contracts/dist/docs/tech/studio/team-invitations.docblock.js.map +0 -1
  66. package/dist/contracts/dist/docs/tech/studio/workspace-ops.docblock.js +0 -48
  67. package/dist/contracts/dist/docs/tech/studio/workspace-ops.docblock.js.map +0 -1
  68. package/dist/contracts/dist/docs/tech/studio/workspaces.docblock.js +0 -63
  69. package/dist/contracts/dist/docs/tech/studio/workspaces.docblock.js.map +0 -1
  70. package/dist/contracts/dist/docs/tech/telemetry-ingest.docblock.js +0 -156
  71. package/dist/contracts/dist/docs/tech/telemetry-ingest.docblock.js.map +0 -1
  72. package/dist/contracts/dist/docs/tech/templates/runtime.docblock.js +0 -21
  73. package/dist/contracts/dist/docs/tech/templates/runtime.docblock.js.map +0 -1
  74. package/dist/contracts/dist/docs/tech/vscode-extension.docblock.js +0 -102
  75. package/dist/contracts/dist/docs/tech/vscode-extension.docblock.js.map +0 -1
  76. package/dist/contracts/dist/docs/tech/workflows/overview.docblock.js +0 -21
  77. package/dist/contracts/dist/docs/tech/workflows/overview.docblock.js.map +0 -1
  78. package/dist/contracts/dist/docs/tech-contracts.docs.js +0 -97
  79. package/dist/contracts/dist/docs/tech-contracts.docs.js.map +0 -1
  80. package/dist/contracts/dist/events.js +0 -11
  81. package/dist/contracts/dist/events.js.map +0 -1
  82. package/dist/contracts/dist/experiments/evaluator.js +0 -1
  83. package/dist/contracts/dist/features.js +0 -7
  84. package/dist/contracts/dist/features.js.map +0 -1
  85. package/dist/contracts/dist/forms/forms.js +0 -1
  86. package/dist/contracts/dist/index.js +0 -88
  87. package/dist/contracts/dist/index.js.map +0 -1
  88. package/dist/contracts/dist/install.js +0 -2
  89. package/dist/contracts/dist/integrations/index.js +0 -18
  90. package/dist/contracts/dist/integrations/openbanking/contracts/accounts.js +0 -228
  91. package/dist/contracts/dist/integrations/openbanking/contracts/accounts.js.map +0 -1
  92. package/dist/contracts/dist/integrations/openbanking/contracts/balances.js +0 -159
  93. package/dist/contracts/dist/integrations/openbanking/contracts/balances.js.map +0 -1
  94. package/dist/contracts/dist/integrations/openbanking/contracts/index.js +0 -3
  95. package/dist/contracts/dist/integrations/openbanking/contracts/transactions.js +0 -210
  96. package/dist/contracts/dist/integrations/openbanking/contracts/transactions.js.map +0 -1
  97. package/dist/contracts/dist/integrations/openbanking/models.js +0 -241
  98. package/dist/contracts/dist/integrations/openbanking/models.js.map +0 -1
  99. package/dist/contracts/dist/integrations/openbanking/telemetry.js +0 -14
  100. package/dist/contracts/dist/integrations/openbanking/telemetry.js.map +0 -1
  101. package/dist/contracts/dist/integrations/operations.js +0 -377
  102. package/dist/contracts/dist/integrations/operations.js.map +0 -1
  103. package/dist/contracts/dist/integrations/providers/elevenlabs.js +0 -53
  104. package/dist/contracts/dist/integrations/providers/elevenlabs.js.map +0 -1
  105. package/dist/contracts/dist/integrations/providers/gcs-storage.js +0 -76
  106. package/dist/contracts/dist/integrations/providers/gcs-storage.js.map +0 -1
  107. package/dist/contracts/dist/integrations/providers/gmail.js +0 -88
  108. package/dist/contracts/dist/integrations/providers/gmail.js.map +0 -1
  109. package/dist/contracts/dist/integrations/providers/google-calendar.js +0 -67
  110. package/dist/contracts/dist/integrations/providers/google-calendar.js.map +0 -1
  111. package/dist/contracts/dist/integrations/providers/index.js +0 -11
  112. package/dist/contracts/dist/integrations/providers/mistral.js +0 -69
  113. package/dist/contracts/dist/integrations/providers/mistral.js.map +0 -1
  114. package/dist/contracts/dist/integrations/providers/postmark.js +0 -69
  115. package/dist/contracts/dist/integrations/providers/postmark.js.map +0 -1
  116. package/dist/contracts/dist/integrations/providers/powens.js +0 -117
  117. package/dist/contracts/dist/integrations/providers/powens.js.map +0 -1
  118. package/dist/contracts/dist/integrations/providers/qdrant.js +0 -74
  119. package/dist/contracts/dist/integrations/providers/qdrant.js.map +0 -1
  120. package/dist/contracts/dist/integrations/providers/registry.js +0 -10
  121. package/dist/contracts/dist/integrations/providers/stripe.js +0 -84
  122. package/dist/contracts/dist/integrations/providers/stripe.js.map +0 -1
  123. package/dist/contracts/dist/integrations/providers/twilio-sms.js +0 -62
  124. package/dist/contracts/dist/integrations/providers/twilio-sms.js.map +0 -1
  125. package/dist/contracts/dist/jsonschema.js +0 -1
  126. package/dist/contracts/dist/knowledge/index.js +0 -7
  127. package/dist/contracts/dist/knowledge/operations.js +0 -306
  128. package/dist/contracts/dist/knowledge/operations.js.map +0 -1
  129. package/dist/contracts/dist/knowledge/spaces/email-threads.js +0 -35
  130. package/dist/contracts/dist/knowledge/spaces/email-threads.js.map +0 -1
  131. package/dist/contracts/dist/knowledge/spaces/financial-docs.js +0 -35
  132. package/dist/contracts/dist/knowledge/spaces/financial-docs.js.map +0 -1
  133. package/dist/contracts/dist/knowledge/spaces/financial-overview.js +0 -39
  134. package/dist/contracts/dist/knowledge/spaces/financial-overview.js.map +0 -1
  135. package/dist/contracts/dist/knowledge/spaces/index.js +0 -6
  136. package/dist/contracts/dist/knowledge/spaces/product-canon.js +0 -35
  137. package/dist/contracts/dist/knowledge/spaces/product-canon.js.map +0 -1
  138. package/dist/contracts/dist/knowledge/spaces/support-faq.js +0 -38
  139. package/dist/contracts/dist/knowledge/spaces/support-faq.js.map +0 -1
  140. package/dist/contracts/dist/knowledge/spaces/uploaded-docs.js +0 -35
  141. package/dist/contracts/dist/knowledge/spaces/uploaded-docs.js.map +0 -1
  142. package/dist/contracts/dist/llm/exporters.js +0 -21
  143. package/dist/contracts/dist/llm/exporters.js.map +0 -1
  144. package/dist/contracts/dist/llm/index.js +0 -2
  145. package/dist/contracts/dist/llm/prompts.js +0 -1
  146. package/dist/contracts/dist/onboarding-base.js +0 -196
  147. package/dist/contracts/dist/onboarding-base.js.map +0 -1
  148. package/dist/contracts/dist/openapi.js +0 -1
  149. package/dist/contracts/dist/operations/index.js +0 -2
  150. package/dist/contracts/dist/operations/operation.js +0 -35
  151. package/dist/contracts/dist/operations/operation.js.map +0 -1
  152. package/dist/contracts/dist/operations/registry.js +0 -8
  153. package/dist/contracts/dist/operations/registry.js.map +0 -1
  154. package/dist/contracts/dist/ownership.js +0 -24
  155. package/dist/contracts/dist/ownership.js.map +0 -1
  156. package/dist/contracts/dist/presentations/index.js +0 -2
  157. package/dist/contracts/dist/presentations/presentations.js +0 -8
  158. package/dist/contracts/dist/presentations/presentations.js.map +0 -1
  159. package/dist/contracts/dist/presentations/transform-engine.js +0 -12
  160. package/dist/contracts/dist/presentations/transform-engine.js.map +0 -1
  161. package/dist/contracts/dist/prompt.js +0 -1
  162. package/dist/contracts/dist/promptRegistry.js +0 -1
  163. package/dist/contracts/dist/regenerator/index.js +0 -1
  164. package/dist/contracts/dist/regenerator/service.js +0 -7
  165. package/dist/contracts/dist/regenerator/service.js.map +0 -1
  166. package/dist/contracts/dist/registry-utils.js +0 -24
  167. package/dist/contracts/dist/registry-utils.js.map +0 -1
  168. package/dist/contracts/dist/resources.js +0 -1
  169. package/dist/contracts/dist/schema/dist/index.js +0 -3873
  170. package/dist/contracts/dist/schema/dist/index.js.map +0 -1
  171. package/dist/contracts/dist/server/graphql-pothos.js +0 -6
  172. package/dist/contracts/dist/server/index.js +0 -8
  173. package/dist/contracts/dist/server/mcp/createMcpServer.js +0 -4
  174. package/dist/contracts/dist/server/mcp/registerPresentations.js +0 -3
  175. package/dist/contracts/dist/server/mcp/registerPrompts.js +0 -1
  176. package/dist/contracts/dist/server/mcp/registerResources.js +0 -2
  177. package/dist/contracts/dist/server/mcp/registerTools.js +0 -1
  178. package/dist/contracts/dist/server/provider-mcp.js +0 -1
  179. package/dist/contracts/dist/server/rest-elysia.js +0 -1
  180. package/dist/contracts/dist/server/rest-express.js +0 -1
  181. package/dist/contracts/dist/server/rest-generic.js +0 -1
  182. package/dist/contracts/dist/server/rest-next-app.js +0 -1
  183. package/dist/contracts/dist/server/rest-next-pages.js +0 -1
  184. package/dist/contracts/dist/telemetry/index.js +0 -1
  185. package/dist/contracts/dist/telemetry/tracker.js +0 -1
  186. package/dist/contracts/dist/tests/index.js +0 -1
  187. package/dist/contracts/dist/tests/runner.js +0 -2
  188. package/dist/contracts/dist/workflow/index.js +0 -2
  189. package/dist/contracts/dist/workflow/runner.js +0 -1
  190. package/dist/contracts/dist/workflow/spec.js +0 -7
  191. package/dist/contracts/dist/workflow/spec.js.map +0 -1
  192. package/dist/contracts/dist/workspace-config/contractsrc-schema.js +0 -122
  193. package/dist/contracts/dist/workspace-config/contractsrc-schema.js.map +0 -1
  194. package/dist/contracts/dist/workspace-config/index.js +0 -1
  195. package/dist/schema/dist/index.js +0 -4889
  196. package/dist/schema/dist/index.js.map +0 -1
@@ -1,10 +1,10 @@
1
- import { L5, Z5, _5, b5 } from "../schema/dist/index.js";
1
+ import { defineEntity, defineEntityEnum, field, index } from "@lssm/lib.schema";
2
2
 
3
3
  //#region src/entities/index.ts
4
4
  /**
5
5
  * Aggregation type enum.
6
6
  */
7
- const AggregationTypeEnum = Z5({
7
+ const AggregationTypeEnum = defineEntityEnum({
8
8
  name: "AggregationType",
9
9
  values: [
10
10
  "COUNT",
@@ -20,7 +20,7 @@ const AggregationTypeEnum = Z5({
20
20
  /**
21
21
  * Reset period enum.
22
22
  */
23
- const ResetPeriodEnum = Z5({
23
+ const ResetPeriodEnum = defineEntityEnum({
24
24
  name: "ResetPeriod",
25
25
  values: [
26
26
  "NEVER",
@@ -36,7 +36,7 @@ const ResetPeriodEnum = Z5({
36
36
  /**
37
37
  * Period type enum.
38
38
  */
39
- const PeriodTypeEnum = Z5({
39
+ const PeriodTypeEnum = defineEntityEnum({
40
40
  name: "PeriodType",
41
41
  values: [
42
42
  "HOURLY",
@@ -51,7 +51,7 @@ const PeriodTypeEnum = Z5({
51
51
  /**
52
52
  * Threshold action enum.
53
53
  */
54
- const ThresholdActionEnum = Z5({
54
+ const ThresholdActionEnum = defineEntityEnum({
55
55
  name: "ThresholdAction",
56
56
  values: [
57
57
  "NONE",
@@ -66,193 +66,193 @@ const ThresholdActionEnum = Z5({
66
66
  /**
67
67
  * MetricDefinition entity - defines a trackable metric.
68
68
  */
69
- const MetricDefinitionEntity = L5({
69
+ const MetricDefinitionEntity = defineEntity({
70
70
  name: "MetricDefinition",
71
71
  description: "Definition of a usage metric.",
72
72
  schema: "lssm_metering",
73
73
  map: "metric_definition",
74
74
  fields: {
75
- id: _5.id({ description: "Unique identifier" }),
76
- key: _5.string({
75
+ id: field.id({ description: "Unique identifier" }),
76
+ key: field.string({
77
77
  isUnique: true,
78
78
  description: "Metric key (e.g., api_calls, storage_gb)"
79
79
  }),
80
- name: _5.string({ description: "Human-readable name" }),
81
- description: _5.string({
80
+ name: field.string({ description: "Human-readable name" }),
81
+ description: field.string({
82
82
  isOptional: true,
83
83
  description: "Metric description"
84
84
  }),
85
- unit: _5.string({ description: "Unit of measurement (calls, bytes, etc.)" }),
86
- aggregationType: _5.enum("AggregationType", {
85
+ unit: field.string({ description: "Unit of measurement (calls, bytes, etc.)" }),
86
+ aggregationType: field.enum("AggregationType", {
87
87
  default: "SUM",
88
88
  description: "How to aggregate values"
89
89
  }),
90
- resetPeriod: _5.enum("ResetPeriod", {
90
+ resetPeriod: field.enum("ResetPeriod", {
91
91
  default: "MONTHLY",
92
92
  description: "When to reset counters"
93
93
  }),
94
- precision: _5.int({
94
+ precision: field.int({
95
95
  default: 2,
96
96
  description: "Decimal precision"
97
97
  }),
98
- orgId: _5.string({
98
+ orgId: field.string({
99
99
  isOptional: true,
100
100
  description: "Organization scope (null = global metric)"
101
101
  }),
102
- category: _5.string({
102
+ category: field.string({
103
103
  isOptional: true,
104
104
  description: "Category for grouping"
105
105
  }),
106
- displayOrder: _5.int({
106
+ displayOrder: field.int({
107
107
  default: 0,
108
108
  description: "Order for display"
109
109
  }),
110
- metadata: _5.json({
110
+ metadata: field.json({
111
111
  isOptional: true,
112
112
  description: "Additional metadata"
113
113
  }),
114
- isActive: _5.boolean({
114
+ isActive: field.boolean({
115
115
  default: true,
116
116
  description: "Whether metric is active"
117
117
  }),
118
- createdAt: _5.createdAt(),
119
- updatedAt: _5.updatedAt(),
120
- usageRecords: _5.hasMany("UsageRecord"),
121
- usageSummaries: _5.hasMany("UsageSummary"),
122
- thresholds: _5.hasMany("UsageThreshold")
118
+ createdAt: field.createdAt(),
119
+ updatedAt: field.updatedAt(),
120
+ usageRecords: field.hasMany("UsageRecord"),
121
+ usageSummaries: field.hasMany("UsageSummary"),
122
+ thresholds: field.hasMany("UsageThreshold")
123
123
  },
124
124
  indexes: [
125
- b5.on(["orgId", "key"]),
126
- b5.on(["category"]),
127
- b5.on(["isActive"])
125
+ index.on(["orgId", "key"]),
126
+ index.on(["category"]),
127
+ index.on(["isActive"])
128
128
  ],
129
129
  enums: [AggregationTypeEnum, ResetPeriodEnum]
130
130
  });
131
131
  /**
132
132
  * UsageRecord entity - individual usage event.
133
133
  */
134
- const UsageRecordEntity = L5({
134
+ const UsageRecordEntity = defineEntity({
135
135
  name: "UsageRecord",
136
136
  description: "A single usage event.",
137
137
  schema: "lssm_metering",
138
138
  map: "usage_record",
139
139
  fields: {
140
- id: _5.id({ description: "Unique identifier" }),
141
- metricKey: _5.string({ description: "Metric being recorded" }),
142
- metricId: _5.string({
140
+ id: field.id({ description: "Unique identifier" }),
141
+ metricKey: field.string({ description: "Metric being recorded" }),
142
+ metricId: field.string({
143
143
  isOptional: true,
144
144
  description: "Metric ID (for FK)"
145
145
  }),
146
- subjectType: _5.string({ description: "Subject type (org, user, project)" }),
147
- subjectId: _5.string({ description: "Subject identifier" }),
148
- quantity: _5.decimal({ description: "Usage quantity" }),
149
- source: _5.string({
146
+ subjectType: field.string({ description: "Subject type (org, user, project)" }),
147
+ subjectId: field.string({ description: "Subject identifier" }),
148
+ quantity: field.decimal({ description: "Usage quantity" }),
149
+ source: field.string({
150
150
  isOptional: true,
151
151
  description: "Source of usage (endpoint, feature, etc.)"
152
152
  }),
153
- resourceId: _5.string({
153
+ resourceId: field.string({
154
154
  isOptional: true,
155
155
  description: "Related resource ID"
156
156
  }),
157
- resourceType: _5.string({
157
+ resourceType: field.string({
158
158
  isOptional: true,
159
159
  description: "Related resource type"
160
160
  }),
161
- metadata: _5.json({
161
+ metadata: field.json({
162
162
  isOptional: true,
163
163
  description: "Additional context"
164
164
  }),
165
- idempotencyKey: _5.string({
165
+ idempotencyKey: field.string({
166
166
  isOptional: true,
167
167
  description: "Idempotency key for deduplication"
168
168
  }),
169
- timestamp: _5.dateTime({ description: "When usage occurred" }),
170
- createdAt: _5.createdAt(),
171
- aggregated: _5.boolean({
169
+ timestamp: field.dateTime({ description: "When usage occurred" }),
170
+ createdAt: field.createdAt(),
171
+ aggregated: field.boolean({
172
172
  default: false,
173
173
  description: "Whether included in summary"
174
174
  }),
175
- aggregatedAt: _5.dateTime({
175
+ aggregatedAt: field.dateTime({
176
176
  isOptional: true,
177
177
  description: "When aggregated"
178
178
  })
179
179
  },
180
180
  indexes: [
181
- b5.on([
181
+ index.on([
182
182
  "metricKey",
183
183
  "subjectType",
184
184
  "subjectId",
185
185
  "timestamp"
186
186
  ]),
187
- b5.on([
187
+ index.on([
188
188
  "subjectType",
189
189
  "subjectId",
190
190
  "timestamp"
191
191
  ]),
192
- b5.on(["timestamp"]),
193
- b5.on(["aggregated", "timestamp"]),
194
- b5.unique(["idempotencyKey"], { name: "usage_record_idempotency" })
192
+ index.on(["timestamp"]),
193
+ index.on(["aggregated", "timestamp"]),
194
+ index.unique(["idempotencyKey"], { name: "usage_record_idempotency" })
195
195
  ]
196
196
  });
197
197
  /**
198
198
  * UsageSummary entity - pre-aggregated usage.
199
199
  */
200
- const UsageSummaryEntity = L5({
200
+ const UsageSummaryEntity = defineEntity({
201
201
  name: "UsageSummary",
202
202
  description: "Pre-aggregated usage summary.",
203
203
  schema: "lssm_metering",
204
204
  map: "usage_summary",
205
205
  fields: {
206
- id: _5.id({ description: "Unique identifier" }),
207
- metricKey: _5.string({ description: "Metric key" }),
208
- metricId: _5.string({
206
+ id: field.id({ description: "Unique identifier" }),
207
+ metricKey: field.string({ description: "Metric key" }),
208
+ metricId: field.string({
209
209
  isOptional: true,
210
210
  description: "Metric ID (for FK)"
211
211
  }),
212
- subjectType: _5.string({ description: "Subject type" }),
213
- subjectId: _5.string({ description: "Subject identifier" }),
214
- periodType: _5.enum("PeriodType", { description: "Period type" }),
215
- periodStart: _5.dateTime({ description: "Period start time" }),
216
- periodEnd: _5.dateTime({ description: "Period end time" }),
217
- totalQuantity: _5.decimal({ description: "Total/aggregated quantity" }),
218
- recordCount: _5.int({
212
+ subjectType: field.string({ description: "Subject type" }),
213
+ subjectId: field.string({ description: "Subject identifier" }),
214
+ periodType: field.enum("PeriodType", { description: "Period type" }),
215
+ periodStart: field.dateTime({ description: "Period start time" }),
216
+ periodEnd: field.dateTime({ description: "Period end time" }),
217
+ totalQuantity: field.decimal({ description: "Total/aggregated quantity" }),
218
+ recordCount: field.int({
219
219
  default: 0,
220
220
  description: "Number of records aggregated"
221
221
  }),
222
- minQuantity: _5.decimal({
222
+ minQuantity: field.decimal({
223
223
  isOptional: true,
224
224
  description: "Minimum value"
225
225
  }),
226
- maxQuantity: _5.decimal({
226
+ maxQuantity: field.decimal({
227
227
  isOptional: true,
228
228
  description: "Maximum value"
229
229
  }),
230
- avgQuantity: _5.decimal({
230
+ avgQuantity: field.decimal({
231
231
  isOptional: true,
232
232
  description: "Average value"
233
233
  }),
234
- metadata: _5.json({
234
+ metadata: field.json({
235
235
  isOptional: true,
236
236
  description: "Additional metadata"
237
237
  }),
238
- createdAt: _5.createdAt(),
239
- updatedAt: _5.updatedAt()
238
+ createdAt: field.createdAt(),
239
+ updatedAt: field.updatedAt()
240
240
  },
241
241
  indexes: [
242
- b5.unique([
242
+ index.unique([
243
243
  "metricKey",
244
244
  "subjectType",
245
245
  "subjectId",
246
246
  "periodType",
247
247
  "periodStart"
248
248
  ], { name: "usage_summary_unique" }),
249
- b5.on([
249
+ index.on([
250
250
  "subjectType",
251
251
  "subjectId",
252
252
  "periodType",
253
253
  "periodStart"
254
254
  ]),
255
- b5.on([
255
+ index.on([
256
256
  "metricKey",
257
257
  "periodType",
258
258
  "periodStart"
@@ -263,130 +263,130 @@ const UsageSummaryEntity = L5({
263
263
  /**
264
264
  * UsageThreshold entity - threshold configuration.
265
265
  */
266
- const UsageThresholdEntity = L5({
266
+ const UsageThresholdEntity = defineEntity({
267
267
  name: "UsageThreshold",
268
268
  description: "Usage threshold configuration.",
269
269
  schema: "lssm_metering",
270
270
  map: "usage_threshold",
271
271
  fields: {
272
- id: _5.id({ description: "Unique identifier" }),
273
- metricKey: _5.string({ description: "Metric to monitor" }),
274
- metricId: _5.string({
272
+ id: field.id({ description: "Unique identifier" }),
273
+ metricKey: field.string({ description: "Metric to monitor" }),
274
+ metricId: field.string({
275
275
  isOptional: true,
276
276
  description: "Metric ID (for FK)"
277
277
  }),
278
- subjectType: _5.string({
278
+ subjectType: field.string({
279
279
  isOptional: true,
280
280
  description: "Subject type"
281
281
  }),
282
- subjectId: _5.string({
282
+ subjectId: field.string({
283
283
  isOptional: true,
284
284
  description: "Subject identifier"
285
285
  }),
286
- name: _5.string({ description: "Threshold name" }),
287
- threshold: _5.decimal({ description: "Threshold value" }),
288
- warnThreshold: _5.decimal({
286
+ name: field.string({ description: "Threshold name" }),
287
+ threshold: field.decimal({ description: "Threshold value" }),
288
+ warnThreshold: field.decimal({
289
289
  isOptional: true,
290
290
  description: "Warning threshold (e.g., 80%)"
291
291
  }),
292
- periodType: _5.enum("PeriodType", {
292
+ periodType: field.enum("PeriodType", {
293
293
  default: "MONTHLY",
294
294
  description: "Period to evaluate"
295
295
  }),
296
- action: _5.enum("ThresholdAction", {
296
+ action: field.enum("ThresholdAction", {
297
297
  default: "ALERT",
298
298
  description: "Action when exceeded"
299
299
  }),
300
- notifyEmails: _5.json({
300
+ notifyEmails: field.json({
301
301
  isOptional: true,
302
302
  description: "Email addresses to notify"
303
303
  }),
304
- notifyWebhook: _5.string({
304
+ notifyWebhook: field.string({
305
305
  isOptional: true,
306
306
  description: "Webhook URL to call"
307
307
  }),
308
- currentValue: _5.decimal({
308
+ currentValue: field.decimal({
309
309
  default: 0,
310
310
  description: "Current usage value"
311
311
  }),
312
- lastCheckedAt: _5.dateTime({
312
+ lastCheckedAt: field.dateTime({
313
313
  isOptional: true,
314
314
  description: "Last threshold check"
315
315
  }),
316
- lastExceededAt: _5.dateTime({
316
+ lastExceededAt: field.dateTime({
317
317
  isOptional: true,
318
318
  description: "Last time threshold was exceeded"
319
319
  }),
320
- isActive: _5.boolean({
320
+ isActive: field.boolean({
321
321
  default: true,
322
322
  description: "Whether threshold is active"
323
323
  }),
324
- metadata: _5.json({
324
+ metadata: field.json({
325
325
  isOptional: true,
326
326
  description: "Additional metadata"
327
327
  }),
328
- createdAt: _5.createdAt(),
329
- updatedAt: _5.updatedAt()
328
+ createdAt: field.createdAt(),
329
+ updatedAt: field.updatedAt()
330
330
  },
331
331
  indexes: [
332
- b5.on(["metricKey"]),
333
- b5.on(["subjectType", "subjectId"]),
334
- b5.on(["isActive", "metricKey"])
332
+ index.on(["metricKey"]),
333
+ index.on(["subjectType", "subjectId"]),
334
+ index.on(["isActive", "metricKey"])
335
335
  ],
336
336
  enums: [ThresholdActionEnum]
337
337
  });
338
338
  /**
339
339
  * UsageAlert entity - threshold violation alerts.
340
340
  */
341
- const UsageAlertEntity = L5({
341
+ const UsageAlertEntity = defineEntity({
342
342
  name: "UsageAlert",
343
343
  description: "Alert generated when threshold is exceeded.",
344
344
  schema: "lssm_metering",
345
345
  map: "usage_alert",
346
346
  fields: {
347
- id: _5.id({ description: "Unique identifier" }),
348
- thresholdId: _5.foreignKey({ description: "Threshold that triggered alert" }),
349
- metricKey: _5.string({ description: "Metric key" }),
350
- subjectType: _5.string({
347
+ id: field.id({ description: "Unique identifier" }),
348
+ thresholdId: field.foreignKey({ description: "Threshold that triggered alert" }),
349
+ metricKey: field.string({ description: "Metric key" }),
350
+ subjectType: field.string({
351
351
  isOptional: true,
352
352
  description: "Subject type"
353
353
  }),
354
- subjectId: _5.string({
354
+ subjectId: field.string({
355
355
  isOptional: true,
356
356
  description: "Subject identifier"
357
357
  }),
358
- alertType: _5.string({ description: "Alert type (warn, exceed, etc.)" }),
359
- threshold: _5.decimal({ description: "Threshold value" }),
360
- actualValue: _5.decimal({ description: "Actual usage value" }),
361
- percentageUsed: _5.decimal({ description: "Percentage of threshold used" }),
362
- status: _5.string({
358
+ alertType: field.string({ description: "Alert type (warn, exceed, etc.)" }),
359
+ threshold: field.decimal({ description: "Threshold value" }),
360
+ actualValue: field.decimal({ description: "Actual usage value" }),
361
+ percentageUsed: field.decimal({ description: "Percentage of threshold used" }),
362
+ status: field.string({
363
363
  default: "\"pending\"",
364
364
  description: "Alert status (pending, acknowledged, resolved)"
365
365
  }),
366
- acknowledgedBy: _5.string({
366
+ acknowledgedBy: field.string({
367
367
  isOptional: true,
368
368
  description: "User who acknowledged"
369
369
  }),
370
- acknowledgedAt: _5.dateTime({
370
+ acknowledgedAt: field.dateTime({
371
371
  isOptional: true,
372
372
  description: "When acknowledged"
373
373
  }),
374
- resolvedAt: _5.dateTime({
374
+ resolvedAt: field.dateTime({
375
375
  isOptional: true,
376
376
  description: "When resolved"
377
377
  }),
378
- notificationsSent: _5.json({
378
+ notificationsSent: field.json({
379
379
  isOptional: true,
380
380
  description: "Notifications sent"
381
381
  }),
382
- triggeredAt: _5.dateTime({ description: "When alert was triggered" }),
383
- createdAt: _5.createdAt(),
384
- thresholdRelation: _5.belongsTo("UsageThreshold", ["thresholdId"], ["id"], { onDelete: "Cascade" })
382
+ triggeredAt: field.dateTime({ description: "When alert was triggered" }),
383
+ createdAt: field.createdAt(),
384
+ thresholdRelation: field.belongsTo("UsageThreshold", ["thresholdId"], ["id"], { onDelete: "Cascade" })
385
385
  },
386
386
  indexes: [
387
- b5.on(["thresholdId", "status"]),
388
- b5.on(["metricKey", "triggeredAt"]),
389
- b5.on(["status", "triggeredAt"])
387
+ index.on(["thresholdId", "status"]),
388
+ index.on(["metricKey", "triggeredAt"]),
389
+ index.on(["status", "triggeredAt"])
390
390
  ]
391
391
  });
392
392
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["defineEntityEnum","defineEntity","field","index","meteringSchemaContribution: ModuleSchemaContribution"],"sources":["../../src/entities/index.ts"],"sourcesContent":["import { defineEntity, defineEntityEnum, field, index } from '@lssm/lib.schema';\nimport type { ModuleSchemaContribution } from '@lssm/lib.schema';\n\n/**\n * Aggregation type enum.\n */\nexport const AggregationTypeEnum = defineEntityEnum({\n name: 'AggregationType',\n values: ['COUNT', 'SUM', 'AVG', 'MAX', 'MIN', 'LAST'] as const,\n schema: 'lssm_metering',\n description: 'How to aggregate metric values.',\n});\n\n/**\n * Reset period enum.\n */\nexport const ResetPeriodEnum = defineEntityEnum({\n name: 'ResetPeriod',\n values: ['NEVER', 'HOURLY', 'DAILY', 'WEEKLY', 'MONTHLY', 'YEARLY'] as const,\n schema: 'lssm_metering',\n description: 'When to reset metric counters.',\n});\n\n/**\n * Period type enum.\n */\nexport const PeriodTypeEnum = defineEntityEnum({\n name: 'PeriodType',\n values: ['HOURLY', 'DAILY', 'WEEKLY', 'MONTHLY', 'YEARLY'] as const,\n schema: 'lssm_metering',\n description: 'Time period for aggregation.',\n});\n\n/**\n * Threshold action enum.\n */\nexport const ThresholdActionEnum = defineEntityEnum({\n name: 'ThresholdAction',\n values: ['NONE', 'ALERT', 'WARN', 'BLOCK', 'DOWNGRADE'] as const,\n schema: 'lssm_metering',\n description: 'Action to take when threshold is exceeded.',\n});\n\n/**\n * MetricDefinition entity - defines a trackable metric.\n */\nexport const MetricDefinitionEntity = defineEntity({\n name: 'MetricDefinition',\n description: 'Definition of a usage metric.',\n schema: 'lssm_metering',\n map: 'metric_definition',\n fields: {\n id: field.id({ description: 'Unique identifier' }),\n key: field.string({\n isUnique: true,\n description: 'Metric key (e.g., api_calls, storage_gb)',\n }),\n name: field.string({ description: 'Human-readable name' }),\n description: field.string({\n isOptional: true,\n description: 'Metric description',\n }),\n\n // Configuration\n unit: field.string({\n description: 'Unit of measurement (calls, bytes, etc.)',\n }),\n aggregationType: field.enum('AggregationType', {\n default: 'SUM',\n description: 'How to aggregate values',\n }),\n resetPeriod: field.enum('ResetPeriod', {\n default: 'MONTHLY',\n description: 'When to reset counters',\n }),\n\n // Precision\n precision: field.int({ default: 2, description: 'Decimal precision' }),\n\n // Scope\n orgId: field.string({\n isOptional: true,\n description: 'Organization scope (null = global metric)',\n }),\n\n // Display\n category: field.string({\n isOptional: true,\n description: 'Category for grouping',\n }),\n displayOrder: field.int({ default: 0, description: 'Order for display' }),\n\n // Metadata\n metadata: field.json({\n isOptional: true,\n description: 'Additional metadata',\n }),\n\n // Status\n isActive: field.boolean({\n default: true,\n description: 'Whether metric is active',\n }),\n\n // Timestamps\n createdAt: field.createdAt(),\n updatedAt: field.updatedAt(),\n\n // Relations\n usageRecords: field.hasMany('UsageRecord'),\n usageSummaries: field.hasMany('UsageSummary'),\n thresholds: field.hasMany('UsageThreshold'),\n },\n indexes: [\n index.on(['orgId', 'key']),\n index.on(['category']),\n index.on(['isActive']),\n ],\n enums: [AggregationTypeEnum, ResetPeriodEnum],\n});\n\n/**\n * UsageRecord entity - individual usage event.\n */\nexport const UsageRecordEntity = defineEntity({\n name: 'UsageRecord',\n description: 'A single usage event.',\n schema: 'lssm_metering',\n map: 'usage_record',\n fields: {\n id: field.id({ description: 'Unique identifier' }),\n\n // Metric reference\n metricKey: field.string({ description: 'Metric being recorded' }),\n metricId: field.string({\n isOptional: true,\n description: 'Metric ID (for FK)',\n }),\n\n // Subject\n subjectType: field.string({\n description: 'Subject type (org, user, project)',\n }),\n subjectId: field.string({ description: 'Subject identifier' }),\n\n // Usage value\n quantity: field.decimal({ description: 'Usage quantity' }),\n\n // Context\n source: field.string({\n isOptional: true,\n description: 'Source of usage (endpoint, feature, etc.)',\n }),\n resourceId: field.string({\n isOptional: true,\n description: 'Related resource ID',\n }),\n resourceType: field.string({\n isOptional: true,\n description: 'Related resource type',\n }),\n\n // Metadata\n metadata: field.json({\n isOptional: true,\n description: 'Additional context',\n }),\n\n // Idempotency\n idempotencyKey: field.string({\n isOptional: true,\n description: 'Idempotency key for deduplication',\n }),\n\n // Timestamps\n timestamp: field.dateTime({ description: 'When usage occurred' }),\n createdAt: field.createdAt(),\n\n // Aggregation status\n aggregated: field.boolean({\n default: false,\n description: 'Whether included in summary',\n }),\n aggregatedAt: field.dateTime({\n isOptional: true,\n description: 'When aggregated',\n }),\n },\n indexes: [\n index.on(['metricKey', 'subjectType', 'subjectId', 'timestamp']),\n index.on(['subjectType', 'subjectId', 'timestamp']),\n index.on(['timestamp']),\n index.on(['aggregated', 'timestamp']),\n index.unique(['idempotencyKey'], { name: 'usage_record_idempotency' }),\n ],\n});\n\n/**\n * UsageSummary entity - pre-aggregated usage.\n */\nexport const UsageSummaryEntity = defineEntity({\n name: 'UsageSummary',\n description: 'Pre-aggregated usage summary.',\n schema: 'lssm_metering',\n map: 'usage_summary',\n fields: {\n id: field.id({ description: 'Unique identifier' }),\n\n // Metric reference\n metricKey: field.string({ description: 'Metric key' }),\n metricId: field.string({\n isOptional: true,\n description: 'Metric ID (for FK)',\n }),\n\n // Subject\n subjectType: field.string({ description: 'Subject type' }),\n subjectId: field.string({ description: 'Subject identifier' }),\n\n // Period\n periodType: field.enum('PeriodType', { description: 'Period type' }),\n periodStart: field.dateTime({ description: 'Period start time' }),\n periodEnd: field.dateTime({ description: 'Period end time' }),\n\n // Aggregated values\n totalQuantity: field.decimal({ description: 'Total/aggregated quantity' }),\n recordCount: field.int({\n default: 0,\n description: 'Number of records aggregated',\n }),\n\n // Statistics (for AVG, MIN, MAX)\n minQuantity: field.decimal({\n isOptional: true,\n description: 'Minimum value',\n }),\n maxQuantity: field.decimal({\n isOptional: true,\n description: 'Maximum value',\n }),\n avgQuantity: field.decimal({\n isOptional: true,\n description: 'Average value',\n }),\n\n // Metadata\n metadata: field.json({\n isOptional: true,\n description: 'Additional metadata',\n }),\n\n // Timestamps\n createdAt: field.createdAt(),\n updatedAt: field.updatedAt(),\n },\n indexes: [\n index.unique(\n ['metricKey', 'subjectType', 'subjectId', 'periodType', 'periodStart'],\n { name: 'usage_summary_unique' }\n ),\n index.on(['subjectType', 'subjectId', 'periodType', 'periodStart']),\n index.on(['metricKey', 'periodType', 'periodStart']),\n ],\n enums: [PeriodTypeEnum],\n});\n\n/**\n * UsageThreshold entity - threshold configuration.\n */\nexport const UsageThresholdEntity = defineEntity({\n name: 'UsageThreshold',\n description: 'Usage threshold configuration.',\n schema: 'lssm_metering',\n map: 'usage_threshold',\n fields: {\n id: field.id({ description: 'Unique identifier' }),\n\n // Metric reference\n metricKey: field.string({ description: 'Metric to monitor' }),\n metricId: field.string({\n isOptional: true,\n description: 'Metric ID (for FK)',\n }),\n\n // Subject (optional - can be global)\n subjectType: field.string({\n isOptional: true,\n description: 'Subject type',\n }),\n subjectId: field.string({\n isOptional: true,\n description: 'Subject identifier',\n }),\n\n // Threshold configuration\n name: field.string({ description: 'Threshold name' }),\n threshold: field.decimal({ description: 'Threshold value' }),\n warnThreshold: field.decimal({\n isOptional: true,\n description: 'Warning threshold (e.g., 80%)',\n }),\n\n // Period\n periodType: field.enum('PeriodType', {\n default: 'MONTHLY',\n description: 'Period to evaluate',\n }),\n\n // Actions\n action: field.enum('ThresholdAction', {\n default: 'ALERT',\n description: 'Action when exceeded',\n }),\n notifyEmails: field.json({\n isOptional: true,\n description: 'Email addresses to notify',\n }),\n notifyWebhook: field.string({\n isOptional: true,\n description: 'Webhook URL to call',\n }),\n\n // Status tracking\n currentValue: field.decimal({\n default: 0,\n description: 'Current usage value',\n }),\n lastCheckedAt: field.dateTime({\n isOptional: true,\n description: 'Last threshold check',\n }),\n lastExceededAt: field.dateTime({\n isOptional: true,\n description: 'Last time threshold was exceeded',\n }),\n\n // Status\n isActive: field.boolean({\n default: true,\n description: 'Whether threshold is active',\n }),\n\n // Metadata\n metadata: field.json({\n isOptional: true,\n description: 'Additional metadata',\n }),\n\n // Timestamps\n createdAt: field.createdAt(),\n updatedAt: field.updatedAt(),\n },\n indexes: [\n index.on(['metricKey']),\n index.on(['subjectType', 'subjectId']),\n index.on(['isActive', 'metricKey']),\n ],\n enums: [ThresholdActionEnum],\n});\n\n/**\n * UsageAlert entity - threshold violation alerts.\n */\nexport const UsageAlertEntity = defineEntity({\n name: 'UsageAlert',\n description: 'Alert generated when threshold is exceeded.',\n schema: 'lssm_metering',\n map: 'usage_alert',\n fields: {\n id: field.id({ description: 'Unique identifier' }),\n\n // Threshold reference\n thresholdId: field.foreignKey({\n description: 'Threshold that triggered alert',\n }),\n\n // Context\n metricKey: field.string({ description: 'Metric key' }),\n subjectType: field.string({\n isOptional: true,\n description: 'Subject type',\n }),\n subjectId: field.string({\n isOptional: true,\n description: 'Subject identifier',\n }),\n\n // Alert details\n alertType: field.string({ description: 'Alert type (warn, exceed, etc.)' }),\n threshold: field.decimal({ description: 'Threshold value' }),\n actualValue: field.decimal({ description: 'Actual usage value' }),\n percentageUsed: field.decimal({\n description: 'Percentage of threshold used',\n }),\n\n // Status\n status: field.string({\n default: '\"pending\"',\n description: 'Alert status (pending, acknowledged, resolved)',\n }),\n acknowledgedBy: field.string({\n isOptional: true,\n description: 'User who acknowledged',\n }),\n acknowledgedAt: field.dateTime({\n isOptional: true,\n description: 'When acknowledged',\n }),\n resolvedAt: field.dateTime({\n isOptional: true,\n description: 'When resolved',\n }),\n\n // Notifications\n notificationsSent: field.json({\n isOptional: true,\n description: 'Notifications sent',\n }),\n\n // Timestamps\n triggeredAt: field.dateTime({ description: 'When alert was triggered' }),\n createdAt: field.createdAt(),\n\n // Relations\n thresholdRelation: field.belongsTo(\n 'UsageThreshold',\n ['thresholdId'],\n ['id'],\n { onDelete: 'Cascade' }\n ),\n },\n indexes: [\n index.on(['thresholdId', 'status']),\n index.on(['metricKey', 'triggeredAt']),\n index.on(['status', 'triggeredAt']),\n ],\n});\n\n/**\n * All metering entities for schema composition.\n */\nexport const meteringEntities = [\n MetricDefinitionEntity,\n UsageRecordEntity,\n UsageSummaryEntity,\n UsageThresholdEntity,\n UsageAlertEntity,\n];\n\n/**\n * Module schema contribution for metering.\n */\nexport const meteringSchemaContribution: ModuleSchemaContribution = {\n moduleId: '@lssm/lib.metering',\n entities: meteringEntities,\n enums: [\n AggregationTypeEnum,\n ResetPeriodEnum,\n PeriodTypeEnum,\n ThresholdActionEnum,\n ],\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["meteringSchemaContribution: ModuleSchemaContribution"],"sources":["../../src/entities/index.ts"],"sourcesContent":["import { defineEntity, defineEntityEnum, field, index } from '@lssm/lib.schema';\nimport type { ModuleSchemaContribution } from '@lssm/lib.schema';\n\n/**\n * Aggregation type enum.\n */\nexport const AggregationTypeEnum = defineEntityEnum({\n name: 'AggregationType',\n values: ['COUNT', 'SUM', 'AVG', 'MAX', 'MIN', 'LAST'] as const,\n schema: 'lssm_metering',\n description: 'How to aggregate metric values.',\n});\n\n/**\n * Reset period enum.\n */\nexport const ResetPeriodEnum = defineEntityEnum({\n name: 'ResetPeriod',\n values: ['NEVER', 'HOURLY', 'DAILY', 'WEEKLY', 'MONTHLY', 'YEARLY'] as const,\n schema: 'lssm_metering',\n description: 'When to reset metric counters.',\n});\n\n/**\n * Period type enum.\n */\nexport const PeriodTypeEnum = defineEntityEnum({\n name: 'PeriodType',\n values: ['HOURLY', 'DAILY', 'WEEKLY', 'MONTHLY', 'YEARLY'] as const,\n schema: 'lssm_metering',\n description: 'Time period for aggregation.',\n});\n\n/**\n * Threshold action enum.\n */\nexport const ThresholdActionEnum = defineEntityEnum({\n name: 'ThresholdAction',\n values: ['NONE', 'ALERT', 'WARN', 'BLOCK', 'DOWNGRADE'] as const,\n schema: 'lssm_metering',\n description: 'Action to take when threshold is exceeded.',\n});\n\n/**\n * MetricDefinition entity - defines a trackable metric.\n */\nexport const MetricDefinitionEntity = defineEntity({\n name: 'MetricDefinition',\n description: 'Definition of a usage metric.',\n schema: 'lssm_metering',\n map: 'metric_definition',\n fields: {\n id: field.id({ description: 'Unique identifier' }),\n key: field.string({\n isUnique: true,\n description: 'Metric key (e.g., api_calls, storage_gb)',\n }),\n name: field.string({ description: 'Human-readable name' }),\n description: field.string({\n isOptional: true,\n description: 'Metric description',\n }),\n\n // Configuration\n unit: field.string({\n description: 'Unit of measurement (calls, bytes, etc.)',\n }),\n aggregationType: field.enum('AggregationType', {\n default: 'SUM',\n description: 'How to aggregate values',\n }),\n resetPeriod: field.enum('ResetPeriod', {\n default: 'MONTHLY',\n description: 'When to reset counters',\n }),\n\n // Precision\n precision: field.int({ default: 2, description: 'Decimal precision' }),\n\n // Scope\n orgId: field.string({\n isOptional: true,\n description: 'Organization scope (null = global metric)',\n }),\n\n // Display\n category: field.string({\n isOptional: true,\n description: 'Category for grouping',\n }),\n displayOrder: field.int({ default: 0, description: 'Order for display' }),\n\n // Metadata\n metadata: field.json({\n isOptional: true,\n description: 'Additional metadata',\n }),\n\n // Status\n isActive: field.boolean({\n default: true,\n description: 'Whether metric is active',\n }),\n\n // Timestamps\n createdAt: field.createdAt(),\n updatedAt: field.updatedAt(),\n\n // Relations\n usageRecords: field.hasMany('UsageRecord'),\n usageSummaries: field.hasMany('UsageSummary'),\n thresholds: field.hasMany('UsageThreshold'),\n },\n indexes: [\n index.on(['orgId', 'key']),\n index.on(['category']),\n index.on(['isActive']),\n ],\n enums: [AggregationTypeEnum, ResetPeriodEnum],\n});\n\n/**\n * UsageRecord entity - individual usage event.\n */\nexport const UsageRecordEntity = defineEntity({\n name: 'UsageRecord',\n description: 'A single usage event.',\n schema: 'lssm_metering',\n map: 'usage_record',\n fields: {\n id: field.id({ description: 'Unique identifier' }),\n\n // Metric reference\n metricKey: field.string({ description: 'Metric being recorded' }),\n metricId: field.string({\n isOptional: true,\n description: 'Metric ID (for FK)',\n }),\n\n // Subject\n subjectType: field.string({\n description: 'Subject type (org, user, project)',\n }),\n subjectId: field.string({ description: 'Subject identifier' }),\n\n // Usage value\n quantity: field.decimal({ description: 'Usage quantity' }),\n\n // Context\n source: field.string({\n isOptional: true,\n description: 'Source of usage (endpoint, feature, etc.)',\n }),\n resourceId: field.string({\n isOptional: true,\n description: 'Related resource ID',\n }),\n resourceType: field.string({\n isOptional: true,\n description: 'Related resource type',\n }),\n\n // Metadata\n metadata: field.json({\n isOptional: true,\n description: 'Additional context',\n }),\n\n // Idempotency\n idempotencyKey: field.string({\n isOptional: true,\n description: 'Idempotency key for deduplication',\n }),\n\n // Timestamps\n timestamp: field.dateTime({ description: 'When usage occurred' }),\n createdAt: field.createdAt(),\n\n // Aggregation status\n aggregated: field.boolean({\n default: false,\n description: 'Whether included in summary',\n }),\n aggregatedAt: field.dateTime({\n isOptional: true,\n description: 'When aggregated',\n }),\n },\n indexes: [\n index.on(['metricKey', 'subjectType', 'subjectId', 'timestamp']),\n index.on(['subjectType', 'subjectId', 'timestamp']),\n index.on(['timestamp']),\n index.on(['aggregated', 'timestamp']),\n index.unique(['idempotencyKey'], { name: 'usage_record_idempotency' }),\n ],\n});\n\n/**\n * UsageSummary entity - pre-aggregated usage.\n */\nexport const UsageSummaryEntity = defineEntity({\n name: 'UsageSummary',\n description: 'Pre-aggregated usage summary.',\n schema: 'lssm_metering',\n map: 'usage_summary',\n fields: {\n id: field.id({ description: 'Unique identifier' }),\n\n // Metric reference\n metricKey: field.string({ description: 'Metric key' }),\n metricId: field.string({\n isOptional: true,\n description: 'Metric ID (for FK)',\n }),\n\n // Subject\n subjectType: field.string({ description: 'Subject type' }),\n subjectId: field.string({ description: 'Subject identifier' }),\n\n // Period\n periodType: field.enum('PeriodType', { description: 'Period type' }),\n periodStart: field.dateTime({ description: 'Period start time' }),\n periodEnd: field.dateTime({ description: 'Period end time' }),\n\n // Aggregated values\n totalQuantity: field.decimal({ description: 'Total/aggregated quantity' }),\n recordCount: field.int({\n default: 0,\n description: 'Number of records aggregated',\n }),\n\n // Statistics (for AVG, MIN, MAX)\n minQuantity: field.decimal({\n isOptional: true,\n description: 'Minimum value',\n }),\n maxQuantity: field.decimal({\n isOptional: true,\n description: 'Maximum value',\n }),\n avgQuantity: field.decimal({\n isOptional: true,\n description: 'Average value',\n }),\n\n // Metadata\n metadata: field.json({\n isOptional: true,\n description: 'Additional metadata',\n }),\n\n // Timestamps\n createdAt: field.createdAt(),\n updatedAt: field.updatedAt(),\n },\n indexes: [\n index.unique(\n ['metricKey', 'subjectType', 'subjectId', 'periodType', 'periodStart'],\n { name: 'usage_summary_unique' }\n ),\n index.on(['subjectType', 'subjectId', 'periodType', 'periodStart']),\n index.on(['metricKey', 'periodType', 'periodStart']),\n ],\n enums: [PeriodTypeEnum],\n});\n\n/**\n * UsageThreshold entity - threshold configuration.\n */\nexport const UsageThresholdEntity = defineEntity({\n name: 'UsageThreshold',\n description: 'Usage threshold configuration.',\n schema: 'lssm_metering',\n map: 'usage_threshold',\n fields: {\n id: field.id({ description: 'Unique identifier' }),\n\n // Metric reference\n metricKey: field.string({ description: 'Metric to monitor' }),\n metricId: field.string({\n isOptional: true,\n description: 'Metric ID (for FK)',\n }),\n\n // Subject (optional - can be global)\n subjectType: field.string({\n isOptional: true,\n description: 'Subject type',\n }),\n subjectId: field.string({\n isOptional: true,\n description: 'Subject identifier',\n }),\n\n // Threshold configuration\n name: field.string({ description: 'Threshold name' }),\n threshold: field.decimal({ description: 'Threshold value' }),\n warnThreshold: field.decimal({\n isOptional: true,\n description: 'Warning threshold (e.g., 80%)',\n }),\n\n // Period\n periodType: field.enum('PeriodType', {\n default: 'MONTHLY',\n description: 'Period to evaluate',\n }),\n\n // Actions\n action: field.enum('ThresholdAction', {\n default: 'ALERT',\n description: 'Action when exceeded',\n }),\n notifyEmails: field.json({\n isOptional: true,\n description: 'Email addresses to notify',\n }),\n notifyWebhook: field.string({\n isOptional: true,\n description: 'Webhook URL to call',\n }),\n\n // Status tracking\n currentValue: field.decimal({\n default: 0,\n description: 'Current usage value',\n }),\n lastCheckedAt: field.dateTime({\n isOptional: true,\n description: 'Last threshold check',\n }),\n lastExceededAt: field.dateTime({\n isOptional: true,\n description: 'Last time threshold was exceeded',\n }),\n\n // Status\n isActive: field.boolean({\n default: true,\n description: 'Whether threshold is active',\n }),\n\n // Metadata\n metadata: field.json({\n isOptional: true,\n description: 'Additional metadata',\n }),\n\n // Timestamps\n createdAt: field.createdAt(),\n updatedAt: field.updatedAt(),\n },\n indexes: [\n index.on(['metricKey']),\n index.on(['subjectType', 'subjectId']),\n index.on(['isActive', 'metricKey']),\n ],\n enums: [ThresholdActionEnum],\n});\n\n/**\n * UsageAlert entity - threshold violation alerts.\n */\nexport const UsageAlertEntity = defineEntity({\n name: 'UsageAlert',\n description: 'Alert generated when threshold is exceeded.',\n schema: 'lssm_metering',\n map: 'usage_alert',\n fields: {\n id: field.id({ description: 'Unique identifier' }),\n\n // Threshold reference\n thresholdId: field.foreignKey({\n description: 'Threshold that triggered alert',\n }),\n\n // Context\n metricKey: field.string({ description: 'Metric key' }),\n subjectType: field.string({\n isOptional: true,\n description: 'Subject type',\n }),\n subjectId: field.string({\n isOptional: true,\n description: 'Subject identifier',\n }),\n\n // Alert details\n alertType: field.string({ description: 'Alert type (warn, exceed, etc.)' }),\n threshold: field.decimal({ description: 'Threshold value' }),\n actualValue: field.decimal({ description: 'Actual usage value' }),\n percentageUsed: field.decimal({\n description: 'Percentage of threshold used',\n }),\n\n // Status\n status: field.string({\n default: '\"pending\"',\n description: 'Alert status (pending, acknowledged, resolved)',\n }),\n acknowledgedBy: field.string({\n isOptional: true,\n description: 'User who acknowledged',\n }),\n acknowledgedAt: field.dateTime({\n isOptional: true,\n description: 'When acknowledged',\n }),\n resolvedAt: field.dateTime({\n isOptional: true,\n description: 'When resolved',\n }),\n\n // Notifications\n notificationsSent: field.json({\n isOptional: true,\n description: 'Notifications sent',\n }),\n\n // Timestamps\n triggeredAt: field.dateTime({ description: 'When alert was triggered' }),\n createdAt: field.createdAt(),\n\n // Relations\n thresholdRelation: field.belongsTo(\n 'UsageThreshold',\n ['thresholdId'],\n ['id'],\n { onDelete: 'Cascade' }\n ),\n },\n indexes: [\n index.on(['thresholdId', 'status']),\n index.on(['metricKey', 'triggeredAt']),\n index.on(['status', 'triggeredAt']),\n ],\n});\n\n/**\n * All metering entities for schema composition.\n */\nexport const meteringEntities = [\n MetricDefinitionEntity,\n UsageRecordEntity,\n UsageSummaryEntity,\n UsageThresholdEntity,\n UsageAlertEntity,\n];\n\n/**\n * Module schema contribution for metering.\n */\nexport const meteringSchemaContribution: ModuleSchemaContribution = {\n moduleId: '@lssm/lib.metering',\n entities: meteringEntities,\n enums: [\n AggregationTypeEnum,\n ResetPeriodEnum,\n PeriodTypeEnum,\n ThresholdActionEnum,\n ],\n};\n"],"mappings":"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"}