@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.
- package/LICENSE +21 -0
- package/README.md +3 -0
- package/dist/aggregation/index.d.ts +2 -1
- package/dist/aggregation/index.d.ts.map +1 -0
- package/dist/aggregation/index.js +8 -5
- package/dist/aggregation/index.js.map +1 -0
- package/dist/contracts/dist/capabilities/openbanking.js +2 -1
- package/dist/contracts/dist/capabilities/openbanking.js.map +1 -0
- package/dist/contracts/dist/contract-registry/schemas.js +2 -1
- package/dist/contracts/dist/contract-registry/schemas.js.map +1 -0
- package/dist/contracts/dist/docs/accessibility_wcag_compliance_specs.docblock.js +2 -1
- package/dist/contracts/dist/docs/accessibility_wcag_compliance_specs.docblock.js.map +1 -0
- package/dist/contracts/dist/docs/index.js +2 -6
- package/dist/contracts/dist/docs/meta.docs.js +30 -0
- package/dist/contracts/dist/docs/meta.docs.js.map +1 -0
- package/dist/contracts/dist/docs/presentations.js +2 -1
- package/dist/contracts/dist/docs/presentations.js.map +1 -0
- package/dist/contracts/dist/docs/registry.js +2 -1
- package/dist/contracts/dist/docs/registry.js.map +1 -0
- package/dist/contracts/dist/docs/tech/auth/better-auth-nextjs.docblock.js +2 -1
- package/dist/contracts/dist/docs/tech/auth/better-auth-nextjs.docblock.js.map +1 -0
- package/dist/contracts/dist/docs/tech/contracts/openapi-export.docblock.js +2 -1
- package/dist/contracts/dist/docs/tech/contracts/openapi-export.docblock.js.map +1 -0
- package/dist/contracts/dist/docs/tech/lifecycle-stage-system.docblock.js +2 -1
- package/dist/contracts/dist/docs/tech/lifecycle-stage-system.docblock.js.map +1 -0
- package/dist/contracts/dist/docs/tech/llm/llm-integration.docblock.js +2 -1
- package/dist/contracts/dist/docs/tech/llm/llm-integration.docblock.js.map +1 -0
- package/dist/contracts/dist/docs/tech/mcp-endpoints.docblock.js +2 -1
- package/dist/contracts/dist/docs/tech/mcp-endpoints.docblock.js.map +1 -0
- package/dist/contracts/dist/docs/tech/presentation-runtime.docblock.js +2 -1
- package/dist/contracts/dist/docs/tech/presentation-runtime.docblock.js.map +1 -0
- package/dist/contracts/dist/docs/tech/schema/README.docblock.js +2 -1
- package/dist/contracts/dist/docs/tech/schema/README.docblock.js.map +1 -0
- package/dist/contracts/dist/docs/tech/studio/learning-events.docblock.js +2 -1
- package/dist/contracts/dist/docs/tech/studio/learning-events.docblock.js.map +1 -0
- package/dist/contracts/dist/docs/tech/studio/learning-journeys.docblock.js +2 -1
- package/dist/contracts/dist/docs/tech/studio/learning-journeys.docblock.js.map +1 -0
- package/dist/contracts/dist/docs/tech/studio/platform-admin-panel.docblock.js +2 -1
- package/dist/contracts/dist/docs/tech/studio/platform-admin-panel.docblock.js.map +1 -0
- package/dist/contracts/dist/docs/tech/studio/project-access-teams.docblock.js +2 -1
- package/dist/contracts/dist/docs/tech/studio/project-access-teams.docblock.js.map +1 -0
- package/dist/contracts/dist/docs/tech/studio/project-routing.docblock.js +2 -1
- package/dist/contracts/dist/docs/tech/studio/project-routing.docblock.js.map +1 -0
- package/dist/contracts/dist/docs/tech/studio/sandbox-unlogged.docblock.js +2 -1
- package/dist/contracts/dist/docs/tech/studio/sandbox-unlogged.docblock.js.map +1 -0
- package/dist/contracts/dist/docs/tech/studio/team-invitations.docblock.js +2 -1
- package/dist/contracts/dist/docs/tech/studio/team-invitations.docblock.js.map +1 -0
- package/dist/contracts/dist/docs/tech/studio/workspace-ops.docblock.js +2 -1
- package/dist/contracts/dist/docs/tech/studio/workspace-ops.docblock.js.map +1 -0
- package/dist/contracts/dist/docs/tech/studio/workspaces.docblock.js +2 -1
- package/dist/contracts/dist/docs/tech/studio/workspaces.docblock.js.map +1 -0
- package/dist/contracts/dist/docs/tech/telemetry-ingest.docblock.js +2 -1
- package/dist/contracts/dist/docs/tech/telemetry-ingest.docblock.js.map +1 -0
- package/dist/contracts/dist/docs/tech/templates/runtime.docblock.js +2 -1
- package/dist/contracts/dist/docs/tech/templates/runtime.docblock.js.map +1 -0
- package/dist/contracts/dist/docs/tech/vscode-extension.docblock.js +2 -1
- package/dist/contracts/dist/docs/tech/vscode-extension.docblock.js.map +1 -0
- package/dist/contracts/dist/docs/tech/workflows/overview.docblock.js +2 -1
- package/dist/contracts/dist/docs/tech/workflows/overview.docblock.js.map +1 -0
- package/dist/contracts/dist/docs/tech-contracts.docs.js +97 -0
- package/dist/contracts/dist/docs/tech-contracts.docs.js.map +1 -0
- package/dist/contracts/dist/events.js +2 -1
- package/dist/contracts/dist/events.js.map +1 -0
- package/dist/contracts/dist/index.js +2 -1
- package/dist/contracts/dist/integrations/contracts.js +65 -66
- package/dist/contracts/dist/integrations/contracts.js.map +1 -0
- package/dist/contracts/dist/integrations/openbanking/contracts/accounts.js +31 -32
- package/dist/contracts/dist/integrations/openbanking/contracts/accounts.js.map +1 -0
- package/dist/contracts/dist/integrations/openbanking/contracts/balances.js +18 -19
- package/dist/contracts/dist/integrations/openbanking/contracts/balances.js.map +1 -0
- package/dist/contracts/dist/integrations/openbanking/contracts/transactions.js +32 -33
- package/dist/contracts/dist/integrations/openbanking/contracts/transactions.js.map +1 -0
- package/dist/contracts/dist/integrations/openbanking/models.js +60 -61
- package/dist/contracts/dist/integrations/openbanking/models.js.map +1 -0
- package/dist/contracts/dist/integrations/openbanking/telemetry.js +2 -1
- package/dist/contracts/dist/integrations/openbanking/telemetry.js.map +1 -0
- package/dist/contracts/dist/integrations/providers/elevenlabs.js +2 -1
- package/dist/contracts/dist/integrations/providers/elevenlabs.js.map +1 -0
- package/dist/contracts/dist/integrations/providers/gcs-storage.js +2 -1
- package/dist/contracts/dist/integrations/providers/gcs-storage.js.map +1 -0
- package/dist/contracts/dist/integrations/providers/gmail.js +2 -1
- package/dist/contracts/dist/integrations/providers/gmail.js.map +1 -0
- package/dist/contracts/dist/integrations/providers/google-calendar.js +2 -1
- package/dist/contracts/dist/integrations/providers/google-calendar.js.map +1 -0
- package/dist/contracts/dist/integrations/providers/mistral.js +2 -1
- package/dist/contracts/dist/integrations/providers/mistral.js.map +1 -0
- package/dist/contracts/dist/integrations/providers/postmark.js +2 -1
- package/dist/contracts/dist/integrations/providers/postmark.js.map +1 -0
- package/dist/contracts/dist/integrations/providers/powens.js +2 -1
- package/dist/contracts/dist/integrations/providers/powens.js.map +1 -0
- package/dist/contracts/dist/integrations/providers/qdrant.js +2 -1
- package/dist/contracts/dist/integrations/providers/qdrant.js.map +1 -0
- package/dist/contracts/dist/integrations/providers/stripe.js +2 -1
- package/dist/contracts/dist/integrations/providers/stripe.js.map +1 -0
- package/dist/contracts/dist/integrations/providers/twilio-sms.js +2 -1
- package/dist/contracts/dist/integrations/providers/twilio-sms.js.map +1 -0
- package/dist/contracts/dist/knowledge/contracts.js +44 -45
- package/dist/contracts/dist/knowledge/contracts.js.map +1 -0
- package/dist/contracts/dist/knowledge/spaces/email-threads.js +2 -1
- package/dist/contracts/dist/knowledge/spaces/email-threads.js.map +1 -0
- package/dist/contracts/dist/knowledge/spaces/financial-docs.js +2 -1
- package/dist/contracts/dist/knowledge/spaces/financial-docs.js.map +1 -0
- package/dist/contracts/dist/knowledge/spaces/financial-overview.js +2 -1
- package/dist/contracts/dist/knowledge/spaces/financial-overview.js.map +1 -0
- package/dist/contracts/dist/knowledge/spaces/product-canon.js +2 -1
- package/dist/contracts/dist/knowledge/spaces/product-canon.js.map +1 -0
- package/dist/contracts/dist/knowledge/spaces/support-faq.js +2 -1
- package/dist/contracts/dist/knowledge/spaces/support-faq.js.map +1 -0
- package/dist/contracts/dist/knowledge/spaces/uploaded-docs.js +2 -1
- package/dist/contracts/dist/knowledge/spaces/uploaded-docs.js.map +1 -0
- package/dist/contracts/dist/llm/exporters.js +2 -1
- package/dist/contracts/dist/llm/exporters.js.map +1 -0
- package/dist/contracts/dist/onboarding-base.js +22 -23
- package/dist/contracts/dist/onboarding-base.js.map +1 -0
- package/dist/contracts/dist/ownership.js +4 -2
- package/dist/contracts/dist/ownership.js.map +1 -0
- package/dist/contracts/dist/presentations.v2.js +2 -1
- package/dist/contracts/dist/presentations.v2.js.map +1 -0
- package/dist/contracts/dist/regenerator/service.js +2 -1
- package/dist/contracts/dist/regenerator/service.js.map +1 -0
- package/dist/contracts/dist/schema/dist/index.js +3873 -6
- package/dist/contracts/dist/schema/dist/index.js.map +1 -0
- package/dist/contracts/dist/spec.js +2 -1
- package/dist/contracts/dist/spec.js.map +1 -0
- package/dist/contracts/index.d.ts +292 -291
- package/dist/contracts/index.d.ts.map +1 -0
- package/dist/contracts/index.js +151 -152
- package/dist/contracts/index.js.map +1 -0
- package/dist/docs/metering.docblock.js +2 -1
- package/dist/docs/metering.docblock.js.map +1 -0
- package/dist/entities/index.d.ts +187 -186
- package/dist/entities/index.d.ts.map +1 -0
- package/dist/entities/index.js +114 -114
- package/dist/entities/index.js.map +1 -0
- package/dist/events.d.ts +137 -136
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +70 -71
- package/dist/events.js.map +1 -0
- package/dist/metering.feature.d.ts +2 -1
- package/dist/metering.feature.d.ts.map +1 -0
- package/dist/metering.feature.js +2 -1
- package/dist/metering.feature.js.map +1 -0
- package/dist/schema/dist/index.js +4889 -6
- package/dist/schema/dist/index.js.map +1 -0
- package/package.json +13 -6
- package/dist/contracts/dist/docs/PUBLISHING.docblock.js +0 -16
- package/dist/contracts/dist/docs/tech/PHASE_1_QUICKSTART.docblock.js +0 -16
- package/dist/contracts/dist/docs/tech/PHASE_2_AI_NATIVE_OPERATIONS.docblock.js +0 -16
- package/dist/contracts/dist/docs/tech/PHASE_3_AUTO_EVOLUTION.docblock.js +0 -16
- package/dist/contracts/dist/docs/tech/PHASE_4_PERSONALIZATION_ENGINE.docblock.js +0 -16
- package/dist/contracts/dist/docs/tech/PHASE_5_ZERO_TOUCH_OPERATIONS.docblock.js +0 -16
- package/dist/contracts/dist/schema/dist/EnumType.js +0 -2
- package/dist/contracts/dist/schema/dist/FieldType.js +0 -49
- package/dist/contracts/dist/schema/dist/ScalarTypeEnum.js +0 -236
- package/dist/contracts/dist/schema/dist/SchemaModel.js +0 -34
- package/dist/contracts/dist/schema/dist/entity/defineEntity.js +0 -1
- package/dist/contracts/dist/schema/dist/entity/index.js +0 -2
- package/dist/contracts/dist/schema/dist/entity/types.js +0 -1
- package/dist/schema/dist/EnumType.js +0 -2
- package/dist/schema/dist/FieldType.js +0 -49
- package/dist/schema/dist/ScalarTypeEnum.js +0 -236
- package/dist/schema/dist/SchemaModel.js +0 -39
- package/dist/schema/dist/entity/defineEntity.js +0 -236
- package/dist/schema/dist/entity/index.js +0 -2
- package/dist/schema/dist/entity/types.js +0 -1
package/dist/entities/index.js
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import {
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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:
|
|
77
|
-
key:
|
|
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:
|
|
82
|
-
description:
|
|
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:
|
|
87
|
-
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:
|
|
90
|
+
resetPeriod: _5.enum("ResetPeriod", {
|
|
92
91
|
default: "MONTHLY",
|
|
93
92
|
description: "When to reset counters"
|
|
94
93
|
}),
|
|
95
|
-
precision:
|
|
94
|
+
precision: _5.int({
|
|
96
95
|
default: 2,
|
|
97
96
|
description: "Decimal precision"
|
|
98
97
|
}),
|
|
99
|
-
orgId:
|
|
98
|
+
orgId: _5.string({
|
|
100
99
|
isOptional: true,
|
|
101
100
|
description: "Organization scope (null = global metric)"
|
|
102
101
|
}),
|
|
103
|
-
category:
|
|
102
|
+
category: _5.string({
|
|
104
103
|
isOptional: true,
|
|
105
104
|
description: "Category for grouping"
|
|
106
105
|
}),
|
|
107
|
-
displayOrder:
|
|
106
|
+
displayOrder: _5.int({
|
|
108
107
|
default: 0,
|
|
109
108
|
description: "Order for display"
|
|
110
109
|
}),
|
|
111
|
-
metadata:
|
|
110
|
+
metadata: _5.json({
|
|
112
111
|
isOptional: true,
|
|
113
112
|
description: "Additional metadata"
|
|
114
113
|
}),
|
|
115
|
-
isActive:
|
|
114
|
+
isActive: _5.boolean({
|
|
116
115
|
default: true,
|
|
117
116
|
description: "Whether metric is active"
|
|
118
117
|
}),
|
|
119
|
-
createdAt:
|
|
120
|
-
updatedAt:
|
|
121
|
-
usageRecords:
|
|
122
|
-
usageSummaries:
|
|
123
|
-
thresholds:
|
|
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
|
-
|
|
127
|
-
|
|
128
|
-
|
|
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 =
|
|
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:
|
|
142
|
-
metricKey:
|
|
143
|
-
metricId:
|
|
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:
|
|
148
|
-
subjectId:
|
|
149
|
-
quantity:
|
|
150
|
-
source:
|
|
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:
|
|
153
|
+
resourceId: _5.string({
|
|
155
154
|
isOptional: true,
|
|
156
155
|
description: "Related resource ID"
|
|
157
156
|
}),
|
|
158
|
-
resourceType:
|
|
157
|
+
resourceType: _5.string({
|
|
159
158
|
isOptional: true,
|
|
160
159
|
description: "Related resource type"
|
|
161
160
|
}),
|
|
162
|
-
metadata:
|
|
161
|
+
metadata: _5.json({
|
|
163
162
|
isOptional: true,
|
|
164
163
|
description: "Additional context"
|
|
165
164
|
}),
|
|
166
|
-
idempotencyKey:
|
|
165
|
+
idempotencyKey: _5.string({
|
|
167
166
|
isOptional: true,
|
|
168
167
|
description: "Idempotency key for deduplication"
|
|
169
168
|
}),
|
|
170
|
-
timestamp:
|
|
171
|
-
createdAt:
|
|
172
|
-
aggregated:
|
|
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:
|
|
175
|
+
aggregatedAt: _5.dateTime({
|
|
177
176
|
isOptional: true,
|
|
178
177
|
description: "When aggregated"
|
|
179
178
|
})
|
|
180
179
|
},
|
|
181
180
|
indexes: [
|
|
182
|
-
|
|
181
|
+
b5.on([
|
|
183
182
|
"metricKey",
|
|
184
183
|
"subjectType",
|
|
185
184
|
"subjectId",
|
|
186
185
|
"timestamp"
|
|
187
186
|
]),
|
|
188
|
-
|
|
187
|
+
b5.on([
|
|
189
188
|
"subjectType",
|
|
190
189
|
"subjectId",
|
|
191
190
|
"timestamp"
|
|
192
191
|
]),
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
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 =
|
|
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:
|
|
208
|
-
metricKey:
|
|
209
|
-
metricId:
|
|
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:
|
|
214
|
-
subjectId:
|
|
215
|
-
periodType:
|
|
216
|
-
periodStart:
|
|
217
|
-
periodEnd:
|
|
218
|
-
totalQuantity:
|
|
219
|
-
recordCount:
|
|
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:
|
|
222
|
+
minQuantity: _5.decimal({
|
|
224
223
|
isOptional: true,
|
|
225
224
|
description: "Minimum value"
|
|
226
225
|
}),
|
|
227
|
-
maxQuantity:
|
|
226
|
+
maxQuantity: _5.decimal({
|
|
228
227
|
isOptional: true,
|
|
229
228
|
description: "Maximum value"
|
|
230
229
|
}),
|
|
231
|
-
avgQuantity:
|
|
230
|
+
avgQuantity: _5.decimal({
|
|
232
231
|
isOptional: true,
|
|
233
232
|
description: "Average value"
|
|
234
233
|
}),
|
|
235
|
-
metadata:
|
|
234
|
+
metadata: _5.json({
|
|
236
235
|
isOptional: true,
|
|
237
236
|
description: "Additional metadata"
|
|
238
237
|
}),
|
|
239
|
-
createdAt:
|
|
240
|
-
updatedAt:
|
|
238
|
+
createdAt: _5.createdAt(),
|
|
239
|
+
updatedAt: _5.updatedAt()
|
|
241
240
|
},
|
|
242
241
|
indexes: [
|
|
243
|
-
|
|
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
|
-
|
|
249
|
+
b5.on([
|
|
251
250
|
"subjectType",
|
|
252
251
|
"subjectId",
|
|
253
252
|
"periodType",
|
|
254
253
|
"periodStart"
|
|
255
254
|
]),
|
|
256
|
-
|
|
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 =
|
|
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:
|
|
274
|
-
metricKey:
|
|
275
|
-
metricId:
|
|
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:
|
|
278
|
+
subjectType: _5.string({
|
|
280
279
|
isOptional: true,
|
|
281
280
|
description: "Subject type"
|
|
282
281
|
}),
|
|
283
|
-
subjectId:
|
|
282
|
+
subjectId: _5.string({
|
|
284
283
|
isOptional: true,
|
|
285
284
|
description: "Subject identifier"
|
|
286
285
|
}),
|
|
287
|
-
name:
|
|
288
|
-
threshold:
|
|
289
|
-
warnThreshold:
|
|
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:
|
|
292
|
+
periodType: _5.enum("PeriodType", {
|
|
294
293
|
default: "MONTHLY",
|
|
295
294
|
description: "Period to evaluate"
|
|
296
295
|
}),
|
|
297
|
-
action:
|
|
296
|
+
action: _5.enum("ThresholdAction", {
|
|
298
297
|
default: "ALERT",
|
|
299
298
|
description: "Action when exceeded"
|
|
300
299
|
}),
|
|
301
|
-
notifyEmails:
|
|
300
|
+
notifyEmails: _5.json({
|
|
302
301
|
isOptional: true,
|
|
303
302
|
description: "Email addresses to notify"
|
|
304
303
|
}),
|
|
305
|
-
notifyWebhook:
|
|
304
|
+
notifyWebhook: _5.string({
|
|
306
305
|
isOptional: true,
|
|
307
306
|
description: "Webhook URL to call"
|
|
308
307
|
}),
|
|
309
|
-
currentValue:
|
|
308
|
+
currentValue: _5.decimal({
|
|
310
309
|
default: 0,
|
|
311
310
|
description: "Current usage value"
|
|
312
311
|
}),
|
|
313
|
-
lastCheckedAt:
|
|
312
|
+
lastCheckedAt: _5.dateTime({
|
|
314
313
|
isOptional: true,
|
|
315
314
|
description: "Last threshold check"
|
|
316
315
|
}),
|
|
317
|
-
lastExceededAt:
|
|
316
|
+
lastExceededAt: _5.dateTime({
|
|
318
317
|
isOptional: true,
|
|
319
318
|
description: "Last time threshold was exceeded"
|
|
320
319
|
}),
|
|
321
|
-
isActive:
|
|
320
|
+
isActive: _5.boolean({
|
|
322
321
|
default: true,
|
|
323
322
|
description: "Whether threshold is active"
|
|
324
323
|
}),
|
|
325
|
-
metadata:
|
|
324
|
+
metadata: _5.json({
|
|
326
325
|
isOptional: true,
|
|
327
326
|
description: "Additional metadata"
|
|
328
327
|
}),
|
|
329
|
-
createdAt:
|
|
330
|
-
updatedAt:
|
|
328
|
+
createdAt: _5.createdAt(),
|
|
329
|
+
updatedAt: _5.updatedAt()
|
|
331
330
|
},
|
|
332
331
|
indexes: [
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
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 =
|
|
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:
|
|
349
|
-
thresholdId:
|
|
350
|
-
metricKey:
|
|
351
|
-
subjectType:
|
|
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:
|
|
354
|
+
subjectId: _5.string({
|
|
356
355
|
isOptional: true,
|
|
357
356
|
description: "Subject identifier"
|
|
358
357
|
}),
|
|
359
|
-
alertType:
|
|
360
|
-
threshold:
|
|
361
|
-
actualValue:
|
|
362
|
-
percentageUsed:
|
|
363
|
-
status:
|
|
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:
|
|
366
|
+
acknowledgedBy: _5.string({
|
|
368
367
|
isOptional: true,
|
|
369
368
|
description: "User who acknowledged"
|
|
370
369
|
}),
|
|
371
|
-
acknowledgedAt:
|
|
370
|
+
acknowledgedAt: _5.dateTime({
|
|
372
371
|
isOptional: true,
|
|
373
372
|
description: "When acknowledged"
|
|
374
373
|
}),
|
|
375
|
-
resolvedAt:
|
|
374
|
+
resolvedAt: _5.dateTime({
|
|
376
375
|
isOptional: true,
|
|
377
376
|
description: "When resolved"
|
|
378
377
|
}),
|
|
379
|
-
notificationsSent:
|
|
378
|
+
notificationsSent: _5.json({
|
|
380
379
|
isOptional: true,
|
|
381
380
|
description: "Notifications sent"
|
|
382
381
|
}),
|
|
383
|
-
triggeredAt:
|
|
384
|
-
createdAt:
|
|
385
|
-
thresholdRelation:
|
|
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
|
-
|
|
389
|
-
|
|
390
|
-
|
|
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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"}
|