Skip to content

refactor(oauth): consolidate as unknown as casts in OAuth wiring (patch)#153

Merged
liplus-lin-lay merged 1 commit into
mainfrom
148-refactortypes-consolidate-as-unknown-as-casts-in-oauth-wiring
May 25, 2026
Merged

refactor(oauth): consolidate as unknown as casts in OAuth wiring (patch)#153
liplus-lin-lay merged 1 commit into
mainfrom
148-refactortypes-consolidate-as-unknown-as-casts-in-oauth-wiring

Conversation

@liplus-lin-lay
Copy link
Copy Markdown
Member

目的

src/index.ts に散在していた 6 OAuth-wiring as unknown as キャストを src/oauth.ts 境界に集約。 型システムの escape hatch を 1 ファイルに局所化し、 OAuthProvider 仕様変更時の追従性を向上させる。

Closes #148

変更点

削減 (src/index.ts)

6 cast 全削除:

  • L130 ctx.props 読み → readGitHubProps(ctx)
  • L137 ctx.props 書き換え → writeMcpProps(ctx, { ... })
  • L149 / L157 env.OAUTH_PROVIDER 読み → readOAuthHelpers(env)
  • L174 / L179 createOAuthProvider / oauthWrapped.fetch の env 型変換 → generic 化により消滅

集約 (src/oauth.ts)

  • 新 export type McpProps (RagMcpAgentV2 が消費する props shape を独立宣言)
  • 新 export helper:
    • readGitHubProps(ctx) — OAuthProvider が ctx.props にセットした GitHubUserProps を読み出す
    • writeMcpProps(ctx, props) — McpProps shape を ctx.props に書き戻す
    • readOAuthHelpers(env) — OAuthProvider が env に注入する OAUTH_PROVIDER helper を取り出す
  • 新 export interface OAuthWrappedHandler<TEnv> — caller の Env 型を保ったまま fetch を返す型
  • createOAuthProvider<TEnv extends OAuthEnv> generic 化。 library 側の OAuthEnv & Record<string, unknown> 制約は関数内 LibEnv ローカル型に閉じ込めた

構造化 (src/types.ts)

  • Env extends OAuthEnv 化。 OAUTH_KV / GITHUB_CLIENT_ID / GITHUB_CLIENT_SECRET は extends 経由で継承し重複宣言を削除

scope 外 (本 PR では据え置き)

  • src/mcp.ts L719 (Vectorize metadata cast — @cloudflare/workers-types の VectorizeMatch.metadata 型が unknown のため)
  • src/rerank.ts L157 (Workers AI response cast — env.AI.run 戻り値の型推論が AiTextGenerationOutput に固定されるため)

両者は外部ライブラリ起因なので、 別 issue で library 型定義 import / 専用型 alias の検討。

AI 自己レビュー (auto モード)

分類

  • refactor 100%、 挙動変更ゼロ
  • tsc --noEmit clean、 wrangler deploy --dry-run 成功
  • 型 surface 変更あり (createOAuthProvider の signature が generic 化) だが内部使用のみで外部影響なし
  • patch 維持

cast 数の変化

location before after
src/index.ts (OAuth wiring) 6 0
src/oauth.ts 0 5
src/mcp.ts (library gap) 1 1 (scope 外)
src/rerank.ts (library gap) 1 1 (scope 外)
total 8 7

外部キャスト site が 6 → 0、 oauth.ts 境界に意図のある boundary cast 5 が残る形に。 cast 総数は -1 だが、 主目的は site 集約。

検証

  • grep "as unknown as" src/ → 7 ヒット (oauth.ts 5 + mcp.ts 1 + rerank.ts 1)、 index.ts ゼロ
  • npx tsc --noEmit clean
  • npx wrangler deploy --dry-run 成功 (bindings 出力正常)

CI pass を確認次第、 auto モード規約に従い gh pr merge --squash で直接マージする。

🤖 Generated with Claude Code

src/index.ts に 6 箇所散在していた `as unknown as` キャストを
src/oauth.ts 境界に集約。 call site は cast-free な helper / generic
呼び出しに置換し、 型システムの escape hatch を 1 ファイルに局所化した。

挙動変更なし (refactor のみ)。 tsc --noEmit と wrangler deploy
--dry-run の両方が pass。

