History

Fix Google Photos uploads and MCP HEAD responses (#1428)

* [verified] Fix Google Photos upload endpoint * Preserve MCP HEAD response metadata ---------

saga-agent committed 3 months ago

Commit df01d911 parent 45d020c9 files · +124 −18Browse files

Showing the changes to packages/plugins/openapi/src (2 of 9 files). Show all

Unified · Split

2 files
  1. packages/plugins/openapi/src/providers/google/discovery.test.ts +36 −0
  2. packages/plugins/openapi/src/providers/google/discovery.ts +1 −1
packages/plugins/openapi/src/providers/google/discovery.test.ts+36−0
@@ -491,6 +491,42 @@ it.effect("marks Google Discovery media-download methods as binary responses", ( · 490 unmodified lines
491 }),491 }),
492);492);
493 493
494it.effect("uses the versioned Google Photos raw upload endpoint", () =>
495 Effect.gen(function* () {
496 const result = yield* convertGoogleDiscoveryToOpenApi({
497 discoveryUrl: "https://www.googleapis.com/discovery/v1/apis/photoslibrary/v1/rest",
498 // @effect-diagnostics-next-line preferSchemaOverJson:off
499 documentText: JSON.stringify({
500 name: "photoslibrary",
501 version: "v1",
502 title: "Google Photos Library API",
503 rootUrl: "https://photoslibrary.googleapis.com/",
504 servicePath: "",
505 auth: {
506 oauth2: {
507 scopes: {
508 "https://www.googleapis.com/auth/photoslibrary.appendonly": {
509 description: "Upload to Google Photos",
510 },
511 },
512 },
513 },
514 resources: {},
515 schemas: {},
516 }),
517 });
518
519 const spec = decodeConvertedSpec(result.specText);
520 const upload = spec.paths["/v1/uploads"]?.post;
521 expect(upload).toMatchObject({
522 operationId: "photoslibrary.mediaItems.upload",
523 "x-executor-toolPath": "photoslibrary.mediaItems.upload",
524 "x-executor-pathTemplate": "/v1/uploads",
525 servers: [{ url: "https://photoslibrary.googleapis.com/" }],
526 });
527 }),
528);
529
494it.effect("supplies documented scopes when Picker Discovery omits auth metadata", () =>530it.effect("supplies documented scopes when Picker Discovery omits auth metadata", () =>
495 Effect.gen(function* () {531 Effect.gen(function* () {
496 const result = yield* convertGoogleDiscoveryToOpenApi({532 const result = yield* convertGoogleDiscoveryToOpenApi({
packages/plugins/openapi/src/providers/google/discovery.ts+1−1
@@ -829,7 +829,7 @@ const GOOGLE_OAUTH_SECURITY_SCHEME = "googleOAuth2"; · 828 unmodified lines
829const GOOGLE_PHOTOS_LIBRARY_SERVICE = "photoslibrary";829const GOOGLE_PHOTOS_LIBRARY_SERVICE = "photoslibrary";
830const GOOGLE_PHOTOS_APPENDONLY_SCOPE = "https://www.googleapis.com/auth/photoslibrary.appendonly";830const GOOGLE_PHOTOS_APPENDONLY_SCOPE = "https://www.googleapis.com/auth/photoslibrary.appendonly";
831const GOOGLE_PHOTOS_UPLOAD_TOOL_PATH = "photoslibrary.mediaItems.upload";831const GOOGLE_PHOTOS_UPLOAD_TOOL_PATH = "photoslibrary.mediaItems.upload";
832const GOOGLE_PHOTOS_UPLOAD_PATH = "/uploads";832const GOOGLE_PHOTOS_UPLOAD_PATH = "/v1/uploads";
833 833
834const isGooglePhotosService = (service: string): boolean =>834const isGooglePhotosService = (service: string): boolean =>
835 service === GOOGLE_PHOTOS_LIBRARY_SERVICE || service === GOOGLE_PHOTOS_PICKER_SERVICE;835 service === GOOGLE_PHOTOS_LIBRARY_SERVICE || service === GOOGLE_PHOTOS_PICKER_SERVICE;