(row: {
readonly slug?: unknown;
readonly grant?: unknown;
readonly resource?: unknown;
readonly origin_kind?: unknown;
readonly origin_integration?: unknown;
})
| 364 | }; |
| 365 | |
| 366 | const parseOAuthClientOrigin = (row: { |
| 367 | readonly slug?: unknown; |
| 368 | readonly grant?: unknown; |
| 369 | readonly resource?: unknown; |
| 370 | readonly origin_kind?: unknown; |
| 371 | readonly origin_integration?: unknown; |
| 372 | }): OAuthClientOrigin => { |
| 373 | // Shared DCR classification (explicit origin_kind OR the legacy MCP-shaped |
| 374 | // heuristic) lives in `oauth-gc` so the runtime and the GC/backfill |
| 375 | // migrations agree exactly on what counts as a DCR row. |
| 376 | if (!isDcrClassifiedRow(row)) { |
| 377 | return { |
| 378 | kind: "manual", |
| 379 | integration: |
| 380 | row.origin_integration == null |
| 381 | ? null |
| 382 | : IntegrationSlug.make(String(row.origin_integration)), |
| 383 | }; |
| 384 | } |
| 385 | // An explicit-origin DCR row carries its requesting integration; a |
| 386 | // heuristic-classified legacy row (null origin_kind) has none. |
| 387 | return { |
| 388 | kind: "dynamic_client_registration", |
| 389 | integration: |
| 390 | row.origin_kind === "dynamic_client_registration" && row.origin_integration != null |
| 391 | ? IntegrationSlug.make(String(row.origin_integration)) |
| 392 | : null, |
| 393 | }; |
| 394 | }; |
| 395 | |
| 396 | interface LoadedOAuthClient { |
| 397 | readonly slug: string; |
no test coverage detected