purpose
as unknown as 型キャストが現状 8 箇所散在 (OAuth wiring 6 + Vectorize metadata 1 + Workers AI response 1)。 OAuth wiring 部の 6 箇所は oauth.ts 内に境界を 1 ヶ所に集約し、 call site (index.ts) は cast-free にする。 mcp.ts / rerank.ts の 2 箇所は外部ライブラリ (Vectorize / Workers AI) の型定義不足が原因のため、 本 issue では対象外として据え置き。
premise
as unknown as は型システムの完全 escape hatch。 散在するとコンパイラ保護が外れ、 OAuthProvider 仕様変更時の追従が困難になる
oauth.ts は既に OAuthEnv / GitHubUserProps 等を export しており、 OAuth 境界の自然な所在地である
- Cloudflare
@cloudflare/workers-oauth-provider は ExportedHandler<OAuthEnv & Record<string, unknown>> を要求する。 この Record<string, unknown> index signature の付与が現在 index.ts L174 / L179 のキャスト原因
ctx.props の shape 変換 (GitHubUserProps → McpProps) が index.ts L130 / L137 のキャスト原因
- env から OAUTH_PROVIDER helper の取り出しが index.ts L149 / L157 のキャスト原因
constraints
- 動作変更なし (refactor のみ)
- OAuth エンドポイント / OAuthProvider 設定 / token TTL は無変更
- 既存 export interface (
GitHubUserProps, OAuthEnv) は無変更
- 既存
createOAuthProvider の signature 変更は許容するが、 呼び出し側 (index.ts) 内のみ修正で完結すること
target files
src/oauth.ts — 型 + helper 追加、 createOAuthProvider を generic 化
src/types.ts — Env を OAuthEnv extends に変更 (structural 互換性の明示)
src/index.ts — call site 6 箇所を helper / generic-typed 呼び出しに置換
scope (この issue で対応)
in scope
src/index.ts L130 / L137 / L149 / L157 / L174 / L179 の 6 OAuth-wiring cast 解消
src/oauth.ts に 3 helper (readGitHubProps / writeMcpProps / readOAuthHelpers) + 1 type (McpProps) export 追加
createOAuthProvider を <TEnv extends OAuthEnv> generic 化
Env extends OAuthEnv 宣言追加
out of scope (別 issue 候補)
src/mcp.ts L719 m.metadata as unknown as VectorMetadata | undefined — Vectorize 型定義不足
src/rerank.ts L157 as unknown as RerankerResponse — Workers AI 型定義不足
expected outcome
grep "as unknown as" src/ の結果が 8 → 2 (library 起因のみ残る)。 oauth.ts 内 boundary に 5 cast 集約 (型 escape hatch を 1 ファイルに局所化)。
label
- type: enhancement
- maturity: ready
purpose
as unknown as型キャストが現状 8 箇所散在 (OAuth wiring 6 + Vectorize metadata 1 + Workers AI response 1)。 OAuth wiring 部の 6 箇所はoauth.ts内に境界を 1 ヶ所に集約し、 call site (index.ts) は cast-free にする。 mcp.ts / rerank.ts の 2 箇所は外部ライブラリ (Vectorize / Workers AI) の型定義不足が原因のため、 本 issue では対象外として据え置き。premise
as unknown asは型システムの完全 escape hatch。 散在するとコンパイラ保護が外れ、 OAuthProvider 仕様変更時の追従が困難になるoauth.tsは既にOAuthEnv/GitHubUserProps等を export しており、 OAuth 境界の自然な所在地である@cloudflare/workers-oauth-providerはExportedHandler<OAuthEnv & Record<string, unknown>>を要求する。 このRecord<string, unknown>index signature の付与が現在 index.ts L174 / L179 のキャスト原因ctx.propsの shape 変換 (GitHubUserProps → McpProps) が index.ts L130 / L137 のキャスト原因constraints
GitHubUserProps,OAuthEnv) は無変更createOAuthProviderの signature 変更は許容するが、 呼び出し側 (index.ts) 内のみ修正で完結することtarget files
src/oauth.ts— 型 + helper 追加、createOAuthProviderを generic 化src/types.ts—EnvをOAuthEnvextends に変更 (structural 互換性の明示)src/index.ts— call site 6 箇所を helper / generic-typed 呼び出しに置換scope (この issue で対応)
in scope
src/index.tsL130 / L137 / L149 / L157 / L174 / L179 の 6 OAuth-wiring cast 解消src/oauth.tsに 3 helper (readGitHubProps/writeMcpProps/readOAuthHelpers) + 1 type (McpProps) export 追加createOAuthProviderを<TEnv extends OAuthEnv>generic 化Env extends OAuthEnv宣言追加out of scope (別 issue 候補)
src/mcp.tsL719m.metadata as unknown as VectorMetadata | undefined— Vectorize 型定義不足src/rerank.tsL157as unknown as RerankerResponse— Workers AI 型定義不足expected outcome
grep "as unknown as" src/の結果が 8 → 2 (library 起因のみ残る)。 oauth.ts 内 boundary に 5 cast 集約 (型 escape hatch を 1 ファイルに局所化)。label