@mochabug/adaptkit 1.0.0-beta.4 → 1.0.0-beta.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/inject.js +0 -7
- package/bin/index.js +2 -2
- package/bin/index.js.map +3 -3
- package/package.json +3 -3
package/bin/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["<define:__PACKAGE_JSON__>", "../src/index.ts", "../src/add.ts", "../src/genproto/mochabugapis/adapt/plugins/v1/plugins.ts", "../src/vertices.ts", "../src/genproto/mochabugapis/adapt/graph/vertex_config.ts", "../src/genproto/mochabugapis/adapt/graph/exchange.ts", "../src/genproto/mochabugapis/adapt/graph/transceiver.ts", "../src/genproto/mochabugapis/adapt/graph/signal_descriptor.ts", "../src/genproto/mochabugapis/adapt/graph/jtd_schema.ts", "../src/genproto/google/protobuf/struct.ts", "../src/genproto/mochabugapis/adapt/graph/transmitter.ts", "../src/genproto/mochabugapis/adapt/graph/receiver.ts", "../src/genproto/mochabugapis/adapt/graph/signal_binding.ts", "../src/utils.ts", "../src/init.ts", "../src/oauth2.ts", "../src/publish.ts", "../src/genproto/mochabugapis/adapt/plugins/v1/plugins.client.ts"],
|
|
4
|
-
"sourcesContent": ["", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport chalk from 'chalk';\nimport { Command, program } from 'commander';\nimport figlet from 'figlet';\nimport fs from 'fs';\nimport isValidHostname from 'is-valid-hostname';\nimport path from 'path';\nimport semver from 'semver';\nimport updateNotifier, { Package } from 'update-notifier';\nimport { add } from './add';\nimport { Manifest } from './genproto/mochabugapis/adapt/plugins/v1/plugins';\nimport { init } from './init';\nimport { waitForConsent } from './oauth2';\nimport { emulate, publish } from './publish';\nimport { readManifest } from './utils';\n\nasync function isValidUrl(urlString: string) {\n try {\n new URL(urlString);\n return true;\n } catch (error) {\n return false;\n }\n}\n\nfunction isValidPort(port: string): boolean {\n const portNumber = parseInt(port, 10);\n return portNumber > 0 && portNumber <= 65535;\n}\n\nfunction isValidHostWithPort(hostWithPort: string): {\n isValid: boolean;\n hostname: string;\n port?: number;\n} {\n const [hostname, port] = hostWithPort.split(':');\n\n if (!isValidHostname(hostname)) {\n return { isValid: false, hostname };\n }\n\n if (port !== undefined) {\n if (!isValidPort(port)) {\n return { isValid: false, hostname, port: parseInt(port, 10) };\n }\n return { isValid: true, hostname, port: parseInt(port, 10) };\n }\n\n return { isValid: true, hostname };\n}\n\nfunction banner(): string {\n return chalk.yellowBright(figlet.textSync('Adaptkit'));\n}\n\nasync function handleInit(dir: string, cmd: Command) {\n // Check for unexpected arguments\n if (cmd.args.length >= 1) {\n console.error(\n chalk.red(`Error: Invalid sub-command or arguments provided.`)\n );\n console.log(\n `For more information, use: ${chalk.blue('adaptkit help init')}`\n );\n process.exit(1);\n }\n\n // Continue with the usual logic if no unexpected arguments are found\n await init(dir);\n}\n\nasync function handleAdd(cmd: Command) {\n if (cmd.args.length >= 1) {\n console.error(\n chalk.red(`Error: Invalid sub-command or arguments provided.`)\n );\n console.log(\n `For more information, use: ${chalk.blue('adaptkit help add')}`\n );\n process.exit(1);\n }\n\n const manifest = readManifest('manifest.json');\n if (!manifest) {\n console.log(\n `For more information, use: ${chalk.blue('adaptkit help add')}`\n );\n process.exit(1);\n }\n await add(manifest);\n}\n\nasync function handlePublish(\n host: string,\n authUrl: string,\n client: string,\n insecure: boolean,\n errorUrl: string,\n cmd: Command\n) {\n if (!(await isValidUrl(authUrl))) {\n console.error(\n chalk.red(\n `Error: The provided authority url is not a valid URL: ${authUrl}`\n )\n );\n console.log(\n `For more information, use: ${chalk.blue('adaptkit help publish')}`\n );\n process.exit(1);\n }\n\n const { isValid, hostname, port } = isValidHostWithPort(host);\n if (!isValid) {\n console.error(\n chalk.red(\n `Error: The provided host or port is not valid: ${hostname}${\n port ? ':' + port : ''\n }`\n )\n );\n console.log(\n `For more information, use: ${chalk.blue('adaptkit help emulate')}`\n );\n process.exit(1);\n }\n\n if (cmd.args.length >= 1) {\n console.error(\n chalk.red(`Error: Invalid sub-command or arguments provided.`)\n );\n console.log(\n `For more information, use: ${chalk.blue('adaptkit help publish')}`\n );\n process.exit(1);\n }\n\n const manifest = readManifest('manifest.json');\n if (!manifest) {\n console.log(\n `For more information, use: ${chalk.blue('adaptkit help publish')}`\n );\n process.exit(1);\n }\n\n if (insecure) {\n process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';\n }\n\n const accessToken = await waitForConsent(authUrl, errorUrl, client);\n if (!accessToken) {\n console.log('Could not fetch the acccess token. Terminating...');\n process.exit(1);\n }\n await publish(manifest, host, accessToken, insecure);\n}\n\nasync function handleEmulate(host: string, cmd: Command) {\n const { isValid, hostname, port } = isValidHostWithPort(host);\n if (!isValid) {\n console.error(\n chalk.red(\n `Error: The provided host or port is not valid: ${hostname}${\n port ? ':' + port : ''\n }`\n )\n );\n console.log(\n `For more information, use: ${chalk.blue('adaptkit help emulate')}`\n );\n process.exit(1);\n }\n\n if (cmd.args.length >= 1) {\n console.error(\n chalk.red(`Error: Invalid sub-command or arguments provided.`)\n );\n console.log(\n `For more information, use: ${chalk.blue('adaptkit help emulate')}`\n );\n process.exit(1);\n }\n\n const manifest = readManifest('manifest.json');\n if (!manifest) {\n console.log(\n `For more information, use: ${chalk.blue('adaptkit help emulate')}`\n );\n process.exit(1);\n }\n await emulate(manifest, host);\n}\n\nfunction handleVersion(bump: 'patch' | 'minor' | 'major' | null, cmd: Command) {\n if (cmd.args.length >= 1) {\n console.error(\n chalk.red(`Error: Invalid sub-command or arguments provided.`)\n );\n console.log(\n `For more information, use: ${chalk.blue('adaptkit help version')}`\n );\n process.exit(1);\n }\n\n const manifest = readManifest('manifest.json');\n if (!manifest) {\n console.log(\n `For more information, use: ${chalk.blue('adaptkit help version')}`\n );\n process.exit(1);\n }\n\n const manVer = semver.parse(manifest.version);\n if (!manVer) {\n console.error(\n chalk.red(\n `Error: The version in the manifest is not a valid semver version: ${manifest.version}`\n )\n );\n console.log(\n `For more information, use: ${chalk.blue('adaptkit help version')}`\n );\n process.exit(1);\n }\n\n if (bump === null) {\n console.error(\n chalk.red(\n 'You must provide either --patch --minor or --major to bump the version.'\n )\n );\n console.log(\n `For more information, use: ${chalk.blue('adaptkit help version')}`\n );\n process.exit(1);\n }\n\n const prevVersion = manifest.version;\n manifest.version = manVer.inc(bump).toString();\n fs.writeFileSync(\n path.join(process.cwd(), 'manifest.json'),\n Manifest.toJsonString(manifest, {\n enumAsInteger: false,\n prettySpaces: 2,\n emitDefaultValues: false\n })\n );\n console.log(\n chalk.green(`Bumped the version from ${prevVersion} to ${manifest.version}`)\n );\n}\n\nasync function main() {\n const notifier = updateNotifier({\n pkg: __PACKAGE_JSON__\n });\n notifier.notify({ isGlobal: true, defer: false });\n\n program\n .name('Adaptkit')\n .version('1.0.0')\n .description(\n 'Unleash the power of seamless plugin development with Adaptkit, your premier CLI companion for Mochabug Adapt. Effortlessly create, manage and deploy plugins with finesse. Explore the full potential of Adaptkit at ' +\n chalk.underline.blue('https://www.mochabug.com')\n )\n .configureHelp({\n sortSubcommands: true,\n sortOptions: true,\n showGlobalOptions: true,\n helpWidth: 140\n });\n\n const DEFAULT_INIT_DIRECTORY = './';\n program\n .command('init')\n .option(\n '-d, --dir <dir>',\n `Choose the directory to initiate your plugin's journey. Default: '${DEFAULT_INIT_DIRECTORY}'`,\n DEFAULT_INIT_DIRECTORY\n )\n .description(\n 'Kickstart your plugin adventure. This command scaffolds a ready-to-go project structure.'\n )\n .action(({ dir }, cmd) => handleInit(dir, cmd));\n\n program\n .command('add')\n .description(\"Expand your plugin's capabilities\")\n .action((_, cmd) => handleAdd(cmd));\n\n program\n .command('publish')\n .option(\n '-h, --host <host>',\n chalk.yellow('Warning: Primarily for development purposes'),\n 'adapt-grpc-dev.mochabugapis.com'\n )\n .option(\n '-a, --authority <authority>',\n chalk.yellow('Warning: Primarily for development purposes'),\n 'https://auth-dev.mochabugapis.com'\n )\n .option(\n '-c, --client <client>',\n chalk.yellow('Warning: Primarily for development purposes'),\n '2d711bbb-4b57-4ad5-8bf0-f2269de5b71d'\n )\n .option(\n '-e, --error-url <errorUrl>',\n chalk.yellow('Warning: Primarily for development purposes'),\n 'https://accounts-dev.mochabug.com/services/error'\n )\n .option('--insecure', chalk.red('Ignore SSL certificate errors (insecure)'))\n .description(\n 'Ready for liftoff? Publish your plugin to your organization with this command.'\n )\n .action(({ host, authority, client, insecure, errorUrl }, cmd) =>\n handlePublish(host, authority, client, insecure, errorUrl, cmd)\n );\n\n program\n .command('emulate')\n .option(\n '-h, --host <host>',\n 'Specify the URL to test your plugin in the emulator. Ideal for custom port configurations.',\n 'localhost:51001'\n )\n .description(\n 'Take your plugin for a test drive. Best used in conjunction with your build pipeline.'\n )\n .action(({ host }, cmd) => handleEmulate(host, cmd));\n\n program\n .command('version')\n .option('--patch', 'Bump the manifest version to the next patch version')\n .option('--minor', 'Bump the manifest version to the next minor version')\n .option('--major', 'Bump the manifest version to the next major version')\n .description(\n 'The version command can manipulate the version of the plugin manifest.'\n )\n .action(({ major, minor, patch }, cmd) =>\n handleVersion(\n major ? 'major' : minor ? 'minor' : patch ? 'patch' : null,\n cmd\n )\n );\n\n // Set a custom help action\n program.addHelpText('beforeAll', banner() + '\\n');\n program.showHelpAfterError();\n\n try {\n await program.parseAsync(process.argv);\n } catch (error: any) {\n console.error(error);\n console.error('An error occurred:', error.message);\n }\n}\n\nmain();\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { confirm, input, select } from '@inquirer/prompts';\nimport chalk from 'chalk';\nimport fs from 'fs';\nimport { Manifest } from './genproto/mochabugapis/adapt/plugins/v1/plugins';\nimport { addVertex } from './vertices';\n\nexport async function add(manifest: Manifest) {\n const vertexName = await input({\n message: 'Type a new unused vertex name',\n transformer: (val: string): string => {\n return val.trim();\n },\n validate: (val: string): boolean => {\n val = val.trim();\n if (manifest.vertices.filter((item) => item.name === val).length > 0) {\n return false;\n }\n return /^[_a-z][_a-z0-9]*$/.test(val);\n }\n });\n const vertexType = await select({\n message: 'Choose your vertex type',\n choices: [\n {\n name: 'action',\n value: 'action',\n description:\n 'An action is a vertex that performs a task, such as sending an email or updating a database.'\n },\n {\n name: 'browser',\n value: 'browser',\n description:\n 'A browser is a vertex that interacts with a web browser, such as navigating to a page or clicking a button.'\n },\n {\n name: 'cron-trigger',\n value: 'cron-trigger',\n description:\n 'A cron trigger is a vertex that triggers at a specific time, such as every day at 3:00 PM.'\n },\n {\n name: 'external-trigger',\n value: 'external-trigger',\n description:\n 'An external trigger is a vertex that triggers from an external event, such as a webhook or a message queue.'\n }\n ]\n });\n const hasConfigurator = await confirm({\n message: 'Need a configurator for the vertex?'\n });\n\n // Check which frontend to use, if any\n let frontendLib: 'none' | 'react' | undefined;\n if (hasConfigurator || vertexType === 'browser') {\n frontendLib = await select({\n message: 'Choose frontend library',\n choices: [\n {\n name: 'React',\n value: 'react',\n description: 'React with TypeScript'\n },\n {\n name: 'None',\n value: 'none',\n description: 'I do it myself'\n }\n ]\n });\n }\n\n console.log(chalk.magenta('Creating new vertex templates...'));\n\n const vertex = addVertex(\n '.',\n vertexName,\n vertexType,\n hasConfigurator,\n manifest.vertices,\n frontendLib\n );\n manifest.vertices.push(vertex);\n if (!manifest.configurators && vertex.configurator) {\n manifest.configurators = 'dist/configurators.js';\n }\n\n console.log(chalk.magenta('Updating manifest...'));\n fs.writeFileSync(\n 'manifest.json',\n Manifest.toJsonString(manifest, {\n enumAsInteger: false,\n prettySpaces: 2,\n emitDefaultValues: false\n })\n );\n console.log(chalk.bgGreen('Success'));\n}\n", "// @generated by protobuf-ts 2.9.4 with parameter client_generic,force_server_none\n// @generated from protobuf file \"mochabugapis/adapt/plugins/v1/plugins.proto\" (package \"mochabugapis.adapt.plugins.v1\", syntax proto3)\n// tslint:disable\n//\n// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\nimport { ServiceType } from \"@protobuf-ts/runtime-rpc\";\nimport type { BinaryWriteOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryWriter } from \"@protobuf-ts/runtime\";\nimport { WireType } from \"@protobuf-ts/runtime\";\nimport type { BinaryReadOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryReader } from \"@protobuf-ts/runtime\";\nimport { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport type { PartialMessage } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\n/**\n * UploadPluginRequest represents a single request in the CreatePlugin streaming\n * RPC. The client sends a series of UploadPluginRequest messages containing\n * plugin data, starting with a manifest and followed by one or more files.\n *\n * @generated from protobuf message mochabugapis.adapt.plugins.v1.UploadPluginRequest\n */\nexport interface UploadPluginRequest {\n /**\n * @generated from protobuf oneof: data\n */\n data: {\n oneofKind: \"manifest\";\n /**\n * 'manifest' is the Manifest describing the plugin.\n * It must be the first message in the stream.\n *\n * @generated from protobuf field: mochabugapis.adapt.plugins.v1.Manifest manifest = 1;\n */\n manifest: Manifest;\n } | {\n oneofKind: \"file\";\n /**\n * 'file' is a File contained within the plugin.\n * It follows the manifest in the stream.\n *\n * @generated from protobuf field: mochabugapis.adapt.plugins.v1.File file = 2;\n */\n file: File;\n } | {\n oneofKind: undefined;\n };\n}\n/**\n * UploadPluginResponse represents the response from the CreatePlugin streaming\n * RPC. The server sends a single CreatePluginResponse after successfully\n * processing all UploadPluginResponse messages from the client.\n *\n * @generated from protobuf message mochabugapis.adapt.plugins.v1.UploadPluginResponse\n */\nexport interface UploadPluginResponse {\n}\n/**\n * File represents a file within a plugin package.\n *\n * @generated from protobuf message mochabugapis.adapt.plugins.v1.File\n */\nexport interface File {\n /**\n * 'path' is the local file path relative to the manifest.json folder.\n *\n * @generated from protobuf field: string path = 1;\n */\n path: string;\n /**\n * 'data' contains the actual binary file data.\n *\n * @generated from protobuf field: bytes data = 2;\n */\n data: Uint8Array;\n}\n/**\n * Manifest describes a plugin and its properties.\n *\n * Security considerations: The platform ensures that secrets and certificates\n * are stored and transmitted securely.\n *\n * *** Plugin authors must also ensure that their implementations\n * handle sensitive data appropriately! ***\n *\n * @generated from protobuf message mochabugapis.adapt.plugins.v1.Manifest\n */\nexport interface Manifest {\n /**\n * 'name' is the alpha-numeric identifier of the plugin. Must be conform to a ES variable name\n *\n * @generated from protobuf field: string name = 1;\n */\n name: string;\n /**\n * 'version' is the plugin's version, following SemVer 2.0: https://semver.org/\n *\n * @generated from protobuf field: string version = 2;\n */\n version: string;\n /**\n * 'label' is a human-friendly label displayed in the UI.\n *\n * @generated from protobuf field: string label = 3;\n */\n label: string;\n /**\n * 'description' is a short, human-friendly description displayed in the UI.\n *\n * @generated from protobuf field: string description = 4;\n */\n description: string;\n /**\n * 'organization' is the id of the organization the user belongs to.\n *\n * @generated from protobuf field: string organization = 5;\n */\n organization: string;\n /**\n * 'homepage' is the plugin's homepage URL.\n *\n * @generated from protobuf field: optional string homepage = 6;\n */\n homepage?: string;\n /**\n * 'repository' is the plugin's repository URL.\n *\n * @generated from protobuf field: optional string repository = 7;\n */\n repository?: string;\n /**\n * 'bugs' is the URL or email for reporting bugs.\n *\n * @generated from protobuf field: optional string bugs = 8;\n */\n bugs?: string;\n /**\n * 'author' is the name of the plugin's author.\n *\n * @generated from protobuf field: optional string author = 9;\n */\n author?: string;\n /**\n * 'logo' is an optional path to the plugin logo.\n * The logo will be resized to a maximum of 80x80 pixels.\n * - Supported file formats:\n * - GIF: .gif\n * - JPEG: .jpg, .jpeg, .jfif, .pjpeg, .pjp\n * - PNG: .png\n * - SVG: .svg\n * - WEBP: .webp\n * - AVIF: .avif\n *\n * @generated from protobuf field: optional string logo = 10;\n */\n logo?: string;\n /**\n * 'executors' is the path to the executor ES module file.\n *\n * @generated from protobuf field: string executors = 11;\n */\n executors: string;\n /**\n * 'configurators' is an optional path to the configurator ES module file.\n *\n * @generated from protobuf field: optional string configurators = 12;\n */\n configurators?: string;\n /**\n * 'assets' is an optional directory containing all static assets\n * available to the plugin.\n *\n * @generated from protobuf field: optional string assets = 13;\n */\n assets?: string;\n /**\n * 'cdn' is the URL of the plugin's CDN (content delivery network).\n * The CDN is used to serve static assets, such as images, CSS, and JavaScript\n * files. The files will be located on https://cdn.mochabug.com/adapt/plugins/<owner>/<plugin>/<version>/\n *\n * @generated from protobuf field: optional string cdn = 14;\n */\n cdn?: string;\n /**\n * 'vertices' is a list of vertices that constitute the plugin.\n *\n * @generated from protobuf field: repeated mochabugapis.adapt.plugins.v1.Vertex vertices = 15;\n */\n vertices: Vertex[];\n /**\n * The plugin oauth2 services specifies oauth2 services that is required for the plugin.\n * The client_id must be set for ALL oauth services here\n *\n * @generated from protobuf field: repeated mochabugapis.adapt.plugins.v1.Oauth2Service plugin_oauth2 = 16;\n */\n pluginOauth2: Oauth2Service[];\n /**\n * 'plugin_variables' represents the variables required by the plugin.\n * The platform ensures secure storage and transmission of variables.\n * i.e. a plugin owner sets these variables and the plugin can use them\n *\n * @generated from protobuf field: repeated mochabugapis.adapt.plugins.v1.VariableService plugin_variables = 17;\n */\n pluginVariables: VariableService[];\n /**\n * 'plugin_mtls' represents the mTLS (mutual TLS) certificates required by\n * the plugin. The platform ensures secure storage and transmission of\n * certificates.\n * i.e. a plugin owner sets these certificates and the plugin can use them\n *\n * @generated from protobuf field: repeated mochabugapis.adapt.plugins.v1.MTLSService plugin_mtls = 18;\n */\n pluginMtls: MTLSService[];\n}\n/**\n * Vertex represents a graph vertex that defines a plugin.\n * Note: Be aware of potential security implications when dealing with\n * user-provided data, such as file paths, and ensure proper input validation\n * and sanitization.\n *\n * @generated from protobuf message mochabugapis.adapt.plugins.v1.Vertex\n */\nexport interface Vertex {\n /**\n * 'name' represents the vertex name.\n *\n * @generated from protobuf field: string name = 1;\n */\n name: string;\n /**\n * 'label' is a human-friendly label displayed in the UI.\n *\n * @generated from protobuf field: string label = 2;\n */\n label: string;\n /**\n * 'description' is a human-friendly short description of the vertex displayed\n * in UI.\n *\n * @generated from protobuf field: optional string description = 3;\n */\n description?: string;\n /**\n * 'logo' is the file path to the vertex logo, which will be resized to a\n * maximum of 40x40 pixels. Ensure that the logo files are from trusted\n * sources to avoid security risks.\n * - Supported file formats:\n * - GIF: .gif\n * - JPEG: .jpg, .jpeg, .jfif, .pjpeg, .pjp\n * - PNG: .png\n * - SVG: .svg\n * - WEBP: .webp\n * - AVIF: .avif\n *\n * @generated from protobuf field: optional string logo = 4;\n */\n logo?: string;\n /**\n * 'type' specifies the type of the vertex.\n *\n * @generated from protobuf field: mochabugapis.adapt.plugins.v1.Vertex.VertexType type = 5;\n */\n type: Vertex_VertexType;\n /**\n * 'config' is an field that contains a Unix file path.\n * This can be any type of file, this is only intepreted for the vertex itself\n * Restrictions:\n *\n *\n * @generated from protobuf field: optional string config = 6;\n */\n config?: string;\n /**\n * 'metadata' is an field that contains a Unix file path.\n * This determines which receivers, transmitters etc... the vertex has to begin with\n * Restrictions:\n *\n *\n * @generated from protobuf field: string metadata = 7;\n */\n metadata: string;\n /**\n * 'configurator' is a field to indicate whether or not\n * the vertex has a configurator\n *\n * @generated from protobuf field: bool configurator = 8;\n */\n configurator: boolean;\n /**\n * The variables required by the vertex\n *\n * @generated from protobuf field: repeated mochabugapis.adapt.plugins.v1.VariableService variables = 9;\n */\n variables: VariableService[];\n /**\n * The mtls field contains a list of MTLSService instances for user-defined mTLS services.\n *\n * @generated from protobuf field: repeated mochabugapis.adapt.plugins.v1.MTLSService mtls = 10;\n */\n mtls: MTLSService[];\n /**\n * The code_oauth2 field stores a list of bindings to the actual code flow definitions.\n *\n * If any of the OAuth2 services referred to in these bindings are not configured and are not marked as 'optional'\n * in their respective ServiceBinding, the plugin might not be able to properly authenticate and authorize its operations.\n *\n * @generated from protobuf field: repeated mochabugapis.adapt.plugins.v1.Oauth2CodeBinding code_oauth2 = 11;\n */\n codeOauth2: Oauth2CodeBinding[];\n /**\n * client_id must not be set, and code must not be set. It's only for user defined service accounts\n *\n * @generated from protobuf field: repeated mochabugapis.adapt.plugins.v1.Oauth2Service oauth2 = 12;\n */\n oauth2: Oauth2Service[];\n}\n/**\n * VertexType represents the type of a vertex.\n *\n * @generated from protobuf enum mochabugapis.adapt.plugins.v1.Vertex.VertexType\n */\nexport enum Vertex_VertexType {\n /**\n * Unspecified type (default value, should not be used).\n *\n * @generated from protobuf enum value: VERTEX_TYPE_UNSPECIFIED = 0;\n */\n UNSPECIFIED = 0,\n /**\n * Action type, available in all contexts and not exposed to the outside\n * world. This type has a lower security risk.\n *\n * @generated from protobuf enum value: VERTEX_TYPE_ACTION = 1;\n */\n ACTION = 1,\n /**\n * Browser type, available only in a browser context.\n * The configuration always runs inside a browser context.\n * Security implications: be cautious about potentially sensitive data\n * exposure.\n *\n * @generated from protobuf enum value: VERTEX_TYPE_BROWSER = 2;\n */\n BROWSER = 2,\n /**\n * CronTrigger type, available only in a trigger context.\n * Triggered at specific intervals.\n *\n * @generated from protobuf enum value: VERTEX_TYPE_CRON_TRIGGER = 3;\n */\n CRON_TRIGGER = 3,\n /**\n * ExternalTrigger type, available only in a trigger context.\n * Accessible via a publicly routable address.\n * Security implications: be cautious about exposing sensitive data or\n * functionality.\n *\n * @generated from protobuf enum value: VERTEX_TYPE_EXTERNAL_TRIGGER = 4;\n */\n EXTERNAL_TRIGGER = 4\n}\n/**\n * MTLSService represents a mutual Transport Layer Security (mTLS) service\n * configuration required by the plugin. mTLS provides secure communication\n * between client and server by authenticating both parties and encrypting the\n * communication.\n *\n * @generated from protobuf message mochabugapis.adapt.plugins.v1.MTLSService\n */\nexport interface MTLSService {\n /**\n * 'name' is the identifier of the mTLS service.\n * It's used for referencing the specific mTLS configuration.\n *\n * @generated from protobuf field: string name = 1;\n */\n name: string;\n /**\n * 'label' is an optional short label describing the purpose of the mTLS\n * service.\n *\n * Restrictions:\n * - Length must be greater than 0 and less than 25 characters.\n * Security implications:\n * - Should not contain sensitive information.\n *\n * @generated from protobuf field: optional string label = 2;\n */\n label?: string;\n /**\n * 'description' is an optional detailed description of the mTLS service and\n * its usage within the plugin.\n *\n * @generated from protobuf field: optional string description = 3;\n */\n description?: string;\n /**\n * Unset or false means the variable is required\n * true means the mtls service is optional\n *\n * @generated from protobuf field: optional bool optional = 4;\n */\n optional?: boolean;\n}\n/**\n * A representation of a variable.\n *\n * This message represents a variable used within the hosting platform.\n * Variables are essential for configuring applications and services hosted on the platform.\n * They store values that can be accessed by the application or service during runtime.\n *\n * @generated from protobuf message mochabugapis.adapt.plugins.v1.VariableService\n */\nexport interface VariableService {\n /**\n * 'name' is the identifier of the variable, which is referenced where needed.\n *\n * @generated from protobuf field: string name = 1;\n */\n name: string;\n /**\n * 'label' is a short, human-readable label describing the purpose of the variable.\n *\n * @generated from protobuf field: optional string label = 2;\n */\n label?: string;\n /**\n * 'description' is a detailed description of the variable and its use.\n *\n * @generated from protobuf field: optional string description = 3;\n */\n description?: string;\n /**\n * The 'type' field specifies the data type of the environmental variable.\n *\n * @generated from protobuf field: mochabugapis.adapt.plugins.v1.VariableService.Type type = 4;\n */\n type: VariableService_Type;\n /**\n * Unset or false means the variable is required\n * true means the variable is optional\n *\n * @generated from protobuf field: optional bool optional = 5;\n */\n optional?: boolean;\n}\n/**\n * The type of variable\n *\n * @generated from protobuf enum mochabugapis.adapt.plugins.v1.VariableService.Type\n */\nexport enum VariableService_Type {\n /**\n * The type is not specified. Invalid value\n *\n * @generated from protobuf enum value: TYPE_UNSPECIFIED = 0;\n */\n UNSPECIFIED = 0,\n /**\n * The variable will hold a secret\n *\n * @generated from protobuf enum value: TYPE_SECRET = 1;\n */\n SECRET = 1,\n /**\n * The variable will hold a string\n *\n * @generated from protobuf enum value: TYPE_STRING = 2;\n */\n STRING = 2,\n /**\n * The variable is a boolean value (a string either \"true\" or \"false\")\n *\n * @generated from protobuf enum value: TYPE_SWITCH = 3;\n */\n SWITCH = 3\n}\n/**\n * OAuth2 service configuration\n *\n * @generated from protobuf message mochabugapis.adapt.plugins.v1.Oauth2Service\n */\nexport interface Oauth2Service {\n /**\n * 'name' is the identifier for the OAuth2 service.\n *\n * @generated from protobuf field: string name = 1;\n */\n name: string;\n /**\n * 'label' is an optional short label describing the OAuth2 service.\n *\n * @generated from protobuf field: optional string label = 2;\n */\n label?: string;\n /**\n * 'description' provides a full description of the OAuth2 service.\n *\n * @generated from protobuf field: optional string description = 3;\n */\n description?: string;\n /**\n * The OAuth2 grant type to be used.\n *\n * @generated from protobuf field: mochabugapis.adapt.plugins.v1.Oauth2GrantType grant_type = 4;\n */\n grantType: Oauth2GrantType;\n /**\n * The required scopes.\n *\n * @generated from protobuf field: repeated string scopes = 5;\n */\n scopes: string[];\n /**\n * The client authentication method.\n * REQUIRED when grant_type is:\n * - OAUTH2_GRANT_TYPE_AUTHORIZATION_CODE\n * - OAUTH2_GRANT_TYPE_CLIENT_CREDENTIALS\n *\n * MUST NOT be set when grant_type is:\n * - OAUTH2_GRANT_TYPE_JWT_BEARER\n * - OAUTH2_GRANT_TYPE_SAML2_BEARER\n *\n * @generated from protobuf field: optional mochabugapis.adapt.plugins.v1.Oauth2AuthType auth_method = 6;\n */\n authMethod?: Oauth2AuthType;\n /**\n * Algorithm used for signing assertions.\n * REQUIRED when:\n * - grant_type is OAUTH2_GRANT_TYPE_JWT_BEARER\n * - grant_type is OAUTH2_GRANT_TYPE_SAML2_BEARER\n * - auth_method is OAUTH2_AUTH_TYPE_PRIVATE_KEY_JWT\n * - auth_method is OAUTH2_AUTH_TYPE_SAML2_BEARER\n *\n * MUST NOT be set otherwise.\n *\n * @generated from protobuf field: optional mochabugapis.adapt.plugins.v1.PrivateKeyAlg alg = 7;\n */\n alg?: PrivateKeyAlg;\n /**\n * Client ID.\n * This is required when used as plugin_oauth2, but not onto a vertex => oauth2\n *\n * @generated from protobuf field: optional string client_id = 8;\n */\n clientId?: string;\n /**\n * The token endpoint URL.\n *\n * @generated from protobuf field: string token_endpoint = 9;\n */\n tokenEndpoint: string;\n /**\n * Configuration specific to the Authorization Code grant type.\n * REQUIRED when grant_type is OAUTH2_GRANT_TYPE_AUTHORIZATION_CODE.\n * MUST NOT be set otherwise.\n *\n * @generated from protobuf field: optional mochabugapis.adapt.plugins.v1.Oauth2Code code = 10;\n */\n code?: Oauth2Code;\n /**\n * Indicates if the OAuth2 service is optional.\n * This cannot be set to true in case of OAUTH2_GRANT_TYPE_AUTHORIZATION_CODE\n *\n * @generated from protobuf field: optional bool optional = 11;\n */\n optional?: boolean;\n}\n/**\n * Represents a binding to a code service\n *\n * The binding points to the required service by its 'name' and indicates whether the service is 'optional' or required.\n *\n * @generated from protobuf message mochabugapis.adapt.plugins.v1.Oauth2CodeBinding\n */\nexport interface Oauth2CodeBinding {\n /**\n * The 'name' field specifies the name of the service to bind to. The name should match the 'name' field of\n * the corresponding OAuth2Service.\n *\n * @generated from protobuf field: string name = 1;\n */\n name: string;\n /**\n * The 'optional' field indicates whether the service binding is optional or required. If 'optional' is\n * set to true, the service is not strictly required and the plugin can function without it. If 'optional'\n * is set to false, the service is required and the plugin might fail if it is not properly configured.\n *\n * @generated from protobuf field: optional bool optional = 2;\n */\n optional?: boolean;\n}\n/**\n * The code grant type\n * IMPORTANT: it has to be configured with refresh token in order to work correctly\n * this is not needed for client credentials of course since we are owning the client\n * WE ONLY SUPPORT OIDC since we need the sub claim to distinguish between different users\n *\n * @generated from protobuf message mochabugapis.adapt.plugins.v1.Oauth2Code\n */\nexport interface Oauth2Code {\n /**\n * The auth endpoint (i.e. where it gets redirected for login)\n *\n * @generated from protobuf field: string auth_endpoint = 1;\n */\n authEndpoint: string;\n /**\n * We need to know the issuer in order to validate the token\n *\n * @generated from protobuf field: string issuer = 2;\n */\n issuer: string;\n /**\n * We also need the JWKs endpoint to validate the token\n *\n * @generated from protobuf field: string jwks_uri = 3;\n */\n jwksUri: string;\n /**\n * Additional parameters used for the oauth2 login endpoint\n * Do not include state or nonce here since we're generating them\n * in the backend. All params will be encoded in the URL\n *\n * @generated from protobuf field: map<string, string> additional_params = 4;\n */\n additionalParams: {\n [key: string]: string;\n };\n /**\n * Whether or not to use the PKCE extension\n *\n * @generated from protobuf field: bool use_pkce = 5;\n */\n usePkce: boolean;\n}\n/**\n * The algorithm used for signing JWT or SAML assertions\n *\n * @generated from protobuf enum mochabugapis.adapt.plugins.v1.PrivateKeyAlg\n */\nexport enum PrivateKeyAlg {\n /**\n * Unknown algorithm (invalid)\n *\n * @generated from protobuf enum value: PRIVATE_KEY_ALG_UNSPECIFIED = 0;\n */\n UNSPECIFIED = 0,\n /**\n * RS256 algorithm\n *\n * @generated from protobuf enum value: PRIVATE_KEY_ALG_RS256 = 1;\n */\n RS256 = 1\n}\n/**\n * The OAuth2 grant type\n *\n * @generated from protobuf enum mochabugapis.adapt.plugins.v1.Oauth2GrantType\n */\nexport enum Oauth2GrantType {\n /**\n * Not specified (invalid)\n *\n * @generated from protobuf enum value: OAUTH2_GRANT_TYPE_UNSPECIFIED = 0;\n */\n UNSPECIFIED = 0,\n /**\n * Authorization Code Grant\n * grant_type=authorization_code\n *\n * @generated from protobuf enum value: OAUTH2_GRANT_TYPE_AUTHORIZATION_CODE = 1;\n */\n AUTHORIZATION_CODE = 1,\n /**\n * Client Credentials Grant\n * grant_type=client_credentials\n *\n * @generated from protobuf enum value: OAUTH2_GRANT_TYPE_CLIENT_CREDENTIALS = 2;\n */\n CLIENT_CREDENTIALS = 2,\n /**\n * JWT Bearer Assertion Grant\n * grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer\n *\n * @generated from protobuf enum value: OAUTH2_GRANT_TYPE_JWT_BEARER = 3;\n */\n JWT_BEARER = 3,\n /**\n * SAML 2.0 Bearer Assertion Grant\n * grant_type=urn:ietf:params:oauth:grant-type:saml2-bearer\n *\n * @generated from protobuf enum value: OAUTH2_GRANT_TYPE_SAML2_BEARER = 4;\n */\n SAML2_BEARER = 4\n}\n/**\n * The OAuth2 client authentication method\n *\n * @generated from protobuf enum mochabugapis.adapt.plugins.v1.Oauth2AuthType\n */\nexport enum Oauth2AuthType {\n /**\n * Not specified (invalid)\n *\n * @generated from protobuf enum value: OAUTH2_AUTH_TYPE_UNSPECIFIED = 0;\n */\n UNSPECIFIED = 0,\n /**\n * Basic Authentication (client ID and secret in Authorization header)\n *\n * @generated from protobuf enum value: OAUTH2_AUTH_TYPE_BASIC = 1;\n */\n BASIC = 1,\n /**\n * Form Authentication (client ID and secret in form body)\n *\n * @generated from protobuf enum value: OAUTH2_AUTH_TYPE_FORM = 2;\n */\n FORM = 2,\n /**\n * Private Key JWT Authentication\n * client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer\n *\n * @generated from protobuf enum value: OAUTH2_AUTH_TYPE_PRIVATE_KEY_JWT = 3;\n */\n PRIVATE_KEY_JWT = 3,\n /**\n * Mutual TLS Authentication\n *\n * @generated from protobuf enum value: OAUTH2_AUTH_TYPE_MTLS = 4;\n */\n MTLS = 4,\n /**\n * SAML 2.0 Bearer Assertion for Client Authentication\n * client_assertion_type=urn:ietf:params:oauth:client-assertion-type:saml2-bearer\n *\n * @generated from protobuf enum value: OAUTH2_AUTH_TYPE_SAML2_BEARER = 5;\n */\n SAML2_BEARER = 5\n}\n// @generated message type with reflection information, may provide speed optimized methods\nclass UploadPluginRequest$Type extends MessageType<UploadPluginRequest> {\n constructor() {\n super(\"mochabugapis.adapt.plugins.v1.UploadPluginRequest\", [\n { no: 1, name: \"manifest\", kind: \"message\", oneof: \"data\", T: () => Manifest },\n { no: 2, name: \"file\", kind: \"message\", oneof: \"data\", T: () => File }\n ]);\n }\n create(value?: PartialMessage<UploadPluginRequest>): UploadPluginRequest {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.data = { oneofKind: undefined };\n if (value !== undefined)\n reflectionMergePartial<UploadPluginRequest>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: UploadPluginRequest): UploadPluginRequest {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* mochabugapis.adapt.plugins.v1.Manifest manifest */ 1:\n message.data = {\n oneofKind: \"manifest\",\n manifest: Manifest.internalBinaryRead(reader, reader.uint32(), options, (message.data as any).manifest)\n };\n break;\n case /* mochabugapis.adapt.plugins.v1.File file */ 2:\n message.data = {\n oneofKind: \"file\",\n file: File.internalBinaryRead(reader, reader.uint32(), options, (message.data as any).file)\n };\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: UploadPluginRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* mochabugapis.adapt.plugins.v1.Manifest manifest = 1; */\n if (message.data.oneofKind === \"manifest\")\n Manifest.internalBinaryWrite(message.data.manifest, writer.tag(1, WireType.LengthDelimited).fork(), options).join();\n /* mochabugapis.adapt.plugins.v1.File file = 2; */\n if (message.data.oneofKind === \"file\")\n File.internalBinaryWrite(message.data.file, writer.tag(2, WireType.LengthDelimited).fork(), options).join();\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message mochabugapis.adapt.plugins.v1.UploadPluginRequest\n */\nexport const UploadPluginRequest = new UploadPluginRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass UploadPluginResponse$Type extends MessageType<UploadPluginResponse> {\n constructor() {\n super(\"mochabugapis.adapt.plugins.v1.UploadPluginResponse\", []);\n }\n create(value?: PartialMessage<UploadPluginResponse>): UploadPluginResponse {\n const message = globalThis.Object.create((this.messagePrototype!));\n if (value !== undefined)\n reflectionMergePartial<UploadPluginResponse>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: UploadPluginResponse): UploadPluginResponse {\n return target ?? this.create();\n }\n internalBinaryWrite(message: UploadPluginResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message mochabugapis.adapt.plugins.v1.UploadPluginResponse\n */\nexport const UploadPluginResponse = new UploadPluginResponse$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass File$Type extends MessageType<File> {\n constructor() {\n super(\"mochabugapis.adapt.plugins.v1.File\", [\n { no: 1, name: \"path\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"2\", maxLen: \"4096\", pattern: \"^[^/]+(\\\\/[^/]+)*$\" } } } },\n { no: 2, name: \"data\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/, options: { \"buf.validate.field\": { bytes: { minLen: \"1\", maxLen: \"40000000\" } } } }\n ]);\n }\n create(value?: PartialMessage<File>): File {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.path = \"\";\n message.data = new Uint8Array(0);\n if (value !== undefined)\n reflectionMergePartial<File>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: File): File {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string path */ 1:\n message.path = reader.string();\n break;\n case /* bytes data */ 2:\n message.data = reader.bytes();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: File, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* string path = 1; */\n if (message.path !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.path);\n /* bytes data = 2; */\n if (message.data.length)\n writer.tag(2, WireType.LengthDelimited).bytes(message.data);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message mochabugapis.adapt.plugins.v1.File\n */\nexport const File = new File$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass Manifest$Type extends MessageType<Manifest> {\n constructor() {\n super(\"mochabugapis.adapt.plugins.v1.Manifest\", [\n { no: 1, name: \"name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"1\", maxLen: \"100\", pattern: \"^[_$a-z][_$a-z0-9]*$\" } } } },\n { no: 2, name: \"version\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"5\", maxLen: \"150\", pattern: \"^(0|[1-9]\\\\d*)\\\\.(0|[1-9]\\\\d*)\\\\.(0|[1-9]\\\\d*)(?:-((?:0|[1-9]\\\\d*|\\\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\\\.(?:0|[1-9]\\\\d*|\\\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\\\+([0-9a-zA-Z-]+(?:\\\\.[0-9a-zA-Z-]+)*))?$\" } } } },\n { no: 3, name: \"label\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"1\", maxLen: \"100\" } } } },\n { no: 4, name: \"description\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"1\", maxLen: \"250\" } } } },\n { no: 5, name: \"organization\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { uuid: true } } } },\n { no: 6, name: \"homepage\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { ignore: \"IGNORE_EMPTY\", string: { minLen: \"11\", maxLen: \"4096\", pattern: \"^https://[a-zA-Z0-9.-]+(?:\\\\.[a-zA-Z]{2,})(?:/.*)?$\" } } } },\n { no: 7, name: \"repository\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { ignore: \"IGNORE_EMPTY\", string: { minLen: \"11\", maxLen: \"4096\", pattern: \"^https://[a-zA-Z0-9.-]+(?:\\\\.[a-zA-Z]{2,})(?:/.*)?$\" } } } },\n { no: 8, name: \"bugs\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { cel: [{ id: \"valid_email_or_url\", message: \"bugs must be a valid email or URL\", expression: \"size(this) >= 2 && size(this) <= 4096 && (this.isEmail() || this.matches('^https://[a-zA-Z0-9.-]+(?:\\\\\\\\.[a-zA-Z]{2,})(?:/.*)?$'))\" }], ignore: \"IGNORE_EMPTY\" } } },\n { no: 9, name: \"author\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { ignore: \"IGNORE_EMPTY\", string: { minLen: \"1\", maxLen: \"100\" } } } },\n { no: 10, name: \"logo\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { ignore: \"IGNORE_EMPTY\", string: { minLen: \"2\", maxLen: \"4096\", pattern: \"^([^/]+(/[^/]+)*)\\\\.(gif|jpg|jpeg|jfif|pjpeg|pjp|png|svg|webp|avif)$\" } } } },\n { no: 11, name: \"executors\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"2\", maxLen: \"4096\", pattern: \"^([^/]+(/[^/]+)*)\\\\.(mjs|js)$\" } } } },\n { no: 12, name: \"configurators\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { ignore: \"IGNORE_EMPTY\", string: { minLen: \"2\", maxLen: \"4096\", pattern: \"^([^/]+(/[^/]+)*)\\\\.(mjs|js)$\" } } } },\n { no: 13, name: \"assets\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"2\", maxLen: \"4096\", pattern: \"^[^/]+(\\\\/[^/]+)*$\" } } } },\n { no: 14, name: \"cdn\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"2\", maxLen: \"4096\", pattern: \"^[^/]+(\\\\/[^/]+)*$\" } } } },\n { no: 15, name: \"vertices\", kind: \"message\", repeat: 1 /*RepeatType.PACKED*/, T: () => Vertex, options: { \"buf.validate.field\": { cel: [{ id: \"vertex_unique_names\", message: \"a name cannot appear more than once\", expression: \"this.map(vertex, vertex.name).unique()\" }], repeated: { minItems: \"1\", maxItems: \"100\" } } } },\n { no: 16, name: \"plugin_oauth2\", kind: \"message\", repeat: 1 /*RepeatType.PACKED*/, T: () => Oauth2Service, options: { \"buf.validate.field\": { cel: [{ id: \"plugin_oauth2.oauth_unique_names\", message: \"a name cannot appear more than once\", expression: \"this.map(oauth, oauth.name).unique()\" }], repeated: { minItems: \"0\", maxItems: \"20\", items: { cel: [{ id: \"plugin_oauth2.oauth2.client_id\", message: \"The client_id property must be set\", expression: \"has(this.client_id)\" }] } } } } },\n { no: 17, name: \"plugin_variables\", kind: \"message\", repeat: 1 /*RepeatType.PACKED*/, T: () => VariableService, options: { \"buf.validate.field\": { cel: [{ id: \"vars_unique_names\", message: \"a name cannot appear more than once\", expression: \"this.map(variable, variable.name).unique()\" }], repeated: { minItems: \"0\", maxItems: \"100\" } } } },\n { no: 18, name: \"plugin_mtls\", kind: \"message\", repeat: 1 /*RepeatType.PACKED*/, T: () => MTLSService, options: { \"buf.validate.field\": { cel: [{ id: \"mtls_unique_names\", message: \"a name cannot appear more than once\", expression: \"this.map(mtls, mtls.name).unique()\" }], repeated: { minItems: \"0\", maxItems: \"20\" } } } }\n ]);\n }\n create(value?: PartialMessage<Manifest>): Manifest {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.name = \"\";\n message.version = \"\";\n message.label = \"\";\n message.description = \"\";\n message.organization = \"\";\n message.executors = \"\";\n message.vertices = [];\n message.pluginOauth2 = [];\n message.pluginVariables = [];\n message.pluginMtls = [];\n if (value !== undefined)\n reflectionMergePartial<Manifest>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Manifest): Manifest {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string name */ 1:\n message.name = reader.string();\n break;\n case /* string version */ 2:\n message.version = reader.string();\n break;\n case /* string label */ 3:\n message.label = reader.string();\n break;\n case /* string description */ 4:\n message.description = reader.string();\n break;\n case /* string organization */ 5:\n message.organization = reader.string();\n break;\n case /* optional string homepage */ 6:\n message.homepage = reader.string();\n break;\n case /* optional string repository */ 7:\n message.repository = reader.string();\n break;\n case /* optional string bugs */ 8:\n message.bugs = reader.string();\n break;\n case /* optional string author */ 9:\n message.author = reader.string();\n break;\n case /* optional string logo */ 10:\n message.logo = reader.string();\n break;\n case /* string executors */ 11:\n message.executors = reader.string();\n break;\n case /* optional string configurators */ 12:\n message.configurators = reader.string();\n break;\n case /* optional string assets */ 13:\n message.assets = reader.string();\n break;\n case /* optional string cdn */ 14:\n message.cdn = reader.string();\n break;\n case /* repeated mochabugapis.adapt.plugins.v1.Vertex vertices */ 15:\n message.vertices.push(Vertex.internalBinaryRead(reader, reader.uint32(), options));\n break;\n case /* repeated mochabugapis.adapt.plugins.v1.Oauth2Service plugin_oauth2 */ 16:\n message.pluginOauth2.push(Oauth2Service.internalBinaryRead(reader, reader.uint32(), options));\n break;\n case /* repeated mochabugapis.adapt.plugins.v1.VariableService plugin_variables */ 17:\n message.pluginVariables.push(VariableService.internalBinaryRead(reader, reader.uint32(), options));\n break;\n case /* repeated mochabugapis.adapt.plugins.v1.MTLSService plugin_mtls */ 18:\n message.pluginMtls.push(MTLSService.internalBinaryRead(reader, reader.uint32(), options));\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: Manifest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* string name = 1; */\n if (message.name !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.name);\n /* string version = 2; */\n if (message.version !== \"\")\n writer.tag(2, WireType.LengthDelimited).string(message.version);\n /* string label = 3; */\n if (message.label !== \"\")\n writer.tag(3, WireType.LengthDelimited).string(message.label);\n /* string description = 4; */\n if (message.description !== \"\")\n writer.tag(4, WireType.LengthDelimited).string(message.description);\n /* string organization = 5; */\n if (message.organization !== \"\")\n writer.tag(5, WireType.LengthDelimited).string(message.organization);\n /* optional string homepage = 6; */\n if (message.homepage !== undefined)\n writer.tag(6, WireType.LengthDelimited).string(message.homepage);\n /* optional string repository = 7; */\n if (message.repository !== undefined)\n writer.tag(7, WireType.LengthDelimited).string(message.repository);\n /* optional string bugs = 8; */\n if (message.bugs !== undefined)\n writer.tag(8, WireType.LengthDelimited).string(message.bugs);\n /* optional string author = 9; */\n if (message.author !== undefined)\n writer.tag(9, WireType.LengthDelimited).string(message.author);\n /* optional string logo = 10; */\n if (message.logo !== undefined)\n writer.tag(10, WireType.LengthDelimited).string(message.logo);\n /* string executors = 11; */\n if (message.executors !== \"\")\n writer.tag(11, WireType.LengthDelimited).string(message.executors);\n /* optional string configurators = 12; */\n if (message.configurators !== undefined)\n writer.tag(12, WireType.LengthDelimited).string(message.configurators);\n /* optional string assets = 13; */\n if (message.assets !== undefined)\n writer.tag(13, WireType.LengthDelimited).string(message.assets);\n /* optional string cdn = 14; */\n if (message.cdn !== undefined)\n writer.tag(14, WireType.LengthDelimited).string(message.cdn);\n /* repeated mochabugapis.adapt.plugins.v1.Vertex vertices = 15; */\n for (let i = 0; i < message.vertices.length; i++)\n Vertex.internalBinaryWrite(message.vertices[i], writer.tag(15, WireType.LengthDelimited).fork(), options).join();\n /* repeated mochabugapis.adapt.plugins.v1.Oauth2Service plugin_oauth2 = 16; */\n for (let i = 0; i < message.pluginOauth2.length; i++)\n Oauth2Service.internalBinaryWrite(message.pluginOauth2[i], writer.tag(16, WireType.LengthDelimited).fork(), options).join();\n /* repeated mochabugapis.adapt.plugins.v1.VariableService plugin_variables = 17; */\n for (let i = 0; i < message.pluginVariables.length; i++)\n VariableService.internalBinaryWrite(message.pluginVariables[i], writer.tag(17, WireType.LengthDelimited).fork(), options).join();\n /* repeated mochabugapis.adapt.plugins.v1.MTLSService plugin_mtls = 18; */\n for (let i = 0; i < message.pluginMtls.length; i++)\n MTLSService.internalBinaryWrite(message.pluginMtls[i], writer.tag(18, WireType.LengthDelimited).fork(), options).join();\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message mochabugapis.adapt.plugins.v1.Manifest\n */\nexport const Manifest = new Manifest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass Vertex$Type extends MessageType<Vertex> {\n constructor() {\n super(\"mochabugapis.adapt.plugins.v1.Vertex\", [\n { no: 1, name: \"name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"1\", maxLen: \"100\", pattern: \"^[_$a-z][_$a-z0-9]*$\" } } } },\n { no: 2, name: \"label\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"1\", maxLen: \"100\" } } } },\n { no: 3, name: \"description\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { ignore: \"IGNORE_EMPTY\", string: { minLen: \"1\", maxLen: \"250\" } } } },\n { no: 4, name: \"logo\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { ignore: \"IGNORE_EMPTY\", string: { minLen: \"2\", maxLen: \"4096\", pattern: \"^([^/]+(/[^/]+)*)\\\\.(gif|jpg|jpeg|jfif|pjpeg|pjp|png|svg|webp|avif)$\" } } } },\n { no: 5, name: \"type\", kind: \"enum\", T: () => [\"mochabugapis.adapt.plugins.v1.Vertex.VertexType\", Vertex_VertexType, \"VERTEX_TYPE_\"], options: { \"buf.validate.field\": { enum: { notIn: [0] } } } },\n { no: 6, name: \"config\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"5\", maxLen: \"4096\", pattern: \"^([^/]+(/[^/]+)*)\" } } } },\n { no: 7, name: \"metadata\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"5\", maxLen: \"4096\", pattern: \"^([^/]+(/[^/]+)*)\\\\.json$\" } } } },\n { no: 8, name: \"configurator\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ },\n { no: 9, name: \"variables\", kind: \"message\", repeat: 1 /*RepeatType.PACKED*/, T: () => VariableService, options: { \"buf.validate.field\": { cel: [{ id: \"vars_unique_names\", message: \"a name cannot appear more than once\", expression: \"this.map(variable, variable.name).unique()\" }], repeated: { minItems: \"0\", maxItems: \"100\" } } } },\n { no: 10, name: \"mtls\", kind: \"message\", repeat: 1 /*RepeatType.PACKED*/, T: () => MTLSService, options: { \"buf.validate.field\": { cel: [{ id: \"mtls_unique_names\", message: \"a name cannot appear more than once\", expression: \"this.map(mtls, mtls.name).unique()\" }], repeated: { minItems: \"0\", maxItems: \"100\" } } } },\n { no: 11, name: \"code_oauth2\", kind: \"message\", repeat: 1 /*RepeatType.PACKED*/, T: () => Oauth2CodeBinding, options: { \"buf.validate.field\": { cel: [{ id: \"vertex.code_oauth2.unique_names\", message: \"a name cannot appear more than once\", expression: \"this.map(oauth, oauth.name).unique()\" }], repeated: { minItems: \"0\", maxItems: \"20\" } } } },\n { no: 12, name: \"oauth2\", kind: \"message\", repeat: 1 /*RepeatType.PACKED*/, T: () => Oauth2Service, options: { \"buf.validate.field\": { cel: [{ id: \"vertex.oauth2.unique_names\", message: \"a name cannot appear more than once\", expression: \"this.map(oauth, oauth.name).unique()\" }], repeated: { minItems: \"0\", maxItems: \"20\", items: { cel: [{ id: \"vertex.oauth2.client_id_and_code\", message: \"The client_id and the code property may not be set as well as the code grant type\", expression: \"!has(this.client_id) && !has(this.code) && this.grant_type != 1\" }] } } } } }\n ], { \"buf.validate.message\": { cel: [{ id: \"vertex.oauth2_and_code_bindings\", message: \"The names of the oauth2 services and the code bindings must be unique\", expression: \"(this.oauth2.map(val, val.name) + this.code_oauth2.map(val, val.name)).unique()\" }] } });\n }\n create(value?: PartialMessage<Vertex>): Vertex {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.name = \"\";\n message.label = \"\";\n message.type = 0;\n message.metadata = \"\";\n message.configurator = false;\n message.variables = [];\n message.mtls = [];\n message.codeOauth2 = [];\n message.oauth2 = [];\n if (value !== undefined)\n reflectionMergePartial<Vertex>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Vertex): Vertex {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string name */ 1:\n message.name = reader.string();\n break;\n case /* string label */ 2:\n message.label = reader.string();\n break;\n case /* optional string description */ 3:\n message.description = reader.string();\n break;\n case /* optional string logo */ 4:\n message.logo = reader.string();\n break;\n case /* mochabugapis.adapt.plugins.v1.Vertex.VertexType type */ 5:\n message.type = reader.int32();\n break;\n case /* optional string config */ 6:\n message.config = reader.string();\n break;\n case /* string metadata */ 7:\n message.metadata = reader.string();\n break;\n case /* bool configurator */ 8:\n message.configurator = reader.bool();\n break;\n case /* repeated mochabugapis.adapt.plugins.v1.VariableService variables */ 9:\n message.variables.push(VariableService.internalBinaryRead(reader, reader.uint32(), options));\n break;\n case /* repeated mochabugapis.adapt.plugins.v1.MTLSService mtls */ 10:\n message.mtls.push(MTLSService.internalBinaryRead(reader, reader.uint32(), options));\n break;\n case /* repeated mochabugapis.adapt.plugins.v1.Oauth2CodeBinding code_oauth2 */ 11:\n message.codeOauth2.push(Oauth2CodeBinding.internalBinaryRead(reader, reader.uint32(), options));\n break;\n case /* repeated mochabugapis.adapt.plugins.v1.Oauth2Service oauth2 */ 12:\n message.oauth2.push(Oauth2Service.internalBinaryRead(reader, reader.uint32(), options));\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: Vertex, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* string name = 1; */\n if (message.name !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.name);\n /* string label = 2; */\n if (message.label !== \"\")\n writer.tag(2, WireType.LengthDelimited).string(message.label);\n /* optional string description = 3; */\n if (message.description !== undefined)\n writer.tag(3, WireType.LengthDelimited).string(message.description);\n /* optional string logo = 4; */\n if (message.logo !== undefined)\n writer.tag(4, WireType.LengthDelimited).string(message.logo);\n /* mochabugapis.adapt.plugins.v1.Vertex.VertexType type = 5; */\n if (message.type !== 0)\n writer.tag(5, WireType.Varint).int32(message.type);\n /* optional string config = 6; */\n if (message.config !== undefined)\n writer.tag(6, WireType.LengthDelimited).string(message.config);\n /* string metadata = 7; */\n if (message.metadata !== \"\")\n writer.tag(7, WireType.LengthDelimited).string(message.metadata);\n /* bool configurator = 8; */\n if (message.configurator !== false)\n writer.tag(8, WireType.Varint).bool(message.configurator);\n /* repeated mochabugapis.adapt.plugins.v1.VariableService variables = 9; */\n for (let i = 0; i < message.variables.length; i++)\n VariableService.internalBinaryWrite(message.variables[i], writer.tag(9, WireType.LengthDelimited).fork(), options).join();\n /* repeated mochabugapis.adapt.plugins.v1.MTLSService mtls = 10; */\n for (let i = 0; i < message.mtls.length; i++)\n MTLSService.internalBinaryWrite(message.mtls[i], writer.tag(10, WireType.LengthDelimited).fork(), options).join();\n /* repeated mochabugapis.adapt.plugins.v1.Oauth2CodeBinding code_oauth2 = 11; */\n for (let i = 0; i < message.codeOauth2.length; i++)\n Oauth2CodeBinding.internalBinaryWrite(message.codeOauth2[i], writer.tag(11, WireType.LengthDelimited).fork(), options).join();\n /* repeated mochabugapis.adapt.plugins.v1.Oauth2Service oauth2 = 12; */\n for (let i = 0; i < message.oauth2.length; i++)\n Oauth2Service.internalBinaryWrite(message.oauth2[i], writer.tag(12, WireType.LengthDelimited).fork(), options).join();\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message mochabugapis.adapt.plugins.v1.Vertex\n */\nexport const Vertex = new Vertex$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass MTLSService$Type extends MessageType<MTLSService> {\n constructor() {\n super(\"mochabugapis.adapt.plugins.v1.MTLSService\", [\n { no: 1, name: \"name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"1\", maxLen: \"100\", pattern: \"^[_$a-z][_$a-z0-9]*$\" } } } },\n { no: 2, name: \"label\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { ignore: \"IGNORE_EMPTY\", string: { minLen: \"1\", maxLen: \"100\" } } } },\n { no: 3, name: \"description\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { ignore: \"IGNORE_EMPTY\", string: { minLen: \"1\", maxLen: \"250\" } } } },\n { no: 4, name: \"optional\", kind: \"scalar\", opt: true, T: 8 /*ScalarType.BOOL*/ }\n ]);\n }\n create(value?: PartialMessage<MTLSService>): MTLSService {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.name = \"\";\n if (value !== undefined)\n reflectionMergePartial<MTLSService>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: MTLSService): MTLSService {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string name */ 1:\n message.name = reader.string();\n break;\n case /* optional string label */ 2:\n message.label = reader.string();\n break;\n case /* optional string description */ 3:\n message.description = reader.string();\n break;\n case /* optional bool optional */ 4:\n message.optional = reader.bool();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: MTLSService, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* string name = 1; */\n if (message.name !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.name);\n /* optional string label = 2; */\n if (message.label !== undefined)\n writer.tag(2, WireType.LengthDelimited).string(message.label);\n /* optional string description = 3; */\n if (message.description !== undefined)\n writer.tag(3, WireType.LengthDelimited).string(message.description);\n /* optional bool optional = 4; */\n if (message.optional !== undefined)\n writer.tag(4, WireType.Varint).bool(message.optional);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message mochabugapis.adapt.plugins.v1.MTLSService\n */\nexport const MTLSService = new MTLSService$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass VariableService$Type extends MessageType<VariableService> {\n constructor() {\n super(\"mochabugapis.adapt.plugins.v1.VariableService\", [\n { no: 1, name: \"name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"1\", maxLen: \"100\", pattern: \"^[_$a-z][_$a-z0-9]*$\" } } } },\n { no: 2, name: \"label\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"1\", maxLen: \"100\" } } } },\n { no: 3, name: \"description\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { ignore: \"IGNORE_EMPTY\", string: { minLen: \"1\", maxLen: \"250\" } } } },\n { no: 4, name: \"type\", kind: \"enum\", T: () => [\"mochabugapis.adapt.plugins.v1.VariableService.Type\", VariableService_Type, \"TYPE_\"], options: { \"buf.validate.field\": { enum: { notIn: [0] } } } },\n { no: 5, name: \"optional\", kind: \"scalar\", opt: true, T: 8 /*ScalarType.BOOL*/ }\n ]);\n }\n create(value?: PartialMessage<VariableService>): VariableService {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.name = \"\";\n message.type = 0;\n if (value !== undefined)\n reflectionMergePartial<VariableService>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: VariableService): VariableService {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string name */ 1:\n message.name = reader.string();\n break;\n case /* optional string label */ 2:\n message.label = reader.string();\n break;\n case /* optional string description */ 3:\n message.description = reader.string();\n break;\n case /* mochabugapis.adapt.plugins.v1.VariableService.Type type */ 4:\n message.type = reader.int32();\n break;\n case /* optional bool optional */ 5:\n message.optional = reader.bool();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: VariableService, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* string name = 1; */\n if (message.name !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.name);\n /* optional string label = 2; */\n if (message.label !== undefined)\n writer.tag(2, WireType.LengthDelimited).string(message.label);\n /* optional string description = 3; */\n if (message.description !== undefined)\n writer.tag(3, WireType.LengthDelimited).string(message.description);\n /* mochabugapis.adapt.plugins.v1.VariableService.Type type = 4; */\n if (message.type !== 0)\n writer.tag(4, WireType.Varint).int32(message.type);\n /* optional bool optional = 5; */\n if (message.optional !== undefined)\n writer.tag(5, WireType.Varint).bool(message.optional);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message mochabugapis.adapt.plugins.v1.VariableService\n */\nexport const VariableService = new VariableService$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass Oauth2Service$Type extends MessageType<Oauth2Service> {\n constructor() {\n super(\"mochabugapis.adapt.plugins.v1.Oauth2Service\", [\n { no: 1, name: \"name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"1\", maxLen: \"100\", pattern: \"^[_$a-z][_$a-z0-9]*$\" } } } },\n { no: 2, name: \"label\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { ignore: \"IGNORE_EMPTY\", string: { minLen: \"1\", maxLen: \"100\" } } } },\n { no: 3, name: \"description\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { ignore: \"IGNORE_EMPTY\", string: { minLen: \"1\", maxLen: \"250\" } } } },\n { no: 4, name: \"grant_type\", kind: \"enum\", T: () => [\"mochabugapis.adapt.plugins.v1.Oauth2GrantType\", Oauth2GrantType, \"OAUTH2_GRANT_TYPE_\"], options: { \"buf.validate.field\": { enum: { notIn: [0] } } } },\n { no: 5, name: \"scopes\", kind: \"scalar\", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { repeated: { minItems: \"1\", maxItems: \"500\", unique: true, items: { string: { minLen: \"1\", maxLen: \"100\" } } } } } },\n { no: 6, name: \"auth_method\", kind: \"enum\", opt: true, T: () => [\"mochabugapis.adapt.plugins.v1.Oauth2AuthType\", Oauth2AuthType, \"OAUTH2_AUTH_TYPE_\"], options: { \"buf.validate.field\": { ignore: \"IGNORE_EMPTY\", enum: { notIn: [0] } } } },\n { no: 7, name: \"alg\", kind: \"enum\", opt: true, T: () => [\"mochabugapis.adapt.plugins.v1.PrivateKeyAlg\", PrivateKeyAlg, \"PRIVATE_KEY_ALG_\"], options: { \"buf.validate.field\": { ignore: \"IGNORE_EMPTY\", enum: { notIn: [0] } } } },\n { no: 8, name: \"client_id\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { ignore: \"IGNORE_EMPTY\", string: { minLen: \"1\", maxLen: \"250\" } } } },\n { no: 9, name: \"token_endpoint\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"11\", maxLen: \"4096\", pattern: \"^https://[a-zA-Z0-9.-]+(?:\\\\.[a-zA-Z]{2,})(?:/.*)?$\" } } } },\n { no: 10, name: \"code\", kind: \"message\", T: () => Oauth2Code },\n { no: 11, name: \"optional\", kind: \"scalar\", opt: true, T: 8 /*ScalarType.BOOL*/ }\n ], { \"buf.validate.message\": { cel: [{ id: \"oauth2.auth_method\", message: \"The auth_method property must be set in case of grant_type OAUTH2_GRANT_TYPE_AUTHORIZATION_CODE or OAUTH2_GRANT_TYPE_CLIENT_CREDENTIALS\", expression: \"has(this.auth_method) == (this.grant_type == 1 || this.grant_type == 2)\" }, { id: \"oauth2.alg\", message: \"The alg property must be set in case of grant_type OAUTH2_GRANT_TYPE_JWT_BEARER, OAUTH2_GRANT_TYPE_SAML2_BEARER or auth_method OAUTH2_AUTH_TYPE_PRIVATE_KEY_JWT, OAUTH2_AUTH_TYPE_SAML2_BEARER\", expression: \"has(this.alg) == (this.grant_type == 3 || this.grant_type == 4 || this.auth_method == 3 || this.auth_method == 5)\" }, { id: \"oauth2.code\", message: \"The code property must be set in case of grant_type OAUTH2_GRANT_TYPE_AUTHORIZATION_CODE\", expression: \"has(this.code) == (this.grant_type == 1)\" }, { id: \"oauth2.optional\", message: \"The optional property cannot be set to true in case of grant_type OAUTH2_GRANT_TYPE_AUTHORIZATION_CODE\", expression: \"!has(this.optional) || this.grant_type != 1 || (!this.optional && this.grant_type == 1)\" }] } });\n }\n create(value?: PartialMessage<Oauth2Service>): Oauth2Service {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.name = \"\";\n message.grantType = 0;\n message.scopes = [];\n message.tokenEndpoint = \"\";\n if (value !== undefined)\n reflectionMergePartial<Oauth2Service>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Oauth2Service): Oauth2Service {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string name */ 1:\n message.name = reader.string();\n break;\n case /* optional string label */ 2:\n message.label = reader.string();\n break;\n case /* optional string description */ 3:\n message.description = reader.string();\n break;\n case /* mochabugapis.adapt.plugins.v1.Oauth2GrantType grant_type */ 4:\n message.grantType = reader.int32();\n break;\n case /* repeated string scopes */ 5:\n message.scopes.push(reader.string());\n break;\n case /* optional mochabugapis.adapt.plugins.v1.Oauth2AuthType auth_method */ 6:\n message.authMethod = reader.int32();\n break;\n case /* optional mochabugapis.adapt.plugins.v1.PrivateKeyAlg alg */ 7:\n message.alg = reader.int32();\n break;\n case /* optional string client_id */ 8:\n message.clientId = reader.string();\n break;\n case /* string token_endpoint */ 9:\n message.tokenEndpoint = reader.string();\n break;\n case /* optional mochabugapis.adapt.plugins.v1.Oauth2Code code */ 10:\n message.code = Oauth2Code.internalBinaryRead(reader, reader.uint32(), options, message.code);\n break;\n case /* optional bool optional */ 11:\n message.optional = reader.bool();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: Oauth2Service, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* string name = 1; */\n if (message.name !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.name);\n /* optional string label = 2; */\n if (message.label !== undefined)\n writer.tag(2, WireType.LengthDelimited).string(message.label);\n /* optional string description = 3; */\n if (message.description !== undefined)\n writer.tag(3, WireType.LengthDelimited).string(message.description);\n /* mochabugapis.adapt.plugins.v1.Oauth2GrantType grant_type = 4; */\n if (message.grantType !== 0)\n writer.tag(4, WireType.Varint).int32(message.grantType);\n /* repeated string scopes = 5; */\n for (let i = 0; i < message.scopes.length; i++)\n writer.tag(5, WireType.LengthDelimited).string(message.scopes[i]);\n /* optional mochabugapis.adapt.plugins.v1.Oauth2AuthType auth_method = 6; */\n if (message.authMethod !== undefined)\n writer.tag(6, WireType.Varint).int32(message.authMethod);\n /* optional mochabugapis.adapt.plugins.v1.PrivateKeyAlg alg = 7; */\n if (message.alg !== undefined)\n writer.tag(7, WireType.Varint).int32(message.alg);\n /* optional string client_id = 8; */\n if (message.clientId !== undefined)\n writer.tag(8, WireType.LengthDelimited).string(message.clientId);\n /* string token_endpoint = 9; */\n if (message.tokenEndpoint !== \"\")\n writer.tag(9, WireType.LengthDelimited).string(message.tokenEndpoint);\n /* optional mochabugapis.adapt.plugins.v1.Oauth2Code code = 10; */\n if (message.code)\n Oauth2Code.internalBinaryWrite(message.code, writer.tag(10, WireType.LengthDelimited).fork(), options).join();\n /* optional bool optional = 11; */\n if (message.optional !== undefined)\n writer.tag(11, WireType.Varint).bool(message.optional);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message mochabugapis.adapt.plugins.v1.Oauth2Service\n */\nexport const Oauth2Service = new Oauth2Service$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass Oauth2CodeBinding$Type extends MessageType<Oauth2CodeBinding> {\n constructor() {\n super(\"mochabugapis.adapt.plugins.v1.Oauth2CodeBinding\", [\n { no: 1, name: \"name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"1\", maxLen: \"100\", pattern: \"^[_$a-z][_$a-z0-9]*$\" } } } },\n { no: 2, name: \"optional\", kind: \"scalar\", opt: true, T: 8 /*ScalarType.BOOL*/ }\n ]);\n }\n create(value?: PartialMessage<Oauth2CodeBinding>): Oauth2CodeBinding {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.name = \"\";\n if (value !== undefined)\n reflectionMergePartial<Oauth2CodeBinding>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Oauth2CodeBinding): Oauth2CodeBinding {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string name */ 1:\n message.name = reader.string();\n break;\n case /* optional bool optional */ 2:\n message.optional = reader.bool();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: Oauth2CodeBinding, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* string name = 1; */\n if (message.name !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.name);\n /* optional bool optional = 2; */\n if (message.optional !== undefined)\n writer.tag(2, WireType.Varint).bool(message.optional);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message mochabugapis.adapt.plugins.v1.Oauth2CodeBinding\n */\nexport const Oauth2CodeBinding = new Oauth2CodeBinding$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass Oauth2Code$Type extends MessageType<Oauth2Code> {\n constructor() {\n super(\"mochabugapis.adapt.plugins.v1.Oauth2Code\", [\n { no: 1, name: \"auth_endpoint\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"11\", maxLen: \"4096\", pattern: \"^https://[a-zA-Z0-9.-]+(?:\\\\.[a-zA-Z]{2,})(?:/.*)?$\" } } } },\n { no: 2, name: \"issuer\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"1\", maxLen: \"4096\" } } } },\n { no: 3, name: \"jwks_uri\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"11\", maxLen: \"4096\", pattern: \"^https://[a-zA-Z0-9.-]+(?:\\\\.[a-zA-Z]{2,})(?:/.*)?$\" } } } },\n { no: 4, name: \"additional_params\", kind: \"map\", K: 9 /*ScalarType.STRING*/, V: { kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }, options: { \"buf.validate.field\": { map: { minPairs: \"0\", maxPairs: \"50\", keys: { string: { minLen: \"1\", maxLen: \"250\" } }, values: { string: { minLen: \"1\", maxLen: \"250\" } } } } } },\n { no: 5, name: \"use_pkce\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ }\n ]);\n }\n create(value?: PartialMessage<Oauth2Code>): Oauth2Code {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.authEndpoint = \"\";\n message.issuer = \"\";\n message.jwksUri = \"\";\n message.additionalParams = {};\n message.usePkce = false;\n if (value !== undefined)\n reflectionMergePartial<Oauth2Code>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Oauth2Code): Oauth2Code {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string auth_endpoint */ 1:\n message.authEndpoint = reader.string();\n break;\n case /* string issuer */ 2:\n message.issuer = reader.string();\n break;\n case /* string jwks_uri */ 3:\n message.jwksUri = reader.string();\n break;\n case /* map<string, string> additional_params */ 4:\n this.binaryReadMap4(message.additionalParams, reader, options);\n break;\n case /* bool use_pkce */ 5:\n message.usePkce = reader.bool();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n private binaryReadMap4(map: Oauth2Code[\"additionalParams\"], reader: IBinaryReader, options: BinaryReadOptions): void {\n let len = reader.uint32(), end = reader.pos + len, key: keyof Oauth2Code[\"additionalParams\"] | undefined, val: Oauth2Code[\"additionalParams\"][any] | undefined;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case 1:\n key = reader.string();\n break;\n case 2:\n val = reader.string();\n break;\n default: throw new globalThis.Error(\"unknown map entry field for field mochabugapis.adapt.plugins.v1.Oauth2Code.additional_params\");\n }\n }\n map[key ?? \"\"] = val ?? \"\";\n }\n internalBinaryWrite(message: Oauth2Code, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* string auth_endpoint = 1; */\n if (message.authEndpoint !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.authEndpoint);\n /* string issuer = 2; */\n if (message.issuer !== \"\")\n writer.tag(2, WireType.LengthDelimited).string(message.issuer);\n /* string jwks_uri = 3; */\n if (message.jwksUri !== \"\")\n writer.tag(3, WireType.LengthDelimited).string(message.jwksUri);\n /* map<string, string> additional_params = 4; */\n for (let k of globalThis.Object.keys(message.additionalParams))\n writer.tag(4, WireType.LengthDelimited).fork().tag(1, WireType.LengthDelimited).string(k).tag(2, WireType.LengthDelimited).string(message.additionalParams[k]).join();\n /* bool use_pkce = 5; */\n if (message.usePkce !== false)\n writer.tag(5, WireType.Varint).bool(message.usePkce);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message mochabugapis.adapt.plugins.v1.Oauth2Code\n */\nexport const Oauth2Code = new Oauth2Code$Type();\n/**\n * @generated ServiceType for protobuf service mochabugapis.adapt.plugins.v1.PluginService\n */\nexport const PluginService = new ServiceType(\"mochabugapis.adapt.plugins.v1.PluginService\", [\n { name: \"UploadPlugin\", clientStreaming: true, options: { \"google.api.http\": { post: \"/v1/plugins/upload\", body: \"*\" } }, I: UploadPluginRequest, O: UploadPluginResponse }\n], { \"google.api.default_host\": \"adapt.mochabugapis.com\", \"google.api.oauth_scopes\": \"https://www.mochabugapis.com/auth/adapt/plugins,https://www.mochabugapis.com/auth/adapt/plugins.upload\" });\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport fs from 'fs';\nimport { mkdirp } from 'mkdirp';\nimport path from 'path';\nimport { VertexConfigMetadata } from './genproto/mochabugapis/adapt/graph/vertex_config';\nimport { execSync } from 'child_process';\nimport {\n Vertex,\n Vertex_VertexType\n} from './genproto/mochabugapis/adapt/plugins/v1/plugins';\nimport { labelize, readAsset, writeFile } from './utils';\n\nfunction convertVertexType(type: string): Vertex_VertexType {\n switch (type) {\n case 'action':\n return Vertex_VertexType.ACTION;\n case 'cron-trigger':\n return Vertex_VertexType.CRON_TRIGGER;\n case 'external-trigger':\n return Vertex_VertexType.EXTERNAL_TRIGGER;\n case 'browser':\n return Vertex_VertexType.BROWSER;\n default:\n throw new Error('The node type is invalid');\n }\n}\n\nexport function addVertex(\n cwd: string,\n name: string,\n type: string,\n hasConfigurator: boolean,\n existingVertices: Vertex[],\n frontendLib?: 'none' | 'react' | undefined\n): Vertex {\n // Create a folder with the vertex name\n const folder = path.join(cwd, 'src', 'vertices', name);\n if (fs.existsSync(folder)) {\n throw new Error(`The folder for the new vertex: ${folder} already exists`);\n }\n mkdirp.sync(folder);\n const execFile = path.join(folder, 'executor.ts');\n\n const vertex: Vertex = {\n name,\n label: labelize(name),\n description: `The better description of what ${name} is doing, the better it is for both AI and humans`,\n type: convertVertexType(type),\n metadata: path.join('src', 'vertices', name, 'metadata.json'),\n configurator: hasConfigurator,\n mtls: [],\n codeOauth2: [],\n oauth2: [],\n variables: []\n };\n\n // Write the UI if specified\n if (frontendLib === 'react') {\n execSync('npm install react react-dom @types/react @types/react-dom', {\n cwd: cwd,\n stdio: 'inherit'\n });\n const uiPath = path.join(cwd, 'src/vertices', name, 'ui');\n if (hasConfigurator) {\n writeFile(\n path.join(uiPath, 'configurator.App.tsx'),\n readAsset('configurator.App.tsx')\n );\n writeFile(\n path.join(uiPath, 'configurator.main.tsx'),\n readAsset('configurator.main.tsx')\n );\n writeFile(\n path.join(uiPath, 'configurator.ssg.tsx'),\n readAsset('configurator.ssg.tsx')\n );\n }\n if (type === 'browser') {\n writeFile(\n path.join(uiPath, 'executor.App.tsx'),\n readAsset('executor.App.tsx')\n );\n writeFile(\n path.join(uiPath, 'executor.main.tsx'),\n readAsset('executor.main.tsx')\n );\n writeFile(\n path.join(uiPath, 'executor.ssg.tsx'),\n readAsset('executor.ssg.tsx')\n );\n }\n // If the build doesn't exists since before\n if (!fs.existsSync(path.join(cwd, 'build-client.js'))) {\n writeFile(\n path.join(cwd, 'build-client.js'),\n readAsset('build-client.js')\n );\n }\n }\n\n // Write the new task\n switch (vertex.type) {\n case Vertex_VertexType.ACTION:\n writeFile(execFile, readAsset('executor_action.ts'));\n break;\n case Vertex_VertexType.BROWSER:\n if (frontendLib === 'react') {\n writeFile(\n execFile,\n readAsset('executor_browser_react.tsx').replaceAll(\n '___VERTEX_NAME___',\n name\n )\n );\n } else {\n writeFile(execFile, readAsset('executor_browser_none.ts'));\n }\n break;\n case Vertex_VertexType.EXTERNAL_TRIGGER:\n writeFile(execFile, readAsset('executor_external_trigger.ts'));\n break;\n case Vertex_VertexType.CRON_TRIGGER:\n writeFile(execFile, readAsset('executor_cron_trigger.ts'));\n break;\n default:\n throw new Error('The vertex type is invalid');\n }\n\n // Write the export file for executors\n fs.writeFileSync(\n path.join(cwd, 'src', 'executors.ts'),\n generateExport(\n [name, ...existingVertices.map((v) => v.name)],\n 'ExecutorEnvironment'\n )\n );\n\n const vertexConfig: VertexConfigMetadata = {\n complete: true,\n receivers: [\n {\n name: 'input',\n description: 'Default input receiver',\n bindings: []\n }\n ],\n transmitters: [\n {\n name: 'output',\n description: 'Default output transmitter',\n signals: [],\n failure: false\n }\n ],\n procedures: [],\n streams: []\n };\n\n // Runs every 5 seconds\n if (vertex.type === Vertex_VertexType.CRON_TRIGGER) {\n vertexConfig.cronSchedule = '/5 * * * * *';\n }\n\n if (hasConfigurator) {\n if (frontendLib === 'react') {\n writeFile(\n path.join(folder, 'configurator.ts'),\n readAsset('configurator_react.tsx').replaceAll(\n '___VERTEX_NAME___',\n name\n )\n );\n } else {\n writeFile(\n path.join(folder, 'configurator.ts'),\n readAsset('configurator_none.ts')\n );\n }\n\n // If we have a config, make sure we don't say that the config is complete by default\n vertexConfig.complete = false;\n\n // Write the export file for configurators\n fs.writeFileSync(\n path.join(cwd, 'src', 'configurators.ts'),\n generateExport(\n [\n name,\n ...existingVertices.filter((v) => v.configurator).map((v) => v.name)\n ],\n 'ConfiguratorEnvironment'\n )\n );\n }\n\n // Write the config json file\n fs.writeFileSync(\n path.join(folder, 'metadata.json'),\n VertexConfigMetadata.toJsonString(vertexConfig, { prettySpaces: 2 })\n );\n\n return vertex;\n}\n\nfunction generateExport(\n vertices: string[],\n env: 'ExecutorEnvironment' | 'ConfiguratorEnvironment'\n): string {\n const imports = vertices\n .map(\n (v) =>\n `import ${v} from './vertices/${v}/${\n env === 'ExecutorEnvironment' ? 'executor' : 'configurator'\n }';`\n )\n .join('\\n');\n\n return `/**\n * ---------------------------------------------------------------------------\n * THIS FILE IS AUTOGENERATED - DO NOT EDIT MANUALLY\n * ---------------------------------------------------------------------------\n * \n * This file was generated by the tool @mochabug/adaptkit.\n * Any modifications to this file will be overwritten the next time the\n * tool runs. To customize functionality, please adjust the source files\n * or configuration that this tool uses as input.\n *\n * Tool: @mochabug/adaptkit\n * Generated on: ${new Date().toISOString()} \n * ---------------------------------------------------------------------------\n */\nimport { selectVertex } from '@mochabug/adapt-plugin-toolkit/router';\n${imports}\n\nexport default {\n async fetch(req: Request, env: ${env}, ctx: ExecutionContext): Promise<Response> {\n return await selectVertex(req, env, ctx, { ${vertices.join(', ')} });\n },\n};`;\n}\n", "// @generated by protobuf-ts 2.9.4 with parameter client_generic,force_server_none\n// @generated from protobuf file \"mochabugapis/adapt/graph/vertex_config.proto\" (package \"mochabugapis.adapt.graph\", syntax proto3)\n// tslint:disable\n//\n// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\nimport type { BinaryWriteOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryWriter } from \"@protobuf-ts/runtime\";\nimport { WireType } from \"@protobuf-ts/runtime\";\nimport type { BinaryReadOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryReader } from \"@protobuf-ts/runtime\";\nimport { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport type { PartialMessage } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\nimport { Exchange } from \"./exchange\";\nimport { Transmitter } from \"./transmitter\";\nimport { Receiver } from \"./receiver\";\n/**\n * VertexConfigMetadata represents the configuration for a vertex, detailing its inputs,\n * outputs, and processes (such as procedures and streams).\n *\n * @generated from protobuf message mochabugapis.adapt.graph.VertexConfigMetadata\n */\nexport interface VertexConfigMetadata {\n /**\n * Indicates if the vertex configuration is complete. Defaults to 'false'.\n *\n * @generated from protobuf field: bool complete = 1;\n */\n complete: boolean;\n /**\n * Input points for the vertex. Must contain between 1 and 50 receivers,\n * each with a unique name.\n *\n * @generated from protobuf field: repeated mochabugapis.adapt.graph.Receiver receivers = 2;\n */\n receivers: Receiver[];\n /**\n * Output points for the vertex. Can contain up to 50 transmitters,\n * each with a unique name.\n *\n * @generated from protobuf field: repeated mochabugapis.adapt.graph.Transmitter transmitters = 3;\n */\n transmitters: Transmitter[];\n /**\n * Processes initiated by transmitters and responded to by receivers.\n * Limited to 10 unique procedures.\n *\n * @generated from protobuf field: repeated mochabugapis.adapt.graph.Exchange procedures = 4;\n */\n procedures: Exchange[];\n /**\n * Processes initiated by receivers, limited to 10 unique streams.\n *\n * @generated from protobuf field: repeated mochabugapis.adapt.graph.Exchange streams = 5;\n */\n streams: Exchange[];\n /**\n * A unix cron expression to determine when the task should run.\n *\n * @generated from protobuf field: optional string cron_schedule = 6;\n */\n cronSchedule?: string;\n}\n// @generated message type with reflection information, may provide speed optimized methods\nclass VertexConfigMetadata$Type extends MessageType<VertexConfigMetadata> {\n constructor() {\n super(\"mochabugapis.adapt.graph.VertexConfigMetadata\", [\n { no: 1, name: \"complete\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ },\n { no: 2, name: \"receivers\", kind: \"message\", repeat: 1 /*RepeatType.PACKED*/, T: () => Receiver, options: { \"buf.validate.field\": { cel: [{ id: \"receivers_unique_names\", message: \"Each receiver must have a unique name.\", expression: \"this.map(receiver, receiver.name).unique()\" }], repeated: { minItems: \"1\", maxItems: \"50\" } } } },\n { no: 3, name: \"transmitters\", kind: \"message\", repeat: 1 /*RepeatType.PACKED*/, T: () => Transmitter, options: { \"buf.validate.field\": { cel: [{ id: \"transmitters_unique_names\", message: \"Each transmitter must have a unique name.\", expression: \"this.map(transmitter, transmitter.name).unique()\" }], repeated: { maxItems: \"50\" } } } },\n { no: 4, name: \"procedures\", kind: \"message\", repeat: 1 /*RepeatType.PACKED*/, T: () => Exchange, options: { \"buf.validate.field\": { cel: [{ id: \"procedures_unique_names\", message: \"Each procedure must have a unique name.\", expression: \"this.map(procedure, procedure.name).unique()\" }], repeated: { maxItems: \"10\" } } } },\n { no: 5, name: \"streams\", kind: \"message\", repeat: 1 /*RepeatType.PACKED*/, T: () => Exchange, options: { \"buf.validate.field\": { cel: [{ id: \"streams_unique_names\", message: \"Each stream must have a unique name.\", expression: \"this.map(stream, stream.name).unique()\" }], repeated: { maxItems: \"10\" } } } },\n { no: 6, name: \"cron_schedule\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { ignore: \"IGNORE_DEFAULT\", string: { minLen: \"1\", maxLen: \"100\" } } } }\n ]);\n }\n create(value?: PartialMessage<VertexConfigMetadata>): VertexConfigMetadata {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.complete = false;\n message.receivers = [];\n message.transmitters = [];\n message.procedures = [];\n message.streams = [];\n if (value !== undefined)\n reflectionMergePartial<VertexConfigMetadata>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: VertexConfigMetadata): VertexConfigMetadata {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* bool complete */ 1:\n message.complete = reader.bool();\n break;\n case /* repeated mochabugapis.adapt.graph.Receiver receivers */ 2:\n message.receivers.push(Receiver.internalBinaryRead(reader, reader.uint32(), options));\n break;\n case /* repeated mochabugapis.adapt.graph.Transmitter transmitters */ 3:\n message.transmitters.push(Transmitter.internalBinaryRead(reader, reader.uint32(), options));\n break;\n case /* repeated mochabugapis.adapt.graph.Exchange procedures */ 4:\n message.procedures.push(Exchange.internalBinaryRead(reader, reader.uint32(), options));\n break;\n case /* repeated mochabugapis.adapt.graph.Exchange streams */ 5:\n message.streams.push(Exchange.internalBinaryRead(reader, reader.uint32(), options));\n break;\n case /* optional string cron_schedule */ 6:\n message.cronSchedule = reader.string();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: VertexConfigMetadata, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* bool complete = 1; */\n if (message.complete !== false)\n writer.tag(1, WireType.Varint).bool(message.complete);\n /* repeated mochabugapis.adapt.graph.Receiver receivers = 2; */\n for (let i = 0; i < message.receivers.length; i++)\n Receiver.internalBinaryWrite(message.receivers[i], writer.tag(2, WireType.LengthDelimited).fork(), options).join();\n /* repeated mochabugapis.adapt.graph.Transmitter transmitters = 3; */\n for (let i = 0; i < message.transmitters.length; i++)\n Transmitter.internalBinaryWrite(message.transmitters[i], writer.tag(3, WireType.LengthDelimited).fork(), options).join();\n /* repeated mochabugapis.adapt.graph.Exchange procedures = 4; */\n for (let i = 0; i < message.procedures.length; i++)\n Exchange.internalBinaryWrite(message.procedures[i], writer.tag(4, WireType.LengthDelimited).fork(), options).join();\n /* repeated mochabugapis.adapt.graph.Exchange streams = 5; */\n for (let i = 0; i < message.streams.length; i++)\n Exchange.internalBinaryWrite(message.streams[i], writer.tag(5, WireType.LengthDelimited).fork(), options).join();\n /* optional string cron_schedule = 6; */\n if (message.cronSchedule !== undefined)\n writer.tag(6, WireType.LengthDelimited).string(message.cronSchedule);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message mochabugapis.adapt.graph.VertexConfigMetadata\n */\nexport const VertexConfigMetadata = new VertexConfigMetadata$Type();\n", "// @generated by protobuf-ts 2.9.4 with parameter client_generic,force_server_none\n// @generated from protobuf file \"mochabugapis/adapt/graph/exchange.proto\" (package \"mochabugapis.adapt.graph\", syntax proto3)\n// tslint:disable\n//\n// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\nimport type { BinaryWriteOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryWriter } from \"@protobuf-ts/runtime\";\nimport { WireType } from \"@protobuf-ts/runtime\";\nimport type { BinaryReadOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryReader } from \"@protobuf-ts/runtime\";\nimport { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport type { PartialMessage } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\nimport { Transceiver } from \"./transceiver\";\n/**\n * Exchange represents a communication setup involving both transmitters and receivers.\n *\n * @generated from protobuf message mochabugapis.adapt.graph.Exchange\n */\nexport interface Exchange {\n /**\n * Identifier for the exchange, following the ECMA naming pattern, limited to 50 characters.\n *\n * @generated from protobuf field: string name = 1;\n */\n name: string;\n /**\n * Optional descriptive text for the exchange, up to 250 characters.\n *\n * @generated from protobuf field: optional string description = 2;\n */\n description?: string;\n /**\n * Outputs involved in the exchange, limited to 10 unique transmitters.\n *\n * @generated from protobuf field: repeated mochabugapis.adapt.graph.Transceiver transmitters = 3;\n */\n transmitters: Transceiver[];\n /**\n * Inputs involved in the exchange, requiring between 1 and 10 unique receivers.\n *\n * @generated from protobuf field: repeated mochabugapis.adapt.graph.Transceiver receivers = 4;\n */\n receivers: Transceiver[];\n}\n// @generated message type with reflection information, may provide speed optimized methods\nclass Exchange$Type extends MessageType<Exchange> {\n constructor() {\n super(\"mochabugapis.adapt.graph.Exchange\", [\n { no: 1, name: \"name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"1\", maxLen: \"50\", pattern: \"^[_$a-z][_$a-z0-9]*$\" } } } },\n { no: 2, name: \"description\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { maxLen: \"250\" } } } },\n { no: 3, name: \"transmitters\", kind: \"message\", repeat: 1 /*RepeatType.PACKED*/, T: () => Transceiver, options: { \"buf.validate.field\": { cel: [{ id: \"transmitters_unique_names\", message: \"Each transmitter must have a unique name.\", expression: \"this.map(transmitter, transmitter.name).unique()\" }], repeated: { maxItems: \"10\" } } } },\n { no: 4, name: \"receivers\", kind: \"message\", repeat: 1 /*RepeatType.PACKED*/, T: () => Transceiver, options: { \"buf.validate.field\": { cel: [{ id: \"receivers_unique_names\", message: \"Each receiver must have a unique name.\", expression: \"this.map(receiver, receiver.name).unique()\" }], repeated: { minItems: \"1\", maxItems: \"10\" } } } }\n ]);\n }\n create(value?: PartialMessage<Exchange>): Exchange {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.name = \"\";\n message.transmitters = [];\n message.receivers = [];\n if (value !== undefined)\n reflectionMergePartial<Exchange>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Exchange): Exchange {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string name */ 1:\n message.name = reader.string();\n break;\n case /* optional string description */ 2:\n message.description = reader.string();\n break;\n case /* repeated mochabugapis.adapt.graph.Transceiver transmitters */ 3:\n message.transmitters.push(Transceiver.internalBinaryRead(reader, reader.uint32(), options));\n break;\n case /* repeated mochabugapis.adapt.graph.Transceiver receivers */ 4:\n message.receivers.push(Transceiver.internalBinaryRead(reader, reader.uint32(), options));\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: Exchange, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* string name = 1; */\n if (message.name !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.name);\n /* optional string description = 2; */\n if (message.description !== undefined)\n writer.tag(2, WireType.LengthDelimited).string(message.description);\n /* repeated mochabugapis.adapt.graph.Transceiver transmitters = 3; */\n for (let i = 0; i < message.transmitters.length; i++)\n Transceiver.internalBinaryWrite(message.transmitters[i], writer.tag(3, WireType.LengthDelimited).fork(), options).join();\n /* repeated mochabugapis.adapt.graph.Transceiver receivers = 4; */\n for (let i = 0; i < message.receivers.length; i++)\n Transceiver.internalBinaryWrite(message.receivers[i], writer.tag(4, WireType.LengthDelimited).fork(), options).join();\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message mochabugapis.adapt.graph.Exchange\n */\nexport const Exchange = new Exchange$Type();\n", "// @generated by protobuf-ts 2.9.4 with parameter client_generic,force_server_none\n// @generated from protobuf file \"mochabugapis/adapt/graph/transceiver.proto\" (package \"mochabugapis.adapt.graph\", syntax proto3)\n// tslint:disable\n//\n// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\nimport type { BinaryWriteOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryWriter } from \"@protobuf-ts/runtime\";\nimport { WireType } from \"@protobuf-ts/runtime\";\nimport type { BinaryReadOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryReader } from \"@protobuf-ts/runtime\";\nimport { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport type { PartialMessage } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\nimport { SignalDescriptor } from \"./signal_descriptor\";\n/**\n * Transceiver is a dual-purpose entity capable of both emitting and receiving signals.\n *\n * @generated from protobuf message mochabugapis.adapt.graph.Transceiver\n */\nexport interface Transceiver {\n /**\n * Identifier for the transceiver, following the ECMA naming pattern, limited to 50 characters.\n *\n * @generated from protobuf field: string name = 1;\n */\n name: string;\n /**\n * Optional descriptive text for the transceiver's purpose, up to 250 characters.\n *\n * @generated from protobuf field: optional string description = 2;\n */\n description?: string;\n /**\n * List of signals the transceiver handles. Can contain up to 512 unique signals.\n *\n * @generated from protobuf field: repeated mochabugapis.adapt.graph.SignalDescriptor signals = 3;\n */\n signals: SignalDescriptor[];\n}\n// @generated message type with reflection information, may provide speed optimized methods\nclass Transceiver$Type extends MessageType<Transceiver> {\n constructor() {\n super(\"mochabugapis.adapt.graph.Transceiver\", [\n { no: 1, name: \"name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"1\", maxLen: \"50\", pattern: \"^[_$a-z][_$a-z0-9]*$\" } } } },\n { no: 2, name: \"description\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { maxLen: \"250\" } } } },\n { no: 3, name: \"signals\", kind: \"message\", repeat: 1 /*RepeatType.PACKED*/, T: () => SignalDescriptor, options: { \"buf.validate.field\": { cel: [{ id: \"signals_unique_names\", message: \"Each signal must have a unique name.\", expression: \"this.map(signal, signal.name).unique()\" }], repeated: { maxItems: \"512\" } } } }\n ]);\n }\n create(value?: PartialMessage<Transceiver>): Transceiver {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.name = \"\";\n message.signals = [];\n if (value !== undefined)\n reflectionMergePartial<Transceiver>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Transceiver): Transceiver {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string name */ 1:\n message.name = reader.string();\n break;\n case /* optional string description */ 2:\n message.description = reader.string();\n break;\n case /* repeated mochabugapis.adapt.graph.SignalDescriptor signals */ 3:\n message.signals.push(SignalDescriptor.internalBinaryRead(reader, reader.uint32(), options));\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: Transceiver, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* string name = 1; */\n if (message.name !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.name);\n /* optional string description = 2; */\n if (message.description !== undefined)\n writer.tag(2, WireType.LengthDelimited).string(message.description);\n /* repeated mochabugapis.adapt.graph.SignalDescriptor signals = 3; */\n for (let i = 0; i < message.signals.length; i++)\n SignalDescriptor.internalBinaryWrite(message.signals[i], writer.tag(3, WireType.LengthDelimited).fork(), options).join();\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message mochabugapis.adapt.graph.Transceiver\n */\nexport const Transceiver = new Transceiver$Type();\n", "// @generated by protobuf-ts 2.9.4 with parameter client_generic,force_server_none\n// @generated from protobuf file \"mochabugapis/adapt/graph/signal_descriptor.proto\" (package \"mochabugapis.adapt.graph\", syntax proto3)\n// tslint:disable\n//\n// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\nimport type { BinaryWriteOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryWriter } from \"@protobuf-ts/runtime\";\nimport { WireType } from \"@protobuf-ts/runtime\";\nimport type { BinaryReadOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryReader } from \"@protobuf-ts/runtime\";\nimport { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport type { PartialMessage } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\nimport { JTDSchema } from \"./jtd_schema\";\n/**\n * SignalDescriptor defines the properties of a signal without containing the actual signal data.\n *\n * @generated from protobuf message mochabugapis.adapt.graph.SignalDescriptor\n */\nexport interface SignalDescriptor {\n /**\n * Identifier for the signal, following the ECMA naming pattern, limited to 50 characters.\n *\n * @generated from protobuf field: string name = 1;\n */\n name: string;\n /**\n * Optional label for the signal, up to 50 characters.\n *\n * @generated from protobuf field: optional string label = 5;\n */\n label?: string;\n /**\n * Optional descriptive text for the signal, up to 250 characters.\n *\n * @generated from protobuf field: optional string description = 2;\n */\n description?: string;\n /**\n * Schema definition for the signal, required and must follow the JTD definition found here: https://www.rfc-editor.org/rfc/rfc8927.\n *\n * @generated from protobuf field: mochabugapis.adapt.graph.JTDSchema schema = 3;\n */\n schema?: JTDSchema;\n /**\n * Flag indicating if the signal is optional.\n *\n * @generated from protobuf field: optional bool optional = 4;\n */\n optional?: boolean;\n}\n// @generated message type with reflection information, may provide speed optimized methods\nclass SignalDescriptor$Type extends MessageType<SignalDescriptor> {\n constructor() {\n super(\"mochabugapis.adapt.graph.SignalDescriptor\", [\n { no: 1, name: \"name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"1\", maxLen: \"50\", pattern: \"^[_$a-z][_$a-z0-9]*$\" } } } },\n { no: 5, name: \"label\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { maxLen: \"50\" } } } },\n { no: 2, name: \"description\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { maxLen: \"250\" } } } },\n { no: 3, name: \"schema\", kind: \"message\", T: () => JTDSchema, options: { \"buf.validate.field\": { required: true } } },\n { no: 4, name: \"optional\", kind: \"scalar\", opt: true, T: 8 /*ScalarType.BOOL*/ }\n ]);\n }\n create(value?: PartialMessage<SignalDescriptor>): SignalDescriptor {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.name = \"\";\n if (value !== undefined)\n reflectionMergePartial<SignalDescriptor>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: SignalDescriptor): SignalDescriptor {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string name */ 1:\n message.name = reader.string();\n break;\n case /* optional string label */ 5:\n message.label = reader.string();\n break;\n case /* optional string description */ 2:\n message.description = reader.string();\n break;\n case /* mochabugapis.adapt.graph.JTDSchema schema */ 3:\n message.schema = JTDSchema.internalBinaryRead(reader, reader.uint32(), options, message.schema);\n break;\n case /* optional bool optional */ 4:\n message.optional = reader.bool();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: SignalDescriptor, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* string name = 1; */\n if (message.name !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.name);\n /* optional string label = 5; */\n if (message.label !== undefined)\n writer.tag(5, WireType.LengthDelimited).string(message.label);\n /* optional string description = 2; */\n if (message.description !== undefined)\n writer.tag(2, WireType.LengthDelimited).string(message.description);\n /* mochabugapis.adapt.graph.JTDSchema schema = 3; */\n if (message.schema)\n JTDSchema.internalBinaryWrite(message.schema, writer.tag(3, WireType.LengthDelimited).fork(), options).join();\n /* optional bool optional = 4; */\n if (message.optional !== undefined)\n writer.tag(4, WireType.Varint).bool(message.optional);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message mochabugapis.adapt.graph.SignalDescriptor\n */\nexport const SignalDescriptor = new SignalDescriptor$Type();\n", "// @generated by protobuf-ts 2.9.4 with parameter client_generic,force_server_none\n// @generated from protobuf file \"mochabugapis/adapt/graph/jtd_schema.proto\" (package \"mochabugapis.adapt.graph\", syntax proto3)\n// tslint:disable\n//\n// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\nimport type { BinaryWriteOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryWriter } from \"@protobuf-ts/runtime\";\nimport { WireType } from \"@protobuf-ts/runtime\";\nimport type { BinaryReadOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryReader } from \"@protobuf-ts/runtime\";\nimport { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport type { PartialMessage } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\nimport { Struct } from \"../../../google/protobuf/struct\";\n/**\n * Schema represents a JSON Typedef Schema.\n *\n * @generated from protobuf message mochabugapis.adapt.graph.JTDSchema\n */\nexport interface JTDSchema {\n /**\n * The definitions keyword MUST be an object where each value is a schema.\n * This object defines a collection of schema definitions that can be referenced via the ref keyword.\n *\n * @generated from protobuf field: map<string, mochabugapis.adapt.graph.JTDSchema> definitions = 1;\n */\n definitions: {\n [key: string]: JTDSchema;\n };\n /**\n * The metadata keyword MUST be an object.\n * This object is ignored during validation and can store custom information about the schema.\n *\n * @generated from protobuf field: optional google.protobuf.Struct metadata = 2;\n */\n metadata?: Struct;\n /**\n * The nullable keyword MUST be a boolean.\n * If true, the schema matches the value null as well as any value matched by the rest of the schema.\n *\n * @generated from protobuf field: optional bool nullable = 3;\n */\n nullable?: boolean;\n /**\n * The ref keyword MUST be a string.\n * It is a reference to a schema defined in the definitions object.\n *\n * @generated from protobuf field: optional string ref = 4;\n */\n ref?: string;\n /**\n * The type keyword MUST be one of the predefined strings specifying the type of the value.\n * Valid values are: \"boolean\", \"float32\", \"float64\", \"int8\", \"uint8\", \"int16\", \"uint16\", \"int32\", \"uint32\", \"string\", \"timestamp\".\n *\n * @generated from protobuf field: optional string type = 5;\n */\n type?: string;\n /**\n * The enum keyword MUST be a non-empty array of strings.\n * The schema matches any value that is equal to one of the elements in the array.\n *\n * @generated from protobuf field: repeated string enum = 6;\n */\n enum: string[];\n /**\n * The elements keyword MUST be a schema.\n * It is used to validate elements in an array.\n *\n * @generated from protobuf field: optional mochabugapis.adapt.graph.JTDSchema elements = 7;\n */\n elements?: JTDSchema;\n /**\n * The properties keyword MUST be an object where each value is a schema.\n * Each key is a required property that must match the corresponding schema.\n *\n * @generated from protobuf field: map<string, mochabugapis.adapt.graph.JTDSchema> properties = 8;\n */\n properties: {\n [key: string]: JTDSchema;\n };\n /**\n * The optional_properties keyword MUST be an object where each value is a schema.\n * Each key is an optional property that, if present, must match the corresponding schema.\n *\n * @generated from protobuf field: map<string, mochabugapis.adapt.graph.JTDSchema> optional_properties = 9;\n */\n optionalProperties: {\n [key: string]: JTDSchema;\n };\n /**\n * The additional_properties keyword MUST be a boolean.\n * If true, the object may have properties other than those specified in properties and optionalProperties.\n *\n * @generated from protobuf field: optional bool additional_properties = 10;\n */\n additionalProperties?: boolean;\n /**\n * The values keyword MUST be a schema.\n * It is used to validate the values in an object.\n *\n * @generated from protobuf field: optional mochabugapis.adapt.graph.JTDSchema values = 11;\n */\n values?: JTDSchema;\n /**\n * The discriminator keyword MUST be a string.\n * It is used with mapping to represent tagged unions.\n *\n * @generated from protobuf field: optional string discriminator = 12;\n */\n discriminator?: string;\n /**\n * The mapping keyword MUST be an object where each value is a schema.\n * Used with discriminator for tagged unions, mapping discriminator values to schemas.\n *\n * @generated from protobuf field: map<string, mochabugapis.adapt.graph.JTDSchema> mapping = 13;\n */\n mapping: {\n [key: string]: JTDSchema;\n };\n}\n// @generated message type with reflection information, may provide speed optimized methods\nclass JTDSchema$Type extends MessageType<JTDSchema> {\n constructor() {\n super(\"mochabugapis.adapt.graph.JTDSchema\", [\n { no: 1, name: \"definitions\", kind: \"map\", K: 9 /*ScalarType.STRING*/, V: { kind: \"message\", T: () => JTDSchema } },\n { no: 2, name: \"metadata\", kind: \"message\", T: () => Struct },\n { no: 3, name: \"nullable\", kind: \"scalar\", opt: true, T: 8 /*ScalarType.BOOL*/ },\n { no: 4, name: \"ref\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/ },\n { no: 5, name: \"type\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/ },\n { no: 6, name: \"enum\", kind: \"scalar\", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ },\n { no: 7, name: \"elements\", kind: \"message\", T: () => JTDSchema },\n { no: 8, name: \"properties\", kind: \"map\", K: 9 /*ScalarType.STRING*/, V: { kind: \"message\", T: () => JTDSchema } },\n { no: 9, name: \"optional_properties\", kind: \"map\", K: 9 /*ScalarType.STRING*/, V: { kind: \"message\", T: () => JTDSchema } },\n { no: 10, name: \"additional_properties\", kind: \"scalar\", opt: true, T: 8 /*ScalarType.BOOL*/ },\n { no: 11, name: \"values\", kind: \"message\", T: () => JTDSchema },\n { no: 12, name: \"discriminator\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/ },\n { no: 13, name: \"mapping\", kind: \"map\", K: 9 /*ScalarType.STRING*/, V: { kind: \"message\", T: () => JTDSchema } }\n ]);\n }\n create(value?: PartialMessage<JTDSchema>): JTDSchema {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.definitions = {};\n message.enum = [];\n message.properties = {};\n message.optionalProperties = {};\n message.mapping = {};\n if (value !== undefined)\n reflectionMergePartial<JTDSchema>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: JTDSchema): JTDSchema {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* map<string, mochabugapis.adapt.graph.JTDSchema> definitions */ 1:\n this.binaryReadMap1(message.definitions, reader, options);\n break;\n case /* optional google.protobuf.Struct metadata */ 2:\n message.metadata = Struct.internalBinaryRead(reader, reader.uint32(), options, message.metadata);\n break;\n case /* optional bool nullable */ 3:\n message.nullable = reader.bool();\n break;\n case /* optional string ref */ 4:\n message.ref = reader.string();\n break;\n case /* optional string type */ 5:\n message.type = reader.string();\n break;\n case /* repeated string enum */ 6:\n message.enum.push(reader.string());\n break;\n case /* optional mochabugapis.adapt.graph.JTDSchema elements */ 7:\n message.elements = JTDSchema.internalBinaryRead(reader, reader.uint32(), options, message.elements);\n break;\n case /* map<string, mochabugapis.adapt.graph.JTDSchema> properties */ 8:\n this.binaryReadMap8(message.properties, reader, options);\n break;\n case /* map<string, mochabugapis.adapt.graph.JTDSchema> optional_properties */ 9:\n this.binaryReadMap9(message.optionalProperties, reader, options);\n break;\n case /* optional bool additional_properties */ 10:\n message.additionalProperties = reader.bool();\n break;\n case /* optional mochabugapis.adapt.graph.JTDSchema values */ 11:\n message.values = JTDSchema.internalBinaryRead(reader, reader.uint32(), options, message.values);\n break;\n case /* optional string discriminator */ 12:\n message.discriminator = reader.string();\n break;\n case /* map<string, mochabugapis.adapt.graph.JTDSchema> mapping */ 13:\n this.binaryReadMap13(message.mapping, reader, options);\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n private binaryReadMap1(map: JTDSchema[\"definitions\"], reader: IBinaryReader, options: BinaryReadOptions): void {\n let len = reader.uint32(), end = reader.pos + len, key: keyof JTDSchema[\"definitions\"] | undefined, val: JTDSchema[\"definitions\"][any] | undefined;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case 1:\n key = reader.string();\n break;\n case 2:\n val = JTDSchema.internalBinaryRead(reader, reader.uint32(), options);\n break;\n default: throw new globalThis.Error(\"unknown map entry field for field mochabugapis.adapt.graph.JTDSchema.definitions\");\n }\n }\n map[key ?? \"\"] = val ?? JTDSchema.create();\n }\n private binaryReadMap8(map: JTDSchema[\"properties\"], reader: IBinaryReader, options: BinaryReadOptions): void {\n let len = reader.uint32(), end = reader.pos + len, key: keyof JTDSchema[\"properties\"] | undefined, val: JTDSchema[\"properties\"][any] | undefined;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case 1:\n key = reader.string();\n break;\n case 2:\n val = JTDSchema.internalBinaryRead(reader, reader.uint32(), options);\n break;\n default: throw new globalThis.Error(\"unknown map entry field for field mochabugapis.adapt.graph.JTDSchema.properties\");\n }\n }\n map[key ?? \"\"] = val ?? JTDSchema.create();\n }\n private binaryReadMap9(map: JTDSchema[\"optionalProperties\"], reader: IBinaryReader, options: BinaryReadOptions): void {\n let len = reader.uint32(), end = reader.pos + len, key: keyof JTDSchema[\"optionalProperties\"] | undefined, val: JTDSchema[\"optionalProperties\"][any] | undefined;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case 1:\n key = reader.string();\n break;\n case 2:\n val = JTDSchema.internalBinaryRead(reader, reader.uint32(), options);\n break;\n default: throw new globalThis.Error(\"unknown map entry field for field mochabugapis.adapt.graph.JTDSchema.optional_properties\");\n }\n }\n map[key ?? \"\"] = val ?? JTDSchema.create();\n }\n private binaryReadMap13(map: JTDSchema[\"mapping\"], reader: IBinaryReader, options: BinaryReadOptions): void {\n let len = reader.uint32(), end = reader.pos + len, key: keyof JTDSchema[\"mapping\"] | undefined, val: JTDSchema[\"mapping\"][any] | undefined;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case 1:\n key = reader.string();\n break;\n case 2:\n val = JTDSchema.internalBinaryRead(reader, reader.uint32(), options);\n break;\n default: throw new globalThis.Error(\"unknown map entry field for field mochabugapis.adapt.graph.JTDSchema.mapping\");\n }\n }\n map[key ?? \"\"] = val ?? JTDSchema.create();\n }\n internalBinaryWrite(message: JTDSchema, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* map<string, mochabugapis.adapt.graph.JTDSchema> definitions = 1; */\n for (let k of globalThis.Object.keys(message.definitions)) {\n writer.tag(1, WireType.LengthDelimited).fork().tag(1, WireType.LengthDelimited).string(k);\n writer.tag(2, WireType.LengthDelimited).fork();\n JTDSchema.internalBinaryWrite(message.definitions[k], writer, options);\n writer.join().join();\n }\n /* optional google.protobuf.Struct metadata = 2; */\n if (message.metadata)\n Struct.internalBinaryWrite(message.metadata, writer.tag(2, WireType.LengthDelimited).fork(), options).join();\n /* optional bool nullable = 3; */\n if (message.nullable !== undefined)\n writer.tag(3, WireType.Varint).bool(message.nullable);\n /* optional string ref = 4; */\n if (message.ref !== undefined)\n writer.tag(4, WireType.LengthDelimited).string(message.ref);\n /* optional string type = 5; */\n if (message.type !== undefined)\n writer.tag(5, WireType.LengthDelimited).string(message.type);\n /* repeated string enum = 6; */\n for (let i = 0; i < message.enum.length; i++)\n writer.tag(6, WireType.LengthDelimited).string(message.enum[i]);\n /* optional mochabugapis.adapt.graph.JTDSchema elements = 7; */\n if (message.elements)\n JTDSchema.internalBinaryWrite(message.elements, writer.tag(7, WireType.LengthDelimited).fork(), options).join();\n /* map<string, mochabugapis.adapt.graph.JTDSchema> properties = 8; */\n for (let k of globalThis.Object.keys(message.properties)) {\n writer.tag(8, WireType.LengthDelimited).fork().tag(1, WireType.LengthDelimited).string(k);\n writer.tag(2, WireType.LengthDelimited).fork();\n JTDSchema.internalBinaryWrite(message.properties[k], writer, options);\n writer.join().join();\n }\n /* map<string, mochabugapis.adapt.graph.JTDSchema> optional_properties = 9; */\n for (let k of globalThis.Object.keys(message.optionalProperties)) {\n writer.tag(9, WireType.LengthDelimited).fork().tag(1, WireType.LengthDelimited).string(k);\n writer.tag(2, WireType.LengthDelimited).fork();\n JTDSchema.internalBinaryWrite(message.optionalProperties[k], writer, options);\n writer.join().join();\n }\n /* optional bool additional_properties = 10; */\n if (message.additionalProperties !== undefined)\n writer.tag(10, WireType.Varint).bool(message.additionalProperties);\n /* optional mochabugapis.adapt.graph.JTDSchema values = 11; */\n if (message.values)\n JTDSchema.internalBinaryWrite(message.values, writer.tag(11, WireType.LengthDelimited).fork(), options).join();\n /* optional string discriminator = 12; */\n if (message.discriminator !== undefined)\n writer.tag(12, WireType.LengthDelimited).string(message.discriminator);\n /* map<string, mochabugapis.adapt.graph.JTDSchema> mapping = 13; */\n for (let k of globalThis.Object.keys(message.mapping)) {\n writer.tag(13, WireType.LengthDelimited).fork().tag(1, WireType.LengthDelimited).string(k);\n writer.tag(2, WireType.LengthDelimited).fork();\n JTDSchema.internalBinaryWrite(message.mapping[k], writer, options);\n writer.join().join();\n }\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message mochabugapis.adapt.graph.JTDSchema\n */\nexport const JTDSchema = new JTDSchema$Type();\n", "// @generated by protobuf-ts 2.9.4 with parameter client_generic,force_server_none\n// @generated from protobuf file \"google/protobuf/struct.proto\" (package \"google.protobuf\", syntax proto3)\n// tslint:disable\n//\n// Protocol Buffers - Google's data interchange format\n// Copyright 2008 Google Inc. All rights reserved.\n// https://developers.google.com/protocol-buffers/\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n// * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\nimport type { BinaryWriteOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryWriter } from \"@protobuf-ts/runtime\";\nimport { WireType } from \"@protobuf-ts/runtime\";\nimport type { BinaryReadOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryReader } from \"@protobuf-ts/runtime\";\nimport { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport type { PartialMessage } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { isJsonObject } from \"@protobuf-ts/runtime\";\nimport { typeofJsonValue } from \"@protobuf-ts/runtime\";\nimport type { JsonValue } from \"@protobuf-ts/runtime\";\nimport type { JsonReadOptions } from \"@protobuf-ts/runtime\";\nimport type { JsonWriteOptions } from \"@protobuf-ts/runtime\";\nimport type { JsonObject } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\n/**\n * `Struct` represents a structured data value, consisting of fields\n * which map to dynamically typed values. In some languages, `Struct`\n * might be supported by a native representation. For example, in\n * scripting languages like JS a struct is represented as an\n * object. The details of that representation are described together\n * with the proto support for the language.\n *\n * The JSON representation for `Struct` is JSON object.\n *\n * @generated from protobuf message google.protobuf.Struct\n */\nexport interface Struct {\n /**\n * Unordered map of dynamically typed values.\n *\n * @generated from protobuf field: map<string, google.protobuf.Value> fields = 1;\n */\n fields: {\n [key: string]: Value;\n };\n}\n/**\n * `Value` represents a dynamically typed value which can be either\n * null, a number, a string, a boolean, a recursive struct value, or a\n * list of values. A producer of value is expected to set one of these\n * variants. Absence of any variant indicates an error.\n *\n * The JSON representation for `Value` is JSON value.\n *\n * @generated from protobuf message google.protobuf.Value\n */\nexport interface Value {\n /**\n * @generated from protobuf oneof: kind\n */\n kind: {\n oneofKind: \"nullValue\";\n /**\n * Represents a null value.\n *\n * @generated from protobuf field: google.protobuf.NullValue null_value = 1;\n */\n nullValue: NullValue;\n } | {\n oneofKind: \"numberValue\";\n /**\n * Represents a double value.\n *\n * @generated from protobuf field: double number_value = 2;\n */\n numberValue: number;\n } | {\n oneofKind: \"stringValue\";\n /**\n * Represents a string value.\n *\n * @generated from protobuf field: string string_value = 3;\n */\n stringValue: string;\n } | {\n oneofKind: \"boolValue\";\n /**\n * Represents a boolean value.\n *\n * @generated from protobuf field: bool bool_value = 4;\n */\n boolValue: boolean;\n } | {\n oneofKind: \"structValue\";\n /**\n * Represents a structured value.\n *\n * @generated from protobuf field: google.protobuf.Struct struct_value = 5;\n */\n structValue: Struct;\n } | {\n oneofKind: \"listValue\";\n /**\n * Represents a repeated `Value`.\n *\n * @generated from protobuf field: google.protobuf.ListValue list_value = 6;\n */\n listValue: ListValue;\n } | {\n oneofKind: undefined;\n };\n}\n/**\n * `ListValue` is a wrapper around a repeated field of values.\n *\n * The JSON representation for `ListValue` is JSON array.\n *\n * @generated from protobuf message google.protobuf.ListValue\n */\nexport interface ListValue {\n /**\n * Repeated field of dynamically typed values.\n *\n * @generated from protobuf field: repeated google.protobuf.Value values = 1;\n */\n values: Value[];\n}\n/**\n * `NullValue` is a singleton enumeration to represent the null value for the\n * `Value` type union.\n *\n * The JSON representation for `NullValue` is JSON `null`.\n *\n * @generated from protobuf enum google.protobuf.NullValue\n */\nexport enum NullValue {\n /**\n * Null value.\n *\n * @generated from protobuf enum value: NULL_VALUE = 0;\n */\n NULL_VALUE = 0\n}\n// @generated message type with reflection information, may provide speed optimized methods\nclass Struct$Type extends MessageType<Struct> {\n constructor() {\n super(\"google.protobuf.Struct\", [\n { no: 1, name: \"fields\", kind: \"map\", K: 9 /*ScalarType.STRING*/, V: { kind: \"message\", T: () => Value } }\n ]);\n }\n /**\n * Encode `Struct` to JSON object.\n */\n internalJsonWrite(message: Struct, options: JsonWriteOptions): JsonValue {\n let json: JsonObject = {};\n for (let [k, v] of Object.entries(message.fields)) {\n json[k] = Value.toJson(v);\n }\n return json;\n }\n /**\n * Decode `Struct` from JSON object.\n */\n internalJsonRead(json: JsonValue, options: JsonReadOptions, target?: Struct): Struct {\n if (!isJsonObject(json))\n throw new globalThis.Error(\"Unable to parse message \" + this.typeName + \" from JSON \" + typeofJsonValue(json) + \".\");\n if (!target)\n target = this.create();\n for (let [k, v] of globalThis.Object.entries(json)) {\n target.fields[k] = Value.fromJson(v);\n }\n return target;\n }\n create(value?: PartialMessage<Struct>): Struct {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.fields = {};\n if (value !== undefined)\n reflectionMergePartial<Struct>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Struct): Struct {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* map<string, google.protobuf.Value> fields */ 1:\n this.binaryReadMap1(message.fields, reader, options);\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n private binaryReadMap1(map: Struct[\"fields\"], reader: IBinaryReader, options: BinaryReadOptions): void {\n let len = reader.uint32(), end = reader.pos + len, key: keyof Struct[\"fields\"] | undefined, val: Struct[\"fields\"][any] | undefined;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case 1:\n key = reader.string();\n break;\n case 2:\n val = Value.internalBinaryRead(reader, reader.uint32(), options);\n break;\n default: throw new globalThis.Error(\"unknown map entry field for field google.protobuf.Struct.fields\");\n }\n }\n map[key ?? \"\"] = val ?? Value.create();\n }\n internalBinaryWrite(message: Struct, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* map<string, google.protobuf.Value> fields = 1; */\n for (let k of globalThis.Object.keys(message.fields)) {\n writer.tag(1, WireType.LengthDelimited).fork().tag(1, WireType.LengthDelimited).string(k);\n writer.tag(2, WireType.LengthDelimited).fork();\n Value.internalBinaryWrite(message.fields[k], writer, options);\n writer.join().join();\n }\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message google.protobuf.Struct\n */\nexport const Struct = new Struct$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass Value$Type extends MessageType<Value> {\n constructor() {\n super(\"google.protobuf.Value\", [\n { no: 1, name: \"null_value\", kind: \"enum\", oneof: \"kind\", T: () => [\"google.protobuf.NullValue\", NullValue] },\n { no: 2, name: \"number_value\", kind: \"scalar\", oneof: \"kind\", T: 1 /*ScalarType.DOUBLE*/ },\n { no: 3, name: \"string_value\", kind: \"scalar\", oneof: \"kind\", T: 9 /*ScalarType.STRING*/ },\n { no: 4, name: \"bool_value\", kind: \"scalar\", oneof: \"kind\", T: 8 /*ScalarType.BOOL*/ },\n { no: 5, name: \"struct_value\", kind: \"message\", oneof: \"kind\", T: () => Struct },\n { no: 6, name: \"list_value\", kind: \"message\", oneof: \"kind\", T: () => ListValue }\n ]);\n }\n /**\n * Encode `Value` to JSON value.\n */\n internalJsonWrite(message: Value, options: JsonWriteOptions): JsonValue {\n if (message.kind.oneofKind === undefined)\n throw new globalThis.Error();\n switch (message.kind.oneofKind) {\n case undefined: throw new globalThis.Error();\n case \"boolValue\": return message.kind.boolValue;\n case \"nullValue\": return null;\n case \"numberValue\":\n let numberValue = message.kind.numberValue;\n if (typeof numberValue == \"number\" && !Number.isFinite(numberValue))\n throw new globalThis.Error();\n return numberValue;\n case \"stringValue\": return message.kind.stringValue;\n case \"listValue\":\n let listValueField = this.fields.find(f => f.no === 6);\n if (listValueField?.kind !== \"message\")\n throw new globalThis.Error();\n return listValueField.T().toJson(message.kind.listValue);\n case \"structValue\":\n let structValueField = this.fields.find(f => f.no === 5);\n if (structValueField?.kind !== \"message\")\n throw new globalThis.Error();\n return structValueField.T().toJson(message.kind.structValue);\n }\n }\n /**\n * Decode `Value` from JSON value.\n */\n internalJsonRead(json: JsonValue, options: JsonReadOptions, target?: Value): Value {\n if (!target)\n target = this.create();\n switch (typeof json) {\n case \"number\":\n target.kind = { oneofKind: \"numberValue\", numberValue: json };\n break;\n case \"string\":\n target.kind = { oneofKind: \"stringValue\", stringValue: json };\n break;\n case \"boolean\":\n target.kind = { oneofKind: \"boolValue\", boolValue: json };\n break;\n case \"object\":\n if (json === null) {\n target.kind = { oneofKind: \"nullValue\", nullValue: NullValue.NULL_VALUE };\n }\n else if (globalThis.Array.isArray(json)) {\n target.kind = { oneofKind: \"listValue\", listValue: ListValue.fromJson(json) };\n }\n else {\n target.kind = { oneofKind: \"structValue\", structValue: Struct.fromJson(json) };\n }\n break;\n default: throw new globalThis.Error(\"Unable to parse \" + this.typeName + \" from JSON \" + typeofJsonValue(json));\n }\n return target;\n }\n create(value?: PartialMessage<Value>): Value {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.kind = { oneofKind: undefined };\n if (value !== undefined)\n reflectionMergePartial<Value>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Value): Value {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* google.protobuf.NullValue null_value */ 1:\n message.kind = {\n oneofKind: \"nullValue\",\n nullValue: reader.int32()\n };\n break;\n case /* double number_value */ 2:\n message.kind = {\n oneofKind: \"numberValue\",\n numberValue: reader.double()\n };\n break;\n case /* string string_value */ 3:\n message.kind = {\n oneofKind: \"stringValue\",\n stringValue: reader.string()\n };\n break;\n case /* bool bool_value */ 4:\n message.kind = {\n oneofKind: \"boolValue\",\n boolValue: reader.bool()\n };\n break;\n case /* google.protobuf.Struct struct_value */ 5:\n message.kind = {\n oneofKind: \"structValue\",\n structValue: Struct.internalBinaryRead(reader, reader.uint32(), options, (message.kind as any).structValue)\n };\n break;\n case /* google.protobuf.ListValue list_value */ 6:\n message.kind = {\n oneofKind: \"listValue\",\n listValue: ListValue.internalBinaryRead(reader, reader.uint32(), options, (message.kind as any).listValue)\n };\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: Value, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* google.protobuf.NullValue null_value = 1; */\n if (message.kind.oneofKind === \"nullValue\")\n writer.tag(1, WireType.Varint).int32(message.kind.nullValue);\n /* double number_value = 2; */\n if (message.kind.oneofKind === \"numberValue\")\n writer.tag(2, WireType.Bit64).double(message.kind.numberValue);\n /* string string_value = 3; */\n if (message.kind.oneofKind === \"stringValue\")\n writer.tag(3, WireType.LengthDelimited).string(message.kind.stringValue);\n /* bool bool_value = 4; */\n if (message.kind.oneofKind === \"boolValue\")\n writer.tag(4, WireType.Varint).bool(message.kind.boolValue);\n /* google.protobuf.Struct struct_value = 5; */\n if (message.kind.oneofKind === \"structValue\")\n Struct.internalBinaryWrite(message.kind.structValue, writer.tag(5, WireType.LengthDelimited).fork(), options).join();\n /* google.protobuf.ListValue list_value = 6; */\n if (message.kind.oneofKind === \"listValue\")\n ListValue.internalBinaryWrite(message.kind.listValue, writer.tag(6, WireType.LengthDelimited).fork(), options).join();\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message google.protobuf.Value\n */\nexport const Value = new Value$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ListValue$Type extends MessageType<ListValue> {\n constructor() {\n super(\"google.protobuf.ListValue\", [\n { no: 1, name: \"values\", kind: \"message\", repeat: 1 /*RepeatType.PACKED*/, T: () => Value }\n ]);\n }\n /**\n * Encode `ListValue` to JSON array.\n */\n internalJsonWrite(message: ListValue, options: JsonWriteOptions): JsonValue {\n return message.values.map(v => Value.toJson(v));\n }\n /**\n * Decode `ListValue` from JSON array.\n */\n internalJsonRead(json: JsonValue, options: JsonReadOptions, target?: ListValue): ListValue {\n if (!globalThis.Array.isArray(json))\n throw new globalThis.Error(\"Unable to parse \" + this.typeName + \" from JSON \" + typeofJsonValue(json));\n if (!target)\n target = this.create();\n let values = json.map(v => Value.fromJson(v));\n target.values.push(...values);\n return target;\n }\n create(value?: PartialMessage<ListValue>): ListValue {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.values = [];\n if (value !== undefined)\n reflectionMergePartial<ListValue>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ListValue): ListValue {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* repeated google.protobuf.Value values */ 1:\n message.values.push(Value.internalBinaryRead(reader, reader.uint32(), options));\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: ListValue, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* repeated google.protobuf.Value values = 1; */\n for (let i = 0; i < message.values.length; i++)\n Value.internalBinaryWrite(message.values[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join();\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message google.protobuf.ListValue\n */\nexport const ListValue = new ListValue$Type();\n", "// @generated by protobuf-ts 2.9.4 with parameter client_generic,force_server_none\n// @generated from protobuf file \"mochabugapis/adapt/graph/transmitter.proto\" (package \"mochabugapis.adapt.graph\", syntax proto3)\n// tslint:disable\n//\n// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\nimport type { BinaryWriteOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryWriter } from \"@protobuf-ts/runtime\";\nimport { WireType } from \"@protobuf-ts/runtime\";\nimport type { BinaryReadOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryReader } from \"@protobuf-ts/runtime\";\nimport { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport type { PartialMessage } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\nimport { SignalDescriptor } from \"./signal_descriptor\";\n/**\n * Transmitter represents an output point for a vertex, emitting multiple signals.\n *\n * @generated from protobuf message mochabugapis.adapt.graph.Transmitter\n */\nexport interface Transmitter {\n /**\n * Identifier for the transmitter, following the ECMA naming pattern, limited to 50 characters.\n *\n * @generated from protobuf field: string name = 1;\n */\n name: string;\n /**\n * Optional descriptive text for the transmitter's purpose, up to 250 characters.\n *\n * @generated from protobuf field: optional string description = 2;\n */\n description?: string;\n /**\n * List of signals the transmitter can emit. Can contain up to 512 unique signals.\n *\n * @generated from protobuf field: repeated mochabugapis.adapt.graph.SignalDescriptor signals = 3;\n */\n signals: SignalDescriptor[];\n /**\n * Flag indicating whether the transmitter is signaling a failure state.\n *\n * @generated from protobuf field: bool failure = 4;\n */\n failure: boolean;\n}\n// @generated message type with reflection information, may provide speed optimized methods\nclass Transmitter$Type extends MessageType<Transmitter> {\n constructor() {\n super(\"mochabugapis.adapt.graph.Transmitter\", [\n { no: 1, name: \"name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"1\", maxLen: \"50\", pattern: \"^[_$a-z][_$a-z0-9]*$\" } } } },\n { no: 2, name: \"description\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { maxLen: \"250\" } } } },\n { no: 3, name: \"signals\", kind: \"message\", repeat: 1 /*RepeatType.PACKED*/, T: () => SignalDescriptor, options: { \"buf.validate.field\": { cel: [{ id: \"signals_unique_names\", message: \"Each signal must have a unique name.\", expression: \"this.map(signal, signal.name).unique()\" }], repeated: { maxItems: \"512\" } } } },\n { no: 4, name: \"failure\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ }\n ]);\n }\n create(value?: PartialMessage<Transmitter>): Transmitter {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.name = \"\";\n message.signals = [];\n message.failure = false;\n if (value !== undefined)\n reflectionMergePartial<Transmitter>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Transmitter): Transmitter {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string name */ 1:\n message.name = reader.string();\n break;\n case /* optional string description */ 2:\n message.description = reader.string();\n break;\n case /* repeated mochabugapis.adapt.graph.SignalDescriptor signals */ 3:\n message.signals.push(SignalDescriptor.internalBinaryRead(reader, reader.uint32(), options));\n break;\n case /* bool failure */ 4:\n message.failure = reader.bool();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: Transmitter, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* string name = 1; */\n if (message.name !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.name);\n /* optional string description = 2; */\n if (message.description !== undefined)\n writer.tag(2, WireType.LengthDelimited).string(message.description);\n /* repeated mochabugapis.adapt.graph.SignalDescriptor signals = 3; */\n for (let i = 0; i < message.signals.length; i++)\n SignalDescriptor.internalBinaryWrite(message.signals[i], writer.tag(3, WireType.LengthDelimited).fork(), options).join();\n /* bool failure = 4; */\n if (message.failure !== false)\n writer.tag(4, WireType.Varint).bool(message.failure);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message mochabugapis.adapt.graph.Transmitter\n */\nexport const Transmitter = new Transmitter$Type();\n", "// @generated by protobuf-ts 2.9.4 with parameter client_generic,force_server_none\n// @generated from protobuf file \"mochabugapis/adapt/graph/receiver.proto\" (package \"mochabugapis.adapt.graph\", syntax proto3)\n// tslint:disable\n//\n// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\nimport type { BinaryWriteOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryWriter } from \"@protobuf-ts/runtime\";\nimport { WireType } from \"@protobuf-ts/runtime\";\nimport type { BinaryReadOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryReader } from \"@protobuf-ts/runtime\";\nimport { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport type { PartialMessage } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\nimport { SignalBinding } from \"./signal_binding\";\n/**\n * Receiver represents an input point for a vertex, which can bind\n * to multiple signals.\n *\n * @generated from protobuf message mochabugapis.adapt.graph.Receiver\n */\nexport interface Receiver {\n /**\n * Identifier for the receiver, conforming to the ECMA naming pattern\n * and limited to 50 characters.\n *\n * @generated from protobuf field: string name = 1;\n */\n name: string;\n /**\n * Optional descriptive text for the receiver's purpose, up to 250 characters.\n *\n * @generated from protobuf field: optional string description = 2;\n */\n description?: string;\n /**\n * List of signals the receiver listens for. Can contain up to 512 unique signals.\n *\n * @generated from protobuf field: repeated mochabugapis.adapt.graph.SignalBinding bindings = 3;\n */\n bindings: SignalBinding[];\n}\n// @generated message type with reflection information, may provide speed optimized methods\nclass Receiver$Type extends MessageType<Receiver> {\n constructor() {\n super(\"mochabugapis.adapt.graph.Receiver\", [\n { no: 1, name: \"name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"1\", maxLen: \"50\", pattern: \"^[_$a-z][_$a-z0-9]*$\" } } } },\n { no: 2, name: \"description\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { maxLen: \"250\" } } } },\n { no: 3, name: \"bindings\", kind: \"message\", repeat: 1 /*RepeatType.PACKED*/, T: () => SignalBinding, options: { \"buf.validate.field\": { cel: [{ id: \"bindings_unique_names\", message: \"Each binding must have a unique name.\", expression: \"this.map(binding, binding.descriptor.name).unique()\" }], repeated: { maxItems: \"512\" } } } }\n ]);\n }\n create(value?: PartialMessage<Receiver>): Receiver {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.name = \"\";\n message.bindings = [];\n if (value !== undefined)\n reflectionMergePartial<Receiver>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Receiver): Receiver {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string name */ 1:\n message.name = reader.string();\n break;\n case /* optional string description */ 2:\n message.description = reader.string();\n break;\n case /* repeated mochabugapis.adapt.graph.SignalBinding bindings */ 3:\n message.bindings.push(SignalBinding.internalBinaryRead(reader, reader.uint32(), options));\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: Receiver, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* string name = 1; */\n if (message.name !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.name);\n /* optional string description = 2; */\n if (message.description !== undefined)\n writer.tag(2, WireType.LengthDelimited).string(message.description);\n /* repeated mochabugapis.adapt.graph.SignalBinding bindings = 3; */\n for (let i = 0; i < message.bindings.length; i++)\n SignalBinding.internalBinaryWrite(message.bindings[i], writer.tag(3, WireType.LengthDelimited).fork(), options).join();\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message mochabugapis.adapt.graph.Receiver\n */\nexport const Receiver = new Receiver$Type();\n", "// @generated by protobuf-ts 2.9.4 with parameter client_generic,force_server_none\n// @generated from protobuf file \"mochabugapis/adapt/graph/signal_binding.proto\" (package \"mochabugapis.adapt.graph\", syntax proto3)\n// tslint:disable\n//\n// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\nimport type { BinaryWriteOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryWriter } from \"@protobuf-ts/runtime\";\nimport { WireType } from \"@protobuf-ts/runtime\";\nimport type { BinaryReadOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryReader } from \"@protobuf-ts/runtime\";\nimport { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport type { PartialMessage } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\nimport { Value } from \"../../../google/protobuf/struct\";\nimport { SignalDescriptor } from \"./signal_descriptor\";\n/**\n * Receiver represents an input point for a vertex, which can bind\n * to multiple signals.\n *\n * @generated from protobuf message mochabugapis.adapt.graph.SignalBinding\n */\nexport interface SignalBinding {\n /**\n * The actual signal descriptor.\n *\n * @generated from protobuf field: mochabugapis.adapt.graph.SignalDescriptor descriptor = 1;\n */\n descriptor?: SignalDescriptor;\n /**\n * @generated from protobuf oneof: binding\n */\n binding: {\n oneofKind: \"reference\";\n /**\n * A reference to another signal <vertexid>:<transmitter>:<signal>\n *\n * @generated from protobuf field: string reference = 2;\n */\n reference: string;\n } | {\n oneofKind: \"constant\";\n /**\n * A constant value (must validate against the descriptor)\n *\n * @generated from protobuf field: google.protobuf.Value constant = 3;\n */\n constant: Value;\n } | {\n oneofKind: undefined;\n };\n /**\n * The binding may also have one of the 3 error codes\n *\n * @generated from protobuf field: optional mochabugapis.adapt.graph.SignalBinding.Error error = 4;\n */\n error?: SignalBinding_Error;\n}\n/**\n * Some error codes that can appear on the binding\n *\n * @generated from protobuf enum mochabugapis.adapt.graph.SignalBinding.Error\n */\nexport enum SignalBinding_Error {\n /**\n * Not specified\n *\n * @generated from protobuf enum value: ERROR_UNSPECIFIED = 0;\n */\n UNSPECIFIED = 0,\n /**\n * Binding is missing, the signal is unbound even though the descriptor requires it to be bound\n *\n * @generated from protobuf enum value: ERROR_UNBOUND = 1;\n */\n UNBOUND = 1,\n /**\n * The source does not exist\n *\n * @generated from protobuf enum value: ERROR_INVALID_SOURCE = 2;\n */\n INVALID_SOURCE = 2,\n /**\n * The schema does not match, the source is valid\n *\n * @generated from protobuf enum value: ERROR_SCHEMA_MISMATCH = 3;\n */\n SCHEMA_MISMATCH = 3\n}\n// @generated message type with reflection information, may provide speed optimized methods\nclass SignalBinding$Type extends MessageType<SignalBinding> {\n constructor() {\n super(\"mochabugapis.adapt.graph.SignalBinding\", [\n { no: 1, name: \"descriptor\", kind: \"message\", T: () => SignalDescriptor, options: { \"buf.validate.field\": { required: true } } },\n { no: 2, name: \"reference\", kind: \"scalar\", oneof: \"binding\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { maxLen: \"250\" } } } },\n { no: 3, name: \"constant\", kind: \"message\", oneof: \"binding\", T: () => Value },\n { no: 4, name: \"error\", kind: \"enum\", opt: true, T: () => [\"mochabugapis.adapt.graph.SignalBinding.Error\", SignalBinding_Error, \"ERROR_\"], options: { \"buf.validate.field\": { ignore: \"IGNORE_EMPTY\", enum: { notIn: [0] } } } }\n ]);\n }\n create(value?: PartialMessage<SignalBinding>): SignalBinding {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.binding = { oneofKind: undefined };\n if (value !== undefined)\n reflectionMergePartial<SignalBinding>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: SignalBinding): SignalBinding {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* mochabugapis.adapt.graph.SignalDescriptor descriptor */ 1:\n message.descriptor = SignalDescriptor.internalBinaryRead(reader, reader.uint32(), options, message.descriptor);\n break;\n case /* string reference */ 2:\n message.binding = {\n oneofKind: \"reference\",\n reference: reader.string()\n };\n break;\n case /* google.protobuf.Value constant */ 3:\n message.binding = {\n oneofKind: \"constant\",\n constant: Value.internalBinaryRead(reader, reader.uint32(), options, (message.binding as any).constant)\n };\n break;\n case /* optional mochabugapis.adapt.graph.SignalBinding.Error error */ 4:\n message.error = reader.int32();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: SignalBinding, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* mochabugapis.adapt.graph.SignalDescriptor descriptor = 1; */\n if (message.descriptor)\n SignalDescriptor.internalBinaryWrite(message.descriptor, writer.tag(1, WireType.LengthDelimited).fork(), options).join();\n /* string reference = 2; */\n if (message.binding.oneofKind === \"reference\")\n writer.tag(2, WireType.LengthDelimited).string(message.binding.reference);\n /* google.protobuf.Value constant = 3; */\n if (message.binding.oneofKind === \"constant\")\n Value.internalBinaryWrite(message.binding.constant, writer.tag(3, WireType.LengthDelimited).fork(), options).join();\n /* optional mochabugapis.adapt.graph.SignalBinding.Error error = 4; */\n if (message.error !== undefined)\n writer.tag(4, WireType.Varint).int32(message.error);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message mochabugapis.adapt.graph.SignalBinding\n */\nexport const SignalBinding = new SignalBinding$Type();\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport fs from 'fs';\nimport { mkdirp } from 'mkdirp';\nimport path from 'path';\nimport { Manifest } from './genproto/mochabugapis/adapt/plugins/v1/plugins';\nimport chalk from 'chalk';\nimport { fileURLToPath } from 'url';\n\nexport function readAsset(name: string): string {\n return fs\n .readFileSync(\n path.join(\n path.dirname(fileURLToPath(import.meta.url)),\n '..',\n 'assets',\n name\n )\n )\n .toString();\n}\n\nexport function writeFile(filePath: string, content: string) {\n const dir = path.dirname(filePath);\n mkdirp.sync(dir);\n fs.writeFileSync(filePath, content);\n}\n\nexport function readManifest(filePath: string): Manifest | null {\n const fullPath = path.resolve(filePath);\n if (!fs.existsSync(fullPath)) {\n console.error(\n chalk.red(`Invalid command: Manifest file not found at ${fullPath}.`)\n );\n return null;\n }\n\n try {\n const manifestData = fs.readFileSync(fullPath).toString();\n return Manifest.fromJsonString(manifestData);\n } catch (error: any) {\n console.error(chalk.red(`An error occurred while reading the manifest`));\n console.error(error.message);\n return null;\n }\n}\n\nexport function labelize(val: string): string {\n return (val.charAt(0).toUpperCase() + val.substring(1)).replace('_', ' ');\n}\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { confirm, input, select } from '@inquirer/prompts';\nimport chalk from 'chalk';\nimport { execSync } from 'child_process';\nimport fs from 'fs';\nimport { mkdirp } from 'mkdirp';\nimport path from 'path';\nimport { Manifest } from './genproto/mochabugapis/adapt/plugins/v1/plugins';\nimport { labelize, readAsset, writeFile } from './utils';\nimport { addVertex } from './vertices';\n\nexport async function init(dir: string) {\n const name = await input({\n message: 'Type plugin name',\n transformer: (val: string): string => {\n return val.trim().toLowerCase();\n },\n validate: (val: string): boolean => {\n return /^[_a-z][_a-z0-9]*$/.test(val);\n }\n });\n const vertexType = await select({\n message: 'Choose your vertex type',\n choices: [\n {\n name: 'action',\n value: 'action',\n description:\n 'An action is a vertex that performs a task, such as sending an email or updating a database.'\n },\n {\n name: 'browser',\n value: 'browser',\n description:\n 'A browser is a vertex that interacts with a web browser, such as navigating to a page or clicking a button.'\n },\n {\n name: 'cron-trigger',\n value: 'cron-trigger',\n description:\n 'A cron trigger is a vertex that triggers at a specific time, such as every day at 3:00 PM.'\n },\n {\n name: 'external-trigger',\n value: 'external-trigger',\n description:\n 'An external trigger is a vertex that triggers from an external event, such as a webhook or a message queue.'\n }\n ]\n });\n const vertexName = await input({\n message: 'Type a new unused vertex name',\n transformer: (val: string): string => {\n return val.trim().toLowerCase();\n },\n validate: (val: string): boolean => {\n return /^[_a-z][_a-z0-9]*$/.test(val);\n }\n });\n const hasConfigurator = await confirm({\n message: 'Need a configurator for the vertex?'\n });\n\n // Check which frontend to use, if any\n let frontendLib: 'none' | 'react' | undefined;\n if (hasConfigurator || vertexType === 'browser') {\n frontendLib = await select({\n message: 'Choose frontend library',\n choices: [\n {\n name: 'React',\n value: 'react',\n description: 'React with TypeScript'\n },\n {\n name: 'None',\n value: 'none',\n description: 'I do it myself'\n }\n ]\n });\n }\n\n mkdirp.sync(dir);\n\n const cwd = !path.isAbsolute(dir) ? path.join(process.cwd(), dir) : dir;\n\n const defPackage = {\n name: name,\n version: '',\n private: true,\n type: 'module',\n scripts: {\n 'build-client':\n \"node -e \\\"if(require('fs').existsSync('build-client.js')) require('child_process').execSync('node build-client.js', { stdio: 'inherit' })\\\"\",\n 'build-common': 'rimraf dist && npm run build-client && node build.js',\n 'build-dev':\n 'export PLUGINS_CDN=https://cdn-dev.mochabug.com/adapt/plugins && npm run build-common',\n 'build-prod':\n 'export PLUGINS_CDN=https://cdn.mochabug.com/adapt/plugins && npm run build-common',\n 'build-emulate':\n 'export PLUGINS_CDN=http://localhost:51002 && npm run build-common',\n build: 'npm run build-dev',\n emulate: 'npm run build-emulate && adaptkit emulate',\n add: 'adaptkit add'\n },\n devDependencies: {\n unenv: 'npm:unenv-nightly@*'\n }\n };\n writeFile(\n path.join(cwd, 'package.json'),\n JSON.stringify(defPackage, null, 2)\n );\n writeFile(path.join(cwd, 'README.md'), readAsset('readme.md'));\n writeFile(path.join(cwd, 'LICENSE.md'), readAsset('license.md'));\n\n execSync(\n 'npm install --save-dev @mochabug/adapt-plugin-typings typescript @cloudflare/unenv-preset @types/node esbuild rimraf glob',\n {\n cwd: cwd,\n stdio: 'inherit'\n }\n );\n execSync('npm install @mochabug/adapt-plugin-toolkit', {\n cwd: cwd,\n stdio: 'inherit'\n });\n writeFile(path.join(cwd, 'global.d.ts'), readAsset('global.d.ts'));\n writeFile(path.join(cwd, 'tsconfig.json'), readAsset('tsconf.json'));\n writeFile(path.join(cwd, '.gitignore'), readAsset('gitignore'));\n writeFile(path.join(cwd, 'build.js'), readAsset('build.js'));\n writeFile(path.join(cwd, 'inject.js'), readAsset('inject.js'));\n\n const vertex = addVertex(\n cwd,\n vertexName,\n vertexType,\n hasConfigurator,\n [],\n frontendLib\n );\n\n console.log(chalk.magenta('Creating manifest...'));\n const manifest: Manifest = {\n name: name,\n organization: '00000000-0000-0000-0000-000000000000',\n version: '0.1.0',\n label: labelize(name),\n description: `A nice description of what ${name} does`,\n author: 'John Doe',\n bugs: 'bugs@foobar.com',\n homepage: `https://www.foobar.com`,\n repository: `https://github.com`,\n vertices: [vertex],\n executors: 'dist/executors.js',\n pluginVariables: [],\n pluginOauth2: [],\n pluginMtls: []\n };\n\n if (frontendLib === 'react') {\n mkdirp.sync(path.join(dir, 'cdn'));\n manifest.cdn = 'cdn';\n }\n\n if (!vertex.metadata) {\n throw new Error('This cannot happen');\n }\n\n if (vertex.configurator) {\n manifest.configurators = 'dist/configurators.js';\n }\n\n // Write out the actual manifest and we're done\n fs.writeFileSync(\n path.join(cwd, 'manifest.json'),\n Manifest.toJsonString(manifest, {\n enumAsInteger: false,\n prettySpaces: 2,\n emitDefaultValues: false\n })\n );\n console.log(chalk.bgGreen('Success'));\n}\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport chalk from 'chalk';\nimport { randomBytes } from 'crypto';\nimport express, { Request, Response } from 'express';\nimport { Server } from 'http';\nimport fetch from 'node-fetch';\nimport open from 'open';\nimport pkceChallenge from 'pkce-challenge';\nimport { readAsset } from './utils';\n\nconst OAUTH_CALLBACK_PORT = 51421;\nconst PORT_RANGE = 5;\nconst OAUTH_SCOPE = 'https://www.mochabugapis.com/auth/adapt/plugins.upload';\nconst AUDIENCE = 'https://adapt-dev.mochabugapis.com';\n\ninterface OAuth2Options {\n clientId: string;\n redirectUri: string;\n scope: string;\n state: string;\n authUrl: string;\n codeChallenge: string;\n audience: string;\n}\n\ninterface TokenResponse {\n access_token: string;\n expires_in: number;\n token_type: string;\n scope?: string;\n}\n\ninterface OAuthErrorResponse {\n error: string;\n error_description?: string;\n error_uri?: string;\n}\n\nfunction createCodeUrl({\n clientId,\n redirectUri,\n scope,\n state,\n authUrl,\n codeChallenge,\n audience\n}: OAuth2Options): string {\n const res = new URL(authUrl);\n res.searchParams.set('response_type', 'code');\n res.searchParams.set('client_id', clientId);\n res.searchParams.set('audience', audience);\n res.searchParams.set('redirect_uri', redirectUri);\n res.searchParams.set('scope', scope);\n res.searchParams.set('state', state);\n res.searchParams.set('code_challenge', codeChallenge);\n res.searchParams.set('code_challenge_method', 'S256');\n\n return res.toString();\n}\n\ninterface CodeExchangeOptions {\n redirectUri: string;\n clientId: string;\n codeVerifier: string;\n code: string;\n}\n\nfunction createExchangeBody({\n redirectUri,\n codeVerifier,\n clientId,\n code\n}: CodeExchangeOptions): string {\n const res = new URLSearchParams();\n res.set('grant_type', 'authorization_code');\n res.set('code_verifier', codeVerifier);\n res.set('client_id', clientId);\n res.set('code', code);\n res.set('redirect_uri', redirectUri);\n\n return res.toString();\n}\n\nfunction startServer(\n app: express.Express,\n attempt: number = 0\n): Promise<{ server: Server; port: number }> {\n return new Promise((resolve, reject) => {\n // Calculate the current port to try based on the base port and the attempt number.\n const currentPort = OAUTH_CALLBACK_PORT + attempt;\n\n // Attempt to listen on the current port.\n const server = app.listen(currentPort, () => {\n console.log(\n chalk.green.bold(\n `Server running on http://localhost:${currentPort} to listen to OAuth2 callbacks`\n )\n );\n resolve({ server, port: currentPort });\n });\n\n // Handle the error event when the server fails to start.\n server.on('error', (err: any) => {\n if (err.code === 'EADDRINUSE' && attempt < PORT_RANGE - 1) {\n // If the address is in use, close the current server and try the next port.\n console.log(\n chalk.yellow.bold(\n `Port ${currentPort} is in use, trying next available port.`\n )\n );\n server.close();\n resolve(startServer(app, attempt + 1));\n } else {\n reject(err);\n }\n });\n });\n}\n\n// Define constants or import them\nconst LOGGING_PREFIX = '[waitForConsent]';\n\n// Returns the access token\nexport async function waitForConsent(\n issuerUrl: string,\n errorUrl: string,\n clientId: string\n): Promise<string | undefined> {\n console.info(\n `${LOGGING_PREFIX} Starting OAuth2 consent workflow for client: ${clientId}`\n );\n const authUrl = `${issuerUrl}/oauth2/auth`;\n const tokenUrl = `${issuerUrl}/oauth2/token`;\n console.info(`${LOGGING_PREFIX} Authorization URL: ${authUrl}`);\n console.info(`${LOGGING_PREFIX} Token URL: ${tokenUrl}`);\n\n const app = express();\n const state = randomBytes(32).toString('hex');\n\n console.info(`${LOGGING_PREFIX} Generated state for CSRF protection`);\n\n const localUrls = {\n base: ``,\n redirect: ``\n };\n\n const { code_verifier, code_challenge } = await pkceChallenge();\n\n console.info(`${LOGGING_PREFIX} PKCE Challenge generated`);\n\n let resolveToken: () => void;\n let rejectToken: () => void;\n let token: string | undefined;\n const tokenPromise = new Promise<void>((resolve, reject) => {\n resolveToken = resolve;\n rejectToken = reject;\n });\n\n app.get('/', async (_: Request, res: Response) => {\n const codeUrl = createCodeUrl({\n authUrl,\n clientId,\n redirectUri: localUrls.redirect,\n scope: OAUTH_SCOPE,\n state,\n codeChallenge: code_challenge,\n audience: AUDIENCE\n });\n console.info(`${LOGGING_PREFIX} Redirecting to code URL for user consent`);\n res.redirect(codeUrl);\n });\n\n // We need to use callbacks to the success / failed pages so that we don't\n // expose the code longer than necessary.\n app.get('/callback', async (req: Request, res: Response) => {\n if ('error' in req.query) {\n console.error(`${LOGGING_PREFIX} OAuth Error: error in callback`);\n const queryString = req.url.split('?')[1];\n res.redirect(`${errorUrl}?${queryString}`);\n rejectToken();\n return;\n }\n\n if (req.query.state !== state) {\n console.error(\n `${LOGGING_PREFIX} OAuth Error: Invalid state. Received state does not match.`\n );\n const errorDescription = encodeURIComponent('Invalid state parameter.');\n res.redirect(\n `${errorUrl}?error=invalid_request&error_description=${errorDescription}`\n );\n rejectToken();\n return;\n }\n\n console.info(`${LOGGING_PREFIX} OAuth state validated`);\n\n const body = createExchangeBody({\n clientId,\n redirectUri: localUrls.redirect,\n codeVerifier: code_verifier,\n code: req.query.code as string\n });\n\n try {\n console.info(`${LOGGING_PREFIX} Exchanging code for token`);\n const response = await fetch(tokenUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n Accept: 'application/json'\n },\n body\n });\n\n // Redirect to error\n if (!response.ok) {\n console.error(\n `${LOGGING_PREFIX} OAuth Error: could not exchange code for token`\n );\n const queryString = response.url.split('?')[1];\n res.redirect(`${errorUrl}?${queryString}`);\n rejectToken();\n return;\n }\n\n const data = (await response.json()) as TokenResponse;\n console.info(`${LOGGING_PREFIX} Token exchange successful`);\n console.info(`${LOGGING_PREFIX} Token exchange successful. Details: `, {\n expires_in: data.expires_in,\n scope: data.scope,\n type: data.token_type,\n token: '<secret>'\n });\n token = data.access_token;\n res.redirect('/success');\n } catch (error) {\n console.error(`${LOGGING_PREFIX} Error exchanging token: ${error}`);\n res.redirect(\n `${errorUrl}?error=unkown&error_description=${encodeURIComponent(\n 'Unknown error during token exchange'\n )}`\n );\n rejectToken();\n }\n });\n\n app.get('/success', (_: Request, res: Response) => {\n res.send(readAsset('success_page.html'));\n if (!token) {\n console.error('Token is undefined');\n rejectToken();\n }\n resolveToken();\n });\n\n let server: Server;\n try {\n console.info(`${LOGGING_PREFIX} Starting local server to handle callbacks`);\n const serverStart = await startServer(app);\n server = serverStart.server;\n localUrls.base = `http://localhost:${serverStart.port}`;\n localUrls.redirect = `${localUrls.base}/callback`;\n console.info(`${LOGGING_PREFIX} Server started on ${localUrls.base}`);\n } catch (e) {\n console.error(`${LOGGING_PREFIX} Error starting server: ${e}`);\n return;\n }\n\n try {\n console.info(`${LOGGING_PREFIX} Opening user consent page`);\n await open(localUrls.base);\n console.info(`${LOGGING_PREFIX} Waiting for user consent...`);\n await tokenPromise;\n console.info(\n `${LOGGING_PREFIX} OAuth consent workflow completed successfully`\n );\n if (!token) {\n console.error('Token is undefined');\n }\n return token;\n } catch (error) {\n console.error(`${LOGGING_PREFIX} Error in OAuth2 flow: ${error}`);\n return undefined;\n } finally {\n console.info(`${LOGGING_PREFIX} Closing the server...`);\n server.closeAllConnections();\n server.close();\n console.info(`${LOGGING_PREFIX} Server closed`);\n }\n}\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { ChannelCredentials } from '@grpc/grpc-js';\nimport { GrpcOptions, GrpcTransport } from '@protobuf-ts/grpc-transport';\nimport { RpcError, RpcMetadata, RpcStatus } from '@protobuf-ts/runtime-rpc';\nimport archiver from 'archiver';\nimport chalk from 'chalk';\nimport fg from 'fast-glob';\nimport fs from 'fs';\nimport path from 'path';\nimport sharp from 'sharp';\nimport { PassThrough } from 'stream';\nimport {\n Manifest,\n UploadPluginRequest\n} from './genproto/mochabugapis/adapt/plugins/v1/plugins';\nimport { PluginServiceClient } from './genproto/mochabugapis/adapt/plugins/v1/plugins.client';\n\nasync function resize(\n filepath: string,\n height: number,\n width: number\n): Promise<Buffer> {\n const extname = path.extname(filepath);\n switch (extname) {\n case '.avif':\n return await sharp(filepath).resize(height, width).avif().toBuffer();\n case '.gif':\n return await sharp(filepath).resize(height, width).gif().toBuffer();\n case '.jpg':\n case '.jpeg':\n case '.jfif':\n case '.pjpeg':\n case '.pjp':\n return await sharp(filepath).resize(height, width).jpeg().toBuffer();\n case '.png':\n return await sharp(filepath).resize(height, width).png().toBuffer();\n case '.svg':\n return fs.readFileSync(filepath);\n case '.webp':\n return await sharp(filepath).resize(height, width).webp().toBuffer();\n }\n throw new Error('Invalid logotype');\n}\n\nfunction isPathSafe(filePath: string): boolean {\n const currentWorkingDir = path.resolve('.');\n const absoluteFilePath = path.resolve(filePath);\n return absoluteFilePath.startsWith(currentWorkingDir);\n}\n\nfunction folderExists(folderPath: string): boolean {\n try {\n const absolutePath = path.resolve(folderPath);\n if (fs.existsSync(absolutePath)) {\n const stats = fs.statSync(absolutePath);\n return stats.isDirectory();\n } else {\n return false;\n }\n } catch (err) {\n console.error('Error checking if folder exists:', err);\n return false;\n }\n}\n\nfunction createArchive(folder: string): Promise<Buffer> {\n return new Promise<Buffer>((resolve, reject) => {\n if (!folderExists(folder)) {\n reject(`The folder ${folder} does not exist`);\n }\n\n const archive = archiver('tar', {\n gzip: true, // Use gzip compression\n zlib: { level: 9 } // Sets the compression level.\n });\n\n archive.on('error', (err) => {\n reject(err);\n });\n\n const buffers: Buffer[] = [];\n const bufferStream = new PassThrough();\n\n bufferStream.on('data', (data: Buffer) => buffers.push(data));\n\n bufferStream.on('end', () => {\n const res = Buffer.concat(buffers);\n console.log(`${folder} have been compressed successfully into a buffer.`);\n resolve(res); // Resolve the promise with the final buffer\n });\n\n archive.pipe(bufferStream);\n\n fg(path.join(folder, '**', '*'))\n .then((paths) => {\n for (let filepath of paths) {\n if (fs.statSync(filepath).isFile()) {\n const relativePath = path.relative(folder, filepath);\n archive.file(filepath, { name: relativePath });\n }\n }\n archive.finalize();\n })\n .catch((err) => reject(err));\n });\n}\n\nasync function sendPlugin(\n manifest: Manifest,\n client: PluginServiceClient,\n metadata?: RpcMetadata\n) {\n console.log('Sending the plugin to the server');\n const stream = client.uploadPlugin({ meta: metadata });\n const lookup: { [key: string]: boolean } = {};\n\n async function send(\n filePath?: string,\n imgOpts?: [number, number],\n fileContent?: Buffer\n ) {\n if (!filePath || lookup[filePath]) {\n return;\n }\n\n if (!isPathSafe(filePath)) {\n throw new Error(\n `The file path is not safe: ${filePath}. It must be contained inside the manifest folder. Invalid manifest`\n );\n }\n\n if (!fs.existsSync(filePath)) {\n throw new Error(\n `The path does not exists: ${filePath}. Invalid manifest`\n );\n }\n\n // If image file, we need to compress it\n let buffer: Buffer;\n if (imgOpts) {\n buffer = await resize(filePath, imgOpts[0], imgOpts[1]);\n console.log(\n `Compressed: ${filePath} to ${imgOpts[0]}x${imgOpts[1]} size`\n );\n } else if (fileContent) {\n buffer = fileContent;\n } else {\n buffer = fs.readFileSync(filePath);\n }\n\n console.log(`Sending: ${filePath}`);\n const message: UploadPluginRequest = {\n data: {\n oneofKind: 'file',\n file: {\n data: buffer,\n path: filePath\n }\n }\n };\n // The idea here is that we will have an RPC error if the server has returned an error\n await Promise.race([stream.requests.send(message), stream.status]);\n lookup[filePath] = true;\n }\n\n // The first message must be the manifest\n // All the other messages must be files and must be described in the manifest\n const request: UploadPluginRequest = {\n data: {\n oneofKind: 'manifest',\n manifest: manifest\n }\n };\n await stream.requests.send(request);\n await send('README.md');\n await send('LICENSE.md');\n await send(manifest.executors);\n await send(manifest.configurators);\n await send(manifest.logo, [80, 80]);\n\n // Send everything inside the asset directory as assets\n if (manifest.assets && fs.existsSync(manifest.assets)) {\n const assets = await createArchive(manifest.assets);\n await send(manifest.assets, undefined, assets);\n }\n\n // Send everything inside the cdn directory as cdn files\n if (manifest.cdn && fs.existsSync(manifest.cdn)) {\n const cdn = await createArchive(manifest.cdn);\n await send(manifest.cdn, undefined, cdn);\n }\n\n // Send everything related to the vertices. Logos, schemas and configs\n for (let vertex of manifest.vertices) {\n await send(vertex.logo, [40, 40]);\n await send(vertex.metadata);\n if (vertex.config) {\n await send(vertex.config);\n }\n }\n\n await stream.requests.complete();\n printRpcSuccess(\n await stream.status,\n await stream.headers,\n await stream.trailers\n );\n}\n\nexport async function emulate(manifest: Manifest, host: string) {\n const transport = new GrpcTransport({\n host,\n channelCredentials: ChannelCredentials.createInsecure(),\n 'grpc.default_compression_algorithm': 2,\n 'grpc.default_compression_level': 2,\n 'grpc.max_send_message_length': 16 * 1024 * 1024\n });\n const client = new PluginServiceClient(transport);\n try {\n await sendPlugin(manifest, client);\n } catch (e: any) {\n if (e instanceof RpcError) {\n printRpcError(e);\n } else {\n console.error(e);\n }\n console.log(\n `For more information, use: ${chalk.blue('adaptkit help emulate')}`\n );\n }\n}\n\nexport async function publish(\n manifest: Manifest,\n host: string,\n accessToken: string,\n insecure: boolean\n) {\n const transport = new GrpcTransport({\n host,\n channelCredentials: insecure\n ? ChannelCredentials.createSsl(undefined, undefined, undefined, {\n checkServerIdentity: () => undefined\n })\n : ChannelCredentials.createSsl(),\n 'grpc.default_compression_algorithm': 2,\n 'grpc.default_compression_level': 2,\n 'grpc.max_send_message_length': 16 * 1024 * 1024\n } as GrpcOptions);\n const client = new PluginServiceClient(transport);\n const metadata: RpcMetadata = { authorization: `Bearer ${accessToken}` };\n try {\n await sendPlugin(manifest, client, metadata);\n } catch (e: any) {\n if (e instanceof RpcError) {\n printRpcError(e);\n } else {\n console.error(e);\n }\n console.log(\n `For more information, use: ${chalk.blue('adaptkit help publish')}`\n );\n }\n}\n\nfunction printRpcSuccess(\n status: RpcStatus,\n headers: RpcMetadata,\n trailers: RpcMetadata\n) {\n const line = chalk.green(\n '=================================================='\n );\n const title = chalk.bgGreen.black.bold(' RPC Success Details ');\n const statusCode =\n chalk.bold.white('Status Code: ') + chalk.greenBright.bold(status.code);\n const statusDetail = status.detail\n ? chalk.bold.white('Details: ') + chalk.greenBright(status.detail)\n : chalk.gray(' No Details Provided');\n\n const headerInfo =\n chalk.bold.white('Headers:\\n') +\n (headers\n ? chalk.blue(JSON.stringify(headers, null, 2))\n : chalk.gray(' No Metadata'));\n\n const trailerInfo =\n chalk.bold.white('Trailers:\\n') +\n (trailers\n ? chalk.blue(JSON.stringify(trailers, null, 2))\n : chalk.gray(' No Trailers'));\n\n console.log(line);\n console.log(title);\n console.log(line);\n console.log(statusCode);\n console.log(statusDetail);\n console.log(line);\n console.log(headerInfo);\n console.log(line);\n console.log(trailerInfo);\n console.log(line);\n console.log(chalk.bgGreen.black.bold(' SUCCESS '));\n console.log(line);\n}\n\nfunction printRpcError(error: RpcError) {\n const line = chalk.red('==================================================');\n const title = chalk.bgRed.white.bold(' RPC Error Details ');\n const name = chalk.bold.white('Name: ') + chalk.redBright.bold(error.name);\n const message =\n chalk.bold.white('Message: ') + chalk.redBright(error.message);\n const code = chalk.bold.white('Code: ') + chalk.redBright.bold(error.code);\n\n const methodName = error.methodName\n ? chalk.bold.white('Method Name: ') + chalk.yellowBright(error.methodName)\n : chalk.gray('No Method Name');\n\n const serviceName = error.serviceName\n ? chalk.bold.white('Service Name: ') + chalk.yellowBright(error.serviceName)\n : chalk.gray('No Service Name');\n\n const meta =\n chalk.bold.white('Metadata:\\n') +\n (error.meta\n ? chalk.blue(JSON.stringify(error.meta, null, 2))\n : chalk.gray(' No Metadata'));\n\n console.error(line);\n console.error(title);\n console.error(line);\n console.error(name);\n console.error(message);\n console.error(code);\n console.error(line);\n if (methodName) console.error(methodName);\n if (serviceName) console.error(serviceName);\n console.error(line);\n console.error(meta);\n console.error(line);\n console.error(chalk.bgRed.white.bold(' ERROR '));\n console.error(line);\n}\n", "// @generated by protobuf-ts 2.9.4 with parameter client_generic,force_server_none\n// @generated from protobuf file \"mochabugapis/adapt/plugins/v1/plugins.proto\" (package \"mochabugapis.adapt.plugins.v1\", syntax proto3)\n// tslint:disable\n//\n// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\nimport type { RpcTransport } from \"@protobuf-ts/runtime-rpc\";\nimport type { ServiceInfo } from \"@protobuf-ts/runtime-rpc\";\nimport { PluginService } from \"./plugins\";\nimport { stackIntercept } from \"@protobuf-ts/runtime-rpc\";\nimport type { UploadPluginResponse } from \"./plugins\";\nimport type { UploadPluginRequest } from \"./plugins\";\nimport type { ClientStreamingCall } from \"@protobuf-ts/runtime-rpc\";\nimport type { RpcOptions } from \"@protobuf-ts/runtime-rpc\";\n/**\n * PluginService provides a service for uploading a plugin.\n *\n * @generated from protobuf service mochabugapis.adapt.plugins.v1.PluginService\n */\nexport interface IPluginServiceClient {\n /**\n * UploadPlugin is a streaming RPC method that allows uploading a plugin in\n * chunks. The client can send multiple UploadPluginRequest messages, and the\n * server will respond with a single UploadPluginResponse after processing all\n * requests.\n *\n * @generated from protobuf rpc: UploadPlugin(stream mochabugapis.adapt.plugins.v1.UploadPluginRequest) returns (mochabugapis.adapt.plugins.v1.UploadPluginResponse);\n */\n uploadPlugin(options?: RpcOptions): ClientStreamingCall<UploadPluginRequest, UploadPluginResponse>;\n}\n/**\n * PluginService provides a service for uploading a plugin.\n *\n * @generated from protobuf service mochabugapis.adapt.plugins.v1.PluginService\n */\nexport class PluginServiceClient implements IPluginServiceClient, ServiceInfo {\n typeName = PluginService.typeName;\n methods = PluginService.methods;\n options = PluginService.options;\n constructor(private readonly _transport: RpcTransport) {\n }\n /**\n * UploadPlugin is a streaming RPC method that allows uploading a plugin in\n * chunks. The client can send multiple UploadPluginRequest messages, and the\n * server will respond with a single UploadPluginResponse after processing all\n * requests.\n *\n * @generated from protobuf rpc: UploadPlugin(stream mochabugapis.adapt.plugins.v1.UploadPluginRequest) returns (mochabugapis.adapt.plugins.v1.UploadPluginResponse);\n */\n uploadPlugin(options?: RpcOptions): ClientStreamingCall<UploadPluginRequest, UploadPluginResponse> {\n const method = this.methods[0], opt = this._transport.mergeOptions(options);\n return stackIntercept<UploadPluginRequest, UploadPluginResponse>(\"clientStreaming\", this._transport, method, opt);\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["define_PACKAGE_JSON_default", "chalk", "program", "figlet", "fs", "isValidHostname", "path", "semver", "updateNotifier", "confirm", "input", "select", "chalk", "fs", "ServiceType", "WireType", "UnknownFieldHandler", "reflectionMergePartial", "MessageType", "Vertex_VertexType", "VariableService_Type", "PrivateKeyAlg", "Oauth2GrantType", "Oauth2AuthType", "UploadPluginRequest$Type", "Manifest", "File", "value", "message", "reader", "length", "options", "target", "end", "fieldNo", "wireType", "u", "d", "writer", "UploadPluginRequest", "UploadPluginResponse$Type", "UploadPluginResponse", "File$Type", "Manifest$Type", "Vertex", "Oauth2Service", "VariableService", "MTLSService", "i", "Vertex$Type", "Oauth2CodeBinding", "MTLSService$Type", "VariableService$Type", "Oauth2Service$Type", "Oauth2Code", "Oauth2CodeBinding$Type", "Oauth2Code$Type", "map", "len", "key", "val", "k", "PluginService", "fs", "mkdirp", "path", "WireType", "UnknownFieldHandler", "reflectionMergePartial", "MessageType", "WireType", "UnknownFieldHandler", "reflectionMergePartial", "MessageType", "WireType", "UnknownFieldHandler", "reflectionMergePartial", "MessageType", "WireType", "UnknownFieldHandler", "reflectionMergePartial", "MessageType", "WireType", "UnknownFieldHandler", "reflectionMergePartial", "MessageType", "WireType", "UnknownFieldHandler", "reflectionMergePartial", "isJsonObject", "typeofJsonValue", "MessageType", "NullValue", "Struct$Type", "Value", "message", "options", "json", "k", "v", "target", "value", "reader", "length", "end", "fieldNo", "wireType", "u", "d", "map", "len", "key", "val", "writer", "Struct", "Value$Type", "ListValue", "numberValue", "listValueField", "f", "structValueField", "ListValue$Type", "values", "i", "JTDSchema$Type", "MessageType", "JTDSchema", "Struct", "value", "message", "reflectionMergePartial", "reader", "length", "options", "target", "end", "fieldNo", "wireType", "u", "d", "UnknownFieldHandler", "map", "len", "key", "val", "writer", "k", "WireType", "i", "SignalDescriptor$Type", "MessageType", "JTDSchema", "value", "message", "reflectionMergePartial", "reader", "length", "options", "target", "end", "fieldNo", "wireType", "u", "d", "UnknownFieldHandler", "writer", "WireType", "SignalDescriptor", "Transceiver$Type", "MessageType", "SignalDescriptor", "value", "message", "reflectionMergePartial", "reader", "length", "options", "target", "end", "fieldNo", "wireType", "u", "d", "UnknownFieldHandler", "writer", "WireType", "i", "Transceiver", "Exchange$Type", "MessageType", "Transceiver", "value", "message", "reflectionMergePartial", "reader", "length", "options", "target", "end", "fieldNo", "wireType", "u", "d", "UnknownFieldHandler", "writer", "WireType", "i", "Exchange", "WireType", "UnknownFieldHandler", "reflectionMergePartial", "MessageType", "Transmitter$Type", "MessageType", "SignalDescriptor", "value", "message", "reflectionMergePartial", "reader", "length", "options", "target", "end", "fieldNo", "wireType", "u", "d", "UnknownFieldHandler", "writer", "WireType", "i", "Transmitter", "WireType", "UnknownFieldHandler", "reflectionMergePartial", "MessageType", "WireType", "UnknownFieldHandler", "reflectionMergePartial", "MessageType", "SignalBinding_Error", "SignalBinding$Type", "MessageType", "SignalDescriptor", "Value", "value", "message", "reflectionMergePartial", "reader", "length", "options", "target", "end", "fieldNo", "wireType", "u", "d", "UnknownFieldHandler", "writer", "WireType", "SignalBinding", "Receiver$Type", "MessageType", "SignalBinding", "value", "message", "reflectionMergePartial", "reader", "length", "options", "target", "end", "fieldNo", "wireType", "u", "d", "UnknownFieldHandler", "writer", "WireType", "i", "Receiver", "VertexConfigMetadata$Type", "MessageType", "Receiver", "Transmitter", "Exchange", "value", "message", "reflectionMergePartial", "reader", "length", "options", "target", "end", "fieldNo", "wireType", "u", "d", "UnknownFieldHandler", "writer", "WireType", "i", "VertexConfigMetadata", "execSync", "fs", "mkdirp", "path", "chalk", "fileURLToPath", "readAsset", "name", "fs", "path", "writeFile", "filePath", "content", "dir", "mkdirp", "readManifest", "fullPath", "manifestData", "Manifest", "error", "labelize", "val", "convertVertexType", "type", "addVertex", "cwd", "name", "hasConfigurator", "existingVertices", "frontendLib", "folder", "path", "fs", "mkdirp", "execFile", "vertex", "labelize", "execSync", "uiPath", "writeFile", "readAsset", "generateExport", "v", "vertexConfig", "VertexConfigMetadata", "vertices", "env", "imports", "add", "manifest", "vertexName", "input", "val", "item", "vertexType", "select", "hasConfigurator", "confirm", "frontendLib", "chalk", "vertex", "addVertex", "fs", "Manifest", "confirm", "input", "select", "chalk", "execSync", "fs", "mkdirp", "path", "init", "dir", "name", "input", "val", "vertexType", "select", "vertexName", "hasConfigurator", "confirm", "frontendLib", "mkdirp", "cwd", "path", "
|
|
4
|
+
"sourcesContent": ["", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport chalk from 'chalk';\nimport { Command, program } from 'commander';\nimport figlet from 'figlet';\nimport fs from 'fs';\nimport isValidHostname from 'is-valid-hostname';\nimport path from 'path';\nimport semver from 'semver';\nimport updateNotifier, { Package } from 'update-notifier';\nimport { add } from './add';\nimport { Manifest } from './genproto/mochabugapis/adapt/plugins/v1/plugins';\nimport { init } from './init';\nimport { waitForConsent } from './oauth2';\nimport { emulate, publish } from './publish';\nimport { readManifest } from './utils';\n\nasync function isValidUrl(urlString: string) {\n try {\n new URL(urlString);\n return true;\n } catch (error) {\n return false;\n }\n}\n\nfunction isValidPort(port: string): boolean {\n const portNumber = parseInt(port, 10);\n return portNumber > 0 && portNumber <= 65535;\n}\n\nfunction isValidHostWithPort(hostWithPort: string): {\n isValid: boolean;\n hostname: string;\n port?: number;\n} {\n const [hostname, port] = hostWithPort.split(':');\n\n if (!isValidHostname(hostname)) {\n return { isValid: false, hostname };\n }\n\n if (port !== undefined) {\n if (!isValidPort(port)) {\n return { isValid: false, hostname, port: parseInt(port, 10) };\n }\n return { isValid: true, hostname, port: parseInt(port, 10) };\n }\n\n return { isValid: true, hostname };\n}\n\nfunction banner(): string {\n return chalk.yellowBright(figlet.textSync('Adaptkit'));\n}\n\nasync function handleInit(dir: string, cmd: Command) {\n // Check for unexpected arguments\n if (cmd.args.length >= 1) {\n console.error(\n chalk.red(`Error: Invalid sub-command or arguments provided.`)\n );\n console.log(\n `For more information, use: ${chalk.blue('adaptkit help init')}`\n );\n process.exit(1);\n }\n\n // Continue with the usual logic if no unexpected arguments are found\n await init(dir);\n}\n\nasync function handleAdd(cmd: Command) {\n if (cmd.args.length >= 1) {\n console.error(\n chalk.red(`Error: Invalid sub-command or arguments provided.`)\n );\n console.log(\n `For more information, use: ${chalk.blue('adaptkit help add')}`\n );\n process.exit(1);\n }\n\n const manifest = readManifest('manifest.json');\n if (!manifest) {\n console.log(\n `For more information, use: ${chalk.blue('adaptkit help add')}`\n );\n process.exit(1);\n }\n await add(manifest);\n}\n\nasync function handlePublish(\n host: string,\n authUrl: string,\n client: string,\n insecure: boolean,\n errorUrl: string,\n cmd: Command\n) {\n if (!(await isValidUrl(authUrl))) {\n console.error(\n chalk.red(\n `Error: The provided authority url is not a valid URL: ${authUrl}`\n )\n );\n console.log(\n `For more information, use: ${chalk.blue('adaptkit help publish')}`\n );\n process.exit(1);\n }\n\n const { isValid, hostname, port } = isValidHostWithPort(host);\n if (!isValid) {\n console.error(\n chalk.red(\n `Error: The provided host or port is not valid: ${hostname}${\n port ? ':' + port : ''\n }`\n )\n );\n console.log(\n `For more information, use: ${chalk.blue('adaptkit help emulate')}`\n );\n process.exit(1);\n }\n\n if (cmd.args.length >= 1) {\n console.error(\n chalk.red(`Error: Invalid sub-command or arguments provided.`)\n );\n console.log(\n `For more information, use: ${chalk.blue('adaptkit help publish')}`\n );\n process.exit(1);\n }\n\n const manifest = readManifest('manifest.json');\n if (!manifest) {\n console.log(\n `For more information, use: ${chalk.blue('adaptkit help publish')}`\n );\n process.exit(1);\n }\n\n if (insecure) {\n process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';\n }\n\n const accessToken = await waitForConsent(authUrl, errorUrl, client);\n if (!accessToken) {\n console.log('Could not fetch the acccess token. Terminating...');\n process.exit(1);\n }\n await publish(manifest, host, accessToken, insecure);\n}\n\nasync function handleEmulate(host: string, cmd: Command) {\n const { isValid, hostname, port } = isValidHostWithPort(host);\n if (!isValid) {\n console.error(\n chalk.red(\n `Error: The provided host or port is not valid: ${hostname}${\n port ? ':' + port : ''\n }`\n )\n );\n console.log(\n `For more information, use: ${chalk.blue('adaptkit help emulate')}`\n );\n process.exit(1);\n }\n\n if (cmd.args.length >= 1) {\n console.error(\n chalk.red(`Error: Invalid sub-command or arguments provided.`)\n );\n console.log(\n `For more information, use: ${chalk.blue('adaptkit help emulate')}`\n );\n process.exit(1);\n }\n\n const manifest = readManifest('manifest.json');\n if (!manifest) {\n console.log(\n `For more information, use: ${chalk.blue('adaptkit help emulate')}`\n );\n process.exit(1);\n }\n await emulate(manifest, host);\n}\n\nfunction handleVersion(bump: 'patch' | 'minor' | 'major' | null, cmd: Command) {\n if (cmd.args.length >= 1) {\n console.error(\n chalk.red(`Error: Invalid sub-command or arguments provided.`)\n );\n console.log(\n `For more information, use: ${chalk.blue('adaptkit help version')}`\n );\n process.exit(1);\n }\n\n const manifest = readManifest('manifest.json');\n if (!manifest) {\n console.log(\n `For more information, use: ${chalk.blue('adaptkit help version')}`\n );\n process.exit(1);\n }\n\n const manVer = semver.parse(manifest.version);\n if (!manVer) {\n console.error(\n chalk.red(\n `Error: The version in the manifest is not a valid semver version: ${manifest.version}`\n )\n );\n console.log(\n `For more information, use: ${chalk.blue('adaptkit help version')}`\n );\n process.exit(1);\n }\n\n if (bump === null) {\n console.error(\n chalk.red(\n 'You must provide either --patch --minor or --major to bump the version.'\n )\n );\n console.log(\n `For more information, use: ${chalk.blue('adaptkit help version')}`\n );\n process.exit(1);\n }\n\n const prevVersion = manifest.version;\n manifest.version = manVer.inc(bump).toString();\n fs.writeFileSync(\n path.join(process.cwd(), 'manifest.json'),\n Manifest.toJsonString(manifest, {\n enumAsInteger: false,\n prettySpaces: 2,\n emitDefaultValues: false\n })\n );\n console.log(\n chalk.green(`Bumped the version from ${prevVersion} to ${manifest.version}`)\n );\n}\n\nasync function main() {\n const notifier = updateNotifier({\n pkg: __PACKAGE_JSON__\n });\n notifier.notify({ isGlobal: true, defer: false });\n\n program\n .name('Adaptkit')\n .version('1.0.0')\n .description(\n 'Unleash the power of seamless plugin development with Adaptkit, your premier CLI companion for Mochabug Adapt. Effortlessly create, manage and deploy plugins with finesse. Explore the full potential of Adaptkit at ' +\n chalk.underline.blue('https://www.mochabug.com')\n )\n .configureHelp({\n sortSubcommands: true,\n sortOptions: true,\n showGlobalOptions: true,\n helpWidth: 140\n });\n\n const DEFAULT_INIT_DIRECTORY = './';\n program\n .command('init')\n .option(\n '-d, --dir <dir>',\n `Choose the directory to initiate your plugin's journey. Default: '${DEFAULT_INIT_DIRECTORY}'`,\n DEFAULT_INIT_DIRECTORY\n )\n .description(\n 'Kickstart your plugin adventure. This command scaffolds a ready-to-go project structure.'\n )\n .action(({ dir }, cmd) => handleInit(dir, cmd));\n\n program\n .command('add')\n .description(\"Expand your plugin's capabilities\")\n .action((_, cmd) => handleAdd(cmd));\n\n program\n .command('publish')\n .option(\n '-h, --host <host>',\n chalk.yellow('Warning: Primarily for development purposes'),\n 'adapt-grpc-dev.mochabugapis.com'\n )\n .option(\n '-a, --authority <authority>',\n chalk.yellow('Warning: Primarily for development purposes'),\n 'https://auth-dev.mochabugapis.com'\n )\n .option(\n '-c, --client <client>',\n chalk.yellow('Warning: Primarily for development purposes'),\n '2d711bbb-4b57-4ad5-8bf0-f2269de5b71d'\n )\n .option(\n '-e, --error-url <errorUrl>',\n chalk.yellow('Warning: Primarily for development purposes'),\n 'https://accounts-dev.mochabug.com/services/error'\n )\n .option('--insecure', chalk.red('Ignore SSL certificate errors (insecure)'))\n .description(\n 'Ready for liftoff? Publish your plugin to your organization with this command.'\n )\n .action(({ host, authority, client, insecure, errorUrl }, cmd) =>\n handlePublish(host, authority, client, insecure, errorUrl, cmd)\n );\n\n program\n .command('emulate')\n .option(\n '-h, --host <host>',\n 'Specify the URL to test your plugin in the emulator. Ideal for custom port configurations.',\n 'localhost:51001'\n )\n .description(\n 'Take your plugin for a test drive. Best used in conjunction with your build pipeline.'\n )\n .action(({ host }, cmd) => handleEmulate(host, cmd));\n\n program\n .command('version')\n .option('--patch', 'Bump the manifest version to the next patch version')\n .option('--minor', 'Bump the manifest version to the next minor version')\n .option('--major', 'Bump the manifest version to the next major version')\n .description(\n 'The version command can manipulate the version of the plugin manifest.'\n )\n .action(({ major, minor, patch }, cmd) =>\n handleVersion(\n major ? 'major' : minor ? 'minor' : patch ? 'patch' : null,\n cmd\n )\n );\n\n // Set a custom help action\n program.addHelpText('beforeAll', banner() + '\\n');\n program.showHelpAfterError();\n\n try {\n await program.parseAsync(process.argv);\n } catch (error: any) {\n console.error(error);\n console.error('An error occurred:', error.message);\n }\n}\n\nmain();\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { confirm, input, select } from '@inquirer/prompts';\nimport chalk from 'chalk';\nimport fs from 'fs';\nimport { Manifest } from './genproto/mochabugapis/adapt/plugins/v1/plugins';\nimport { addVertex } from './vertices';\n\nexport async function add(manifest: Manifest) {\n const vertexName = await input({\n message: 'Type a new unused vertex name',\n transformer: (val: string): string => {\n return val.trim();\n },\n validate: (val: string): boolean => {\n val = val.trim();\n if (manifest.vertices.filter((item) => item.name === val).length > 0) {\n return false;\n }\n return /^[_a-z][_a-z0-9]*$/.test(val);\n }\n });\n const vertexType = await select({\n message: 'Choose your vertex type',\n choices: [\n {\n name: 'action',\n value: 'action',\n description:\n 'An action is a vertex that performs a task, such as sending an email or updating a database.'\n },\n {\n name: 'browser',\n value: 'browser',\n description:\n 'A browser is a vertex that interacts with a web browser, such as navigating to a page or clicking a button.'\n },\n {\n name: 'cron-trigger',\n value: 'cron-trigger',\n description:\n 'A cron trigger is a vertex that triggers at a specific time, such as every day at 3:00 PM.'\n },\n {\n name: 'external-trigger',\n value: 'external-trigger',\n description:\n 'An external trigger is a vertex that triggers from an external event, such as a webhook or a message queue.'\n }\n ]\n });\n const hasConfigurator = await confirm({\n message: 'Need a configurator for the vertex?'\n });\n\n // Check which frontend to use, if any\n let frontendLib: 'none' | 'react' | undefined;\n if (hasConfigurator || vertexType === 'browser') {\n frontendLib = await select({\n message: 'Choose frontend library',\n choices: [\n {\n name: 'React',\n value: 'react',\n description: 'React with TypeScript'\n },\n {\n name: 'None',\n value: 'none',\n description: 'I do it myself'\n }\n ]\n });\n }\n\n console.log(chalk.magenta('Creating new vertex templates...'));\n\n const vertex = addVertex(\n '.',\n vertexName,\n vertexType,\n hasConfigurator,\n manifest.vertices,\n frontendLib\n );\n manifest.vertices.push(vertex);\n if (!manifest.configurators && vertex.configurator) {\n manifest.configurators = 'dist/configurators.js';\n }\n\n console.log(chalk.magenta('Updating manifest...'));\n fs.writeFileSync(\n 'manifest.json',\n Manifest.toJsonString(manifest, {\n enumAsInteger: false,\n prettySpaces: 2,\n emitDefaultValues: false\n })\n );\n console.log(chalk.bgGreen('Success'));\n}\n", "// @generated by protobuf-ts 2.9.4 with parameter client_generic,force_server_none\n// @generated from protobuf file \"mochabugapis/adapt/plugins/v1/plugins.proto\" (package \"mochabugapis.adapt.plugins.v1\", syntax proto3)\n// tslint:disable\n//\n// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\nimport { ServiceType } from \"@protobuf-ts/runtime-rpc\";\nimport type { BinaryWriteOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryWriter } from \"@protobuf-ts/runtime\";\nimport { WireType } from \"@protobuf-ts/runtime\";\nimport type { BinaryReadOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryReader } from \"@protobuf-ts/runtime\";\nimport { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport type { PartialMessage } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\n/**\n * UploadPluginRequest represents a single request in the CreatePlugin streaming\n * RPC. The client sends a series of UploadPluginRequest messages containing\n * plugin data, starting with a manifest and followed by one or more files.\n *\n * @generated from protobuf message mochabugapis.adapt.plugins.v1.UploadPluginRequest\n */\nexport interface UploadPluginRequest {\n /**\n * @generated from protobuf oneof: data\n */\n data: {\n oneofKind: \"manifest\";\n /**\n * 'manifest' is the Manifest describing the plugin.\n * It must be the first message in the stream.\n *\n * @generated from protobuf field: mochabugapis.adapt.plugins.v1.Manifest manifest = 1;\n */\n manifest: Manifest;\n } | {\n oneofKind: \"file\";\n /**\n * 'file' is a File contained within the plugin.\n * It follows the manifest in the stream.\n *\n * @generated from protobuf field: mochabugapis.adapt.plugins.v1.File file = 2;\n */\n file: File;\n } | {\n oneofKind: undefined;\n };\n}\n/**\n * UploadPluginResponse represents the response from the CreatePlugin streaming\n * RPC. The server sends a single CreatePluginResponse after successfully\n * processing all UploadPluginResponse messages from the client.\n *\n * @generated from protobuf message mochabugapis.adapt.plugins.v1.UploadPluginResponse\n */\nexport interface UploadPluginResponse {\n}\n/**\n * File represents a file within a plugin package.\n *\n * @generated from protobuf message mochabugapis.adapt.plugins.v1.File\n */\nexport interface File {\n /**\n * 'path' is the local file path relative to the manifest.json folder.\n *\n * @generated from protobuf field: string path = 1;\n */\n path: string;\n /**\n * 'data' contains the actual binary file data.\n *\n * @generated from protobuf field: bytes data = 2;\n */\n data: Uint8Array;\n}\n/**\n * Manifest describes a plugin and its properties.\n *\n * Security considerations: The platform ensures that secrets and certificates\n * are stored and transmitted securely.\n *\n * *** Plugin authors must also ensure that their implementations\n * handle sensitive data appropriately! ***\n *\n * @generated from protobuf message mochabugapis.adapt.plugins.v1.Manifest\n */\nexport interface Manifest {\n /**\n * 'name' is the alpha-numeric identifier of the plugin. Must be conform to a ES variable name\n *\n * @generated from protobuf field: string name = 1;\n */\n name: string;\n /**\n * 'version' is the plugin's version, following SemVer 2.0: https://semver.org/\n *\n * @generated from protobuf field: string version = 2;\n */\n version: string;\n /**\n * 'label' is a human-friendly label displayed in the UI.\n *\n * @generated from protobuf field: string label = 3;\n */\n label: string;\n /**\n * 'description' is a short, human-friendly description displayed in the UI.\n *\n * @generated from protobuf field: string description = 4;\n */\n description: string;\n /**\n * 'organization' is the id of the organization the user belongs to.\n *\n * @generated from protobuf field: string organization = 5;\n */\n organization: string;\n /**\n * 'homepage' is the plugin's homepage URL.\n *\n * @generated from protobuf field: optional string homepage = 6;\n */\n homepage?: string;\n /**\n * 'repository' is the plugin's repository URL.\n *\n * @generated from protobuf field: optional string repository = 7;\n */\n repository?: string;\n /**\n * 'bugs' is the URL or email for reporting bugs.\n *\n * @generated from protobuf field: optional string bugs = 8;\n */\n bugs?: string;\n /**\n * 'author' is the name of the plugin's author.\n *\n * @generated from protobuf field: optional string author = 9;\n */\n author?: string;\n /**\n * 'logo' is an optional path to the plugin logo.\n * The logo will be resized to a maximum of 80x80 pixels.\n * - Supported file formats:\n * - GIF: .gif\n * - JPEG: .jpg, .jpeg, .jfif, .pjpeg, .pjp\n * - PNG: .png\n * - SVG: .svg\n * - WEBP: .webp\n * - AVIF: .avif\n *\n * @generated from protobuf field: optional string logo = 10;\n */\n logo?: string;\n /**\n * 'executors' is the path to the executor ES module file.\n *\n * @generated from protobuf field: string executors = 11;\n */\n executors: string;\n /**\n * 'configurators' is an optional path to the configurator ES module file.\n *\n * @generated from protobuf field: optional string configurators = 12;\n */\n configurators?: string;\n /**\n * 'assets' is an optional directory containing all static assets\n * available to the plugin.\n *\n * @generated from protobuf field: optional string assets = 13;\n */\n assets?: string;\n /**\n * 'cdn' is the URL of the plugin's CDN (content delivery network).\n * The CDN is used to serve static assets, such as images, CSS, and JavaScript\n * files. The files will be located on https://cdn.mochabug.com/adapt/plugins/<owner>/<plugin>/<version>/\n *\n * @generated from protobuf field: optional string cdn = 14;\n */\n cdn?: string;\n /**\n * 'vertices' is a list of vertices that constitute the plugin.\n *\n * @generated from protobuf field: repeated mochabugapis.adapt.plugins.v1.Vertex vertices = 15;\n */\n vertices: Vertex[];\n /**\n * The plugin oauth2 services specifies oauth2 services that is required for the plugin.\n * The client_id must be set for ALL oauth services here\n *\n * @generated from protobuf field: repeated mochabugapis.adapt.plugins.v1.Oauth2Service plugin_oauth2 = 16;\n */\n pluginOauth2: Oauth2Service[];\n /**\n * 'plugin_variables' represents the variables required by the plugin.\n * The platform ensures secure storage and transmission of variables.\n * i.e. a plugin owner sets these variables and the plugin can use them\n *\n * @generated from protobuf field: repeated mochabugapis.adapt.plugins.v1.VariableService plugin_variables = 17;\n */\n pluginVariables: VariableService[];\n /**\n * 'plugin_mtls' represents the mTLS (mutual TLS) certificates required by\n * the plugin. The platform ensures secure storage and transmission of\n * certificates.\n * i.e. a plugin owner sets these certificates and the plugin can use them\n *\n * @generated from protobuf field: repeated mochabugapis.adapt.plugins.v1.MTLSService plugin_mtls = 18;\n */\n pluginMtls: MTLSService[];\n}\n/**\n * Vertex represents a graph vertex that defines a plugin.\n * Note: Be aware of potential security implications when dealing with\n * user-provided data, such as file paths, and ensure proper input validation\n * and sanitization.\n *\n * @generated from protobuf message mochabugapis.adapt.plugins.v1.Vertex\n */\nexport interface Vertex {\n /**\n * 'name' represents the vertex name.\n *\n * @generated from protobuf field: string name = 1;\n */\n name: string;\n /**\n * 'label' is a human-friendly label displayed in the UI.\n *\n * @generated from protobuf field: string label = 2;\n */\n label: string;\n /**\n * 'description' is a human-friendly short description of the vertex displayed\n * in UI.\n *\n * @generated from protobuf field: optional string description = 3;\n */\n description?: string;\n /**\n * 'logo' is the file path to the vertex logo, which will be resized to a\n * maximum of 40x40 pixels. Ensure that the logo files are from trusted\n * sources to avoid security risks.\n * - Supported file formats:\n * - GIF: .gif\n * - JPEG: .jpg, .jpeg, .jfif, .pjpeg, .pjp\n * - PNG: .png\n * - SVG: .svg\n * - WEBP: .webp\n * - AVIF: .avif\n *\n * @generated from protobuf field: optional string logo = 4;\n */\n logo?: string;\n /**\n * 'type' specifies the type of the vertex.\n *\n * @generated from protobuf field: mochabugapis.adapt.plugins.v1.Vertex.VertexType type = 5;\n */\n type: Vertex_VertexType;\n /**\n * 'config' is an field that contains a Unix file path.\n * This can be any type of file, this is only intepreted for the vertex itself\n * Restrictions:\n *\n *\n * @generated from protobuf field: optional string config = 6;\n */\n config?: string;\n /**\n * 'metadata' is an field that contains a Unix file path.\n * This determines which receivers, transmitters etc... the vertex has to begin with\n * Restrictions:\n *\n *\n * @generated from protobuf field: string metadata = 7;\n */\n metadata: string;\n /**\n * 'configurator' is a field to indicate whether or not\n * the vertex has a configurator\n *\n * @generated from protobuf field: bool configurator = 8;\n */\n configurator: boolean;\n /**\n * The variables required by the vertex\n *\n * @generated from protobuf field: repeated mochabugapis.adapt.plugins.v1.VariableService variables = 9;\n */\n variables: VariableService[];\n /**\n * The mtls field contains a list of MTLSService instances for user-defined mTLS services.\n *\n * @generated from protobuf field: repeated mochabugapis.adapt.plugins.v1.MTLSService mtls = 10;\n */\n mtls: MTLSService[];\n /**\n * The code_oauth2 field stores a list of bindings to the actual code flow definitions.\n *\n * If any of the OAuth2 services referred to in these bindings are not configured and are not marked as 'optional'\n * in their respective ServiceBinding, the plugin might not be able to properly authenticate and authorize its operations.\n *\n * @generated from protobuf field: repeated mochabugapis.adapt.plugins.v1.Oauth2CodeBinding code_oauth2 = 11;\n */\n codeOauth2: Oauth2CodeBinding[];\n /**\n * client_id must not be set, and code must not be set. It's only for user defined service accounts\n *\n * @generated from protobuf field: repeated mochabugapis.adapt.plugins.v1.Oauth2Service oauth2 = 12;\n */\n oauth2: Oauth2Service[];\n}\n/**\n * VertexType represents the type of a vertex.\n *\n * @generated from protobuf enum mochabugapis.adapt.plugins.v1.Vertex.VertexType\n */\nexport enum Vertex_VertexType {\n /**\n * Unspecified type (default value, should not be used).\n *\n * @generated from protobuf enum value: VERTEX_TYPE_UNSPECIFIED = 0;\n */\n UNSPECIFIED = 0,\n /**\n * Action type, available in all contexts and not exposed to the outside\n * world. This type has a lower security risk.\n *\n * @generated from protobuf enum value: VERTEX_TYPE_ACTION = 1;\n */\n ACTION = 1,\n /**\n * Browser type, available only in a browser context.\n * The configuration always runs inside a browser context.\n * Security implications: be cautious about potentially sensitive data\n * exposure.\n *\n * @generated from protobuf enum value: VERTEX_TYPE_BROWSER = 2;\n */\n BROWSER = 2,\n /**\n * CronTrigger type, available only in a trigger context.\n * Triggered at specific intervals.\n *\n * @generated from protobuf enum value: VERTEX_TYPE_CRON_TRIGGER = 3;\n */\n CRON_TRIGGER = 3,\n /**\n * ExternalTrigger type, available only in a trigger context.\n * Accessible via a publicly routable address.\n * Security implications: be cautious about exposing sensitive data or\n * functionality.\n *\n * @generated from protobuf enum value: VERTEX_TYPE_EXTERNAL_TRIGGER = 4;\n */\n EXTERNAL_TRIGGER = 4\n}\n/**\n * MTLSService represents a mutual Transport Layer Security (mTLS) service\n * configuration required by the plugin. mTLS provides secure communication\n * between client and server by authenticating both parties and encrypting the\n * communication.\n *\n * @generated from protobuf message mochabugapis.adapt.plugins.v1.MTLSService\n */\nexport interface MTLSService {\n /**\n * 'name' is the identifier of the mTLS service.\n * It's used for referencing the specific mTLS configuration.\n *\n * @generated from protobuf field: string name = 1;\n */\n name: string;\n /**\n * 'label' is an optional short label describing the purpose of the mTLS\n * service.\n *\n * Restrictions:\n * - Length must be greater than 0 and less than 25 characters.\n * Security implications:\n * - Should not contain sensitive information.\n *\n * @generated from protobuf field: optional string label = 2;\n */\n label?: string;\n /**\n * 'description' is an optional detailed description of the mTLS service and\n * its usage within the plugin.\n *\n * @generated from protobuf field: optional string description = 3;\n */\n description?: string;\n /**\n * Unset or false means the variable is required\n * true means the mtls service is optional\n *\n * @generated from protobuf field: optional bool optional = 4;\n */\n optional?: boolean;\n}\n/**\n * A representation of a variable.\n *\n * This message represents a variable used within the hosting platform.\n * Variables are essential for configuring applications and services hosted on the platform.\n * They store values that can be accessed by the application or service during runtime.\n *\n * @generated from protobuf message mochabugapis.adapt.plugins.v1.VariableService\n */\nexport interface VariableService {\n /**\n * 'name' is the identifier of the variable, which is referenced where needed.\n *\n * @generated from protobuf field: string name = 1;\n */\n name: string;\n /**\n * 'label' is a short, human-readable label describing the purpose of the variable.\n *\n * @generated from protobuf field: optional string label = 2;\n */\n label?: string;\n /**\n * 'description' is a detailed description of the variable and its use.\n *\n * @generated from protobuf field: optional string description = 3;\n */\n description?: string;\n /**\n * The 'type' field specifies the data type of the environmental variable.\n *\n * @generated from protobuf field: mochabugapis.adapt.plugins.v1.VariableService.Type type = 4;\n */\n type: VariableService_Type;\n /**\n * Unset or false means the variable is required\n * true means the variable is optional\n *\n * @generated from protobuf field: optional bool optional = 5;\n */\n optional?: boolean;\n}\n/**\n * The type of variable\n *\n * @generated from protobuf enum mochabugapis.adapt.plugins.v1.VariableService.Type\n */\nexport enum VariableService_Type {\n /**\n * The type is not specified. Invalid value\n *\n * @generated from protobuf enum value: TYPE_UNSPECIFIED = 0;\n */\n UNSPECIFIED = 0,\n /**\n * The variable will hold a secret\n *\n * @generated from protobuf enum value: TYPE_SECRET = 1;\n */\n SECRET = 1,\n /**\n * The variable will hold a string\n *\n * @generated from protobuf enum value: TYPE_STRING = 2;\n */\n STRING = 2,\n /**\n * The variable is a boolean value (a string either \"true\" or \"false\")\n *\n * @generated from protobuf enum value: TYPE_SWITCH = 3;\n */\n SWITCH = 3\n}\n/**\n * OAuth2 service configuration\n *\n * @generated from protobuf message mochabugapis.adapt.plugins.v1.Oauth2Service\n */\nexport interface Oauth2Service {\n /**\n * 'name' is the identifier for the OAuth2 service.\n *\n * @generated from protobuf field: string name = 1;\n */\n name: string;\n /**\n * 'label' is an optional short label describing the OAuth2 service.\n *\n * @generated from protobuf field: optional string label = 2;\n */\n label?: string;\n /**\n * 'description' provides a full description of the OAuth2 service.\n *\n * @generated from protobuf field: optional string description = 3;\n */\n description?: string;\n /**\n * The OAuth2 grant type to be used.\n *\n * @generated from protobuf field: mochabugapis.adapt.plugins.v1.Oauth2GrantType grant_type = 4;\n */\n grantType: Oauth2GrantType;\n /**\n * The required scopes.\n *\n * @generated from protobuf field: repeated string scopes = 5;\n */\n scopes: string[];\n /**\n * The client authentication method.\n * REQUIRED when grant_type is:\n * - OAUTH2_GRANT_TYPE_AUTHORIZATION_CODE\n * - OAUTH2_GRANT_TYPE_CLIENT_CREDENTIALS\n *\n * MUST NOT be set when grant_type is:\n * - OAUTH2_GRANT_TYPE_JWT_BEARER\n * - OAUTH2_GRANT_TYPE_SAML2_BEARER\n *\n * @generated from protobuf field: optional mochabugapis.adapt.plugins.v1.Oauth2AuthType auth_method = 6;\n */\n authMethod?: Oauth2AuthType;\n /**\n * Algorithm used for signing assertions.\n * REQUIRED when:\n * - grant_type is OAUTH2_GRANT_TYPE_JWT_BEARER\n * - grant_type is OAUTH2_GRANT_TYPE_SAML2_BEARER\n * - auth_method is OAUTH2_AUTH_TYPE_PRIVATE_KEY_JWT\n * - auth_method is OAUTH2_AUTH_TYPE_SAML2_BEARER\n *\n * MUST NOT be set otherwise.\n *\n * @generated from protobuf field: optional mochabugapis.adapt.plugins.v1.PrivateKeyAlg alg = 7;\n */\n alg?: PrivateKeyAlg;\n /**\n * Client ID.\n * This is required when used as plugin_oauth2, but not onto a vertex => oauth2\n *\n * @generated from protobuf field: optional string client_id = 8;\n */\n clientId?: string;\n /**\n * The token endpoint URL.\n *\n * @generated from protobuf field: string token_endpoint = 9;\n */\n tokenEndpoint: string;\n /**\n * Configuration specific to the Authorization Code grant type.\n * REQUIRED when grant_type is OAUTH2_GRANT_TYPE_AUTHORIZATION_CODE.\n * MUST NOT be set otherwise.\n *\n * @generated from protobuf field: optional mochabugapis.adapt.plugins.v1.Oauth2Code code = 10;\n */\n code?: Oauth2Code;\n /**\n * Indicates if the OAuth2 service is optional.\n * This cannot be set to true in case of OAUTH2_GRANT_TYPE_AUTHORIZATION_CODE\n *\n * @generated from protobuf field: optional bool optional = 11;\n */\n optional?: boolean;\n}\n/**\n * Represents a binding to a code service\n *\n * The binding points to the required service by its 'name' and indicates whether the service is 'optional' or required.\n *\n * @generated from protobuf message mochabugapis.adapt.plugins.v1.Oauth2CodeBinding\n */\nexport interface Oauth2CodeBinding {\n /**\n * The 'name' field specifies the name of the service to bind to. The name should match the 'name' field of\n * the corresponding OAuth2Service.\n *\n * @generated from protobuf field: string name = 1;\n */\n name: string;\n /**\n * The 'optional' field indicates whether the service binding is optional or required. If 'optional' is\n * set to true, the service is not strictly required and the plugin can function without it. If 'optional'\n * is set to false, the service is required and the plugin might fail if it is not properly configured.\n *\n * @generated from protobuf field: optional bool optional = 2;\n */\n optional?: boolean;\n}\n/**\n * The code grant type\n * IMPORTANT: it has to be configured with refresh token in order to work correctly\n * this is not needed for client credentials of course since we are owning the client\n * WE ONLY SUPPORT OIDC since we need the sub claim to distinguish between different users\n *\n * @generated from protobuf message mochabugapis.adapt.plugins.v1.Oauth2Code\n */\nexport interface Oauth2Code {\n /**\n * The auth endpoint (i.e. where it gets redirected for login)\n *\n * @generated from protobuf field: string auth_endpoint = 1;\n */\n authEndpoint: string;\n /**\n * We need to know the issuer in order to validate the token\n *\n * @generated from protobuf field: string issuer = 2;\n */\n issuer: string;\n /**\n * We also need the JWKs endpoint to validate the token\n *\n * @generated from protobuf field: string jwks_uri = 3;\n */\n jwksUri: string;\n /**\n * Additional parameters used for the oauth2 login endpoint\n * Do not include state or nonce here since we're generating them\n * in the backend. All params will be encoded in the URL\n *\n * @generated from protobuf field: map<string, string> additional_params = 4;\n */\n additionalParams: {\n [key: string]: string;\n };\n /**\n * Whether or not to use the PKCE extension\n *\n * @generated from protobuf field: bool use_pkce = 5;\n */\n usePkce: boolean;\n}\n/**\n * The algorithm used for signing JWT or SAML assertions\n *\n * @generated from protobuf enum mochabugapis.adapt.plugins.v1.PrivateKeyAlg\n */\nexport enum PrivateKeyAlg {\n /**\n * Unknown algorithm (invalid)\n *\n * @generated from protobuf enum value: PRIVATE_KEY_ALG_UNSPECIFIED = 0;\n */\n UNSPECIFIED = 0,\n /**\n * RS256 algorithm\n *\n * @generated from protobuf enum value: PRIVATE_KEY_ALG_RS256 = 1;\n */\n RS256 = 1\n}\n/**\n * The OAuth2 grant type\n *\n * @generated from protobuf enum mochabugapis.adapt.plugins.v1.Oauth2GrantType\n */\nexport enum Oauth2GrantType {\n /**\n * Not specified (invalid)\n *\n * @generated from protobuf enum value: OAUTH2_GRANT_TYPE_UNSPECIFIED = 0;\n */\n UNSPECIFIED = 0,\n /**\n * Authorization Code Grant\n * grant_type=authorization_code\n *\n * @generated from protobuf enum value: OAUTH2_GRANT_TYPE_AUTHORIZATION_CODE = 1;\n */\n AUTHORIZATION_CODE = 1,\n /**\n * Client Credentials Grant\n * grant_type=client_credentials\n *\n * @generated from protobuf enum value: OAUTH2_GRANT_TYPE_CLIENT_CREDENTIALS = 2;\n */\n CLIENT_CREDENTIALS = 2,\n /**\n * JWT Bearer Assertion Grant\n * grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer\n *\n * @generated from protobuf enum value: OAUTH2_GRANT_TYPE_JWT_BEARER = 3;\n */\n JWT_BEARER = 3,\n /**\n * SAML 2.0 Bearer Assertion Grant\n * grant_type=urn:ietf:params:oauth:grant-type:saml2-bearer\n *\n * @generated from protobuf enum value: OAUTH2_GRANT_TYPE_SAML2_BEARER = 4;\n */\n SAML2_BEARER = 4\n}\n/**\n * The OAuth2 client authentication method\n *\n * @generated from protobuf enum mochabugapis.adapt.plugins.v1.Oauth2AuthType\n */\nexport enum Oauth2AuthType {\n /**\n * Not specified (invalid)\n *\n * @generated from protobuf enum value: OAUTH2_AUTH_TYPE_UNSPECIFIED = 0;\n */\n UNSPECIFIED = 0,\n /**\n * Basic Authentication (client ID and secret in Authorization header)\n *\n * @generated from protobuf enum value: OAUTH2_AUTH_TYPE_BASIC = 1;\n */\n BASIC = 1,\n /**\n * Form Authentication (client ID and secret in form body)\n *\n * @generated from protobuf enum value: OAUTH2_AUTH_TYPE_FORM = 2;\n */\n FORM = 2,\n /**\n * Private Key JWT Authentication\n * client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer\n *\n * @generated from protobuf enum value: OAUTH2_AUTH_TYPE_PRIVATE_KEY_JWT = 3;\n */\n PRIVATE_KEY_JWT = 3,\n /**\n * Mutual TLS Authentication\n *\n * @generated from protobuf enum value: OAUTH2_AUTH_TYPE_MTLS = 4;\n */\n MTLS = 4,\n /**\n * SAML 2.0 Bearer Assertion for Client Authentication\n * client_assertion_type=urn:ietf:params:oauth:client-assertion-type:saml2-bearer\n *\n * @generated from protobuf enum value: OAUTH2_AUTH_TYPE_SAML2_BEARER = 5;\n */\n SAML2_BEARER = 5\n}\n// @generated message type with reflection information, may provide speed optimized methods\nclass UploadPluginRequest$Type extends MessageType<UploadPluginRequest> {\n constructor() {\n super(\"mochabugapis.adapt.plugins.v1.UploadPluginRequest\", [\n { no: 1, name: \"manifest\", kind: \"message\", oneof: \"data\", T: () => Manifest },\n { no: 2, name: \"file\", kind: \"message\", oneof: \"data\", T: () => File }\n ]);\n }\n create(value?: PartialMessage<UploadPluginRequest>): UploadPluginRequest {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.data = { oneofKind: undefined };\n if (value !== undefined)\n reflectionMergePartial<UploadPluginRequest>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: UploadPluginRequest): UploadPluginRequest {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* mochabugapis.adapt.plugins.v1.Manifest manifest */ 1:\n message.data = {\n oneofKind: \"manifest\",\n manifest: Manifest.internalBinaryRead(reader, reader.uint32(), options, (message.data as any).manifest)\n };\n break;\n case /* mochabugapis.adapt.plugins.v1.File file */ 2:\n message.data = {\n oneofKind: \"file\",\n file: File.internalBinaryRead(reader, reader.uint32(), options, (message.data as any).file)\n };\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: UploadPluginRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* mochabugapis.adapt.plugins.v1.Manifest manifest = 1; */\n if (message.data.oneofKind === \"manifest\")\n Manifest.internalBinaryWrite(message.data.manifest, writer.tag(1, WireType.LengthDelimited).fork(), options).join();\n /* mochabugapis.adapt.plugins.v1.File file = 2; */\n if (message.data.oneofKind === \"file\")\n File.internalBinaryWrite(message.data.file, writer.tag(2, WireType.LengthDelimited).fork(), options).join();\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message mochabugapis.adapt.plugins.v1.UploadPluginRequest\n */\nexport const UploadPluginRequest = new UploadPluginRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass UploadPluginResponse$Type extends MessageType<UploadPluginResponse> {\n constructor() {\n super(\"mochabugapis.adapt.plugins.v1.UploadPluginResponse\", []);\n }\n create(value?: PartialMessage<UploadPluginResponse>): UploadPluginResponse {\n const message = globalThis.Object.create((this.messagePrototype!));\n if (value !== undefined)\n reflectionMergePartial<UploadPluginResponse>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: UploadPluginResponse): UploadPluginResponse {\n return target ?? this.create();\n }\n internalBinaryWrite(message: UploadPluginResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message mochabugapis.adapt.plugins.v1.UploadPluginResponse\n */\nexport const UploadPluginResponse = new UploadPluginResponse$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass File$Type extends MessageType<File> {\n constructor() {\n super(\"mochabugapis.adapt.plugins.v1.File\", [\n { no: 1, name: \"path\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"2\", maxLen: \"4096\", pattern: \"^[^/]+(\\\\/[^/]+)*$\" } } } },\n { no: 2, name: \"data\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/, options: { \"buf.validate.field\": { bytes: { minLen: \"1\", maxLen: \"40000000\" } } } }\n ]);\n }\n create(value?: PartialMessage<File>): File {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.path = \"\";\n message.data = new Uint8Array(0);\n if (value !== undefined)\n reflectionMergePartial<File>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: File): File {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string path */ 1:\n message.path = reader.string();\n break;\n case /* bytes data */ 2:\n message.data = reader.bytes();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: File, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* string path = 1; */\n if (message.path !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.path);\n /* bytes data = 2; */\n if (message.data.length)\n writer.tag(2, WireType.LengthDelimited).bytes(message.data);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message mochabugapis.adapt.plugins.v1.File\n */\nexport const File = new File$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass Manifest$Type extends MessageType<Manifest> {\n constructor() {\n super(\"mochabugapis.adapt.plugins.v1.Manifest\", [\n { no: 1, name: \"name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"1\", maxLen: \"100\", pattern: \"^[_$a-z][_$a-z0-9]*$\" } } } },\n { no: 2, name: \"version\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"5\", maxLen: \"150\", pattern: \"^(0|[1-9]\\\\d*)\\\\.(0|[1-9]\\\\d*)\\\\.(0|[1-9]\\\\d*)(?:-((?:0|[1-9]\\\\d*|\\\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\\\.(?:0|[1-9]\\\\d*|\\\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\\\+([0-9a-zA-Z-]+(?:\\\\.[0-9a-zA-Z-]+)*))?$\" } } } },\n { no: 3, name: \"label\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"1\", maxLen: \"100\" } } } },\n { no: 4, name: \"description\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"1\", maxLen: \"250\" } } } },\n { no: 5, name: \"organization\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { uuid: true } } } },\n { no: 6, name: \"homepage\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { ignore: \"IGNORE_EMPTY\", string: { minLen: \"11\", maxLen: \"4096\", pattern: \"^https://[a-zA-Z0-9.-]+(?:\\\\.[a-zA-Z]{2,})(?:/.*)?$\" } } } },\n { no: 7, name: \"repository\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { ignore: \"IGNORE_EMPTY\", string: { minLen: \"11\", maxLen: \"4096\", pattern: \"^https://[a-zA-Z0-9.-]+(?:\\\\.[a-zA-Z]{2,})(?:/.*)?$\" } } } },\n { no: 8, name: \"bugs\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { cel: [{ id: \"valid_email_or_url\", message: \"bugs must be a valid email or URL\", expression: \"size(this) >= 2 && size(this) <= 4096 && (this.isEmail() || this.matches('^https://[a-zA-Z0-9.-]+(?:\\\\\\\\.[a-zA-Z]{2,})(?:/.*)?$'))\" }], ignore: \"IGNORE_EMPTY\" } } },\n { no: 9, name: \"author\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { ignore: \"IGNORE_EMPTY\", string: { minLen: \"1\", maxLen: \"100\" } } } },\n { no: 10, name: \"logo\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { ignore: \"IGNORE_EMPTY\", string: { minLen: \"2\", maxLen: \"4096\", pattern: \"^([^/]+(/[^/]+)*)\\\\.(gif|jpg|jpeg|jfif|pjpeg|pjp|png|svg|webp|avif)$\" } } } },\n { no: 11, name: \"executors\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"2\", maxLen: \"4096\", pattern: \"^([^/]+(/[^/]+)*)\\\\.(mjs|js)$\" } } } },\n { no: 12, name: \"configurators\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { ignore: \"IGNORE_EMPTY\", string: { minLen: \"2\", maxLen: \"4096\", pattern: \"^([^/]+(/[^/]+)*)\\\\.(mjs|js)$\" } } } },\n { no: 13, name: \"assets\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"2\", maxLen: \"4096\", pattern: \"^[^/]+(\\\\/[^/]+)*$\" } } } },\n { no: 14, name: \"cdn\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"2\", maxLen: \"4096\", pattern: \"^[^/]+(\\\\/[^/]+)*$\" } } } },\n { no: 15, name: \"vertices\", kind: \"message\", repeat: 1 /*RepeatType.PACKED*/, T: () => Vertex, options: { \"buf.validate.field\": { cel: [{ id: \"vertex_unique_names\", message: \"a name cannot appear more than once\", expression: \"this.map(vertex, vertex.name).unique()\" }], repeated: { minItems: \"1\", maxItems: \"100\" } } } },\n { no: 16, name: \"plugin_oauth2\", kind: \"message\", repeat: 1 /*RepeatType.PACKED*/, T: () => Oauth2Service, options: { \"buf.validate.field\": { cel: [{ id: \"plugin_oauth2.oauth_unique_names\", message: \"a name cannot appear more than once\", expression: \"this.map(oauth, oauth.name).unique()\" }], repeated: { minItems: \"0\", maxItems: \"20\", items: { cel: [{ id: \"plugin_oauth2.oauth2.client_id\", message: \"The client_id property must be set\", expression: \"has(this.client_id)\" }] } } } } },\n { no: 17, name: \"plugin_variables\", kind: \"message\", repeat: 1 /*RepeatType.PACKED*/, T: () => VariableService, options: { \"buf.validate.field\": { cel: [{ id: \"vars_unique_names\", message: \"a name cannot appear more than once\", expression: \"this.map(variable, variable.name).unique()\" }], repeated: { minItems: \"0\", maxItems: \"100\" } } } },\n { no: 18, name: \"plugin_mtls\", kind: \"message\", repeat: 1 /*RepeatType.PACKED*/, T: () => MTLSService, options: { \"buf.validate.field\": { cel: [{ id: \"mtls_unique_names\", message: \"a name cannot appear more than once\", expression: \"this.map(mtls, mtls.name).unique()\" }], repeated: { minItems: \"0\", maxItems: \"20\" } } } }\n ]);\n }\n create(value?: PartialMessage<Manifest>): Manifest {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.name = \"\";\n message.version = \"\";\n message.label = \"\";\n message.description = \"\";\n message.organization = \"\";\n message.executors = \"\";\n message.vertices = [];\n message.pluginOauth2 = [];\n message.pluginVariables = [];\n message.pluginMtls = [];\n if (value !== undefined)\n reflectionMergePartial<Manifest>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Manifest): Manifest {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string name */ 1:\n message.name = reader.string();\n break;\n case /* string version */ 2:\n message.version = reader.string();\n break;\n case /* string label */ 3:\n message.label = reader.string();\n break;\n case /* string description */ 4:\n message.description = reader.string();\n break;\n case /* string organization */ 5:\n message.organization = reader.string();\n break;\n case /* optional string homepage */ 6:\n message.homepage = reader.string();\n break;\n case /* optional string repository */ 7:\n message.repository = reader.string();\n break;\n case /* optional string bugs */ 8:\n message.bugs = reader.string();\n break;\n case /* optional string author */ 9:\n message.author = reader.string();\n break;\n case /* optional string logo */ 10:\n message.logo = reader.string();\n break;\n case /* string executors */ 11:\n message.executors = reader.string();\n break;\n case /* optional string configurators */ 12:\n message.configurators = reader.string();\n break;\n case /* optional string assets */ 13:\n message.assets = reader.string();\n break;\n case /* optional string cdn */ 14:\n message.cdn = reader.string();\n break;\n case /* repeated mochabugapis.adapt.plugins.v1.Vertex vertices */ 15:\n message.vertices.push(Vertex.internalBinaryRead(reader, reader.uint32(), options));\n break;\n case /* repeated mochabugapis.adapt.plugins.v1.Oauth2Service plugin_oauth2 */ 16:\n message.pluginOauth2.push(Oauth2Service.internalBinaryRead(reader, reader.uint32(), options));\n break;\n case /* repeated mochabugapis.adapt.plugins.v1.VariableService plugin_variables */ 17:\n message.pluginVariables.push(VariableService.internalBinaryRead(reader, reader.uint32(), options));\n break;\n case /* repeated mochabugapis.adapt.plugins.v1.MTLSService plugin_mtls */ 18:\n message.pluginMtls.push(MTLSService.internalBinaryRead(reader, reader.uint32(), options));\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: Manifest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* string name = 1; */\n if (message.name !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.name);\n /* string version = 2; */\n if (message.version !== \"\")\n writer.tag(2, WireType.LengthDelimited).string(message.version);\n /* string label = 3; */\n if (message.label !== \"\")\n writer.tag(3, WireType.LengthDelimited).string(message.label);\n /* string description = 4; */\n if (message.description !== \"\")\n writer.tag(4, WireType.LengthDelimited).string(message.description);\n /* string organization = 5; */\n if (message.organization !== \"\")\n writer.tag(5, WireType.LengthDelimited).string(message.organization);\n /* optional string homepage = 6; */\n if (message.homepage !== undefined)\n writer.tag(6, WireType.LengthDelimited).string(message.homepage);\n /* optional string repository = 7; */\n if (message.repository !== undefined)\n writer.tag(7, WireType.LengthDelimited).string(message.repository);\n /* optional string bugs = 8; */\n if (message.bugs !== undefined)\n writer.tag(8, WireType.LengthDelimited).string(message.bugs);\n /* optional string author = 9; */\n if (message.author !== undefined)\n writer.tag(9, WireType.LengthDelimited).string(message.author);\n /* optional string logo = 10; */\n if (message.logo !== undefined)\n writer.tag(10, WireType.LengthDelimited).string(message.logo);\n /* string executors = 11; */\n if (message.executors !== \"\")\n writer.tag(11, WireType.LengthDelimited).string(message.executors);\n /* optional string configurators = 12; */\n if (message.configurators !== undefined)\n writer.tag(12, WireType.LengthDelimited).string(message.configurators);\n /* optional string assets = 13; */\n if (message.assets !== undefined)\n writer.tag(13, WireType.LengthDelimited).string(message.assets);\n /* optional string cdn = 14; */\n if (message.cdn !== undefined)\n writer.tag(14, WireType.LengthDelimited).string(message.cdn);\n /* repeated mochabugapis.adapt.plugins.v1.Vertex vertices = 15; */\n for (let i = 0; i < message.vertices.length; i++)\n Vertex.internalBinaryWrite(message.vertices[i], writer.tag(15, WireType.LengthDelimited).fork(), options).join();\n /* repeated mochabugapis.adapt.plugins.v1.Oauth2Service plugin_oauth2 = 16; */\n for (let i = 0; i < message.pluginOauth2.length; i++)\n Oauth2Service.internalBinaryWrite(message.pluginOauth2[i], writer.tag(16, WireType.LengthDelimited).fork(), options).join();\n /* repeated mochabugapis.adapt.plugins.v1.VariableService plugin_variables = 17; */\n for (let i = 0; i < message.pluginVariables.length; i++)\n VariableService.internalBinaryWrite(message.pluginVariables[i], writer.tag(17, WireType.LengthDelimited).fork(), options).join();\n /* repeated mochabugapis.adapt.plugins.v1.MTLSService plugin_mtls = 18; */\n for (let i = 0; i < message.pluginMtls.length; i++)\n MTLSService.internalBinaryWrite(message.pluginMtls[i], writer.tag(18, WireType.LengthDelimited).fork(), options).join();\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message mochabugapis.adapt.plugins.v1.Manifest\n */\nexport const Manifest = new Manifest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass Vertex$Type extends MessageType<Vertex> {\n constructor() {\n super(\"mochabugapis.adapt.plugins.v1.Vertex\", [\n { no: 1, name: \"name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"1\", maxLen: \"100\", pattern: \"^[_$a-z][_$a-z0-9]*$\" } } } },\n { no: 2, name: \"label\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"1\", maxLen: \"100\" } } } },\n { no: 3, name: \"description\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { ignore: \"IGNORE_EMPTY\", string: { minLen: \"1\", maxLen: \"250\" } } } },\n { no: 4, name: \"logo\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { ignore: \"IGNORE_EMPTY\", string: { minLen: \"2\", maxLen: \"4096\", pattern: \"^([^/]+(/[^/]+)*)\\\\.(gif|jpg|jpeg|jfif|pjpeg|pjp|png|svg|webp|avif)$\" } } } },\n { no: 5, name: \"type\", kind: \"enum\", T: () => [\"mochabugapis.adapt.plugins.v1.Vertex.VertexType\", Vertex_VertexType, \"VERTEX_TYPE_\"], options: { \"buf.validate.field\": { enum: { notIn: [0] } } } },\n { no: 6, name: \"config\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"5\", maxLen: \"4096\", pattern: \"^([^/]+(/[^/]+)*)\" } } } },\n { no: 7, name: \"metadata\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"5\", maxLen: \"4096\", pattern: \"^([^/]+(/[^/]+)*)\\\\.json$\" } } } },\n { no: 8, name: \"configurator\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ },\n { no: 9, name: \"variables\", kind: \"message\", repeat: 1 /*RepeatType.PACKED*/, T: () => VariableService, options: { \"buf.validate.field\": { cel: [{ id: \"vars_unique_names\", message: \"a name cannot appear more than once\", expression: \"this.map(variable, variable.name).unique()\" }], repeated: { minItems: \"0\", maxItems: \"100\" } } } },\n { no: 10, name: \"mtls\", kind: \"message\", repeat: 1 /*RepeatType.PACKED*/, T: () => MTLSService, options: { \"buf.validate.field\": { cel: [{ id: \"mtls_unique_names\", message: \"a name cannot appear more than once\", expression: \"this.map(mtls, mtls.name).unique()\" }], repeated: { minItems: \"0\", maxItems: \"100\" } } } },\n { no: 11, name: \"code_oauth2\", kind: \"message\", repeat: 1 /*RepeatType.PACKED*/, T: () => Oauth2CodeBinding, options: { \"buf.validate.field\": { cel: [{ id: \"vertex.code_oauth2.unique_names\", message: \"a name cannot appear more than once\", expression: \"this.map(oauth, oauth.name).unique()\" }], repeated: { minItems: \"0\", maxItems: \"20\" } } } },\n { no: 12, name: \"oauth2\", kind: \"message\", repeat: 1 /*RepeatType.PACKED*/, T: () => Oauth2Service, options: { \"buf.validate.field\": { cel: [{ id: \"vertex.oauth2.unique_names\", message: \"a name cannot appear more than once\", expression: \"this.map(oauth, oauth.name).unique()\" }], repeated: { minItems: \"0\", maxItems: \"20\", items: { cel: [{ id: \"vertex.oauth2.client_id_and_code\", message: \"The client_id and the code property may not be set as well as the code grant type\", expression: \"!has(this.client_id) && !has(this.code) && this.grant_type != 1\" }] } } } } }\n ], { \"buf.validate.message\": { cel: [{ id: \"vertex.oauth2_and_code_bindings\", message: \"The names of the oauth2 services and the code bindings must be unique\", expression: \"(this.oauth2.map(val, val.name) + this.code_oauth2.map(val, val.name)).unique()\" }] } });\n }\n create(value?: PartialMessage<Vertex>): Vertex {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.name = \"\";\n message.label = \"\";\n message.type = 0;\n message.metadata = \"\";\n message.configurator = false;\n message.variables = [];\n message.mtls = [];\n message.codeOauth2 = [];\n message.oauth2 = [];\n if (value !== undefined)\n reflectionMergePartial<Vertex>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Vertex): Vertex {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string name */ 1:\n message.name = reader.string();\n break;\n case /* string label */ 2:\n message.label = reader.string();\n break;\n case /* optional string description */ 3:\n message.description = reader.string();\n break;\n case /* optional string logo */ 4:\n message.logo = reader.string();\n break;\n case /* mochabugapis.adapt.plugins.v1.Vertex.VertexType type */ 5:\n message.type = reader.int32();\n break;\n case /* optional string config */ 6:\n message.config = reader.string();\n break;\n case /* string metadata */ 7:\n message.metadata = reader.string();\n break;\n case /* bool configurator */ 8:\n message.configurator = reader.bool();\n break;\n case /* repeated mochabugapis.adapt.plugins.v1.VariableService variables */ 9:\n message.variables.push(VariableService.internalBinaryRead(reader, reader.uint32(), options));\n break;\n case /* repeated mochabugapis.adapt.plugins.v1.MTLSService mtls */ 10:\n message.mtls.push(MTLSService.internalBinaryRead(reader, reader.uint32(), options));\n break;\n case /* repeated mochabugapis.adapt.plugins.v1.Oauth2CodeBinding code_oauth2 */ 11:\n message.codeOauth2.push(Oauth2CodeBinding.internalBinaryRead(reader, reader.uint32(), options));\n break;\n case /* repeated mochabugapis.adapt.plugins.v1.Oauth2Service oauth2 */ 12:\n message.oauth2.push(Oauth2Service.internalBinaryRead(reader, reader.uint32(), options));\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: Vertex, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* string name = 1; */\n if (message.name !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.name);\n /* string label = 2; */\n if (message.label !== \"\")\n writer.tag(2, WireType.LengthDelimited).string(message.label);\n /* optional string description = 3; */\n if (message.description !== undefined)\n writer.tag(3, WireType.LengthDelimited).string(message.description);\n /* optional string logo = 4; */\n if (message.logo !== undefined)\n writer.tag(4, WireType.LengthDelimited).string(message.logo);\n /* mochabugapis.adapt.plugins.v1.Vertex.VertexType type = 5; */\n if (message.type !== 0)\n writer.tag(5, WireType.Varint).int32(message.type);\n /* optional string config = 6; */\n if (message.config !== undefined)\n writer.tag(6, WireType.LengthDelimited).string(message.config);\n /* string metadata = 7; */\n if (message.metadata !== \"\")\n writer.tag(7, WireType.LengthDelimited).string(message.metadata);\n /* bool configurator = 8; */\n if (message.configurator !== false)\n writer.tag(8, WireType.Varint).bool(message.configurator);\n /* repeated mochabugapis.adapt.plugins.v1.VariableService variables = 9; */\n for (let i = 0; i < message.variables.length; i++)\n VariableService.internalBinaryWrite(message.variables[i], writer.tag(9, WireType.LengthDelimited).fork(), options).join();\n /* repeated mochabugapis.adapt.plugins.v1.MTLSService mtls = 10; */\n for (let i = 0; i < message.mtls.length; i++)\n MTLSService.internalBinaryWrite(message.mtls[i], writer.tag(10, WireType.LengthDelimited).fork(), options).join();\n /* repeated mochabugapis.adapt.plugins.v1.Oauth2CodeBinding code_oauth2 = 11; */\n for (let i = 0; i < message.codeOauth2.length; i++)\n Oauth2CodeBinding.internalBinaryWrite(message.codeOauth2[i], writer.tag(11, WireType.LengthDelimited).fork(), options).join();\n /* repeated mochabugapis.adapt.plugins.v1.Oauth2Service oauth2 = 12; */\n for (let i = 0; i < message.oauth2.length; i++)\n Oauth2Service.internalBinaryWrite(message.oauth2[i], writer.tag(12, WireType.LengthDelimited).fork(), options).join();\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message mochabugapis.adapt.plugins.v1.Vertex\n */\nexport const Vertex = new Vertex$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass MTLSService$Type extends MessageType<MTLSService> {\n constructor() {\n super(\"mochabugapis.adapt.plugins.v1.MTLSService\", [\n { no: 1, name: \"name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"1\", maxLen: \"100\", pattern: \"^[_$a-z][_$a-z0-9]*$\" } } } },\n { no: 2, name: \"label\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { ignore: \"IGNORE_EMPTY\", string: { minLen: \"1\", maxLen: \"100\" } } } },\n { no: 3, name: \"description\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { ignore: \"IGNORE_EMPTY\", string: { minLen: \"1\", maxLen: \"250\" } } } },\n { no: 4, name: \"optional\", kind: \"scalar\", opt: true, T: 8 /*ScalarType.BOOL*/ }\n ]);\n }\n create(value?: PartialMessage<MTLSService>): MTLSService {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.name = \"\";\n if (value !== undefined)\n reflectionMergePartial<MTLSService>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: MTLSService): MTLSService {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string name */ 1:\n message.name = reader.string();\n break;\n case /* optional string label */ 2:\n message.label = reader.string();\n break;\n case /* optional string description */ 3:\n message.description = reader.string();\n break;\n case /* optional bool optional */ 4:\n message.optional = reader.bool();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: MTLSService, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* string name = 1; */\n if (message.name !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.name);\n /* optional string label = 2; */\n if (message.label !== undefined)\n writer.tag(2, WireType.LengthDelimited).string(message.label);\n /* optional string description = 3; */\n if (message.description !== undefined)\n writer.tag(3, WireType.LengthDelimited).string(message.description);\n /* optional bool optional = 4; */\n if (message.optional !== undefined)\n writer.tag(4, WireType.Varint).bool(message.optional);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message mochabugapis.adapt.plugins.v1.MTLSService\n */\nexport const MTLSService = new MTLSService$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass VariableService$Type extends MessageType<VariableService> {\n constructor() {\n super(\"mochabugapis.adapt.plugins.v1.VariableService\", [\n { no: 1, name: \"name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"1\", maxLen: \"100\", pattern: \"^[_$a-z][_$a-z0-9]*$\" } } } },\n { no: 2, name: \"label\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"1\", maxLen: \"100\" } } } },\n { no: 3, name: \"description\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { ignore: \"IGNORE_EMPTY\", string: { minLen: \"1\", maxLen: \"250\" } } } },\n { no: 4, name: \"type\", kind: \"enum\", T: () => [\"mochabugapis.adapt.plugins.v1.VariableService.Type\", VariableService_Type, \"TYPE_\"], options: { \"buf.validate.field\": { enum: { notIn: [0] } } } },\n { no: 5, name: \"optional\", kind: \"scalar\", opt: true, T: 8 /*ScalarType.BOOL*/ }\n ]);\n }\n create(value?: PartialMessage<VariableService>): VariableService {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.name = \"\";\n message.type = 0;\n if (value !== undefined)\n reflectionMergePartial<VariableService>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: VariableService): VariableService {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string name */ 1:\n message.name = reader.string();\n break;\n case /* optional string label */ 2:\n message.label = reader.string();\n break;\n case /* optional string description */ 3:\n message.description = reader.string();\n break;\n case /* mochabugapis.adapt.plugins.v1.VariableService.Type type */ 4:\n message.type = reader.int32();\n break;\n case /* optional bool optional */ 5:\n message.optional = reader.bool();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: VariableService, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* string name = 1; */\n if (message.name !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.name);\n /* optional string label = 2; */\n if (message.label !== undefined)\n writer.tag(2, WireType.LengthDelimited).string(message.label);\n /* optional string description = 3; */\n if (message.description !== undefined)\n writer.tag(3, WireType.LengthDelimited).string(message.description);\n /* mochabugapis.adapt.plugins.v1.VariableService.Type type = 4; */\n if (message.type !== 0)\n writer.tag(4, WireType.Varint).int32(message.type);\n /* optional bool optional = 5; */\n if (message.optional !== undefined)\n writer.tag(5, WireType.Varint).bool(message.optional);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message mochabugapis.adapt.plugins.v1.VariableService\n */\nexport const VariableService = new VariableService$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass Oauth2Service$Type extends MessageType<Oauth2Service> {\n constructor() {\n super(\"mochabugapis.adapt.plugins.v1.Oauth2Service\", [\n { no: 1, name: \"name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"1\", maxLen: \"100\", pattern: \"^[_$a-z][_$a-z0-9]*$\" } } } },\n { no: 2, name: \"label\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { ignore: \"IGNORE_EMPTY\", string: { minLen: \"1\", maxLen: \"100\" } } } },\n { no: 3, name: \"description\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { ignore: \"IGNORE_EMPTY\", string: { minLen: \"1\", maxLen: \"250\" } } } },\n { no: 4, name: \"grant_type\", kind: \"enum\", T: () => [\"mochabugapis.adapt.plugins.v1.Oauth2GrantType\", Oauth2GrantType, \"OAUTH2_GRANT_TYPE_\"], options: { \"buf.validate.field\": { enum: { notIn: [0] } } } },\n { no: 5, name: \"scopes\", kind: \"scalar\", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { repeated: { minItems: \"1\", maxItems: \"500\", unique: true, items: { string: { minLen: \"1\", maxLen: \"100\" } } } } } },\n { no: 6, name: \"auth_method\", kind: \"enum\", opt: true, T: () => [\"mochabugapis.adapt.plugins.v1.Oauth2AuthType\", Oauth2AuthType, \"OAUTH2_AUTH_TYPE_\"], options: { \"buf.validate.field\": { ignore: \"IGNORE_EMPTY\", enum: { notIn: [0] } } } },\n { no: 7, name: \"alg\", kind: \"enum\", opt: true, T: () => [\"mochabugapis.adapt.plugins.v1.PrivateKeyAlg\", PrivateKeyAlg, \"PRIVATE_KEY_ALG_\"], options: { \"buf.validate.field\": { ignore: \"IGNORE_EMPTY\", enum: { notIn: [0] } } } },\n { no: 8, name: \"client_id\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { ignore: \"IGNORE_EMPTY\", string: { minLen: \"1\", maxLen: \"250\" } } } },\n { no: 9, name: \"token_endpoint\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"11\", maxLen: \"4096\", pattern: \"^https://[a-zA-Z0-9.-]+(?:\\\\.[a-zA-Z]{2,})(?:/.*)?$\" } } } },\n { no: 10, name: \"code\", kind: \"message\", T: () => Oauth2Code },\n { no: 11, name: \"optional\", kind: \"scalar\", opt: true, T: 8 /*ScalarType.BOOL*/ }\n ], { \"buf.validate.message\": { cel: [{ id: \"oauth2.auth_method\", message: \"The auth_method property must be set in case of grant_type OAUTH2_GRANT_TYPE_AUTHORIZATION_CODE or OAUTH2_GRANT_TYPE_CLIENT_CREDENTIALS\", expression: \"has(this.auth_method) == (this.grant_type == 1 || this.grant_type == 2)\" }, { id: \"oauth2.alg\", message: \"The alg property must be set in case of grant_type OAUTH2_GRANT_TYPE_JWT_BEARER, OAUTH2_GRANT_TYPE_SAML2_BEARER or auth_method OAUTH2_AUTH_TYPE_PRIVATE_KEY_JWT, OAUTH2_AUTH_TYPE_SAML2_BEARER\", expression: \"has(this.alg) == (this.grant_type == 3 || this.grant_type == 4 || this.auth_method == 3 || this.auth_method == 5)\" }, { id: \"oauth2.code\", message: \"The code property must be set in case of grant_type OAUTH2_GRANT_TYPE_AUTHORIZATION_CODE\", expression: \"has(this.code) == (this.grant_type == 1)\" }, { id: \"oauth2.optional\", message: \"The optional property cannot be set to true in case of grant_type OAUTH2_GRANT_TYPE_AUTHORIZATION_CODE\", expression: \"!has(this.optional) || this.grant_type != 1 || (!this.optional && this.grant_type == 1)\" }] } });\n }\n create(value?: PartialMessage<Oauth2Service>): Oauth2Service {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.name = \"\";\n message.grantType = 0;\n message.scopes = [];\n message.tokenEndpoint = \"\";\n if (value !== undefined)\n reflectionMergePartial<Oauth2Service>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Oauth2Service): Oauth2Service {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string name */ 1:\n message.name = reader.string();\n break;\n case /* optional string label */ 2:\n message.label = reader.string();\n break;\n case /* optional string description */ 3:\n message.description = reader.string();\n break;\n case /* mochabugapis.adapt.plugins.v1.Oauth2GrantType grant_type */ 4:\n message.grantType = reader.int32();\n break;\n case /* repeated string scopes */ 5:\n message.scopes.push(reader.string());\n break;\n case /* optional mochabugapis.adapt.plugins.v1.Oauth2AuthType auth_method */ 6:\n message.authMethod = reader.int32();\n break;\n case /* optional mochabugapis.adapt.plugins.v1.PrivateKeyAlg alg */ 7:\n message.alg = reader.int32();\n break;\n case /* optional string client_id */ 8:\n message.clientId = reader.string();\n break;\n case /* string token_endpoint */ 9:\n message.tokenEndpoint = reader.string();\n break;\n case /* optional mochabugapis.adapt.plugins.v1.Oauth2Code code */ 10:\n message.code = Oauth2Code.internalBinaryRead(reader, reader.uint32(), options, message.code);\n break;\n case /* optional bool optional */ 11:\n message.optional = reader.bool();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: Oauth2Service, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* string name = 1; */\n if (message.name !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.name);\n /* optional string label = 2; */\n if (message.label !== undefined)\n writer.tag(2, WireType.LengthDelimited).string(message.label);\n /* optional string description = 3; */\n if (message.description !== undefined)\n writer.tag(3, WireType.LengthDelimited).string(message.description);\n /* mochabugapis.adapt.plugins.v1.Oauth2GrantType grant_type = 4; */\n if (message.grantType !== 0)\n writer.tag(4, WireType.Varint).int32(message.grantType);\n /* repeated string scopes = 5; */\n for (let i = 0; i < message.scopes.length; i++)\n writer.tag(5, WireType.LengthDelimited).string(message.scopes[i]);\n /* optional mochabugapis.adapt.plugins.v1.Oauth2AuthType auth_method = 6; */\n if (message.authMethod !== undefined)\n writer.tag(6, WireType.Varint).int32(message.authMethod);\n /* optional mochabugapis.adapt.plugins.v1.PrivateKeyAlg alg = 7; */\n if (message.alg !== undefined)\n writer.tag(7, WireType.Varint).int32(message.alg);\n /* optional string client_id = 8; */\n if (message.clientId !== undefined)\n writer.tag(8, WireType.LengthDelimited).string(message.clientId);\n /* string token_endpoint = 9; */\n if (message.tokenEndpoint !== \"\")\n writer.tag(9, WireType.LengthDelimited).string(message.tokenEndpoint);\n /* optional mochabugapis.adapt.plugins.v1.Oauth2Code code = 10; */\n if (message.code)\n Oauth2Code.internalBinaryWrite(message.code, writer.tag(10, WireType.LengthDelimited).fork(), options).join();\n /* optional bool optional = 11; */\n if (message.optional !== undefined)\n writer.tag(11, WireType.Varint).bool(message.optional);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message mochabugapis.adapt.plugins.v1.Oauth2Service\n */\nexport const Oauth2Service = new Oauth2Service$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass Oauth2CodeBinding$Type extends MessageType<Oauth2CodeBinding> {\n constructor() {\n super(\"mochabugapis.adapt.plugins.v1.Oauth2CodeBinding\", [\n { no: 1, name: \"name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"1\", maxLen: \"100\", pattern: \"^[_$a-z][_$a-z0-9]*$\" } } } },\n { no: 2, name: \"optional\", kind: \"scalar\", opt: true, T: 8 /*ScalarType.BOOL*/ }\n ]);\n }\n create(value?: PartialMessage<Oauth2CodeBinding>): Oauth2CodeBinding {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.name = \"\";\n if (value !== undefined)\n reflectionMergePartial<Oauth2CodeBinding>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Oauth2CodeBinding): Oauth2CodeBinding {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string name */ 1:\n message.name = reader.string();\n break;\n case /* optional bool optional */ 2:\n message.optional = reader.bool();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: Oauth2CodeBinding, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* string name = 1; */\n if (message.name !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.name);\n /* optional bool optional = 2; */\n if (message.optional !== undefined)\n writer.tag(2, WireType.Varint).bool(message.optional);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message mochabugapis.adapt.plugins.v1.Oauth2CodeBinding\n */\nexport const Oauth2CodeBinding = new Oauth2CodeBinding$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass Oauth2Code$Type extends MessageType<Oauth2Code> {\n constructor() {\n super(\"mochabugapis.adapt.plugins.v1.Oauth2Code\", [\n { no: 1, name: \"auth_endpoint\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"11\", maxLen: \"4096\", pattern: \"^https://[a-zA-Z0-9.-]+(?:\\\\.[a-zA-Z]{2,})(?:/.*)?$\" } } } },\n { no: 2, name: \"issuer\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"1\", maxLen: \"4096\" } } } },\n { no: 3, name: \"jwks_uri\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"11\", maxLen: \"4096\", pattern: \"^https://[a-zA-Z0-9.-]+(?:\\\\.[a-zA-Z]{2,})(?:/.*)?$\" } } } },\n { no: 4, name: \"additional_params\", kind: \"map\", K: 9 /*ScalarType.STRING*/, V: { kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }, options: { \"buf.validate.field\": { map: { minPairs: \"0\", maxPairs: \"50\", keys: { string: { minLen: \"1\", maxLen: \"250\" } }, values: { string: { minLen: \"1\", maxLen: \"250\" } } } } } },\n { no: 5, name: \"use_pkce\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ }\n ]);\n }\n create(value?: PartialMessage<Oauth2Code>): Oauth2Code {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.authEndpoint = \"\";\n message.issuer = \"\";\n message.jwksUri = \"\";\n message.additionalParams = {};\n message.usePkce = false;\n if (value !== undefined)\n reflectionMergePartial<Oauth2Code>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Oauth2Code): Oauth2Code {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string auth_endpoint */ 1:\n message.authEndpoint = reader.string();\n break;\n case /* string issuer */ 2:\n message.issuer = reader.string();\n break;\n case /* string jwks_uri */ 3:\n message.jwksUri = reader.string();\n break;\n case /* map<string, string> additional_params */ 4:\n this.binaryReadMap4(message.additionalParams, reader, options);\n break;\n case /* bool use_pkce */ 5:\n message.usePkce = reader.bool();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n private binaryReadMap4(map: Oauth2Code[\"additionalParams\"], reader: IBinaryReader, options: BinaryReadOptions): void {\n let len = reader.uint32(), end = reader.pos + len, key: keyof Oauth2Code[\"additionalParams\"] | undefined, val: Oauth2Code[\"additionalParams\"][any] | undefined;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case 1:\n key = reader.string();\n break;\n case 2:\n val = reader.string();\n break;\n default: throw new globalThis.Error(\"unknown map entry field for field mochabugapis.adapt.plugins.v1.Oauth2Code.additional_params\");\n }\n }\n map[key ?? \"\"] = val ?? \"\";\n }\n internalBinaryWrite(message: Oauth2Code, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* string auth_endpoint = 1; */\n if (message.authEndpoint !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.authEndpoint);\n /* string issuer = 2; */\n if (message.issuer !== \"\")\n writer.tag(2, WireType.LengthDelimited).string(message.issuer);\n /* string jwks_uri = 3; */\n if (message.jwksUri !== \"\")\n writer.tag(3, WireType.LengthDelimited).string(message.jwksUri);\n /* map<string, string> additional_params = 4; */\n for (let k of globalThis.Object.keys(message.additionalParams))\n writer.tag(4, WireType.LengthDelimited).fork().tag(1, WireType.LengthDelimited).string(k).tag(2, WireType.LengthDelimited).string(message.additionalParams[k]).join();\n /* bool use_pkce = 5; */\n if (message.usePkce !== false)\n writer.tag(5, WireType.Varint).bool(message.usePkce);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message mochabugapis.adapt.plugins.v1.Oauth2Code\n */\nexport const Oauth2Code = new Oauth2Code$Type();\n/**\n * @generated ServiceType for protobuf service mochabugapis.adapt.plugins.v1.PluginService\n */\nexport const PluginService = new ServiceType(\"mochabugapis.adapt.plugins.v1.PluginService\", [\n { name: \"UploadPlugin\", clientStreaming: true, options: { \"google.api.http\": { post: \"/v1/plugins/upload\", body: \"*\" } }, I: UploadPluginRequest, O: UploadPluginResponse }\n], { \"google.api.default_host\": \"adapt.mochabugapis.com\", \"google.api.oauth_scopes\": \"https://www.mochabugapis.com/auth/adapt/plugins,https://www.mochabugapis.com/auth/adapt/plugins.upload\" });\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport fs from 'fs';\nimport { mkdirp } from 'mkdirp';\nimport path from 'path';\nimport { VertexConfigMetadata } from './genproto/mochabugapis/adapt/graph/vertex_config';\nimport { execSync } from 'child_process';\nimport {\n Vertex,\n Vertex_VertexType\n} from './genproto/mochabugapis/adapt/plugins/v1/plugins';\nimport { labelize, readAsset, writeFile } from './utils';\n\nfunction convertVertexType(type: string): Vertex_VertexType {\n switch (type) {\n case 'action':\n return Vertex_VertexType.ACTION;\n case 'cron-trigger':\n return Vertex_VertexType.CRON_TRIGGER;\n case 'external-trigger':\n return Vertex_VertexType.EXTERNAL_TRIGGER;\n case 'browser':\n return Vertex_VertexType.BROWSER;\n default:\n throw new Error('The node type is invalid');\n }\n}\n\nexport function addVertex(\n cwd: string,\n name: string,\n type: string,\n hasConfigurator: boolean,\n existingVertices: Vertex[],\n frontendLib?: 'none' | 'react' | undefined\n): Vertex {\n // Create a folder with the vertex name\n const folder = path.join(cwd, 'src', 'vertices', name);\n if (fs.existsSync(folder)) {\n throw new Error(`The folder for the new vertex: ${folder} already exists`);\n }\n mkdirp.sync(folder);\n const execFile = path.join(folder, 'executor.ts');\n\n const vertex: Vertex = {\n name,\n label: labelize(name),\n description: `The better description of what ${name} is doing, the better it is for both AI and humans`,\n type: convertVertexType(type),\n metadata: path.join('src', 'vertices', name, 'metadata.json'),\n configurator: hasConfigurator,\n mtls: [],\n codeOauth2: [],\n oauth2: [],\n variables: []\n };\n\n // Write the UI if specified\n if (frontendLib === 'react') {\n execSync('npm install react react-dom @types/react @types/react-dom', {\n cwd: cwd,\n stdio: 'inherit'\n });\n const uiPath = path.join(cwd, 'src/vertices', name, 'ui');\n if (hasConfigurator) {\n writeFile(\n path.join(uiPath, 'configurator.App.tsx'),\n readAsset('configurator.App.tsx')\n );\n writeFile(\n path.join(uiPath, 'configurator.main.tsx'),\n readAsset('configurator.main.tsx')\n );\n writeFile(\n path.join(uiPath, 'configurator.ssg.tsx'),\n readAsset('configurator.ssg.tsx')\n );\n }\n if (type === 'browser') {\n writeFile(\n path.join(uiPath, 'executor.App.tsx'),\n readAsset('executor.App.tsx')\n );\n writeFile(\n path.join(uiPath, 'executor.main.tsx'),\n readAsset('executor.main.tsx')\n );\n writeFile(\n path.join(uiPath, 'executor.ssg.tsx'),\n readAsset('executor.ssg.tsx')\n );\n }\n // If the build doesn't exists since before\n if (!fs.existsSync(path.join(cwd, 'build-client.js'))) {\n writeFile(\n path.join(cwd, 'build-client.js'),\n readAsset('build-client.js')\n );\n }\n }\n\n // Write the new task\n switch (vertex.type) {\n case Vertex_VertexType.ACTION:\n writeFile(execFile, readAsset('executor_action.ts'));\n break;\n case Vertex_VertexType.BROWSER:\n if (frontendLib === 'react') {\n writeFile(\n execFile,\n readAsset('executor_browser_react.tsx').replaceAll(\n '___VERTEX_NAME___',\n name\n )\n );\n } else {\n writeFile(execFile, readAsset('executor_browser_none.ts'));\n }\n break;\n case Vertex_VertexType.EXTERNAL_TRIGGER:\n writeFile(execFile, readAsset('executor_external_trigger.ts'));\n break;\n case Vertex_VertexType.CRON_TRIGGER:\n writeFile(execFile, readAsset('executor_cron_trigger.ts'));\n break;\n default:\n throw new Error('The vertex type is invalid');\n }\n\n // Write the export file for executors\n fs.writeFileSync(\n path.join(cwd, 'src', 'executors.ts'),\n generateExport(\n [name, ...existingVertices.map((v) => v.name)],\n 'ExecutorEnvironment'\n )\n );\n\n const vertexConfig: VertexConfigMetadata = {\n complete: true,\n receivers: [\n {\n name: 'input',\n description: 'Default input receiver',\n bindings: []\n }\n ],\n transmitters: [\n {\n name: 'output',\n description: 'Default output transmitter',\n signals: [],\n failure: false\n }\n ],\n procedures: [],\n streams: []\n };\n\n // Runs every 5 seconds\n if (vertex.type === Vertex_VertexType.CRON_TRIGGER) {\n vertexConfig.cronSchedule = '/5 * * * * *';\n }\n\n if (hasConfigurator) {\n if (frontendLib === 'react') {\n writeFile(\n path.join(folder, 'configurator.ts'),\n readAsset('configurator_react.tsx').replaceAll(\n '___VERTEX_NAME___',\n name\n )\n );\n } else {\n writeFile(\n path.join(folder, 'configurator.ts'),\n readAsset('configurator_none.ts')\n );\n }\n\n // If we have a config, make sure we don't say that the config is complete by default\n vertexConfig.complete = false;\n\n // Write the export file for configurators\n fs.writeFileSync(\n path.join(cwd, 'src', 'configurators.ts'),\n generateExport(\n [\n name,\n ...existingVertices.filter((v) => v.configurator).map((v) => v.name)\n ],\n 'ConfiguratorEnvironment'\n )\n );\n }\n\n // Write the config json file\n fs.writeFileSync(\n path.join(folder, 'metadata.json'),\n VertexConfigMetadata.toJsonString(vertexConfig, { prettySpaces: 2 })\n );\n\n return vertex;\n}\n\nfunction generateExport(\n vertices: string[],\n env: 'ExecutorEnvironment' | 'ConfiguratorEnvironment'\n): string {\n const imports = vertices\n .map(\n (v) =>\n `import ${v} from './vertices/${v}/${\n env === 'ExecutorEnvironment' ? 'executor' : 'configurator'\n }';`\n )\n .join('\\n');\n\n return `/**\n * ---------------------------------------------------------------------------\n * THIS FILE IS AUTOGENERATED - DO NOT EDIT MANUALLY\n * ---------------------------------------------------------------------------\n * \n * This file was generated by the tool @mochabug/adaptkit.\n * Any modifications to this file will be overwritten the next time the\n * tool runs. To customize functionality, please adjust the source files\n * or configuration that this tool uses as input.\n *\n * Tool: @mochabug/adaptkit\n * Generated on: ${new Date().toISOString()} \n * ---------------------------------------------------------------------------\n */\nimport { selectVertex } from '@mochabug/adapt-plugin-toolkit/router';\n${imports}\n\nexport default {\n async fetch(req: Request, env: ${env}, ctx: ExecutionContext): Promise<Response> {\n return await selectVertex(req, env, ctx, { ${vertices.join(', ')} });\n },\n};`;\n}\n", "// @generated by protobuf-ts 2.9.4 with parameter client_generic,force_server_none\n// @generated from protobuf file \"mochabugapis/adapt/graph/vertex_config.proto\" (package \"mochabugapis.adapt.graph\", syntax proto3)\n// tslint:disable\n//\n// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\nimport type { BinaryWriteOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryWriter } from \"@protobuf-ts/runtime\";\nimport { WireType } from \"@protobuf-ts/runtime\";\nimport type { BinaryReadOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryReader } from \"@protobuf-ts/runtime\";\nimport { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport type { PartialMessage } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\nimport { Exchange } from \"./exchange\";\nimport { Transmitter } from \"./transmitter\";\nimport { Receiver } from \"./receiver\";\n/**\n * VertexConfigMetadata represents the configuration for a vertex, detailing its inputs,\n * outputs, and processes (such as procedures and streams).\n *\n * @generated from protobuf message mochabugapis.adapt.graph.VertexConfigMetadata\n */\nexport interface VertexConfigMetadata {\n /**\n * Indicates if the vertex configuration is complete. Defaults to 'false'.\n *\n * @generated from protobuf field: bool complete = 1;\n */\n complete: boolean;\n /**\n * Input points for the vertex. Must contain between 1 and 50 receivers,\n * each with a unique name.\n *\n * @generated from protobuf field: repeated mochabugapis.adapt.graph.Receiver receivers = 2;\n */\n receivers: Receiver[];\n /**\n * Output points for the vertex. Can contain up to 50 transmitters,\n * each with a unique name.\n *\n * @generated from protobuf field: repeated mochabugapis.adapt.graph.Transmitter transmitters = 3;\n */\n transmitters: Transmitter[];\n /**\n * Processes initiated by transmitters and responded to by receivers.\n * Limited to 10 unique procedures.\n *\n * @generated from protobuf field: repeated mochabugapis.adapt.graph.Exchange procedures = 4;\n */\n procedures: Exchange[];\n /**\n * Processes initiated by receivers, limited to 10 unique streams.\n *\n * @generated from protobuf field: repeated mochabugapis.adapt.graph.Exchange streams = 5;\n */\n streams: Exchange[];\n /**\n * A unix cron expression to determine when the task should run.\n *\n * @generated from protobuf field: optional string cron_schedule = 6;\n */\n cronSchedule?: string;\n}\n// @generated message type with reflection information, may provide speed optimized methods\nclass VertexConfigMetadata$Type extends MessageType<VertexConfigMetadata> {\n constructor() {\n super(\"mochabugapis.adapt.graph.VertexConfigMetadata\", [\n { no: 1, name: \"complete\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ },\n { no: 2, name: \"receivers\", kind: \"message\", repeat: 1 /*RepeatType.PACKED*/, T: () => Receiver, options: { \"buf.validate.field\": { cel: [{ id: \"receivers_unique_names\", message: \"Each receiver must have a unique name.\", expression: \"this.map(receiver, receiver.name).unique()\" }], repeated: { minItems: \"1\", maxItems: \"50\" } } } },\n { no: 3, name: \"transmitters\", kind: \"message\", repeat: 1 /*RepeatType.PACKED*/, T: () => Transmitter, options: { \"buf.validate.field\": { cel: [{ id: \"transmitters_unique_names\", message: \"Each transmitter must have a unique name.\", expression: \"this.map(transmitter, transmitter.name).unique()\" }], repeated: { maxItems: \"50\" } } } },\n { no: 4, name: \"procedures\", kind: \"message\", repeat: 1 /*RepeatType.PACKED*/, T: () => Exchange, options: { \"buf.validate.field\": { cel: [{ id: \"procedures_unique_names\", message: \"Each procedure must have a unique name.\", expression: \"this.map(procedure, procedure.name).unique()\" }], repeated: { maxItems: \"10\" } } } },\n { no: 5, name: \"streams\", kind: \"message\", repeat: 1 /*RepeatType.PACKED*/, T: () => Exchange, options: { \"buf.validate.field\": { cel: [{ id: \"streams_unique_names\", message: \"Each stream must have a unique name.\", expression: \"this.map(stream, stream.name).unique()\" }], repeated: { maxItems: \"10\" } } } },\n { no: 6, name: \"cron_schedule\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { ignore: \"IGNORE_DEFAULT\", string: { minLen: \"1\", maxLen: \"100\" } } } }\n ]);\n }\n create(value?: PartialMessage<VertexConfigMetadata>): VertexConfigMetadata {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.complete = false;\n message.receivers = [];\n message.transmitters = [];\n message.procedures = [];\n message.streams = [];\n if (value !== undefined)\n reflectionMergePartial<VertexConfigMetadata>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: VertexConfigMetadata): VertexConfigMetadata {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* bool complete */ 1:\n message.complete = reader.bool();\n break;\n case /* repeated mochabugapis.adapt.graph.Receiver receivers */ 2:\n message.receivers.push(Receiver.internalBinaryRead(reader, reader.uint32(), options));\n break;\n case /* repeated mochabugapis.adapt.graph.Transmitter transmitters */ 3:\n message.transmitters.push(Transmitter.internalBinaryRead(reader, reader.uint32(), options));\n break;\n case /* repeated mochabugapis.adapt.graph.Exchange procedures */ 4:\n message.procedures.push(Exchange.internalBinaryRead(reader, reader.uint32(), options));\n break;\n case /* repeated mochabugapis.adapt.graph.Exchange streams */ 5:\n message.streams.push(Exchange.internalBinaryRead(reader, reader.uint32(), options));\n break;\n case /* optional string cron_schedule */ 6:\n message.cronSchedule = reader.string();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: VertexConfigMetadata, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* bool complete = 1; */\n if (message.complete !== false)\n writer.tag(1, WireType.Varint).bool(message.complete);\n /* repeated mochabugapis.adapt.graph.Receiver receivers = 2; */\n for (let i = 0; i < message.receivers.length; i++)\n Receiver.internalBinaryWrite(message.receivers[i], writer.tag(2, WireType.LengthDelimited).fork(), options).join();\n /* repeated mochabugapis.adapt.graph.Transmitter transmitters = 3; */\n for (let i = 0; i < message.transmitters.length; i++)\n Transmitter.internalBinaryWrite(message.transmitters[i], writer.tag(3, WireType.LengthDelimited).fork(), options).join();\n /* repeated mochabugapis.adapt.graph.Exchange procedures = 4; */\n for (let i = 0; i < message.procedures.length; i++)\n Exchange.internalBinaryWrite(message.procedures[i], writer.tag(4, WireType.LengthDelimited).fork(), options).join();\n /* repeated mochabugapis.adapt.graph.Exchange streams = 5; */\n for (let i = 0; i < message.streams.length; i++)\n Exchange.internalBinaryWrite(message.streams[i], writer.tag(5, WireType.LengthDelimited).fork(), options).join();\n /* optional string cron_schedule = 6; */\n if (message.cronSchedule !== undefined)\n writer.tag(6, WireType.LengthDelimited).string(message.cronSchedule);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message mochabugapis.adapt.graph.VertexConfigMetadata\n */\nexport const VertexConfigMetadata = new VertexConfigMetadata$Type();\n", "// @generated by protobuf-ts 2.9.4 with parameter client_generic,force_server_none\n// @generated from protobuf file \"mochabugapis/adapt/graph/exchange.proto\" (package \"mochabugapis.adapt.graph\", syntax proto3)\n// tslint:disable\n//\n// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\nimport type { BinaryWriteOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryWriter } from \"@protobuf-ts/runtime\";\nimport { WireType } from \"@protobuf-ts/runtime\";\nimport type { BinaryReadOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryReader } from \"@protobuf-ts/runtime\";\nimport { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport type { PartialMessage } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\nimport { Transceiver } from \"./transceiver\";\n/**\n * Exchange represents a communication setup involving both transmitters and receivers.\n *\n * @generated from protobuf message mochabugapis.adapt.graph.Exchange\n */\nexport interface Exchange {\n /**\n * Identifier for the exchange, following the ECMA naming pattern, limited to 50 characters.\n *\n * @generated from protobuf field: string name = 1;\n */\n name: string;\n /**\n * Optional descriptive text for the exchange, up to 250 characters.\n *\n * @generated from protobuf field: optional string description = 2;\n */\n description?: string;\n /**\n * Outputs involved in the exchange, limited to 10 unique transmitters.\n *\n * @generated from protobuf field: repeated mochabugapis.adapt.graph.Transceiver transmitters = 3;\n */\n transmitters: Transceiver[];\n /**\n * Inputs involved in the exchange, requiring between 1 and 10 unique receivers.\n *\n * @generated from protobuf field: repeated mochabugapis.adapt.graph.Transceiver receivers = 4;\n */\n receivers: Transceiver[];\n}\n// @generated message type with reflection information, may provide speed optimized methods\nclass Exchange$Type extends MessageType<Exchange> {\n constructor() {\n super(\"mochabugapis.adapt.graph.Exchange\", [\n { no: 1, name: \"name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"1\", maxLen: \"50\", pattern: \"^[_$a-z][_$a-z0-9]*$\" } } } },\n { no: 2, name: \"description\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { maxLen: \"250\" } } } },\n { no: 3, name: \"transmitters\", kind: \"message\", repeat: 1 /*RepeatType.PACKED*/, T: () => Transceiver, options: { \"buf.validate.field\": { cel: [{ id: \"transmitters_unique_names\", message: \"Each transmitter must have a unique name.\", expression: \"this.map(transmitter, transmitter.name).unique()\" }], repeated: { maxItems: \"10\" } } } },\n { no: 4, name: \"receivers\", kind: \"message\", repeat: 1 /*RepeatType.PACKED*/, T: () => Transceiver, options: { \"buf.validate.field\": { cel: [{ id: \"receivers_unique_names\", message: \"Each receiver must have a unique name.\", expression: \"this.map(receiver, receiver.name).unique()\" }], repeated: { minItems: \"1\", maxItems: \"10\" } } } }\n ]);\n }\n create(value?: PartialMessage<Exchange>): Exchange {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.name = \"\";\n message.transmitters = [];\n message.receivers = [];\n if (value !== undefined)\n reflectionMergePartial<Exchange>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Exchange): Exchange {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string name */ 1:\n message.name = reader.string();\n break;\n case /* optional string description */ 2:\n message.description = reader.string();\n break;\n case /* repeated mochabugapis.adapt.graph.Transceiver transmitters */ 3:\n message.transmitters.push(Transceiver.internalBinaryRead(reader, reader.uint32(), options));\n break;\n case /* repeated mochabugapis.adapt.graph.Transceiver receivers */ 4:\n message.receivers.push(Transceiver.internalBinaryRead(reader, reader.uint32(), options));\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: Exchange, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* string name = 1; */\n if (message.name !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.name);\n /* optional string description = 2; */\n if (message.description !== undefined)\n writer.tag(2, WireType.LengthDelimited).string(message.description);\n /* repeated mochabugapis.adapt.graph.Transceiver transmitters = 3; */\n for (let i = 0; i < message.transmitters.length; i++)\n Transceiver.internalBinaryWrite(message.transmitters[i], writer.tag(3, WireType.LengthDelimited).fork(), options).join();\n /* repeated mochabugapis.adapt.graph.Transceiver receivers = 4; */\n for (let i = 0; i < message.receivers.length; i++)\n Transceiver.internalBinaryWrite(message.receivers[i], writer.tag(4, WireType.LengthDelimited).fork(), options).join();\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message mochabugapis.adapt.graph.Exchange\n */\nexport const Exchange = new Exchange$Type();\n", "// @generated by protobuf-ts 2.9.4 with parameter client_generic,force_server_none\n// @generated from protobuf file \"mochabugapis/adapt/graph/transceiver.proto\" (package \"mochabugapis.adapt.graph\", syntax proto3)\n// tslint:disable\n//\n// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\nimport type { BinaryWriteOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryWriter } from \"@protobuf-ts/runtime\";\nimport { WireType } from \"@protobuf-ts/runtime\";\nimport type { BinaryReadOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryReader } from \"@protobuf-ts/runtime\";\nimport { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport type { PartialMessage } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\nimport { SignalDescriptor } from \"./signal_descriptor\";\n/**\n * Transceiver is a dual-purpose entity capable of both emitting and receiving signals.\n *\n * @generated from protobuf message mochabugapis.adapt.graph.Transceiver\n */\nexport interface Transceiver {\n /**\n * Identifier for the transceiver, following the ECMA naming pattern, limited to 50 characters.\n *\n * @generated from protobuf field: string name = 1;\n */\n name: string;\n /**\n * Optional descriptive text for the transceiver's purpose, up to 250 characters.\n *\n * @generated from protobuf field: optional string description = 2;\n */\n description?: string;\n /**\n * List of signals the transceiver handles. Can contain up to 512 unique signals.\n *\n * @generated from protobuf field: repeated mochabugapis.adapt.graph.SignalDescriptor signals = 3;\n */\n signals: SignalDescriptor[];\n}\n// @generated message type with reflection information, may provide speed optimized methods\nclass Transceiver$Type extends MessageType<Transceiver> {\n constructor() {\n super(\"mochabugapis.adapt.graph.Transceiver\", [\n { no: 1, name: \"name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"1\", maxLen: \"50\", pattern: \"^[_$a-z][_$a-z0-9]*$\" } } } },\n { no: 2, name: \"description\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { maxLen: \"250\" } } } },\n { no: 3, name: \"signals\", kind: \"message\", repeat: 1 /*RepeatType.PACKED*/, T: () => SignalDescriptor, options: { \"buf.validate.field\": { cel: [{ id: \"signals_unique_names\", message: \"Each signal must have a unique name.\", expression: \"this.map(signal, signal.name).unique()\" }], repeated: { maxItems: \"512\" } } } }\n ]);\n }\n create(value?: PartialMessage<Transceiver>): Transceiver {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.name = \"\";\n message.signals = [];\n if (value !== undefined)\n reflectionMergePartial<Transceiver>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Transceiver): Transceiver {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string name */ 1:\n message.name = reader.string();\n break;\n case /* optional string description */ 2:\n message.description = reader.string();\n break;\n case /* repeated mochabugapis.adapt.graph.SignalDescriptor signals */ 3:\n message.signals.push(SignalDescriptor.internalBinaryRead(reader, reader.uint32(), options));\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: Transceiver, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* string name = 1; */\n if (message.name !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.name);\n /* optional string description = 2; */\n if (message.description !== undefined)\n writer.tag(2, WireType.LengthDelimited).string(message.description);\n /* repeated mochabugapis.adapt.graph.SignalDescriptor signals = 3; */\n for (let i = 0; i < message.signals.length; i++)\n SignalDescriptor.internalBinaryWrite(message.signals[i], writer.tag(3, WireType.LengthDelimited).fork(), options).join();\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message mochabugapis.adapt.graph.Transceiver\n */\nexport const Transceiver = new Transceiver$Type();\n", "// @generated by protobuf-ts 2.9.4 with parameter client_generic,force_server_none\n// @generated from protobuf file \"mochabugapis/adapt/graph/signal_descriptor.proto\" (package \"mochabugapis.adapt.graph\", syntax proto3)\n// tslint:disable\n//\n// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\nimport type { BinaryWriteOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryWriter } from \"@protobuf-ts/runtime\";\nimport { WireType } from \"@protobuf-ts/runtime\";\nimport type { BinaryReadOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryReader } from \"@protobuf-ts/runtime\";\nimport { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport type { PartialMessage } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\nimport { JTDSchema } from \"./jtd_schema\";\n/**\n * SignalDescriptor defines the properties of a signal without containing the actual signal data.\n *\n * @generated from protobuf message mochabugapis.adapt.graph.SignalDescriptor\n */\nexport interface SignalDescriptor {\n /**\n * Identifier for the signal, following the ECMA naming pattern, limited to 50 characters.\n *\n * @generated from protobuf field: string name = 1;\n */\n name: string;\n /**\n * Optional label for the signal, up to 50 characters.\n *\n * @generated from protobuf field: optional string label = 5;\n */\n label?: string;\n /**\n * Optional descriptive text for the signal, up to 250 characters.\n *\n * @generated from protobuf field: optional string description = 2;\n */\n description?: string;\n /**\n * Schema definition for the signal, required and must follow the JTD definition found here: https://www.rfc-editor.org/rfc/rfc8927.\n *\n * @generated from protobuf field: mochabugapis.adapt.graph.JTDSchema schema = 3;\n */\n schema?: JTDSchema;\n /**\n * Flag indicating if the signal is optional.\n *\n * @generated from protobuf field: optional bool optional = 4;\n */\n optional?: boolean;\n}\n// @generated message type with reflection information, may provide speed optimized methods\nclass SignalDescriptor$Type extends MessageType<SignalDescriptor> {\n constructor() {\n super(\"mochabugapis.adapt.graph.SignalDescriptor\", [\n { no: 1, name: \"name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"1\", maxLen: \"50\", pattern: \"^[_$a-z][_$a-z0-9]*$\" } } } },\n { no: 5, name: \"label\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { maxLen: \"50\" } } } },\n { no: 2, name: \"description\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { maxLen: \"250\" } } } },\n { no: 3, name: \"schema\", kind: \"message\", T: () => JTDSchema, options: { \"buf.validate.field\": { required: true } } },\n { no: 4, name: \"optional\", kind: \"scalar\", opt: true, T: 8 /*ScalarType.BOOL*/ }\n ]);\n }\n create(value?: PartialMessage<SignalDescriptor>): SignalDescriptor {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.name = \"\";\n if (value !== undefined)\n reflectionMergePartial<SignalDescriptor>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: SignalDescriptor): SignalDescriptor {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string name */ 1:\n message.name = reader.string();\n break;\n case /* optional string label */ 5:\n message.label = reader.string();\n break;\n case /* optional string description */ 2:\n message.description = reader.string();\n break;\n case /* mochabugapis.adapt.graph.JTDSchema schema */ 3:\n message.schema = JTDSchema.internalBinaryRead(reader, reader.uint32(), options, message.schema);\n break;\n case /* optional bool optional */ 4:\n message.optional = reader.bool();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: SignalDescriptor, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* string name = 1; */\n if (message.name !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.name);\n /* optional string label = 5; */\n if (message.label !== undefined)\n writer.tag(5, WireType.LengthDelimited).string(message.label);\n /* optional string description = 2; */\n if (message.description !== undefined)\n writer.tag(2, WireType.LengthDelimited).string(message.description);\n /* mochabugapis.adapt.graph.JTDSchema schema = 3; */\n if (message.schema)\n JTDSchema.internalBinaryWrite(message.schema, writer.tag(3, WireType.LengthDelimited).fork(), options).join();\n /* optional bool optional = 4; */\n if (message.optional !== undefined)\n writer.tag(4, WireType.Varint).bool(message.optional);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message mochabugapis.adapt.graph.SignalDescriptor\n */\nexport const SignalDescriptor = new SignalDescriptor$Type();\n", "// @generated by protobuf-ts 2.9.4 with parameter client_generic,force_server_none\n// @generated from protobuf file \"mochabugapis/adapt/graph/jtd_schema.proto\" (package \"mochabugapis.adapt.graph\", syntax proto3)\n// tslint:disable\n//\n// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\nimport type { BinaryWriteOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryWriter } from \"@protobuf-ts/runtime\";\nimport { WireType } from \"@protobuf-ts/runtime\";\nimport type { BinaryReadOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryReader } from \"@protobuf-ts/runtime\";\nimport { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport type { PartialMessage } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\nimport { Struct } from \"../../../google/protobuf/struct\";\n/**\n * Schema represents a JSON Typedef Schema.\n *\n * @generated from protobuf message mochabugapis.adapt.graph.JTDSchema\n */\nexport interface JTDSchema {\n /**\n * The definitions keyword MUST be an object where each value is a schema.\n * This object defines a collection of schema definitions that can be referenced via the ref keyword.\n *\n * @generated from protobuf field: map<string, mochabugapis.adapt.graph.JTDSchema> definitions = 1;\n */\n definitions: {\n [key: string]: JTDSchema;\n };\n /**\n * The metadata keyword MUST be an object.\n * This object is ignored during validation and can store custom information about the schema.\n *\n * @generated from protobuf field: optional google.protobuf.Struct metadata = 2;\n */\n metadata?: Struct;\n /**\n * The nullable keyword MUST be a boolean.\n * If true, the schema matches the value null as well as any value matched by the rest of the schema.\n *\n * @generated from protobuf field: optional bool nullable = 3;\n */\n nullable?: boolean;\n /**\n * The ref keyword MUST be a string.\n * It is a reference to a schema defined in the definitions object.\n *\n * @generated from protobuf field: optional string ref = 4;\n */\n ref?: string;\n /**\n * The type keyword MUST be one of the predefined strings specifying the type of the value.\n * Valid values are: \"boolean\", \"float32\", \"float64\", \"int8\", \"uint8\", \"int16\", \"uint16\", \"int32\", \"uint32\", \"string\", \"timestamp\".\n *\n * @generated from protobuf field: optional string type = 5;\n */\n type?: string;\n /**\n * The enum keyword MUST be a non-empty array of strings.\n * The schema matches any value that is equal to one of the elements in the array.\n *\n * @generated from protobuf field: repeated string enum = 6;\n */\n enum: string[];\n /**\n * The elements keyword MUST be a schema.\n * It is used to validate elements in an array.\n *\n * @generated from protobuf field: optional mochabugapis.adapt.graph.JTDSchema elements = 7;\n */\n elements?: JTDSchema;\n /**\n * The properties keyword MUST be an object where each value is a schema.\n * Each key is a required property that must match the corresponding schema.\n *\n * @generated from protobuf field: map<string, mochabugapis.adapt.graph.JTDSchema> properties = 8;\n */\n properties: {\n [key: string]: JTDSchema;\n };\n /**\n * The optional_properties keyword MUST be an object where each value is a schema.\n * Each key is an optional property that, if present, must match the corresponding schema.\n *\n * @generated from protobuf field: map<string, mochabugapis.adapt.graph.JTDSchema> optional_properties = 9;\n */\n optionalProperties: {\n [key: string]: JTDSchema;\n };\n /**\n * The additional_properties keyword MUST be a boolean.\n * If true, the object may have properties other than those specified in properties and optionalProperties.\n *\n * @generated from protobuf field: optional bool additional_properties = 10;\n */\n additionalProperties?: boolean;\n /**\n * The values keyword MUST be a schema.\n * It is used to validate the values in an object.\n *\n * @generated from protobuf field: optional mochabugapis.adapt.graph.JTDSchema values = 11;\n */\n values?: JTDSchema;\n /**\n * The discriminator keyword MUST be a string.\n * It is used with mapping to represent tagged unions.\n *\n * @generated from protobuf field: optional string discriminator = 12;\n */\n discriminator?: string;\n /**\n * The mapping keyword MUST be an object where each value is a schema.\n * Used with discriminator for tagged unions, mapping discriminator values to schemas.\n *\n * @generated from protobuf field: map<string, mochabugapis.adapt.graph.JTDSchema> mapping = 13;\n */\n mapping: {\n [key: string]: JTDSchema;\n };\n}\n// @generated message type with reflection information, may provide speed optimized methods\nclass JTDSchema$Type extends MessageType<JTDSchema> {\n constructor() {\n super(\"mochabugapis.adapt.graph.JTDSchema\", [\n { no: 1, name: \"definitions\", kind: \"map\", K: 9 /*ScalarType.STRING*/, V: { kind: \"message\", T: () => JTDSchema } },\n { no: 2, name: \"metadata\", kind: \"message\", T: () => Struct },\n { no: 3, name: \"nullable\", kind: \"scalar\", opt: true, T: 8 /*ScalarType.BOOL*/ },\n { no: 4, name: \"ref\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/ },\n { no: 5, name: \"type\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/ },\n { no: 6, name: \"enum\", kind: \"scalar\", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ },\n { no: 7, name: \"elements\", kind: \"message\", T: () => JTDSchema },\n { no: 8, name: \"properties\", kind: \"map\", K: 9 /*ScalarType.STRING*/, V: { kind: \"message\", T: () => JTDSchema } },\n { no: 9, name: \"optional_properties\", kind: \"map\", K: 9 /*ScalarType.STRING*/, V: { kind: \"message\", T: () => JTDSchema } },\n { no: 10, name: \"additional_properties\", kind: \"scalar\", opt: true, T: 8 /*ScalarType.BOOL*/ },\n { no: 11, name: \"values\", kind: \"message\", T: () => JTDSchema },\n { no: 12, name: \"discriminator\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/ },\n { no: 13, name: \"mapping\", kind: \"map\", K: 9 /*ScalarType.STRING*/, V: { kind: \"message\", T: () => JTDSchema } }\n ]);\n }\n create(value?: PartialMessage<JTDSchema>): JTDSchema {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.definitions = {};\n message.enum = [];\n message.properties = {};\n message.optionalProperties = {};\n message.mapping = {};\n if (value !== undefined)\n reflectionMergePartial<JTDSchema>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: JTDSchema): JTDSchema {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* map<string, mochabugapis.adapt.graph.JTDSchema> definitions */ 1:\n this.binaryReadMap1(message.definitions, reader, options);\n break;\n case /* optional google.protobuf.Struct metadata */ 2:\n message.metadata = Struct.internalBinaryRead(reader, reader.uint32(), options, message.metadata);\n break;\n case /* optional bool nullable */ 3:\n message.nullable = reader.bool();\n break;\n case /* optional string ref */ 4:\n message.ref = reader.string();\n break;\n case /* optional string type */ 5:\n message.type = reader.string();\n break;\n case /* repeated string enum */ 6:\n message.enum.push(reader.string());\n break;\n case /* optional mochabugapis.adapt.graph.JTDSchema elements */ 7:\n message.elements = JTDSchema.internalBinaryRead(reader, reader.uint32(), options, message.elements);\n break;\n case /* map<string, mochabugapis.adapt.graph.JTDSchema> properties */ 8:\n this.binaryReadMap8(message.properties, reader, options);\n break;\n case /* map<string, mochabugapis.adapt.graph.JTDSchema> optional_properties */ 9:\n this.binaryReadMap9(message.optionalProperties, reader, options);\n break;\n case /* optional bool additional_properties */ 10:\n message.additionalProperties = reader.bool();\n break;\n case /* optional mochabugapis.adapt.graph.JTDSchema values */ 11:\n message.values = JTDSchema.internalBinaryRead(reader, reader.uint32(), options, message.values);\n break;\n case /* optional string discriminator */ 12:\n message.discriminator = reader.string();\n break;\n case /* map<string, mochabugapis.adapt.graph.JTDSchema> mapping */ 13:\n this.binaryReadMap13(message.mapping, reader, options);\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n private binaryReadMap1(map: JTDSchema[\"definitions\"], reader: IBinaryReader, options: BinaryReadOptions): void {\n let len = reader.uint32(), end = reader.pos + len, key: keyof JTDSchema[\"definitions\"] | undefined, val: JTDSchema[\"definitions\"][any] | undefined;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case 1:\n key = reader.string();\n break;\n case 2:\n val = JTDSchema.internalBinaryRead(reader, reader.uint32(), options);\n break;\n default: throw new globalThis.Error(\"unknown map entry field for field mochabugapis.adapt.graph.JTDSchema.definitions\");\n }\n }\n map[key ?? \"\"] = val ?? JTDSchema.create();\n }\n private binaryReadMap8(map: JTDSchema[\"properties\"], reader: IBinaryReader, options: BinaryReadOptions): void {\n let len = reader.uint32(), end = reader.pos + len, key: keyof JTDSchema[\"properties\"] | undefined, val: JTDSchema[\"properties\"][any] | undefined;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case 1:\n key = reader.string();\n break;\n case 2:\n val = JTDSchema.internalBinaryRead(reader, reader.uint32(), options);\n break;\n default: throw new globalThis.Error(\"unknown map entry field for field mochabugapis.adapt.graph.JTDSchema.properties\");\n }\n }\n map[key ?? \"\"] = val ?? JTDSchema.create();\n }\n private binaryReadMap9(map: JTDSchema[\"optionalProperties\"], reader: IBinaryReader, options: BinaryReadOptions): void {\n let len = reader.uint32(), end = reader.pos + len, key: keyof JTDSchema[\"optionalProperties\"] | undefined, val: JTDSchema[\"optionalProperties\"][any] | undefined;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case 1:\n key = reader.string();\n break;\n case 2:\n val = JTDSchema.internalBinaryRead(reader, reader.uint32(), options);\n break;\n default: throw new globalThis.Error(\"unknown map entry field for field mochabugapis.adapt.graph.JTDSchema.optional_properties\");\n }\n }\n map[key ?? \"\"] = val ?? JTDSchema.create();\n }\n private binaryReadMap13(map: JTDSchema[\"mapping\"], reader: IBinaryReader, options: BinaryReadOptions): void {\n let len = reader.uint32(), end = reader.pos + len, key: keyof JTDSchema[\"mapping\"] | undefined, val: JTDSchema[\"mapping\"][any] | undefined;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case 1:\n key = reader.string();\n break;\n case 2:\n val = JTDSchema.internalBinaryRead(reader, reader.uint32(), options);\n break;\n default: throw new globalThis.Error(\"unknown map entry field for field mochabugapis.adapt.graph.JTDSchema.mapping\");\n }\n }\n map[key ?? \"\"] = val ?? JTDSchema.create();\n }\n internalBinaryWrite(message: JTDSchema, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* map<string, mochabugapis.adapt.graph.JTDSchema> definitions = 1; */\n for (let k of globalThis.Object.keys(message.definitions)) {\n writer.tag(1, WireType.LengthDelimited).fork().tag(1, WireType.LengthDelimited).string(k);\n writer.tag(2, WireType.LengthDelimited).fork();\n JTDSchema.internalBinaryWrite(message.definitions[k], writer, options);\n writer.join().join();\n }\n /* optional google.protobuf.Struct metadata = 2; */\n if (message.metadata)\n Struct.internalBinaryWrite(message.metadata, writer.tag(2, WireType.LengthDelimited).fork(), options).join();\n /* optional bool nullable = 3; */\n if (message.nullable !== undefined)\n writer.tag(3, WireType.Varint).bool(message.nullable);\n /* optional string ref = 4; */\n if (message.ref !== undefined)\n writer.tag(4, WireType.LengthDelimited).string(message.ref);\n /* optional string type = 5; */\n if (message.type !== undefined)\n writer.tag(5, WireType.LengthDelimited).string(message.type);\n /* repeated string enum = 6; */\n for (let i = 0; i < message.enum.length; i++)\n writer.tag(6, WireType.LengthDelimited).string(message.enum[i]);\n /* optional mochabugapis.adapt.graph.JTDSchema elements = 7; */\n if (message.elements)\n JTDSchema.internalBinaryWrite(message.elements, writer.tag(7, WireType.LengthDelimited).fork(), options).join();\n /* map<string, mochabugapis.adapt.graph.JTDSchema> properties = 8; */\n for (let k of globalThis.Object.keys(message.properties)) {\n writer.tag(8, WireType.LengthDelimited).fork().tag(1, WireType.LengthDelimited).string(k);\n writer.tag(2, WireType.LengthDelimited).fork();\n JTDSchema.internalBinaryWrite(message.properties[k], writer, options);\n writer.join().join();\n }\n /* map<string, mochabugapis.adapt.graph.JTDSchema> optional_properties = 9; */\n for (let k of globalThis.Object.keys(message.optionalProperties)) {\n writer.tag(9, WireType.LengthDelimited).fork().tag(1, WireType.LengthDelimited).string(k);\n writer.tag(2, WireType.LengthDelimited).fork();\n JTDSchema.internalBinaryWrite(message.optionalProperties[k], writer, options);\n writer.join().join();\n }\n /* optional bool additional_properties = 10; */\n if (message.additionalProperties !== undefined)\n writer.tag(10, WireType.Varint).bool(message.additionalProperties);\n /* optional mochabugapis.adapt.graph.JTDSchema values = 11; */\n if (message.values)\n JTDSchema.internalBinaryWrite(message.values, writer.tag(11, WireType.LengthDelimited).fork(), options).join();\n /* optional string discriminator = 12; */\n if (message.discriminator !== undefined)\n writer.tag(12, WireType.LengthDelimited).string(message.discriminator);\n /* map<string, mochabugapis.adapt.graph.JTDSchema> mapping = 13; */\n for (let k of globalThis.Object.keys(message.mapping)) {\n writer.tag(13, WireType.LengthDelimited).fork().tag(1, WireType.LengthDelimited).string(k);\n writer.tag(2, WireType.LengthDelimited).fork();\n JTDSchema.internalBinaryWrite(message.mapping[k], writer, options);\n writer.join().join();\n }\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message mochabugapis.adapt.graph.JTDSchema\n */\nexport const JTDSchema = new JTDSchema$Type();\n", "// @generated by protobuf-ts 2.9.4 with parameter client_generic,force_server_none\n// @generated from protobuf file \"google/protobuf/struct.proto\" (package \"google.protobuf\", syntax proto3)\n// tslint:disable\n//\n// Protocol Buffers - Google's data interchange format\n// Copyright 2008 Google Inc. All rights reserved.\n// https://developers.google.com/protocol-buffers/\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n// * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\nimport type { BinaryWriteOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryWriter } from \"@protobuf-ts/runtime\";\nimport { WireType } from \"@protobuf-ts/runtime\";\nimport type { BinaryReadOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryReader } from \"@protobuf-ts/runtime\";\nimport { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport type { PartialMessage } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { isJsonObject } from \"@protobuf-ts/runtime\";\nimport { typeofJsonValue } from \"@protobuf-ts/runtime\";\nimport type { JsonValue } from \"@protobuf-ts/runtime\";\nimport type { JsonReadOptions } from \"@protobuf-ts/runtime\";\nimport type { JsonWriteOptions } from \"@protobuf-ts/runtime\";\nimport type { JsonObject } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\n/**\n * `Struct` represents a structured data value, consisting of fields\n * which map to dynamically typed values. In some languages, `Struct`\n * might be supported by a native representation. For example, in\n * scripting languages like JS a struct is represented as an\n * object. The details of that representation are described together\n * with the proto support for the language.\n *\n * The JSON representation for `Struct` is JSON object.\n *\n * @generated from protobuf message google.protobuf.Struct\n */\nexport interface Struct {\n /**\n * Unordered map of dynamically typed values.\n *\n * @generated from protobuf field: map<string, google.protobuf.Value> fields = 1;\n */\n fields: {\n [key: string]: Value;\n };\n}\n/**\n * `Value` represents a dynamically typed value which can be either\n * null, a number, a string, a boolean, a recursive struct value, or a\n * list of values. A producer of value is expected to set one of these\n * variants. Absence of any variant indicates an error.\n *\n * The JSON representation for `Value` is JSON value.\n *\n * @generated from protobuf message google.protobuf.Value\n */\nexport interface Value {\n /**\n * @generated from protobuf oneof: kind\n */\n kind: {\n oneofKind: \"nullValue\";\n /**\n * Represents a null value.\n *\n * @generated from protobuf field: google.protobuf.NullValue null_value = 1;\n */\n nullValue: NullValue;\n } | {\n oneofKind: \"numberValue\";\n /**\n * Represents a double value.\n *\n * @generated from protobuf field: double number_value = 2;\n */\n numberValue: number;\n } | {\n oneofKind: \"stringValue\";\n /**\n * Represents a string value.\n *\n * @generated from protobuf field: string string_value = 3;\n */\n stringValue: string;\n } | {\n oneofKind: \"boolValue\";\n /**\n * Represents a boolean value.\n *\n * @generated from protobuf field: bool bool_value = 4;\n */\n boolValue: boolean;\n } | {\n oneofKind: \"structValue\";\n /**\n * Represents a structured value.\n *\n * @generated from protobuf field: google.protobuf.Struct struct_value = 5;\n */\n structValue: Struct;\n } | {\n oneofKind: \"listValue\";\n /**\n * Represents a repeated `Value`.\n *\n * @generated from protobuf field: google.protobuf.ListValue list_value = 6;\n */\n listValue: ListValue;\n } | {\n oneofKind: undefined;\n };\n}\n/**\n * `ListValue` is a wrapper around a repeated field of values.\n *\n * The JSON representation for `ListValue` is JSON array.\n *\n * @generated from protobuf message google.protobuf.ListValue\n */\nexport interface ListValue {\n /**\n * Repeated field of dynamically typed values.\n *\n * @generated from protobuf field: repeated google.protobuf.Value values = 1;\n */\n values: Value[];\n}\n/**\n * `NullValue` is a singleton enumeration to represent the null value for the\n * `Value` type union.\n *\n * The JSON representation for `NullValue` is JSON `null`.\n *\n * @generated from protobuf enum google.protobuf.NullValue\n */\nexport enum NullValue {\n /**\n * Null value.\n *\n * @generated from protobuf enum value: NULL_VALUE = 0;\n */\n NULL_VALUE = 0\n}\n// @generated message type with reflection information, may provide speed optimized methods\nclass Struct$Type extends MessageType<Struct> {\n constructor() {\n super(\"google.protobuf.Struct\", [\n { no: 1, name: \"fields\", kind: \"map\", K: 9 /*ScalarType.STRING*/, V: { kind: \"message\", T: () => Value } }\n ]);\n }\n /**\n * Encode `Struct` to JSON object.\n */\n internalJsonWrite(message: Struct, options: JsonWriteOptions): JsonValue {\n let json: JsonObject = {};\n for (let [k, v] of Object.entries(message.fields)) {\n json[k] = Value.toJson(v);\n }\n return json;\n }\n /**\n * Decode `Struct` from JSON object.\n */\n internalJsonRead(json: JsonValue, options: JsonReadOptions, target?: Struct): Struct {\n if (!isJsonObject(json))\n throw new globalThis.Error(\"Unable to parse message \" + this.typeName + \" from JSON \" + typeofJsonValue(json) + \".\");\n if (!target)\n target = this.create();\n for (let [k, v] of globalThis.Object.entries(json)) {\n target.fields[k] = Value.fromJson(v);\n }\n return target;\n }\n create(value?: PartialMessage<Struct>): Struct {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.fields = {};\n if (value !== undefined)\n reflectionMergePartial<Struct>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Struct): Struct {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* map<string, google.protobuf.Value> fields */ 1:\n this.binaryReadMap1(message.fields, reader, options);\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n private binaryReadMap1(map: Struct[\"fields\"], reader: IBinaryReader, options: BinaryReadOptions): void {\n let len = reader.uint32(), end = reader.pos + len, key: keyof Struct[\"fields\"] | undefined, val: Struct[\"fields\"][any] | undefined;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case 1:\n key = reader.string();\n break;\n case 2:\n val = Value.internalBinaryRead(reader, reader.uint32(), options);\n break;\n default: throw new globalThis.Error(\"unknown map entry field for field google.protobuf.Struct.fields\");\n }\n }\n map[key ?? \"\"] = val ?? Value.create();\n }\n internalBinaryWrite(message: Struct, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* map<string, google.protobuf.Value> fields = 1; */\n for (let k of globalThis.Object.keys(message.fields)) {\n writer.tag(1, WireType.LengthDelimited).fork().tag(1, WireType.LengthDelimited).string(k);\n writer.tag(2, WireType.LengthDelimited).fork();\n Value.internalBinaryWrite(message.fields[k], writer, options);\n writer.join().join();\n }\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message google.protobuf.Struct\n */\nexport const Struct = new Struct$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass Value$Type extends MessageType<Value> {\n constructor() {\n super(\"google.protobuf.Value\", [\n { no: 1, name: \"null_value\", kind: \"enum\", oneof: \"kind\", T: () => [\"google.protobuf.NullValue\", NullValue] },\n { no: 2, name: \"number_value\", kind: \"scalar\", oneof: \"kind\", T: 1 /*ScalarType.DOUBLE*/ },\n { no: 3, name: \"string_value\", kind: \"scalar\", oneof: \"kind\", T: 9 /*ScalarType.STRING*/ },\n { no: 4, name: \"bool_value\", kind: \"scalar\", oneof: \"kind\", T: 8 /*ScalarType.BOOL*/ },\n { no: 5, name: \"struct_value\", kind: \"message\", oneof: \"kind\", T: () => Struct },\n { no: 6, name: \"list_value\", kind: \"message\", oneof: \"kind\", T: () => ListValue }\n ]);\n }\n /**\n * Encode `Value` to JSON value.\n */\n internalJsonWrite(message: Value, options: JsonWriteOptions): JsonValue {\n if (message.kind.oneofKind === undefined)\n throw new globalThis.Error();\n switch (message.kind.oneofKind) {\n case undefined: throw new globalThis.Error();\n case \"boolValue\": return message.kind.boolValue;\n case \"nullValue\": return null;\n case \"numberValue\":\n let numberValue = message.kind.numberValue;\n if (typeof numberValue == \"number\" && !Number.isFinite(numberValue))\n throw new globalThis.Error();\n return numberValue;\n case \"stringValue\": return message.kind.stringValue;\n case \"listValue\":\n let listValueField = this.fields.find(f => f.no === 6);\n if (listValueField?.kind !== \"message\")\n throw new globalThis.Error();\n return listValueField.T().toJson(message.kind.listValue);\n case \"structValue\":\n let structValueField = this.fields.find(f => f.no === 5);\n if (structValueField?.kind !== \"message\")\n throw new globalThis.Error();\n return structValueField.T().toJson(message.kind.structValue);\n }\n }\n /**\n * Decode `Value` from JSON value.\n */\n internalJsonRead(json: JsonValue, options: JsonReadOptions, target?: Value): Value {\n if (!target)\n target = this.create();\n switch (typeof json) {\n case \"number\":\n target.kind = { oneofKind: \"numberValue\", numberValue: json };\n break;\n case \"string\":\n target.kind = { oneofKind: \"stringValue\", stringValue: json };\n break;\n case \"boolean\":\n target.kind = { oneofKind: \"boolValue\", boolValue: json };\n break;\n case \"object\":\n if (json === null) {\n target.kind = { oneofKind: \"nullValue\", nullValue: NullValue.NULL_VALUE };\n }\n else if (globalThis.Array.isArray(json)) {\n target.kind = { oneofKind: \"listValue\", listValue: ListValue.fromJson(json) };\n }\n else {\n target.kind = { oneofKind: \"structValue\", structValue: Struct.fromJson(json) };\n }\n break;\n default: throw new globalThis.Error(\"Unable to parse \" + this.typeName + \" from JSON \" + typeofJsonValue(json));\n }\n return target;\n }\n create(value?: PartialMessage<Value>): Value {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.kind = { oneofKind: undefined };\n if (value !== undefined)\n reflectionMergePartial<Value>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Value): Value {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* google.protobuf.NullValue null_value */ 1:\n message.kind = {\n oneofKind: \"nullValue\",\n nullValue: reader.int32()\n };\n break;\n case /* double number_value */ 2:\n message.kind = {\n oneofKind: \"numberValue\",\n numberValue: reader.double()\n };\n break;\n case /* string string_value */ 3:\n message.kind = {\n oneofKind: \"stringValue\",\n stringValue: reader.string()\n };\n break;\n case /* bool bool_value */ 4:\n message.kind = {\n oneofKind: \"boolValue\",\n boolValue: reader.bool()\n };\n break;\n case /* google.protobuf.Struct struct_value */ 5:\n message.kind = {\n oneofKind: \"structValue\",\n structValue: Struct.internalBinaryRead(reader, reader.uint32(), options, (message.kind as any).structValue)\n };\n break;\n case /* google.protobuf.ListValue list_value */ 6:\n message.kind = {\n oneofKind: \"listValue\",\n listValue: ListValue.internalBinaryRead(reader, reader.uint32(), options, (message.kind as any).listValue)\n };\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: Value, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* google.protobuf.NullValue null_value = 1; */\n if (message.kind.oneofKind === \"nullValue\")\n writer.tag(1, WireType.Varint).int32(message.kind.nullValue);\n /* double number_value = 2; */\n if (message.kind.oneofKind === \"numberValue\")\n writer.tag(2, WireType.Bit64).double(message.kind.numberValue);\n /* string string_value = 3; */\n if (message.kind.oneofKind === \"stringValue\")\n writer.tag(3, WireType.LengthDelimited).string(message.kind.stringValue);\n /* bool bool_value = 4; */\n if (message.kind.oneofKind === \"boolValue\")\n writer.tag(4, WireType.Varint).bool(message.kind.boolValue);\n /* google.protobuf.Struct struct_value = 5; */\n if (message.kind.oneofKind === \"structValue\")\n Struct.internalBinaryWrite(message.kind.structValue, writer.tag(5, WireType.LengthDelimited).fork(), options).join();\n /* google.protobuf.ListValue list_value = 6; */\n if (message.kind.oneofKind === \"listValue\")\n ListValue.internalBinaryWrite(message.kind.listValue, writer.tag(6, WireType.LengthDelimited).fork(), options).join();\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message google.protobuf.Value\n */\nexport const Value = new Value$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ListValue$Type extends MessageType<ListValue> {\n constructor() {\n super(\"google.protobuf.ListValue\", [\n { no: 1, name: \"values\", kind: \"message\", repeat: 1 /*RepeatType.PACKED*/, T: () => Value }\n ]);\n }\n /**\n * Encode `ListValue` to JSON array.\n */\n internalJsonWrite(message: ListValue, options: JsonWriteOptions): JsonValue {\n return message.values.map(v => Value.toJson(v));\n }\n /**\n * Decode `ListValue` from JSON array.\n */\n internalJsonRead(json: JsonValue, options: JsonReadOptions, target?: ListValue): ListValue {\n if (!globalThis.Array.isArray(json))\n throw new globalThis.Error(\"Unable to parse \" + this.typeName + \" from JSON \" + typeofJsonValue(json));\n if (!target)\n target = this.create();\n let values = json.map(v => Value.fromJson(v));\n target.values.push(...values);\n return target;\n }\n create(value?: PartialMessage<ListValue>): ListValue {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.values = [];\n if (value !== undefined)\n reflectionMergePartial<ListValue>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ListValue): ListValue {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* repeated google.protobuf.Value values */ 1:\n message.values.push(Value.internalBinaryRead(reader, reader.uint32(), options));\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: ListValue, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* repeated google.protobuf.Value values = 1; */\n for (let i = 0; i < message.values.length; i++)\n Value.internalBinaryWrite(message.values[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join();\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message google.protobuf.ListValue\n */\nexport const ListValue = new ListValue$Type();\n", "// @generated by protobuf-ts 2.9.4 with parameter client_generic,force_server_none\n// @generated from protobuf file \"mochabugapis/adapt/graph/transmitter.proto\" (package \"mochabugapis.adapt.graph\", syntax proto3)\n// tslint:disable\n//\n// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\nimport type { BinaryWriteOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryWriter } from \"@protobuf-ts/runtime\";\nimport { WireType } from \"@protobuf-ts/runtime\";\nimport type { BinaryReadOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryReader } from \"@protobuf-ts/runtime\";\nimport { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport type { PartialMessage } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\nimport { SignalDescriptor } from \"./signal_descriptor\";\n/**\n * Transmitter represents an output point for a vertex, emitting multiple signals.\n *\n * @generated from protobuf message mochabugapis.adapt.graph.Transmitter\n */\nexport interface Transmitter {\n /**\n * Identifier for the transmitter, following the ECMA naming pattern, limited to 50 characters.\n *\n * @generated from protobuf field: string name = 1;\n */\n name: string;\n /**\n * Optional descriptive text for the transmitter's purpose, up to 250 characters.\n *\n * @generated from protobuf field: optional string description = 2;\n */\n description?: string;\n /**\n * List of signals the transmitter can emit. Can contain up to 512 unique signals.\n *\n * @generated from protobuf field: repeated mochabugapis.adapt.graph.SignalDescriptor signals = 3;\n */\n signals: SignalDescriptor[];\n /**\n * Flag indicating whether the transmitter is signaling a failure state.\n *\n * @generated from protobuf field: bool failure = 4;\n */\n failure: boolean;\n}\n// @generated message type with reflection information, may provide speed optimized methods\nclass Transmitter$Type extends MessageType<Transmitter> {\n constructor() {\n super(\"mochabugapis.adapt.graph.Transmitter\", [\n { no: 1, name: \"name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"1\", maxLen: \"50\", pattern: \"^[_$a-z][_$a-z0-9]*$\" } } } },\n { no: 2, name: \"description\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { maxLen: \"250\" } } } },\n { no: 3, name: \"signals\", kind: \"message\", repeat: 1 /*RepeatType.PACKED*/, T: () => SignalDescriptor, options: { \"buf.validate.field\": { cel: [{ id: \"signals_unique_names\", message: \"Each signal must have a unique name.\", expression: \"this.map(signal, signal.name).unique()\" }], repeated: { maxItems: \"512\" } } } },\n { no: 4, name: \"failure\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ }\n ]);\n }\n create(value?: PartialMessage<Transmitter>): Transmitter {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.name = \"\";\n message.signals = [];\n message.failure = false;\n if (value !== undefined)\n reflectionMergePartial<Transmitter>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Transmitter): Transmitter {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string name */ 1:\n message.name = reader.string();\n break;\n case /* optional string description */ 2:\n message.description = reader.string();\n break;\n case /* repeated mochabugapis.adapt.graph.SignalDescriptor signals */ 3:\n message.signals.push(SignalDescriptor.internalBinaryRead(reader, reader.uint32(), options));\n break;\n case /* bool failure */ 4:\n message.failure = reader.bool();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: Transmitter, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* string name = 1; */\n if (message.name !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.name);\n /* optional string description = 2; */\n if (message.description !== undefined)\n writer.tag(2, WireType.LengthDelimited).string(message.description);\n /* repeated mochabugapis.adapt.graph.SignalDescriptor signals = 3; */\n for (let i = 0; i < message.signals.length; i++)\n SignalDescriptor.internalBinaryWrite(message.signals[i], writer.tag(3, WireType.LengthDelimited).fork(), options).join();\n /* bool failure = 4; */\n if (message.failure !== false)\n writer.tag(4, WireType.Varint).bool(message.failure);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message mochabugapis.adapt.graph.Transmitter\n */\nexport const Transmitter = new Transmitter$Type();\n", "// @generated by protobuf-ts 2.9.4 with parameter client_generic,force_server_none\n// @generated from protobuf file \"mochabugapis/adapt/graph/receiver.proto\" (package \"mochabugapis.adapt.graph\", syntax proto3)\n// tslint:disable\n//\n// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\nimport type { BinaryWriteOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryWriter } from \"@protobuf-ts/runtime\";\nimport { WireType } from \"@protobuf-ts/runtime\";\nimport type { BinaryReadOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryReader } from \"@protobuf-ts/runtime\";\nimport { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport type { PartialMessage } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\nimport { SignalBinding } from \"./signal_binding\";\n/**\n * Receiver represents an input point for a vertex, which can bind\n * to multiple signals.\n *\n * @generated from protobuf message mochabugapis.adapt.graph.Receiver\n */\nexport interface Receiver {\n /**\n * Identifier for the receiver, conforming to the ECMA naming pattern\n * and limited to 50 characters.\n *\n * @generated from protobuf field: string name = 1;\n */\n name: string;\n /**\n * Optional descriptive text for the receiver's purpose, up to 250 characters.\n *\n * @generated from protobuf field: optional string description = 2;\n */\n description?: string;\n /**\n * List of signals the receiver listens for. Can contain up to 512 unique signals.\n *\n * @generated from protobuf field: repeated mochabugapis.adapt.graph.SignalBinding bindings = 3;\n */\n bindings: SignalBinding[];\n}\n// @generated message type with reflection information, may provide speed optimized methods\nclass Receiver$Type extends MessageType<Receiver> {\n constructor() {\n super(\"mochabugapis.adapt.graph.Receiver\", [\n { no: 1, name: \"name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { minLen: \"1\", maxLen: \"50\", pattern: \"^[_$a-z][_$a-z0-9]*$\" } } } },\n { no: 2, name: \"description\", kind: \"scalar\", opt: true, T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { maxLen: \"250\" } } } },\n { no: 3, name: \"bindings\", kind: \"message\", repeat: 1 /*RepeatType.PACKED*/, T: () => SignalBinding, options: { \"buf.validate.field\": { cel: [{ id: \"bindings_unique_names\", message: \"Each binding must have a unique name.\", expression: \"this.map(binding, binding.descriptor.name).unique()\" }], repeated: { maxItems: \"512\" } } } }\n ]);\n }\n create(value?: PartialMessage<Receiver>): Receiver {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.name = \"\";\n message.bindings = [];\n if (value !== undefined)\n reflectionMergePartial<Receiver>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Receiver): Receiver {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* string name */ 1:\n message.name = reader.string();\n break;\n case /* optional string description */ 2:\n message.description = reader.string();\n break;\n case /* repeated mochabugapis.adapt.graph.SignalBinding bindings */ 3:\n message.bindings.push(SignalBinding.internalBinaryRead(reader, reader.uint32(), options));\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: Receiver, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* string name = 1; */\n if (message.name !== \"\")\n writer.tag(1, WireType.LengthDelimited).string(message.name);\n /* optional string description = 2; */\n if (message.description !== undefined)\n writer.tag(2, WireType.LengthDelimited).string(message.description);\n /* repeated mochabugapis.adapt.graph.SignalBinding bindings = 3; */\n for (let i = 0; i < message.bindings.length; i++)\n SignalBinding.internalBinaryWrite(message.bindings[i], writer.tag(3, WireType.LengthDelimited).fork(), options).join();\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message mochabugapis.adapt.graph.Receiver\n */\nexport const Receiver = new Receiver$Type();\n", "// @generated by protobuf-ts 2.9.4 with parameter client_generic,force_server_none\n// @generated from protobuf file \"mochabugapis/adapt/graph/signal_binding.proto\" (package \"mochabugapis.adapt.graph\", syntax proto3)\n// tslint:disable\n//\n// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\nimport type { BinaryWriteOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryWriter } from \"@protobuf-ts/runtime\";\nimport { WireType } from \"@protobuf-ts/runtime\";\nimport type { BinaryReadOptions } from \"@protobuf-ts/runtime\";\nimport type { IBinaryReader } from \"@protobuf-ts/runtime\";\nimport { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport type { PartialMessage } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\nimport { Value } from \"../../../google/protobuf/struct\";\nimport { SignalDescriptor } from \"./signal_descriptor\";\n/**\n * Receiver represents an input point for a vertex, which can bind\n * to multiple signals.\n *\n * @generated from protobuf message mochabugapis.adapt.graph.SignalBinding\n */\nexport interface SignalBinding {\n /**\n * The actual signal descriptor.\n *\n * @generated from protobuf field: mochabugapis.adapt.graph.SignalDescriptor descriptor = 1;\n */\n descriptor?: SignalDescriptor;\n /**\n * @generated from protobuf oneof: binding\n */\n binding: {\n oneofKind: \"reference\";\n /**\n * A reference to another signal <vertexid>:<transmitter>:<signal>\n *\n * @generated from protobuf field: string reference = 2;\n */\n reference: string;\n } | {\n oneofKind: \"constant\";\n /**\n * A constant value (must validate against the descriptor)\n *\n * @generated from protobuf field: google.protobuf.Value constant = 3;\n */\n constant: Value;\n } | {\n oneofKind: undefined;\n };\n /**\n * The binding may also have one of the 3 error codes\n *\n * @generated from protobuf field: optional mochabugapis.adapt.graph.SignalBinding.Error error = 4;\n */\n error?: SignalBinding_Error;\n}\n/**\n * Some error codes that can appear on the binding\n *\n * @generated from protobuf enum mochabugapis.adapt.graph.SignalBinding.Error\n */\nexport enum SignalBinding_Error {\n /**\n * Not specified\n *\n * @generated from protobuf enum value: ERROR_UNSPECIFIED = 0;\n */\n UNSPECIFIED = 0,\n /**\n * Binding is missing, the signal is unbound even though the descriptor requires it to be bound\n *\n * @generated from protobuf enum value: ERROR_UNBOUND = 1;\n */\n UNBOUND = 1,\n /**\n * The source does not exist\n *\n * @generated from protobuf enum value: ERROR_INVALID_SOURCE = 2;\n */\n INVALID_SOURCE = 2,\n /**\n * The schema does not match, the source is valid\n *\n * @generated from protobuf enum value: ERROR_SCHEMA_MISMATCH = 3;\n */\n SCHEMA_MISMATCH = 3\n}\n// @generated message type with reflection information, may provide speed optimized methods\nclass SignalBinding$Type extends MessageType<SignalBinding> {\n constructor() {\n super(\"mochabugapis.adapt.graph.SignalBinding\", [\n { no: 1, name: \"descriptor\", kind: \"message\", T: () => SignalDescriptor, options: { \"buf.validate.field\": { required: true } } },\n { no: 2, name: \"reference\", kind: \"scalar\", oneof: \"binding\", T: 9 /*ScalarType.STRING*/, options: { \"buf.validate.field\": { string: { maxLen: \"250\" } } } },\n { no: 3, name: \"constant\", kind: \"message\", oneof: \"binding\", T: () => Value },\n { no: 4, name: \"error\", kind: \"enum\", opt: true, T: () => [\"mochabugapis.adapt.graph.SignalBinding.Error\", SignalBinding_Error, \"ERROR_\"], options: { \"buf.validate.field\": { ignore: \"IGNORE_EMPTY\", enum: { notIn: [0] } } } }\n ]);\n }\n create(value?: PartialMessage<SignalBinding>): SignalBinding {\n const message = globalThis.Object.create((this.messagePrototype!));\n message.binding = { oneofKind: undefined };\n if (value !== undefined)\n reflectionMergePartial<SignalBinding>(this, message, value);\n return message;\n }\n internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: SignalBinding): SignalBinding {\n let message = target ?? this.create(), end = reader.pos + length;\n while (reader.pos < end) {\n let [fieldNo, wireType] = reader.tag();\n switch (fieldNo) {\n case /* mochabugapis.adapt.graph.SignalDescriptor descriptor */ 1:\n message.descriptor = SignalDescriptor.internalBinaryRead(reader, reader.uint32(), options, message.descriptor);\n break;\n case /* string reference */ 2:\n message.binding = {\n oneofKind: \"reference\",\n reference: reader.string()\n };\n break;\n case /* google.protobuf.Value constant */ 3:\n message.binding = {\n oneofKind: \"constant\",\n constant: Value.internalBinaryRead(reader, reader.uint32(), options, (message.binding as any).constant)\n };\n break;\n case /* optional mochabugapis.adapt.graph.SignalBinding.Error error */ 4:\n message.error = reader.int32();\n break;\n default:\n let u = options.readUnknownField;\n if (u === \"throw\")\n throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n let d = reader.skip(wireType);\n if (u !== false)\n (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n }\n }\n return message;\n }\n internalBinaryWrite(message: SignalBinding, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {\n /* mochabugapis.adapt.graph.SignalDescriptor descriptor = 1; */\n if (message.descriptor)\n SignalDescriptor.internalBinaryWrite(message.descriptor, writer.tag(1, WireType.LengthDelimited).fork(), options).join();\n /* string reference = 2; */\n if (message.binding.oneofKind === \"reference\")\n writer.tag(2, WireType.LengthDelimited).string(message.binding.reference);\n /* google.protobuf.Value constant = 3; */\n if (message.binding.oneofKind === \"constant\")\n Value.internalBinaryWrite(message.binding.constant, writer.tag(3, WireType.LengthDelimited).fork(), options).join();\n /* optional mochabugapis.adapt.graph.SignalBinding.Error error = 4; */\n if (message.error !== undefined)\n writer.tag(4, WireType.Varint).int32(message.error);\n let u = options.writeUnknownFields;\n if (u !== false)\n (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n return writer;\n }\n}\n/**\n * @generated MessageType for protobuf message mochabugapis.adapt.graph.SignalBinding\n */\nexport const SignalBinding = new SignalBinding$Type();\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport fs from 'fs';\nimport { mkdirp } from 'mkdirp';\nimport path from 'path';\nimport { Manifest } from './genproto/mochabugapis/adapt/plugins/v1/plugins';\nimport chalk from 'chalk';\nimport { fileURLToPath } from 'url';\n\nexport function readAsset(name: string): string {\n return fs\n .readFileSync(\n path.join(\n path.dirname(fileURLToPath(import.meta.url)),\n '..',\n 'assets',\n name\n )\n )\n .toString();\n}\n\nexport function writeFile(filePath: string, content: string) {\n const dir = path.dirname(filePath);\n mkdirp.sync(dir);\n fs.writeFileSync(filePath, content);\n}\n\nexport function readManifest(filePath: string): Manifest | null {\n const fullPath = path.resolve(filePath);\n if (!fs.existsSync(fullPath)) {\n console.error(\n chalk.red(`Invalid command: Manifest file not found at ${fullPath}.`)\n );\n return null;\n }\n\n try {\n const manifestData = fs.readFileSync(fullPath).toString();\n return Manifest.fromJsonString(manifestData);\n } catch (error: any) {\n console.error(chalk.red(`An error occurred while reading the manifest`));\n console.error(error.message);\n return null;\n }\n}\n\nexport function labelize(val: string): string {\n return (val.charAt(0).toUpperCase() + val.substring(1)).replace('_', ' ');\n}\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { confirm, input, select } from '@inquirer/prompts';\nimport chalk from 'chalk';\nimport { execSync } from 'child_process';\nimport fs from 'fs';\nimport { mkdirp } from 'mkdirp';\nimport path from 'path';\nimport { Manifest } from './genproto/mochabugapis/adapt/plugins/v1/plugins';\nimport { labelize, readAsset, writeFile } from './utils';\nimport { addVertex } from './vertices';\n\nexport async function init(dir: string) {\n const name = await input({\n message: 'Type plugin name',\n transformer: (val: string): string => {\n return val.trim().toLowerCase();\n },\n validate: (val: string): boolean => {\n return /^[_a-z][_a-z0-9]*$/.test(val);\n }\n });\n const vertexType = await select({\n message: 'Choose your vertex type',\n choices: [\n {\n name: 'action',\n value: 'action',\n description:\n 'An action is a vertex that performs a task, such as sending an email or updating a database.'\n },\n {\n name: 'browser',\n value: 'browser',\n description:\n 'A browser is a vertex that interacts with a web browser, such as navigating to a page or clicking a button.'\n },\n {\n name: 'cron-trigger',\n value: 'cron-trigger',\n description:\n 'A cron trigger is a vertex that triggers at a specific time, such as every day at 3:00 PM.'\n },\n {\n name: 'external-trigger',\n value: 'external-trigger',\n description:\n 'An external trigger is a vertex that triggers from an external event, such as a webhook or a message queue.'\n }\n ]\n });\n const vertexName = await input({\n message: 'Type a new unused vertex name',\n transformer: (val: string): string => {\n return val.trim().toLowerCase();\n },\n validate: (val: string): boolean => {\n return /^[_a-z][_a-z0-9]*$/.test(val);\n }\n });\n const hasConfigurator = await confirm({\n message: 'Need a configurator for the vertex?'\n });\n\n // Check which frontend to use, if any\n let frontendLib: 'none' | 'react' | undefined;\n if (hasConfigurator || vertexType === 'browser') {\n frontendLib = await select({\n message: 'Choose frontend library',\n choices: [\n {\n name: 'React',\n value: 'react',\n description: 'React with TypeScript'\n },\n {\n name: 'None',\n value: 'none',\n description: 'I do it myself'\n }\n ]\n });\n }\n\n mkdirp.sync(dir);\n\n const cwd = !path.isAbsolute(dir) ? path.join(process.cwd(), dir) : dir;\n\n writeFile(path.join(cwd, '.gitignore'), readAsset('gitignore'));\n const defPackage = {\n name: name,\n version: '',\n private: true,\n type: 'module',\n scripts: {\n 'build-client':\n \"node -e \\\"if(require('fs').existsSync('build-client.js')) require('child_process').execSync('node build-client.js', { stdio: 'inherit' })\\\"\",\n 'build-common': 'rimraf dist && npm run build-client && node build.js',\n 'build-dev':\n 'export PLUGINS_CDN=https://cdn-dev.mochabug.com/adapt/plugins && npm run build-common',\n 'build-prod':\n 'export PLUGINS_CDN=https://cdn.mochabug.com/adapt/plugins && npm run build-common',\n 'build-emulate':\n 'export PLUGINS_CDN=http://localhost:51002 && npm run build-common',\n build: 'npm run build-dev',\n emulate: 'npm run build-emulate && adaptkit emulate',\n add: 'adaptkit add'\n },\n devDependencies: {\n unenv: 'npm:unenv-nightly@*'\n }\n };\n writeFile(\n path.join(cwd, 'package.json'),\n JSON.stringify(defPackage, null, 2)\n );\n writeFile(path.join(cwd, 'README.md'), readAsset('readme.md'));\n writeFile(path.join(cwd, 'LICENSE.md'), readAsset('license.md'));\n\n execSync(\n 'npm install --save-dev @mochabug/adapt-plugin-typings typescript @cloudflare/unenv-preset @types/node esbuild rimraf glob',\n {\n cwd: cwd,\n stdio: 'inherit'\n }\n );\n execSync('npm install @mochabug/adapt-plugin-toolkit', {\n cwd: cwd,\n stdio: 'inherit'\n });\n writeFile(path.join(cwd, 'global.d.ts'), readAsset('global.d.ts'));\n writeFile(path.join(cwd, 'tsconfig.json'), readAsset('tsconf.json'));\n writeFile(path.join(cwd, 'build.js'), readAsset('build.js'));\n writeFile(path.join(cwd, 'inject.js'), readAsset('inject.js'));\n\n const vertex = addVertex(\n cwd,\n vertexName,\n vertexType,\n hasConfigurator,\n [],\n frontendLib\n );\n\n console.log(chalk.magenta('Creating manifest...'));\n const manifest: Manifest = {\n name: name,\n organization: '00000000-0000-0000-0000-000000000000',\n version: '0.1.0',\n label: labelize(name),\n description: `A nice description of what ${name} does`,\n author: 'John Doe',\n bugs: 'bugs@foobar.com',\n homepage: `https://www.foobar.com`,\n repository: `https://github.com`,\n vertices: [vertex],\n executors: 'dist/executors.js',\n pluginVariables: [],\n pluginOauth2: [],\n pluginMtls: []\n };\n\n if (frontendLib === 'react') {\n mkdirp.sync(path.join(dir, 'cdn'));\n manifest.cdn = 'cdn';\n }\n\n if (!vertex.metadata) {\n throw new Error('This cannot happen');\n }\n\n if (vertex.configurator) {\n manifest.configurators = 'dist/configurators.js';\n }\n\n // Write out the actual manifest and we're done\n fs.writeFileSync(\n path.join(cwd, 'manifest.json'),\n Manifest.toJsonString(manifest, {\n enumAsInteger: false,\n prettySpaces: 2,\n emitDefaultValues: false\n })\n );\n console.log(chalk.bgGreen('Success'));\n}\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport chalk from 'chalk';\nimport { randomBytes } from 'crypto';\nimport express, { Request, Response } from 'express';\nimport { Server } from 'http';\nimport fetch from 'node-fetch';\nimport open from 'open';\nimport pkceChallenge from 'pkce-challenge';\nimport { readAsset } from './utils';\n\nconst OAUTH_CALLBACK_PORT = 51421;\nconst PORT_RANGE = 5;\nconst OAUTH_SCOPE = 'https://www.mochabugapis.com/auth/adapt/plugins.upload';\nconst AUDIENCE = 'https://adapt-dev.mochabugapis.com';\n\ninterface OAuth2Options {\n clientId: string;\n redirectUri: string;\n scope: string;\n state: string;\n authUrl: string;\n codeChallenge: string;\n audience: string;\n}\n\ninterface TokenResponse {\n access_token: string;\n expires_in: number;\n token_type: string;\n scope?: string;\n}\n\ninterface OAuthErrorResponse {\n error: string;\n error_description?: string;\n error_uri?: string;\n}\n\nfunction createCodeUrl({\n clientId,\n redirectUri,\n scope,\n state,\n authUrl,\n codeChallenge,\n audience\n}: OAuth2Options): string {\n const res = new URL(authUrl);\n res.searchParams.set('response_type', 'code');\n res.searchParams.set('client_id', clientId);\n res.searchParams.set('audience', audience);\n res.searchParams.set('redirect_uri', redirectUri);\n res.searchParams.set('scope', scope);\n res.searchParams.set('state', state);\n res.searchParams.set('code_challenge', codeChallenge);\n res.searchParams.set('code_challenge_method', 'S256');\n\n return res.toString();\n}\n\ninterface CodeExchangeOptions {\n redirectUri: string;\n clientId: string;\n codeVerifier: string;\n code: string;\n}\n\nfunction createExchangeBody({\n redirectUri,\n codeVerifier,\n clientId,\n code\n}: CodeExchangeOptions): string {\n const res = new URLSearchParams();\n res.set('grant_type', 'authorization_code');\n res.set('code_verifier', codeVerifier);\n res.set('client_id', clientId);\n res.set('code', code);\n res.set('redirect_uri', redirectUri);\n\n return res.toString();\n}\n\nfunction startServer(\n app: express.Express,\n attempt: number = 0\n): Promise<{ server: Server; port: number }> {\n return new Promise((resolve, reject) => {\n // Calculate the current port to try based on the base port and the attempt number.\n const currentPort = OAUTH_CALLBACK_PORT + attempt;\n\n // Attempt to listen on the current port.\n const server = app.listen(currentPort, () => {\n console.log(\n chalk.green.bold(\n `Server running on http://localhost:${currentPort} to listen to OAuth2 callbacks`\n )\n );\n resolve({ server, port: currentPort });\n });\n\n // Handle the error event when the server fails to start.\n server.on('error', (err: any) => {\n if (err.code === 'EADDRINUSE' && attempt < PORT_RANGE - 1) {\n // If the address is in use, close the current server and try the next port.\n console.log(\n chalk.yellow.bold(\n `Port ${currentPort} is in use, trying next available port.`\n )\n );\n server.close();\n resolve(startServer(app, attempt + 1));\n } else {\n reject(err);\n }\n });\n });\n}\n\n// Define constants or import them\nconst LOGGING_PREFIX = '[waitForConsent]';\n\n// Returns the access token\nexport async function waitForConsent(\n issuerUrl: string,\n errorUrl: string,\n clientId: string\n): Promise<string | undefined> {\n console.info(\n `${LOGGING_PREFIX} Starting OAuth2 consent workflow for client: ${clientId}`\n );\n const authUrl = `${issuerUrl}/oauth2/auth`;\n const tokenUrl = `${issuerUrl}/oauth2/token`;\n console.info(`${LOGGING_PREFIX} Authorization URL: ${authUrl}`);\n console.info(`${LOGGING_PREFIX} Token URL: ${tokenUrl}`);\n\n const app = express();\n const state = randomBytes(32).toString('hex');\n\n console.info(`${LOGGING_PREFIX} Generated state for CSRF protection`);\n\n const localUrls = {\n base: ``,\n redirect: ``\n };\n\n const { code_verifier, code_challenge } = await pkceChallenge();\n\n console.info(`${LOGGING_PREFIX} PKCE Challenge generated`);\n\n let resolveToken: () => void;\n let rejectToken: () => void;\n let token: string | undefined;\n const tokenPromise = new Promise<void>((resolve, reject) => {\n resolveToken = resolve;\n rejectToken = reject;\n });\n\n app.get('/', async (_: Request, res: Response) => {\n const codeUrl = createCodeUrl({\n authUrl,\n clientId,\n redirectUri: localUrls.redirect,\n scope: OAUTH_SCOPE,\n state,\n codeChallenge: code_challenge,\n audience: AUDIENCE\n });\n console.info(`${LOGGING_PREFIX} Redirecting to code URL for user consent`);\n res.redirect(codeUrl);\n });\n\n // We need to use callbacks to the success / failed pages so that we don't\n // expose the code longer than necessary.\n app.get('/callback', async (req: Request, res: Response) => {\n if ('error' in req.query) {\n console.error(`${LOGGING_PREFIX} OAuth Error: error in callback`);\n const queryString = req.url.split('?')[1];\n res.redirect(`${errorUrl}?${queryString}`);\n rejectToken();\n return;\n }\n\n if (req.query.state !== state) {\n console.error(\n `${LOGGING_PREFIX} OAuth Error: Invalid state. Received state does not match.`\n );\n const errorDescription = encodeURIComponent('Invalid state parameter.');\n res.redirect(\n `${errorUrl}?error=invalid_request&error_description=${errorDescription}`\n );\n rejectToken();\n return;\n }\n\n console.info(`${LOGGING_PREFIX} OAuth state validated`);\n\n const body = createExchangeBody({\n clientId,\n redirectUri: localUrls.redirect,\n codeVerifier: code_verifier,\n code: req.query.code as string\n });\n\n try {\n console.info(`${LOGGING_PREFIX} Exchanging code for token`);\n const response = await fetch(tokenUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n Accept: 'application/json'\n },\n body\n });\n\n // Redirect to error\n if (!response.ok) {\n console.error(\n `${LOGGING_PREFIX} OAuth Error: could not exchange code for token`\n );\n const queryString = response.url.split('?')[1];\n res.redirect(`${errorUrl}?${queryString}`);\n rejectToken();\n return;\n }\n\n const data = (await response.json()) as TokenResponse;\n console.info(`${LOGGING_PREFIX} Token exchange successful`);\n console.info(`${LOGGING_PREFIX} Token exchange successful. Details: `, {\n expires_in: data.expires_in,\n scope: data.scope,\n type: data.token_type,\n token: '<secret>'\n });\n token = data.access_token;\n res.redirect('/success');\n } catch (error) {\n console.error(`${LOGGING_PREFIX} Error exchanging token: ${error}`);\n res.redirect(\n `${errorUrl}?error=unkown&error_description=${encodeURIComponent(\n 'Unknown error during token exchange'\n )}`\n );\n rejectToken();\n }\n });\n\n app.get('/success', (_: Request, res: Response) => {\n res.send(readAsset('success_page.html'));\n if (!token) {\n console.error('Token is undefined');\n rejectToken();\n }\n resolveToken();\n });\n\n let server: Server;\n try {\n console.info(`${LOGGING_PREFIX} Starting local server to handle callbacks`);\n const serverStart = await startServer(app);\n server = serverStart.server;\n localUrls.base = `http://localhost:${serverStart.port}`;\n localUrls.redirect = `${localUrls.base}/callback`;\n console.info(`${LOGGING_PREFIX} Server started on ${localUrls.base}`);\n } catch (e) {\n console.error(`${LOGGING_PREFIX} Error starting server: ${e}`);\n return;\n }\n\n try {\n console.info(`${LOGGING_PREFIX} Opening user consent page`);\n await open(localUrls.base);\n console.info(`${LOGGING_PREFIX} Waiting for user consent...`);\n await tokenPromise;\n console.info(\n `${LOGGING_PREFIX} OAuth consent workflow completed successfully`\n );\n if (!token) {\n console.error('Token is undefined');\n }\n return token;\n } catch (error) {\n console.error(`${LOGGING_PREFIX} Error in OAuth2 flow: ${error}`);\n return undefined;\n } finally {\n console.info(`${LOGGING_PREFIX} Closing the server...`);\n server.closeAllConnections();\n server.close();\n console.info(`${LOGGING_PREFIX} Server closed`);\n }\n}\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { ChannelCredentials } from '@grpc/grpc-js';\nimport { GrpcOptions, GrpcTransport } from '@protobuf-ts/grpc-transport';\nimport { RpcError, RpcMetadata, RpcStatus } from '@protobuf-ts/runtime-rpc';\nimport archiver from 'archiver';\nimport chalk from 'chalk';\nimport fg from 'fast-glob';\nimport fs from 'fs';\nimport path from 'path';\nimport sharp from 'sharp';\nimport { PassThrough } from 'stream';\nimport {\n Manifest,\n UploadPluginRequest\n} from './genproto/mochabugapis/adapt/plugins/v1/plugins';\nimport { PluginServiceClient } from './genproto/mochabugapis/adapt/plugins/v1/plugins.client';\n\nasync function resize(\n filepath: string,\n height: number,\n width: number\n): Promise<Buffer> {\n const extname = path.extname(filepath);\n switch (extname) {\n case '.avif':\n return await sharp(filepath).resize(height, width).avif().toBuffer();\n case '.gif':\n return await sharp(filepath).resize(height, width).gif().toBuffer();\n case '.jpg':\n case '.jpeg':\n case '.jfif':\n case '.pjpeg':\n case '.pjp':\n return await sharp(filepath).resize(height, width).jpeg().toBuffer();\n case '.png':\n return await sharp(filepath).resize(height, width).png().toBuffer();\n case '.svg':\n return fs.readFileSync(filepath);\n case '.webp':\n return await sharp(filepath).resize(height, width).webp().toBuffer();\n }\n throw new Error('Invalid logotype');\n}\n\nfunction isPathSafe(filePath: string): boolean {\n const currentWorkingDir = path.resolve('.');\n const absoluteFilePath = path.resolve(filePath);\n return absoluteFilePath.startsWith(currentWorkingDir);\n}\n\nfunction folderExists(folderPath: string): boolean {\n try {\n const absolutePath = path.resolve(folderPath);\n if (fs.existsSync(absolutePath)) {\n const stats = fs.statSync(absolutePath);\n return stats.isDirectory();\n } else {\n return false;\n }\n } catch (err) {\n console.error('Error checking if folder exists:', err);\n return false;\n }\n}\n\nfunction createArchive(folder: string): Promise<Buffer> {\n return new Promise<Buffer>((resolve, reject) => {\n if (!folderExists(folder)) {\n reject(`The folder ${folder} does not exist`);\n }\n\n const archive = archiver('tar', {\n gzip: true, // Use gzip compression\n zlib: { level: 9 } // Sets the compression level.\n });\n\n archive.on('error', (err) => {\n reject(err);\n });\n\n const buffers: Buffer[] = [];\n const bufferStream = new PassThrough();\n\n bufferStream.on('data', (data: Buffer) => buffers.push(data));\n\n bufferStream.on('end', () => {\n const res = Buffer.concat(buffers);\n console.log(`${folder} have been compressed successfully into a buffer.`);\n resolve(res); // Resolve the promise with the final buffer\n });\n\n archive.pipe(bufferStream);\n\n fg(path.join(folder, '**', '*'))\n .then((paths) => {\n for (let filepath of paths) {\n if (fs.statSync(filepath).isFile()) {\n const relativePath = path.relative(folder, filepath);\n archive.file(filepath, { name: relativePath });\n }\n }\n archive.finalize();\n })\n .catch((err) => reject(err));\n });\n}\n\nasync function sendPlugin(\n manifest: Manifest,\n client: PluginServiceClient,\n metadata?: RpcMetadata\n) {\n console.log('Sending the plugin to the server');\n const stream = client.uploadPlugin({ meta: metadata });\n const lookup: { [key: string]: boolean } = {};\n\n async function send(\n filePath?: string,\n imgOpts?: [number, number],\n fileContent?: Buffer\n ) {\n if (!filePath || lookup[filePath]) {\n return;\n }\n\n if (!isPathSafe(filePath)) {\n throw new Error(\n `The file path is not safe: ${filePath}. It must be contained inside the manifest folder. Invalid manifest`\n );\n }\n\n if (!fs.existsSync(filePath)) {\n throw new Error(\n `The path does not exists: ${filePath}. Invalid manifest`\n );\n }\n\n // If image file, we need to compress it\n let buffer: Buffer;\n if (imgOpts) {\n buffer = await resize(filePath, imgOpts[0], imgOpts[1]);\n console.log(\n `Compressed: ${filePath} to ${imgOpts[0]}x${imgOpts[1]} size`\n );\n } else if (fileContent) {\n buffer = fileContent;\n } else {\n buffer = fs.readFileSync(filePath);\n }\n\n console.log(`Sending: ${filePath}`);\n const message: UploadPluginRequest = {\n data: {\n oneofKind: 'file',\n file: {\n data: buffer,\n path: filePath\n }\n }\n };\n // The idea here is that we will have an RPC error if the server has returned an error\n await Promise.race([stream.requests.send(message), stream.status]);\n lookup[filePath] = true;\n }\n\n // The first message must be the manifest\n // All the other messages must be files and must be described in the manifest\n const request: UploadPluginRequest = {\n data: {\n oneofKind: 'manifest',\n manifest: manifest\n }\n };\n await stream.requests.send(request);\n await send('README.md');\n await send('LICENSE.md');\n await send(manifest.executors);\n await send(manifest.configurators);\n await send(manifest.logo, [80, 80]);\n\n // Send everything inside the asset directory as assets\n if (manifest.assets && fs.existsSync(manifest.assets)) {\n const assets = await createArchive(manifest.assets);\n await send(manifest.assets, undefined, assets);\n }\n\n // Send everything inside the cdn directory as cdn files\n if (manifest.cdn && fs.existsSync(manifest.cdn)) {\n const cdn = await createArchive(manifest.cdn);\n await send(manifest.cdn, undefined, cdn);\n }\n\n // Send everything related to the vertices. Logos, schemas and configs\n for (let vertex of manifest.vertices) {\n await send(vertex.logo, [40, 40]);\n await send(vertex.metadata);\n if (vertex.config) {\n await send(vertex.config);\n }\n }\n\n await stream.requests.complete();\n printRpcSuccess(\n await stream.status,\n await stream.headers,\n await stream.trailers\n );\n}\n\nexport async function emulate(manifest: Manifest, host: string) {\n const transport = new GrpcTransport({\n host,\n channelCredentials: ChannelCredentials.createInsecure(),\n 'grpc.default_compression_algorithm': 2,\n 'grpc.default_compression_level': 2,\n 'grpc.max_send_message_length': 16 * 1024 * 1024\n });\n const client = new PluginServiceClient(transport);\n try {\n await sendPlugin(manifest, client);\n } catch (e: any) {\n if (e instanceof RpcError) {\n printRpcError(e);\n } else {\n console.error(e);\n }\n console.log(\n `For more information, use: ${chalk.blue('adaptkit help emulate')}`\n );\n }\n}\n\nexport async function publish(\n manifest: Manifest,\n host: string,\n accessToken: string,\n insecure: boolean\n) {\n const transport = new GrpcTransport({\n host,\n channelCredentials: insecure\n ? ChannelCredentials.createSsl(undefined, undefined, undefined, {\n checkServerIdentity: () => undefined\n })\n : ChannelCredentials.createSsl(),\n 'grpc.default_compression_algorithm': 2,\n 'grpc.default_compression_level': 2,\n 'grpc.max_send_message_length': 16 * 1024 * 1024\n } as GrpcOptions);\n const client = new PluginServiceClient(transport);\n const metadata: RpcMetadata = { authorization: `Bearer ${accessToken}` };\n try {\n await sendPlugin(manifest, client, metadata);\n } catch (e: any) {\n if (e instanceof RpcError) {\n printRpcError(e);\n } else {\n console.error(e);\n }\n console.log(\n `For more information, use: ${chalk.blue('adaptkit help publish')}`\n );\n }\n}\n\nfunction printRpcSuccess(\n status: RpcStatus,\n headers: RpcMetadata,\n trailers: RpcMetadata\n) {\n const line = chalk.green(\n '=================================================='\n );\n const title = chalk.bgGreen.black.bold(' RPC Success Details ');\n const statusCode =\n chalk.bold.white('Status Code: ') + chalk.greenBright.bold(status.code);\n const statusDetail = status.detail\n ? chalk.bold.white('Details: ') + chalk.greenBright(status.detail)\n : chalk.gray(' No Details Provided');\n\n const headerInfo =\n chalk.bold.white('Headers:\\n') +\n (headers\n ? chalk.blue(JSON.stringify(headers, null, 2))\n : chalk.gray(' No Metadata'));\n\n const trailerInfo =\n chalk.bold.white('Trailers:\\n') +\n (trailers\n ? chalk.blue(JSON.stringify(trailers, null, 2))\n : chalk.gray(' No Trailers'));\n\n console.log(line);\n console.log(title);\n console.log(line);\n console.log(statusCode);\n console.log(statusDetail);\n console.log(line);\n console.log(headerInfo);\n console.log(line);\n console.log(trailerInfo);\n console.log(line);\n console.log(chalk.bgGreen.black.bold(' SUCCESS '));\n console.log(line);\n}\n\nfunction printRpcError(error: RpcError) {\n const line = chalk.red('==================================================');\n const title = chalk.bgRed.white.bold(' RPC Error Details ');\n const name = chalk.bold.white('Name: ') + chalk.redBright.bold(error.name);\n const message =\n chalk.bold.white('Message: ') + chalk.redBright(error.message);\n const code = chalk.bold.white('Code: ') + chalk.redBright.bold(error.code);\n\n const methodName = error.methodName\n ? chalk.bold.white('Method Name: ') + chalk.yellowBright(error.methodName)\n : chalk.gray('No Method Name');\n\n const serviceName = error.serviceName\n ? chalk.bold.white('Service Name: ') + chalk.yellowBright(error.serviceName)\n : chalk.gray('No Service Name');\n\n const meta =\n chalk.bold.white('Metadata:\\n') +\n (error.meta\n ? chalk.blue(JSON.stringify(error.meta, null, 2))\n : chalk.gray(' No Metadata'));\n\n console.error(line);\n console.error(title);\n console.error(line);\n console.error(name);\n console.error(message);\n console.error(code);\n console.error(line);\n if (methodName) console.error(methodName);\n if (serviceName) console.error(serviceName);\n console.error(line);\n console.error(meta);\n console.error(line);\n console.error(chalk.bgRed.white.bold(' ERROR '));\n console.error(line);\n}\n", "// @generated by protobuf-ts 2.9.4 with parameter client_generic,force_server_none\n// @generated from protobuf file \"mochabugapis/adapt/plugins/v1/plugins.proto\" (package \"mochabugapis.adapt.plugins.v1\", syntax proto3)\n// tslint:disable\n//\n// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\nimport type { RpcTransport } from \"@protobuf-ts/runtime-rpc\";\nimport type { ServiceInfo } from \"@protobuf-ts/runtime-rpc\";\nimport { PluginService } from \"./plugins\";\nimport { stackIntercept } from \"@protobuf-ts/runtime-rpc\";\nimport type { UploadPluginResponse } from \"./plugins\";\nimport type { UploadPluginRequest } from \"./plugins\";\nimport type { ClientStreamingCall } from \"@protobuf-ts/runtime-rpc\";\nimport type { RpcOptions } from \"@protobuf-ts/runtime-rpc\";\n/**\n * PluginService provides a service for uploading a plugin.\n *\n * @generated from protobuf service mochabugapis.adapt.plugins.v1.PluginService\n */\nexport interface IPluginServiceClient {\n /**\n * UploadPlugin is a streaming RPC method that allows uploading a plugin in\n * chunks. The client can send multiple UploadPluginRequest messages, and the\n * server will respond with a single UploadPluginResponse after processing all\n * requests.\n *\n * @generated from protobuf rpc: UploadPlugin(stream mochabugapis.adapt.plugins.v1.UploadPluginRequest) returns (mochabugapis.adapt.plugins.v1.UploadPluginResponse);\n */\n uploadPlugin(options?: RpcOptions): ClientStreamingCall<UploadPluginRequest, UploadPluginResponse>;\n}\n/**\n * PluginService provides a service for uploading a plugin.\n *\n * @generated from protobuf service mochabugapis.adapt.plugins.v1.PluginService\n */\nexport class PluginServiceClient implements IPluginServiceClient, ServiceInfo {\n typeName = PluginService.typeName;\n methods = PluginService.methods;\n options = PluginService.options;\n constructor(private readonly _transport: RpcTransport) {\n }\n /**\n * UploadPlugin is a streaming RPC method that allows uploading a plugin in\n * chunks. The client can send multiple UploadPluginRequest messages, and the\n * server will respond with a single UploadPluginResponse after processing all\n * requests.\n *\n * @generated from protobuf rpc: UploadPlugin(stream mochabugapis.adapt.plugins.v1.UploadPluginRequest) returns (mochabugapis.adapt.plugins.v1.UploadPluginResponse);\n */\n uploadPlugin(options?: RpcOptions): ClientStreamingCall<UploadPluginRequest, UploadPluginResponse> {\n const method = this.methods[0], opt = this._transport.mergeOptions(options);\n return stackIntercept<UploadPluginRequest, UploadPluginResponse>(\"clientStreaming\", this._transport, method, opt);\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["define_PACKAGE_JSON_default", "chalk", "program", "figlet", "fs", "isValidHostname", "path", "semver", "updateNotifier", "confirm", "input", "select", "chalk", "fs", "ServiceType", "WireType", "UnknownFieldHandler", "reflectionMergePartial", "MessageType", "Vertex_VertexType", "VariableService_Type", "PrivateKeyAlg", "Oauth2GrantType", "Oauth2AuthType", "UploadPluginRequest$Type", "Manifest", "File", "value", "message", "reader", "length", "options", "target", "end", "fieldNo", "wireType", "u", "d", "writer", "UploadPluginRequest", "UploadPluginResponse$Type", "UploadPluginResponse", "File$Type", "Manifest$Type", "Vertex", "Oauth2Service", "VariableService", "MTLSService", "i", "Vertex$Type", "Oauth2CodeBinding", "MTLSService$Type", "VariableService$Type", "Oauth2Service$Type", "Oauth2Code", "Oauth2CodeBinding$Type", "Oauth2Code$Type", "map", "len", "key", "val", "k", "PluginService", "fs", "mkdirp", "path", "WireType", "UnknownFieldHandler", "reflectionMergePartial", "MessageType", "WireType", "UnknownFieldHandler", "reflectionMergePartial", "MessageType", "WireType", "UnknownFieldHandler", "reflectionMergePartial", "MessageType", "WireType", "UnknownFieldHandler", "reflectionMergePartial", "MessageType", "WireType", "UnknownFieldHandler", "reflectionMergePartial", "MessageType", "WireType", "UnknownFieldHandler", "reflectionMergePartial", "isJsonObject", "typeofJsonValue", "MessageType", "NullValue", "Struct$Type", "Value", "message", "options", "json", "k", "v", "target", "value", "reader", "length", "end", "fieldNo", "wireType", "u", "d", "map", "len", "key", "val", "writer", "Struct", "Value$Type", "ListValue", "numberValue", "listValueField", "f", "structValueField", "ListValue$Type", "values", "i", "JTDSchema$Type", "MessageType", "JTDSchema", "Struct", "value", "message", "reflectionMergePartial", "reader", "length", "options", "target", "end", "fieldNo", "wireType", "u", "d", "UnknownFieldHandler", "map", "len", "key", "val", "writer", "k", "WireType", "i", "SignalDescriptor$Type", "MessageType", "JTDSchema", "value", "message", "reflectionMergePartial", "reader", "length", "options", "target", "end", "fieldNo", "wireType", "u", "d", "UnknownFieldHandler", "writer", "WireType", "SignalDescriptor", "Transceiver$Type", "MessageType", "SignalDescriptor", "value", "message", "reflectionMergePartial", "reader", "length", "options", "target", "end", "fieldNo", "wireType", "u", "d", "UnknownFieldHandler", "writer", "WireType", "i", "Transceiver", "Exchange$Type", "MessageType", "Transceiver", "value", "message", "reflectionMergePartial", "reader", "length", "options", "target", "end", "fieldNo", "wireType", "u", "d", "UnknownFieldHandler", "writer", "WireType", "i", "Exchange", "WireType", "UnknownFieldHandler", "reflectionMergePartial", "MessageType", "Transmitter$Type", "MessageType", "SignalDescriptor", "value", "message", "reflectionMergePartial", "reader", "length", "options", "target", "end", "fieldNo", "wireType", "u", "d", "UnknownFieldHandler", "writer", "WireType", "i", "Transmitter", "WireType", "UnknownFieldHandler", "reflectionMergePartial", "MessageType", "WireType", "UnknownFieldHandler", "reflectionMergePartial", "MessageType", "SignalBinding_Error", "SignalBinding$Type", "MessageType", "SignalDescriptor", "Value", "value", "message", "reflectionMergePartial", "reader", "length", "options", "target", "end", "fieldNo", "wireType", "u", "d", "UnknownFieldHandler", "writer", "WireType", "SignalBinding", "Receiver$Type", "MessageType", "SignalBinding", "value", "message", "reflectionMergePartial", "reader", "length", "options", "target", "end", "fieldNo", "wireType", "u", "d", "UnknownFieldHandler", "writer", "WireType", "i", "Receiver", "VertexConfigMetadata$Type", "MessageType", "Receiver", "Transmitter", "Exchange", "value", "message", "reflectionMergePartial", "reader", "length", "options", "target", "end", "fieldNo", "wireType", "u", "d", "UnknownFieldHandler", "writer", "WireType", "i", "VertexConfigMetadata", "execSync", "fs", "mkdirp", "path", "chalk", "fileURLToPath", "readAsset", "name", "fs", "path", "writeFile", "filePath", "content", "dir", "mkdirp", "readManifest", "fullPath", "manifestData", "Manifest", "error", "labelize", "val", "convertVertexType", "type", "addVertex", "cwd", "name", "hasConfigurator", "existingVertices", "frontendLib", "folder", "path", "fs", "mkdirp", "execFile", "vertex", "labelize", "execSync", "uiPath", "writeFile", "readAsset", "generateExport", "v", "vertexConfig", "VertexConfigMetadata", "vertices", "env", "imports", "add", "manifest", "vertexName", "input", "val", "item", "vertexType", "select", "hasConfigurator", "confirm", "frontendLib", "chalk", "vertex", "addVertex", "fs", "Manifest", "confirm", "input", "select", "chalk", "execSync", "fs", "mkdirp", "path", "init", "dir", "name", "input", "val", "vertexType", "select", "vertexName", "hasConfigurator", "confirm", "frontendLib", "mkdirp", "cwd", "path", "writeFile", "readAsset", "defPackage", "execSync", "vertex", "addVertex", "chalk", "manifest", "labelize", "fs", "Manifest", "chalk", "randomBytes", "express", "fetch", "open", "pkceChallenge", "OAUTH_CALLBACK_PORT", "PORT_RANGE", "OAUTH_SCOPE", "AUDIENCE", "createCodeUrl", "clientId", "redirectUri", "scope", "state", "authUrl", "codeChallenge", "audience", "res", "createExchangeBody", "codeVerifier", "code", "startServer", "app", "attempt", "resolve", "reject", "currentPort", "server", "chalk", "err", "LOGGING_PREFIX", "waitForConsent", "issuerUrl", "errorUrl", "tokenUrl", "express", "randomBytes", "localUrls", "code_verifier", "code_challenge", "pkceChallenge", "resolveToken", "rejectToken", "token", "tokenPromise", "_", "codeUrl", "req", "queryString", "errorDescription", "body", "response", "fetch", "data", "error", "readAsset", "serverStart", "e", "open", "ChannelCredentials", "GrpcTransport", "RpcError", "archiver", "chalk", "fg", "fs", "path", "sharp", "PassThrough", "stackIntercept", "PluginServiceClient", "_transport", "PluginService", "options", "method", "opt", "resize", "filepath", "height", "width", "path", "sharp", "fs", "isPathSafe", "filePath", "currentWorkingDir", "folderExists", "folderPath", "absolutePath", "err", "createArchive", "folder", "resolve", "reject", "archive", "archiver", "buffers", "bufferStream", "PassThrough", "data", "res", "fg", "paths", "relativePath", "sendPlugin", "manifest", "client", "metadata", "stream", "lookup", "send", "imgOpts", "fileContent", "buffer", "message", "request", "assets", "cdn", "vertex", "printRpcSuccess", "emulate", "host", "transport", "GrpcTransport", "ChannelCredentials", "PluginServiceClient", "e", "RpcError", "printRpcError", "chalk", "publish", "accessToken", "insecure", "status", "headers", "trailers", "line", "title", "statusCode", "statusDetail", "headerInfo", "trailerInfo", "error", "name", "code", "methodName", "serviceName", "meta", "isValidUrl", "urlString", "isValidPort", "port", "portNumber", "isValidHostWithPort", "hostWithPort", "hostname", "isValidHostname", "banner", "chalk", "figlet", "handleInit", "dir", "cmd", "init", "handleAdd", "manifest", "readManifest", "add", "handlePublish", "host", "authUrl", "client", "insecure", "errorUrl", "isValid", "accessToken", "waitForConsent", "publish", "handleEmulate", "emulate", "handleVersion", "bump", "manVer", "semver", "prevVersion", "fs", "path", "Manifest", "main", "updateNotifier", "define_PACKAGE_JSON_default", "program", "DEFAULT_INIT_DIRECTORY", "_", "authority", "major", "minor", "patch", "error"]
|
|
7
7
|
}
|