@framers/agentos-ext-channel-reddit 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 (47) hide show
  1. package/LICENSE +98 -0
  2. package/dist/RedditChannelAdapter.d.ts +30 -0
  3. package/dist/RedditChannelAdapter.d.ts.map +1 -0
  4. package/dist/RedditChannelAdapter.js +195 -0
  5. package/dist/RedditChannelAdapter.js.map +1 -0
  6. package/dist/RedditService.d.ts +135 -0
  7. package/dist/RedditService.d.ts.map +1 -0
  8. package/dist/RedditService.js +420 -0
  9. package/dist/RedditService.js.map +1 -0
  10. package/dist/index.d.ts +33 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +110 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/tools/analytics.d.ts +96 -0
  15. package/dist/tools/analytics.d.ts.map +1 -0
  16. package/dist/tools/analytics.js +81 -0
  17. package/dist/tools/analytics.js.map +1 -0
  18. package/dist/tools/comment.d.ts +56 -0
  19. package/dist/tools/comment.d.ts.map +1 -0
  20. package/dist/tools/comment.js +72 -0
  21. package/dist/tools/comment.js.map +1 -0
  22. package/dist/tools/inbox.d.ts +103 -0
  23. package/dist/tools/inbox.d.ts.map +1 -0
  24. package/dist/tools/inbox.js +137 -0
  25. package/dist/tools/inbox.js.map +1 -0
  26. package/dist/tools/search.d.ts +106 -0
  27. package/dist/tools/search.d.ts.map +1 -0
  28. package/dist/tools/search.js +113 -0
  29. package/dist/tools/search.js.map +1 -0
  30. package/dist/tools/submitPost.d.ts +99 -0
  31. package/dist/tools/submitPost.d.ts.map +1 -0
  32. package/dist/tools/submitPost.js +109 -0
  33. package/dist/tools/submitPost.js.map +1 -0
  34. package/dist/tools/subscribe.d.ts +57 -0
  35. package/dist/tools/subscribe.d.ts.map +1 -0
  36. package/dist/tools/subscribe.js +73 -0
  37. package/dist/tools/subscribe.js.map +1 -0
  38. package/dist/tools/trending.d.ts +98 -0
  39. package/dist/tools/trending.d.ts.map +1 -0
  40. package/dist/tools/trending.js +107 -0
  41. package/dist/tools/trending.js.map +1 -0
  42. package/dist/tools/vote.d.ts +57 -0
  43. package/dist/tools/vote.d.ts.map +1 -0
  44. package/dist/tools/vote.js +73 -0
  45. package/dist/tools/vote.js.map +1 -0
  46. package/manifest.json +73 -0
  47. package/package.json +51 -0
