From 977176dbe215aa93ade7389a51187d87fa82a746 Mon Sep 17 00:00:00 2001 From: Rotimi Best Date: Fri, 12 Jun 2026 10:06:06 +0100 Subject: [PATCH] fix: remove dependency from tenant router --- apps/tenant-router/README.md | 4 +--- apps/tenant-router/package.json | 6 ------ apps/tenant-router/src/embed-assets.ts | 20 +++++++++++++++++-- packages/utils/src/constants/embeds.ts | 27 ++------------------------ pnpm-lock.yaml | 4 ---- 5 files changed, 21 insertions(+), 40 deletions(-) diff --git a/apps/tenant-router/README.md b/apps/tenant-router/README.md index 348e9e48..20b0c423 100644 --- a/apps/tenant-router/README.md +++ b/apps/tenant-router/README.md @@ -12,7 +12,7 @@ The Worker forwards each request to one of two Render services based on path: | Host / path | Upstream | | ------------- | ------------------------------------------------------------ | -| `embed.*` | R2 `assets` bucket — `/{widget}` maps to internal keys (`@cio/utils/constants/embeds`) | +| `embed.*` | R2 `assets` bucket — `/{widget}` maps to internal keys (`src/embed-assets.ts`) | | `/proxy/*` | API service (`/proxy` prefix stripped, rest forwarded as-is) | | anything else | Dashboard service | @@ -29,8 +29,6 @@ It preserves the original host as `X-Forwarded-Host` so: ## Deploy -`deploy` runs `predeploy`, which builds `@cio/utils` first (Wrangler resolves `@cio/utils/constants/*` from `dist/`). - ```bash pnpm --filter @cio/tenant-router deploy ``` diff --git a/apps/tenant-router/package.json b/apps/tenant-router/package.json index d0175928..8fc1c050 100644 --- a/apps/tenant-router/package.json +++ b/apps/tenant-router/package.json @@ -5,17 +5,11 @@ "type": "module", "scripts": { "dev": "wrangler dev", - "predev": "pnpm --filter @cio/utils build", "deploy": "wrangler deploy", - "predeploy": "pnpm --filter @cio/utils build", "tail": "wrangler tail", "typecheck": "tsc --noEmit", - "pretypecheck": "pnpm --filter @cio/utils build", "format": "prettier --write ." }, - "dependencies": { - "@cio/utils": "workspace:*" - }, "devDependencies": { "@cloudflare/workers-types": "^4.20250109.0", "typescript": "^5.5.2", diff --git a/apps/tenant-router/src/embed-assets.ts b/apps/tenant-router/src/embed-assets.ts index d0358e26..d4e5f58e 100644 --- a/apps/tenant-router/src/embed-assets.ts +++ b/apps/tenant-router/src/embed-assets.ts @@ -1,4 +1,20 @@ -import { EMBED_WIDGET_ROUTES } from '@cio/utils/constants/embeds'; +type EmbedWidgetRoute = { + scriptKey: string; + pageKey?: string; + pageQueryParam?: string; +}; + +/** Public path segment → R2 object keys under the `assets` bucket. */ +const EMBED_WIDGET_ROUTES: Record = { + 'course-widget': { + scriptKey: 'embeds/course-widget/course-widget.js', + pageKey: 'embeds/course-widget/embed.html', + pageQueryParam: 'key' + }, + 'question-type-picker': { + scriptKey: 'embeds/question-type-picker/question-type-picker.js' + } +}; const EMBED_CONTENT_TYPES: Record = { html: 'text/html', @@ -43,7 +59,7 @@ function cacheControlForObjectKey(objectKey: string): string { } function resolvePublicWidgetKey(pathname: string, searchParams: URLSearchParams): string | null { - const route = EMBED_WIDGET_ROUTES[pathname as keyof typeof EMBED_WIDGET_ROUTES]; + const route = EMBED_WIDGET_ROUTES[pathname]; if (!route) { return null; } diff --git a/packages/utils/src/constants/embeds.ts b/packages/utils/src/constants/embeds.ts index 4969b88c..934fb5b8 100644 --- a/packages/utils/src/constants/embeds.ts +++ b/packages/utils/src/constants/embeds.ts @@ -2,31 +2,8 @@ export const EMBED_PUBLIC_HOST = 'embed.classroomio.com'; export const EMBED_PUBLIC_BASE_URL = `https://${EMBED_PUBLIC_HOST}`; -export type EmbedWidgetRoute = { - /** R2 object key for the ES module bootstrap. */ - scriptKey: string; - /** R2 object key for the hosted iframe page, when supported. */ - pageKey?: string; - /** Query param that selects the hosted page instead of the script. */ - pageQueryParam?: string; -}; - -/** - * Public path segment → internal R2 keys under the `assets` bucket. - * Customers only copy `https://embed.classroomio.com/{widgetName}`. - */ -export const EMBED_WIDGET_ROUTES = { - 'course-widget': { - scriptKey: 'embeds/course-widget/course-widget.js', - pageKey: 'embeds/course-widget/embed.html', - pageQueryParam: 'key' - }, - 'question-type-picker': { - scriptKey: 'embeds/question-type-picker/question-type-picker.js' - } -} as const satisfies Record; - -export type EmbedWidgetName = keyof typeof EMBED_WIDGET_ROUTES; +/** Widget names exposed at `https://embed.classroomio.com/{name}`. */ +export type EmbedWidgetName = 'course-widget' | 'question-type-picker'; export function getEmbedBaseUrl(override?: string): string { return (override ?? EMBED_PUBLIC_BASE_URL).replace(/\/$/, ''); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5a95a4da..6cd92a99 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -782,10 +782,6 @@ importers: version: 4.2.1 apps/tenant-router: - dependencies: - '@cio/utils': - specifier: workspace:* - version: link:../../packages/utils devDependencies: '@cloudflare/workers-types': specifier: ^4.20250109.0