{"_id":"x-api-registerer","_rev":"2-684ba516cd79581d0e88ab7caa522de0","name":"x-api-registerer","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.0":{"name":"x-api-registerer","version":"1.0.0","keywords":["rules","registry","api","integrations","typescript"],"author":"","license":"MIT","_id":"x-api-registerer@1.0.0","maintainers":[{"name":"x.ami","email":"nex1.ami.m@gmail.com"}],"homepage":"https://github.com/nx-intelligence/x-apis#readme","bugs":{"url":"https://github.com/nx-intelligence/x-apis/issues"},"dist":{"shasum":"e7bd0b6f8b2420451ecb96c12b88c63af2df90c9","tarball":"https://registry.npmjs.org/x-api-registerer/-/x-api-registerer-1.0.0.tgz","fileCount":8,"integrity":"sha512-tjUNLbhK752VAdDwvoVOVyWSMYLqP6gNkX9m5vC5tKaq4v6hXGeYuE88uwN73hf8yq6ihGKgb2LTsk5y8nldrg==","signatures":[{"sig":"MEYCIQDdWNBAZ+UMZXM81O7eke340BOBGllggvy8u8g9eHAtCwIhAOEP7yMXErhmXLsis1vzfWoRQXMsKTFKsGAKcMGN9Xa6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30862},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"dev":"tsup --watch","test":"node -e \"console.log('ok')\"","build":"tsup","prepublishOnly":"npm run build"},"_npmUser":{"name":"x.ami","email":"nex1.ami.m@gmail.com"},"repository":{"url":"git+https://github.com/nx-intelligence/x-apis.git","type":"git"},"_npmVersion":"10.9.4","description":"API registry + standard call contract (ok/data/error/meta) for Node.js/TS/JS runtimes.","directories":{},"sideEffects":false,"_nodeVersion":"22.21.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.5.0"},"_npmOperationalInternal":{"tmp":"tmp/x-api-registerer_1.0.0_1770040764829_0.07511724233180428","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"x-api-registerer","version":"1.0.1","description":"API registry + standard call contract (ok/data/error/meta) for Node.js/TS/JS runtimes.","license":"MIT","author":"","keywords":["rules","registry","api","integrations","typescript"],"main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"sideEffects":false,"scripts":{"build":"tsup","dev":"tsup --watch","test":"node -e \"console.log('ok')\"","prepublishOnly":"npm run build"},"devDependencies":{"tsup":"^8.0.0","typescript":"^5.5.0"},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/nx-intelligence/x-api-registerer.git"},"_id":"x-api-registerer@1.0.1","gitHead":"f4ea8ea6f31869563e9a85339f14507480f82e4c","bugs":{"url":"https://github.com/nx-intelligence/x-api-registerer/issues"},"homepage":"https://github.com/nx-intelligence/x-api-registerer#readme","_nodeVersion":"22.21.0","_npmVersion":"10.9.4","dist":{"integrity":"sha512-DSBPG8RTJPDhHGyg8pS4qrdXTcT7mmlSlCON3qwamzE1mz/e4vz0xI1AftIuTchgmJcuSruqLCS3A6K/2OnF7Q==","shasum":"4cace2d5ec708318b5582f4487156533c017d2a1","tarball":"https://registry.npmjs.org/x-api-registerer/-/x-api-registerer-1.0.1.tgz","fileCount":8,"unpackedSize":30882,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIC1f+xl4Qj1xxIvfRdc34COpYfklyiH6NiyjQyXoUouQAiBXhgweUW+jHTfIznrnBP4OAF8jI5AqpSY0Eja+Bf6emA=="}]},"_npmUser":{"name":"x.ami","email":"nex1.ami.m@gmail.com"},"directories":{},"maintainers":[{"name":"x.ami","email":"nex1.ami.m@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/x-api-registerer_1.0.1_1770041808826_0.7132927775804354"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-02T13:59:24.727Z","modified":"2026-02-02T14:16:49.373Z","1.0.0":"2026-02-02T13:59:24.984Z","1.0.1":"2026-02-02T14:16:48.974Z"},"bugs":{"url":"https://github.com/nx-intelligence/x-api-registerer/issues"},"license":"MIT","homepage":"https://github.com/nx-intelligence/x-api-registerer#readme","keywords":["rules","registry","api","integrations","typescript"],"repository":{"type":"git","url":"git+https://github.com/nx-intelligence/x-api-registerer.git"},"description":"API registry + standard call contract (ok/data/error/meta) for Node.js/TS/JS runtimes.","maintainers":[{"name":"x.ami","email":"nex1.ami.m@gmail.com"}],"readme":"# x-api-registerer\r\n\r\n`x-api-registerer` provides a standard way to register and call APIs by ID with a consistent result envelope:\r\n- `{ ok: true, data, meta }`\r\n- `{ ok: false, error, meta }`\r\n\r\nIt is TypeScript-first and works in JavaScript (ESM + CJS).\r\n\r\n## Install\r\n\r\n```bash\r\nnpm install x-api-registerer\r\n```\r\n\r\n## Usage (TypeScript)\r\n\r\n```ts\r\nimport { ApiRegistry, ok, fail } from \"x-api-registerer\";\r\n\r\nconst apis = new ApiRegistry();\r\n\r\napis.register(\"geo.ipLookup\", async (ctx) => {\r\n  const ip = String(ctx.args.ip ?? \"\");\r\n  if (!ip) return fail(\"bad_args\", \"Missing args.ip\");\r\n\r\n  const start = ctx.now();\r\n  // ...call your provider here...\r\n  const data = { ip, country: \"US\", city: \"Miami\" };\r\n\r\n  return ok(data, { latencyMs: ctx.now() - start, provider: \"mock\" });\r\n});\r\n\r\nconst res = await apis.call(\"geo.ipLookup\", {\r\n  input: { tenantId: \"t1\" },\r\n  args: { ip: \"8.8.8.8\" }\r\n});\r\n\r\nif (res.ok) console.log(res.data);\r\nelse console.error(res.error.code, res.error.message);\r\n```\r\n\r\n## Usage (JavaScript - CommonJS)\r\n\r\n```js\r\nconst { ApiRegistry, ok, fail } = require(\"x-api-registerer\");\r\n\r\nconst apis = new ApiRegistry();\r\n\r\napis.register(\"directory.lookupUser\", async (ctx) => {\r\n  const email = String(ctx.args.email || \"\");\r\n  if (!email) return fail(\"bad_args\", \"Missing args.email\");\r\n\r\n  return ok({ email, department: \"Engineering\" }, { provider: \"mock\" });\r\n});\r\n\r\napis.call(\"directory.lookupUser\", { input: { tenantId: \"t1\" }, args: { email: \"a@b.com\" } })\r\n  .then(console.log);\r\n```\r\n\r\n## Input contract\r\n\r\n* `ctx.input` is required and must be an object.\r\n* `ctx.content` is optional and must be a string if provided.\r\n\r\n## Override behavior\r\n\r\nRegistering with `override: true` (or `registry.override`) replaces an existing API with the same ID.\r\nHosts can combine a system registry + user registry so user APIs override built-ins.\r\n","readmeFilename":"README.md"}