変更:
- src/oauth.ts:
  - 新 export type McpProps (RagMcpAgentV2 が消費する props shape)
  - 新 export helper readGitHubProps / writeMcpProps / readOAuthHelpers
    (ctx / env への OAuthProvider injected プロパティ読み書きを集約)
  - 新 export interface OAuthWrappedHandler<TEnv> (caller の Env 型を
    そのまま返す wrapper の型)
  - createOAuthProvider を <TEnv extends OAuthEnv> generic 化し、 library 側
    の OAuthEnv & Record<string, unknown> 制約を関数内に閉じ込めた
- src/types.ts:
  - Env を interface Env extends OAuthEnv 化。 OAUTH_KV / GITHUB_CLIENT_ID
    / GITHUB_CLIENT_SECRET は extends 経由で継承
- src/index.ts:
  - L130 / L137 / L149 / L157 / L174 / L179 の 6 `as unknown as` を
    helper 呼び出し / generic 推論で全削除

scope 外 (別 issue 候補):
- src/mcp.ts L719 (Vectorize metadata cast — library 型定義不足)
- src/rerank.ts L157 (Workers AI response cast — library 型定義不足)

Closes #148
@cloudflare-workers-and-pages
Copy link
Copy Markdown

cloudflare-workers-and-pages Bot commented May 25, 2026

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Updated (UTC)
✅ Deployment successful!
View logs
github-rag-mcp 777edc5 May 25 2026, 01:11 AM

@liplus-lin-lay liplus-lin-lay added this to the v0.8.7 milestone May 25, 2026
Copy link
Copy Markdown
Member Author

@liplus-lin-lay liplus-lin-lay left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AI self-review (auto mode)

分類確認

  • refactor 100%、 挙動変更ゼロ
  • tsc --noEmit clean、 wrangler deploy --dry-run 成功
  • 型 surface は createOAuthProvider の signature が generic 化されたが、 caller は内部 (src/index.ts) のみで外部依存なし
  • patch 維持

brake 確認

  • 本 PR は L3 Task Layer (USER_REPO) スコープなので Evolution_Initiator_Autonomy brake 2 (L1 Model Layer 限定) 不適用
  • parallel-subagent-eval 軸 (brake 1) も Evolution_Initiator path 限定なので user repo の auto モード refactor では適用外、 self-review + CI で gate

diff 自己確認

  • src/oauth.ts:
    • GitHubUserProps export 既存維持、 OAuthEnv 既存維持
    • 新追加 McpProps / readGitHubProps / writeMcpProps / readOAuthHelpers / OAuthWrappedHandler 5 つすべて export、 docstring 完備
    • createOAuthProvider の signature 変更点は <TEnv extends OAuthEnv> 追加 + 戻り型 OAuthWrappedHandler<TEnv> 化のみ。 internal の OAuthProvider 設定 (apiRoute / authorizeEndpoint / TTL / PKCE / tokenExchangeCallback) は完全不変
  • src/types.ts:
    • Env を OAuthEnv extends 化、 OAUTH_KV / GITHUB_CLIENT_ID / GITHUB_CLIENT_SECRET の重複宣言削除
    • 他フィールド (MCP_OBJECT / ISSUE_STORE / VECTORIZE / DB_FTS / AI / GITHUB_TOKEN / POLL_REPOS / GITHUB_WEBHOOK_SECRET) は完全不変
  • src/index.ts:
    • import から OAuthEnv / GitHubUserProps を除き、 helper 3 つを追加 import
    • L130-160 + L173-183 の cast 全削除、 logic 不変

CI

  • test (tsc --noEmit + wrangler deploy --dry-run): pass (26s)
  • CI gate: pass (2s)
  • Workers Builds: pass

マージ判断

auto mode: AI 自己レビュー pass → AI 直マージ (gh pr merge --squash)。 v0.8.7 milestone 紐付け済み、 次 release 候補として保留。

@liplus-lin-lay liplus-lin-lay merged commit b46b0f0 into main May 25, 2026
3 checks passed
@liplus-lin-lay liplus-lin-lay deleted the 148-refactortypes-consolidate-as-unknown-as-casts-in-oauth-wiring branch May 25, 2026 01:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

refactor(types): consolidate "as unknown as" casts in OAuth wiring

1 participant