久々に見たら"googleapi"も様子が変わってた
1年以上(もしかしたら2年ぐらいかも)間を空けたら、Google APIのNodeクライアントがまるっきり様子が変わってた。前に書いたときは"googleapis": "^23.0.0"ってpackage.jsonに書いてあって、今は"googleapis": "^37.2.0"。23から37ってすごいメジャーの上げ方です。auth周辺からエンドポイントの取得までだけでも、相当様子が変わってる。最新ではTypeScriptにしっかりなってました。前もTypeScriptで書かれてはいたがゴミみたいな型定義だったのです。当時使ってたDrive API v3を例にあげると。
// googleapis/apis/drive/v3.d.ts (23.0.0) declare function Drive(options: any): void; export = Drive; // 本当に2行だけ。
おいおいこれだけかよっていうのが、サーバは変わらず全く同じRest APIを叩くにも関わらず、クライアントは時を経て以下のように変わってます。
// googleapis/build/src/apis/drive/v3.d.ts (37.2.0) // 省略。たくさんimportしてる export declare namespace drive_v3 { // 省略。たくさん型定義している class Drive { about: Resource$About; changes: Resource$Changes; channels: Resource$Channels; comments: Resource$Comments; files: Resource$Files; permissions: Resource$Permissions; replies: Resource$Replies; revisions: Resource$Revisions; teamdrives: Resource$Teamdrives; constructor(options: GlobalOptions, google?: GoogleConfigurable); } // 省略。たくさん型定義している } // 結局、このファイルは2874行もあった。
ということで、23.0.0ではわずか2行だった型定義が37.2.0では2874行と、物量からして違う。型定義が充実しただけでなく、そもそもに呼び方も変わってるので、また一通りドキュメント読まないとなあ。認証認可関連も当然違うので、JWTで入って指定ユーザーになりすます手順なんてのから調べないといけない。で、サンプルもわかりにくくて結局ソースを追った。
import { google } from 'googleapis'; export async function authorizeDrive( email: string, // サービスアカウントのEメール key: string, // 秘密鍵 subject: string, // なりすましたいアカウントのEメール ): Promise<any> { return Promise.resolve(await google.auth.getClient({ clientOptions: { email, key, subject }, scopes: ['https://www.googleapis.com/auth/drive'], })); }
もうちょい、裏取ってみないと。この先も含めてまだ怪しい。