Merge pull request #54 from spotify/bil/add-typescript-gen
Added Protobuf definitions for TypeScript using Prototool
This commit is contained in:
@@ -8,6 +8,16 @@ Backstage is an open platform for building developer portals.
|
||||
|
||||
## Getting started
|
||||
|
||||
### Protobuf Definitions
|
||||
|
||||
To generate the Protobuf definitions in Go and TypeScript, run the following command from the root with [Prototool](https://github.com/uber/prototool):
|
||||
|
||||
```bash
|
||||
$ prototool generate ./proto
|
||||
```
|
||||
|
||||
See [proto/README.md](proto/README.md) for more information.
|
||||
|
||||
## Plugins
|
||||
|
||||
### Creating a Plugin
|
||||
|
||||
@@ -22,8 +22,7 @@
|
||||
},
|
||||
"scripts": {
|
||||
"lint": "web-scripts lint",
|
||||
"test": "web-scripts test",
|
||||
"proto": "../../../scripts/gen-proto.sh hello.proto"
|
||||
"test": "web-scripts test"
|
||||
},
|
||||
"license": "Apache-2.0"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"private": true,
|
||||
"name": "@backstage/protobuf-definitions",
|
||||
"version": "0.0.0",
|
||||
"devDependencies": {
|
||||
"ts-protoc-gen": "^0.12.0"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,151 @@
|
||||
// package: spotify.backstage.identity.v1
|
||||
// file: identity/v1/identity.proto
|
||||
|
||||
import * as jspb from "google-protobuf";
|
||||
|
||||
export class GetUserRequest extends jspb.Message {
|
||||
getId(): string;
|
||||
setId(value: string): void;
|
||||
|
||||
serializeBinary(): Uint8Array;
|
||||
toObject(includeInstance?: boolean): GetUserRequest.AsObject;
|
||||
static toObject(includeInstance: boolean, msg: GetUserRequest): GetUserRequest.AsObject;
|
||||
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
|
||||
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
|
||||
static serializeBinaryToWriter(message: GetUserRequest, writer: jspb.BinaryWriter): void;
|
||||
static deserializeBinary(bytes: Uint8Array): GetUserRequest;
|
||||
static deserializeBinaryFromReader(message: GetUserRequest, reader: jspb.BinaryReader): GetUserRequest;
|
||||
}
|
||||
|
||||
export namespace GetUserRequest {
|
||||
export type AsObject = {
|
||||
id: string,
|
||||
}
|
||||
}
|
||||
|
||||
export class GetUserReply extends jspb.Message {
|
||||
hasUser(): boolean;
|
||||
clearUser(): void;
|
||||
getUser(): User | undefined;
|
||||
setUser(value?: User): void;
|
||||
|
||||
clearGroupsList(): void;
|
||||
getGroupsList(): Array<Group>;
|
||||
setGroupsList(value: Array<Group>): void;
|
||||
addGroups(value?: Group, index?: number): Group;
|
||||
|
||||
serializeBinary(): Uint8Array;
|
||||
toObject(includeInstance?: boolean): GetUserReply.AsObject;
|
||||
static toObject(includeInstance: boolean, msg: GetUserReply): GetUserReply.AsObject;
|
||||
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
|
||||
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
|
||||
static serializeBinaryToWriter(message: GetUserReply, writer: jspb.BinaryWriter): void;
|
||||
static deserializeBinary(bytes: Uint8Array): GetUserReply;
|
||||
static deserializeBinaryFromReader(message: GetUserReply, reader: jspb.BinaryReader): GetUserReply;
|
||||
}
|
||||
|
||||
export namespace GetUserReply {
|
||||
export type AsObject = {
|
||||
user?: User.AsObject,
|
||||
groupsList: Array<Group.AsObject>,
|
||||
}
|
||||
}
|
||||
|
||||
export class GetGroupRequest extends jspb.Message {
|
||||
getId(): string;
|
||||
setId(value: string): void;
|
||||
|
||||
serializeBinary(): Uint8Array;
|
||||
toObject(includeInstance?: boolean): GetGroupRequest.AsObject;
|
||||
static toObject(includeInstance: boolean, msg: GetGroupRequest): GetGroupRequest.AsObject;
|
||||
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
|
||||
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
|
||||
static serializeBinaryToWriter(message: GetGroupRequest, writer: jspb.BinaryWriter): void;
|
||||
static deserializeBinary(bytes: Uint8Array): GetGroupRequest;
|
||||
static deserializeBinaryFromReader(message: GetGroupRequest, reader: jspb.BinaryReader): GetGroupRequest;
|
||||
}
|
||||
|
||||
export namespace GetGroupRequest {
|
||||
export type AsObject = {
|
||||
id: string,
|
||||
}
|
||||
}
|
||||
|
||||
export class GetGroupReply extends jspb.Message {
|
||||
hasGroup(): boolean;
|
||||
clearGroup(): void;
|
||||
getGroup(): Group | undefined;
|
||||
setGroup(value?: Group): void;
|
||||
|
||||
serializeBinary(): Uint8Array;
|
||||
toObject(includeInstance?: boolean): GetGroupReply.AsObject;
|
||||
static toObject(includeInstance: boolean, msg: GetGroupReply): GetGroupReply.AsObject;
|
||||
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
|
||||
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
|
||||
static serializeBinaryToWriter(message: GetGroupReply, writer: jspb.BinaryWriter): void;
|
||||
static deserializeBinary(bytes: Uint8Array): GetGroupReply;
|
||||
static deserializeBinaryFromReader(message: GetGroupReply, reader: jspb.BinaryReader): GetGroupReply;
|
||||
}
|
||||
|
||||
export namespace GetGroupReply {
|
||||
export type AsObject = {
|
||||
group?: Group.AsObject,
|
||||
}
|
||||
}
|
||||
|
||||
export class User extends jspb.Message {
|
||||
getId(): string;
|
||||
setId(value: string): void;
|
||||
|
||||
getName(): string;
|
||||
setName(value: string): void;
|
||||
|
||||
serializeBinary(): Uint8Array;
|
||||
toObject(includeInstance?: boolean): User.AsObject;
|
||||
static toObject(includeInstance: boolean, msg: User): User.AsObject;
|
||||
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
|
||||
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
|
||||
static serializeBinaryToWriter(message: User, writer: jspb.BinaryWriter): void;
|
||||
static deserializeBinary(bytes: Uint8Array): User;
|
||||
static deserializeBinaryFromReader(message: User, reader: jspb.BinaryReader): User;
|
||||
}
|
||||
|
||||
export namespace User {
|
||||
export type AsObject = {
|
||||
id: string,
|
||||
name: string,
|
||||
}
|
||||
}
|
||||
|
||||
export class Group extends jspb.Message {
|
||||
getId(): string;
|
||||
setId(value: string): void;
|
||||
|
||||
clearUsersList(): void;
|
||||
getUsersList(): Array<User>;
|
||||
setUsersList(value: Array<User>): void;
|
||||
addUsers(value?: User, index?: number): User;
|
||||
|
||||
clearGroupsList(): void;
|
||||
getGroupsList(): Array<Group>;
|
||||
setGroupsList(value: Array<Group>): void;
|
||||
addGroups(value?: Group, index?: number): Group;
|
||||
|
||||
serializeBinary(): Uint8Array;
|
||||
toObject(includeInstance?: boolean): Group.AsObject;
|
||||
static toObject(includeInstance: boolean, msg: Group): Group.AsObject;
|
||||
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
|
||||
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
|
||||
static serializeBinaryToWriter(message: Group, writer: jspb.BinaryWriter): void;
|
||||
static deserializeBinary(bytes: Uint8Array): Group;
|
||||
static deserializeBinaryFromReader(message: Group, reader: jspb.BinaryReader): Group;
|
||||
}
|
||||
|
||||
export namespace Group {
|
||||
export type AsObject = {
|
||||
id: string,
|
||||
usersList: Array<User.AsObject>,
|
||||
groupsList: Array<Group.AsObject>,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
// package: spotify.backstage.identity.v1
|
||||
// file: identity/v1/identity.proto
|
||||
|
||||
import * as identity_v1_identity_pb from "../../identity/v1/identity_pb";
|
||||
import {grpc} from "@improbable-eng/grpc-web";
|
||||
|
||||
type IdentityGetUser = {
|
||||
readonly methodName: string;
|
||||
readonly service: typeof Identity;
|
||||
readonly requestStream: false;
|
||||
readonly responseStream: false;
|
||||
readonly requestType: typeof identity_v1_identity_pb.GetUserRequest;
|
||||
readonly responseType: typeof identity_v1_identity_pb.GetUserReply;
|
||||
};
|
||||
|
||||
type IdentityGetGroup = {
|
||||
readonly methodName: string;
|
||||
readonly service: typeof Identity;
|
||||
readonly requestStream: false;
|
||||
readonly responseStream: false;
|
||||
readonly requestType: typeof identity_v1_identity_pb.GetGroupRequest;
|
||||
readonly responseType: typeof identity_v1_identity_pb.GetGroupReply;
|
||||
};
|
||||
|
||||
export class Identity {
|
||||
static readonly serviceName: string;
|
||||
static readonly GetUser: IdentityGetUser;
|
||||
static readonly GetGroup: IdentityGetGroup;
|
||||
}
|
||||
|
||||
export type ServiceError = { message: string, code: number; metadata: grpc.Metadata }
|
||||
export type Status = { details: string, code: number; metadata: grpc.Metadata }
|
||||
|
||||
interface UnaryResponse {
|
||||
cancel(): void;
|
||||
}
|
||||
interface ResponseStream<T> {
|
||||
cancel(): void;
|
||||
on(type: 'data', handler: (message: T) => void): ResponseStream<T>;
|
||||
on(type: 'end', handler: (status?: Status) => void): ResponseStream<T>;
|
||||
on(type: 'status', handler: (status: Status) => void): ResponseStream<T>;
|
||||
}
|
||||
interface RequestStream<T> {
|
||||
write(message: T): RequestStream<T>;
|
||||
end(): void;
|
||||
cancel(): void;
|
||||
on(type: 'end', handler: (status?: Status) => void): RequestStream<T>;
|
||||
on(type: 'status', handler: (status: Status) => void): RequestStream<T>;
|
||||
}
|
||||
interface BidirectionalStream<ReqT, ResT> {
|
||||
write(message: ReqT): BidirectionalStream<ReqT, ResT>;
|
||||
end(): void;
|
||||
cancel(): void;
|
||||
on(type: 'data', handler: (message: ResT) => void): BidirectionalStream<ReqT, ResT>;
|
||||
on(type: 'end', handler: (status?: Status) => void): BidirectionalStream<ReqT, ResT>;
|
||||
on(type: 'status', handler: (status: Status) => void): BidirectionalStream<ReqT, ResT>;
|
||||
}
|
||||
|
||||
export class IdentityClient {
|
||||
readonly serviceHost: string;
|
||||
|
||||
constructor(serviceHost: string, options?: grpc.RpcOptions);
|
||||
getUser(
|
||||
requestMessage: identity_v1_identity_pb.GetUserRequest,
|
||||
metadata: grpc.Metadata,
|
||||
callback: (error: ServiceError|null, responseMessage: identity_v1_identity_pb.GetUserReply|null) => void
|
||||
): UnaryResponse;
|
||||
getUser(
|
||||
requestMessage: identity_v1_identity_pb.GetUserRequest,
|
||||
callback: (error: ServiceError|null, responseMessage: identity_v1_identity_pb.GetUserReply|null) => void
|
||||
): UnaryResponse;
|
||||
getGroup(
|
||||
requestMessage: identity_v1_identity_pb.GetGroupRequest,
|
||||
metadata: grpc.Metadata,
|
||||
callback: (error: ServiceError|null, responseMessage: identity_v1_identity_pb.GetGroupReply|null) => void
|
||||
): UnaryResponse;
|
||||
getGroup(
|
||||
requestMessage: identity_v1_identity_pb.GetGroupRequest,
|
||||
callback: (error: ServiceError|null, responseMessage: identity_v1_identity_pb.GetGroupReply|null) => void
|
||||
): UnaryResponse;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,101 @@
|
||||
// package: spotify.backstage.identity.v1
|
||||
// file: identity/v1/identity.proto
|
||||
|
||||
var identity_v1_identity_pb = require("../../identity/v1/identity_pb");
|
||||
var grpc = require("@improbable-eng/grpc-web").grpc;
|
||||
|
||||
var Identity = (function () {
|
||||
function Identity() {}
|
||||
Identity.serviceName = "spotify.backstage.identity.v1.Identity";
|
||||
return Identity;
|
||||
}());
|
||||
|
||||
Identity.GetUser = {
|
||||
methodName: "GetUser",
|
||||
service: Identity,
|
||||
requestStream: false,
|
||||
responseStream: false,
|
||||
requestType: identity_v1_identity_pb.GetUserRequest,
|
||||
responseType: identity_v1_identity_pb.GetUserReply
|
||||
};
|
||||
|
||||
Identity.GetGroup = {
|
||||
methodName: "GetGroup",
|
||||
service: Identity,
|
||||
requestStream: false,
|
||||
responseStream: false,
|
||||
requestType: identity_v1_identity_pb.GetGroupRequest,
|
||||
responseType: identity_v1_identity_pb.GetGroupReply
|
||||
};
|
||||
|
||||
exports.Identity = Identity;
|
||||
|
||||
function IdentityClient(serviceHost, options) {
|
||||
this.serviceHost = serviceHost;
|
||||
this.options = options || {};
|
||||
}
|
||||
|
||||
IdentityClient.prototype.getUser = function getUser(requestMessage, metadata, callback) {
|
||||
if (arguments.length === 2) {
|
||||
callback = arguments[1];
|
||||
}
|
||||
var client = grpc.unary(Identity.GetUser, {
|
||||
request: requestMessage,
|
||||
host: this.serviceHost,
|
||||
metadata: metadata,
|
||||
transport: this.options.transport,
|
||||
debug: this.options.debug,
|
||||
onEnd: function (response) {
|
||||
if (callback) {
|
||||
if (response.status !== grpc.Code.OK) {
|
||||
var err = new Error(response.statusMessage);
|
||||
err.code = response.status;
|
||||
err.metadata = response.trailers;
|
||||
callback(err, null);
|
||||
} else {
|
||||
callback(null, response.message);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
return {
|
||||
cancel: function () {
|
||||
callback = null;
|
||||
client.close();
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
IdentityClient.prototype.getGroup = function getGroup(requestMessage, metadata, callback) {
|
||||
if (arguments.length === 2) {
|
||||
callback = arguments[1];
|
||||
}
|
||||
var client = grpc.unary(Identity.GetGroup, {
|
||||
request: requestMessage,
|
||||
host: this.serviceHost,
|
||||
metadata: metadata,
|
||||
transport: this.options.transport,
|
||||
debug: this.options.debug,
|
||||
onEnd: function (response) {
|
||||
if (callback) {
|
||||
if (response.status !== grpc.Code.OK) {
|
||||
var err = new Error(response.statusMessage);
|
||||
err.code = response.status;
|
||||
err.metadata = response.trailers;
|
||||
callback(err, null);
|
||||
} else {
|
||||
callback(null, response.message);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
return {
|
||||
cancel: function () {
|
||||
callback = null;
|
||||
client.close();
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
exports.IdentityClient = IdentityClient;
|
||||
|
||||
@@ -0,0 +1,149 @@
|
||||
// package: spotify.backstage.inventory.v1
|
||||
// file: inventory/v1/inventory.proto
|
||||
|
||||
import * as jspb from "google-protobuf";
|
||||
|
||||
export class GetEntityRequest extends jspb.Message {
|
||||
hasEntity(): boolean;
|
||||
clearEntity(): void;
|
||||
getEntity(): Entity | undefined;
|
||||
setEntity(value?: Entity): void;
|
||||
|
||||
clearIncludeFactsList(): void;
|
||||
getIncludeFactsList(): Array<string>;
|
||||
setIncludeFactsList(value: Array<string>): void;
|
||||
addIncludeFacts(value: string, index?: number): string;
|
||||
|
||||
serializeBinary(): Uint8Array;
|
||||
toObject(includeInstance?: boolean): GetEntityRequest.AsObject;
|
||||
static toObject(includeInstance: boolean, msg: GetEntityRequest): GetEntityRequest.AsObject;
|
||||
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
|
||||
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
|
||||
static serializeBinaryToWriter(message: GetEntityRequest, writer: jspb.BinaryWriter): void;
|
||||
static deserializeBinary(bytes: Uint8Array): GetEntityRequest;
|
||||
static deserializeBinaryFromReader(message: GetEntityRequest, reader: jspb.BinaryReader): GetEntityRequest;
|
||||
}
|
||||
|
||||
export namespace GetEntityRequest {
|
||||
export type AsObject = {
|
||||
entity?: Entity.AsObject,
|
||||
includeFactsList: Array<string>,
|
||||
}
|
||||
}
|
||||
|
||||
export class GetEntityReply extends jspb.Message {
|
||||
hasEntity(): boolean;
|
||||
clearEntity(): void;
|
||||
getEntity(): Entity | undefined;
|
||||
setEntity(value?: Entity): void;
|
||||
|
||||
clearFactsList(): void;
|
||||
getFactsList(): Array<Fact>;
|
||||
setFactsList(value: Array<Fact>): void;
|
||||
addFacts(value?: Fact, index?: number): Fact;
|
||||
|
||||
serializeBinary(): Uint8Array;
|
||||
toObject(includeInstance?: boolean): GetEntityReply.AsObject;
|
||||
static toObject(includeInstance: boolean, msg: GetEntityReply): GetEntityReply.AsObject;
|
||||
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
|
||||
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
|
||||
static serializeBinaryToWriter(message: GetEntityReply, writer: jspb.BinaryWriter): void;
|
||||
static deserializeBinary(bytes: Uint8Array): GetEntityReply;
|
||||
static deserializeBinaryFromReader(message: GetEntityReply, reader: jspb.BinaryReader): GetEntityReply;
|
||||
}
|
||||
|
||||
export namespace GetEntityReply {
|
||||
export type AsObject = {
|
||||
entity?: Entity.AsObject,
|
||||
factsList: Array<Fact.AsObject>,
|
||||
}
|
||||
}
|
||||
|
||||
export class CreateEntityRequest extends jspb.Message {
|
||||
hasEntity(): boolean;
|
||||
clearEntity(): void;
|
||||
getEntity(): Entity | undefined;
|
||||
setEntity(value?: Entity): void;
|
||||
|
||||
serializeBinary(): Uint8Array;
|
||||
toObject(includeInstance?: boolean): CreateEntityRequest.AsObject;
|
||||
static toObject(includeInstance: boolean, msg: CreateEntityRequest): CreateEntityRequest.AsObject;
|
||||
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
|
||||
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
|
||||
static serializeBinaryToWriter(message: CreateEntityRequest, writer: jspb.BinaryWriter): void;
|
||||
static deserializeBinary(bytes: Uint8Array): CreateEntityRequest;
|
||||
static deserializeBinaryFromReader(message: CreateEntityRequest, reader: jspb.BinaryReader): CreateEntityRequest;
|
||||
}
|
||||
|
||||
export namespace CreateEntityRequest {
|
||||
export type AsObject = {
|
||||
entity?: Entity.AsObject,
|
||||
}
|
||||
}
|
||||
|
||||
export class CreateEntityReply extends jspb.Message {
|
||||
hasEntity(): boolean;
|
||||
clearEntity(): void;
|
||||
getEntity(): Entity | undefined;
|
||||
setEntity(value?: Entity): void;
|
||||
|
||||
serializeBinary(): Uint8Array;
|
||||
toObject(includeInstance?: boolean): CreateEntityReply.AsObject;
|
||||
static toObject(includeInstance: boolean, msg: CreateEntityReply): CreateEntityReply.AsObject;
|
||||
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
|
||||
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
|
||||
static serializeBinaryToWriter(message: CreateEntityReply, writer: jspb.BinaryWriter): void;
|
||||
static deserializeBinary(bytes: Uint8Array): CreateEntityReply;
|
||||
static deserializeBinaryFromReader(message: CreateEntityReply, reader: jspb.BinaryReader): CreateEntityReply;
|
||||
}
|
||||
|
||||
export namespace CreateEntityReply {
|
||||
export type AsObject = {
|
||||
entity?: Entity.AsObject,
|
||||
}
|
||||
}
|
||||
|
||||
export class Entity extends jspb.Message {
|
||||
getUri(): string;
|
||||
setUri(value: string): void;
|
||||
|
||||
serializeBinary(): Uint8Array;
|
||||
toObject(includeInstance?: boolean): Entity.AsObject;
|
||||
static toObject(includeInstance: boolean, msg: Entity): Entity.AsObject;
|
||||
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
|
||||
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
|
||||
static serializeBinaryToWriter(message: Entity, writer: jspb.BinaryWriter): void;
|
||||
static deserializeBinary(bytes: Uint8Array): Entity;
|
||||
static deserializeBinaryFromReader(message: Entity, reader: jspb.BinaryReader): Entity;
|
||||
}
|
||||
|
||||
export namespace Entity {
|
||||
export type AsObject = {
|
||||
uri: string,
|
||||
}
|
||||
}
|
||||
|
||||
export class Fact extends jspb.Message {
|
||||
getName(): string;
|
||||
setName(value: string): void;
|
||||
|
||||
getValue(): string;
|
||||
setValue(value: string): void;
|
||||
|
||||
serializeBinary(): Uint8Array;
|
||||
toObject(includeInstance?: boolean): Fact.AsObject;
|
||||
static toObject(includeInstance: boolean, msg: Fact): Fact.AsObject;
|
||||
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
|
||||
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
|
||||
static serializeBinaryToWriter(message: Fact, writer: jspb.BinaryWriter): void;
|
||||
static deserializeBinary(bytes: Uint8Array): Fact;
|
||||
static deserializeBinaryFromReader(message: Fact, reader: jspb.BinaryReader): Fact;
|
||||
}
|
||||
|
||||
export namespace Fact {
|
||||
export type AsObject = {
|
||||
name: string,
|
||||
value: string,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
// package: spotify.backstage.inventory.v1
|
||||
// file: inventory/v1/inventory.proto
|
||||
|
||||
import * as inventory_v1_inventory_pb from "../../inventory/v1/inventory_pb";
|
||||
import {grpc} from "@improbable-eng/grpc-web";
|
||||
|
||||
type InventoryGetEntity = {
|
||||
readonly methodName: string;
|
||||
readonly service: typeof Inventory;
|
||||
readonly requestStream: false;
|
||||
readonly responseStream: false;
|
||||
readonly requestType: typeof inventory_v1_inventory_pb.GetEntityRequest;
|
||||
readonly responseType: typeof inventory_v1_inventory_pb.GetEntityReply;
|
||||
};
|
||||
|
||||
type InventoryCreateEntity = {
|
||||
readonly methodName: string;
|
||||
readonly service: typeof Inventory;
|
||||
readonly requestStream: false;
|
||||
readonly responseStream: false;
|
||||
readonly requestType: typeof inventory_v1_inventory_pb.CreateEntityRequest;
|
||||
readonly responseType: typeof inventory_v1_inventory_pb.CreateEntityReply;
|
||||
};
|
||||
|
||||
export class Inventory {
|
||||
static readonly serviceName: string;
|
||||
static readonly GetEntity: InventoryGetEntity;
|
||||
static readonly CreateEntity: InventoryCreateEntity;
|
||||
}
|
||||
|
||||
export type ServiceError = { message: string, code: number; metadata: grpc.Metadata }
|
||||
export type Status = { details: string, code: number; metadata: grpc.Metadata }
|
||||
|
||||
interface UnaryResponse {
|
||||
cancel(): void;
|
||||
}
|
||||
interface ResponseStream<T> {
|
||||
cancel(): void;
|
||||
on(type: 'data', handler: (message: T) => void): ResponseStream<T>;
|
||||
on(type: 'end', handler: (status?: Status) => void): ResponseStream<T>;
|
||||
on(type: 'status', handler: (status: Status) => void): ResponseStream<T>;
|
||||
}
|
||||
interface RequestStream<T> {
|
||||
write(message: T): RequestStream<T>;
|
||||
end(): void;
|
||||
cancel(): void;
|
||||
on(type: 'end', handler: (status?: Status) => void): RequestStream<T>;
|
||||
on(type: 'status', handler: (status: Status) => void): RequestStream<T>;
|
||||
}
|
||||
interface BidirectionalStream<ReqT, ResT> {
|
||||
write(message: ReqT): BidirectionalStream<ReqT, ResT>;
|
||||
end(): void;
|
||||
cancel(): void;
|
||||
on(type: 'data', handler: (message: ResT) => void): BidirectionalStream<ReqT, ResT>;
|
||||
on(type: 'end', handler: (status?: Status) => void): BidirectionalStream<ReqT, ResT>;
|
||||
on(type: 'status', handler: (status: Status) => void): BidirectionalStream<ReqT, ResT>;
|
||||
}
|
||||
|
||||
export class InventoryClient {
|
||||
readonly serviceHost: string;
|
||||
|
||||
constructor(serviceHost: string, options?: grpc.RpcOptions);
|
||||
getEntity(
|
||||
requestMessage: inventory_v1_inventory_pb.GetEntityRequest,
|
||||
metadata: grpc.Metadata,
|
||||
callback: (error: ServiceError|null, responseMessage: inventory_v1_inventory_pb.GetEntityReply|null) => void
|
||||
): UnaryResponse;
|
||||
getEntity(
|
||||
requestMessage: inventory_v1_inventory_pb.GetEntityRequest,
|
||||
callback: (error: ServiceError|null, responseMessage: inventory_v1_inventory_pb.GetEntityReply|null) => void
|
||||
): UnaryResponse;
|
||||
createEntity(
|
||||
requestMessage: inventory_v1_inventory_pb.CreateEntityRequest,
|
||||
metadata: grpc.Metadata,
|
||||
callback: (error: ServiceError|null, responseMessage: inventory_v1_inventory_pb.CreateEntityReply|null) => void
|
||||
): UnaryResponse;
|
||||
createEntity(
|
||||
requestMessage: inventory_v1_inventory_pb.CreateEntityRequest,
|
||||
callback: (error: ServiceError|null, responseMessage: inventory_v1_inventory_pb.CreateEntityReply|null) => void
|
||||
): UnaryResponse;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,101 @@
|
||||
// package: spotify.backstage.inventory.v1
|
||||
// file: inventory/v1/inventory.proto
|
||||
|
||||
var inventory_v1_inventory_pb = require("../../inventory/v1/inventory_pb");
|
||||
var grpc = require("@improbable-eng/grpc-web").grpc;
|
||||
|
||||
var Inventory = (function () {
|
||||
function Inventory() {}
|
||||
Inventory.serviceName = "spotify.backstage.inventory.v1.Inventory";
|
||||
return Inventory;
|
||||
}());
|
||||
|
||||
Inventory.GetEntity = {
|
||||
methodName: "GetEntity",
|
||||
service: Inventory,
|
||||
requestStream: false,
|
||||
responseStream: false,
|
||||
requestType: inventory_v1_inventory_pb.GetEntityRequest,
|
||||
responseType: inventory_v1_inventory_pb.GetEntityReply
|
||||
};
|
||||
|
||||
Inventory.CreateEntity = {
|
||||
methodName: "CreateEntity",
|
||||
service: Inventory,
|
||||
requestStream: false,
|
||||
responseStream: false,
|
||||
requestType: inventory_v1_inventory_pb.CreateEntityRequest,
|
||||
responseType: inventory_v1_inventory_pb.CreateEntityReply
|
||||
};
|
||||
|
||||
exports.Inventory = Inventory;
|
||||
|
||||
function InventoryClient(serviceHost, options) {
|
||||
this.serviceHost = serviceHost;
|
||||
this.options = options || {};
|
||||
}
|
||||
|
||||
InventoryClient.prototype.getEntity = function getEntity(requestMessage, metadata, callback) {
|
||||
if (arguments.length === 2) {
|
||||
callback = arguments[1];
|
||||
}
|
||||
var client = grpc.unary(Inventory.GetEntity, {
|
||||
request: requestMessage,
|
||||
host: this.serviceHost,
|
||||
metadata: metadata,
|
||||
transport: this.options.transport,
|
||||
debug: this.options.debug,
|
||||
onEnd: function (response) {
|
||||
if (callback) {
|
||||
if (response.status !== grpc.Code.OK) {
|
||||
var err = new Error(response.statusMessage);
|
||||
err.code = response.status;
|
||||
err.metadata = response.trailers;
|
||||
callback(err, null);
|
||||
} else {
|
||||
callback(null, response.message);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
return {
|
||||
cancel: function () {
|
||||
callback = null;
|
||||
client.close();
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
InventoryClient.prototype.createEntity = function createEntity(requestMessage, metadata, callback) {
|
||||
if (arguments.length === 2) {
|
||||
callback = arguments[1];
|
||||
}
|
||||
var client = grpc.unary(Inventory.CreateEntity, {
|
||||
request: requestMessage,
|
||||
host: this.serviceHost,
|
||||
metadata: metadata,
|
||||
transport: this.options.transport,
|
||||
debug: this.options.debug,
|
||||
onEnd: function (response) {
|
||||
if (callback) {
|
||||
if (response.status !== grpc.Code.OK) {
|
||||
var err = new Error(response.statusMessage);
|
||||
err.code = response.status;
|
||||
err.metadata = response.trailers;
|
||||
callback(err, null);
|
||||
} else {
|
||||
callback(null, response.message);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
return {
|
||||
cancel: function () {
|
||||
callback = null;
|
||||
client.close();
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
exports.InventoryClient = InventoryClient;
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
// package: spotify.backstage.scaffolder.v1
|
||||
// file: scaffolder/v1/scaffolder.proto
|
||||
|
||||
import * as jspb from "google-protobuf";
|
||||
import * as identity_v1_identity_pb from "../../identity/v1/identity_pb";
|
||||
|
||||
export class Empty extends jspb.Message {
|
||||
serializeBinary(): Uint8Array;
|
||||
toObject(includeInstance?: boolean): Empty.AsObject;
|
||||
static toObject(includeInstance: boolean, msg: Empty): Empty.AsObject;
|
||||
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
|
||||
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
|
||||
static serializeBinaryToWriter(message: Empty, writer: jspb.BinaryWriter): void;
|
||||
static deserializeBinary(bytes: Uint8Array): Empty;
|
||||
static deserializeBinaryFromReader(message: Empty, reader: jspb.BinaryReader): Empty;
|
||||
}
|
||||
|
||||
export namespace Empty {
|
||||
export type AsObject = {
|
||||
}
|
||||
}
|
||||
|
||||
export class GetAllTemplatesResponse extends jspb.Message {
|
||||
clearTemplatesList(): void;
|
||||
getTemplatesList(): Array<Template>;
|
||||
setTemplatesList(value: Array<Template>): void;
|
||||
addTemplates(value?: Template, index?: number): Template;
|
||||
|
||||
serializeBinary(): Uint8Array;
|
||||
toObject(includeInstance?: boolean): GetAllTemplatesResponse.AsObject;
|
||||
static toObject(includeInstance: boolean, msg: GetAllTemplatesResponse): GetAllTemplatesResponse.AsObject;
|
||||
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
|
||||
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
|
||||
static serializeBinaryToWriter(message: GetAllTemplatesResponse, writer: jspb.BinaryWriter): void;
|
||||
static deserializeBinary(bytes: Uint8Array): GetAllTemplatesResponse;
|
||||
static deserializeBinaryFromReader(message: GetAllTemplatesResponse, reader: jspb.BinaryReader): GetAllTemplatesResponse;
|
||||
}
|
||||
|
||||
export namespace GetAllTemplatesResponse {
|
||||
export type AsObject = {
|
||||
templatesList: Array<Template.AsObject>,
|
||||
}
|
||||
}
|
||||
|
||||
export class Template extends jspb.Message {
|
||||
getId(): string;
|
||||
setId(value: string): void;
|
||||
|
||||
getName(): string;
|
||||
setName(value: string): void;
|
||||
|
||||
hasUser(): boolean;
|
||||
clearUser(): void;
|
||||
getUser(): identity_v1_identity_pb.User | undefined;
|
||||
setUser(value?: identity_v1_identity_pb.User): void;
|
||||
|
||||
serializeBinary(): Uint8Array;
|
||||
toObject(includeInstance?: boolean): Template.AsObject;
|
||||
static toObject(includeInstance: boolean, msg: Template): Template.AsObject;
|
||||
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
|
||||
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
|
||||
static serializeBinaryToWriter(message: Template, writer: jspb.BinaryWriter): void;
|
||||
static deserializeBinary(bytes: Uint8Array): Template;
|
||||
static deserializeBinaryFromReader(message: Template, reader: jspb.BinaryReader): Template;
|
||||
}
|
||||
|
||||
export namespace Template {
|
||||
export type AsObject = {
|
||||
id: string,
|
||||
name: string,
|
||||
user?: identity_v1_identity_pb.User.AsObject,
|
||||
}
|
||||
}
|
||||
|
||||
+63
@@ -0,0 +1,63 @@
|
||||
// package: spotify.backstage.scaffolder.v1
|
||||
// file: scaffolder/v1/scaffolder.proto
|
||||
|
||||
import * as scaffolder_v1_scaffolder_pb from "../../scaffolder/v1/scaffolder_pb";
|
||||
import {grpc} from "@improbable-eng/grpc-web";
|
||||
|
||||
type ScaffolderGetAllTemplates = {
|
||||
readonly methodName: string;
|
||||
readonly service: typeof Scaffolder;
|
||||
readonly requestStream: false;
|
||||
readonly responseStream: false;
|
||||
readonly requestType: typeof scaffolder_v1_scaffolder_pb.Empty;
|
||||
readonly responseType: typeof scaffolder_v1_scaffolder_pb.GetAllTemplatesResponse;
|
||||
};
|
||||
|
||||
export class Scaffolder {
|
||||
static readonly serviceName: string;
|
||||
static readonly GetAllTemplates: ScaffolderGetAllTemplates;
|
||||
}
|
||||
|
||||
export type ServiceError = { message: string, code: number; metadata: grpc.Metadata }
|
||||
export type Status = { details: string, code: number; metadata: grpc.Metadata }
|
||||
|
||||
interface UnaryResponse {
|
||||
cancel(): void;
|
||||
}
|
||||
interface ResponseStream<T> {
|
||||
cancel(): void;
|
||||
on(type: 'data', handler: (message: T) => void): ResponseStream<T>;
|
||||
on(type: 'end', handler: (status?: Status) => void): ResponseStream<T>;
|
||||
on(type: 'status', handler: (status: Status) => void): ResponseStream<T>;
|
||||
}
|
||||
interface RequestStream<T> {
|
||||
write(message: T): RequestStream<T>;
|
||||
end(): void;
|
||||
cancel(): void;
|
||||
on(type: 'end', handler: (status?: Status) => void): RequestStream<T>;
|
||||
on(type: 'status', handler: (status: Status) => void): RequestStream<T>;
|
||||
}
|
||||
interface BidirectionalStream<ReqT, ResT> {
|
||||
write(message: ReqT): BidirectionalStream<ReqT, ResT>;
|
||||
end(): void;
|
||||
cancel(): void;
|
||||
on(type: 'data', handler: (message: ResT) => void): BidirectionalStream<ReqT, ResT>;
|
||||
on(type: 'end', handler: (status?: Status) => void): BidirectionalStream<ReqT, ResT>;
|
||||
on(type: 'status', handler: (status: Status) => void): BidirectionalStream<ReqT, ResT>;
|
||||
}
|
||||
|
||||
export class ScaffolderClient {
|
||||
readonly serviceHost: string;
|
||||
|
||||
constructor(serviceHost: string, options?: grpc.RpcOptions);
|
||||
getAllTemplates(
|
||||
requestMessage: scaffolder_v1_scaffolder_pb.Empty,
|
||||
metadata: grpc.Metadata,
|
||||
callback: (error: ServiceError|null, responseMessage: scaffolder_v1_scaffolder_pb.GetAllTemplatesResponse|null) => void
|
||||
): UnaryResponse;
|
||||
getAllTemplates(
|
||||
requestMessage: scaffolder_v1_scaffolder_pb.Empty,
|
||||
callback: (error: ServiceError|null, responseMessage: scaffolder_v1_scaffolder_pb.GetAllTemplatesResponse|null) => void
|
||||
): UnaryResponse;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
// package: spotify.backstage.scaffolder.v1
|
||||
// file: scaffolder/v1/scaffolder.proto
|
||||
|
||||
var scaffolder_v1_scaffolder_pb = require("../../scaffolder/v1/scaffolder_pb");
|
||||
var grpc = require("@improbable-eng/grpc-web").grpc;
|
||||
|
||||
var Scaffolder = (function () {
|
||||
function Scaffolder() {}
|
||||
Scaffolder.serviceName = "spotify.backstage.scaffolder.v1.Scaffolder";
|
||||
return Scaffolder;
|
||||
}());
|
||||
|
||||
Scaffolder.GetAllTemplates = {
|
||||
methodName: "GetAllTemplates",
|
||||
service: Scaffolder,
|
||||
requestStream: false,
|
||||
responseStream: false,
|
||||
requestType: scaffolder_v1_scaffolder_pb.Empty,
|
||||
responseType: scaffolder_v1_scaffolder_pb.GetAllTemplatesResponse
|
||||
};
|
||||
|
||||
exports.Scaffolder = Scaffolder;
|
||||
|
||||
function ScaffolderClient(serviceHost, options) {
|
||||
this.serviceHost = serviceHost;
|
||||
this.options = options || {};
|
||||
}
|
||||
|
||||
ScaffolderClient.prototype.getAllTemplates = function getAllTemplates(requestMessage, metadata, callback) {
|
||||
if (arguments.length === 2) {
|
||||
callback = arguments[1];
|
||||
}
|
||||
var client = grpc.unary(Scaffolder.GetAllTemplates, {
|
||||
request: requestMessage,
|
||||
host: this.serviceHost,
|
||||
metadata: metadata,
|
||||
transport: this.options.transport,
|
||||
debug: this.options.debug,
|
||||
onEnd: function (response) {
|
||||
if (callback) {
|
||||
if (response.status !== grpc.Code.OK) {
|
||||
var err = new Error(response.statusMessage);
|
||||
err.code = response.status;
|
||||
err.metadata = response.trailers;
|
||||
callback(err, null);
|
||||
} else {
|
||||
callback(null, response.message);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
return {
|
||||
cancel: function () {
|
||||
callback = null;
|
||||
client.close();
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
exports.ScaffolderClient = ScaffolderClient;
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
||||
OUT='src/proto'
|
||||
|
||||
mkdir -p "$OUT"
|
||||
|
||||
exec protoc -I="$DIR/../../protos" --js_out=import_style=commonjs:"$OUT" --grpc-web_out=import_style=commonjs+dts,mode=grpcwebtext:"$OUT" "$@"
|
||||
+13
-1
@@ -7577,6 +7577,11 @@ google-protobuf@^3.11.2:
|
||||
resolved "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.11.2.tgz#43272974521a5cec35a21f62730cf517a5a8e38c"
|
||||
integrity sha512-T4fin7lcYLUPj2ChUZ4DvfuuHtg3xi1621qeRZt2J7SvOQusOzq+sDT4vbotWTCjUXJoR36CA016LlhtPy80uQ==
|
||||
|
||||
google-protobuf@^3.6.1:
|
||||
version "3.11.3"
|
||||
resolved "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.11.3.tgz#660977f5de29cc8f647172a170602887102fa677"
|
||||
integrity sha512-Sp8E+0AJLxmiPwAk9VH3MkYAmYYheNUhywIyXOS7wvRkqbIYcHtGzJzIYicNqYsqgKmY35F9hxRkI+ZTqTB4Tg==
|
||||
|
||||
got@^6.7.1:
|
||||
version "6.7.1"
|
||||
resolved "https://registry.npmjs.org/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0"
|
||||
@@ -15712,7 +15717,14 @@ ts-pnp@1.1.5, ts-pnp@^1.1.2:
|
||||
resolved "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.1.5.tgz#840e0739c89fce5f3abd9037bb091dbff16d9dec"
|
||||
integrity sha512-ti7OGMOUOzo66wLF3liskw6YQIaSsBgc4GOAlWRnIEj8htCxJUxskanMUoJOD6MDCRAXo36goXJZch+nOS0VMA==
|
||||
|
||||
tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0:
|
||||
ts-protoc-gen@^0.12.0:
|
||||
version "0.12.0"
|
||||
resolved "https://registry.npmjs.org/ts-protoc-gen/-/ts-protoc-gen-0.12.0.tgz#932e5738f14b67e7202825b06f8c548cb7d8ef34"
|
||||
integrity sha512-V7jnICJxKqalBrnJSMTW5tB9sGi48gOC325bfcM7TDNUItVOlaMM//rQmuo49ybipk/SyJTnWXgtJnhHCevNJw==
|
||||
dependencies:
|
||||
google-protobuf "^3.6.1"
|
||||
|
||||
tslib@^1.8.1, tslib@^1.9.0:
|
||||
version "1.10.0"
|
||||
resolved "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a"
|
||||
integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==
|
||||
|
||||
+59
-11
@@ -4,32 +4,55 @@ Collection of all Backstage protobuf definitions.
|
||||
|
||||
## Usage
|
||||
|
||||
Managed with prototool, install instructions at https://github.com/uber/prototool/blob/dev/docs/install.md
|
||||
Managed with [Prototool](https://github.com/uber/prototool), install instructions at <https://github.com/uber/prototool/blob/dev/docs/install.md>
|
||||
|
||||
## Install Dependencies
|
||||
|
||||
You will need to have `protoc-gen-go` available in your path. You can find out more information here: https://github.com/golang/protobuf
|
||||
### Prototool
|
||||
|
||||
```bash
|
||||
$ brew install prototool
|
||||
```
|
||||
|
||||
```sh
|
||||
### protoc-gen-go
|
||||
|
||||
This will enable code generation in Go for interacting with gRPC-Web. You will need to have `protoc-gen-go` available in your path. You can find out more information here: https://github.com/golang/protobuf
|
||||
|
||||
```bash
|
||||
$ go get -u github.com/golang/protobuf/protoc-gen-go
|
||||
$ protoc-gen-go # should now be available in your path providing you GOPATH + GOBIN paths are setup correctly.
|
||||
```
|
||||
|
||||
### protoc-gen-ts
|
||||
|
||||
### Generate code
|
||||
This will enable code generation in TypeScript for interacting with gRPC-Web. From the root, you will need to run [Yarn](https://yarnpkg.com) in the `frontend` folder:
|
||||
|
||||
Run to generate code to `backend/proto/`:
|
||||
|
||||
```
|
||||
$ prototool generate
|
||||
```bash
|
||||
$ yarn --cwd ./frontend install
|
||||
```
|
||||
|
||||
Generated code should be check in to the repo.
|
||||
After this, you should be all set!
|
||||
|
||||
### Import generated go code
|
||||
## Generating Code
|
||||
|
||||
Example import of inventory:
|
||||
To generate the Protobuf definitions in Go and TypeScript, run the following command from the root with [Prototool](https://github.com/uber/prototool):
|
||||
|
||||
```bash
|
||||
$ prototool generate ./proto
|
||||
```
|
||||
|
||||
This will generate the respective "generated" files in the following folders:
|
||||
|
||||
- `backend/proto`
|
||||
- `frontend/packages/proto/src/generated`
|
||||
|
||||
All generated code related to Protocol Buffers should be checked in to the repository.
|
||||
|
||||
## Code Examples
|
||||
|
||||
### Import using Go
|
||||
|
||||
This is what you'll need to use for development in any of the `backend` services.
|
||||
|
||||
```go
|
||||
package spotify.backstage.identity.v1;
|
||||
@@ -38,3 +61,28 @@ func main() {
|
||||
identityv1.NewInventoryClient(nil)
|
||||
}
|
||||
```
|
||||
|
||||
### Import using TypeScript
|
||||
|
||||
This is what you'll need to use for development in any of the `frontend` services.
|
||||
Firstly, ensure this line is in your `package.json` within the `frontend/` folder:
|
||||
|
||||
```js
|
||||
"dependencies": {
|
||||
"@backstage/protobuf-definitions": "0.0.0",
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
Next, you can use them in your [Yarn Workspaces](https://yarnpkg.com/en/docs/workspaces/) package using the following:
|
||||
|
||||
```ts
|
||||
import { IdentityClient } from "@backstage/protocol-definitions/generated/identity/v1/identity_pb_service";
|
||||
|
||||
const client = new IdentityClient("http://localhost:8080");
|
||||
// const req = new GetUserRequest();
|
||||
// req.setUsername("johndoe");
|
||||
// client.getUser(req, (err, user) => {
|
||||
// /* ... */
|
||||
// });
|
||||
```
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
protoc:
|
||||
version: 3.8.0
|
||||
lint:
|
||||
@@ -16,3 +15,7 @@ generate:
|
||||
type: go
|
||||
flags: plugins=grpc
|
||||
output: ../backend/proto
|
||||
- name: ts
|
||||
path: frontend/node_modules/ts-protoc-gen/bin/protoc-gen-ts
|
||||
output: ../frontend/packages/proto/src/generated
|
||||
flags: service=grpc-web
|
||||
|
||||
Reference in New Issue
Block a user