久々に見たら"googleapi"も様子が変わってた

github.com

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'],
    }));
}

もうちょい、裏取ってみないと。この先も含めてまだ怪しい。