@getstrata/core 2.2.37 → 2.2.39
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/core/auth/saml/samlServiceProvider.d.ts +23 -7
- package/dist/entries/auth/oauth/samlProvider.js +725 -79
- package/dist/entries/auth/saml/samlServiceProvider.js +725 -79
- package/dist/entries/http/metricsMiddleware.js +2 -124
- package/dist/entries/metrics/prometheus.js +1 -130
- package/dist/framework/public-api.d.ts +1 -1
- package/dist/index.js +47 -6
- package/package.json +4 -3
|
@@ -26,130 +26,8 @@ function createAsyncContextStore(key) {
|
|
|
26
26
|
}
|
|
27
27
|
var init_asyncContextStore = () => {};
|
|
28
28
|
|
|
29
|
-
// ../../src/core/
|
|
30
|
-
|
|
31
|
-
function emptyHistogram() {
|
|
32
|
-
return {
|
|
33
|
-
cumulative: HTTP_DURATION_BUCKETS_MS.map(() => 0),
|
|
34
|
-
sum: 0,
|
|
35
|
-
count: 0
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
class PrometheusRegistry {
|
|
40
|
-
maxSeries;
|
|
41
|
-
seriesLabels = new Map;
|
|
42
|
-
constructor(maxSeries = 4096) {
|
|
43
|
-
this.maxSeries = maxSeries;
|
|
44
|
-
if (!Number.isSafeInteger(maxSeries) || maxSeries < 1) {
|
|
45
|
-
throw new Error("Metrics maxSeries must be a positive safe integer.");
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
httpRequestsTotal = new Map;
|
|
49
|
-
httpRequestDurationMs = new Map;
|
|
50
|
-
incrementHttpRequest(labels) {
|
|
51
|
-
const key = this.metricKey(labels);
|
|
52
|
-
this.httpRequestsTotal.set(key, (this.httpRequestsTotal.get(key) ?? 0) + 1);
|
|
53
|
-
}
|
|
54
|
-
observeHttpDuration(labels, durationMs) {
|
|
55
|
-
if (!Number.isFinite(durationMs) || durationMs < 0)
|
|
56
|
-
return;
|
|
57
|
-
const key = this.metricKey(labels);
|
|
58
|
-
const histogram = this.httpRequestDurationMs.get(key) ?? emptyHistogram();
|
|
59
|
-
histogram.count += 1;
|
|
60
|
-
histogram.sum += durationMs;
|
|
61
|
-
for (let index = 0;index < HTTP_DURATION_BUCKETS_MS.length; index += 1) {
|
|
62
|
-
const bound = HTTP_DURATION_BUCKETS_MS[index];
|
|
63
|
-
if (bound !== undefined && durationMs <= bound) {
|
|
64
|
-
const count = histogram.cumulative[index] ?? 0;
|
|
65
|
-
histogram.cumulative[index] = count + 1;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
this.httpRequestDurationMs.set(key, histogram);
|
|
69
|
-
}
|
|
70
|
-
renderMetrics() {
|
|
71
|
-
const lines = [
|
|
72
|
-
"# HELP http_requests_total Total HTTP requests processed.",
|
|
73
|
-
"# TYPE http_requests_total counter"
|
|
74
|
-
];
|
|
75
|
-
for (const [key, value] of this.httpRequestsTotal) {
|
|
76
|
-
lines.push(`http_requests_total{${key}} ${value}`);
|
|
77
|
-
}
|
|
78
|
-
lines.push("# HELP http_request_duration_ms HTTP request duration in milliseconds.", "# TYPE http_request_duration_ms histogram");
|
|
79
|
-
for (const [key, histogram] of this.httpRequestDurationMs) {
|
|
80
|
-
for (let index = 0;index < HTTP_DURATION_BUCKETS_MS.length; index += 1) {
|
|
81
|
-
const bound = HTTP_DURATION_BUCKETS_MS[index];
|
|
82
|
-
lines.push(`http_request_duration_ms_bucket{${key},le="${bound}"} ${histogram.cumulative[index] ?? 0}`);
|
|
83
|
-
}
|
|
84
|
-
lines.push(`http_request_duration_ms_bucket{${key},le="+Inf"} ${histogram.count}`);
|
|
85
|
-
lines.push(`http_request_duration_ms_sum{${key}} ${histogram.sum}`);
|
|
86
|
-
lines.push(`http_request_duration_ms_count{${key}} ${histogram.count}`);
|
|
87
|
-
}
|
|
88
|
-
return `${lines.join(`
|
|
89
|
-
`)}
|
|
90
|
-
`;
|
|
91
|
-
}
|
|
92
|
-
resetForTests() {
|
|
93
|
-
this.seriesLabels.clear();
|
|
94
|
-
this.httpRequestsTotal.clear();
|
|
95
|
-
this.httpRequestDurationMs.clear();
|
|
96
|
-
}
|
|
97
|
-
getHttpRequestSummary() {
|
|
98
|
-
const byStatus = {};
|
|
99
|
-
const pathCounts = new Map;
|
|
100
|
-
let totalRequests = 0;
|
|
101
|
-
for (const [key, count] of this.httpRequestsTotal) {
|
|
102
|
-
totalRequests += count;
|
|
103
|
-
const labels = this.seriesLabels.get(key);
|
|
104
|
-
if (!labels)
|
|
105
|
-
continue;
|
|
106
|
-
const { method, path, status } = labels;
|
|
107
|
-
byStatus[status] = (byStatus[status] ?? 0) + count;
|
|
108
|
-
const pathKey = `${method} ${path}`;
|
|
109
|
-
const existing = pathCounts.get(pathKey);
|
|
110
|
-
if (existing) {
|
|
111
|
-
existing.count += count;
|
|
112
|
-
} else {
|
|
113
|
-
pathCounts.set(pathKey, { method, path, count });
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
const topPaths = Array.from(pathCounts.values()).sort((left, right) => right.count - left.count).slice(0, 10);
|
|
117
|
-
return {
|
|
118
|
-
totalRequests,
|
|
119
|
-
byStatus,
|
|
120
|
-
topPaths
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
getStorageStats() {
|
|
124
|
-
return {
|
|
125
|
-
series: this.seriesLabels.size,
|
|
126
|
-
histograms: this.httpRequestDurationMs.size,
|
|
127
|
-
bucketCounters: this.httpRequestDurationMs.size * HTTP_DURATION_BUCKETS_MS.length
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
metricKey(labels) {
|
|
131
|
-
const normalized = {
|
|
132
|
-
method: /^(GET|HEAD|POST|PUT|PATCH|DELETE|CONNECT|OPTIONS|TRACE)$/.test(labels.method) ? labels.method : "OTHER",
|
|
133
|
-
path: labels.path.length <= 512 ? labels.path : "__overflow__",
|
|
134
|
-
status: /^[1-5][0-9]{2}$/.test(labels.status) ? labels.status : "000"
|
|
135
|
-
};
|
|
136
|
-
const escapeLabel = (value) => value.replaceAll("\\", "\\\\").replaceAll(`
|
|
137
|
-
`, "\\n").replaceAll('"', "\\\"");
|
|
138
|
-
const encode = (value) => `method="${value.method}",path="${escapeLabel(value.path)}",status="${value.status}"`;
|
|
139
|
-
let key = encode(normalized);
|
|
140
|
-
if (!this.seriesLabels.has(key)) {
|
|
141
|
-
if (this.seriesLabels.size >= this.maxSeries) {
|
|
142
|
-
const overflow = { method: "OTHER", path: "__overflow__", status: "000" };
|
|
143
|
-
key = encode(overflow);
|
|
144
|
-
this.seriesLabels.set(key, overflow);
|
|
145
|
-
} else {
|
|
146
|
-
this.seriesLabels.set(key, normalized);
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
return key;
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
var prometheusRegistry = new PrometheusRegistry;
|
|
29
|
+
// ../../src/core/http/metricsMiddleware.ts
|
|
30
|
+
import { prometheusRegistry } from "@getstrata/core/metrics/prometheus";
|
|
153
31
|
|
|
154
32
|
// ../../src/core/http/requestMetaContext.ts
|
|
155
33
|
init_asyncContextStore();
|
|
@@ -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";
|
|
@@ -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
|
@@ -3304,8 +3304,6 @@ function missingOptionalPeer(packageName, reason, error) {
|
|
|
3304
3304
|
}
|
|
3305
3305
|
|
|
3306
3306
|
// ../../src/core/auth/saml/samlAssertionReplay.ts
|
|
3307
|
-
init_boundConnection();
|
|
3308
|
-
init_defaultConnection();
|
|
3309
3307
|
init_dialect();
|
|
3310
3308
|
|
|
3311
3309
|
// ../../src/core/database/errors.ts
|
|
@@ -3421,6 +3419,7 @@ function isUniqueConstraintError(error) {
|
|
|
3421
3419
|
}
|
|
3422
3420
|
|
|
3423
3421
|
// ../../src/core/auth/saml/samlAssertionReplay.ts
|
|
3422
|
+
init_transaction();
|
|
3424
3423
|
var REPLAY_RETENTION_MS = 60 * 60 * 1000;
|
|
3425
3424
|
|
|
3426
3425
|
class InMemorySamlAssertionReplayStore {
|
|
@@ -3448,17 +3447,18 @@ class InMemorySamlAssertionReplayStore {
|
|
|
3448
3447
|
|
|
3449
3448
|
class SqlSamlAssertionReplayStore {
|
|
3450
3449
|
async consume(assertionId) {
|
|
3451
|
-
const sql = getBoundDatabaseConnection() ?? getDefaultDatabasePool();
|
|
3452
3450
|
const dialect = currentSqlDialect();
|
|
3453
3451
|
try {
|
|
3454
|
-
await
|
|
3452
|
+
await runInTransaction(async (connection) => {
|
|
3453
|
+
await connection.unsafe(`INSERT INTO auth_saml_assertions (assertion_id, consumed_at) VALUES (${dialect.placeholder(1)}, ${dialect.placeholder(2)})`, [assertionId, dialect.timestampValue(new Date)]);
|
|
3454
|
+
await connection.unsafe(`DELETE FROM auth_saml_assertions WHERE consumed_at < ${dialect.placeholder(1)}`, [dialect.timestampValue(new Date(Date.now() - REPLAY_RETENTION_MS))]);
|
|
3455
|
+
});
|
|
3455
3456
|
} catch (error) {
|
|
3456
3457
|
if (isUniqueConstraintError(error)) {
|
|
3457
3458
|
throw new Error("SAML assertion replay detected.");
|
|
3458
3459
|
}
|
|
3459
3460
|
throw error;
|
|
3460
3461
|
}
|
|
3461
|
-
await sql.unsafe(`DELETE FROM auth_saml_assertions WHERE consumed_at < ${dialect.placeholder(1)}`, [new Date(Date.now() - REPLAY_RETENTION_MS).toISOString()]);
|
|
3462
3462
|
}
|
|
3463
3463
|
}
|
|
3464
3464
|
var sqlReplayStore = new SqlSamlAssertionReplayStore;
|
|
@@ -3481,6 +3481,7 @@ async function consumeSamlAssertion(assertionId) {
|
|
|
3481
3481
|
}
|
|
3482
3482
|
|
|
3483
3483
|
// ../../src/core/auth/saml/samlServiceProvider.ts
|
|
3484
|
+
var CLOCK_SKEW_MS = 5000;
|
|
3484
3485
|
function readAssertionId(profile) {
|
|
3485
3486
|
if (typeof profile.ID === "string" && profile.ID.trim()) {
|
|
3486
3487
|
return profile.ID.trim();
|
|
@@ -3489,6 +3490,43 @@ function readAssertionId(profile) {
|
|
|
3489
3490
|
const assertionId = parsed?.Assertion?.$?.ID;
|
|
3490
3491
|
return typeof assertionId === "string" ? assertionId.trim() : "";
|
|
3491
3492
|
}
|
|
3493
|
+
function assertBearerRecipient(profile, acsUrl) {
|
|
3494
|
+
const subjects = profile.getAssertion?.()?.Assertion?.Subject;
|
|
3495
|
+
const confirmations = Array.isArray(subjects) && subjects.length === 1 ? subjects[0]?.SubjectConfirmation : undefined;
|
|
3496
|
+
const now = Date.now();
|
|
3497
|
+
const matches = Array.isArray(confirmations) && confirmations.some((confirmation) => {
|
|
3498
|
+
if (confirmation?.$?.Method !== "urn:oasis:names:tc:SAML:2.0:cm:bearer")
|
|
3499
|
+
return false;
|
|
3500
|
+
const data = confirmation.SubjectConfirmationData;
|
|
3501
|
+
if (!Array.isArray(data) || data.length !== 1)
|
|
3502
|
+
return false;
|
|
3503
|
+
const attributes = data[0]?.$;
|
|
3504
|
+
if (attributes?.Recipient !== acsUrl || attributes.NotBefore !== undefined)
|
|
3505
|
+
return false;
|
|
3506
|
+
if (typeof attributes.NotOnOrAfter !== "string")
|
|
3507
|
+
return false;
|
|
3508
|
+
const expires = Date.parse(attributes.NotOnOrAfter);
|
|
3509
|
+
return Number.isFinite(expires) && now < expires + CLOCK_SKEW_MS;
|
|
3510
|
+
});
|
|
3511
|
+
if (!matches)
|
|
3512
|
+
throw new Error("SAML assertion bearer recipient is invalid.");
|
|
3513
|
+
}
|
|
3514
|
+
async function assertResponseDestination(profile, acsUrl) {
|
|
3515
|
+
const xml = profile.getSamlResponseXml?.();
|
|
3516
|
+
const invalid = () => new Error("SAML response destination is invalid.");
|
|
3517
|
+
if (typeof xml !== "string" || !xml.trim())
|
|
3518
|
+
throw invalid();
|
|
3519
|
+
const parserModule = "@xmldom/xmldom";
|
|
3520
|
+
const { DOMParser } = await import(parserModule);
|
|
3521
|
+
const document = new DOMParser({
|
|
3522
|
+
errorHandler: () => {
|
|
3523
|
+
throw invalid();
|
|
3524
|
+
}
|
|
3525
|
+
}).parseFromString(xml, "application/xml");
|
|
3526
|
+
const response = document.documentElement;
|
|
3527
|
+
if (document.doctype || response?.localName !== "Response" || response.namespaceURI !== "urn:oasis:names:tc:SAML:2.0:protocol" || response.getAttribute("Destination") !== acsUrl)
|
|
3528
|
+
throw invalid();
|
|
3529
|
+
}
|
|
3492
3530
|
function requireSamlOption(value, name) {
|
|
3493
3531
|
const trimmed = value?.trim() ?? "";
|
|
3494
3532
|
if (!trimmed) {
|
|
@@ -3553,7 +3591,7 @@ class SamlServiceProvider {
|
|
|
3553
3591
|
idpCert: this.options.idpCert,
|
|
3554
3592
|
audience: this.options.spEntityId,
|
|
3555
3593
|
idpIssuer: this.options.idpIssuer,
|
|
3556
|
-
acceptedClockSkewMs:
|
|
3594
|
+
acceptedClockSkewMs: CLOCK_SKEW_MS,
|
|
3557
3595
|
wantAssertionsSigned: this.options.wantAssertionsSigned ?? true,
|
|
3558
3596
|
wantAuthnResponseSigned: this.options.wantAuthnResponseSigned ?? true,
|
|
3559
3597
|
disableRequestedAuthnContext: this.options.disableRequestedAuthnContext ?? false
|
|
@@ -3584,6 +3622,8 @@ class SamlServiceProvider {
|
|
|
3584
3622
|
if (!assertionId) {
|
|
3585
3623
|
throw new Error("SAML assertion did not include an ID.");
|
|
3586
3624
|
}
|
|
3625
|
+
assertBearerRecipient(profile, this.options.acsUrl);
|
|
3626
|
+
await assertResponseDestination(profile, this.options.acsUrl);
|
|
3587
3627
|
await consumeSamlAssertion(assertionId);
|
|
3588
3628
|
const email = profile.email || (typeof profile["urn:oid:0.9.2342.19200300.100.1.3"] === "string" ? profile["urn:oid:0.9.2342.19200300.100.1.3"] : "") || "";
|
|
3589
3629
|
if (!email) {
|
|
@@ -17073,6 +17113,7 @@ export {
|
|
|
17073
17113
|
FormRequest,
|
|
17074
17114
|
GuestGuard,
|
|
17075
17115
|
HTMX_2_0_4_INDICATOR_STYLE_HASH,
|
|
17116
|
+
HTTP_DURATION_BUCKETS_MS,
|
|
17076
17117
|
HasManyRelationQuery,
|
|
17077
17118
|
HasManyThroughRelationQuery,
|
|
17078
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.39",
|
|
4
4
|
"description": "Strata Bun framework public API",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -958,7 +958,7 @@
|
|
|
958
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 @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": {
|
|
@@ -992,6 +992,7 @@
|
|
|
992
992
|
"@opentelemetry/resources": "2.12.0",
|
|
993
993
|
"@opentelemetry/sdk-trace": "2.12.0",
|
|
994
994
|
"@opentelemetry/sdk-trace-base": "2.12.0",
|
|
995
|
-
"@opentelemetry/sdk-trace-node": "2.12.0"
|
|
995
|
+
"@opentelemetry/sdk-trace-node": "2.12.0",
|
|
996
|
+
"@xmldom/xmldom": "^0.8.15"
|
|
996
997
|
}
|
|
997
998
|
}
|