mixi2-js 1.2.1 → 1.3.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.
@@ -1,5 +1,6 @@
1
- import { E as EventHandler, h as EventType, f as Event, c as Client, I as InitiatePostMediaUploadRequest, v as PostMask, D as PostPublishingType, e as CreatePostRequest, g as EventReason } from '../client-iXbbRxc-.cjs';
1
+ import { L as PostPublishingType, d as EventReason, f as EventType, h as InitiatePostMediaUploadRequest, j as PostMask, l as CreatePostRequest, o as EventHandler, t as Client, u as Event } from "../client-C90Zd_yq.cjs";
2
2
 
3
+ //#region src/helpers/address.d.ts
3
4
  /**
4
5
  * アクセストークン取得用のエンドポイント URL です。
5
6
  */
@@ -12,40 +13,91 @@ declare const apiAddress: string;
12
13
  * gRPC ストリーミング接続用のサーバーアドレスです。
13
14
  */
14
15
  declare const streamAddress: string;
15
-
16
+ //#endregion
17
+ //#region src/helpers/event-deduplicator.d.ts
18
+ interface EventDeduplicatorOptions {
19
+ /** 記憶する最大イベント数。デフォルト: 1000 */
20
+ maxSize?: number;
21
+ /** イベント ID を記憶する最大時間(ミリ秒)。デフォルト: 300000 (5 分) */
22
+ maxAge?: number;
23
+ }
24
+ /**
25
+ * 重複したイベントを検出してスキップするミドルウェア。
26
+ * Webhook 方式のリトライなどで同じイベントが複数回届いた場合に、
27
+ * 内部ハンドラへの二重処理を防ぐ。
28
+ *
29
+ * @example
30
+ * const dedup = new EventDeduplicator(innerHandler);
31
+ * const server = new WebhookServer({ handler: dedup, ... });
32
+ */
33
+ declare class EventDeduplicator implements EventHandler {
34
+ private readonly inner;
35
+ private readonly maxSize;
36
+ private readonly maxAge;
37
+ private readonly seen;
38
+ constructor(handler: EventHandler, options?: EventDeduplicatorOptions);
39
+ handle(event: Event): Promise<void>;
40
+ private evict;
41
+ }
42
+ //#endregion
43
+ //#region src/helpers/event-logger.d.ts
44
+ interface EventLoggerOptions {
45
+ /** ログ出力関数。デフォルト: console.log */
46
+ logger?: (message: string) => void;
47
+ /** イベントの詳細(eventId・eventType)をログに含めるか。デフォルト: true */
48
+ verbose?: boolean;
49
+ }
50
+ /**
51
+ * 受信したイベントをログ出力するデバッグ用ミドルウェア。
52
+ * 内部ハンドラへの処理はそのまま委譲する。
53
+ *
54
+ * @example
55
+ * const logger = new EventLogger(router);
56
+ * await watcher.watch(logger);
57
+ */
58
+ declare class EventLogger implements EventHandler {
59
+ private readonly inner;
60
+ private readonly logger;
61
+ private readonly verbose;
62
+ constructor(handler: EventHandler, options?: EventLoggerOptions);
63
+ handle(event: Event): Promise<void>;
64
+ }
65
+ //#endregion
66
+ //#region src/helpers/event-router.d.ts
16
67
  type EventListener = (event: Event) => void | Promise<void>;
17
68
  /**
18
69
  * イベントタイプ別にハンドラを登録できる EventHandler 実装。
19
70
  * StreamWatcher.watch() や WebhookServer に直接渡して使用できる。
20
71
  */
21
72
  declare class EventRouter implements EventHandler {
22
- private readonly listeners;
23
- /**
24
- * 指定したイベントタイプのハンドラを登録する。
25
- * 同じイベントタイプに複数のハンドラを登録可能(登録順に実行)。
26
- */
27
- on(eventType: EventType, listener: EventListener): this;
28
- /**
29
- * 指定したイベントタイプのハンドラを削除する。
30
- * listener を省略した場合、そのイベントタイプのすべてのハンドラを削除する。
31
- */
32
- off(eventType: EventType, listener?: EventListener): this;
33
- /**
34
- * EventHandler.handle() の実装。
35
- * 登録されたリスナーに対してイベントをルーティングする。
36
- */
37
- handle(event: Event): Promise<void>;
73
+ private readonly listeners;
74
+ /**
75
+ * 指定したイベントタイプのハンドラを登録する。
76
+ * 同じイベントタイプに複数のハンドラを登録可能(登録順に実行)。
77
+ */
78
+ on(eventType: EventType, listener: EventListener): this;
79
+ /**
80
+ * 指定したイベントタイプのハンドラを削除する。
81
+ * listener を省略した場合、そのイベントタイプのすべてのハンドラを削除する。
82
+ */
83
+ off(eventType: EventType, listener?: EventListener): this;
84
+ /**
85
+ * EventHandler.handle() の実装。
86
+ * 登録されたリスナーに対してイベントをルーティングする。
87
+ */
88
+ handle(event: Event): Promise<void>;
38
89
  }
