@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.
- package/dist/adapters/claude-code.d.ts +16 -0
- package/dist/adapters/claude-code.d.ts.map +1 -0
- package/dist/adapters/claude-code.js +56 -0
- package/dist/adapters/claude-code.js.map +1 -0
- package/dist/adapters/ollama.d.ts +3 -0
- package/dist/adapters/ollama.d.ts.map +1 -0
- package/dist/adapters/ollama.js +9 -0
- package/dist/adapters/ollama.js.map +1 -0
- package/dist/adapters/opencode.d.ts +21 -0
- package/dist/adapters/opencode.d.ts.map +1 -0
- package/dist/adapters/opencode.js +119 -0
- package/dist/adapters/opencode.js.map +1 -0
- package/dist/claude-code.d.ts +16 -0
- package/dist/claude-code.d.ts.map +1 -0
- package/dist/claude-code.js +56 -0
- package/dist/claude-code.js.map +1 -0
- package/dist/github.d.ts +3 -0
- package/dist/github.d.ts.map +1 -0
- package/dist/github.js +13 -0
- package/dist/github.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +67 -0
- package/dist/index.js.map +1 -0
- package/dist/jira.d.ts +3 -0
- package/dist/jira.d.ts.map +1 -0
- package/dist/jira.js +21 -0
- package/dist/jira.js.map +1 -0
- package/dist/ollama.d.ts +3 -0
- package/dist/ollama.d.ts.map +1 -0
- package/dist/ollama.js +9 -0
- package/dist/ollama.js.map +1 -0
- package/dist/opencode.d.ts +19 -0
- package/dist/opencode.d.ts.map +1 -0
- package/dist/opencode.js +104 -0
- package/dist/opencode.js.map +1 -0
- package/dist/script.d.ts +3 -0
- package/dist/script.d.ts.map +1 -0
- package/dist/script.js +21 -0
- package/dist/script.js.map +1 -0
- package/dist/services/airtable.d.ts +145 -0
- package/dist/services/airtable.d.ts.map +1 -0
- package/dist/services/airtable.js +295 -0
- package/dist/services/airtable.js.map +1 -0
- package/dist/services/confluence.d.ts +205 -0
- package/dist/services/confluence.d.ts.map +1 -0
- package/dist/services/confluence.js +356 -0
- package/dist/services/confluence.js.map +1 -0
- package/dist/services/discord.d.ts +212 -0
- package/dist/services/discord.d.ts.map +1 -0
- package/dist/services/discord.js +279 -0
- package/dist/services/discord.js.map +1 -0
- package/dist/services/github.d.ts +3 -0
- package/dist/services/github.d.ts.map +1 -0
- package/dist/services/github.js +13 -0
- package/dist/services/github.js.map +1 -0
- package/dist/services/gmail-trigger.d.ts +92 -0
- package/dist/services/gmail-trigger.d.ts.map +1 -0
- package/dist/services/gmail-trigger.js +172 -0
- package/dist/services/gmail-trigger.js.map +1 -0
- package/dist/services/gmail.d.ts +116 -0
- package/dist/services/gmail.d.ts.map +1 -0
- package/dist/services/gmail.js +333 -0
- package/dist/services/gmail.js.map +1 -0
- package/dist/services/http.d.ts +120 -0
- package/dist/services/http.d.ts.map +1 -0
- package/dist/services/http.js +284 -0
- package/dist/services/http.js.map +1 -0
- package/dist/services/jira.d.ts +3 -0
- package/dist/services/jira.d.ts.map +1 -0
- package/dist/services/jira.js +21 -0
- package/dist/services/jira.js.map +1 -0
- package/dist/services/linear.d.ts +163 -0
- package/dist/services/linear.d.ts.map +1 -0
- package/dist/services/linear.js +326 -0
- package/dist/services/linear.js.map +1 -0
- package/dist/services/notion.d.ts +206 -0
- package/dist/services/notion.d.ts.map +1 -0
- package/dist/services/notion.js +358 -0
- package/dist/services/notion.js.map +1 -0
- package/dist/services/outlook-trigger.d.ts +121 -0
- package/dist/services/outlook-trigger.d.ts.map +1 -0
- package/dist/services/outlook-trigger.js +204 -0
- package/dist/services/outlook-trigger.js.map +1 -0
- package/dist/services/outlook.d.ts +237 -0
- package/dist/services/outlook.d.ts.map +1 -0
- package/dist/services/outlook.js +475 -0
- package/dist/services/outlook.js.map +1 -0
- package/dist/services/slack-socket.d.ts +18 -0
- package/dist/services/slack-socket.d.ts.map +1 -0
- package/dist/services/slack-socket.js +46 -0
- package/dist/services/slack-socket.js.map +1 -0
- package/dist/services/slack.d.ts +3 -0
- package/dist/services/slack.d.ts.map +1 -0
- package/dist/services/slack.js +11 -0
- package/dist/services/slack.js.map +1 -0
- package/dist/slack.d.ts +3 -0
- package/dist/slack.d.ts.map +1 -0
- package/dist/slack.js +11 -0
- package/dist/slack.js.map +1 -0
- package/dist/tools/script.d.ts +3 -0
- package/dist/tools/script.d.ts.map +1 -0
- package/dist/tools/script.js +21 -0
- package/dist/tools/script.js.map +1 -0
- package/package.json +57 -0
package/dist/opencode.js
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { createOpencodeClient } from '@opencode-ai/sdk';
|
|
3
|
+
export class OpenCodeClient {
|
|
4
|
+
mode;
|
|
5
|
+
serverUrl;
|
|
6
|
+
cliPath;
|
|
7
|
+
sdkClient = null;
|
|
8
|
+
constructor(options = {}) {
|
|
9
|
+
this.mode = options.mode || 'auto';
|
|
10
|
+
this.serverUrl = options.serverUrl || 'http://localhost:4096';
|
|
11
|
+
this.cliPath = options.cliPath || 'opencode';
|
|
12
|
+
if (this.mode === 'server' || this.mode === 'auto') {
|
|
13
|
+
this.sdkClient = createOpencodeClient({
|
|
14
|
+
baseUrl: this.serverUrl,
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
async generate(inputs) {
|
|
19
|
+
const prompt = typeof inputs === 'string' ? inputs : inputs.prompt;
|
|
20
|
+
if (this.mode === 'server') {
|
|
21
|
+
return this.generateViaServer(prompt);
|
|
22
|
+
}
|
|
23
|
+
else if (this.mode === 'cli') {
|
|
24
|
+
return this.generateViaCli(prompt);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
// Auto mode: try server, fall back to CLI
|
|
28
|
+
try {
|
|
29
|
+
return await this.generateViaServer(prompt);
|
|
30
|
+
}
|
|
31
|
+
catch (e) {
|
|
32
|
+
return this.generateViaCli(prompt);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
async generateViaServer(prompt) {
|
|
37
|
+
if (!this.sdkClient) {
|
|
38
|
+
throw new Error('OpenCode SDK client not initialized');
|
|
39
|
+
}
|
|
40
|
+
// Create session
|
|
41
|
+
const sessionRes = await this.sdkClient.session.create();
|
|
42
|
+
if (sessionRes.error) {
|
|
43
|
+
throw new Error(`Failed to create OpenCode session: ${JSON.stringify(sessionRes.error)}`);
|
|
44
|
+
}
|
|
45
|
+
const session = sessionRes.data;
|
|
46
|
+
if (!session || !session.id) {
|
|
47
|
+
throw new Error('Failed to create OpenCode session: No session ID returned');
|
|
48
|
+
}
|
|
49
|
+
// Send message
|
|
50
|
+
const response = await this.sdkClient.session.prompt({
|
|
51
|
+
path: { id: session.id },
|
|
52
|
+
body: {
|
|
53
|
+
parts: [{ type: 'text', text: prompt }]
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
if (response.error) {
|
|
57
|
+
throw new Error(`Failed to generate response: ${JSON.stringify(response.error)}`);
|
|
58
|
+
}
|
|
59
|
+
const data = response.data;
|
|
60
|
+
// Extract text
|
|
61
|
+
if (data.parts) {
|
|
62
|
+
return data.parts.map((p) => p.text || '').join('');
|
|
63
|
+
}
|
|
64
|
+
if (data.text) {
|
|
65
|
+
return data.text;
|
|
66
|
+
}
|
|
67
|
+
return JSON.stringify(data);
|
|
68
|
+
}
|
|
69
|
+
async generateViaCli(prompt) {
|
|
70
|
+
const args = ['run', prompt];
|
|
71
|
+
return new Promise((resolve, reject) => {
|
|
72
|
+
const process = spawn(this.cliPath, args);
|
|
73
|
+
let stdout = '';
|
|
74
|
+
let stderr = '';
|
|
75
|
+
process.stdout.on('data', d => stdout += d.toString());
|
|
76
|
+
process.stderr.on('data', d => stderr += d.toString());
|
|
77
|
+
process.on('close', code => {
|
|
78
|
+
if (code === 0) {
|
|
79
|
+
let output = stdout.trim();
|
|
80
|
+
// Strip <output> tags if present
|
|
81
|
+
if (output.startsWith('<output>') && output.endsWith('</output>')) {
|
|
82
|
+
output = output.slice(8, -9).trim();
|
|
83
|
+
}
|
|
84
|
+
resolve(output);
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
reject(new Error(`OpenCode CLI failed (exit code ${code})\nSTDERR: ${stderr}`));
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
process.on('error', reject);
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
export const OpenCodeInitializer = {
|
|
95
|
+
async initialize(_module, config) {
|
|
96
|
+
const options = config.options || {};
|
|
97
|
+
return new OpenCodeClient({
|
|
98
|
+
mode: options['mode'],
|
|
99
|
+
serverUrl: options['serverUrl'],
|
|
100
|
+
cliPath: options['cliPath'],
|
|
101
|
+
});
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
//# sourceMappingURL=opencode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode.js","sourceRoot":"","sources":["../src/opencode.ts"],"names":[],"mappings":"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"}
|
package/dist/script.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script.d.ts","sourceRoot":"","sources":["../src/script.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAE1E,eAAO,MAAM,iBAAiB,EAAE,cAoB/B,CAAC"}
|
package/dist/script.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ScriptTool } from '@marktoflow/core';
|
|
2
|
+
export const ScriptInitializer = {
|
|
3
|
+
async initialize(_module, config) {
|
|
4
|
+
const scriptPath = config.options?.['path'];
|
|
5
|
+
if (!scriptPath) {
|
|
6
|
+
throw new Error('Script integration requires options.path');
|
|
7
|
+
}
|
|
8
|
+
const toolsDir = config.options?.['toolsDir'];
|
|
9
|
+
const tool = new ScriptTool(scriptPath, toolsDir);
|
|
10
|
+
// We return a proxy that maps method calls to tool.execute(method, args)
|
|
11
|
+
return new Proxy(tool, {
|
|
12
|
+
get: (target, prop) => {
|
|
13
|
+
if (typeof prop === 'string' && prop !== 'then') {
|
|
14
|
+
return (params) => target.execute(prop, params);
|
|
15
|
+
}
|
|
16
|
+
return Reflect.get(target, prop);
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=script.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script.js","sourceRoot":"","sources":["../src/script.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA8B,MAAM,kBAAkB,CAAC;AAE1E,MAAM,CAAC,MAAM,iBAAiB,GAAmB;IAC/C,KAAK,CAAC,UAAU,CAAC,OAAgB,EAAE,MAAkB;QACnD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,MAAM,CAAW,CAAC;QACtD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,UAAU,CAAW,CAAC;QACxD,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAElD,yEAAyE;QACzE,OAAO,IAAI,KAAK,CAAC,IAAI,EAAE;YACrB,GAAG,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;gBACpB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;oBAChD,OAAO,CAAC,MAA2B,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBACvE,CAAC;gBACD,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACnC,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Airtable Integration
|
|
3
|
+
*
|
|
4
|
+
* Flexible database/spreadsheet platform.
|
|
5
|
+
* API Docs: https://airtable.com/developers/web/api/introduction
|
|
6
|
+
*/
|
|
7
|
+
import { SDKInitializer } from '@marktoflow/core';
|
|
8
|
+
export interface AirtableRecord<T = Record<string, unknown>> {
|
|
9
|
+
id: string;
|
|
10
|
+
createdTime: string;
|
|
11
|
+
fields: T;
|
|
12
|
+
}
|
|
13
|
+
export interface AirtableBase {
|
|
14
|
+
id: string;
|
|
15
|
+
name: string;
|
|
16
|
+
permissionLevel: string;
|
|
17
|
+
}
|
|
18
|
+
export interface AirtableTable {
|
|
19
|
+
id: string;
|
|
20
|
+
name: string;
|
|
21
|
+
primaryFieldId: string;
|
|
22
|
+
fields: AirtableField[];
|
|
23
|
+
views: {
|
|
24
|
+
id: string;
|
|
25
|
+
name: string;
|
|
26
|
+
type: string;
|
|
27
|
+
}[];
|
|
28
|
+
}
|
|
29
|
+
export interface AirtableField {
|
|
30
|
+
id: string;
|
|
31
|
+
name: string;
|
|
32
|
+
type: string;
|
|
33
|
+
description?: string;
|
|
34
|
+
options?: Record<string, unknown>;
|
|
35
|
+
}
|
|
36
|
+
export interface ListRecordsOptions {
|
|
37
|
+
fields?: string[];
|
|
38
|
+
filterByFormula?: string;
|
|
39
|
+
maxRecords?: number;
|
|
40
|
+
pageSize?: number;
|
|
41
|
+
sort?: {
|
|
42
|
+
field: string;
|
|
43
|
+
direction?: 'asc' | 'desc';
|
|
44
|
+
}[];
|
|
45
|
+
view?: string;
|
|
46
|
+
offset?: string;
|
|
47
|
+
cellFormat?: 'json' | 'string';
|
|
48
|
+
timeZone?: string;
|
|
49
|
+
userLocale?: string;
|
|
50
|
+
}
|
|
51
|
+
export interface CreateRecordOptions<T = Record<string, unknown>> {
|
|
52
|
+
fields: T;
|
|
53
|
+
typecast?: boolean;
|
|
54
|
+
}
|
|
55
|
+
export interface UpdateRecordOptions<T = Record<string, unknown>> {
|
|
56
|
+
fields: Partial<T>;
|
|
57
|
+
typecast?: boolean;
|
|
58
|
+
}
|
|
59
|
+
export interface ListRecordsResult<T = Record<string, unknown>> {
|
|
60
|
+
records: AirtableRecord<T>[];
|
|
61
|
+
offset?: string;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Airtable API client for workflow integration
|
|
65
|
+
*/
|
|
66
|
+
export declare class AirtableClient {
|
|
67
|
+
private token;
|
|
68
|
+
private baseId?;
|
|
69
|
+
constructor(token: string, baseId?: string | undefined);
|
|
70
|
+
private request;
|
|
71
|
+
/**
|
|
72
|
+
* Set the default base ID
|
|
73
|
+
*/
|
|
74
|
+
setBase(baseId: string): void;
|
|
75
|
+
/**
|
|
76
|
+
* List all bases the user has access to
|
|
77
|
+
*/
|
|
78
|
+
listBases(): Promise<AirtableBase[]>;
|
|
79
|
+
/**
|
|
80
|
+
* Get base schema (tables and fields)
|
|
81
|
+
*/
|
|
82
|
+
getBaseSchema(baseId?: string): Promise<AirtableTable[]>;
|
|
83
|
+
/**
|
|
84
|
+
* List records from a table
|
|
85
|
+
*/
|
|
86
|
+
listRecords<T = Record<string, unknown>>(tableIdOrName: string, options?: ListRecordsOptions, baseId?: string): Promise<ListRecordsResult<T>>;
|
|
87
|
+
/**
|
|
88
|
+
* Get all records (handles pagination automatically)
|
|
89
|
+
*/
|
|
90
|
+
getAllRecords<T = Record<string, unknown>>(tableIdOrName: string, options?: Omit<ListRecordsOptions, 'offset'>, baseId?: string): Promise<AirtableRecord<T>[]>;
|
|
91
|
+
/**
|
|
92
|
+
* Get a single record by ID
|
|
93
|
+
*/
|
|
94
|
+
getRecord<T = Record<string, unknown>>(tableIdOrName: string, recordId: string, baseId?: string): Promise<AirtableRecord<T>>;
|
|
95
|
+
/**
|
|
96
|
+
* Create a single record
|
|
97
|
+
*/
|
|
98
|
+
createRecord<T = Record<string, unknown>>(tableIdOrName: string, options: CreateRecordOptions<T>, baseId?: string): Promise<AirtableRecord<T>>;
|
|
99
|
+
/**
|
|
100
|
+
* Create multiple records (up to 10 at a time)
|
|
101
|
+
*/
|
|
102
|
+
createRecords<T = Record<string, unknown>>(tableIdOrName: string, records: CreateRecordOptions<T>[], baseId?: string): Promise<AirtableRecord<T>[]>;
|
|
103
|
+
/**
|
|
104
|
+
* Update a single record
|
|
105
|
+
*/
|
|
106
|
+
updateRecord<T = Record<string, unknown>>(tableIdOrName: string, recordId: string, options: UpdateRecordOptions<T>, baseId?: string): Promise<AirtableRecord<T>>;
|
|
107
|
+
/**
|
|
108
|
+
* Update multiple records (up to 10 at a time)
|
|
109
|
+
*/
|
|
110
|
+
updateRecords<T = Record<string, unknown>>(tableIdOrName: string, records: {
|
|
111
|
+
id: string;
|
|
112
|
+
fields: Partial<T>;
|
|
113
|
+
typecast?: boolean;
|
|
114
|
+
}[], baseId?: string): Promise<AirtableRecord<T>[]>;
|
|
115
|
+
/**
|
|
116
|
+
* Replace a record (destructive update - clears unspecified fields)
|
|
117
|
+
*/
|
|
118
|
+
replaceRecord<T = Record<string, unknown>>(tableIdOrName: string, recordId: string, options: CreateRecordOptions<T>, baseId?: string): Promise<AirtableRecord<T>>;
|
|
119
|
+
/**
|
|
120
|
+
* Delete a single record
|
|
121
|
+
*/
|
|
122
|
+
deleteRecord(tableIdOrName: string, recordId: string, baseId?: string): Promise<{
|
|
123
|
+
id: string;
|
|
124
|
+
deleted: boolean;
|
|
125
|
+
}>;
|
|
126
|
+
/**
|
|
127
|
+
* Delete multiple records (up to 10 at a time)
|
|
128
|
+
*/
|
|
129
|
+
deleteRecords(tableIdOrName: string, recordIds: string[], baseId?: string): Promise<{
|
|
130
|
+
records: {
|
|
131
|
+
id: string;
|
|
132
|
+
deleted: boolean;
|
|
133
|
+
}[];
|
|
134
|
+
}>;
|
|
135
|
+
/**
|
|
136
|
+
* Find records matching a formula
|
|
137
|
+
*/
|
|
138
|
+
findRecords<T = Record<string, unknown>>(tableIdOrName: string, formula: string, options?: Omit<ListRecordsOptions, 'filterByFormula'>, baseId?: string): Promise<AirtableRecord<T>[]>;
|
|
139
|
+
/**
|
|
140
|
+
* Find a single record by field value
|
|
141
|
+
*/
|
|
142
|
+
findOne<T = Record<string, unknown>>(tableIdOrName: string, fieldName: string, value: string | number, baseId?: string): Promise<AirtableRecord<T> | null>;
|
|
143
|
+
}
|
|
144
|
+
export declare const AirtableInitializer: SDKInitializer;
|
|
145
|
+
//# sourceMappingURL=airtable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"airtable.d.ts","sourceRoot":"","sources":["../../src/services/airtable.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAc,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAI9D,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACzD,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,CAAC,CAAC;CACX;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACrD;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;KAAE,EAAE,CAAC;IACvD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC9D,MAAM,EAAE,CAAC,CAAC;IACV,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC9D,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC5D,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,qBAAa,cAAc;IAEvB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,MAAM,CAAC;gBADP,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,YAAA;YAGX,OAAO;IAuBrB;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI7B;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAS1C;;OAEG;IACG,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAc9D;;OAEG;IACG,WAAW,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3C,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,kBAAuB,EAChC,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IA2ChC;;OAEG;IACG,aAAa,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7C,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAM,EAChD,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IAa/B;;OAEG;IACG,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzC,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAc7B;;OAEG;IACG,YAAY,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5C,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAC/B,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAiB7B;;OAEG;IACG,aAAa,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7C,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAAE,EACjC,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IAuB/B;;OAEG;IACG,YAAY,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5C,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAC/B,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAiB7B;;OAEG;IACG,aAAa,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7C,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,EACjE,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IAoB/B;;OAEG;IACG,aAAa,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7C,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAC/B,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAiB7B;;OAEG;IACG,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAQvH;;OAEG;IACG,aAAa,CACjB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EAAE,EACnB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,OAAO,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,OAAO,CAAA;SAAE,EAAE,CAAA;KAAE,CAAC;IAa3D;;OAEG;IACG,WAAW,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3C,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,IAAI,CAAC,kBAAkB,EAAE,iBAAiB,CAAM,EACzD,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IAI/B;;OAEG;IACG,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;CAOrC;AAED,eAAO,MAAM,mBAAmB,EAAE,cAejC,CAAC"}
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Airtable Integration
|
|
3
|
+
*
|
|
4
|
+
* Flexible database/spreadsheet platform.
|
|
5
|
+
* API Docs: https://airtable.com/developers/web/api/introduction
|
|
6
|
+
*/
|
|
7
|
+
const AIRTABLE_API_URL = 'https://api.airtable.com/v0';
|
|
8
|
+
/**
|
|
9
|
+
* Airtable API client for workflow integration
|
|
10
|
+
*/
|
|
11
|
+
export class AirtableClient {
|
|
12
|
+
token;
|
|
13
|
+
baseId;
|
|
14
|
+
constructor(token, baseId) {
|
|
15
|
+
this.token = token;
|
|
16
|
+
this.baseId = baseId;
|
|
17
|
+
}
|
|
18
|
+
async request(method, path, body) {
|
|
19
|
+
const response = await fetch(`${AIRTABLE_API_URL}${path}`, {
|
|
20
|
+
method,
|
|
21
|
+
headers: {
|
|
22
|
+
Authorization: `Bearer ${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(`Airtable API error: ${response.status} ${error}`);
|
|
30
|
+
}
|
|
31
|
+
// Handle 204 No Content
|
|
32
|
+
if (response.status === 204) {
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
return (await response.json());
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Set the default base ID
|
|
39
|
+
*/
|
|
40
|
+
setBase(baseId) {
|
|
41
|
+
this.baseId = baseId;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* List all bases the user has access to
|
|
45
|
+
*/
|
|
46
|
+
async listBases() {
|
|
47
|
+
const data = await this.request('GET', '/meta/bases');
|
|
48
|
+
return data.bases.map((b) => ({
|
|
49
|
+
id: b.id,
|
|
50
|
+
name: b.name,
|
|
51
|
+
permissionLevel: b.permissionLevel,
|
|
52
|
+
}));
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Get base schema (tables and fields)
|
|
56
|
+
*/
|
|
57
|
+
async getBaseSchema(baseId) {
|
|
58
|
+
const id = baseId ?? this.baseId;
|
|
59
|
+
if (!id)
|
|
60
|
+
throw new Error('Base ID is required');
|
|
61
|
+
const data = await this.request('GET', `/meta/bases/${id}/tables`);
|
|
62
|
+
return data.tables.map((t) => ({
|
|
63
|
+
id: t.id,
|
|
64
|
+
name: t.name,
|
|
65
|
+
primaryFieldId: t.primaryFieldId,
|
|
66
|
+
fields: t.fields ?? [],
|
|
67
|
+
views: t.views ?? [],
|
|
68
|
+
}));
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* List records from a table
|
|
72
|
+
*/
|
|
73
|
+
async listRecords(tableIdOrName, options = {}, baseId) {
|
|
74
|
+
const id = baseId ?? this.baseId;
|
|
75
|
+
if (!id)
|
|
76
|
+
throw new Error('Base ID is required');
|
|
77
|
+
const params = [];
|
|
78
|
+
if (options.fields) {
|
|
79
|
+
options.fields.forEach((f) => params.push(`fields[]=${encodeURIComponent(f)}`));
|
|
80
|
+
}
|
|
81
|
+
if (options.filterByFormula) {
|
|
82
|
+
params.push(`filterByFormula=${encodeURIComponent(options.filterByFormula)}`);
|
|
83
|
+
}
|
|
84
|
+
if (options.maxRecords)
|
|
85
|
+
params.push(`maxRecords=${options.maxRecords}`);
|
|
86
|
+
if (options.pageSize)
|
|
87
|
+
params.push(`pageSize=${options.pageSize}`);
|
|
88
|
+
if (options.sort) {
|
|
89
|
+
options.sort.forEach((s, i) => {
|
|
90
|
+
params.push(`sort[${i}][field]=${encodeURIComponent(s.field)}`);
|
|
91
|
+
if (s.direction)
|
|
92
|
+
params.push(`sort[${i}][direction]=${s.direction}`);
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
if (options.view)
|
|
96
|
+
params.push(`view=${encodeURIComponent(options.view)}`);
|
|
97
|
+
if (options.offset)
|
|
98
|
+
params.push(`offset=${options.offset}`);
|
|
99
|
+
if (options.cellFormat)
|
|
100
|
+
params.push(`cellFormat=${options.cellFormat}`);
|
|
101
|
+
if (options.timeZone)
|
|
102
|
+
params.push(`timeZone=${encodeURIComponent(options.timeZone)}`);
|
|
103
|
+
if (options.userLocale)
|
|
104
|
+
params.push(`userLocale=${encodeURIComponent(options.userLocale)}`);
|
|
105
|
+
const query = params.length ? `?${params.join('&')}` : '';
|
|
106
|
+
const encodedTable = encodeURIComponent(tableIdOrName);
|
|
107
|
+
const data = await this.request('GET', `/${id}/${encodedTable}${query}`);
|
|
108
|
+
return {
|
|
109
|
+
records: data.records.map((r) => ({
|
|
110
|
+
id: r.id,
|
|
111
|
+
createdTime: r.createdTime,
|
|
112
|
+
fields: r.fields,
|
|
113
|
+
})),
|
|
114
|
+
offset: data.offset,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Get all records (handles pagination automatically)
|
|
119
|
+
*/
|
|
120
|
+
async getAllRecords(tableIdOrName, options = {}, baseId) {
|
|
121
|
+
const allRecords = [];
|
|
122
|
+
let offset;
|
|
123
|
+
do {
|
|
124
|
+
const result = await this.listRecords(tableIdOrName, { ...options, offset }, baseId);
|
|
125
|
+
allRecords.push(...result.records);
|
|
126
|
+
offset = result.offset;
|
|
127
|
+
} while (offset);
|
|
128
|
+
return allRecords;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Get a single record by ID
|
|
132
|
+
*/
|
|
133
|
+
async getRecord(tableIdOrName, recordId, baseId) {
|
|
134
|
+
const id = baseId ?? this.baseId;
|
|
135
|
+
if (!id)
|
|
136
|
+
throw new Error('Base ID is required');
|
|
137
|
+
const encodedTable = encodeURIComponent(tableIdOrName);
|
|
138
|
+
const data = await this.request('GET', `/${id}/${encodedTable}/${recordId}`);
|
|
139
|
+
return {
|
|
140
|
+
id: data.id,
|
|
141
|
+
createdTime: data.createdTime,
|
|
142
|
+
fields: data.fields,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Create a single record
|
|
147
|
+
*/
|
|
148
|
+
async createRecord(tableIdOrName, options, baseId) {
|
|
149
|
+
const id = baseId ?? this.baseId;
|
|
150
|
+
if (!id)
|
|
151
|
+
throw new Error('Base ID is required');
|
|
152
|
+
const encodedTable = encodeURIComponent(tableIdOrName);
|
|
153
|
+
const data = await this.request('POST', `/${id}/${encodedTable}`, {
|
|
154
|
+
fields: options.fields,
|
|
155
|
+
typecast: options.typecast,
|
|
156
|
+
});
|
|
157
|
+
return {
|
|
158
|
+
id: data.id,
|
|
159
|
+
createdTime: data.createdTime,
|
|
160
|
+
fields: data.fields,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Create multiple records (up to 10 at a time)
|
|
165
|
+
*/
|
|
166
|
+
async createRecords(tableIdOrName, records, baseId) {
|
|
167
|
+
const id = baseId ?? this.baseId;
|
|
168
|
+
if (!id)
|
|
169
|
+
throw new Error('Base ID is required');
|
|
170
|
+
if (records.length > 10) {
|
|
171
|
+
throw new Error('Airtable allows maximum 10 records per request');
|
|
172
|
+
}
|
|
173
|
+
const encodedTable = encodeURIComponent(tableIdOrName);
|
|
174
|
+
const data = await this.request('POST', `/${id}/${encodedTable}`, {
|
|
175
|
+
records: records.map((r) => ({
|
|
176
|
+
fields: r.fields,
|
|
177
|
+
typecast: r.typecast,
|
|
178
|
+
})),
|
|
179
|
+
});
|
|
180
|
+
return data.records.map((r) => ({
|
|
181
|
+
id: r.id,
|
|
182
|
+
createdTime: r.createdTime,
|
|
183
|
+
fields: r.fields,
|
|
184
|
+
}));
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Update a single record
|
|
188
|
+
*/
|
|
189
|
+
async updateRecord(tableIdOrName, recordId, options, baseId) {
|
|
190
|
+
const id = baseId ?? this.baseId;
|
|
191
|
+
if (!id)
|
|
192
|
+
throw new Error('Base ID is required');
|
|
193
|
+
const encodedTable = encodeURIComponent(tableIdOrName);
|
|
194
|
+
const data = await this.request('PATCH', `/${id}/${encodedTable}/${recordId}`, {
|
|
195
|
+
fields: options.fields,
|
|
196
|
+
typecast: options.typecast,
|
|
197
|
+
});
|
|
198
|
+
return {
|
|
199
|
+
id: data.id,
|
|
200
|
+
createdTime: data.createdTime,
|
|
201
|
+
fields: data.fields,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Update multiple records (up to 10 at a time)
|
|
206
|
+
*/
|
|
207
|
+
async updateRecords(tableIdOrName, records, baseId) {
|
|
208
|
+
const id = baseId ?? this.baseId;
|
|
209
|
+
if (!id)
|
|
210
|
+
throw new Error('Base ID is required');
|
|
211
|
+
if (records.length > 10) {
|
|
212
|
+
throw new Error('Airtable allows maximum 10 records per request');
|
|
213
|
+
}
|
|
214
|
+
const encodedTable = encodeURIComponent(tableIdOrName);
|
|
215
|
+
const data = await this.request('PATCH', `/${id}/${encodedTable}`, {
|
|
216
|
+
records,
|
|
217
|
+
});
|
|
218
|
+
return data.records.map((r) => ({
|
|
219
|
+
id: r.id,
|
|
220
|
+
createdTime: r.createdTime,
|
|
221
|
+
fields: r.fields,
|
|
222
|
+
}));
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Replace a record (destructive update - clears unspecified fields)
|
|
226
|
+
*/
|
|
227
|
+
async replaceRecord(tableIdOrName, recordId, options, baseId) {
|
|
228
|
+
const id = baseId ?? this.baseId;
|
|
229
|
+
if (!id)
|
|
230
|
+
throw new Error('Base ID is required');
|
|
231
|
+
const encodedTable = encodeURIComponent(tableIdOrName);
|
|
232
|
+
const data = await this.request('PUT', `/${id}/${encodedTable}/${recordId}`, {
|
|
233
|
+
fields: options.fields,
|
|
234
|
+
typecast: options.typecast,
|
|
235
|
+
});
|
|
236
|
+
return {
|
|
237
|
+
id: data.id,
|
|
238
|
+
createdTime: data.createdTime,
|
|
239
|
+
fields: data.fields,
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Delete a single record
|
|
244
|
+
*/
|
|
245
|
+
async deleteRecord(tableIdOrName, recordId, baseId) {
|
|
246
|
+
const id = baseId ?? this.baseId;
|
|
247
|
+
if (!id)
|
|
248
|
+
throw new Error('Base ID is required');
|
|
249
|
+
const encodedTable = encodeURIComponent(tableIdOrName);
|
|
250
|
+
return this.request('DELETE', `/${id}/${encodedTable}/${recordId}`);
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Delete multiple records (up to 10 at a time)
|
|
254
|
+
*/
|
|
255
|
+
async deleteRecords(tableIdOrName, recordIds, baseId) {
|
|
256
|
+
const id = baseId ?? this.baseId;
|
|
257
|
+
if (!id)
|
|
258
|
+
throw new Error('Base ID is required');
|
|
259
|
+
if (recordIds.length > 10) {
|
|
260
|
+
throw new Error('Airtable allows maximum 10 records per request');
|
|
261
|
+
}
|
|
262
|
+
const encodedTable = encodeURIComponent(tableIdOrName);
|
|
263
|
+
const params = recordIds.map((rid) => `records[]=${rid}`).join('&');
|
|
264
|
+
return this.request('DELETE', `/${id}/${encodedTable}?${params}`);
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Find records matching a formula
|
|
268
|
+
*/
|
|
269
|
+
async findRecords(tableIdOrName, formula, options = {}, baseId) {
|
|
270
|
+
return this.getAllRecords(tableIdOrName, { ...options, filterByFormula: formula }, baseId);
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Find a single record by field value
|
|
274
|
+
*/
|
|
275
|
+
async findOne(tableIdOrName, fieldName, value, baseId) {
|
|
276
|
+
const formula = typeof value === 'string' ? `{${fieldName}} = "${value}"` : `{${fieldName}} = ${value}`;
|
|
277
|
+
const result = await this.listRecords(tableIdOrName, { filterByFormula: formula, maxRecords: 1 }, baseId);
|
|
278
|
+
return result.records[0] ?? null;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
export const AirtableInitializer = {
|
|
282
|
+
async initialize(_module, config) {
|
|
283
|
+
const token = config.auth?.['token'];
|
|
284
|
+
const baseId = config.options?.['base_id'];
|
|
285
|
+
if (!token) {
|
|
286
|
+
throw new Error('Airtable SDK requires auth.token (personal access token)');
|
|
287
|
+
}
|
|
288
|
+
const client = new AirtableClient(token, baseId);
|
|
289
|
+
return {
|
|
290
|
+
client,
|
|
291
|
+
actions: client,
|
|
292
|
+
};
|
|
293
|
+
},
|
|
294
|
+
};
|
|
295
|
+
//# sourceMappingURL=airtable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"airtable.js","sourceRoot":"","sources":["../../src/services/airtable.ts"],"names":[],"mappings":"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"}
|