@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
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Capability requirement helpers for method-level access control.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```ts
|
|
6
|
+
* import { anyOf, allOf } from '@aster-rpc/aster';
|
|
7
|
+
*
|
|
8
|
+
* @Rpc({ requires: anyOf('ops.status', 'ops.admin') })
|
|
9
|
+
* async getStatus(req: StatusRequest): Promise<StatusResponse> { ... }
|
|
10
|
+
*
|
|
11
|
+
* @Rpc({ requires: allOf('ops.status', 'ops.admin') })
|
|
12
|
+
* async adminStatus(req: StatusRequest): Promise<StatusResponse> { ... }
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
import type { CapabilityRequirement } from './service.js';
|
|
16
|
+
/**
|
|
17
|
+
* Require ANY ONE of the listed roles (OR logic).
|
|
18
|
+
* The caller is admitted if they have at least one of the specified roles.
|
|
19
|
+
*/
|
|
20
|
+
export declare function anyOf(...roles: string[]): CapabilityRequirement;
|
|
21
|
+
/**
|
|
22
|
+
* Require ALL of the listed roles (AND logic).
|
|
23
|
+
* The caller is admitted only if they have every specified role.
|
|
24
|
+
*/
|
|
25
|
+
export declare function allOf(...roles: string[]): CapabilityRequirement;
|
|
26
|
+
//# sourceMappingURL=capabilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAE1D;;;GAGG;AACH,wBAAgB,KAAK,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,qBAAqB,CAE/D;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,qBAAqB,CAE/D"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Capability requirement helpers for method-level access control.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```ts
|
|
6
|
+
* import { anyOf, allOf } from '@aster-rpc/aster';
|
|
7
|
+
*
|
|
8
|
+
* @Rpc({ requires: anyOf('ops.status', 'ops.admin') })
|
|
9
|
+
* async getStatus(req: StatusRequest): Promise<StatusResponse> { ... }
|
|
10
|
+
*
|
|
11
|
+
* @Rpc({ requires: allOf('ops.status', 'ops.admin') })
|
|
12
|
+
* async adminStatus(req: StatusRequest): Promise<StatusResponse> { ... }
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Require ANY ONE of the listed roles (OR logic).
|
|
17
|
+
* The caller is admitted if they have at least one of the specified roles.
|
|
18
|
+
*/
|
|
19
|
+
export function anyOf(...roles) {
|
|
20
|
+
return { kind: 'any_of', roles };
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Require ALL of the listed roles (AND logic).
|
|
24
|
+
* The caller is admitted only if they have every specified role.
|
|
25
|
+
*/
|
|
26
|
+
export function allOf(...roles) {
|
|
27
|
+
return { kind: 'all_of', roles };
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=capabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH;;;GAGG;AACH,MAAM,UAAU,KAAK,CAAC,GAAG,KAAe;IACtC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACnC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,KAAK,CAAC,GAAG,KAAe;IACtC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACnC,CAAC"}
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client stub generation.
|
|
3
|
+
*
|
|
4
|
+
* Creates a typed client proxy from a @Service-decorated class.
|
|
5
|
+
* Uses JavaScript Proxy for method interception with full TypeScript
|
|
6
|
+
* type inference — calling `client.echo(req)` has the correct types.
|
|
7
|
+
*/
|
|
8
|
+
import type { AsterTransport, CallOptions } from './transport/base.js';
|
|
9
|
+
import { ServiceRegistry } from './service.js';
|
|
10
|
+
/**
|
|
11
|
+
* Typed service client wrapper — provides service metadata accessors
|
|
12
|
+
* alongside the proxy methods. Returned by createClient().
|
|
13
|
+
*/
|
|
14
|
+
export declare class ServiceClient<T extends object> {
|
|
15
|
+
readonly proxy: AsterClient<T>;
|
|
16
|
+
private readonly _name;
|
|
17
|
+
private readonly _version;
|
|
18
|
+
constructor(serviceClass: new (...args: any[]) => T, transport: AsterTransport, options?: ClientOptions);
|
|
19
|
+
/** The RPC service name. */
|
|
20
|
+
get serviceName(): string;
|
|
21
|
+
/** The RPC service version. */
|
|
22
|
+
get serviceVersion(): number;
|
|
23
|
+
}
|
|
24
|
+
/** Options for creating a client. */
|
|
25
|
+
export interface ClientOptions {
|
|
26
|
+
/** Default timeout in seconds for all calls. */
|
|
27
|
+
timeout?: number;
|
|
28
|
+
/** Default metadata for all calls. */
|
|
29
|
+
metadata?: Record<string, string>;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Type helper: extracts the client interface from a service class.
|
|
33
|
+
*
|
|
34
|
+
* For each @Rpc method `foo(req: A): Promise<B>`, the client has
|
|
35
|
+
* `foo(req: A, opts?: CallOptions): Promise<B>`.
|
|
36
|
+
*/
|
|
37
|
+
export type AsterClient<T> = {
|
|
38
|
+
[K in keyof T as T[K] extends (...args: any[]) => any ? K : never]: T[K] extends (...args: infer A) => infer R ? (...args: [...A, opts?: CallOptions]) => R : never;
|
|
39
|
+
} & {
|
|
40
|
+
/** Close the underlying transport. */
|
|
41
|
+
close(): Promise<void>;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Create a typed client from a @Service-decorated class.
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```ts
|
|
48
|
+
* const client = createClient(EchoService, transport);
|
|
49
|
+
* const result = await client.echo(new EchoRequest({ message: "hi" }));
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
/**
|
|
53
|
+
* Create a typed client backed by an in-process LocalTransport (for testing).
|
|
54
|
+
*/
|
|
55
|
+
export declare function createLocalClient<T extends new (...args: any[]) => any>(serviceClass: T, registry: ServiceRegistry, options?: ClientOptions): AsterClient<InstanceType<T>>;
|
|
56
|
+
/**
|
|
57
|
+
* Sleep for a given number of seconds (convenience for timeout tests).
|
|
58
|
+
*/
|
|
59
|
+
export declare function timeSleep(seconds: number): Promise<void>;
|
|
60
|
+
/**
|
|
61
|
+
* Build a CallOptions object with explicit timeout and metadata.
|
|
62
|
+
*/
|
|
63
|
+
export declare function timeouts(timeoutS: number, metadata?: Record<string, string>): CallOptions;
|
|
64
|
+
export declare function createClient<T extends new (...args: any[]) => any>(serviceClass: T, transport: AsterTransport, options?: ClientOptions): AsterClient<InstanceType<T>>;
|
|
65
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C;;;GAGG;AACH,qBAAa,aAAa,CAAC,CAAC,SAAS,MAAM;IACzC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,YAAY,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,aAAa;IAQvG,4BAA4B;IAC5B,IAAI,WAAW,IAAI,MAAM,CAAuB;IAEhD,+BAA+B;IAC/B,IAAI,cAAc,IAAI,MAAM,CAA0B;CACvD;AAED,qCAAqC;AACrC,MAAM,WAAW,aAAa;IAC5B,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED;;;;;GAKG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;KAC1B,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAAG,CAAC,GAAG,KAAK,GAC/D,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,KAAK,MAAM,CAAC,GACtC,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,GAC1C,KAAK;CACZ,GAAG;IACF,sCAAsC;IACtC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB,CAAC;AAEF;;;;;;;;GAQG;AACH;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACrE,YAAY,EAAE,CAAC,EACf,QAAQ,EAAE,eAAe,EACzB,OAAO,CAAC,EAAE,aAAa,GACtB,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAG9B;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9D;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,WAAW,CAKzF;AAED,wBAAgB,YAAY,CAAC,CAAC,SAAS,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAChE,YAAY,EAAE,CAAC,EACf,SAAS,EAAE,cAAc,EACzB,OAAO,CAAC,EAAE,aAAa,GACtB,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CA+D9B"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client stub generation.
|
|
3
|
+
*
|
|
4
|
+
* Creates a typed client proxy from a @Service-decorated class.
|
|
5
|
+
* Uses JavaScript Proxy for method interception with full TypeScript
|
|
6
|
+
* type inference — calling `client.echo(req)` has the correct types.
|
|
7
|
+
*/
|
|
8
|
+
import { RpcPattern } from './types.js';
|
|
9
|
+
import { RpcError, StatusCode } from './status.js';
|
|
10
|
+
import { getServiceInfo } from './service.js';
|
|
11
|
+
import { LocalTransport } from './transport/local.js';
|
|
12
|
+
/**
|
|
13
|
+
* Typed service client wrapper — provides service metadata accessors
|
|
14
|
+
* alongside the proxy methods. Returned by createClient().
|
|
15
|
+
*/
|
|
16
|
+
export class ServiceClient {
|
|
17
|
+
proxy;
|
|
18
|
+
_name;
|
|
19
|
+
_version;
|
|
20
|
+
constructor(serviceClass, transport, options) {
|
|
21
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
22
|
+
this.proxy = createClient(serviceClass, transport, options);
|
|
23
|
+
const info = getServiceInfo(serviceClass);
|
|
24
|
+
this._name = info?.name ?? serviceClass.name;
|
|
25
|
+
this._version = info?.version ?? 1;
|
|
26
|
+
}
|
|
27
|
+
/** The RPC service name. */
|
|
28
|
+
get serviceName() { return this._name; }
|
|
29
|
+
/** The RPC service version. */
|
|
30
|
+
get serviceVersion() { return this._version; }
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Create a typed client from a @Service-decorated class.
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```ts
|
|
37
|
+
* const client = createClient(EchoService, transport);
|
|
38
|
+
* const result = await client.echo(new EchoRequest({ message: "hi" }));
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
/**
|
|
42
|
+
* Create a typed client backed by an in-process LocalTransport (for testing).
|
|
43
|
+
*/
|
|
44
|
+
export function createLocalClient(serviceClass, registry, options) {
|
|
45
|
+
const transport = new LocalTransport(registry);
|
|
46
|
+
return createClient(serviceClass, transport, options);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Sleep for a given number of seconds (convenience for timeout tests).
|
|
50
|
+
*/
|
|
51
|
+
export async function timeSleep(seconds) {
|
|
52
|
+
return new Promise(resolve => setTimeout(resolve, seconds * 1000));
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Build a CallOptions object with explicit timeout and metadata.
|
|
56
|
+
*/
|
|
57
|
+
export function timeouts(timeoutS, metadata) {
|
|
58
|
+
return {
|
|
59
|
+
deadlineEpochMs: Date.now() + timeoutS * 1000,
|
|
60
|
+
metadata,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
export function createClient(serviceClass, transport, options) {
|
|
64
|
+
const serviceInfo = getServiceInfo(serviceClass);
|
|
65
|
+
if (!serviceInfo) {
|
|
66
|
+
throw new TypeError(`${serviceClass.name} is not decorated with @Service.`);
|
|
67
|
+
}
|
|
68
|
+
return new Proxy({}, {
|
|
69
|
+
get(_target, prop) {
|
|
70
|
+
if (prop === 'close') {
|
|
71
|
+
return () => transport.close();
|
|
72
|
+
}
|
|
73
|
+
if (typeof prop !== 'string')
|
|
74
|
+
return undefined;
|
|
75
|
+
const methodInfo = serviceInfo.methods.get(prop);
|
|
76
|
+
if (!methodInfo)
|
|
77
|
+
return undefined;
|
|
78
|
+
return (...args) => {
|
|
79
|
+
// Last arg might be CallOptions
|
|
80
|
+
let request = args[0];
|
|
81
|
+
let callOpts;
|
|
82
|
+
if (args.length > 1 && typeof args[args.length - 1] === 'object') {
|
|
83
|
+
callOpts = args[args.length - 1];
|
|
84
|
+
}
|
|
85
|
+
const opts = {
|
|
86
|
+
...callOpts,
|
|
87
|
+
metadata: { ...options?.metadata, ...callOpts?.metadata },
|
|
88
|
+
};
|
|
89
|
+
if (options?.timeout && !opts.deadlineEpochMs) {
|
|
90
|
+
opts.deadlineEpochMs = Date.now() + options.timeout * 1000;
|
|
91
|
+
}
|
|
92
|
+
switch (methodInfo.pattern) {
|
|
93
|
+
case RpcPattern.UNARY:
|
|
94
|
+
return transport.unary(serviceInfo.name, methodInfo.name, request, opts);
|
|
95
|
+
case RpcPattern.SERVER_STREAM:
|
|
96
|
+
return transport.serverStream(serviceInfo.name, methodInfo.name, request, opts);
|
|
97
|
+
case RpcPattern.CLIENT_STREAM:
|
|
98
|
+
return transport.clientStream(serviceInfo.name, methodInfo.name, request, opts);
|
|
99
|
+
case RpcPattern.BIDI_STREAM:
|
|
100
|
+
return transport.bidiStream(serviceInfo.name, methodInfo.name, opts);
|
|
101
|
+
default:
|
|
102
|
+
throw new RpcError(StatusCode.UNIMPLEMENTED, `Unknown pattern: ${methodInfo.pattern}`);
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
},
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/codec.d.ts
ADDED
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codec abstraction — serialization + optional zstd compression.
|
|
3
|
+
*
|
|
4
|
+
* Spec reference: S5.1 (serialization), S5.2 (compression)
|
|
5
|
+
*
|
|
6
|
+
* Provides:
|
|
7
|
+
* - JsonCodec: JSON over UTF-8 bytes (testing, development)
|
|
8
|
+
* - ForyCodec: @apache-fory/core XLANG (production cross-language)
|
|
9
|
+
* - Zstd compression for payloads > threshold
|
|
10
|
+
*/
|
|
11
|
+
import { WIRE_TYPE_KEY } from './decorators.js';
|
|
12
|
+
/** Default compression threshold in bytes (4 KiB). */
|
|
13
|
+
export declare const DEFAULT_COMPRESSION_THRESHOLD = 4096;
|
|
14
|
+
/** Re-export WIRE_TYPE_KEY as wireType for API compatibility. */
|
|
15
|
+
export { WIRE_TYPE_KEY as wireType };
|
|
16
|
+
/** Get the wire type tag from a @WireType-decorated class. */
|
|
17
|
+
export declare function getWireType(cls: unknown): string | undefined;
|
|
18
|
+
/** Generic codec interface for serialization/deserialization. */
|
|
19
|
+
export interface Codec {
|
|
20
|
+
encode(obj: unknown, hintType?: unknown): Uint8Array;
|
|
21
|
+
decode(payload: Uint8Array, hintType?: unknown): unknown;
|
|
22
|
+
encodeCompressed(obj: unknown): [data: Uint8Array, compressed: boolean];
|
|
23
|
+
decodeCompressed(payload: Uint8Array, compressed: boolean, hintType?: unknown): unknown;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Simple JSON codec for cross-language interop and development.
|
|
27
|
+
*
|
|
28
|
+
* Strict mode: when ``decode`` is called with a ``hintType`` argument
|
|
29
|
+
* (a @WireType-decorated class constructor), the codec validates that
|
|
30
|
+
* every key in the decoded object matches a field declared on the
|
|
31
|
+
* class. Unknown keys raise ``ContractViolationError`` -- the producer
|
|
32
|
+
* owns the contract, and consumers must use the field names defined
|
|
33
|
+
* by the producer's manifest. Validation walks nested objects and
|
|
34
|
+
* arrays recursively, so a bad field at any depth fails loudly.
|
|
35
|
+
*
|
|
36
|
+
* If ``hintType`` is omitted (or is ``null``/``undefined``), decoding
|
|
37
|
+
* is permissive and returns the raw parsed value -- the codec doesn't
|
|
38
|
+
* know what shape to enforce. Callers that need strict validation
|
|
39
|
+
* must always pass the expected type.
|
|
40
|
+
*/
|
|
41
|
+
export declare class JsonCodec implements Codec {
|
|
42
|
+
private encoder;
|
|
43
|
+
private decoder;
|
|
44
|
+
private threshold;
|
|
45
|
+
constructor(compressionThreshold?: number);
|
|
46
|
+
encode(obj: unknown): Uint8Array;
|
|
47
|
+
decode(payload: Uint8Array, hintType?: unknown): unknown;
|
|
48
|
+
encodeCompressed(obj: unknown): [Uint8Array, boolean];
|
|
49
|
+
decodeCompressed(payload: Uint8Array, compressed: boolean, hintType?: unknown): unknown;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Walk the type graph starting from root types, discovering nested @WireType
|
|
53
|
+
* classes by inspecting default values of instances.
|
|
54
|
+
*
|
|
55
|
+
* Returns all discovered types in dependency order (leaves first), suitable
|
|
56
|
+
* for registration with Fory. This is the TS equivalent of Python's
|
|
57
|
+
* `_walk_type_graph()`.
|
|
58
|
+
*
|
|
59
|
+
* Limitations (compared to Python's dataclass introspection):
|
|
60
|
+
* - Only discovers nested types whose default values are instances of @WireType classes
|
|
61
|
+
* - Types in arrays, optionals, or maps that default to empty/null must be registered explicitly
|
|
62
|
+
*
|
|
63
|
+
* @param rootTypes - Classes decorated with @WireType
|
|
64
|
+
* @returns All types in dependency order (leaves first)
|
|
65
|
+
*/
|
|
66
|
+
export declare function walkTypeGraph(rootTypes: (new (...args: any[]) => any)[]): (new (...args: any[]) => any)[];
|
|
67
|
+
/**
|
|
68
|
+
* Configuration for the Fory serializer.
|
|
69
|
+
*/
|
|
70
|
+
export declare class ForyConfig {
|
|
71
|
+
/** Compression threshold in bytes (default: 4096). */
|
|
72
|
+
compressionThreshold: number;
|
|
73
|
+
/** Whether to use cross-language mode (xlang). Default: true. */
|
|
74
|
+
xlang: boolean;
|
|
75
|
+
constructor(opts?: {
|
|
76
|
+
compressionThreshold?: number;
|
|
77
|
+
xlang?: boolean;
|
|
78
|
+
});
|
|
79
|
+
/** The resolved xlang mode (same as xlang field). */
|
|
80
|
+
get resolvedXlang(): boolean;
|
|
81
|
+
/** Convert to kwargs-style object for passing to Fory constructor. */
|
|
82
|
+
toKwargs(): Record<string, unknown>;
|
|
83
|
+
}
|
|
84
|
+
/** Resolved ForyConfig with all defaults filled in. */
|
|
85
|
+
export interface ResolvedForyConfig {
|
|
86
|
+
compressionThreshold: number;
|
|
87
|
+
xlang: boolean;
|
|
88
|
+
/** Resolved xlang (same as xlang). */
|
|
89
|
+
resolvedXlang: boolean;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Resolve a ForyConfig with defaults.
|
|
93
|
+
*/
|
|
94
|
+
export declare function resolveForyConfig(config?: ForyConfig | {
|
|
95
|
+
compressionThreshold?: number;
|
|
96
|
+
xlang?: boolean;
|
|
97
|
+
}): ResolvedForyConfig;
|
|
98
|
+
/**
|
|
99
|
+
* ForyCodec — cross-language serialization via @apache-fory/core.
|
|
100
|
+
*
|
|
101
|
+
* Wraps the Fory JS XLANG serializer for wire-compatible serialization
|
|
102
|
+
* with Python's pyfory.
|
|
103
|
+
*
|
|
104
|
+
* @example
|
|
105
|
+
* ```ts
|
|
106
|
+
* import Fory from '@apache-fory/core';
|
|
107
|
+
* const fory = new Fory({ compatible: true });
|
|
108
|
+
* const codec = new ForyCodec(fory);
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
export declare class ForyCodec implements Codec {
|
|
112
|
+
readonly fory: any;
|
|
113
|
+
private threshold;
|
|
114
|
+
private serializers;
|
|
115
|
+
constructor(foryInstance: any, compressionThreshold?: number);
|
|
116
|
+
/** Register a type for serialization. */
|
|
117
|
+
registerType(typeInfo: any): void;
|
|
118
|
+
/**
|
|
119
|
+
* Walk the type graph from root types and register all discovered
|
|
120
|
+
* @WireType classes with Fory. Types are registered in dependency
|
|
121
|
+
* order (leaves first).
|
|
122
|
+
*
|
|
123
|
+
* @param rootTypes - Classes decorated with @WireType
|
|
124
|
+
* @param buildTypeInfo - Function that converts a class to a Fory typeInfo object.
|
|
125
|
+
* Receives (cls, wireTag) and should return the object to pass to registerType().
|
|
126
|
+
*/
|
|
127
|
+
registerTypeGraph(rootTypes: (new (...args: any[]) => any)[], buildTypeInfo: (cls: new (...args: any[]) => any, wireTag: string) => any): void;
|
|
128
|
+
encode(obj: unknown, _hintType?: unknown): Uint8Array;
|
|
129
|
+
decode(payload: Uint8Array, _hintType?: unknown): unknown;
|
|
130
|
+
encodeCompressed(obj: unknown): [Uint8Array, boolean];
|
|
131
|
+
decodeCompressed(payload: Uint8Array, compressed: boolean, hintType?: unknown): unknown;
|
|
132
|
+
/**
|
|
133
|
+
* Compress bytes using zstd (if available).
|
|
134
|
+
* Returns null if zstd is unavailable or compression didn't help.
|
|
135
|
+
*/
|
|
136
|
+
compress(data: Uint8Array): Uint8Array | null;
|
|
137
|
+
/**
|
|
138
|
+
* Decompress zstd-compressed bytes.
|
|
139
|
+
*/
|
|
140
|
+
decompress(data: Uint8Array): Uint8Array;
|
|
141
|
+
/**
|
|
142
|
+
* Encode a row schema for a list of field names (for row-oriented data).
|
|
143
|
+
* Returns a JSON-encoded schema descriptor.
|
|
144
|
+
*/
|
|
145
|
+
encodeRowSchema(fields: string[]): Uint8Array;
|
|
146
|
+
/**
|
|
147
|
+
* Decode a row-oriented data payload using a previously decoded schema.
|
|
148
|
+
* Reconstructs objects from parallel arrays.
|
|
149
|
+
*/
|
|
150
|
+
decodeRowData(schemaBytes: Uint8Array, dataBytes: Uint8Array): unknown[];
|
|
151
|
+
/**
|
|
152
|
+
* Return the list of registered type names.
|
|
153
|
+
*/
|
|
154
|
+
registeredTypes(): string[];
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=codec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../src/codec.ts"],"names":[],"mappings":"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"}
|