Skip to content

Commit c99ed61

Browse files
authored
Merge pull request #15 from increments/change-user-agent
API リクエスト時に UserAgent を設定した
2 parents 97328f9 + 4d65ae0 commit c99ed61

File tree

11 files changed

+56
-39
lines changed

11 files changed

+56
-39
lines changed

src/commands/login.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import arg from "arg";
22
import process from "node:process";
33
import readline from "node:readline/promises";
44
import { config } from "../lib/config";
5+
import { getQiitaApiInstance } from "../lib/get-qiita-api-instance";
56
import { QiitaApi } from "../qiita-api";
67

78
export const login = async (argv: string[]) => {
@@ -15,9 +16,7 @@ export const login = async (argv: string[]) => {
1516
const token = await rl.question("Enter your token: ");
1617
rl.close();
1718

18-
const qiitaApi = new QiitaApi({
19-
token,
20-
});
19+
const qiitaApi = await getQiitaApiInstance({ token });
2120
const currentUser = await qiitaApi.authenticatedUser();
2221

2322
await config.setCredential({

src/commands/preview.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,15 @@
11
import arg from "arg";
22
import { config } from "../lib/config";
33
import { getFileSystemRepo } from "../lib/get-file-system-repo";
4+
import { getQiitaApiInstance } from "../lib/get-qiita-api-instance";
45
import { syncArticlesFromQiita } from "../lib/sync-articles-from-qiita";
56
import { QiitaApi } from "../qiita-api";
67
import { startLocalChangeWatcher, startServer } from "../server/app";
78

89
export const preview = async (argv: string[]) => {
910
const args = arg({}, { argv });
1011

11-
const { accessToken } = await config.getCredential();
12-
13-
const qiitaApi = new QiitaApi({
14-
token: accessToken,
15-
});
12+
const qiitaApi = await getQiitaApiInstance();
1613
const fileSystemRepo = await getFileSystemRepo();
1714

1815
await syncArticlesFromQiita({ fileSystemRepo, qiitaApi });

src/commands/publish.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { checkFrontmatterType } from "../lib/check-frontmatter-type";
44
import { config } from "../lib/config";
55
import { QiitaItem } from "../lib/entities/qiita-item";
66
import { getFileSystemRepo } from "../lib/get-file-system-repo";
7+
import { getQiitaApiInstance } from "../lib/get-qiita-api-instance";
78
import { syncArticlesFromQiita } from "../lib/sync-articles-from-qiita";
89
import { validateItem } from "../lib/validators/item-validator";
910
import { Item, QiitaApi } from "../qiita-api";
@@ -16,11 +17,7 @@ export const publish = async (argv: string[]) => {
1617
{ argv }
1718
);
1819

19-
const { accessToken } = await config.getCredential();
20-
21-
const qiitaApi = new QiitaApi({
22-
token: accessToken,
23-
});
20+
const qiitaApi = await getQiitaApiInstance();
2421
const fileSystemRepo = await getFileSystemRepo();
2522

2623
await syncArticlesFromQiita({ fileSystemRepo, qiitaApi });

src/commands/pull.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,15 @@
11
import arg from "arg";
22
import { config } from "../lib/config";
33
import { getFileSystemRepo } from "../lib/get-file-system-repo";
4+
import { getQiitaApiInstance } from "../lib/get-qiita-api-instance";
45
import { syncArticlesFromQiita } from "../lib/sync-articles-from-qiita";
56
import { QiitaApi } from "../qiita-api";
67
import { startLocalChangeWatcher, startServer } from "../server/app";
78

89
export const pull = async (argv: string[]) => {
910
const args = arg({}, { argv });
1011

11-
const { accessToken } = await config.getCredential();
12-
13-
const qiitaApi = new QiitaApi({
14-
token: accessToken,
15-
});
12+
const qiitaApi = await getQiitaApiInstance();
1613
const fileSystemRepo = await getFileSystemRepo();
1714

1815
await syncArticlesFromQiita({ fileSystemRepo, qiitaApi });

src/commands/version.ts

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,5 @@
1-
import fs from "node:fs/promises";
2-
import path from "node:path";
3-
4-
const packageJsonFilePath = path.join(__dirname, "../../package.json");
1+
import { PackageSettings } from "../lib/package-settings";
52

63
export const version = async () => {
7-
const data = await fs.readFile(packageJsonFilePath, { encoding: "utf8" });
8-
const { version } = JSON.parse(data);
9-
10-
if (!version) {
11-
throw new Error("Error: version is not found");
12-
}
13-
14-
console.log(version);
4+
console.log(PackageSettings.version);
155
};

src/lib/get-qiita-api-instance.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { QiitaApi } from "../qiita-api";
2+
import { config } from "./config";
3+
import { PackageSettings } from "./package-settings";
4+
5+
let qiitaApi: QiitaApi;
6+
7+
export const getQiitaApiInstance = async (options?: { token?: string }) => {
8+
if (!qiitaApi) {
9+
qiitaApi = new QiitaApi({
10+
token: await accessToken(options),
11+
userAgent: userAgent(),
12+
});
13+
}
14+
return qiitaApi;
15+
};
16+
17+
const accessToken = async (options?: { token?: string }) =>
18+
options?.token ?? (await config.getCredential()).accessToken;
19+
20+
const userAgent = () => {
21+
return `${PackageSettings.userAgentName}/${PackageSettings.version}`;
22+
};

src/lib/package-settings.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
const packageJsonData = require("../../package.json");
2+
3+
export const PackageSettings = {
4+
userAgentName: "QiitaCLI",
5+
version: packageJsonData.version,
6+
};

src/qiita-api/index.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,18 @@ export interface Item {
1717

1818
export class QiitaApi {
1919
private readonly token: string;
20+
private readonly userAgent: string;
2021

21-
constructor({ token }: { token: string }) {
22+
static agentName = "QiitaApi";
23+
static version = "0.0.1";
24+
25+
constructor({ token, userAgent }: { token: string; userAgent?: string }) {
2226
this.token = token;
27+
this.userAgent = userAgent ? userAgent : QiitaApi.defaultUserAgent();
28+
}
29+
30+
static defaultUserAgent() {
31+
return `${QiitaApi.agentName}/${QiitaApi.version}`;
2332
}
2433

2534
private getUrlScheme() {
@@ -49,6 +58,7 @@ export class QiitaApi {
4958
headers: {
5059
Authorization: `Bearer ${this.token}`,
5160
"Content-Type": "application/json",
61+
"User-Agent": this.userAgent,
5262
},
5363
...options,
5464
});

src/server/api/items.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import type Express from "express";
22
import { Router } from "express";
33
import { config } from "../../lib/config";
44
import { getFileSystemRepo } from "../../lib/get-file-system-repo";
5+
import { getQiitaApiInstance } from "../../lib/get-qiita-api-instance";
56
import { itemsShowPath } from "../../lib/qiita-cli-url";
67
import { validateItem } from "../../lib/validators/item-validator";
78
import type {
@@ -79,8 +80,7 @@ const itemsShow = async (req: Express.Request, res: Express.Response) => {
7980
// const { data, itemPath, modified, published } = ;
8081
const { itemPath, modified, published } = item;
8182

82-
const { accessToken } = await config.getCredential();
83-
const qiitaApi = new QiitaApi({ token: accessToken });
83+
const qiitaApi = await getQiitaApiInstance();
8484
const renderedBody = await qiitaApi.preview(item.rawBody);
8585

8686
const currentUser = await getCurrentUser();
@@ -139,8 +139,7 @@ const itemsUpdate = async (req: Express.Request, res: Express.Response) => {
139139
return;
140140
}
141141

142-
const { accessToken } = await config.getCredential();
143-
const qiitaApi = new QiitaApi({ token: accessToken });
142+
const qiitaApi = await getQiitaApiInstance();
144143
let output: { [key: string]: string | boolean } = {
145144
success: true,
146145
uuid: result.id || "",

src/server/api/readme.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { Router } from "express";
33
import fs from "node:fs/promises";
44
import path from "node:path";
55
import { config } from "../../lib/config";
6+
import { getQiitaApiInstance } from "../../lib/get-qiita-api-instance";
67
import { QiitaApi } from "../../qiita-api";
78

89
const readmeIndex = async (req: Express.Request, res: Express.Response) => {
@@ -11,8 +12,7 @@ const readmeIndex = async (req: Express.Request, res: Express.Response) => {
1112
path.join(path.resolve(__dirname), "../../../", "README.md"),
1213
{ encoding: "utf8" }
1314
);
14-
const { accessToken } = await config.getCredential();
15-
const qiitaApi = new QiitaApi({ token: accessToken });
15+
const qiitaApi = await getQiitaApiInstance();
1616
const renderedBody = await qiitaApi.preview(fileContent);
1717

1818
res.json({

src/server/lib/get-current-user.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { config } from "../../lib/config";
2+
import { getQiitaApiInstance } from "../../lib/get-qiita-api-instance";
23
import { QiitaApi } from "../../qiita-api";
34

45
let currentUser: { id: string } | undefined;
@@ -8,8 +9,7 @@ export const getCurrentUser = async () => {
89
return currentUser;
910
}
1011

11-
const { accessToken } = await config.getCredential();
12-
const qiitaApi = new QiitaApi({ token: accessToken });
12+
const qiitaApi = await getQiitaApiInstance();
1313
currentUser = await qiitaApi.authenticatedUser();
1414

1515
return currentUser;

0 commit comments

Comments
 (0)