39
-
90
+ //#endregion
91
+ //#region src/helpers/media-uploader.d.ts
40
92
  interface MediaUploaderOptions {
41
- /** ポーリング間隔(ミリ秒)。デフォルト: 1000 */
42
- pollInterval?: number;
43
- /** タイムアウト(ミリ秒)。デフォルト: 60000 */
44
- timeout?: number;
93
+ /** ポーリング間隔(ミリ秒)。デフォルト: 1000 */
94
+ pollInterval?: number;
95
+ /** タイムアウト(ミリ秒)。デフォルト: 60000 */
96
+ timeout?: number;
45
97
  }
46
98
  interface UploadedMedia {
47
- mediaId: string;
48
- uploadUrl: string;
99
+ mediaId: string;
100
+ uploadUrl: string;
49
101
  }
50
102
  /**
51
103
  * メディアアップロードの開始 → データ送信 → 処理完了待機を簡略化するヘルパー。
@@ -54,21 +106,22 @@ interface UploadedMedia {
54
106
  * このクラスで waitForReady() を呼ぶだけで完了まで待機できる。
55
107
  */
56
108
  declare class MediaUploader {
57
- private readonly client;
58
- private readonly pollInterval;
59
- private readonly timeout;
60
- constructor(client: Client, options?: MediaUploaderOptions);
61
- /**
62
- * メディアアップロードを開始し、uploadUrl と mediaId を返す。
63
- */
64
- initiate(request: InitiatePostMediaUploadRequest): Promise<UploadedMedia>;
65
- /**
66
- * メディアの処理が完了するまでポーリングして待機する。
67
- * 完了時に mediaId を返す。失敗時はエラーをスローする。
68
- */
69
- waitForReady(mediaId: string): Promise<string>;
109
+ private readonly client;
110
+ private readonly pollInterval;
111
+ private readonly timeout;
112
+ constructor(client: Client, options?: MediaUploaderOptions);
113
+ /**
114
+ * メディアアップロードを開始し、uploadUrl と mediaId を返す。
115
+ */
116
+ initiate(request: InitiatePostMediaUploadRequest): Promise<UploadedMedia>;
117
+ /**
118
+ * メディアの処理が完了するまでポーリングして待機する。
119
+ * 完了時に mediaId を返す。失敗時はエラーをスローする。
120
+ */
121
+ waitForReady(mediaId: string): Promise<string>;
70
122
  }
71
-
123
+ //#endregion
124
+ //#region src/helpers/post-builder.d.ts
72
125
  /**
73
126
  * ポスト作成リクエストをメソッドチェーンで組み立てるビルダー。
74
127
  *
@@ -80,26 +133,27 @@ declare class MediaUploader {
80
133
  * .build();
81
134
  */
82
135
  declare class PostBuilder {
83
- private readonly request;
84
- constructor(text: string);
85
- /** 返信先ポスト ID を設定する。 */
86
- reply(postId: string): this;
87
- /** 引用対象ポスト ID を設定する。 */
88
- quote(postId: string): this;
89
- /** 添付メディア ID を設定する(最大 4 件)。 */
90
- media(mediaIdList: string[]): this;
91
- /** センシティブマスクを設定する。 */
92
- sensitive(caption?: string): this;
93
- /** ネタバレマスクを設定する。 */
94
- spoiler(caption?: string): this;
95
- /** カスタムマスクを設定する。 */
96
- mask(postMask: PostMask): this;
97
- /** 配信設定を設定する。 */
98
- publishing(type: PostPublishingType): this;
99
- /** CreatePostRequest オブジェクトを構築する。 */
100
- build(): CreatePostRequest;
136
+ private readonly request;
137
+ constructor(text: string);
138
+ /** 返信先ポスト ID を設定する。 */
139
+ reply(postId: string): this;
140
+ /** 引用対象ポスト ID を設定する。 */
141
+ quote(postId: string): this;
142
+ /** 添付メディア ID を設定する(最大 4 件)。 */
143
+ media(mediaIdList: string[]): this;
144
+ /** センシティブマスクを設定する。 */
145
+ sensitive(caption?: string): this;
146
+ /** ネタバレマスクを設定する。 */
147
+ spoiler(caption?: string): this;
148
+ /** カスタムマスクを設定する。 */
149
+ mask(postMask: PostMask): this;
150
+ /** 配信設定を設定する。 */
151
+ publishing(type: PostPublishingType): this;
152
+ /** CreatePostRequest オブジェクトを構築する。 */
153
+ build(): CreatePostRequest;
101
154
  }
