@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,358 @@
1
+ /**
2
+ * Notion Integration
3
+ *
4
+ * All-in-one workspace for docs, databases, and knowledge management.
5
+ * API Docs: https://developers.notion.com/
6
+ */
7
+ const NOTION_API_URL = 'https://api.notion.com/v1';
8
+ const NOTION_VERSION = '2022-06-28';
9
+ function buildRichText(text) {
10
+ return [{ type: 'text', text: { content: text } }];
11
+ }
12
+ function buildBlock(input) {
13
+ const block = {
14
+ object: 'block',
15
+ type: input.type,
16
+ };
17
+ switch (input.type) {
18
+ case 'paragraph':
19
+ case 'heading_1':
20
+ case 'heading_2':
21
+ case 'heading_3':
22
+ case 'bulleted_list_item':
23
+ case 'numbered_list_item':
24
+ case 'quote':
25
+ block[input.type] = {
26
+ rich_text: buildRichText(input.content ?? ''),
27
+ children: input.children?.map(buildBlock),
28
+ };
29
+ break;
30
+ case 'to_do':
31
+ block.to_do = {
32
+ rich_text: buildRichText(input.content ?? ''),
33
+ checked: input.checked ?? false,
34
+ children: input.children?.map(buildBlock),
35
+ };
36
+ break;
37
+ case 'toggle':
38
+ block.toggle = {
39
+ rich_text: buildRichText(input.content ?? ''),
40
+ children: input.children?.map(buildBlock),
41
+ };
42
+ break;
43
+ case 'code':
44
+ block.code = {
45
+ rich_text: buildRichText(input.content ?? ''),
46
+ language: input.language ?? 'plain text',
47
+ };
48
+ break;
49
+ case 'callout':
50
+ block.callout = {
51
+ rich_text: buildRichText(input.content ?? ''),
52
+ icon: { type: 'emoji', emoji: '💡' },
53
+ children: input.children?.map(buildBlock),
54
+ };
55
+ break;
56
+ case 'divider':
57
+ block.divider = {};
58
+ break;
59
+ }
60
+ return block;
61
+ }
62
+ function extractTitle(properties) {
63
+ // Find title property
64
+ for (const [, value] of Object.entries(properties)) {
65
+ if (value?.type === 'title') {
66
+ const titleArr = value?.title;
67
+ return titleArr?.map((t) => t.plain_text).join('') ?? '';
68
+ }
69
+ }
70
+ return '';
71
+ }
72
+ /**
73
+ * Notion API client for workflow integration
74
+ */
75
+ export class NotionClient {
76
+ token;
77
+ constructor(token) {
78
+ this.token = token;
79
+ }
80
+ async request(method, path, body) {
81
+ const response = await fetch(`${NOTION_API_URL}${path}`, {
82
+ method,
83
+ headers: {
84
+ Authorization: `Bearer ${this.token}`,
85
+ 'Content-Type': 'application/json',
86
+ 'Notion-Version': NOTION_VERSION,
87
+ },
88
+ body: body ? JSON.stringify(body) : undefined,
89
+ });
90
+ if (!response.ok) {
91
+ const error = await response.text();
92
+ throw new Error(`Notion API error: ${response.status} ${error}`);
93
+ }
94
+ return (await response.json());
95
+ }
96
+ /**
97
+ * Get the current user
98
+ */
99
+ async getMe() {
100
+ const data = await this.request('GET', '/users/me');
101
+ return data;
102
+ }
103
+ /**
104
+ * Search pages and databases
105
+ */
106
+ async search(options = {}) {
107
+ const body = {};
108
+ if (options.query)
109
+ body.query = options.query;
110
+ if (options.filter)
111
+ body.filter = options.filter;
112
+ if (options.sort)
113
+ body.sort = options.sort;
114
+ if (options.startCursor)
115
+ body.start_cursor = options.startCursor;
116
+ if (options.pageSize)
117
+ body.page_size = options.pageSize;
118
+ const data = await this.request('POST', '/search', body);
119
+ const results = data.results.map((item) => {
120
+ if (item.object === 'page') {
121
+ return {
122
+ id: item.id,
123
+ url: item.url,
124
+ title: extractTitle(item.properties),
125
+ icon: item.icon,
126
+ cover: item.cover,
127
+ parent: item.parent,
128
+ createdTime: item.created_time,
129
+ lastEditedTime: item.last_edited_time,
130
+ createdBy: item.created_by,
131
+ lastEditedBy: item.last_edited_by,
132
+ archived: item.archived,
133
+ properties: item.properties,
134
+ };
135
+ }
136
+ else {
137
+ const titleArr = item.title;
138
+ return {
139
+ id: item.id,
140
+ url: item.url,
141
+ title: titleArr?.map((t) => t.plain_text).join('') ?? '',
142
+ description: item.description?.map((t) => t.plain_text).join(''),
143
+ icon: item.icon,
144
+ properties: item.properties,
145
+ createdTime: item.created_time,
146
+ lastEditedTime: item.last_edited_time,
147
+ archived: item.archived,
148
+ };
149
+ }
150
+ });
151
+ return {
152
+ results,
153
+ hasMore: data.has_more,
154
+ nextCursor: data.next_cursor,
155
+ };
156
+ }
157
+ /**
158
+ * Get a page by ID
159
+ */
160
+ async getPage(pageId) {
161
+ const data = await this.request('GET', `/pages/${pageId}`);
162
+ return {
163
+ id: data.id,
164
+ url: data.url,
165
+ title: extractTitle(data.properties),
166
+ icon: data.icon,
167
+ cover: data.cover,
168
+ parent: data.parent,
169
+ createdTime: data.created_time,
170
+ lastEditedTime: data.last_edited_time,
171
+ createdBy: data.created_by,
172
+ lastEditedBy: data.last_edited_by,
173
+ archived: data.archived,
174
+ properties: data.properties,
175
+ };
176
+ }
177
+ /**
178
+ * Create a page
179
+ */
180
+ async createPage(options) {
181
+ const body = {
182
+ properties: {
183
+ title: { title: buildRichText(options.title) },
184
+ ...(options.properties ?? {}),
185
+ },
186
+ };
187
+ if (options.parentPageId) {
188
+ body.parent = { type: 'page_id', page_id: options.parentPageId };
189
+ }
190
+ else if (options.parentDatabaseId) {
191
+ body.parent = { type: 'database_id', database_id: options.parentDatabaseId };
192
+ }
193
+ else {
194
+ throw new Error('Either parentPageId or parentDatabaseId is required');
195
+ }
196
+ if (options.icon)
197
+ body.icon = options.icon;
198
+ if (options.cover)
199
+ body.cover = options.cover;
200
+ if (options.children) {
201
+ body.children = options.children.map(buildBlock);
202
+ }
203
+ const data = await this.request('POST', '/pages', body);
204
+ return {
205
+ id: data.id,
206
+ url: data.url,
207
+ title: options.title,
208
+ icon: data.icon,
209
+ cover: data.cover,
210
+ parent: data.parent,
211
+ createdTime: data.created_time,
212
+ lastEditedTime: data.last_edited_time,
213
+ createdBy: data.created_by,
214
+ lastEditedBy: data.last_edited_by,
215
+ archived: data.archived,
216
+ properties: data.properties,
217
+ };
218
+ }
219
+ /**
220
+ * Update page properties
221
+ */
222
+ async updatePage(pageId, options) {
223
+ const data = await this.request('PATCH', `/pages/${pageId}`, options);
224
+ return {
225
+ id: data.id,
226
+ url: data.url,
227
+ title: extractTitle(data.properties),
228
+ icon: data.icon,
229
+ cover: data.cover,
230
+ parent: data.parent,
231
+ createdTime: data.created_time,
232
+ lastEditedTime: data.last_edited_time,
233
+ createdBy: data.created_by,
234
+ lastEditedBy: data.last_edited_by,
235
+ archived: data.archived,
236
+ properties: data.properties,
237
+ };
238
+ }
239
+ /**
240
+ * Get a database by ID
241
+ */
242
+ async getDatabase(databaseId) {
243
+ const data = await this.request('GET', `/databases/${databaseId}`);
244
+ const titleArr = data.title;
245
+ return {
246
+ id: data.id,
247
+ url: data.url,
248
+ title: titleArr?.map((t) => t.plain_text).join('') ?? '',
249
+ description: data.description?.map((t) => t.plain_text).join(''),
250
+ icon: data.icon,
251
+ properties: data.properties,
252
+ createdTime: data.created_time,
253
+ lastEditedTime: data.last_edited_time,
254
+ archived: data.archived,
255
+ };
256
+ }
257
+ /**
258
+ * Query a database
259
+ */
260
+ async queryDatabase(databaseId, options = {}) {
261
+ const body = {};
262
+ if (options.filter)
263
+ body.filter = options.filter;
264
+ if (options.sorts)
265
+ body.sorts = options.sorts;
266
+ if (options.startCursor)
267
+ body.start_cursor = options.startCursor;
268
+ if (options.pageSize)
269
+ body.page_size = options.pageSize;
270
+ const data = await this.request('POST', `/databases/${databaseId}/query`, body);
271
+ const results = data.results.map((item) => ({
272
+ id: item.id,
273
+ url: item.url,
274
+ title: extractTitle(item.properties),
275
+ icon: item.icon,
276
+ cover: item.cover,
277
+ parent: item.parent,
278
+ createdTime: item.created_time,
279
+ lastEditedTime: item.last_edited_time,
280
+ createdBy: item.created_by,
281
+ lastEditedBy: item.last_edited_by,
282
+ archived: item.archived,
283
+ properties: item.properties,
284
+ }));
285
+ return {
286
+ results,
287
+ hasMore: data.has_more,
288
+ nextCursor: data.next_cursor,
289
+ };
290
+ }
291
+ /**
292
+ * Get block children (page content)
293
+ */
294
+ async getBlockChildren(blockId, options = {}) {
295
+ let url = `/blocks/${blockId}/children`;
296
+ const params = [];
297
+ if (options.startCursor)
298
+ params.push(`start_cursor=${options.startCursor}`);
299
+ if (options.pageSize)
300
+ params.push(`page_size=${options.pageSize}`);
301
+ if (params.length)
302
+ url += `?${params.join('&')}`;
303
+ const data = await this.request('GET', url);
304
+ const blocks = data.results.map((item) => ({
305
+ id: item.id,
306
+ type: item.type,
307
+ hasChildren: item.has_children,
308
+ createdTime: item.created_time,
309
+ lastEditedTime: item.last_edited_time,
310
+ content: item[item.type],
311
+ }));
312
+ return {
313
+ blocks,
314
+ hasMore: data.has_more,
315
+ nextCursor: data.next_cursor,
316
+ };
317
+ }
318
+ /**
319
+ * Append blocks to a page
320
+ */
321
+ async appendBlocks(pageId, blocks) {
322
+ const data = await this.request('PATCH', `/blocks/${pageId}/children`, { children: blocks.map(buildBlock) });
323
+ return data.results.map((item) => ({
324
+ id: item.id,
325
+ type: item.type,
326
+ hasChildren: item.has_children,
327
+ createdTime: item.created_time,
328
+ lastEditedTime: item.last_edited_time,
329
+ content: item[item.type],
330
+ }));
331
+ }
332
+ /**
333
+ * Delete a block
334
+ */
335
+ async deleteBlock(blockId) {
336
+ await this.request('DELETE', `/blocks/${blockId}`);
337
+ }
338
+ /**
339
+ * Archive a page (soft delete)
340
+ */
341
+ async archivePage(pageId) {
342
+ await this.updatePage(pageId, { archived: true });
343
+ }
344
+ }
345
+ export const NotionInitializer = {
346
+ async initialize(_module, config) {
347
+ const token = config.auth?.['token'];
348
+ if (!token) {
349
+ throw new Error('Notion SDK requires auth.token (integration token)');
350
+ }
351
+ const client = new NotionClient(token);
352
+ return {
353
+ client,
354
+ actions: client,
355
+ };
356
+ },
357
+ };
358
+ //# sourceMappingURL=notion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notion.js","sourceRoot":"","sources":["../../src/services/notion.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ import { TriggerType } from '@marktoflow/core';
2
+ export interface OutlookTriggerConfig {
3
+ token: string;
4
+ notificationUrl: string;
5
+ changeTypes?: ('created' | 'updated' | 'deleted')[];
6
+ resource?: string;
7
+ expirationMinutes?: number;
8
+ clientState?: string;
9
+ triggers: Array<{
10
+ id: string;
11
+ event: 'email_received' | 'email_updated' | 'email_deleted';
12
+ handler: (payload: OutlookTriggerPayload) => Promise<void>;
13
+ }>;
14
+ }
15
+ export interface OutlookTriggerPayload {
16
+ type: TriggerType;
17
+ event: 'email_received' | 'email_updated' | 'email_deleted';
18
+ subscriptionId: string;
19
+ changeType: string;
20
+ resource: string;
21
+ resourceData?: {
22
+ id: string;
23
+ [key: string]: unknown;
24
+ };
25
+ clientState?: string;
26
+ tenantId?: string;
27
+ }
28
+ export interface GraphSubscription {
29
+ id: string;
30
+ resource: string;
31
+ changeType: string;
32
+ notificationUrl: string;
33
+ expirationDateTime: string;
34
+ clientState?: string;
35
+ }
36
+ export interface GraphNotification {
37
+ value: Array<{
38
+ subscriptionId: string;
39
+ subscriptionExpirationDateTime: string;
40
+ changeType: string;
41
+ resource: string;
42
+ resourceData?: {
43
+ '@odata.type': string;
44
+ '@odata.id': string;
45
+ '@odata.etag': string;
46
+ id: string;
47
+ [key: string]: unknown;
48
+ };
49
+ clientState?: string;
50
+ tenantId?: string;
51
+ }>;
52
+ }
53
+ export interface GraphValidationRequest extends Record<string, unknown> {
54
+ validationToken: string;
55
+ }
56
+ /**
57
+ * Outlook trigger handler for Microsoft Graph webhook subscriptions.
58
+ *
59
+ * Setup requirements:
60
+ * 1. Register an Azure AD application with Mail.Read permissions
61
+ * 2. Set up a publicly accessible webhook endpoint
62
+ * 3. Call subscribe() to start receiving notifications
63
+ * 4. Handle subscription renewal before expiration (max ~3 days)
64
+ */
65
+ export declare class OutlookTrigger {
66
+ private config;
67
+ private client;
68
+ private subscription?;
69
+ constructor(config: OutlookTriggerConfig);
70
+ /**
71
+ * Create a subscription to receive mail notifications.
72
+ */
73
+ subscribe(): Promise<GraphSubscription>;
74
+ /**
75
+ * Renew an existing subscription.
76
+ */
77
+ renew(expirationMinutes?: number): Promise<GraphSubscription>;
78
+ /**
79
+ * Delete the subscription (stop receiving notifications).
80
+ */
81
+ unsubscribe(): Promise<void>;
82
+ /**
83
+ * Get the current subscription status.
84
+ */
85
+ getSubscription(): GraphSubscription | undefined;
86
+ /**
87
+ * Check if subscription is still active (not expired).
88
+ */
89
+ isSubscriptionActive(): boolean;
90
+ /**
91
+ * Handle an incoming Graph notification.
92
+ * Call this from your webhook endpoint after validation.
93
+ */
94
+ handleNotification(notification: GraphNotification): Promise<void>;
95
+ /**
96
+ * Check if a request is a validation request from Graph.
97
+ */
98
+ static isValidationRequest(query: Record<string, unknown>): query is GraphValidationRequest;
99
+ /**
100
+ * Validate the notification body structure.
101
+ */
102
+ static validateNotification(body: unknown): body is GraphNotification;
103
+ }
104
+ /**
105
+ * Express/Fastify-compatible middleware for handling Outlook Graph webhooks.
106
+ *
107
+ * Handles both:
108
+ * - Subscription validation (GET with validationToken)
109
+ * - Notification processing (POST with notification payload)
110
+ */
111
+ export declare function createOutlookWebhookHandler(trigger: OutlookTrigger): (req: {
112
+ method: string;
113
+ query: Record<string, unknown>;
114
+ body: unknown;
115
+ }, res: {
116
+ status: (code: number) => {
117
+ send: (body?: string) => void;
118
+ };
119
+ contentType: (type: string) => void;
120
+ }) => Promise<void>;
121
+ //# sourceMappingURL=outlook-trigger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outlook-trigger.d.ts","sourceRoot":"","sources":["../../src/services/outlook-trigger.ts"],"names":[],"mappings":"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"}