@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,183 @@
1
+ /**
2
+ * AMTP Express Middleware & Server Core
3
+ * HTTP server integration for AMTP protocol
4
+ */
5
+ import express, { Express, Request, Response, NextFunction } from "express";
6
+ import { AMTPDocument, AMTPResponseHeaders, AMTPPageRequest, Session, MIMEType, AMTPQLQueryRequest, AMTPQLQueryResponse } from "../types/amtp.types";
7
+ /**
8
+ * AMTP Server Configuration
9
+ */
10
+ export interface AMTPServerConfig {
11
+ port: number;
12
+ host: string;
13
+ sessionTimeout: number;
14
+ enableCORS: boolean;
15
+ enableCompression: boolean;
16
+ enableSecurityHeaders?: boolean;
17
+ enableRateLimit?: boolean;
18
+ rateLimit?: {
19
+ windowMs: number;
20
+ maxRequests: number;
21
+ };
22
+ maxRequestBodySize?: number;
23
+ trustedOrigins?: string[];
24
+ csrfProtection?: boolean;
25
+ sessionAbsoluteMaxLifetime?: number;
26
+ cache?: {
27
+ enabled: boolean;
28
+ defaultTTL: number;
29
+ };
30
+ }
31
+ /**
32
+ * AMTP Request Parser
33
+ * Converts Express request to AMTP request
34
+ */
35
+ export declare class AMTPRequestParser {
36
+ parse(req: express.Request): AMTPPageRequest;
37
+ private parseCapabilities;
38
+ }
39
+ /**
40
+ * AMTP Response Builder
41
+ * Constructs HTTP response from AMTP document
42
+ */
43
+ export declare class AMTPResponseBuilder {
44
+ build(doc: AMTPDocument | string, options?: {
45
+ sessionId?: string;
46
+ cacheControl?: string;
47
+ etag?: string;
48
+ }): {
49
+ headers: AMTPResponseHeaders;
50
+ body: string;
51
+ };
52
+ private documentToMarkdown;
53
+ private nodeToMarkdown;
54
+ }
55
+ /**
56
+ * Session Manager
57
+ * Handles user sessions and state
58
+ */
59
+ export declare class SessionManager {
60
+ private sessions;
61
+ private csrfTokens;
62
+ private _absoluteMaxLifetimeMs;
63
+ constructor(absoluteMaxLifetimeMs?: number);
64
+ createSession(userId: string, username: string, ttlMs?: number): Session;
65
+ getSession(sessionId: string): Session | null;
66
+ deleteSession(sessionId: string): void;
67
+ /**
68
+ * Generate and store a CSRF token for the given session.
69
+ */
70
+ generateCsrfToken(sessionId: string): string;
71
+ /**
72
+ * Validate a CSRF token against the stored token for a session.
73
+ */
74
+ validateCsrfToken(sessionId: string, token: string): boolean;
75
+ /**
76
+ * Scan for and evict expired sessions. Call periodically.
77
+ */
78
+ pruneExpired(): void;
79
+ }
80
+ /**
81
+ * Content Negotiation
82
+ * Determines response format based on Accept header with proper q-value parsing
83
+ */
84
+ export declare class ContentNegotiator {
85
+ negotiate(acceptHeader: string, _userAgent?: string): MIMEType;
86
+ }
87
+ /**
88
+ * AMTP Middleware Factory
89
+ * Creates express middleware for AMTP protocol
90
+ */
91
+ export declare class AMTPMiddlewareFactory {
92
+ private parser;
93
+ private builder;
94
+ private _sessions;
95
+ private negotiator;
96
+ /**
97
+ * Access the session manager for admin / pruning operations
98
+ */
99
+ get sessions(): SessionManager;
100
+ constructor();
101
+ /**
102
+ * Main AMTP middleware
103
+ */
104
+ middleware(): (req: Request, res: Response, next: NextFunction) => void;
105
+ /**
106
+ * Response sender middleware
107
+ */
108
+ responseSender(): (req: Request, res: Response, next: NextFunction) => void;
109
+ /**
110
+ * Error handler middleware
111
+ */
112
+ errorHandler(): (err: Error, req: Request, res: Response, _next: NextFunction) => express.Response<any, Record<string, any>> | undefined;
113
+ /**
114
+ * Security headers middleware — adds standard HTTP security headers to all responses
115
+ */
116
+ securityHeaders(): (_req: Request, res: Response, next: NextFunction) => void;
117
+ /**
118
+ * Rate limiting middleware — rejects requests that exceed the configured window/count
119
+ */
120
+ rateLimit(windowMs: number, maxRequests: number): (req: Request, res: Response, next: NextFunction) => express.Response<any, Record<string, any>> | undefined;
121
+ /**
122
+ * CSRF guard — rejects state-changing requests that do not carry a valid CSRF token
123
+ * bound to the active session.
124
+ */
125
+ csrfGuard(): (req: Request, res: Response, next: NextFunction) => void | express.Response<any, Record<string, any>>;
126
+ /**
127
+ * Content negotiation middleware — resolves the AMTP mime type the client prefers
128
+ */
129
+ contentNegotiation(): (req: Request, res: Response, next: NextFunction) => void;
130
+ /**
131
+ * CORS middleware for AMTP
132
+ * `trustedOrigins` is set on the AMTPServer instance and passed here.
133
+ */
134
+ cors(trustedOrigins?: string[]): (req: Request, res: Response, next: NextFunction) => express.Response<any, Record<string, any>> | undefined;
135
+ }
136
+ /**
137
+ * AMTP Server
138
+ * Main server class wrapping Express
139
+ */
140
+ export declare class AMTPServer {
141
+ private app;
142
+ private config;
143
+ private middlewareFactory;
144
+ private router;
145
+ constructor(config?: Partial<AMTPServerConfig>);
146
+ private setupMiddleware;
147
+ /**
148
+ * Register a route handler
149
+ */
150
+ register(method: string, path: string, handler: (req: Request, res: Response) => void): void;
151
+ /**
152
+ * Handle an AMTP-QL query (v2.0).
153
+ * The caller provides a function that returns the AMTPDocument to query.
154
+ * Returns { data } or { errors } per AMTPQLQueryResponse.
155
+ */
156
+ handleAMTPQL(body: AMTPQLQueryRequest, getDocument: () => AMTPDocument | Promise<AMTPDocument>): Promise<AMTPQLQueryResponse>;
157
+ /**
158
+ * Return the fully configured Express app with routes and middleware mounted.
159
+ * Does NOT start the HTTP listener — useful for testing with supertest.
160
+ */
161
+ getConfiguredApp(): Express;
162
+ /**
163
+ * Start server
164
+ */
165
+ start(): Promise<void>;
166
+ /**
167
+ * Get Express app instance
168
+ */
169
+ getApp(): Express;
170
+ /**
171
+ * Get the internal session manager (useful for tests).
172
+ */
173
+ getSessionManager(): SessionManager;
174
+ }
175
+ declare const _default: {
176
+ AMTPServer: typeof AMTPServer;
177
+ AMTPMiddlewareFactory: typeof AMTPMiddlewareFactory;
178
+ SessionManager: typeof SessionManager;
179
+ ContentNegotiator: typeof ContentNegotiator;
180
+ AMTPRequestParser: typeof AMTPRequestParser;
181
+ AMTPResponseBuilder: typeof AMTPResponseBuilder;
182
+ };
183
+ export default _default;