{"_id":"@3ngram/server","_rev":"25-1dd8796c3a50f26c14ec0566b7df2418","name":"@3ngram/server","dist-tags":{"latest":"1.6.3"},"versions":{"0.7.0":{"name":"@3ngram/server","version":"0.7.0","license":"Apache-2.0","_id":"@3ngram/server@0.7.0","maintainers":[{"name":"b3dmar","email":"sebastian@b3dmar.com"}],"dist":{"shasum":"f07fec4f1428dac7755b9612b7885d36651b3f7b","tarball":"https://registry.npmjs.org/@3ngram/server/-/server-0.7.0.tgz","fileCount":116,"integrity":"sha512-c8IW1Dns7mvJWp62KXcBXZbcQ9TlBDeA6ZY2LxFKUIp1Nqo8gvelr9Rg6WxzU4adEEaLOgUla5PkwA7Dg4+XpQ==","signatures":[{"sig":"MEYCIQDdXq3gbgtSXOT9Ojaqbzu/9Xk0T4qitGu3YMwXWFPjzAIhAJr3U4Zctd7Mk6JDReer9jiCyj4MsCVrEvgAOeTdR5gi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":440489},"type":"module","exports":{"./app":{"types":"./dist/app.d.ts","default":"./dist/app.js"},"./boot":{"types":"./dist/boot.d.ts","default":"./dist/boot.js"},"./mailer":{"types":"./dist/mailer.d.ts","default":"./dist/mailer.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"}},"scripts":{"dev":"node --watch dist/index.js","test":"vitest run --exclude '**/integration/**' --fileParallelism=false --testTimeout=15000 --hookTimeout=30000","build":"tsc -p tsconfig.json","check":"tsc -p tsconfig.json --noEmit","start":"node dist/index.js","docs:generate":"tsx scripts/generate-openapi.ts && tsx scripts/generate-mcp-reference.ts && tsx ../../apps/cli/scripts/generate-cli-reference.ts && tsx ../../packages/sdk/scripts/generate-sdk-reference.ts","test:integration":"vitest run test/integration --fileParallelism=false --testTimeout=30000"},"_npmUser":{"name":"b3dmar","email":"sebastian@b3dmar.com"},"repository":{"url":"git+https://github.com/B3dmar/3ngram.git","type":"git","directory":"apps/server"},"description":"REST API + MCP server — the one v1 deployable (monorepo-layout.md).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"4.4.3","express":"5.2.1","ioredis":"5.11.1","nodemailer":"9.0.0","@3ngram/llm":"0.2.0","@3ngram/core":"0.4.0","@3ngram/config":"0.2.0","@3ngram/schema":"0.4.0","rate-limiter-flexible":"11.2.0","@modelcontextprotocol/sdk":"1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"comment:exports":"Side-effect-free seams ONLY. `./app` exposes createApp so a downstream composition root can compose the server; `./boot` exposes the shared fail-closed bootstrap() (initObservability -> loadEnv -> metered-op + OAuth key checks -> dynamic-import createApp + listen) so both entrypoints run the IDENTICAL boot and cannot drift. `./mailer` exposes the SMTP sender (loadSmtpConfig + nodemailer, degrade-to-noop) so one mail transport is reused for dunning instead of re-wiring nodemailer. Importing any of these has NO side effects -- transports/boot run only when their function is called. src/index.ts stays the sole side-effectful entry and is intentionally NOT exported.","devDependencies":{"tsx":"4.22.4","vitest":"4.1.8","typescript":"6.0.3","@types/node":"25.9.1","ioredis-mock":"8.13.1","@types/express":"5.0.6","@types/nodemailer":"8.0.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.7.0_1783599022306_0.5101773594410806","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"@3ngram/server","version":"0.7.1","license":"Apache-2.0","_id":"@3ngram/server@0.7.1","maintainers":[{"name":"b3dmar","email":"sebastian@b3dmar.com"}],"dist":{"shasum":"09828dbbddcad050ecb30e3890104bbe5651dabc","tarball":"https://registry.npmjs.org/@3ngram/server/-/server-0.7.1.tgz","fileCount":116,"integrity":"sha512-0L8ATALjsnU3KWb8sKj+eR7e0/qYsCK9AkkKxvVEqNggmXm1yvfEVqZo0KP3kSfHKm71Ify1gcgM8pBScKje4w==","signatures":[{"sig":"MEQCIEGAuGAl8TqO/F+u0y3wbmFw5keyI3p3vFp9z9vxqP/TAiBWRC2Bc8Wtx/p0f/qLDw+8wGsJZL39pCd/m98sRHifQQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":440622},"type":"module","exports":{"./app":{"types":"./dist/app.d.ts","default":"./dist/app.js"},"./boot":{"types":"./dist/boot.d.ts","default":"./dist/boot.js"},"./mailer":{"types":"./dist/mailer.d.ts","default":"./dist/mailer.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"}},"scripts":{"dev":"node --watch dist/index.js","test":"vitest run --exclude '**/integration/**' --fileParallelism=false --testTimeout=15000 --hookTimeout=30000","build":"tsc -p tsconfig.json","check":"tsc -p tsconfig.json --noEmit","start":"node dist/index.js","docs:generate":"tsx scripts/generate-openapi.ts && tsx scripts/generate-mcp-reference.ts && tsx ../../apps/cli/scripts/generate-cli-reference.ts && tsx ../../packages/sdk/scripts/generate-sdk-reference.ts","test:integration":"vitest run test/integration --fileParallelism=false --testTimeout=30000"},"_npmUser":{"name":"b3dmar","email":"sebastian@b3dmar.com"},"repository":{"url":"git+https://github.com/B3dmar/3ngram.git","type":"git","directory":"apps/server"},"description":"REST API + MCP server — the one v1 deployable (docs/concepts/architecture.mdx).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"4.4.3","express":"5.2.1","ioredis":"5.11.1","nodemailer":"9.0.1","@3ngram/llm":"0.2.0","@3ngram/core":"0.4.0","@3ngram/config":"0.2.0","@3ngram/schema":"0.4.0","rate-limiter-flexible":"11.2.0","@modelcontextprotocol/sdk":"1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"comment:exports":"Side-effect-free seams ONLY. `./app` exposes createApp so a downstream composition root can compose the server; `./boot` exposes the shared fail-closed bootstrap() (initObservability -> loadEnv -> metered-op + OAuth key checks -> dynamic-import createApp + listen) so both entrypoints run the IDENTICAL boot and cannot drift. `./mailer` exposes the SMTP sender (loadSmtpConfig + nodemailer, degrade-to-noop) so one mail transport is reused for dunning instead of re-wiring nodemailer. Importing any of these has NO side effects -- transports/boot run only when their function is called. src/index.ts stays the sole side-effectful entry and is intentionally NOT exported.","devDependencies":{"tsx":"4.22.4","vitest":"4.1.8","typescript":"6.0.3","@types/node":"25.9.1","ioredis-mock":"8.13.1","@types/express":"5.0.6","@types/nodemailer":"8.0.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.7.1_1783617911834_0.58554084576889","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"@3ngram/server","version":"0.7.2","license":"Apache-2.0","_id":"@3ngram/server@0.7.2","maintainers":[{"name":"b3dmar","email":"sebastian@b3dmar.com"}],"dist":{"shasum":"af0c3504714ab3699d20c32cbcf9e55376a6fa03","tarball":"https://registry.npmjs.org/@3ngram/server/-/server-0.7.2.tgz","fileCount":116,"integrity":"sha512-o0mYddTNJBXpBas2+KFTtTYepBbqYrRr4JptSmk6ALts91i8TqnBVImNnqCyNsHBd7btYGgzpt3QVisZlNgdBw==","signatures":[{"sig":"MEUCIHwRXriPGsVLXTZLo7oB5B/Cf50bwPLHfai9nqnQgTN2AiEA2kqtMnHOvc4fTZTZpVc490Nb6Y509jscK31FXWukwZA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":440646},"type":"module","exports":{"./app":{"types":"./dist/app.d.ts","default":"./dist/app.js"},"./boot":{"types":"./dist/boot.d.ts","default":"./dist/boot.js"},"./mailer":{"types":"./dist/mailer.d.ts","default":"./dist/mailer.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"}},"scripts":{"dev":"node --watch dist/index.js","test":"vitest run --exclude '**/integration/**' --fileParallelism=false --testTimeout=15000 --hookTimeout=30000","build":"tsc -p tsconfig.json","check":"tsc -p tsconfig.json --noEmit","start":"node dist/index.js","docs:generate":"tsx scripts/generate-openapi.ts && tsx scripts/generate-mcp-reference.ts && tsx ../../apps/cli/scripts/generate-cli-reference.ts && tsx ../../packages/sdk/scripts/generate-sdk-reference.ts","test:integration":"vitest run test/integration --fileParallelism=false --testTimeout=30000"},"_npmUser":{"name":"b3dmar","email":"sebastian@b3dmar.com"},"repository":{"url":"git+https://github.com/B3dmar/3ngram.git","type":"git","directory":"apps/server"},"description":"REST API + MCP server — the one v1 deployable (docs/concepts/architecture.mdx).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"4.4.3","express":"5.2.1","ioredis":"5.11.1","nodemailer":"9.0.1","@3ngram/llm":"0.2.0","@3ngram/core":"0.4.0","@3ngram/config":"0.2.0","@3ngram/schema":"0.4.0","rate-limiter-flexible":"11.2.0","@modelcontextprotocol/sdk":"1.29.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"comment:exports":"Side-effect-free seams ONLY. `./app` exposes createApp so a downstream composition root can compose the server; `./boot` exposes the shared fail-closed bootstrap() (initObservability -> loadEnv -> metered-op + OAuth key checks -> dynamic-import createApp + listen) so both entrypoints run the IDENTICAL boot and cannot drift. `./mailer` exposes the SMTP sender (loadSmtpConfig + nodemailer, degrade-to-noop) so one mail transport is reused for dunning instead of re-wiring nodemailer. Importing any of these has NO side effects -- transports/boot run only when their function is called. src/index.ts stays the sole side-effectful entry and is intentionally NOT exported.","devDependencies":{"tsx":"4.22.4","vitest":"4.1.8","typescript":"6.0.3","@types/node":"25.9.1","ioredis-mock":"8.13.1","@types/express":"5.0.6","@types/nodemailer":"8.0.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.7.2_1783620073274_0.45698964050509705","host":"s3://npm-registry-packages-npm-production"}},"0.7.3":{"name":"@3ngram/server","version":"0.7.3","license":"Apache-2.0","_id":"@3ngram/server@0.7.3","maintainers":[{"name":"b3dmar","email":"sebastian@b3dmar.com"}],"dist":{"shasum":"714b81f3af5c0a03b01104742b60d981ace84dbe","tarball":"https://registry.npmjs.org/@3ngram/server/-/server-0.7.3.tgz","fileCount":116,"integrity":"sha512-y3M6fCEulDstayRP2KkE6BnNX+PdMGKvj353zjD5V8GtDUIwVHgMvp/yohmk+ecd27sdIFUKQNjnVryDU8qIYw==","signatures":[{"sig":"MEQCIEzNEUcv3mbT7/uejP95fTkwdzN2Pi94OB1F5ujPHRkfAiAru9FKch+ijXDgqISvmFffpoNUmyiRHkKNM8IujPndGQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":440646},"type":"module","exports":{"./app":{"types":"./dist/app.d.ts","default":"./dist/app.js"},"./boot":{"types":"./dist/boot.d.ts","default":"./dist/boot.js"},"./mailer":{"types":"./dist/mailer.d.ts","default":"./dist/mailer.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"}},"scripts":{"dev":"node --watch dist/index.js","test":"vitest run --exclude '**/integration/**' --fileParallelism=false --testTimeout=15000 --hookTimeout=30000","build":"tsc -p tsconfig.json","check":"tsc -p tsconfig.json --noEmit","start":"node dist/index.js","docs:generate":"tsx scripts/generate-openapi.ts && tsx scripts/generate-mcp-reference.ts && tsx ../../apps/cli/scripts/generate-cli-reference.ts && tsx ../../packages/sdk/scripts/generate-sdk-reference.ts","test:integration":"vitest run test/integration --fileParallelism=false --testTimeout=30000"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:02510f6e-f074-43bd-83a7-54dabeec9000"}},"repository":{"url":"git+https://github.com/B3dmar/3ngram.git","type":"git","directory":"apps/server"},"description":"REST API + MCP server — the one v1 deployable (docs/concepts/architecture.mdx).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"4.4.3","express":"5.2.1","ioredis":"5.11.1","nodemailer":"9.0.1","@3ngram/llm":"0.2.0","@3ngram/core":"0.4.0","@3ngram/config":"0.2.0","@3ngram/schema":"0.4.0","rate-limiter-flexible":"11.2.0","@modelcontextprotocol/sdk":"1.29.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"comment:exports":"Side-effect-free seams ONLY. `./app` exposes createApp so a downstream composition root can compose the server; `./boot` exposes the shared fail-closed bootstrap() (initObservability -> loadEnv -> metered-op + OAuth key checks -> dynamic-import createApp + listen) so both entrypoints run the IDENTICAL boot and cannot drift. `./mailer` exposes the SMTP sender (loadSmtpConfig + nodemailer, degrade-to-noop) so one mail transport is reused for dunning instead of re-wiring nodemailer. Importing any of these has NO side effects -- transports/boot run only when their function is called. src/index.ts stays the sole side-effectful entry and is intentionally NOT exported.","devDependencies":{"tsx":"4.22.4","vitest":"4.1.8","typescript":"6.0.3","@types/node":"25.9.1","ioredis-mock":"8.13.1","@types/express":"5.0.6","@types/nodemailer":"8.0.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.7.3_1783622585945_0.004492703028951439","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@3ngram/server","version":"0.8.0","license":"Apache-2.0","_id":"@3ngram/server@0.8.0","maintainers":[{"name":"b3dmar","email":"sebastian@b3dmar.com"}],"dist":{"shasum":"a2ee8ee313a00f578cabc6dfa6cbf7c9af50c570","tarball":"https://registry.npmjs.org/@3ngram/server/-/server-0.8.0.tgz","fileCount":116,"integrity":"sha512-T/wx9DzqvO4KxMQe6Kb7oougGabECcetFjhWBxL82FXUAnkQ7LkoGIiYFAR+Fakcru5qm5ksr2xxjmpLeNNloQ==","signatures":[{"sig":"MEYCIQCQTs/3oF+49QMwyR39pQ1JbuJhefy0rf1uvzUkM5Pr+wIhAI8a9wcfksJYOnORTBDSCT6PZ5ljP/IOjLRUDzt2cTDw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":440646},"type":"module","exports":{"./app":{"types":"./dist/app.d.ts","default":"./dist/app.js"},"./boot":{"types":"./dist/boot.d.ts","default":"./dist/boot.js"},"./mailer":{"types":"./dist/mailer.d.ts","default":"./dist/mailer.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"}},"scripts":{"dev":"node --watch dist/index.js","test":"vitest run --exclude '**/integration/**' --fileParallelism=false --testTimeout=15000 --hookTimeout=30000","build":"tsc -p tsconfig.json","check":"tsc -p tsconfig.json --noEmit","start":"node dist/index.js","docs:generate":"tsx scripts/generate-openapi.ts && tsx scripts/generate-mcp-reference.ts && tsx ../../apps/cli/scripts/generate-cli-reference.ts && tsx ../../packages/sdk/scripts/generate-sdk-reference.ts","test:integration":"vitest run test/integration --fileParallelism=false --testTimeout=30000"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:02510f6e-f074-43bd-83a7-54dabeec9000"}},"repository":{"url":"git+https://github.com/B3dmar/3ngram.git","type":"git","directory":"apps/server"},"description":"REST API + MCP server — the one v1 deployable (docs/concepts/architecture.mdx).","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"4.4.3","express":"5.2.1","ioredis":"5.11.1","nodemailer":"9.0.1","@3ngram/llm":"0.2.0","@3ngram/core":"0.4.0","@3ngram/config":"0.2.0","@3ngram/schema":"0.4.0","rate-limiter-flexible":"11.2.0","@modelcontextprotocol/sdk":"1.29.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"comment:exports":"Side-effect-free seams ONLY. `./app` exposes createApp so a downstream composition root can compose the server; `./boot` exposes the shared fail-closed bootstrap() (initObservability -> loadEnv -> metered-op + OAuth key checks -> dynamic-import createApp + listen) so both entrypoints run the IDENTICAL boot and cannot drift. `./mailer` exposes the SMTP sender (loadSmtpConfig + nodemailer, degrade-to-noop) so one mail transport is reused for dunning instead of re-wiring nodemailer. Importing any of these has NO side effects -- transports/boot run only when their function is called. src/index.ts stays the sole side-effectful entry and is intentionally NOT exported.","devDependencies":{"tsx":"4.22.4","vitest":"4.1.8","typescript":"6.0.3","@types/node":"25.9.1","ioredis-mock":"8.13.1","@types/express":"5.0.6","@types/nodemailer":"8.0.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.8.0_1783626677106_0.9550756912932388","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@3ngram/server","version":"1.0.2","keywords":["ai-agents","mcp","memory","model-context-protocol","postgresql"],"license":"Apache-2.0","_id":"@3ngram/server@1.0.2","maintainers":[{"name":"b3dmar","email":"sebastian@b3dmar.com"}],"homepage":"https://3ngram.ai","bugs":{"url":"https://github.com/B3dmar/3ngram/issues"},"dist":{"shasum":"0945b585e5d24d52df2a9570059a0a3fcf34b688","tarball":"https://registry.npmjs.org/@3ngram/server/-/server-1.0.2.tgz","fileCount":118,"integrity":"sha512-eYmz44R9easEoxE6CQyUilikuMBkgpTYbIgP6wYy4DjHhxm6kj/NZQ+zmsmk9kFTmou254ezWvgS/vXtxC2rmg==","signatures":[{"sig":"MEUCIAIhTYygsWHmgL6QZNJ6seFC2OPtKglRls00Ox9UmgvgAiEA7K1SvFbSISCbo2Gksa3aWzhjdjFj8h7sxe5KUI9gjtI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@3ngram%2fserver@1.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":450001},"type":"module","engines":{"node":">=22"},"exports":{"./app":{"types":"./dist/app.d.ts","default":"./dist/app.js"},"./boot":{"types":"./dist/boot.d.ts","default":"./dist/boot.js"},"./mailer":{"types":"./dist/mailer.d.ts","default":"./dist/mailer.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"}},"scripts":{"dev":"node --watch dist/index.js","test":"vitest run --exclude '**/integration/**' --fileParallelism=false --testTimeout=15000 --hookTimeout=30000","build":"tsc -p tsconfig.json","check":"tsc -p tsconfig.json --noEmit","start":"node dist/index.js","docs:generate":"tsx scripts/generate-openapi.ts && tsx scripts/generate-mcp-reference.ts && tsx ../../apps/cli/scripts/generate-cli-reference.ts && tsx ../../packages/sdk/scripts/generate-sdk-reference.ts","test:integration":"vitest run test/integration --fileParallelism=false --testTimeout=30000"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:58dff801-14e9-42d3-88f0-45aa2a0e7e16"}},"repository":{"url":"git+https://github.com/B3dmar/3ngram.git","type":"git","directory":"apps/server"},"description":"MCP server and REST API for persistent, typed AI-agent memory.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"4.4.3","express":"5.2.1","ioredis":"5.11.1","nodemailer":"9.0.1","@3ngram/llm":"0.2.2","@3ngram/core":"0.5.1","@3ngram/config":"0.2.1","@3ngram/schema":"0.4.1","rate-limiter-flexible":"11.2.0","@modelcontextprotocol/sdk":"1.29.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"comment:exports":"Side-effect-free seams ONLY. `./app` exposes createApp so a downstream composition root can compose the server; `./boot` exposes the shared fail-closed bootstrap() (initObservability -> loadEnv -> metered-op + OAuth key checks -> dynamic-import createApp + listen) so both entrypoints run the IDENTICAL boot and cannot drift. `./mailer` exposes the SMTP sender (loadSmtpConfig + nodemailer, degrade-to-noop) so one mail transport is reused for dunning instead of re-wiring nodemailer. Importing any of these has NO side effects -- transports/boot run only when their function is called. src/index.ts stays the sole side-effectful entry and is intentionally NOT exported.","devDependencies":{"tsx":"4.22.4","vitest":"4.1.8","typescript":"6.0.3","@types/node":"25.9.1","ioredis-mock":"8.13.1","@types/express":"5.0.6","@types/nodemailer":"8.0.1"},"_npmOperationalInternal":{"tmp":"tmp/server_1.0.2_1784042233499_0.33197601332625215","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@3ngram/server","version":"1.1.0","keywords":["ai-agents","mcp","memory","model-context-protocol","postgresql"],"license":"Apache-2.0","_id":"@3ngram/server@1.1.0","maintainers":[{"name":"b3dmar","email":"sebastian@b3dmar.com"}],"homepage":"https://3ngram.ai","bugs":{"url":"https://github.com/B3dmar/3ngram/issues"},"dist":{"shasum":"1091cd4a57024a9ee00682e56326121d62e8da0e","tarball":"https://registry.npmjs.org/@3ngram/server/-/server-1.1.0.tgz","fileCount":121,"integrity":"sha512-HVeD3NbCnPMLrcq1uzhlJ9FW6ioYWw6VOGUY/iZdYAP/FuNcv4+rmYPO/qy8uUMnQxinV3A/3RRSJsXu3oJQSw==","signatures":[{"sig":"MEUCIQDMDvMNmUSJX71/PFWctyHT/Iu9v4PhHbkGTFYt4THufAIgCaKUrvfPnXSV4PCdSUlsEZQEOyqYLs+ZyWEYOZGHvBc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@3ngram%2fserver@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":461909},"type":"module","engines":{"node":">=22"},"exports":{"./app":{"types":"./dist/app.d.ts","default":"./dist/app.js"},"./boot":{"types":"./dist/boot.d.ts","default":"./dist/boot.js"},"./mailer":{"types":"./dist/mailer.d.ts","default":"./dist/mailer.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"}},"scripts":{"dev":"node --watch dist/index.js","test":"vitest run --exclude '**/integration/**' --fileParallelism=false --testTimeout=15000 --hookTimeout=30000","build":"tsc -p tsconfig.json","check":"tsc -p tsconfig.json --noEmit","start":"node dist/index.js","docs:generate":"tsx scripts/generate-openapi.ts && tsx scripts/generate-mcp-reference.ts && tsx ../../apps/cli/scripts/generate-cli-reference.ts && tsx ../../packages/sdk/scripts/generate-sdk-reference.ts","test:integration":"vitest run test/integration --fileParallelism=false --testTimeout=30000"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:58dff801-14e9-42d3-88f0-45aa2a0e7e16"}},"repository":{"url":"git+https://github.com/B3dmar/3ngram.git","type":"git","directory":"apps/server"},"description":"MCP server and REST API for persistent, typed AI-agent memory.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"4.4.3","express":"5.2.1","ioredis":"5.11.1","nodemailer":"9.0.1","@3ngram/llm":"0.2.2","@3ngram/core":"0.6.0","@3ngram/config":"0.2.2","@3ngram/schema":"0.5.0","rate-limiter-flexible":"11.2.0","@modelcontextprotocol/node":"2.0.0","@modelcontextprotocol/server":"2.0.0","@modelcontextprotocol/server-legacy":"2.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"comment:exports":"Side-effect-free seams ONLY. `./app` exposes createApp so a downstream composition root can compose the server; `./boot` exposes the shared fail-closed bootstrap() (initObservability -> loadEnv -> metered-op + OAuth key checks -> dynamic-import createApp + listen) so both entrypoints run the IDENTICAL boot and cannot drift. `./mailer` exposes the SMTP sender (loadSmtpConfig + nodemailer, degrade-to-noop) so one mail transport is reused for dunning instead of re-wiring nodemailer. Importing any of these has NO side effects -- transports/boot run only when their function is called. src/index.ts stays the sole side-effectful entry and is intentionally NOT exported.","devDependencies":{"tsx":"4.22.4","vitest":"4.1.8","typescript":"6.0.3","@types/node":"25.9.1","ioredis-mock":"8.13.1","@types/express":"5.0.6","@types/nodemailer":"8.0.1","@modelcontextprotocol/client":"2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/server_1.1.0_1785680698814_0.12630821578697815","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@3ngram/server","version":"1.1.1","keywords":["ai-agents","mcp","memory","model-context-protocol","postgresql"],"license":"Apache-2.0","_id":"@3ngram/server@1.1.1","maintainers":[{"name":"b3dmar","email":"sebastian@b3dmar.com"}],"homepage":"https://3ngram.ai","bugs":{"url":"https://github.com/B3dmar/3ngram/issues"},"dist":{"shasum":"0fbd316135419489069a949bfc18d2913c1cf5d5","tarball":"https://registry.npmjs.org/@3ngram/server/-/server-1.1.1.tgz","fileCount":121,"integrity":"sha512-mBVQBGQtCsCQ3EbN4F70iGcgSV8DU3DXvKATP5pqve7qzpeBbgkt9Grjtg6eDp1iGNuW9hmr6PAm7XhpI/WF/A==","signatures":[{"sig":"MEUCIQDAICOd7Bn9QwcuZf1tOlWMey3IuzLVhRNFkBXhxKBbsgIgeEWuwA6ahV/DJv9HKeBkfx4ZsYGJLX5gfZVrND6YGtg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@3ngram%2fserver@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":461909},"type":"module","engines":{"node":">=22"},"exports":{"./app":{"types":"./dist/app.d.ts","default":"./dist/app.js"},"./boot":{"types":"./dist/boot.d.ts","default":"./dist/boot.js"},"./mailer":{"types":"./dist/mailer.d.ts","default":"./dist/mailer.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"}},"scripts":{"dev":"node --watch dist/index.js","test":"vitest run --exclude '**/integration/**' --fileParallelism=false --testTimeout=15000 --hookTimeout=30000","build":"tsc -p tsconfig.json","check":"tsc -p tsconfig.json --noEmit","start":"node dist/index.js","docs:generate":"tsx scripts/generate-openapi.ts && tsx scripts/generate-mcp-reference.ts && tsx ../../apps/cli/scripts/generate-cli-reference.ts && tsx ../../packages/sdk/scripts/generate-sdk-reference.ts","test:integration":"vitest run test/integration --fileParallelism=false --testTimeout=30000"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:58dff801-14e9-42d3-88f0-45aa2a0e7e16"}},"repository":{"url":"git+https://github.com/B3dmar/3ngram.git","type":"git","directory":"apps/server"},"description":"MCP server and REST API for persistent, typed AI-agent memory.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"4.4.3","express":"5.2.1","ioredis":"5.11.1","nodemailer":"9.0.1","@3ngram/llm":"0.2.2","@3ngram/core":"0.6.1","@3ngram/config":"0.2.2","@3ngram/schema":"0.5.0","rate-limiter-flexible":"11.2.0","@modelcontextprotocol/node":"2.0.0","@modelcontextprotocol/server":"2.0.0","@modelcontextprotocol/server-legacy":"2.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"comment:exports":"Side-effect-free seams ONLY. `./app` exposes createApp so a downstream composition root can compose the server; `./boot` exposes the shared fail-closed bootstrap() (initObservability -> loadEnv -> metered-op + OAuth key checks -> dynamic-import createApp + listen) so both entrypoints run the IDENTICAL boot and cannot drift. `./mailer` exposes the SMTP sender (loadSmtpConfig + nodemailer, degrade-to-noop) so one mail transport is reused for dunning instead of re-wiring nodemailer. Importing any of these has NO side effects -- transports/boot run only when their function is called. src/index.ts stays the sole side-effectful entry and is intentionally NOT exported.","devDependencies":{"tsx":"4.22.4","vitest":"4.1.8","typescript":"6.0.3","@types/node":"25.9.1","ioredis-mock":"8.13.1","@types/express":"5.0.6","@types/nodemailer":"8.0.1","@modelcontextprotocol/client":"2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/server_1.1.1_1785695682897_0.8973035899470743","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@3ngram/server","version":"1.1.2","keywords":["ai-agents","mcp","memory","model-context-protocol","postgresql"],"license":"Apache-2.0","_id":"@3ngram/server@1.1.2","maintainers":[{"name":"b3dmar","email":"sebastian@b3dmar.com"}],"homepage":"https://3ngram.ai","bugs":{"url":"https://github.com/B3dmar/3ngram/issues"},"dist":{"shasum":"1e1d1c22203312bc49ef8dc885ffeb6762f9fdbc","tarball":"https://registry.npmjs.org/@3ngram/server/-/server-1.1.2.tgz","fileCount":121,"integrity":"sha512-waVu4okgghRIInitnyRccKn/ijbeBBOLhG9DJ4zSKLi9MltzIHUpVOD5L8jYWRFXvOvIXOdG7lEDXe0Sg6nCsA==","signatures":[{"sig":"MEUCIQDwsv20nI/1z6lAkzbTgTuk9tFBX8DmxdEPMdK2kPxLXwIgMKT8wCmY5Lr3oHuzx9/NplIuThDgSZknVGWTXs1kShY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@3ngram%2fserver@1.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":461909},"type":"module","engines":{"node":">=22"},"exports":{"./app":{"types":"./dist/app.d.ts","default":"./dist/app.js"},"./boot":{"types":"./dist/boot.d.ts","default":"./dist/boot.js"},"./mailer":{"types":"./dist/mailer.d.ts","default":"./dist/mailer.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"}},"scripts":{"dev":"node --watch dist/index.js","test":"vitest run --exclude '**/integration/**' --fileParallelism=false --testTimeout=15000 --hookTimeout=30000","build":"tsc -p tsconfig.json","check":"tsc -p tsconfig.json --noEmit","start":"node dist/index.js","docs:generate":"tsx scripts/generate-openapi.ts && tsx scripts/generate-mcp-reference.ts && tsx ../../apps/cli/scripts/generate-cli-reference.ts && tsx ../../packages/sdk/scripts/generate-sdk-reference.ts","test:integration":"vitest run test/integration --fileParallelism=false --testTimeout=30000"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:58dff801-14e9-42d3-88f0-45aa2a0e7e16"}},"repository":{"url":"git+https://github.com/B3dmar/3ngram.git","type":"git","directory":"apps/server"},"description":"MCP server and REST API for persistent, typed AI-agent memory.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"4.4.3","express":"5.2.1","ioredis":"5.11.1","nodemailer":"9.0.1","@3ngram/llm":"0.2.2","@3ngram/core":"0.6.2","@3ngram/config":"0.2.3","@3ngram/schema":"0.5.0","rate-limiter-flexible":"11.2.0","@modelcontextprotocol/node":"2.0.0","@modelcontextprotocol/server":"2.0.0","@modelcontextprotocol/server-legacy":"2.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"comment:exports":"Side-effect-free seams ONLY. `./app` exposes createApp so a downstream composition root can compose the server; `./boot` exposes the shared fail-closed bootstrap() (initObservability -> loadEnv -> metered-op + OAuth key checks -> dynamic-import createApp + listen) so both entrypoints run the IDENTICAL boot and cannot drift. `./mailer` exposes the SMTP sender (loadSmtpConfig + nodemailer, degrade-to-noop) so one mail transport is reused for dunning instead of re-wiring nodemailer. Importing any of these has NO side effects -- transports/boot run only when their function is called. src/index.ts stays the sole side-effectful entry and is intentionally NOT exported.","devDependencies":{"tsx":"4.22.4","vitest":"4.1.8","typescript":"6.0.3","@types/node":"25.9.1","ioredis-mock":"8.13.1","@types/express":"5.0.6","@types/nodemailer":"8.0.1","@modelcontextprotocol/client":"2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/server_1.1.2_1785698233426_0.1379330763068065","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@3ngram/server","version":"1.1.3","keywords":["ai-agents","mcp","memory","model-context-protocol","postgresql"],"license":"Apache-2.0","_id":"@3ngram/server@1.1.3","maintainers":[{"name":"b3dmar","email":"sebastian@b3dmar.com"}],"homepage":"https://3ngram.ai","bugs":{"url":"https://github.com/B3dmar/3ngram/issues"},"dist":{"shasum":"df05f0923f1d187e5f9b4a73cde9ed379b1b7726","tarball":"https://registry.npmjs.org/@3ngram/server/-/server-1.1.3.tgz","fileCount":121,"integrity":"sha512-HYAT/9sKG5W49XeNYnXky2TAin2ZW8eR+8WZ3dGBq3LS5xc28bkFigKR2NPGHgR4XxGJUkfXoRAcLEDF8g8LFg==","signatures":[{"sig":"MEQCIFZN0ESmLibYJf5stIxBfVhYIa469ytAZISg3LwfSK5vAiBLFwOxGwzwS8voFvEEWegpRuftnzTaLEY9455mzFi5Mw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@3ngram%2fserver@1.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":461909},"type":"module","engines":{"node":">=22"},"exports":{"./app":{"types":"./dist/app.d.ts","default":"./dist/app.js"},"./boot":{"types":"./dist/boot.d.ts","default":"./dist/boot.js"},"./mailer":{"types":"./dist/mailer.d.ts","default":"./dist/mailer.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"}},"scripts":{"dev":"node --watch dist/index.js","test":"vitest run --exclude '**/integration/**' --fileParallelism=false --testTimeout=15000 --hookTimeout=30000","build":"tsc -p tsconfig.json","check":"tsc -p tsconfig.json --noEmit","start":"node dist/index.js","docs:generate":"tsx scripts/generate-openapi.ts && tsx scripts/generate-mcp-reference.ts && tsx ../../apps/cli/scripts/generate-cli-reference.ts && tsx ../../packages/sdk/scripts/generate-sdk-reference.ts","test:integration":"vitest run test/integration --fileParallelism=false --testTimeout=30000"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:58dff801-14e9-42d3-88f0-45aa2a0e7e16"}},"repository":{"url":"git+https://github.com/B3dmar/3ngram.git","type":"git","directory":"apps/server"},"description":"MCP server and REST API for persistent, typed AI-agent memory.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"4.4.3","express":"5.2.1","ioredis":"5.11.1","nodemailer":"9.0.1","@3ngram/llm":"0.2.2","@3ngram/core":"0.6.3","@3ngram/config":"0.2.3","@3ngram/schema":"0.5.0","rate-limiter-flexible":"11.2.0","@modelcontextprotocol/node":"2.0.0","@modelcontextprotocol/server":"2.0.0","@modelcontextprotocol/server-legacy":"2.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"comment:exports":"Side-effect-free seams ONLY. `./app` exposes createApp so a downstream composition root can compose the server; `./boot` exposes the shared fail-closed bootstrap() (initObservability -> loadEnv -> metered-op + OAuth key checks -> dynamic-import createApp + listen) so both entrypoints run the IDENTICAL boot and cannot drift. `./mailer` exposes the SMTP sender (loadSmtpConfig + nodemailer, degrade-to-noop) so one mail transport is reused for dunning instead of re-wiring nodemailer. Importing any of these has NO side effects -- transports/boot run only when their function is called. src/index.ts stays the sole side-effectful entry and is intentionally NOT exported.","devDependencies":{"tsx":"4.22.4","vitest":"4.1.8","typescript":"6.0.3","@types/node":"25.9.1","ioredis-mock":"8.13.1","@types/express":"5.0.6","@types/nodemailer":"8.0.1","@modelcontextprotocol/client":"2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/server_1.1.3_1785744304122_0.9225358708610132","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@3ngram/server","version":"1.2.1","keywords":["ai-agents","mcp","memory","model-context-protocol","postgresql"],"license":"Apache-2.0","_id":"@3ngram/server@1.2.1","maintainers":[{"name":"b3dmar","email":"sebastian@b3dmar.com"}],"homepage":"https://3ngram.ai","bugs":{"url":"https://github.com/B3dmar/3ngram/issues"},"dist":{"shasum":"98dbd5154ac07399bb43553aef85b9301c17cd19","tarball":"https://registry.npmjs.org/@3ngram/server/-/server-1.2.1.tgz","fileCount":133,"integrity":"sha512-TqUS4bjjL2pdn/btse5bnHeY0Z5d1lQGtSvQ2StYh9Ib2S0Yk0l5YX8aYlm2xp1Ou7/UyY7Yh0N7C5tm3QgL0g==","signatures":[{"sig":"MEQCIFozpYdK2Q1mSg3bdTLWgjDGxfBZbpxfb3YUpWNKzffEAiA3BkXLogRigOwJAb2CoNEXUZXM33Bc4mY187C7w++n3w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@3ngram%2fserver@1.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":512340},"type":"module","engines":{"node":">=22"},"exports":{"./app":{"types":"./dist/app.d.ts","default":"./dist/app.js"},"./boot":{"types":"./dist/boot.d.ts","default":"./dist/boot.js"},"./mailer":{"types":"./dist/mailer.d.ts","default":"./dist/mailer.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"}},"scripts":{"dev":"node --watch dist/index.js","test":"vitest run --exclude '**/integration/**' --fileParallelism=false --testTimeout=15000 --hookTimeout=30000","build":"tsc -p tsconfig.json","check":"tsc -p tsconfig.json --noEmit","start":"node dist/index.js","docs:generate":"tsx scripts/generate-openapi.ts && tsx scripts/generate-mcp-reference.ts && tsx ../../apps/cli/scripts/generate-cli-reference.ts && tsx ../../packages/sdk/scripts/generate-sdk-reference.ts","test:integration":"vitest run test/integration --fileParallelism=false --testTimeout=30000"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:58dff801-14e9-42d3-88f0-45aa2a0e7e16"}},"repository":{"url":"git+https://github.com/B3dmar/3ngram.git","type":"git","directory":"apps/server"},"description":"MCP server and REST API for persistent, typed AI-agent memory.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"4.4.3","express":"5.2.1","ioredis":"5.11.1","nodemailer":"9.0.1","@3ngram/llm":"0.2.2","@3ngram/core":"0.7.0","@3ngram/config":"0.2.3","@3ngram/schema":"0.6.0","rate-limiter-flexible":"11.2.0","@modelcontextprotocol/node":"2.0.0","@modelcontextprotocol/server":"2.0.0","@modelcontextprotocol/server-legacy":"2.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"comment:exports":"Side-effect-free seams ONLY. `./app` exposes createApp so a downstream composition root can compose the server; `./boot` exposes the shared fail-closed bootstrap() (initObservability -> loadEnv -> metered-op + OAuth key checks -> dynamic-import createApp + listen) so both entrypoints run the IDENTICAL boot and cannot drift. `./mailer` exposes the SMTP sender (loadSmtpConfig + nodemailer, degrade-to-noop) so one mail transport is reused for dunning instead of re-wiring nodemailer. Importing any of these has NO side effects -- transports/boot run only when their function is called. src/index.ts stays the sole side-effectful entry and is intentionally NOT exported.","devDependencies":{"tsx":"4.22.4","vitest":"4.1.8","typescript":"6.0.3","@types/node":"25.9.1","ioredis-mock":"8.13.1","@types/express":"5.0.6","@types/nodemailer":"8.0.1","@modelcontextprotocol/client":"2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/server_1.2.1_1785859172735_0.4322653411676214","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@3ngram/server","version":"1.2.2","keywords":["ai-agents","mcp","memory","model-context-protocol","postgresql"],"license":"Apache-2.0","_id":"@3ngram/server@1.2.2","maintainers":[{"name":"b3dmar","email":"sebastian@b3dmar.com"}],"homepage":"https://3ngram.ai","bugs":{"url":"https://github.com/B3dmar/3ngram/issues"},"dist":{"shasum":"dc9a2c9546ac9ec429071e556d4bcb90dbadbc12","tarball":"https://registry.npmjs.org/@3ngram/server/-/server-1.2.2.tgz","fileCount":133,"integrity":"sha512-RR2vzX/RO8bgtQU1Rp97t6G0eIJRNdDFjzJi98upwdXkPwODiI+Y0oTOOZxZAduw8F74m3WOLZJkodYJqUcY9A==","signatures":[{"sig":"MEYCIQDWByAuOcn2zEySKnhti9hhgXDQctsotOpVXQi1wZ8URAIhAJvZIJTdTXhSv9KiTdCZX2hZLXj317Dag6qSeBGRgaYk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@3ngram%2fserver@1.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":514744},"type":"module","engines":{"node":">=22"},"exports":{"./app":{"types":"./dist/app.d.ts","default":"./dist/app.js"},"./boot":{"types":"./dist/boot.d.ts","default":"./dist/boot.js"},"./mailer":{"types":"./dist/mailer.d.ts","default":"./dist/mailer.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"}},"scripts":{"dev":"node --watch dist/index.js","test":"vitest run --exclude '**/integration/**' --fileParallelism=false --testTimeout=15000 --hookTimeout=30000","build":"tsc -p tsconfig.json","check":"tsc -p tsconfig.json --noEmit","start":"node dist/index.js","docs:generate":"tsx scripts/generate-openapi.ts && tsx scripts/generate-mcp-reference.ts && tsx ../../apps/cli/scripts/generate-cli-reference.ts && tsx ../../packages/sdk/scripts/generate-sdk-reference.ts","test:integration":"vitest run test/integration --fileParallelism=false --testTimeout=30000"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:58dff801-14e9-42d3-88f0-45aa2a0e7e16"}},"repository":{"url":"git+https://github.com/B3dmar/3ngram.git","type":"git","directory":"apps/server"},"description":"MCP server and REST API for persistent, typed AI-agent memory.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"4.4.3","express":"5.2.1","ioredis":"5.11.1","nodemailer":"9.0.1","@3ngram/llm":"0.2.2","@3ngram/core":"0.8.0","@3ngram/config":"0.2.3","@3ngram/schema":"0.6.0","rate-limiter-flexible":"11.2.0","@modelcontextprotocol/node":"2.0.0","@modelcontextprotocol/server":"2.0.0","@modelcontextprotocol/server-legacy":"2.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"comment:exports":"Side-effect-free seams ONLY. `./app` exposes createApp so a downstream composition root can compose the server; `./boot` exposes the shared fail-closed bootstrap() (initObservability -> loadEnv -> metered-op + OAuth key checks -> dynamic-import createApp + listen) so both entrypoints run the IDENTICAL boot and cannot drift. `./mailer` exposes the SMTP sender (loadSmtpConfig + nodemailer, degrade-to-noop) so one mail transport is reused for dunning instead of re-wiring nodemailer. Importing any of these has NO side effects -- transports/boot run only when their function is called. src/index.ts stays the sole side-effectful entry and is intentionally NOT exported.","devDependencies":{"tsx":"4.22.4","vitest":"4.1.8","typescript":"6.0.3","@types/node":"25.9.1","ioredis-mock":"8.13.1","@types/express":"5.0.6","@types/nodemailer":"8.0.1","@modelcontextprotocol/client":"2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/server_1.2.2_1785878439832_0.9860234585801828","host":"s3://npm-registry-packages-npm-production"}},"1.2.3":{"name":"@3ngram/server","version":"1.2.3","keywords":["ai-agents","mcp","memory","model-context-protocol","postgresql"],"license":"Apache-2.0","_id":"@3ngram/server@1.2.3","maintainers":[{"name":"b3dmar","email":"sebastian@b3dmar.com"}],"homepage":"https://3ngram.ai","bugs":{"url":"https://github.com/B3dmar/3ngram/issues"},"dist":{"shasum":"27e8a0b1e477ea8a30cd3ef8d195e57092a38422","tarball":"https://registry.npmjs.org/@3ngram/server/-/server-1.2.3.tgz","fileCount":133,"integrity":"sha512-WYvzvX9dJY4/k5IZ3VVER4Z27s+BSeNmg3YUDqQcsPybkuKE3eV6Va5xJsLQiRZrWGfDGS00yJV0wr1lXfMKsA==","signatures":[{"sig":"MEQCIFI1Onhc7R42Gexi330xPB38JsYGSo7d45/6gJMQxmY2AiBBQKUkPmzc+Licd861YFZOueB+QRDLzStBP2Wy/o9x2w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@3ngram%2fserver@1.2.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":514744},"type":"module","engines":{"node":">=22"},"exports":{"./app":{"types":"./dist/app.d.ts","default":"./dist/app.js"},"./boot":{"types":"./dist/boot.d.ts","default":"./dist/boot.js"},"./mailer":{"types":"./dist/mailer.d.ts","default":"./dist/mailer.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"}},"scripts":{"dev":"node --watch dist/index.js","test":"vitest run --exclude '**/integration/**' --fileParallelism=false --testTimeout=15000 --hookTimeout=30000","build":"tsc -p tsconfig.json","check":"tsc -p tsconfig.json --noEmit","start":"node dist/index.js","docs:generate":"tsx scripts/generate-openapi.ts && tsx scripts/generate-mcp-reference.ts && tsx ../../apps/cli/scripts/generate-cli-reference.ts && tsx ../../packages/sdk/scripts/generate-sdk-reference.ts","test:integration":"vitest run test/integration --fileParallelism=false --testTimeout=30000"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:58dff801-14e9-42d3-88f0-45aa2a0e7e16"}},"repository":{"url":"git+https://github.com/B3dmar/3ngram.git","type":"git","directory":"apps/server"},"description":"MCP server and REST API for persistent, typed AI-agent memory.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"4.4.3","express":"5.2.1","ioredis":"5.11.1","nodemailer":"9.0.1","@3ngram/llm":"0.2.2","@3ngram/core":"0.8.1","@3ngram/config":"0.2.3","@3ngram/schema":"0.6.0","rate-limiter-flexible":"11.2.0","@modelcontextprotocol/node":"2.0.0","@modelcontextprotocol/server":"2.0.0","@modelcontextprotocol/server-legacy":"2.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"comment:exports":"Side-effect-free seams ONLY. `./app` exposes createApp so a downstream composition root can compose the server; `./boot` exposes the shared fail-closed bootstrap() (initObservability -> loadEnv -> metered-op + OAuth key checks -> dynamic-import createApp + listen) so both entrypoints run the IDENTICAL boot and cannot drift. `./mailer` exposes the SMTP sender (loadSmtpConfig + nodemailer, degrade-to-noop) so one mail transport is reused for dunning instead of re-wiring nodemailer. Importing any of these has NO side effects -- transports/boot run only when their function is called. src/index.ts stays the sole side-effectful entry and is intentionally NOT exported.","devDependencies":{"tsx":"4.22.4","vitest":"4.1.8","typescript":"6.0.3","@types/node":"25.9.1","ioredis-mock":"8.13.1","@types/express":"5.0.6","@types/nodemailer":"8.0.1","@modelcontextprotocol/client":"2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/server_1.2.3_1785882389913_0.1584314461988201","host":"s3://npm-registry-packages-npm-production"}},"1.2.4":{"name":"@3ngram/server","version":"1.2.4","keywords":["ai-agents","mcp","memory","model-context-protocol","postgresql"],"license":"Apache-2.0","_id":"@3ngram/server@1.2.4","maintainers":[{"name":"b3dmar","email":"sebastian@b3dmar.com"}],"homepage":"https://3ngram.ai","bugs":{"url":"https://github.com/B3dmar/3ngram/issues"},"dist":{"shasum":"ffe97f3d3f0d52c2c705a46cacd7fb61121b50a2","tarball":"https://registry.npmjs.org/@3ngram/server/-/server-1.2.4.tgz","fileCount":133,"integrity":"sha512-uGEU87GXpaTXd+nBSf8PJJJSJipyZoV7SvYu1FH5SHwQtc0Uhi7GHoGZ8iZgwRegczeQrxQkSXZ3jQTaxZtYaQ==","signatures":[{"sig":"MEUCIDG98LsS3pAuOg4oYkyaGU5CVsod8qL0ode/9lf7x7vzAiEAoOq6mi3inRreLfhEAyrOGNVJtQ2cerBFcBHsadCAddI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@3ngram%2fserver@1.2.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":514744},"type":"module","engines":{"node":">=22"},"exports":{"./app":{"types":"./dist/app.d.ts","default":"./dist/app.js"},"./boot":{"types":"./dist/boot.d.ts","default":"./dist/boot.js"},"./mailer":{"types":"./dist/mailer.d.ts","default":"./dist/mailer.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"}},"scripts":{"dev":"node --watch dist/index.js","test":"vitest run --exclude '**/integration/**' --fileParallelism=false --testTimeout=15000 --hookTimeout=30000","build":"tsc -p tsconfig.json","check":"tsc -p tsconfig.json --noEmit","start":"node dist/index.js","docs:generate":"tsx scripts/generate-openapi.ts && tsx scripts/generate-mcp-reference.ts && tsx ../../apps/cli/scripts/generate-cli-reference.ts && tsx ../../packages/sdk/scripts/generate-sdk-reference.ts","test:integration":"vitest run test/integration --fileParallelism=false --testTimeout=30000"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:58dff801-14e9-42d3-88f0-45aa2a0e7e16"}},"repository":{"url":"git+https://github.com/B3dmar/3ngram.git","type":"git","directory":"apps/server"},"description":"MCP server and REST API for persistent, typed AI-agent memory.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"4.4.3","express":"5.2.1","ioredis":"5.11.1","nodemailer":"9.0.1","@3ngram/llm":"0.2.2","@3ngram/core":"0.8.2","@3ngram/config":"0.2.3","@3ngram/schema":"0.6.1","rate-limiter-flexible":"11.2.0","@modelcontextprotocol/node":"2.0.0","@modelcontextprotocol/server":"2.0.0","@modelcontextprotocol/server-legacy":"2.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"comment:exports":"Side-effect-free seams ONLY. `./app` exposes createApp so a downstream composition root can compose the server; `./boot` exposes the shared fail-closed bootstrap() (initObservability -> loadEnv -> metered-op + OAuth key checks -> dynamic-import createApp + listen) so both entrypoints run the IDENTICAL boot and cannot drift. `./mailer` exposes the SMTP sender (loadSmtpConfig + nodemailer, degrade-to-noop) so one mail transport is reused for dunning instead of re-wiring nodemailer. Importing any of these has NO side effects -- transports/boot run only when their function is called. src/index.ts stays the sole side-effectful entry and is intentionally NOT exported.","devDependencies":{"tsx":"4.22.4","vitest":"4.1.8","typescript":"6.0.3","@types/node":"25.9.1","ioredis-mock":"8.13.1","@types/express":"5.0.6","@types/nodemailer":"8.0.1","@modelcontextprotocol/client":"2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/server_1.2.4_1785917461276_0.6729415424750347","host":"s3://npm-registry-packages-npm-production"}},"1.2.6":{"name":"@3ngram/server","version":"1.2.6","keywords":["ai-agents","mcp","memory","model-context-protocol","postgresql"],"license":"Apache-2.0","_id":"@3ngram/server@1.2.6","maintainers":[{"name":"b3dmar","email":"sebastian@b3dmar.com"}],"homepage":"https://3ngram.ai","bugs":{"url":"https://github.com/B3dmar/3ngram/issues"},"dist":{"shasum":"905aca8b38c42ab38c9cee3e176d20a460128826","tarball":"https://registry.npmjs.org/@3ngram/server/-/server-1.2.6.tgz","fileCount":133,"integrity":"sha512-d7+XSjmkWe6qsY9SOR0mKX0dZZzss9ZeahcVtLOpGFFUAOnAfBO7zj3IPNfxdwL5hpeZPyqYko9328OCmxiUXg==","signatures":[{"sig":"MEUCIQDwDJCpOSMu/ncSOlUfyOn7Fvu9DONCks9GHdxfc1V3RwIgDr5LLo5Mtqc4EIE/TF2r/EXbDjtdDsJLASxRA+KGjtU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@3ngram%2fserver@1.2.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":514767},"type":"module","engines":{"node":">=22"},"exports":{"./app":{"types":"./dist/app.d.ts","default":"./dist/app.js"},"./boot":{"types":"./dist/boot.d.ts","default":"./dist/boot.js"},"./mailer":{"types":"./dist/mailer.d.ts","default":"./dist/mailer.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"}},"scripts":{"dev":"node --watch dist/index.js","test":"vitest run --exclude '**/integration/**' --fileParallelism=false --testTimeout=15000 --hookTimeout=30000","build":"tsc -p tsconfig.json","check":"tsc -p tsconfig.json --noEmit","start":"node dist/index.js","docs:generate":"tsx scripts/generate-openapi.ts && tsx scripts/generate-mcp-reference.ts && tsx ../../apps/cli/scripts/generate-cli-reference.ts && tsx ../../packages/sdk/scripts/generate-sdk-reference.ts","test:integration":"vitest run test/integration --fileParallelism=false --testTimeout=30000"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:58dff801-14e9-42d3-88f0-45aa2a0e7e16"}},"repository":{"url":"git+https://github.com/B3dmar/3ngram.git","type":"git","directory":"apps/server"},"description":"MCP server and REST API for persistent, typed AI-agent memory.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"4.4.3","hono":"4.12.34","express":"5.2.1","ioredis":"5.11.1","nodemailer":"9.0.1","@3ngram/llm":"0.2.4","@3ngram/core":"0.8.4","@3ngram/config":"0.2.5","@3ngram/schema":"0.6.3","rate-limiter-flexible":"11.2.0","@modelcontextprotocol/node":"2.0.0","@modelcontextprotocol/server":"2.0.0","@modelcontextprotocol/server-legacy":"2.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"comment:exports":"Side-effect-free seams ONLY. `./app` exposes createApp so a downstream composition root can compose the server; `./boot` exposes the shared fail-closed bootstrap() (initObservability -> loadEnv -> metered-op + OAuth key checks -> dynamic-import createApp + listen) so both entrypoints run the IDENTICAL boot and cannot drift. `./mailer` exposes the SMTP sender (loadSmtpConfig + nodemailer, degrade-to-noop) so one mail transport is reused for dunning instead of re-wiring nodemailer. Importing any of these has NO side effects -- transports/boot run only when their function is called. src/index.ts stays the sole side-effectful entry and is intentionally NOT exported.","devDependencies":{"tsx":"4.22.4","vitest":"4.1.8","typescript":"6.0.3","@types/node":"25.9.1","ioredis-mock":"8.13.1","@types/express":"5.0.6","@types/nodemailer":"8.0.1","@modelcontextprotocol/client":"2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/server_1.2.6_1785937380902_0.2660584033274218","host":"s3://npm-registry-packages-npm-production"}},"1.2.7":{"name":"@3ngram/server","version":"1.2.7","keywords":["ai-agents","mcp","memory","model-context-protocol","postgresql"],"license":"Apache-2.0","_id":"@3ngram/server@1.2.7","maintainers":[{"name":"b3dmar","email":"sebastian@b3dmar.com"}],"homepage":"https://3ngram.ai","bugs":{"url":"https://github.com/B3dmar/3ngram/issues"},"dist":{"shasum":"7386e6736207a46e55f1477b0ebbf27d9f660dfc","tarball":"https://registry.npmjs.org/@3ngram/server/-/server-1.2.7.tgz","fileCount":133,"integrity":"sha512-oOD9Sfmzb6cDD+786PaWLftYeTKyEWSZtHtHa6X4c1rmADIrex/YIdVU6J+crHimr068iqNtDKHyfpm+2HsqfQ==","signatures":[{"sig":"MEUCIFlSs5Qi5N68iQRvJyuz2DoTNq8B0a32N/bmSkZOtpOgAiEAplMK0+DsqlCPXVarbvWkYKdhnKXpcchJhUouKHEaeqo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@3ngram%2fserver@1.2.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":514836},"type":"module","engines":{"node":">=22"},"exports":{"./app":{"types":"./dist/app.d.ts","default":"./dist/app.js"},"./boot":{"types":"./dist/boot.d.ts","default":"./dist/boot.js"},"./mailer":{"types":"./dist/mailer.d.ts","default":"./dist/mailer.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"}},"scripts":{"dev":"node --watch dist/index.js","test":"vitest run --exclude '**/integration/**' --fileParallelism=false --testTimeout=15000 --hookTimeout=30000","build":"tsc -p tsconfig.json","check":"tsc -p tsconfig.json --noEmit","start":"node dist/index.js","docs:generate":"tsx scripts/generate-openapi.ts && tsx scripts/generate-mcp-reference.ts && tsx ../../apps/cli/scripts/generate-cli-reference.ts && tsx ../../packages/sdk/scripts/generate-sdk-reference.ts","test:integration":"vitest run test/integration --fileParallelism=false --testTimeout=30000"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:58dff801-14e9-42d3-88f0-45aa2a0e7e16"}},"repository":{"url":"git+https://github.com/B3dmar/3ngram.git","type":"git","directory":"apps/server"},"description":"MCP server and REST API for persistent, typed AI-agent memory.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"4.4.3","hono":"4.12.34","express":"5.2.1","ioredis":"5.11.1","nodemailer":"9.0.1","@3ngram/llm":"0.2.4","@3ngram/core":"0.8.5","@3ngram/config":"0.2.5","@3ngram/schema":"0.6.3","rate-limiter-flexible":"11.2.0","@modelcontextprotocol/node":"2.0.0","@modelcontextprotocol/server":"2.0.0","@modelcontextprotocol/server-legacy":"2.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"comment:exports":"Side-effect-free seams ONLY. `./app` exposes createApp so a downstream composition root can compose the server; `./boot` exposes the shared fail-closed bootstrap() (initObservability -> loadEnv -> metered-op + OAuth key checks -> dynamic-import createApp + listen) so both entrypoints run the IDENTICAL boot and cannot drift. `./mailer` exposes the SMTP sender (loadSmtpConfig + nodemailer, degrade-to-noop) so one mail transport is reused for dunning instead of re-wiring nodemailer. Importing any of these has NO side effects -- transports/boot run only when their function is called. src/index.ts stays the sole side-effectful entry and is intentionally NOT exported.","devDependencies":{"tsx":"4.22.4","vitest":"4.1.8","typescript":"6.0.3","@types/node":"25.9.1","ioredis-mock":"8.13.1","@types/express":"5.0.6","@types/nodemailer":"8.0.1","@modelcontextprotocol/client":"2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/server_1.2.7_1786006592042_0.6663603069962734","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@3ngram/server","version":"1.3.0","keywords":["ai-agents","mcp","memory","model-context-protocol","postgresql"],"license":"Apache-2.0","_id":"@3ngram/server@1.3.0","maintainers":[{"name":"b3dmar","email":"sebastian@b3dmar.com"}],"homepage":"https://3ngram.ai","bugs":{"url":"https://github.com/B3dmar/3ngram/issues"},"dist":{"shasum":"a4581b6021ce4bdc65a80adf930d306a51403c8a","tarball":"https://registry.npmjs.org/@3ngram/server/-/server-1.3.0.tgz","fileCount":145,"integrity":"sha512-OXdmMFbN/BreXi8yn+/3/HoXA8iH0Zcj0Li3YiBUYSckhhD9N7d2w961AQjOvEZs1KiBtDQOGxtWW/Z7TCynvw==","signatures":[{"sig":"MEUCIQD2KCspEPgRyOOzugRB3kqRTuyvlEwi4SVsNFSgF9bIdQIgUB9gS6FTZUBHj8T1+gzIgUZvDZliNq4HgK7XOMg8U1Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@3ngram%2fserver@1.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":560483},"type":"module","engines":{"node":">=22"},"exports":{"./app":{"types":"./dist/app.d.ts","default":"./dist/app.js"},"./boot":{"types":"./dist/boot.d.ts","default":"./dist/boot.js"},"./mailer":{"types":"./dist/mailer.d.ts","default":"./dist/mailer.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"}},"scripts":{"dev":"node --watch dist/index.js","test":"vitest run --exclude '**/integration/**' --fileParallelism=false --testTimeout=15000 --hookTimeout=30000","build":"tsc -p tsconfig.json","check":"tsc -p tsconfig.json --noEmit","start":"node dist/index.js","docs:generate":"tsx scripts/generate-openapi.ts && tsx scripts/generate-mcp-reference.ts && tsx ../../apps/cli/scripts/generate-cli-reference.ts && tsx ../../packages/sdk/scripts/generate-sdk-reference.ts","test:integration":"vitest run test/integration --fileParallelism=false --testTimeout=30000"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:58dff801-14e9-42d3-88f0-45aa2a0e7e16"}},"repository":{"url":"git+https://github.com/B3dmar/3ngram.git","type":"git","directory":"apps/server"},"description":"MCP server and REST API for persistent, typed AI-agent memory.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"4.4.3","hono":"4.12.34","express":"5.2.1","ioredis":"5.11.1","nodemailer":"9.0.1","@3ngram/llm":"0.2.4","@3ngram/core":"0.8.6","@3ngram/config":"0.2.6","@3ngram/schema":"0.6.4","rate-limiter-flexible":"11.2.0","@modelcontextprotocol/node":"2.0.0","@modelcontextprotocol/server":"2.0.0","@modelcontextprotocol/server-legacy":"2.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"comment:exports":"Side-effect-free seams ONLY. `./app` exposes createApp so a downstream composition root can compose the server; `./boot` exposes the shared fail-closed bootstrap() (initObservability -> loadEnv -> metered-op + OAuth key checks -> dynamic-import createApp + listen) so both entrypoints run the IDENTICAL boot and cannot drift. `./mailer` exposes the SMTP sender (loadSmtpConfig + nodemailer, degrade-to-noop) so one mail transport is reused for dunning instead of re-wiring nodemailer. Importing any of these has NO side effects -- transports/boot run only when their function is called. src/index.ts stays the sole side-effectful entry and is intentionally NOT exported.","devDependencies":{"tsx":"4.22.4","vitest":"4.1.8","typescript":"6.0.3","@types/node":"25.9.1","ioredis-mock":"8.13.1","@types/express":"5.0.6","@types/nodemailer":"8.0.1","@modelcontextprotocol/client":"2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/server_1.3.0_1786112047245_0.7980837771200295","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"@3ngram/server","version":"1.4.1","keywords":["ai-agents","mcp","memory","model-context-protocol","postgresql"],"license":"Apache-2.0","_id":"@3ngram/server@1.4.1","maintainers":[{"name":"b3dmar","email":"sebastian@b3dmar.com"}],"homepage":"https://3ngram.ai","bugs":{"url":"https://github.com/B3dmar/3ngram/issues"},"dist":{"shasum":"d6ca59bda9cae214d60eef9ba4d18c3284238721","tarball":"https://registry.npmjs.org/@3ngram/server/-/server-1.4.1.tgz","fileCount":145,"integrity":"sha512-kHNR+JMb2iYnHYxPuqVMRRd/jrrUkXfwnLtnPoxzlMh7aaIWVGm4txws20A8oAS3mx+YVJ5GlcgRU0Pi7HTLIg==","signatures":[{"sig":"MEYCIQCgycA7pPUTg8k3Vgl8ZTv0BH/Tqdya3NGxOLyc0MlUMwIhAOYwjhnU/Gvfr1V9iQlZCJSAuG071z6DEomxD0ijy7nC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@3ngram%2fserver@1.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":581374},"type":"module","engines":{"node":">=22"},"exports":{"./app":{"types":"./dist/app.d.ts","default":"./dist/app.js"},"./boot":{"types":"./dist/boot.d.ts","default":"./dist/boot.js"},"./mailer":{"types":"./dist/mailer.d.ts","default":"./dist/mailer.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"}},"scripts":{"dev":"node --watch dist/index.js","test":"vitest run --exclude '**/integration/**' --fileParallelism=false --testTimeout=15000 --hookTimeout=30000","build":"tsc -p tsconfig.json","check":"tsc -p tsconfig.json --noEmit","start":"node dist/index.js","docs:generate":"tsx scripts/generate-openapi.ts && tsx scripts/generate-mcp-reference.ts && tsx ../../apps/cli/scripts/generate-cli-reference.ts && tsx ../../packages/sdk/scripts/generate-sdk-reference.ts","test:integration":"vitest run test/integration --fileParallelism=false --testTimeout=30000"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:58dff801-14e9-42d3-88f0-45aa2a0e7e16"}},"repository":{"url":"git+https://github.com/B3dmar/3ngram.git","type":"git","directory":"apps/server"},"description":"MCP server and REST API for persistent, typed AI-agent memory.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"4.4.3","hono":"4.12.34","express":"5.2.1","ioredis":"5.11.1","nodemailer":"9.0.1","@3ngram/llm":"0.2.4","@3ngram/core":"0.9.1","@3ngram/config":"0.2.6","@3ngram/schema":"0.7.1","rate-limiter-flexible":"11.2.0","@modelcontextprotocol/node":"2.0.0","@modelcontextprotocol/server":"2.0.0","@modelcontextprotocol/server-legacy":"2.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"comment:exports":"Side-effect-free seams ONLY. `./app` exposes createApp so a downstream composition root can compose the server; `./boot` exposes the shared fail-closed bootstrap() (initObservability -> loadEnv -> metered-op + OAuth key checks -> dynamic-import createApp + listen) so both entrypoints run the IDENTICAL boot and cannot drift. `./mailer` exposes the SMTP sender (loadSmtpConfig + nodemailer, degrade-to-noop) so one mail transport is reused for dunning instead of re-wiring nodemailer. Importing any of these has NO side effects -- transports/boot run only when their function is called. src/index.ts stays the sole side-effectful entry and is intentionally NOT exported.","devDependencies":{"tsx":"4.22.4","vitest":"4.1.8","typescript":"6.0.3","@types/node":"25.9.1","ioredis-mock":"8.13.1","@types/express":"5.0.6","@types/nodemailer":"8.0.1","@modelcontextprotocol/client":"2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/server_1.4.1_1786524579694_0.1638471046141745","host":"s3://npm-registry-packages-npm-production"}},"1.4.2":{"name":"@3ngram/server","version":"1.4.2","keywords":["ai-agents","mcp","memory","model-context-protocol","postgresql"],"license":"Apache-2.0","_id":"@3ngram/server@1.4.2","maintainers":[{"name":"b3dmar","email":"sebastian@b3dmar.com"}],"homepage":"https://3ngram.ai","bugs":{"url":"https://github.com/B3dmar/3ngram/issues"},"dist":{"shasum":"0c4cf1746d4e133e617adbfb27677cf487096199","tarball":"https://registry.npmjs.org/@3ngram/server/-/server-1.4.2.tgz","fileCount":145,"integrity":"sha512-RPI9+AuUjDYDofAwh+UacbzaV1RaomXKtSOHl7F8xuxiNoU6PITWU0JcCe50CXL+Qn501RTWdY5bNB8tatoWbw==","signatures":[{"sig":"MEQCIAIr6BX8LmzRFImx5FsvwML/JWTXJ+iwX1fBxbq8GTWlAiAwu8D9c5EDCJOIeNuEvobrJP86uVUwFWiuVY29lEvYpg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@3ngram%2fserver@1.4.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":580752},"type":"module","engines":{"node":">=22"},"exports":{"./app":{"types":"./dist/app.d.ts","default":"./dist/app.js"},"./boot":{"types":"./dist/boot.d.ts","default":"./dist/boot.js"},"./mailer":{"types":"./dist/mailer.d.ts","default":"./dist/mailer.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"}},"scripts":{"dev":"node --watch dist/index.js","test":"vitest run --exclude '**/integration/**' --fileParallelism=false --testTimeout=15000 --hookTimeout=30000","build":"tsc -p tsconfig.json","check":"tsc -p tsconfig.json --noEmit","start":"node dist/index.js","docs:generate":"tsx scripts/generate-openapi.ts && tsx scripts/generate-mcp-reference.ts && tsx ../../apps/cli/scripts/generate-cli-reference.ts && tsx ../../packages/sdk/scripts/generate-sdk-reference.ts","test:integration":"vitest run test/integration --fileParallelism=false --testTimeout=30000"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:58dff801-14e9-42d3-88f0-45aa2a0e7e16"}},"repository":{"url":"git+https://github.com/B3dmar/3ngram.git","type":"git","directory":"apps/server"},"description":"MCP server and REST API for persistent, typed AI-agent memory.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"4.4.3","hono":"4.12.34","express":"5.2.1","ioredis":"5.11.1","nodemailer":"9.0.1","@3ngram/llm":"0.2.4","@3ngram/core":"0.9.2","@3ngram/config":"0.2.6","@3ngram/schema":"0.7.2","rate-limiter-flexible":"11.2.0","@modelcontextprotocol/node":"2.0.0","@modelcontextprotocol/server":"2.0.0","@modelcontextprotocol/server-legacy":"2.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"comment:exports":"Side-effect-free seams ONLY. `./app` exposes createApp so a downstream composition root can compose the server; `./boot` exposes the shared fail-closed bootstrap() (initObservability -> loadEnv -> metered-op + OAuth key checks -> dynamic-import createApp + listen) so both entrypoints run the IDENTICAL boot and cannot drift. `./mailer` exposes the SMTP sender (loadSmtpConfig + nodemailer, degrade-to-noop) so one mail transport is reused for dunning instead of re-wiring nodemailer. Importing any of these has NO side effects -- transports/boot run only when their function is called. src/index.ts stays the sole side-effectful entry and is intentionally NOT exported.","devDependencies":{"tsx":"4.22.4","vitest":"4.1.8","typescript":"6.0.3","@types/node":"25.9.1","ioredis-mock":"8.13.1","@types/express":"5.0.6","@types/nodemailer":"8.0.1","@modelcontextprotocol/client":"2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/server_1.4.2_1786545345384_0.505517503345283","host":"s3://npm-registry-packages-npm-production"}},"1.4.3":{"name":"@3ngram/server","version":"1.4.3","keywords":["ai-agents","mcp","memory","model-context-protocol","postgresql"],"license":"Apache-2.0","_id":"@3ngram/server@1.4.3","maintainers":[{"name":"b3dmar","email":"sebastian@b3dmar.com"}],"homepage":"https://3ngram.ai","bugs":{"url":"https://github.com/B3dmar/3ngram/issues"},"dist":{"shasum":"ac6856905747c7d266cb1ebd6e9fb5a3c769fff9","tarball":"https://registry.npmjs.org/@3ngram/server/-/server-1.4.3.tgz","fileCount":145,"integrity":"sha512-rExlfIfW/Isjds52MGWctFHEINkfId9nmdXp4U4pTk3JzRohkWNgYAVSSi3QlcW6BCEpLZskm/8CkVqekIxZiQ==","signatures":[{"sig":"MEQCIE/EkPwEAJ0wYoaFOJRV0XScQv5YQYUOkhI3GL+vPx58AiAestibYU1++XMPAvmL7nX/M3zT9Z8QmhdDH1cE3ysiFQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@3ngram%2fserver@1.4.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":580752},"type":"module","engines":{"node":">=22"},"exports":{"./app":{"types":"./dist/app.d.ts","default":"./dist/app.js"},"./boot":{"types":"./dist/boot.d.ts","default":"./dist/boot.js"},"./mailer":{"types":"./dist/mailer.d.ts","default":"./dist/mailer.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"}},"scripts":{"dev":"node --watch dist/index.js","test":"vitest run --exclude '**/integration/**' --fileParallelism=false --testTimeout=15000 --hookTimeout=30000","build":"tsc -p tsconfig.json","check":"tsc -p tsconfig.json --noEmit","start":"node dist/index.js","docs:generate":"tsx scripts/generate-openapi.ts && tsx scripts/generate-mcp-reference.ts && tsx ../../apps/cli/scripts/generate-cli-reference.ts && tsx ../../packages/sdk/scripts/generate-sdk-reference.ts","test:integration":"vitest run test/integration --fileParallelism=false --testTimeout=30000"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:58dff801-14e9-42d3-88f0-45aa2a0e7e16"}},"repository":{"url":"git+https://github.com/B3dmar/3ngram.git","type":"git","directory":"apps/server"},"description":"MCP server and REST API for persistent, typed AI-agent memory.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"4.4.3","hono":"4.12.34","express":"5.2.1","ioredis":"5.11.1","nodemailer":"9.0.1","@3ngram/llm":"0.2.4","@3ngram/core":"0.9.2","@3ngram/config":"0.2.6","@3ngram/schema":"0.7.2","rate-limiter-flexible":"11.2.0","@modelcontextprotocol/node":"2.0.0","@modelcontextprotocol/server":"2.0.0","@modelcontextprotocol/server-legacy":"2.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"comment:exports":"Side-effect-free seams ONLY. `./app` exposes createApp so a downstream composition root can compose the server; `./boot` exposes the shared fail-closed bootstrap() (initObservability -> loadEnv -> metered-op + OAuth key checks -> dynamic-import createApp + listen) so both entrypoints run the IDENTICAL boot and cannot drift. `./mailer` exposes the SMTP sender (loadSmtpConfig + nodemailer, degrade-to-noop) so one mail transport is reused for dunning instead of re-wiring nodemailer. Importing any of these has NO side effects -- transports/boot run only when their function is called. src/index.ts stays the sole side-effectful entry and is intentionally NOT exported.","devDependencies":{"tsx":"4.22.4","vitest":"4.1.8","typescript":"6.0.3","@types/node":"25.9.1","ioredis-mock":"8.13.1","@types/express":"5.0.6","@types/nodemailer":"8.0.1","@modelcontextprotocol/client":"2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/server_1.4.3_1786626471568_0.8574633517897818","host":"s3://npm-registry-packages-npm-production"}},"1.4.4":{"name":"@3ngram/server","version":"1.4.4","keywords":["ai-agents","mcp","memory","model-context-protocol","postgresql"],"license":"Apache-2.0","_id":"@3ngram/server@1.4.4","maintainers":[{"name":"b3dmar","email":"sebastian@b3dmar.com"}],"homepage":"https://3ngram.ai","bugs":{"url":"https://github.com/B3dmar/3ngram/issues"},"dist":{"shasum":"cd734d5479fc3bb4883474c11429df3e8f43391c","tarball":"https://registry.npmjs.org/@3ngram/server/-/server-1.4.4.tgz","fileCount":145,"integrity":"sha512-PIsUnunytAtzOilzc2qyxWboZu2mxXT12/l4EhPhENtu61afVBHDNLduTA2X1nJ1YEfW0XiGEMT7ceBp0xXa8Q==","signatures":[{"sig":"MEQCID0sl74B+BgUJBGfAPSIGOupGB9GNz8aPERveK+0zUnBAiBlkrxOIBLnIWZQbhdjFFqeu+FBgkObrSIBFtD5c7YwzA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@3ngram%2fserver@1.4.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":582637},"type":"module","engines":{"node":">=22"},"exports":{"./app":{"types":"./dist/app.d.ts","default":"./dist/app.js"},"./boot":{"types":"./dist/boot.d.ts","default":"./dist/boot.js"},"./mailer":{"types":"./dist/mailer.d.ts","default":"./dist/mailer.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"}},"scripts":{"dev":"node --watch dist/index.js","test":"vitest run --exclude '**/integration/**' --fileParallelism=false --testTimeout=15000 --hookTimeout=30000","build":"tsc -p tsconfig.json","check":"tsc -p tsconfig.json --noEmit","start":"node dist/index.js","docs:generate":"tsx scripts/generate-openapi.ts && tsx scripts/generate-mcp-reference.ts && tsx ../../apps/cli/scripts/generate-cli-reference.ts && tsx ../../packages/sdk/scripts/generate-sdk-reference.ts","test:integration":"vitest run test/integration --fileParallelism=false --testTimeout=30000"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:58dff801-14e9-42d3-88f0-45aa2a0e7e16"}},"repository":{"url":"git+https://github.com/B3dmar/3ngram.git","type":"git","directory":"apps/server"},"description":"MCP server and REST API for persistent, typed AI-agent memory.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"4.4.3","hono":"4.12.34","express":"5.2.1","ioredis":"5.11.1","nodemailer":"9.0.1","@3ngram/llm":"0.2.4","@3ngram/core":"0.9.3","@3ngram/config":"0.2.6","@3ngram/schema":"0.7.3","rate-limiter-flexible":"11.2.0","@modelcontextprotocol/node":"2.0.0","@modelcontextprotocol/server":"2.0.0","@modelcontextprotocol/server-legacy":"2.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"comment:exports":"Side-effect-free seams ONLY. `./app` exposes createApp so a downstream composition root can compose the server; `./boot` exposes the shared fail-closed bootstrap() (initObservability -> loadEnv -> metered-op + OAuth key checks -> dynamic-import createApp + listen) so both entrypoints run the IDENTICAL boot and cannot drift. `./mailer` exposes the SMTP sender (loadSmtpConfig + nodemailer, degrade-to-noop) so one mail transport is reused for dunning instead of re-wiring nodemailer. Importing any of these has NO side effects -- transports/boot run only when their function is called. src/index.ts stays the sole side-effectful entry and is intentionally NOT exported.","devDependencies":{"tsx":"4.22.4","vitest":"4.1.8","typescript":"6.0.3","@types/node":"25.9.1","ioredis-mock":"8.13.1","@types/express":"5.0.6","@types/nodemailer":"8.0.1","@modelcontextprotocol/client":"2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/server_1.4.4_1787144223207_0.45726430854066313","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@3ngram/server","version":"1.5.0","keywords":["ai-agents","mcp","memory","model-context-protocol","postgresql"],"license":"Apache-2.0","_id":"@3ngram/server@1.5.0","maintainers":[{"name":"b3dmar","email":"sebastian@b3dmar.com"}],"homepage":"https://3ngram.ai","bugs":{"url":"https://github.com/B3dmar/3ngram/issues"},"dist":{"shasum":"6fd458357727933ccabf7d787ca45afb27ba85a1","tarball":"https://registry.npmjs.org/@3ngram/server/-/server-1.5.0.tgz","fileCount":148,"integrity":"sha512-4BXFI+4HZJsbOd0rzt7Y45XWgR2DIP3GXEw187vsdE4TFVTXiwlVqWIzkcZqANr3p9EwYm6X3YTMCvPNhfWCJA==","signatures":[{"sig":"MEQCIGnNPUEspbMJFB2ifOvpY7DCd9poAHVe+rDAWPfAYu3LAiB2AUMm7yWzkGILQSOTEfZ5+R6mRUS1tRxdrGDRVg+bWw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@3ngram%2fserver@1.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":610506},"type":"module","engines":{"node":">=22"},"exports":{"./app":{"types":"./dist/app.d.ts","default":"./dist/app.js"},"./boot":{"types":"./dist/boot.d.ts","default":"./dist/boot.js"},"./mailer":{"types":"./dist/mailer.d.ts","default":"./dist/mailer.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"}},"scripts":{"dev":"node --watch dist/index.js","test":"vitest run --exclude '**/integration/**' --fileParallelism=false --testTimeout=15000 --hookTimeout=30000","build":"tsc -p tsconfig.json","check":"tsc -p tsconfig.json --noEmit","start":"node dist/index.js","docs:generate":"tsx scripts/generate-openapi.ts && tsx scripts/generate-mcp-reference.ts && tsx ../../apps/cli/scripts/generate-cli-reference.ts && tsx ../../packages/sdk/scripts/generate-sdk-reference.ts","test:integration":"vitest run test/integration --fileParallelism=false --testTimeout=30000"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:58dff801-14e9-42d3-88f0-45aa2a0e7e16"}},"repository":{"url":"git+https://github.com/B3dmar/3ngram.git","type":"git","directory":"apps/server"},"description":"MCP server and REST API for persistent, typed AI-agent memory.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"4.4.3","hono":"4.12.34","express":"5.2.1","ioredis":"5.11.1","nodemailer":"9.0.1","@3ngram/llm":"0.3.0","@3ngram/core":"0.10.0","@3ngram/config":"0.3.0","@3ngram/schema":"0.8.0","rate-limiter-flexible":"11.2.0","@modelcontextprotocol/node":"2.0.0","@modelcontextprotocol/server":"2.0.0","@modelcontextprotocol/server-legacy":"2.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"comment:exports":"Side-effect-free seams ONLY. `./app` exposes createApp so a downstream composition root can compose the server; `./boot` exposes the shared fail-closed bootstrap() (initObservability -> loadEnv -> metered-op + OAuth key checks -> dynamic-import createApp + listen) so both entrypoints run the IDENTICAL boot and cannot drift. `./mailer` exposes the SMTP sender (loadSmtpConfig + nodemailer, degrade-to-noop) so one mail transport is reused for dunning instead of re-wiring nodemailer. Importing any of these has NO side effects -- transports/boot run only when their function is called. src/index.ts stays the sole side-effectful entry and is intentionally NOT exported.","devDependencies":{"tsx":"4.22.4","vitest":"4.1.8","typescript":"6.0.3","@types/node":"25.9.1","ioredis-mock":"8.13.1","@types/express":"5.0.6","@types/nodemailer":"8.0.1","@modelcontextprotocol/client":"2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/server_1.5.0_1787568136763_0.9378481546315927","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@3ngram/server","version":"1.6.0","keywords":["ai-agents","mcp","memory","model-context-protocol","postgresql"],"license":"Apache-2.0","_id":"@3ngram/server@1.6.0","maintainers":[{"name":"b3dmar","email":"sebastian@b3dmar.com"}],"homepage":"https://3ngram.ai","bugs":{"url":"https://github.com/B3dmar/3ngram/issues"},"dist":{"shasum":"bfe3eb80233471e2eae3ba44c14a0e79a78b1642","tarball":"https://registry.npmjs.org/@3ngram/server/-/server-1.6.0.tgz","fileCount":148,"integrity":"sha512-cwSs+TiS6BPaJ8xOTSPtCcr5awN6jRUJMT2Cqgs7Xm0QC3KEBeM/+5KHOWpEGDcTkREdN2tTeEeSXUhb29MnCA==","signatures":[{"sig":"MEQCIH9Q2EP1GlU4hEUZgh+4o0cymThaIJ0LsbPbplkJtA1WAiAncu11WiSuzpsOS+uUyn26Qv1n0RmLZbZrqwIT8G06/A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@3ngram%2fserver@1.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":610984},"type":"module","engines":{"node":">=22"},"exports":{"./app":{"types":"./dist/app.d.ts","default":"./dist/app.js"},"./boot":{"types":"./dist/boot.d.ts","default":"./dist/boot.js"},"./mailer":{"types":"./dist/mailer.d.ts","default":"./dist/mailer.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"}},"scripts":{"dev":"node --watch dist/index.js","test":"vitest run --exclude '**/integration/**' --fileParallelism=false --testTimeout=15000 --hookTimeout=30000","build":"tsc -p tsconfig.json","check":"tsc -p tsconfig.json --noEmit","start":"node dist/index.js","docs:generate":"tsx scripts/generate-openapi.ts && tsx scripts/generate-mcp-reference.ts && tsx ../../apps/cli/scripts/generate-cli-reference.ts && tsx ../../packages/sdk/scripts/generate-sdk-reference.ts","test:integration":"vitest run test/integration --fileParallelism=false --testTimeout=30000"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:58dff801-14e9-42d3-88f0-45aa2a0e7e16"}},"repository":{"url":"git+https://github.com/B3dmar/3ngram.git","type":"git","directory":"apps/server"},"description":"MCP server and REST API for persistent, typed AI-agent memory.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"4.4.3","hono":"4.12.34","express":"5.2.1","ioredis":"5.11.1","nodemailer":"9.0.1","@3ngram/llm":"0.3.0","@3ngram/core":"0.11.0","@3ngram/config":"0.4.0","@3ngram/schema":"0.9.0","rate-limiter-flexible":"11.2.0","@modelcontextprotocol/node":"2.0.0","@modelcontextprotocol/server":"2.0.0","@modelcontextprotocol/server-legacy":"2.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"comment:exports":"Side-effect-free seams ONLY. `./app` exposes createApp so a downstream composition root can compose the server; `./boot` exposes the shared fail-closed bootstrap() (initObservability -> loadEnv -> metered-op + OAuth key checks -> dynamic-import createApp + listen) so both entrypoints run the IDENTICAL boot and cannot drift. `./mailer` exposes the SMTP sender (loadSmtpConfig + nodemailer, degrade-to-noop) so one mail transport is reused for dunning instead of re-wiring nodemailer. Importing any of these has NO side effects -- transports/boot run only when their function is called. src/index.ts stays the sole side-effectful entry and is intentionally NOT exported.","devDependencies":{"tsx":"4.22.4","vitest":"4.1.8","typescript":"6.0.3","@types/node":"25.9.1","ioredis-mock":"8.13.1","@types/express":"5.0.6","@types/nodemailer":"8.0.1","@modelcontextprotocol/client":"2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/server_1.6.0_1787591427242_0.628099293195638","host":"s3://npm-registry-packages-npm-production"}},"1.6.1":{"name":"@3ngram/server","version":"1.6.1","keywords":["ai-agents","mcp","memory","model-context-protocol","postgresql"],"license":"Apache-2.0","_id":"@3ngram/server@1.6.1","maintainers":[{"name":"b3dmar","email":"sebastian@b3dmar.com"}],"homepage":"https://3ngram.ai","bugs":{"url":"https://github.com/B3dmar/3ngram/issues"},"dist":{"shasum":"985842769a17638f6da2bf34387afc951823c47c","tarball":"https://registry.npmjs.org/@3ngram/server/-/server-1.6.1.tgz","fileCount":148,"integrity":"sha512-NWz+7sJu3h95ThFXaInBuw0a6kcYNaVu/2liXYj9iPccD7vER26V6cd1+KMe4rsUNnWL9wbnftQqoV55Xue2OA==","signatures":[{"sig":"MEUCIQCuy2rggK+STBMlrNQXBJZ+ehb63b+tef0Nqwq+M9CMOwIgdtwp2B1z0vXaPGu9jp7X4QaslmMzaamQ/ObjJ8ntq60=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@3ngram%2fserver@1.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":612073},"type":"module","engines":{"node":">=22"},"exports":{"./app":{"types":"./dist/app.d.ts","default":"./dist/app.js"},"./boot":{"types":"./dist/boot.d.ts","default":"./dist/boot.js"},"./mailer":{"types":"./dist/mailer.d.ts","default":"./dist/mailer.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"}},"scripts":{"dev":"node --watch dist/index.js","test":"vitest run --exclude '**/integration/**' --fileParallelism=false --testTimeout=15000 --hookTimeout=30000","build":"tsc -p tsconfig.json","check":"tsc -p tsconfig.json --noEmit","start":"node dist/index.js","docs:generate":"tsx scripts/generate-openapi.ts && tsx scripts/generate-mcp-reference.ts && tsx ../../apps/cli/scripts/generate-cli-reference.ts && tsx ../../packages/sdk/scripts/generate-sdk-reference.ts","test:integration":"vitest run test/integration --fileParallelism=false --testTimeout=30000"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:58dff801-14e9-42d3-88f0-45aa2a0e7e16"}},"repository":{"url":"git+https://github.com/B3dmar/3ngram.git","type":"git","directory":"apps/server"},"description":"MCP server and REST API for persistent, typed AI-agent memory.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"4.4.3","hono":"4.12.34","express":"5.2.1","ioredis":"5.11.1","nodemailer":"9.0.1","@3ngram/llm":"0.3.0","@3ngram/core":"0.11.1","@3ngram/config":"0.4.0","@3ngram/schema":"0.9.0","rate-limiter-flexible":"11.2.0","@modelcontextprotocol/node":"2.0.0","@modelcontextprotocol/server":"2.0.0","@modelcontextprotocol/server-legacy":"2.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"comment:exports":"Side-effect-free seams ONLY. `./app` exposes createApp so a downstream composition root can compose the server; `./boot` exposes the shared fail-closed bootstrap() (initObservability -> loadEnv -> metered-op + OAuth key checks -> dynamic-import createApp + listen) so both entrypoints run the IDENTICAL boot and cannot drift. `./mailer` exposes the SMTP sender (loadSmtpConfig + nodemailer, degrade-to-noop) so one mail transport is reused for dunning instead of re-wiring nodemailer. Importing any of these has NO side effects -- transports/boot run only when their function is called. src/index.ts stays the sole side-effectful entry and is intentionally NOT exported.","devDependencies":{"tsx":"4.22.4","vitest":"4.1.8","typescript":"6.0.3","@types/node":"25.9.1","ioredis-mock":"8.13.1","@types/express":"5.0.6","@types/nodemailer":"8.0.1","@modelcontextprotocol/client":"2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/server_1.6.1_1787824678156_0.8299999295078329","host":"s3://npm-registry-packages-npm-production"}},"1.6.3":{"name":"@3ngram/server","version":"1.6.3","description":"MCP server and REST API for persistent, typed AI-agent memory.","license":"Apache-2.0","homepage":"https://3ngram.ai","bugs":{"url":"https://github.com/B3dmar/3ngram/issues"},"keywords":["ai-agents","mcp","memory","model-context-protocol","postgresql"],"engines":{"node":">=22"},"repository":{"type":"git","url":"git+https://github.com/B3dmar/3ngram.git","directory":"apps/server"},"publishConfig":{"access":"public","provenance":true},"type":"module","comment:exports":"Side-effect-free seams ONLY. `./app` exposes createApp so a downstream composition root can compose the server; `./boot` exposes the shared fail-closed bootstrap() (initObservability -> loadEnv -> metered-op + OAuth key checks -> dynamic-import createApp + listen) so both entrypoints run the IDENTICAL boot and cannot drift. `./mailer` exposes the SMTP sender (loadSmtpConfig + nodemailer, degrade-to-noop) so one mail transport is reused for dunning instead of re-wiring nodemailer. Importing any of these has NO side effects -- transports/boot run only when their function is called. src/index.ts stays the sole side-effectful entry and is intentionally NOT exported.","exports":{"./app":{"types":"./dist/app.d.ts","default":"./dist/app.js"},"./boot":{"types":"./dist/boot.d.ts","default":"./dist/boot.js"},"./middleware":{"types":"./dist/middleware/index.d.ts","default":"./dist/middleware/index.js"},"./mailer":{"types":"./dist/mailer.d.ts","default":"./dist/mailer.js"}},"dependencies":{"@modelcontextprotocol/node":"2.0.0","@modelcontextprotocol/server":"2.0.0","@modelcontextprotocol/server-legacy":"2.0.0","express":"5.2.1","hono":"4.12.34","ioredis":"5.11.1","nodemailer":"9.1.1","rate-limiter-flexible":"11.2.0","zod":"4.4.3","@3ngram/config":"0.4.0","@3ngram/core":"0.11.2","@3ngram/llm":"0.3.0","@3ngram/schema":"0.9.1"},"devDependencies":{"@modelcontextprotocol/client":"2.0.0","@types/express":"5.0.6","@types/node":"25.9.1","@types/nodemailer":"8.0.1","ioredis-mock":"8.13.1","tsx":"4.22.4","typescript":"6.0.3","vitest":"4.1.8"},"scripts":{"build":"tsc -p tsconfig.json","check":"tsc -p tsconfig.json --noEmit","test":"vitest run --exclude '**/integration/**' --fileParallelism=false --testTimeout=15000 --hookTimeout=30000","test:integration":"vitest run test/integration --fileParallelism=false --testTimeout=30000","docs:generate":"tsx scripts/generate-openapi.ts && tsx scripts/generate-mcp-reference.ts && tsx ../../apps/cli/scripts/generate-cli-reference.ts && tsx ../../packages/sdk/scripts/generate-sdk-reference.ts","dev":"node --watch dist/index.js","start":"node dist/index.js"},"_nodeVersion":"24.20.0","_id":"@3ngram/server@1.6.3","dist":{"integrity":"sha512-8Dlani3muES/XCXlKXk32dXbPdsGqO4uGYAz82rsxhF/OBH33vRSO/jNpNaHuDigMjtFfbTuTp3bvn3ZMkddig==","shasum":"82a70074dd5ea58aab891d4729010b2baa1ef0d5","tarball":"https://registry.npmjs.org/@3ngram/server/-/server-1.6.3.tgz","fileCount":148,"unpackedSize":612389,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@3ngram%2fserver@1.6.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEVoU7v2bgFbphDpOm2qMsiKerCRriH8PmOZ/gUJyrV0AiEA3ytNjilsGZOaugfNS2O5xHb3xkiMsy1nkH0/30WBsKk="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:58dff801-14e9-42d3-88f0-45aa2a0e7e16"}},"directories":{},"maintainers":[{"name":"b3dmar","email":"sebastian@b3dmar.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/server_1.6.3_1788987558834_0.7727844049151305"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-09T12:10:22.144Z","modified":"2026-09-09T20:59:19.314Z","0.7.0":"2026-07-09T12:10:22.454Z","0.7.1":"2026-07-09T17:25:11.994Z","0.7.2":"2026-07-09T18:01:13.464Z","0.7.3":"2026-07-09T18:43:06.102Z","0.8.0":"2026-07-09T19:51:17.246Z","1.0.2":"2026-07-14T15:17:13.655Z","1.1.0":"2026-08-02T14:24:58.959Z","1.1.1":"2026-08-02T18:34:43.035Z","1.1.2":"2026-08-02T19:17:13.584Z","1.1.3":"2026-08-03T08:05:04.260Z","1.2.1":"2026-08-04T15:59:32.882Z","1.2.2":"2026-08-04T21:20:39.991Z","1.2.3":"2026-08-04T22:26:30.107Z","1.2.4":"2026-08-05T08:11:01.435Z","1.2.6":"2026-08-05T13:43:01.071Z","1.2.7":"2026-08-06T08:56:32.214Z","1.3.0":"2026-08-07T14:14:07.402Z","1.4.1":"2026-08-12T08:49:39.848Z","1.4.2":"2026-08-12T14:35:45.536Z","1.4.3":"2026-08-13T13:07:51.694Z","1.4.4":"2026-08-19T12:57:03.347Z","1.5.0":"2026-08-24T10:42:16.904Z","1.6.0":"2026-08-24T17:10:27.409Z","1.6.1":"2026-08-27T09:57:58.290Z","1.6.3":"2026-09-09T20:59:18.985Z"},"bugs":{"url":"https://github.com/B3dmar/3ngram/issues"},"license":"Apache-2.0","homepage":"https://3ngram.ai","keywords":["ai-agents","mcp","memory","model-context-protocol","postgresql"],"repository":{"type":"git","url":"git+https://github.com/B3dmar/3ngram.git","directory":"apps/server"},"description":"MCP server and REST API for persistent, typed AI-agent memory.","maintainers":[{"name":"b3dmar","email":"sebastian@b3dmar.com"}],"readme":"","readmeFilename":""}