*Initial version extracted from @lumeweb/relay

This commit is contained in:
Derrick Hammer 2022-08-28 22:01:51 -04:00
parent 8750254d7c
commit eb2d441670
Signed by: pcfreak30
GPG Key ID: C997C339BE476FF2
4 changed files with 100 additions and 1 deletions

View File

@ -1,6 +1,6 @@
MIT License
Copyright (c) 2022 Lume Web
Copyright (c) 2022 Hammmer Technologies LLC
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

9
package.json Normal file
View File

@ -0,0 +1,9 @@
{
"name": "@lumeweb/resolver-types",
"version": "0.1.0",
"main": "dist",
"type": "module",
"devDependencies": {
"ajv": "^8.11.0"
}
}

66
src/index.ts Normal file
View File

@ -0,0 +1,66 @@
import type { JSONSchemaType } from "ajv";
export interface RPCRequest {
bypassCache?: boolean;
module: string;
method: string;
data: any;
}
export interface RPCResponse {
updated?: number;
data?: any;
error?: string;
}
export interface RPCMethod {
cacheable: boolean;
handler: (
request: RPCRequest,
sendStream: (stream: AsyncIterable<Uint8Array>) => void
) => Promise<RPCResponse | null>;
}
// @ts-ignore
export const RPC_REQUEST_SCHEMA: JSONSchemaType<RPCRequest> = {
type: "object",
properties: {
module: {
type: "string",
},
method: {
type: "string",
},
data: {
type: ["number", "string", "boolean", "object", "array"],
},
bypassCache: {
type: "boolean",
nullable: true,
},
},
};
export interface StreamFileResponse {
data?: Uint8Array;
done: boolean;
}
export interface PluginAPI {
config: any;
registerMethod: (methodName: string, method: RPCMethod) => void;
loadPlugin: (moduleName: string) => Promise<Plugin>;
getMethods: () => string[];
}
export type PluginFunction = (api: PluginAPI) => Promise<void>;
export interface Plugin {
name: string;
plugin: PluginFunction;
exports?: any;
default?: Plugin;
}
export type RPCStreamHandler = (
stream: AsyncIterable<Uint8Array>
) => Promise<RPCResponse>;

24
tsconfig.json Normal file
View File

@ -0,0 +1,24 @@
{
"compilerOptions": {
"declaration": true,
"strict": true,
"module": "esnext",
"target": "esnext",
"esModuleInterop": true,
"sourceMap": false,
"rootDir": "src",
"outDir": "dist",
"typeRoots": [
"node_modules/@types"
],
"moduleResolution": "node",
"declarationMap": true,
"declarationDir": "dist",
"emitDeclarationOnly": false,
"allowJs": true,
"noImplicitAny": false
},
"include": [
"src"
]
}