| @@ -108,7 +108,6 @@ describe("OpenAPI client_credentials OAuth", () => { · 107 unmodified lines |
| 108 | 108 | openApiPlugin({ httpClientLayer: clientLayer }), |
| 109 | 109 | memorySecretsPlugin(), |
| 110 | 110 | ] as const; |
| 111 | | − const config = makeTestConfig({ plugins }); |
| 112 | 111 | |
| 113 | 112 | const now = new Date(); |
| 114 | 113 | const orgScope = Scope.make({ |
| @@ -121,6 +120,7 @@ describe("OpenAPI client_credentials OAuth", () => { · 6 unmodified lines |
| 121 | 120 | name: "alice", |
| 122 | 121 | createdAt: now, |
| 123 | 122 | }); |
| 123 | + const config = makeTestConfig({ plugins, scopes: [userScope, orgScope] }); |
| 124 | 124 | |
| 125 | 125 | const adminExec = yield* createExecutor({ |
| 126 | 126 | ...config, |
| @@ -214,6 +214,62 @@ describe("OpenAPI client_credentials OAuth", () => { · 87 unmodified lines |
| 214 | 214 | namespace: "petstore", |
| 215 | 215 | oauth2, |
| 216 | 216 | }); |
| 217 | + const storedSourceRow = yield* Effect.promise(() => |
| 218 | + config.db.findFirst("plugin_storage", { |
| 219 | + where: (b) => |
| 220 | + b.and( |
| 221 | + b("scope_id", "=", String(userScope.id)), |
| 222 | + b("plugin_id", "=", "openapi"), |
| 223 | + b("collection", "=", "source"), |
| 224 | + b("key", "=", "petstore"), |
| 225 | + ), |
| 226 | + }), |
| 227 | + ); |
| 228 | + const storedData = storedSourceRow?.data as |
| 229 | + | { |
| 230 | + readonly config?: Record<string, unknown>; |
| 231 | + } |
| 232 | + | undefined; |
| 233 | + const storedOAuth2 = storedData?.config?.oauth2; |
| 234 | + if ( |
| 235 | + !storedSourceRow || |
| 236 | + !storedData?.config || |
| 237 | + typeof storedOAuth2 !== "object" || |
| 238 | + storedOAuth2 === null || |
| 239 | + Array.isArray(storedOAuth2) |
| 240 | + ) { |
| 241 | + return yield* new OpenApiClientCredentialsTestSetupError({ |
| 242 | + message: "Expected stored OpenAPI source OAuth config", |
| 243 | + }); |
| 244 | + } |
| 245 | + const { authorizationUrl: _authorizationUrl, ...oauth2WithoutAuthorizationUrl } = |
| 246 | + storedOAuth2 as Record<string, unknown>; |
| 247 | + yield* Effect.promise(() => |
| 248 | + config.db.updateMany("plugin_storage", { |
| 249 | + where: (b) => |
| 250 | + b.and( |
| 251 | + b("scope_id", "=", String(userScope.id)), |
| 252 | + b("plugin_id", "=", "openapi"), |
| 253 | + b("collection", "=", "source"), |
| 254 | + b("key", "=", "petstore"), |
| 255 | + ), |
| 256 | + set: { |
| 257 | + data: { |
| 258 | + ...storedData, |
| 259 | + config: { |
| 260 | + ...storedData.config, |
| 261 | + oauth2: oauth2WithoutAuthorizationUrl, |
| 262 | + }, |
| 263 | + }, |
| 264 | + }, |
| 265 | + }), |
| 266 | + ); |
| 267 | + const sourceAfterLegacyShape = yield* userExec.openapi.getSource( |
| 268 | + "petstore", |
| 269 | + String(userScope.id), |
| 270 | + ); |
| 271 | + expect(sourceAfterLegacyShape?.config.oauth2?.authorizationUrl).toBeNull(); |
| 272 | + |
| 217 | 273 | yield* userExec.sources.setBinding( |
| 218 | 274 | SetSourceCredentialBindingInput.make({ |
| 219 | 275 | source: { id: "petstore", scope: userScope.id }, |