// --------------------------------------------------------------------------- // One-off config migration — rewrite pre-canonical GraphQL integration // `config` blobs into the canonical placements model. Runs once per database // (boot for local/selfhost, out-of-band script for cloud); runtime code // decodes ONLY the canonical shape (`decodeGraphqlIntegrationConfig*`). // // Stored legacy families (all observed in real databases): // 1. the v1→v2 migration's singular `auth: {kind:"none"|"oauth2"}` (the // graphql config had no `authenticationTemplate` unless v1 carried // credential placements), or a config with no auth fields at all // 2. `authenticationTemplate` entries of the retired native shape: // `{kind:"apiKey", slug, in:"header"|"query", name, prefix?}` // 3. openapi-shaped entries the v1→v2 migration wrote: // `{slug, type:"apiKey", headers/queryParams: