From 0ee6f06d3d4ce88dc155526f401c1894cac2c25d Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 3 Feb 2020 14:50:22 +0100 Subject: [PATCH] added protos,backend/hello,backend/envoy + compose setup --- backend/hello/.dockerignore | 1 + backend/hello/.gitignore | 1 + backend/hello/Dockerfile | 10 + backend/hello/gen-pb.sh | 21 + backend/hello/package.json | 24 + .../hello/src/generated/hello_grpc_pb.d.ts | 20 + backend/hello/src/generated/hello_grpc_pb.js | 44 + backend/hello/src/generated/hello_pb.d.ts | 45 + backend/hello/src/generated/hello_pb.js | 308 ++++ backend/hello/src/index.ts | 24 + backend/hello/tsconfig.json | 14 + backend/hello/yarn.lock | 1405 +++++++++++++++++ backend/proxy/Dockerfile | 5 + backend/proxy/envoy.yaml | 52 + docker-compose.yaml | 18 + protos/hello.proto | 15 + 16 files changed, 2007 insertions(+) create mode 100644 backend/hello/.dockerignore create mode 100644 backend/hello/.gitignore create mode 100644 backend/hello/Dockerfile create mode 100755 backend/hello/gen-pb.sh create mode 100644 backend/hello/package.json create mode 100644 backend/hello/src/generated/hello_grpc_pb.d.ts create mode 100644 backend/hello/src/generated/hello_grpc_pb.js create mode 100644 backend/hello/src/generated/hello_pb.d.ts create mode 100644 backend/hello/src/generated/hello_pb.js create mode 100644 backend/hello/src/index.ts create mode 100644 backend/hello/tsconfig.json create mode 100644 backend/hello/yarn.lock create mode 100644 backend/proxy/Dockerfile create mode 100644 backend/proxy/envoy.yaml mode change 100644 => 100755 docker-compose.yaml create mode 100644 protos/hello.proto diff --git a/backend/hello/.dockerignore b/backend/hello/.dockerignore new file mode 100644 index 0000000000..3c3629e647 --- /dev/null +++ b/backend/hello/.dockerignore @@ -0,0 +1 @@ +node_modules diff --git a/backend/hello/.gitignore b/backend/hello/.gitignore new file mode 100644 index 0000000000..c2658d7d1b --- /dev/null +++ b/backend/hello/.gitignore @@ -0,0 +1 @@ +node_modules/ diff --git a/backend/hello/Dockerfile b/backend/hello/Dockerfile new file mode 100644 index 0000000000..121466922c --- /dev/null +++ b/backend/hello/Dockerfile @@ -0,0 +1,10 @@ +FROM node:12 + +RUN mkdir /app +WORKDIR /app + +COPY package.json yarn.lock ./ +RUN yarn install + +COPY . ./ +CMD yarn run start diff --git a/backend/hello/gen-pb.sh b/backend/hello/gen-pb.sh new file mode 100755 index 0000000000..0d1b005ed1 --- /dev/null +++ b/backend/hello/gen-pb.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +# Path to this plugin, Note this must be an abolsute path on Windows (see #15) +PROTOC_GEN_TS_PATH="$(pwd)/node_modules/.bin/protoc-gen-ts" + +# Path to the grpc_node_plugin +PROTOC_GEN_GRPC_PATH="$(pwd)/node_modules/.bin/grpc_tools_node_protoc_plugin" + +# Directory to write generated code to (.js and .d.ts files) +OUT_DIR="$(pwd)/src/generated" + +mkdir -p "$OUT_DIR" + +protoc \ + --plugin="protoc-gen-ts=${PROTOC_GEN_TS_PATH}" \ + --plugin="protoc-gen-grpc=${PROTOC_GEN_GRPC_PATH}" \ + --js_out="import_style=commonjs,binary:${OUT_DIR}" \ + --ts_out="service=grpc-node:${OUT_DIR}" \ + --proto_path="../../protos/" \ + --grpc_out="${OUT_DIR}" \ + hello.proto diff --git a/backend/hello/package.json b/backend/hello/package.json new file mode 100644 index 0000000000..7caab8ca3b --- /dev/null +++ b/backend/hello/package.json @@ -0,0 +1,24 @@ +{ + "name": "hello", + "version": "1.0.0", + "main": "src/index.ts", + "license": "MIT", + "dependencies": { + "@grpc/proto-loader": "^0.5.3", + "grpc": "^1.24.2", + "grpc-tools": "^1.8.1", + "nodemon": "^2.0.2", + "ts-node": "^8.6.2", + "ts-protoc-gen": "^0.12.0", + "typescript": "^3.7.5" + }, + "scripts": { + "start": "ts-node .", + "watch": "nodemon ." + }, + "nodemonConfig": { + "watch": "./src", + "exec": "ts-node .", + "ext": "ts" + } +} diff --git a/backend/hello/src/generated/hello_grpc_pb.d.ts b/backend/hello/src/generated/hello_grpc_pb.d.ts new file mode 100644 index 0000000000..20983deaf0 --- /dev/null +++ b/backend/hello/src/generated/hello_grpc_pb.d.ts @@ -0,0 +1,20 @@ +// GENERATED CODE -- DO NOT EDIT! + +// package: spotify.backstage.hello.v1alpha1 +// file: hello.proto + +import * as hello_pb from "./hello_pb"; +import * as grpc from "grpc"; + +interface IHelloService extends grpc.ServiceDefinition { + hello: grpc.MethodDefinition; +} + +export const HelloService: IHelloService; + +export class HelloClient extends grpc.Client { + constructor(address: string, credentials: grpc.ChannelCredentials, options?: object); + hello(argument: hello_pb.HelloRequest, callback: grpc.requestCallback): grpc.ClientUnaryCall; + hello(argument: hello_pb.HelloRequest, metadataOrOptions: grpc.Metadata | grpc.CallOptions | null, callback: grpc.requestCallback): grpc.ClientUnaryCall; + hello(argument: hello_pb.HelloRequest, metadata: grpc.Metadata | null, options: grpc.CallOptions | null, callback: grpc.requestCallback): grpc.ClientUnaryCall; +} diff --git a/backend/hello/src/generated/hello_grpc_pb.js b/backend/hello/src/generated/hello_grpc_pb.js new file mode 100644 index 0000000000..a46389b25e --- /dev/null +++ b/backend/hello/src/generated/hello_grpc_pb.js @@ -0,0 +1,44 @@ +// GENERATED CODE -- DO NOT EDIT! + +'use strict'; +var grpc = require('grpc'); +var hello_pb = require('./hello_pb.js'); + +function serialize_spotify_backstage_hello_v1alpha1_HelloReply(arg) { + if (!(arg instanceof hello_pb.HelloReply)) { + throw new Error('Expected argument of type spotify.backstage.hello.v1alpha1.HelloReply'); + } + return Buffer.from(arg.serializeBinary()); +} + +function deserialize_spotify_backstage_hello_v1alpha1_HelloReply(buffer_arg) { + return hello_pb.HelloReply.deserializeBinary(new Uint8Array(buffer_arg)); +} + +function serialize_spotify_backstage_hello_v1alpha1_HelloRequest(arg) { + if (!(arg instanceof hello_pb.HelloRequest)) { + throw new Error('Expected argument of type spotify.backstage.hello.v1alpha1.HelloRequest'); + } + return Buffer.from(arg.serializeBinary()); +} + +function deserialize_spotify_backstage_hello_v1alpha1_HelloRequest(buffer_arg) { + return hello_pb.HelloRequest.deserializeBinary(new Uint8Array(buffer_arg)); +} + + +var HelloService = exports.HelloService = { + hello: { + path: '/spotify.backstage.hello.v1alpha1.Hello/Hello', + requestStream: false, + responseStream: false, + requestType: hello_pb.HelloRequest, + responseType: hello_pb.HelloReply, + requestSerialize: serialize_spotify_backstage_hello_v1alpha1_HelloRequest, + requestDeserialize: deserialize_spotify_backstage_hello_v1alpha1_HelloRequest, + responseSerialize: serialize_spotify_backstage_hello_v1alpha1_HelloReply, + responseDeserialize: deserialize_spotify_backstage_hello_v1alpha1_HelloReply, + }, +}; + +exports.HelloClient = grpc.makeGenericClientConstructor(HelloService); diff --git a/backend/hello/src/generated/hello_pb.d.ts b/backend/hello/src/generated/hello_pb.d.ts new file mode 100644 index 0000000000..8017b86b09 --- /dev/null +++ b/backend/hello/src/generated/hello_pb.d.ts @@ -0,0 +1,45 @@ +// package: spotify.backstage.hello.v1alpha1 +// file: hello.proto + +import * as jspb from "google-protobuf"; + +export class HelloRequest extends jspb.Message { + getName(): string; + setName(value: string): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): HelloRequest.AsObject; + static toObject(includeInstance: boolean, msg: HelloRequest): HelloRequest.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: HelloRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): HelloRequest; + static deserializeBinaryFromReader(message: HelloRequest, reader: jspb.BinaryReader): HelloRequest; +} + +export namespace HelloRequest { + export type AsObject = { + name: string, + } +} + +export class HelloReply extends jspb.Message { + getMessage(): string; + setMessage(value: string): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): HelloReply.AsObject; + static toObject(includeInstance: boolean, msg: HelloReply): HelloReply.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: HelloReply, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): HelloReply; + static deserializeBinaryFromReader(message: HelloReply, reader: jspb.BinaryReader): HelloReply; +} + +export namespace HelloReply { + export type AsObject = { + message: string, + } +} + diff --git a/backend/hello/src/generated/hello_pb.js b/backend/hello/src/generated/hello_pb.js new file mode 100644 index 0000000000..57ad1c7fc9 --- /dev/null +++ b/backend/hello/src/generated/hello_pb.js @@ -0,0 +1,308 @@ +/** + * @fileoverview + * @enhanceable + * @suppress {messageConventions} JS Compiler reports an error if a variable or + * field starts with 'MSG_' and isn't a translatable message. + * @public + */ +// GENERATED CODE -- DO NOT EDIT! + +var jspb = require('google-protobuf'); +var goog = jspb; +var global = Function('return this')(); + +goog.exportSymbol('proto.spotify.backstage.hello.v1alpha1.HelloReply', null, global); +goog.exportSymbol('proto.spotify.backstage.hello.v1alpha1.HelloRequest', null, global); +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.spotify.backstage.hello.v1alpha1.HelloRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.spotify.backstage.hello.v1alpha1.HelloRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.spotify.backstage.hello.v1alpha1.HelloRequest.displayName = 'proto.spotify.backstage.hello.v1alpha1.HelloRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.spotify.backstage.hello.v1alpha1.HelloReply = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.spotify.backstage.hello.v1alpha1.HelloReply, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.spotify.backstage.hello.v1alpha1.HelloReply.displayName = 'proto.spotify.backstage.hello.v1alpha1.HelloReply'; +} + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto suitable for use in Soy templates. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. + * @param {boolean=} opt_includeInstance Whether to include the JSPB instance + * for transitional soy proto support: http://goto/soy-param-migration + * @return {!Object} + */ +proto.spotify.backstage.hello.v1alpha1.HelloRequest.prototype.toObject = function(opt_includeInstance) { + return proto.spotify.backstage.hello.v1alpha1.HelloRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Whether to include the JSPB + * instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.spotify.backstage.hello.v1alpha1.HelloRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.spotify.backstage.hello.v1alpha1.HelloRequest.toObject = function(includeInstance, msg) { + var f, obj = { + name: jspb.Message.getFieldWithDefault(msg, 1, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.spotify.backstage.hello.v1alpha1.HelloRequest} + */ +proto.spotify.backstage.hello.v1alpha1.HelloRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.spotify.backstage.hello.v1alpha1.HelloRequest; + return proto.spotify.backstage.hello.v1alpha1.HelloRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.spotify.backstage.hello.v1alpha1.HelloRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.spotify.backstage.hello.v1alpha1.HelloRequest} + */ +proto.spotify.backstage.hello.v1alpha1.HelloRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.spotify.backstage.hello.v1alpha1.HelloRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.spotify.backstage.hello.v1alpha1.HelloRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.spotify.backstage.hello.v1alpha1.HelloRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.spotify.backstage.hello.v1alpha1.HelloRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getName(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } +}; + + +/** + * optional string name = 1; + * @return {string} + */ +proto.spotify.backstage.hello.v1alpha1.HelloRequest.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** @param {string} value */ +proto.spotify.backstage.hello.v1alpha1.HelloRequest.prototype.setName = function(value) { + jspb.Message.setProto3StringField(this, 1, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto suitable for use in Soy templates. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. + * @param {boolean=} opt_includeInstance Whether to include the JSPB instance + * for transitional soy proto support: http://goto/soy-param-migration + * @return {!Object} + */ +proto.spotify.backstage.hello.v1alpha1.HelloReply.prototype.toObject = function(opt_includeInstance) { + return proto.spotify.backstage.hello.v1alpha1.HelloReply.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Whether to include the JSPB + * instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.spotify.backstage.hello.v1alpha1.HelloReply} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.spotify.backstage.hello.v1alpha1.HelloReply.toObject = function(includeInstance, msg) { + var f, obj = { + message: jspb.Message.getFieldWithDefault(msg, 1, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.spotify.backstage.hello.v1alpha1.HelloReply} + */ +proto.spotify.backstage.hello.v1alpha1.HelloReply.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.spotify.backstage.hello.v1alpha1.HelloReply; + return proto.spotify.backstage.hello.v1alpha1.HelloReply.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.spotify.backstage.hello.v1alpha1.HelloReply} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.spotify.backstage.hello.v1alpha1.HelloReply} + */ +proto.spotify.backstage.hello.v1alpha1.HelloReply.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setMessage(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.spotify.backstage.hello.v1alpha1.HelloReply.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.spotify.backstage.hello.v1alpha1.HelloReply.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.spotify.backstage.hello.v1alpha1.HelloReply} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.spotify.backstage.hello.v1alpha1.HelloReply.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getMessage(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } +}; + + +/** + * optional string message = 1; + * @return {string} + */ +proto.spotify.backstage.hello.v1alpha1.HelloReply.prototype.getMessage = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** @param {string} value */ +proto.spotify.backstage.hello.v1alpha1.HelloReply.prototype.setMessage = function(value) { + jspb.Message.setProto3StringField(this, 1, value); +}; + + +goog.object.extend(exports, proto.spotify.backstage.hello.v1alpha1); diff --git a/backend/hello/src/index.ts b/backend/hello/src/index.ts new file mode 100644 index 0000000000..457fc9bd6b --- /dev/null +++ b/backend/hello/src/index.ts @@ -0,0 +1,24 @@ +import grpc, { requestCallback, ServerUnaryCall } from 'grpc'; +import { HelloService } from './generated/hello_grpc_pb'; +import { HelloRequest, HelloReply } from './generated/hello_pb'; + +async function main() { + var server = new grpc.Server(); + server.addService(HelloService, { + hello: ( + call: ServerUnaryCall, + callback: requestCallback + ) => { + var reply = new HelloReply(); + reply.setMessage(`Hello ${call.request.getName()}!`); + callback(null, reply); + } + }); + server.bind('0.0.0.0:80', grpc.ServerCredentials.createInsecure()); + server.start(); +} + +main().catch(error => { + console.error(error?.stack); + process.exit(1); +}); diff --git a/backend/hello/tsconfig.json b/backend/hello/tsconfig.json new file mode 100644 index 0000000000..2d413e74e1 --- /dev/null +++ b/backend/hello/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "target": "es2019", + "lib": ["es2019"], + "rootDir": "src", + "noEmit": true, + "module": "commonjs", + "moduleResolution": "node", + "strict": true, + "types": ["node"], + "esModuleInterop": true + }, + "include": ["src/**/*.ts"] +} diff --git a/backend/hello/yarn.lock b/backend/hello/yarn.lock new file mode 100644 index 0000000000..b142b241b6 --- /dev/null +++ b/backend/hello/yarn.lock @@ -0,0 +1,1405 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@grpc/proto-loader@^0.5.3": + version "0.5.3" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/@grpc/proto-loader/-/proto-loader-0.5.3.tgz#a233070720bf7560c4d70e29e7950c72549a132c" + integrity sha1-ojMHByC/dWDE1w4p55UMclSaEyw= + dependencies: + lodash.camelcase "^4.3.0" + protobufjs "^6.8.6" + +"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": + version "1.1.2" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" + integrity sha1-m4sMxmPWaafY9vXQiToU00jzD78= + +"@protobufjs/base64@^1.1.2": + version "1.1.2" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" + integrity sha1-TIVzDlm5ofHzSQR9vyQpYDS7JzU= + +"@protobufjs/codegen@^2.0.4": + version "2.0.4" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" + integrity sha1-fvN/DQEPsCitGtWXIuUG2SYoFcs= + +"@protobufjs/eventemitter@^1.1.0": + version "1.1.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" + integrity sha1-NVy8mLr61ZePntCV85diHx0Ga3A= + +"@protobufjs/fetch@^1.1.0": + version "1.1.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" + integrity sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU= + dependencies: + "@protobufjs/aspromise" "^1.1.1" + "@protobufjs/inquire" "^1.1.0" + +"@protobufjs/float@^1.0.2": + version "1.0.2" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" + integrity sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E= + +"@protobufjs/inquire@^1.1.0": + version "1.1.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" + integrity sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik= + +"@protobufjs/path@^1.1.2": + version "1.1.2" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" + integrity sha1-bMKyDFya1q0NzP0hynZz2Nf79o0= + +"@protobufjs/pool@^1.1.0": + version "1.1.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" + integrity sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q= + +"@protobufjs/utf8@^1.1.0": + version "1.1.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" + integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA= + +"@types/bytebuffer@^5.0.40": + version "5.0.40" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/@types/bytebuffer/-/bytebuffer-5.0.40.tgz#d6faac40dcfb09cd856cdc4c01d3690ba536d3ee" + integrity sha1-1vqsQNz7Cc2FbNxMAdNpC6U20+4= + dependencies: + "@types/long" "*" + "@types/node" "*" + +"@types/long@*", "@types/long@^4.0.0": + version "4.0.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/@types/long/-/long-4.0.1.tgz#459c65fa1867dafe6a8f322c4c51695663cc55e9" + integrity sha1-RZxl+hhn2v5qjzIsTFFpVmPMVek= + +"@types/node@*": + version "13.7.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/@types/node/-/node-13.7.0.tgz#b417deda18cf8400f278733499ad5547ed1abec4" + integrity sha1-tBfe2hjPhADyeHM0ma1VR+0avsQ= + +"@types/node@^10.1.0": + version "10.17.14" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/@types/node/-/node-10.17.14.tgz#b6c60ebf2fb5e4229fdd751ff9ddfae0f5f31541" + integrity sha1-tsYOvy+15CKf3XUf+d364PXzFUE= + +abbrev@1: + version "1.1.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg= + +ansi-align@^2.0.0: + version "2.0.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" + integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38= + dependencies: + string-width "^2.0.0" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0= + dependencies: + color-convert "^1.9.0" + +anymatch@~3.1.1: + version "3.1.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha1-xV7PAhheJGklk5kxDBc84xIzsUI= + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +aproba@^1.0.3: + version "1.2.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha1-aALmJk79GMeQobDVF/DyYnvyyUo= + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha1-SzXClE8GKov82mZBB2A1D+nd/CE= + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +arg@^4.1.0: + version "4.1.3" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha1-Jp/HrVuOQstjyJbVZmAXJhwUQIk= + +ascli@~1: + version "1.0.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/ascli/-/ascli-1.0.1.tgz#bcfa5974a62f18e81cabaeb49732ab4a88f906bc" + integrity sha1-vPpZdKYvGOgcq660lzKrSoj5Brw= + dependencies: + colour "~0.7.1" + optjs "~3.2.2" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +binary-extensions@^2.0.0: + version "2.0.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" + integrity sha1-I8DfFPaogHf1+YbA0WfsA8PVU3w= + +boxen@^1.2.1: + version "1.3.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" + integrity sha1-VcbDmouljZxhrSLNh3Uy3rZlogs= + dependencies: + ansi-align "^2.0.0" + camelcase "^4.0.0" + chalk "^2.0.1" + cli-boxes "^1.0.0" + string-width "^2.0.0" + term-size "^1.2.0" + widest-line "^2.0.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0= + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@~3.0.2: + version "3.0.2" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha1-NFThpGLujVmeI23zNs2epPiv4Qc= + dependencies: + fill-range "^7.0.1" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8= + +bytebuffer@~5: + version "5.0.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/bytebuffer/-/bytebuffer-5.0.1.tgz#582eea4b1a873b6d020a48d58df85f0bba6cfddd" + integrity sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0= + dependencies: + long "~3" + +camelcase@^2.0.1: + version "2.1.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= + +camelcase@^4.0.0: + version "4.1.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= + +capture-stack-trace@^1.0.0: + version "1.0.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" + integrity sha1-psC74fOPOqC5Ijjstv9Cw0TUE10= + +chalk@^2.0.1: + version "2.4.2" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ= + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chokidar@^3.2.2: + version "3.3.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/chokidar/-/chokidar-3.3.1.tgz#c84e5b3d18d9a4d77558fef466b1bf16bbeb3450" + integrity sha1-yE5bPRjZpNd1WP70ZrG/FrvrNFA= + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.3.0" + optionalDependencies: + fsevents "~2.1.2" + +chownr@^1.1.1: + version "1.1.3" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" + integrity sha1-Qtg31SOWiNVfMDADpQgjD6ZycUI= + +ci-info@^1.5.0: + version "1.6.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + integrity sha1-LKINu5zrMtRSSmgzAzE/AwSx5Jc= + +cli-boxes@^1.0.0: + version "1.0.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" + integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= + +cliui@^3.0.3: + version "3.2.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg= + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +colour@~0.7.1: + version "0.7.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/colour/-/colour-0.7.1.tgz#9cb169917ec5d12c0736d3e8685746df1cadf778" + integrity sha1-nLFpkX7F0SwHNtPoaFdG3xyt93g= + +concat-map@0.0.1: + version "0.0.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +configstore@^3.0.0: + version "3.1.2" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" + integrity sha1-xvJd767vJt8S3TNBSwAf6BpUP48= + dependencies: + dot-prop "^4.1.0" + graceful-fs "^4.1.2" + make-dir "^1.0.0" + unique-string "^1.0.0" + write-file-atomic "^2.0.0" + xdg-basedir "^3.0.0" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +create-error-class@^3.0.0: + version "3.0.2" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" + integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= + dependencies: + capture-stack-trace "^1.0.0" + +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +crypto-random-string@^1.0.0: + version "1.0.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" + integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= + +debug@^2.2.0: + version "2.6.9" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8= + dependencies: + ms "2.0.0" + +debug@^3.2.6: + version "3.2.6" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha1-6D0X3hbYp++3cX7b5fsQE17uYps= + dependencies: + ms "^2.1.1" + +decamelize@^1.1.1: + version "1.2.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha1-xPp8lUBKF6nD6Mp+FTcxK3NjMKw= + +delegates@^1.0.0: + version "1.0.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= + +diff@^4.0.1: + version "4.0.2" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha1-YPOuy4nV+uUgwRqhnvwruYKq3n0= + +dot-prop@^4.1.0: + version "4.2.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" + integrity sha1-HxngwuGqDjJ5fEl5nyg3rGr2nFc= + dependencies: + is-obj "^1.0.0" + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +execa@^0.7.0: + version "0.7.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha1-GRmmp8df44ssfHflGYU12prN2kA= + dependencies: + to-regex-range "^5.0.1" + +fs-minipass@^1.2.5: + version "1.2.7" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha1-zP+FcIQef+QmVpPaiJNsVa7X98c= + dependencies: + minipass "^2.6.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@~2.1.2: + version "2.1.2" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" + integrity sha1-TAofs0vGjlQ7S4Kp7Dkr+9qECAU= + +gauge@~2.7.3: + version "2.7.4" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + +glob-parent@~5.1.0: + version "5.1.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2" + integrity sha1-X0wdHnSNMM1zrSlEs1d6gbCB6MI= + dependencies: + is-glob "^4.0.1" + +glob@^7.0.5, glob@^7.1.3: + version "7.1.6" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha1-FB8zuBp8JJLhJVlDB0gMRmeSeKY= + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-dirs@^0.1.0: + version "0.1.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= + dependencies: + ini "^1.3.4" + +google-protobuf@^3.6.1: + version "3.11.2" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/google-protobuf/-/google-protobuf-3.11.2.tgz#43272974521a5cec35a21f62730cf517a5a8e38c" + integrity sha1-QycpdFIaXOw1oh9icwz1F6Wo44w= + +got@^6.7.1: + version "6.7.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" + integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= + dependencies: + create-error-class "^3.0.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-redirect "^1.0.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + lowercase-keys "^1.0.0" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + unzip-response "^2.0.1" + url-parse-lax "^1.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.2: + version "4.2.3" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" + integrity sha1-ShL/G2A3bvCYYsIJPt2Qgyi+hCM= + +grpc-tools@^1.8.1: + version "1.8.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/grpc-tools/-/grpc-tools-1.8.1.tgz#8b2e8bf42028d94c85817d954685c46a7bfbc31a" + integrity sha1-iy6L9CAo2UyFgX2VRoXEanv7wxo= + dependencies: + node-pre-gyp "^0.12.0" + +grpc@^1.24.2: + version "1.24.2" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/grpc/-/grpc-1.24.2.tgz#76d047bfa7b05b607cbbe3abb99065dcefe0c099" + integrity sha1-dtBHv6ewW2B8u+OruZBl3O/gwJk= + dependencies: + "@types/bytebuffer" "^5.0.40" + lodash.camelcase "^4.3.0" + lodash.clone "^4.5.0" + nan "^2.13.2" + node-pre-gyp "^0.14.0" + protobufjs "^5.0.3" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + +iconv-lite@^0.4.4: + version "0.4.24" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha1-ICK0sl+93CHS9SSXSkdKr+czkIs= + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ignore-by-default@^1.0.1: + version "1.0.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" + integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= + +ignore-walk@^3.0.1: + version "3.0.3" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" + integrity sha1-AX4kRxhL/q3nwjjkrv3R6PlbHjc= + dependencies: + minimatch "^3.0.4" + +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@~2.0.3: + version "2.0.4" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w= + +ini@^1.3.4, ini@~1.3.0: + version "1.3.5" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc= + +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk= + dependencies: + binary-extensions "^2.0.0" + +is-ci@^1.0.10: + version "1.2.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + integrity sha1-43ecjuF/zPQoSI9uKBGH8uYyhBw= + dependencies: + ci-info "^1.5.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw= + dependencies: + is-extglob "^2.1.1" + +is-installed-globally@^0.1.0: + version "0.1.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" + integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= + dependencies: + global-dirs "^0.1.0" + is-path-inside "^1.0.0" + +is-npm@^1.0.0: + version "1.0.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" + integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= + +is-number@^7.0.0: + version "7.0.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss= + +is-obj@^1.0.0: + version "1.0.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= + dependencies: + path-is-inside "^1.0.1" + +is-redirect@^1.0.0: + version "1.0.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" + integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= + +is-retry-allowed@^1.0.0: + version "1.2.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + integrity sha1-13hIi9CkZmo76KFIK58rqv7eqLQ= + +is-stream@^1.0.0, is-stream@^1.1.0: + version "1.1.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +isarray@~1.0.0: + version "1.0.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +latest-version@^3.0.0: + version "3.1.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" + integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU= + dependencies: + package-json "^4.0.0" + +lcid@^1.0.0: + version "1.0.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= + dependencies: + invert-kv "^1.0.0" + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= + +lodash.clone@^4.5.0: + version "4.5.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/lodash.clone/-/lodash.clone-4.5.0.tgz#195870450f5a13192478df4bc3d23d2dea1907b6" + integrity sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y= + +long@^4.0.0: + version "4.0.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" + integrity sha1-mntxz7fTYaGU6lVSQckvdGjVvyg= + +long@~3: + version "3.2.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b" + integrity sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s= + +lowercase-keys@^1.0.0: + version "1.0.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha1-b54wtHCE2XGnyCD/FabFFnt0wm8= + +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80= + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +make-dir@^1.0.0: + version "1.3.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha1-ecEDO4BRW9bSTsmTPoYMp17ifww= + dependencies: + pify "^3.0.0" + +make-error@^1.1.1: + version "1.3.5" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" + integrity sha1-7+ToH22yjK3WBccPKcgxtY73dsg= + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM= + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + +minimist@^1.2.0: + version "1.2.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + +minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: + version "2.9.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha1-5xN2Ln0+Mv7YAxFc+T4EvKn8yaY= + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.2.1: + version "1.3.3" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha1-IpDeloGKNMKVUcio0wEha9Zahh0= + dependencies: + minipass "^2.9.0" + +mkdirp@^0.5.0, mkdirp@^0.5.1: + version "0.5.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + dependencies: + minimist "0.0.8" + +ms@2.0.0: + version "2.0.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@^2.1.1: + version "2.1.2" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk= + +nan@^2.13.2: + version "2.14.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" + integrity sha1-eBj3IgJ7JFmobwKV1DTR/CM2xSw= + +needle@^2.2.1: + version "2.4.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" + integrity sha1-aDPnSXXERGQlkOFadQKIxfk5tXw= + dependencies: + debug "^3.2.6" + iconv-lite "^0.4.4" + sax "^1.2.4" + +node-pre-gyp@^0.12.0: + version "0.12.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" + integrity sha1-ObpLsUOdoDApX4meO1ILd4V2YUk= + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4" + +node-pre-gyp@^0.14.0: + version "0.14.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83" + integrity sha1-mgWWUzuHcom8rU4UOYLKPZBN3IM= + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4.4.2" + +nodemon@^2.0.2: + version "2.0.2" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/nodemon/-/nodemon-2.0.2.tgz#9c7efeaaf9b8259295a97e5d4585ba8f0cbe50b0" + integrity sha1-nH7+qvm4JZKVqX5dRYW6jwy+ULA= + dependencies: + chokidar "^3.2.2" + debug "^3.2.6" + ignore-by-default "^1.0.1" + minimatch "^3.0.4" + pstree.remy "^1.1.7" + semver "^5.7.1" + supports-color "^5.5.0" + touch "^3.1.0" + undefsafe "^2.0.2" + update-notifier "^2.5.0" + +nopt@^4.0.1: + version "4.0.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= + dependencies: + abbrev "1" + osenv "^0.1.4" + +nopt@~1.0.10: + version "1.0.10" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" + integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= + dependencies: + abbrev "1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU= + +npm-bundled@^1.0.1: + version "1.1.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" + integrity sha1-Ht1XCGWpTNsbyCIHdeKUZsn7I0s= + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha1-bnmkHyP9I1wGIyGCKNp9nCO49uI= + +npm-packlist@^1.1.6: + version "1.4.8" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" + integrity sha1-Vu5swTW5+YrT1Rwcldoiu7my7z4= + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + npm-normalize-package-bin "^1.0.1" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npmlog@^4.0.2: + version "4.1.2" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha1-CKfyqL9zRgR3mp76StXMcXq7lUs= + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +object-assign@^4.1.0: + version "4.1.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +once@^1.3.0: + version "1.4.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +optjs@~3.2.2: + version "3.2.2" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/optjs/-/optjs-3.2.2.tgz#69a6ce89c442a44403141ad2f9b370bd5bb6f4ee" + integrity sha1-aabOicRCpEQDFBrS+bNwvVu29O4= + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-locale@^1.4.0: + version "1.4.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= + dependencies: + lcid "^1.0.0" + +os-tmpdir@^1.0.0: + version "1.0.2" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +osenv@^0.1.4: + version "0.1.5" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha1-hc36+uso6Gd/QW4odZK18/SepBA= + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +package-json@^4.0.0: + version "4.0.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" + integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0= + dependencies: + got "^6.7.1" + registry-auth-token "^3.0.1" + registry-url "^3.0.3" + semver "^5.1.0" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.1: + version "1.0.2" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0: + version "2.0.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +picomatch@^2.0.4, picomatch@^2.0.7: + version "2.2.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/picomatch/-/picomatch-2.2.1.tgz#21bac888b6ed8601f831ce7816e335bc779f0a4a" + integrity sha1-IbrIiLbthgH4Mc54FuM1vHefCko= + +pify@^3.0.0: + version "3.0.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +prepend-http@^1.0.1: + version "1.0.4" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha1-eCDZsWEgzFXKmud5JoCufbptf+I= + +protobufjs@^5.0.3: + version "5.0.3" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/protobufjs/-/protobufjs-5.0.3.tgz#e4dfe9fb67c90b2630d15868249bcc4961467a17" + integrity sha1-5N/p+2fJCyYw0VhoJJvMSWFGehc= + dependencies: + ascli "~1" + bytebuffer "~5" + glob "^7.0.5" + yargs "^3.10.0" + +protobufjs@^6.8.6: + version "6.8.8" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/protobufjs/-/protobufjs-6.8.8.tgz#c8b4f1282fd7a90e6f5b109ed11c84af82908e7c" + integrity sha1-yLTxKC/XqQ5vWxCe0RyEr4KQjnw= + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/long" "^4.0.0" + "@types/node" "^10.1.0" + long "^4.0.0" + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +pstree.remy@^1.1.7: + version "1.1.7" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/pstree.remy/-/pstree.remy-1.1.7.tgz#c76963a28047ed61542dc361aa26ee55a7fa15f3" + integrity sha1-x2ljooBH7WFULcNhqibuVaf6FfM= + +rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: + version "1.2.8" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha1-zZJL9SAKB1uDwYjNa54hG3/A0+0= + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +readable-stream@^2.0.6: + version "2.3.7" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c= + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readdirp@~3.3.0: + version "3.3.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/readdirp/-/readdirp-3.3.0.tgz#984458d13a1e42e2e9f5841b129e162f369aff17" + integrity sha1-mERY0ToeQuLp9YQbEp4WLzaa/xc= + dependencies: + picomatch "^2.0.7" + +registry-auth-token@^3.0.1: + version "3.4.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" + integrity sha1-10RoFUM/XV7WQxzV3KIQSPZrOX4= + dependencies: + rc "^1.1.6" + safe-buffer "^5.0.1" + +registry-url@^3.0.3: + version "3.1.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" + integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI= + dependencies: + rc "^1.0.1" + +rimraf@^2.6.1: + version "2.7.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w= + dependencies: + glob "^7.1.3" + +safe-buffer@^5.0.1, safe-buffer@^5.1.2: + version "5.2.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" + integrity sha1-t02uxJsRSPiMZLaNSbHoFcHy9Rk= + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha1-mR7GnSluAxN0fVm9/St0XDX4go0= + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo= + +sax@^1.2.4: + version "1.2.4" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha1-KBYjTiN4vdxOU1T6tcqold9xANk= + +semver-diff@^2.0.0: + version "2.1.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" + integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= + dependencies: + semver "^5.0.3" + +semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.7.1: + version "5.7.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha1-qVT5Ma66UI0we78Gnv8MAclhFvc= + +set-blocking@~2.0.0: + version "2.0.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.2" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= + +source-map-support@^0.5.6: + version "0.5.16" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" + integrity sha1-CuBp5/47p1OMZMmFFeNTOerFoEI= + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0: + version "0.6.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha1-dHIq8y6WFOnCh6jQu95IteLxomM= + +string-width@^1.0.1: + version "1.0.2" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4= + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha1-nPFhG6YmhdcDCunkujQUnDrwP8g= + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +supports-color@^5.3.0, supports-color@^5.5.0: + version "5.5.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha1-4uaaRKyHcveKHsCzW2id9lMO/I8= + dependencies: + has-flag "^3.0.0" + +tar@^4, tar@^4.4.2: + version "4.4.13" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha1-Q7NkvFKIjVVSmGN7ENYHkCVKtSU= + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.8.6" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" + +term-size@^1.2.0: + version "1.2.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" + integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= + dependencies: + execa "^0.7.0" + +timed-out@^4.0.0: + version "4.0.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ= + dependencies: + is-number "^7.0.0" + +touch@^3.1.0: + version "3.1.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" + integrity sha1-/jZfX3XsntTlaCXgu3bSSrdK+Ds= + dependencies: + nopt "~1.0.10" + +ts-node@^8.6.2: + version "8.6.2" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/ts-node/-/ts-node-8.6.2.tgz#7419a01391a818fbafa6f826a33c1a13e9464e35" + integrity sha1-dBmgE5GoGPuvpvgmozwaE+lGTjU= + dependencies: + arg "^4.1.0" + diff "^4.0.1" + make-error "^1.1.1" + source-map-support "^0.5.6" + yn "3.1.1" + +ts-protoc-gen@^0.12.0: + version "0.12.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/ts-protoc-gen/-/ts-protoc-gen-0.12.0.tgz#932e5738f14b67e7202825b06f8c548cb7d8ef34" + integrity sha1-ky5XOPFLZ+cgKCWwb4xUjLfY7zQ= + dependencies: + google-protobuf "^3.6.1" + +typescript@^3.7.5: + version "3.7.5" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/typescript/-/typescript-3.7.5.tgz#0692e21f65fd4108b9330238aac11dd2e177a1ae" + integrity sha1-BpLiH2X9QQi5MwI4qsEd0uF3oa4= + +undefsafe@^2.0.2: + version "2.0.2" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/undefsafe/-/undefsafe-2.0.2.tgz#225f6b9e0337663e0d8e7cfd686fc2836ccace76" + integrity sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY= + dependencies: + debug "^2.2.0" + +unique-string@^1.0.0: + version "1.0.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" + integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= + dependencies: + crypto-random-string "^1.0.0" + +unzip-response@^2.0.1: + version "2.0.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" + integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= + +update-notifier@^2.5.0: + version "2.5.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" + integrity sha1-0HRFk+E/Fh5AassdlAi3LK0Ir/Y= + dependencies: + boxen "^1.2.1" + chalk "^2.0.1" + configstore "^3.0.0" + import-lazy "^2.1.0" + is-ci "^1.0.10" + is-installed-globally "^0.1.0" + is-npm "^1.0.0" + latest-version "^3.0.0" + semver-diff "^2.0.0" + xdg-basedir "^3.0.0" + +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= + dependencies: + prepend-http "^1.0.1" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +which@^1.2.9: + version "1.3.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo= + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.3" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha1-rgdOa9wMFKQx6ATmJFScYzsABFc= + dependencies: + string-width "^1.0.2 || 2" + +widest-line@^2.0.0: + version "2.0.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" + integrity sha1-dDh2RzDsfvQ4HOTfgvuYpTFCo/w= + dependencies: + string-width "^2.1.1" + +window-size@^0.1.4: + version "0.1.4" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876" + integrity sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY= + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@^2.0.0: + version "2.4.3" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + integrity sha1-H9Lprh3z51uNjDZ0Q8aS1MqB9IE= + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +xdg-basedir@^3.0.0: + version "3.0.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" + integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= + +y18n@^3.2.0: + version "3.2.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= + +yallist@^2.1.2: + version "2.1.2" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yallist@^3.0.0, yallist@^3.0.3: + version "3.1.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha1-27fa+b/YusmrRev2ArjLrQ1dCP0= + +yargs@^3.10.0: + version "3.32.0" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/yargs/-/yargs-3.32.0.tgz#03088e9ebf9e756b69751611d2a5ef591482c995" + integrity sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU= + dependencies: + camelcase "^2.0.1" + cliui "^3.0.3" + decamelize "^1.1.1" + os-locale "^1.4.0" + string-width "^1.0.1" + window-size "^0.1.4" + y18n "^3.2.0" + +yn@3.1.1: + version "3.1.1" + resolved "https://artifactory.spotify.net/artifactory/api/npm/virtual-npm/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha1-HodAGgnXZ8HV6rJqbkwYUYLS61A= diff --git a/backend/proxy/Dockerfile b/backend/proxy/Dockerfile new file mode 100644 index 0000000000..9a38a06255 --- /dev/null +++ b/backend/proxy/Dockerfile @@ -0,0 +1,5 @@ +FROM envoyproxy/envoy:latest + +COPY ./envoy.yaml /etc/envoy/envoy.yaml + +CMD /usr/local/bin/envoy -c /etc/envoy/envoy.yaml diff --git a/backend/proxy/envoy.yaml b/backend/proxy/envoy.yaml new file mode 100644 index 0000000000..b7b83a6283 --- /dev/null +++ b/backend/proxy/envoy.yaml @@ -0,0 +1,52 @@ +admin: + access_log_path: /dev/stdout + address: + socket_address: + address: 0.0.0.0 + port_value: 8001 + +static_resources: + listeners: + - name: listener_0 + address: + socket_address: + address: 0.0.0.0 + port_value: 80 + filter_chains: + - filters: + - name: envoy.http_connection_manager + config: + codec_type: auto + stat_prefix: ingress_http + route_config: + name: local_route + virtual_hosts: + - name: local_service + domains: ['*'] + routes: + - match: { prefix: '/' } + route: + cluster: hello_service + max_grpc_timeout: 0s + cors: + allow_origin_string_match: + - prefix: '*' + allow_methods: GET, PUT, DELETE, POST, OPTIONS + allow_headers: keep-alive,user-agent,cache-control,content-type,content-transfer-encoding,custom-header-1,x-accept-content-transfer-encoding,x-accept-response-streaming,x-user-agent,x-grpc-web,grpc-timeout + max_age: '1728000' + expose_headers: custom-header-1,grpc-status,grpc-message + http_filters: + - name: envoy.grpc_web + - name: envoy.cors + - name: envoy.router + + clusters: + - name: hello_service + connect_timeout: 0.25s + type: logical_dns + http2_protocol_options: {} + lb_policy: round_robin + hosts: + - socket_address: + address: hello + port_value: 80 diff --git a/docker-compose.yaml b/docker-compose.yaml old mode 100644 new mode 100755 index e69de29bb2..41bac0d555 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -0,0 +1,18 @@ +#!/usr/bin/env docker-compose -f + +version: "3.4" + +services: + proxy: + container_name: boss-proxy + build: + context: backend/proxy + restart: unless-stopped + ports: + - "8080:80" + + hello: + container_name: boss-hello + build: + context: backend/hello + restart: unless-stopped diff --git a/protos/hello.proto b/protos/hello.proto new file mode 100644 index 0000000000..8b6187dd0e --- /dev/null +++ b/protos/hello.proto @@ -0,0 +1,15 @@ +syntax = "proto3"; + +package spotify.backstage.hello.v1alpha1; + +service Hello { + rpc Hello(HelloRequest) returns (HelloReply); +} + +message HelloRequest { + string name = 1; +} + +message HelloReply { + string message = 1; +}