@lssm/lib.metering 0.0.0-canary-20251217083314 → 0.0.0-canary-20251220002821

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