@amtp/protocol 1.0.1

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 (53) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +386 -0
  3. package/USAGE_GUIDE.md +722 -0
  4. package/bin/amtp.ts +387 -0
  5. package/dist/client/amtp-client.d.ts +164 -0
  6. package/dist/client/amtp-client.js +460 -0
  7. package/dist/client/amtp-client.js.map +1 -0
  8. package/dist/client/examples/basic-client.d.ts +6 -0
  9. package/dist/client/examples/basic-client.js +35 -0
  10. package/dist/client/examples/basic-client.js.map +1 -0
  11. package/dist/crawler/amtp-crawler.d.ts +125 -0
  12. package/dist/crawler/amtp-crawler.js +359 -0
  13. package/dist/crawler/amtp-crawler.js.map +1 -0
  14. package/dist/crawler/examples/basic-crawler.d.ts +6 -0
  15. package/dist/crawler/examples/basic-crawler.js +28 -0
  16. package/dist/crawler/examples/basic-crawler.js.map +1 -0
  17. package/dist/index.d.ts +15 -0
  18. package/dist/index.js +70 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/server/adapters/fastify-adapter.d.ts +86 -0
  21. package/dist/server/adapters/fastify-adapter.js +169 -0
  22. package/dist/server/adapters/fastify-adapter.js.map +1 -0
  23. package/dist/server/amtp-ql-executor.d.ts +24 -0
  24. package/dist/server/amtp-ql-executor.js +198 -0
  25. package/dist/server/amtp-ql-executor.js.map +1 -0
  26. package/dist/server/amtp-ql-parser.d.ts +30 -0
  27. package/dist/server/amtp-ql-parser.js +212 -0
  28. package/dist/server/amtp-ql-parser.js.map +1 -0
  29. package/dist/server/amtp-server.d.ts +183 -0
  30. package/dist/server/amtp-server.js +650 -0
  31. package/dist/server/amtp-server.js.map +1 -0
  32. package/dist/server/examples/basic-server.d.ts +6 -0
  33. package/dist/server/examples/basic-server.js +215 -0
  34. package/dist/server/examples/basic-server.js.map +1 -0
  35. package/dist/server/examples/saas-dashboard-server.d.ts +44 -0
  36. package/dist/server/examples/saas-dashboard-server.js +387 -0
  37. package/dist/server/examples/saas-dashboard-server.js.map +1 -0
  38. package/dist/server/markdown-parser.d.ts +31 -0
  39. package/dist/server/markdown-parser.js +463 -0
  40. package/dist/server/markdown-parser.js.map +1 -0
  41. package/dist/server/notifications.d.ts +40 -0
  42. package/dist/server/notifications.js +134 -0
  43. package/dist/server/notifications.js.map +1 -0
  44. package/dist/server/permissions.d.ts +40 -0
  45. package/dist/server/permissions.js +156 -0
  46. package/dist/server/permissions.js.map +1 -0
  47. package/dist/server/security.d.ts +127 -0
  48. package/dist/server/security.js +368 -0
  49. package/dist/server/security.js.map +1 -0
  50. package/dist/types/amtp.types.d.ts +720 -0
  51. package/dist/types/amtp.types.js +224 -0
  52. package/dist/types/amtp.types.js.map +1 -0
  53. package/package.json +89 -0
