@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.
@@ -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 === FLASH_COOKIE) {
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 `${FLASH_COOKIE}=; Path=/; HttpOnly; SameSite=Lax; Max-Age=0`;
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 (_request, next) => {
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/markdownMail.ts
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, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
5819
5932
  }
5933
+ function decodeBasicEntities(value) {
5934
+ return value.replace(/&amp;/g, "&").replace(/&quot;/g, '"').replace(/&#39;/g, "'").replace(/&lt;/g, "<").replace(/&gt;/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, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
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
- const escaped = markdown.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
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 = escapeHtml2(options.title ?? "GetStrata");
5837
- const preview = escapeHtml2(options.preview ?? "");
5838
- const footer = escapeHtml2(options.footer ?? "Sent by GetStrata");
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.61",
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": {