@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,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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"}
@@ -0,0 +1,3 @@
1
+ import { SDKInitializer } from '@marktoflow/core';
2
+ export declare const ScriptInitializer: SDKInitializer;
3
+ //# sourceMappingURL=script.d.ts.map
@@ -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":"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"}
@@ -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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"}