diff --git a/package-lock.json b/package-lock.json index 86edcb5..96a0303 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "MPL-2.0", "dependencies": { "@apache-arrow/esnext-esm": "^12.0.1", - "@cloudquery/plugin-pb-javascript": "^0.0.14", + "@cloudquery/plugin-pb-javascript": "^0.0.15", "@grpc/grpc-js": "^1.9.0", "@types/luxon": "^3.3.1", "ajv": "^8.12.0", @@ -264,9 +264,9 @@ } }, "node_modules/@cloudquery/plugin-pb-javascript": { - "version": "0.0.14", - "resolved": "https://registry.npmjs.org/@cloudquery/plugin-pb-javascript/-/plugin-pb-javascript-0.0.14.tgz", - "integrity": "sha512-D10skSdHwaxKw98mMZYeXnCvZXWBD+2BVyj/fCYdmm3k+rmurkFUrQpCylG+h9ftFiWzItgJI1jCaTyvMt13tg==", + "version": "0.0.15", + "resolved": "https://registry.npmjs.org/@cloudquery/plugin-pb-javascript/-/plugin-pb-javascript-0.0.15.tgz", + "integrity": "sha512-qYLRxRGr2Hgg3+YQ73a0Zogk0Hm4Z0WVSmfmpkU7n18Fs7HbmL3Rr0O+EfzfpmeU6LuCnE/48RglS/YSAd6vVQ==", "dependencies": { "google-protobuf": "^3.21.2" }, diff --git a/package.json b/package.json index ae2e6cc..f1452f7 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,7 @@ }, "dependencies": { "@apache-arrow/esnext-esm": "^12.0.1", - "@cloudquery/plugin-pb-javascript": "^0.0.14", + "@cloudquery/plugin-pb-javascript": "^0.0.15", "@grpc/grpc-js": "^1.9.0", "@types/luxon": "^3.3.1", "ajv": "^8.12.0", diff --git a/src/grpc/plugin.ts b/src/grpc/plugin.ts index f15fbf3..2a572a1 100644 --- a/src/grpc/plugin.ts +++ b/src/grpc/plugin.ts @@ -47,6 +47,20 @@ export class PluginServer extends pluginV3.cloudquery.plugin.v3.UnimplementedPlu ): void { return callback(null, new pluginV3.cloudquery.plugin.v3.GetVersion.Response({ version: this.plugin.version() })); } + + GetSpecSchema( + call: grpc.ServerUnaryCall< + pluginV3.cloudquery.plugin.v3.GetSpecSchema.Request, + pluginV3.cloudquery.plugin.v3.GetSpecSchema.Response + >, + callback: grpc.sendUnaryData, + ): void { + return callback( + null, + new pluginV3.cloudquery.plugin.v3.GetSpecSchema.Response({ json_schema: this.plugin.jsonSchema() }), + ); + } + Init( call: grpc.ServerUnaryCall, callback: grpc.sendUnaryData, diff --git a/src/memdb/memdb.ts b/src/memdb/memdb.ts index 6245a86..08abde0 100644 --- a/src/memdb/memdb.ts +++ b/src/memdb/memdb.ts @@ -95,7 +95,28 @@ export const newMemDBPlugin = (): Plugin => { return Promise.resolve(pluginClient); }; - const plugin = newPlugin('memdb', '0.0.1', newClient, { team: 'cloudquery', kind: 'source' }); + const plugin = newPlugin('memdb', '0.0.1', newClient, { + team: 'cloudquery', + kind: 'source', + jsonSchema: `{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://github.com/cloudquery/plugin-sdk-javascript/memdb/spec", + "$ref": "#/$defs/Spec", + "$defs": { + "Spec": { + "properties": { + "concurrency": { + "type": "integer", + "minimum": 1, + "description": "Concurrency." + } + }, + "additionalProperties": false, + "type": "object", + }, + } +}`, + }); pluginClient.plugin = plugin; return plugin; }; diff --git a/src/plugin/plugin.ts b/src/plugin/plugin.ts index 4889c6c..fe4291b 100644 --- a/src/plugin/plugin.ts +++ b/src/plugin/plugin.ts @@ -42,6 +42,7 @@ export type PluginOptions = { kind: PluginKind; dockerFile?: string; buildTargets?: BuildTarget[]; + jsonSchema?: string; }; export interface SourceClient { @@ -65,6 +66,7 @@ export interface Plugin extends Client { version: () => string; team: () => string | undefined; kind: () => PluginKind | undefined; + jsonSchema: () => string | undefined; dockerFile: () => string; buildTargets: () => BuildTarget[]; init: (spec: string, options: NewClientOptions) => Promise; @@ -102,6 +104,7 @@ export const newPlugin = ( version: () => version, team: () => options?.team, kind: () => options?.kind, + jsonSchema: () => options?.jsonSchema, dockerFile: () => options?.dockerFile || 'Dockerfile', buildTargets: () => options?.buildTargets || defaultBuildTargets, write: (stream: WriteStream) => {