{"_id":"@aixin-protocol/validator-server","name":"@aixin-protocol/validator-server","dist-tags":{"latest":"1.0.0-rc.1"},"versions":{"1.0.0-rc.1":{"name":"@aixin-protocol/validator-server","version":"1.0.0-rc.1","description":"Hosted HTTP reference validator for the AiXin Protocol (SIP + TOP). Accepts intents, validates against normative schemas, and returns Ed25519-signed receipts.","type":"module","main":"src/server.mjs","bin":{"aixin-validator-server":"src/server.mjs"},"engines":{"node":">=18"},"scripts":{"start":"node src/server.mjs","test":"node --test test/server.test.mjs"},"dependencies":{"fastify":"^4.28.1","ajv":"^8.17.1","ajv-formats":"^3.0.1"},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/aixin-protocol/aixin-protocol.git","directory":"server"},"license":"Apache-2.0","_id":"@aixin-protocol/validator-server@1.0.0-rc.1","gitHead":"1de894a34d883e9268e43ed123315be0bc2ff770","bugs":{"url":"https://github.com/aixin-protocol/aixin-protocol/issues"},"homepage":"https://github.com/aixin-protocol/aixin-protocol#readme","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-Mp2G0vBBOdouPzzEAgQ87TwRe6lN6ArjZPDzrsb5CtgorkJexhxXldVdUJ4AEf2KRAV+7pFNCsR9NBBDZ7qiLw==","shasum":"a2475e6990e22749618698d8d9837a036fa76094","tarball":"https://registry.npmjs.org/@aixin-protocol/validator-server/-/validator-server-1.0.0-rc.1.tgz","fileCount":6,"unpackedSize":9907,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aixin-protocol%2fvalidator-server@1.0.0-rc.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEVrkCl2budZ3Gb1jBHeZaH+Iq85Y3IDC+FFfJ4rOwy2AiAkOb6NZo+96j+8Qia4Dtyqf2maBtHQUeRIzaIoF8BLEw=="}]},"_npmUser":{"name":"chrisbianong","email":"chrisbian.ong@gmail.com"},"directories":{},"maintainers":[{"name":"chrisbianong","email":"chrisbian.ong@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/validator-server_1.0.0-rc.1_1784950907741_0.13773952328461192"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-25T03:41:47.468Z","1.0.0-rc.1":"2026-07-25T03:41:47.888Z","modified":"2026-07-25T03:41:48.320Z"},"maintainers":[{"name":"chrisbianong","email":"chrisbian.ong@gmail.com"}],"description":"Hosted HTTP reference validator for the AiXin Protocol (SIP + TOP). Accepts intents, validates against normative schemas, and returns Ed25519-signed receipts.","homepage":"https://github.com/aixin-protocol/aixin-protocol#readme","repository":{"type":"git","url":"git+https://github.com/aixin-protocol/aixin-protocol.git","directory":"server"},"bugs":{"url":"https://github.com/aixin-protocol/aixin-protocol/issues"},"license":"Apache-2.0","readme":"# @aixin-protocol/validator-server\n\nHosted HTTP reference validator for the AiXin Protocol (SIP + TOP).\n\nAccepts intents, validates against the normative schemas, and returns\nEd25519-signed receipts. Integrators can call the service directly instead\nof embedding `@aixin-protocol/sdk-js` or `aixin-protocol-sdk` (Python).\n\n## Install\n\n```\nnpm i -g @aixin-protocol/validator-server\naixin-validator-server\n# listening on :8787\n```\n\nOr run from source:\n\n```\ngit clone https://github.com/aixin-protocol/aixin-protocol\ncd aixin-protocol/server\nnpm i && npm start\n```\n\n## Configuration\n\n| Env | Description |\n| --- | --- |\n| `PORT` | Listen port (default `8787`) |\n| `HOST` | Listen host (default `0.0.0.0`) |\n| `AIXIN_SIGNING_KEY` | Ed25519 PEM private key. If unset, an ephemeral key is generated (dev only). |\n\nGenerate a signing key:\n\n```\nopenssl genpkey -algorithm Ed25519 -out signing.pem\nexport AIXIN_SIGNING_KEY=\"$(cat signing.pem)\"\n```\n\n## Endpoints\n\n- `GET  /healthz` — liveness\n- `GET  /v1/kinds` — list supported artifact kinds\n- `GET  /v1/pubkey` — the server's Ed25519 public key (PEM)\n- `POST /v1/validate` — `{ kind?, document }` → `{ ok, kind, errors, hash }`\n- `POST /v1/receipts` — validate then sign; returns receipt on success\n- `POST /v1/receipts/verify` — `{ receipt, pubkey? }` → `{ ok }`\n\n### Example\n\n```\ncurl -X POST http://localhost:8787/v1/receipts \\\n  -H 'content-type: application/json' \\\n  -d '{\"document\":{\"$schema\":\"https://spec.aixin.io/intent.schema.json\",\"intent_id\":\"int_1\",\"version\":\"1.0\",\"actor\":{\"twin_id\":\"twn_1\",\"kind\":\"master\"},\"action\":{\"name\":\"transfer\",\"params\":{\"amount\":\"1.00\",\"currency\":\"USDC\",\"recipient\":\"0xabc\"}},\"risk\":\"low\",\"issued_at\":\"2026-07-25T00:00:00Z\"}}'\n```\n\n## Interop\n\nCanonicalization matches `@aixin-protocol/sdk-js` and `aixin-protocol-sdk`\nbyte-for-byte, so hashes and signatures are portable across the three\nreference implementations.\n\n## License\n\nApache-2.0\n","readmeFilename":"README.md","_rev":"1-971965e4e104104e3b46bfffe01256f0"}