@sensigo/realm 0.1.0

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 (222) hide show
  1. package/README.md +150 -0
  2. package/dist/adapters/adapter-utils.d.ts +14 -0
  3. package/dist/adapters/adapter-utils.d.ts.map +1 -0
  4. package/dist/adapters/adapter-utils.js +18 -0
  5. package/dist/adapters/adapter-utils.js.map +1 -0
  6. package/dist/adapters/airtable-adapter.d.ts +51 -0
  7. package/dist/adapters/airtable-adapter.d.ts.map +1 -0
  8. package/dist/adapters/airtable-adapter.js +425 -0
  9. package/dist/adapters/airtable-adapter.js.map +1 -0
  10. package/dist/adapters/file-adapter.d.ts +14 -0
  11. package/dist/adapters/file-adapter.d.ts.map +1 -0
  12. package/dist/adapters/file-adapter.js +89 -0
  13. package/dist/adapters/file-adapter.js.map +1 -0
  14. package/dist/adapters/github-adapter.d.ts +40 -0
  15. package/dist/adapters/github-adapter.d.ts.map +1 -0
  16. package/dist/adapters/github-adapter.js +286 -0
  17. package/dist/adapters/github-adapter.js.map +1 -0
  18. package/dist/adapters/gorgias-adapter.d.ts +40 -0
  19. package/dist/adapters/gorgias-adapter.d.ts.map +1 -0
  20. package/dist/adapters/gorgias-adapter.js +300 -0
  21. package/dist/adapters/gorgias-adapter.js.map +1 -0
  22. package/dist/adapters/http-adapter.d.ts +28 -0
  23. package/dist/adapters/http-adapter.d.ts.map +1 -0
  24. package/dist/adapters/http-adapter.js +97 -0
  25. package/dist/adapters/http-adapter.js.map +1 -0
  26. package/dist/adapters/mock-adapter.d.ts +16 -0
  27. package/dist/adapters/mock-adapter.d.ts.map +1 -0
  28. package/dist/adapters/mock-adapter.js +61 -0
  29. package/dist/adapters/mock-adapter.js.map +1 -0
  30. package/dist/adapters/notion-adapter.d.ts +54 -0
  31. package/dist/adapters/notion-adapter.d.ts.map +1 -0
  32. package/dist/adapters/notion-adapter.js +751 -0
  33. package/dist/adapters/notion-adapter.js.map +1 -0
  34. package/dist/adapters/parcelpanel-adapter.d.ts +60 -0
  35. package/dist/adapters/parcelpanel-adapter.d.ts.map +1 -0
  36. package/dist/adapters/parcelpanel-adapter.js +251 -0
  37. package/dist/adapters/parcelpanel-adapter.js.map +1 -0
  38. package/dist/adapters/rate-limiter.d.ts +26 -0
  39. package/dist/adapters/rate-limiter.d.ts.map +1 -0
  40. package/dist/adapters/rate-limiter.js +3 -0
  41. package/dist/adapters/rate-limiter.js.map +1 -0
  42. package/dist/adapters/shopify-adapter.d.ts +92 -0
  43. package/dist/adapters/shopify-adapter.d.ts.map +1 -0
  44. package/dist/adapters/shopify-adapter.js +415 -0
  45. package/dist/adapters/shopify-adapter.js.map +1 -0
  46. package/dist/adapters/slack-adapter.d.ts +18 -0
  47. package/dist/adapters/slack-adapter.d.ts.map +1 -0
  48. package/dist/adapters/slack-adapter.js +81 -0
  49. package/dist/adapters/slack-adapter.js.map +1 -0
  50. package/dist/adapters/token-bucket.d.ts +27 -0
  51. package/dist/adapters/token-bucket.d.ts.map +1 -0
  52. package/dist/adapters/token-bucket.js +109 -0
  53. package/dist/adapters/token-bucket.js.map +1 -0
  54. package/dist/config/secrets.d.ts +15 -0
  55. package/dist/config/secrets.d.ts.map +1 -0
  56. package/dist/config/secrets.js +33 -0
  57. package/dist/config/secrets.js.map +1 -0
  58. package/dist/engine/eligibility.d.ts +50 -0
  59. package/dist/engine/eligibility.d.ts.map +1 -0
  60. package/dist/engine/eligibility.js +267 -0
  61. package/dist/engine/eligibility.js.map +1 -0
  62. package/dist/engine/error-resolution.d.ts +20 -0
  63. package/dist/engine/error-resolution.d.ts.map +1 -0
  64. package/dist/engine/error-resolution.js +32 -0
  65. package/dist/engine/error-resolution.js.map +1 -0
  66. package/dist/engine/execution-loop.d.ts +101 -0
  67. package/dist/engine/execution-loop.d.ts.map +1 -0
  68. package/dist/engine/execution-loop.js +1156 -0
  69. package/dist/engine/execution-loop.js.map +1 -0
  70. package/dist/engine/lifecycle.d.ts +14 -0
  71. package/dist/engine/lifecycle.d.ts.map +1 -0
  72. package/dist/engine/lifecycle.js +17 -0
  73. package/dist/engine/lifecycle.js.map +1 -0
  74. package/dist/engine/precondition.d.ts +30 -0
  75. package/dist/engine/precondition.d.ts.map +1 -0
  76. package/dist/engine/precondition.js +125 -0
  77. package/dist/engine/precondition.js.map +1 -0
  78. package/dist/engine/prompt-template.d.ts +25 -0
  79. package/dist/engine/prompt-template.d.ts.map +1 -0
  80. package/dist/engine/prompt-template.js +66 -0
  81. package/dist/engine/prompt-template.js.map +1 -0
  82. package/dist/engine/render-template.d.ts +52 -0
  83. package/dist/engine/render-template.d.ts.map +1 -0
  84. package/dist/engine/render-template.js +548 -0
  85. package/dist/engine/render-template.js.map +1 -0
  86. package/dist/engine/state-guard.d.ts +15 -0
  87. package/dist/engine/state-guard.d.ts.map +1 -0
  88. package/dist/engine/state-guard.js +40 -0
  89. package/dist/engine/state-guard.js.map +1 -0
  90. package/dist/engine/trace-normalizer.d.ts +36 -0
  91. package/dist/engine/trace-normalizer.d.ts.map +1 -0
  92. package/dist/engine/trace-normalizer.js +146 -0
  93. package/dist/engine/trace-normalizer.js.map +1 -0
  94. package/dist/engine/trace-policy.d.ts +53 -0
  95. package/dist/engine/trace-policy.d.ts.map +1 -0
  96. package/dist/engine/trace-policy.js +35 -0
  97. package/dist/engine/trace-policy.js.map +1 -0
  98. package/dist/engine/workflow-context-loader.d.ts +9 -0
  99. package/dist/engine/workflow-context-loader.d.ts.map +1 -0
  100. package/dist/engine/workflow-context-loader.js +41 -0
  101. package/dist/engine/workflow-context-loader.js.map +1 -0
  102. package/dist/evidence/snapshot.d.ts +38 -0
  103. package/dist/evidence/snapshot.d.ts.map +1 -0
  104. package/dist/evidence/snapshot.js +53 -0
  105. package/dist/evidence/snapshot.js.map +1 -0
  106. package/dist/extensions/default-registry.d.ts +19 -0
  107. package/dist/extensions/default-registry.d.ts.map +1 -0
  108. package/dist/extensions/default-registry.js +31 -0
  109. package/dist/extensions/default-registry.js.map +1 -0
  110. package/dist/extensions/processor.d.ts +13 -0
  111. package/dist/extensions/processor.d.ts.map +1 -0
  112. package/dist/extensions/processor.js +3 -0
  113. package/dist/extensions/processor.js.map +1 -0
  114. package/dist/extensions/registry.d.ts +25 -0
  115. package/dist/extensions/registry.d.ts.map +1 -0
  116. package/dist/extensions/registry.js +43 -0
  117. package/dist/extensions/registry.js.map +1 -0
  118. package/dist/extensions/service-adapter.d.ts +35 -0
  119. package/dist/extensions/service-adapter.d.ts.map +1 -0
  120. package/dist/extensions/service-adapter.js +3 -0
  121. package/dist/extensions/service-adapter.js.map +1 -0
  122. package/dist/extensions/step-handler.d.ts +28 -0
  123. package/dist/extensions/step-handler.d.ts.map +1 -0
  124. package/dist/extensions/step-handler.js +3 -0
  125. package/dist/extensions/step-handler.js.map +1 -0
  126. package/dist/handlers/primitives/compare-strings.d.ts +13 -0
  127. package/dist/handlers/primitives/compare-strings.d.ts.map +1 -0
  128. package/dist/handlers/primitives/compare-strings.js +28 -0
  129. package/dist/handlers/primitives/compare-strings.js.map +1 -0
  130. package/dist/handlers/primitives/count-results.d.ts +21 -0
  131. package/dist/handlers/primitives/count-results.d.ts.map +1 -0
  132. package/dist/handlers/primitives/count-results.js +23 -0
  133. package/dist/handlers/primitives/count-results.js.map +1 -0
  134. package/dist/handlers/primitives/partition-by-substring.d.ts +18 -0
  135. package/dist/handlers/primitives/partition-by-substring.d.ts.map +1 -0
  136. package/dist/handlers/primitives/partition-by-substring.js +28 -0
  137. package/dist/handlers/primitives/partition-by-substring.js.map +1 -0
  138. package/dist/handlers/primitives/resolve-resource.d.ts +13 -0
  139. package/dist/handlers/primitives/resolve-resource.d.ts.map +1 -0
  140. package/dist/handlers/primitives/resolve-resource.js +21 -0
  141. package/dist/handlers/primitives/resolve-resource.js.map +1 -0
  142. package/dist/handlers/primitives/walk-field.d.ts +11 -0
  143. package/dist/handlers/primitives/walk-field.d.ts.map +1 -0
  144. package/dist/handlers/primitives/walk-field.js +31 -0
  145. package/dist/handlers/primitives/walk-field.js.map +1 -0
  146. package/dist/handlers/validate-field-match.d.ts +11 -0
  147. package/dist/handlers/validate-field-match.d.ts.map +1 -0
  148. package/dist/handlers/validate-field-match.js +39 -0
  149. package/dist/handlers/validate-field-match.js.map +1 -0
  150. package/dist/handlers/validate-verbatim-quotes.d.ts +11 -0
  151. package/dist/handlers/validate-verbatim-quotes.d.ts.map +1 -0
  152. package/dist/handlers/validate-verbatim-quotes.js +37 -0
  153. package/dist/handlers/validate-verbatim-quotes.js.map +1 -0
  154. package/dist/index.d.ts +57 -0
  155. package/dist/index.d.ts.map +1 -0
  156. package/dist/index.js +45 -0
  157. package/dist/index.js.map +1 -0
  158. package/dist/pipeline/processing-pipeline.d.ts +24 -0
  159. package/dist/pipeline/processing-pipeline.d.ts.map +1 -0
  160. package/dist/pipeline/processing-pipeline.js +53 -0
  161. package/dist/pipeline/processing-pipeline.js.map +1 -0
  162. package/dist/processors/compute-hash.d.ts +4 -0
  163. package/dist/processors/compute-hash.d.ts.map +1 -0
  164. package/dist/processors/compute-hash.js +14 -0
  165. package/dist/processors/compute-hash.js.map +1 -0
  166. package/dist/processors/normalize-text.d.ts +8 -0
  167. package/dist/processors/normalize-text.d.ts.map +1 -0
  168. package/dist/processors/normalize-text.js +47 -0
  169. package/dist/processors/normalize-text.js.map +1 -0
  170. package/dist/store/json-file-store.d.ts +24 -0
  171. package/dist/store/json-file-store.d.ts.map +1 -0
  172. package/dist/store/json-file-store.js +210 -0
  173. package/dist/store/json-file-store.js.map +1 -0
  174. package/dist/store/store-interface.d.ts +33 -0
  175. package/dist/store/store-interface.d.ts.map +1 -0
  176. package/dist/store/store-interface.js +2 -0
  177. package/dist/store/store-interface.js.map +1 -0
  178. package/dist/store/trace-buffer-store.d.ts +55 -0
  179. package/dist/store/trace-buffer-store.d.ts.map +1 -0
  180. package/dist/store/trace-buffer-store.js +113 -0
  181. package/dist/store/trace-buffer-store.js.map +1 -0
  182. package/dist/types/mcp-types.d.ts +17 -0
  183. package/dist/types/mcp-types.d.ts.map +1 -0
  184. package/dist/types/mcp-types.js +5 -0
  185. package/dist/types/mcp-types.js.map +1 -0
  186. package/dist/types/response-envelope.d.ts +96 -0
  187. package/dist/types/response-envelope.d.ts.map +1 -0
  188. package/dist/types/response-envelope.js +2 -0
  189. package/dist/types/response-envelope.js.map +1 -0
  190. package/dist/types/run-record.d.ts +169 -0
  191. package/dist/types/run-record.d.ts.map +1 -0
  192. package/dist/types/run-record.js +2 -0
  193. package/dist/types/run-record.js.map +1 -0
  194. package/dist/types/workflow-definition.d.ts +292 -0
  195. package/dist/types/workflow-definition.d.ts.map +1 -0
  196. package/dist/types/workflow-definition.js +2 -0
  197. package/dist/types/workflow-definition.js.map +1 -0
  198. package/dist/types/workflow-error.d.ts +26 -0
  199. package/dist/types/workflow-error.d.ts.map +1 -0
  200. package/dist/types/workflow-error.js +28 -0
  201. package/dist/types/workflow-error.js.map +1 -0
  202. package/dist/utils/schema-skeleton.d.ts +11 -0
  203. package/dist/utils/schema-skeleton.d.ts.map +1 -0
  204. package/dist/utils/schema-skeleton.js +40 -0
  205. package/dist/utils/schema-skeleton.js.map +1 -0
  206. package/dist/validation/input-schema.d.ts +26 -0
  207. package/dist/validation/input-schema.d.ts.map +1 -0
  208. package/dist/validation/input-schema.js +67 -0
  209. package/dist/validation/input-schema.js.map +1 -0
  210. package/dist/workflow/registrar.d.ts +20 -0
  211. package/dist/workflow/registrar.d.ts.map +1 -0
  212. package/dist/workflow/registrar.js +61 -0
  213. package/dist/workflow/registrar.js.map +1 -0
  214. package/dist/workflow/template-resolver.d.ts +25 -0
  215. package/dist/workflow/template-resolver.d.ts.map +1 -0
  216. package/dist/workflow/template-resolver.js +112 -0
  217. package/dist/workflow/template-resolver.js.map +1 -0
  218. package/dist/workflow/yaml-loader.d.ts +15 -0
  219. package/dist/workflow/yaml-loader.d.ts.map +1 -0
  220. package/dist/workflow/yaml-loader.js +408 -0
  221. package/dist/workflow/yaml-loader.js.map +1 -0
  222. package/package.json +61 -0