102
-
155
+ //#endregion
156
+ //#region src/helpers/reason-filter.d.ts
103
157
  /**
104
158
  * EventReason に基づいてイベントをフィルタリングするミドルウェア。
105
159
  * 指定した理由に一致するイベントのみを内部のハンドラに渡す。
@@ -112,11 +166,42 @@ declare class PostBuilder {
112
166
  * await watcher.watch(filter);
113
167
  */
114
168
  declare class ReasonFilter implements EventHandler {
115
- private readonly inner;
116
- private readonly allowedReasons;
117
- constructor(handler: EventHandler, reasons: EventReason[]);
118
- handle(event: Event): Promise<void>;
119
- private getReasons;
169
+ private readonly inner;
170
+ private readonly allowedReasons;
171
+ constructor(handler: EventHandler, reasons: EventReason[]);
172
+ handle(event: Event): Promise<void>;
173
+ private getReasons;
120
174
  }
121
-
122
- export { EventRouter, MediaUploader, type MediaUploaderOptions, PostBuilder, ReasonFilter, type UploadedMedia, apiAddress, streamAddress, tokenUrl };
175
+ //#endregion
176
+ //#region src/helpers/text-splitter.d.ts
177
+ /** mixi2 の 1 ポストあたりの最大文字数 */
178
+ declare const maxPostLength = 149;
179
+ interface TextSplitterOptions {
180
+ /** 1 ポストあたりの最大文字数。デフォルト: 149 */
181
+ maxLength?: number;
182
+ /** 単語境界(スペース・句読点)で分割を試みるか。デフォルト: true */
183
+ splitOnWord?: boolean;
184
+ }
185
+ /**
186
+ * 長いテキストを mixi2 の文字数制限内に収まる複数チャンクに分割するヘルパー。
187
+ * デフォルトは 149 文字制限(mixi2 のポスト本文上限)に準拠。
188
+ *
189
+ * @example
190
+ * const splitter = new TextSplitter();
191
+ * const chunks = splitter.split('長いテキスト...');
192
+ * for (const chunk of chunks) {
193
+ * await client.createPost({ text: chunk });
194
+ * }
195
+ */
196
+ declare class TextSplitter {
197
+ private readonly maxLength;
198
+ private readonly splitOnWord;
199
+ constructor(options?: TextSplitterOptions);
200
+ /**
201
+ * テキストを maxLength 以内の複数チャンクに分割して返す。
202
+ * テキストが maxLength 以内の場合は 1 要素の配列を返す。
203
+ */
204
+ split(text: string): string[];
205
+ }
206
+ //#endregion
207
+ export { EventDeduplicator, type EventDeduplicatorOptions, EventLogger, type EventLoggerOptions, EventRouter, MediaUploader, type MediaUploaderOptions, PostBuilder, ReasonFilter, TextSplitter, type TextSplitterOptions, type UploadedMedia, apiAddress, maxPostLength, streamAddress, tokenUrl };
@@ -0,0 +1,207 @@
1
+ import { L as PostPublishingType, d as EventReason, f as EventType, h as InitiatePostMediaUploadRequest, j as PostMask, l as CreatePostRequest, o as EventHandler, t as Client, u as Event } from "../client-DPeVTCYr.mjs";
2
+
3
+ //#region src/helpers/address.d.ts
4
+ /**
5
+ * アクセストークン取得用のエンドポイント URL です。
6
+ */
7
+ declare const tokenUrl: string;
8
+ /**
9
+ * API サーバーアドレスです。
10
+ */
11
+ declare const apiAddress: string;
12
+ /**
13
+ * gRPC ストリーミング接続用のサーバーアドレスです。
14
+ */
15
+ declare const streamAddress: string;
16
+ //#endregion
17
+ //#region src/helpers/event-deduplicator.d.ts
18
+ interface EventDeduplicatorOptions {
19
+ /** 記憶する最大イベント数。デフォルト: 1000 */
20
+ maxSize?: number;
21
+ /** イベント ID を記憶する最大時間(ミリ秒)。デフォルト: 300000 (5 分) */
22
+ maxAge?: number;
23
+ }
24
+ /**
25
+ * 重複したイベントを検出してスキップするミドルウェア。
26
+ * Webhook 方式のリトライなどで同じイベントが複数回届いた場合に、
27
+ * 内部ハンドラへの二重処理を防ぐ。
28
+ *
29
+ * @example
30
+ * const dedup = new EventDeduplicator(innerHandler);
31
+ * const server = new WebhookServer({ handler: dedup, ... });
32
+ */
33
+ declare class EventDeduplicator implements EventHandler {
34
+ private readonly inner;
35
+ private readonly maxSize;
36
+ private readonly maxAge;
37
+ private readonly seen;
38
+ constructor(handler: EventHandler, options?: EventDeduplicatorOptions);
39
+ handle(event: Event): Promise<void>;
40
+ private evict;
41
+ }
42
+ //#endregion
43
+ //#region src/helpers/event-logger.d.ts
44
+ interface EventLoggerOptions {
45
+ /** ログ出力関数。デフォルト: console.log */
46
+ logger?: (message: string) => void;
47
+ /** イベントの詳細(eventId・eventType)をログに含めるか。デフォルト: true */
48
+ verbose?: boolean;
49
+ }
50
+ /**
51
+ * 受信したイベントをログ出力するデバッグ用ミドルウェア。
52
+ * 内部ハンドラへの処理はそのまま委譲する。
53
+ *
54
+ * @example
55
+ * const logger = new EventLogger(router);
56
+ * await watcher.watch(logger);
57
+ */
58
+ declare class EventLogger implements EventHandler {
59
+ private readonly inner;
60
+ private readonly logger;
61
+ private readonly verbose;
62
+ constructor(handler: EventHandler, options?: EventLoggerOptions);
63
+ handle(event: Event): Promise<void>;
64
+ }
65
+ //#endregion
66
+ //#region src/helpers/event-router.d.ts
67
+ type EventListener = (event: Event) => void | Promise<void>;
68
+ /**
69
+ * イベントタイプ別にハンドラを登録できる EventHandler 実装。
70
+ * StreamWatcher.watch() や WebhookServer に直接渡して使用できる。
71
+ */
72
+ declare class EventRouter implements EventHandler {
73
+ private readonly listeners;
74
+ /**
75
+ * 指定したイベントタイプのハンドラを登録する。
76
+ * 同じイベントタイプに複数のハンドラを登録可能(登録順に実行)。
77
+ */
78
+ on(eventType: EventType, listener: EventListener): this;
79
+ /**
80
+ * 指定したイベントタイプのハンドラを削除する。
81
+ * listener を省略した場合、そのイベントタイプのすべてのハンドラを削除する。
82
+ */
83
+ off(eventType: EventType, listener?: EventListener): this;
84
+ /**
85
+ * EventHandler.handle() の実装。
86
+ * 登録されたリスナーに対してイベントをルーティングする。
87
+ */
88
+ handle(event: Event): Promise<void>;
89
+ }
90
+ //#endregion
91
+ //#region src/helpers/media-uploader.d.ts
92
+ interface MediaUploaderOptions {
93
+ /** ポーリング間隔(ミリ秒)。デフォルト: 1000 */
94
+ pollInterval?: number;
95
+ /** タイムアウト(ミリ秒)。デフォルト: 60000 */
96
+ timeout?: number;
97
+ }
98
+ interface UploadedMedia {
99
+ mediaId: string;
100
+ uploadUrl: string;
101
+ }
102
+ /**
103
+ * メディアアップロードの開始 → データ送信 → 処理完了待機を簡略化するヘルパー。
104
+ *
105
+ * 通常は initiatePostMediaUpload → HTTP POST → getPostMediaStatus のポーリングが必要だが、
106
+ * このクラスで waitForReady() を呼ぶだけで完了まで待機できる。
107
+ */
108
+ declare class MediaUploader {
109
+ private readonly client;
110
+ private readonly pollInterval;
111
+ private readonly timeout;
112
+ constructor(client: Client, options?: MediaUploaderOptions);
113
+ /**
114
+ * メディアアップロードを開始し、uploadUrl と mediaId を返す。
115
+ */
116
+ initiate(request: InitiatePostMediaUploadRequest): Promise<UploadedMedia>;
117
+ /**
118
+ * メディアの処理が完了するまでポーリングして待機する。
119
+ * 完了時に mediaId を返す。失敗時はエラーをスローする。
120
+ */
121
+ waitForReady(mediaId: string): Promise<string>;
122
+ }
123
+ //#endregion
124
+ //#region src/helpers/post-builder.d.ts
125
+ /**
126
+ * ポスト作成リクエストをメソッドチェーンで組み立てるビルダー。
127
+ *
128
+ * @example
129
+ * const request = new PostBuilder('Hello mixi2!')
130
+ * .reply('post-id')
131
+ * .media(['media-id-1'])
132
+ * .sensitive()
133
+ * .build();
134
+ */
135
+ declare class PostBuilder {
136
+ private readonly request;
137
+ constructor(text: string);
138
+ /** 返信先ポスト ID を設定する。 */
139
+ reply(postId: string): this;
140
+ /** 引用対象ポスト ID を設定する。 */
141
+ quote(postId: string): this;
142
+ /** 添付メディア ID を設定する(最大 4 件)。 */
143
+ media(mediaIdList: string[]): this;
144
+ /** センシティブマスクを設定する。 */
145
+ sensitive(caption?: string): this;
146
+ /** ネタバレマスクを設定する。 */
147
+ spoiler(caption?: string): this;
148
+ /** カスタムマスクを設定する。 */
149
+ mask(postMask: PostMask): this;
150
+ /** 配信設定を設定する。 */
151
+ publishing(type: PostPublishingType): this;
152
+ /** CreatePostRequest オブジェクトを構築する。 */
153
+ build(): CreatePostRequest;
154
+ }
155
+ //#endregion
156
+ //#region src/helpers/reason-filter.d.ts
157
+ /**
158
+ * EventReason に基づいてイベントをフィルタリングするミドルウェア。
159
+ * 指定した理由に一致するイベントのみを内部のハンドラに渡す。
160
+ *
161
+ * @example
162
+ * const filter = new ReasonFilter(innerHandler, [
163
+ * EventReason.POST_REPLY,
164
+ * EventReason.POST_MENTIONED,
165
+ * ]);
166
+ * await watcher.watch(filter);
167
+ */
168
+ declare class ReasonFilter implements EventHandler {
169
+ private readonly inner;
170
+ private readonly allowedReasons;
171
+ constructor(handler: EventHandler, reasons: EventReason[]);
172
+ handle(event: Event): Promise<void>;
173
+ private getReasons;
174
+ }
175
+ //#endregion
176
+ //#region src/helpers/text-splitter.d.ts
177
+ /** mixi2 の 1 ポストあたりの最大文字数 */
178
+ declare const maxPostLength = 149;
179
+ interface TextSplitterOptions {
180
+ /** 1 ポストあたりの最大文字数。デフォルト: 149 */
181
+ maxLength?: number;
182
+ /** 単語境界(スペース・句読点)で分割を試みるか。デフォルト: true */
183
+ splitOnWord?: boolean;
184
+ }
185
+ /**
186
+ * 長いテキストを mixi2 の文字数制限内に収まる複数チャンクに分割するヘルパー。
187
+ * デフォルトは 149 文字制限(mixi2 のポスト本文上限)に準拠。
188
+ *
189
+ * @example
190
+ * const splitter = new TextSplitter();
191
+ * const chunks = splitter.split('長いテキスト...');
192
+ * for (const chunk of chunks) {
193
+ * await client.createPost({ text: chunk });
194
+ * }
195
+ */
196
+ declare class TextSplitter {
197
+ private readonly maxLength;
198
+ private readonly splitOnWord;
199
+ constructor(options?: TextSplitterOptions);
200
+ /**
201
+ * テキストを maxLength 以内の複数チャンクに分割して返す。
202
+ * テキストが maxLength 以内の場合は 1 要素の配列を返す。
203
+ */
204
+ split(text: string): string[];
205
+ }
206
+ //#endregion
207
+ export { EventDeduplicator, type EventDeduplicatorOptions, EventLogger, type EventLoggerOptions, EventRouter, MediaUploader, type MediaUploaderOptions, PostBuilder, ReasonFilter, TextSplitter, type TextSplitterOptions, type UploadedMedia, apiAddress, maxPostLength, streamAddress, tokenUrl };