@aster-rpc/aster 0.1.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/dist/capabilities.d.ts +26 -0
- package/dist/capabilities.d.ts.map +1 -0
- package/dist/capabilities.js +29 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/client.d.ts +65 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +108 -0
- package/dist/client.js.map +1 -0
- package/dist/codec.d.ts +156 -0
- package/dist/codec.d.ts.map +1 -0
- package/dist/codec.js +477 -0
- package/dist/codec.js.map +1 -0
- package/dist/config.d.ts +102 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +454 -0
- package/dist/config.js.map +1 -0
- package/dist/contract/identity.d.ts +115 -0
- package/dist/contract/identity.d.ts.map +1 -0
- package/dist/contract/identity.js +188 -0
- package/dist/contract/identity.js.map +1 -0
- package/dist/contract/manifest.d.ts +77 -0
- package/dist/contract/manifest.d.ts.map +1 -0
- package/dist/contract/manifest.js +127 -0
- package/dist/contract/manifest.js.map +1 -0
- package/dist/contract/publication.d.ts +71 -0
- package/dist/contract/publication.d.ts.map +1 -0
- package/dist/contract/publication.js +85 -0
- package/dist/contract/publication.js.map +1 -0
- package/dist/decorators.d.ts +139 -0
- package/dist/decorators.d.ts.map +1 -0
- package/dist/decorators.js +175 -0
- package/dist/decorators.js.map +1 -0
- package/dist/dynamic.d.ts +61 -0
- package/dist/dynamic.d.ts.map +1 -0
- package/dist/dynamic.js +147 -0
- package/dist/dynamic.js.map +1 -0
- package/dist/framing.d.ts +74 -0
- package/dist/framing.d.ts.map +1 -0
- package/dist/framing.js +162 -0
- package/dist/framing.js.map +1 -0
- package/dist/health.d.ts +127 -0
- package/dist/health.d.ts.map +1 -0
- package/dist/health.js +236 -0
- package/dist/health.js.map +1 -0
- package/dist/index.d.ts +67 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +101 -0
- package/dist/index.js.map +1 -0
- package/dist/interceptors/audit.d.ts +25 -0
- package/dist/interceptors/audit.d.ts.map +1 -0
- package/dist/interceptors/audit.js +46 -0
- package/dist/interceptors/audit.js.map +1 -0
- package/dist/interceptors/auth.d.ts +13 -0
- package/dist/interceptors/auth.d.ts.map +1 -0
- package/dist/interceptors/auth.js +34 -0
- package/dist/interceptors/auth.js.map +1 -0
- package/dist/interceptors/base.d.ts +74 -0
- package/dist/interceptors/base.d.ts.map +1 -0
- package/dist/interceptors/base.js +103 -0
- package/dist/interceptors/base.js.map +1 -0
- package/dist/interceptors/capability.d.ts +16 -0
- package/dist/interceptors/capability.d.ts.map +1 -0
- package/dist/interceptors/capability.js +63 -0
- package/dist/interceptors/capability.js.map +1 -0
- package/dist/interceptors/circuit-breaker.d.ts +40 -0
- package/dist/interceptors/circuit-breaker.d.ts.map +1 -0
- package/dist/interceptors/circuit-breaker.js +91 -0
- package/dist/interceptors/circuit-breaker.js.map +1 -0
- package/dist/interceptors/compression.d.ts +11 -0
- package/dist/interceptors/compression.d.ts.map +1 -0
- package/dist/interceptors/compression.js +12 -0
- package/dist/interceptors/compression.js.map +1 -0
- package/dist/interceptors/deadline.d.ts +12 -0
- package/dist/interceptors/deadline.d.ts.map +1 -0
- package/dist/interceptors/deadline.js +28 -0
- package/dist/interceptors/deadline.js.map +1 -0
- package/dist/interceptors/metrics.d.ts +43 -0
- package/dist/interceptors/metrics.d.ts.map +1 -0
- package/dist/interceptors/metrics.js +132 -0
- package/dist/interceptors/metrics.js.map +1 -0
- package/dist/interceptors/rate-limit.d.ts +24 -0
- package/dist/interceptors/rate-limit.d.ts.map +1 -0
- package/dist/interceptors/rate-limit.js +84 -0
- package/dist/interceptors/rate-limit.js.map +1 -0
- package/dist/interceptors/retry.d.ts +25 -0
- package/dist/interceptors/retry.d.ts.map +1 -0
- package/dist/interceptors/retry.js +55 -0
- package/dist/interceptors/retry.js.map +1 -0
- package/dist/limits.d.ts +77 -0
- package/dist/limits.d.ts.map +1 -0
- package/dist/limits.js +137 -0
- package/dist/limits.js.map +1 -0
- package/dist/logging.d.ts +40 -0
- package/dist/logging.d.ts.map +1 -0
- package/dist/logging.js +92 -0
- package/dist/logging.js.map +1 -0
- package/dist/metadata.d.ts +14 -0
- package/dist/metadata.d.ts.map +1 -0
- package/dist/metadata.js +68 -0
- package/dist/metadata.js.map +1 -0
- package/dist/metrics.d.ts +40 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +92 -0
- package/dist/metrics.js.map +1 -0
- package/dist/peer-store.d.ts +53 -0
- package/dist/peer-store.d.ts.map +1 -0
- package/dist/peer-store.js +105 -0
- package/dist/peer-store.js.map +1 -0
- package/dist/protocol.d.ts +44 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +59 -0
- package/dist/protocol.js.map +1 -0
- package/dist/registration.d.ts +81 -0
- package/dist/registration.d.ts.map +1 -0
- package/dist/registration.js +161 -0
- package/dist/registration.js.map +1 -0
- package/dist/registry/acl.d.ts +57 -0
- package/dist/registry/acl.d.ts.map +1 -0
- package/dist/registry/acl.js +104 -0
- package/dist/registry/acl.js.map +1 -0
- package/dist/registry/client.d.ts +70 -0
- package/dist/registry/client.d.ts.map +1 -0
- package/dist/registry/client.js +115 -0
- package/dist/registry/client.js.map +1 -0
- package/dist/registry/gossip.d.ts +43 -0
- package/dist/registry/gossip.d.ts.map +1 -0
- package/dist/registry/gossip.js +102 -0
- package/dist/registry/gossip.js.map +1 -0
- package/dist/registry/keys.d.ts +25 -0
- package/dist/registry/keys.d.ts.map +1 -0
- package/dist/registry/keys.js +47 -0
- package/dist/registry/keys.js.map +1 -0
- package/dist/registry/models.d.ts +80 -0
- package/dist/registry/models.d.ts.map +1 -0
- package/dist/registry/models.js +35 -0
- package/dist/registry/models.js.map +1 -0
- package/dist/registry/publisher.d.ts +65 -0
- package/dist/registry/publisher.d.ts.map +1 -0
- package/dist/registry/publisher.js +164 -0
- package/dist/registry/publisher.js.map +1 -0
- package/dist/runtime.d.ts +267 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +1366 -0
- package/dist/runtime.js.map +1 -0
- package/dist/server.d.ts +100 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +511 -0
- package/dist/server.js.map +1 -0
- package/dist/service.d.ts +72 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/service.js +98 -0
- package/dist/service.js.map +1 -0
- package/dist/session.d.ts +64 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +350 -0
- package/dist/session.js.map +1 -0
- package/dist/status.d.ts +113 -0
- package/dist/status.d.ts.map +1 -0
- package/dist/status.js +206 -0
- package/dist/status.js.map +1 -0
- package/dist/transport/base.d.ts +46 -0
- package/dist/transport/base.d.ts.map +1 -0
- package/dist/transport/base.js +10 -0
- package/dist/transport/base.js.map +1 -0
- package/dist/transport/iroh.d.ts +45 -0
- package/dist/transport/iroh.d.ts.map +1 -0
- package/dist/transport/iroh.js +225 -0
- package/dist/transport/iroh.js.map +1 -0
- package/dist/transport/local.d.ts +48 -0
- package/dist/transport/local.d.ts.map +1 -0
- package/dist/transport/local.js +139 -0
- package/dist/transport/local.js.map +1 -0
- package/dist/trust/admission.d.ts +60 -0
- package/dist/trust/admission.d.ts.map +1 -0
- package/dist/trust/admission.js +149 -0
- package/dist/trust/admission.js.map +1 -0
- package/dist/trust/bootstrap.d.ts +109 -0
- package/dist/trust/bootstrap.d.ts.map +1 -0
- package/dist/trust/bootstrap.js +311 -0
- package/dist/trust/bootstrap.js.map +1 -0
- package/dist/trust/clock.d.ts +93 -0
- package/dist/trust/clock.d.ts.map +1 -0
- package/dist/trust/clock.js +154 -0
- package/dist/trust/clock.js.map +1 -0
- package/dist/trust/consumer.d.ts +139 -0
- package/dist/trust/consumer.d.ts.map +1 -0
- package/dist/trust/consumer.js +323 -0
- package/dist/trust/consumer.js.map +1 -0
- package/dist/trust/credentials.d.ts +98 -0
- package/dist/trust/credentials.d.ts.map +1 -0
- package/dist/trust/credentials.js +250 -0
- package/dist/trust/credentials.js.map +1 -0
- package/dist/trust/delegated.d.ts +118 -0
- package/dist/trust/delegated.d.ts.map +1 -0
- package/dist/trust/delegated.js +292 -0
- package/dist/trust/delegated.js.map +1 -0
- package/dist/trust/gossip.d.ts +146 -0
- package/dist/trust/gossip.d.ts.map +1 -0
- package/dist/trust/gossip.js +334 -0
- package/dist/trust/gossip.js.map +1 -0
- package/dist/trust/hooks.d.ts +84 -0
- package/dist/trust/hooks.d.ts.map +1 -0
- package/dist/trust/hooks.js +125 -0
- package/dist/trust/hooks.js.map +1 -0
- package/dist/trust/iid.d.ts +65 -0
- package/dist/trust/iid.d.ts.map +1 -0
- package/dist/trust/iid.js +104 -0
- package/dist/trust/iid.js.map +1 -0
- package/dist/trust/mesh.d.ts +43 -0
- package/dist/trust/mesh.d.ts.map +1 -0
- package/dist/trust/mesh.js +105 -0
- package/dist/trust/mesh.js.map +1 -0
- package/dist/trust/nonce.d.ts +39 -0
- package/dist/trust/nonce.d.ts.map +1 -0
- package/dist/trust/nonce.js +46 -0
- package/dist/trust/nonce.js.map +1 -0
- package/dist/trust/producer.d.ts +80 -0
- package/dist/trust/producer.d.ts.map +1 -0
- package/dist/trust/producer.js +151 -0
- package/dist/trust/producer.js.map +1 -0
- package/dist/trust/rcan.d.ts +29 -0
- package/dist/trust/rcan.d.ts.map +1 -0
- package/dist/trust/rcan.js +57 -0
- package/dist/trust/rcan.js.map +1 -0
- package/dist/types.d.ts +57 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +50 -0
- package/dist/types.js.map +1 -0
- package/dist/xlang.d.ts +26 -0
- package/dist/xlang.d.ts.map +1 -0
- package/dist/xlang.js +55 -0
- package/dist/xlang.js.map +1 -0
- package/package.json +59 -0
package/dist/status.js
ADDED
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Aster RPC status codes and error hierarchy.
|
|
3
|
+
*
|
|
4
|
+
* Spec reference: S6.5 (status codes).
|
|
5
|
+
*
|
|
6
|
+
* Codes 0-16 mirror gRPC's google.rpc.Code semantically. Codes 100+
|
|
7
|
+
* are Aster-native and have no gRPC equivalent. The 17-99 range is
|
|
8
|
+
* reserved as a buffer in case gRPC ever extends its enum.
|
|
9
|
+
*
|
|
10
|
+
* A common gripe with gRPC's status codes is that there are too few
|
|
11
|
+
* to express the variety of failures real services actually hit.
|
|
12
|
+
* The 100+ space gives Aster room to mint more precise codes over
|
|
13
|
+
* time, signalling clearly that they are intentionally separate
|
|
14
|
+
* from the gRPC vocabulary.
|
|
15
|
+
*/
|
|
16
|
+
export const StatusCode = {
|
|
17
|
+
// gRPC-mirrored codes (0-16)
|
|
18
|
+
OK: 0,
|
|
19
|
+
CANCELLED: 1,
|
|
20
|
+
UNKNOWN: 2,
|
|
21
|
+
INVALID_ARGUMENT: 3,
|
|
22
|
+
DEADLINE_EXCEEDED: 4,
|
|
23
|
+
NOT_FOUND: 5,
|
|
24
|
+
ALREADY_EXISTS: 6,
|
|
25
|
+
PERMISSION_DENIED: 7,
|
|
26
|
+
RESOURCE_EXHAUSTED: 8,
|
|
27
|
+
FAILED_PRECONDITION: 9,
|
|
28
|
+
ABORTED: 10,
|
|
29
|
+
OUT_OF_RANGE: 11,
|
|
30
|
+
UNIMPLEMENTED: 12,
|
|
31
|
+
INTERNAL: 13,
|
|
32
|
+
UNAVAILABLE: 14,
|
|
33
|
+
DATA_LOSS: 15,
|
|
34
|
+
UNAUTHENTICATED: 16,
|
|
35
|
+
// 17-99 reserved (gRPC extension buffer)
|
|
36
|
+
// Aster-native codes (100+)
|
|
37
|
+
/**
|
|
38
|
+
* The wire payload doesn't match the published contract: e.g. the
|
|
39
|
+
* JSON dict has fields the receiver's @WireType class doesn't
|
|
40
|
+
* declare, or vice versa. Distinct from INVALID_ARGUMENT because
|
|
41
|
+
* the violation is about data SHAPE, not value, and shape
|
|
42
|
+
* violations can occur at any nesting depth (a top-level
|
|
43
|
+
* INVALID_ARGUMENT label doesn't apply when the bad field is two
|
|
44
|
+
* objects deep). The producer owns the contract; consumers must
|
|
45
|
+
* use the field names defined by the producer's manifest.
|
|
46
|
+
*/
|
|
47
|
+
CONTRACT_VIOLATION: 101,
|
|
48
|
+
};
|
|
49
|
+
/** Human-readable name for a status code. */
|
|
50
|
+
const STATUS_NAMES = {
|
|
51
|
+
0: 'OK', 1: 'CANCELLED', 2: 'UNKNOWN', 3: 'INVALID_ARGUMENT',
|
|
52
|
+
4: 'DEADLINE_EXCEEDED', 5: 'NOT_FOUND', 6: 'ALREADY_EXISTS',
|
|
53
|
+
7: 'PERMISSION_DENIED', 8: 'RESOURCE_EXHAUSTED', 9: 'FAILED_PRECONDITION',
|
|
54
|
+
10: 'ABORTED', 11: 'OUT_OF_RANGE', 12: 'UNIMPLEMENTED', 13: 'INTERNAL',
|
|
55
|
+
14: 'UNAVAILABLE', 15: 'DATA_LOSS', 16: 'UNAUTHENTICATED',
|
|
56
|
+
101: 'CONTRACT_VIOLATION',
|
|
57
|
+
};
|
|
58
|
+
export function statusName(code) {
|
|
59
|
+
return STATUS_NAMES[code] ?? `UNKNOWN(${code})`;
|
|
60
|
+
}
|
|
61
|
+
/** Base error class for Aster RPC errors. */
|
|
62
|
+
export class RpcError extends Error {
|
|
63
|
+
code;
|
|
64
|
+
details;
|
|
65
|
+
constructor(code, message = '', details) {
|
|
66
|
+
super(`[${statusName(code)}] ${message}`);
|
|
67
|
+
this.name = 'RpcError';
|
|
68
|
+
this.code = code;
|
|
69
|
+
this.details = details ?? {};
|
|
70
|
+
}
|
|
71
|
+
/** Create the most specific RpcError subclass for a status code. */
|
|
72
|
+
static fromStatus(code, message = '', details) {
|
|
73
|
+
const ErrorClass = RPC_ERROR_TYPES.get(code);
|
|
74
|
+
if (ErrorClass)
|
|
75
|
+
return new ErrorClass(message, details);
|
|
76
|
+
return new RpcError(code, message, details);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
export class CancelledError extends RpcError {
|
|
80
|
+
constructor(message = '', details) {
|
|
81
|
+
super(StatusCode.CANCELLED, message, details);
|
|
82
|
+
this.name = 'CancelledError';
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
export class UnknownRpcError extends RpcError {
|
|
86
|
+
constructor(message = '', details) {
|
|
87
|
+
super(StatusCode.UNKNOWN, message, details);
|
|
88
|
+
this.name = 'UnknownRpcError';
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
export class InvalidArgumentError extends RpcError {
|
|
92
|
+
constructor(message = '', details) {
|
|
93
|
+
super(StatusCode.INVALID_ARGUMENT, message, details);
|
|
94
|
+
this.name = 'InvalidArgumentError';
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
export class DeadlineExceededError extends RpcError {
|
|
98
|
+
constructor(message = '', details) {
|
|
99
|
+
super(StatusCode.DEADLINE_EXCEEDED, message, details);
|
|
100
|
+
this.name = 'DeadlineExceededError';
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
export class NotFoundError extends RpcError {
|
|
104
|
+
constructor(message = '', details) {
|
|
105
|
+
super(StatusCode.NOT_FOUND, message, details);
|
|
106
|
+
this.name = 'NotFoundError';
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
export class AlreadyExistsError extends RpcError {
|
|
110
|
+
constructor(message = '', details) {
|
|
111
|
+
super(StatusCode.ALREADY_EXISTS, message, details);
|
|
112
|
+
this.name = 'AlreadyExistsError';
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
export class PermissionDeniedError extends RpcError {
|
|
116
|
+
constructor(message = '', details) {
|
|
117
|
+
super(StatusCode.PERMISSION_DENIED, message, details);
|
|
118
|
+
this.name = 'PermissionDeniedError';
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
export class ResourceExhaustedError extends RpcError {
|
|
122
|
+
constructor(message = '', details) {
|
|
123
|
+
super(StatusCode.RESOURCE_EXHAUSTED, message, details);
|
|
124
|
+
this.name = 'ResourceExhaustedError';
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
export class FailedPreconditionError extends RpcError {
|
|
128
|
+
constructor(message = '', details) {
|
|
129
|
+
super(StatusCode.FAILED_PRECONDITION, message, details);
|
|
130
|
+
this.name = 'FailedPreconditionError';
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
export class AbortedError extends RpcError {
|
|
134
|
+
constructor(message = '', details) {
|
|
135
|
+
super(StatusCode.ABORTED, message, details);
|
|
136
|
+
this.name = 'AbortedError';
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
export class OutOfRangeError extends RpcError {
|
|
140
|
+
constructor(message = '', details) {
|
|
141
|
+
super(StatusCode.OUT_OF_RANGE, message, details);
|
|
142
|
+
this.name = 'OutOfRangeError';
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
export class UnimplementedError extends RpcError {
|
|
146
|
+
constructor(message = '', details) {
|
|
147
|
+
super(StatusCode.UNIMPLEMENTED, message, details);
|
|
148
|
+
this.name = 'UnimplementedError';
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
export class InternalError extends RpcError {
|
|
152
|
+
constructor(message = '', details) {
|
|
153
|
+
super(StatusCode.INTERNAL, message, details);
|
|
154
|
+
this.name = 'InternalError';
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
export class UnavailableError extends RpcError {
|
|
158
|
+
constructor(message = '', details) {
|
|
159
|
+
super(StatusCode.UNAVAILABLE, message, details);
|
|
160
|
+
this.name = 'UnavailableError';
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
export class DataLossError extends RpcError {
|
|
164
|
+
constructor(message = '', details) {
|
|
165
|
+
super(StatusCode.DATA_LOSS, message, details);
|
|
166
|
+
this.name = 'DataLossError';
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
export class UnauthenticatedError extends RpcError {
|
|
170
|
+
constructor(message = '', details) {
|
|
171
|
+
super(StatusCode.UNAUTHENTICATED, message, details);
|
|
172
|
+
this.name = 'UnauthenticatedError';
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Raised when the wire payload doesn't match the published contract.
|
|
177
|
+
*
|
|
178
|
+
* Carries the offending field names in `details.unexpected_fields`
|
|
179
|
+
* (comma-separated, repr-sanitized).
|
|
180
|
+
*/
|
|
181
|
+
export class ContractViolationError extends RpcError {
|
|
182
|
+
constructor(message = '', details) {
|
|
183
|
+
super(StatusCode.CONTRACT_VIOLATION, message, details);
|
|
184
|
+
this.name = 'ContractViolationError';
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
const RPC_ERROR_TYPES = new Map([
|
|
188
|
+
[StatusCode.CANCELLED, CancelledError],
|
|
189
|
+
[StatusCode.UNKNOWN, UnknownRpcError],
|
|
190
|
+
[StatusCode.INVALID_ARGUMENT, InvalidArgumentError],
|
|
191
|
+
[StatusCode.DEADLINE_EXCEEDED, DeadlineExceededError],
|
|
192
|
+
[StatusCode.NOT_FOUND, NotFoundError],
|
|
193
|
+
[StatusCode.ALREADY_EXISTS, AlreadyExistsError],
|
|
194
|
+
[StatusCode.PERMISSION_DENIED, PermissionDeniedError],
|
|
195
|
+
[StatusCode.RESOURCE_EXHAUSTED, ResourceExhaustedError],
|
|
196
|
+
[StatusCode.FAILED_PRECONDITION, FailedPreconditionError],
|
|
197
|
+
[StatusCode.ABORTED, AbortedError],
|
|
198
|
+
[StatusCode.OUT_OF_RANGE, OutOfRangeError],
|
|
199
|
+
[StatusCode.UNIMPLEMENTED, UnimplementedError],
|
|
200
|
+
[StatusCode.INTERNAL, InternalError],
|
|
201
|
+
[StatusCode.UNAVAILABLE, UnavailableError],
|
|
202
|
+
[StatusCode.DATA_LOSS, DataLossError],
|
|
203
|
+
[StatusCode.UNAUTHENTICATED, UnauthenticatedError],
|
|
204
|
+
[StatusCode.CONTRACT_VIOLATION, ContractViolationError],
|
|
205
|
+
]);
|
|
206
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transport interface and BidiChannel.
|
|
3
|
+
*
|
|
4
|
+
* The Transport interface is the abstraction point for different backends:
|
|
5
|
+
* - IrohTransport: NAPI-RS, direct QUIC (Phase 4)
|
|
6
|
+
* - LocalTransport: in-process, for testing (Phase 3)
|
|
7
|
+
* - IrohWasmTransport: wasm-bindgen, relay-only (future Phase 8)
|
|
8
|
+
*/
|
|
9
|
+
import type { StatusCode } from '../status.js';
|
|
10
|
+
/** Options for a single RPC call. */
|
|
11
|
+
export interface CallOptions {
|
|
12
|
+
metadata?: Record<string, string>;
|
|
13
|
+
deadlineEpochMs?: number;
|
|
14
|
+
serializationMode?: number;
|
|
15
|
+
callId?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Aster RPC transport — the wire-level interface that all transports implement.
|
|
19
|
+
*
|
|
20
|
+
* The server and client layers use this interface to send/receive RPC calls.
|
|
21
|
+
* The transport handles framing, stream management, and serialization.
|
|
22
|
+
*/
|
|
23
|
+
export interface AsterTransport {
|
|
24
|
+
/** Perform a unary RPC call. */
|
|
25
|
+
unary(service: string, method: string, request: unknown, opts?: CallOptions): Promise<unknown>;
|
|
26
|
+
/** Initiate a server-streaming call. Returns an async iterable of responses. */
|
|
27
|
+
serverStream(service: string, method: string, request: unknown, opts?: CallOptions): AsyncIterable<unknown>;
|
|
28
|
+
/** Perform a client-streaming call. Sends items, returns single response. */
|
|
29
|
+
clientStream(service: string, method: string, requests: AsyncIterable<unknown>, opts?: CallOptions): Promise<unknown>;
|
|
30
|
+
/** Initiate a bidirectional-streaming call. */
|
|
31
|
+
bidiStream(service: string, method: string, opts?: CallOptions): BidiChannel;
|
|
32
|
+
/** Close the transport. */
|
|
33
|
+
close(): Promise<void>;
|
|
34
|
+
}
|
|
35
|
+
/** Bidirectional streaming channel. */
|
|
36
|
+
export interface BidiChannel {
|
|
37
|
+
/** Send a message on the channel. */
|
|
38
|
+
send(msg: unknown): Promise<void>;
|
|
39
|
+
/** Receive messages as an async iterable. */
|
|
40
|
+
[Symbol.asyncIterator](): AsyncIterator<unknown>;
|
|
41
|
+
/** Close the sending side. */
|
|
42
|
+
close(): Promise<void>;
|
|
43
|
+
/** Wait for the trailing status frame. */
|
|
44
|
+
waitForTrailer(): Promise<[code: StatusCode, message: string]>;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/transport/base.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,qCAAqC;AACrC,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,gCAAgC;IAChC,KAAK,CACH,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,gFAAgF;IAChF,YAAY,CACV,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE,WAAW,GACjB,aAAa,CAAC,OAAO,CAAC,CAAC;IAE1B,6EAA6E;IAC7E,YAAY,CACV,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,EAChC,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,+CAA+C;IAC/C,UAAU,CACR,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,WAAW,GACjB,WAAW,CAAC;IAEf,2BAA2B;IAC3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,uCAAuC;AACvC,MAAM,WAAW,WAAW;IAC1B,qCAAqC;IACrC,IAAI,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElC,6CAA6C;IAC7C,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;IAEjD,8BAA8B;IAC9B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB,0CAA0C;IAC1C,cAAc,IAAI,OAAO,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;CAChE"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transport interface and BidiChannel.
|
|
3
|
+
*
|
|
4
|
+
* The Transport interface is the abstraction point for different backends:
|
|
5
|
+
* - IrohTransport: NAPI-RS, direct QUIC (Phase 4)
|
|
6
|
+
* - LocalTransport: in-process, for testing (Phase 3)
|
|
7
|
+
* - IrohWasmTransport: wasm-bindgen, relay-only (future Phase 8)
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/transport/base.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IrohTransport — Transport implementation over real QUIC streams.
|
|
3
|
+
*
|
|
4
|
+
* Each RPC call opens a bidirectional QUIC stream, sends the StreamHeader
|
|
5
|
+
* frame, then performs the appropriate read/write sequence for the pattern.
|
|
6
|
+
*
|
|
7
|
+
* Requires NAPI-RS native bindings (@aster-rpc/transport).
|
|
8
|
+
*/
|
|
9
|
+
import type { Codec } from '../codec.js';
|
|
10
|
+
import type { AsterTransport, CallOptions } from './base.js';
|
|
11
|
+
import type { BidiChannel } from './base.js';
|
|
12
|
+
/** QUIC connection interface (matches NAPI IrohConnection). */
|
|
13
|
+
interface QuicConnection {
|
|
14
|
+
openBi(): Promise<{
|
|
15
|
+
takeSend(): QuicSendStream;
|
|
16
|
+
takeRecv(): QuicRecvStream;
|
|
17
|
+
}>;
|
|
18
|
+
close(code: number, reason: string): void;
|
|
19
|
+
}
|
|
20
|
+
/** QUIC send stream interface (matches NAPI IrohSendStream). */
|
|
21
|
+
interface QuicSendStream {
|
|
22
|
+
writeAll(data: Uint8Array): Promise<void>;
|
|
23
|
+
finish(): Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
/** QUIC recv stream interface (matches NAPI IrohRecvStream). */
|
|
26
|
+
interface QuicRecvStream {
|
|
27
|
+
readExact(n: number): Promise<Uint8Array>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Transport implementation using Iroh QUIC streams.
|
|
31
|
+
*/
|
|
32
|
+
export declare class IrohTransport implements AsterTransport {
|
|
33
|
+
private conn;
|
|
34
|
+
private codec;
|
|
35
|
+
constructor(connection: QuicConnection, codec?: Codec);
|
|
36
|
+
unary(service: string, method: string, request: unknown, opts?: CallOptions): Promise<unknown>;
|
|
37
|
+
serverStream(service: string, method: string, request: unknown, opts?: CallOptions): AsyncIterable<unknown>;
|
|
38
|
+
clientStream(service: string, method: string, requests: AsyncIterable<unknown>, opts?: CallOptions): Promise<unknown>;
|
|
39
|
+
bidiStream(service: string, method: string, opts?: CallOptions): BidiChannel;
|
|
40
|
+
close(): Promise<void>;
|
|
41
|
+
private writeHeader;
|
|
42
|
+
private checkTrailer;
|
|
43
|
+
}
|
|
44
|
+
export {};
|
|
45
|
+
//# sourceMappingURL=iroh.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iroh.d.ts","sourceRoot":"","sources":["../../src/transport/iroh.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAWzC,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,+DAA+D;AAC/D,UAAU,cAAc;IACtB,MAAM,IAAI,OAAO,CAAC;QAAE,QAAQ,IAAI,cAAc,CAAC;QAAC,QAAQ,IAAI,cAAc,CAAA;KAAE,CAAC,CAAC;IAC9E,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3C;AAED,gEAAgE;AAChE,UAAU,cAAc;IACtB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAED,gEAAgE;AAChE,UAAU,cAAc;IACtB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAC3C;AAQD;;GAEG;AACH,qBAAa,aAAc,YAAW,cAAc;IAClD,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,KAAK,CAAQ;gBAET,UAAU,EAAE,cAAc,EAAE,KAAK,CAAC,EAAE,KAAK;IAK/C,KAAK,CACT,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC,OAAO,CAAC;IAmCZ,YAAY,CACjB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE,WAAW,GACjB,aAAa,CAAC,OAAO,CAAC;IA6BnB,YAAY,CAChB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,EAChC,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC,OAAO,CAAC;IAmCnB,UAAU,CACR,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,WAAW,GACjB,WAAW;IAuER,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAMd,WAAW;IAqBzB,OAAO,CAAC,YAAY;CAWrB"}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IrohTransport — Transport implementation over real QUIC streams.
|
|
3
|
+
*
|
|
4
|
+
* Each RPC call opens a bidirectional QUIC stream, sends the StreamHeader
|
|
5
|
+
* frame, then performs the appropriate read/write sequence for the pattern.
|
|
6
|
+
*
|
|
7
|
+
* Requires NAPI-RS native bindings (@aster-rpc/transport).
|
|
8
|
+
*/
|
|
9
|
+
import { JsonCodec } from '../codec.js';
|
|
10
|
+
import { writeFrame, readFrame, HEADER, TRAILER, COMPRESSED, } from '../framing.js';
|
|
11
|
+
import { StreamHeader } from '../protocol.js';
|
|
12
|
+
import { StatusCode, RpcError } from '../status.js';
|
|
13
|
+
function buildMetadata(metadata) {
|
|
14
|
+
if (!metadata || Object.keys(metadata).length === 0)
|
|
15
|
+
return [[], []];
|
|
16
|
+
const keys = Object.keys(metadata);
|
|
17
|
+
return [keys, keys.map(k => metadata[k])];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Transport implementation using Iroh QUIC streams.
|
|
21
|
+
*/
|
|
22
|
+
export class IrohTransport {
|
|
23
|
+
conn;
|
|
24
|
+
codec;
|
|
25
|
+
constructor(connection, codec) {
|
|
26
|
+
this.conn = connection;
|
|
27
|
+
this.codec = codec ?? new JsonCodec();
|
|
28
|
+
}
|
|
29
|
+
async unary(service, method, request, opts) {
|
|
30
|
+
const bi = await this.conn.openBi();
|
|
31
|
+
const send = bi.takeSend();
|
|
32
|
+
const recv = bi.takeRecv();
|
|
33
|
+
try {
|
|
34
|
+
// Write StreamHeader
|
|
35
|
+
await this.writeHeader(send, service, method, opts);
|
|
36
|
+
// Write request
|
|
37
|
+
const [payload, compressed] = this.codec.encodeCompressed(request);
|
|
38
|
+
await writeFrame(send, payload, compressed ? COMPRESSED : 0);
|
|
39
|
+
await send.finish();
|
|
40
|
+
// Read response frames
|
|
41
|
+
let response = undefined;
|
|
42
|
+
while (true) {
|
|
43
|
+
const frame = await readFrame(recv, 0);
|
|
44
|
+
if (!frame)
|
|
45
|
+
throw new RpcError(StatusCode.UNAVAILABLE, 'stream ended before response');
|
|
46
|
+
const [data, flags] = frame;
|
|
47
|
+
if (flags & TRAILER) {
|
|
48
|
+
this.checkTrailer(data);
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
response = this.codec.decode(data);
|
|
52
|
+
}
|
|
53
|
+
return response;
|
|
54
|
+
}
|
|
55
|
+
catch (e) {
|
|
56
|
+
throw mapTransportError(e);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async *serverStream(service, method, request, opts) {
|
|
60
|
+
const bi = await this.conn.openBi();
|
|
61
|
+
const send = bi.takeSend();
|
|
62
|
+
const recv = bi.takeRecv();
|
|
63
|
+
try {
|
|
64
|
+
await this.writeHeader(send, service, method, opts);
|
|
65
|
+
const [payload, compressed] = this.codec.encodeCompressed(request);
|
|
66
|
+
await writeFrame(send, payload, compressed ? COMPRESSED : 0);
|
|
67
|
+
await send.finish();
|
|
68
|
+
while (true) {
|
|
69
|
+
const frame = await readFrame(recv, 0);
|
|
70
|
+
if (!frame)
|
|
71
|
+
throw new RpcError(StatusCode.UNAVAILABLE, 'stream ended before trailer');
|
|
72
|
+
const [data, flags] = frame;
|
|
73
|
+
if (flags & TRAILER) {
|
|
74
|
+
this.checkTrailer(data);
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
yield this.codec.decode(data);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
catch (e) {
|
|
81
|
+
throw mapTransportError(e);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
async clientStream(service, method, requests, opts) {
|
|
85
|
+
const bi = await this.conn.openBi();
|
|
86
|
+
const send = bi.takeSend();
|
|
87
|
+
const recv = bi.takeRecv();
|
|
88
|
+
try {
|
|
89
|
+
await this.writeHeader(send, service, method, opts);
|
|
90
|
+
for await (const req of requests) {
|
|
91
|
+
const [payload, compressed] = this.codec.encodeCompressed(req);
|
|
92
|
+
await writeFrame(send, payload, compressed ? COMPRESSED : 0);
|
|
93
|
+
}
|
|
94
|
+
await send.finish();
|
|
95
|
+
// Read single response + trailer
|
|
96
|
+
let response = undefined;
|
|
97
|
+
while (true) {
|
|
98
|
+
const frame = await readFrame(recv, 0);
|
|
99
|
+
if (!frame)
|
|
100
|
+
throw new RpcError(StatusCode.UNAVAILABLE, 'stream ended before response');
|
|
101
|
+
const [data, flags] = frame;
|
|
102
|
+
if (flags & TRAILER) {
|
|
103
|
+
this.checkTrailer(data);
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
response = this.codec.decode(data);
|
|
107
|
+
}
|
|
108
|
+
return response;
|
|
109
|
+
}
|
|
110
|
+
catch (e) {
|
|
111
|
+
throw mapTransportError(e);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
bidiStream(service, method, opts) {
|
|
115
|
+
const codec = this.codec;
|
|
116
|
+
const conn = this.conn;
|
|
117
|
+
const writeHeader = this.writeHeader.bind(this);
|
|
118
|
+
const checkTrailer = this.checkTrailer.bind(this);
|
|
119
|
+
// Open the stream eagerly but return a channel object
|
|
120
|
+
let sendStream;
|
|
121
|
+
let recvStream;
|
|
122
|
+
let streamReady;
|
|
123
|
+
let receiveDone = false;
|
|
124
|
+
streamReady = (async () => {
|
|
125
|
+
const bi = await conn.openBi();
|
|
126
|
+
sendStream = bi.takeSend();
|
|
127
|
+
recvStream = bi.takeRecv();
|
|
128
|
+
await writeHeader(sendStream, service, method, opts);
|
|
129
|
+
})();
|
|
130
|
+
const channel = {
|
|
131
|
+
async send(msg) {
|
|
132
|
+
await streamReady;
|
|
133
|
+
const [payload, compressed] = codec.encodeCompressed(msg);
|
|
134
|
+
await writeFrame(sendStream, payload, compressed ? COMPRESSED : 0);
|
|
135
|
+
},
|
|
136
|
+
async *[Symbol.asyncIterator]() {
|
|
137
|
+
await streamReady;
|
|
138
|
+
while (!receiveDone) {
|
|
139
|
+
try {
|
|
140
|
+
const frame = await readFrame(recvStream, 0);
|
|
141
|
+
if (!frame) {
|
|
142
|
+
receiveDone = true;
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
const [data, flags] = frame;
|
|
146
|
+
if (flags & TRAILER) {
|
|
147
|
+
checkTrailer(data);
|
|
148
|
+
receiveDone = true;
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
yield codec.decode(data);
|
|
152
|
+
}
|
|
153
|
+
catch (e) {
|
|
154
|
+
receiveDone = true;
|
|
155
|
+
throw mapTransportError(e);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
async close() {
|
|
160
|
+
await streamReady;
|
|
161
|
+
await sendStream.finish();
|
|
162
|
+
},
|
|
163
|
+
async waitForTrailer() {
|
|
164
|
+
await streamReady;
|
|
165
|
+
// Drain remaining frames until trailer
|
|
166
|
+
while (!receiveDone) {
|
|
167
|
+
const frame = await readFrame(recvStream, 0);
|
|
168
|
+
if (!frame)
|
|
169
|
+
return [StatusCode.OK, ''];
|
|
170
|
+
const [data, flags] = frame;
|
|
171
|
+
if (flags & TRAILER) {
|
|
172
|
+
if (data.length === 0)
|
|
173
|
+
return [StatusCode.OK, ''];
|
|
174
|
+
const status = codec.decode(data);
|
|
175
|
+
return [status.code, status.message];
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return [StatusCode.OK, ''];
|
|
179
|
+
},
|
|
180
|
+
};
|
|
181
|
+
return channel;
|
|
182
|
+
}
|
|
183
|
+
async close() {
|
|
184
|
+
this.conn.close(0, 'normal close');
|
|
185
|
+
}
|
|
186
|
+
// -- Helpers ----------------------------------------------------------------
|
|
187
|
+
async writeHeader(send, service, method, opts) {
|
|
188
|
+
const [keys, values] = buildMetadata(opts?.metadata);
|
|
189
|
+
const header = new StreamHeader({
|
|
190
|
+
service,
|
|
191
|
+
method,
|
|
192
|
+
version: 1,
|
|
193
|
+
callId: opts?.callId ?? crypto.randomUUID(),
|
|
194
|
+
deadlineEpochMs: opts?.deadlineEpochMs ?? 0,
|
|
195
|
+
serializationMode: opts?.serializationMode ?? (this.codec instanceof JsonCodec ? 3 : 0),
|
|
196
|
+
metadataKeys: keys,
|
|
197
|
+
metadataValues: values,
|
|
198
|
+
});
|
|
199
|
+
const headerBytes = this.codec.encode(header);
|
|
200
|
+
await writeFrame(send, headerBytes, HEADER);
|
|
201
|
+
}
|
|
202
|
+
checkTrailer(data) {
|
|
203
|
+
if (data.length === 0)
|
|
204
|
+
return; // empty trailer = OK
|
|
205
|
+
const status = this.codec.decode(data);
|
|
206
|
+
if (status.code !== StatusCode.OK) {
|
|
207
|
+
throw RpcError.fromStatus(status.code, status.message, status.details);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
const RESET_KEYWORDS = ['reset', 'connection closed', 'connection lost'];
|
|
212
|
+
function mapTransportError(e) {
|
|
213
|
+
if (e instanceof RpcError)
|
|
214
|
+
return e;
|
|
215
|
+
if (e instanceof Error) {
|
|
216
|
+
const msg = e.message.toLowerCase();
|
|
217
|
+
if (RESET_KEYWORDS.some(kw => msg.includes(kw))) {
|
|
218
|
+
return new RpcError(StatusCode.UNAVAILABLE, `stream reset: ${e.message}`);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
if (e instanceof Error)
|
|
222
|
+
return new RpcError(StatusCode.UNKNOWN, e.message);
|
|
223
|
+
return new RpcError(StatusCode.UNKNOWN, String(e));
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=iroh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iroh.js","sourceRoot":"","sources":["../../src/transport/iroh.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LocalTransport — in-process transport for testing.
|
|
3
|
+
*
|
|
4
|
+
* Executes RPC calls directly against a ServiceRegistry without
|
|
5
|
+
* network I/O or serialization. Useful for unit testing service logic.
|
|
6
|
+
*/
|
|
7
|
+
import type { ServiceRegistry } from '../service.js';
|
|
8
|
+
import type { AsterTransport, CallOptions, BidiChannel } from './base.js';
|
|
9
|
+
/**
|
|
10
|
+
* In-memory receive stream for testing.
|
|
11
|
+
* Wraps a pre-filled buffer and exposes a read() interface.
|
|
12
|
+
*/
|
|
13
|
+
export declare class MemRecvStream {
|
|
14
|
+
private data;
|
|
15
|
+
private pos;
|
|
16
|
+
constructor(data: Uint8Array);
|
|
17
|
+
/**
|
|
18
|
+
* Read up to n bytes. Returns null at EOF.
|
|
19
|
+
*/
|
|
20
|
+
read(n: number): Uint8Array | null;
|
|
21
|
+
readExact(n: number): Promise<Uint8Array>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* In-process transport that dispatches directly to registered services.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```ts
|
|
28
|
+
* const registry = new ServiceRegistry();
|
|
29
|
+
* registry.register(new EchoService());
|
|
30
|
+
* const transport = new LocalTransport(registry);
|
|
31
|
+
*
|
|
32
|
+
* const result = await transport.unary("Echo", "echo", { message: "hi" });
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare class LocalTransport implements AsterTransport {
|
|
36
|
+
private registry;
|
|
37
|
+
constructor(registry: ServiceRegistry);
|
|
38
|
+
unary(service: string, method: string, request: unknown, _opts?: CallOptions): Promise<unknown>;
|
|
39
|
+
serverStream(service: string, method: string, request: unknown, _opts?: CallOptions): AsyncIterable<unknown>;
|
|
40
|
+
clientStream(service: string, method: string, requests: AsyncIterable<unknown>, _opts?: CallOptions): Promise<unknown>;
|
|
41
|
+
bidiStream(service: string, method: string, _opts?: CallOptions): BidiChannel;
|
|
42
|
+
close(): Promise<void>;
|
|
43
|
+
/** The remote endpoint ID (always 'local' for in-process transport). */
|
|
44
|
+
get remoteId(): string;
|
|
45
|
+
private resolve;
|
|
46
|
+
private assertPattern;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=local.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../src/transport/local.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,eAAe,EAA2B,MAAM,eAAe,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE1E;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,GAAG,CAAK;gBAEJ,IAAI,EAAE,UAAU;IAI5B;;OAEG;IACH,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAO5B,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;CAMhD;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,cAAe,YAAW,cAAc;IACnD,OAAO,CAAC,QAAQ,CAAkB;gBAEtB,QAAQ,EAAE,eAAe;IAI/B,KAAK,CACT,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,KAAK,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,OAAO,CAAC;IAOZ,YAAY,CACjB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,KAAK,CAAC,EAAE,WAAW,GAClB,aAAa,CAAC,OAAO,CAAC;IAQnB,YAAY,CAChB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,EAChC,KAAK,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,OAAO,CAAC;IAOnB,UAAU,CACR,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,WAAW,GAClB,WAAW;IAwDR,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,wEAAwE;IACxE,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,OAAO,CAAC,OAAO;IAWf,OAAO,CAAC,aAAa;CAQtB"}
|