From bd0305b974a614a66b715d36b16533aed45bd0ea Mon Sep 17 00:00:00 2001 From: candiduslynx Date: Mon, 12 Feb 2024 15:04:30 +0200 Subject: [PATCH 1/2] feat: Implement `GetSpecSchema` plugin gRPC API call --- package-lock.json | 8 ++++---- package.json | 2 +- src/grpc/plugin.ts | 7 +++++++ src/memdb/memdb.ts | 25 ++++++++++++++++++++++++- src/plugin/plugin.ts | 3 +++ 5 files changed, 39 insertions(+), 6 deletions(-) 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..12966a8 100644 --- a/src/grpc/plugin.ts +++ b/src/grpc/plugin.ts @@ -47,6 +47,13 @@ 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, + 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..334db03 100644 --- a/src/memdb/memdb.ts +++ b/src/memdb/memdb.ts @@ -95,7 +95,30 @@ 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..5105051 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) => { From ceaffaeae86ee77dd525ac6556f878b1860ea4a8 Mon Sep 17 00:00:00 2001 From: candiduslynx Date: Mon, 12 Feb 2024 15:11:31 +0200 Subject: [PATCH 2/2] npm run format --- src/grpc/plugin.ts | 13 ++++++++++--- src/memdb/memdb.ts | 12 +++++------- src/plugin/plugin.ts | 2 +- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/grpc/plugin.ts b/src/grpc/plugin.ts index 12966a8..2a572a1 100644 --- a/src/grpc/plugin.ts +++ b/src/grpc/plugin.ts @@ -49,9 +49,16 @@ export class PluginServer extends pluginV3.cloudquery.plugin.v3.UnimplementedPlu } GetSpecSchema( - call: grpc.ServerUnaryCall, - callback: grpc.sendUnaryData): void { - return callback(null, new pluginV3.cloudquery.plugin.v3.GetSpecSchema.Response({ json_schema: this.plugin.jsonSchema() })); + 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( diff --git a/src/memdb/memdb.ts b/src/memdb/memdb.ts index 334db03..08abde0 100644 --- a/src/memdb/memdb.ts +++ b/src/memdb/memdb.ts @@ -95,11 +95,10 @@ export const newMemDBPlugin = (): Plugin => { return Promise.resolve(pluginClient); }; - const plugin = newPlugin('memdb', '0.0.1', newClient, - { - team: 'cloudquery', - kind: 'source', - jsonSchema: `{ + 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", @@ -117,8 +116,7 @@ export const newMemDBPlugin = (): Plugin => { }, } }`, - }, - ); + }); pluginClient.plugin = plugin; return plugin; }; diff --git a/src/plugin/plugin.ts b/src/plugin/plugin.ts index 5105051..fe4291b 100644 --- a/src/plugin/plugin.ts +++ b/src/plugin/plugin.ts @@ -66,7 +66,7 @@ export interface Plugin extends Client { version: () => string; team: () => string | undefined; kind: () => PluginKind | undefined; - jsonSchema: () => string | undefined, + jsonSchema: () => string | undefined; dockerFile: () => string; buildTargets: () => BuildTarget[]; init: (spec: string, options: NewClientOptions) => Promise;