Refactor context handling and migrate Wrangler config format.

Replaces `createServerContext` with `createRequestContext` for clarity and consistency across the application. Migrates `wrangler.toml` to `wrangler.jsonc` for improved configuration management and compatibility. Updates related files to align with the new context model and configuration structure.
This commit is contained in:
geoffsee
2025-05-27 15:01:48 -04:00
committed by Geoff Seemueller
parent 6ce22d8ef2
commit d0d55f58a6
4 changed files with 70 additions and 33 deletions

View File

@@ -6,8 +6,8 @@ import ChatService from "./services/ChatService";
import TransactionService from "./services/TransactionService"; import TransactionService from "./services/TransactionService";
import FeedbackService from "./services/FeedbackService"; import FeedbackService from "./services/FeedbackService";
const Context = types const RequestContext = types
.model("ApplicationContext", { .model("RequestContext", {
chatService: ChatService, chatService: ChatService,
contactService: types.optional(ContactService, {}), contactService: types.optional(ContactService, {}),
assetService: types.optional(AssetService, {}), assetService: types.optional(AssetService, {}),
@@ -36,10 +36,10 @@ const Context = types
}; };
}); });
export type IRootStore = Instance<typeof Context>; export type IRootStore = Instance<typeof RequestContext>;
const createServerContext = (env, ctx) => { const createRequestContext = (env, ctx) => {
const instance = Context.create({ const instance = RequestContext.create({
contactService: ContactService.create({}), contactService: ContactService.create({}),
assetService: AssetService.create({}), assetService: AssetService.create({}),
transactionService: TransactionService.create({}), transactionService: TransactionService.create({}),
@@ -61,6 +61,6 @@ const createServerContext = (env, ctx) => {
return instance; return instance;
}; };
export { createServerContext }; export { createRequestContext };
export default Context; export default RequestContext;

View File

@@ -1,21 +1,21 @@
import { Router, withParams } from "itty-router"; import { Router, withParams } from "itty-router";
import { createServerContext } from "./context"; import { createRequestContext } from "./RequestContext";
export function createRouter() { export function createRouter() {
return ( return (
Router() Router()
.get("/assets/*", (r, e, c) => { .get("/assets/*", (r, e, c) => {
const { assetService } = createServerContext(e, c); const { assetService } = createRequestContext(e, c);
return assetService.handleStaticAssets(r, e, c); return assetService.handleStaticAssets(r, e, c);
}) })
.post("/api/contact", (r, e, c) => { .post("/api/contact", (r, e, c) => {
const { contactService } = createServerContext(e, c); const { contactService } = createRequestContext(e, c);
return contactService.handleContact(r); return contactService.handleContact(r);
}) })
.post("/api/chat", (r, e, c) => { .post("/api/chat", (r, e, c) => {
const { chatService } = createServerContext(e, c); const { chatService } = createRequestContext(e, c);
return chatService.handleChatRequest(r); return chatService.handleChatRequest(r);
}) })
@@ -23,18 +23,18 @@ export function createRouter() {
"/api/streams/:streamId", "/api/streams/:streamId",
withParams, withParams,
async ({ streamId }, env, ctx) => { async ({ streamId }, env, ctx) => {
const { chatService } = createServerContext(env, ctx); const { chatService } = createRequestContext(env, ctx);
return chatService.handleSseStream(streamId); // Handles SSE for streamId return chatService.handleSseStream(streamId); // Handles SSE for streamId
}, },
) )
.post("/api/feedback", async (r, e, c) => { .post("/api/feedback", async (r, e, c) => {
const { feedbackService } = createServerContext(e, c); const { feedbackService } = createRequestContext(e, c);
return feedbackService.handleFeedback(r); return feedbackService.handleFeedback(r);
}) })
.post("/api/tx", async (r, e, c) => { .post("/api/tx", async (r, e, c) => {
const { transactionService } = createServerContext(e, c); const { transactionService } = createRequestContext(e, c);
return transactionService.handleTransact(r); return transactionService.handleTransact(r);
}) })
@@ -50,12 +50,12 @@ export function createRouter() {
// }) // })
.all("/api/metrics/*", async (r, e, c) => { .all("/api/metrics/*", async (r, e, c) => {
const { metricsService } = createServerContext(e, c); const { metricsService } = createRequestContext(e, c);
return metricsService.handleMetricsRequest(r); return metricsService.handleMetricsRequest(r);
}) })
.get("*", async (r, e, c) => { .get("*", async (r, e, c) => {
const { assetService } = createServerContext(e, c); const { assetService } = createRequestContext(e, c);
console.log("Request received:", { url: r.url, headers: r.headers }); console.log("Request received:", { url: r.url, headers: r.headers });

54
wrangler.jsonc Normal file
View File

@@ -0,0 +1,54 @@
{
"name": "open-gsio",
"assets": {
"binding": "ASSETS",
"directory": "./dist/client"
},
"dev": {
"ip": "localhost",
"port": 3001
},
"compatibility_date": "2025-04-04",
"compatibility_flags": [
"nodejs_compat"
],
"main": "./workers/site/worker.ts",
"preview_urls": false,
"workers_dev": false,
"kv_namespaces": [
{
"binding": "KV_STORAGE",
// $ npx wrangler kv namespace create open-gsio
"id": "placeholderId",
// $ npx wrangler kv namespace create open-gsio --preview
"preview_id": "placeholderIdPreview"
}
],
"migrations": [
{
"new_classes": [
"SiteCoordinator"
],
"tag": "v1"
}
],
"services": [
{
"binding": "EMAIL_SERVICE",
"service": "email-service-rpc"
}
],
"durable_objects": {
"bindings": [
{
"class_name": "SiteCoordinator",
"name": "SITE_COORDINATOR",
"script_name": "open-gsio"
}
]
},
"observability": {
"enabled": true
}
}

View File

@@ -1,17 +0,0 @@
main="./workers/site/worker.ts"
name = "geoff-seemueller-io"
compatibility_date = "2025-04-04"
workers_dev = false
dev.port = 3001
dev.ip = "localhost"
observability.enabled = true
compatibility_flags = ["nodejs_compat"]
assets = { directory = "./dist/client", binding = "ASSETS" }
preview_urls = false
# wrangler.toml (wrangler v3.78.6^)
# Dev configuration (local)
durable_objects.bindings = [{name = "SITE_COORDINATOR", class_name = "SiteCoordinator", script_name = "geoff-seemueller-io"}]
migrations = [{tag = "v1", new_classes = ["SiteCoordinator"]}]
kv_namespaces = [{binding = "KV_STORAGE", id = "placeholderId", preview_id = "placeholderIdPreview"}]
services = [{binding = "EMAIL_SERVICE", service = "email-service-rpc"}]