@getstrata/core 2.2.38 → 2.2.40
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/CHANGELOG.md +8 -0
- package/dist/entries/audit/exportAuditLogs.js +133 -167
- package/dist/entries/auth/oauth/oidcProvider.js +21 -260
- package/dist/entries/auth/oauth/providers.js +1 -238
- package/dist/entries/http/metricsMiddleware.js +2 -124
- package/dist/entries/jobs/exportAuditLogsJob.js +133 -167
- package/dist/entries/metrics/prometheus.js +1 -130
- package/dist/entries/security/safeFetch.js +1 -260
- package/dist/framework/public-api.d.ts +1 -1
- package/dist/index.js +1 -0
- package/package.json +3 -3
|
@@ -1,130 +1 @@
|
|
|
1
|
-
|
|
2
|
-
// ../../src/core/metrics/prometheus.ts
|
|
3
|
-
var HTTP_DURATION_BUCKETS_MS = [5, 10, 25, 50, 100, 250, 500, 1000, 2500, 5000, 1e4];
|
|
4
|
-
function emptyHistogram() {
|
|
5
|
-
return {
|
|
6
|
-
cumulative: HTTP_DURATION_BUCKETS_MS.map(() => 0),
|
|
7
|
-
sum: 0,
|
|
8
|
-
count: 0
|
|
9
|
-
};
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
class PrometheusRegistry {
|
|
13
|
-
maxSeries;
|
|
14
|
-
seriesLabels = new Map;
|
|
15
|
-
constructor(maxSeries = 4096) {
|
|
16
|
-
this.maxSeries = maxSeries;
|
|
17
|
-
if (!Number.isSafeInteger(maxSeries) || maxSeries < 1) {
|
|
18
|
-
throw new Error("Metrics maxSeries must be a positive safe integer.");
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
httpRequestsTotal = new Map;
|
|
22
|
-
httpRequestDurationMs = new Map;
|
|
23
|
-
incrementHttpRequest(labels) {
|
|
24
|
-
const key = this.metricKey(labels);
|
|
25
|
-
this.httpRequestsTotal.set(key, (this.httpRequestsTotal.get(key) ?? 0) + 1);
|
|
26
|
-
}
|
|
27
|
-
observeHttpDuration(labels, durationMs) {
|
|
28
|
-
if (!Number.isFinite(durationMs) || durationMs < 0)
|
|
29
|
-
return;
|
|
30
|
-
const key = this.metricKey(labels);
|
|
31
|
-
const histogram = this.httpRequestDurationMs.get(key) ?? emptyHistogram();
|
|
32
|
-
histogram.count += 1;
|
|
33
|
-
histogram.sum += durationMs;
|
|
34
|
-
for (let index = 0;index < HTTP_DURATION_BUCKETS_MS.length; index += 1) {
|
|
35
|
-
const bound = HTTP_DURATION_BUCKETS_MS[index];
|
|
36
|
-
if (bound !== undefined && durationMs <= bound) {
|
|
37
|
-
const count = histogram.cumulative[index] ?? 0;
|
|
38
|
-
histogram.cumulative[index] = count + 1;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
this.httpRequestDurationMs.set(key, histogram);
|
|
42
|
-
}
|
|
43
|
-
renderMetrics() {
|
|
44
|
-
const lines = [
|
|
45
|
-
"# HELP http_requests_total Total HTTP requests processed.",
|
|
46
|
-
"# TYPE http_requests_total counter"
|
|
47
|
-
];
|
|
48
|
-
for (const [key, value] of this.httpRequestsTotal) {
|
|
49
|
-
lines.push(`http_requests_total{${key}} ${value}`);
|
|
50
|
-
}
|
|
51
|
-
lines.push("# HELP http_request_duration_ms HTTP request duration in milliseconds.", "# TYPE http_request_duration_ms histogram");
|
|
52
|
-
for (const [key, histogram] of this.httpRequestDurationMs) {
|
|
53
|
-
for (let index = 0;index < HTTP_DURATION_BUCKETS_MS.length; index += 1) {
|
|
54
|
-
const bound = HTTP_DURATION_BUCKETS_MS[index];
|
|
55
|
-
lines.push(`http_request_duration_ms_bucket{${key},le="${bound}"} ${histogram.cumulative[index] ?? 0}`);
|
|
56
|
-
}
|
|
57
|
-
lines.push(`http_request_duration_ms_bucket{${key},le="+Inf"} ${histogram.count}`);
|
|
58
|
-
lines.push(`http_request_duration_ms_sum{${key}} ${histogram.sum}`);
|
|
59
|
-
lines.push(`http_request_duration_ms_count{${key}} ${histogram.count}`);
|
|
60
|
-
}
|
|
61
|
-
return `${lines.join(`
|
|
62
|
-
`)}
|
|
63
|
-
`;
|
|
64
|
-
}
|
|
65
|
-
resetForTests() {
|
|
66
|
-
this.seriesLabels.clear();
|
|
67
|
-
this.httpRequestsTotal.clear();
|
|
68
|
-
this.httpRequestDurationMs.clear();
|
|
69
|
-
}
|
|
70
|
-
getHttpRequestSummary() {
|
|
71
|
-
const byStatus = {};
|
|
72
|
-
const pathCounts = new Map;
|
|
73
|
-
let totalRequests = 0;
|
|
74
|
-
for (const [key, count] of this.httpRequestsTotal) {
|
|
75
|
-
totalRequests += count;
|
|
76
|
-
const labels = this.seriesLabels.get(key);
|
|
77
|
-
if (!labels)
|
|
78
|
-
continue;
|
|
79
|
-
const { method, path, status } = labels;
|
|
80
|
-
byStatus[status] = (byStatus[status] ?? 0) + count;
|
|
81
|
-
const pathKey = `${method} ${path}`;
|
|
82
|
-
const existing = pathCounts.get(pathKey);
|
|
83
|
-
if (existing) {
|
|
84
|
-
existing.count += count;
|
|
85
|
-
} else {
|
|
86
|
-
pathCounts.set(pathKey, { method, path, count });
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
const topPaths = Array.from(pathCounts.values()).sort((left, right) => right.count - left.count).slice(0, 10);
|
|
90
|
-
return {
|
|
91
|
-
totalRequests,
|
|
92
|
-
byStatus,
|
|
93
|
-
topPaths
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
getStorageStats() {
|
|
97
|
-
return {
|
|
98
|
-
series: this.seriesLabels.size,
|
|
99
|
-
histograms: this.httpRequestDurationMs.size,
|
|
100
|
-
bucketCounters: this.httpRequestDurationMs.size * HTTP_DURATION_BUCKETS_MS.length
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
metricKey(labels) {
|
|
104
|
-
const normalized = {
|
|
105
|
-
method: /^(GET|HEAD|POST|PUT|PATCH|DELETE|CONNECT|OPTIONS|TRACE)$/.test(labels.method) ? labels.method : "OTHER",
|
|
106
|
-
path: labels.path.length <= 512 ? labels.path : "__overflow__",
|
|
107
|
-
status: /^[1-5][0-9]{2}$/.test(labels.status) ? labels.status : "000"
|
|
108
|
-
};
|
|
109
|
-
const escapeLabel = (value) => value.replaceAll("\\", "\\\\").replaceAll(`
|
|
110
|
-
`, "\\n").replaceAll('"', "\\\"");
|
|
111
|
-
const encode = (value) => `method="${value.method}",path="${escapeLabel(value.path)}",status="${value.status}"`;
|
|
112
|
-
let key = encode(normalized);
|
|
113
|
-
if (!this.seriesLabels.has(key)) {
|
|
114
|
-
if (this.seriesLabels.size >= this.maxSeries) {
|
|
115
|
-
const overflow = { method: "OTHER", path: "__overflow__", status: "000" };
|
|
116
|
-
key = encode(overflow);
|
|
117
|
-
this.seriesLabels.set(key, overflow);
|
|
118
|
-
} else {
|
|
119
|
-
this.seriesLabels.set(key, normalized);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
return key;
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
var prometheusRegistry = new PrometheusRegistry;
|
|
126
|
-
export {
|
|
127
|
-
HTTP_DURATION_BUCKETS_MS,
|
|
128
|
-
PrometheusRegistry,
|
|
129
|
-
prometheusRegistry
|
|
130
|
-
};
|
|
1
|
+
export * from "../../index.js";
|
|
@@ -1,265 +1,6 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
// ../../src/core/security/safeUrl.ts
|
|
3
|
-
import { lookup as dnsLookupImpl } from "dns/promises";
|
|
4
|
-
import { BadRequestError } from "@getstrata/core/errors/http";
|
|
5
|
-
|
|
6
|
-
// ../../src/core/runtime/appEnv.ts
|
|
7
|
-
var NON_PRODUCTION_APP_ENVS = new Set(["local", "development", "dev", "test", "testing", "ci"]);
|
|
8
|
-
function normalizeEnvValue(value) {
|
|
9
|
-
return (value ?? "").trim().toLowerCase();
|
|
10
|
-
}
|
|
11
|
-
function isProductionEnv(env = process.env) {
|
|
12
|
-
const appEnv = normalizeEnvValue(env.APP_ENV);
|
|
13
|
-
const nodeEnv = normalizeEnvValue(env.NODE_ENV);
|
|
14
|
-
if (appEnv === "production" || nodeEnv === "production") {
|
|
15
|
-
return true;
|
|
16
|
-
}
|
|
17
|
-
if (appEnv === "") {
|
|
18
|
-
return false;
|
|
19
|
-
}
|
|
20
|
-
return !NON_PRODUCTION_APP_ENVS.has(appEnv);
|
|
21
|
-
}
|
|
22
|
-
function envFlagEnabled(value) {
|
|
23
|
-
return value === "true";
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
// ../../src/core/security/safeUrl.ts
|
|
27
|
-
var dnsLookup = dnsLookupImpl;
|
|
28
|
-
var BLOCKED_HOSTNAMES = new Set([
|
|
29
|
-
"localhost",
|
|
30
|
-
"127.0.0.1",
|
|
31
|
-
"0.0.0.0",
|
|
32
|
-
"::1",
|
|
33
|
-
"metadata.google.internal"
|
|
34
|
-
]);
|
|
35
|
-
function parseCanonicalDottedDecimal(hostname) {
|
|
36
|
-
const parts = hostname.split(".");
|
|
37
|
-
if (parts.length !== 4) {
|
|
38
|
-
return null;
|
|
39
|
-
}
|
|
40
|
-
const octets = [];
|
|
41
|
-
for (const part of parts) {
|
|
42
|
-
if (!/^(0|[1-9]\d{0,2})$/u.test(part)) {
|
|
43
|
-
return null;
|
|
44
|
-
}
|
|
45
|
-
const value = Number.parseInt(part, 10);
|
|
46
|
-
if (!Number.isInteger(value) || value < 0 || value > 255) {
|
|
47
|
-
return null;
|
|
48
|
-
}
|
|
49
|
-
octets.push(value);
|
|
50
|
-
}
|
|
51
|
-
return octets;
|
|
52
|
-
}
|
|
53
|
-
function parseDottedIpv4(hostname) {
|
|
54
|
-
return parseCanonicalDottedDecimal(hostname);
|
|
55
|
-
}
|
|
56
|
-
function isBlockedIpv4Octets(octets) {
|
|
57
|
-
const [a = 0, b = 0] = octets;
|
|
58
|
-
if (a === 10 || a === 127 || a === 0) {
|
|
59
|
-
return true;
|
|
60
|
-
}
|
|
61
|
-
if (a === 169 && b === 254) {
|
|
62
|
-
return true;
|
|
63
|
-
}
|
|
64
|
-
if (a === 172 && b >= 16 && b <= 31) {
|
|
65
|
-
return true;
|
|
66
|
-
}
|
|
67
|
-
if (a === 192 && b === 168) {
|
|
68
|
-
return true;
|
|
69
|
-
}
|
|
70
|
-
if (a === 100 && b >= 64 && b <= 127) {
|
|
71
|
-
return true;
|
|
72
|
-
}
|
|
73
|
-
if (a === 198 && (b === 18 || b === 19)) {
|
|
74
|
-
return true;
|
|
75
|
-
}
|
|
76
|
-
return false;
|
|
77
|
-
}
|
|
78
|
-
function expandIpv6(hostname) {
|
|
79
|
-
const trimmed = hostname.trim().toLowerCase();
|
|
80
|
-
const unbracketed = trimmed.startsWith("[") && trimmed.endsWith("]") ? trimmed.slice(1, -1) : trimmed;
|
|
81
|
-
if (unbracketed.includes("%")) {
|
|
82
|
-
return null;
|
|
83
|
-
}
|
|
84
|
-
const mapped = unbracketed.match(/^::ffff:([0-9a-fx.]+)$/iu);
|
|
85
|
-
if (mapped?.[1]) {
|
|
86
|
-
const octets = parseDottedIpv4(mapped[1]);
|
|
87
|
-
if (!octets) {
|
|
88
|
-
return null;
|
|
89
|
-
}
|
|
90
|
-
return [
|
|
91
|
-
0,
|
|
92
|
-
0,
|
|
93
|
-
0,
|
|
94
|
-
0,
|
|
95
|
-
0,
|
|
96
|
-
65535,
|
|
97
|
-
octets[0] << 8 | octets[1],
|
|
98
|
-
octets[2] << 8 | octets[3]
|
|
99
|
-
];
|
|
100
|
-
}
|
|
101
|
-
const halves = unbracketed.split("::");
|
|
102
|
-
if (halves.length > 2) {
|
|
103
|
-
return null;
|
|
104
|
-
}
|
|
105
|
-
const parseGroup = (part) => {
|
|
106
|
-
if (!/^[0-9a-f]{1,4}$/u.test(part)) {
|
|
107
|
-
return null;
|
|
108
|
-
}
|
|
109
|
-
return Number.parseInt(part, 16);
|
|
110
|
-
};
|
|
111
|
-
if (halves.length === 1) {
|
|
112
|
-
const groups = unbracketed.split(":");
|
|
113
|
-
if (groups.length !== 8) {
|
|
114
|
-
return null;
|
|
115
|
-
}
|
|
116
|
-
const values = groups.map(parseGroup);
|
|
117
|
-
return values.every((value) => value !== null) ? values : null;
|
|
118
|
-
}
|
|
119
|
-
const head = halves[0] ? halves[0].split(":").filter(Boolean) : [];
|
|
120
|
-
const tail = halves[1] ? halves[1].split(":").filter(Boolean) : [];
|
|
121
|
-
if (head.length + tail.length > 8) {
|
|
122
|
-
return null;
|
|
123
|
-
}
|
|
124
|
-
const values = [];
|
|
125
|
-
for (const part of head) {
|
|
126
|
-
const value = parseGroup(part);
|
|
127
|
-
if (value === null) {
|
|
128
|
-
return null;
|
|
129
|
-
}
|
|
130
|
-
values.push(value);
|
|
131
|
-
}
|
|
132
|
-
while (values.length < 8 - tail.length) {
|
|
133
|
-
values.push(0);
|
|
134
|
-
}
|
|
135
|
-
for (const part of tail) {
|
|
136
|
-
const value = parseGroup(part);
|
|
137
|
-
if (value === null) {
|
|
138
|
-
return null;
|
|
139
|
-
}
|
|
140
|
-
values.push(value);
|
|
141
|
-
}
|
|
142
|
-
return values.length === 8 ? values : null;
|
|
143
|
-
}
|
|
144
|
-
function isBlockedIpv6(hostname) {
|
|
145
|
-
const groups = expandIpv6(hostname);
|
|
146
|
-
if (!groups) {
|
|
147
|
-
return hostname.includes(":");
|
|
148
|
-
}
|
|
149
|
-
const first = groups[0] ?? 0;
|
|
150
|
-
const second = groups[1] ?? 0;
|
|
151
|
-
if (groups.every((group) => group === 0)) {
|
|
152
|
-
return true;
|
|
153
|
-
}
|
|
154
|
-
if (groups.slice(0, 7).every((group) => group === 0) && groups[7] === 1) {
|
|
155
|
-
return true;
|
|
156
|
-
}
|
|
157
|
-
if ((first & 65472) === 65152) {
|
|
158
|
-
return true;
|
|
159
|
-
}
|
|
160
|
-
if ((first & 65024) === 64512) {
|
|
161
|
-
return true;
|
|
162
|
-
}
|
|
163
|
-
if ((first & 65280) === 65280) {
|
|
164
|
-
return true;
|
|
165
|
-
}
|
|
166
|
-
if (first === 0 && second === 0 && groups[2] === 0 && groups[3] === 0 && groups[4] === 0 && groups[5] === 65535) {
|
|
167
|
-
const a = (groups[6] ?? 0) >> 8;
|
|
168
|
-
const b = (groups[6] ?? 0) & 255;
|
|
169
|
-
const c = (groups[7] ?? 0) >> 8;
|
|
170
|
-
const d = (groups[7] ?? 0) & 255;
|
|
171
|
-
return isBlockedIpv4Octets([a, b, c, d]);
|
|
172
|
-
}
|
|
173
|
-
return false;
|
|
174
|
-
}
|
|
175
|
-
function isBlockedHostname(hostname) {
|
|
176
|
-
const normalized = hostname.trim().toLowerCase();
|
|
177
|
-
if (normalized.length === 0) {
|
|
178
|
-
return true;
|
|
179
|
-
}
|
|
180
|
-
if (BLOCKED_HOSTNAMES.has(normalized)) {
|
|
181
|
-
return true;
|
|
182
|
-
}
|
|
183
|
-
if (normalized.endsWith(".local") || normalized.endsWith(".internal")) {
|
|
184
|
-
return true;
|
|
185
|
-
}
|
|
186
|
-
if (normalized.includes(":")) {
|
|
187
|
-
return isBlockedIpv6(normalized);
|
|
188
|
-
}
|
|
189
|
-
if (/^\d+$/u.test(normalized)) {
|
|
190
|
-
return true;
|
|
191
|
-
}
|
|
192
|
-
if (normalized.includes(".")) {
|
|
193
|
-
const canonical = parseCanonicalDottedDecimal(normalized);
|
|
194
|
-
if (canonical) {
|
|
195
|
-
return isBlockedIpv4Octets(canonical);
|
|
196
|
-
}
|
|
197
|
-
if (/^[0-9a-fx.]+$/iu.test(normalized)) {
|
|
198
|
-
return true;
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
return false;
|
|
202
|
-
}
|
|
203
|
-
function productionSafeOutboundOptions(options) {
|
|
204
|
-
if (!isProductionEnv()) {
|
|
205
|
-
return options;
|
|
206
|
-
}
|
|
207
|
-
return { ...options, allowPrivate: false, resolveDns: true };
|
|
208
|
-
}
|
|
209
|
-
function assertSafeOutboundUrl(rawUrl, options = {}) {
|
|
210
|
-
const resolved = productionSafeOutboundOptions(options);
|
|
211
|
-
let parsed;
|
|
212
|
-
try {
|
|
213
|
-
parsed = new URL(rawUrl);
|
|
214
|
-
} catch {
|
|
215
|
-
throw new BadRequestError("Webhook URL is invalid.");
|
|
216
|
-
}
|
|
217
|
-
if (parsed.protocol !== "https:" && !(resolved.allowHttp && parsed.protocol === "http:")) {
|
|
218
|
-
throw new BadRequestError("Webhook URL must use HTTPS.");
|
|
219
|
-
}
|
|
220
|
-
if (parsed.username || parsed.password) {
|
|
221
|
-
throw new BadRequestError("Webhook URL must not include credentials.");
|
|
222
|
-
}
|
|
223
|
-
if (!resolved.allowPrivate && isBlockedHostname(parsed.hostname)) {
|
|
224
|
-
throw new BadRequestError("Webhook URL targets a blocked host.");
|
|
225
|
-
}
|
|
226
|
-
return parsed;
|
|
227
|
-
}
|
|
228
|
-
function isBlockedIpAddress(address) {
|
|
229
|
-
return isBlockedHostname(address.trim().toLowerCase());
|
|
230
|
-
}
|
|
231
|
-
function isLiteralIpHostname(hostname) {
|
|
232
|
-
return parseCanonicalDottedDecimal(hostname) !== null || expandIpv6(hostname) !== null;
|
|
233
|
-
}
|
|
234
|
-
function pinUrlToAddress(url, address) {
|
|
235
|
-
const pinned = new URL(url.toString());
|
|
236
|
-
const ipv6 = expandIpv6(address.replace(/^\[|\]$/gu, ""));
|
|
237
|
-
pinned.hostname = ipv6 ? `[${address.replace(/^\[|\]$/gu, "")}]` : address;
|
|
238
|
-
return pinned;
|
|
239
|
-
}
|
|
240
|
-
async function resolveSafeOutboundTarget(rawUrl, options = {}) {
|
|
241
|
-
const resolvedOptions = productionSafeOutboundOptions(options);
|
|
242
|
-
const parsed = assertSafeOutboundUrl(rawUrl, resolvedOptions);
|
|
243
|
-
if (resolvedOptions.resolveDns === false || resolvedOptions.allowPrivate) {
|
|
244
|
-
return { url: parsed, addresses: [] };
|
|
245
|
-
}
|
|
246
|
-
const hostname = parsed.hostname.trim().toLowerCase();
|
|
247
|
-
if (isLiteralIpHostname(hostname)) {
|
|
248
|
-
return { url: parsed, addresses: [hostname] };
|
|
249
|
-
}
|
|
250
|
-
let results;
|
|
251
|
-
try {
|
|
252
|
-
results = await dnsLookup(hostname, { all: true, verbatim: true });
|
|
253
|
-
} catch {
|
|
254
|
-
throw new BadRequestError("Webhook URL targets a blocked host.");
|
|
255
|
-
}
|
|
256
|
-
if (results.length === 0 || results.some((result) => isBlockedIpAddress(result.address))) {
|
|
257
|
-
throw new BadRequestError("Webhook URL targets a blocked host.");
|
|
258
|
-
}
|
|
259
|
-
return { url: parsed, addresses: results.map((result) => result.address) };
|
|
260
|
-
}
|
|
261
|
-
|
|
262
2
|
// ../../src/core/security/safeFetch.ts
|
|
3
|
+
import { pinUrlToAddress, resolveSafeOutboundTarget } from "@getstrata/core/security/safeUrl";
|
|
263
4
|
var DEFAULT_FETCH_TIMEOUT_MS = 1e4;
|
|
264
5
|
function untilAborted(work, signal) {
|
|
265
6
|
signal.throwIfAborted();
|
|
@@ -128,7 +128,7 @@ export type { MarkdownMailableInput } from "../core/mail/markdownMailable.ts";
|
|
|
128
128
|
export { buildMarkdownMailMessage, sendMarkdownMail } from "../core/mail/markdownMailable.ts";
|
|
129
129
|
export { sanitizeMailHtml } from "../core/mail/sanitizeMailHtml.ts";
|
|
130
130
|
export type { MetricLabels } from "../core/metrics/prometheus.ts";
|
|
131
|
-
export { PrometheusRegistry, prometheusRegistry } from "../core/metrics/prometheus.ts";
|
|
131
|
+
export { HTTP_DURATION_BUCKETS_MS, PrometheusRegistry, prometheusRegistry, } from "../core/metrics/prometheus.ts";
|
|
132
132
|
export type { DatabaseNotificationPayload, DatabaseNotificationStore, MailNotificationMessage, Notifiable, NotificationChannelName, } from "../core/notifications/index.ts";
|
|
133
133
|
export { createNotificationDispatcher, Notification, NotificationDispatcher, } from "../core/notifications/index.ts";
|
|
134
134
|
export type { CursorPaginatedResult, KeysetColumn, KeysetCursor, KeysetOptions, PaginatedResult, PaginationMeta, } from "../core/pagination/index.ts";
|
package/dist/index.js
CHANGED
|
@@ -17113,6 +17113,7 @@ export {
|
|
|
17113
17113
|
FormRequest,
|
|
17114
17114
|
GuestGuard,
|
|
17115
17115
|
HTMX_2_0_4_INDICATOR_STYLE_HASH,
|
|
17116
|
+
HTTP_DURATION_BUCKETS_MS,
|
|
17116
17117
|
HasManyRelationQuery,
|
|
17117
17118
|
HasManyThroughRelationQuery,
|
|
17118
17119
|
HasOneRelationQuery,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@getstrata/core",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.40",
|
|
4
4
|
"description": "Strata Bun framework public API",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -955,10 +955,10 @@
|
|
|
955
955
|
],
|
|
956
956
|
"scripts": {
|
|
957
957
|
"build": "rm -rf dist && bun run build:bundle && bun run build:shims && bun run build:subpaths && bun run build:types",
|
|
958
|
-
"build:bundle": "bun build index.ts --outdir dist --target bun --external bun --external '@opentelemetry/*' --external eta --external mysql2 --external @node-saml/node-saml
|
|
958
|
+
"build:bundle": "bun build index.ts --outdir dist --target bun --external bun --external '@opentelemetry/*' --external eta --external mysql2 --external @node-saml/node-saml",
|
|
959
959
|
"build:types": "tsc -p tsconfig.types.json",
|
|
960
960
|
"prepublishOnly": "bun run build && bun ../../scripts/prepare-core-package-publish.ts",
|
|
961
|
-
"build:subpaths": "bun build entries/auth/accountState.ts entries/auth/accountStateMigration.ts entries/auth/accessControl.ts entries/auth/abilityChecker.ts entries/auth/emailVerification.ts entries/auth/jwt.ts entries/auth/jwtGuard.ts entries/auth/basicAuthGuard.ts entries/auth/tokenAbilityChecker.ts entries/auth/membershipMiddleware.ts entries/auth/membershipScope.ts entries/auth/membershipService.ts entries/auth/oauth/oidcProvider.ts entries/auth/oauth/providers.ts entries/auth/oauth/samlProvider.ts entries/auth/oauth/types.ts entries/auth/saml/samlServiceProvider.ts entries/auth/password.ts entries/auth/passwordLogin.ts entries/auth/pendingMfaCookie.ts entries/auth/oneTimeToken.ts entries/auth/intendedUrlCookie.ts entries/auth/passwordConfirmCookie.ts entries/auth/policy.ts entries/auth/scimAuthMiddleware.ts entries/auth/sessionCookie.ts entries/auth/sessionGuard.ts entries/auth/tokenHash.ts entries/audit/exportAuditLogs.ts entries/audit/siemFormatter.ts entries/admin/formatValue.ts entries/admin/registry.ts entries/admin/types.ts entries/cache/tags.ts entries/cache/createCacheStore.ts entries/cache/repository.ts entries/cache/simpleCache.ts entries/cache/simpleCacheStore.ts entries/config/envSchema.ts entries/contracts/serviceTokens.ts entries/contracts/authUserDirectory.ts entries/contracts/container.ts entries/contracts/di.ts entries/crypto/fieldEncryption.ts entries/crypto/mfaSecret.ts entries/database/errors.ts entries/database/factory.ts entries/database/migrations.ts entries/database/migrations/types.ts entries/database/query.ts entries/database/relationships.ts entries/database/repositoryQuery.ts entries/database/seeders.ts entries/database/seeders/types.ts entries/database/schema.ts entries/database/sqliteConnection.ts entries/database/table.ts entries/database/types.ts entries/database/whereBuilder.ts entries/facades.ts entries/http/authMiddleware.ts entries/http/authorizeMiddleware.ts entries/http/bodySizeLimitMiddleware.ts entries/http/clientIp.ts entries/http/cookies.ts entries/http/contentNegotiation.ts entries/http/conditionalResponse.ts entries/http/corsMiddleware.ts entries/http/csrfMiddleware.ts entries/http/csrfProtection.ts entries/http/csrfToken.ts entries/http/etag.ts entries/http/flashSession.ts entries/http/flashMiddleware.ts entries/http/formRequest.ts entries/http/metricsMiddleware.ts entries/http/memoryThrottleMiddleware.ts entries/http/pagination.ts entries/http/parseFormBody.ts entries/http/parseMultipartUpload.ts entries/http/requireAbilityMiddleware.ts entries/http/requireAuthMiddleware.ts entries/http/requireGlobalAdminMiddleware.ts entries/http/requireWebAuthMiddleware.ts entries/http/requireVerifiedMiddleware.ts entries/http/requirePasswordConfirmMiddleware.ts entries/http/resources.ts entries/http/response.ts entries/http/route.ts entries/http/routeMiddleware.ts entries/http/routeModelBinding.ts entries/http/safeInternalPath.ts entries/http/signedUrl.ts entries/http/statelessAuth.ts entries/http/scimThrottleMiddleware.ts entries/http/securityHeadersMiddleware.ts entries/http/securedRouteModelBinding.ts entries/http/webFormRequest.ts entries/http/throttleMiddleware.ts entries/http/uploads.ts entries/http/validation.ts entries/jobs/exportAuditLogsJob.ts entries/jobs/invalidateCacheTagsJob.ts entries/logging/logger.ts entries/logging/requestLoggingMiddleware.ts entries/mail/mailer.ts entries/mail/markdownMail.ts entries/mail/markdownMailable.ts entries/mail/sanitizeMailHtml.ts entries/media/imageTransform.ts entries/metrics/prometheus.ts entries/openapi/generator.ts entries/openapi/registeredRoute.ts entries/openapi/validate.ts entries/pagination.ts entries/queue.ts entries/queue/createAppQueue.ts entries/queue/failedJobRepository.ts entries/queue/failedJobService.ts entries/queue/jobRunner.ts entries/queue/queueMetrics.ts entries/queue/publicQueue.ts entries/queue/redisQueue.ts entries/queue/types.ts entries/runtime/appEnv.ts entries/runtime/frontendMode.ts entries/runtime/asyncContextStore.ts entries/scheduler/osCron.ts entries/security/oauthState.ts entries/security/publicReads.ts entries/security/recoveryCodes.ts entries/security/safeFetch.ts entries/security/safePath.ts entries/security/scimTenantTokens.ts entries/security/stripeWebhook.ts entries/security/webhookSignature.ts entries/security/timingSafeCompare.ts entries/security/tokenExpiry.ts entries/security/totp.ts entries/storage/storage.ts entries/tenant/tenancyConfig.ts entries/tenant/tenantDatabaseScope.ts entries/tenant/databaseTenantContext.ts entries/tenant/enableTenantRls.ts entries/terminal/runShell.ts entries/tracing/tracingMiddleware.ts entries/validation/rules.ts --outdir dist --root . --target bun --external bun --external '@opentelemetry/*' --external eta --external mysql2 --external @node-saml/node-saml --external @xmldom/xmldom --external @getstrata/core --external @getstrata/core/auth/accountState --external @getstrata/core/auth/accountStateMigration --external @getstrata/core/auth/accessControl --external @getstrata/core/auth/abilityChecker --external @getstrata/core/auth/authContext --external @getstrata/core/auth/emailVerification --external @getstrata/core/auth/guard --external @getstrata/core/auth/jwt --external @getstrata/core/auth/jwtGuard --external @getstrata/core/auth/basicAuthGuard --external @getstrata/core/auth/tokenAbilityChecker --external @getstrata/core/auth/membershipContext --external @getstrata/core/auth/membershipMiddleware --external @getstrata/core/auth/membershipScope --external @getstrata/core/auth/membershipService --external @getstrata/core/auth/oauth/oidcProvider --external @getstrata/core/auth/oauth/providers --external @getstrata/core/auth/oauth/samlProvider --external @getstrata/core/auth/oauth/types --external @getstrata/core/auth/saml/samlServiceProvider --external @getstrata/core/auth/password --external @getstrata/core/auth/passwordLogin --external @getstrata/core/auth/pendingMfaCookie --external @getstrata/core/auth/oneTimeToken --external @getstrata/core/auth/intendedUrlCookie --external @getstrata/core/auth/passwordConfirmCookie --external @getstrata/core/auth/policy --external @getstrata/core/auth/scimAuthMiddleware --external @getstrata/core/auth/sessionCookie --external @getstrata/core/auth/sessionGuard --external @getstrata/core/auth/tokenHash --external @getstrata/core/audit/exportAuditLogs --external @getstrata/core/audit/siemFormatter --external @getstrata/core/admin/formatValue --external @getstrata/core/admin/registry --external @getstrata/core/admin/types --external @getstrata/core/cache/tags --external @getstrata/core/cache/createCacheStore --external @getstrata/core/cache/repository --external @getstrata/core/cache/simpleCache --external @getstrata/core/cache/simpleCacheStore --external @getstrata/core/config/envSchema --external @getstrata/core/contracts/serviceTokens --external @getstrata/core/contracts/authUserDirectory --external @getstrata/core/contracts/container --external @getstrata/core/contracts/di --external @getstrata/core/crypto/fieldEncryption --external @getstrata/core/crypto/fieldEncryptionRotation --external @getstrata/core/crypto/mfaSecret --external @getstrata/core/database --external @getstrata/core/database/baseRepository --external @getstrata/core/database/bindConnection --external @getstrata/core/database/boundConnection --external @getstrata/core/database/bunSql --external @getstrata/core/database/connection --external @getstrata/core/database/connectionContext --external @getstrata/core/database/defaultConnection --external @getstrata/core/database/dialect --external @getstrata/core/database/mysqlConnection --external @getstrata/core/database/namedConnections --external @getstrata/core/database/errors --external @getstrata/core/database/factory --external @getstrata/core/database/migrations --external @getstrata/core/database/migrations/types --external @getstrata/core/database/model --external @getstrata/core/database/query --external @getstrata/core/database/relationships --external @getstrata/core/database/repositoryConnection --external @getstrata/core/database/repositoryQuery --external @getstrata/core/database/seeders --external @getstrata/core/database/seeders/types --external @getstrata/core/database/schema --external @getstrata/core/database/sqliteConnection --external @getstrata/core/database/table --external @getstrata/core/database/transaction --external @getstrata/core/database/types --external @getstrata/core/database/whereBuilder --external @getstrata/core/errors/http --external @getstrata/core/events --external @getstrata/core/events/outbox --external @getstrata/core/facades --external @getstrata/core/http --external @getstrata/core/http/authMiddleware --external @getstrata/core/http/authorizeMiddleware --external @getstrata/core/http/bodySizeLimitMiddleware --external @getstrata/core/http/clientIp --external @getstrata/core/http/cookies --external @getstrata/core/http/contentNegotiation --external @getstrata/core/http/contentSecurityPolicy --external @getstrata/core/http/conditionalResponse --external @getstrata/core/http/corsMiddleware --external @getstrata/core/http/csrfMiddleware --external @getstrata/core/http/csrfProtection --external @getstrata/core/http/csrfToken --external @getstrata/core/http/etag --external @getstrata/core/http/flashSession --external @getstrata/core/http/flashMiddleware --external @getstrata/core/http/formRequest --external @getstrata/core/http/middleware --external @getstrata/core/http/metricsMiddleware --external @getstrata/core/http/loginThrottleMiddleware --external @getstrata/core/http/memoryThrottleMiddleware --external @getstrata/core/http/pagination --external @getstrata/core/http/parseFormBody --external @getstrata/core/http/parseMultipartUpload --external @getstrata/core/http/requireAbilityMiddleware --external @getstrata/core/http/requireAuthMiddleware --external @getstrata/core/http/requireGlobalAdminMiddleware --external @getstrata/core/http/requireWebAuthMiddleware --external @getstrata/core/http/requireVerifiedMiddleware --external @getstrata/core/http/requirePasswordConfirmMiddleware --external @getstrata/core/http/resources --external @getstrata/core/http/response --external @getstrata/core/http/route --external @getstrata/core/http/routeMiddleware --external @getstrata/core/http/routeModelBinding --external @getstrata/core/http/safeInternalPath --external @getstrata/core/http/signedUrl --external @getstrata/core/http/statelessAuth --external @getstrata/core/http/scimThrottleMiddleware --external @getstrata/core/http/securityHeadersMiddleware --external @getstrata/core/http/securedRouteModelBinding --external @getstrata/core/http/requestMetaContext --external @getstrata/core/http/webErrorResponse --external @getstrata/core/http/webFormRequest --external @getstrata/core/http/throttleMiddleware --external @getstrata/core/http/uploads --external @getstrata/core/http/validation --external @getstrata/core/jobs/exportAuditLogsJob --external @getstrata/core/jobs/invalidateCacheTagsJob --external @getstrata/core/lifecycle/gracefulShutdown --external @getstrata/core/logging/logger --external @getstrata/core/logging/requestLoggingMiddleware --external @getstrata/core/mail/mailer --external @getstrata/core/mail/markdownMail --external @getstrata/core/mail/markdownMailable --external @getstrata/core/mail/sanitizeMailHtml --external @getstrata/core/media/imageTransform --external @getstrata/core/metrics/prometheus --external @getstrata/core/notifications --external @getstrata/core/openapi/generator --external @getstrata/core/openapi/registeredRoute --external @getstrata/core/openapi/validate --external @getstrata/core/pagination --external @getstrata/core/queue --external @getstrata/core/queue/createAppQueue --external @getstrata/core/queue/failedJobRepository --external @getstrata/core/queue/failedJobService --external @getstrata/core/queue/jobRegistry --external @getstrata/core/queue/jobRunner --external @getstrata/core/queue/queueMetrics --external @getstrata/core/queue/publicQueue --external @getstrata/core/queue/redisQueue --external @getstrata/core/queue/types --external @getstrata/core/runtime/appEnv --external @getstrata/core/runtime/appKeyPrefix --external @getstrata/core/runtime/frontendMode --external @getstrata/core/runtime/applicationRegistry --external @getstrata/core/runtime/asyncContextStore --external @getstrata/core/scheduler/schedule --external @getstrata/core/scheduler/osCron --external @getstrata/core/security/oauthState --external @getstrata/core/security/publicReads --external @getstrata/core/security/recoveryCodes --external @getstrata/core/security/safeFetch --external @getstrata/core/security/safePath --external @getstrata/core/security/safeUrl --external @getstrata/core/security/scimTenantTokens --external @getstrata/core/security/securityEvents --external @getstrata/core/security/stripeWebhook --external @getstrata/core/security/webhookSignature --external @getstrata/core/security/timingSafeCompare --external @getstrata/core/security/tokenExpiry --external @getstrata/core/security/totp --external @getstrata/core/storage/storage --external @getstrata/core/tenant/tenancyConfig --external @getstrata/core/tenant/tenantContext --external @getstrata/core/tenant/tenantDatabaseScope --external @getstrata/core/tenant/databaseTenantContext --external @getstrata/core/tenant/tenantMiddleware --external @getstrata/core/tenant/enableTenantRls --external @getstrata/core/terminal/runShell --external @getstrata/core/tracing/traceContext --external @getstrata/core/tracing/tracingMiddleware --external @getstrata/core/validation/rules --external @getstrata/core/view",
|
|
961
|
+
"build:subpaths": "bun build entries/auth/accountState.ts entries/auth/accountStateMigration.ts entries/auth/accessControl.ts entries/auth/abilityChecker.ts entries/auth/emailVerification.ts entries/auth/jwt.ts entries/auth/jwtGuard.ts entries/auth/basicAuthGuard.ts entries/auth/tokenAbilityChecker.ts entries/auth/membershipMiddleware.ts entries/auth/membershipScope.ts entries/auth/membershipService.ts entries/auth/oauth/oidcProvider.ts entries/auth/oauth/providers.ts entries/auth/oauth/samlProvider.ts entries/auth/oauth/types.ts entries/auth/saml/samlServiceProvider.ts entries/auth/password.ts entries/auth/passwordLogin.ts entries/auth/pendingMfaCookie.ts entries/auth/oneTimeToken.ts entries/auth/intendedUrlCookie.ts entries/auth/passwordConfirmCookie.ts entries/auth/policy.ts entries/auth/scimAuthMiddleware.ts entries/auth/sessionCookie.ts entries/auth/sessionGuard.ts entries/auth/tokenHash.ts entries/audit/exportAuditLogs.ts entries/audit/siemFormatter.ts entries/admin/formatValue.ts entries/admin/registry.ts entries/admin/types.ts entries/cache/tags.ts entries/cache/createCacheStore.ts entries/cache/repository.ts entries/cache/simpleCache.ts entries/cache/simpleCacheStore.ts entries/config/envSchema.ts entries/contracts/serviceTokens.ts entries/contracts/authUserDirectory.ts entries/contracts/container.ts entries/contracts/di.ts entries/crypto/fieldEncryption.ts entries/crypto/mfaSecret.ts entries/database/errors.ts entries/database/factory.ts entries/database/migrations.ts entries/database/migrations/types.ts entries/database/query.ts entries/database/relationships.ts entries/database/repositoryQuery.ts entries/database/seeders.ts entries/database/seeders/types.ts entries/database/schema.ts entries/database/sqliteConnection.ts entries/database/table.ts entries/database/types.ts entries/database/whereBuilder.ts entries/facades.ts entries/http/authMiddleware.ts entries/http/authorizeMiddleware.ts entries/http/bodySizeLimitMiddleware.ts entries/http/clientIp.ts entries/http/cookies.ts entries/http/contentNegotiation.ts entries/http/conditionalResponse.ts entries/http/corsMiddleware.ts entries/http/csrfMiddleware.ts entries/http/csrfProtection.ts entries/http/csrfToken.ts entries/http/etag.ts entries/http/flashSession.ts entries/http/flashMiddleware.ts entries/http/formRequest.ts entries/http/metricsMiddleware.ts entries/http/memoryThrottleMiddleware.ts entries/http/pagination.ts entries/http/parseFormBody.ts entries/http/parseMultipartUpload.ts entries/http/requireAbilityMiddleware.ts entries/http/requireAuthMiddleware.ts entries/http/requireGlobalAdminMiddleware.ts entries/http/requireWebAuthMiddleware.ts entries/http/requireVerifiedMiddleware.ts entries/http/requirePasswordConfirmMiddleware.ts entries/http/resources.ts entries/http/response.ts entries/http/route.ts entries/http/routeMiddleware.ts entries/http/routeModelBinding.ts entries/http/safeInternalPath.ts entries/http/signedUrl.ts entries/http/statelessAuth.ts entries/http/scimThrottleMiddleware.ts entries/http/securityHeadersMiddleware.ts entries/http/securedRouteModelBinding.ts entries/http/webFormRequest.ts entries/http/throttleMiddleware.ts entries/http/uploads.ts entries/http/validation.ts entries/jobs/exportAuditLogsJob.ts entries/jobs/invalidateCacheTagsJob.ts entries/logging/logger.ts entries/logging/requestLoggingMiddleware.ts entries/mail/mailer.ts entries/mail/markdownMail.ts entries/mail/markdownMailable.ts entries/mail/sanitizeMailHtml.ts entries/media/imageTransform.ts entries/openapi/generator.ts entries/openapi/registeredRoute.ts entries/openapi/validate.ts entries/pagination.ts entries/queue.ts entries/queue/createAppQueue.ts entries/queue/failedJobRepository.ts entries/queue/failedJobService.ts entries/queue/jobRunner.ts entries/queue/queueMetrics.ts entries/queue/publicQueue.ts entries/queue/redisQueue.ts entries/queue/types.ts entries/runtime/appEnv.ts entries/runtime/frontendMode.ts entries/runtime/asyncContextStore.ts entries/scheduler/osCron.ts entries/security/oauthState.ts entries/security/publicReads.ts entries/security/recoveryCodes.ts entries/security/safeFetch.ts entries/security/safePath.ts entries/security/scimTenantTokens.ts entries/security/stripeWebhook.ts entries/security/webhookSignature.ts entries/security/timingSafeCompare.ts entries/security/tokenExpiry.ts entries/security/totp.ts entries/storage/storage.ts entries/tenant/tenancyConfig.ts entries/tenant/tenantDatabaseScope.ts entries/tenant/databaseTenantContext.ts entries/tenant/enableTenantRls.ts entries/terminal/runShell.ts entries/tracing/tracingMiddleware.ts entries/validation/rules.ts --outdir dist --root . --target bun --external bun --external '@opentelemetry/*' --external eta --external mysql2 --external @node-saml/node-saml --external @getstrata/core --external @getstrata/core/auth/accountState --external @getstrata/core/auth/accountStateMigration --external @getstrata/core/auth/accessControl --external @getstrata/core/auth/abilityChecker --external @getstrata/core/auth/authContext --external @getstrata/core/auth/emailVerification --external @getstrata/core/auth/guard --external @getstrata/core/auth/jwt --external @getstrata/core/auth/jwtGuard --external @getstrata/core/auth/basicAuthGuard --external @getstrata/core/auth/tokenAbilityChecker --external @getstrata/core/auth/membershipContext --external @getstrata/core/auth/membershipMiddleware --external @getstrata/core/auth/membershipScope --external @getstrata/core/auth/membershipService --external @getstrata/core/auth/oauth/oidcProvider --external @getstrata/core/auth/oauth/providers --external @getstrata/core/auth/oauth/samlProvider --external @getstrata/core/auth/oauth/types --external @getstrata/core/auth/saml/samlServiceProvider --external @getstrata/core/auth/password --external @getstrata/core/auth/passwordLogin --external @getstrata/core/auth/pendingMfaCookie --external @getstrata/core/auth/oneTimeToken --external @getstrata/core/auth/intendedUrlCookie --external @getstrata/core/auth/passwordConfirmCookie --external @getstrata/core/auth/policy --external @getstrata/core/auth/scimAuthMiddleware --external @getstrata/core/auth/sessionCookie --external @getstrata/core/auth/sessionGuard --external @getstrata/core/auth/tokenHash --external @getstrata/core/audit/exportAuditLogs --external @getstrata/core/audit/siemFormatter --external @getstrata/core/admin/formatValue --external @getstrata/core/admin/registry --external @getstrata/core/admin/types --external @getstrata/core/cache/tags --external @getstrata/core/cache/createCacheStore --external @getstrata/core/cache/repository --external @getstrata/core/cache/simpleCache --external @getstrata/core/cache/simpleCacheStore --external @getstrata/core/config/envSchema --external @getstrata/core/contracts/serviceTokens --external @getstrata/core/contracts/authUserDirectory --external @getstrata/core/contracts/container --external @getstrata/core/contracts/di --external @getstrata/core/crypto/fieldEncryption --external @getstrata/core/crypto/fieldEncryptionRotation --external @getstrata/core/crypto/mfaSecret --external @getstrata/core/database --external @getstrata/core/database/baseRepository --external @getstrata/core/database/bindConnection --external @getstrata/core/database/boundConnection --external @getstrata/core/database/bunSql --external @getstrata/core/database/connection --external @getstrata/core/database/connectionContext --external @getstrata/core/database/defaultConnection --external @getstrata/core/database/dialect --external @getstrata/core/database/mysqlConnection --external @getstrata/core/database/namedConnections --external @getstrata/core/database/errors --external @getstrata/core/database/factory --external @getstrata/core/database/migrations --external @getstrata/core/database/migrations/types --external @getstrata/core/database/model --external @getstrata/core/database/query --external @getstrata/core/database/relationships --external @getstrata/core/database/repositoryConnection --external @getstrata/core/database/repositoryQuery --external @getstrata/core/database/seeders --external @getstrata/core/database/seeders/types --external @getstrata/core/database/schema --external @getstrata/core/database/sqliteConnection --external @getstrata/core/database/table --external @getstrata/core/database/transaction --external @getstrata/core/database/types --external @getstrata/core/database/whereBuilder --external @getstrata/core/errors/http --external @getstrata/core/events --external @getstrata/core/events/outbox --external @getstrata/core/facades --external @getstrata/core/http --external @getstrata/core/http/authMiddleware --external @getstrata/core/http/authorizeMiddleware --external @getstrata/core/http/bodySizeLimitMiddleware --external @getstrata/core/http/clientIp --external @getstrata/core/http/cookies --external @getstrata/core/http/contentNegotiation --external @getstrata/core/http/contentSecurityPolicy --external @getstrata/core/http/conditionalResponse --external @getstrata/core/http/corsMiddleware --external @getstrata/core/http/csrfMiddleware --external @getstrata/core/http/csrfProtection --external @getstrata/core/http/csrfToken --external @getstrata/core/http/etag --external @getstrata/core/http/flashSession --external @getstrata/core/http/flashMiddleware --external @getstrata/core/http/formRequest --external @getstrata/core/http/middleware --external @getstrata/core/http/metricsMiddleware --external @getstrata/core/http/loginThrottleMiddleware --external @getstrata/core/http/memoryThrottleMiddleware --external @getstrata/core/http/pagination --external @getstrata/core/http/parseFormBody --external @getstrata/core/http/parseMultipartUpload --external @getstrata/core/http/requireAbilityMiddleware --external @getstrata/core/http/requireAuthMiddleware --external @getstrata/core/http/requireGlobalAdminMiddleware --external @getstrata/core/http/requireWebAuthMiddleware --external @getstrata/core/http/requireVerifiedMiddleware --external @getstrata/core/http/requirePasswordConfirmMiddleware --external @getstrata/core/http/resources --external @getstrata/core/http/response --external @getstrata/core/http/route --external @getstrata/core/http/routeMiddleware --external @getstrata/core/http/routeModelBinding --external @getstrata/core/http/safeInternalPath --external @getstrata/core/http/signedUrl --external @getstrata/core/http/statelessAuth --external @getstrata/core/http/scimThrottleMiddleware --external @getstrata/core/http/securityHeadersMiddleware --external @getstrata/core/http/securedRouteModelBinding --external @getstrata/core/http/requestMetaContext --external @getstrata/core/http/webErrorResponse --external @getstrata/core/http/webFormRequest --external @getstrata/core/http/throttleMiddleware --external @getstrata/core/http/uploads --external @getstrata/core/http/validation --external @getstrata/core/jobs/exportAuditLogsJob --external @getstrata/core/jobs/invalidateCacheTagsJob --external @getstrata/core/lifecycle/gracefulShutdown --external @getstrata/core/logging/logger --external @getstrata/core/logging/requestLoggingMiddleware --external @getstrata/core/mail/mailer --external @getstrata/core/mail/markdownMail --external @getstrata/core/mail/markdownMailable --external @getstrata/core/mail/sanitizeMailHtml --external @getstrata/core/media/imageTransform --external @getstrata/core/metrics/prometheus --external @getstrata/core/notifications --external @getstrata/core/openapi/generator --external @getstrata/core/openapi/registeredRoute --external @getstrata/core/openapi/validate --external @getstrata/core/pagination --external @getstrata/core/queue --external @getstrata/core/queue/createAppQueue --external @getstrata/core/queue/failedJobRepository --external @getstrata/core/queue/failedJobService --external @getstrata/core/queue/jobRegistry --external @getstrata/core/queue/jobRunner --external @getstrata/core/queue/queueMetrics --external @getstrata/core/queue/publicQueue --external @getstrata/core/queue/redisQueue --external @getstrata/core/queue/types --external @getstrata/core/runtime/appEnv --external @getstrata/core/runtime/appKeyPrefix --external @getstrata/core/runtime/frontendMode --external @getstrata/core/runtime/applicationRegistry --external @getstrata/core/runtime/asyncContextStore --external @getstrata/core/scheduler/schedule --external @getstrata/core/scheduler/osCron --external @getstrata/core/security/oauthState --external @getstrata/core/security/publicReads --external @getstrata/core/security/recoveryCodes --external @getstrata/core/security/safeFetch --external @getstrata/core/security/safePath --external @getstrata/core/security/safeUrl --external @getstrata/core/security/scimTenantTokens --external @getstrata/core/security/securityEvents --external @getstrata/core/security/stripeWebhook --external @getstrata/core/security/webhookSignature --external @getstrata/core/security/timingSafeCompare --external @getstrata/core/security/tokenExpiry --external @getstrata/core/security/totp --external @getstrata/core/storage/storage --external @getstrata/core/tenant/tenancyConfig --external @getstrata/core/tenant/tenantContext --external @getstrata/core/tenant/tenantDatabaseScope --external @getstrata/core/tenant/databaseTenantContext --external @getstrata/core/tenant/tenantMiddleware --external @getstrata/core/tenant/enableTenantRls --external @getstrata/core/terminal/runShell --external @getstrata/core/tracing/traceContext --external @getstrata/core/tracing/tracingMiddleware --external @getstrata/core/validation/rules --external @getstrata/core/view",
|
|
962
962
|
"build:shims": "bun ../../scripts/write-core-shared-shims.ts"
|
|
963
963
|
},
|
|
964
964
|
"publishConfig": {
|