gencow 0.1.152 → 0.1.153
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/package.json +1 -1
- package/server/index.js +134 -38
- package/server/index.js.map +4 -4
package/package.json
CHANGED
package/server/index.js
CHANGED
|
@@ -20610,8 +20610,8 @@ var init_pdf = __esm({
|
|
|
20610
20610
|
this._readCapability = Promise.withResolvers();
|
|
20611
20611
|
this._headersCapability = Promise.withResolvers();
|
|
20612
20612
|
const fs4 = process.getBuiltinModule("fs");
|
|
20613
|
-
fs4.promises.lstat(this._url).then((
|
|
20614
|
-
this._contentLength =
|
|
20613
|
+
fs4.promises.lstat(this._url).then((stat5) => {
|
|
20614
|
+
this._contentLength = stat5.size;
|
|
20615
20615
|
this._setReadableStream(fs4.createReadStream(this._url));
|
|
20616
20616
|
this._headersCapability.resolve();
|
|
20617
20617
|
}, (error) => {
|
|
@@ -92788,7 +92788,9 @@ var getNodeRouteMetricsSnapshot = mod2.getNodeRouteMetricsSnapshot;
|
|
|
92788
92788
|
var resetNodeRouteMetricsForTests = mod2.resetNodeRouteMetricsForTests;
|
|
92789
92789
|
|
|
92790
92790
|
// ../server/src/server-platform-static-file.ts
|
|
92791
|
-
import { join as join2 } from "path";
|
|
92791
|
+
import { extname as extname2, join as join2 } from "path";
|
|
92792
|
+
import { brotliCompressSync, gzipSync } from "zlib";
|
|
92793
|
+
import { stat } from "fs/promises";
|
|
92792
92794
|
|
|
92793
92795
|
// ../server/src/static-file-routing.ts
|
|
92794
92796
|
import { extname, isAbsolute, relative as relative2, resolve as resolve7 } from "path";
|
|
@@ -92911,6 +92913,65 @@ async function resolveStaticFileRequest(params) {
|
|
|
92911
92913
|
}
|
|
92912
92914
|
|
|
92913
92915
|
// ../server/src/server-platform-static-file.ts
|
|
92916
|
+
var compressibleStaticExtensions = /* @__PURE__ */ new Set([
|
|
92917
|
+
".css",
|
|
92918
|
+
".csv",
|
|
92919
|
+
".htm",
|
|
92920
|
+
".html",
|
|
92921
|
+
".js",
|
|
92922
|
+
".json",
|
|
92923
|
+
".mjs",
|
|
92924
|
+
".svg",
|
|
92925
|
+
".txt",
|
|
92926
|
+
".wasm",
|
|
92927
|
+
".webmanifest",
|
|
92928
|
+
".xml"
|
|
92929
|
+
]);
|
|
92930
|
+
var encodedFileCache = /* @__PURE__ */ new Map();
|
|
92931
|
+
var encodedFileCacheTtlMs = 10 * 60 * 1e3;
|
|
92932
|
+
var encodedFileCacheMaxEntries = 240;
|
|
92933
|
+
function acceptsEncoding(value, encoding) {
|
|
92934
|
+
const tokens = value.toLowerCase().split(",").map((part) => part.trim());
|
|
92935
|
+
return tokens.some((token) => {
|
|
92936
|
+
if (!token.startsWith(encoding)) return false;
|
|
92937
|
+
const q = token.match(/;\s*q=([0-9.]+)/)?.[1];
|
|
92938
|
+
return q === void 0 || Number(q) > 0;
|
|
92939
|
+
});
|
|
92940
|
+
}
|
|
92941
|
+
function requestHeader(c, name) {
|
|
92942
|
+
const direct = c?.req?.header?.(name);
|
|
92943
|
+
if (typeof direct === "string") return direct;
|
|
92944
|
+
const fromHeaders = c?.req?.headers?.get?.(name);
|
|
92945
|
+
return typeof fromHeaders === "string" ? fromHeaders : "";
|
|
92946
|
+
}
|
|
92947
|
+
function preferredStaticEncoding(acceptEncoding, filePath) {
|
|
92948
|
+
if (!compressibleStaticExtensions.has(extname2(filePath).toLowerCase())) return null;
|
|
92949
|
+
if (acceptsEncoding(acceptEncoding, "br")) return "br";
|
|
92950
|
+
if (acceptsEncoding(acceptEncoding, "gzip")) return "gzip";
|
|
92951
|
+
return null;
|
|
92952
|
+
}
|
|
92953
|
+
function pruneEncodedFileCache(now = Date.now()) {
|
|
92954
|
+
for (const [key, value] of encodedFileCache) {
|
|
92955
|
+
if (now - value.createdAt > encodedFileCacheTtlMs) encodedFileCache.delete(key);
|
|
92956
|
+
}
|
|
92957
|
+
while (encodedFileCache.size > encodedFileCacheMaxEntries) {
|
|
92958
|
+
const oldest = encodedFileCache.keys().next().value;
|
|
92959
|
+
if (!oldest) break;
|
|
92960
|
+
encodedFileCache.delete(oldest);
|
|
92961
|
+
}
|
|
92962
|
+
}
|
|
92963
|
+
async function encodedStaticFile(filePath, encoding, originalSize) {
|
|
92964
|
+
const stats = await stat(filePath).catch(() => null);
|
|
92965
|
+
const cacheKey = `${filePath}:${stats?.mtimeMs ?? 0}:${originalSize}:${encoding}`;
|
|
92966
|
+
pruneEncodedFileCache();
|
|
92967
|
+
const cached = encodedFileCache.get(cacheKey);
|
|
92968
|
+
if (cached) return cached.body;
|
|
92969
|
+
const input = Buffer.from(await Bun.file(filePath).arrayBuffer());
|
|
92970
|
+
const output = encoding === "br" ? brotliCompressSync(input) : gzipSync(input);
|
|
92971
|
+
if (output.byteLength >= input.byteLength) return null;
|
|
92972
|
+
encodedFileCache.set(cacheKey, { body: output, createdAt: Date.now() });
|
|
92973
|
+
return output;
|
|
92974
|
+
}
|
|
92914
92975
|
async function serveStaticFile(params) {
|
|
92915
92976
|
const staticDir = join2(params.dataDir, "static");
|
|
92916
92977
|
const resolution = await resolveStaticFileRequest({
|
|
@@ -92925,14 +92986,23 @@ async function serveStaticFile(params) {
|
|
|
92925
92986
|
const file = Bun.file(resolution.filePath);
|
|
92926
92987
|
const fileSize = file.size;
|
|
92927
92988
|
const requestMethod = String(params.c?.req?.method ?? "").toUpperCase();
|
|
92928
|
-
|
|
92929
|
-
|
|
92989
|
+
const encoding = preferredStaticEncoding(requestHeader(params.c, "Accept-Encoding"), resolution.filePath);
|
|
92990
|
+
const encodedBody = encoding && Number.isSafeInteger(fileSize) && fileSize > 0 ? await encodedStaticFile(resolution.filePath, encoding, fileSize) : null;
|
|
92991
|
+
const responseBody = encodedBody ? new Uint8Array(encodedBody) : file;
|
|
92992
|
+
const responseBytes = encodedBody?.byteLength ?? fileSize;
|
|
92993
|
+
if (requestMethod !== "HEAD" && Number.isSafeInteger(responseBytes) && responseBytes > 0) {
|
|
92994
|
+
params.recordBytes?.(responseBytes);
|
|
92930
92995
|
}
|
|
92931
92996
|
const headers = new Headers({ "Cache-Control": resolution.cacheControl });
|
|
92932
|
-
if (
|
|
92933
|
-
headers.set("Content-
|
|
92997
|
+
if (encodedBody && encoding) {
|
|
92998
|
+
headers.set("Content-Encoding", encoding);
|
|
92999
|
+
headers.set("Vary", "Accept-Encoding");
|
|
93000
|
+
}
|
|
93001
|
+
if (file.type) headers.set("Content-Type", file.type);
|
|
93002
|
+
if (Number.isSafeInteger(responseBytes) && responseBytes >= 0) {
|
|
93003
|
+
headers.set("Content-Length", String(responseBytes));
|
|
92934
93004
|
}
|
|
92935
|
-
return new Response(
|
|
93005
|
+
return new Response(requestMethod === "HEAD" ? null : responseBody, {
|
|
92936
93006
|
headers
|
|
92937
93007
|
});
|
|
92938
93008
|
}
|
|
@@ -97200,7 +97270,7 @@ import { existsSync as existsSync6 } from "fs";
|
|
|
97200
97270
|
import { resolve as resolve20 } from "path";
|
|
97201
97271
|
|
|
97202
97272
|
// ../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/adapter/bun/serve-static.js
|
|
97203
|
-
import { stat } from "node:fs/promises";
|
|
97273
|
+
import { stat as stat2 } from "node:fs/promises";
|
|
97204
97274
|
import { join as join3 } from "node:path";
|
|
97205
97275
|
|
|
97206
97276
|
// ../../node_modules/.pnpm/hono@4.12.18/node_modules/hono/dist/utils/compress.js
|
|
@@ -97376,7 +97446,7 @@ var serveStatic2 = (options) => {
|
|
|
97376
97446
|
const isDir = async (path3) => {
|
|
97377
97447
|
let isDir2;
|
|
97378
97448
|
try {
|
|
97379
|
-
const stats = await
|
|
97449
|
+
const stats = await stat2(path3);
|
|
97380
97450
|
isDir2 = stats.isDirectory();
|
|
97381
97451
|
} catch {
|
|
97382
97452
|
}
|
|
@@ -97824,11 +97894,11 @@ async function loadStorageMeta(params) {
|
|
|
97824
97894
|
try {
|
|
97825
97895
|
const raw2 = await fs.readFile(`${filePath}.meta`, "utf-8");
|
|
97826
97896
|
const parsed = JSON.parse(raw2);
|
|
97827
|
-
const
|
|
97897
|
+
const stat5 = await fs.stat(filePath);
|
|
97828
97898
|
const meta = {
|
|
97829
97899
|
id: params.storageId,
|
|
97830
97900
|
name: typeof parsed.name === "string" ? parsed.name : params.storageId,
|
|
97831
|
-
size: typeof parsed.size === "number" ? parsed.size :
|
|
97901
|
+
size: typeof parsed.size === "number" ? parsed.size : stat5.size,
|
|
97832
97902
|
type: typeof parsed.type === "string" ? parsed.type : "application/octet-stream",
|
|
97833
97903
|
visibility: normalizeStorageVisibility(parsed.visibility),
|
|
97834
97904
|
path: filePath
|
|
@@ -99214,6 +99284,9 @@ function isAuthorizedCronToken(token, internalToken, cronToken) {
|
|
|
99214
99284
|
if (!token) return false;
|
|
99215
99285
|
return Boolean(internalToken) && token === internalToken || Boolean(cronToken) && token === cronToken;
|
|
99216
99286
|
}
|
|
99287
|
+
function canFallbackToStableSchedulerAction(action) {
|
|
99288
|
+
return action.startsWith(`${WORKFLOW_RESUME_ACTION_PREFIX}.`);
|
|
99289
|
+
}
|
|
99217
99290
|
function createInternalCronRouteHandler(params) {
|
|
99218
99291
|
const logger2 = params.logger ?? console;
|
|
99219
99292
|
return async (c) => {
|
|
@@ -99250,7 +99323,7 @@ function createInternalCronRouteHandler(params) {
|
|
|
99250
99323
|
logger2.error(`[cron] /internal/cron/${action}: failed:`, message);
|
|
99251
99324
|
return c.json({ ok: false, error: message }, 500);
|
|
99252
99325
|
}
|
|
99253
|
-
if (hasActionTokenMap) {
|
|
99326
|
+
if (hasActionTokenMap && !canFallbackToStableSchedulerAction(action)) {
|
|
99254
99327
|
logger2.warn(`[cron] /internal/cron/${action}: action token not found`);
|
|
99255
99328
|
return c.json({ ok: false, error: `Action "${action}" not found` }, 404);
|
|
99256
99329
|
}
|
|
@@ -109598,13 +109671,21 @@ function sanitizePublicAuthResponsePayload(payload, fallback = "Authentication f
|
|
|
109598
109671
|
return sanitized;
|
|
109599
109672
|
}
|
|
109600
109673
|
|
|
109601
|
-
// ../server/src/auth-session-
|
|
109674
|
+
// ../server/src/auth-session-resolution.ts
|
|
109602
109675
|
function sessionTokenToCookieHeader(sessionToken) {
|
|
109603
109676
|
return [
|
|
109604
109677
|
`better-auth.session_token=${sessionToken}`,
|
|
109605
109678
|
`__Secure-better-auth.session_token=${sessionToken}`
|
|
109606
109679
|
].join("; ");
|
|
109607
109680
|
}
|
|
109681
|
+
function decodeCookieToken(value) {
|
|
109682
|
+
try {
|
|
109683
|
+
const decoded = decodeURIComponent(value);
|
|
109684
|
+
return decoded || null;
|
|
109685
|
+
} catch {
|
|
109686
|
+
return null;
|
|
109687
|
+
}
|
|
109688
|
+
}
|
|
109608
109689
|
function extractSessionTokenFromCookieHeader(cookieHeader) {
|
|
109609
109690
|
return extractSessionTokensFromCookieHeader(cookieHeader)[0] ?? null;
|
|
109610
109691
|
}
|
|
@@ -109613,7 +109694,8 @@ function extractSessionTokensFromCookieHeader(cookieHeader) {
|
|
|
109613
109694
|
const pattern = /(?:^|;\s*)(?:__Secure-)?better-auth\.session_token=([^;]+)/g;
|
|
109614
109695
|
let match2;
|
|
109615
109696
|
while ((match2 = pattern.exec(cookieHeader)) !== null) {
|
|
109616
|
-
|
|
109697
|
+
const token = decodeCookieToken(match2[1]);
|
|
109698
|
+
if (token) tokens.push(token);
|
|
109617
109699
|
}
|
|
109618
109700
|
return tokens;
|
|
109619
109701
|
}
|
|
@@ -109637,6 +109719,37 @@ function sessionCreatedAtMs(session2) {
|
|
|
109637
109719
|
}
|
|
109638
109720
|
return 0;
|
|
109639
109721
|
}
|
|
109722
|
+
async function resolveRequestSession(input) {
|
|
109723
|
+
if (input.authorizationHeader?.startsWith("Bearer ")) {
|
|
109724
|
+
const sessionToken2 = input.authorizationHeader.substring(7);
|
|
109725
|
+
const session3 = await input.getSession(new Headers({ cookie: sessionTokenToCookieHeader(sessionToken2) }));
|
|
109726
|
+
return { session: session3, sessionToken: sessionToken2 };
|
|
109727
|
+
}
|
|
109728
|
+
const cookieHeader = input.cookieHeader ?? "";
|
|
109729
|
+
const sessionTokens = [...new Set(extractSessionTokensFromCookieHeader(cookieHeader))];
|
|
109730
|
+
if (sessionTokens.length <= 1) {
|
|
109731
|
+
const session3 = await input.getSession(buildSessionLookupHeaders(input.headers, cookieHeader));
|
|
109732
|
+
return { session: session3, sessionToken: sessionTokens[0] ?? null };
|
|
109733
|
+
}
|
|
109734
|
+
const resolved = await Promise.all(
|
|
109735
|
+
sessionTokens.map(async (sessionToken2, index) => {
|
|
109736
|
+
try {
|
|
109737
|
+
const session3 = await input.getSession(buildSessionLookupHeadersForToken(input.headers, sessionToken2));
|
|
109738
|
+
return session3 ? { session: session3, sessionToken: sessionToken2, index } : null;
|
|
109739
|
+
} catch {
|
|
109740
|
+
return null;
|
|
109741
|
+
}
|
|
109742
|
+
})
|
|
109743
|
+
);
|
|
109744
|
+
const valid = resolved.filter((candidate) => candidate !== null);
|
|
109745
|
+
if (valid.length === 0) return { session: null, sessionToken: null };
|
|
109746
|
+
valid.sort((a, b) => {
|
|
109747
|
+
const createdDelta = sessionCreatedAtMs(b.session) - sessionCreatedAtMs(a.session);
|
|
109748
|
+
return createdDelta || a.index - b.index;
|
|
109749
|
+
});
|
|
109750
|
+
const { session: session2, sessionToken } = valid[0];
|
|
109751
|
+
return { session: session2, sessionToken };
|
|
109752
|
+
}
|
|
109640
109753
|
|
|
109641
109754
|
// ../server/src/auth-oauth-invite-reservation.ts
|
|
109642
109755
|
import { createHash as createHash7, randomUUID as randomUUID2 } from "crypto";
|
|
@@ -111046,29 +111159,12 @@ async function issueJWT(user2) {
|
|
|
111046
111159
|
return { token, expires_in: JWT_EXPIRES_IN_SEC };
|
|
111047
111160
|
}
|
|
111048
111161
|
async function resolveSessionFromRequest(c) {
|
|
111049
|
-
|
|
111050
|
-
|
|
111051
|
-
|
|
111052
|
-
|
|
111053
|
-
|
|
111054
|
-
|
|
111055
|
-
return { session: session2, sessionToken };
|
|
111056
|
-
}
|
|
111057
|
-
const cookieHeader = c.req.header("cookie") || "";
|
|
111058
|
-
const sessionTokens = [...new Set(extractSessionTokensFromCookieHeader(cookieHeader))];
|
|
111059
|
-
if (sessionTokens.length <= 1) {
|
|
111060
|
-
const session2 = await authInstance.api.getSession({
|
|
111061
|
-
headers: buildSessionLookupHeaders(c.req.raw.headers, cookieHeader)
|
|
111062
|
-
});
|
|
111063
|
-
return { session: session2, sessionToken: sessionTokens[0] ?? null };
|
|
111064
|
-
}
|
|
111065
|
-
const resolved = (await Promise.all(
|
|
111066
|
-
sessionTokens.map(
|
|
111067
|
-
(sessionToken) => authInstance.api.getSession({ headers: buildSessionLookupHeadersForToken(c.req.raw.headers, sessionToken) }).then((session2) => session2 ? { session: session2, sessionToken } : null).catch(() => null)
|
|
111068
|
-
)
|
|
111069
|
-
)).filter(Boolean);
|
|
111070
|
-
if (resolved.length === 0) return { session: null, sessionToken: null };
|
|
111071
|
-
return resolved.sort((a, b) => sessionCreatedAtMs(b.session) - sessionCreatedAtMs(a.session))[0];
|
|
111162
|
+
return resolveRequestSession({
|
|
111163
|
+
authorizationHeader: c.req.header("Authorization"),
|
|
111164
|
+
cookieHeader: c.req.header("cookie"),
|
|
111165
|
+
headers: c.req.raw.headers,
|
|
111166
|
+
getSession: (headers) => authInstance.api.getSession({ headers })
|
|
111167
|
+
});
|
|
111072
111168
|
}
|
|
111073
111169
|
async function getSessionFromRequest(c) {
|
|
111074
111170
|
return (await resolveSessionFromRequest(c)).session;
|