@getstrata/core 0.5.61 → 0.5.63
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 +16 -0
- package/README.md +1 -1
- package/dist/core/http/flashSession.d.ts +3 -1
- package/dist/core/http/signedUrl.d.ts +11 -0
- package/dist/core/jobs/exportAuditLogsJob.d.ts +12 -0
- package/dist/core/mail/sanitizeMailHtml.d.ts +2 -0
- package/dist/core/security/totp.d.ts +7 -1
- package/dist/entries/audit/exportAuditLogs.js +1 -1
- package/dist/entries/http/flashMiddleware.js +6 -3
- package/dist/entries/http/flashSession.js +8 -3
- package/dist/entries/http/requireAbilityMiddleware.js +44 -1
- package/dist/entries/http/requireWebAuthMiddleware.js +2 -1
- package/dist/entries/http/securityHeadersMiddleware.js +1 -1
- package/dist/entries/http/signedUrl.js +97 -0
- package/dist/entries/jobs/dispatchWebhookJob.js +14 -12
- package/dist/entries/jobs/exportAuditLogsJob.js +340 -0
- package/dist/entries/mail/markdownMail.js +62 -12
- package/dist/entries/mail/markdownMailable.js +62 -12
- package/dist/entries/mail/sanitizeMailHtml.js +60 -0
- package/dist/entries/openapi/generator.js +1 -1
- package/dist/entries/security/safeFetch.js +1 -1
- package/dist/entries/security/totp.js +31 -1
- package/dist/entries/view.js +6 -3
- package/dist/framework/public-api.d.ts +2 -0
- package/dist/index.js +166 -17
- package/package.json +17 -2
|
@@ -83,6 +83,7 @@ export type { RouteRequest } from "../core/http/route.ts";
|
|
|
83
83
|
export { loginRedirectLocation, safeInternalRedirectPath, sanitizeInternalPath, } from "../core/http/safeInternalPath.ts";
|
|
84
84
|
export { createScimThrottleMiddleware } from "../core/http/scimThrottleMiddleware.ts";
|
|
85
85
|
export { createSecurityHeadersMiddleware } from "../core/http/securityHeadersMiddleware.ts";
|
|
86
|
+
export { absoluteTemporarySignedUrl, assertValidSignature, hasValidSignature, signedUrl, temporarySignedUrl, } from "../core/http/signedUrl.ts";
|
|
86
87
|
export { createThrottleMiddleware } from "../core/http/throttleMiddleware.ts";
|
|
87
88
|
export { WebFormRequest } from "../core/http/webFormRequest.ts";
|
|
88
89
|
export { installGracefulShutdownSignals, registerShutdownHandler, runGracefulShutdown, } from "../core/lifecycle/gracefulShutdown.ts";
|
|
@@ -93,6 +94,7 @@ export type { MarkdownMailLayoutOptions, RenderedMarkdownMail } from "../core/ma
|
|
|
93
94
|
export { markdownToHtml, renderMarkdownMail, stripMarkdown, wrapMarkdownMailLayout, } from "../core/mail/markdownMail.ts";
|
|
94
95
|
export type { MarkdownMailableInput } from "../core/mail/markdownMailable.ts";
|
|
95
96
|
export { buildMarkdownMailMessage, sendMarkdownMail } from "../core/mail/markdownMailable.ts";
|
|
97
|
+
export { sanitizeMailHtml } from "../core/mail/sanitizeMailHtml.ts";
|
|
96
98
|
export type { MetricLabels } from "../core/metrics/prometheus.ts";
|
|
97
99
|
export { PrometheusRegistry, prometheusRegistry } from "../core/metrics/prometheus.ts";
|
|
98
100
|
export type { DatabaseNotificationPayload, DatabaseNotificationStore, MailNotificationMessage, Notifiable, NotificationChannelName, } from "../core/notifications/index.ts";
|
package/dist/index.js
CHANGED
|
@@ -4660,6 +4660,9 @@ function createCsrfProtection(secret, options = {}) {
|
|
|
4660
4660
|
import { createHmac, timingSafeEqual as timingSafeEqual3 } from "crypto";
|
|
4661
4661
|
var FLASH_COOKIE = "workhub_flash";
|
|
4662
4662
|
var FLASH_TTL_MS = 60 * 1000;
|
|
4663
|
+
function flashCookieName() {
|
|
4664
|
+
return process.env.FLASH_COOKIE_NAME?.trim() || FLASH_COOKIE;
|
|
4665
|
+
}
|
|
4663
4666
|
function resolveFlashSecret() {
|
|
4664
4667
|
return process.env.SESSION_SECRET?.trim() || process.env.OAUTH_STATE_SECRET?.trim() || "workhub-dev-flash-secret";
|
|
4665
4668
|
}
|
|
@@ -4674,7 +4677,7 @@ function readFlashCookie(request) {
|
|
|
4674
4677
|
}
|
|
4675
4678
|
for (const part of cookieHeader.split(";")) {
|
|
4676
4679
|
const [name, ...rest] = part.trim().split("=");
|
|
4677
|
-
if (name ===
|
|
4680
|
+
if (name === flashCookieName()) {
|
|
4678
4681
|
return decodeURIComponent(rest.join("="));
|
|
4679
4682
|
}
|
|
4680
4683
|
}
|
|
@@ -4721,7 +4724,7 @@ function parseFlashCookie(cookieValue) {
|
|
|
4721
4724
|
}
|
|
4722
4725
|
}
|
|
4723
4726
|
function clearFlashCookie() {
|
|
4724
|
-
return `${
|
|
4727
|
+
return `${flashCookieName()}=; Path=/; HttpOnly; SameSite=Lax; Max-Age=0`;
|
|
4725
4728
|
}
|
|
4726
4729
|
function pullFlash(request) {
|
|
4727
4730
|
const cookieValue = readFlashCookie(request);
|
|
@@ -5540,12 +5543,15 @@ function createMetricsMiddleware() {
|
|
|
5540
5543
|
// ../../src/core/http/requireAbilityMiddleware.ts
|
|
5541
5544
|
function createRequireAbilityMiddleware(abilityChecker) {
|
|
5542
5545
|
return (ability) => {
|
|
5543
|
-
return async (
|
|
5546
|
+
return async (request, next) => {
|
|
5544
5547
|
const user = currentAuthUser();
|
|
5545
5548
|
try {
|
|
5546
5549
|
abilityChecker.requireAbility(user, ability);
|
|
5547
5550
|
} catch (error) {
|
|
5548
5551
|
if (error instanceof ForbiddenError) {
|
|
5552
|
+
if (isViewsEnabled() && !requestPrefersJson(request)) {
|
|
5553
|
+
throw error;
|
|
5554
|
+
}
|
|
5549
5555
|
return Response.json({ error: error.message }, { status: error.status });
|
|
5550
5556
|
}
|
|
5551
5557
|
throw error;
|
|
@@ -5589,7 +5595,7 @@ function createRequireWebAuthMiddleware(auth2) {
|
|
|
5589
5595
|
return async (request, next) => {
|
|
5590
5596
|
const user = await auth2.resolve(request);
|
|
5591
5597
|
if (user) {
|
|
5592
|
-
return await next();
|
|
5598
|
+
return await runWithAuthUser(user, () => next());
|
|
5593
5599
|
}
|
|
5594
5600
|
if (requestPrefersJson(request)) {
|
|
5595
5601
|
throw new UnauthorizedError;
|
|
@@ -5640,7 +5646,7 @@ function createScimThrottleMiddleware(options) {
|
|
|
5640
5646
|
}
|
|
5641
5647
|
// ../../src/config/app.ts
|
|
5642
5648
|
var appConfig = {
|
|
5643
|
-
name: "WorkHub",
|
|
5649
|
+
name: process.env.APP_NAME?.trim() || "WorkHub",
|
|
5644
5650
|
env: process.env.APP_ENV ?? "local",
|
|
5645
5651
|
debug: (process.env.APP_DEBUG ?? "true") !== "false",
|
|
5646
5652
|
url: process.env.APP_URL ?? "http://localhost:3000",
|
|
@@ -5675,6 +5681,93 @@ function createSecurityHeadersMiddleware(options = {}) {
|
|
|
5675
5681
|
});
|
|
5676
5682
|
};
|
|
5677
5683
|
}
|
|
5684
|
+
// ../../src/core/http/signedUrl.ts
|
|
5685
|
+
import { createHmac as createHmac2 } from "crypto";
|
|
5686
|
+
function resolveSignedUrlSecret() {
|
|
5687
|
+
return process.env.SIGNED_URL_SECRET?.trim() || process.env.SESSION_SECRET?.trim() || process.env.OAUTH_STATE_SECRET?.trim() || "workhub-dev-signed-url-secret";
|
|
5688
|
+
}
|
|
5689
|
+
function resolveSignedUrlOrigin() {
|
|
5690
|
+
return (process.env.APP_URL ?? "http://localhost:3000").replace(/\/$/, "");
|
|
5691
|
+
}
|
|
5692
|
+
function normalizeSignedPath(path) {
|
|
5693
|
+
const trimmed = path.trim();
|
|
5694
|
+
if (!trimmed.startsWith("/") || trimmed.startsWith("//") || trimmed.includes("\\")) {
|
|
5695
|
+
throw new Error("Signed URLs must use a same-origin absolute path.");
|
|
5696
|
+
}
|
|
5697
|
+
if (trimmed.includes("://")) {
|
|
5698
|
+
throw new Error("Signed URLs must use a same-origin absolute path.");
|
|
5699
|
+
}
|
|
5700
|
+
return trimmed;
|
|
5701
|
+
}
|
|
5702
|
+
function sortedQueryString(params) {
|
|
5703
|
+
const entries = [...params.entries()].filter(([key]) => key !== "signature").sort(([left], [right]) => left.localeCompare(right));
|
|
5704
|
+
return new URLSearchParams(entries).toString();
|
|
5705
|
+
}
|
|
5706
|
+
function signCanonicalPayload(path, query) {
|
|
5707
|
+
return createHmac2("sha256", resolveSignedUrlSecret()).update(`${path}
|
|
5708
|
+
${query}`).digest("hex");
|
|
5709
|
+
}
|
|
5710
|
+
function buildSignedSearchParams(path, query = {}, expiresAt) {
|
|
5711
|
+
const params = new URLSearchParams;
|
|
5712
|
+
for (const [key, value] of Object.entries(query)) {
|
|
5713
|
+
if (key === "signature" || key === "expires") {
|
|
5714
|
+
continue;
|
|
5715
|
+
}
|
|
5716
|
+
params.set(key, String(value));
|
|
5717
|
+
}
|
|
5718
|
+
if (expiresAt !== undefined) {
|
|
5719
|
+
params.set("expires", String(expiresAt));
|
|
5720
|
+
}
|
|
5721
|
+
params.set("signature", signCanonicalPayload(path, sortedQueryString(params)));
|
|
5722
|
+
return params;
|
|
5723
|
+
}
|
|
5724
|
+
function signedUrl(path, query = {}) {
|
|
5725
|
+
const normalizedPath = normalizeSignedPath(path);
|
|
5726
|
+
const params = buildSignedSearchParams(normalizedPath, query);
|
|
5727
|
+
return `${normalizedPath}?${params.toString()}`;
|
|
5728
|
+
}
|
|
5729
|
+
function temporarySignedUrl(path, expiresInSeconds, query = {}) {
|
|
5730
|
+
if (!Number.isInteger(expiresInSeconds) || expiresInSeconds <= 0) {
|
|
5731
|
+
throw new Error("Signed URL expiry must be a positive integer number of seconds.");
|
|
5732
|
+
}
|
|
5733
|
+
const normalizedPath = normalizeSignedPath(path);
|
|
5734
|
+
const expiresAt = Math.floor(Date.now() / 1000) + expiresInSeconds;
|
|
5735
|
+
const params = buildSignedSearchParams(normalizedPath, query, expiresAt);
|
|
5736
|
+
return `${normalizedPath}?${params.toString()}`;
|
|
5737
|
+
}
|
|
5738
|
+
function absoluteTemporarySignedUrl(path, expiresInSeconds, query = {}, origin = resolveSignedUrlOrigin()) {
|
|
5739
|
+
return `${origin.replace(/\/$/, "")}${temporarySignedUrl(path, expiresInSeconds, query)}`;
|
|
5740
|
+
}
|
|
5741
|
+
function readSignedRequestUrl(input) {
|
|
5742
|
+
if (input instanceof URL) {
|
|
5743
|
+
return input;
|
|
5744
|
+
}
|
|
5745
|
+
if (typeof input === "string") {
|
|
5746
|
+
return new URL(input, resolveSignedUrlOrigin());
|
|
5747
|
+
}
|
|
5748
|
+
return new URL(input.url);
|
|
5749
|
+
}
|
|
5750
|
+
function hasValidSignature(input) {
|
|
5751
|
+
const url = readSignedRequestUrl(input);
|
|
5752
|
+
const signature = url.searchParams.get("signature");
|
|
5753
|
+
if (!signature) {
|
|
5754
|
+
return false;
|
|
5755
|
+
}
|
|
5756
|
+
const expires = url.searchParams.get("expires");
|
|
5757
|
+
if (expires) {
|
|
5758
|
+
const expiresAt = Number.parseInt(expires, 10);
|
|
5759
|
+
if (!Number.isInteger(expiresAt) || expiresAt <= Math.floor(Date.now() / 1000)) {
|
|
5760
|
+
return false;
|
|
5761
|
+
}
|
|
5762
|
+
}
|
|
5763
|
+
const expected = signCanonicalPayload(url.pathname, sortedQueryString(url.searchParams));
|
|
5764
|
+
return timingSafeCompareString(signature, expected);
|
|
5765
|
+
}
|
|
5766
|
+
function assertValidSignature(input) {
|
|
5767
|
+
if (!hasValidSignature(input)) {
|
|
5768
|
+
throw new ForbiddenError("Invalid or expired signed URL.");
|
|
5769
|
+
}
|
|
5770
|
+
}
|
|
5678
5771
|
// ../../src/core/http/throttleMiddleware.ts
|
|
5679
5772
|
var {RedisClient: RedisClient4 } = globalThis.Bun;
|
|
5680
5773
|
function resolveThrottleIdentity(request) {
|
|
@@ -5813,29 +5906,79 @@ function createRequestLoggingMiddleware() {
|
|
|
5813
5906
|
});
|
|
5814
5907
|
};
|
|
5815
5908
|
}
|
|
5816
|
-
// ../../src/core/mail/
|
|
5909
|
+
// ../../src/core/mail/sanitizeMailHtml.ts
|
|
5910
|
+
var ALLOWED_TAGS = new Set([
|
|
5911
|
+
"a",
|
|
5912
|
+
"blockquote",
|
|
5913
|
+
"br",
|
|
5914
|
+
"code",
|
|
5915
|
+
"em",
|
|
5916
|
+
"h1",
|
|
5917
|
+
"h2",
|
|
5918
|
+
"h3",
|
|
5919
|
+
"h4",
|
|
5920
|
+
"h5",
|
|
5921
|
+
"h6",
|
|
5922
|
+
"hr",
|
|
5923
|
+
"li",
|
|
5924
|
+
"ol",
|
|
5925
|
+
"p",
|
|
5926
|
+
"pre",
|
|
5927
|
+
"strong",
|
|
5928
|
+
"ul"
|
|
5929
|
+
]);
|
|
5817
5930
|
function escapeHtml2(value) {
|
|
5818
5931
|
return value.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
|
|
5819
5932
|
}
|
|
5933
|
+
function decodeBasicEntities(value) {
|
|
5934
|
+
return value.replace(/&/g, "&").replace(/"/g, '"').replace(/'/g, "'").replace(/</g, "<").replace(/>/g, ">");
|
|
5935
|
+
}
|
|
5936
|
+
function isSafeHref(value) {
|
|
5937
|
+
return /^(https?:|mailto:)/i.test(value.trim());
|
|
5938
|
+
}
|
|
5939
|
+
function sanitizeAttributes(tagName, rawAttributes) {
|
|
5940
|
+
if (tagName !== "a") {
|
|
5941
|
+
return "";
|
|
5942
|
+
}
|
|
5943
|
+
const hrefMatch = rawAttributes.match(/\bhref\s*=\s*("([^"]*)"|'([^']*)'|([^\s>]+))/i);
|
|
5944
|
+
const href = decodeBasicEntities(hrefMatch?.[2] ?? hrefMatch?.[3] ?? hrefMatch?.[4] ?? "");
|
|
5945
|
+
if (!href || !isSafeHref(href)) {
|
|
5946
|
+
return "";
|
|
5947
|
+
}
|
|
5948
|
+
return ` href="${escapeHtml2(href)}"`;
|
|
5949
|
+
}
|
|
5950
|
+
function sanitizeMailHtml(html) {
|
|
5951
|
+
return html.replace(/<\/?([a-zA-Z][a-zA-Z0-9]*)\b([^>]*)>/g, (match, tagName, rawAttributes) => {
|
|
5952
|
+
const name = tagName.toLowerCase();
|
|
5953
|
+
if (!ALLOWED_TAGS.has(name)) {
|
|
5954
|
+
return "";
|
|
5955
|
+
}
|
|
5956
|
+
if (match.startsWith("</")) {
|
|
5957
|
+
return `</${name}>`;
|
|
5958
|
+
}
|
|
5959
|
+
if (match.endsWith("/>") || name === "br" || name === "hr") {
|
|
5960
|
+
return `<${name}>`;
|
|
5961
|
+
}
|
|
5962
|
+
return `<${name}${sanitizeAttributes(name, rawAttributes)}>`;
|
|
5963
|
+
});
|
|
5964
|
+
}
|
|
5965
|
+
|
|
5966
|
+
// ../../src/core/mail/markdownMail.ts
|
|
5967
|
+
function escapeHtml3(value) {
|
|
5968
|
+
return value.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
|
|
5969
|
+
}
|
|
5820
5970
|
function stripMarkdown(markdown) {
|
|
5821
5971
|
return markdown.replace(/^#{1,6}\s+/gm, "").replace(/\*\*([^*]+)\*\*/g, "$1").replace(/\*([^*]+)\*/g, "$1").replace(/`([^`]+)`/g, "$1").replace(/\[([^\]]+)\]\(([^)]+)\)/g, "$1 ($2)").replace(/^[-*]\s+/gm, "\u2022 ").replace(/```[\s\S]*?```/g, "").replace(/\n{3,}/g, `
|
|
5822
5972
|
|
|
5823
5973
|
`).trim();
|
|
5824
5974
|
}
|
|
5825
5975
|
function markdownToHtml(markdown) {
|
|
5826
|
-
|
|
5827
|
-
return escaped.replace(/^### (.+)$/gm, "<h3>$1</h3>").replace(/^## (.+)$/gm, "<h2>$1</h2>").replace(/^# (.+)$/gm, "<h1>$1</h1>").replace(/`([^`]+)`/g, "<code>$1</code>").replace(/\*\*([^*]+)\*\*/g, "<strong>$1</strong>").replace(/\*([^*]+)\*/g, "<em>$1</em>").replace(/\[([^\]]+)\]\(([^)]+)\)/g, '<a href="$2">$1</a>').replace(/^[-*]\s+(.+)$/gm, "<li>$1</li>").replace(/(<li>[\s\S]*?<\/li>\n?)+/g, (block) => `<ul>${block}</ul>`).replace(/```(\w+)?\n([\s\S]*?)```/g, "<pre><code>$2</code></pre>").split(/\n\n+/).map((block) => {
|
|
5828
|
-
if (block.startsWith("<")) {
|
|
5829
|
-
return block;
|
|
5830
|
-
}
|
|
5831
|
-
return `<p>${block.replace(/\n/g, " ")}</p>`;
|
|
5832
|
-
}).join(`
|
|
5833
|
-
`);
|
|
5976
|
+
return sanitizeMailHtml(Bun.markdown.html(markdown));
|
|
5834
5977
|
}
|
|
5835
5978
|
function wrapMarkdownMailLayout(bodyHtml, options = {}) {
|
|
5836
|
-
const title =
|
|
5837
|
-
const preview =
|
|
5838
|
-
const footer =
|
|
5979
|
+
const title = escapeHtml3(options.title ?? "GetStrata");
|
|
5980
|
+
const preview = escapeHtml3(options.preview ?? "");
|
|
5981
|
+
const footer = escapeHtml3(options.footer ?? "Sent by GetStrata");
|
|
5839
5982
|
return `<!DOCTYPE html>
|
|
5840
5983
|
<html lang="en">
|
|
5841
5984
|
<head>
|
|
@@ -6982,6 +7125,7 @@ export {
|
|
|
6982
7125
|
ValidationError,
|
|
6983
7126
|
WebFormRequest,
|
|
6984
7127
|
WhereBuilder,
|
|
7128
|
+
absoluteTemporarySignedUrl,
|
|
6985
7129
|
appSchedule,
|
|
6986
7130
|
appendOrganizationScope,
|
|
6987
7131
|
appendProjectScope,
|
|
@@ -6991,6 +7135,7 @@ export {
|
|
|
6991
7135
|
assertIfMatch,
|
|
6992
7136
|
assertOrganizationReadable,
|
|
6993
7137
|
assertResourceInCurrentTenant,
|
|
7138
|
+
assertValidSignature,
|
|
6994
7139
|
auditChecksum,
|
|
6995
7140
|
auth,
|
|
6996
7141
|
authContext,
|
|
@@ -7078,6 +7223,7 @@ export {
|
|
|
7078
7223
|
hasMinimumOrgRole2 as hasMinimumOrgRole,
|
|
7079
7224
|
hasOne,
|
|
7080
7225
|
hasOrgMembership,
|
|
7226
|
+
hasValidSignature,
|
|
7081
7227
|
htmlErrorResponse,
|
|
7082
7228
|
htmlResponse,
|
|
7083
7229
|
hydrateValue,
|
|
@@ -7177,6 +7323,7 @@ export {
|
|
|
7177
7323
|
runWithTraceContext,
|
|
7178
7324
|
safeInternalRedirectPath,
|
|
7179
7325
|
sanitizeInternalPath,
|
|
7326
|
+
sanitizeMailHtml,
|
|
7180
7327
|
scopedOrganizationIds,
|
|
7181
7328
|
securedBindRouteModel,
|
|
7182
7329
|
securedBindRouteModelByKey,
|
|
@@ -7184,11 +7331,13 @@ export {
|
|
|
7184
7331
|
serializeDate,
|
|
7185
7332
|
serverHtmxContentSecurityPolicy,
|
|
7186
7333
|
setActiveApplicationContext,
|
|
7334
|
+
signedUrl,
|
|
7187
7335
|
spaContentSecurityPolicy,
|
|
7188
7336
|
storageFacade as storage,
|
|
7189
7337
|
strictApiContentSecurityPolicy,
|
|
7190
7338
|
stringRule,
|
|
7191
7339
|
stripMarkdown,
|
|
7340
|
+
temporarySignedUrl,
|
|
7192
7341
|
textResponse,
|
|
7193
7342
|
toPaginatedResourceCollection,
|
|
7194
7343
|
toResourceCollection,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@getstrata/core",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.63",
|
|
4
4
|
"description": "Strata — Laravel-inspired Bun framework public API",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -485,6 +485,11 @@
|
|
|
485
485
|
"import": "./dist/entries/http/safeInternalPath.js",
|
|
486
486
|
"default": "./dist/entries/http/safeInternalPath.js"
|
|
487
487
|
},
|
|
488
|
+
"./http/signedUrl": {
|
|
489
|
+
"types": "./dist/core/http/signedUrl.d.ts",
|
|
490
|
+
"import": "./dist/entries/http/signedUrl.js",
|
|
491
|
+
"default": "./dist/entries/http/signedUrl.js"
|
|
492
|
+
},
|
|
488
493
|
"./http/scimThrottleMiddleware": {
|
|
489
494
|
"types": "./dist/core/http/scimThrottleMiddleware.d.ts",
|
|
490
495
|
"import": "./dist/entries/http/scimThrottleMiddleware.js",
|
|
@@ -530,6 +535,11 @@
|
|
|
530
535
|
"import": "./dist/entries/jobs/dispatchWebhookJob.js",
|
|
531
536
|
"default": "./dist/entries/jobs/dispatchWebhookJob.js"
|
|
532
537
|
},
|
|
538
|
+
"./jobs/exportAuditLogsJob": {
|
|
539
|
+
"types": "./dist/core/jobs/exportAuditLogsJob.d.ts",
|
|
540
|
+
"import": "./dist/entries/jobs/exportAuditLogsJob.js",
|
|
541
|
+
"default": "./dist/entries/jobs/exportAuditLogsJob.js"
|
|
542
|
+
},
|
|
533
543
|
"./jobs/invalidateCacheTagsJob": {
|
|
534
544
|
"types": "./dist/core/jobs/invalidateCacheTagsJob.d.ts",
|
|
535
545
|
"import": "./dist/entries/jobs/invalidateCacheTagsJob.js",
|
|
@@ -565,6 +575,11 @@
|
|
|
565
575
|
"import": "./dist/entries/mail/markdownMailable.js",
|
|
566
576
|
"default": "./dist/entries/mail/markdownMailable.js"
|
|
567
577
|
},
|
|
578
|
+
"./mail/sanitizeMailHtml": {
|
|
579
|
+
"types": "./dist/core/mail/sanitizeMailHtml.d.ts",
|
|
580
|
+
"import": "./dist/entries/mail/sanitizeMailHtml.js",
|
|
581
|
+
"default": "./dist/entries/mail/sanitizeMailHtml.js"
|
|
582
|
+
},
|
|
568
583
|
"./media/imageTransform": {
|
|
569
584
|
"types": "./dist/core/media/imageTransform.d.ts",
|
|
570
585
|
"import": "./dist/entries/media/imageTransform.js",
|
|
@@ -788,7 +803,7 @@
|
|
|
788
803
|
"build:bundle": "bun build index.ts --outdir dist --target bun --external bun --external eta",
|
|
789
804
|
"build:types": "tsc -p tsconfig.types.json",
|
|
790
805
|
"prepublishOnly": "bun run build && bun ../../scripts/prepare-core-package-publish.ts",
|
|
791
|
-
"build:subpaths": "bun build entries/auth/accessControl.ts entries/auth/abilityChecker.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/password.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/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/model.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/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/loginThrottleMiddleware.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/resources.ts entries/http/response.ts entries/http/route.ts entries/http/routeMiddleware.ts entries/http/routeModelBinding.ts entries/http/safeInternalPath.ts entries/http/scimThrottleMiddleware.ts entries/http/securityHeadersMiddleware.ts entries/http/securedRouteModelBinding.ts entries/http/webErrorResponse.ts entries/http/webFormRequest.ts entries/http/throttleMiddleware.ts entries/http/validation.ts entries/jobs/dispatchWebhookJob.ts entries/jobs/invalidateCacheTagsJob.ts entries/lifecycle/gracefulShutdown.ts entries/logging/logger.ts entries/logging/requestLoggingMiddleware.ts entries/mail/mailer.ts entries/mail/markdownMail.ts entries/mail/markdownMailable.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/asyncContextStore.ts entries/scheduler/schedule.ts entries/scheduler/osCron.ts entries/security/oauthState.ts entries/security/publicReads.ts entries/security/safeFetch.ts entries/security/safeUrl.ts entries/security/scimTenantTokens.ts entries/security/stripeWebhook.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/terminal/runShell.ts entries/tracing/tracingMiddleware.ts entries/validation/rules.ts entries/view.ts --outdir dist --root . --target bun --external bun --external eta --external @getstrata/core --external @getstrata/core/auth/accessControl --external @getstrata/core/auth/abilityChecker --external @getstrata/core/auth/authContext --external @getstrata/core/auth/guard --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/password --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/container --external @getstrata/core/contracts/di --external @getstrata/core/crypto/fieldEncryption --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/defaultConnection --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/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/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/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/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/validation --external @getstrata/core/jobs/dispatchWebhookJob --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/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/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/safeFetch --external @getstrata/core/security/safeUrl --external @getstrata/core/security/scimTenantTokens --external @getstrata/core/security/securityEvents --external @getstrata/core/security/stripeWebhook --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/terminal/runShell --external @getstrata/core/tracing/traceContext --external @getstrata/core/tracing/tracingMiddleware --external @getstrata/core/validation/rules --external @getstrata/core/view",
|
|
806
|
+
"build:subpaths": "bun build entries/auth/accessControl.ts entries/auth/abilityChecker.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/password.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/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/model.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/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/loginThrottleMiddleware.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/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/scimThrottleMiddleware.ts entries/http/securityHeadersMiddleware.ts entries/http/securedRouteModelBinding.ts entries/http/webErrorResponse.ts entries/http/webFormRequest.ts entries/http/throttleMiddleware.ts entries/http/validation.ts entries/jobs/dispatchWebhookJob.ts entries/jobs/exportAuditLogsJob.ts entries/jobs/invalidateCacheTagsJob.ts entries/lifecycle/gracefulShutdown.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/asyncContextStore.ts entries/scheduler/schedule.ts entries/scheduler/osCron.ts entries/security/oauthState.ts entries/security/publicReads.ts entries/security/safeFetch.ts entries/security/safeUrl.ts entries/security/scimTenantTokens.ts entries/security/stripeWebhook.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/terminal/runShell.ts entries/tracing/tracingMiddleware.ts entries/validation/rules.ts entries/view.ts --outdir dist --root . --target bun --external bun --external eta --external @getstrata/core --external @getstrata/core/auth/accessControl --external @getstrata/core/auth/abilityChecker --external @getstrata/core/auth/authContext --external @getstrata/core/auth/guard --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/password --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/container --external @getstrata/core/contracts/di --external @getstrata/core/crypto/fieldEncryption --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/defaultConnection --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/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/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/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/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/validation --external @getstrata/core/jobs/dispatchWebhookJob --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/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/safeFetch --external @getstrata/core/security/safeUrl --external @getstrata/core/security/scimTenantTokens --external @getstrata/core/security/securityEvents --external @getstrata/core/security/stripeWebhook --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/terminal/runShell --external @getstrata/core/tracing/traceContext --external @getstrata/core/tracing/tracingMiddleware --external @getstrata/core/validation/rules --external @getstrata/core/view",
|
|
792
807
|
"build:shims": "bun ../../scripts/write-core-shared-shims.ts"
|
|
793
808
|
},
|
|
794
809
|
"publishConfig": {
|