@kajidog/connpass-api-client 0.1.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 (99) hide show
  1. package/LICENCE +21 -0
  2. package/README.md +184 -0
  3. package/dist/application/ConnpassClient.d.ts +41 -0
  4. package/dist/application/ConnpassClient.d.ts.map +1 -0
  5. package/dist/application/ConnpassClient.js +108 -0
  6. package/dist/application/ConnpassClient.js.map +1 -0
  7. package/dist/application/services/EventService.d.ts +10 -0
  8. package/dist/application/services/EventService.d.ts.map +1 -0
  9. package/dist/application/services/EventService.js +45 -0
  10. package/dist/application/services/EventService.js.map +1 -0
  11. package/dist/application/services/GroupService.d.ts +9 -0
  12. package/dist/application/services/GroupService.d.ts.map +1 -0
  13. package/dist/application/services/GroupService.js +39 -0
  14. package/dist/application/services/GroupService.js.map +1 -0
  15. package/dist/application/services/UserService.d.ts +25 -0
  16. package/dist/application/services/UserService.d.ts.map +1 -0
  17. package/dist/application/services/UserService.js +76 -0
  18. package/dist/application/services/UserService.js.map +1 -0
  19. package/dist/application/services/index.d.ts +4 -0
  20. package/dist/application/services/index.d.ts.map +1 -0
  21. package/dist/application/services/index.js +20 -0
  22. package/dist/application/services/index.js.map +1 -0
  23. package/dist/domain/entities/Event.d.ts +46 -0
  24. package/dist/domain/entities/Event.d.ts.map +1 -0
  25. package/dist/domain/entities/Event.js +3 -0
  26. package/dist/domain/entities/Event.js.map +1 -0
  27. package/dist/domain/entities/Group.d.ts +28 -0
  28. package/dist/domain/entities/Group.d.ts.map +1 -0
  29. package/dist/domain/entities/Group.js +3 -0
  30. package/dist/domain/entities/Group.js.map +1 -0
  31. package/dist/domain/entities/Presentation.d.ts +17 -0
  32. package/dist/domain/entities/Presentation.d.ts.map +1 -0
  33. package/dist/domain/entities/Presentation.js +3 -0
  34. package/dist/domain/entities/Presentation.js.map +1 -0
  35. package/dist/domain/entities/User.d.ts +23 -0
  36. package/dist/domain/entities/User.d.ts.map +1 -0
  37. package/dist/domain/entities/User.js +3 -0
  38. package/dist/domain/entities/User.js.map +1 -0
  39. package/dist/domain/entities/index.d.ts +5 -0
  40. package/dist/domain/entities/index.d.ts.map +1 -0
  41. package/dist/domain/entities/index.js +21 -0
  42. package/dist/domain/entities/index.js.map +1 -0
  43. package/dist/domain/errors/ConnpassError.d.ts +18 -0
  44. package/dist/domain/errors/ConnpassError.d.ts.map +1 -0
  45. package/dist/domain/errors/ConnpassError.js +46 -0
  46. package/dist/domain/errors/ConnpassError.js.map +1 -0
  47. package/dist/domain/errors/index.d.ts +2 -0
  48. package/dist/domain/errors/index.d.ts.map +1 -0
  49. package/dist/domain/errors/index.js +18 -0
  50. package/dist/domain/errors/index.js.map +1 -0
  51. package/dist/domain/repositories/IEventRepository.d.ts +6 -0
  52. package/dist/domain/repositories/IEventRepository.d.ts.map +1 -0
  53. package/dist/domain/repositories/IEventRepository.js +3 -0
  54. package/dist/domain/repositories/IEventRepository.js.map +1 -0
  55. package/dist/domain/repositories/IGroupRepository.d.ts +5 -0
  56. package/dist/domain/repositories/IGroupRepository.d.ts.map +1 -0
  57. package/dist/domain/repositories/IGroupRepository.js +3 -0
  58. package/dist/domain/repositories/IGroupRepository.js.map +1 -0
  59. package/dist/domain/repositories/IUserRepository.d.ts +19 -0
  60. package/dist/domain/repositories/IUserRepository.d.ts.map +1 -0
  61. package/dist/domain/repositories/IUserRepository.js +3 -0
  62. package/dist/domain/repositories/IUserRepository.js.map +1 -0
  63. package/dist/domain/repositories/index.d.ts +4 -0
  64. package/dist/domain/repositories/index.d.ts.map +1 -0
  65. package/dist/domain/repositories/index.js +20 -0
  66. package/dist/domain/repositories/index.js.map +1 -0
  67. package/dist/domain/utils/validators.d.ts +9 -0
  68. package/dist/domain/utils/validators.d.ts.map +1 -0
  69. package/dist/domain/utils/validators.js +76 -0
  70. package/dist/domain/utils/validators.js.map +1 -0
  71. package/dist/index.d.ts +6 -0
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +24 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/infrastructure/cache/PresentationCache.d.ts +20 -0
  76. package/dist/infrastructure/cache/PresentationCache.d.ts.map +1 -0
  77. package/dist/infrastructure/cache/PresentationCache.js +91 -0
  78. package/dist/infrastructure/cache/PresentationCache.js.map +1 -0
  79. package/dist/infrastructure/http/HttpClient.d.ts +17 -0
  80. package/dist/infrastructure/http/HttpClient.d.ts.map +1 -0
  81. package/dist/infrastructure/http/HttpClient.js +75 -0
  82. package/dist/infrastructure/http/HttpClient.js.map +1 -0
  83. package/dist/infrastructure/repositories/EventRepository.d.ts +14 -0
  84. package/dist/infrastructure/repositories/EventRepository.d.ts.map +1 -0
  85. package/dist/infrastructure/repositories/EventRepository.js +117 -0
  86. package/dist/infrastructure/repositories/EventRepository.js.map +1 -0
  87. package/dist/infrastructure/repositories/GroupRepository.d.ts +10 -0
  88. package/dist/infrastructure/repositories/GroupRepository.d.ts.map +1 -0
  89. package/dist/infrastructure/repositories/GroupRepository.js +35 -0
  90. package/dist/infrastructure/repositories/GroupRepository.js.map +1 -0
  91. package/dist/infrastructure/repositories/UserRepository.d.ts +24 -0
  92. package/dist/infrastructure/repositories/UserRepository.d.ts.map +1 -0
  93. package/dist/infrastructure/repositories/UserRepository.js +68 -0
  94. package/dist/infrastructure/repositories/UserRepository.js.map +1 -0
  95. package/dist/infrastructure/repositories/index.d.ts +4 -0
  96. package/dist/infrastructure/repositories/index.d.ts.map +1 -0
  97. package/dist/infrastructure/repositories/index.js +20 -0
  98. package/dist/infrastructure/repositories/index.js.map +1 -0
  99. package/package.json +51 -0
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.PresentationCache = void 0;
7
+ const fs_1 = require("fs");
8
+ const path_1 = __importDefault(require("path"));
9
+ class PresentationCache {
10
+ constructor(options) {
11
+ this.cache = new Map();
12
+ this.isLoaded = false;
13
+ this.filePath = options.filePath;
14
+ this.ttlMs = Math.max(options.ttlMs, 0);
15
+ this.enabled = options.enabled;
16
+ }
17
+ async get(eventId) {
18
+ if (!this.enabled) {
19
+ return undefined;
20
+ }
21
+ await this.ensureLoaded();
22
+ const entry = this.cache.get(eventId);
23
+ if (!entry) {
24
+ return undefined;
25
+ }
26
+ if (this.ttlMs === 0 || Date.now() <= entry.expiresAt) {
27
+ return entry.data;
28
+ }
29
+ this.cache.delete(eventId);
30
+ await this.persist();
31
+ return undefined;
32
+ }
33
+ async set(eventId, data) {
34
+ if (!this.enabled) {
35
+ return;
36
+ }
37
+ await this.ensureLoaded();
38
+ const expiresAt = this.ttlMs === 0 ? Number.MAX_SAFE_INTEGER : Date.now() + this.ttlMs;
39
+ this.cache.set(eventId, { data, expiresAt });
40
+ await this.persist();
41
+ }
42
+ async clear() {
43
+ if (!this.enabled) {
44
+ return;
45
+ }
46
+ this.cache.clear();
47
+ await this.persist();
48
+ }
49
+ async ensureLoaded() {
50
+ if (this.isLoaded || !this.enabled) {
51
+ return;
52
+ }
53
+ try {
54
+ const raw = await fs_1.promises.readFile(this.filePath, 'utf-8');
55
+ const parsed = JSON.parse(raw);
56
+ const now = Date.now();
57
+ for (const [key, entry] of Object.entries(parsed)) {
58
+ const eventId = Number(key);
59
+ if (!Number.isFinite(eventId)) {
60
+ continue;
61
+ }
62
+ if (this.ttlMs === 0 || entry.expiresAt > now) {
63
+ this.cache.set(eventId, entry);
64
+ }
65
+ }
66
+ }
67
+ catch (error) {
68
+ if (error?.code !== 'ENOENT') {
69
+ console.warn('[api-client] Failed to load presentation cache:', error?.message ?? error);
70
+ }
71
+ }
72
+ finally {
73
+ this.isLoaded = true;
74
+ await this.persist();
75
+ }
76
+ }
77
+ async persist() {
78
+ if (!this.enabled) {
79
+ return;
80
+ }
81
+ const dir = path_1.default.dirname(this.filePath);
82
+ await fs_1.promises.mkdir(dir, { recursive: true });
83
+ const serializable = {};
84
+ for (const [eventId, entry] of this.cache.entries()) {
85
+ serializable[String(eventId)] = entry;
86
+ }
87
+ await fs_1.promises.writeFile(this.filePath, JSON.stringify(serializable, null, 2), 'utf-8');
88
+ }
89
+ }
90
+ exports.PresentationCache = PresentationCache;
91
+ //# sourceMappingURL=PresentationCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PresentationCache.js","sourceRoot":"","sources":["../../../src/infrastructure/cache/PresentationCache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { AxiosResponse } from 'axios';
2
+ export interface HttpClientConfig {
3
+ baseURL: string;
4
+ apiKey: string;
5
+ timeout?: number;
6
+ rateLimitDelay?: number;
7
+ }
8
+ export declare class HttpClient {
9
+ private client;
10
+ private lastRequestTime;
11
+ private rateLimitDelay;
12
+ constructor(config: HttpClientConfig);
13
+ private setupInterceptors;
14
+ private waitForRateLimit;
15
+ get<T>(url: string, params?: Record<string, any>): Promise<AxiosResponse<T>>;
16
+ }
17
+ //# sourceMappingURL=HttpClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpClient.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/http/HttpClient.ts"],"names":[],"mappings":"AAAA,OAAc,EAAiB,aAAa,EAAc,MAAM,OAAO,CAAC;AAIxE,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,cAAc,CAAS;gBAEnB,MAAM,EAAE,gBAAgB;IAkBpC,OAAO,CAAC,iBAAiB;YAmCX,gBAAgB;IAYxB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;CAQnF"}
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.HttpClient = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const qs_1 = require("qs");
9
+ const errors_1 = require("../../domain/errors");
10
+ class HttpClient {
11
+ constructor(config) {
12
+ this.lastRequestTime = 0;
13
+ this.rateLimitDelay = config.rateLimitDelay ?? 1000;
14
+ this.client = axios_1.default.create({
15
+ baseURL: config.baseURL,
16
+ timeout: config.timeout ?? 30000,
17
+ headers: {
18
+ 'X-API-Key': config.apiKey,
19
+ 'Content-Type': 'application/json',
20
+ },
21
+ paramsSerializer: params => {
22
+ return (0, qs_1.stringify)(params, { arrayFormat: 'repeat' });
23
+ }
24
+ });
25
+ this.setupInterceptors();
26
+ }
27
+ setupInterceptors() {
28
+ this.client.interceptors.response.use((response) => response, (error) => {
29
+ if (error.code === 'ECONNABORTED' || error.code === 'ETIMEDOUT') {
30
+ throw new errors_1.ConnpassTimeoutError('Request timeout');
31
+ }
32
+ if (error.response) {
33
+ const status = error.response.status;
34
+ const data = error.response.data;
35
+ switch (status) {
36
+ case 429:
37
+ throw new errors_1.ConnpassRateLimitError('Rate limit exceeded');
38
+ case 400:
39
+ throw new errors_1.ConnpassApiError('Bad Request', status, data);
40
+ case 401:
41
+ throw new errors_1.ConnpassApiError('Unauthorized - Invalid API key', status, data);
42
+ case 403:
43
+ throw new errors_1.ConnpassApiError('Forbidden', status, data);
44
+ case 404:
45
+ throw new errors_1.ConnpassApiError('Not Found', status, data);
46
+ case 500:
47
+ throw new errors_1.ConnpassApiError('Internal Server Error', status, data);
48
+ default:
49
+ throw new errors_1.ConnpassApiError(`HTTP ${status}`, status, data);
50
+ }
51
+ }
52
+ throw new errors_1.ConnpassError(`Network error: ${error.message}`);
53
+ });
54
+ }
55
+ async waitForRateLimit() {
56
+ const now = Date.now();
57
+ const timeSinceLastRequest = now - this.lastRequestTime;
58
+ if (timeSinceLastRequest < this.rateLimitDelay) {
59
+ const waitTime = this.rateLimitDelay - timeSinceLastRequest;
60
+ await new Promise(resolve => setTimeout(resolve, waitTime));
61
+ }
62
+ this.lastRequestTime = Date.now();
63
+ }
64
+ async get(url, params) {
65
+ try {
66
+ await this.waitForRateLimit();
67
+ return await this.client.get(url, { params });
68
+ }
69
+ catch (error) {
70
+ throw error;
71
+ }
72
+ }
73
+ }
74
+ exports.HttpClient = HttpClient;
75
+ //# sourceMappingURL=HttpClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpClient.js","sourceRoot":"","sources":["../../../src/infrastructure/http/HttpClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { IEventRepository } from '../../domain/repositories';
2
+ import { EventSearchParams, EventsResponse, PresentationsResponse } from '../../domain/entities';
3
+ import { HttpClient } from '../http/HttpClient';
4
+ import { PresentationCache } from '../cache/PresentationCache';
5
+ export declare class EventRepository implements IEventRepository {
6
+ private httpClient;
7
+ private presentationCache?;
8
+ constructor(httpClient: HttpClient, presentationCache?: PresentationCache | undefined);
9
+ searchEvents(params: EventSearchParams): Promise<EventsResponse>;
10
+ getEventPresentations(eventId: number): Promise<PresentationsResponse>;
11
+ private buildEventQueryParams;
12
+ private mapEventsResponse;
13
+ }
14
+ //# sourceMappingURL=EventRepository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventRepository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/repositories/EventRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAS,iBAAiB,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACxG,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,qBAAa,eAAgB,YAAW,gBAAgB;IAC1C,OAAO,CAAC,UAAU;IAAc,OAAO,CAAC,iBAAiB,CAAC;gBAAlD,UAAU,EAAE,UAAU,EAAU,iBAAiB,CAAC,EAAE,iBAAiB,YAAA;IAEnF,YAAY,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,CAAC;IAOhE,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAa5E,OAAO,CAAC,qBAAqB;IA4C7B,OAAO,CAAC,iBAAiB;CAoC1B"}
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EventRepository = void 0;
4
+ const validators_1 = require("../../domain/utils/validators");
5
+ class EventRepository {
6
+ constructor(httpClient, presentationCache) {
7
+ this.httpClient = httpClient;
8
+ this.presentationCache = presentationCache;
9
+ }
10
+ async searchEvents(params) {
11
+ validators_1.Validators.validateEventSearchParams(params);
12
+ const queryParams = this.buildEventQueryParams(params);
13
+ const response = await this.httpClient.get('/events/', queryParams);
14
+ return this.mapEventsResponse(response.data);
15
+ }
16
+ async getEventPresentations(eventId) {
17
+ validators_1.Validators.validatePositiveInteger(eventId, 'eventId');
18
+ const cached = await this.presentationCache?.get(eventId);
19
+ if (cached) {
20
+ return cached;
21
+ }
22
+ const response = await this.httpClient.get(`/events/${eventId}/presentations/`);
23
+ const data = response.data;
24
+ await this.presentationCache?.set(eventId, data);
25
+ return data;
26
+ }
27
+ buildEventQueryParams(params) {
28
+ const queryParams = {};
29
+ if (params.eventId)
30
+ queryParams.event_id = params.eventId;
31
+ if (params.keyword)
32
+ queryParams.keyword = params.keyword;
33
+ if (params.keywordOr)
34
+ queryParams.keyword_or = params.keywordOr;
35
+ if (params.ymd)
36
+ queryParams.ymd = params.ymd.join(',');
37
+ // For v2 compatibility: expand ymdFrom..ymdTo into comma-separated ymd list, while still passing v1 params
38
+ if (params.ymdFrom)
39
+ queryParams.ymd_from = params.ymdFrom;
40
+ if (params.ymdTo)
41
+ queryParams.ymd_to = params.ymdTo;
42
+ if (params.ymdFrom || params.ymdTo) {
43
+ const from = params.ymdFrom ? new Date(params.ymdFrom) : undefined;
44
+ const to = params.ymdTo ? new Date(params.ymdTo) : undefined;
45
+ if (from && !Number.isNaN(from.getTime())) {
46
+ const end = to && !Number.isNaN(to.getTime()) ? to : from;
47
+ const list = [];
48
+ const cur = new Date(from);
49
+ // normalize to local date, increment by 1 day
50
+ // cap at 366 iterations to avoid runaway
51
+ let guard = 0;
52
+ while (cur <= end && guard < 366) {
53
+ const y = cur.getFullYear();
54
+ const m = String(cur.getMonth() + 1).padStart(2, '0');
55
+ const d = String(cur.getDate()).padStart(2, '0');
56
+ list.push(`${y}${m}${d}`);
57
+ cur.setDate(cur.getDate() + 1);
58
+ guard += 1;
59
+ }
60
+ if (list.length) {
61
+ queryParams.ymd = list.join(',');
62
+ }
63
+ }
64
+ }
65
+ if (params.nickname)
66
+ queryParams.nickname = params.nickname;
67
+ if (params.ownerNickname)
68
+ queryParams.owner_nickname = params.ownerNickname;
69
+ if (params.groupId)
70
+ queryParams.group_id = params.groupId;
71
+ if (params.prefecture)
72
+ queryParams.prefecture = params.prefecture;
73
+ if (params.count)
74
+ queryParams.count = params.count;
75
+ if (params.order)
76
+ queryParams.order = params.order;
77
+ if (params.start)
78
+ queryParams.start = params.start;
79
+ return queryParams;
80
+ }
81
+ mapEventsResponse(data) {
82
+ // Accept both v1-like snake_case and v2-like camelCase
83
+ const eventsArray = data.events ?? data.event ?? [];
84
+ const events = eventsArray.map((e) => ({
85
+ id: e.id ?? e.event_id,
86
+ title: e.title,
87
+ catchPhrase: e.catch ?? e.catchPhrase ?? '',
88
+ description: e.description ?? '',
89
+ url: e.url ?? e.event_url,
90
+ imageUrl: e.image_url ?? e.imageUrl ?? undefined,
91
+ hashTag: e.hash_tag ?? e.hashTag ?? '',
92
+ startedAt: e.started_at ?? e.startedAt ?? '',
93
+ endedAt: e.ended_at ?? e.endedAt ?? '',
94
+ limit: e.limit ?? undefined,
95
+ participantCount: e.accepted ?? e.participantCount ?? 0,
96
+ waitingCount: e.waiting ?? e.waitingCount ?? 0,
97
+ ownerNickname: e.owner_nickname ?? e.ownerNickname ?? '',
98
+ ownerDisplayName: e.owner_display_name ?? e.ownerDisplayName ?? '',
99
+ place: e.place ?? undefined,
100
+ address: e.address ?? undefined,
101
+ lat: e.lat ?? undefined,
102
+ lon: e.lon ?? undefined,
103
+ groupId: (e.group?.id ?? e.series?.id) ?? undefined,
104
+ groupTitle: (e.group?.title ?? e.series?.title) ?? undefined,
105
+ groupUrl: (e.group?.url ?? e.series?.url) ?? undefined,
106
+ updatedAt: e.updated_at ?? e.updatedAt ?? '',
107
+ }));
108
+ return {
109
+ eventsReturned: data.results_returned ?? data.eventsReturned ?? events.length,
110
+ eventsAvailable: data.results_available ?? data.eventsAvailable ?? events.length,
111
+ eventsStart: data.results_start ?? data.eventsStart ?? 1,
112
+ events,
113
+ };
114
+ }
115
+ }
116
+ exports.EventRepository = EventRepository;
117
+ //# sourceMappingURL=EventRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/repositories/EventRepository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { IGroupRepository } from '../../domain/repositories';
2
+ import { GroupSearchParams, GroupsResponse } from '../../domain/entities';
3
+ import { HttpClient } from '../http/HttpClient';
4
+ export declare class GroupRepository implements IGroupRepository {
5
+ private httpClient;
6
+ constructor(httpClient: HttpClient);
7
+ searchGroups(params: GroupSearchParams): Promise<GroupsResponse>;
8
+ private buildGroupQueryParams;
9
+ }
10
+ //# sourceMappingURL=GroupRepository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupRepository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/repositories/GroupRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,qBAAa,eAAgB,YAAW,gBAAgB;IAC1C,OAAO,CAAC,UAAU;gBAAV,UAAU,EAAE,UAAU;IAEpC,YAAY,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,CAAC;IAOtE,OAAO,CAAC,qBAAqB;CAa9B"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GroupRepository = void 0;
4
+ const validators_1 = require("../../domain/utils/validators");
5
+ class GroupRepository {
6
+ constructor(httpClient) {
7
+ this.httpClient = httpClient;
8
+ }
9
+ async searchGroups(params) {
10
+ validators_1.Validators.validateGroupSearchParams(params);
11
+ const queryParams = this.buildGroupQueryParams(params);
12
+ const response = await this.httpClient.get('/groups/', queryParams);
13
+ return response.data;
14
+ }
15
+ buildGroupQueryParams(params) {
16
+ const queryParams = {};
17
+ if (params.groupId)
18
+ queryParams.group_id = params.groupId.join(',');
19
+ if (params.keyword)
20
+ queryParams.keyword = params.keyword;
21
+ if (params.countryCode)
22
+ queryParams.country_code = params.countryCode;
23
+ if (params.prefecture)
24
+ queryParams.prefecture = params.prefecture;
25
+ if (params.count)
26
+ queryParams.count = params.count;
27
+ if (params.order)
28
+ queryParams.order = params.order;
29
+ if (params.start)
30
+ queryParams.start = params.start;
31
+ return queryParams;
32
+ }
33
+ }
34
+ exports.GroupRepository = GroupRepository;
35
+ //# sourceMappingURL=GroupRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/repositories/GroupRepository.ts"],"names":[],"mappings":";;;AAGA,8DAA2D;AAE3D,MAAa,eAAe;IAC1B,YAAoB,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;IAAG,CAAC;IAE9C,KAAK,CAAC,YAAY,CAAC,MAAyB;QAC1C,uBAAU,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;QACvD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAiB,UAAU,EAAE,WAAW,CAAC,CAAC;QACpF,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAEO,qBAAqB,CAAC,MAAyB;QACrD,MAAM,WAAW,GAAwB,EAAE,CAAC;QAE5C,IAAI,MAAM,CAAC,OAAO;YAAE,WAAW,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpE,IAAI,MAAM,CAAC,OAAO;YAAE,WAAW,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QACzD,IAAI,MAAM,CAAC,WAAW;YAAE,WAAW,CAAC,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC;QACtE,IAAI,MAAM,CAAC,UAAU;YAAE,WAAW,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAClE,IAAI,MAAM,CAAC,KAAK;YAAE,WAAW,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QACnD,IAAI,MAAM,CAAC,KAAK;YAAE,WAAW,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QACnD,IAAI,MAAM,CAAC,KAAK;YAAE,WAAW,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAEnD,OAAO,WAAW,CAAC;IACrB,CAAC;CACF;AAvBD,0CAuBC"}
@@ -0,0 +1,24 @@
1
+ import { IUserRepository } from '../../domain/repositories';
2
+ import { UserSearchParams, UsersResponse, GroupsResponse, EventsResponse } from '../../domain/entities';
3
+ import { HttpClient } from '../http/HttpClient';
4
+ export declare class UserRepository implements IUserRepository {
5
+ private httpClient;
6
+ constructor(httpClient: HttpClient);
7
+ searchUsers(params: UserSearchParams): Promise<UsersResponse>;
8
+ getUserGroups(nickname: string, params?: {
9
+ count?: number;
10
+ start?: number;
11
+ }): Promise<GroupsResponse>;
12
+ getUserAttendedEvents(nickname: string, params?: {
13
+ count?: number;
14
+ order?: 1 | 2 | 3;
15
+ start?: number;
16
+ }): Promise<EventsResponse>;
17
+ getUserPresenterEvents(nickname: string, params?: {
18
+ count?: number;
19
+ order?: 1 | 2 | 3;
20
+ start?: number;
21
+ }): Promise<EventsResponse>;
22
+ private buildUserQueryParams;
23
+ }
24
+ //# sourceMappingURL=UserRepository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserRepository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/repositories/UserRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACxG,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,qBAAa,cAAe,YAAW,eAAe;IACxC,OAAO,CAAC,UAAU;gBAAV,UAAU,EAAE,UAAU;IAEpC,WAAW,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC;IAO7D,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,CAAC;IAcrG,qBAAqB,CACzB,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAC7D,OAAO,CAAC,cAAc,CAAC;IAepB,sBAAsB,CAC1B,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAC7D,OAAO,CAAC,cAAc,CAAC;IAe1B,OAAO,CAAC,oBAAoB;CAW7B"}
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UserRepository = void 0;
4
+ const validators_1 = require("../../domain/utils/validators");
5
+ class UserRepository {
6
+ constructor(httpClient) {
7
+ this.httpClient = httpClient;
8
+ }
9
+ async searchUsers(params) {
10
+ validators_1.Validators.validateUserSearchParams(params);
11
+ const queryParams = this.buildUserQueryParams(params);
12
+ const response = await this.httpClient.get('/users/', queryParams);
13
+ return response.data;
14
+ }
15
+ async getUserGroups(nickname, params) {
16
+ validators_1.Validators.validateNickname(nickname, 'nickname');
17
+ const queryParams = {};
18
+ if (params?.count)
19
+ queryParams.count = params.count;
20
+ if (params?.start)
21
+ queryParams.start = params.start;
22
+ const encodedNickname = encodeURIComponent(nickname.trim());
23
+ const response = await this.httpClient.get(`/users/${encodedNickname}/groups/`, queryParams);
24
+ return response.data;
25
+ }
26
+ async getUserAttendedEvents(nickname, params) {
27
+ validators_1.Validators.validateNickname(nickname, 'nickname');
28
+ const queryParams = {};
29
+ if (params?.count)
30
+ queryParams.count = params.count;
31
+ if (params?.order)
32
+ queryParams.order = params.order;
33
+ if (params?.start)
34
+ queryParams.start = params.start;
35
+ const encodedNickname = encodeURIComponent(nickname.trim());
36
+ const response = await this.httpClient.get(`/users/${encodedNickname}/attended_events/`, queryParams);
37
+ return response.data;
38
+ }
39
+ async getUserPresenterEvents(nickname, params) {
40
+ validators_1.Validators.validateNickname(nickname, 'nickname');
41
+ const queryParams = {};
42
+ if (params?.count)
43
+ queryParams.count = params.count;
44
+ if (params?.order)
45
+ queryParams.order = params.order;
46
+ if (params?.start)
47
+ queryParams.start = params.start;
48
+ const encodedNickname = encodeURIComponent(nickname.trim());
49
+ const response = await this.httpClient.get(`/users/${encodedNickname}/presenter_events/`, queryParams);
50
+ return response.data;
51
+ }
52
+ buildUserQueryParams(params) {
53
+ const queryParams = {};
54
+ if (params.userId)
55
+ queryParams.user_id = params.userId.join(',');
56
+ if (params.nickname)
57
+ queryParams.nickname = params.nickname;
58
+ if (params.count)
59
+ queryParams.count = params.count;
60
+ if (params.order)
61
+ queryParams.order = params.order;
62
+ if (params.start)
63
+ queryParams.start = params.start;
64
+ return queryParams;
65
+ }
66
+ }
67
+ exports.UserRepository = UserRepository;
68
+ //# sourceMappingURL=UserRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/repositories/UserRepository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './EventRepository';
2
+ export * from './GroupRepository';
3
+ export * from './UserRepository';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/repositories/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,20 @@
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("./EventRepository"), exports);
18
+ __exportStar(require("./GroupRepository"), exports);
19
+ __exportStar(require("./UserRepository"), exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/infrastructure/repositories/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,oDAAkC;AAClC,mDAAiC"}
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "@kajidog/connpass-api-client",
3
+ "version": "0.1.0",
4
+ "description": "TypeScript client for Connpass API v2",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "dependencies": {
8
+ "axios": "^1.6.0",
9
+ "qs": "^6.11.2"
10
+ },
11
+ "devDependencies": {
12
+ "@types/node": "^20.0.0",
13
+ "@types/qs": "^6.9.10",
14
+ "typescript": "^5.0.0"
15
+ },
16
+ "keywords": [
17
+ "connpass",
18
+ "typescript"
19
+ ],
20
+ "type": "commonjs",
21
+ "license": "MIT",
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "https://github.com/kajidog/connpass-in-chatgpt.git",
25
+ "directory": "packages/api-client"
26
+ },
27
+ "bugs": {
28
+ "url": "https://github.com/kajidog/connpass-in-chatgpt/issues"
29
+ },
30
+ "homepage": "https://github.com/kajidog/connpass-in-chatgpt#readme",
31
+ "engines": {
32
+ "node": ">=18"
33
+ },
34
+ "files": [
35
+ "dist",
36
+ "README.md"
37
+ ],
38
+ "publishConfig": {
39
+ "access": "public"
40
+ },
41
+ "sideEffects": false,
42
+ "exports": {
43
+ ".": "./dist/index.js"
44
+ },
45
+ "scripts": {
46
+ "build": "tsc -b",
47
+ "dev": "tsc -b --watch",
48
+ "lint": "eslint src --ext .ts",
49
+ "typecheck": "tsc --noEmit"
50
+ }
51
+ }