@marktoflow/integrations 2.0.0-alpha.3

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 (105) hide show
  1. package/dist/adapters/claude-code.d.ts +16 -0
  2. package/dist/adapters/claude-code.d.ts.map +1 -0
  3. package/dist/adapters/claude-code.js +56 -0
  4. package/dist/adapters/claude-code.js.map +1 -0
  5. package/dist/adapters/ollama.d.ts +3 -0
  6. package/dist/adapters/ollama.d.ts.map +1 -0
  7. package/dist/adapters/ollama.js +9 -0
  8. package/dist/adapters/ollama.js.map +1 -0
  9. package/dist/adapters/opencode.d.ts +21 -0
  10. package/dist/adapters/opencode.d.ts.map +1 -0
  11. package/dist/adapters/opencode.js +119 -0
  12. package/dist/adapters/opencode.js.map +1 -0
  13. package/dist/claude-code.d.ts +16 -0
  14. package/dist/claude-code.d.ts.map +1 -0
  15. package/dist/claude-code.js +56 -0
  16. package/dist/claude-code.js.map +1 -0
  17. package/dist/github.d.ts +3 -0
  18. package/dist/github.d.ts.map +1 -0
  19. package/dist/github.js +13 -0
  20. package/dist/github.js.map +1 -0
  21. package/dist/index.d.ts +21 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +67 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/jira.d.ts +3 -0
  26. package/dist/jira.d.ts.map +1 -0
  27. package/dist/jira.js +21 -0
  28. package/dist/jira.js.map +1 -0
  29. package/dist/ollama.d.ts +3 -0
  30. package/dist/ollama.d.ts.map +1 -0
  31. package/dist/ollama.js +9 -0
  32. package/dist/ollama.js.map +1 -0
  33. package/dist/opencode.d.ts +19 -0
  34. package/dist/opencode.d.ts.map +1 -0
  35. package/dist/opencode.js +104 -0
  36. package/dist/opencode.js.map +1 -0
  37. package/dist/script.d.ts +3 -0
  38. package/dist/script.d.ts.map +1 -0
  39. package/dist/script.js +21 -0
  40. package/dist/script.js.map +1 -0
  41. package/dist/services/airtable.d.ts +145 -0
  42. package/dist/services/airtable.d.ts.map +1 -0
  43. package/dist/services/airtable.js +295 -0
  44. package/dist/services/airtable.js.map +1 -0
  45. package/dist/services/confluence.d.ts +205 -0
  46. package/dist/services/confluence.d.ts.map +1 -0
  47. package/dist/services/confluence.js +356 -0
  48. package/dist/services/confluence.js.map +1 -0
  49. package/dist/services/discord.d.ts +212 -0
  50. package/dist/services/discord.d.ts.map +1 -0
  51. package/dist/services/discord.js +279 -0
  52. package/dist/services/discord.js.map +1 -0
  53. package/dist/services/github.d.ts +3 -0
  54. package/dist/services/github.d.ts.map +1 -0
  55. package/dist/services/github.js +13 -0
  56. package/dist/services/github.js.map +1 -0
  57. package/dist/services/gmail-trigger.d.ts +92 -0
  58. package/dist/services/gmail-trigger.d.ts.map +1 -0
  59. package/dist/services/gmail-trigger.js +172 -0
  60. package/dist/services/gmail-trigger.js.map +1 -0
  61. package/dist/services/gmail.d.ts +116 -0
  62. package/dist/services/gmail.d.ts.map +1 -0
  63. package/dist/services/gmail.js +333 -0
  64. package/dist/services/gmail.js.map +1 -0
  65. package/dist/services/http.d.ts +120 -0
  66. package/dist/services/http.d.ts.map +1 -0
  67. package/dist/services/http.js +284 -0
  68. package/dist/services/http.js.map +1 -0
  69. package/dist/services/jira.d.ts +3 -0
  70. package/dist/services/jira.d.ts.map +1 -0
  71. package/dist/services/jira.js +21 -0
  72. package/dist/services/jira.js.map +1 -0
  73. package/dist/services/linear.d.ts +163 -0
  74. package/dist/services/linear.d.ts.map +1 -0
  75. package/dist/services/linear.js +326 -0
  76. package/dist/services/linear.js.map +1 -0
  77. package/dist/services/notion.d.ts +206 -0
  78. package/dist/services/notion.d.ts.map +1 -0
  79. package/dist/services/notion.js +358 -0
  80. package/dist/services/notion.js.map +1 -0
  81. package/dist/services/outlook-trigger.d.ts +121 -0
  82. package/dist/services/outlook-trigger.d.ts.map +1 -0
  83. package/dist/services/outlook-trigger.js +204 -0
  84. package/dist/services/outlook-trigger.js.map +1 -0
  85. package/dist/services/outlook.d.ts +237 -0
  86. package/dist/services/outlook.d.ts.map +1 -0
  87. package/dist/services/outlook.js +475 -0
  88. package/dist/services/outlook.js.map +1 -0
  89. package/dist/services/slack-socket.d.ts +18 -0
  90. package/dist/services/slack-socket.d.ts.map +1 -0
  91. package/dist/services/slack-socket.js +46 -0
  92. package/dist/services/slack-socket.js.map +1 -0
  93. package/dist/services/slack.d.ts +3 -0
  94. package/dist/services/slack.d.ts.map +1 -0
  95. package/dist/services/slack.js +11 -0
  96. package/dist/services/slack.js.map +1 -0
  97. package/dist/slack.d.ts +3 -0
  98. package/dist/slack.d.ts.map +1 -0
  99. package/dist/slack.js +11 -0
  100. package/dist/slack.js.map +1 -0
  101. package/dist/tools/script.d.ts +3 -0
  102. package/dist/tools/script.d.ts.map +1 -0
  103. package/dist/tools/script.js +21 -0
  104. package/dist/tools/script.js.map +1 -0
  105. package/package.json +57 -0
