{"_id":"@teliagen/federation","_rev":"34-54ad9771fef8f0e45e6ade76bc352e6d","name":"@teliagen/federation","dist-tags":{"latest":"0.4.3"},"versions":{"0.4.0":{"name":"@teliagen/federation","version":"0.4.0","author":{"name":"Teliagen Team","email":"contact@teliagen.org"},"license":"Apache-2.0","_id":"@teliagen/federation@0.4.0","maintainers":[{"name":"teliagen_off","email":"admin@teliagen.org"}],"homepage":"https://docs.teliagen.org","bugs":{"url":"https://github.com/teliagen/teliagen-framework/issues"},"dist":{"shasum":"7c6f4cd3a260119e089a835b6ac0405800c0312d","tarball":"https://registry.npmjs.org/@teliagen/federation/-/federation-0.4.0.tgz","fileCount":12,"integrity":"sha512-zl1AzYVT3QKEdolHj883dBL/Ee0497AwUGvNN2UO+YI8akt+5HQK/LQpJJ9udr2ZAtQmPsuTXZsfUr4o/pD4Wg==","signatures":[{"sig":"MEQCIAsMFpEP8fDmbSRopi1GKaJEqDIEPdzwhUOMdRXDShS0AiBYJKZta+OxAtZGUynprL67J09D2VpYwxyl3fOtYpiZ2w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":80176},"main":"dist/index.js","type":"module","_from":"file:teliagen-federation-0.4.0.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./generator":{"types":"./dist/generator/index.d.ts","import":"./dist/generator/index.js","default":"./dist/generator/index.js","require":"./dist/generator/index.js"}},"private":false,"scripts":{"dev":"tsc --watch","build":"tsc"},"_npmUser":{"name":"teliagen_off","email":"admin@teliagen.org"},"_resolved":"C:\\Users\\ABDOUL~1\\AppData\\Local\\Temp\\9439c061eebbc082663df56a2b68e79f\\teliagen-federation-0.4.0.tgz","_integrity":"sha512-zl1AzYVT3QKEdolHj883dBL/Ee0497AwUGvNN2UO+YI8akt+5HQK/LQpJJ9udr2ZAtQmPsuTXZsfUr4o/pD4Wg==","repository":{"url":"git+https://github.com/teliagen/teliagen-framework.git","type":"git","directory":"packages/federation"},"_npmVersion":"11.6.2","description":"Inter-service communication and federation for Teliagen","directories":{},"_nodeVersion":"24.12.0","dependencies":{"fs-extra":"^11.3.3","@teliagen/logger":"0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","@types/node":"^22.10.7","@types/fs-extra":"^11.0.4","@teliagen/server":"0.4.0","reflect-metadata":"^0.2.2","@teliagen/commons":"0.4.0"},"peerDependencies":{"@teliagen/server":"0.4.0","reflect-metadata":"^0.2.2","@teliagen/commons":"0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/federation_0.4.0_1770857901555_0.48980600090699755","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@teliagen/federation","version":"0.4.1","author":{"name":"Teliagen Team","email":"contact@teliagen.org"},"license":"Apache-2.0","_id":"@teliagen/federation@0.4.1","maintainers":[{"name":"teliagen_off","email":"admin@teliagen.org"}],"homepage":"https://docs.teliagen.org","bugs":{"url":"https://github.com/teliagen/teliagen-framework/issues"},"dist":{"shasum":"838f83c2a6895ee8f31b744be971a28dd6f9f6d5","tarball":"https://registry.npmjs.org/@teliagen/federation/-/federation-0.4.1.tgz","fileCount":12,"integrity":"sha512-YFmvaDwLHXJqAW4CCzud8p9x4F7N5PXHllqq4f/M0uN6dW6BYY/enE4qBkW3/xezlFl7MbEHi/GLmyjtNydixA==","signatures":[{"sig":"MEYCIQCtUOxCs4qPxfhZgwQn1dT/u6lKHaIJQdI2KDMvukM3ugIhAN2SAZF1wXEwvsTrvKaq+MidFKPIRk/ehZG/y9QOC4B/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":80176},"main":"dist/index.js","type":"module","_from":"file:teliagen-federation-0.4.1.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./generator":{"types":"./dist/generator/index.d.ts","import":"./dist/generator/index.js","default":"./dist/generator/index.js","require":"./dist/generator/index.js"}},"private":false,"scripts":{"dev":"tsc --watch","build":"tsc"},"_npmUser":{"name":"teliagen_off","email":"admin@teliagen.org"},"_resolved":"C:\\Users\\ABDOUL~1\\AppData\\Local\\Temp\\560c00b0a9b184bd92d6fc94283bf4e2\\teliagen-federation-0.4.1.tgz","_integrity":"sha512-YFmvaDwLHXJqAW4CCzud8p9x4F7N5PXHllqq4f/M0uN6dW6BYY/enE4qBkW3/xezlFl7MbEHi/GLmyjtNydixA==","repository":{"url":"git+https://github.com/teliagen/teliagen-framework.git","type":"git","directory":"packages/federation"},"_npmVersion":"11.6.2","description":"Inter-service communication and federation for Teliagen","directories":{},"_nodeVersion":"24.12.0","dependencies":{"fs-extra":"^11.3.3","@teliagen/logger":"0.4.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","@types/node":"^22.10.7","@types/fs-extra":"^11.0.4","@teliagen/server":"0.4.1","reflect-metadata":"^0.2.2","@teliagen/commons":"0.4.1"},"peerDependencies":{"@teliagen/server":"0.4.1","reflect-metadata":"^0.2.2","@teliagen/commons":"0.4.1"},"_npmOperationalInternal":{"tmp":"tmp/federation_0.4.1_1770923627412_0.9554602957952267","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@teliagen/federation","version":"0.4.2","author":{"name":"Teliagen Team","email":"contact@teliagen.org"},"license":"Apache-2.0","_id":"@teliagen/federation@0.4.2","maintainers":[{"name":"teliagen_off","email":"admin@teliagen.org"}],"homepage":"https://docs.teliagen.org","bugs":{"url":"https://github.com/teliagen/teliagen-framework/issues"},"dist":{"shasum":"b4a8142fc3d3bb39ac8056d1295ffe91c86f4514","tarball":"https://registry.npmjs.org/@teliagen/federation/-/federation-0.4.2.tgz","fileCount":12,"integrity":"sha512-om1bAKRje/i3tkYfEqH5rjHBuP007i9ea7gV+X0Y3vVHh1Tf9TPLJD8MTwvRALxlSxsNXaTEGnEjPbnYh010iQ==","signatures":[{"sig":"MEUCIQDw6JA21ROJabSOaRIA4EURZXWLUwT7950KNXRrY9J8EgIgfc/vH3xUMz1cU/iUET3Gs+uTDIW1dXV7qb4BJvqwNGo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":80176},"main":"dist/index.js","type":"module","_from":"file:teliagen-federation-0.4.2.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.js"},"./generator":{"types":"./dist/generator/index.d.ts","import":"./dist/generator/index.js","default":"./dist/generator/index.js","require":"./dist/generator/index.js"}},"private":false,"scripts":{"dev":"tsc --watch","build":"tsc"},"_npmUser":{"name":"teliagen_off","email":"admin@teliagen.org"},"_resolved":"C:\\Users\\ABDOUL~1\\AppData\\Local\\Temp\\c6595b5aa23fab7917dfbb4cc9c74550\\teliagen-federation-0.4.2.tgz","_integrity":"sha512-om1bAKRje/i3tkYfEqH5rjHBuP007i9ea7gV+X0Y3vVHh1Tf9TPLJD8MTwvRALxlSxsNXaTEGnEjPbnYh010iQ==","repository":{"url":"git+https://github.com/teliagen/teliagen-framework.git","type":"git","directory":"packages/federation"},"_npmVersion":"11.6.2","description":"Inter-service communication and federation for Teliagen","directories":{},"_nodeVersion":"24.12.0","dependencies":{"fs-extra":"^11.3.3","@teliagen/logger":"0.4.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.3","@types/node":"^22.10.7","@types/fs-extra":"^11.0.4","@teliagen/server":"0.4.2","reflect-metadata":"^0.2.2","@teliagen/commons":"0.4.2"},"peerDependencies":{"@teliagen/server":"0.4.2","reflect-metadata":"^0.2.2","@teliagen/commons":"0.4.2"},"_npmOperationalInternal":{"tmp":"tmp/federation_0.4.2_1770925177328_0.8601730103148393","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"@teliagen/federation","version":"0.4.3","private":false,"publishConfig":{"access":"public"},"description":"Inter-service communication and federation for Teliagen","main":"dist/index.js","types":"dist/index.d.ts","type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js","default":"./dist/index.js"},"./generator":{"types":"./dist/generator/index.d.ts","import":"./dist/generator/index.js","require":"./dist/generator/index.js","default":"./dist/generator/index.js"}},"author":{"name":"Teliagen Team","email":"contact@teliagen.org"},"repository":{"type":"git","url":"git+https://github.com/teliagen/teliagen-framework.git","directory":"packages/federation"},"homepage":"https://docs.teliagen.org","bugs":{"url":"https://github.com/teliagen/teliagen-framework/issues"},"license":"Apache-2.0","dependencies":{"fs-extra":"^11.3.3","@teliagen/logger":"0.4.2"},"peerDependencies":{"reflect-metadata":"^0.2.2","@teliagen/commons":"0.4.3","@teliagen/server":"0.4.3"},"devDependencies":{"reflect-metadata":"^0.2.2","@types/fs-extra":"^11.0.4","@types/node":"^22.10.7","typescript":"^5.7.3","@teliagen/server":"0.4.3","@teliagen/commons":"0.4.3"},"scripts":{"build":"tsc","dev":"tsc --watch"},"_id":"@teliagen/federation@0.4.3","_integrity":"sha512-QHtCeNIV4rN4DAYhDA+ufxZnfOy0pr8SGJBu9MN+iZDPSOAMdOCMv36FRlUe1O3ilFRtopbJRR+afccKNrJv5g==","_resolved":"C:\\Users\\ABDOUL~1\\AppData\\Local\\Temp\\ed4da9e6e3fe284bb8bb1ac2a02aa795\\teliagen-federation-0.4.3.tgz","_from":"file:teliagen-federation-0.4.3.tgz","_nodeVersion":"24.12.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-QHtCeNIV4rN4DAYhDA+ufxZnfOy0pr8SGJBu9MN+iZDPSOAMdOCMv36FRlUe1O3ilFRtopbJRR+afccKNrJv5g==","shasum":"85a4501282a76c05a75f2ebfa91ca9597fbcc484","tarball":"https://registry.npmjs.org/@teliagen/federation/-/federation-0.4.3.tgz","fileCount":12,"unpackedSize":80285,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEsJAceLs9NAbN6eel7eUygycyCpsi9ih3ezxUjX+x7kAiBdZDu9un0BSCDXTjSshI2KoKAIH66GrGPue/qUYTrdVg=="}]},"_npmUser":{"name":"teliagen_off","email":"admin@teliagen.org"},"directories":{},"maintainers":[{"name":"teliagen_off","email":"admin@teliagen.org"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/federation_0.4.3_1773049195915_0.1126805453744526"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-12T00:58:21.490Z","modified":"2026-03-09T09:39:56.240Z","0.1.0":"2026-01-19T19:17:18.630Z","0.1.1":"2026-01-19T19:55:45.971Z","0.1.2":"2026-01-19T21:14:19.856Z","0.1.3":"2026-01-19T21:27:13.363Z","0.1.4":"2026-01-20T02:45:34.161Z","0.1.5":"2026-01-25T07:48:12.900Z","0.1.6":"2026-01-25T16:04:20.466Z","0.1.7":"2026-01-25T16:34:50.277Z","0.1.8":"2026-01-25T16:42:00.013Z","0.1.9":"2026-01-25T16:46:55.351Z","0.1.10":"2026-01-25T16:57:04.061Z","0.1.11":"2026-01-25T18:55:06.101Z","0.1.12":"2026-01-25T19:34:22.717Z","0.1.13":"2026-01-25T23:49:32.288Z","0.1.14":"2026-01-26T00:07:27.042Z","0.1.15":"2026-01-26T00:10:57.014Z","0.1.16":"2026-01-26T00:14:17.901Z","0.1.17":"2026-01-26T00:18:37.977Z","0.1.18":"2026-01-26T00:39:52.615Z","0.1.19":"2026-01-26T00:52:42.819Z","0.1.20":"2026-01-26T00:56:57.047Z","0.1.22":"2026-01-26T01:17:23.034Z","0.1.23":"2026-01-26T01:21:52.829Z","0.1.24":"2026-01-26T01:42:59.222Z","0.1.25":"2026-01-26T02:16:43.228Z","0.1.26":"2026-01-26T02:26:01.459Z","0.4.0":"2026-02-12T00:58:21.713Z","0.4.1":"2026-02-12T19:13:47.596Z","0.4.2":"2026-02-12T19:39:37.478Z","0.4.3":"2026-03-09T09:39:56.114Z"},"bugs":{"url":"https://github.com/teliagen/teliagen-framework/issues"},"author":{"name":"Teliagen Team","email":"contact@teliagen.org"},"license":"Apache-2.0","homepage":"https://docs.teliagen.org","repository":{"type":"git","url":"git+https://github.com/teliagen/teliagen-framework.git","directory":"packages/federation"},"description":"Inter-service communication and federation for Teliagen","maintainers":[{"name":"teliagen_off","email":"admin@teliagen.org"}],"readme":"# @teliagen/federation\r\n\r\n> Federation and proxy generation for Teliagen microservices.\r\n\r\n[![npm version](https://img.shields.io/npm/v/@teliagen/federation.svg)](https://www.npmjs.com/package/@teliagen/federation)\r\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.0+-blue.svg)](https://www.typescriptlang.org/)\r\n[![License: Apache-2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\r\n\r\n## Overview\r\n\r\n`@teliagen/federation` enables seamless microservices communication:\r\n\r\n- **Proxy Generation** – Auto-generate typed proxies for remote actions\r\n- **Type Mirroring** – Mirror schemas and types across services\r\n- **Zero-Import Federation** – Use remote actions like local code\r\n- **Contract Sync** – Fetch and cache service contracts\r\n- **Dependency Resolution** – Automatic cascading dependency resolution\r\n\r\n## Installation\r\n\r\n```bash\r\nnpm install @teliagen/federation\r\n# or\r\npnpm add @teliagen/federation\r\n```\r\n\r\n## How It Works\r\n\r\n1. **Service A** exposes actions via `ServerContractSync` feature\r\n2. **Service B** syncs from A via configuration\r\n3. **FederationGenerator** creates typed proxies in `.teliagen/`\r\n4. **Service B** imports proxies like local code\r\n\r\n```\r\n┌─────────────┐     Contract JSON      ┌─────────────┐\r\n│  Service A  │ ──────────────────────>│  Service B  │\r\n│             │                        │             │\r\n│  - Actions  │                        │  .teliagen/ │\r\n│  - Schemas  │                        │  - Proxies  │\r\n│  - Types    │                        │  - Types    │\r\n└─────────────┘                        └─────────────┘\r\n```\r\n\r\n## Configuration\r\n\r\n### Service A (Provider)\r\n\r\n```typescript\r\n// teliagen.config.ts\r\nimport { defineConfig, ServerContractSync } from '@teliagen/commons';\r\n\r\nexport default defineConfig({\r\n  server: {\r\n    name: 'auth-service',\r\n    port: 3001\r\n  },\r\n  features: [\r\n    ServerContractSync({\r\n      endpoint: '/teliagen/server-contract',\r\n      apiKey: process.env.CONTRACT_API_KEY,\r\n      expose: {\r\n        includeEntities: true\r\n      }\r\n    })\r\n  ]\r\n});\r\n```\r\n\r\n### Service B (Consumer)\r\n\r\n```typescript\r\n// teliagen.config.ts\r\nimport { defineConfig } from '@teliagen/commons';\r\n\r\nexport default defineConfig({\r\n  server: {\r\n    name: 'main-service',\r\n    port: 3000\r\n  },\r\n  services: [\r\n    {\r\n      name: 'auth',\r\n      mode: 'remote',\r\n      url: 'http://localhost:3001',\r\n      apiKey: process.env.AUTH_API_KEY,\r\n      contract: {\r\n        endpoint: '/teliagen/server-contract',\r\n        apiKey: process.env.CONTRACT_API_KEY\r\n      },\r\n      sync: {\r\n        modules: [\r\n          {\r\n            module: 'auth',\r\n            proxy: true,\r\n            actions: '*',\r\n            schemas: '*',\r\n            types: '*'\r\n          }\r\n        ]\r\n      }\r\n    }\r\n  ]\r\n});\r\n```\r\n\r\n## Sync Configuration\r\n\r\n### Sync Everything\r\n\r\n```typescript\r\nsync: true\r\n// or\r\nsync: '*'\r\n```\r\n\r\n### Selective Sync\r\n\r\n```typescript\r\nsync: {\r\n  common: {\r\n    schemas: ['UserSchema', 'TokenSchema'],\r\n    types: '*',\r\n    services: []\r\n  },\r\n  modules: [\r\n    {\r\n      module: 'auth',\r\n      proxy: true,\r\n      providers: [\r\n        {\r\n          name: 'AuthActions',\r\n          actions: ['login', 'register', 'refreshToken']\r\n        }\r\n      ],\r\n      schemas: '*',\r\n      types: '*'\r\n    },\r\n    {\r\n      module: 'users',\r\n      proxy: true,\r\n      actions: '*',\r\n      schemas: ['UserOutput']\r\n    }\r\n  ]\r\n}\r\n```\r\n\r\n### Proxy Options\r\n\r\n```typescript\r\nsync: {\r\n  proxy: true,  // Global proxy setting\r\n  modules: [\r\n    {\r\n      module: 'auth',\r\n      proxy: true,  // Module-level override\r\n      providers: [\r\n        {\r\n          name: 'AuthActions',\r\n          proxy: false,  // Disable proxy for this provider\r\n          actions: '*'\r\n        }\r\n      ]\r\n    }\r\n  ]\r\n}\r\n```\r\n\r\n## Generated Output\r\n\r\nAfter running `teliagen dev` or `teliagen build`:\r\n\r\n```\r\n.teliagen/\r\n└── auth/\r\n    ├── proxies/\r\n    │   └── auth.proxy.ts       # Action proxies\r\n    ├── schemas/\r\n    │   ├── LoginInput.ts       # Input schemas\r\n    │   └── UserOutput.ts       # Output schemas\r\n    ├── types/\r\n    │   └── AuthTypes.ts        # Type definitions\r\n    └── index.ts                # Barrel export\r\n```\r\n\r\n### Generated Proxy\r\n\r\n```typescript\r\n// .teliagen/auth/proxies/auth.proxy.ts\r\nimport { TeliagenHost } from '@teliagen/server';\r\nimport { LoginInput, LoginOutput } from '../schemas';\r\n\r\nexport class AuthProxyActions {\r\n  /**\r\n   * Authenticates a user and returns access tokens.\r\n   */\r\n  static async login(input: LoginInput): Promise<LoginOutput> {\r\n    const host = TeliagenHost.getInstance();\r\n    return host.execute('auth', 'login', input, {\r\n      module: 'auth',\r\n      provider: 'AuthActions'\r\n    });\r\n  }\r\n\r\n  static async register(input: RegisterInput): Promise<UserOutput> {\r\n    const host = TeliagenHost.getInstance();\r\n    return host.execute('auth', 'register', input, {\r\n      module: 'auth',\r\n      provider: 'AuthActions'\r\n    });\r\n  }\r\n\r\n  // ... more proxies\r\n}\r\n```\r\n\r\n## Using Proxies\r\n\r\n```typescript\r\n// Import generated proxy\r\nimport { AuthProxyActions } from '.teliagen/auth';\r\n\r\n// Use like local code\r\n@ActionProvider('orders', 'OrderActions')\r\nclass OrderActions {\r\n  @Action('createOrder')\r\n  async createOrder(@Input() input: CreateOrderInput) {\r\n    // Call remote auth service transparently\r\n    const user = await AuthProxyActions.getUser(input.userId);\r\n    \r\n    if (!user) {\r\n      throw new Error('User not found');\r\n    }\r\n    \r\n    return Order.create({\r\n      ...input,\r\n      userEmail: user.email\r\n    });\r\n  }\r\n}\r\n```\r\n\r\n## FederationGenerator API\r\n\r\nFor programmatic usage:\r\n\r\n```typescript\r\nimport { FederationGenerator } from '@teliagen/federation';\r\nimport { loadConfig } from '@teliagen/commons';\r\n\r\nconst { config, root } = await loadConfig();\r\nconst generator = new FederationGenerator(root, config);\r\n\r\n// Generate all federation proxies\r\nawait generator.generate();\r\n```\r\n\r\n### Generator Methods\r\n\r\n```typescript\r\ninterface FederationGenerator {\r\n  constructor(projectRoot: string, config: TeliagenConfig);\r\n  \r\n  // Main generation\r\n  generate(): Promise<void>;\r\n  \r\n  // Service-specific generation\r\n  generateServiceContent(\r\n    service: ServiceConfig, \r\n    metadata: any, \r\n    outputDir: string\r\n  ): Promise<void>;\r\n}\r\n```\r\n\r\n## Metadata Contract\r\n\r\nServices expose contracts with this structure:\r\n\r\n```json\r\n{\r\n  \"server\": {\r\n    \"name\": \"auth-service\",\r\n    \"version\": \"1.0.0\"\r\n  },\r\n  \"modules\": [\r\n    {\r\n      \"name\": \"auth\",\r\n      \"providers\": [\r\n        {\r\n          \"name\": \"AuthActions\",\r\n          \"actions\": [\r\n            {\r\n              \"name\": \"login\",\r\n              \"input\": { \"$ref\": \"LoginInput\" },\r\n              \"output\": { \"$ref\": \"LoginOutput\" }\r\n            }\r\n          ]\r\n        }\r\n      ]\r\n    }\r\n  ],\r\n  \"schemas\": {\r\n    \"LoginInput\": {\r\n      \"properties\": {\r\n        \"email\": { \"type\": \"string\" },\r\n        \"password\": { \"type\": \"string\" }\r\n      }\r\n    }\r\n  },\r\n  \"types\": {},\r\n  \"externalDependencies\": {}\r\n}\r\n```\r\n\r\n## Cross-Service Execution\r\n\r\nThe generated proxies use `TeliagenHost.execute()`:\r\n\r\n```typescript\r\n// Low-level API\r\nconst host = TeliagenHost.getInstance();\r\n\r\nconst result = await host.execute(\r\n  'auth',           // Service name\r\n  'login',          // Action name\r\n  { email, pass },  // Input\r\n  {\r\n    module: 'auth',\r\n    provider: 'AuthActions'\r\n  }\r\n);\r\n```\r\n\r\n## Local Service Federation\r\n\r\nFor monorepo setups, use local mode:\r\n\r\n```typescript\r\nservices: [\r\n  {\r\n    name: 'users',\r\n    mode: 'local',\r\n    path: '../packages/users',\r\n    sync: '*',\r\n    expose: true\r\n  }\r\n]\r\n```\r\n\r\n## Requirements\r\n\r\n- **Node.js** >= 18.0.0\r\n- **@teliagen/server** >= 0.1.0\r\n\r\n## Related Packages\r\n\r\n- **[@teliagen/server](../server)** – TeliagenHost runtime\r\n- **[@teliagen/commons](../commons)** – Configuration types\r\n- **[@teliagen/cli](../cli)** – CLI triggers generation\r\n\r\n## Documentation\r\n\r\nFor full documentation, visit [docs.teliagen.org](https://docs.teliagen.org).\r\n\r\n## License\r\n\r\nApache-2.0\r\n\r\n---\r\n\r\n<p align=\"center\">\r\n  <strong>Part of <a href=\"https://github.com/teliagen/teliagen-framework\">Teliagen</a></strong>\r\n</p>\r\n","readmeFilename":"README.md"}