@getstrata/bootstrap 0.4.3 → 1.0.1
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 +27 -12
- package/README.md +32 -12
- package/dist/bootstrap/web/server.d.ts +3 -3
- package/dist/entries/applicationRegistry.js +0 -2
- package/dist/entries/buildModuleRoutes.js +2 -4
- package/dist/entries/buildWebModuleRoutes.js +2 -4
- package/dist/entries/cache/modelCacheTags.js +0 -2
- package/dist/entries/config.js +0 -2
- package/dist/entries/context.js +0 -2
- package/dist/entries/contracts.js +0 -2
- package/dist/entries/createSpaRoutes.js +1 -3
- package/dist/entries/createWebRoutes.js +2 -4
- package/dist/entries/dependencies.js +0 -2
- package/dist/entries/discoverModules.js +0 -2
- package/dist/entries/health.js +0 -2
- package/dist/entries/http/securedRouteModelBinding.js +0 -2
- package/dist/entries/httpKernel.js +2 -4
- package/dist/entries/listeners/invalidateCacheOnModelWrite.js +0 -2
- package/dist/entries/membershipService.js +0 -2
- package/dist/entries/metricsRoutes.js +0 -2
- package/dist/entries/providers/view.js +0 -2
- package/dist/entries/providers.js +0 -2
- package/dist/entries/queue/defaultJobs.js +0 -2
- package/dist/entries/routeRegistry.js +0 -2
- package/dist/entries/schedule.js +0 -2
- package/dist/entries/secretsGuard.js +39 -9
- package/dist/entries/web/forms.js +0 -2
- package/dist/entries/web/routing.js +2 -4
- package/dist/entries/web/server.js +8 -4
- package/dist/entries/web/session.js +10 -6
- package/dist/entries/web/slug.js +0 -2
- package/dist/index.js +59 -15
- package/package.json +7 -9
- package/dist/_.._/_.._/index.html +0 -174
- package/dist/bootstrap/createRoutes.d.ts +0 -3
- package/dist/bootstrap/dogfoodApp.d.ts +0 -7
- package/dist/bootstrap/preloadModules.d.ts +0 -1
- package/dist/bootstrap/routes.d.ts +0 -3
- package/dist/entries/createRoutes.js +0 -801
- package/dist/index-sfreg6q3.js +0 -0
package/dist/index.js
CHANGED
|
@@ -158,10 +158,10 @@ class HttpKernel {
|
|
|
158
158
|
const config = this.dependencies.container.resolve(CORE_CONFIG_TOKEN);
|
|
159
159
|
const redisUrl = config.get(REDIS_URL_CONFIG_KEY)?.trim() ?? "";
|
|
160
160
|
if (!redisUrl) {
|
|
161
|
-
const
|
|
161
|
+
const maxAttempts = Number(process.env.RATE_LIMIT_PER_MINUTE ?? "120");
|
|
162
162
|
return [
|
|
163
163
|
createMemoryThrottleMiddleware({
|
|
164
|
-
maxAttempts: Number.isFinite(
|
|
164
|
+
maxAttempts: Number.isFinite(maxAttempts) ? maxAttempts : 120,
|
|
165
165
|
decaySeconds: 60
|
|
166
166
|
})
|
|
167
167
|
];
|
|
@@ -1146,14 +1146,28 @@ var PUBLISHED_TEST_SCIM_BEARER_TOKEN = "strata-scim-test-token";
|
|
|
1146
1146
|
var MIN_SESSION_SECRET_LENGTH = 32;
|
|
1147
1147
|
var PUBLISHED_TEST_TOKENS = new Set([
|
|
1148
1148
|
PUBLISHED_TEST_ADMIN_API_TOKEN,
|
|
1149
|
-
PUBLISHED_TEST_MEMBER_API_TOKEN
|
|
1150
|
-
"workhub-admin-test-token",
|
|
1151
|
-
"workhub-member-test-token"
|
|
1152
|
-
]);
|
|
1153
|
-
var PUBLISHED_TEST_SCIM_TOKENS = new Set([
|
|
1154
|
-
PUBLISHED_TEST_SCIM_BEARER_TOKEN,
|
|
1155
|
-
"workhub-scim-test-token"
|
|
1149
|
+
PUBLISHED_TEST_MEMBER_API_TOKEN
|
|
1156
1150
|
]);
|
|
1151
|
+
var PUBLISHED_TEST_SCIM_TOKENS = new Set([PUBLISHED_TEST_SCIM_BEARER_TOKEN]);
|
|
1152
|
+
var PLACEHOLDER_SECRET_PATTERN = /change-me/i;
|
|
1153
|
+
var SECRETS_TO_ROTATE = [
|
|
1154
|
+
"SESSION_SECRET",
|
|
1155
|
+
"TOKEN_HASH_PEPPER",
|
|
1156
|
+
"METRICS_TOKEN",
|
|
1157
|
+
"SCIM_BEARER_TOKEN",
|
|
1158
|
+
"JWT_SECRET",
|
|
1159
|
+
"OAUTH_STATE_SECRET",
|
|
1160
|
+
"KMS_ENCRYPTION_KEY",
|
|
1161
|
+
"STRIPE_WEBHOOK_SECRET",
|
|
1162
|
+
"ADMIN_API_TOKEN",
|
|
1163
|
+
"MEMBER_API_TOKEN"
|
|
1164
|
+
];
|
|
1165
|
+
function assertNoPlaceholderSecrets(env) {
|
|
1166
|
+
const unrotated = SECRETS_TO_ROTATE.filter((name) => PLACEHOLDER_SECRET_PATTERN.test(env[name]?.trim() ?? ""));
|
|
1167
|
+
if (unrotated.length > 0) {
|
|
1168
|
+
throw new Error(`Production startup blocked: replace the generated placeholder values for ${unrotated.join(", ")}.`);
|
|
1169
|
+
}
|
|
1170
|
+
}
|
|
1157
1171
|
function isEnabled(value, defaultEnabled) {
|
|
1158
1172
|
if (value === undefined) {
|
|
1159
1173
|
return defaultEnabled;
|
|
@@ -1229,12 +1243,30 @@ function assertFeatureProductionSecrets(env) {
|
|
|
1229
1243
|
console.warn("[secrets] SIEM_EXPORT_URL is not configured; audit logs remain database-only.");
|
|
1230
1244
|
}
|
|
1231
1245
|
}
|
|
1246
|
+
var LOCAL_HOSTS = new Set(["localhost", "127.0.0.1", "0.0.0.0", "::1", "[::1]"]);
|
|
1247
|
+
function assertPublicAppUrl(env) {
|
|
1248
|
+
const raw = env.APP_URL?.trim() ?? "";
|
|
1249
|
+
let url = null;
|
|
1250
|
+
try {
|
|
1251
|
+
url = raw ? new URL(raw) : null;
|
|
1252
|
+
} catch {
|
|
1253
|
+
url = null;
|
|
1254
|
+
}
|
|
1255
|
+
if (!url || !/^https?:$/.test(url.protocol) || LOCAL_HOSTS.has(url.hostname)) {
|
|
1256
|
+
throw new Error("Production startup blocked: set APP_URL to the public origin of this app (for example https://app.example.com). Signed links and redirects are built from it.");
|
|
1257
|
+
}
|
|
1258
|
+
if (url.protocol === "http:") {
|
|
1259
|
+
console.warn(`[secrets] APP_URL uses http; session cookies are marked Secure in production and will not be sent over ${raw}.`);
|
|
1260
|
+
}
|
|
1261
|
+
}
|
|
1232
1262
|
function assertProductionSecrets(env = process.env) {
|
|
1233
1263
|
const appEnv = env.APP_ENV ?? "local";
|
|
1234
1264
|
if (appEnv !== "production") {
|
|
1235
1265
|
return;
|
|
1236
1266
|
}
|
|
1267
|
+
assertNoPlaceholderSecrets(env);
|
|
1237
1268
|
assertAuthDevHeadersDisabled(env);
|
|
1269
|
+
assertPublicAppUrl(env);
|
|
1238
1270
|
if (isTokenAuthEnabled(env)) {
|
|
1239
1271
|
assertTokenAuthProductionSecrets(env);
|
|
1240
1272
|
}
|
|
@@ -1324,14 +1356,19 @@ function createRouteKernel(dependencies) {
|
|
|
1324
1356
|
// ../../src/bootstrap/web/server.ts
|
|
1325
1357
|
import { currentRequestMeta as currentRequestMeta2, runWithRequestMeta } from "@getstrata/core/http/requestMetaContext";
|
|
1326
1358
|
import { notFoundHtmlResponse as notFoundHtmlResponse2 } from "@getstrata/core/view";
|
|
1359
|
+
function socketAddress(server, request) {
|
|
1360
|
+
const address = server?.requestIP(request)?.address;
|
|
1361
|
+
return address ? address.replace(/^::ffff:/i, "") : null;
|
|
1362
|
+
}
|
|
1327
1363
|
async function missingHtmlResponse() {
|
|
1328
1364
|
return notFoundHtmlResponse2();
|
|
1329
1365
|
}
|
|
1330
1366
|
function wrapRouteHandler(handler) {
|
|
1331
|
-
return async (request) => {
|
|
1367
|
+
return async (request, server) => {
|
|
1332
1368
|
return await runWithRequestMeta({
|
|
1333
1369
|
...currentRequestMeta2(),
|
|
1334
1370
|
request,
|
|
1371
|
+
ipAddress: socketAddress(server, request),
|
|
1335
1372
|
userAgent: request.headers.get("user-agent")
|
|
1336
1373
|
}, async () => {
|
|
1337
1374
|
const response = await handler(request);
|
|
@@ -1367,10 +1404,11 @@ function createWebServer(options) {
|
|
|
1367
1404
|
return Bun.serve({
|
|
1368
1405
|
port: options.port,
|
|
1369
1406
|
...bunRoutes ? { routes: bunRoutes } : {},
|
|
1370
|
-
async fetch(request) {
|
|
1407
|
+
async fetch(request, server) {
|
|
1371
1408
|
return await runWithRequestMeta({
|
|
1372
1409
|
...currentRequestMeta2(),
|
|
1373
1410
|
request,
|
|
1411
|
+
ipAddress: socketAddress(server, request),
|
|
1374
1412
|
userAgent: request.headers.get("user-agent")
|
|
1375
1413
|
}, async () => {
|
|
1376
1414
|
await options.onRequest?.(request);
|
|
@@ -1395,8 +1433,10 @@ import { createHmac, randomBytes } from "crypto";
|
|
|
1395
1433
|
import { AuthManager as AuthManager2 } from "@getstrata/core/auth/guard";
|
|
1396
1434
|
import { getBoundDatabaseConnection as getBoundDatabaseConnection2 } from "@getstrata/core/database/boundConnection";
|
|
1397
1435
|
import { getDefaultDatabasePool as getDefaultDatabasePool2 } from "@getstrata/core/database/defaultConnection";
|
|
1398
|
-
import { currentSqlDialect } from "@getstrata/core/database/dialect";
|
|
1436
|
+
import { currentSqlDialect, sqlTimestamp } from "@getstrata/core/database/dialect";
|
|
1399
1437
|
import { readRequestCookie } from "@getstrata/core/http/cookies";
|
|
1438
|
+
import { currentRequestMeta as currentRequestMeta3 } from "@getstrata/core/http/requestMetaContext";
|
|
1439
|
+
import { isProductionEnv } from "@getstrata/core/runtime/appEnv";
|
|
1400
1440
|
import { timingSafeCompareString } from "@getstrata/core/security/timingSafeCompare";
|
|
1401
1441
|
function sqlPlaceholder(index) {
|
|
1402
1442
|
return currentSqlDialect().placeholder(index);
|
|
@@ -1499,7 +1539,7 @@ class CookieSessionStore {
|
|
|
1499
1539
|
return sessionId;
|
|
1500
1540
|
}
|
|
1501
1541
|
withSecureFlag(header) {
|
|
1502
|
-
if (
|
|
1542
|
+
if (!isProductionEnv()) {
|
|
1503
1543
|
return header;
|
|
1504
1544
|
}
|
|
1505
1545
|
return header.includes("Secure") ? header : `${header}; Secure`;
|
|
@@ -1511,7 +1551,7 @@ class CookieSessionStore {
|
|
|
1511
1551
|
const id = randomBytes(32).toString("hex");
|
|
1512
1552
|
const expires = new Date(Date.now() + this.maxAgeSeconds * 1000);
|
|
1513
1553
|
await this.sql().unsafe(`INSERT INTO sessions (id, user_id, expires_at, user_agent, ip_address, last_active_at)
|
|
1514
|
-
VALUES (${sqlPlaceholder(1)}, ${sqlPlaceholder(2)}, ${sqlPlaceholder(3)}, ${sqlPlaceholder(4)}, ${sqlPlaceholder(5)}, ${sqlNow()})`, [id, user.id, expires
|
|
1554
|
+
VALUES (${sqlPlaceholder(1)}, ${sqlPlaceholder(2)}, ${sqlPlaceholder(3)}, ${sqlPlaceholder(4)}, ${sqlPlaceholder(5)}, ${sqlNow()})`, [id, user.id, sqlTimestamp(expires), meta.userAgent ?? null, meta.ipAddress ?? null]);
|
|
1515
1555
|
return id;
|
|
1516
1556
|
}
|
|
1517
1557
|
async destroy(sessionId) {
|
|
@@ -1567,7 +1607,11 @@ class CookieSessionAuthManager extends AuthManager2 {
|
|
|
1567
1607
|
this.registerGuard("session", guard);
|
|
1568
1608
|
}
|
|
1569
1609
|
async signIn(user, meta = {}) {
|
|
1570
|
-
const
|
|
1610
|
+
const current = currentRequestMeta3();
|
|
1611
|
+
const sessionId = await this.store.create(user, {
|
|
1612
|
+
userAgent: meta.userAgent ?? current.userAgent ?? null,
|
|
1613
|
+
ipAddress: meta.ipAddress ?? current.ipAddress ?? null
|
|
1614
|
+
});
|
|
1571
1615
|
return { sessionId, setCookie: this.store.cookieHeader(user, sessionId) };
|
|
1572
1616
|
}
|
|
1573
1617
|
async signOut(request) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@getstrata/bootstrap",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "Strata application bootstrap: HttpKernel, DI, web session helpers",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -55,11 +55,6 @@
|
|
|
55
55
|
"import": "./dist/entries/createWebRoutes.js",
|
|
56
56
|
"default": "./dist/entries/createWebRoutes.js"
|
|
57
57
|
},
|
|
58
|
-
"./createRoutes": {
|
|
59
|
-
"types": "./dist/bootstrap/createRoutes.d.ts",
|
|
60
|
-
"import": "./dist/entries/createRoutes.js",
|
|
61
|
-
"default": "./dist/entries/createRoutes.js"
|
|
62
|
-
},
|
|
63
58
|
"./createSpaRoutes": {
|
|
64
59
|
"types": "./dist/bootstrap/createSpaRoutes.d.ts",
|
|
65
60
|
"import": "./dist/entries/createSpaRoutes.js",
|
|
@@ -169,18 +164,21 @@
|
|
|
169
164
|
"CHANGELOG.md"
|
|
170
165
|
],
|
|
171
166
|
"scripts": {
|
|
172
|
-
"build": "bun run build:bundle && bun run build:shims && bun run build:subpaths && bun run build:types",
|
|
167
|
+
"build": "rm -rf dist && bun run build:bundle && bun run build:shims && bun run build:subpaths && bun run build:types",
|
|
173
168
|
"build:bundle": "bun build index.ts --outdir dist --target bun --external bun --external eta --external mysql2 --external @getstrata/core",
|
|
174
169
|
"build:types": "tsc -p tsconfig.types.json && bun ../../scripts/prune-bootstrap-dist-types.ts",
|
|
175
170
|
"prepublishOnly": "bun run build",
|
|
176
|
-
"build:subpaths": "bun build entries/applicationRegistry.ts entries/buildModuleRoutes.ts entries/buildWebModuleRoutes.ts entries/cache/modelCacheTags.ts entries/config.ts entries/context.ts entries/contracts.ts entries/createWebRoutes.ts entries/createRoutes.ts entries/createSpaRoutes.ts entries/dependencies.ts entries/discoverModules.ts entries/health.ts entries/http/securedRouteModelBinding.ts entries/httpKernel.ts entries/listeners/invalidateCacheOnModelWrite.ts entries/membershipService.ts entries/metricsRoutes.ts entries/queue/defaultJobs.ts entries/providers.ts entries/providers/view.ts entries/routeRegistry.ts entries/schedule.ts entries/secretsGuard.ts entries/web/forms.ts entries/web/routing.ts entries/web/server.ts entries/web/session.ts entries/web/slug.ts --outdir dist --root . --target bun --external bun --external eta --external mysql2 --external @getstrata/core --external @getstrata/bootstrap --external @getstrata/bootstrap/applicationRegistry --external @getstrata/bootstrap/buildModuleRoutes --external @getstrata/bootstrap/buildWebModuleRoutes --external @getstrata/bootstrap/cache/modelCacheTags --external @getstrata/bootstrap/config --external @getstrata/bootstrap/context --external @getstrata/bootstrap/contracts --external @getstrata/bootstrap/createWebRoutes --external @getstrata/bootstrap/createRoutes --external @getstrata/bootstrap/createSpaRoutes --external @getstrata/bootstrap/dependencies --external @getstrata/bootstrap/discoverModules --external @getstrata/bootstrap/health --external @getstrata/bootstrap/http/securedRouteModelBinding --external @getstrata/bootstrap/httpKernel --external @getstrata/bootstrap/listeners/invalidateCacheOnModelWrite --external @getstrata/bootstrap/membershipService --external @getstrata/bootstrap/metricsRoutes --external @getstrata/bootstrap/queue/defaultJobs --external @getstrata/bootstrap/providers --external @getstrata/bootstrap/providers/view --external @getstrata/bootstrap/routeRegistry --external @getstrata/bootstrap/schedule --external @getstrata/bootstrap/secretsGuard --external @getstrata/bootstrap/web/forms --external @getstrata/bootstrap/web/routing --external @getstrata/bootstrap/web/server --external @getstrata/bootstrap/web/session --external @getstrata/bootstrap/web/slug --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/password --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/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/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/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/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/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/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",
|
|
171
|
+
"build:subpaths": "bun build entries/applicationRegistry.ts entries/buildModuleRoutes.ts entries/buildWebModuleRoutes.ts entries/cache/modelCacheTags.ts entries/config.ts entries/context.ts entries/contracts.ts entries/createWebRoutes.ts entries/createSpaRoutes.ts entries/dependencies.ts entries/discoverModules.ts entries/health.ts entries/http/securedRouteModelBinding.ts entries/httpKernel.ts entries/listeners/invalidateCacheOnModelWrite.ts entries/membershipService.ts entries/metricsRoutes.ts entries/queue/defaultJobs.ts entries/providers.ts entries/providers/view.ts entries/routeRegistry.ts entries/schedule.ts entries/secretsGuard.ts entries/web/forms.ts entries/web/routing.ts entries/web/server.ts entries/web/session.ts entries/web/slug.ts --outdir dist --root . --target bun --external bun --external eta --external mysql2 --external @getstrata/core --external @getstrata/bootstrap --external @getstrata/bootstrap/applicationRegistry --external @getstrata/bootstrap/buildModuleRoutes --external @getstrata/bootstrap/buildWebModuleRoutes --external @getstrata/bootstrap/cache/modelCacheTags --external @getstrata/bootstrap/config --external @getstrata/bootstrap/context --external @getstrata/bootstrap/contracts --external @getstrata/bootstrap/createWebRoutes --external @getstrata/bootstrap/createSpaRoutes --external @getstrata/bootstrap/dependencies --external @getstrata/bootstrap/discoverModules --external @getstrata/bootstrap/health --external @getstrata/bootstrap/http/securedRouteModelBinding --external @getstrata/bootstrap/httpKernel --external @getstrata/bootstrap/listeners/invalidateCacheOnModelWrite --external @getstrata/bootstrap/membershipService --external @getstrata/bootstrap/metricsRoutes --external @getstrata/bootstrap/queue/defaultJobs --external @getstrata/bootstrap/providers --external @getstrata/bootstrap/providers/view --external @getstrata/bootstrap/routeRegistry --external @getstrata/bootstrap/schedule --external @getstrata/bootstrap/secretsGuard --external @getstrata/bootstrap/web/forms --external @getstrata/bootstrap/web/routing --external @getstrata/bootstrap/web/server --external @getstrata/bootstrap/web/session --external @getstrata/bootstrap/web/slug --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/password --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/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/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/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/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",
|
|
177
172
|
"build:shims": "true"
|
|
178
173
|
},
|
|
179
174
|
"publishConfig": {
|
|
180
175
|
"access": "public"
|
|
181
176
|
},
|
|
182
177
|
"peerDependencies": {
|
|
183
|
-
"@getstrata/core": "^0.
|
|
178
|
+
"@getstrata/core": "^1.0.1",
|
|
184
179
|
"typescript": "^5.9.0"
|
|
180
|
+
},
|
|
181
|
+
"engines": {
|
|
182
|
+
"bun": ">=1.4.0"
|
|
185
183
|
}
|
|
186
184
|
}
|
|
@@ -1,174 +0,0 @@
|
|
|
1
|
-
<!doctype html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8" />
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
-
<title>Strata</title>
|
|
7
|
-
<style>
|
|
8
|
-
:root {
|
|
9
|
-
color-scheme: dark;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
body {
|
|
13
|
-
font-family: sans-serif;
|
|
14
|
-
background-color: #000;
|
|
15
|
-
color: #fff;
|
|
16
|
-
margin: 0;
|
|
17
|
-
padding: 2rem;
|
|
18
|
-
line-height: 1.5;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
h1,
|
|
22
|
-
h2 {
|
|
23
|
-
margin-top: 0;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
section {
|
|
27
|
-
margin-bottom: 2rem;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
ul {
|
|
31
|
-
padding-left: 1.25rem;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
li {
|
|
35
|
-
padding: 0.35rem 0;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
a {
|
|
39
|
-
color: #fff;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
code,
|
|
43
|
-
input,
|
|
44
|
-
button {
|
|
45
|
-
font: inherit;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
form {
|
|
49
|
-
display: flex;
|
|
50
|
-
flex-wrap: wrap;
|
|
51
|
-
gap: 0.5rem;
|
|
52
|
-
margin: 0.75rem 0;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
input {
|
|
56
|
-
border: 1px solid #555;
|
|
57
|
-
background-color: #111;
|
|
58
|
-
color: #fff;
|
|
59
|
-
padding: 0.5rem 0.75rem;
|
|
60
|
-
border-radius: 0.35rem;
|
|
61
|
-
min-width: 14rem;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
button {
|
|
65
|
-
border: 1px solid #777;
|
|
66
|
-
background-color: #222;
|
|
67
|
-
color: #fff;
|
|
68
|
-
padding: 0.5rem 0.9rem;
|
|
69
|
-
border-radius: 0.35rem;
|
|
70
|
-
cursor: pointer;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
.hint {
|
|
74
|
-
color: #bbb;
|
|
75
|
-
font-size: 0.95rem;
|
|
76
|
-
}
|
|
77
|
-
</style>
|
|
78
|
-
<script type="module" crossorigin src="../../index-sfreg6q3.js"></script></head>
|
|
79
|
-
|
|
80
|
-
<body>
|
|
81
|
-
<h1>Strata</h1>
|
|
82
|
-
<p class="hint">
|
|
83
|
-
Framework reference domain for organizations, projects, tasks, and
|
|
84
|
-
comments.
|
|
85
|
-
</p>
|
|
86
|
-
|
|
87
|
-
<section>
|
|
88
|
-
<h2>Collections</h2>
|
|
89
|
-
<ul>
|
|
90
|
-
<li><a href="/organizations">/organizations</a></li>
|
|
91
|
-
<li><a href="/projects?include=organization">/projects</a></li>
|
|
92
|
-
<li><a href="/tasks?include=project">/tasks</a></li>
|
|
93
|
-
<li><a href="/comments">/comments</a></li>
|
|
94
|
-
<li><a href="/reports/summary">/reports/summary</a></li>
|
|
95
|
-
</ul>
|
|
96
|
-
</section>
|
|
97
|
-
|
|
98
|
-
<section>
|
|
99
|
-
<h2>Lookup by ID</h2>
|
|
100
|
-
|
|
101
|
-
<form data-prefix="/organizations/">
|
|
102
|
-
<input
|
|
103
|
-
type="number"
|
|
104
|
-
min="1"
|
|
105
|
-
name="id"
|
|
106
|
-
placeholder="Organization ID"
|
|
107
|
-
required
|
|
108
|
-
/>
|
|
109
|
-
<button type="submit">Open /organizations/:id</button>
|
|
110
|
-
</form>
|
|
111
|
-
|
|
112
|
-
<form data-prefix="/projects/">
|
|
113
|
-
<input
|
|
114
|
-
type="number"
|
|
115
|
-
min="1"
|
|
116
|
-
name="id"
|
|
117
|
-
placeholder="Project ID"
|
|
118
|
-
required
|
|
119
|
-
/>
|
|
120
|
-
<button type="submit">Open /projects/:id</button>
|
|
121
|
-
</form>
|
|
122
|
-
|
|
123
|
-
<form data-prefix="/tasks/">
|
|
124
|
-
<input
|
|
125
|
-
type="number"
|
|
126
|
-
min="1"
|
|
127
|
-
name="id"
|
|
128
|
-
placeholder="Task ID"
|
|
129
|
-
required
|
|
130
|
-
/>
|
|
131
|
-
<button type="submit">Open /tasks/:id</button>
|
|
132
|
-
</form>
|
|
133
|
-
|
|
134
|
-
<form data-prefix="/tasks/" data-suffix="/comments">
|
|
135
|
-
<input
|
|
136
|
-
type="number"
|
|
137
|
-
min="1"
|
|
138
|
-
name="id"
|
|
139
|
-
placeholder="Task ID"
|
|
140
|
-
required
|
|
141
|
-
/>
|
|
142
|
-
<button type="submit">Open /tasks/:id/comments</button>
|
|
143
|
-
</form>
|
|
144
|
-
|
|
145
|
-
<form data-prefix="/reports/organizations/">
|
|
146
|
-
<input
|
|
147
|
-
type="number"
|
|
148
|
-
min="1"
|
|
149
|
-
name="id"
|
|
150
|
-
placeholder="Organization ID"
|
|
151
|
-
required
|
|
152
|
-
/>
|
|
153
|
-
<button type="submit">Open /reports/organizations/:id</button>
|
|
154
|
-
</form>
|
|
155
|
-
</section>
|
|
156
|
-
|
|
157
|
-
<script>
|
|
158
|
-
for (const form of document.querySelectorAll("form[data-prefix]")) {
|
|
159
|
-
form.addEventListener("submit", (event) => {
|
|
160
|
-
event.preventDefault();
|
|
161
|
-
const prefix = form.getAttribute("data-prefix");
|
|
162
|
-
const suffix = form.getAttribute("data-suffix") ?? "";
|
|
163
|
-
const input = form.querySelector('input[name="id"]');
|
|
164
|
-
|
|
165
|
-
if (!prefix || !input?.value) {
|
|
166
|
-
return;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
window.location.href = `${prefix}${input.value}${suffix}`;
|
|
170
|
-
});
|
|
171
|
-
}
|
|
172
|
-
</script>
|
|
173
|
-
</body>
|
|
174
|
-
</html>
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
type DogfoodApp = "hiroapp";
|
|
2
|
-
declare function readDogfoodApp(): DogfoodApp;
|
|
3
|
-
declare function isHiroappDogfood(): boolean;
|
|
4
|
-
declare function hiroappSourcePath(...segments: string[]): string;
|
|
5
|
-
declare function importHiroappModule<T = unknown>(relativeFromApp: string): Promise<T>;
|
|
6
|
-
export type { DogfoodApp };
|
|
7
|
-
export { hiroappSourcePath, importHiroappModule, isHiroappDogfood, readDogfoodApp };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|