{"_id":"@consonant/proto-relayer","name":"@consonant/proto-relayer","dist-tags":{"alpha":"0.1.0-alpha.1","latest":"0.1.0-alpha.1"},"versions":{"0.1.0-alpha.1":{"name":"@consonant/proto-relayer","version":"0.1.0-alpha.1","description":"Shared Protocol Buffer definitions for Consonant Relayer gRPC streaming","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"},"./relayer":{"import":"./dist/v1/relayer.js","types":"./dist/v1/relayer.d.ts"},"./common":{"import":"./dist/v1/common.js","types":"./dist/v1/common.d.ts"},"./command":{"import":"./dist/v1/command.js","types":"./dist/v1/command.d.ts"},"./event":{"import":"./dist/v1/event.js","types":"./dist/v1/event.d.ts"}},"scripts":{"clean":"rm -rf dist src/generated","generate":"bash scripts/generate.sh","build":"npm run generate && tsc","watch":"tsc --watch","prepublishOnly":"npm run clean && npm run build","publish:alpha":"npm publish --tag alpha","publish:latest":"npm publish"},"keywords":["grpc","protobuf","consonant","relayer","streaming","typescript"],"author":{"name":"Consonant Team"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/consonant/proto-relayer.git"},"bugs":{"url":"https://github.com/consonant/proto-relayer/issues"},"homepage":"https://github.com/consonant/proto-relayer#readme","engines":{"node":">=20.0.0"},"dependencies":{"@grpc/grpc-js":"^1.14.3","protobufjs":"^7.4.0"},"devDependencies":{"@types/node":"^22.10.5","ts-proto":"^2.2.5","typescript":"^5.7.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"gitHead":"72accc46587286d8c5f0141c4c58badeca2ef27f","_id":"@consonant/proto-relayer@0.1.0-alpha.1","_nodeVersion":"24.11.1","_npmVersion":"11.6.2","dist":{"integrity":"sha512-6gOH22VIvVANs8B8PZ1Vamc7ZJdpJxmLN7KpqFb3hKeZSyQUdwlgEKeEyAfFf3YQK6tuwuXDgGy4nxZ7HkUE2w==","shasum":"0fc08c8c6534f628c33110ced597fa066bf455d7","tarball":"https://registry.npmjs.org/@consonant/proto-relayer/-/proto-relayer-0.1.0-alpha.1.tgz","fileCount":34,"unpackedSize":411795,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD1GqT207PPzMCPyJLQsbuvpXmG6fsqfw68TbVPf7MVYQIhAO6oNWFg/lFkiOoXSIVuB0pxk2jAzxxYI7haNMKGeMZa"}]},"_npmUser":{"name":"consonant","email":"peterkayode2018@gmail.com"},"directories":{},"maintainers":[{"name":"consonant","email":"peterkayode2018@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/proto-relayer_0.1.0-alpha.1_1767693310623_0.44962324537597853"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-06T09:55:10.543Z","0.1.0-alpha.1":"2026-01-06T09:55:10.794Z","modified":"2026-01-06T09:55:11.082Z"},"maintainers":[{"name":"consonant","email":"peterkayode2018@gmail.com"}],"description":"Shared Protocol Buffer definitions for Consonant Relayer gRPC streaming","homepage":"https://github.com/consonant/proto-relayer#readme","keywords":["grpc","protobuf","consonant","relayer","streaming","typescript"],"repository":{"type":"git","url":"git+https://github.com/consonant/proto-relayer.git"},"author":{"name":"Consonant Team"},"bugs":{"url":"https://github.com/consonant/proto-relayer/issues"},"license":"Apache-2.0","readme":"# @consonant/proto-relayer\n\nShared Protocol Buffer definitions for Consonant Relayer gRPC streaming.\n\n## Overview\n\nThis package provides type-safe TypeScript interfaces for bidirectional gRPC streaming between:\n- **Relayer** (cluster-resident agent)\n- **Backend** (self-hosted control plane)\n\n## Installation\n\n```bash\nnpm install @consonant/proto-relayer\n```\n\n## Usage\n\n### Server (Backend)\n\n```typescript\nimport { \n  RelayerServiceService,\n  ServerMessage,\n  ClientMessage,\n  StreamInitResponse\n} from '@consonant/proto-relayer';\nimport * as grpc from '@grpc/grpc-js';\n\n// Implement the service\nconst relayerService: RelayerServiceService = {\n  OpenStream: (stream: grpc.ServerDuplexStream<ClientMessage, ServerMessage>) => {\n    // Handle bidirectional stream\n    stream.on('data', (message: ClientMessage) => {\n      if (message.initRequest) {\n        // Handle init\n        const response: ServerMessage = {\n          initResponse: {\n            accepted: true,\n            message: 'Connected',\n            timestamp: new Date(),\n            serverVersion: '1.0.0'\n          }\n        };\n        stream.write(response);\n      }\n    });\n  }\n};\n\n// Create server\nconst server = new grpc.Server();\nserver.addService(RelayerServiceService, relayerService);\n```\n\n### Client (Relayer)\n\n```typescript\nimport {\n  RelayerServiceClient,\n  ClientMessage,\n  ServerMessage,\n  credentials,\n  GrpcMetadata\n} from '@consonant/proto-relayer';\n\n// Create client\nconst client = new RelayerServiceClient(\n  'backend.company.com:50051',\n  credentials.createSsl()\n);\n\n// Add authentication metadata\nconst metadata = new GrpcMetadata();\nmetadata.set('cluster-id', 'cluster_abc123');\nmetadata.set('cluster-token', 'secret_token');\n\n// Open stream\nconst stream = client.OpenStream(metadata);\n\n// Send init request\nconst initMsg: ClientMessage = {\n  initRequest: {\n    identity: {\n      clusterId: 'cluster_abc123',\n      clusterName: 'production',\n      namespace: 'consonant-system',\n      region: 'us-east-1',\n      environment: 'production'\n    },\n    metadata: {\n      kubernetesVersion: '1.32.0',\n      relayerVersion: '0.1.0',\n      cloudProvider: 'aws',\n      nodeCount: 3,\n      labels: {}\n    },\n    initiatedAt: new Date(),\n    capabilities: ['commands', 'events', 'telemetry']\n  }\n};\n\nstream.write(initMsg);\n\n// Handle server messages\nstream.on('data', (message: ServerMessage) => {\n  if (message.command) {\n    // Execute command\n  }\n});\n```\n\n## Protocol\n\n### Authentication\n\nAuthentication is via gRPC metadata:\n```typescript\nmetadata.set('cluster-id', 'cluster_xxx');\nmetadata.set('cluster-token', 'secret_token');\n```\n\n### Message Flow\n\n1. **Relayer → Backend**: `StreamInitRequest`\n2. **Backend → Relayer**: `StreamInitResponse`\n3. Bidirectional communication:\n   - **Backend → Relayer**: `Command`, `Heartbeat`\n   - **Relayer → Backend**: `Event`, `CommandResult`, `Heartbeat`\n\n### Keepalive\n\nBoth sides send `Heartbeat` messages every 30 seconds.\n\n## Development\n\n### Prerequisites\n\n- Node.js ≥ 20.0.0\n- protoc ≥ 3.0.0\n\n### Generate Code\n\n```bash\nnpm run generate\n```\n\n### Build\n\n```bash\nnpm run build\n```\n\n### Publish\n\n```bash\nnpm run publish:alpha  # For alpha releases\nnpm run publish:latest # For stable releases\n```\n\n## License\n\nApache-2.0","readmeFilename":"README.md","_rev":"1-773284114f03291a438f5068b3ff0eba"}