@covenant-rpc/core 0.2.0 → 0.4.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/dist/channel.d.ts +75 -0
- package/dist/channel.d.ts.map +1 -0
- package/dist/channel.js +44 -0
- package/dist/channel.js.map +1 -0
- package/dist/errors.d.ts +31 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +61 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +50 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces.d.ts +21 -0
- package/dist/interfaces.d.ts.map +1 -0
- package/dist/interfaces.js +2 -0
- package/dist/interfaces.js.map +1 -0
- package/dist/logger.d.ts +15 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +4 -0
- package/dist/logger.js.map +1 -0
- package/dist/procedure.d.ts +69 -0
- package/dist/procedure.d.ts.map +1 -0
- package/dist/procedure.js +18 -0
- package/dist/procedure.js.map +1 -0
- package/dist/sidekick/protocol.d.ts +89 -0
- package/dist/sidekick/protocol.d.ts.map +1 -0
- package/dist/sidekick/protocol.js +68 -0
- package/dist/sidekick/protocol.js.map +1 -0
- package/dist/utils.d.ts +30 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +50 -0
- package/dist/utils.js.map +1 -0
- package/dist/validation.d.ts +20 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +85 -0
- package/dist/validation.js.map +1 -0
- package/package.json +10 -7
- package/CHANGELOG.md +0 -13
- package/lib/channel.ts +0 -139
- package/lib/errors.ts +0 -80
- package/lib/index.ts +0 -112
- package/lib/interfaces.ts +0 -28
- package/lib/logger.ts +0 -18
- package/lib/procedure.ts +0 -105
- package/lib/sidekick/protocol.ts +0 -104
- package/lib/utils.ts +0 -87
- package/lib/validation.ts +0 -99
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../sidekick/protocol.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { StandardSchemaV1 } from "@standard-schema/spec";
|
|
2
|
+
export type MaybePromise<T> = T | Promise<T>;
|
|
3
|
+
export type Flatten<T> = {
|
|
4
|
+
[k in keyof T]: T[k];
|
|
5
|
+
} & {};
|
|
6
|
+
export type ArrayToMap<T extends readonly string[]> = {
|
|
7
|
+
[k in T[number]]: string;
|
|
8
|
+
};
|
|
9
|
+
export type Result<T> = {
|
|
10
|
+
success: true;
|
|
11
|
+
data: T;
|
|
12
|
+
error: null;
|
|
13
|
+
} | {
|
|
14
|
+
success: false;
|
|
15
|
+
data: null;
|
|
16
|
+
error: Error;
|
|
17
|
+
};
|
|
18
|
+
export type AsyncResult<T> = Promise<Result<T>>;
|
|
19
|
+
export declare function ok<T>(t: T): Result<T>;
|
|
20
|
+
export declare function err(error: Error): Result<any>;
|
|
21
|
+
export declare function issuesToString(issues: readonly StandardSchemaV1.Issue[]): string;
|
|
22
|
+
export type PubsubListener<T> = (t: T) => MaybePromise<void>;
|
|
23
|
+
export declare class MultiTopicPubsub<T> {
|
|
24
|
+
private listenerMap;
|
|
25
|
+
subscribe(topic: string, listener: PubsubListener<T>): void;
|
|
26
|
+
unsubscribe(topic: string, listener: PubsubListener<T>): void;
|
|
27
|
+
publish(topic: string, data: T): Promise<void>;
|
|
28
|
+
}
|
|
29
|
+
export declare function isPromise(obj: unknown): obj is Promise<unknown>;
|
|
30
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAC7C,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG,EAAE,CAAC;AACvD,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,SAAS,MAAM,EAAE,IAAI;KAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM;CAAE,CAAC;AAInF,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI;IACtB,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE,CAAC,CAAC;IACR,KAAK,EAAE,IAAI,CAAC;CACb,GAAG;IACF,OAAO,EAAE,KAAK,CAAC;IACf,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,KAAK,CAAA;CACb,CAAA;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAGhD,wBAAgB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAMrC;AAED,wBAAgB,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAM7C;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,gBAAgB,CAAC,KAAK,EAAE,GAAG,MAAM,CAShF;AAID,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;AAE7D,qBAAa,gBAAgB,CAAC,CAAC;IAC7B,OAAO,CAAC,WAAW,CAA+C;IAElE,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC;IASpD,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC;IAOhD,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;CAMrC;AAID,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAI/D"}
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
export function ok(t) {
|
|
2
|
+
return {
|
|
3
|
+
data: t,
|
|
4
|
+
success: true,
|
|
5
|
+
error: null,
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
export function err(error) {
|
|
9
|
+
return {
|
|
10
|
+
data: null,
|
|
11
|
+
success: false,
|
|
12
|
+
error,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export function issuesToString(issues) {
|
|
16
|
+
const strs = [];
|
|
17
|
+
for (const issue of issues) {
|
|
18
|
+
strs.push(`${issue.path}: ${issue.message}`);
|
|
19
|
+
}
|
|
20
|
+
return strs.join(", ");
|
|
21
|
+
}
|
|
22
|
+
export class MultiTopicPubsub {
|
|
23
|
+
listenerMap = new Map();
|
|
24
|
+
subscribe(topic, listener) {
|
|
25
|
+
if (this.listenerMap.has(topic)) {
|
|
26
|
+
const newListeners = [...this.listenerMap.get(topic), listener];
|
|
27
|
+
this.listenerMap.set(topic, newListeners);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
this.listenerMap.set(topic, [listener]);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
unsubscribe(topic, listener) {
|
|
34
|
+
if (this.listenerMap.has(topic)) {
|
|
35
|
+
const listeners = this.listenerMap.get(topic);
|
|
36
|
+
this.listenerMap.set(topic, listeners.filter(l => l !== listener));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
async publish(topic, data) {
|
|
40
|
+
const listeners = this.listenerMap.get(topic) ?? [];
|
|
41
|
+
const promises = listeners.map(l => l(data));
|
|
42
|
+
await Promise.all(promises);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export function isPromise(obj) {
|
|
46
|
+
return obj != null &&
|
|
47
|
+
typeof obj === "object" &&
|
|
48
|
+
typeof obj.then === "function";
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../utils.ts"],"names":[],"mappings":"AAqBA,MAAM,UAAU,EAAE,CAAI,CAAI;IACxB,OAAO;QACL,IAAI,EAAE,CAAC;QACP,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,IAAI;KACZ,CAAA;AACH,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,KAAY;IAC9B,OAAO;QACL,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,KAAK;QACd,KAAK;KACN,CAAA;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAyC;IACtE,MAAM,IAAI,GAAa,EAAE,CAAA;IAEzB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/C,CAAC;IAGD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAMD,MAAM,OAAO,gBAAgB;IACnB,WAAW,GAAqC,IAAI,GAAG,EAAE,CAAC;IAElE,SAAS,CAAC,KAAa,EAAE,QAA2B;QAClD,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAE,EAAE,QAAQ,CAAC,CAAC;YACjE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,WAAW,CAAC,KAAa,EAAE,QAA2B;QACpD,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;YAC/C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAAa,EAAE,IAAO;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAEpD,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7C,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;CACF;AAID,MAAM,UAAU,SAAS,CAAC,GAAY;IACpC,OAAO,GAAG,IAAI,IAAI;QAChB,OAAO,GAAG,KAAK,QAAQ;QACvB,OAAQ,GAAW,CAAC,IAAI,KAAK,UAAU,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare namespace v {
|
|
2
|
+
type Validator<T> = (o: unknown) => o is T;
|
|
3
|
+
type Infer<K> = K extends Validator<infer T> ? T : never;
|
|
4
|
+
const bool: () => Validator<boolean>;
|
|
5
|
+
const number: () => Validator<number>;
|
|
6
|
+
const string: () => Validator<string>;
|
|
7
|
+
const unknown: () => Validator<unknown>;
|
|
8
|
+
function optional<T>(validator: Validator<T>): Validator<T | undefined>;
|
|
9
|
+
function nullable<T>(validator: Validator<T>): Validator<T | null>;
|
|
10
|
+
function union<T extends readonly Validator<any>[]>(...validators: T): Validator<Infer<T[number]>>;
|
|
11
|
+
function literal<T extends string | number | boolean | null | undefined>(value: T): Validator<T>;
|
|
12
|
+
function obj<T extends Record<string, Validator<any>>>(obj: T): Validator<{
|
|
13
|
+
[K in keyof T]: Infer<T[K]>;
|
|
14
|
+
}>;
|
|
15
|
+
function parse<T>(object: unknown, validator: Validator<T>): T;
|
|
16
|
+
function parseSafe<T>(object: unknown, validator: Validator<T>): T | null;
|
|
17
|
+
function array<T>(elementValidator: Validator<T>): Validator<T[]>;
|
|
18
|
+
function record<K extends string | number | symbol, V>(keyValidator: Validator<K>, valueValidator: Validator<V>): Validator<Record<K, V>>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../validation.ts"],"names":[],"mappings":"AAEA,yBAAiB,CAAC,CAAC;IACjB,KAAY,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;IAClD,KAAY,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAEzD,MAAM,IAAI,EAAE,MAAM,SAAS,CAAC,OAAO,CAAgD,CAAC;IACpF,MAAM,MAAM,EAAE,MAAM,SAAS,CAAC,MAAM,CAA+C,CAAA;IACnF,MAAM,MAAM,EAAE,MAAM,SAAS,CAAC,MAAM,CAA+C,CAAC;IACpF,MAAM,OAAO,EAAE,MAAM,SAAS,CAAC,OAAO,CAA4C,CAAC;IAE1F,SAAgB,QAAQ,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,CAE7E;IACD,SAAgB,QAAQ,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,CAExE;IAED,SAAgB,KAAK,CAAC,CAAC,SAAS,SAAS,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,UAAU,EAAE,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAIxG;IAED,SAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAEtG;IAED,SAAgB,GAAG,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,SAAS,CAAC;SAAG,CAAC,IAAI,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAAE,CAAC,CAkBhH;IAED,SAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAQpE;IAED,SAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAQ/E;IAED,SAAgB,KAAK,CAAC,CAAC,EAAE,gBAAgB,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,CAOvE;IAED,SAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC,EAC1D,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC,EAC1B,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC,GAC3B,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAgBzB;CACF"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
// Covenant cannot have any dependencies, so I have to make a very tiny validation library for parsing requests. This does not implement standard schema, and should not be used
|
|
2
|
+
// outside of covenant code. If you are doing so, you are wrong
|
|
3
|
+
export var v;
|
|
4
|
+
(function (v) {
|
|
5
|
+
v.bool = () => (o) => typeof o === "boolean";
|
|
6
|
+
v.number = () => (o) => typeof o === "number";
|
|
7
|
+
v.string = () => (o) => typeof o === "string";
|
|
8
|
+
v.unknown = () => (o) => true;
|
|
9
|
+
function optional(validator) {
|
|
10
|
+
return (o) => validator(o) || o === undefined;
|
|
11
|
+
}
|
|
12
|
+
v.optional = optional;
|
|
13
|
+
function nullable(validator) {
|
|
14
|
+
return (o) => validator(o) || o === null;
|
|
15
|
+
}
|
|
16
|
+
v.nullable = nullable;
|
|
17
|
+
function union(...validators) {
|
|
18
|
+
return (o) => {
|
|
19
|
+
return validators.some(validator => validator(o));
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
v.union = union;
|
|
23
|
+
function literal(value) {
|
|
24
|
+
return (o) => o === value;
|
|
25
|
+
}
|
|
26
|
+
v.literal = literal;
|
|
27
|
+
function obj(obj) {
|
|
28
|
+
return (o) => {
|
|
29
|
+
if (typeof o !== "object" || o === null || o === undefined) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
const target = o;
|
|
33
|
+
for (const key of Object.keys(obj)) {
|
|
34
|
+
const validator = obj[key];
|
|
35
|
+
const valid = validator(target[key]);
|
|
36
|
+
if (!valid) {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return true;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
v.obj = obj;
|
|
44
|
+
function parse(object, validator) {
|
|
45
|
+
const valid = validator(object);
|
|
46
|
+
if (!valid) {
|
|
47
|
+
throw new Error("Validation failed!");
|
|
48
|
+
}
|
|
49
|
+
return object;
|
|
50
|
+
}
|
|
51
|
+
v.parse = parse;
|
|
52
|
+
function parseSafe(object, validator) {
|
|
53
|
+
const valid = validator(object);
|
|
54
|
+
if (!valid) {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
return object;
|
|
58
|
+
}
|
|
59
|
+
v.parseSafe = parseSafe;
|
|
60
|
+
function array(elementValidator) {
|
|
61
|
+
return (o) => {
|
|
62
|
+
if (!Array.isArray(o)) {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
return o.every(element => elementValidator(element));
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
v.array = array;
|
|
69
|
+
function record(keyValidator, valueValidator) {
|
|
70
|
+
return (o) => {
|
|
71
|
+
if (typeof o !== "object" || o === null || o === undefined) {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
const target = o;
|
|
75
|
+
for (const [key, value] of Object.entries(target)) {
|
|
76
|
+
if (!keyValidator(key) || !valueValidator(value)) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return true;
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
v.record = record;
|
|
84
|
+
})(v || (v = {}));
|
|
85
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../validation.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,19 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@covenant-rpc/core",
|
|
3
|
-
"module": "
|
|
4
|
-
"version": "0.
|
|
3
|
+
"module": "./dist/index.js",
|
|
4
|
+
"version": "0.4.0",
|
|
5
5
|
"type": "module",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"build": "bun ../../scripts/build-package.ts ."
|
|
8
|
+
},
|
|
6
9
|
"publishConfig": {
|
|
7
10
|
"access": "public"
|
|
8
11
|
},
|
|
9
|
-
"exports": {
|
|
10
|
-
".": "./lib/index.ts",
|
|
11
|
-
"./*": "./lib/*.ts"
|
|
12
|
-
},
|
|
13
12
|
"peerDependencies": {
|
|
14
13
|
"typescript": "^5"
|
|
15
14
|
},
|
|
16
15
|
"dependencies": {
|
|
17
16
|
"@standard-schema/spec": "^1.0.0"
|
|
18
|
-
}
|
|
17
|
+
},
|
|
18
|
+
"types": "./dist/index.d.ts",
|
|
19
|
+
"files": [
|
|
20
|
+
"dist"
|
|
21
|
+
]
|
|
19
22
|
}
|
package/CHANGELOG.md
DELETED
package/lib/channel.ts
DELETED
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
import { v } from "./validation";
|
|
2
|
-
import type { ChannelDeclaration } from ".";
|
|
3
|
-
import type { MaybePromise, ArrayToMap } from "./utils";
|
|
4
|
-
import type { StandardSchemaV1 } from "@standard-schema/spec";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
export const channelErrorSchema = v.obj({
|
|
8
|
-
channel: v.string(),
|
|
9
|
-
params: v.record(v.string(), v.string()),
|
|
10
|
-
fault: v.union(v.literal("server"), v.literal("client"), v.literal("sidekick")),
|
|
11
|
-
message: v.string(),
|
|
12
|
-
});
|
|
13
|
-
export type ChannelError = v.Infer<typeof channelErrorSchema>;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
// sent from the client to the server
|
|
17
|
-
export const channelConnectionRequestSchema = v.obj({
|
|
18
|
-
channel: v.string(),
|
|
19
|
-
params: v.record(v.string(), v.string()),
|
|
20
|
-
data: v.unknown(),
|
|
21
|
-
});
|
|
22
|
-
export type ChannelConnectionRequest = v.Infer<typeof channelConnectionRequestSchema>;
|
|
23
|
-
|
|
24
|
-
// sent from the server back to the client to inform of a connection
|
|
25
|
-
export const channelConnectionResponseSchema = v.obj({
|
|
26
|
-
channel: v.string(),
|
|
27
|
-
params: v.record(v.string(), v.string()),
|
|
28
|
-
result: v.union(
|
|
29
|
-
v.obj({
|
|
30
|
-
type: v.literal("OK"),
|
|
31
|
-
token: v.string(),
|
|
32
|
-
}),
|
|
33
|
-
v.obj({
|
|
34
|
-
type: v.literal("ERROR"),
|
|
35
|
-
error: channelErrorSchema,
|
|
36
|
-
})
|
|
37
|
-
)
|
|
38
|
-
});
|
|
39
|
-
export type ChannelConnectionResponse = v.Infer<typeof channelConnectionResponseSchema>;
|
|
40
|
-
|
|
41
|
-
// sent from the server to the sidekick to inform of a new connection
|
|
42
|
-
export const channelConnectionPayload = v.obj({
|
|
43
|
-
token: v.string(),
|
|
44
|
-
channel: v.string(),
|
|
45
|
-
params: v.record(v.string(), v.string()),
|
|
46
|
-
context: v.unknown(),
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
export type ChannelConnectionPayload = v.Infer<typeof channelConnectionPayload>;
|
|
50
|
-
|
|
51
|
-
export const serverMessageSchema = v.obj({
|
|
52
|
-
channel: v.string(),
|
|
53
|
-
params: v.record(v.string(), v.string()),
|
|
54
|
-
data: v.unknown(),
|
|
55
|
-
});
|
|
56
|
-
export type ServerMessage = v.Infer<typeof serverMessageSchema>;
|
|
57
|
-
|
|
58
|
-
export const serverMessageWithContext = v.obj({
|
|
59
|
-
channel: v.string(),
|
|
60
|
-
params: v.record(v.string(), v.string()),
|
|
61
|
-
data: v.unknown(),
|
|
62
|
-
context: v.unknown(),
|
|
63
|
-
});
|
|
64
|
-
export type ServerMessageWithContext = v.Infer<typeof serverMessageWithContext>;
|
|
65
|
-
|
|
66
|
-
export interface ConnectionHandlerInputs<T, Params> {
|
|
67
|
-
inputs: T,
|
|
68
|
-
params: Params,
|
|
69
|
-
reject(reason: string, cause: "client" | "server"): never,
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
export interface MessageHandlerInputs<T, Params, Context> {
|
|
73
|
-
inputs: T,
|
|
74
|
-
params: Params,
|
|
75
|
-
context: Context,
|
|
76
|
-
error(reason: string, cause: "client" | "server"): never,
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
export type ChannelDefinition<T> = T extends ChannelDeclaration<
|
|
80
|
-
infer ClientMessage,
|
|
81
|
-
any,
|
|
82
|
-
infer ConnectionRequest,
|
|
83
|
-
infer ConnectionContext,
|
|
84
|
-
infer Params
|
|
85
|
-
> ? {
|
|
86
|
-
onConnect: (i: ConnectionHandlerInputs<
|
|
87
|
-
StandardSchemaV1.InferOutput<ConnectionRequest>,
|
|
88
|
-
ArrayToMap<Params>
|
|
89
|
-
>) => MaybePromise<
|
|
90
|
-
StandardSchemaV1.InferOutput<ConnectionContext>
|
|
91
|
-
>;
|
|
92
|
-
onMessage: (i: MessageHandlerInputs<
|
|
93
|
-
StandardSchemaV1.InferOutput<ClientMessage>,
|
|
94
|
-
ArrayToMap<Params>,
|
|
95
|
-
StandardSchemaV1.InferOutput<ConnectionContext>
|
|
96
|
-
>) => MaybePromise<
|
|
97
|
-
void
|
|
98
|
-
>
|
|
99
|
-
} : never
|
|
100
|
-
|
|
101
|
-
export type InferChannelClientMessage<C> = C extends ChannelDeclaration<
|
|
102
|
-
infer ClientMessage,
|
|
103
|
-
any,
|
|
104
|
-
any,
|
|
105
|
-
any,
|
|
106
|
-
any
|
|
107
|
-
> ? StandardSchemaV1.InferOutput<ClientMessage> : never
|
|
108
|
-
|
|
109
|
-
export type InferChannelServerMessage<C> = C extends ChannelDeclaration<
|
|
110
|
-
any,
|
|
111
|
-
infer ServerMessage,
|
|
112
|
-
any,
|
|
113
|
-
any,
|
|
114
|
-
any
|
|
115
|
-
> ? StandardSchemaV1.InferOutput<ServerMessage> : never
|
|
116
|
-
|
|
117
|
-
export type InferChannelConnectionRequest<C> = C extends ChannelDeclaration<
|
|
118
|
-
any,
|
|
119
|
-
any,
|
|
120
|
-
infer ConnectionRequest,
|
|
121
|
-
any,
|
|
122
|
-
any
|
|
123
|
-
> ? StandardSchemaV1.InferOutput<ConnectionRequest> : never
|
|
124
|
-
|
|
125
|
-
export type InferChannelConnectionContext<C> = C extends ChannelDeclaration<
|
|
126
|
-
any,
|
|
127
|
-
any,
|
|
128
|
-
any,
|
|
129
|
-
infer ChannelContext,
|
|
130
|
-
any
|
|
131
|
-
> ? StandardSchemaV1.InferOutput<ChannelContext> : never
|
|
132
|
-
|
|
133
|
-
export type InferChannelParams<C> = C extends ChannelDeclaration<
|
|
134
|
-
any,
|
|
135
|
-
any,
|
|
136
|
-
any,
|
|
137
|
-
any,
|
|
138
|
-
infer Params
|
|
139
|
-
> ? ArrayToMap<Params> : never
|
package/lib/errors.ts
DELETED
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import type { ChannelError } from "./channel";
|
|
2
|
-
import type { ProcedureError } from "./procedure";
|
|
3
|
-
|
|
4
|
-
export class ThrowableProcedureError {
|
|
5
|
-
message: string;
|
|
6
|
-
httpCode: number;
|
|
7
|
-
|
|
8
|
-
constructor(message: string, httpCode: number) {
|
|
9
|
-
this.message = message;
|
|
10
|
-
this.httpCode = httpCode;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
static fromError(error: Error): ThrowableProcedureError {
|
|
14
|
-
return new ThrowableProcedureError(error.message, 500);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
static fromUnknown(k: unknown): ThrowableProcedureError {
|
|
18
|
-
return new ThrowableProcedureError(`Unknown error: ${k}`, 500);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
toProcedureError(): ProcedureError {
|
|
22
|
-
return {
|
|
23
|
-
message: this.message,
|
|
24
|
-
code: this.httpCode,
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
export function procedureErrorFromUnknown(e: unknown) {
|
|
31
|
-
const err = e instanceof ThrowableProcedureError
|
|
32
|
-
? e : e instanceof Error
|
|
33
|
-
? ThrowableProcedureError.fromError(e)
|
|
34
|
-
: ThrowableProcedureError.fromUnknown(e);
|
|
35
|
-
|
|
36
|
-
return err.toProcedureError();
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
export class ThrowableChannelError {
|
|
41
|
-
message: string;
|
|
42
|
-
cause: "client" | "server" | "sidekick";
|
|
43
|
-
channel: string;
|
|
44
|
-
params: Record<string, string>;
|
|
45
|
-
|
|
46
|
-
constructor(message: string, channel: string, params: Record<string, string>, cause: "client" | "server" | "sidekick") {
|
|
47
|
-
this.message = message;
|
|
48
|
-
this.channel = channel;
|
|
49
|
-
this.params = params;
|
|
50
|
-
this.cause = cause;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
static fromError(error: Error, channel: string, params: Record<string, string>): ThrowableChannelError {
|
|
54
|
-
return new ThrowableChannelError(error.message, channel, params, "server");
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
static fromUnknown(error: unknown, channel: string, params: Record<string, string>): ThrowableChannelError {
|
|
58
|
-
return new ThrowableChannelError(`Unknown error: ${error}`, channel, params, "server");
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
toChannelError(): ChannelError {
|
|
63
|
-
return {
|
|
64
|
-
channel: this.channel,
|
|
65
|
-
params: this.params,
|
|
66
|
-
message: this.message,
|
|
67
|
-
fault: this.cause,
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
export function channelErrorFromUnknown(e: unknown, channel: string, params: Record<string, string>) {
|
|
74
|
-
const err = e instanceof ThrowableChannelError
|
|
75
|
-
? e : e instanceof Error
|
|
76
|
-
? ThrowableChannelError.fromError(e, channel, params)
|
|
77
|
-
: ThrowableChannelError.fromUnknown(e, channel, params);
|
|
78
|
-
|
|
79
|
-
return err.toChannelError();
|
|
80
|
-
}
|
package/lib/index.ts
DELETED
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import type { StandardSchemaV1 } from "@standard-schema/spec";
|
|
2
|
-
import type { MaybePromise } from "./utils";
|
|
3
|
-
import type { ProcedureInputs } from "./procedure";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export type ProcedureType = "mutation" | "query";
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
export interface ProcedureDeclaration<
|
|
10
|
-
InputSchema extends StandardSchemaV1,
|
|
11
|
-
OutputSchema extends StandardSchemaV1,
|
|
12
|
-
T
|
|
13
|
-
> {
|
|
14
|
-
input: InputSchema;
|
|
15
|
-
output: OutputSchema;
|
|
16
|
-
type: T;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
export type ProcedureMap = { [p: string]: ProcedureDeclaration<StandardSchemaV1, StandardSchemaV1, ProcedureType> };
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
export interface ChannelDeclaration<
|
|
24
|
-
ClientMessageSchema extends StandardSchemaV1,
|
|
25
|
-
ServerMessageSchema extends StandardSchemaV1,
|
|
26
|
-
ConnectionRequestSchema extends StandardSchemaV1,
|
|
27
|
-
ConnectionContextSchema extends StandardSchemaV1,
|
|
28
|
-
Params extends string[],
|
|
29
|
-
> {
|
|
30
|
-
clientMessage: ClientMessageSchema,
|
|
31
|
-
serverMessage: ServerMessageSchema,
|
|
32
|
-
connectionRequest: ConnectionRequestSchema,
|
|
33
|
-
connectionContext: ConnectionContextSchema,
|
|
34
|
-
params: Params,
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
export type ChannelMap = {
|
|
39
|
-
[channel: string]: ChannelDeclaration<
|
|
40
|
-
StandardSchemaV1,
|
|
41
|
-
StandardSchemaV1,
|
|
42
|
-
StandardSchemaV1,
|
|
43
|
-
StandardSchemaV1,
|
|
44
|
-
string[]
|
|
45
|
-
>
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
export interface Covenant<
|
|
50
|
-
P extends ProcedureMap,
|
|
51
|
-
C extends ChannelMap,
|
|
52
|
-
> {
|
|
53
|
-
procedures: P,
|
|
54
|
-
channels: C,
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export function declareCovenant<
|
|
58
|
-
P extends ProcedureMap,
|
|
59
|
-
C extends ChannelMap,
|
|
60
|
-
>(covenant: Covenant<P, C>): Covenant<P, C> {
|
|
61
|
-
return covenant;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
export function mutation<
|
|
65
|
-
Inputs extends StandardSchemaV1,
|
|
66
|
-
Outputs extends StandardSchemaV1,
|
|
67
|
-
>({ input, output }: {
|
|
68
|
-
input: Inputs,
|
|
69
|
-
output: Outputs,
|
|
70
|
-
}): ProcedureDeclaration<Inputs, Outputs, "mutation"> {
|
|
71
|
-
return {
|
|
72
|
-
type: "mutation",
|
|
73
|
-
input,
|
|
74
|
-
output,
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
export function query<
|
|
79
|
-
Inputs extends StandardSchemaV1,
|
|
80
|
-
Outputs extends StandardSchemaV1,
|
|
81
|
-
>({ input, output }: {
|
|
82
|
-
input: Inputs,
|
|
83
|
-
output: Outputs,
|
|
84
|
-
}): ProcedureDeclaration<Inputs, Outputs, "query"> {
|
|
85
|
-
return {
|
|
86
|
-
type: "query",
|
|
87
|
-
input,
|
|
88
|
-
output,
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
// helper function to get better autocomplete
|
|
94
|
-
export function channel<
|
|
95
|
-
ClientMessageSchema extends StandardSchemaV1,
|
|
96
|
-
ServerMessageSchema extends StandardSchemaV1,
|
|
97
|
-
ConnectionRequestSchema extends StandardSchemaV1,
|
|
98
|
-
ConnectionContextSchema extends StandardSchemaV1,
|
|
99
|
-
Params extends string[],
|
|
100
|
-
>(c: {
|
|
101
|
-
clientMessage: ClientMessageSchema,
|
|
102
|
-
serverMessage: ServerMessageSchema,
|
|
103
|
-
connectionRequest: ConnectionRequestSchema,
|
|
104
|
-
connectionContext: ConnectionContextSchema,
|
|
105
|
-
params: Params,
|
|
106
|
-
}) {
|
|
107
|
-
return c;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
export type ContextGenerator<Context extends StandardSchemaV1> =
|
|
112
|
-
(i: ProcedureInputs<unknown, undefined, undefined>) => MaybePromise<StandardSchemaV1.InferOutput<Context>>
|
package/lib/interfaces.ts
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import type { MaybePromise } from "../utils";
|
|
2
|
-
import type { ChannelConnectionPayload, ChannelConnectionRequest, ChannelConnectionResponse, ChannelError, ServerMessage, ServerMessageWithContext } from "../channel";
|
|
3
|
-
import type { ProcedureRequestBody, ProcedureResponse } from "../procedure";
|
|
4
|
-
import type { SidekickIncomingMessage, SidekickOutgoingMessage } from "../sidekick/protocol";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
export interface ClientToServerConnection {
|
|
8
|
-
sendConnectionRequest(request: ChannelConnectionRequest): Promise<ChannelConnectionResponse>;
|
|
9
|
-
runProcedure(request: ProcedureRequestBody): Promise<ProcedureResponse>;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
export interface ClientToSidekickConnection {
|
|
14
|
-
sendMessage(message: SidekickIncomingMessage): void;
|
|
15
|
-
onMessage(handler: (m: SidekickOutgoingMessage) => MaybePromise<void>): () => void;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
export interface ServerToSidekickConnection {
|
|
20
|
-
addConnection(payload: ChannelConnectionPayload): Promise<Error | null>;
|
|
21
|
-
update(resources: string[]): Promise<Error | null>;
|
|
22
|
-
postMessage(message: ServerMessage): Promise<Error | null>;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
export interface SidekickToServerConnection {
|
|
27
|
-
sendMessage(message: ServerMessageWithContext): Promise<ChannelError | null>;
|
|
28
|
-
}
|
package/lib/logger.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
// Logger interface for type safety in core
|
|
2
|
-
// Implementation lives in @covenant-rpc/server
|
|
3
|
-
|
|
4
|
-
export type LoggerLevel = "info" | "error" | "warn" | "slient" | "debug";
|
|
5
|
-
export type Prefix = string | (() => string);
|
|
6
|
-
|
|
7
|
-
export interface Logger {
|
|
8
|
-
prefixes: Prefix[];
|
|
9
|
-
level: LoggerLevel;
|
|
10
|
-
sublogger(prefix: Prefix): Logger;
|
|
11
|
-
pushPrefix(prefix: Prefix): Logger;
|
|
12
|
-
clone(): Logger;
|
|
13
|
-
debug(text: string): void;
|
|
14
|
-
info(text: string): void;
|
|
15
|
-
error(text: string): void;
|
|
16
|
-
warn(text: string): void;
|
|
17
|
-
fatal(text: string): never;
|
|
18
|
-
}
|