{"_id":"@eilichev/moleculer-service-types","_rev":"5-291101e60c5d37db97a8b650b0325525","name":"@eilichev/moleculer-service-types","dist-tags":{"latest":"0.0.5"},"versions":{"0.0.1":{"name":"@eilichev/moleculer-service-types","version":"0.0.1","keywords":["moleculer","typescript","microservices","type-safe","service-broker"],"author":{"name":"Criya"},"license":"MIT","_id":"@eilichev/moleculer-service-types@0.0.1","maintainers":[{"name":"eilichev","email":"eilichev@list.ru"}],"dist":{"shasum":"840dfccf1fa22bf8cf1b887bd6f55f853ccac7ae","tarball":"https://registry.npmjs.org/@eilichev/moleculer-service-types/-/moleculer-service-types-0.0.1.tgz","fileCount":14,"integrity":"sha512-nnNNSXIWOJl/9FCSrkZTnEYabe/dq9TW8y2Gsv+zmDZoXcMFtrt3sQpT2SgRn1yEd/zGaA82yC5FVzwxOlXxcQ==","signatures":[{"sig":"MEQCIFYhCP2GFEtTM29J+nF1qJAbbWTK9siEZeBN46wFzfUTAiAtzTnxDRB/TGUojIMRGjqNI2ey9Pqqz07Vmw0bsAbMHw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18686},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"120116c8fe8efaaf653522058243191a4d48b8a0","scripts":{"build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"eilichev","email":"eilichev@list.ru"},"_npmVersion":"10.8.2","description":"Type-safe Moleculer service definitions with automatic type extraction","directories":{},"_nodeVersion":"18.20.8","_hasShrinkwrap":false,"devDependencies":{"moleculer":"^0.14.35","typescript":"^4.9.5"},"peerDependencies":{"moleculer":">=0.14.0"},"_npmOperationalInternal":{"tmp":"tmp/moleculer-service-types_0.0.1_1778188486302_0.8964888228923396","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@eilichev/moleculer-service-types","version":"0.0.2","keywords":["moleculer","typescript","microservices","type-safe","service-broker"],"author":{"name":"Criya"},"license":"MIT","_id":"@eilichev/moleculer-service-types@0.0.2","maintainers":[{"name":"eilichev","email":"eilichev@list.ru"}],"dist":{"shasum":"b558001c3ff561ae68f133e5a506a03835c09bf6","tarball":"https://registry.npmjs.org/@eilichev/moleculer-service-types/-/moleculer-service-types-0.0.2.tgz","fileCount":14,"integrity":"sha512-VTLGi+dswiai6j61HTov2xJaWReyClwP9bwGU0HAoIa15UAzwr9xOyBp/wEyFZ897v2ewdZLlMnLFuR3SbMslQ==","signatures":[{"sig":"MEUCIQDzI8sxTMZZh0dbuh33PtSmDZwYhCHn0Zd89sr+UG6nogIgLZHI39utc0bapBfb1G3BvHWZw2IqoLOzOQ6j17oDzn8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18686},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"120116c8fe8efaaf653522058243191a4d48b8a0","scripts":{"build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"eilichev","email":"eilichev@list.ru"},"_npmVersion":"10.8.2","description":"Type-safe Moleculer service definitions with automatic type extraction","directories":{},"_nodeVersion":"18.20.8","_hasShrinkwrap":false,"devDependencies":{"moleculer":"^0.14.35","typescript":"^4.9.5"},"peerDependencies":{"moleculer":">=0.14.0"},"_npmOperationalInternal":{"tmp":"tmp/moleculer-service-types_0.0.2_1778189153638_0.601808151368022","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@eilichev/moleculer-service-types","version":"0.0.3","keywords":["moleculer","typescript","microservices","type-safe","service-broker"],"author":{"name":"eilichev"},"license":"MIT","_id":"@eilichev/moleculer-service-types@0.0.3","maintainers":[{"name":"eilichev","email":"eilichev@list.ru"}],"dist":{"shasum":"1a7eb2ff6b59f678058fef646921912f13e585f8","tarball":"https://registry.npmjs.org/@eilichev/moleculer-service-types/-/moleculer-service-types-0.0.3.tgz","fileCount":14,"integrity":"sha512-nZ1rgjytzFkSxSENd0hMC6z5pIp+pIak22TgPSK5+TnY3tTnE0kcB1mMxIHRopxeukx8z/el7a1GDiWPB5ZK/A==","signatures":[{"sig":"MEUCIF2b7PNC8To379I+h1jYd1gA3Pp+HmBnctBFkAmKvfgKAiEAwPC/gqK9Fb/TIyNW85tUykXichy5GnVnDnlUJAwkOmQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18694},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"120116c8fe8efaaf653522058243191a4d48b8a0","scripts":{"build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"eilichev","email":"eilichev@list.ru"},"_npmVersion":"10.8.2","description":"Type-safe Moleculer service definitions with automatic type extraction","directories":{},"_nodeVersion":"18.20.8","_hasShrinkwrap":false,"devDependencies":{"moleculer":"^0.14.35","typescript":"^4.9.5"},"peerDependencies":{"moleculer":">=0.14.0"},"_npmOperationalInternal":{"tmp":"tmp/moleculer-service-types_0.0.3_1778190245826_0.24840296357583358","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@eilichev/moleculer-service-types","version":"0.0.4","keywords":["moleculer","typescript","microservices","type-safe","service-broker"],"author":{"name":"eilichev"},"license":"MIT","_id":"@eilichev/moleculer-service-types@0.0.4","maintainers":[{"name":"eilichev","email":"eilichev@list.ru"}],"dist":{"shasum":"045b998cbf72c830354bc0e72b3a2b2d6e1a55c0","tarball":"https://registry.npmjs.org/@eilichev/moleculer-service-types/-/moleculer-service-types-0.0.4.tgz","fileCount":14,"integrity":"sha512-rmcsyTSz8egu+0DlkEdIhkCOFK5yagLpQsitmW7svWIEk+155y/zAk3wLFmEPyJtNfz8QEJaeLEXpa3bMulsWQ==","signatures":[{"sig":"MEYCIQDNHZr5EoYmZ+9OohdY3FqRc6CwyOShcupOFz+3JaJO1gIhAM7W2uPj2E89jB/WsL9vKCzf1quzNRN8xUDAAmlnnODl","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18772},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"79cb0f3c0858df80ae00157cc0db2827f3879918","scripts":{"build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"eilichev","email":"eilichev@list.ru"},"repository":{"url":"git+https://github.com","type":"git"},"_npmVersion":"10.8.2","description":"Type-safe Moleculer service definitions with automatic type extraction","directories":{},"_nodeVersion":"18.20.8","_hasShrinkwrap":false,"devDependencies":{"moleculer":"^0.14.35","typescript":"^4.9.5"},"peerDependencies":{"moleculer":">=0.14.0"},"_npmOperationalInternal":{"tmp":"tmp/moleculer-service-types_0.0.4_1786653590978_0.47297135193487994","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@eilichev/moleculer-service-types","version":"0.0.5","description":"Type-safe Moleculer service definitions with automatic type extraction","main":"dist/index.js","types":"dist/index.d.ts","repository":{"type":"git","url":"git+https://github.com/eilichev/moleculer-service-types.git"},"scripts":{"build":"tsc","prepublishOnly":"npm run build"},"keywords":["moleculer","typescript","microservices","type-safe","service-broker"],"author":{"name":"eilichev"},"license":"MIT","peerDependencies":{"moleculer":">=0.14.0"},"devDependencies":{"moleculer":"^0.14.35","typescript":"^4.9.5"},"_id":"@eilichev/moleculer-service-types@0.0.5","gitHead":"79cb0f3c0858df80ae00157cc0db2827f3879918","bugs":{"url":"https://github.com/eilichev/moleculer-service-types/issues"},"homepage":"https://github.com/eilichev/moleculer-service-types#readme","_nodeVersion":"18.20.8","_npmVersion":"10.8.2","dist":{"integrity":"sha512-HHgt+qCZuB24dGi8OD+yrrVMlbe7Ktc6MoIzNUhG9cTArKL5OaQVLZtuiYbzy5Dx/d7oOReOJpDoEgy/zU9/Mw==","shasum":"288866c5ea4f3e029f6fbaa497e3389746104bea","tarball":"https://registry.npmjs.org/@eilichev/moleculer-service-types/-/moleculer-service-types-0.0.5.tgz","fileCount":14,"unpackedSize":18801,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDWmMM/eo+3afWLxKlhvssMFXJTGOFnoBjv3KAMk4elPQIgN0j+AJLGEvcbwMAe24Zy/+bxyjl0pW15bDyPuY1uy6U="}]},"_npmUser":{"name":"eilichev","email":"eilichev@list.ru"},"directories":{},"maintainers":[{"name":"eilichev","email":"eilichev@list.ru"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/moleculer-service-types_0.0.5_1786653701793_0.9120988261642142"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-07T21:14:46.246Z","modified":"2026-08-13T20:41:42.128Z","0.0.1":"2026-05-07T21:14:46.452Z","0.0.2":"2026-05-07T21:25:53.796Z","0.0.3":"2026-05-07T21:44:05.972Z","0.0.4":"2026-08-13T20:39:51.155Z","0.0.5":"2026-08-13T20:41:41.950Z"},"author":{"name":"eilichev"},"license":"MIT","keywords":["moleculer","typescript","microservices","type-safe","service-broker"],"repository":{"type":"git","url":"git+https://github.com/eilichev/moleculer-service-types.git"},"description":"Type-safe Moleculer service definitions with automatic type extraction","maintainers":[{"name":"eilichev","email":"eilichev@list.ru"}],"readme":"# moleculer-service-types\n\nType-safe Moleculer service definitions with automatic type extraction. Single Source of Truth for service types - define once, use everywhere!\n\n## Installation\n\n```bash\nnpm install @eilichev/moleculer-service-types\n```\n\n## Usage\n\n### 1. Define Services\n\n```typescript\nimport { createService, Context } from '@eilichev/moleculer-service-types';\n\n// Define your types\ninterface UserId { user_id: string; }\ninterface UserType { id: string; email: string; name: string; }\ninterface ServiceResponse<T> { response: T | null; error: string | null; }\n\n// Create a service with type-safe actions\nexport const UserService = createService('users', {\n  getById: async (ctx: Context<UserId>): Promise<ServiceResponse<UserType>> => {\n    // Your implementation\n    return { response: null, error: null };\n  },\n\n  // With validator\n  create: {\n    validator: { email: 'email', name: 'string' },\n    handler: async (ctx: Context<{ email: string; name: string }>): Promise<ServiceResponse<UserType>> => {\n      return { response: null, error: null };\n    },\n  },\n});\n```\n\n### 2. Create Service Registry\n\n```typescript\nimport { InferMethods } from '@eilichev/moleculer-service-types';\nimport { UserService } from './user.service';\nimport { ProductService } from './product.service';\n\nexport const services = {\n  users: UserService,\n  product: ProductService,\n} as const;\n\n// ServiceTypes is automatically generated!\nexport type ServiceTypes = {\n  [K in keyof typeof services]: InferMethods<(typeof services)[K]>;\n};\n\nexport function getAllServiceSchemas() {\n  return Object.values(services).map((s) => s.schema);\n}\n```\n\n### 3. Use BrokerWrapper\n\n```typescript\nimport { BrokerWrapper } from '@eilichev/moleculer-service-types';\nimport { ServiceTypes, getAllServiceSchemas } from './services';\n\nconst broker = new BrokerWrapper<ServiceTypes>({\n  nodeID: 'my-service',\n  transporter: 'NATS',\n});\n\n// Register all services\nfor (const schema of getAllServiceSchemas()) {\n  broker.createService(schema);\n}\n\nawait broker.start();\n\n// Type-safe calls!\nconst result = await broker.service.users.getById({ user_id: '123' });\n//                         ^-- autocomplete works here!\n\nif (result.response) {\n  console.log(result.response.email); // typed!\n}\n```\n\n## API\n\n### `createService(name, actions, settings?)`\n\nCreates a type-safe service definition.\n\n- `name`: Service name (string)\n- `actions`: Object with action handlers\n- `settings`: Optional Moleculer service settings\n\nReturns an object with:\n- `name`: Service name\n- `actions`: Typed actions\n- `schema`: Moleculer ServiceSchema for `broker.createService()`\n\n### `InferMethods<T>`\n\nType utility that extracts method signatures from a service.\n\n```typescript\ntype Methods = InferMethods<typeof UserService>;\n// { getById: (params: UserId) => Promise<ServiceResponse<UserType>>; ... }\n```\n\n### `BrokerWrapper<T>`\n\nExtended Moleculer ServiceBroker with type-safe `service` proxy.\n\n```typescript\nconst broker = new BrokerWrapper<ServiceTypes>(options);\nbroker.service.users.getById({ user_id: '123' }); // fully typed!\n```\n\n### `Context<T>`\n\nRe-exported from Moleculer for convenience.\n\n## Benefits\n\n- **Single Source of Truth**: Define types once in service handlers\n- **Auto-generated Types**: `ServiceTypes` is derived from actual code\n- **Full IDE Support**: Autocomplete, hover types, go-to-definition\n- **No Manual Sync**: No separate type files to maintain\n- **Type-safe Calls**: Compile-time errors for wrong parameters\n\n## License\n\nMIT\n","readmeFilename":"README.md","homepage":"https://github.com/eilichev/moleculer-service-types#readme","bugs":{"url":"https://github.com/eilichev/moleculer-service-types/issues"}}