日々是好日

プログラミングについてのあれこれ、ムダ知識など

VSCode 拡張機能開発で OAuth 認証 - 4

VSCode 拡張機能開発で OAuth 認証 - 3 <終> - 日々是好日

この記事の続き。型エイリアスと async/await で、OAuth 認証フローをもっと簡単に記述してみた。 認証には oauth モジュールを使用。

全ソースはこちら↓

github.com

  async startOAuth() {
    ...
    type oauthTokenCallback = {
      err: {
        statusCode: number,
        data?: any
      },
      token: string,
      tokenSecret:
      string, query: any
    };

    const getOAuthRequestToken = (
      scope: {[key: string]: string}
    ) => 
      new Promise<oauthTokenCallback>((resolve) =>
        this.oauth.getOAuthRequestToken(
          scope,
          (err, token, tokenSecret, query) => {
        resolve({err, token, tokenSecret, query});
    }));

    const getOAuthAccessToken = (
      requestToken: string,
      requestTokenSecret: string,
      verifier: string
    ) => 
      new Promise<oauthTokenCallback>((resolve) => 
        this.oauth.getOAuthAccessToken(
          requestToken,
          requestTokenSecret,
          verifier,
          (err, token, tokenSecret, query) => {
      resolve({err, token, tokenSecret, query});
    }));

    try {
      const _requestTokenResult = getOAuthRequestToken({
        'scope': ...
      });
      const _rk = this.getRK();

      const requestTokenResult = await _requestTokenResult;
      const rk = (await _rk) as string;
      const rkm = ...
      const verifier = ...

      const accessTokenResult =
        await getOAuthAccessToken(
          requestTokenResult.token,
          requestTokenResult.tokenSecret,
          (await verifier) as string
        );

      console.log(">>>Congraturations!!<<<");
      ...
    } catch (reason) {
      console.log(reason);
      ...
    }
  }

エイリアスとしてoauthTokenCallbackを定義し、 Promiseのコールバックの型として設定する。

あとはtryでかなり大きく囲むのがちょっと気になったけど、 Promise#thenでチェーンするときと同じかと思うと気にならなくなった。