@ukwhatn/wikidot 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/dist/common/decorators.d.ts +0 -0
  2. package/dist/common/decorators.js +2 -0
  3. package/dist/common/decorators.js.map +1 -0
  4. package/dist/common/exceptions.d.ts +95 -0
  5. package/dist/common/exceptions.js +146 -0
  6. package/dist/common/exceptions.js.map +1 -0
  7. package/dist/common/index.d.ts +1 -0
  8. package/dist/common/index.js +6 -0
  9. package/dist/common/index.js.map +1 -0
  10. package/dist/common/logger.d.ts +2 -0
  11. package/dist/common/logger.js +19 -0
  12. package/dist/common/logger.js.map +1 -0
  13. package/dist/connector/ajax.d.ts +142 -0
  14. package/dist/connector/ajax.js +259 -0
  15. package/dist/connector/ajax.js.map +1 -0
  16. package/dist/connector/api.d.ts +11 -0
  17. package/dist/connector/api.js +17 -0
  18. package/dist/connector/api.js.map +1 -0
  19. package/dist/connector/index.d.ts +0 -0
  20. package/dist/connector/index.js +2 -0
  21. package/dist/connector/index.js.map +1 -0
  22. package/dist/index.d.ts +0 -0
  23. package/dist/index.js +2 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/module/auth.d.ts +8 -0
  26. package/dist/module/auth.js +77 -0
  27. package/dist/module/auth.js.map +1 -0
  28. package/dist/module/client.d.ts +39 -0
  29. package/dist/module/client.js +97 -0
  30. package/dist/module/client.js.map +1 -0
  31. package/dist/module/index.d.ts +0 -0
  32. package/dist/module/index.js +2 -0
  33. package/dist/module/index.js.map +1 -0
  34. package/dist/module/page.d.ts +81 -0
  35. package/dist/module/page.js +267 -0
  36. package/dist/module/page.js.map +1 -0
  37. package/dist/module/privateMessage.d.ts +29 -0
  38. package/dist/module/privateMessage.js +128 -0
  39. package/dist/module/privateMessage.js.map +1 -0
  40. package/dist/module/site.d.ts +32 -0
  41. package/dist/module/site.js +115 -0
  42. package/dist/module/site.js.map +1 -0
  43. package/dist/module/siteApplication.d.ts +14 -0
  44. package/dist/module/siteApplication.js +96 -0
  45. package/dist/module/siteApplication.js.map +1 -0
  46. package/dist/module/user.d.ts +56 -0
  47. package/dist/module/user.js +115 -0
  48. package/dist/module/user.js.map +1 -0
  49. package/dist/util/index.d.ts +3 -0
  50. package/dist/util/index.js +10 -0
  51. package/dist/util/index.js.map +1 -0
  52. package/dist/util/parser/index.d.ts +1 -0
  53. package/dist/util/parser/index.js +18 -0
  54. package/dist/util/parser/index.js.map +1 -0
  55. package/dist/util/parser/odate.d.ts +12 -0
  56. package/dist/util/parser/odate.js +25 -0
  57. package/dist/util/parser/odate.js.map +1 -0
  58. package/dist/util/parser/user.d.ts +16 -0
  59. package/dist/util/parser/user.js +36 -0
  60. package/dist/util/parser/user.js.map +1 -0
  61. package/dist/util/quickModule.d.ts +96 -0
  62. package/dist/util/quickModule.js +137 -0
  63. package/dist/util/quickModule.js.map +1 -0
  64. package/dist/util/requestUtil.d.ts +26 -0
  65. package/dist/util/requestUtil.js +69 -0
  66. package/dist/util/requestUtil.js.map +1 -0
  67. package/dist/util/stringUtil.d.ts +20 -0
  68. package/dist/util/stringUtil.js +47 -0
  69. package/dist/util/stringUtil.js.map +1 -0
  70. package/dist/util/table/charTable.d.ts +3 -0
  71. package/dist/util/table/charTable.js +472 -0
  72. package/dist/util/table/charTable.js.map +1 -0
  73. package/dist/util/table/index.d.ts +1 -0
  74. package/dist/util/table/index.js +18 -0
  75. package/dist/util/table/index.js.map +1 -0
  76. package/package.json +27 -0
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.SiteApplication = void 0;
27
+ const exceptions_1 = require("../common/exceptions");
28
+ const user_1 = require("../util/parser/user");
29
+ const cheerio = __importStar(require("cheerio"));
30
+ class SiteApplication {
31
+ constructor(site, user, text) {
32
+ this.site = site;
33
+ this.user = user;
34
+ this.text = text;
35
+ }
36
+ toString() {
37
+ return `SiteApplication(user=${this.user}, site=${this.site}, text=${this.text})`;
38
+ }
39
+ static async acquireAll(site) {
40
+ site.client.loginCheck();
41
+ const response = (await site.amcRequest([{
42
+ moduleName: 'managesite/ManageSiteMembersApplicationsModule'
43
+ }]))[0];
44
+ const body = response.data.body;
45
+ if (body.includes('WIKIDOT.page.listeners.loginClick(event)')) {
46
+ throw new exceptions_1.ForbiddenException('You are not allowed to access this page');
47
+ }
48
+ const html = cheerio.load(body);
49
+ const applications = [];
50
+ const userElements = html('h3 span.printuser');
51
+ const textWrapperElements = html('table');
52
+ if (userElements.length !== textWrapperElements.length) {
53
+ throw new exceptions_1.UnexpectedException('Length of userElements and textWrapperElements are different');
54
+ }
55
+ for (let i = 0; i < userElements.length; i++) {
56
+ const userElement = userElements.eq(i);
57
+ const textWrapperElement = textWrapperElements.eq(i);
58
+ const user = (0, user_1.userParse)(site.client, userElement);
59
+ const text = textWrapperElement.find('td').eq(1).text().trim();
60
+ applications.push(new SiteApplication(site, user, text));
61
+ }
62
+ return applications;
63
+ }
64
+ async _process(action) {
65
+ this.site.client.loginCheck();
66
+ if (action !== 'accept' && action !== 'decline') {
67
+ throw new Error(`Invalid action: ${action}`);
68
+ }
69
+ try {
70
+ await this.site.amcRequest([{
71
+ action: 'ManageSiteMembershipAction',
72
+ event: 'acceptApplication',
73
+ user_id: this.user.id,
74
+ text: `your application has been ${action}ed`,
75
+ type: action,
76
+ moduleName: 'Empty'
77
+ }]);
78
+ }
79
+ catch (error) {
80
+ if (error instanceof exceptions_1.WikidotStatusCodeException && error.statusCode === 'no_application') {
81
+ throw new exceptions_1.NotFoundException(`Application not found: ${this.user}`);
82
+ }
83
+ else {
84
+ throw error;
85
+ }
86
+ }
87
+ }
88
+ async accept() {
89
+ await this._process('accept');
90
+ }
91
+ async decline() {
92
+ await this._process('decline');
93
+ }
94
+ }
95
+ exports.SiteApplication = SiteApplication;
96
+ //# sourceMappingURL=siteApplication.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"siteApplication.js","sourceRoot":"","sources":["../../src/module/siteApplication.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import { Client } from './client';
2
+ /**
3
+ * @class UserCollection
4
+ * @extends Array
5
+ * @description ユーザーオブジェクトのリスト
6
+ */
7
+ declare class UserCollection extends Array<User | null> {
8
+ /**
9
+ * @method fromNames
10
+ * @description ユーザー名のリストからユーザーオブジェクトのリストを取得
11
+ * @param client - クライアント
12
+ * @param names - ユーザー名のリスト
13
+ * @param raiseWhenNotFound - ユーザーが見つからなかった場合に例外を発生させるかどうか(デフォルトは false)
14
+ */
15
+ static fromNames(client: Client, names: string[], raiseWhenNotFound?: boolean): Promise<UserCollection>;
16
+ }
17
+ declare abstract class AbstractUser {
18
+ client: Client;
19
+ id: number | null;
20
+ name: string | null;
21
+ unixName: string | null;
22
+ avatarUrl: string | null;
23
+ ip: string | null;
24
+ constructor(client: Client, id?: number | null, name?: string | null, unixName?: string | null, avatarUrl?: string | null, ip?: string | null);
25
+ toString(): string;
26
+ }
27
+ declare class User extends AbstractUser {
28
+ ip: null;
29
+ static fromName(client: Client, name: string, raiseWhenNotFound?: boolean): Promise<User | null>;
30
+ }
31
+ declare class DeletedUser extends AbstractUser {
32
+ name: string;
33
+ unixName: string;
34
+ avatarUrl: null;
35
+ ip: null;
36
+ }
37
+ declare class AnonymousUser extends AbstractUser {
38
+ id: null;
39
+ name: string;
40
+ unixName: string;
41
+ avatarUrl: null;
42
+ }
43
+ declare class GuestUser extends AbstractUser {
44
+ id: null;
45
+ unixName: null;
46
+ avatarUrl: null;
47
+ ip: null;
48
+ }
49
+ declare class WikidotUser extends AbstractUser {
50
+ id: null;
51
+ name: string;
52
+ unixName: string;
53
+ avatarUrl: null;
54
+ ip: null;
55
+ }
56
+ export { UserCollection, AbstractUser, User, DeletedUser, AnonymousUser, GuestUser, WikidotUser };
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WikidotUser = exports.GuestUser = exports.AnonymousUser = exports.DeletedUser = exports.User = exports.AbstractUser = exports.UserCollection = void 0;
4
+ const exceptions_1 = require("../common/exceptions");
5
+ const util_1 = require("../util");
6
+ const cheerio_1 = require("cheerio");
7
+ /**
8
+ * @class UserCollection
9
+ * @extends Array
10
+ * @description ユーザーオブジェクトのリスト
11
+ */
12
+ class UserCollection extends Array {
13
+ /**
14
+ * @method fromNames
15
+ * @description ユーザー名のリストからユーザーオブジェクトのリストを取得
16
+ * @param client - クライアント
17
+ * @param names - ユーザー名のリスト
18
+ * @param raiseWhenNotFound - ユーザーが見つからなかった場合に例外を発生させるかどうか(デフォルトは false)
19
+ */
20
+ static async fromNames(client, names, raiseWhenNotFound = false) {
21
+ const responses = await util_1.RequestUtil.request(client, 'GET', names.map(name => `https://www.wikidot.com/user:info/${util_1.StringUtil.toUnix(name)}`));
22
+ const users = [];
23
+ for (const response of responses) {
24
+ if (response instanceof Error) {
25
+ throw response;
26
+ }
27
+ const html = (0, cheerio_1.load)(response.data);
28
+ // Check if user exists
29
+ if (html('div.error-block').length > 0) {
30
+ if (raiseWhenNotFound) {
31
+ throw new exceptions_1.NotFoundException(`User not found: ${response.config.url}`);
32
+ }
33
+ else {
34
+ users.push(null);
35
+ continue;
36
+ }
37
+ }
38
+ // Get user ID
39
+ const userId = Number(html('a.btn.btn-default.btn-xs').attr('href')?.split('/')?.pop());
40
+ // Get user name
41
+ const name = html('h1.profile-title').text().trim();
42
+ // Get avatar URL
43
+ const avatarUrl = `https://www.wikidot.com/avatar.php?userid=${userId}`;
44
+ users.push(new User(client, userId, name, util_1.StringUtil.toUnix(name), avatarUrl));
45
+ }
46
+ return new UserCollection(...users);
47
+ }
48
+ }
49
+ exports.UserCollection = UserCollection;
50
+ class AbstractUser {
51
+ constructor(client, id = null, name = null, unixName = null, avatarUrl = null, ip = null) {
52
+ this.client = client;
53
+ this.id = id;
54
+ this.name = name;
55
+ this.unixName = unixName;
56
+ this.avatarUrl = avatarUrl;
57
+ this.ip = ip;
58
+ }
59
+ toString() {
60
+ return `${this.constructor.name}(id=${this.id}, name=${this.name}, unixName=${this.unixName})`;
61
+ }
62
+ }
63
+ exports.AbstractUser = AbstractUser;
64
+ class User extends AbstractUser {
65
+ constructor() {
66
+ super(...arguments);
67
+ this.ip = null;
68
+ }
69
+ static async fromName(client, name, raiseWhenNotFound = false) {
70
+ return (await UserCollection.fromNames(client, [name], raiseWhenNotFound))[0];
71
+ }
72
+ }
73
+ exports.User = User;
74
+ class DeletedUser extends AbstractUser {
75
+ constructor() {
76
+ super(...arguments);
77
+ this.name = "account deleted";
78
+ this.unixName = "account_deleted";
79
+ this.avatarUrl = null;
80
+ this.ip = null;
81
+ }
82
+ }
83
+ exports.DeletedUser = DeletedUser;
84
+ class AnonymousUser extends AbstractUser {
85
+ constructor() {
86
+ super(...arguments);
87
+ this.id = null;
88
+ this.name = "Anonymous";
89
+ this.unixName = "anonymous";
90
+ this.avatarUrl = null;
91
+ }
92
+ }
93
+ exports.AnonymousUser = AnonymousUser;
94
+ class GuestUser extends AbstractUser {
95
+ constructor() {
96
+ super(...arguments);
97
+ this.id = null;
98
+ this.unixName = null;
99
+ this.avatarUrl = null;
100
+ this.ip = null;
101
+ }
102
+ }
103
+ exports.GuestUser = GuestUser;
104
+ class WikidotUser extends AbstractUser {
105
+ constructor() {
106
+ super(...arguments);
107
+ this.id = null;
108
+ this.name = "Wikidot";
109
+ this.unixName = "wikidot";
110
+ this.avatarUrl = null;
111
+ this.ip = null;
112
+ }
113
+ }
114
+ exports.WikidotUser = WikidotUser;
115
+ //# sourceMappingURL=user.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.js","sourceRoot":"","sources":["../../src/module/user.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { StringUtil } from './stringUtil';
2
+ export { RequestUtil } from './requestUtil';
3
+ export { QuickModule } from './quickModule';
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QuickModule = exports.RequestUtil = exports.StringUtil = void 0;
4
+ var stringUtil_1 = require("./stringUtil");
5
+ Object.defineProperty(exports, "StringUtil", { enumerable: true, get: function () { return stringUtil_1.StringUtil; } });
6
+ var requestUtil_1 = require("./requestUtil");
7
+ Object.defineProperty(exports, "RequestUtil", { enumerable: true, get: function () { return requestUtil_1.RequestUtil; } });
8
+ var quickModule_1 = require("./quickModule");
9
+ Object.defineProperty(exports, "QuickModule", { enumerable: true, get: function () { return quickModule_1.QuickModule; } });
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":";;;AAAA,2CAAwC;AAAhC,wGAAA,UAAU,OAAA;AAClB,6CAA0C;AAAlC,0GAAA,WAAW,OAAA;AACnB,6CAA0C;AAAlC,0GAAA,WAAW,OAAA"}
@@ -0,0 +1 @@
1
+ export * from "./odate";
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./odate"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/util/parser/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAuB"}
@@ -0,0 +1,12 @@
1
+ import { Cheerio } from 'cheerio';
2
+ /**
3
+ * @method odateParse
4
+ * @description odate要素を解析し、unix時間を返す
5
+ * @param odateElement
6
+ * @returns unix時間
7
+ * @version 1.0.0
8
+ * @since 1.0.0
9
+ * @public
10
+ * @exports
11
+ */
12
+ export declare const odateParse: (odateElement: Cheerio<any>) => Date;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.odateParse = void 0;
4
+ /**
5
+ * @method odateParse
6
+ * @description odate要素を解析し、unix時間を返す
7
+ * @param odateElement
8
+ * @returns unix時間
9
+ * @version 1.0.0
10
+ * @since 1.0.0
11
+ * @public
12
+ * @exports
13
+ */
14
+ const odateParse = (odateElement) => {
15
+ const odateClasses = odateElement.attr("class")?.split(" ") || [];
16
+ for (const odateClass of odateClasses) {
17
+ if (odateClass.startsWith('time_')) {
18
+ const unixTime = parseInt(odateClass.replace('time_', ''), 10);
19
+ return new Date(unixTime * 1000);
20
+ }
21
+ }
22
+ throw new Error('odate element does not contain a valid unix time');
23
+ };
24
+ exports.odateParse = odateParse;
25
+ //# sourceMappingURL=odate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"odate.js","sourceRoot":"","sources":["../../../src/util/parser/odate.ts"],"names":[],"mappings":";;;AAEA;;;;;;;;;GASG;AACI,MAAM,UAAU,GAAG,CAAC,YAA0B,EAAQ,EAAE;IAC3D,MAAM,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IAClE,KAAK,MAAM,UAAU,IAAI,YAAY,EAAE,CAAC;QACpC,IAAI,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAC/D,OAAO,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;QACrC,CAAC;IACL,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;AACxE,CAAC,CAAC;AAVW,QAAA,UAAU,cAUrB"}
@@ -0,0 +1,16 @@
1
+ import { Client } from "../../module/client";
2
+ import { AbstractUser } from '../../module/user';
3
+ import * as cheerio from 'cheerio';
4
+ /**
5
+ * @method userParse
6
+ * @description ユーザー要素を解析し、ユーザーオブジェクトを返す
7
+ * @param client
8
+ * @param elem
9
+ * @returns ユーザーオブジェクト
10
+ * @version 1.0.0
11
+ * @since 1.0.0
12
+ * @public
13
+ * @exports
14
+ */
15
+ declare const userParse: (client: Client, elem: cheerio.Cheerio<any>) => AbstractUser;
16
+ export { userParse };
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.userParse = void 0;
4
+ const user_1 = require("../../module/user");
5
+ /**
6
+ * @method userParse
7
+ * @description ユーザー要素を解析し、ユーザーオブジェクトを返す
8
+ * @param client
9
+ * @param elem
10
+ * @returns ユーザーオブジェクト
11
+ * @version 1.0.0
12
+ * @since 1.0.0
13
+ * @public
14
+ * @exports
15
+ */
16
+ const userParse = (client, elem) => {
17
+ if (elem.hasClass('deleted')) {
18
+ return new user_1.DeletedUser(client, Number(elem.attr('data-id')));
19
+ }
20
+ else if (elem.hasClass('anonymous')) {
21
+ const ip = elem.find('span.ip').text().replace('(', '').replace(')', '').trim();
22
+ return new user_1.AnonymousUser(client, undefined, undefined, undefined, undefined, ip);
23
+ }
24
+ else if (elem.text() === 'Wikidot') {
25
+ return new user_1.WikidotUser(client);
26
+ }
27
+ else {
28
+ const userElem = elem.find('a').last();
29
+ const userName = userElem.text();
30
+ const userUnix = userElem.attr('href')?.replace('http://www.wikidot.com/user:info/', '') || '';
31
+ const userId = Number(userElem.attr('onclick')?.replace('WIKIDOT.page.listeners.userInfo(', '').replace('); return false;', ''));
32
+ return new user_1.User(client, userId, userName, userUnix, `http://www.wikidot.com/avatar.php?userid=${userId}`);
33
+ }
34
+ };
35
+ exports.userParse = userParse;
36
+ //# sourceMappingURL=user.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.js","sourceRoot":"","sources":["../../../src/util/parser/user.ts"],"names":[],"mappings":";;;AACA,4CAAyG;AAGzG;;;;;;;;;;GAUG;AACH,MAAM,SAAS,GAAG,CAAC,MAAc,EAAE,IAA0B,EAAgB,EAAE;IAC3E,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAI,kBAAW,CAClB,MAAM,EACN,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAC/B,CAAC;IACN,CAAC;SAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACpC,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAChF,OAAO,IAAI,oBAAa,CACpB,MAAM,EACN,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,EAAE,CACL,CAAC;IACN,CAAC;SAAM,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;QACnC,OAAO,IAAI,kBAAW,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;SAAM,CAAC;QACJ,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,mCAAmC,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;QAC/F,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,kCAAkC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,CAAC;QAEjI,OAAO,IAAI,WAAI,CACX,MAAM,EACN,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,4CAA4C,MAAM,EAAE,CACvD,CAAC;IACN,CAAC;AACL,CAAC,CAAC;AAEM,8BAAS"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * @class QMCUser
3
+ * @description QuickModuleで得られるユーザー情報
4
+ * @version 1.0.0
5
+ * @since 1.0.0
6
+ * @public
7
+ */
8
+ declare class QMCUser {
9
+ id: number;
10
+ name: string;
11
+ constructor(id: number, name: string);
12
+ }
13
+ /**
14
+ * @class QMCPage
15
+ * @description QuickModuleで得られるページ情報
16
+ * @version 1.0.0
17
+ * @since 1.0.0
18
+ * @public
19
+ */
20
+ declare class QMCPage {
21
+ title: string;
22
+ unixName: string;
23
+ constructor(title: string, unixName: string);
24
+ }
25
+ /**
26
+ * @class QuickModule
27
+ * @description QuickModuleを利用するためのユーティリティクラス
28
+ * @version 1.0.0
29
+ * @since 1.0.0
30
+ * @public
31
+ * @exports
32
+ */
33
+ declare class QuickModule {
34
+ /**
35
+ * @method _request
36
+ * @description QuickModuleにリクエストを送信する
37
+ * @param moduleName モジュール名
38
+ * @param siteId サイトID
39
+ * @param query クエリ
40
+ * @returns レスポンスボディ
41
+ * @version 1.0.0
42
+ * @since 1.0.0
43
+ * @private
44
+ * @static
45
+ * @async
46
+ * @throws {NotFoundException} サイトが見つからない場合
47
+ * @throws {Error} その他のエラー
48
+ */
49
+ private static _request;
50
+ /**
51
+ * @method memberLookup
52
+ * @description メンバーを検索する
53
+ * @param siteId サイトID
54
+ * @param query クエリ(ユーザ名の一部)
55
+ * @returns ヒットしたユーザ情報のリスト
56
+ * @version 1.0.0
57
+ * @since 1.0.0
58
+ * @public
59
+ * @static
60
+ * @async
61
+ * @throws {NotFoundException} サイトが見つからない場合
62
+ * @throws {Error} その他のエラー
63
+ */
64
+ static memberLookup: (siteId: number, query: string) => Promise<QMCUser[]>;
65
+ /**
66
+ * @method userLookup
67
+ * @description ユーザーを検索する
68
+ * @param siteId サイトID
69
+ * @param query クエリ(ユーザ名の一部)
70
+ * @returns ヒットしたユーザ情報のリスト
71
+ * @version 1.0.0
72
+ * @since 1.0.0
73
+ * @public
74
+ * @static
75
+ * @async
76
+ * @throws {NotFoundException} サイトが見つからない場合
77
+ * @throws {Error} その他のエラー
78
+ */
79
+ static userLookup: (siteId: number, query: string) => Promise<QMCUser[]>;
80
+ /**
81
+ * @method pageLookup
82
+ * @description ページを検索する
83
+ * @param siteId サイトID
84
+ * @param query クエリ(ページ名の一部)
85
+ * @returns ヒットしたページ情報のリスト
86
+ * @version 1.0.0
87
+ * @since 1.0.0
88
+ * @public
89
+ * @static
90
+ * @async
91
+ * @throws {NotFoundException} サイトが見つからない場合
92
+ * @throws {Error} その他のエラー
93
+ */
94
+ static pageLookup: (siteId: number, query: string) => Promise<QMCPage[]>;
95
+ }
96
+ export { QuickModule };
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ var _a;
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.QuickModule = void 0;
8
+ const axios_1 = __importDefault(require("axios"));
9
+ const exceptions_1 = require("../common/exceptions");
10
+ /**
11
+ * @class QMCUser
12
+ * @description QuickModuleで得られるユーザー情報
13
+ * @version 1.0.0
14
+ * @since 1.0.0
15
+ * @public
16
+ */
17
+ class QMCUser {
18
+ constructor(id, name) {
19
+ this.id = id;
20
+ this.name = name;
21
+ this.id = id;
22
+ this.name = name;
23
+ }
24
+ }
25
+ /**
26
+ * @class QMCPage
27
+ * @description QuickModuleで得られるページ情報
28
+ * @version 1.0.0
29
+ * @since 1.0.0
30
+ * @public
31
+ */
32
+ class QMCPage {
33
+ constructor(title, unixName) {
34
+ this.title = title;
35
+ this.unixName = unixName;
36
+ this.title = title;
37
+ this.unixName = unixName;
38
+ }
39
+ }
40
+ /**
41
+ * @class QuickModule
42
+ * @description QuickModuleを利用するためのユーティリティクラス
43
+ * @version 1.0.0
44
+ * @since 1.0.0
45
+ * @public
46
+ * @exports
47
+ */
48
+ class QuickModule {
49
+ }
50
+ exports.QuickModule = QuickModule;
51
+ _a = QuickModule;
52
+ /**
53
+ * @method _request
54
+ * @description QuickModuleにリクエストを送信する
55
+ * @param moduleName モジュール名
56
+ * @param siteId サイトID
57
+ * @param query クエリ
58
+ * @returns レスポンスボディ
59
+ * @version 1.0.0
60
+ * @since 1.0.0
61
+ * @private
62
+ * @static
63
+ * @async
64
+ * @throws {NotFoundException} サイトが見つからない場合
65
+ * @throws {Error} その他のエラー
66
+ */
67
+ QuickModule._request = async (moduleName, siteId, query) => {
68
+ if (!['MemberLookupQModule', 'UserLookupQModule', 'PageLookupQModule'].includes(moduleName)) {
69
+ throw new Error('Invalid module name');
70
+ }
71
+ const url = `https://www.wikidot.com/quickmodule.php?module=${moduleName}&s=${siteId}&q=${query}`;
72
+ try {
73
+ const response = await axios_1.default.get(url, { timeout: 300 * 1000 });
74
+ return response.data;
75
+ }
76
+ catch (error) {
77
+ if (axios_1.default.isAxiosError(error) && error.response?.status === 500) {
78
+ throw new exceptions_1.NotFoundException('Site is not found');
79
+ }
80
+ throw error;
81
+ }
82
+ };
83
+ /**
84
+ * @method memberLookup
85
+ * @description メンバーを検索する
86
+ * @param siteId サイトID
87
+ * @param query クエリ(ユーザ名の一部)
88
+ * @returns ヒットしたユーザ情報のリスト
89
+ * @version 1.0.0
90
+ * @since 1.0.0
91
+ * @public
92
+ * @static
93
+ * @async
94
+ * @throws {NotFoundException} サイトが見つからない場合
95
+ * @throws {Error} その他のエラー
96
+ */
97
+ QuickModule.memberLookup = async (siteId, query) => {
98
+ const data = await _a._request('MemberLookupQModule', siteId, query);
99
+ return data.users.map((user) => new QMCUser(user.user_id, user.name));
100
+ };
101
+ /**
102
+ * @method userLookup
103
+ * @description ユーザーを検索する
104
+ * @param siteId サイトID
105
+ * @param query クエリ(ユーザ名の一部)
106
+ * @returns ヒットしたユーザ情報のリスト
107
+ * @version 1.0.0
108
+ * @since 1.0.0
109
+ * @public
110
+ * @static
111
+ * @async
112
+ * @throws {NotFoundException} サイトが見つからない場合
113
+ * @throws {Error} その他のエラー
114
+ */
115
+ QuickModule.userLookup = async (siteId, query) => {
116
+ const data = await _a._request('UserLookupQModule', siteId, query);
117
+ return data.users.map((user) => new QMCUser(user.user_id, user.name));
118
+ };
119
+ /**
120
+ * @method pageLookup
121
+ * @description ページを検索する
122
+ * @param siteId サイトID
123
+ * @param query クエリ(ページ名の一部)
124
+ * @returns ヒットしたページ情報のリスト
125
+ * @version 1.0.0
126
+ * @since 1.0.0
127
+ * @public
128
+ * @static
129
+ * @async
130
+ * @throws {NotFoundException} サイトが見つからない場合
131
+ * @throws {Error} その他のエラー
132
+ */
133
+ QuickModule.pageLookup = async (siteId, query) => {
134
+ const data = await _a._request('PageLookupQModule', siteId, query);
135
+ return data.pages.map((page) => new QMCPage(page.title, page.unix_name));
136
+ };
137
+ //# sourceMappingURL=quickModule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quickModule.js","sourceRoot":"","sources":["../../src/util/quickModule.ts"],"names":[],"mappings":"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"}