From ce8fe5db5b97943bcf31940c4b459718a09af6a8 Mon Sep 17 00:00:00 2001 From: nagaya Date: Tue, 4 Jul 2023 18:36:44 +0900 Subject: [PATCH 1/2] Get version from package json --- src/commands/version.ts | 14 ++------------ src/lib/package-settings.ts | 6 ++++++ 2 files changed, 8 insertions(+), 12 deletions(-) create mode 100644 src/lib/package-settings.ts diff --git a/src/commands/version.ts b/src/commands/version.ts index 29f153d..5cacb73 100644 --- a/src/commands/version.ts +++ b/src/commands/version.ts @@ -1,15 +1,5 @@ -import fs from "node:fs/promises"; -import path from "node:path"; - -const packageJsonFilePath = path.join(__dirname, "../../package.json"); +import { PackageSettings } from "../lib/package-settings"; export const version = async () => { - const data = await fs.readFile(packageJsonFilePath, { encoding: "utf8" }); - const { version } = JSON.parse(data); - - if (!version) { - throw new Error("Error: version is not found"); - } - - console.log(version); + console.log(PackageSettings.version); }; diff --git a/src/lib/package-settings.ts b/src/lib/package-settings.ts new file mode 100644 index 0000000..7d39b13 --- /dev/null +++ b/src/lib/package-settings.ts @@ -0,0 +1,6 @@ +const packageJsonData = require("../../package.json"); + +export const PackageSettings = { + userAgentName: "QiitaCLI", + version: packageJsonData.version, +}; From 4d65ae00ebf64f6935bd4d68bbb728efc9ec5a34 Mon Sep 17 00:00:00 2001 From: nagaya Date: Tue, 4 Jul 2023 16:51:00 +0900 Subject: [PATCH 2/2] Change user agent --- src/commands/login.ts | 5 ++--- src/commands/preview.ts | 7 ++----- src/commands/publish.ts | 7 ++----- src/commands/pull.ts | 7 ++----- src/lib/get-qiita-api-instance.ts | 22 ++++++++++++++++++++++ src/qiita-api/index.ts | 12 +++++++++++- src/server/api/items.ts | 7 +++---- src/server/api/readme.ts | 4 ++-- src/server/lib/get-current-user.ts | 4 ++-- 9 files changed, 48 insertions(+), 27 deletions(-) create mode 100644 src/lib/get-qiita-api-instance.ts diff --git a/src/commands/login.ts b/src/commands/login.ts index 8d59bb8..cc1bc1d 100644 --- a/src/commands/login.ts +++ b/src/commands/login.ts @@ -2,6 +2,7 @@ import arg from "arg"; import process from "node:process"; import readline from "node:readline/promises"; import { config } from "../lib/config"; +import { getQiitaApiInstance } from "../lib/get-qiita-api-instance"; import { QiitaApi } from "../qiita-api"; export const login = async (argv: string[]) => { @@ -15,9 +16,7 @@ export const login = async (argv: string[]) => { const token = await rl.question("Enter your token: "); rl.close(); - const qiitaApi = new QiitaApi({ - token, - }); + const qiitaApi = await getQiitaApiInstance({ token }); const currentUser = await qiitaApi.authenticatedUser(); await config.setCredential({ diff --git a/src/commands/preview.ts b/src/commands/preview.ts index 3167618..7e7d781 100644 --- a/src/commands/preview.ts +++ b/src/commands/preview.ts @@ -1,6 +1,7 @@ import arg from "arg"; import { config } from "../lib/config"; import { getFileSystemRepo } from "../lib/get-file-system-repo"; +import { getQiitaApiInstance } from "../lib/get-qiita-api-instance"; import { syncArticlesFromQiita } from "../lib/sync-articles-from-qiita"; import { QiitaApi } from "../qiita-api"; import { startLocalChangeWatcher, startServer } from "../server/app"; @@ -8,11 +9,7 @@ import { startLocalChangeWatcher, startServer } from "../server/app"; export const preview = async (argv: string[]) => { const args = arg({}, { argv }); - const { accessToken } = await config.getCredential(); - - const qiitaApi = new QiitaApi({ - token: accessToken, - }); + const qiitaApi = await getQiitaApiInstance(); const fileSystemRepo = await getFileSystemRepo(); await syncArticlesFromQiita({ fileSystemRepo, qiitaApi }); diff --git a/src/commands/publish.ts b/src/commands/publish.ts index d1eb977..1d2be75 100644 --- a/src/commands/publish.ts +++ b/src/commands/publish.ts @@ -3,6 +3,7 @@ import process from "node:process"; import { config } from "../lib/config"; import { QiitaItem } from "../lib/entities/qiita-item"; import { getFileSystemRepo } from "../lib/get-file-system-repo"; +import { getQiitaApiInstance } from "../lib/get-qiita-api-instance"; import { syncArticlesFromQiita } from "../lib/sync-articles-from-qiita"; import { validateItem } from "../lib/validators/item-validator"; import { Item, QiitaApi } from "../qiita-api"; @@ -15,11 +16,7 @@ export const publish = async (argv: string[]) => { { argv } ); - const { accessToken } = await config.getCredential(); - - const qiitaApi = new QiitaApi({ - token: accessToken, - }); + const qiitaApi = await getQiitaApiInstance(); const fileSystemRepo = await getFileSystemRepo(); await syncArticlesFromQiita({ fileSystemRepo, qiitaApi }); diff --git a/src/commands/pull.ts b/src/commands/pull.ts index 6644e23..24a3a73 100644 --- a/src/commands/pull.ts +++ b/src/commands/pull.ts @@ -1,6 +1,7 @@ import arg from "arg"; import { config } from "../lib/config"; import { getFileSystemRepo } from "../lib/get-file-system-repo"; +import { getQiitaApiInstance } from "../lib/get-qiita-api-instance"; import { syncArticlesFromQiita } from "../lib/sync-articles-from-qiita"; import { QiitaApi } from "../qiita-api"; import { startLocalChangeWatcher, startServer } from "../server/app"; @@ -8,11 +9,7 @@ import { startLocalChangeWatcher, startServer } from "../server/app"; export const pull = async (argv: string[]) => { const args = arg({}, { argv }); - const { accessToken } = await config.getCredential(); - - const qiitaApi = new QiitaApi({ - token: accessToken, - }); + const qiitaApi = await getQiitaApiInstance(); const fileSystemRepo = await getFileSystemRepo(); await syncArticlesFromQiita({ fileSystemRepo, qiitaApi }); diff --git a/src/lib/get-qiita-api-instance.ts b/src/lib/get-qiita-api-instance.ts new file mode 100644 index 0000000..221263b --- /dev/null +++ b/src/lib/get-qiita-api-instance.ts @@ -0,0 +1,22 @@ +import { QiitaApi } from "../qiita-api"; +import { config } from "./config"; +import { PackageSettings } from "./package-settings"; + +let qiitaApi: QiitaApi; + +export const getQiitaApiInstance = async (options?: { token?: string }) => { + if (!qiitaApi) { + qiitaApi = new QiitaApi({ + token: await accessToken(options), + userAgent: userAgent(), + }); + } + return qiitaApi; +}; + +const accessToken = async (options?: { token?: string }) => + options?.token ?? (await config.getCredential()).accessToken; + +const userAgent = () => { + return `${PackageSettings.userAgentName}/${PackageSettings.version}`; +}; diff --git a/src/qiita-api/index.ts b/src/qiita-api/index.ts index 885a2b0..1187b95 100644 --- a/src/qiita-api/index.ts +++ b/src/qiita-api/index.ts @@ -17,9 +17,18 @@ export interface Item { export class QiitaApi { private readonly token: string; + private readonly userAgent: string; - constructor({ token }: { token: string }) { + static agentName = "QiitaApi"; + static version = "0.0.1"; + + constructor({ token, userAgent }: { token: string; userAgent?: string }) { this.token = token; + this.userAgent = userAgent ? userAgent : QiitaApi.defaultUserAgent(); + } + + static defaultUserAgent() { + return `${QiitaApi.agentName}/${QiitaApi.version}`; } private getUrlScheme() { @@ -49,6 +58,7 @@ export class QiitaApi { headers: { Authorization: `Bearer ${this.token}`, "Content-Type": "application/json", + "User-Agent": this.userAgent, }, ...options, }); diff --git a/src/server/api/items.ts b/src/server/api/items.ts index 8be58e4..3fdd2bc 100644 --- a/src/server/api/items.ts +++ b/src/server/api/items.ts @@ -2,6 +2,7 @@ import type Express from "express"; import { Router } from "express"; import { config } from "../../lib/config"; import { getFileSystemRepo } from "../../lib/get-file-system-repo"; +import { getQiitaApiInstance } from "../../lib/get-qiita-api-instance"; import { itemsShowPath } from "../../lib/qiita-cli-url"; import { validateItem } from "../../lib/validators/item-validator"; import type { @@ -79,8 +80,7 @@ const itemsShow = async (req: Express.Request, res: Express.Response) => { // const { data, itemPath, modified, published } = ; const { itemPath, modified, published } = item; - const { accessToken } = await config.getCredential(); - const qiitaApi = new QiitaApi({ token: accessToken }); + const qiitaApi = await getQiitaApiInstance(); const renderedBody = await qiitaApi.preview(item.rawBody); const currentUser = await getCurrentUser(); @@ -139,8 +139,7 @@ const itemsUpdate = async (req: Express.Request, res: Express.Response) => { return; } - const { accessToken } = await config.getCredential(); - const qiitaApi = new QiitaApi({ token: accessToken }); + const qiitaApi = await getQiitaApiInstance(); let output: { [key: string]: string | boolean } = { success: true, uuid: result.id || "", diff --git a/src/server/api/readme.ts b/src/server/api/readme.ts index cca6a5d..710325d 100644 --- a/src/server/api/readme.ts +++ b/src/server/api/readme.ts @@ -3,6 +3,7 @@ import { Router } from "express"; import fs from "node:fs/promises"; import path from "node:path"; import { config } from "../../lib/config"; +import { getQiitaApiInstance } from "../../lib/get-qiita-api-instance"; import { QiitaApi } from "../../qiita-api"; const readmeIndex = async (req: Express.Request, res: Express.Response) => { @@ -11,8 +12,7 @@ const readmeIndex = async (req: Express.Request, res: Express.Response) => { path.join(path.resolve(__dirname), "../../../", "README.md"), { encoding: "utf8" } ); - const { accessToken } = await config.getCredential(); - const qiitaApi = new QiitaApi({ token: accessToken }); + const qiitaApi = await getQiitaApiInstance(); const renderedBody = await qiitaApi.preview(fileContent); res.json({ diff --git a/src/server/lib/get-current-user.ts b/src/server/lib/get-current-user.ts index cb080c1..efe199e 100644 --- a/src/server/lib/get-current-user.ts +++ b/src/server/lib/get-current-user.ts @@ -1,4 +1,5 @@ import { config } from "../../lib/config"; +import { getQiitaApiInstance } from "../../lib/get-qiita-api-instance"; import { QiitaApi } from "../../qiita-api"; let currentUser: { id: string } | undefined; @@ -8,8 +9,7 @@ export const getCurrentUser = async () => { return currentUser; } - const { accessToken } = await config.getCredential(); - const qiitaApi = new QiitaApi({ token: accessToken }); + const qiitaApi = await getQiitaApiInstance(); currentUser = await qiitaApi.authenticatedUser(); return currentUser;