@caido/sdk-backend 0.55.3 → 0.55.4-beta.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.
Files changed (2) hide show
  1. package/package.json +5 -3
  2. package/src/typing.d.ts +38 -18
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@caido/sdk-backend",
3
- "version": "0.55.3",
3
+ "version": "0.55.4-beta.1",
4
4
  "description": "Typing for the Caido Backend SDK",
5
5
  "author": "Caido Labs Inc. <dev@caido.io>",
6
6
  "repository": "https://github.com/caido/sdk-js/",
@@ -10,10 +10,12 @@
10
10
  "src/*"
11
11
  ],
12
12
  "dependencies": {
13
- "@caido/quickjs-types": "^0.25.4",
14
- "@caido/sdk-shared": "^0.1.0"
13
+ "@caido/quickjs-types": "^0.26.0",
14
+ "@caido/sdk-shared": "^0.2.0"
15
15
  },
16
16
  "scripts": {
17
+ "build": "echo 'No build step required for @caido/sdk-backend'",
18
+ "typecheck": "tsc --noEmit",
17
19
  "generate:doc": "typedoc"
18
20
  }
19
21
  }
package/src/typing.d.ts CHANGED
@@ -1,30 +1,47 @@
1
1
  declare module "caido:plugin" {
2
- import type { Database } from "sqlite";
3
2
  import type {
4
- MaybePromise,
5
- FindingsSDK,
6
- RequestsSDK,
7
- Request,
8
- Response,
9
- ReplaySDK,
10
- ProjectsSDK,
11
- Project,
3
+ Connection,
12
4
  EnvironmentSDK,
13
- RuntimeSDK,
14
- ScopeSDK,
5
+ FindingsSDK,
15
6
  GraphQLSDK,
16
7
  HostedFileSDK,
8
+ MaybePromise,
17
9
  NetSDK,
18
- RequestSpecRaw,
19
- Connection,
10
+ Project,
11
+ ProjectsSDK,
12
+ ReplaySDK,
13
+ Request,
20
14
  RequestSpec,
15
+ RequestSpecRaw,
16
+ RequestsSDK,
17
+ Response,
18
+ RuntimeSDK,
19
+ ScopeSDK,
21
20
  } from "caido:utils";
21
+ import type { Database } from "sqlite";
22
+
23
+ type MaybePromise<T> = T | Promise<T>;
24
+
25
+ type AnyFn = (...args: any[]) => MaybePromise<any>;
26
+ type InvalidCallbackMessage =
27
+ "Your callback must respect the format (sdk: SDK, ...args: unknown[]) => MaybePromise<unknown>";
28
+ type ResolvedAPI<T> = T extends { api: infer A } ? A : T;
29
+ type APICallback<T> = T extends AnyFn
30
+ ? (sdk: SDK, ...args: Parameters<T>) => ReturnType<T>
31
+ : InvalidCallbackMessage;
32
+
33
+ type AnyVoidFn = (...args: any[]) => MaybePromise<void>;
34
+ type ResolvedEvents<T, Events> = T extends { events: infer A } ? A : Events;
35
+ type InvalidEventParametersMessage = "Invalid event parameters";
36
+ type EventParameters<T> = T extends AnyVoidFn
37
+ ? A
38
+ : InvalidEventParametersMessage;
22
39
 
23
40
  /**
24
41
  * The SDK for the API RPC service.
25
42
  * @category API
26
43
  */
27
- export type APISDK<API = {}, Events = {}> = {
44
+ export type APISDK<SpecOrAPI = {}, Events = {}> = {
28
45
  /**
29
46
  * Sends an event to the frontend plugin.
30
47
  *
@@ -33,7 +50,10 @@ declare module "caido:plugin" {
33
50
  * sdk.api.send("myEvent", 5, "hello");
34
51
  * ```
35
52
  */
36
- send(event: keyof Events, ...args: any[]): void;
53
+ send<K extends keyof ResolvedEvents<SpecOrAPI, Events>>(
54
+ event: K,
55
+ ...args: EventParameters<ResolvedEvents<SpecOrAPI, Events>[K]>
56
+ ): void;
37
57
 
38
58
  /**
39
59
  * Registers a new backend function for the RPC.
@@ -45,9 +65,9 @@ declare module "caido:plugin" {
45
65
  * });
46
66
  * ```
47
67
  */
48
- register(
49
- name: keyof API,
50
- callback: (sdk: SDK, ...args: any[]) => MaybePromise<any>,
68
+ register<K extends keyof ResolvedAPI<SpecOrAPI>>(
69
+ name: K,
70
+ callback: APICallback<ResolvedAPI<SpecOrAPI>[K]>,
51
71
  ): void;
52
72
  };
53
73