2022-09-09 07:20:31 +00:00
|
|
|
import tls from "tls";
|
|
|
|
import type { Logger } from "loglevel";
|
|
|
|
import type { Ed25519Keypair, Err } from "libskynet";
|
|
|
|
import type express from "express";
|
|
|
|
|
2022-08-29 02:01:51 +00:00
|
|
|
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>;
|
|
|
|
}
|
|
|
|
|
|
|
|
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[];
|
2022-09-09 07:20:31 +00:00
|
|
|
ssl: {
|
|
|
|
setContext: (context: tls.SecureContext) => void;
|
|
|
|
getContext: () => tls.SecureContext;
|
|
|
|
getSaved: (retry: boolean) => Promise<boolean | SslData>;
|
2022-09-09 07:56:33 +00:00
|
|
|
set: (
|
|
|
|
cert: IndependentFileSmall | Uint8Array,
|
|
|
|
key: IndependentFileSmall | Uint8Array
|
|
|
|
) => void;
|
2022-09-09 07:20:31 +00:00
|
|
|
get: () => SslData;
|
|
|
|
save: () => Promise<void>;
|
|
|
|
};
|
|
|
|
appRouter: {
|
|
|
|
get: () => express.Router;
|
|
|
|
set: (newRouter: express.Router) => void;
|
|
|
|
reset: () => void;
|
|
|
|
};
|
2022-09-09 07:41:27 +00:00
|
|
|
files: {
|
|
|
|
createIndependentFileSmall(
|
|
|
|
seed: Uint8Array,
|
|
|
|
userInode: string,
|
|
|
|
fileData: Uint8Array
|
|
|
|
): Promise<[IndependentFileSmall, Err]>;
|
|
|
|
openIndependentFileSmall(
|
|
|
|
seed: Uint8Array,
|
|
|
|
userInode: string
|
|
|
|
): Promise<[IndependentFileSmall, Err]>;
|
|
|
|
overwriteIndependentFileSmall(
|
|
|
|
file: IndependentFileSmall,
|
|
|
|
newData: Uint8Array
|
|
|
|
): Promise<Err>;
|
|
|
|
};
|
2022-09-09 07:20:31 +00:00
|
|
|
logger: Logger;
|
2022-09-09 07:41:38 +00:00
|
|
|
getSeed: () => Uint8Array;
|
2022-08-29 02:01:51 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
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>;
|
2022-09-09 07:20:31 +00:00
|
|
|
|
|
|
|
export type OverwriteDataFn = (newData: Uint8Array) => Promise<Err>;
|
|
|
|
|
|
|
|
export type ReadDataFn = () => Promise<[Uint8Array, Err]>;
|
|
|
|
|
|
|
|
export interface IndependentFileSmallMetadata {
|
|
|
|
largestHistoricSize: bigint;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface IndependentFileSmall {
|
|
|
|
dataKey: Uint8Array;
|
|
|
|
fileData: Uint8Array;
|
|
|
|
inode: string;
|
|
|
|
keypair: Ed25519Keypair;
|
|
|
|
metadata: IndependentFileSmallMetadata;
|
|
|
|
revision: bigint;
|
|
|
|
seed: Uint8Array;
|
|
|
|
|
|
|
|
skylink: string;
|
|
|
|
viewKey: string;
|
|
|
|
|
|
|
|
overwriteData: OverwriteDataFn;
|
|
|
|
|
|
|
|
readData: ReadDataFn;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface SslData {
|
2022-09-09 08:01:57 +00:00
|
|
|
cert?: Uint8Array;
|
|
|
|
key?: Uint8Array;
|
2022-09-09 07:20:31 +00:00
|
|
|
}
|
2022-09-09 08:05:23 +00:00
|
|
|
|
|
|
|
export interface SavedSslData {
|
|
|
|
cert?: IndependentFileSmall;
|
|
|
|
key?: IndependentFileSmall;
|
|
|
|
}
|