@@ -0,0 +1,300 @@
1
+ // GorgiasAdapter — communicates with the Gorgias REST API.
2
+ import { WorkflowError } from '../types/workflow-error.js';
3
+ import { parseRetryAfterHeader } from './adapter-utils.js';
4
+ /**
5
+ * Intentionally minimal — strips tags and decodes five common HTML entities.
6
+ * Sufficient for Gorgias plain-text note bodies.
7
+ */
8
+ function stripHtmlTags(html) {
9
+ return html
10
+ .replace(/<[^>]*>/g, '')
11
+ .replace(/&amp;/g, '&')
12
+ .replace(/&lt;/g, '<')
13
+ .replace(/&gt;/g, '>')
14
+ .replace(/&quot;/g, '"')
15
+ .replace(/&#039;/g, "'")
16
+ .trim();
17
+ }
18
+ /**
19
+ * GorgiasAdapter communicates with the Gorgias REST API.
20
+ *
21
+ * Supported operations:
22
+ * fetch('get_ticket', { ticket_id }) — GET /tickets/{ticket_id}
23
+ * fetch('get_messages', { ticket_id, limit? }) — GET /messages?ticket_id={ticket_id}&...
24
+ * create('post_internal_note', { ticket_id, body_html }) — POST /tickets/{ticket_id}/messages
25
+ */
26
+ export class GorgiasAdapter {
27
+ id;
28
+ defaultRetryAfterSeconds = 60;
29
+ baseUrl;
30
+ authHeader;
31
+ constructor(id, config) {
32
+ // Validate domain — parse and verify the hostname matches to reject values with
33
+ // path segments or query strings (e.g. 'evil.com/api?q=').
34
+ let domainValid = false;
35
+ try {
36
+ const testUrl = new URL(`https://${config.domain}.gorgias.com`);
37
+ domainValid = testUrl.hostname === `${config.domain}.gorgias.com`;
38
+ }
39
+ catch {
40
+ // URL constructor threw — invalid
41
+ }
42
+ if (!domainValid) {
43
+ throw new Error('GorgiasAdapter: invalid domain');
44
+ }
45
+ this.id = id;
46
+ this.baseUrl = config.base_url ?? `https://${config.domain}.gorgias.com/api`;
47
+ this.authHeader = 'Basic ' + Buffer.from(config.auth.token).toString('base64');
48
+ }
49
+ checkAborted(signal) {
50
+ if (signal?.aborted === true) {
51
+ throw new WorkflowError('Adapter request aborted', {
52
+ code: 'STEP_ABORTED',
53
+ category: 'ENGINE',
54
+ agentAction: 'report_to_user',
55
+ retryable: false,
56
+ });
57
+ }
58
+ }
59
+ buildHeaders() {
60
+ return {
61
+ Authorization: this.authHeader,
62
+ 'Content-Type': 'application/json',
63
+ Accept: 'application/json',
64
+ };
65
+ }
66
+ async executeRequest(method, url, operation, body, signal) {
67
+ const fetchOptions = method === 'GET'
68
+ ? { method, headers: this.buildHeaders(), signal: signal ?? null }
69
+ : {
70
+ method,
71
+ headers: this.buildHeaders(),
72
+ body: JSON.stringify(body),
73
+ signal: signal ?? null,
74
+ };
75
+ let response;
76
+ try {
77
+ response = await fetch(url, fetchOptions);
78
+ }
79
+ catch (err) {
80
+ if (err instanceof Error && err.name === 'AbortError') {
81
+ throw new WorkflowError('Adapter request aborted', {
82
+ code: 'STEP_ABORTED',
83
+ category: 'ENGINE',
84
+ agentAction: 'report_to_user',
85
+ retryable: false,
86
+ });
87
+ }
88
+ const message = err instanceof Error ? err.message : String(err);
89
+ throw new WorkflowError(message, {
90
+ code: 'NETWORK_UNREACHABLE',
91
+ category: 'NETWORK',
92
+ agentAction: 'wait_for_human',
93
+ retryable: true,
94
+ });
95
+ }
96
+ if (!response.ok) {
97
+ await this.throwHttpError(response, operation);
98
+ }
99
+ const json = await response.json();
100
+ return { status: response.status, data: json };
101
+ }
102
+ async throwHttpError(response, operation) {
103
+ // Read body as text first — avoids "body already consumed" if JSON.parse fails.
104
+ const rawText = await response.text();
105
+ let body;
106
+ try {
107
+ body = JSON.parse(rawText);
108
+ }
109
+ catch {
110
+ body = rawText;
111
+ }
112
+ const status = response.status;
113
+ const details = { status, operation, body };
114
+ if (status === 429) {
115
+ const retryAfterFromHeader = parseRetryAfterHeader(response.headers.get('Retry-After'));
116
+ throw new WorkflowError('Rate limited by Gorgias API', {
117
+ code: 'SERVICE_RATE_LIMITED',
118
+ category: 'SERVICE',
119
+ agentAction: 'wait_and_proceed',
120
+ retryable: true,
121
+ ...(retryAfterFromHeader !== undefined ? { retry_after: retryAfterFromHeader } : {}),
122
+ details,
123
+ });
124
+ }
125
+ if (status === 401) {
126
+ throw new WorkflowError('Gorgias authentication failed — check email and API key', {
127
+ code: 'SERVICE_AUTH_FAILED',
128
+ category: 'SERVICE',
129
+ agentAction: 'stop',
130
+ retryable: false,
131
+ details,
132
+ });
133
+ }
134
+ if (status === 403) {
135
+ const message403 = operation === 'get_ticket'
136
+ ? 'Account lacks permission to read Gorgias tickets'
137
+ : operation === 'get_messages'
138
+ ? 'Account lacks permission to read Gorgias ticket messages'
139
+ : operation === 'post_internal_note'
140
+ ? 'Account lacks permission to create Gorgias messages'
141
+ : 'Account lacks permission for this Gorgias operation';
142
+ throw new WorkflowError(message403, {
143
+ code: 'SERVICE_HTTP_4XX',
144
+ category: 'SERVICE',
145
+ agentAction: 'stop',
146
+ retryable: false,
147
+ details,
148
+ });
149
+ }
150
+ if (status === 404) {
151
+ throw new WorkflowError('Gorgias resource not found', {
152
+ code: 'SERVICE_HTTP_4XX',
153
+ category: 'SERVICE',
154
+ agentAction: 'stop',
155
+ retryable: false,
156
+ details,
157
+ });
158
+ }
159
+ if (status >= 400 && status < 500) {
160
+ throw new WorkflowError(`HTTP ${status}: ${response.statusText}`, {
161
+ code: 'SERVICE_HTTP_4XX',
162
+ category: 'SERVICE',
163
+ agentAction: 'stop',
164
+ retryable: false,
165
+ details,
166
+ });
167
+ }
168
+ // 5xx
169
+ throw new WorkflowError(`Gorgias server error (HTTP ${status})`, {
170
+ code: 'SERVICE_HTTP_5XX',
171
+ category: 'SERVICE',
172
+ agentAction: 'report_to_user',
173
+ retryable: true,
174
+ details,
175
+ });
176
+ }
177
+ validateTicketId(params) {
178
+ const ticketId = params['ticket_id'];
179
+ if (typeof ticketId !== 'number' || !Number.isInteger(ticketId) || ticketId <= 0) {
180
+ throw new WorkflowError('GorgiasAdapter: ticket_id must be a positive integer', {
181
+ code: 'ADAPTER_VALIDATION_FAILED',
182
+ category: 'ENGINE',
183
+ agentAction: 'provide_input',
184
+ retryable: false,
185
+ details: { received: ticketId },
186
+ });
187
+ }
188
+ return ticketId;
189
+ }
190
+ normalize(msg) {
191
+ const body = msg.body_text ?? stripHtmlTags(msg.body_html ?? '') ?? '';
192
+ return {
193
+ id: msg.id,
194
+ from_agent: msg.from_agent,
195
+ public: msg.public,
196
+ channel: msg.channel,
197
+ body,
198
+ created_datetime: msg.created_datetime,
199
+ };
200
+ }
201
+ async fetch(operation, params, _config, signal) {
202
+ // config.auth is ignored — auth is set at construction time
203
+ if (operation === 'get_ticket') {
204
+ const ticketId = this.validateTicketId(params);
205
+ this.checkAborted(signal);
206
+ return this.executeRequest('GET', `${this.baseUrl}/tickets/${ticketId}`, 'get_ticket', undefined, signal);
207
+ }
208
+ if (operation === 'get_messages') {
209
+ const ticketId = this.validateTicketId(params);
210
+ const userLimit = typeof params['limit'] === 'number' && params['limit'] > 0 ? params['limit'] : 30;
211
+ const effectiveLimit = Math.min(userLimit, 200);
212
+ const PAGE_SIZE = 100;
213
+ const accumulated = [];
214
+ let cursor = undefined;
215
+ let truncated = false;
216
+ for (;;) {
217
+ this.checkAborted(signal);
218
+ const url = `${this.baseUrl}/messages?ticket_id=${ticketId}&limit=${PAGE_SIZE}&order_by=created_datetime:asc` +
219
+ (cursor !== undefined ? `&cursor=${cursor}` : '');
220
+ const response = await this.executeRequest('GET', url, 'get_messages', undefined, signal);
221
+ const json = response.data;
222
+ for (const message of json.data) {
223
+ if (accumulated.length < effectiveLimit) {
224
+ accumulated.push(this.normalize(message));
225
+ }
226
+ }
227
+ const nextCursor = json.meta.next_cursor ?? null;
228
+ if (nextCursor === null) {
229
+ truncated = false;
230
+ break;
231
+ }
232
+ if (accumulated.length >= effectiveLimit) {
233
+ truncated = true;
234
+ break;
235
+ }
236
+ cursor = nextCursor;
237
+ }
238
+ return { status: 200, data: { messages: accumulated, truncated } };
239
+ }
240
+ throw new WorkflowError(`GorgiasAdapter: unsupported fetch operation '${operation}'`, {
241
+ code: 'ADAPTER_OP_UNSUPPORTED',
242
+ category: 'ENGINE',
243
+ agentAction: 'report_to_user',
244
+ retryable: false,
245
+ details: { operation },
246
+ });
247
+ }
248
+ async create(operation, params, _config, signal) {
249
+ // config.auth is ignored — auth is set at construction time
250
+ if (operation === 'post_internal_note') {
251
+ const ticketId = this.validateTicketId(params);
252
+ if (typeof params['body_html'] !== 'string') {
253
+ throw new WorkflowError('GorgiasAdapter: body_html must be a string', {
254
+ code: 'ADAPTER_VALIDATION_FAILED',
255
+ category: 'ENGINE',
256
+ agentAction: 'provide_input',
257
+ retryable: false,
258
+ details: { received: params['body_html'] },
259
+ });
260
+ }
261
+ this.checkAborted(signal);
262
+ const requestBody = {
263
+ channel: 'note',
264
+ public: false,
265
+ from_agent: true,
266
+ body_html: params['body_html'],
267
+ };
268
+ const response = await this.executeRequest('POST', `${this.baseUrl}/tickets/${ticketId}/messages`, 'post_internal_note', requestBody, signal);
269
+ const json = response.data;
270
+ const noteId = json.id;
271
+ if (typeof noteId !== 'number') {
272
+ throw new WorkflowError('GorgiasAdapter: unexpected response shape from post_internal_note', {
273
+ code: 'SERVICE_RESPONSE_INVALID',
274
+ category: 'SERVICE',
275
+ agentAction: 'stop',
276
+ retryable: false,
277
+ details: { received: json },
278
+ });
279
+ }
280
+ return { status: 201, data: { ok: true, note_id: noteId } };
281
+ }
282
+ throw new WorkflowError(`GorgiasAdapter: unsupported create operation '${operation}'`, {
283
+ code: 'ADAPTER_OP_UNSUPPORTED',
284
+ category: 'ENGINE',
285
+ agentAction: 'report_to_user',
286
+ retryable: false,
287
+ details: { operation },
288
+ });
289
+ }
290
+ async update(operation, _params, _config, _signal) {
291
+ throw new WorkflowError(`GorgiasAdapter: update is not supported (operation: '${operation}')`, {
292
+ code: 'ADAPTER_OP_UNSUPPORTED',
293
+ category: 'ENGINE',
294
+ agentAction: 'report_to_user',
295
+ retryable: false,
296
+ details: { operation },
297
+ });
298
+ }
299
+ }
300
+ //# sourceMappingURL=gorgias-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gorgias-adapter.js","sourceRoot":"","sources":["../../src/adapters/gorgias-adapter.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAsC3D;;;GAGG;AACH,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,IAAI;SACR,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,IAAI,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,cAAc;IAChB,EAAE,CAAS;IACX,wBAAwB,GAAG,EAAE,CAAC;IACtB,OAAO,CAAS;IAChB,UAAU,CAAS;IAEpC,YAAY,EAAU,EAAE,MAA4B;QAClD,gFAAgF;QAChF,2DAA2D;QAC3D,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,WAAW,MAAM,CAAC,MAAM,cAAc,CAAC,CAAC;YAChE,WAAW,GAAG,OAAO,CAAC,QAAQ,KAAK,GAAG,MAAM,CAAC,MAAM,cAAc,CAAC;QACpE,CAAC;QAAC,MAAM,CAAC;YACP,kCAAkC;QACpC,CAAC;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,QAAQ,IAAI,WAAW,MAAM,CAAC,MAAM,kBAAkB,CAAC;QAC7E,IAAI,CAAC,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACjF,CAAC;IAEO,YAAY,CAAC,MAAoB;QACvC,IAAI,MAAM,EAAE,OAAO,KAAK,IAAI,EAAE,CAAC;YAC7B,MAAM,IAAI,aAAa,CAAC,yBAAyB,EAAE;gBACjD,IAAI,EAAE,cAAc;gBACpB,QAAQ,EAAE,QAAQ;gBAClB,WAAW,EAAE,gBAAgB;gBAC7B,SAAS,EAAE,KAAK;aACjB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,YAAY;QAClB,OAAO;YACL,aAAa,EAAE,IAAI,CAAC,UAAU;YAC9B,cAAc,EAAE,kBAAkB;YAClC,MAAM,EAAE,kBAAkB;SAC3B,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,cAAc,CAC1B,MAAsB,EACtB,GAAW,EACX,SAAiB,EACjB,IAAc,EACd,MAAoB;QAEpB,MAAM,YAAY,GAChB,MAAM,KAAK,KAAK;YACd,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,IAAI,IAAI,EAAE;YAClE,CAAC,CAAC;gBACE,MAAM;gBACN,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE;gBAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAC1B,MAAM,EAAE,MAAM,IAAI,IAAI;aACvB,CAAC;QAER,IAAI,QAAkB,CAAC;QACvB,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBACtD,MAAM,IAAI,aAAa,CAAC,yBAAyB,EAAE;oBACjD,IAAI,EAAE,cAAc;oBACpB,QAAQ,EAAE,QAAQ;oBAClB,WAAW,EAAE,gBAAgB;oBAC7B,SAAS,EAAE,KAAK;iBACjB,CAAC,CAAC;YACL,CAAC;YACD,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,MAAM,IAAI,aAAa,CAAC,OAAO,EAAE;gBAC/B,IAAI,EAAE,qBAAqB;gBAC3B,QAAQ,EAAE,SAAS;gBACnB,WAAW,EAAE,gBAAgB;gBAC7B,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,IAAI,GAAY,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC5C,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACjD,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,QAAkB,EAAE,SAAiB;QAChE,gFAAgF;QAChF,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtC,IAAI,IAAa,CAAC;QAClB,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,GAAG,OAAO,CAAC;QACjB,CAAC;QAED,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC/B,MAAM,OAAO,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAE5C,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACnB,MAAM,oBAAoB,GAAG,qBAAqB,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;YACxF,MAAM,IAAI,aAAa,CAAC,6BAA6B,EAAE;gBACrD,IAAI,EAAE,sBAAsB;gBAC5B,QAAQ,EAAE,SAAS;gBACnB,WAAW,EAAE,kBAAkB;gBAC/B,SAAS,EAAE,IAAI;gBACf,GAAG,CAAC,oBAAoB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpF,OAAO;aACR,CAAC,CAAC;QACL,CAAC;QAED,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACnB,MAAM,IAAI,aAAa,CAAC,yDAAyD,EAAE;gBACjF,IAAI,EAAE,qBAAqB;gBAC3B,QAAQ,EAAE,SAAS;gBACnB,WAAW,EAAE,MAAM;gBACnB,SAAS,EAAE,KAAK;gBAChB,OAAO;aACR,CAAC,CAAC;QACL,CAAC;QAED,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACnB,MAAM,UAAU,GACd,SAAS,KAAK,YAAY;gBACxB,CAAC,CAAC,kDAAkD;gBACpD,CAAC,CAAC,SAAS,KAAK,cAAc;oBAC5B,CAAC,CAAC,0DAA0D;oBAC5D,CAAC,CAAC,SAAS,KAAK,oBAAoB;wBAClC,CAAC,CAAC,qDAAqD;wBACvD,CAAC,CAAC,qDAAqD,CAAC;YAChE,MAAM,IAAI,aAAa,CAAC,UAAU,EAAE;gBAClC,IAAI,EAAE,kBAAkB;gBACxB,QAAQ,EAAE,SAAS;gBACnB,WAAW,EAAE,MAAM;gBACnB,SAAS,EAAE,KAAK;gBAChB,OAAO;aACR,CAAC,CAAC;QACL,CAAC;QAED,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACnB,MAAM,IAAI,aAAa,CAAC,4BAA4B,EAAE;gBACpD,IAAI,EAAE,kBAAkB;gBACxB,QAAQ,EAAE,SAAS;gBACnB,WAAW,EAAE,MAAM;gBACnB,SAAS,EAAE,KAAK;gBAChB,OAAO;aACR,CAAC,CAAC;QACL,CAAC;QAED,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;YAClC,MAAM,IAAI,aAAa,CAAC,QAAQ,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,EAAE;gBAChE,IAAI,EAAE,kBAAkB;gBACxB,QAAQ,EAAE,SAAS;gBACnB,WAAW,EAAE,MAAM;gBACnB,SAAS,EAAE,KAAK;gBAChB,OAAO;aACR,CAAC,CAAC;QACL,CAAC;QAED,MAAM;QACN,MAAM,IAAI,aAAa,CAAC,8BAA8B,MAAM,GAAG,EAAE;YAC/D,IAAI,EAAE,kBAAkB;YACxB,QAAQ,EAAE,SAAS;YACnB,WAAW,EAAE,gBAAgB;YAC7B,SAAS,EAAE,IAAI;YACf,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAEO,gBAAgB,CAAC,MAA+B;QACtD,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;QACrC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;YACjF,MAAM,IAAI,aAAa,CAAC,sDAAsD,EAAE;gBAC9E,IAAI,EAAE,2BAA2B;gBACjC,QAAQ,EAAE,QAAQ;gBAClB,WAAW,EAAE,eAAe;gBAC5B,SAAS,EAAE,KAAK;gBAChB,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;aAChC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,SAAS,CAAC,GAAmB;QACnC,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,IAAI,aAAa,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;QACvE,OAAO;YACL,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,IAAI;YACJ,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;SACvC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,KAAK,CACT,SAAiB,EACjB,MAA+B,EAC/B,OAAgC,EAChC,MAAoB;QAEpB,4DAA4D;QAE5D,IAAI,SAAS,KAAK,YAAY,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAC/C,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAC1B,OAAO,IAAI,CAAC,cAAc,CACxB,KAAK,EACL,GAAG,IAAI,CAAC,OAAO,YAAY,QAAQ,EAAE,EACrC,YAAY,EACZ,SAAS,EACT,MAAM,CACP,CAAC;QACJ,CAAC;QAED,IAAI,SAAS,KAAK,cAAc,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAC/C,MAAM,SAAS,GACb,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACpF,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YAChD,MAAM,SAAS,GAAG,GAAG,CAAC;YAEtB,MAAM,WAAW,GAAwB,EAAE,CAAC;YAC5C,IAAI,MAAM,GAAuB,SAAS,CAAC;YAC3C,IAAI,SAAS,GAAG,KAAK,CAAC;YAEtB,SAAS,CAAC;gBACR,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBAE1B,MAAM,GAAG,GACP,GAAG,IAAI,CAAC,OAAO,uBAAuB,QAAQ,UAAU,SAAS,gCAAgC;oBACjG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAEpD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;gBAC1F,MAAM,IAAI,GAAG,QAAQ,CAAC,IAGrB,CAAC;gBAEF,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;oBAChC,IAAI,WAAW,CAAC,MAAM,GAAG,cAAc,EAAE,CAAC;wBACxC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;oBAC5C,CAAC;gBACH,CAAC;gBAED,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC;gBACjD,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;oBACxB,SAAS,GAAG,KAAK,CAAC;oBAClB,MAAM;gBACR,CAAC;gBACD,IAAI,WAAW,CAAC,MAAM,IAAI,cAAc,EAAE,CAAC;oBACzC,SAAS,GAAG,IAAI,CAAC;oBACjB,MAAM;gBACR,CAAC;gBACD,MAAM,GAAG,UAAU,CAAC;YACtB,CAAC;YAED,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,CAAC;QACrE,CAAC;QAED,MAAM,IAAI,aAAa,CAAC,gDAAgD,SAAS,GAAG,EAAE;YACpF,IAAI,EAAE,wBAAwB;YAC9B,QAAQ,EAAE,QAAQ;YAClB,WAAW,EAAE,gBAAgB;YAC7B,SAAS,EAAE,KAAK;YAChB,OAAO,EAAE,EAAE,SAAS,EAAE;SACvB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CACV,SAAiB,EACjB,MAA+B,EAC/B,OAAgC,EAChC,MAAoB;QAEpB,4DAA4D;QAE5D,IAAI,SAAS,KAAK,oBAAoB,EAAE,CAAC;YACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAE/C,IAAI,OAAO,MAAM,CAAC,WAAW,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAC5C,MAAM,IAAI,aAAa,CAAC,4CAA4C,EAAE;oBACpE,IAAI,EAAE,2BAA2B;oBACjC,QAAQ,EAAE,QAAQ;oBAClB,WAAW,EAAE,eAAe;oBAC5B,SAAS,EAAE,KAAK;oBAChB,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE;iBAC3C,CAAC,CAAC;YACL,CAAC;YAED,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAE1B,MAAM,WAAW,GAAG;gBAClB,OAAO,EAAE,MAAM;gBACf,MAAM,EAAE,KAAK;gBACb,UAAU,EAAE,IAAI;gBAChB,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC;aAC/B,CAAC;YAEF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CACxC,MAAM,EACN,GAAG,IAAI,CAAC,OAAO,YAAY,QAAQ,WAAW,EAC9C,oBAAoB,EACpB,WAAW,EACX,MAAM,CACP,CAAC;YAEF,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAwB,CAAC;YAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;YACvB,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,MAAM,IAAI,aAAa,CACrB,mEAAmE,EACnE;oBACE,IAAI,EAAE,0BAA0B;oBAChC,QAAQ,EAAE,SAAS;oBACnB,WAAW,EAAE,MAAM;oBACnB,SAAS,EAAE,KAAK;oBAChB,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;iBAC5B,CACF,CAAC;YACJ,CAAC;YAED,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC;QAC9D,CAAC;QAED,MAAM,IAAI,aAAa,CAAC,iDAAiD,SAAS,GAAG,EAAE;YACrF,IAAI,EAAE,wBAAwB;YAC9B,QAAQ,EAAE,QAAQ;YAClB,WAAW,EAAE,gBAAgB;YAC7B,SAAS,EAAE,KAAK;YAChB,OAAO,EAAE,EAAE,SAAS,EAAE;SACvB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CACV,SAAiB,EACjB,OAAgC,EAChC,OAAgC,EAChC,OAAqB;QAErB,MAAM,IAAI,aAAa,CAAC,wDAAwD,SAAS,IAAI,EAAE;YAC7F,IAAI,EAAE,wBAAwB;YAC9B,QAAQ,EAAE,QAAQ;YAClB,WAAW,EAAE,gBAAgB;YAC7B,SAAS,EAAE,KAAK;YAChB,OAAO,EAAE,EAAE,SAAS,EAAE;SACvB,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,28 @@
1
+ import type { ServiceAdapter, ServiceResponse } from '../extensions/service-adapter.js';
2
+ export interface HttpAdapterConfig {
3
+ base_url: string;
4
+ headers?: Record<string, string>;
5
+ auth?: {
6
+ type: 'bearer' | 'basic' | 'header';
7
+ token?: string;
8
+ header_name?: string;
9
+ };
10
+ }
11
+ /**
12
+ * GenericHttpAdapter makes HTTP requests to any REST API.
13
+ * Method mapping:
14
+ * fetch() → GET {base_url}/{operation}?{params as query string}
15
+ * create() → POST {base_url}/{operation} with JSON body
16
+ * update() → PATCH {base_url}/{operation} with JSON body
17
+ */
18
+ export declare class GenericHttpAdapter implements ServiceAdapter {
19
+ readonly id: string;
20
+ private readonly config;
21
+ constructor(id: string, config: HttpAdapterConfig);
22
+ private buildAuthHeaders;
23
+ private request;
24
+ fetch(operation: string, params: Record<string, unknown>, config: Record<string, unknown>, signal?: AbortSignal): Promise<ServiceResponse>;
25
+ create(operation: string, params: Record<string, unknown>, config: Record<string, unknown>, signal?: AbortSignal): Promise<ServiceResponse>;
26
+ update(operation: string, params: Record<string, unknown>, config: Record<string, unknown>, signal?: AbortSignal): Promise<ServiceResponse>;
27
+ }
28
+ //# sourceMappingURL=http-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/http-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAExF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE;QACL,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;QACpC,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED;;;;;;GAMG;AACH,qBAAa,kBAAmB,YAAW,cAAc;aAErC,EAAE,EAAE,MAAM;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADP,EAAE,EAAE,MAAM,EACT,MAAM,EAAE,iBAAiB;IAG5C,OAAO,CAAC,gBAAgB;YAcV,OAAO;IAqErB,KAAK,CACH,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,eAAe,CAAC;IAI3B,MAAM,CACJ,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,eAAe,CAAC;IAI3B,MAAM,CACJ,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,eAAe,CAAC;CAG5B"}
@@ -0,0 +1,97 @@
1
+ // GenericHttpAdapter — makes HTTP requests to any REST API using Node 24 native fetch.
2
+ import { WorkflowError } from '../types/workflow-error.js';
3
+ /**
4
+ * GenericHttpAdapter makes HTTP requests to any REST API.
5
+ * Method mapping:
6
+ * fetch() → GET {base_url}/{operation}?{params as query string}
7
+ * create() → POST {base_url}/{operation} with JSON body
8
+ * update() → PATCH {base_url}/{operation} with JSON body
9
+ */
10
+ export class GenericHttpAdapter {
11
+ id;
12
+ config;
13
+ constructor(id, config) {
14
+ this.id = id;
15
+ this.config = config;
16
+ }
17
+ buildAuthHeaders(auth) {
18
+ if (auth === undefined)
19
+ return {};
20
+ const token = auth.token ?? '';
21
+ if (auth.type === 'bearer') {
22
+ return { Authorization: `Bearer ${token}` };
23
+ }
24
+ if (auth.type === 'basic') {
25
+ return { Authorization: `Basic ${Buffer.from(token).toString('base64')}` };
26
+ }
27
+ // header type
28
+ const headerName = auth.header_name ?? 'X-Auth-Token';
29
+ return { [headerName]: token };
30
+ }
31
+ async request(method, operation, params, callConfig, signal) {
32
+ // Only per-call headers can be merged — base_url and auth are constructor-time
33
+ // security boundaries that callers must not override.
34
+ const callHeaders = callConfig['headers'] ?? {};
35
+ const authHeaders = this.buildAuthHeaders(this.config.auth);
36
+ const baseHeaders = {
37
+ ...(this.config.headers ?? {}),
38
+ ...callHeaders,
39
+ ...authHeaders,
40
+ };
41
+ const url = method === 'GET'
42
+ ? `${this.config.base_url}/${operation}?${new URLSearchParams(params).toString()}`
43
+ : `${this.config.base_url}/${operation}`;
44
+ const fetchOptions = method === 'GET'
45
+ ? { method, headers: baseHeaders, signal: signal ?? null }
46
+ : {
47
+ method,
48
+ headers: { ...baseHeaders, 'Content-Type': 'application/json' },
49
+ body: JSON.stringify(params),
50
+ signal: signal ?? null,
51
+ };
52
+ let response;
53
+ try {
54
+ response = await fetch(url, fetchOptions);
55
+ }
56
+ catch (err) {
57
+ // AbortError means the engine cancelled this request (e.g. step timeout).
58
+ // Do not categorize as a network failure — the engine already recorded the reason.
59
+ if (err instanceof Error && err.name === 'AbortError') {
60
+ throw new WorkflowError(`Adapter request aborted`, {
61
+ code: 'STEP_ABORTED',
62
+ category: 'ENGINE',
63
+ agentAction: 'report_to_user',
64
+ retryable: false,
65
+ });
66
+ }
67
+ const message = err instanceof Error ? err.message : String(err);
68
+ throw new WorkflowError(message, {
69
+ code: 'NETWORK_UNREACHABLE',
70
+ category: 'NETWORK',
71
+ agentAction: 'wait_for_human',
72
+ retryable: true,
73
+ });
74
+ }
75
+ if (!response.ok) {
76
+ const status = response.status;
77
+ throw new WorkflowError(`HTTP ${status}: ${response.statusText}`, {
78
+ code: status >= 500 ? 'SERVICE_HTTP_5XX' : 'SERVICE_HTTP_4XX',
79
+ category: 'SERVICE',
80
+ agentAction: status >= 500 ? 'wait_for_human' : 'report_to_user',
81
+ retryable: status >= 500,
82
+ });
83
+ }
84
+ const data = await response.json();
85
+ return { status: response.status, data };
86
+ }
87
+ fetch(operation, params, config, signal) {
88
+ return this.request('GET', operation, params, config, signal);
89
+ }
90
+ create(operation, params, config, signal) {
91
+ return this.request('POST', operation, params, config, signal);
92
+ }
93
+ update(operation, params, config, signal) {
94
+ return this.request('PATCH', operation, params, config, signal);
95
+ }
96
+ }
97
+ //# sourceMappingURL=http-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-adapter.js","sourceRoot":"","sources":["../../src/adapters/http-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { ServiceAdapter, ServiceResponse } from '../extensions/service-adapter.js';
2
+ /**
3
+ * MockAdapter returns pre-configured responses for named operations.
4
+ * All three methods (fetch, create, update) look up the same responses map.
5
+ * If an operation is not found, throws WorkflowError(ENGINE_ADAPTER_FAILED).
6
+ */
7
+ export declare class MockAdapter implements ServiceAdapter {
8
+ readonly id: string;
9
+ private readonly responses;
10
+ constructor(id: string, responses: Record<string, ServiceResponse>);
11
+ private resolve;
12
+ fetch(operation: string, _params: Record<string, unknown>, _config: Record<string, unknown>, signal?: AbortSignal): Promise<ServiceResponse>;
13
+ create(operation: string, _params: Record<string, unknown>, _config: Record<string, unknown>, signal?: AbortSignal): Promise<ServiceResponse>;
14
+ update(operation: string, _params: Record<string, unknown>, _config: Record<string, unknown>, signal?: AbortSignal): Promise<ServiceResponse>;
15
+ }
16
+ //# sourceMappingURL=mock-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/mock-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAExF;;;;GAIG;AACH,qBAAa,WAAY,YAAW,cAAc;aAE9B,EAAE,EAAE,MAAM;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS;gBADV,EAAE,EAAE,MAAM,EACT,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;IAG7D,OAAO,CAAC,OAAO;IAaT,KAAK,CACT,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,eAAe,CAAC;IAYrB,MAAM,CACV,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,eAAe,CAAC;IAYrB,MAAM,CACV,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,eAAe,CAAC;CAW5B"}
@@ -0,0 +1,61 @@
1
+ // MockAdapter — returns pre-configured responses for named operations.
2
+ import { WorkflowError } from '../types/workflow-error.js';
3
+ /**
4
+ * MockAdapter returns pre-configured responses for named operations.
5
+ * All three methods (fetch, create, update) look up the same responses map.
6
+ * If an operation is not found, throws WorkflowError(ENGINE_ADAPTER_FAILED).
7
+ */
8
+ export class MockAdapter {
9
+ id;
10
+ responses;
11
+ constructor(id, responses) {
12
+ this.id = id;
13
+ this.responses = responses;
14
+ }
15
+ resolve(operation) {
16
+ const response = this.responses[operation];
17
+ if (response === undefined) {
18
+ throw new WorkflowError(`MockAdapter: unknown operation: ${operation}`, {
19
+ code: 'ENGINE_ADAPTER_FAILED',
20
+ category: 'ENGINE',
21
+ agentAction: 'stop',
22
+ retryable: false,
23
+ });
24
+ }
25
+ return response;
26
+ }
27
+ async fetch(operation, _params, _config, signal) {
28
+ if (signal?.aborted === true) {
29
+ throw new WorkflowError('MockAdapter: request aborted', {
30
+ code: 'STEP_ABORTED',
31
+ category: 'ENGINE',
32
+ agentAction: 'report_to_user',
33
+ retryable: false,
34
+ });
35
+ }
36
+ return this.resolve(operation);
37
+ }
38
+ async create(operation, _params, _config, signal) {
39
+ if (signal?.aborted === true) {
40
+ throw new WorkflowError('MockAdapter: request aborted', {
41
+ code: 'STEP_ABORTED',
42
+ category: 'ENGINE',
43
+ agentAction: 'report_to_user',
44
+ retryable: false,
45
+ });
46
+ }
47
+ return this.resolve(operation);
48
+ }
49
+ async update(operation, _params, _config, signal) {
50
+ if (signal?.aborted === true) {
51
+ throw new WorkflowError('MockAdapter: request aborted', {
52
+ code: 'STEP_ABORTED',
53
+ category: 'ENGINE',
54
+ agentAction: 'report_to_user',
55
+ retryable: false,
56
+ });
57
+ }
58
+ return this.resolve(operation);
59
+ }
60
+ }
61
+ //# sourceMappingURL=mock-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-adapter.js","sourceRoot":"","sources":["../../src/adapters/mock-adapter.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAG3D;;;;GAIG;AACH,MAAM,OAAO,WAAW;IAEJ;IACC;IAFnB,YACkB,EAAU,EACT,SAA0C;QAD3C,OAAE,GAAF,EAAE,CAAQ;QACT,cAAS,GAAT,SAAS,CAAiC;IAC1D,CAAC;IAEI,OAAO,CAAC,SAAiB;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAI,aAAa,CAAC,mCAAmC,SAAS,EAAE,EAAE;gBACtE,IAAI,EAAE,uBAAuB;gBAC7B,QAAQ,EAAE,QAAQ;gBAClB,WAAW,EAAE,MAAM;gBACnB,SAAS,EAAE,KAAK;aACjB,CAAC,CAAC;QACL,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,KAAK,CACT,SAAiB,EACjB,OAAgC,EAChC,OAAgC,EAChC,MAAoB;QAEpB,IAAI,MAAM,EAAE,OAAO,KAAK,IAAI,EAAE,CAAC;YAC7B,MAAM,IAAI,aAAa,CAAC,8BAA8B,EAAE;gBACtD,IAAI,EAAE,cAAc;gBACpB,QAAQ,EAAE,QAAQ;gBAClB,WAAW,EAAE,gBAAgB;gBAC7B,SAAS,EAAE,KAAK;aACjB,CAAC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,MAAM,CACV,SAAiB,EACjB,OAAgC,EAChC,OAAgC,EAChC,MAAoB;QAEpB,IAAI,MAAM,EAAE,OAAO,KAAK,IAAI,EAAE,CAAC;YAC7B,MAAM,IAAI,aAAa,CAAC,8BAA8B,EAAE;gBACtD,IAAI,EAAE,cAAc;gBACpB,QAAQ,EAAE,QAAQ;gBAClB,WAAW,EAAE,gBAAgB;gBAC7B,SAAS,EAAE,KAAK;aACjB,CAAC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,MAAM,CACV,SAAiB,EACjB,OAAgC,EAChC,OAAgC,EAChC,MAAoB;QAEpB,IAAI,MAAM,EAAE,OAAO,KAAK,IAAI,EAAE,CAAC;YAC7B,MAAM,IAAI,aAAa,CAAC,8BAA8B,EAAE;gBACtD,IAAI,EAAE,cAAc;gBACpB,QAAQ,EAAE,QAAQ;gBAClB,WAAW,EAAE,gBAAgB;gBAC7B,SAAS,EAAE,KAAK;aACjB,CAAC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;CACF"}
@@ -0,0 +1,54 @@
1
+ import type { ServiceAdapter, ServiceResponse } from '../extensions/service-adapter.js';
2
+ /**
3
+ * Configuration for NotionAdapter.
4
+ */
5
+ export interface NotionAdapterConfig {
6
+ /**
7
+ * Notion integration token. Must be a non-empty string.
8
+ * Obtain from https://www.notion.so/my-integrations
9
+ */
10
+ api_key: string;
11
+ /**
12
+ * Override base URL for tests (replaces https://api.notion.com).
13
+ * Trailing slash is stripped.
14
+ */
15
+ base_url?: string;
16
+ }
17
+ /**
18
+ * NotionAdapter wraps the Notion REST API.
19
+ *
20
+ * Supported operations:
21
+ * fetch('get_page', { page_id, filter_properties? }) — GET /v1/pages/{page_id}
22
+ * fetch('list_block_children', { block_id, start_cursor?, page_size? }) — GET /v1/blocks/{block_id}/children
23
+ * fetch('query_data_source', { data_source_id, ...opts }) — POST /v1/data_sources/{data_source_id}/query
24
+ * fetch('search', { query?, filter?, sort?, start_cursor?, page_size? }) — POST /v1/search
25
+ * create('create_page', { parent, properties?, children?, icon?, cover? }) — POST /v1/pages
26
+ * create('append_block_children', { block_id, children, position? }) — PATCH /v1/blocks/{block_id}/children
27
+ * update('update_page', { page_id, properties?, icon?, cover?, ... }) — PATCH /v1/pages/{page_id}
28
+ * delete('delete_block', { block_id }) — DELETE /v1/blocks/{block_id}
29
+ */
30
+ export declare class NotionAdapter implements ServiceAdapter {
31
+ readonly id: string;
32
+ private readonly apiKey;
33
+ private readonly baseUrl;
34
+ constructor(id: string, config: NotionAdapterConfig);
35
+ private checkAborted;
36
+ private buildHeaders;
37
+ private buildUrl;
38
+ /**
39
+ * @param networkRetryable — set to false for non-idempotent write operations
40
+ * (create_page, append_block_children) where retrying a failed request may
41
+ * create duplicate resources.
42
+ */
43
+ private executeRequest;
44
+ private throwHttpError;
45
+ fetch(operation: string, params: Record<string, unknown>, _config: Record<string, unknown>, signal?: AbortSignal): Promise<ServiceResponse>;
46
+ /**
47
+ * NOTE: retryable is false for network errors — retrying a failed create or append
48
+ * risks creating duplicate content if the server processed the request before the network dropped.
49
+ */
50
+ create(operation: string, params: Record<string, unknown>, _config: Record<string, unknown>, signal?: AbortSignal): Promise<ServiceResponse>;
51
+ update(operation: string, params: Record<string, unknown>, _config: Record<string, unknown>, signal?: AbortSignal): Promise<ServiceResponse>;
52
+ delete(operation: string, params: Record<string, unknown>, _config: Record<string, unknown>, signal?: AbortSignal): Promise<ServiceResponse>;
53
+ }
54
+ //# sourceMappingURL=notion-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notion-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/notion-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAMxF;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,aAAc,YAAW,cAAc;IAClD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB;IASnD,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,QAAQ;IAIhB;;;;OAIG;YACW,cAAc;YA0Cd,cAAc;IAyHtB,KAAK,CACT,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,eAAe,CAAC;IAsP3B;;;OAGG;IACG,MAAM,CACV,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,eAAe,CAAC;IAiQrB,MAAM,CACV,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,eAAe,CAAC;IAsErB,MAAM,CACV,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,eAAe,CAAC;CAkD5B"}