@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,172 @@
1
+ import { google } from 'googleapis';
2
+ import { TriggerType } from '@marktoflow/core';
3
+ /**
4
+ * Gmail trigger handler for Pub/Sub push notifications.
5
+ *
6
+ * Setup requirements:
7
+ * 1. Create a Google Cloud Pub/Sub topic
8
+ * 2. Create a push subscription pointing to your webhook URL
9
+ * 3. Grant Gmail API watch permissions on your account
10
+ * 4. Call watch() to start receiving notifications
11
+ */
12
+ export class GmailTrigger {
13
+ config;
14
+ gmail;
15
+ watchExpiration;
16
+ lastHistoryId;
17
+ constructor(config) {
18
+ this.config = config;
19
+ }
20
+ /**
21
+ * Initialize the Gmail client
22
+ */
23
+ getClient() {
24
+ if (!this.gmail) {
25
+ const oauth2Client = new google.auth.OAuth2(this.config.clientId, this.config.clientSecret, this.config.redirectUri);
26
+ oauth2Client.setCredentials({
27
+ refresh_token: this.config.refreshToken,
28
+ access_token: this.config.accessToken,
29
+ });
30
+ this.gmail = google.gmail({ version: 'v1', auth: oauth2Client });
31
+ }
32
+ return this.gmail;
33
+ }
34
+ /**
35
+ * Start watching for email notifications via Pub/Sub.
36
+ * This needs to be called initially and periodically (watch expires after ~7 days).
37
+ */
38
+ async watch() {
39
+ const gmail = this.getClient();
40
+ const response = await gmail.users.watch({
41
+ userId: 'me',
42
+ requestBody: {
43
+ topicName: this.config.topicName,
44
+ labelIds: this.config.labelIds ?? ['INBOX'],
45
+ labelFilterBehavior: 'include',
46
+ },
47
+ });
48
+ this.lastHistoryId = response.data.historyId ?? undefined;
49
+ this.watchExpiration = parseInt(response.data.expiration ?? '0', 10);
50
+ return {
51
+ historyId: this.lastHistoryId ?? '',
52
+ expiration: this.watchExpiration,
53
+ };
54
+ }
55
+ /**
56
+ * Stop watching for email notifications.
57
+ */
58
+ async stop() {
59
+ const gmail = this.getClient();
60
+ await gmail.users.stop({ userId: 'me' });
61
+ this.watchExpiration = undefined;
62
+ this.lastHistoryId = undefined;
63
+ }
64
+ /**
65
+ * Check if the watch is still active.
66
+ */
67
+ isWatchActive() {
68
+ if (!this.watchExpiration)
69
+ return false;
70
+ return Date.now() < this.watchExpiration;
71
+ }
72
+ /**
73
+ * Handle an incoming Pub/Sub push notification.
74
+ * Call this from your webhook endpoint.
75
+ */
76
+ async handlePubSubNotification(notification) {
77
+ // Decode the Pub/Sub message data
78
+ const data = JSON.parse(Buffer.from(notification.message.data, 'base64').toString('utf-8'));
79
+ const { emailAddress, historyId } = data;
80
+ // Fetch new messages since the last history ID
81
+ let messages = [];
82
+ if (this.lastHistoryId) {
83
+ try {
84
+ messages = await this.fetchNewMessages(this.lastHistoryId);
85
+ }
86
+ catch (error) {
87
+ // History may have expired, just notify with empty messages
88
+ console.warn('Failed to fetch history, may have expired:', error);
89
+ }
90
+ }
91
+ // Update last history ID
92
+ this.lastHistoryId = historyId;
93
+ // Create payload
94
+ const payload = {
95
+ type: TriggerType.WEBHOOK,
96
+ event: 'email_received',
97
+ historyId,
98
+ emailAddress,
99
+ messages: messages.length > 0 ? messages : undefined,
100
+ };
101
+ // Call all registered handlers
102
+ for (const trigger of this.config.triggers) {
103
+ if (trigger.event === 'email_received') {
104
+ await trigger.handler(payload);
105
+ }
106
+ }
107
+ }
108
+ /**
109
+ * Fetch new messages since a given history ID.
110
+ */
111
+ async fetchNewMessages(startHistoryId) {
112
+ const gmail = this.getClient();
113
+ const historyResponse = await gmail.users.history.list({
114
+ userId: 'me',
115
+ startHistoryId,
116
+ historyTypes: ['messageAdded'],
117
+ });
118
+ const messageIds = new Set();
119
+ for (const history of historyResponse.data.history ?? []) {
120
+ for (const added of history.messagesAdded ?? []) {
121
+ if (added.message?.id) {
122
+ messageIds.add(added.message.id);
123
+ }
124
+ }
125
+ }
126
+ const messages = [];
127
+ for (const id of messageIds) {
128
+ const msg = await gmail.users.messages.get({
129
+ userId: 'me',
130
+ id,
131
+ format: 'metadata',
132
+ metadataHeaders: ['Subject', 'From', 'To', 'Date'],
133
+ });
134
+ messages.push(msg.data);
135
+ }
136
+ return messages;
137
+ }
138
+ /**
139
+ * Validate a Pub/Sub push request (basic validation).
140
+ * For production, you should verify the token in the subscription.
141
+ */
142
+ static validatePubSubRequest(body) {
143
+ if (!body || typeof body !== 'object')
144
+ return false;
145
+ const msg = body;
146
+ if (!msg.message || typeof msg.message !== 'object')
147
+ return false;
148
+ const message = msg.message;
149
+ return (typeof message.data === 'string' &&
150
+ typeof message.messageId === 'string');
151
+ }
152
+ }
153
+ /**
154
+ * Express/Fastify-compatible middleware for handling Gmail Pub/Sub webhooks.
155
+ */
156
+ export function createGmailWebhookHandler(trigger) {
157
+ return async (req, res) => {
158
+ try {
159
+ if (!GmailTrigger.validatePubSubRequest(req.body)) {
160
+ res.status(400).send('Invalid Pub/Sub message');
161
+ return;
162
+ }
163
+ await trigger.handlePubSubNotification(req.body);
164
+ res.status(200).send('OK');
165
+ }
166
+ catch (error) {
167
+ console.error('Gmail webhook error:', error);
168
+ res.status(500).send('Internal error');
169
+ }
170
+ };
171
+ }
172
+ //# sourceMappingURL=gmail-trigger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gmail-trigger.js","sourceRoot":"","sources":["../../src/services/gmail-trigger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAY,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAkC/C;;;;;;;;GAQG;AACH,MAAM,OAAO,YAAY;IAKH;IAJZ,KAAK,CAAkB;IACvB,eAAe,CAAU;IACzB,aAAa,CAAU;IAE/B,YAAoB,MAA0B;QAA1B,WAAM,GAAN,MAAM,CAAoB;IAAG,CAAC;IAElD;;OAEG;IACK,SAAS;QACf,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,YAAY,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CACzC,IAAI,CAAC,MAAM,CAAC,QAAQ,EACpB,IAAI,CAAC,MAAM,CAAC,YAAY,EACxB,IAAI,CAAC,MAAM,CAAC,WAAW,CACxB,CAAC;YACF,YAAY,CAAC,cAAc,CAAC;gBAC1B,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY;gBACvC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;aACtC,CAAC,CAAC;YACH,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK;QACT,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAE/B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;YACvC,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE;gBACX,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;gBAChC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC;gBAC3C,mBAAmB,EAAE,SAAS;aAC/B;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC;QAC1D,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;QAErE,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,aAAa,IAAI,EAAE;YACnC,UAAU,EAAE,IAAI,CAAC,eAAe;SACjC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/B,MAAM,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QACjC,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,aAAa;QACX,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE,OAAO,KAAK,CAAC;QACxC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC;IAC3C,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,wBAAwB,CAAC,YAAgC;QAC7D,kCAAkC;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CACrB,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CACpB,CAAC;QAEjD,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QAEzC,+CAA+C;QAC/C,IAAI,QAAQ,GAA8B,EAAE,CAAC;QAE7C,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC7D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,4DAA4D;gBAC5D,OAAO,CAAC,IAAI,CAAC,4CAA4C,EAAE,KAAK,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;QAED,yBAAyB;QACzB,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAE/B,iBAAiB;QACjB,MAAM,OAAO,GAAwB;YACnC,IAAI,EAAE,WAAW,CAAC,OAAO;YACzB,KAAK,EAAE,gBAAgB;YACvB,SAAS;YACT,YAAY;YACZ,QAAQ,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;SACrD,CAAC;QAEF,+BAA+B;QAC/B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC3C,IAAI,OAAO,CAAC,KAAK,KAAK,gBAAgB,EAAE,CAAC;gBACvC,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,gBAAgB,CAAC,cAAsB;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAE/B,MAAM,eAAe,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YACrD,MAAM,EAAE,IAAI;YACZ,cAAc;YACd,YAAY,EAAE,CAAC,cAAc,CAAC;SAC/B,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QACrC,KAAK,MAAM,OAAO,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;YACzD,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC;gBAChD,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC;oBACtB,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAA8B,EAAE,CAAC;QAC/C,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;gBACzC,MAAM,EAAE,IAAI;gBACZ,EAAE;gBACF,MAAM,EAAE,UAAU;gBAClB,eAAe,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC;aACnD,CAAC,CAAC;YACH,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,qBAAqB,CAAC,IAAa;QACxC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QACpD,MAAM,GAAG,GAAG,IAA+B,CAAC;QAE5C,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAClE,MAAM,OAAO,GAAG,GAAG,CAAC,OAAkC,CAAC;QAEvD,OAAO,CACL,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ;YAChC,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,CACtC,CAAC;IACJ,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAAqB;IAC7D,OAAO,KAAK,EAAE,GAAsB,EAAE,GAAoE,EAAE,EAAE;QAC5G,IAAI,CAAC;YACH,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;gBAChD,OAAO;YACT,CAAC;YAED,MAAM,OAAO,CAAC,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACjD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;YAC7C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACzC,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,116 @@
1
+ import { gmail_v1 } from 'googleapis';
2
+ import { SDKInitializer } from '@marktoflow/core';
3
+ export interface GmailEmail {
4
+ id: string;
5
+ threadId: string;
6
+ subject: string;
7
+ from: string;
8
+ to: string[];
9
+ cc?: string[];
10
+ bcc?: string[];
11
+ date: string;
12
+ snippet: string;
13
+ body?: string;
14
+ bodyHtml?: string;
15
+ labels: string[];
16
+ isUnread: boolean;
17
+ hasAttachments: boolean;
18
+ }
19
+ export interface GetEmailsOptions {
20
+ query?: string;
21
+ maxResults?: number;
22
+ labelIds?: string[];
23
+ includeSpamTrash?: boolean;
24
+ pageToken?: string;
25
+ }
26
+ export interface SendEmailOptions {
27
+ to: string | string[];
28
+ subject: string;
29
+ body: string;
30
+ bodyHtml?: string;
31
+ cc?: string | string[];
32
+ bcc?: string | string[];
33
+ replyTo?: string;
34
+ inReplyTo?: string;
35
+ references?: string;
36
+ }
37
+ export interface CreateDraftOptions {
38
+ to: string | string[];
39
+ subject: string;
40
+ body: string;
41
+ bodyHtml?: string;
42
+ cc?: string | string[];
43
+ bcc?: string | string[];
44
+ replyTo?: string;
45
+ threadId?: string;
46
+ }
47
+ export interface GmailDraft {
48
+ id: string;
49
+ messageId: string;
50
+ threadId?: string;
51
+ }
52
+ export interface GetEmailsResult {
53
+ emails: GmailEmail[];
54
+ nextPageToken?: string;
55
+ resultSizeEstimate: number;
56
+ }
57
+ /**
58
+ * Gmail actions for workflow integration
59
+ */
60
+ export declare class GmailActions {
61
+ private gmail;
62
+ constructor(gmail: gmail_v1.Gmail);
63
+ /**
64
+ * Get emails from Gmail with optional filtering
65
+ */
66
+ getEmails(options?: GetEmailsOptions): Promise<GetEmailsResult>;
67
+ /**
68
+ * Send an email via Gmail
69
+ */
70
+ sendEmail(options: SendEmailOptions): Promise<{
71
+ id: string;
72
+ threadId: string;
73
+ }>;
74
+ /**
75
+ * Create a draft email in Gmail
76
+ */
77
+ createDraft(options: CreateDraftOptions): Promise<GmailDraft>;
78
+ /**
79
+ * Get a specific email by ID
80
+ */
81
+ getEmail(id: string): Promise<GmailEmail>;
82
+ /**
83
+ * Mark an email as read
84
+ */
85
+ markAsRead(id: string): Promise<void>;
86
+ /**
87
+ * Mark an email as unread
88
+ */
89
+ markAsUnread(id: string): Promise<void>;
90
+ /**
91
+ * Add labels to an email
92
+ */
93
+ addLabels(id: string, labelIds: string[]): Promise<void>;
94
+ /**
95
+ * Remove labels from an email
96
+ */
97
+ removeLabels(id: string, labelIds: string[]): Promise<void>;
98
+ /**
99
+ * Trash an email
100
+ */
101
+ trash(id: string): Promise<void>;
102
+ /**
103
+ * Delete an email permanently
104
+ */
105
+ delete(id: string): Promise<void>;
106
+ /**
107
+ * Get list of labels
108
+ */
109
+ listLabels(): Promise<{
110
+ id: string;
111
+ name: string;
112
+ type: string;
113
+ }[]>;
114
+ }
115
+ export declare const GmailInitializer: SDKInitializer;
116
+ //# sourceMappingURL=gmail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gmail.d.ts","sourceRoot":"","sources":["../../src/services/gmail.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,333 @@
1
+ import { google } from 'googleapis';
2
+ function parseEmailAddresses(header) {
3
+ if (!header)
4
+ return [];
5
+ return header.split(',').map((addr) => addr.trim());
6
+ }
7
+ function getHeader(headers, name) {
8
+ return headers?.find((h) => h.name?.toLowerCase() === name.toLowerCase())?.value ?? undefined;
9
+ }
10
+ function decodeBase64(data) {
11
+ return Buffer.from(data, 'base64url').toString('utf-8');
12
+ }
13
+ function encodeBase64(data) {
14
+ return Buffer.from(data, 'utf-8').toString('base64url');
15
+ }
16
+ function extractBody(payload) {
17
+ if (!payload)
18
+ return {};
19
+ if (payload.body?.data) {
20
+ const content = decodeBase64(payload.body.data);
21
+ if (payload.mimeType === 'text/html') {
22
+ return { html: content };
23
+ }
24
+ return { text: content };
25
+ }
26
+ if (payload.parts) {
27
+ let text;
28
+ let html;
29
+ for (const part of payload.parts) {
30
+ if (part.mimeType === 'text/plain' && part.body?.data) {
31
+ text = decodeBase64(part.body.data);
32
+ }
33
+ else if (part.mimeType === 'text/html' && part.body?.data) {
34
+ html = decodeBase64(part.body.data);
35
+ }
36
+ else if (part.parts) {
37
+ const nested = extractBody(part);
38
+ if (nested.text)
39
+ text = nested.text;
40
+ if (nested.html)
41
+ html = nested.html;
42
+ }
43
+ }
44
+ return { text, html };
45
+ }
46
+ return {};
47
+ }
48
+ function hasAttachments(payload) {
49
+ if (!payload)
50
+ return false;
51
+ if (payload.filename && payload.filename.length > 0)
52
+ return true;
53
+ if (payload.parts) {
54
+ return payload.parts.some((p) => hasAttachments(p));
55
+ }
56
+ return false;
57
+ }
58
+ function buildRawEmail(options) {
59
+ const to = Array.isArray(options.to) ? options.to.join(', ') : options.to;
60
+ const cc = options.cc
61
+ ? Array.isArray(options.cc)
62
+ ? options.cc.join(', ')
63
+ : options.cc
64
+ : undefined;
65
+ const bcc = options.bcc
66
+ ? Array.isArray(options.bcc)
67
+ ? options.bcc.join(', ')
68
+ : options.bcc
69
+ : undefined;
70
+ const boundary = `----=_Part_${Date.now()}_${Math.random().toString(36).substring(2)}`;
71
+ let headers = [`To: ${to}`, `Subject: ${options.subject}`, `MIME-Version: 1.0`];
72
+ if (cc)
73
+ headers.push(`Cc: ${cc}`);
74
+ if (bcc)
75
+ headers.push(`Bcc: ${bcc}`);
76
+ if (options.replyTo)
77
+ headers.push(`Reply-To: ${options.replyTo}`);
78
+ if ('inReplyTo' in options && options.inReplyTo) {
79
+ headers.push(`In-Reply-To: ${options.inReplyTo}`);
80
+ }
81
+ if ('references' in options && options.references) {
82
+ headers.push(`References: ${options.references}`);
83
+ }
84
+ if (options.bodyHtml) {
85
+ headers.push(`Content-Type: multipart/alternative; boundary="${boundary}"`);
86
+ const body = [
87
+ '',
88
+ `--${boundary}`,
89
+ 'Content-Type: text/plain; charset="UTF-8"',
90
+ '',
91
+ options.body,
92
+ '',
93
+ `--${boundary}`,
94
+ 'Content-Type: text/html; charset="UTF-8"',
95
+ '',
96
+ options.bodyHtml,
97
+ '',
98
+ `--${boundary}--`,
99
+ ].join('\r\n');
100
+ return headers.join('\r\n') + '\r\n' + body;
101
+ }
102
+ else {
103
+ headers.push('Content-Type: text/plain; charset="UTF-8"');
104
+ return headers.join('\r\n') + '\r\n\r\n' + options.body;
105
+ }
106
+ }
107
+ /**
108
+ * Gmail actions for workflow integration
109
+ */
110
+ export class GmailActions {
111
+ gmail;
112
+ constructor(gmail) {
113
+ this.gmail = gmail;
114
+ }
115
+ /**
116
+ * Get emails from Gmail with optional filtering
117
+ */
118
+ async getEmails(options = {}) {
119
+ const { query, maxResults = 10, labelIds, includeSpamTrash = false, pageToken } = options;
120
+ const listResponse = await this.gmail.users.messages.list({
121
+ userId: 'me',
122
+ q: query,
123
+ maxResults,
124
+ labelIds,
125
+ includeSpamTrash,
126
+ pageToken,
127
+ });
128
+ const messages = listResponse.data.messages ?? [];
129
+ const emails = [];
130
+ for (const msg of messages) {
131
+ if (!msg.id)
132
+ continue;
133
+ const fullMessage = await this.gmail.users.messages.get({
134
+ userId: 'me',
135
+ id: msg.id,
136
+ format: 'full',
137
+ });
138
+ const data = fullMessage.data;
139
+ const headers = data.payload?.headers;
140
+ const body = extractBody(data.payload);
141
+ emails.push({
142
+ id: data.id ?? msg.id,
143
+ threadId: data.threadId ?? '',
144
+ subject: getHeader(headers, 'Subject') ?? '(no subject)',
145
+ from: getHeader(headers, 'From') ?? '',
146
+ to: parseEmailAddresses(getHeader(headers, 'To')),
147
+ cc: parseEmailAddresses(getHeader(headers, 'Cc')),
148
+ bcc: parseEmailAddresses(getHeader(headers, 'Bcc')),
149
+ date: getHeader(headers, 'Date') ?? '',
150
+ snippet: data.snippet ?? '',
151
+ body: body.text,
152
+ bodyHtml: body.html,
153
+ labels: data.labelIds ?? [],
154
+ isUnread: data.labelIds?.includes('UNREAD') ?? false,
155
+ hasAttachments: hasAttachments(data.payload),
156
+ });
157
+ }
158
+ return {
159
+ emails,
160
+ nextPageToken: listResponse.data.nextPageToken ?? undefined,
161
+ resultSizeEstimate: listResponse.data.resultSizeEstimate ?? emails.length,
162
+ };
163
+ }
164
+ /**
165
+ * Send an email via Gmail
166
+ */
167
+ async sendEmail(options) {
168
+ const raw = buildRawEmail(options);
169
+ const encodedMessage = encodeBase64(raw);
170
+ const response = await this.gmail.users.messages.send({
171
+ userId: 'me',
172
+ requestBody: {
173
+ raw: encodedMessage,
174
+ },
175
+ });
176
+ return {
177
+ id: response.data.id ?? '',
178
+ threadId: response.data.threadId ?? '',
179
+ };
180
+ }
181
+ /**
182
+ * Create a draft email in Gmail
183
+ */
184
+ async createDraft(options) {
185
+ const raw = buildRawEmail(options);
186
+ const encodedMessage = encodeBase64(raw);
187
+ const response = await this.gmail.users.drafts.create({
188
+ userId: 'me',
189
+ requestBody: {
190
+ message: {
191
+ raw: encodedMessage,
192
+ threadId: options.threadId,
193
+ },
194
+ },
195
+ });
196
+ return {
197
+ id: response.data.id ?? '',
198
+ messageId: response.data.message?.id ?? '',
199
+ threadId: response.data.message?.threadId ?? undefined,
200
+ };
201
+ }
202
+ /**
203
+ * Get a specific email by ID
204
+ */
205
+ async getEmail(id) {
206
+ const response = await this.gmail.users.messages.get({
207
+ userId: 'me',
208
+ id,
209
+ format: 'full',
210
+ });
211
+ const data = response.data;
212
+ const headers = data.payload?.headers;
213
+ const body = extractBody(data.payload);
214
+ return {
215
+ id: data.id ?? id,
216
+ threadId: data.threadId ?? '',
217
+ subject: getHeader(headers, 'Subject') ?? '(no subject)',
218
+ from: getHeader(headers, 'From') ?? '',
219
+ to: parseEmailAddresses(getHeader(headers, 'To')),
220
+ cc: parseEmailAddresses(getHeader(headers, 'Cc')),
221
+ bcc: parseEmailAddresses(getHeader(headers, 'Bcc')),
222
+ date: getHeader(headers, 'Date') ?? '',
223
+ snippet: data.snippet ?? '',
224
+ body: body.text,
225
+ bodyHtml: body.html,
226
+ labels: data.labelIds ?? [],
227
+ isUnread: data.labelIds?.includes('UNREAD') ?? false,
228
+ hasAttachments: hasAttachments(data.payload),
229
+ };
230
+ }
231
+ /**
232
+ * Mark an email as read
233
+ */
234
+ async markAsRead(id) {
235
+ await this.gmail.users.messages.modify({
236
+ userId: 'me',
237
+ id,
238
+ requestBody: {
239
+ removeLabelIds: ['UNREAD'],
240
+ },
241
+ });
242
+ }
243
+ /**
244
+ * Mark an email as unread
245
+ */
246
+ async markAsUnread(id) {
247
+ await this.gmail.users.messages.modify({
248
+ userId: 'me',
249
+ id,
250
+ requestBody: {
251
+ addLabelIds: ['UNREAD'],
252
+ },
253
+ });
254
+ }
255
+ /**
256
+ * Add labels to an email
257
+ */
258
+ async addLabels(id, labelIds) {
259
+ await this.gmail.users.messages.modify({
260
+ userId: 'me',
261
+ id,
262
+ requestBody: {
263
+ addLabelIds: labelIds,
264
+ },
265
+ });
266
+ }
267
+ /**
268
+ * Remove labels from an email
269
+ */
270
+ async removeLabels(id, labelIds) {
271
+ await this.gmail.users.messages.modify({
272
+ userId: 'me',
273
+ id,
274
+ requestBody: {
275
+ removeLabelIds: labelIds,
276
+ },
277
+ });
278
+ }
279
+ /**
280
+ * Trash an email
281
+ */
282
+ async trash(id) {
283
+ await this.gmail.users.messages.trash({
284
+ userId: 'me',
285
+ id,
286
+ });
287
+ }
288
+ /**
289
+ * Delete an email permanently
290
+ */
291
+ async delete(id) {
292
+ await this.gmail.users.messages.delete({
293
+ userId: 'me',
294
+ id,
295
+ });
296
+ }
297
+ /**
298
+ * Get list of labels
299
+ */
300
+ async listLabels() {
301
+ const response = await this.gmail.users.labels.list({
302
+ userId: 'me',
303
+ });
304
+ return (response.data.labels ?? []).map((label) => ({
305
+ id: label.id ?? '',
306
+ name: label.name ?? '',
307
+ type: label.type ?? '',
308
+ }));
309
+ }
310
+ }
311
+ export const GmailInitializer = {
312
+ async initialize(_module, config) {
313
+ const clientId = config.auth?.['client_id'];
314
+ const clientSecret = config.auth?.['client_secret'];
315
+ const redirectUri = config.auth?.['redirect_uri'];
316
+ const refreshToken = config.auth?.['refresh_token'];
317
+ const accessToken = config.auth?.['access_token'];
318
+ if (!clientId || !clientSecret || !redirectUri) {
319
+ throw new Error('Gmail SDK requires auth.client_id, auth.client_secret, auth.redirect_uri');
320
+ }
321
+ const oauth2Client = new google.auth.OAuth2(clientId, clientSecret, redirectUri);
322
+ oauth2Client.setCredentials({
323
+ refresh_token: refreshToken,
324
+ access_token: accessToken,
325
+ });
326
+ const gmail = google.gmail({ version: 'v1', auth: oauth2Client });
327
+ return {
328
+ client: gmail,
329
+ actions: new GmailActions(gmail),
330
+ };
331
+ },
332
+ };
333
+ //# sourceMappingURL=gmail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gmail.js","sourceRoot":"","sources":["../../src/services/gmail.ts"],"names":[],"mappings":"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"}