@source-repo/rpc 3.0.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.
- package/LICENSE +21 -0
- package/README.md +1208 -0
- package/dist/Logging/ILogger.d.ts +7 -0
- package/dist/Logging/ILogger.d.ts.map +1 -0
- package/dist/Logging/ILogger.js +2 -0
- package/dist/Logging/ILogger.js.map +1 -0
- package/dist/NodeRpcServer.d.ts +55 -0
- package/dist/NodeRpcServer.d.ts.map +1 -0
- package/dist/NodeRpcServer.js +46 -0
- package/dist/NodeRpcServer.js.map +1 -0
- package/dist/RPC/Auth.d.ts +98 -0
- package/dist/RPC/Auth.d.ts.map +1 -0
- package/dist/RPC/Auth.js +14 -0
- package/dist/RPC/Auth.js.map +1 -0
- package/dist/RPC/Codec.d.ts +24 -0
- package/dist/RPC/Codec.d.ts.map +1 -0
- package/dist/RPC/Codec.js +21 -0
- package/dist/RPC/Codec.js.map +1 -0
- package/dist/RPC/Compatibility.d.ts +39 -0
- package/dist/RPC/Compatibility.d.ts.map +1 -0
- package/dist/RPC/Compatibility.js +195 -0
- package/dist/RPC/Compatibility.js.map +1 -0
- package/dist/RPC/Core.d.ts +188 -0
- package/dist/RPC/Core.d.ts.map +1 -0
- package/dist/RPC/Core.js +354 -0
- package/dist/RPC/Core.js.map +1 -0
- package/dist/RPC/Expose.d.ts +90 -0
- package/dist/RPC/Expose.d.ts.map +1 -0
- package/dist/RPC/Expose.js +110 -0
- package/dist/RPC/Expose.js.map +1 -0
- package/dist/RPC/Idempotency.d.ts +90 -0
- package/dist/RPC/Idempotency.d.ts.map +1 -0
- package/dist/RPC/Idempotency.js +46 -0
- package/dist/RPC/Idempotency.js.map +1 -0
- package/dist/RPC/Introspection.d.ts +92 -0
- package/dist/RPC/Introspection.d.ts.map +1 -0
- package/dist/RPC/Introspection.js +188 -0
- package/dist/RPC/Introspection.js.map +1 -0
- package/dist/RPC/Introspection.types.json +1093 -0
- package/dist/RPC/Messages.d.ts +108 -0
- package/dist/RPC/Messages.d.ts.map +1 -0
- package/dist/RPC/Messages.js +30 -0
- package/dist/RPC/Messages.js.map +1 -0
- package/dist/RPC/Rpc.d.ts +51 -0
- package/dist/RPC/Rpc.d.ts.map +1 -0
- package/dist/RPC/Rpc.js +54 -0
- package/dist/RPC/Rpc.js.map +1 -0
- package/dist/RPC/RpcClientHandler.d.ts +129 -0
- package/dist/RPC/RpcClientHandler.d.ts.map +1 -0
- package/dist/RPC/RpcClientHandler.js +267 -0
- package/dist/RPC/RpcClientHandler.js.map +1 -0
- package/dist/RPC/RpcServerHandler.d.ts +226 -0
- package/dist/RPC/RpcServerHandler.d.ts.map +1 -0
- package/dist/RPC/RpcServerHandler.js +676 -0
- package/dist/RPC/RpcServerHandler.js.map +1 -0
- package/dist/RPC/Schema.d.ts +150 -0
- package/dist/RPC/Schema.d.ts.map +1 -0
- package/dist/RPC/Schema.js +198 -0
- package/dist/RPC/Schema.js.map +1 -0
- package/dist/RPC/Signing.d.ts +118 -0
- package/dist/RPC/Signing.d.ts.map +1 -0
- package/dist/RPC/Signing.js +171 -0
- package/dist/RPC/Signing.js.map +1 -0
- package/dist/RPC/Tokens.d.ts +49 -0
- package/dist/RPC/Tokens.d.ts.map +1 -0
- package/dist/RPC/Tokens.js +45 -0
- package/dist/RPC/Tokens.js.map +1 -0
- package/dist/RpcClient.d.ts +91 -0
- package/dist/RpcClient.d.ts.map +1 -0
- package/dist/RpcClient.js +145 -0
- package/dist/RpcClient.js.map +1 -0
- package/dist/RpcServer.d.ts +191 -0
- package/dist/RpcServer.d.ts.map +1 -0
- package/dist/RpcServer.js +293 -0
- package/dist/RpcServer.js.map +1 -0
- package/dist/Transports/Mqtt5Frame.d.ts +107 -0
- package/dist/Transports/Mqtt5Frame.d.ts.map +1 -0
- package/dist/Transports/Mqtt5Frame.js +162 -0
- package/dist/Transports/Mqtt5Frame.js.map +1 -0
- package/dist/Transports/MqttTransport.d.ts +279 -0
- package/dist/Transports/MqttTransport.d.ts.map +1 -0
- package/dist/Transports/MqttTransport.js +843 -0
- package/dist/Transports/MqttTransport.js.map +1 -0
- package/dist/Transports/Presence.d.ts +68 -0
- package/dist/Transports/Presence.d.ts.map +1 -0
- package/dist/Transports/Presence.js +21 -0
- package/dist/Transports/Presence.js.map +1 -0
- package/dist/Transports/SocketIoClientTransport.d.ts +89 -0
- package/dist/Transports/SocketIoClientTransport.d.ts.map +1 -0
- package/dist/Transports/SocketIoClientTransport.js +280 -0
- package/dist/Transports/SocketIoClientTransport.js.map +1 -0
- package/dist/Transports/SocketIoServerTransport.d.ts +135 -0
- package/dist/Transports/SocketIoServerTransport.d.ts.map +1 -0
- package/dist/Transports/SocketIoServerTransport.js +505 -0
- package/dist/Transports/SocketIoServerTransport.js.map +1 -0
- package/dist/Utilities/Converters.d.ts +22 -0
- package/dist/Utilities/Converters.d.ts.map +1 -0
- package/dist/Utilities/Converters.js +58 -0
- package/dist/Utilities/Converters.js.map +1 -0
- package/dist/Utilities/Filter.d.ts +7 -0
- package/dist/Utilities/Filter.d.ts.map +1 -0
- package/dist/Utilities/Filter.js +14 -0
- package/dist/Utilities/Filter.js.map +1 -0
- package/dist/Utilities/ReadableName.d.ts +38 -0
- package/dist/Utilities/ReadableName.d.ts.map +1 -0
- package/dist/Utilities/ReadableName.js +58 -0
- package/dist/Utilities/ReadableName.js.map +1 -0
- package/dist/Utilities/Switch.d.ts +21 -0
- package/dist/Utilities/Switch.d.ts.map +1 -0
- package/dist/Utilities/Switch.js +70 -0
- package/dist/Utilities/Switch.js.map +1 -0
- package/dist/Utilities/TryCatch.d.ts +11 -0
- package/dist/Utilities/TryCatch.d.ts.map +1 -0
- package/dist/Utilities/TryCatch.js +13 -0
- package/dist/Utilities/TryCatch.js.map +1 -0
- package/dist/index-web.d.ts +25 -0
- package/dist/index-web.d.ts.map +1 -0
- package/dist/index-web.js +28 -0
- package/dist/index-web.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RpcServerHandler.js","sourceRoot":"","sources":["../../src/RPC/RpcServerHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A small type language for describing what an exposed method accepts and returns, and a validator
|
|
3
|
+
* for it.
|
|
4
|
+
*
|
|
5
|
+
* Deliberately not JSON Schema. It has to describe what MsgPack actually carries - Uint8Array and
|
|
6
|
+
* Date are values here, not string encodings of them - and it has to be checkable without pulling
|
|
7
|
+
* a validation engine into a package that ships to browsers and embedded targets.
|
|
8
|
+
*
|
|
9
|
+
* Nothing generates these yet; they are written by hand or supplied by a build step. The format
|
|
10
|
+
* carries version and history fields from the start so adding that step later needs no change to
|
|
11
|
+
* the document.
|
|
12
|
+
*/
|
|
13
|
+
import type { RpcMethodSemantics } from './Messages.js';
|
|
14
|
+
export type TypeNode =
|
|
15
|
+
/** Accepts anything. Use sparingly: it is the hole every other check is trying to close. */
|
|
16
|
+
{
|
|
17
|
+
kind: 'any';
|
|
18
|
+
} | {
|
|
19
|
+
kind: 'null';
|
|
20
|
+
} | {
|
|
21
|
+
kind: 'boolean';
|
|
22
|
+
} | {
|
|
23
|
+
kind: 'number';
|
|
24
|
+
integer?: boolean;
|
|
25
|
+
min?: number;
|
|
26
|
+
max?: number;
|
|
27
|
+
} | {
|
|
28
|
+
kind: 'string';
|
|
29
|
+
pattern?: string;
|
|
30
|
+
minLength?: number;
|
|
31
|
+
maxLength?: number;
|
|
32
|
+
}
|
|
33
|
+
/** Uint8Array, which MsgPack carries natively. */
|
|
34
|
+
| {
|
|
35
|
+
kind: 'bytes';
|
|
36
|
+
maxBytes?: number;
|
|
37
|
+
} | {
|
|
38
|
+
kind: 'date';
|
|
39
|
+
} | {
|
|
40
|
+
kind: 'literal';
|
|
41
|
+
value: string | number | boolean | null;
|
|
42
|
+
} | {
|
|
43
|
+
kind: 'array';
|
|
44
|
+
items: TypeNode;
|
|
45
|
+
maxItems?: number;
|
|
46
|
+
} | {
|
|
47
|
+
kind: 'tuple';
|
|
48
|
+
items: TypeNode[];
|
|
49
|
+
} | {
|
|
50
|
+
kind: 'object';
|
|
51
|
+
fields: {
|
|
52
|
+
[name: string]: FieldNode;
|
|
53
|
+
};
|
|
54
|
+
additional?: boolean;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* A dictionary: keys not known in advance, values all of one type. `{ [tag: string]: Reading }`
|
|
58
|
+
* is how plant data usually arrives, and describing it as an `object` would produce a type that
|
|
59
|
+
* refuses every value, since it has no named properties to declare.
|
|
60
|
+
*
|
|
61
|
+
* `keyPattern` constrains the keys, which is what a numeric index signature becomes - a JS
|
|
62
|
+
* object key is always a string, so `{ [id: number]: X }` is a string key that must read as a
|
|
63
|
+
* number rather than a separate key type.
|
|
64
|
+
*/
|
|
65
|
+
| {
|
|
66
|
+
kind: 'record';
|
|
67
|
+
values: TypeNode;
|
|
68
|
+
keyPattern?: string;
|
|
69
|
+
maxEntries?: number;
|
|
70
|
+
} | {
|
|
71
|
+
kind: 'union';
|
|
72
|
+
options: TypeNode[];
|
|
73
|
+
}
|
|
74
|
+
/** Reference to a named type, which is how recursive and shared shapes are expressed. */
|
|
75
|
+
| {
|
|
76
|
+
kind: 'ref';
|
|
77
|
+
name: string;
|
|
78
|
+
};
|
|
79
|
+
export interface FieldNode {
|
|
80
|
+
type: TypeNode;
|
|
81
|
+
optional?: boolean;
|
|
82
|
+
}
|
|
83
|
+
export interface MethodSchema {
|
|
84
|
+
/** One entry per positional parameter. */
|
|
85
|
+
params: TypeNode[];
|
|
86
|
+
/**
|
|
87
|
+
* Parameter names, positionally matching `params`. Carried for tooling that has to present a
|
|
88
|
+
* call to a person - a form needs a label, and "argument 0" is not one. Never used for
|
|
89
|
+
* checking, so a schema written by hand can leave it out.
|
|
90
|
+
*/
|
|
91
|
+
paramNames?: string[];
|
|
92
|
+
/** Type of any further arguments, for a rest parameter. Absent means no extra arguments. */
|
|
93
|
+
rest?: TypeNode;
|
|
94
|
+
/** Checked only when result validation is on. */
|
|
95
|
+
returns?: TypeNode;
|
|
96
|
+
/**
|
|
97
|
+
* What calling this does to the world: `query`, `idempotent-command` or
|
|
98
|
+
* `non-repeatable-command`. Part of the contract because it is a promise to the caller, not an
|
|
99
|
+
* implementation detail - it decides whether an uncertain answer may be retried, and a server
|
|
100
|
+
* that quietly stopped being repeatable would break callers that were told it was.
|
|
101
|
+
*/
|
|
102
|
+
semantics?: RpcMethodSemantics;
|
|
103
|
+
}
|
|
104
|
+
export interface NamespaceSchema {
|
|
105
|
+
/**
|
|
106
|
+
* Contract version for this namespace, for diagnostics. Reported alongside a validation
|
|
107
|
+
* failure so a stale caller is recognisable as one, rather than looking like a type error.
|
|
108
|
+
*/
|
|
109
|
+
version?: string;
|
|
110
|
+
methods: {
|
|
111
|
+
[method: string]: MethodSchema;
|
|
112
|
+
};
|
|
113
|
+
events?: {
|
|
114
|
+
[event: string]: {
|
|
115
|
+
params: TypeNode[];
|
|
116
|
+
};
|
|
117
|
+
};
|
|
118
|
+
/** Skip validation for this namespace, for a hot path where the cost is not worth it. */
|
|
119
|
+
validate?: boolean;
|
|
120
|
+
/**
|
|
121
|
+
* Earlier versions of this namespace, newest last. Reserved for the extraction CLI, which uses
|
|
122
|
+
* them to detect a breaking change before it ships. Not consulted for dispatch: a call that
|
|
123
|
+
* was valid under an older contract still reaches the current implementation, so accepting it
|
|
124
|
+
* would move the failure from the validator into the method body.
|
|
125
|
+
*/
|
|
126
|
+
history?: {
|
|
127
|
+
[version: string]: Omit<NamespaceSchema, 'history'>;
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
export interface RpcSchema {
|
|
131
|
+
/** Format version of this document, not of the contract it describes. */
|
|
132
|
+
schema: 1;
|
|
133
|
+
/** Contract version covering the document as a whole. */
|
|
134
|
+
version?: string;
|
|
135
|
+
types?: {
|
|
136
|
+
[name: string]: TypeNode;
|
|
137
|
+
};
|
|
138
|
+
namespaces: {
|
|
139
|
+
[namespace: string]: NamespaceSchema;
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Returns a human-readable reason the value does not match, or undefined when it does. The path
|
|
144
|
+
* names the offending position, because "expected number" is not much help three levels into an
|
|
145
|
+
* argument.
|
|
146
|
+
*/
|
|
147
|
+
export declare const validateValue: (value: unknown, type: TypeNode, types?: RpcSchema['types'], path?: string, depth?: number) => string | undefined;
|
|
148
|
+
/** Returns a reason the arguments do not match the method's parameters, or undefined. */
|
|
149
|
+
export declare const validateParams: (params: unknown[], method: MethodSchema, types?: RpcSchema['types']) => string | undefined;
|
|
150
|
+
//# sourceMappingURL=Schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Schema.d.ts","sourceRoot":"","sources":["../../src/RPC/Schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A small type language for describing what an exposed method accepts and returns, and a validator
|
|
3
|
+
* for it.
|
|
4
|
+
*
|
|
5
|
+
* Deliberately not JSON Schema. It has to describe what MsgPack actually carries - Uint8Array and
|
|
6
|
+
* Date are values here, not string encodings of them - and it has to be checkable without pulling
|
|
7
|
+
* a validation engine into a package that ships to browsers and embedded targets.
|
|
8
|
+
*
|
|
9
|
+
* Nothing generates these yet; they are written by hand or supplied by a build step. The format
|
|
10
|
+
* carries version and history fields from the start so adding that step later needs no change to
|
|
11
|
+
* the document.
|
|
12
|
+
*/
|
|
13
|
+
/** Guards against a hostile payload nesting deeply enough to exhaust the stack. */
|
|
14
|
+
const MAX_DEPTH = 32;
|
|
15
|
+
const typeName = (value) => {
|
|
16
|
+
if (value === null)
|
|
17
|
+
return 'null';
|
|
18
|
+
if (Array.isArray(value))
|
|
19
|
+
return 'array';
|
|
20
|
+
if (value instanceof Uint8Array)
|
|
21
|
+
return 'bytes';
|
|
22
|
+
if (value instanceof Date)
|
|
23
|
+
return 'date';
|
|
24
|
+
return typeof value;
|
|
25
|
+
};
|
|
26
|
+
const describe = (type) => {
|
|
27
|
+
switch (type.kind) {
|
|
28
|
+
case 'literal':
|
|
29
|
+
return JSON.stringify(type.value);
|
|
30
|
+
case 'array':
|
|
31
|
+
return `${describe(type.items)}[]`;
|
|
32
|
+
case 'tuple':
|
|
33
|
+
return `[${type.items.map(describe).join(', ')}]`;
|
|
34
|
+
case 'union':
|
|
35
|
+
return type.options.map(describe).join(' | ');
|
|
36
|
+
case 'ref':
|
|
37
|
+
return type.name;
|
|
38
|
+
case 'object':
|
|
39
|
+
return 'object';
|
|
40
|
+
case 'record':
|
|
41
|
+
return `{ [key: string]: ${describe(type.values)} }`;
|
|
42
|
+
default:
|
|
43
|
+
return type.kind;
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
/** Rejects the things that are `typeof 'object'` but are values in their own right here. */
|
|
47
|
+
const isPlainObject = (value) => typeof value === 'object' && value !== null && !Array.isArray(value) && !(value instanceof Uint8Array) && !(value instanceof Date);
|
|
48
|
+
/**
|
|
49
|
+
* Returns a human-readable reason the value does not match, or undefined when it does. The path
|
|
50
|
+
* names the offending position, because "expected number" is not much help three levels into an
|
|
51
|
+
* argument.
|
|
52
|
+
*/
|
|
53
|
+
export const validateValue = (value, type, types = {}, path = '', depth = 0) => {
|
|
54
|
+
if (depth > MAX_DEPTH)
|
|
55
|
+
return `${path || 'value'}: nested deeper than ${MAX_DEPTH} levels`;
|
|
56
|
+
const at = path || 'value';
|
|
57
|
+
switch (type.kind) {
|
|
58
|
+
case 'any':
|
|
59
|
+
return undefined;
|
|
60
|
+
case 'null':
|
|
61
|
+
return value === null ? undefined : `${at}: expected null, got ${typeName(value)}`;
|
|
62
|
+
case 'boolean':
|
|
63
|
+
return typeof value === 'boolean' ? undefined : `${at}: expected boolean, got ${typeName(value)}`;
|
|
64
|
+
case 'number': {
|
|
65
|
+
if (typeof value !== 'number' || Number.isNaN(value))
|
|
66
|
+
return `${at}: expected number, got ${typeName(value)}`;
|
|
67
|
+
if (type.integer && !Number.isInteger(value))
|
|
68
|
+
return `${at}: expected an integer, got ${value}`;
|
|
69
|
+
if (type.min !== undefined && value < type.min)
|
|
70
|
+
return `${at}: ${value} is below the minimum ${type.min}`;
|
|
71
|
+
if (type.max !== undefined && value > type.max)
|
|
72
|
+
return `${at}: ${value} is above the maximum ${type.max}`;
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
case 'string': {
|
|
76
|
+
if (typeof value !== 'string')
|
|
77
|
+
return `${at}: expected string, got ${typeName(value)}`;
|
|
78
|
+
if (type.minLength !== undefined && value.length < type.minLength)
|
|
79
|
+
return `${at}: shorter than ${type.minLength} characters`;
|
|
80
|
+
if (type.maxLength !== undefined && value.length > type.maxLength)
|
|
81
|
+
return `${at}: longer than ${type.maxLength} characters`;
|
|
82
|
+
if (type.pattern !== undefined && !new RegExp(type.pattern).test(value))
|
|
83
|
+
return `${at}: does not match ${type.pattern}`;
|
|
84
|
+
return undefined;
|
|
85
|
+
}
|
|
86
|
+
case 'bytes': {
|
|
87
|
+
if (!(value instanceof Uint8Array))
|
|
88
|
+
return `${at}: expected bytes, got ${typeName(value)}`;
|
|
89
|
+
if (type.maxBytes !== undefined && value.length > type.maxBytes)
|
|
90
|
+
return `${at}: longer than ${type.maxBytes} bytes`;
|
|
91
|
+
return undefined;
|
|
92
|
+
}
|
|
93
|
+
case 'date':
|
|
94
|
+
return value instanceof Date && !Number.isNaN(value.getTime()) ? undefined : `${at}: expected a date, got ${typeName(value)}`;
|
|
95
|
+
case 'literal':
|
|
96
|
+
return value === type.value ? undefined : `${at}: expected ${JSON.stringify(type.value)}`;
|
|
97
|
+
case 'array': {
|
|
98
|
+
if (!Array.isArray(value))
|
|
99
|
+
return `${at}: expected an array, got ${typeName(value)}`;
|
|
100
|
+
if (type.maxItems !== undefined && value.length > type.maxItems)
|
|
101
|
+
return `${at}: more than ${type.maxItems} items`;
|
|
102
|
+
for (let i = 0; i < value.length; i++) {
|
|
103
|
+
const failure = validateValue(value[i], type.items, types, `${at}[${i}]`, depth + 1);
|
|
104
|
+
if (failure)
|
|
105
|
+
return failure;
|
|
106
|
+
}
|
|
107
|
+
return undefined;
|
|
108
|
+
}
|
|
109
|
+
case 'tuple': {
|
|
110
|
+
if (!Array.isArray(value))
|
|
111
|
+
return `${at}: expected a tuple, got ${typeName(value)}`;
|
|
112
|
+
if (value.length !== type.items.length)
|
|
113
|
+
return `${at}: expected ${type.items.length} elements, got ${value.length}`;
|
|
114
|
+
for (let i = 0; i < type.items.length; i++) {
|
|
115
|
+
const failure = validateValue(value[i], type.items[i], types, `${at}[${i}]`, depth + 1);
|
|
116
|
+
if (failure)
|
|
117
|
+
return failure;
|
|
118
|
+
}
|
|
119
|
+
return undefined;
|
|
120
|
+
}
|
|
121
|
+
case 'object': {
|
|
122
|
+
if (!isPlainObject(value))
|
|
123
|
+
return `${at}: expected an object, got ${typeName(value)}`;
|
|
124
|
+
const record = value;
|
|
125
|
+
for (const [name, field] of Object.entries(type.fields)) {
|
|
126
|
+
const present = record[name] !== undefined;
|
|
127
|
+
if (!present) {
|
|
128
|
+
if (field.optional)
|
|
129
|
+
continue;
|
|
130
|
+
return `${at}.${name}: missing`;
|
|
131
|
+
}
|
|
132
|
+
const failure = validateValue(record[name], field.type, types, `${at}.${name}`, depth + 1);
|
|
133
|
+
if (failure)
|
|
134
|
+
return failure;
|
|
135
|
+
}
|
|
136
|
+
if (!type.additional) {
|
|
137
|
+
const extra = Object.keys(record).find((key) => !(key in type.fields));
|
|
138
|
+
// Refused rather than ignored: an unexpected property is usually a caller built
|
|
139
|
+
// against a different contract, and silently dropping it hides that.
|
|
140
|
+
if (extra !== undefined)
|
|
141
|
+
return `${at}.${extra}: not part of this type`;
|
|
142
|
+
}
|
|
143
|
+
return undefined;
|
|
144
|
+
}
|
|
145
|
+
case 'record': {
|
|
146
|
+
if (!isPlainObject(value))
|
|
147
|
+
return `${at}: expected an object, got ${typeName(value)}`;
|
|
148
|
+
const keys = Object.keys(value);
|
|
149
|
+
// Bounded like an array, and for the same reason: a dictionary is the other shape a
|
|
150
|
+
// caller can grow without limit.
|
|
151
|
+
if (type.maxEntries !== undefined && keys.length > type.maxEntries)
|
|
152
|
+
return `${at}: more than ${type.maxEntries} entries`;
|
|
153
|
+
const pattern = type.keyPattern === undefined ? undefined : new RegExp(type.keyPattern);
|
|
154
|
+
for (const key of keys) {
|
|
155
|
+
if (pattern && !pattern.test(key))
|
|
156
|
+
return `${at}.${key}: key does not match ${type.keyPattern}`;
|
|
157
|
+
const failure = validateValue(value[key], type.values, types, `${at}.${key}`, depth + 1);
|
|
158
|
+
if (failure)
|
|
159
|
+
return failure;
|
|
160
|
+
}
|
|
161
|
+
return undefined;
|
|
162
|
+
}
|
|
163
|
+
case 'union': {
|
|
164
|
+
for (const option of type.options)
|
|
165
|
+
if (!validateValue(value, option, types, at, depth + 1))
|
|
166
|
+
return undefined;
|
|
167
|
+
return `${at}: expected ${describe(type)}, got ${typeName(value)}`;
|
|
168
|
+
}
|
|
169
|
+
case 'ref': {
|
|
170
|
+
const target = types[type.name];
|
|
171
|
+
if (!target)
|
|
172
|
+
return `${at}: unknown type '${type.name}'`;
|
|
173
|
+
return validateValue(value, target, types, at, depth + 1);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
// Unreachable for a well-formed node, and deliberately not a silent pass: a kind this validator
|
|
177
|
+
// does not know - a typo, or a document written for a later version of the language - would
|
|
178
|
+
// otherwise fall through as valid, which is an unchecked value wearing a checked type.
|
|
179
|
+
return `${at}: unknown type kind '${type.kind}'`;
|
|
180
|
+
};
|
|
181
|
+
/** Returns a reason the arguments do not match the method's parameters, or undefined. */
|
|
182
|
+
export const validateParams = (params, method, types = {}) => {
|
|
183
|
+
const required = method.params.filter((_, index) => !isOptional(method.params[index])).length;
|
|
184
|
+
if (params.length < required)
|
|
185
|
+
return `expected at least ${required} argument${required === 1 ? '' : 's'}, got ${params.length}`;
|
|
186
|
+
if (params.length > method.params.length && !method.rest)
|
|
187
|
+
return `expected at most ${method.params.length} arguments, got ${params.length}`;
|
|
188
|
+
for (let i = 0; i < params.length; i++) {
|
|
189
|
+
const type = i < method.params.length ? method.params[i] : method.rest;
|
|
190
|
+
const failure = validateValue(params[i], type, types, `argument ${i}`);
|
|
191
|
+
if (failure)
|
|
192
|
+
return failure;
|
|
193
|
+
}
|
|
194
|
+
return undefined;
|
|
195
|
+
};
|
|
196
|
+
/** A parameter is optional when its type admits undefined, expressed as a union with a null literal. */
|
|
197
|
+
const isOptional = (type) => type.kind === 'any' || (type.kind === 'union' && type.options.some((o) => o.kind === 'literal' && o.value === null));
|
|
198
|
+
//# sourceMappingURL=Schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Schema.js","sourceRoot":"","sources":["../../src/RPC/Schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { MessageSigner, MessageVerifier, RpcIdentity, SignedFrame } from './Auth.js';
|
|
2
|
+
/**
|
|
3
|
+
* The exact bytes a signature covers: a JSON array of the header fields, followed by the payload.
|
|
4
|
+
*
|
|
5
|
+
* A JSON array fixes the field order and escapes the values, so no combination of names can be
|
|
6
|
+
* made to look like a different frame. The verifier rebuilds the preamble from the fields it
|
|
7
|
+
* parsed, so it knows where the payload begins without needing a length prefix.
|
|
8
|
+
*/
|
|
9
|
+
export declare const canonicalSignedBytes: (frame: SignedFrame) => Uint8Array;
|
|
10
|
+
/** Fields the MQTT 5 layout covers. Signed positionally by value, so property naming never enters
|
|
11
|
+
* the canonical form and renaming one later cannot silently change what verifies. */
|
|
12
|
+
export interface SignedFrameV5 {
|
|
13
|
+
version: string;
|
|
14
|
+
topic: string;
|
|
15
|
+
/**
|
|
16
|
+
* Where the sender asks for its reply, empty when it asks for none. Signed because it is
|
|
17
|
+
* honoured: a receiver publishes the answer where this says, so anything able to rewrite it
|
|
18
|
+
* could have a server deliver a reply to a topic of its choosing.
|
|
19
|
+
*/
|
|
20
|
+
responseTopic: string;
|
|
21
|
+
source: string;
|
|
22
|
+
kind: string;
|
|
23
|
+
path: string;
|
|
24
|
+
methodOrEvent: string;
|
|
25
|
+
correlation: string;
|
|
26
|
+
/**
|
|
27
|
+
* How the payload is to be read. Signed, for the reason set out below - it was left out of
|
|
28
|
+
* frame version 1 on reasoning that turned out to be wrong.
|
|
29
|
+
*/
|
|
30
|
+
contentType: string;
|
|
31
|
+
/** The RPC error code on a failure frame, which is what the caller acts on. */
|
|
32
|
+
code: string;
|
|
33
|
+
/** The contract version the sender declares, which decides compatibility at the far end. */
|
|
34
|
+
contractVersion: string;
|
|
35
|
+
/**
|
|
36
|
+
* Milliseconds the caller said it would still wait, as a string, empty when it said nothing.
|
|
37
|
+
*
|
|
38
|
+
* A duration rather than a moment, deliberately: an absolute deadline is only as good as the
|
|
39
|
+
* agreement between two clocks, and one of the peers here is a browser, whose clock the user
|
|
40
|
+
* owns. The receiver turns it into a local deadline on arrival, so nobody's clock has to match
|
|
41
|
+
* anybody else's. See RpcServerHandler for what is done with it.
|
|
42
|
+
*/
|
|
43
|
+
ttl: string;
|
|
44
|
+
/**
|
|
45
|
+
* Names the command a request is an attempt at, empty when the caller did not distinguish the
|
|
46
|
+
* two. Signed because a receiver with an idempotency store acts on it: rewriting it could turn
|
|
47
|
+
* a retry into a fresh command, or one command into a repeat of somebody else's.
|
|
48
|
+
*/
|
|
49
|
+
idempotencyKey: string;
|
|
50
|
+
timestamp: number;
|
|
51
|
+
nonce: string;
|
|
52
|
+
payload: Uint8Array;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* The MQTT 5 canonical form. The topic is signed rather than a target field, because under this
|
|
56
|
+
* layout the topic is what carries the addressing.
|
|
57
|
+
*
|
|
58
|
+
* Frame version 1 deliberately left contentType out, on the reasoning that it only says how to read
|
|
59
|
+
* bytes that are themselves covered - so altering it could make the payload fail to parse but never
|
|
60
|
+
* change what was authorised. **That reasoning is wrong**, and the counterexample is one byte long:
|
|
61
|
+
* `0x31` decodes as the JSON text `"1"`, which is the number 1, and as a MsgPack positive fixint,
|
|
62
|
+
* which is the number 49. Both parse. Both verify. Flipping one unsigned property therefore changed
|
|
63
|
+
* a signed setpoint from 1 to 49 with the signature still good.
|
|
64
|
+
*
|
|
65
|
+
* The same argument applies to anything else the receiver acts on rather than merely transports: the
|
|
66
|
+
* error code decides what a caller does about a failure, the declared contract version decides
|
|
67
|
+
* whether the call is accepted at all, the response topic decides where the answer is published, the
|
|
68
|
+
* ttl decides whether the method runs at all, and the idempotency key decides whether it runs again.
|
|
69
|
+
* All five are covered.
|
|
70
|
+
*
|
|
71
|
+
* The MQTT message expiry is deliberately **not** covered, because the broker is meant to decrement
|
|
72
|
+
* it in flight and a signature over it would break on the first queued message. Nothing is lost:
|
|
73
|
+
* expiry may only narrow the signed ttl, never extend it, so rewriting it can delay or drop a frame
|
|
74
|
+
* - which anyone able to rewrite it could do anyway - but cannot buy a stale command more time.
|
|
75
|
+
*/
|
|
76
|
+
export declare const canonicalSignedBytesV5: (frame: SignedFrameV5) => Uint8Array;
|
|
77
|
+
/** A nonce with enough entropy that collisions are not a practical concern. */
|
|
78
|
+
export declare const createNonce: () => string;
|
|
79
|
+
/**
|
|
80
|
+
* Rejects frames that are too old and frames whose nonce has been seen before.
|
|
81
|
+
*
|
|
82
|
+
* A signature alone does not stop a captured frame being sent again, which for RPC would mean
|
|
83
|
+
* replaying a command. The freshness window bounds how long a captured frame stays useful and
|
|
84
|
+
* bounds how many nonces have to be remembered to cover it.
|
|
85
|
+
*/
|
|
86
|
+
export declare class ReplayGuard {
|
|
87
|
+
/** How far a frame's timestamp may differ from now. Peers need clocks within this of each other. */
|
|
88
|
+
maxClockSkew: number;
|
|
89
|
+
/** Hard cap on remembered nonces, so a flood cannot grow this without bound. */
|
|
90
|
+
maxTrackedNonces: number;
|
|
91
|
+
private seen;
|
|
92
|
+
constructor(
|
|
93
|
+
/** How far a frame's timestamp may differ from now. Peers need clocks within this of each other. */
|
|
94
|
+
maxClockSkew?: number,
|
|
95
|
+
/** Hard cap on remembered nonces, so a flood cannot grow this without bound. */
|
|
96
|
+
maxTrackedNonces?: number);
|
|
97
|
+
/** True if the frame is fresh and previously unseen. Records the nonce as a side effect. */
|
|
98
|
+
accept(nonce: string, time: number, now?: number): boolean;
|
|
99
|
+
private prune;
|
|
100
|
+
get size(): number;
|
|
101
|
+
}
|
|
102
|
+
/** Look up the key material for a peer. Return undefined for peers with no key on file. */
|
|
103
|
+
export type KeyResolver<T> = (source: string) => T | undefined | Promise<T | undefined>;
|
|
104
|
+
/**
|
|
105
|
+
* HMAC-SHA256 with a secret per peer. Universally available, but symmetric: whoever can verify a
|
|
106
|
+
* peer's messages can also forge them, so the secret must only be shared with parties allowed to
|
|
107
|
+
* act as that peer. Use Ed25519 when a compromised verifier must not be able to impersonate.
|
|
108
|
+
*/
|
|
109
|
+
export declare const createHmacSigner: (secret: Uint8Array | string) => MessageSigner;
|
|
110
|
+
export declare const createHmacVerifier: (resolveSecret: KeyResolver<Uint8Array | string>, identityFor?: (source: string) => RpcIdentity | undefined) => MessageVerifier;
|
|
111
|
+
/**
|
|
112
|
+
* Ed25519, taking WebCrypto keys directly so key storage and format stay the caller's concern.
|
|
113
|
+
* Asymmetric: the verifier holds only public keys, so compromising a server does not let anyone
|
|
114
|
+
* forge messages from its peers.
|
|
115
|
+
*/
|
|
116
|
+
export declare const createEd25519Signer: (privateKey: CryptoKey) => MessageSigner;
|
|
117
|
+
export declare const createEd25519Verifier: (resolvePublicKey: KeyResolver<CryptoKey>, identityFor?: (source: string) => RpcIdentity | undefined) => MessageVerifier;
|
|
118
|
+
//# sourceMappingURL=Signing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Signing.d.ts","sourceRoot":"","sources":["../../src/RPC/Signing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AA4BpF;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,UAAW,WAAW,KAAG,UAMzD,CAAA;AAED;sFACsF;AACtF,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb;;;;OAIG;IACH,aAAa,EAAE,MAAM,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB,+EAA+E;IAC/E,IAAI,EAAE,MAAM,CAAA;IACZ,4FAA4F;IAC5F,eAAe,EAAE,MAAM,CAAA;IACvB;;;;;;;OAOG;IACH,GAAG,EAAE,MAAM,CAAA;IACX;;;;OAIG;IACH,cAAc,EAAE,MAAM,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,UAAU,CAAA;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,sBAAsB,UAAW,aAAa,KAAG,UAwB7D,CAAA;AAED,+EAA+E;AAC/E,eAAO,MAAM,WAAW,cAAkF,CAAA;AAE1G;;;;;;GAMG;AACH,qBAAa,WAAW;IAIhB,oGAAoG;IAC7F,YAAY;IACnB,gFAAgF;IACzE,gBAAgB;IAN3B,OAAO,CAAC,IAAI,CAA4B;IAExC;IACI,oGAAoG;IAC7F,YAAY,SAAQ;IAC3B,gFAAgF;IACzE,gBAAgB,SAAO,EAC9B;IAEJ,4FAA4F;IAC5F,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,SAAa,WAOnD;IAED,OAAO,CAAC,KAAK;IAYb,IAAI,IAAI,WAEP;CACJ;AAED,2FAA2F;AAC3F,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,KAAK,CAAC,GAAG,SAAS,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAA;AAIvF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,WAAY,UAAU,GAAG,MAAM,KAAG,aAI9D,CAAA;AAED,eAAO,MAAM,kBAAkB,kBACZ,WAAW,CAAC,UAAU,GAAG,MAAM,CAAC,gBACjC,CAAC,MAAM,EAAE,MAAM,KAAK,WAAW,GAAG,SAAS,KAC1D,eASF,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,eAAgB,SAAS,KAAG,aAE3D,CAAA;AAED,eAAO,MAAM,qBAAqB,qBACZ,WAAW,CAAC,SAAS,CAAC,gBAC1B,CAAC,MAAM,EAAE,MAAM,KAAK,WAAW,GAAG,SAAS,KAC1D,eAOF,CAAA"}
|