@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.
- package/LICENSE +21 -0
- package/README.md +386 -0
- package/USAGE_GUIDE.md +722 -0
- package/bin/amtp.ts +387 -0
- package/dist/client/amtp-client.d.ts +164 -0
- package/dist/client/amtp-client.js +460 -0
- package/dist/client/amtp-client.js.map +1 -0
- package/dist/client/examples/basic-client.d.ts +6 -0
- package/dist/client/examples/basic-client.js +35 -0
- package/dist/client/examples/basic-client.js.map +1 -0
- package/dist/crawler/amtp-crawler.d.ts +125 -0
- package/dist/crawler/amtp-crawler.js +359 -0
- package/dist/crawler/amtp-crawler.js.map +1 -0
- package/dist/crawler/examples/basic-crawler.d.ts +6 -0
- package/dist/crawler/examples/basic-crawler.js +28 -0
- package/dist/crawler/examples/basic-crawler.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +70 -0
- package/dist/index.js.map +1 -0
- package/dist/server/adapters/fastify-adapter.d.ts +86 -0
- package/dist/server/adapters/fastify-adapter.js +169 -0
- package/dist/server/adapters/fastify-adapter.js.map +1 -0
- package/dist/server/amtp-ql-executor.d.ts +24 -0
- package/dist/server/amtp-ql-executor.js +198 -0
- package/dist/server/amtp-ql-executor.js.map +1 -0
- package/dist/server/amtp-ql-parser.d.ts +30 -0
- package/dist/server/amtp-ql-parser.js +212 -0
- package/dist/server/amtp-ql-parser.js.map +1 -0
- package/dist/server/amtp-server.d.ts +183 -0
- package/dist/server/amtp-server.js +650 -0
- package/dist/server/amtp-server.js.map +1 -0
- package/dist/server/examples/basic-server.d.ts +6 -0
- package/dist/server/examples/basic-server.js +215 -0
- package/dist/server/examples/basic-server.js.map +1 -0
- package/dist/server/examples/saas-dashboard-server.d.ts +44 -0
- package/dist/server/examples/saas-dashboard-server.js +387 -0
- package/dist/server/examples/saas-dashboard-server.js.map +1 -0
- package/dist/server/markdown-parser.d.ts +31 -0
- package/dist/server/markdown-parser.js +463 -0
- package/dist/server/markdown-parser.js.map +1 -0
- package/dist/server/notifications.d.ts +40 -0
- package/dist/server/notifications.js +134 -0
- package/dist/server/notifications.js.map +1 -0
- package/dist/server/permissions.d.ts +40 -0
- package/dist/server/permissions.js +156 -0
- package/dist/server/permissions.js.map +1 -0
- package/dist/server/security.d.ts +127 -0
- package/dist/server/security.js +368 -0
- package/dist/server/security.js.map +1 -0
- package/dist/types/amtp.types.d.ts +720 -0
- package/dist/types/amtp.types.js +224 -0
- package/dist/types/amtp.types.js.map +1 -0
- 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;
|