@@ -0,0 +1,420 @@
1
+ "use strict";
2
+ // @ts-nocheck
3
+ /**
4
+ * @fileoverview Reddit SDK wrapper using snoowrap.
5
+ * Handles OAuth2 lifecycle, posting, commenting, voting, searching, messaging, and analytics.
6
+ */
7
+ var __importDefault = (this && this.__importDefault) || function (mod) {
8
+ return (mod && mod.__esModule) ? mod : { "default": mod };
9
+ };
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.RedditService = void 0;
12
+ const snoowrap_1 = __importDefault(require("snoowrap"));
13
+ class RedditService {
14
+ constructor(config) {
15
+ this.client = null;
16
+ this.running = false;
17
+ this.inboxPollInterval = null;
18
+ this.inboxHandlers = [];
19
+ this.lastSeenMessageId = null;
20
+ this.config = config;
21
+ }
22
+ async initialize() {
23
+ if (this.running)
24
+ return;
25
+ this.client = new snoowrap_1.default({
26
+ userAgent: this.config.userAgent ?? `AgentOS:RedditChannelExt:v0.1.0 (by /u/${this.config.username})`,
27
+ clientId: this.config.clientId,
28
+ clientSecret: this.config.clientSecret,
29
+ username: this.config.username,
30
+ password: this.config.password,
31
+ });
32
+ // Configure snoowrap settings
33
+ this.client.config({
34
+ requestDelay: 1000,
35
+ continueAfterRatelimitError: true,
36
+ retryDelay: 5000,
37
+ maxRetryAttempts: 3,
38
+ warnings: false,
39
+ });
40
+ // Validate credentials by fetching the authenticated user
41
+ try {
42
+ await this.client.getMe();
43
+ this.running = true;
44
+ }
45
+ catch (err) {
46
+ this.client = null;
47
+ throw new Error(`Reddit authentication failed: ${err.message}`);
48
+ }
49
+ // Start polling inbox for new messages
50
+ this.startInboxPolling();
51
+ }
52
+ async shutdown() {
53
+ if (!this.running)
54
+ return;
55
+ this.stopInboxPolling();
56
+ this.client = null;
57
+ this.running = false;
58
+ this.inboxHandlers = [];
59
+ this.lastSeenMessageId = null;
60
+ }
61
+ get isRunning() {
62
+ return this.running;
63
+ }
64
+ // ── Posting ──
65
+ async submitPost(options) {
66
+ const client = this.requireClient();
67
+ const subreddit = client.getSubreddit(options.subreddit);
68
+ let submission;
69
+ switch (options.type) {
70
+ case 'text':
71
+ submission = await subreddit.submitSelfpost({
72
+ title: options.title,
73
+ text: options.content,
74
+ flairId: options.flairId,
75
+ nsfw: options.nsfw,
76
+ spoiler: options.spoiler,
77
+ });
78
+ break;
79
+ case 'link':
80
+ submission = await subreddit.submitLink({
81
+ title: options.title,
82
+ url: options.content,
83
+ flairId: options.flairId,
84
+ nsfw: options.nsfw,
85
+ spoiler: options.spoiler,
86
+ });
87
+ break;
88
+ case 'image':
89
+ // snoowrap does not natively support image uploads; submit as link
90
+ submission = await subreddit.submitLink({
91
+ title: options.title,
92
+ url: options.content,
93
+ flairId: options.flairId,
94
+ nsfw: options.nsfw,
95
+ spoiler: options.spoiler,
96
+ });
97
+ break;
98
+ case 'poll':
99
+ // Reddit API poll endpoint — snoowrap may not have native support,
100
+ // fall back to text post with poll options in body
101
+ const pollBody = options.pollOptions
102
+ ? `Poll options:\n${options.pollOptions.map((o, i) => `${i + 1}. ${o}`).join('\n')}\n\n${options.content}`
103
+ : options.content;
104
+ submission = await subreddit.submitSelfpost({
105
+ title: options.title,
106
+ text: pollBody,
107
+ flairId: options.flairId,
108
+ nsfw: options.nsfw,
109
+ spoiler: options.spoiler,
110
+ });
111
+ break;
112
+ default:
113
+ throw new Error(`Unsupported post type: ${options.type}`);
114
+ }
115
+ return {
116
+ id: submission.name.replace(/^t3_/, ''),
117
+ name: submission.name,
118
+ url: `https://www.reddit.com${submission.permalink}`,
119
+ permalink: submission.permalink,
120
+ };
121
+ }
122
+ // ── Commenting ──
123
+ async comment(thingId, text) {
124
+ const client = this.requireClient();
125
+ // thingId can be a post (t3_xxx) or comment (t1_xxx) fullname
126
+ const fullname = this.ensureFullname(thingId);
127
+ let parent;
128
+ if (fullname.startsWith('t3_')) {
129
+ parent = client.getSubmission(fullname.replace(/^t3_/, ''));
130
+ }
131
+ else if (fullname.startsWith('t1_')) {
132
+ parent = client.getComment(fullname.replace(/^t1_/, ''));
133
+ }
134
+ else {
135
+ throw new Error(`Invalid thing ID for commenting: ${thingId}`);
136
+ }
137
+ const reply = await parent.reply(text);
138
+ return {
139
+ id: reply.name.replace(/^t1_/, ''),
140
+ name: reply.name,
141
+ permalink: reply.permalink ?? '',
142
+ };
143
+ }
144
+ // ── Voting ──
145
+ async vote(thingId, direction) {
146
+ const client = this.requireClient();
147
+ const fullname = this.ensureFullname(thingId);
148
+ let thing;
149
+ if (fullname.startsWith('t3_')) {
150
+ thing = client.getSubmission(fullname.replace(/^t3_/, ''));
151
+ }
152
+ else if (fullname.startsWith('t1_')) {
153
+ thing = client.getComment(fullname.replace(/^t1_/, ''));
154
+ }
155
+ else {
156
+ throw new Error(`Invalid thing ID for voting: ${thingId}`);
157
+ }
158
+ switch (direction) {
159
+ case 'up':
160
+ await thing.upvote();
161
+ break;
162
+ case 'down':
163
+ await thing.downvote();
164
+ break;
165
+ case 'none':
166
+ await thing.unvote();
167
+ break;
168
+ }
169
+ }
170
+ // ── Search ──
171
+ async search(query, options) {
172
+ const client = this.requireClient();
173
+ const limit = options?.limit ?? 25;
174
+ const sort = options?.sort ?? 'relevance';
175
+ const time = options?.time ?? 'all';
176
+ let results;
177
+ if (options?.subreddit) {
178
+ results = await client.getSubreddit(options.subreddit).search({
179
+ query,
180
+ sort: sort,
181
+ time: time,
182
+ limit,
183
+ });
184
+ }
185
+ else {
186
+ results = await client.search({
187
+ query,
188
+ sort: sort,
189
+ time: time,
190
+ limit,
191
+ });
192
+ }
193
+ return results.map((post) => ({
194
+ id: post.id,
195
+ title: post.title,
196
+ author: post.author?.name ?? '[deleted]',
197
+ subreddit: post.subreddit?.display_name ?? post.subreddit_name_prefixed?.replace('r/', '') ?? '',
198
+ score: post.score,
199
+ numComments: post.num_comments,
200
+ url: post.url,
201
+ permalink: `https://www.reddit.com${post.permalink}`,
202
+ createdUtc: post.created_utc,
203
+ selftext: post.selftext ?? '',
204
+ }));
205
+ }
206
+ // ── Trending ──
207
+ async getTrending(options) {
208
+ const client = this.requireClient();
209
+ const limit = options?.limit ?? 25;
210
+ const sort = options?.sort ?? 'hot';
211
+ const time = options?.time ?? 'day';
212
+ const subredditName = options?.subreddit;
213
+ let listing;
214
+ const subreddit = subredditName ? client.getSubreddit(subredditName) : client;
215
+ switch (sort) {
216
+ case 'hot':
217
+ listing = await subreddit.getHot({ limit });
218
+ break;
219
+ case 'top':
220
+ listing = await subreddit.getTop({ time: time, limit });
221
+ break;
222
+ case 'rising':
223
+ listing = await subreddit.getRising({ limit });
224
+ break;
225
+ case 'new':
226
+ listing = await subreddit.getNew({ limit });
227
+ break;
228
+ case 'controversial':
229
+ listing = await subreddit.getControversial({ time: time, limit });
230
+ break;
231
+ default:
232
+ listing = await subreddit.getHot({ limit });
233
+ }
234
+ return listing.map((post) => ({
235
+ id: post.id,
236
+ title: post.title,
237
+ author: post.author?.name ?? '[deleted]',
238
+ subreddit: post.subreddit?.display_name ?? post.subreddit_name_prefixed?.replace('r/', '') ?? '',
239
+ score: post.score,
240
+ numComments: post.num_comments,
241
+ url: post.url,
242
+ permalink: `https://www.reddit.com${post.permalink}`,
243
+ createdUtc: post.created_utc,
244
+ }));
245
+ }
246
+ // ── Subscribe/Unsubscribe ──
247
+ async subscribe(subreddit, action) {
248
+ const client = this.requireClient();
249
+ const sub = client.getSubreddit(subreddit);
250
+ if (action === 'subscribe') {
251
+ await sub.subscribe();
252
+ }
253
+ else {
254
+ await sub.unsubscribe();
255
+ }
256
+ }
257
+ // ── Inbox ──
258
+ async getInbox(options) {
259
+ const client = this.requireClient();
260
+ const limit = options?.limit ?? 25;
261
+ const filter = options?.filter ?? 'all';
262
+ let messages;
263
+ if (filter === 'unread') {
264
+ messages = await client.getUnreadMessages({ limit });
265
+ }
266
+ else {
267
+ messages = await client.getInbox({ limit });
268
+ }
269
+ return messages.map((msg) => ({
270
+ id: msg.id,
271
+ author: msg.author?.name ?? msg.author ?? '[unknown]',
272
+ subject: msg.subject ?? '',
273
+ body: msg.body ?? '',
274
+ createdUtc: msg.created_utc,
275
+ isUnread: msg.new ?? false,
276
+ parentId: msg.parent_id ?? undefined,
277
+ }));
278
+ }
279
+ async sendMessage(to, subject, body) {
280
+ const client = this.requireClient();
281
+ await client.composeMessage({
282
+ to,
283
+ subject,
284
+ text: body,
285
+ });
286
+ }
287
+ // ── Analytics ──
288
+ async getAnalytics(username) {
289
+ const client = this.requireClient();
290
+ const user = username ? client.getUser(username) : await client.getMe();
291
+ const userData = await user.fetch();
292
+ // Fetch recent submissions and comments for activity metrics
293
+ let recentPosts = 0;
294
+ let recentComments = 0;
295
+ const topSubreddits = new Map();
296
+ try {
297
+ const submissions = await user.getSubmissions({ limit: 100 });
298
+ recentPosts = submissions.length;
299
+ for (const sub of submissions) {
300
+ const srName = sub.subreddit?.display_name ?? '';
301
+ if (srName) {
302
+ topSubreddits.set(srName, (topSubreddits.get(srName) ?? 0) + 1);
303
+ }
304
+ }
305
+ }
306
+ catch {
307
+ // User may have private submissions
308
+ }
309
+ try {
310
+ const comments = await user.getComments({ limit: 100 });
311
+ recentComments = comments.length;
312
+ for (const comment of comments) {
313
+ const srName = comment.subreddit?.display_name ?? '';
314
+ if (srName) {
315
+ topSubreddits.set(srName, (topSubreddits.get(srName) ?? 0) + 1);
316
+ }
317
+ }
318
+ }
319
+ catch {
320
+ // User may have private comments
321
+ }
322
+ const sortedSubreddits = Array.from(topSubreddits.entries())
323
+ .sort((a, b) => b[1] - a[1])
324
+ .slice(0, 10)
325
+ .map(([subreddit, count]) => ({ subreddit, count }));
326
+ return {
327
+ username: userData.name,
328
+ linkKarma: userData.link_karma ?? 0,
329
+ commentKarma: userData.comment_karma ?? 0,
330
+ totalKarma: (userData.link_karma ?? 0) + (userData.comment_karma ?? 0),
331
+ accountCreatedUtc: userData.created_utc,
332
+ isGold: userData.is_gold ?? false,
333
+ isMod: userData.is_mod ?? false,
334
+ topSubreddits: sortedSubreddits,
335
+ recentActivity: {
336
+ posts: recentPosts,
337
+ comments: recentComments,
338
+ },
339
+ };
340
+ }
341
+ // ── Inbox Polling (for inbound message events) ──
342
+ onInboxMessage(handler) {
343
+ this.inboxHandlers.push(handler);
344
+ }
345
+ offInboxMessage(handler) {
346
+ const idx = this.inboxHandlers.indexOf(handler);
347
+ if (idx >= 0)
348
+ this.inboxHandlers.splice(idx, 1);
349
+ }
350
+ /**
351
+ * Access the underlying snoowrap client for advanced operations.
352
+ * Throws if the service has not been initialized.
353
+ */
354
+ getClient() {
355
+ return this.requireClient();
356
+ }
357
+ getBotInfo() {
358
+ if (!this.running || !this.config.username)
359
+ return null;
360
+ return { username: this.config.username };
361
+ }
362
+ // ── Private ──
363
+ requireClient() {
364
+ if (!this.client)
365
+ throw new Error('RedditService not initialized');
366
+ return this.client;
367
+ }
368
+ ensureFullname(thingId) {
369
+ // If already a fullname (t1_, t3_, t4_, etc.), return as-is
370
+ if (/^t\d_/.test(thingId))
371
+ return thingId;
372
+ // Default to post (t3_) if no prefix — caller should provide proper prefix
373
+ return `t3_${thingId}`;
374
+ }
375
+ startInboxPolling() {
376
+ // Poll every 60 seconds for new inbox messages
377
+ this.inboxPollInterval = setInterval(async () => {
378
+ try {
379
+ await this.pollInbox();
380
+ }
381
+ catch (err) {
382
+ console.error('[RedditService] Inbox polling error:', err.message);
383
+ }
384
+ }, 60000);
385
+ }
386
+ stopInboxPolling() {
387
+ if (this.inboxPollInterval) {
388
+ clearInterval(this.inboxPollInterval);
389
+ this.inboxPollInterval = null;
390
+ }
391
+ }
392
+ async pollInbox() {
393
+ if (!this.client || this.inboxHandlers.length === 0)
394
+ return;
395
+ const unread = await this.client.getUnreadMessages({ limit: 10 });
396
+ for (const msg of unread) {
397
+ const msgAny = msg;
398
+ // Skip if we've already seen this message
399
+ if (this.lastSeenMessageId && msgAny.id === this.lastSeenMessageId)
400
+ break;
401
+ const parsed = {
402
+ id: msgAny.id,
403
+ author: msgAny.author?.name ?? msgAny.author ?? '[unknown]',
404
+ subject: msgAny.subject ?? '',
405
+ body: msgAny.body ?? '',
406
+ createdUtc: msgAny.created_utc,
407
+ isUnread: true,
408
+ parentId: msgAny.parent_id ?? undefined,
409
+ };
410
+ for (const handler of this.inboxHandlers) {
411
+ handler(parsed);
412
+ }
413
+ }
414
+ if (unread.length > 0) {
415
+ this.lastSeenMessageId = unread[0].id;
416
+ }
417
+ }
418
+ }
419
+ exports.RedditService = RedditService;
420
+ //# sourceMappingURL=RedditService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RedditService.js","sourceRoot":"","sources":["../src/RedditService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * @fileoverview Reddit Channel Extension for AgentOS.
3
+ *
4
+ * Provides a bidirectional Reddit channel adapter using snoowrap,
5
+ * plus ITool descriptors for posting, commenting, voting, searching,
6
+ * trending, subscriptions, messaging, and analytics.
7
+ *
8
+ * @module @framers/agentos-ext-channel-reddit
9
+ */
10
+ import type { ExtensionContext, ExtensionPack } from '@framers/agentos';
11
+ import { RedditService, type RedditServiceConfig } from './RedditService';
12
+ import { RedditChannelAdapter } from './RedditChannelAdapter';
13
+ import { RedditSubmitPostTool } from './tools/submitPost';
14
+ import { RedditCommentTool } from './tools/comment';
15
+ import { RedditVoteTool } from './tools/vote';
16
+ import { RedditSearchTool } from './tools/search';
17
+ import { RedditTrendingTool } from './tools/trending';
18
+ import { RedditSubscribeTool } from './tools/subscribe';
19
+ import { RedditInboxTool } from './tools/inbox';
20
+ import { RedditAnalyticsTool } from './tools/analytics';
21
+ export interface RedditChannelOptions {
22
+ clientId?: string;
23
+ clientSecret?: string;
24
+ username?: string;
25
+ password?: string;
26
+ userAgent?: string;
27
+ priority?: number;
28
+ }
29
+ export declare function createExtensionPack(context: ExtensionContext): ExtensionPack;
30
+ export { RedditService, RedditChannelAdapter, RedditSubmitPostTool, RedditCommentTool, RedditVoteTool, RedditSearchTool, RedditTrendingTool, RedditSubscribeTool, RedditInboxTool, RedditAnalyticsTool, };
31
+ export type { RedditServiceConfig };
32
+ export default createExtensionPack;
33
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAwDD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,GAAG,aAAa,CA4C5E;AAED,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,mBAAmB,GACpB,CAAC;AACF,YAAY,EAAE,mBAAmB,EAAE,CAAC;AACpC,eAAe,mBAAmB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ // @ts-nocheck
3
+ /**
4
+ * @fileoverview Reddit Channel Extension for AgentOS.
5
+ *
6
+ * Provides a bidirectional Reddit channel adapter using snoowrap,
7
+ * plus ITool descriptors for posting, commenting, voting, searching,
8
+ * trending, subscriptions, messaging, and analytics.
9
+ *
10
+ * @module @framers/agentos-ext-channel-reddit
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.RedditAnalyticsTool = exports.RedditInboxTool = exports.RedditSubscribeTool = exports.RedditTrendingTool = exports.RedditSearchTool = exports.RedditVoteTool = exports.RedditCommentTool = exports.RedditSubmitPostTool = exports.RedditChannelAdapter = exports.RedditService = void 0;
14
+ exports.createExtensionPack = createExtensionPack;
15
+ const RedditService_1 = require("./RedditService");
16
+ Object.defineProperty(exports, "RedditService", { enumerable: true, get: function () { return RedditService_1.RedditService; } });
17
+ const RedditChannelAdapter_1 = require("./RedditChannelAdapter");
18
+ Object.defineProperty(exports, "RedditChannelAdapter", { enumerable: true, get: function () { return RedditChannelAdapter_1.RedditChannelAdapter; } });
19
+ const submitPost_1 = require("./tools/submitPost");
20
+ Object.defineProperty(exports, "RedditSubmitPostTool", { enumerable: true, get: function () { return submitPost_1.RedditSubmitPostTool; } });
21
+ const comment_1 = require("./tools/comment");
22
+ Object.defineProperty(exports, "RedditCommentTool", { enumerable: true, get: function () { return comment_1.RedditCommentTool; } });
23
+ const vote_1 = require("./tools/vote");
24
+ Object.defineProperty(exports, "RedditVoteTool", { enumerable: true, get: function () { return vote_1.RedditVoteTool; } });
25
+ const search_1 = require("./tools/search");
26
+ Object.defineProperty(exports, "RedditSearchTool", { enumerable: true, get: function () { return search_1.RedditSearchTool; } });
27
+ const trending_1 = require("./tools/trending");
28
+ Object.defineProperty(exports, "RedditTrendingTool", { enumerable: true, get: function () { return trending_1.RedditTrendingTool; } });
29
+ const subscribe_1 = require("./tools/subscribe");
30
+ Object.defineProperty(exports, "RedditSubscribeTool", { enumerable: true, get: function () { return subscribe_1.RedditSubscribeTool; } });
31
+ const inbox_1 = require("./tools/inbox");
32
+ Object.defineProperty(exports, "RedditInboxTool", { enumerable: true, get: function () { return inbox_1.RedditInboxTool; } });
33
+ const analytics_1 = require("./tools/analytics");
34
+ Object.defineProperty(exports, "RedditAnalyticsTool", { enumerable: true, get: function () { return analytics_1.RedditAnalyticsTool; } });
35
+ function resolveConfig(options, secrets) {
36
+ const clientId = options.clientId ??
37
+ secrets?.['reddit.clientId'] ??
38
+ process.env.REDDIT_CLIENT_ID;
39
+ const clientSecret = options.clientSecret ??
40
+ secrets?.['reddit.clientSecret'] ??
41
+ process.env.REDDIT_CLIENT_SECRET;
42
+ const username = options.username ??
43
+ secrets?.['reddit.username'] ??
44
+ process.env.REDDIT_USERNAME;
45
+ const password = options.password ??
46
+ secrets?.['reddit.password'] ??
47
+ process.env.REDDIT_PASSWORD;
48
+ if (!clientId) {
49
+ throw new Error('Reddit client ID not found. Provide via options.clientId, secrets["reddit.clientId"], or REDDIT_CLIENT_ID env var.');
50
+ }
51
+ if (!clientSecret) {
52
+ throw new Error('Reddit client secret not found. Provide via options.clientSecret, secrets["reddit.clientSecret"], or REDDIT_CLIENT_SECRET env var.');
53
+ }
54
+ if (!username) {
55
+ throw new Error('Reddit username not found. Provide via options.username, secrets["reddit.username"], or REDDIT_USERNAME env var.');
56
+ }
57
+ if (!password) {
58
+ throw new Error('Reddit password not found. Provide via options.password, secrets["reddit.password"], or REDDIT_PASSWORD env var.');
59
+ }
60
+ return {
61
+ clientId,
62
+ clientSecret,
63
+ username,
64
+ password,
65
+ userAgent: options.userAgent,
66
+ };
67
+ }
68
+ function createExtensionPack(context) {
69
+ const options = (context.options ?? {});
70
+ const config = resolveConfig(options, options.secrets);
71
+ const service = new RedditService_1.RedditService(config);
72
+ const adapter = new RedditChannelAdapter_1.RedditChannelAdapter(service);
73
+ const submitPostTool = new submitPost_1.RedditSubmitPostTool(service);
74
+ const commentTool = new comment_1.RedditCommentTool(service);
75
+ const voteTool = new vote_1.RedditVoteTool(service);
76
+ const searchTool = new search_1.RedditSearchTool(service);
77
+ const trendingTool = new trending_1.RedditTrendingTool(service);
78
+ const subscribeTool = new subscribe_1.RedditSubscribeTool(service);
79
+ const inboxTool = new inbox_1.RedditInboxTool(service);
80
+ const analyticsTool = new analytics_1.RedditAnalyticsTool(service);
81
+ const priority = options.priority ?? 50;
82
+ return {
83
+ name: '@framers/agentos-ext-channel-reddit',
84
+ version: '0.1.0',
85
+ descriptors: [
86
+ { id: 'redditSubmitPost', kind: 'tool', priority, payload: submitPostTool },
87
+ { id: 'redditComment', kind: 'tool', priority, payload: commentTool },
88
+ { id: 'redditVote', kind: 'tool', priority, payload: voteTool },
89
+ { id: 'redditSearch', kind: 'tool', priority, payload: searchTool },
90
+ { id: 'redditTrending', kind: 'tool', priority, payload: trendingTool },
91
+ { id: 'redditSubscribe', kind: 'tool', priority, payload: subscribeTool },
92
+ { id: 'redditInbox', kind: 'tool', priority, payload: inboxTool },
93
+ { id: 'redditAnalytics', kind: 'tool', priority, payload: analyticsTool },
94
+ { id: 'redditChannel', kind: 'messaging-channel', priority, payload: adapter },
95
+ ],
96
+ onActivate: async () => {
97
+ await service.initialize();
98
+ // Wire adapter event listeners after service is running
99
+ await adapter.initialize({ platform: 'reddit', credential: config.clientId });
100
+ context.logger?.info('[RedditChannel] Extension activated');
101
+ },
102
+ onDeactivate: async () => {
103
+ await adapter.shutdown();
104
+ await service.shutdown();
105
+ context.logger?.info('[RedditChannel] Extension deactivated');
106
+ },
107
+ };
108
+ }
109
+ exports.default = createExtensionPack;
110
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}