This commit implements the core admin dashboard functionality including NextAuth authentication, Cloudflare D1 database integration with complete schema, and Cloudflare R2 file upload system for portfolio images. Features include artist management, appointment scheduling, and data migration capabilities.
52 lines
2.6 KiB
JavaScript
52 lines
2.6 KiB
JavaScript
//@ts-expect-error: Will be resolved by wrangler build
|
|
import { fetchImage } from "./cloudflare/images.js";
|
|
//@ts-expect-error: Will be resolved by wrangler build
|
|
import { runWithCloudflareRequestContext } from "./cloudflare/init.js";
|
|
//@ts-expect-error: Will be resolved by wrangler build
|
|
import { maybeGetSkewProtectionResponse } from "./cloudflare/skew-protection.js";
|
|
// @ts-expect-error: Will be resolved by wrangler build
|
|
import { handler as middlewareHandler } from "./middleware/handler.mjs";
|
|
//@ts-expect-error: Will be resolved by wrangler build
|
|
export { DOQueueHandler } from "./.build/durable-objects/queue.js";
|
|
//@ts-expect-error: Will be resolved by wrangler build
|
|
export { DOShardedTagCache } from "./.build/durable-objects/sharded-tag-cache.js";
|
|
//@ts-expect-error: Will be resolved by wrangler build
|
|
export { BucketCachePurge } from "./.build/durable-objects/bucket-cache-purge.js";
|
|
export default {
|
|
async fetch(request, env, ctx) {
|
|
return runWithCloudflareRequestContext(request, env, ctx, async () => {
|
|
const response = maybeGetSkewProtectionResponse(request);
|
|
if (response) {
|
|
return response;
|
|
}
|
|
const url = new URL(request.url);
|
|
// Serve images in development.
|
|
// Note: "/cdn-cgi/image/..." requests do not reach production workers.
|
|
if (url.pathname.startsWith("/cdn-cgi/image/")) {
|
|
const m = url.pathname.match(/\/cdn-cgi\/image\/.+?\/(?<url>.+)$/);
|
|
if (m === null) {
|
|
return new Response("Not Found!", { status: 404 });
|
|
}
|
|
const imageUrl = m.groups.url;
|
|
return imageUrl.match(/^https?:\/\//)
|
|
? fetch(imageUrl, { cf: { cacheEverything: true } })
|
|
: env.ASSETS?.fetch(new URL(`/${imageUrl}`, url));
|
|
}
|
|
// Fallback for the Next default image loader.
|
|
if (url.pathname ===
|
|
`${globalThis.__NEXT_BASE_PATH__}/_next/image${globalThis.__TRAILING_SLASH__ ? "/" : ""}`) {
|
|
const imageUrl = url.searchParams.get("url") ?? "";
|
|
return await fetchImage(env.ASSETS, imageUrl, ctx);
|
|
}
|
|
// - `Request`s are handled by the Next server
|
|
const reqOrResp = await middlewareHandler(request, env, ctx);
|
|
if (reqOrResp instanceof Response) {
|
|
return reqOrResp;
|
|
}
|
|
// @ts-expect-error: resolved by wrangler build
|
|
const { handler } = await import("./server-functions/default/handler.mjs");
|
|
return handler(reqOrResp, env, ctx, request.signal);
|
|
});
|
|
},
|
|
};
|