@@ -0,0 +1,212 @@
1
+ /**
2
+ * Discord Integration
3
+ *
4
+ * Community communication platform.
5
+ * API Docs: https://discord.com/developers/docs
6
+ */
7
+ import { SDKInitializer } from '@marktoflow/core';
8
+ export interface DiscordMessage {
9
+ id: string;
10
+ channelId: string;
11
+ guildId?: string;
12
+ author: {
13
+ id: string;
14
+ username: string;
15
+ discriminator: string;
16
+ avatar?: string;
17
+ bot?: boolean;
18
+ };
19
+ content: string;
20
+ timestamp: string;
21
+ editedTimestamp?: string;
22
+ mentionEveryone: boolean;
23
+ mentions: {
24
+ id: string;
25
+ username: string;
26
+ }[];
27
+ attachments: {
28
+ id: string;
29
+ filename: string;
30
+ url: string;
31
+ size: number;
32
+ }[];
33
+ embeds: DiscordEmbed[];
34
+ reactions?: {
35
+ emoji: {
36
+ name: string;
37
+ };
38
+ count: number;
39
+ }[];
40
+ }
41
+ export interface DiscordEmbed {
42
+ title?: string;
43
+ description?: string;
44
+ url?: string;
45
+ timestamp?: string;
46
+ color?: number;
47
+ footer?: {
48
+ text: string;
49
+ icon_url?: string;
50
+ };
51
+ image?: {
52
+ url: string;
53
+ };
54
+ thumbnail?: {
55
+ url: string;
56
+ };
57
+ author?: {
58
+ name: string;
59
+ url?: string;
60
+ icon_url?: string;
61
+ };
62
+ fields?: {
63
+ name: string;
64
+ value: string;
65
+ inline?: boolean;
66
+ }[];
67
+ }
68
+ export interface DiscordChannel {
69
+ id: string;
70
+ type: number;
71
+ guildId?: string;
72
+ name?: string;
73
+ topic?: string;
74
+ position?: number;
75
+ parentId?: string;
76
+ }
77
+ export interface DiscordGuild {
78
+ id: string;
79
+ name: string;
80
+ icon?: string;
81
+ description?: string;
82
+ ownerId: string;
83
+ memberCount?: number;
84
+ }
85
+ export interface SendMessageOptions {
86
+ content?: string;
87
+ embeds?: DiscordEmbed[];
88
+ tts?: boolean;
89
+ allowedMentions?: {
90
+ parse?: ('roles' | 'users' | 'everyone')[];
91
+ roles?: string[];
92
+ users?: string[];
93
+ };
94
+ messageReference?: {
95
+ message_id: string;
96
+ channel_id?: string;
97
+ guild_id?: string;
98
+ };
99
+ components?: unknown[];
100
+ }
101
+ export interface CreateThreadOptions {
102
+ name: string;
103
+ autoArchiveDuration?: 60 | 1440 | 4320 | 10080;
104
+ type?: 11 | 12;
105
+ invitable?: boolean;
106
+ rateLimitPerUser?: number;
107
+ }
108
+ export interface GetMessagesOptions {
109
+ around?: string;
110
+ before?: string;
111
+ after?: string;
112
+ limit?: number;
113
+ }
114
+ /**
115
+ * Discord API client for workflow integration
116
+ */
117
+ export declare class DiscordClient {
118
+ private token;
119
+ private isBot;
120
+ constructor(token: string, isBot?: boolean);
121
+ private request;
122
+ private parseMessage;
123
+ /**
124
+ * Get current user
125
+ */
126
+ getMe(): Promise<{
127
+ id: string;
128
+ username: string;
129
+ discriminator: string;
130
+ }>;
131
+ /**
132
+ * Get guilds (servers) the bot is in
133
+ */
134
+ getGuilds(): Promise<DiscordGuild[]>;
135
+ /**
136
+ * Get a guild by ID
137
+ */
138
+ getGuild(guildId: string): Promise<DiscordGuild>;
139
+ /**
140
+ * Get channels in a guild
141
+ */
142
+ getGuildChannels(guildId: string): Promise<DiscordChannel[]>;
143
+ /**
144
+ * Get a channel by ID
145
+ */
146
+ getChannel(channelId: string): Promise<DiscordChannel>;
147
+ /**
148
+ * Send a message to a channel
149
+ */
150
+ sendMessage(channelId: string, options: SendMessageOptions | string): Promise<DiscordMessage>;
151
+ /**
152
+ * Edit a message
153
+ */
154
+ editMessage(channelId: string, messageId: string, options: SendMessageOptions | string): Promise<DiscordMessage>;
155
+ /**
156
+ * Delete a message
157
+ */
158
+ deleteMessage(channelId: string, messageId: string): Promise<void>;
159
+ /**
160
+ * Get messages from a channel
161
+ */
162
+ getMessages(channelId: string, options?: GetMessagesOptions): Promise<DiscordMessage[]>;
163
+ /**
164
+ * Get a specific message
165
+ */
166
+ getMessage(channelId: string, messageId: string): Promise<DiscordMessage>;
167
+ /**
168
+ * Add a reaction to a message
169
+ */
170
+ addReaction(channelId: string, messageId: string, emoji: string): Promise<void>;
171
+ /**
172
+ * Remove own reaction from a message
173
+ */
174
+ removeReaction(channelId: string, messageId: string, emoji: string): Promise<void>;
175
+ /**
176
+ * Create a thread from a message
177
+ */
178
+ createThreadFromMessage(channelId: string, messageId: string, options: CreateThreadOptions): Promise<DiscordChannel>;
179
+ /**
180
+ * Create a thread in a channel (without a message)
181
+ */
182
+ createThread(channelId: string, options: CreateThreadOptions): Promise<DiscordChannel>;
183
+ /**
184
+ * Pin a message
185
+ */
186
+ pinMessage(channelId: string, messageId: string): Promise<void>;
187
+ /**
188
+ * Unpin a message
189
+ */
190
+ unpinMessage(channelId: string, messageId: string): Promise<void>;
191
+ /**
192
+ * Get pinned messages
193
+ */
194
+ getPinnedMessages(channelId: string): Promise<DiscordMessage[]>;
195
+ /**
196
+ * Create a webhook
197
+ */
198
+ createWebhook(channelId: string, name: string, avatar?: string): Promise<{
199
+ id: string;
200
+ token: string;
201
+ url: string;
202
+ }>;
203
+ /**
204
+ * Execute a webhook
205
+ */
206
+ executeWebhook(webhookId: string, webhookToken: string, options: SendMessageOptions & {
207
+ username?: string;
208
+ avatar_url?: string;
209
+ }): Promise<DiscordMessage | undefined>;
210
+ }
211
+ export declare const DiscordInitializer: SDKInitializer;
212
+ //# sourceMappingURL=discord.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discord.d.ts","sourceRoot":"","sources":["../../src/services/discord.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,279 @@
1
+ /**
2
+ * Discord Integration
3
+ *
4
+ * Community communication platform.
5
+ * API Docs: https://discord.com/developers/docs
6
+ */
7
+ const DISCORD_API_URL = 'https://discord.com/api/v10';
8
+ /**
9
+ * Discord API client for workflow integration
10
+ */
11
+ export class DiscordClient {
12
+ token;
13
+ isBot;
14
+ constructor(token, isBot = true) {
15
+ this.token = token;
16
+ this.isBot = isBot;
17
+ }
18
+ async request(method, path, body) {
19
+ const response = await fetch(`${DISCORD_API_URL}${path}`, {
20
+ method,
21
+ headers: {
22
+ Authorization: this.isBot ? `Bot ${this.token}` : this.token,
23
+ 'Content-Type': 'application/json',
24
+ },
25
+ body: body ? JSON.stringify(body) : undefined,
26
+ });
27
+ if (!response.ok) {
28
+ const error = await response.text();
29
+ throw new Error(`Discord API error: ${response.status} ${error}`);
30
+ }
31
+ // Some endpoints return 204 No Content
32
+ if (response.status === 204) {
33
+ return undefined;
34
+ }
35
+ return (await response.json());
36
+ }
37
+ parseMessage(msg) {
38
+ const author = msg.author;
39
+ return {
40
+ id: msg.id,
41
+ channelId: msg.channel_id,
42
+ guildId: msg.guild_id,
43
+ author: {
44
+ id: author.id,
45
+ username: author.username,
46
+ discriminator: author.discriminator,
47
+ avatar: author.avatar,
48
+ bot: author.bot,
49
+ },
50
+ content: msg.content,
51
+ timestamp: msg.timestamp,
52
+ editedTimestamp: msg.edited_timestamp,
53
+ mentionEveryone: msg.mention_everyone,
54
+ mentions: msg.mentions ?? [],
55
+ attachments: msg.attachments ?? [],
56
+ embeds: msg.embeds ?? [],
57
+ reactions: msg.reactions,
58
+ };
59
+ }
60
+ /**
61
+ * Get current user
62
+ */
63
+ async getMe() {
64
+ return this.request('GET', '/users/@me');
65
+ }
66
+ /**
67
+ * Get guilds (servers) the bot is in
68
+ */
69
+ async getGuilds() {
70
+ const guilds = await this.request('GET', '/users/@me/guilds');
71
+ return guilds.map((g) => ({
72
+ id: g.id,
73
+ name: g.name,
74
+ icon: g.icon,
75
+ description: g.description,
76
+ ownerId: g.owner_id,
77
+ memberCount: g.approximate_member_count,
78
+ }));
79
+ }
80
+ /**
81
+ * Get a guild by ID
82
+ */
83
+ async getGuild(guildId) {
84
+ const g = await this.request('GET', `/guilds/${guildId}`);
85
+ return {
86
+ id: g.id,
87
+ name: g.name,
88
+ icon: g.icon,
89
+ description: g.description,
90
+ ownerId: g.owner_id,
91
+ memberCount: g.approximate_member_count,
92
+ };
93
+ }
94
+ /**
95
+ * Get channels in a guild
96
+ */
97
+ async getGuildChannels(guildId) {
98
+ const channels = await this.request('GET', `/guilds/${guildId}/channels`);
99
+ return channels.map((c) => ({
100
+ id: c.id,
101
+ type: c.type,
102
+ guildId: c.guild_id,
103
+ name: c.name,
104
+ topic: c.topic,
105
+ position: c.position,
106
+ parentId: c.parent_id,
107
+ }));
108
+ }
109
+ /**
110
+ * Get a channel by ID
111
+ */
112
+ async getChannel(channelId) {
113
+ const c = await this.request('GET', `/channels/${channelId}`);
114
+ return {
115
+ id: c.id,
116
+ type: c.type,
117
+ guildId: c.guild_id,
118
+ name: c.name,
119
+ topic: c.topic,
120
+ position: c.position,
121
+ parentId: c.parent_id,
122
+ };
123
+ }
124
+ /**
125
+ * Send a message to a channel
126
+ */
127
+ async sendMessage(channelId, options) {
128
+ const body = typeof options === 'string' ? { content: options } : options;
129
+ const msg = await this.request('POST', `/channels/${channelId}/messages`, body);
130
+ return this.parseMessage(msg);
131
+ }
132
+ /**
133
+ * Edit a message
134
+ */
135
+ async editMessage(channelId, messageId, options) {
136
+ const body = typeof options === 'string' ? { content: options } : options;
137
+ const msg = await this.request('PATCH', `/channels/${channelId}/messages/${messageId}`, body);
138
+ return this.parseMessage(msg);
139
+ }
140
+ /**
141
+ * Delete a message
142
+ */
143
+ async deleteMessage(channelId, messageId) {
144
+ await this.request('DELETE', `/channels/${channelId}/messages/${messageId}`);
145
+ }
146
+ /**
147
+ * Get messages from a channel
148
+ */
149
+ async getMessages(channelId, options = {}) {
150
+ const params = [];
151
+ if (options.around)
152
+ params.push(`around=${options.around}`);
153
+ if (options.before)
154
+ params.push(`before=${options.before}`);
155
+ if (options.after)
156
+ params.push(`after=${options.after}`);
157
+ if (options.limit)
158
+ params.push(`limit=${options.limit}`);
159
+ const query = params.length ? `?${params.join('&')}` : '';
160
+ const messages = await this.request('GET', `/channels/${channelId}/messages${query}`);
161
+ return messages.map((m) => this.parseMessage(m));
162
+ }
163
+ /**
164
+ * Get a specific message
165
+ */
166
+ async getMessage(channelId, messageId) {
167
+ const msg = await this.request('GET', `/channels/${channelId}/messages/${messageId}`);
168
+ return this.parseMessage(msg);
169
+ }
170
+ /**
171
+ * Add a reaction to a message
172
+ */
173
+ async addReaction(channelId, messageId, emoji) {
174
+ const encodedEmoji = encodeURIComponent(emoji);
175
+ await this.request('PUT', `/channels/${channelId}/messages/${messageId}/reactions/${encodedEmoji}/@me`);
176
+ }
177
+ /**
178
+ * Remove own reaction from a message
179
+ */
180
+ async removeReaction(channelId, messageId, emoji) {
181
+ const encodedEmoji = encodeURIComponent(emoji);
182
+ await this.request('DELETE', `/channels/${channelId}/messages/${messageId}/reactions/${encodedEmoji}/@me`);
183
+ }
184
+ /**
185
+ * Create a thread from a message
186
+ */
187
+ async createThreadFromMessage(channelId, messageId, options) {
188
+ const c = await this.request('POST', `/channels/${channelId}/messages/${messageId}/threads`, {
189
+ name: options.name,
190
+ auto_archive_duration: options.autoArchiveDuration,
191
+ rate_limit_per_user: options.rateLimitPerUser,
192
+ });
193
+ return {
194
+ id: c.id,
195
+ type: c.type,
196
+ guildId: c.guild_id,
197
+ name: c.name,
198
+ topic: c.topic,
199
+ position: c.position,
200
+ parentId: c.parent_id,
201
+ };
202
+ }
203
+ /**
204
+ * Create a thread in a channel (without a message)
205
+ */
206
+ async createThread(channelId, options) {
207
+ const c = await this.request('POST', `/channels/${channelId}/threads`, {
208
+ name: options.name,
209
+ auto_archive_duration: options.autoArchiveDuration,
210
+ type: options.type ?? 11,
211
+ invitable: options.invitable,
212
+ rate_limit_per_user: options.rateLimitPerUser,
213
+ });
214
+ return {
215
+ id: c.id,
216
+ type: c.type,
217
+ guildId: c.guild_id,
218
+ name: c.name,
219
+ topic: c.topic,
220
+ position: c.position,
221
+ parentId: c.parent_id,
222
+ };
223
+ }
224
+ /**
225
+ * Pin a message
226
+ */
227
+ async pinMessage(channelId, messageId) {
228
+ await this.request('PUT', `/channels/${channelId}/pins/${messageId}`);
229
+ }
230
+ /**
231
+ * Unpin a message
232
+ */
233
+ async unpinMessage(channelId, messageId) {
234
+ await this.request('DELETE', `/channels/${channelId}/pins/${messageId}`);
235
+ }
236
+ /**
237
+ * Get pinned messages
238
+ */
239
+ async getPinnedMessages(channelId) {
240
+ const messages = await this.request('GET', `/channels/${channelId}/pins`);
241
+ return messages.map((m) => this.parseMessage(m));
242
+ }
243
+ /**
244
+ * Create a webhook
245
+ */
246
+ async createWebhook(channelId, name, avatar) {
247
+ const webhook = await this.request('POST', `/channels/${channelId}/webhooks`, {
248
+ name,
249
+ avatar,
250
+ });
251
+ return {
252
+ id: webhook.id,
253
+ token: webhook.token,
254
+ url: `https://discord.com/api/webhooks/${webhook.id}/${webhook.token}`,
255
+ };
256
+ }
257
+ /**
258
+ * Execute a webhook
259
+ */
260
+ async executeWebhook(webhookId, webhookToken, options) {
261
+ const msg = await this.request('POST', `/webhooks/${webhookId}/${webhookToken}?wait=true`, options);
262
+ return msg ? this.parseMessage(msg) : undefined;
263
+ }
264
+ }
265
+ export const DiscordInitializer = {
266
+ async initialize(_module, config) {
267
+ const token = config.auth?.['token'];
268
+ const isBot = config.auth?.['is_bot'] ?? true;
269
+ if (!token) {
270
+ throw new Error('Discord SDK requires auth.token (bot token)');
271
+ }
272
+ const client = new DiscordClient(token, isBot);
273
+ return {
274
+ client,
275
+ actions: client,
276
+ };
277
+ },
278
+ };
279
+ //# sourceMappingURL=discord.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discord.js","sourceRoot":"","sources":["../../src/services/discord.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { SDKInitializer } from '@marktoflow/core';
2
+ export declare const GitHubInitializer: SDKInitializer;
3
+ //# sourceMappingURL=github.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../src/services/github.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAE9D,eAAO,MAAM,iBAAiB,EAAE,cAW/B,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { Octokit } from '@octokit/rest';
2
+ export const GitHubInitializer = {
3
+ async initialize(_module, config) {
4
+ const token = config.auth?.['token'];
5
+ // GitHub API can be used without token for public data, but usually we want a token
6
+ // We'll enforce token for now to match other integrations, or make it optional.
7
+ // Let's make it optional but recommended.
8
+ return new Octokit({
9
+ auth: token
10
+ });
11
+ },
12
+ };
13
+ //# sourceMappingURL=github.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/services/github.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGxC,MAAM,CAAC,MAAM,iBAAiB,GAAmB;IAC/C,KAAK,CAAC,UAAU,CAAC,OAAgB,EAAE,MAAkB;QACnD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,OAAO,CAAW,CAAC;QAC/C,oFAAoF;QACpF,gFAAgF;QAChF,0CAA0C;QAE1C,OAAO,IAAI,OAAO,CAAC;YACjB,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
@@ -0,0 +1,92 @@
1
+ import { gmail_v1 } from 'googleapis';
2
+ import { TriggerType } from '@marktoflow/core';
3
+ export interface GmailTriggerConfig {
4
+ clientId: string;
5
+ clientSecret: string;
6
+ redirectUri: string;
7
+ refreshToken?: string;
8
+ accessToken?: string;
9
+ topicName: string;
10
+ labelIds?: string[];
11
+ triggers: Array<{
12
+ id: string;
13
+ event: 'email_received';
14
+ handler: (payload: GmailTriggerPayload) => Promise<void>;
15
+ }>;
16
+ }
17
+ export interface GmailTriggerPayload {
18
+ type: TriggerType;
19
+ event: 'email_received';
20
+ historyId: string;
21
+ emailAddress: string;
22
+ messages?: gmail_v1.Schema$Message[];
23
+ }
24
+ export interface GmailPubSubMessage {
25
+ message: {
26
+ data: string;
27
+ messageId: string;
28
+ publishTime: string;
29
+ };
30
+ subscription: string;
31
+ }
32
+ /**
33
+ * Gmail trigger handler for Pub/Sub push notifications.
34
+ *
35
+ * Setup requirements:
36
+ * 1. Create a Google Cloud Pub/Sub topic
37
+ * 2. Create a push subscription pointing to your webhook URL
38
+ * 3. Grant Gmail API watch permissions on your account
39
+ * 4. Call watch() to start receiving notifications
40
+ */
41
+ export declare class GmailTrigger {
42
+ private config;
43
+ private gmail?;
44
+ private watchExpiration?;
45
+ private lastHistoryId?;
46
+ constructor(config: GmailTriggerConfig);
47
+ /**
48
+ * Initialize the Gmail client
49
+ */
50
+ private getClient;
51
+ /**
52
+ * Start watching for email notifications via Pub/Sub.
53
+ * This needs to be called initially and periodically (watch expires after ~7 days).
54
+ */
55
+ watch(): Promise<{
56
+ historyId: string;
57
+ expiration: number;
58
+ }>;
59
+ /**
60
+ * Stop watching for email notifications.
61
+ */
62
+ stop(): Promise<void>;
63
+ /**
64
+ * Check if the watch is still active.
65
+ */
66
+ isWatchActive(): boolean;
67
+ /**
68
+ * Handle an incoming Pub/Sub push notification.
69
+ * Call this from your webhook endpoint.
70
+ */
71
+ handlePubSubNotification(notification: GmailPubSubMessage): Promise<void>;
72
+ /**
73
+ * Fetch new messages since a given history ID.
74
+ */
75
+ private fetchNewMessages;
76
+ /**
77
+ * Validate a Pub/Sub push request (basic validation).
78
+ * For production, you should verify the token in the subscription.
79
+ */
80
+ static validatePubSubRequest(body: unknown): body is GmailPubSubMessage;
81
+ }
82
+ /**
83
+ * Express/Fastify-compatible middleware for handling Gmail Pub/Sub webhooks.
84
+ */
85
+ export declare function createGmailWebhookHandler(trigger: GmailTrigger): (req: {
86
+ body: unknown;
87
+ }, res: {
88
+ status: (code: number) => {
89
+ send: (body?: string) => void;
90
+ };
91
+ }) => Promise<void>;
92
+ //# sourceMappingURL=gmail-trigger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gmail-trigger.d.ts","sourceRoot":"","sources":["../../src/services/gmail-trigger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,KAAK,CAAC;QACd,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,gBAAgB,CAAC;QACxB,OAAO,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KAC1D,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,gBAAgB,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,QAAQ,CAAC,cAAc,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;GAQG;AACH,qBAAa,YAAY;IAKX,OAAO,CAAC,MAAM;IAJ1B,OAAO,CAAC,KAAK,CAAC,CAAiB;IAC/B,OAAO,CAAC,eAAe,CAAC,CAAS;IACjC,OAAO,CAAC,aAAa,CAAC,CAAS;gBAEX,MAAM,EAAE,kBAAkB;IAE9C;;OAEG;IACH,OAAO,CAAC,SAAS;IAgBjB;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAqBjE;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B;;OAEG;IACH,aAAa,IAAI,OAAO;IAKxB;;;OAGG;IACG,wBAAwB,CAAC,YAAY,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAwC/E;;OAEG;YACW,gBAAgB;IAgC9B;;;OAGG;IACH,MAAM,CAAC,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,kBAAkB;CAYxE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,YAAY,IAC/C,KAAK;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,EAAE,KAAK;IAAE,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK;QAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,CAAA;CAAE,mBAc3G"}