@@ -0,0 +1,460 @@
1
+ "use strict";
2
+ /**
3
+ * AMTP Agent Client SDK
4
+ * TypeScript SDK for AI agents to interact with AMTP servers
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.AutonomousAgent = exports.AMTPMarkdownParser = exports.AMTPClient = void 0;
11
+ const crypto_1 = __importDefault(require("crypto"));
12
+ const amtp_types_1 = require("../types/amtp.types");
13
+ /**
14
+ * AMTP Agent Client
15
+ * Main client for agents to interact with AMTP servers
16
+ */
17
+ class AMTPClient {
18
+ constructor(config) {
19
+ this.baseUrl = config.baseUrl;
20
+ this.sessionId = config.sessionId;
21
+ this.timeout = config.timeout || 30000;
22
+ this.maxRetries = config.maxRetries || 3;
23
+ this.capabilities = config.capabilities || [
24
+ "actions",
25
+ "streaming",
26
+ "forms",
27
+ ];
28
+ }
29
+ /**
30
+ * Set session ID
31
+ */
32
+ setSessionId(sessionId) {
33
+ this.sessionId = sessionId;
34
+ }
35
+ /**
36
+ * Get session ID
37
+ */
38
+ getSessionId() {
39
+ return this.sessionId;
40
+ }
41
+ /**
42
+ * Fetch a page (supports cursor-based pagination)
43
+ */
44
+ async getPage(path, options) {
45
+ let url = `${this.baseUrl}${path}`;
46
+ if (options?.cursor) {
47
+ const separator = path.includes('?') ? '&' : '?';
48
+ url += `${separator}cursor=${encodeURIComponent(options.cursor)}`;
49
+ }
50
+ const response = await this.fetchWithRetry(url, {
51
+ method: "GET",
52
+ headers: this.buildHeaders(),
53
+ });
54
+ if (response.status !== amtp_types_1.StatusCode.OK) {
55
+ throw new Error(`Failed to fetch page: ${response.status} ${response.statusText}`);
56
+ }
57
+ const markdown = await response.text();
58
+ const parser = new AMTPMarkdownParser();
59
+ return parser.parse(markdown, path);
60
+ }
61
+ /**
62
+ * Convenience method: fetch the next page using the pagination info from the current document.
63
+ * Returns null if there is no next page/cursor.
64
+ */
65
+ async getNextPage(currentDoc) {
66
+ const pagination = currentDoc.pagination;
67
+ if (!pagination)
68
+ return null;
69
+ const nextCursor = pagination.nextCursor || pagination.pageInfo?.endCursor;
70
+ if (!nextCursor)
71
+ return null;
72
+ // Try to extract base path from the document
73
+ const basePath = currentDoc.path || '/';
74
+ return this.getPage(basePath, { cursor: nextCursor });
75
+ }
76
+ /**
77
+ * Extract all media nodes (images, video, audio) from a document.
78
+ * These now include rich `description` from amtp-meta blocks for agents.
79
+ */
80
+ getMedia(doc) {
81
+ return doc.nodes.filter((n) => n.type === "image" || n.type === "video" || n.type === "audio");
82
+ }
83
+ /**
84
+ * Execute an action
85
+ */
86
+ async executeAction(action, parameters) {
87
+ const url = `${this.baseUrl}/api/amtp/action`;
88
+ const request = {
89
+ action,
90
+ parameters,
91
+ sessionId: this.sessionId || "",
92
+ requestId: this.generateRequestId(),
93
+ };
94
+ const response = await this.fetchWithRetry(url, {
95
+ method: "POST",
96
+ headers: this.buildHeaders("application/json"),
97
+ body: JSON.stringify(request),
98
+ });
99
+ return response.json();
100
+ }
101
+ /**
102
+ * Execute multiple actions in a single batch request (v1.1).
103
+ * See AMTPBatchRequest for options (atomic, continueOnError, etc.).
104
+ */
105
+ async executeBatch(actions, options) {
106
+ const url = `${this.baseUrl}/api/amtp/batch`;
107
+ const items = actions.map((a, index) => ({
108
+ requestId: `batch_${this.generateRequestId()}_${index}`,
109
+ action: a.action,
110
+ parameters: a.parameters,
111
+ }));
112
+ const request = {
113
+ actions: items,
114
+ options,
115
+ sessionId: this.sessionId,
116
+ metadata: {},
117
+ };
118
+ const response = await this.fetchWithRetry(url, {
119
+ method: "POST",
120
+ headers: this.buildHeaders("application/json"),
121
+ body: JSON.stringify(request),
122
+ });
123
+ if (response.status >= 400) {
124
+ throw new Error(`Batch request failed: ${response.status}`);
125
+ }
126
+ return response.json();
127
+ }
128
+ /**
129
+ * Execute an AMTP-QL query (v2.0) against the current document context.
130
+ * Returns the projected result (much smaller than full document).
131
+ */
132
+ async query(rawQuery, variables) {
133
+ const url = `${this.baseUrl}/api/amtp/query`;
134
+ const request = {
135
+ query: rawQuery,
136
+ variables,
137
+ };
138
+ const response = await this.fetchWithRetry(url, {
139
+ method: "POST",
140
+ headers: this.buildHeaders("application/json"),
141
+ body: JSON.stringify(request),
142
+ });
143
+ if (response.status >= 400) {
144
+ const err = await response.json().catch(() => ({ error: { message: "" } }));
145
+ throw new Error(`AMTP-QL query failed: ${response.status} ${err?.error?.message || ""}`);
146
+ }
147
+ const json = await response.json();
148
+ if (json.errors?.length) {
149
+ throw new Error(`AMTP-QL errors: ${json.errors.map(e => e.message).join("; ")}`);
150
+ }
151
+ return json.data || {};
152
+ }
153
+ /**
154
+ * Register a webhook for push notifications (v2.0)
155
+ */
156
+ async registerWebhook(payload) {
157
+ const res = await this.fetchWithRetry(`${this.baseUrl}/api/webhooks`, {
158
+ method: "POST",
159
+ headers: this.buildHeaders("application/json"),
160
+ body: JSON.stringify(payload),
161
+ });
162
+ return res.json();
163
+ }
164
+ /**
165
+ * List registered webhooks
166
+ */
167
+ async listWebhooks() {
168
+ const res = await this.fetchWithRetry(`${this.baseUrl}/api/webhooks`, {
169
+ headers: this.buildHeaders(),
170
+ });
171
+ return res.json();
172
+ }
173
+ /**
174
+ * Submit a form
175
+ */
176
+ async submitForm(form, values) {
177
+ const url = `${this.baseUrl}${form.endpoint}`;
178
+ const submission = {
179
+ formId: form.id,
180
+ values,
181
+ sessionId: this.sessionId,
182
+ requestId: this.generateRequestId(),
183
+ };
184
+ const response = await this.fetchWithRetry(url, {
185
+ method: form.method,
186
+ headers: this.buildHeaders("application/json"),
187
+ body: JSON.stringify(submission),
188
+ });
189
+ return response.json();
190
+ }
191
+ /**
192
+ * Navigate to a URL
193
+ */
194
+ async navigate(path) {
195
+ return this.getPage(path);
196
+ }
197
+ /**
198
+ * Click a link
199
+ */
200
+ async clickLink(url) {
201
+ return this.getPage(url);
202
+ }
203
+ /**
204
+ * Login
205
+ */
206
+ async login(username, password) {
207
+ const url = `${this.baseUrl}/api/amtp/login`;
208
+ const response = await this.fetchWithRetry(url, {
209
+ method: "POST",
210
+ headers: this.buildHeaders("application/json"),
211
+ body: JSON.stringify({ username, password }),
212
+ });
213
+ const data = (await response.json());
214
+ this.sessionId = data.sessionId;
215
+ return data;
216
+ }
217
+ /**
218
+ * Logout
219
+ */
220
+ async logout() {
221
+ const url = `${this.baseUrl}/api/amtp/logout`;
222
+ await this.fetchWithRetry(url, {
223
+ method: "POST",
224
+ headers: this.buildHeaders(),
225
+ });
226
+ this.sessionId = undefined;
227
+ }
228
+ /**
229
+ * Stream updates from server
230
+ */
231
+ streamUpdates(path, callback) {
232
+ const url = `${this.baseUrl}${path}?sessionId=${this.sessionId}`;
233
+ const eventSource = new EventSource(url);
234
+ eventSource.onmessage = (event) => {
235
+ const update = JSON.parse(event.data);
236
+ callback(update);
237
+ };
238
+ return eventSource;
239
+ }
240
+ /**
241
+ * Get available actions on a page
242
+ */
243
+ async getActions(path) {
244
+ const doc = await this.getPage(path);
245
+ return doc.actions;
246
+ }
247
+ /**
248
+ * Get available forms on a page
249
+ */
250
+ async getForms(path) {
251
+ const doc = await this.getPage(path);
252
+ return doc.forms;
253
+ }
254
+ /**
255
+ * Search page content
256
+ */
257
+ async search(query, limit) {
258
+ const path = `/search?q=${encodeURIComponent(query)}` +
259
+ (limit ? `&limit=${limit}` : "");
260
+ return this.getPage(path);
261
+ }
262
+ /**
263
+ * Build request headers
264
+ */
265
+ buildHeaders(contentType) {
266
+ const headers = {
267
+ Accept: "text/amtp+markdown",
268
+ "X-AMTP-Capabilities": this.capabilities.join(","),
269
+ "User-Agent": "AMTP-Agent/1.0",
270
+ };
271
+ if (contentType) {
272
+ headers["Content-Type"] = contentType;
273
+ }
274
+ if (this.sessionId) {
275
+ headers["X-Session-ID"] = this.sessionId;
276
+ }
277
+ return headers;
278
+ }
279
+ /**
280
+ * Fetch with retry logic
281
+ */
282
+ async fetchWithRetry(url, options, attempt = 1) {
283
+ try {
284
+ const controller = new AbortController();
285
+ const timeout = setTimeout(() => controller.abort(), this.timeout);
286
+ const response = await fetch(url, {
287
+ ...options,
288
+ signal: controller.signal,
289
+ });
290
+ clearTimeout(timeout);
291
+ return response;
292
+ }
293
+ catch (error) {
294
+ if (attempt < this.maxRetries) {
295
+ const backoffMs = Math.pow(2, attempt) * 1000;
296
+ await new Promise((resolve) => setTimeout(resolve, backoffMs));
297
+ return this.fetchWithRetry(url, options, attempt + 1);
298
+ }
299
+ throw error;
300
+ }
301
+ }
302
+ /**
303
+ * Generate unique request ID
304
+ */
305
+ generateRequestId() {
306
+ return `req_${Date.now()}_${crypto_1.default.randomBytes(4).toString("hex")}`;
307
+ }
308
+ }
309
+ exports.AMTPClient = AMTPClient;
310
+ /**
311
+ * Simple Markdown Parser for Client
312
+ */
313
+ class AMTPMarkdownParser {
314
+ parse(markdown, path) {
315
+ // Simplified parser for client-side use
316
+ const lines = markdown.split("\n");
317
+ const titleMatch = lines[0]?.match(/^# (.+)$/);
318
+ const title = titleMatch?.[1] || "Untitled";
319
+ return {
320
+ type: "document",
321
+ version: "1.0",
322
+ title,
323
+ path,
324
+ nodes: [],
325
+ actions: this.extractActions(markdown),
326
+ forms: this.extractForms(markdown),
327
+ links: this.extractLinks(markdown),
328
+ metadata: {},
329
+ };
330
+ }
331
+ extractActions(markdown) {
332
+ const actions = [];
333
+ const actionRegex = /\[([A-Z_0-9]+)\]/g;
334
+ let match;
335
+ while ((match = actionRegex.exec(markdown)) !== null) {
336
+ const name = match[1];
337
+ actions.push({
338
+ id: name.toLowerCase(),
339
+ label: name,
340
+ method: amtp_types_1.HTTPMethod.POST,
341
+ endpoint: `/api/actions/${name.toLowerCase()}`,
342
+ });
343
+ }
344
+ return [...new Map(actions.map((a) => [a.id, a])).values()];
345
+ }
346
+ extractForms(markdown) {
347
+ const forms = [];
348
+ const formRegex = /ACTION:\s*(\w+)[\s\S]*?METHOD:\s*(\w+)[\s\S]*?ENDPOINT:\s*(\S+)/g;
349
+ let match;
350
+ while ((match = formRegex.exec(markdown)) !== null) {
351
+ const [, name, method, endpoint] = match;
352
+ forms.push({
353
+ id: name,
354
+ action: name,
355
+ method: method.toUpperCase(),
356
+ endpoint,
357
+ fields: [],
358
+ });
359
+ }
360
+ return forms;
361
+ }
362
+ extractLinks(markdown) {
363
+ const links = [];
364
+ const linkRegex = /\[([^\]]+)\]\(([^)]+)\)/g;
365
+ let match;
366
+ while ((match = linkRegex.exec(markdown)) !== null) {
367
+ const [, text, url] = match;
368
+ links.push({
369
+ text,
370
+ url,
371
+ });
372
+ }
373
+ return links;
374
+ }
375
+ }
376
+ exports.AMTPMarkdownParser = AMTPMarkdownParser;
377
+ /**
378
+ * Autonomous Agent Workflow
379
+ * Example of building autonomous workflows
380
+ */
381
+ class AutonomousAgent {
382
+ constructor(config) {
383
+ this.client = new AMTPClient(config);
384
+ }
385
+ /**
386
+ * Example: Autonomous shopping workflow
387
+ */
388
+ async autonomousShop(productQuery, maxPrice) {
389
+ console.log(`🤖 Starting autonomous shopping for: ${productQuery} (max: $${maxPrice})`);
390
+ try {
391
+ // Step 1: Search for products
392
+ console.log("📍 Step 1: Searching for products...");
393
+ const results = await this.client.search(productQuery, 10);
394
+ // Step 2: Find product within budget (leverage description for better matching in v1.1+)
395
+ const targetProduct = results.actions.find((a) => a.label?.toLowerCase().includes(productQuery.toLowerCase()) ||
396
+ a.description?.toLowerCase().includes(productQuery.toLowerCase()));
397
+ if (!targetProduct) {
398
+ throw new Error("Product not found");
399
+ }
400
+ // Step 3: View product
401
+ console.log(`📍 Step 2: Viewing product: ${targetProduct.label} — ${targetProduct.description || ""}`);
402
+ await this.client.navigate(targetProduct.endpoint || "/");
403
+ // Step 3: Add to cart
404
+ console.log("📍 Step 3: Adding to cart...");
405
+ await this.client.executeAction("add_to_cart", {
406
+ productId: targetProduct.id,
407
+ quantity: 1,
408
+ });
409
+ // Step 4: Navigate to checkout
410
+ console.log("📍 Step 4: Proceeding to checkout...");
411
+ await this.client.navigate("/cart");
412
+ // Step 5: Get checkout form
413
+ const forms = await this.client.getForms("/checkout");
414
+ console.log(`📍 Step 5: Found ${forms.length} forms`);
415
+ console.log("✅ Workflow completed successfully!");
416
+ return { success: true, product: targetProduct };
417
+ }
418
+ catch (error) {
419
+ console.error("❌ Workflow failed:", error);
420
+ return { success: false, error };
421
+ }
422
+ }
423
+ /**
424
+ * Example: Multi-step authenticated workflow
425
+ */
426
+ async authenticatedWorkflow(username, password) {
427
+ try {
428
+ // Login
429
+ console.log("🔐 Logging in...");
430
+ const session = await this.client.login(username, password);
431
+ console.log(`✅ Logged in as ${session.userId}`);
432
+ // Access dashboard
433
+ console.log("📊 Loading dashboard...");
434
+ await this.client.navigate("/dashboard");
435
+ // Monitor updates
436
+ console.log("🔔 Listening for updates...");
437
+ const eventSource = this.client.streamUpdates("/api/stream/orders", (update) => {
438
+ console.log("📬 Update:", update);
439
+ });
440
+ // Simulate work
441
+ await new Promise((resolve) => setTimeout(resolve, 5000));
442
+ // Cleanup
443
+ eventSource.close();
444
+ await this.client.logout();
445
+ console.log("✅ Logged out");
446
+ return { success: true };
447
+ }
448
+ catch (error) {
449
+ console.error("❌ Authenticated workflow failed:", error);
450
+ return { success: false, error };
451
+ }
452
+ }
453
+ }
454
+ exports.AutonomousAgent = AutonomousAgent;
455
+ exports.default = {
456
+ AMTPClient,
457
+ AMTPMarkdownParser,
458
+ AutonomousAgent,
459
+ };
460
+ //# sourceMappingURL=amtp-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"amtp-client.js","sourceRoot":"","sources":["../../src/client/amtp-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Basic AMTP Client / Agent Example
3
+ *
4
+ * Run with: npm run client
5
+ */
6
+ export {};
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ /**
3
+ * Basic AMTP Client / Agent Example
4
+ *
5
+ * Run with: npm run client
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ const amtp_client_js_1 = require("../amtp-client.js");
9
+ async function main() {
10
+ const config = {
11
+ baseUrl: process.env.AMTP_BASE_URL || "http://localhost:3000",
12
+ timeout: 10000,
13
+ };
14
+ const client = new amtp_client_js_1.AMTPClient(config);
15
+ console.log("🤖 AMTP Client Demo");
16
+ try {
17
+ // Fetch home page
18
+ const home = await client.getPage("/");
19
+ console.log("Home:", home.title);
20
+ // Fetch a product
21
+ const product = await client.getPage("/products/demo");
22
+ console.log("Product fetched:", product.title);
23
+ // Execute an action (note: demo impl uses /api/amtp/action)
24
+ const buyResult = await client.executeAction("BUY", { productId: "demo", quantity: 1 });
25
+ console.log("Action result:", buyResult.title || "ok");
26
+ // Demo autonomous agent
27
+ const agent = new amtp_client_js_1.AutonomousAgent(config);
28
+ console.log("Autonomous agent instantiated for workflows.");
29
+ }
30
+ catch (err) {
31
+ console.log("Demo note: Start `npm run server` in another shell for live demo. Error:", err.message);
32
+ }
33
+ }
34
+ main().catch(console.error);
35
+ //# sourceMappingURL=basic-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"basic-client.js","sourceRoot":"","sources":["../../../src/client/examples/basic-client.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAEH,sDAAgE;AAEhE,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG;QACb,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,uBAAuB;QAC7D,OAAO,EAAE,KAAK;KACf,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,2BAAU,CAAC,MAAM,CAAC,CAAC;IAEtC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAEnC,IAAI;QACF,kBAAkB;QAClB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAEjC,kBAAkB;QAClB,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAE/C,4DAA4D;QAC5D,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QACxF,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;QAEvD,wBAAwB;QACxB,MAAM,KAAK,GAAG,IAAI,gCAAe,CAAC,MAAM,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;KAE7D;IAAC,OAAO,GAAQ,EAAE;QACjB,OAAO,CAAC,GAAG,CAAC,0EAA0E,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;KACtG;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * AMTP Crawler & Indexer
3
+ * Crawls AMTP-enabled websites and builds searchable index
4
+ */
5
+ import { AMTPDocument, StructuredData, Link } from "../types/amtp.types";
6
+ /**
7
+ * Crawler Configuration
8
+ */
9
+ export interface CrawlerConfig {
10
+ baseUrl: string;
11
+ maxPages?: number;
12
+ maxDepth?: number;
13
+ respectRobotsTxt?: boolean;
14
+ delays?: {
15
+ betweenRequests: number;
16
+ betweenDomains: number;
17
+ };
18
+ userAgent?: string;
19
+ indexCallback?: (doc: AMTPDocument) => Promise<void>;
20
+ }
21
+ /**
22
+ * Crawled Page Index
23
+ */
24
+ export interface CrawledPage {
25
+ url: string;
26
+ title: string;
27
+ content: string;
28
+ structuredData: StructuredData[];
29
+ links: Link[];
30
+ indexedAt: string;
31
+ embeddingVector?: number[];
32
+ }
33
+ /**
34
+ * Crawler Statistics
35
+ */
36
+ export interface CrawlStats {
37
+ totalPages: number;
38
+ totalTime: number;
39
+ avgTimePerPage: number;
40
+ totalLinksDiscovered: number;
41
+ externalLinks: number;
42
+ errors: number;
43
+ startedAt: string;
44
+ completedAt: string;
45
+ }
46
+ /**
47
+ * AMTP Crawler
48
+ */
49
+ export declare class AMTPCrawler {
50
+ private config;
51
+ private client;
52
+ private visited;
53
+ private queue;
54
+ private index;
55
+ private stats;
56
+ private startTime;
57
+ constructor(config: CrawlerConfig);
58
+ /**
59
+ * Start crawling
60
+ */
61
+ crawl(): Promise<CrawledPage[]>;
62
+ /**
63
+ * Crawl a single page
64
+ */
65
+ private crawlPage;
66
+ private disallowRules;
67
+ private crawlDelayMs;
68
+ /**
69
+ * Check robots.txt — parse rules and enforce them during crawl.
70
+ */
71
+ private checkRobotsTxt;
72
+ private isAllowedByRobots;
73
+ /**
74
+ * Search the index
75
+ */
76
+ search(query: string): CrawledPage[];
77
+ /**
78
+ * Get page by URL
79
+ */
80
+ getPage(url: string): CrawledPage | undefined;
81
+ /**
82
+ * Export index as JSON
83
+ */
84
+ exportIndex(): string;
85
+ /**
86
+ * Print crawl statistics
87
+ */
88
+ private printStats;
89
+ /**
90
+ * Delay execution
91
+ */
92
+ private delay;
93
+ }
94
+ /**
95
+ * Search Engine Indexer
96
+ * Example of building a search engine index from AMTP pages
97
+ */
98
+ export declare class SearchIndexer {
99
+ private index;
100
+ /**
101
+ * Add pages to index
102
+ */
103
+ addPages(pages: CrawledPage[]): void;
104
+ /**
105
+ * Search index
106
+ */
107
+ search(query: string, limit?: number): CrawledPage[];
108
+ /**
109
+ * Extract keywords from content
110
+ */
111
+ private extractKeywords;
112
+ /**
113
+ * Check if word is stop word
114
+ */
115
+ private isStopWord;
116
+ /**
117
+ * Export index
118
+ */
119
+ exportIndex(): string;
120
+ }
121
+ declare const _default: {
122
+ AMTPCrawler: typeof AMTPCrawler;
123
+ SearchIndexer: typeof SearchIndexer;
124
+ };
125
+ export default _default;