{"_id":"@dongkseo/gateway","_rev":"5-6c2a4321803ec9228b0ba7e6b0ab7a43","name":"@dongkseo/gateway","dist-tags":{"latest":"0.1.4"},"versions":{"0.1.0":{"name":"@dongkseo/gateway","version":"0.1.0","_id":"@dongkseo/gateway@0.1.0","maintainers":[{"name":"dongkseo","email":"ssddgg99@daum.net"}],"dist":{"shasum":"0b7b78932b3a95570cc436c4037e023e8fe7eed4","tarball":"https://registry.npmjs.org/@dongkseo/gateway/-/gateway-0.1.0.tgz","fileCount":18,"integrity":"sha512-QYf1B20IQA1u8q8PqZ/ZQ0FqwgMRvEL2EQnTTzzRP5uY+AjQOIi+Om68wN7FtPkwD9OpJNAFipNctJ1TmBb5hQ==","signatures":[{"sig":"MEQCIEhvDcjgz9qduQosdFN9DWNapb01J88me1cdbGw67qubAiBCv67lfjyAw2CiQvPIqRkjGLp6Ap+zrk4W7f3VxYMzYg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34252},"main":"./dist/index.js","type":"module","_from":"file:dongkseo-gateway-0.1.0.tgz","types":"./dist/index.d.ts","nexora":{"stability":"stable"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsc","clean":"rm -rf dist .tsbuildinfo"},"_npmUser":{"name":"dongkseo","email":"ssddgg99@daum.net"},"_resolved":"/private/var/folders/lw/t8yfg__j2nxd25m53gt8840h0000gn/T/cd9b3fc8919281ecf9d709411b95cdc7/dongkseo-gateway-0.1.0.tgz","_integrity":"sha512-QYf1B20IQA1u8q8PqZ/ZQ0FqwgMRvEL2EQnTTzzRP5uY+AjQOIi+Om68wN7FtPkwD9OpJNAFipNctJ1TmBb5hQ==","_npmVersion":"11.12.1","description":"**Stability: stable**","directories":{},"_nodeVersion":"26.0.0","dependencies":{"@dongkseo/adapters":"0.1.0","@dongkseo/registry":"0.1.0","@dongkseo/contracts":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.0","@types/node":"^22.0.0","@dongkseo/core":"0.1.0","@dongkseo/tools":"0.1.0","@dongkseo/context":"0.1.0","@dongkseo/transport":"0.1.0","@dongkseo/architectures":"0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/gateway_0.1.0_1781668558681_0.8739131098041697","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@dongkseo/gateway","version":"0.1.1","_id":"@dongkseo/gateway@0.1.1","maintainers":[{"name":"dongkseo","email":"ssddgg99@daum.net"}],"dist":{"shasum":"6ef94102cb7865657a21f5395fb7c44713dcf8f6","tarball":"https://registry.npmjs.org/@dongkseo/gateway/-/gateway-0.1.1.tgz","fileCount":18,"integrity":"sha512-/W7u7Xm+EyHjF0YyDa8LS9TeMkNk6So1exeR5vQNJkcM+cUAnJ+Eh6uGooNqzDjxDHUVzjWWmjMDJljJOxVI/Q==","signatures":[{"sig":"MEYCIQDRwqhodqDRqt7Hf39YjQSVIqQ/tb7+0Q8HgHqTP+I6eQIhAIZ8IxKXfLFjqrPcTyerztkNg/g7N14u2zuq01PE2vys","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34252},"main":"./dist/index.js","type":"module","_from":"file:dongkseo-gateway-0.1.1.tgz","types":"./dist/index.d.ts","nexora":{"stability":"stable"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsc","clean":"rm -rf dist .tsbuildinfo"},"_npmUser":{"name":"dongkseo","email":"ssddgg99@daum.net"},"_resolved":"/private/var/folders/f6/dfc3mm717vx9xjh0vbgqnddr0000gn/T/82d98bfcfaaf78aa3ca3bb83f9819fbb/dongkseo-gateway-0.1.1.tgz","_integrity":"sha512-/W7u7Xm+EyHjF0YyDa8LS9TeMkNk6So1exeR5vQNJkcM+cUAnJ+Eh6uGooNqzDjxDHUVzjWWmjMDJljJOxVI/Q==","_npmVersion":"11.12.1","description":"**Stability: stable**","directories":{},"_nodeVersion":"26.0.0","dependencies":{"@dongkseo/adapters":"0.1.1","@dongkseo/registry":"0.1.1","@dongkseo/contracts":"0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.0","@types/node":"^22.0.0","@dongkseo/core":"0.1.1","@dongkseo/tools":"0.1.1","@dongkseo/context":"0.1.1","@dongkseo/transport":"0.1.1","@dongkseo/architectures":"0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/gateway_0.1.1_1781693222966_0.11939982576750707","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@dongkseo/gateway","version":"0.1.2","_id":"@dongkseo/gateway@0.1.2","maintainers":[{"name":"dongkseo","email":"ssddgg99@daum.net"}],"dist":{"shasum":"811149eb373d0125c8f514fc6a4a1964ea071abf","tarball":"https://registry.npmjs.org/@dongkseo/gateway/-/gateway-0.1.2.tgz","fileCount":18,"integrity":"sha512-PUCQ3nyV0xOlZFTGsVGuDfpT38DUbUKga0RAKRU586WdBI7B2MfFo/ge4sW0yQd6fcUR37yaDGLJnKLGWIg+nQ==","signatures":[{"sig":"MEYCIQCPLMwPI58B6tMyllVFpeVrjQhYFIl0gdMxflKgiwiMSgIhAJhN+8113rdLroxgI5gm2XZO+O1+M8y2NfIrLOtM6OxC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34891},"main":"./dist/index.js","type":"module","_from":"file:dongkseo-gateway-0.1.2.tgz","types":"./dist/index.d.ts","nexora":{"stability":"stable"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsc","clean":"rm -rf dist .tsbuildinfo"},"_npmUser":{"name":"dongkseo","email":"ssddgg99@daum.net"},"_resolved":"/private/var/folders/f6/dfc3mm717vx9xjh0vbgqnddr0000gn/T/d0b4108a01b955153f1f8973cb1ea8c1/dongkseo-gateway-0.1.2.tgz","_integrity":"sha512-PUCQ3nyV0xOlZFTGsVGuDfpT38DUbUKga0RAKRU586WdBI7B2MfFo/ge4sW0yQd6fcUR37yaDGLJnKLGWIg+nQ==","_npmVersion":"11.12.1","description":"**Stability: stable**","directories":{},"_nodeVersion":"26.0.0","dependencies":{"@dongkseo/adapters":"0.1.2","@dongkseo/registry":"0.1.1","@dongkseo/contracts":"0.1.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.0","@types/node":"^22.0.0","@dongkseo/core":"0.1.10","@dongkseo/tools":"0.1.2","@dongkseo/context":"0.1.1","@dongkseo/transport":"0.1.2","@dongkseo/architectures":"0.1.6"},"_npmOperationalInternal":{"tmp":"tmp/gateway_0.1.2_1782111943826_0.08595052053284102","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@dongkseo/gateway","version":"0.1.3","_id":"@dongkseo/gateway@0.1.3","maintainers":[{"name":"dongkseo","email":"ssddgg99@daum.net"}],"dist":{"shasum":"f24f13a40e159304caed4eb802e7588263062a8b","tarball":"https://registry.npmjs.org/@dongkseo/gateway/-/gateway-0.1.3.tgz","fileCount":18,"integrity":"sha512-hjIfqds9lQxvAXJ6p6SZM1eSi8xJi8/2bqpBdJf4xgduk7Zj0rZe6mQUHdffka3ZvJk9ZlZcXwKM3MYOTnHTSA==","signatures":[{"sig":"MEUCIQD0X1ICI/81xE9pErAfr8QdRGYSOrZsLLYkZe9kUdlXGAIgdtjDlKEfzYrYi09Mjosa0otxM/qIIgv0/SCj4Jhlhe8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34899},"main":"./dist/index.js","type":"module","_from":"file:dongkseo-gateway-0.1.3.tgz","types":"./dist/index.d.ts","nexora":{"stability":"stable"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsc","clean":"rm -rf dist .tsbuildinfo"},"_npmUser":{"name":"dongkseo","email":"ssddgg99@daum.net"},"_resolved":"/private/var/folders/f6/dfc3mm717vx9xjh0vbgqnddr0000gn/T/756621f2c491c86d8bc7ac3225d815e0/dongkseo-gateway-0.1.3.tgz","_integrity":"sha512-hjIfqds9lQxvAXJ6p6SZM1eSi8xJi8/2bqpBdJf4xgduk7Zj0rZe6mQUHdffka3ZvJk9ZlZcXwKM3MYOTnHTSA==","_npmVersion":"11.12.1","description":"**Stability: stable**","directories":{},"_nodeVersion":"26.0.0","dependencies":{"@dongkseo/adapters":"^0.1.5","@dongkseo/registry":"^0.1.2","@dongkseo/contracts":"^0.1.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.0","@types/node":"^22.0.0","@dongkseo/core":"^0.1.13","@dongkseo/tools":"^0.1.3","@dongkseo/context":"^0.1.2","@dongkseo/transport":"^0.1.3","@dongkseo/architectures":"^0.1.8"},"_npmOperationalInternal":{"tmp":"tmp/gateway_0.1.3_1782200199815_0.6732597648478","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@dongkseo/gateway","version":"0.1.4","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"dependencies":{"@dongkseo/adapters":"^0.1.9","@dongkseo/contracts":"^0.1.32"},"devDependencies":{"@types/node":"^26.1.2","typescript":"^7.0.2","@dongkseo/architectures":"^0.1.13","@dongkseo/context":"^0.1.4","@dongkseo/core":"^0.1.36","@dongkseo/tools":"^0.3.4","@dongkseo/transport":"^0.1.5"},"nexora":{"stability":"stable"},"publishConfig":{"access":"public"},"scripts":{"build":"tsc","test":"vitest run","clean":"rm -rf dist .tsbuildinfo"},"_nodeVersion":"26.7.0","_id":"@dongkseo/gateway@0.1.4","dist":{"integrity":"sha512-/KWnnDd09/S44GOEFFZy3b/HtSoDyBnkT0ouZ71xsStW2BCTkOBbSZhK7di/P70FlrwVgz6D3C9733tMjYLBLQ==","shasum":"1947f488a349b904a59d4b43a21da76f5af59dca","tarball":"https://registry.npmjs.org/@dongkseo/gateway/-/gateway-0.1.4.tgz","fileCount":18,"unpackedSize":38326,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQC1GujFGlaxBXKZ//Q6ltToJrYdnnMH62l24/UPVHCDGAIgC2MHgTzT+BfinL4Pj4O987Zx4dTThnTccTBRTIsgQMg="}]},"_npmUser":{"name":"dongkseo","email":"ssddgg99@daum.net"},"directories":{},"maintainers":[{"name":"dongkseo","email":"ssddgg99@daum.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/gateway_0.1.4_1786622547348_0.07552938232588802"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-17T03:55:58.535Z","modified":"2026-08-13T12:02:27.650Z","0.1.0":"2026-06-17T03:55:58.802Z","0.1.1":"2026-06-17T10:47:03.143Z","0.1.2":"2026-06-22T07:05:43.952Z","0.1.3":"2026-06-23T07:36:39.957Z","0.1.4":"2026-08-13T12:02:27.523Z"},"maintainers":[{"name":"dongkseo","email":"ssddgg99@daum.net"}],"readme":"# @dongkseo/gateway\n\n**Stability: stable** · `pnpm add @dongkseo/gateway`\n\n> 이 파일은 에이전트(사람·LLM)가 소스를 열지 않고도 이 패키지를 쓸 수 있게 하는 오리엔테이션 문서다.\n> 정확한 API 타입은 \"API 표면\"의 방법으로 `signatures`만 읽어라 — 본문을 베끼지 말 것.\n\n## 무엇인가 / 무엇이 아닌가\n\n외부 진입점(어댑터)과 에이전트 시스템 사이의 **라우터 + 게이트 미들웨어**다. inbound 메시지를 토픽으로 라우팅하고, API 키 인증·레이트리밋을 건다.\n\n- ✅ 담는 것: `GatewayRouter`(transport로 발행), `LocalRuntimeRouter`(transport 없이 런타임 직접 호출·스트리밍), `StreamingGatewayRouter`, 의도 해석기(`createMentionResolver`), 인증·레이트리밋 미들웨어\n- ❌ 안 담는 것: HTTP/Discord 등 채널 어댑터(→ `@dongkseo/adapters`), 에이전트 레지스트리 구현(→ `@dongkseo/registry`), 트랜스포트 구현(→ `@dongkseo/transport`)\n\n의존 방향: **gateway → adapters, contracts**. 에이전트/Capability 조회가 필요하면 호출자가 `@dongkseo/registry`로 resolver를 구성해 주입한다.\n\n## 핵심 개념\n\n| 개념 | 무엇 | 대표 export |\n| --- | --- | --- |\n| **GatewayRouter** | InboundMessage → 토픽 발행 → 응답 수신 (transport 경유) | `GatewayRouter`, `GatewayRouterOptions` |\n| **LocalRuntimeRouter** | transport 없이 AgentRuntime 직접 호출(단일 프로세스·스트리밍) | `LocalRuntimeRouter`, `LocalRuntimeRouterOptions` |\n| **StreamingGatewayRouter** | 스트리밍 응답 라우터 | `StreamingGatewayRouter`, `StreamingGatewayRouterOptions` |\n| **의도 해석기** | 어느 에이전트로 보낼지 결정(멘션 기반 기본 구현) | `createMentionResolver`, `IntentResolver` |\n| **게이트 미들웨어** | API 키 인증·레이트리밋·보안 resolver | `createApiKeyAuth`, `createRateLimiter`, `createSecureResolver`, `RateLimitError` |\n\n## 사용 레시피\n\nAPI 키 인증 + 레이트리밋을 건 게이트웨이 라우터:\n\n```ts\nimport {\n  GatewayRouter, createMentionResolver,\n  createApiKeyAuth, createRateLimiter,\n} from '@dongkseo/gateway';\nimport { LocalTransport } from '@dongkseo/transport';\n\nconst transport = new LocalTransport();\nconst router = new GatewayRouter({\n  transport,\n  resolver: createMentionResolver(),         // 멘션→토픽\n  auth: createApiKeyAuth({ keys: [process.env.API_KEY!] }),\n  rateLimiter: createRateLimiter({ windowMs: 60_000, max: 60 }), // 초과 시 RateLimitError(429)\n});\n\nconst reply = await router.handle({ content: '@coder 버그 고쳐줘', apiKey: [REDACTED:API key param] });\n```\n\ntransport 없이 단일 프로세스로 런타임을 직접 호출하려면 `LocalRuntimeRouter`(스트리밍 지원).\n\n## API 표면 (소스 안 열고 타입만)\n\n```\nctx_read(path=\"platform/gateway/src/index.ts\",            mode=\"map\")        # 전체 export\nctx_read(path=\"platform/gateway/src/router.ts\",           mode=\"signatures\") # GatewayRouter, LocalRuntimeRouter, createMentionResolver\nctx_read(path=\"platform/gateway/src/streaming-router.ts\", mode=\"signatures\") # StreamingGatewayRouter\nctx_read(path=\"platform/gateway/src/middleware.ts\",       mode=\"signatures\") # createApiKeyAuth, createRateLimiter, createSecureResolver, RateLimitError\n```\n\n## 유지보수 (drift 방지)\n\n- 이 README = 목적·개념·레시피만. API 정본은 소스 TSDoc.\n- 새 export가 생기면 `src/index.ts` 상단 맵/이 표에 한 줄만 추가.\n\n## Tests\n\n```bash\ncd platform/gateway && pnpm test\n```\n\nPart of the [Nexora](../../README.md) multi-tenant agent framework. · [Package map](../../docs/architecture/packages-map.md)\n","readmeFilename":""}