borgmcp-shared 0.2.2
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/CONTRIBUTING.md +40 -0
- package/LICENSE +201 -0
- package/NOTICE +2 -0
- package/README.md +159 -0
- package/SECURITY.md +25 -0
- package/dist/conformance/adapter.d.ts +112 -0
- package/dist/conformance/adapter.d.ts.map +1 -0
- package/dist/conformance/adapter.js +417 -0
- package/dist/conformance/adapter.js.map +1 -0
- package/dist/conformance/index.d.ts +15 -0
- package/dist/conformance/index.d.ts.map +1 -0
- package/dist/conformance/index.js +49 -0
- package/dist/conformance/index.js.map +1 -0
- package/dist/domain/index.d.ts +5 -0
- package/dist/domain/index.d.ts.map +1 -0
- package/dist/domain/index.js +4 -0
- package/dist/domain/index.js.map +1 -0
- package/dist/drone-address.d.ts +3 -0
- package/dist/drone-address.d.ts.map +1 -0
- package/dist/drone-address.js +7 -0
- package/dist/drone-address.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/log-stream-hwm.d.ts +6 -0
- package/dist/log-stream-hwm.d.ts.map +1 -0
- package/dist/log-stream-hwm.js +12 -0
- package/dist/log-stream-hwm.js.map +1 -0
- package/dist/protocol/contract.d.ts +127 -0
- package/dist/protocol/contract.d.ts.map +1 -0
- package/dist/protocol/contract.js +434 -0
- package/dist/protocol/contract.js.map +1 -0
- package/dist/protocol/coordination.d.ts +38 -0
- package/dist/protocol/coordination.d.ts.map +1 -0
- package/dist/protocol/coordination.js +176 -0
- package/dist/protocol/coordination.js.map +1 -0
- package/dist/protocol/errors.d.ts +33 -0
- package/dist/protocol/errors.d.ts.map +1 -0
- package/dist/protocol/errors.js +26 -0
- package/dist/protocol/errors.js.map +1 -0
- package/dist/protocol/index.d.ts +8 -0
- package/dist/protocol/index.d.ts.map +1 -0
- package/dist/protocol/index.js +7 -0
- package/dist/protocol/index.js.map +1 -0
- package/dist/protocol/sse.d.ts +44 -0
- package/dist/protocol/sse.d.ts.map +1 -0
- package/dist/protocol/sse.js +246 -0
- package/dist/protocol/sse.js.map +1 -0
- package/dist/protocol/types.d.ts +174 -0
- package/dist/protocol/types.d.ts.map +1 -0
- package/dist/protocol/types.js +2 -0
- package/dist/protocol/types.js.map +1 -0
- package/dist/protocol/version.d.ts +11 -0
- package/dist/protocol/version.d.ts.map +1 -0
- package/dist/protocol/version.js +14 -0
- package/dist/protocol/version.js.map +1 -0
- package/dist/role-section.d.ts +24 -0
- package/dist/role-section.d.ts.map +1 -0
- package/dist/role-section.js +114 -0
- package/dist/role-section.js.map +1 -0
- package/dist/templates.d.ts +44 -0
- package/dist/templates.d.ts.map +1 -0
- package/dist/templates.js +771 -0
- package/dist/templates.js.map +1 -0
- package/docs/compatibility.md +38 -0
- package/docs/releasing.md +220 -0
- package/package.json +89 -0
- package/src/conformance/adapter.ts +717 -0
- package/src/conformance/index.ts +68 -0
- package/src/domain/index.ts +9 -0
- package/src/drone-address.ts +25 -0
- package/src/index.ts +4 -0
- package/src/log-stream-hwm.ts +16 -0
- package/src/protocol/contract.ts +608 -0
- package/src/protocol/coordination.ts +249 -0
- package/src/protocol/errors.ts +36 -0
- package/src/protocol/index.ts +7 -0
- package/src/protocol/sse.ts +295 -0
- package/src/protocol/types.ts +201 -0
- package/src/protocol/version.ts +31 -0
- package/src/role-section.ts +270 -0
- package/src/templates.ts +953 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { ErrorCode } from './errors.js';
|
|
2
|
+
import { type ProtocolVersion } from './version.js';
|
|
3
|
+
export declare const SHARED_PACKAGE_NAME: "borgmcp-shared";
|
|
4
|
+
export declare const SHARED_PACKAGE_VERSION: "0.2.2";
|
|
5
|
+
export declare const HEALTH_PATH: "/healthz";
|
|
6
|
+
export declare const PROTOCOL_INFO_PATH: "/api/protocol";
|
|
7
|
+
export declare const ENROLLMENT_EXCHANGE_PATH: "/api/enrollment/exchange";
|
|
8
|
+
export declare const PROTOCOL_HTTP_CONTRACT: {
|
|
9
|
+
readonly health: {
|
|
10
|
+
readonly method: "GET";
|
|
11
|
+
readonly path: "/healthz";
|
|
12
|
+
readonly authenticated: false;
|
|
13
|
+
readonly success_status: 204;
|
|
14
|
+
readonly bodyless: true;
|
|
15
|
+
};
|
|
16
|
+
readonly protocol: {
|
|
17
|
+
readonly method: "GET";
|
|
18
|
+
readonly path: "/api/protocol";
|
|
19
|
+
readonly authenticated: true;
|
|
20
|
+
readonly success_status: 200;
|
|
21
|
+
};
|
|
22
|
+
readonly enrollment: {
|
|
23
|
+
readonly method: "POST";
|
|
24
|
+
readonly path: "/api/enrollment/exchange";
|
|
25
|
+
readonly authenticated: "invitation";
|
|
26
|
+
readonly success_status: 201;
|
|
27
|
+
};
|
|
28
|
+
readonly auth_missing_status: 401;
|
|
29
|
+
readonly auth_invalid_status: 401;
|
|
30
|
+
readonly cursor_expired_status: 410;
|
|
31
|
+
readonly content_too_large_status: 413;
|
|
32
|
+
readonly unsupported_protocol_status: 426;
|
|
33
|
+
readonly unsupported_capability_status: 501;
|
|
34
|
+
readonly redirect_policy: "error";
|
|
35
|
+
};
|
|
36
|
+
export declare const PROTOCOL_LIMIT_CEILINGS: {
|
|
37
|
+
readonly max_request_bytes: number;
|
|
38
|
+
readonly max_log_message_bytes: number;
|
|
39
|
+
readonly max_read_page_size: 500;
|
|
40
|
+
readonly max_replay_page_size: 1000;
|
|
41
|
+
};
|
|
42
|
+
export declare const KNOWN_CAPABILITIES: readonly ["coordination.core", "auth.bearer", "auth.revocation", "scope.cube-isolation", "transport.tls", "authority.no-cloud-fallback", "log.cursor", "stream.sse", "stream.replay", "acks", "claims", "decisions"];
|
|
43
|
+
export type KnownCapability = (typeof KNOWN_CAPABILITIES)[number];
|
|
44
|
+
export type Capability = KnownCapability | (string & {});
|
|
45
|
+
export declare const REQUIRED_SECURITY_CAPABILITIES: readonly ["auth.bearer", "auth.revocation", "scope.cube-isolation", "transport.tls", "authority.no-cloud-fallback"];
|
|
46
|
+
export interface ProtocolLimits {
|
|
47
|
+
max_request_bytes: number;
|
|
48
|
+
max_log_message_bytes: number;
|
|
49
|
+
max_read_page_size: number;
|
|
50
|
+
max_replay_page_size: number;
|
|
51
|
+
}
|
|
52
|
+
export interface ProtocolInfo {
|
|
53
|
+
protocol_version: ProtocolVersion;
|
|
54
|
+
package: {
|
|
55
|
+
name: typeof SHARED_PACKAGE_NAME;
|
|
56
|
+
version: string;
|
|
57
|
+
};
|
|
58
|
+
capabilities: Capability[];
|
|
59
|
+
limits: ProtocolLimits;
|
|
60
|
+
}
|
|
61
|
+
export interface ProtocolEnvelope<T> {
|
|
62
|
+
protocol_version: ProtocolVersion;
|
|
63
|
+
request_id: string;
|
|
64
|
+
payload: T;
|
|
65
|
+
}
|
|
66
|
+
export interface ProtocolErrorEnvelope {
|
|
67
|
+
protocol_version: ProtocolVersion;
|
|
68
|
+
request_id?: string;
|
|
69
|
+
error: {
|
|
70
|
+
code: ErrorCode;
|
|
71
|
+
message: string;
|
|
72
|
+
details?: string;
|
|
73
|
+
retry_after?: number;
|
|
74
|
+
required_capability?: string;
|
|
75
|
+
supported_versions?: readonly string[];
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
export interface EnrollmentExchangeRequest {
|
|
79
|
+
invitation: string;
|
|
80
|
+
client_name?: string;
|
|
81
|
+
}
|
|
82
|
+
export interface EnrollmentExchangeResponse {
|
|
83
|
+
client_id: string;
|
|
84
|
+
credential: string;
|
|
85
|
+
credential_expires_at?: string | null;
|
|
86
|
+
}
|
|
87
|
+
export interface AckLogRequest {
|
|
88
|
+
entry_id: string;
|
|
89
|
+
kind: 'ack' | 'claim';
|
|
90
|
+
}
|
|
91
|
+
export type RemoveDecisionRequest = {
|
|
92
|
+
topic: string;
|
|
93
|
+
} | {
|
|
94
|
+
decision_id: string;
|
|
95
|
+
};
|
|
96
|
+
export interface LogCursor {
|
|
97
|
+
id: string;
|
|
98
|
+
created_at: string;
|
|
99
|
+
}
|
|
100
|
+
export declare class ProtocolContractError extends Error {
|
|
101
|
+
readonly code: ErrorCode;
|
|
102
|
+
readonly path: readonly (string | number)[];
|
|
103
|
+
constructor(message: string, code?: ErrorCode, path?: readonly (string | number)[]);
|
|
104
|
+
}
|
|
105
|
+
export declare function utf8ByteLength(value: string): number;
|
|
106
|
+
export declare function decodeProtocolInfo(value: unknown): ProtocolInfo;
|
|
107
|
+
export declare function negotiateProtocol(value: unknown, requiredCapabilities?: readonly Capability[]): ProtocolInfo;
|
|
108
|
+
export declare function createProtocolEnvelope<T>(requestId: string, payload: T): ProtocolEnvelope<T>;
|
|
109
|
+
export declare function decodeProtocolEnvelope<T>(value: unknown, decodePayload: (payload: unknown) => T): ProtocolEnvelope<T>;
|
|
110
|
+
export declare function decodeProtocolInfoEnvelope(value: unknown): ProtocolEnvelope<ProtocolInfo>;
|
|
111
|
+
export declare function decodeProtocolErrorEnvelope(value: unknown): ProtocolErrorEnvelope;
|
|
112
|
+
export declare function decodeEnrollmentExchangeRequest(value: unknown): EnrollmentExchangeRequest;
|
|
113
|
+
export declare function decodeEnrollmentExchangeRequestEnvelope(value: unknown): ProtocolEnvelope<EnrollmentExchangeRequest>;
|
|
114
|
+
export declare function decodeEnrollmentExchangeResponse(value: unknown): EnrollmentExchangeResponse;
|
|
115
|
+
export declare function decodeEnrollmentExchangeResponseEnvelope(value: unknown): ProtocolEnvelope<EnrollmentExchangeResponse>;
|
|
116
|
+
export declare function decodeAppendLogRequest(value: unknown): import('./types.js').AppendLogRequest;
|
|
117
|
+
export declare function decodeAckLogRequest(value: unknown): AckLogRequest;
|
|
118
|
+
export declare function decodeRecordDecisionRequest(value: unknown): import('./types.js').RecordDecisionRequest;
|
|
119
|
+
export declare function decodeRemoveDecisionRequest(value: unknown): RemoveDecisionRequest;
|
|
120
|
+
export declare function decodeCanonicalTimestamp(value: unknown, path?: readonly (string | number)[]): string;
|
|
121
|
+
export declare function decodeLogCursor(value: unknown, path?: readonly (string | number)[]): LogCursor;
|
|
122
|
+
export declare function decodeUuid(value: unknown, path?: readonly (string | number)[]): string;
|
|
123
|
+
export declare function decodeOpaqueIdentifier(value: unknown, path?: readonly (string | number)[]): string;
|
|
124
|
+
export declare function redactProtocolDiagnostic(value: string): string;
|
|
125
|
+
export declare function compareLogCursor(a: LogCursor, b: LogCursor): -1 | 0 | 1;
|
|
126
|
+
export declare function maxLogCursor(a: LogCursor | null, b: LogCursor | null): LogCursor | null;
|
|
127
|
+
//# sourceMappingURL=contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/protocol/contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,434 @@
|
|
|
1
|
+
import { ErrorCode } from './errors.js';
|
|
2
|
+
import { PROTOCOL_VERSION } from './version.js';
|
|
3
|
+
export const SHARED_PACKAGE_NAME = 'borgmcp-shared';
|
|
4
|
+
export const SHARED_PACKAGE_VERSION = '0.2.2';
|
|
5
|
+
export const HEALTH_PATH = '/healthz';
|
|
6
|
+
export const PROTOCOL_INFO_PATH = '/api/protocol';
|
|
7
|
+
export const ENROLLMENT_EXCHANGE_PATH = '/api/enrollment/exchange';
|
|
8
|
+
export const PROTOCOL_HTTP_CONTRACT = {
|
|
9
|
+
health: { method: 'GET', path: HEALTH_PATH, authenticated: false, success_status: 204, bodyless: true },
|
|
10
|
+
protocol: { method: 'GET', path: PROTOCOL_INFO_PATH, authenticated: true, success_status: 200 },
|
|
11
|
+
enrollment: { method: 'POST', path: ENROLLMENT_EXCHANGE_PATH, authenticated: 'invitation', success_status: 201 },
|
|
12
|
+
auth_missing_status: 401,
|
|
13
|
+
auth_invalid_status: 401,
|
|
14
|
+
cursor_expired_status: 410,
|
|
15
|
+
content_too_large_status: 413,
|
|
16
|
+
unsupported_protocol_status: 426,
|
|
17
|
+
unsupported_capability_status: 501,
|
|
18
|
+
redirect_policy: 'error',
|
|
19
|
+
};
|
|
20
|
+
export const PROTOCOL_LIMIT_CEILINGS = {
|
|
21
|
+
max_request_bytes: 10 * 1024 * 1024,
|
|
22
|
+
max_log_message_bytes: 1024 * 1024,
|
|
23
|
+
max_read_page_size: 500,
|
|
24
|
+
max_replay_page_size: 1000,
|
|
25
|
+
};
|
|
26
|
+
export const KNOWN_CAPABILITIES = [
|
|
27
|
+
'coordination.core',
|
|
28
|
+
'auth.bearer',
|
|
29
|
+
'auth.revocation',
|
|
30
|
+
'scope.cube-isolation',
|
|
31
|
+
'transport.tls',
|
|
32
|
+
'authority.no-cloud-fallback',
|
|
33
|
+
'log.cursor',
|
|
34
|
+
'stream.sse',
|
|
35
|
+
'stream.replay',
|
|
36
|
+
'acks',
|
|
37
|
+
'claims',
|
|
38
|
+
'decisions',
|
|
39
|
+
];
|
|
40
|
+
export const REQUIRED_SECURITY_CAPABILITIES = [
|
|
41
|
+
'auth.bearer',
|
|
42
|
+
'auth.revocation',
|
|
43
|
+
'scope.cube-isolation',
|
|
44
|
+
'transport.tls',
|
|
45
|
+
'authority.no-cloud-fallback',
|
|
46
|
+
];
|
|
47
|
+
export class ProtocolContractError extends Error {
|
|
48
|
+
code;
|
|
49
|
+
path;
|
|
50
|
+
constructor(message, code = ErrorCode.INVALID_INPUT, path = []) {
|
|
51
|
+
super(message);
|
|
52
|
+
this.code = code;
|
|
53
|
+
this.path = path;
|
|
54
|
+
this.name = 'ProtocolContractError';
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function fail(message, path = []) {
|
|
58
|
+
throw new ProtocolContractError(message, ErrorCode.INVALID_INPUT, path);
|
|
59
|
+
}
|
|
60
|
+
function record(value, path = []) {
|
|
61
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
62
|
+
fail('Expected an object.', path);
|
|
63
|
+
}
|
|
64
|
+
return value;
|
|
65
|
+
}
|
|
66
|
+
function exactKeys(value, allowed, required, path = []) {
|
|
67
|
+
for (const key of Object.keys(value)) {
|
|
68
|
+
if (!allowed.includes(key))
|
|
69
|
+
fail(`Unknown field "${key}".`, [...path, key]);
|
|
70
|
+
}
|
|
71
|
+
for (const key of required) {
|
|
72
|
+
if (!Object.prototype.hasOwnProperty.call(value, key)) {
|
|
73
|
+
fail(`Missing field "${key}".`, [...path, key]);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
function boundedString(value, min, max, path) {
|
|
78
|
+
if (typeof value !== 'string')
|
|
79
|
+
fail('Expected a string.', path);
|
|
80
|
+
const bytes = utf8ByteLength(value);
|
|
81
|
+
if (bytes < min || bytes > max) {
|
|
82
|
+
fail(`Expected a string between ${min} and ${max} UTF-8 bytes.`, path);
|
|
83
|
+
}
|
|
84
|
+
return value;
|
|
85
|
+
}
|
|
86
|
+
export function utf8ByteLength(value) {
|
|
87
|
+
let bytes = 0;
|
|
88
|
+
for (let index = 0; index < value.length; index++) {
|
|
89
|
+
const code = value.charCodeAt(index);
|
|
90
|
+
if (code <= 0x7f)
|
|
91
|
+
bytes += 1;
|
|
92
|
+
else if (code <= 0x7ff)
|
|
93
|
+
bytes += 2;
|
|
94
|
+
else if (code >= 0xd800 && code <= 0xdbff && index + 1 < value.length &&
|
|
95
|
+
value.charCodeAt(index + 1) >= 0xdc00 && value.charCodeAt(index + 1) <= 0xdfff) {
|
|
96
|
+
bytes += 4;
|
|
97
|
+
index++;
|
|
98
|
+
}
|
|
99
|
+
else
|
|
100
|
+
bytes += 3;
|
|
101
|
+
}
|
|
102
|
+
return bytes;
|
|
103
|
+
}
|
|
104
|
+
function isSemanticVersion(value) {
|
|
105
|
+
const match = value.match(/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$/);
|
|
106
|
+
if (!match)
|
|
107
|
+
return false;
|
|
108
|
+
const prerelease = match[4];
|
|
109
|
+
return prerelease === undefined || prerelease.split('.').every((identifier) => !/^\d+$/.test(identifier) || identifier === '0' || !identifier.startsWith('0'));
|
|
110
|
+
}
|
|
111
|
+
function boundedPositiveInteger(value, maximum, path) {
|
|
112
|
+
if (!Number.isSafeInteger(value) || value <= 0 || value > maximum) {
|
|
113
|
+
fail(`Expected a positive safe integer no greater than ${maximum}.`, path);
|
|
114
|
+
}
|
|
115
|
+
return value;
|
|
116
|
+
}
|
|
117
|
+
function opaqueIdentifier(value, path) {
|
|
118
|
+
const identifier = boundedString(value, 1, 128, path);
|
|
119
|
+
if (!/^[A-Za-z0-9][A-Za-z0-9._:-]*$/.test(identifier)) {
|
|
120
|
+
fail('Expected a URL-safe opaque identifier.', path);
|
|
121
|
+
}
|
|
122
|
+
return identifier;
|
|
123
|
+
}
|
|
124
|
+
function opaqueToken(value, path) {
|
|
125
|
+
const token = boundedString(value, 43, 1024, path);
|
|
126
|
+
if (!/^[A-Za-z0-9_-]+$/.test(token)) {
|
|
127
|
+
fail('Expected an unpadded base64url token.', path);
|
|
128
|
+
}
|
|
129
|
+
return token;
|
|
130
|
+
}
|
|
131
|
+
function decodeRequestId(value, path) {
|
|
132
|
+
const decoded = boundedString(value, 8, 128, path);
|
|
133
|
+
if (!/^[A-Za-z0-9._-]+$/.test(decoded)) {
|
|
134
|
+
fail('Request id contains unsupported characters.', path);
|
|
135
|
+
}
|
|
136
|
+
return decoded;
|
|
137
|
+
}
|
|
138
|
+
function capabilityName(value, path) {
|
|
139
|
+
const decoded = boundedString(value, 1, 64, path);
|
|
140
|
+
if (!/^[a-z][a-z0-9]*(?:[.-][a-z0-9]+)*$/.test(decoded)) {
|
|
141
|
+
fail('Capability name contains unsupported characters.', path);
|
|
142
|
+
}
|
|
143
|
+
return decoded;
|
|
144
|
+
}
|
|
145
|
+
export function decodeProtocolInfo(value) {
|
|
146
|
+
const input = record(value);
|
|
147
|
+
exactKeys(input, ['protocol_version', 'package', 'capabilities', 'limits'], [
|
|
148
|
+
'protocol_version',
|
|
149
|
+
'package',
|
|
150
|
+
'capabilities',
|
|
151
|
+
'limits',
|
|
152
|
+
]);
|
|
153
|
+
if (input.protocol_version !== PROTOCOL_VERSION) {
|
|
154
|
+
throw new ProtocolContractError(`Unsupported protocol version "${String(input.protocol_version)}".`, ErrorCode.UNSUPPORTED_PROTOCOL_VERSION, ['protocol_version']);
|
|
155
|
+
}
|
|
156
|
+
const packageInfo = record(input.package, ['package']);
|
|
157
|
+
exactKeys(packageInfo, ['name', 'version'], ['name', 'version'], ['package']);
|
|
158
|
+
if (packageInfo.name !== SHARED_PACKAGE_NAME) {
|
|
159
|
+
fail(`Expected package name "${SHARED_PACKAGE_NAME}".`, ['package', 'name']);
|
|
160
|
+
}
|
|
161
|
+
const packageVersion = boundedString(packageInfo.version, 5, 64, ['package', 'version']);
|
|
162
|
+
if (!isSemanticVersion(packageVersion)) {
|
|
163
|
+
fail('Expected a semantic package version.', ['package', 'version']);
|
|
164
|
+
}
|
|
165
|
+
if (!Array.isArray(input.capabilities))
|
|
166
|
+
fail('Expected an array.', ['capabilities']);
|
|
167
|
+
const capabilities = input.capabilities.map((capability, index) => {
|
|
168
|
+
return capabilityName(capability, ['capabilities', index]);
|
|
169
|
+
});
|
|
170
|
+
if (new Set(capabilities).size !== capabilities.length) {
|
|
171
|
+
fail('Capabilities must be unique.', ['capabilities']);
|
|
172
|
+
}
|
|
173
|
+
const limits = record(input.limits, ['limits']);
|
|
174
|
+
exactKeys(limits, [
|
|
175
|
+
'max_request_bytes',
|
|
176
|
+
'max_log_message_bytes',
|
|
177
|
+
'max_read_page_size',
|
|
178
|
+
'max_replay_page_size',
|
|
179
|
+
], [
|
|
180
|
+
'max_request_bytes',
|
|
181
|
+
'max_log_message_bytes',
|
|
182
|
+
'max_read_page_size',
|
|
183
|
+
'max_replay_page_size',
|
|
184
|
+
], ['limits']);
|
|
185
|
+
return {
|
|
186
|
+
protocol_version: PROTOCOL_VERSION,
|
|
187
|
+
package: { name: SHARED_PACKAGE_NAME, version: packageVersion },
|
|
188
|
+
capabilities,
|
|
189
|
+
limits: {
|
|
190
|
+
max_request_bytes: boundedPositiveInteger(limits.max_request_bytes, PROTOCOL_LIMIT_CEILINGS.max_request_bytes, ['limits', 'max_request_bytes']),
|
|
191
|
+
max_log_message_bytes: boundedPositiveInteger(limits.max_log_message_bytes, PROTOCOL_LIMIT_CEILINGS.max_log_message_bytes, ['limits', 'max_log_message_bytes']),
|
|
192
|
+
max_read_page_size: boundedPositiveInteger(limits.max_read_page_size, PROTOCOL_LIMIT_CEILINGS.max_read_page_size, ['limits', 'max_read_page_size']),
|
|
193
|
+
max_replay_page_size: boundedPositiveInteger(limits.max_replay_page_size, PROTOCOL_LIMIT_CEILINGS.max_replay_page_size, ['limits', 'max_replay_page_size']),
|
|
194
|
+
},
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
export function negotiateProtocol(value, requiredCapabilities = []) {
|
|
198
|
+
const info = decodeProtocolInfo(value);
|
|
199
|
+
const required = [...REQUIRED_SECURITY_CAPABILITIES, ...requiredCapabilities];
|
|
200
|
+
for (const capability of new Set(required)) {
|
|
201
|
+
if (!info.capabilities.includes(capability)) {
|
|
202
|
+
throw new ProtocolContractError(`Required capability "${capability}" is unavailable.`, ErrorCode.UNSUPPORTED_CAPABILITY, ['capabilities']);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return info;
|
|
206
|
+
}
|
|
207
|
+
export function createProtocolEnvelope(requestId, payload) {
|
|
208
|
+
return {
|
|
209
|
+
protocol_version: PROTOCOL_VERSION,
|
|
210
|
+
request_id: decodeRequestId(requestId, ['request_id']),
|
|
211
|
+
payload,
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
export function decodeProtocolEnvelope(value, decodePayload) {
|
|
215
|
+
const input = record(value);
|
|
216
|
+
exactKeys(input, ['protocol_version', 'request_id', 'payload'], [
|
|
217
|
+
'protocol_version',
|
|
218
|
+
'request_id',
|
|
219
|
+
'payload',
|
|
220
|
+
]);
|
|
221
|
+
if (input.protocol_version !== PROTOCOL_VERSION) {
|
|
222
|
+
throw new ProtocolContractError(`Unsupported protocol version "${String(input.protocol_version)}".`, ErrorCode.UNSUPPORTED_PROTOCOL_VERSION, ['protocol_version']);
|
|
223
|
+
}
|
|
224
|
+
const decodedRequestId = decodeRequestId(input.request_id, ['request_id']);
|
|
225
|
+
return {
|
|
226
|
+
protocol_version: PROTOCOL_VERSION,
|
|
227
|
+
request_id: decodedRequestId,
|
|
228
|
+
payload: decodePayload(input.payload),
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
export function decodeProtocolInfoEnvelope(value) {
|
|
232
|
+
return decodeProtocolEnvelope(value, decodeProtocolInfo);
|
|
233
|
+
}
|
|
234
|
+
export function decodeProtocolErrorEnvelope(value) {
|
|
235
|
+
const input = record(value);
|
|
236
|
+
exactKeys(input, ['protocol_version', 'request_id', 'error'], ['protocol_version', 'error']);
|
|
237
|
+
if (input.protocol_version !== PROTOCOL_VERSION) {
|
|
238
|
+
throw new ProtocolContractError(`Unsupported protocol version "${String(input.protocol_version)}".`, ErrorCode.UNSUPPORTED_PROTOCOL_VERSION, ['protocol_version']);
|
|
239
|
+
}
|
|
240
|
+
const error = record(input.error, ['error']);
|
|
241
|
+
exactKeys(error, [
|
|
242
|
+
'code',
|
|
243
|
+
'message',
|
|
244
|
+
'details',
|
|
245
|
+
'retry_after',
|
|
246
|
+
'required_capability',
|
|
247
|
+
'supported_versions',
|
|
248
|
+
], ['code', 'message'], ['error']);
|
|
249
|
+
if (typeof error.code !== 'string' || !Object.values(ErrorCode).includes(error.code)) {
|
|
250
|
+
fail('Unknown protocol error code.', ['error', 'code']);
|
|
251
|
+
}
|
|
252
|
+
const decodedError = {
|
|
253
|
+
code: error.code,
|
|
254
|
+
message: redactProtocolDiagnostic(boundedString(error.message, 1, 512, ['error', 'message'])),
|
|
255
|
+
};
|
|
256
|
+
if (error.details !== undefined) {
|
|
257
|
+
decodedError.details = redactProtocolDiagnostic(boundedString(error.details, 1, 2048, ['error', 'details']));
|
|
258
|
+
}
|
|
259
|
+
if (error.retry_after !== undefined) {
|
|
260
|
+
decodedError.retry_after = boundedPositiveInteger(error.retry_after, 86_400, ['error', 'retry_after']);
|
|
261
|
+
}
|
|
262
|
+
if (error.required_capability !== undefined) {
|
|
263
|
+
decodedError.required_capability = capabilityName(error.required_capability, ['error', 'required_capability']);
|
|
264
|
+
}
|
|
265
|
+
if (error.supported_versions !== undefined) {
|
|
266
|
+
if (!Array.isArray(error.supported_versions) || error.supported_versions.length === 0 ||
|
|
267
|
+
error.supported_versions.length > 16 ||
|
|
268
|
+
!error.supported_versions.every((version) => version === PROTOCOL_VERSION) ||
|
|
269
|
+
new Set(error.supported_versions).size !== error.supported_versions.length) {
|
|
270
|
+
fail('Invalid supported protocol versions.', ['error', 'supported_versions']);
|
|
271
|
+
}
|
|
272
|
+
decodedError.supported_versions = [...error.supported_versions];
|
|
273
|
+
}
|
|
274
|
+
const decodedRequestId = input.request_id === undefined
|
|
275
|
+
? undefined
|
|
276
|
+
: decodeRequestId(input.request_id, ['request_id']);
|
|
277
|
+
return decodedRequestId === undefined
|
|
278
|
+
? { protocol_version: PROTOCOL_VERSION, error: decodedError }
|
|
279
|
+
: { protocol_version: PROTOCOL_VERSION, request_id: decodedRequestId, error: decodedError };
|
|
280
|
+
}
|
|
281
|
+
export function decodeEnrollmentExchangeRequest(value) {
|
|
282
|
+
const input = record(value);
|
|
283
|
+
exactKeys(input, ['invitation', 'client_name'], ['invitation']);
|
|
284
|
+
const invitation = opaqueToken(input.invitation, ['invitation']);
|
|
285
|
+
const clientName = input.client_name === undefined
|
|
286
|
+
? undefined
|
|
287
|
+
: boundedString(input.client_name, 1, 120, ['client_name']);
|
|
288
|
+
if (clientName !== undefined && !/^[A-Za-z0-9][A-Za-z0-9 ._-]*$/.test(clientName)) {
|
|
289
|
+
fail('Client name contains unsupported characters.', ['client_name']);
|
|
290
|
+
}
|
|
291
|
+
return clientName === undefined ? { invitation } : { invitation, client_name: clientName };
|
|
292
|
+
}
|
|
293
|
+
export function decodeEnrollmentExchangeRequestEnvelope(value) {
|
|
294
|
+
return decodeProtocolEnvelope(value, decodeEnrollmentExchangeRequest);
|
|
295
|
+
}
|
|
296
|
+
export function decodeEnrollmentExchangeResponse(value) {
|
|
297
|
+
const input = record(value);
|
|
298
|
+
exactKeys(input, ['client_id', 'credential', 'credential_expires_at'], ['client_id', 'credential']);
|
|
299
|
+
const clientId = opaqueIdentifier(input.client_id, ['client_id']);
|
|
300
|
+
const credential = opaqueToken(input.credential, ['credential']);
|
|
301
|
+
let expiresAt;
|
|
302
|
+
if (input.credential_expires_at === null)
|
|
303
|
+
expiresAt = null;
|
|
304
|
+
else if (input.credential_expires_at !== undefined) {
|
|
305
|
+
expiresAt = decodeCanonicalTimestamp(input.credential_expires_at, ['credential_expires_at']);
|
|
306
|
+
}
|
|
307
|
+
return expiresAt === undefined
|
|
308
|
+
? { client_id: clientId, credential }
|
|
309
|
+
: { client_id: clientId, credential, credential_expires_at: expiresAt };
|
|
310
|
+
}
|
|
311
|
+
export function decodeEnrollmentExchangeResponseEnvelope(value) {
|
|
312
|
+
return decodeProtocolEnvelope(value, decodeEnrollmentExchangeResponse);
|
|
313
|
+
}
|
|
314
|
+
export function decodeAppendLogRequest(value) {
|
|
315
|
+
const input = record(value);
|
|
316
|
+
exactKeys(input, ['message', 'visibility', 'recipientDroneIds', 'class', 'to'], ['message']);
|
|
317
|
+
const output = {
|
|
318
|
+
message: boundedString(input.message, 1, 10_240, ['message']),
|
|
319
|
+
};
|
|
320
|
+
if (input.visibility !== undefined) {
|
|
321
|
+
if (input.visibility !== 'broadcast' && input.visibility !== 'direct') {
|
|
322
|
+
fail('Invalid log visibility.', ['visibility']);
|
|
323
|
+
}
|
|
324
|
+
output.visibility = input.visibility;
|
|
325
|
+
}
|
|
326
|
+
if (input.recipientDroneIds !== undefined) {
|
|
327
|
+
if (!Array.isArray(input.recipientDroneIds) || input.recipientDroneIds.length === 0 || input.recipientDroneIds.length > 100) {
|
|
328
|
+
fail('Expected recipientDroneIds to contain 1-100 UUIDs.', ['recipientDroneIds']);
|
|
329
|
+
}
|
|
330
|
+
output.recipientDroneIds = input.recipientDroneIds.map((id, index) => decodeUuid(id, ['recipientDroneIds', index]));
|
|
331
|
+
}
|
|
332
|
+
if (input.class !== undefined) {
|
|
333
|
+
output.class = boundedString(input.class, 1, 64, ['class']);
|
|
334
|
+
}
|
|
335
|
+
if (input.to !== undefined) {
|
|
336
|
+
output.to = decodeStringArray(input.to, 'to', 100, 120);
|
|
337
|
+
}
|
|
338
|
+
return output;
|
|
339
|
+
}
|
|
340
|
+
function decodeStringArray(value, field, maxItems, maxLength) {
|
|
341
|
+
if (!Array.isArray(value) || value.length === 0 || value.length > maxItems) {
|
|
342
|
+
fail(`Expected ${field} to contain 1-${maxItems} values.`, [field]);
|
|
343
|
+
}
|
|
344
|
+
const decoded = value.map((item, index) => boundedString(item, 1, maxLength, [field, index]));
|
|
345
|
+
if (new Set(decoded).size !== decoded.length)
|
|
346
|
+
fail(`${field} values must be unique.`, [field]);
|
|
347
|
+
return decoded;
|
|
348
|
+
}
|
|
349
|
+
export function decodeAckLogRequest(value) {
|
|
350
|
+
const input = record(value);
|
|
351
|
+
exactKeys(input, ['entry_id', 'kind'], ['entry_id']);
|
|
352
|
+
const kind = input.kind ?? 'ack';
|
|
353
|
+
if (kind !== 'ack' && kind !== 'claim')
|
|
354
|
+
fail('Invalid ack kind.', ['kind']);
|
|
355
|
+
return {
|
|
356
|
+
entry_id: decodeUuid(input.entry_id, ['entry_id']),
|
|
357
|
+
kind,
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
export function decodeRecordDecisionRequest(value) {
|
|
361
|
+
const input = record(value);
|
|
362
|
+
exactKeys(input, ['topic', 'decision', 'rationale'], ['topic', 'decision']);
|
|
363
|
+
const output = {
|
|
364
|
+
topic: boundedString(input.topic, 1, 120, ['topic']),
|
|
365
|
+
decision: boundedString(input.decision, 1, 2000, ['decision']),
|
|
366
|
+
};
|
|
367
|
+
if (input.rationale !== undefined) {
|
|
368
|
+
output.rationale = boundedString(input.rationale, 1, 2000, ['rationale']);
|
|
369
|
+
}
|
|
370
|
+
return output;
|
|
371
|
+
}
|
|
372
|
+
export function decodeRemoveDecisionRequest(value) {
|
|
373
|
+
const input = record(value);
|
|
374
|
+
exactKeys(input, ['topic', 'decision_id'], []);
|
|
375
|
+
const hasTopic = input.topic !== undefined;
|
|
376
|
+
const hasId = input.decision_id !== undefined;
|
|
377
|
+
if (hasTopic === hasId)
|
|
378
|
+
fail('Exactly one decision selector is required.');
|
|
379
|
+
return hasTopic
|
|
380
|
+
? { topic: boundedString(input.topic, 1, 120, ['topic']) }
|
|
381
|
+
: { decision_id: decodeUuid(input.decision_id, ['decision_id']) };
|
|
382
|
+
}
|
|
383
|
+
export function decodeCanonicalTimestamp(value, path = []) {
|
|
384
|
+
const timestamp = boundedString(value, 24, 24, path);
|
|
385
|
+
if (!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/.test(timestamp)) {
|
|
386
|
+
fail('Expected a canonical UTC timestamp with millisecond precision.', path);
|
|
387
|
+
}
|
|
388
|
+
const parsed = Date.parse(timestamp);
|
|
389
|
+
if (!Number.isFinite(parsed) || new Date(parsed).toISOString() !== timestamp) {
|
|
390
|
+
fail('Expected a valid canonical UTC timestamp.', path);
|
|
391
|
+
}
|
|
392
|
+
return timestamp;
|
|
393
|
+
}
|
|
394
|
+
export function decodeLogCursor(value, path = []) {
|
|
395
|
+
const input = record(value, path);
|
|
396
|
+
exactKeys(input, ['id', 'created_at'], ['id', 'created_at'], path);
|
|
397
|
+
return {
|
|
398
|
+
id: decodeUuid(input.id, [...path, 'id']),
|
|
399
|
+
created_at: decodeCanonicalTimestamp(input.created_at, [...path, 'created_at']),
|
|
400
|
+
};
|
|
401
|
+
}
|
|
402
|
+
export function decodeUuid(value, path = []) {
|
|
403
|
+
const id = boundedString(value, 36, 36, path);
|
|
404
|
+
if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(id)) {
|
|
405
|
+
fail('Expected a canonical UUID.', path);
|
|
406
|
+
}
|
|
407
|
+
return id.toLowerCase();
|
|
408
|
+
}
|
|
409
|
+
export function decodeOpaqueIdentifier(value, path = []) {
|
|
410
|
+
return opaqueIdentifier(value, path);
|
|
411
|
+
}
|
|
412
|
+
export function redactProtocolDiagnostic(value) {
|
|
413
|
+
return value
|
|
414
|
+
.replace(/[\u0000-\u001f\u007f-\u009f]/g, (character) => `\\u${character.charCodeAt(0).toString(16).padStart(4, '0')}`)
|
|
415
|
+
.replace(/\bBearer\s+[A-Za-z0-9_-]{20,}/gi, 'Bearer <REDACTED>')
|
|
416
|
+
.replace(/[A-Za-z0-9_-]{43,}/g, '<REDACTED>');
|
|
417
|
+
}
|
|
418
|
+
export function compareLogCursor(a, b) {
|
|
419
|
+
const left = decodeLogCursor(a);
|
|
420
|
+
const right = decodeLogCursor(b);
|
|
421
|
+
if (left.created_at !== right.created_at)
|
|
422
|
+
return left.created_at < right.created_at ? -1 : 1;
|
|
423
|
+
if (left.id === right.id)
|
|
424
|
+
return 0;
|
|
425
|
+
return left.id < right.id ? -1 : 1;
|
|
426
|
+
}
|
|
427
|
+
export function maxLogCursor(a, b) {
|
|
428
|
+
if (a === null)
|
|
429
|
+
return b === null ? null : decodeLogCursor(b);
|
|
430
|
+
if (b === null)
|
|
431
|
+
return decodeLogCursor(a);
|
|
432
|
+
return compareLogCursor(a, b) >= 0 ? decodeLogCursor(a) : decodeLogCursor(b);
|
|
433
|
+
}
|
|
434
|
+
//# sourceMappingURL=contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/protocol/contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type LogCursor, type ProtocolEnvelope } from './contract.js';
|
|
2
|
+
import type { Decision, EnrichedStreamEntry } from './types.js';
|
|
3
|
+
export interface ReadLogRequest {
|
|
4
|
+
cursor: LogCursor | null;
|
|
5
|
+
limit?: number;
|
|
6
|
+
}
|
|
7
|
+
export interface ClaimRecord {
|
|
8
|
+
log_entry_id: string;
|
|
9
|
+
claimant_drone_id: string;
|
|
10
|
+
claimant_label: string | null;
|
|
11
|
+
claimant_role: string | null;
|
|
12
|
+
claimed_at: string;
|
|
13
|
+
stale: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface AppendLogResult {
|
|
16
|
+
entry: EnrichedStreamEntry;
|
|
17
|
+
}
|
|
18
|
+
export interface ReadLogResult {
|
|
19
|
+
entries: EnrichedStreamEntry[];
|
|
20
|
+
cursor: LogCursor | null;
|
|
21
|
+
behind_by: number;
|
|
22
|
+
has_more: boolean;
|
|
23
|
+
claims: ClaimRecord[];
|
|
24
|
+
}
|
|
25
|
+
export declare function decodeReadLogRequest(value: unknown): ReadLogRequest;
|
|
26
|
+
export declare function decodeReadLogRequestEnvelope(value: unknown): ProtocolEnvelope<ReadLogRequest>;
|
|
27
|
+
export declare function decodeAppendLogResult(value: unknown): AppendLogResult;
|
|
28
|
+
export declare function decodeAppendLogResultEnvelope(value: unknown): ProtocolEnvelope<AppendLogResult>;
|
|
29
|
+
export declare function decodeReadLogResult(value: unknown): ReadLogResult;
|
|
30
|
+
export declare function decodeReadLogResultEnvelope(value: unknown): ProtocolEnvelope<ReadLogResult>;
|
|
31
|
+
export declare function decodeDecision(value: unknown): Decision;
|
|
32
|
+
export declare function decodeDecisionResultEnvelope(value: unknown): ProtocolEnvelope<{
|
|
33
|
+
decision: Decision;
|
|
34
|
+
}>;
|
|
35
|
+
export declare function decodeDecisionsResultEnvelope(value: unknown): ProtocolEnvelope<{
|
|
36
|
+
decisions: Decision[];
|
|
37
|
+
}>;
|
|
38
|
+
//# sourceMappingURL=coordination.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coordination.d.ts","sourceRoot":"","sources":["../../src/protocol/coordination.ts"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,SAAS,EACd,KAAK,gBAAgB,EACtB,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEhE,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,mBAAmB,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAgDD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAQnE;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,OAAO,GACb,gBAAgB,CAAC,cAAc,CAAC,CAElC;AAkCD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CAIrE;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,OAAO,GACb,gBAAgB,CAAC,eAAe,CAAC,CAEnC;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAoCjE;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,OAAO,GACb,gBAAgB,CAAC,aAAa,CAAC,CAEjC;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAmCvD;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,OAAO,GACb,gBAAgB,CAAC;IAAE,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAC,CAM1C;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,OAAO,GACb,gBAAgB,CAAC;IAAE,SAAS,EAAE,QAAQ,EAAE,CAAA;CAAE,CAAC,CAS7C"}
|