mirror of
https://github.com/hcengineering/platform.git
synced 2026-08-25 05:42:23 +02:00
+1








98652c6476
* Add bump-changes * Add utility tests * Add utility tests * Bump to new version of esbuild and typescript * v0.7.3 * use platform rig 0.7.10 * upgrade: memory engine optimized; change name to (was recommended by Copilot and Onnikov, TODO: CHANGE CLIENT TOO!!!) Signed-off-by: Leonid Kaganov <lleo@lleo.me> * Fix rate limits bug * Bump versions * Fix lock file * Fix bug in queue cleanup * Add more tests for queue * Add api-test tests * Initial commit * Improve hierarchy + tests Add tests for hierarchy and few performance/memory optimizations. * Add more hierarchy tests * Move from Huly platform repository * Add docker tests setup * Fix test to be executed only once * Add connection tests * Fix package include source files * More tests * Create README.md * Fix pnpm lock * Fix packages publish * Remove broken tests * feat: adjust hulylake client for storage adapter Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * Fix export * Fix publish * Fix message update (#114) Signed-off-by: Kristina Fefelova <kristin.fefelova@gmail.com> * Bump version Signed-off-by: Kristina Fefelova <kristin.fefelova@gmail.com> * Bump versions Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * Fix lang store (#115) Signed-off-by: Kristina Fefelova <kristin.fefelova@gmail.com> * update hulylake client Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * Bump version Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * Add hulylake storage adapter Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * Bump version Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * fix validation issues Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * fix: do not fail on deseralization error and add logs Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * bump version -> 0.1.14 Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * fix collaboration test Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * Update prettier and new update-deps script Prettier + svelte support * fix unstable ydoc tests Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * Add tx ordering middleware * Fix ordering tests * Fix Kafka close of admin * Add tests for measurement and understand overhead * Fix not updated lock file * Fix update-deps * Fix update-deps * Use latest platform-rig * Fix deps * Add rush check to CI * Use latest versions * Bump versions * Fix lock file * validate json patch Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * bump version -> 0.1.15 Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * fix merge unit tests Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * Script to sync eslint deps * Fix deps * Fix tests * Fix platform-rig detection * Update to latest platform-rig * Update to latest platform rig and core * Bump typescript * Bump typescript * Rollback eslint plugins * Fix lock file * Bump platform-rig * Update to latest platform-rig * update to latest platform-rig * Allow to compile svelte files * Add ui-test component for checking compile * Fix log levels rename compile ui -> compile ui-esbuild * Fix build * Bump esbuild svelte version * Chore: use fixed versions in update-deps Signed-off-by: Alexey Zinoviev <alexey.zinoviev@xored.com> * Chore: commit changes Signed-off-by: Alexey Zinoviev <alexey.zinoviev@xored.com> * Update deps * Add tests for session manager * Fix txOrdering implementation * Bump ordering * Prevent metrics zero values in measure + Fix format svelte files * Revert update-deps script logic * v0.7.19 * update to latest platform-rig * Update deps * Fix pnpm * Session counters * Fix pnpm lock * Add storage client Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * Bump versions Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * fix versions Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * Bump core * Fix pnpm * Get rid of communication dependency * Add copilot memory file * Use proper name for instructions file * Fix instructions * Use domain instead of test name in gauges * Update instructions file * fix front service upload Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * remove incorrect test Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * Move packages to huly.core * Move packages to core, since they are not utils * Add global user profile Signed-off-by: Alexey Zinoviev <alexey.zinoviev@xored.com> * Fix lock file Signed-off-by: Alexey Zinoviev <alexey.zinoviev@xored.com> * Add support for memory limit check * Bump version * Fix pnpm * report more accurate upload progress Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * fic validation issues Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * Fix deps Signed-off-by: Kristina Fefelova <kristin.fefelova@gmail.com> * Move LowLevelStorage to server * Fix linting * Revert "Fix linting" This reverts commit54631d353e. * Revert "Move LowLevelStorage to server" This reverts commitaafb8f6f12. * feature: add regorus engine with permit file Signed-off-by: Leonid Kaganov <lleo@lleo.me> * Fix one second counters for memory usage * Fix kafka test * use fresh core * Version bump * fix: key parameter added Signed-off-by: Leonid Kaganov <lleo@lleo.me> * Fix readme and few author mistakes * Export domain schemas * Bump version * Tests (#117) Signed-off-by: Kristina Fefelova <kristin.fefelova@gmail.com> * Bump version Signed-off-by: Kristina Fefelova <kristin.fefelova@gmail.com> * feat: compact compact worker (#4) Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * bump version -> 0.1.16 Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * Add TypeIdentifier Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com> * Add change logs Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com> * rename send -> try_send Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * Bump Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com> * Fix pnpm lock Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com> * Add identifier middleware, bump core Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com> * Add subsciption methods to account client Signed-off-by: Alexey Zinoviev <alexey.zinoviev@xored.com> * Fix lock file Signed-off-by: Alexey Zinoviev <alexey.zinoviev@xored.com> * Fix reaction notification (#118) Signed-off-by: Kristina Fefelova <kristin.fefelova@gmail.com> * Bump version Signed-off-by: Kristina Fefelova <kristin.fefelova@gmail.com> * Improve find methods schemas to convert to valid types Signed-off-by: Nikolay Marchuk <nikolay.marchuk@hardcoreeng.com> * Add change description Signed-off-by: Nikolay Marchuk <nikolay.marchuk@hardcoreeng.com> * Do not transcode while recording Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * Open telemetry support Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * use proper content type in multipart upload Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * Bump versions Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * fix build (#26) Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * Fix peers (#120) Signed-off-by: Kristina Fefelova <kristin.fefelova@gmail.com> * Bump version Signed-off-by: Kristina Fefelova <kristin.fefelova@gmail.com> * Add ActivityCollaborativeChange Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com> * Update pnpm Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com> * Allow to suspend errors on with * Fix pnpm cache * update versions * v0.7.17 for all * v0.7.11 * v0.7.14 * remove arc from worker Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * bump version -> 0.1.17 Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * Rank for attributes Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com> * Update pnpm Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com> * Fix one second counters * Fix withContext and allow pass options * Fix formatting * Use updated deps * Bump versions * Update deps * Update deps to platform.core * add support for textColor mark Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * add support for textStyle mark Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * Bump versions Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * Bump versions again Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * Fix Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com> * Rework on second timers * fix merge of large blobs feched from s3 Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * bump version -> 0.1.18 Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * New subscription methods in account-client * Update lock file Signed-off-by: Alexey Zinoviev <alexey.zinoviev@xored.com> * Send error on find for wrong domain * Suspend connect custom errors events in traces * Bump client * Bump core * update deps * Fix lock file * Sorting for TypeIdentifier Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com> * Bump version Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com> * add workspace usage info Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * Bump versions Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> * Improve pg security perfomance Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com> * Fix identifier middleware Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com> * Update TxAccessLevel interface Signed-off-by: Alexey Zinoviev <alexey.zinoviev@xored.com> * Allow guest to update its identities Signed-off-by: Alexey Zinoviev <alexey.zinoviev@xored.com> * Add password login locked platform status Signed-off-by: Alexey Zinoviev <alexey.zinoviev@xored.com> * Fix Uptrace normalizeMarkdown errors Signed-off-by: Artem Savchenko <armisav@gmail.com> * Add change log Signed-off-by: Artem Savchenko <armisav@gmail.com> * Add txMatch to permission Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com> * update pnpm lock Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com> * Bump Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com> * Fix permission middleware Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com> * Fix enum sorting Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com> * Enable formatting check Signed-off-by: Andrey Sobolev <haiodo@gmail.com> * Enable formatting check * Add change Signed-off-by: Andrey Sobolev <haiodo@gmail.com> * Fix Uptrace NaN error Signed-off-by: Artem Savchenko <armisav@gmail.com> * feature: removed actors, improved performance Signed-off-by: Leonid Kaganov <lleo@lleo.me> * feature: ping from server to clients added Signed-off-by: Leonid Kaganov <lleo@lleo.me> * feature: ping from server to clients added Signed-off-by: Leonid Kaganov <lleo@lleo.me> * Compress kafka messages and fix exception in findAll Signed-off-by: Artem Savchenko <armisav@gmail.com> * Bump versions Signed-off-by: Artem Savchenko <armisav@gmail.com> * Bump versions Signed-off-by: Artem Savchenko <armisav@gmail.com> * Rush change Signed-off-by: Artem Savchenko <armisav@gmail.com> * Fix compression param Signed-off-by: Artem Savchenko <armisav@gmail.com> * Trigger change Signed-off-by: Artem Savchenko <armisav@gmail.com> * Clean up Signed-off-by: Artem Savchenko <armisav@gmail.com> * Trigger change Signed-off-by: Artem Savchenko <armisav@gmail.com> * Bump markdown version Signed-off-by: Artem Savchenko <armisav@gmail.com> * Enable sub projects * Fix wrong double symbol scripts * Include foundation packages * Add support for custom exclude filters Add support for custom exclude filters - by Andrey Sobolev - haiodo@gmail.com Signed-off-by: Andrey Sobolev <haiodo@gmail.com> * Bump Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com> * Fix Uptrace filter is not a function error Signed-off-by: Artem Savchenko <armisav@gmail.com> * Sync versions Signed-off-by: Andrey Sobolev <haiodo@gmail.com> --------- Signed-off-by: Leonid Kaganov <lleo@lleo.me> Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> Signed-off-by: Kristina Fefelova <kristin.fefelova@gmail.com> Signed-off-by: Alexey Zinoviev <alexey.zinoviev@xored.com> Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com> Signed-off-by: Nikolay Marchuk <nikolay.marchuk@hardcoreeng.com> Signed-off-by: Artem Savchenko <armisav@gmail.com> Signed-off-by: Andrey Sobolev <haiodo@gmail.com> Co-authored-by: Leonid Kaganov <lleo@lleo.me> Co-authored-by: Alexander Onnikov <Alexander.Onnikov@xored.com> Co-authored-by: Alexander Onnikov <Alexander.Onnikov@gmail.com> Co-authored-by: Kristina <kristin.fefelova@gmail.com> Co-authored-by: Alexey Zinoviev <alexey.zinoviev@xored.com> Co-authored-by: Denis Bykhov <bykhov.denis@gmail.com> Co-authored-by: Nikolay Marchuk <nikolay.marchuk@hardcoreeng.com> Co-authored-by: Alexander Onnikov <aonnikov@hardcoreeng.com> Co-authored-by: Artem Savchenko <armisav@gmail.com>
395 lines
10 KiB
Markdown
395 lines
10 KiB
Markdown
# Huly Network Examples
|
|
|
|
This directory contains comprehensive examples demonstrating various aspects of the Huly Virtual Network.
|
|
|
|
## 🆕 Updated to Use Typed Proxies
|
|
|
|
All examples have been updated to demonstrate the new **typed proxies** using the `cast<T>()` method. This provides:
|
|
|
|
- ✅ **Full type safety** - TypeScript checks method signatures
|
|
- ✅ **IDE autocomplete** - Get suggestions for available methods
|
|
- ✅ **Better documentation** - Interfaces serve as contracts
|
|
- ✅ **Refactoring safety** - Compile-time errors catch issues
|
|
|
|
See [PROXY_MIGRATION.md](./PROXY_MIGRATION.md) for detailed migration guide.
|
|
|
|
## Running Examples
|
|
|
|
### Example Usage
|
|
|
|
```typescript
|
|
// Define your service interface
|
|
interface MyService {
|
|
getData: (id: string) => Promise<{ data: any }>
|
|
updateData: (id: string, data: any) => Promise<boolean>
|
|
}
|
|
|
|
// On client side - use cast() for typed proxy
|
|
const containerRef = await client.get('my-service', {})
|
|
const service = containerRef.cast<MyService>('MyService')
|
|
|
|
// Call methods with full type safety
|
|
const result = await service.getData('123')
|
|
await service.updateData('123', { updated: true })
|
|
```
|
|
|
|
## Important Note: Auto-Disposal
|
|
|
|
All examples in this directory use the `await using` keyword for automatic client disposal. This ensures proper cleanup when the example completes or if an error occurs. For production services that need to run indefinitely, you should use manual lifecycle management instead. See [docs/AUTO_DISPOSAL_GUIDE.md](../docs/AUTO_DISPOSAL_GUIDE.md) for detailed guidance.
|
|
|
|
## Quick Start
|
|
|
|
Before running any example, make sure you have:
|
|
|
|
1. Built the project:
|
|
|
|
```bash
|
|
node common/scripts/install-run-rush.js build
|
|
```
|
|
|
|
2. Either start a standalone network server:
|
|
|
|
```bash
|
|
cd pods/network-pod && rushx dev
|
|
```
|
|
|
|
Or let the example start its own network server (most examples do this).
|
|
|
|
3. Run an example:
|
|
|
|
```bash
|
|
cd examples
|
|
rushx run:basic
|
|
```
|
|
|
|
## Examples
|
|
|
|
### 01 - Basic Container with Request/Response
|
|
|
|
**File**: `01-basic-container-request-response.ts`
|
|
|
|
Learn the fundamentals of creating containers with typed proxies. This example shows:
|
|
|
|
- Defining service interfaces for type safety
|
|
- Container implementation with `createProxyHandler`
|
|
- Using `cast<T>()` method for typed proxies
|
|
- Request/response pattern with full TypeScript support
|
|
- State management within containers
|
|
- Proper lifecycle management
|
|
|
|
**Key concepts**:
|
|
|
|
```typescript
|
|
// Define interface
|
|
interface DataProcessorService {
|
|
store: (key: string, value: any) => Promise<{ success: boolean }>
|
|
retrieve: (key: string) => Promise<{ success: boolean; value: any }>
|
|
}
|
|
|
|
// Use typed proxy
|
|
const processor = containerRef.cast<DataProcessorService>('DataProcessorService')
|
|
await processor.store('key', value)
|
|
```
|
|
|
|
**Use case**: Simple data storage service, key-value stores, stateful services
|
|
|
|
---
|
|
|
|
### 02 - Event Broadcasting
|
|
|
|
**File**: `02-event-broadcasting.ts`
|
|
|
|
Demonstrates real-time event broadcasting to multiple connected clients with typed proxies. Features:
|
|
|
|
- Defining chat service interface with typed methods
|
|
- Multiple clients connecting to the same container
|
|
- Broadcasting events to all connected clients
|
|
- Using typed proxies for chat operations
|
|
- Connection lifecycle management
|
|
|
|
**Key concepts**:
|
|
|
|
```typescript
|
|
// Define interface
|
|
interface ChatRoomService {
|
|
sendMessage: (username: string, text: string) => Promise<{ success: boolean }>
|
|
getHistory: () => Promise<{ messages: ChatMessage[] }>
|
|
}
|
|
|
|
// Use typed proxy
|
|
const chat = connection.cast<ChatRoomService>('ChatRoomService')
|
|
await chat.sendMessage('Alice', 'Hello!')
|
|
const history = await chat.getHistory()
|
|
```
|
|
|
|
**Use case**: Chat systems, real-time notifications, collaborative editing, live dashboards
|
|
|
|
---
|
|
|
|
### 03 - Multi-Tenant Container Management
|
|
|
|
**File**: `03-multi-tenant.ts`
|
|
|
|
Shows how to build multi-tenant applications with isolated workspaces. Includes:
|
|
|
|
- Per-tenant container isolation
|
|
- Label-based container selection
|
|
- Tenant-specific data management
|
|
- User and document management per tenant
|
|
|
|
**Use case**: SaaS applications, workspace management, multi-tenant platforms
|
|
|
|
---
|
|
|
|
### 04 - Complete Production Setup
|
|
|
|
**File**: `04-complete-production-setup.ts`
|
|
|
|
A comprehensive production-ready example with:
|
|
|
|
- Multiple redundant agents for high availability
|
|
- Health monitoring and metrics collection
|
|
- Event monitoring for observability
|
|
- Graceful shutdown handling
|
|
- Signal handling (SIGTERM, SIGINT)
|
|
- Error handling and logging
|
|
|
|
**Use case**: Production deployments, enterprise systems, mission-critical services
|
|
|
|
---
|
|
|
|
### 05 - Error Handling and Retry Logic
|
|
|
|
**File**: `05-error-handling-retry.ts`
|
|
|
|
Advanced error handling patterns including:
|
|
|
|
- Exponential backoff retry logic
|
|
- Timeout handling
|
|
- Graceful degradation with fallbacks
|
|
- Circuit breaker pattern
|
|
- Concurrent request handling with error isolation
|
|
|
|
**Use case**: Unreliable networks, external service integration, fault-tolerant systems
|
|
|
|
---
|
|
|
|
### Custom Timeout Example
|
|
|
|
**File**: `custom-timeout-example.ts`
|
|
|
|
Shows how to configure different timeouts for various environments:
|
|
|
|
- Development vs production timeouts
|
|
- Connection timeout configuration
|
|
- Keep-alive timeout settings
|
|
|
|
**Use case**: Environment-specific configuration, debugging, performance tuning
|
|
|
|
---
|
|
|
|
### High Availability (HA) Stateless Container Example
|
|
|
|
**File**: `ha-stateless-container-example.ts`
|
|
|
|
Demonstrates automatic failover with stateless containers:
|
|
|
|
- Multiple agents competing for the same container UUID
|
|
- Automatic leader election
|
|
- Failover when primary fails
|
|
- Standby agents taking over automatically
|
|
|
|
**Use case**: Leader election, active-passive HA, single-instance services with failover
|
|
|
|
## Example Categories
|
|
|
|
### For Beginners
|
|
|
|
Start with these examples to learn the basics:
|
|
|
|
1. `01-basic-container-request-response.ts`
|
|
2. `custom-timeout-example.ts`
|
|
|
|
### For Application Developers
|
|
|
|
Build real applications with these patterns:
|
|
|
|
1. `02-event-broadcasting.ts` - Real-time features
|
|
2. `03-multi-tenant.ts` - SaaS applications
|
|
|
|
### For DevOps/Production
|
|
|
|
Production-ready patterns:
|
|
|
|
1. `04-complete-production-setup.ts` - Full production setup
|
|
2. `05-error-handling-retry.ts` - Robust error handling
|
|
3. `ha-stateless-container-example.ts` - High availability
|
|
|
|
## How to Run Examples
|
|
|
|
### Prerequisites
|
|
|
|
Make sure you have installed dependencies:
|
|
|
|
```bash
|
|
rush install
|
|
```
|
|
|
|
### Run a single example
|
|
|
|
```bash
|
|
cd examples
|
|
rushx run:basic # Run basic container request-response example
|
|
```
|
|
|
|
All available examples:
|
|
|
|
- `rushx run:basic` - Basic container request-response
|
|
- `rushx run:events` - Event broadcasting
|
|
- `rushx run:multi-tenant` - Multi-tenant setup
|
|
- `rushx run:production` - Complete production setup
|
|
- `rushx run:retry` - Error handling and retry
|
|
- `rushx run:timeout` - Custom timeout configuration
|
|
- `rushx run:ha` - High-availability stateless containers
|
|
|
|
### Run with custom network host
|
|
|
|
Most examples connect to `localhost:3737` by default. To use a different host:
|
|
|
|
```typescript
|
|
const client = createNetworkClient('your-host:3737')
|
|
```
|
|
|
|
### Debug mode
|
|
|
|
Run with longer timeouts for debugging:
|
|
|
|
```bash
|
|
cd examples
|
|
NODE_ENV=development rushx run:basic
|
|
```
|
|
|
|
## Common Patterns
|
|
|
|
### Container Implementation Template
|
|
|
|
```typescript
|
|
import type { Container, ContainerUuid, ClientUuid } from '@hcengineering/network-core'
|
|
|
|
class MyContainer implements Container {
|
|
constructor(readonly uuid: ContainerUuid) {}
|
|
|
|
async request(operation: string, data?: any, clientId?: ClientUuid): Promise<any> {
|
|
switch (operation) {
|
|
case 'myOperation':
|
|
return { success: true, result: 'data' }
|
|
default:
|
|
return { success: false, error: 'Unknown operation' }
|
|
}
|
|
}
|
|
|
|
async ping(): Promise<void> {}
|
|
async terminate(): Promise<void> {}
|
|
|
|
connect(clientId: ClientUuid, broadcast: (data: any) => Promise<void>): void {}
|
|
disconnect(clientId: ClientUuid): void {}
|
|
}
|
|
```
|
|
|
|
### Client Usage Template
|
|
|
|
```typescript
|
|
import { createNetworkClient } from '@hcengineering/network-client'
|
|
|
|
const client = createNetworkClient('localhost:3737')
|
|
await client.waitConnection(5000)
|
|
|
|
const containerRef = await client.get('my-service' as any, {})
|
|
const result = await containerRef.request('myOperation', { data: 'value' })
|
|
|
|
await containerRef.close()
|
|
await client.close()
|
|
```
|
|
|
|
### Agent Setup Template
|
|
|
|
```typescript
|
|
import { createNetworkClient } from '@hcengineering/network-client'
|
|
|
|
const client = createNetworkClient('localhost:3737')
|
|
await client.waitConnection(5000)
|
|
|
|
await client.serveAgent('localhost:3738', {
|
|
'my-service': async (options) => {
|
|
const uuid = options.uuid ?? generateUuid()
|
|
const container = new MyContainer(uuid)
|
|
return {
|
|
uuid,
|
|
container,
|
|
endpoint: `my-service://host/${uuid}` as any
|
|
}
|
|
}
|
|
})
|
|
|
|
// Agent server is already started and registered to network
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Connection refused
|
|
|
|
- Ensure the network server is running on the specified port
|
|
- Check firewall settings
|
|
- Verify the correct host and port are being used
|
|
|
|
### Container not found
|
|
|
|
- Ensure the agent is registered with the network
|
|
- Check that the container kind matches what the agent supports
|
|
- Verify the agent is still alive (check agent health)
|
|
|
|
### Timeout errors
|
|
|
|
- Increase timeout values for debugging: `createNetworkClient('host:port', 3600)`
|
|
- Check network connectivity
|
|
- Verify services are responding to ping/health checks
|
|
|
|
### Type errors in examples
|
|
|
|
The examples use dynamic container kinds (strings) which may show TypeScript errors. This is expected and doesn't affect functionality. In production, define proper types:
|
|
|
|
```typescript
|
|
type MyContainerKind = 'my-service' as ContainerKind
|
|
```
|
|
|
|
## Additional Resources
|
|
|
|
- [Main README](../README.md) - Full project documentation
|
|
- [HA Stateless Containers](../docs/HA_STATELESS_CONTAINERS.md) - Detailed HA documentation
|
|
- [Quick Start HA](../docs/QUICKSTART_HA.md) - 5-minute HA guide
|
|
- [API Reference](../README.md#-api-reference) - Complete API documentation
|
|
|
|
## Contributing Examples
|
|
|
|
To contribute a new example:
|
|
|
|
1. Create a new file: `XX-descriptive-name.ts`
|
|
2. Include comprehensive comments and documentation
|
|
3. Follow the existing example structure
|
|
4. Add entry to this README
|
|
5. Test thoroughly
|
|
6. Submit a pull request
|
|
|
|
Example template structure:
|
|
|
|
- Header comment with description and usage
|
|
- Imports
|
|
- Container implementation (if applicable)
|
|
- Main function with clear sections
|
|
- Proper cleanup
|
|
- Export reusable components
|
|
|
|
---
|
|
|
|
**Need help?** Open an issue on GitHub or check the main documentation.
|