@qlever-llc/trellis 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -0
- package/esm/_dnt.polyfills.d.ts +7 -0
- package/esm/_dnt.polyfills.d.ts.map +1 -0
- package/esm/_dnt.polyfills.js +1 -0
- package/esm/package.json +3 -0
- package/esm/trellis/browser.d.ts +11 -0
- package/esm/trellis/browser.d.ts.map +1 -0
- package/esm/trellis/browser.js +10 -0
- package/esm/trellis/client.d.ts +31 -0
- package/esm/trellis/client.d.ts.map +1 -0
- package/esm/trellis/client.js +13 -0
- package/esm/trellis/codec.d.ts +12 -0
- package/esm/trellis/codec.d.ts.map +1 -0
- package/esm/trellis/codec.js +60 -0
- package/esm/trellis/env.d.ts +2 -0
- package/esm/trellis/env.d.ts.map +1 -0
- package/esm/trellis/env.js +1 -0
- package/esm/trellis/errors/AuthError.d.ts +30 -0
- package/esm/trellis/errors/AuthError.d.ts.map +1 -0
- package/esm/trellis/errors/AuthError.js +65 -0
- package/esm/trellis/errors/KVError.d.ts +31 -0
- package/esm/trellis/errors/KVError.d.ts.map +1 -0
- package/esm/trellis/errors/KVError.js +46 -0
- package/esm/trellis/errors/RemoteError.d.ts +47 -0
- package/esm/trellis/errors/RemoteError.d.ts.map +1 -0
- package/esm/trellis/errors/RemoteError.js +80 -0
- package/esm/trellis/errors/TrellisError.d.ts +16 -0
- package/esm/trellis/errors/TrellisError.d.ts.map +1 -0
- package/esm/trellis/errors/TrellisError.js +15 -0
- package/esm/trellis/errors/ValidationError.d.ts +51 -0
- package/esm/trellis/errors/ValidationError.d.ts.map +1 -0
- package/esm/trellis/errors/ValidationError.js +77 -0
- package/esm/trellis/errors/index.d.ts +38 -0
- package/esm/trellis/errors/index.d.ts.map +1 -0
- package/esm/trellis/errors/index.js +26 -0
- package/esm/trellis/globals.d.ts +2 -0
- package/esm/trellis/globals.d.ts.map +1 -0
- package/esm/trellis/globals.js +8 -0
- package/esm/trellis/helpers.d.ts +12 -0
- package/esm/trellis/helpers.d.ts.map +1 -0
- package/esm/trellis/helpers.js +47 -0
- package/esm/trellis/index.d.ts +11 -0
- package/esm/trellis/index.d.ts.map +1 -0
- package/esm/trellis/index.js +6 -0
- package/esm/trellis/kv.d.ts +67 -0
- package/esm/trellis/kv.d.ts.map +1 -0
- package/esm/trellis/kv.js +326 -0
- package/esm/trellis/models/trellis/TrellisError.d.ts +43 -0
- package/esm/trellis/models/trellis/TrellisError.d.ts.map +1 -0
- package/esm/trellis/models/trellis/TrellisError.js +16 -0
- package/esm/trellis/tasks.d.ts +11 -0
- package/esm/trellis/tasks.d.ts.map +1 -0
- package/esm/trellis/tasks.js +41 -0
- package/esm/trellis/tracing.d.ts +5 -0
- package/esm/trellis/tracing.d.ts.map +1 -0
- package/esm/trellis/tracing.js +7 -0
- package/esm/trellis/trellis.d.ts +117 -0
- package/esm/trellis/trellis.d.ts.map +1 -0
- package/esm/trellis/trellis.js +710 -0
- package/package.json +49 -0
- package/script/_dnt.polyfills.d.ts +7 -0
- package/script/_dnt.polyfills.d.ts.map +1 -0
- package/script/_dnt.polyfills.js +2 -0
- package/script/package.json +3 -0
- package/script/trellis/browser.d.ts +11 -0
- package/script/trellis/browser.d.ts.map +1 -0
- package/script/trellis/browser.js +21 -0
- package/script/trellis/client.d.ts +31 -0
- package/script/trellis/client.d.ts.map +1 -0
- package/script/trellis/client.js +16 -0
- package/script/trellis/codec.d.ts +12 -0
- package/script/trellis/codec.d.ts.map +1 -0
- package/script/trellis/codec.js +66 -0
- package/script/trellis/env.d.ts +2 -0
- package/script/trellis/env.d.ts.map +1 -0
- package/script/trellis/env.js +5 -0
- package/script/trellis/errors/AuthError.d.ts +30 -0
- package/script/trellis/errors/AuthError.d.ts.map +1 -0
- package/script/trellis/errors/AuthError.js +72 -0
- package/script/trellis/errors/KVError.d.ts +31 -0
- package/script/trellis/errors/KVError.d.ts.map +1 -0
- package/script/trellis/errors/KVError.js +53 -0
- package/script/trellis/errors/RemoteError.d.ts +47 -0
- package/script/trellis/errors/RemoteError.d.ts.map +1 -0
- package/script/trellis/errors/RemoteError.js +87 -0
- package/script/trellis/errors/TrellisError.d.ts +16 -0
- package/script/trellis/errors/TrellisError.d.ts.map +1 -0
- package/script/trellis/errors/TrellisError.js +19 -0
- package/script/trellis/errors/ValidationError.d.ts +51 -0
- package/script/trellis/errors/ValidationError.d.ts.map +1 -0
- package/script/trellis/errors/ValidationError.js +84 -0
- package/script/trellis/errors/index.d.ts +38 -0
- package/script/trellis/errors/index.d.ts.map +1 -0
- package/script/trellis/errors/index.js +40 -0
- package/script/trellis/globals.d.ts +2 -0
- package/script/trellis/globals.d.ts.map +1 -0
- package/script/trellis/globals.js +11 -0
- package/script/trellis/helpers.d.ts +12 -0
- package/script/trellis/helpers.d.ts.map +1 -0
- package/script/trellis/helpers.js +54 -0
- package/script/trellis/index.d.ts +11 -0
- package/script/trellis/index.d.ts.map +1 -0
- package/script/trellis/index.js +24 -0
- package/script/trellis/kv.d.ts +67 -0
- package/script/trellis/kv.d.ts.map +1 -0
- package/script/trellis/kv.js +354 -0
- package/script/trellis/models/trellis/TrellisError.d.ts +43 -0
- package/script/trellis/models/trellis/TrellisError.d.ts.map +1 -0
- package/script/trellis/models/trellis/TrellisError.js +22 -0
- package/script/trellis/tasks.d.ts +11 -0
- package/script/trellis/tasks.d.ts.map +1 -0
- package/script/trellis/tasks.js +45 -0
- package/script/trellis/tracing.d.ts +5 -0
- package/script/trellis/tracing.d.ts.map +1 -0
- package/script/trellis/tracing.js +49 -0
- package/script/trellis/trellis.d.ts +117 -0
- package/script/trellis/trellis.d.ts.map +1 -0
- package/script/trellis/trellis.js +715 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import Type, { type StaticDecode } from "typebox";
|
|
2
|
+
/**
|
|
3
|
+
* Discriminated union schema for all possible Trellis error types.
|
|
4
|
+
* These errors can be serialized and sent over RPC.
|
|
5
|
+
* Note: RemoteError is not included here as it's a local wrapper, not a serializable error type.
|
|
6
|
+
*/
|
|
7
|
+
export declare const TrellisErrorDataSchema: Type.TUnion<[Type.TObject<{
|
|
8
|
+
id: Type.TString;
|
|
9
|
+
type: Type.TLiteral<"UnexpectedError">;
|
|
10
|
+
message: Type.TString;
|
|
11
|
+
context: Type.TOptional<Type.TRecord<"^.*$", Type.TUnknown>>;
|
|
12
|
+
traceId: Type.TOptional<Type.TString>;
|
|
13
|
+
}>, Type.TObject<{
|
|
14
|
+
id: Type.TString;
|
|
15
|
+
type: Type.TLiteral<"ValidationError">;
|
|
16
|
+
message: Type.TString;
|
|
17
|
+
issues: Type.TArray<Type.TObject<{
|
|
18
|
+
path: Type.TString;
|
|
19
|
+
message: Type.TString;
|
|
20
|
+
}>>;
|
|
21
|
+
context: Type.TOptional<Type.TRecord<"^.*$", Type.TUnknown>>;
|
|
22
|
+
traceId: Type.TOptional<Type.TString>;
|
|
23
|
+
}>, Type.TObject<{
|
|
24
|
+
id: Type.TString;
|
|
25
|
+
type: Type.TLiteral<"AuthError">;
|
|
26
|
+
message: Type.TString;
|
|
27
|
+
reason: Type.TUnion<[Type.TLiteral<"invalid_request">, Type.TLiteral<"missing_session_key">, Type.TLiteral<"missing_proof">, Type.TLiteral<"session_not_found">, Type.TLiteral<"session_expired">, Type.TLiteral<"invalid_signature">, Type.TLiteral<"user_not_found">, Type.TLiteral<"user_inactive">, Type.TLiteral<"unknown_service">, Type.TLiteral<"service_disabled">, Type.TLiteral<"iat_out_of_range">, Type.TLiteral<"invalid_binding_token">, Type.TLiteral<"session_corrupted">, Type.TLiteral<"session_already_bound">, Type.TLiteral<"authtoken_already_used">, Type.TLiteral<"oauth_session_key_mismatch">, Type.TLiteral<"service_role_on_user">, Type.TLiteral<"reply_subject_mismatch">, Type.TLiteral<"insufficient_permissions">, Type.TLiteral<"forbidden">]>;
|
|
28
|
+
context: Type.TOptional<Type.TRecord<"^.*$", Type.TUnknown>>;
|
|
29
|
+
traceId: Type.TOptional<Type.TString>;
|
|
30
|
+
}>, Type.TObject<{
|
|
31
|
+
id: Type.TString;
|
|
32
|
+
type: Type.TLiteral<"KVError">;
|
|
33
|
+
message: Type.TString;
|
|
34
|
+
operation: Type.TOptional<Type.TString>;
|
|
35
|
+
context: Type.TOptional<Type.TRecord<"^.*$", Type.TUnknown>>;
|
|
36
|
+
traceId: Type.TOptional<Type.TString>;
|
|
37
|
+
}>]>;
|
|
38
|
+
/**
|
|
39
|
+
* Type for validated Trellis error data.
|
|
40
|
+
* This is a discriminated union that enables type narrowing based on the `type` field.
|
|
41
|
+
*/
|
|
42
|
+
export type TrellisErrorData = StaticDecode<typeof TrellisErrorDataSchema>;
|
|
43
|
+
//# sourceMappingURL=TrellisError.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TrellisError.d.ts","sourceRoot":"","sources":["../../../../src/trellis/models/trellis/TrellisError.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,EAAE,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AAMlD;;;;GAIG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAKjC,CAAC;AAEH;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,YAAY,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import Type from "typebox";
|
|
2
|
+
import { UnexpectedErrorDataSchema } from "@qlever-llc/trellis-result";
|
|
3
|
+
import { ValidationErrorDataSchema } from "../../errors/ValidationError.js";
|
|
4
|
+
import { AuthErrorDataSchema } from "../../errors/AuthError.js";
|
|
5
|
+
import { KVErrorDataSchema } from "../../errors/KVError.js";
|
|
6
|
+
/**
|
|
7
|
+
* Discriminated union schema for all possible Trellis error types.
|
|
8
|
+
* These errors can be serialized and sent over RPC.
|
|
9
|
+
* Note: RemoteError is not included here as it's a local wrapper, not a serializable error type.
|
|
10
|
+
*/
|
|
11
|
+
export const TrellisErrorDataSchema = Type.Union([
|
|
12
|
+
UnexpectedErrorDataSchema,
|
|
13
|
+
ValidationErrorDataSchema,
|
|
14
|
+
AuthErrorDataSchema,
|
|
15
|
+
KVErrorDataSchema,
|
|
16
|
+
]);
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { AsyncResult, type BaseError } from "@qlever-llc/trellis-result";
|
|
2
|
+
import type { Logger } from "pino";
|
|
3
|
+
export declare class TrellisTasks {
|
|
4
|
+
#private;
|
|
5
|
+
constructor(opts: {
|
|
6
|
+
log?: Logger;
|
|
7
|
+
});
|
|
8
|
+
add<E extends BaseError>(name: string, task: AsyncResult<void, E>): void;
|
|
9
|
+
wait(): AsyncResult<void, BaseError>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=tasks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/trellis/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,SAAS,EAAU,MAAM,4BAA4B,CAAC;AACjF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAGnC,qBAAa,YAAY;;gBAKX,IAAI,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE;IAOlC,GAAG,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAejE,IAAI,IAAI,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC;CAGrC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
2
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
3
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
4
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
5
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
6
|
+
};
|
|
7
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
8
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
9
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
10
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
|
+
};
|
|
12
|
+
var _TrellisTasks_tasks, _TrellisTasks_log;
|
|
13
|
+
import { AsyncResult, Result } from "@qlever-llc/trellis-result";
|
|
14
|
+
import { logger } from "./globals.js";
|
|
15
|
+
export class TrellisTasks {
|
|
16
|
+
constructor(opts) {
|
|
17
|
+
_TrellisTasks_tasks.set(this, {});
|
|
18
|
+
_TrellisTasks_log.set(this, void 0);
|
|
19
|
+
__classPrivateFieldSet(this, _TrellisTasks_log, opts.log ?? logger, "f");
|
|
20
|
+
}
|
|
21
|
+
/*
|
|
22
|
+
* Add a task to the task queue
|
|
23
|
+
*/
|
|
24
|
+
add(name, task) {
|
|
25
|
+
if (name in __classPrivateFieldGet(this, _TrellisTasks_tasks, "f")) {
|
|
26
|
+
__classPrivateFieldGet(this, _TrellisTasks_log, "f").error({ name }, "Task already running?");
|
|
27
|
+
throw new Error(`Task ${name} already running`);
|
|
28
|
+
}
|
|
29
|
+
__classPrivateFieldGet(this, _TrellisTasks_log, "f").debug({ name }, "Added task");
|
|
30
|
+
__classPrivateFieldGet(this, _TrellisTasks_tasks, "f")[name] = task.then((r) => {
|
|
31
|
+
if (Result.isErr(r)) {
|
|
32
|
+
__classPrivateFieldGet(this, _TrellisTasks_log, "f").error(r, "Task encountered a runtime error");
|
|
33
|
+
}
|
|
34
|
+
return r;
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
wait() {
|
|
38
|
+
return AsyncResult.any(Object.values(__classPrivateFieldGet(this, _TrellisTasks_tasks, "f")));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
_TrellisTasks_tasks = new WeakMap(), _TrellisTasks_log = new WeakMap();
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import "../_dnt.polyfills.js";
|
|
2
|
+
export type { HeaderCarrier, NatsHeadersLike } from "@qlever-llc/trellis-telemetry";
|
|
3
|
+
export { configureErrorTraceId, context, createMapCarrier, createNatsHeaderCarrier, extractTraceContext, getActiveSpan, getTrellisTracer as getTracer, injectTraceContext, SpanKind, SpanStatusCode, startClientSpan, startServerSpan, trace, withSpan, withSpanAsync } from "@qlever-llc/trellis-telemetry";
|
|
4
|
+
export declare function initTracing(serviceName: string): void;
|
|
5
|
+
//# sourceMappingURL=tracing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracing.d.ts","sourceRoot":"","sources":["../../src/trellis/tracing.ts"],"names":[],"mappings":"AAEA,OAAO,sBAAsB,CAAC;AAE9B,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACpF,OAAO,EAAC,qBAAqB,EAC3B,OAAO,EACP,gBAAgB,EAChB,uBAAuB,EACvB,mBAAmB,EACnB,aAAa,EAAC,gBAAgB,IAAI,SAAS,EAC3C,kBAAkB,EAClB,QAAQ,EACR,cAAc,EAAC,eAAe,EAAE,eAAe,EAC/C,KAAK,EACL,QAAQ,EACR,aAAa,EACd,MAAM,+BAA+B,CAAC;AACvC,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAErD"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// Keep this subpath for Trellis-specific tracing convenience without exposing
|
|
2
|
+
// telemetry from the root `@qlever-llc/trellis` package surface.
|
|
3
|
+
import "../_dnt.polyfills.js";
|
|
4
|
+
export { configureErrorTraceId, context, createMapCarrier, createNatsHeaderCarrier, extractTraceContext, getActiveSpan, getTrellisTracer as getTracer, injectTraceContext, SpanKind, SpanStatusCode, startClientSpan, startServerSpan, trace, withSpan, withSpanAsync } from "@qlever-llc/trellis-telemetry";
|
|
5
|
+
export function initTracing(serviceName) {
|
|
6
|
+
void import("@qlever-llc/trellis-telemetry").then((mod) => mod.initTracing(serviceName));
|
|
7
|
+
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { type NatsConnection } from "@nats-io/nats-core";
|
|
2
|
+
import type { InferSchemaType, TrellisAPI } from "@qlever-llc/trellis-contracts";
|
|
3
|
+
import { AsyncResult, type BaseError, type MaybeAsync, Result } from "@qlever-llc/trellis-result";
|
|
4
|
+
import { API as trellisCoreApi } from "@qlever-llc/trellis-sdk-core";
|
|
5
|
+
import type { Logger } from "pino";
|
|
6
|
+
import { type TrellisErrorInstance, UnexpectedError, ValidationError } from "./errors/index.js";
|
|
7
|
+
import { RemoteError } from "./errors/RemoteError.js";
|
|
8
|
+
type SessionUser = {
|
|
9
|
+
id: string;
|
|
10
|
+
origin: string;
|
|
11
|
+
active: boolean;
|
|
12
|
+
name: string;
|
|
13
|
+
email: string;
|
|
14
|
+
image?: string;
|
|
15
|
+
capabilities: string[];
|
|
16
|
+
lastLogin?: string;
|
|
17
|
+
};
|
|
18
|
+
export type TrellisSigner = (data: Uint8Array) => Promise<Uint8Array> | Uint8Array;
|
|
19
|
+
export type TrellisAuth = {
|
|
20
|
+
sessionKey: string;
|
|
21
|
+
sign: TrellisSigner;
|
|
22
|
+
};
|
|
23
|
+
type AnyTrellisAPI = TrellisAPI;
|
|
24
|
+
type MethodsOf<TA extends AnyTrellisAPI> = keyof TA["rpc"] & string;
|
|
25
|
+
type EventsOf<TA extends AnyTrellisAPI> = keyof TA["events"] & string;
|
|
26
|
+
type MethodInputOf<TA extends AnyTrellisAPI, M extends MethodsOf<TA>> = InferSchemaType<TA["rpc"][M]["input"]>;
|
|
27
|
+
type MethodOutputOf<TA extends AnyTrellisAPI, M extends MethodsOf<TA>> = InferSchemaType<TA["rpc"][M]["output"]>;
|
|
28
|
+
type EventOf<TA extends AnyTrellisAPI, E extends EventsOf<TA>> = InferSchemaType<TA["events"][E]["event"]>;
|
|
29
|
+
type EventPayloadOf<TA extends AnyTrellisAPI, E extends EventsOf<TA>> = Omit<EventOf<TA, E>, "header">;
|
|
30
|
+
type NoResponderRetryOpts = {
|
|
31
|
+
maxAttempts?: number;
|
|
32
|
+
baseDelayMs?: number;
|
|
33
|
+
};
|
|
34
|
+
type TrellisOpts<TA extends AnyTrellisAPI> = {
|
|
35
|
+
log?: Logger;
|
|
36
|
+
timeout?: number;
|
|
37
|
+
stream?: string;
|
|
38
|
+
noResponderRetry?: NoResponderRetryOpts;
|
|
39
|
+
api?: TA;
|
|
40
|
+
authBypassMethods?: string[];
|
|
41
|
+
};
|
|
42
|
+
type RequestOpts = {
|
|
43
|
+
timeout?: number;
|
|
44
|
+
};
|
|
45
|
+
type HandlerFn<TA extends AnyTrellisAPI, M extends MethodsOf<TA>> = (m: MethodInputOf<TA, M>, context: {
|
|
46
|
+
user: SessionUser;
|
|
47
|
+
sessionKey: string;
|
|
48
|
+
}) => Promise<Result<MethodOutputOf<TA, M>, TrellisErrorInstance>>;
|
|
49
|
+
type DeepRecord<T> = {
|
|
50
|
+
[k: string]: T | DeepRecord<T>;
|
|
51
|
+
};
|
|
52
|
+
export declare class Trellis<TA extends AnyTrellisAPI = typeof trellisCoreApi> {
|
|
53
|
+
#private;
|
|
54
|
+
readonly name: string;
|
|
55
|
+
readonly timeout: number;
|
|
56
|
+
readonly stream: string;
|
|
57
|
+
private nats;
|
|
58
|
+
private js;
|
|
59
|
+
protected auth: TrellisAuth;
|
|
60
|
+
readonly api: TA;
|
|
61
|
+
constructor(name: string, // Must be unique for a service
|
|
62
|
+
nats: NatsConnection, auth: TrellisAuth, opts?: TrellisOpts<TA>);
|
|
63
|
+
/**
|
|
64
|
+
* Returns the underlying NATS connection.
|
|
65
|
+
*/
|
|
66
|
+
get natsConnection(): NatsConnection;
|
|
67
|
+
/**
|
|
68
|
+
* Makes an authenticated request to a Trellis RPC method.
|
|
69
|
+
*
|
|
70
|
+
* @template M The specific RPC method being called.
|
|
71
|
+
* @param method The name of the RPC method to call.
|
|
72
|
+
* @param input The input data for the method, conforming to its schema.
|
|
73
|
+
* @param opts Optional request-specific options.
|
|
74
|
+
* @returns A promise that resolves with a `Result` containing either the method's
|
|
75
|
+
* output or an error.
|
|
76
|
+
* @returns A `Result` object:
|
|
77
|
+
* ok: A validated reponse of method M
|
|
78
|
+
* err: RemoteError | ValidationError | UnexpectedError
|
|
79
|
+
*/
|
|
80
|
+
request<M extends MethodsOf<TA>>(method: M, input: MethodInputOf<TA, M>, opts?: RequestOpts): Promise<Result<MethodOutputOf<TA, M>, RemoteError | ValidationError | UnexpectedError>>;
|
|
81
|
+
mount<M extends MethodsOf<TA>>(method: M, fn: HandlerFn<TA, M>): Promise<void>;
|
|
82
|
+
publish<E extends EventsOf<TA>>(event: E, data: EventPayloadOf<TA, E>): Promise<Result<void, ValidationError | UnexpectedError>>;
|
|
83
|
+
event<E extends EventsOf<TA>>(event: E, subjectData: DeepRecord<string | number | boolean>, fn: (m: EventOf<TA, E>) => MaybeAsync<void, BaseError>): Promise<Result<void, ValidationError | UnexpectedError>>;
|
|
84
|
+
wait(): AsyncResult<void, BaseError>;
|
|
85
|
+
template(subject: string, data: unknown, allowWildcards?: boolean): Result<string, ValidationError>;
|
|
86
|
+
}
|
|
87
|
+
type TrellisServerOpts<TA extends AnyTrellisAPI> = Omit<TrellisOpts<TA>, "api"> & {
|
|
88
|
+
api: TA;
|
|
89
|
+
version?: string;
|
|
90
|
+
};
|
|
91
|
+
export declare class TrellisServer<TA extends AnyTrellisAPI = AnyTrellisAPI> extends Trellis<TA> {
|
|
92
|
+
#private;
|
|
93
|
+
private constructor();
|
|
94
|
+
/**
|
|
95
|
+
* Creates an authenticated TrellisServer instance.
|
|
96
|
+
*
|
|
97
|
+
* Services connect to NATS using the session-key auth flow (see ADR):
|
|
98
|
+
* - NATS `auth_token` (aka `token`) is a JSON string `{ v: 1, sessionKey, iat, sig }`
|
|
99
|
+
* - `sig` signs SHA-256(`nats-connect:${iat}`) with the session key
|
|
100
|
+
* - `inboxPrefix` MUST be `_INBOX.${sessionKey.slice(0, 16)}`
|
|
101
|
+
*
|
|
102
|
+
* @param name Unique name for this service
|
|
103
|
+
* @param nats Existing NATS connection (already authenticated)
|
|
104
|
+
* @param auth Service session-key credentials
|
|
105
|
+
* @param opts Optional server options
|
|
106
|
+
* @returns An authenticated TrellisServer instance
|
|
107
|
+
*/
|
|
108
|
+
static create<TA extends AnyTrellisAPI = AnyTrellisAPI>(name: string, nats: NatsConnection, auth: TrellisAuth, opts: TrellisServerOpts<TA>): TrellisServer<TA>;
|
|
109
|
+
/**
|
|
110
|
+
* Stops the server by clearing refresh timers and draining the NATS connection.
|
|
111
|
+
* Draining allows in-flight messages to complete before closing the connection.
|
|
112
|
+
* This method is idempotent and can be called multiple times safely.
|
|
113
|
+
*/
|
|
114
|
+
stop(): Promise<void>;
|
|
115
|
+
}
|
|
116
|
+
export {};
|
|
117
|
+
//# sourceMappingURL=trellis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trellis.d.ts","sourceRoot":"","sources":["../../src/trellis/trellis.ts"],"names":[],"mappings":"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"}
|