@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.
@@ -1,130 +1 @@
1
- // @bun
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.38",
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 --external @xmldom/xmldom",
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": {