{"_id":"@aiacta-org/ai-citation-sdk","_rev":"15-4f1d43df2572a0f4d52bd2d19d7cd20d","name":"@aiacta-org/ai-citation-sdk","dist-tags":{"latest":"1.0.14"},"versions":{"1.0.0":{"name":"@aiacta-org/ai-citation-sdk","version":"1.0.0","author":{"name":"Eric Michel"},"_id":"@aiacta-org/ai-citation-sdk@1.0.0","maintainers":[{"name":"mobeloper","email":"shakesystems@gmail.com"}],"dist":{"shasum":"560acf3eb91a0b54ddc54212b865317e4f7bdd32","tarball":"https://registry.npmjs.org/@aiacta-org/ai-citation-sdk/-/ai-citation-sdk-1.0.0.tgz","fileCount":20,"integrity":"sha512-bQlflwIfjMK2bXSjnI/wfFRRyuGnMJ9zKGszx3U0JJrxOJ8GOm8G+9dWgIgLVS829XSfj4mp0Z5X9lh0K9jNQQ==","signatures":[{"sig":"MEYCIQD0cPo/EXV59tuwpToB2z9zdmuSlSK+FfFut0cVWUk9oQIhAPZFJNv5JAM60nwd1cAG8xDGCo9DfiQa/pBE5MSK/lzq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26851},"main":"./src/node/index.js","gitHead":"849b69d7e7be249ed2d701901ecf712418360e8b","scripts":{"test":"jest"},"_npmUser":{"name":"mobeloper","email":"shakesystems@gmail.com"},"_npmVersion":"10.8.2","description":"Webhook receiver SDK with signature verification, idempotency, and GDPR-compliant storage patterns (AIACTA Proposal 2 §3.4)","directories":{},"_nodeVersion":"20.20.2","dependencies":{"express":"^5.2.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","supertest":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ai-citation-sdk_1.0.0_1775515497867_0.8512835754513657","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@aiacta-org/ai-citation-sdk","version":"1.0.1","keywords":["aiacta","ai-attribution","citation","citation-webhook","webhook","sdk","attribution","ai-transparency","content-attribution","publisher-rights","open-standard","hmac","signature-verification","idempotency","express-middleware","content-creators","ai-copyright","web-standard"],"author":{"name":"Eric Michel"},"license":"Apache-2.0","_id":"@aiacta-org/ai-citation-sdk@1.0.1","maintainers":[{"name":"mobeloper","email":"shakesystems@gmail.com"}],"homepage":"https://github.com/aiacta-org/aiacta/tree/main/packages/ai-citation-sdk#readme","bugs":{"url":"https://github.com/aiacta-org/aiacta/issues"},"dist":{"shasum":"f9f7c628cae45731cefcf610d894047e46899eae","tarball":"https://registry.npmjs.org/@aiacta-org/ai-citation-sdk/-/ai-citation-sdk-1.0.1.tgz","fileCount":20,"integrity":"sha512-OB7PmYl1ykVV+EbeSul7qlaTvZU//ghpMpFtLzZ1AnV2pKuUAS4Bke3lDs4+fECdyTyp7jWn5KcNNlkSpBFftQ==","signatures":[{"sig":"MEUCIQC4EBvaMZHM/mZyu5jqPhmR2rqXWBp2Vh9KWL0djcHzYQIgcCn/jbOEe65gAMVClLDCGtNkqdnZKeK49Q3xKyCO7e4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27706},"main":"./src/node/index.js","gitHead":"a119c3cbf466b40a4f148e53d4f006e640206b32","scripts":{"test":"jest"},"_npmUser":{"name":"mobeloper","email":"shakesystems@gmail.com"},"repository":{"url":"git+https://github.com/aiacta-org/aiacta.git","type":"git","directory":"packages/ai-citation-sdk"},"_npmVersion":"10.8.2","description":"Webhook receiver SDK for AIACTA citation events. HMAC-SHA256 signature verification, idempotency, and Express middleware (AIACTA Proposal 2, §3.4)","directories":{},"_nodeVersion":"20.20.2","dependencies":{"express":"^5.2.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","supertest":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ai-citation-sdk_1.0.1_1775589202542_0.18920729171252337","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@aiacta-org/ai-citation-sdk","version":"1.0.2","keywords":["aiacta","ai-attribution","citation","citation-webhook","webhook","sdk","attribution","ai-transparency","content-attribution","publisher-rights","open-standard","hmac","signature-verification","idempotency","express-middleware","content-creators","ai-copyright","web-standard"],"author":{"name":"Eric Michel"},"license":"Apache-2.0","_id":"@aiacta-org/ai-citation-sdk@1.0.2","maintainers":[{"name":"mobeloper","email":"shakesystems@gmail.com"}],"homepage":"https://github.com/aiacta-org/aiacta/tree/main/packages/ai-citation-sdk#readme","bugs":{"url":"https://github.com/aiacta-org/aiacta/issues"},"dist":{"shasum":"ad387b5c42ac18af6de64d8d029d510bd8eb3740","tarball":"https://registry.npmjs.org/@aiacta-org/ai-citation-sdk/-/ai-citation-sdk-1.0.2.tgz","fileCount":20,"integrity":"sha512-SP1qF1EHN38GPv89TOf6FQN2xu59A3VkOg2fnFqRDPqd2nZm9Vk1/MOLljO/uH3yXpEMDAcdqfVbaqQ09c1m+g==","signatures":[{"sig":"MEQCIAjYfLNWdmh5RCaxbR4yjLm2tYmInqi53Hlc/DmS1dKKAiAaCQnlT7gGt4kxtxbyniEKJQNoFPVMGs84gYuZQ2oVyw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29261},"main":"./src/node/index.js","gitHead":"f04e8d9d3a2b919da15d906f7f551505c9e8a97d","scripts":{"test":"jest"},"_npmUser":{"name":"mobeloper","email":"shakesystems@gmail.com"},"repository":{"url":"git+https://github.com/aiacta-org/aiacta.git","type":"git","directory":"packages/ai-citation-sdk"},"_npmVersion":"10.8.2","description":"Webhook receiver SDK for AIACTA citation events. HMAC-SHA256 signature verification, idempotency, and Express middleware (AIACTA Proposal 2, §3.4)","directories":{},"_nodeVersion":"20.20.2","dependencies":{"express":"^5.2.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","supertest":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ai-citation-sdk_1.0.2_1775613539196_0.3312764999588884","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@aiacta-org/ai-citation-sdk","version":"1.0.3","keywords":["aiacta","ai-attribution","citation","citation-webhook","webhook","sdk","attribution","ai-transparency","content-attribution","publisher-rights","open-standard","hmac","signature-verification","idempotency","express-middleware","content-creators","ai-copyright","web-standard"],"author":{"name":"Eric Michel"},"license":"Apache-2.0","_id":"@aiacta-org/ai-citation-sdk@1.0.3","maintainers":[{"name":"mobeloper","email":"shakesystems@gmail.com"}],"homepage":"https://github.com/aiacta-org/aiacta/tree/main/packages/ai-citation-sdk#readme","bugs":{"url":"https://github.com/aiacta-org/aiacta/issues"},"dist":{"shasum":"d9ce4928c7ea40f56f117acaf66e45433a9fdef2","tarball":"https://registry.npmjs.org/@aiacta-org/ai-citation-sdk/-/ai-citation-sdk-1.0.3.tgz","fileCount":20,"integrity":"sha512-kgsUEmUC6CdQ2zd8Xg+IkVU7w23eTiR2zfLuSHpj/61aSQDo6cdRsz3LrR5E5VW+XdN8Fioxoj8AB/KWiU6Tgw==","signatures":[{"sig":"MEQCIDh9VCLtXsHF38ey4DVd4S31oVebuALWz4RkrrHyTuefAiAl2higvJ0fh1R4VbAME0idIg6tQnBd6r+Cz6H5bcoDUg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29261},"main":"./src/node/index.js","gitHead":"659346d4b008b5b3f942b36ff739a7d4f30760fa","scripts":{"test":"jest"},"_npmUser":{"name":"mobeloper","email":"shakesystems@gmail.com"},"repository":{"url":"git+https://github.com/aiacta-org/aiacta.git","type":"git","directory":"packages/ai-citation-sdk"},"_npmVersion":"10.8.2","description":"Webhook receiver SDK for AIACTA citation events. HMAC-SHA256 signature verification, idempotency, and Express middleware (AIACTA Proposal 2, §3.4)","directories":{},"_nodeVersion":"20.20.2","dependencies":{"express":"^5.2.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","supertest":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ai-citation-sdk_1.0.3_1775631262267_0.5316072275458721","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@aiacta-org/ai-citation-sdk","version":"1.0.4","keywords":["aiacta","ai-attribution","citation","citation-webhook","webhook","sdk","attribution","ai-transparency","content-attribution","publisher-rights","open-standard","hmac","signature-verification","idempotency","express-middleware","content-creators","ai-copyright","web-standard"],"author":{"name":"Eric Michel"},"license":"Apache-2.0","_id":"@aiacta-org/ai-citation-sdk@1.0.4","maintainers":[{"name":"mobeloper","email":"shakesystems@gmail.com"}],"homepage":"https://github.com/aiacta-org/aiacta/tree/main/packages/ai-citation-sdk#readme","bugs":{"url":"https://github.com/aiacta-org/aiacta/issues"},"dist":{"shasum":"d02522ea534376fac6fbed345c6f60d9d7d80dd4","tarball":"https://registry.npmjs.org/@aiacta-org/ai-citation-sdk/-/ai-citation-sdk-1.0.4.tgz","fileCount":20,"integrity":"sha512-PF5jfheLk+qGt8suYnLBdWTpgnG1BvzFb6wE3J+T4jQgsKw4ffWKR0NwGdua8+DWl0WE1PjmpLyz8YQKKrFaJA==","signatures":[{"sig":"MEUCIQDpauN4Y/fj20I+tSp58Mt2IRyLMWMr627vXJ0nMTcGcQIgASMid7J4u6wVl/mpkz3OcfYbvowjE3OIJZt2Ya6F14s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29261},"main":"./src/node/index.js","gitHead":"d19b7710e05313525178fcae04a9a3fa39c2a1af","scripts":{"test":"jest"},"_npmUser":{"name":"mobeloper","email":"shakesystems@gmail.com"},"repository":{"url":"git+https://github.com/aiacta-org/aiacta.git","type":"git","directory":"packages/ai-citation-sdk"},"_npmVersion":"10.8.2","description":"Webhook receiver SDK for AIACTA citation events. HMAC-SHA256 signature verification, idempotency, and Express middleware (AIACTA Proposal 2, §3.4)","directories":{},"_nodeVersion":"20.20.2","dependencies":{"express":"^5.2.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","supertest":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ai-citation-sdk_1.0.4_1775678889639_0.6965563853728052","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@aiacta-org/ai-citation-sdk","version":"1.0.5","keywords":["aiacta","ai-attribution","citation","citation-webhook","webhook","sdk","attribution","ai-transparency","content-attribution","publisher-rights","open-standard","hmac","signature-verification","idempotency","express-middleware","content-creators","ai-copyright","web-standard"],"author":{"name":"Eric Michel"},"license":"Apache-2.0","_id":"@aiacta-org/ai-citation-sdk@1.0.5","maintainers":[{"name":"mobeloper","email":"shakesystems@gmail.com"}],"homepage":"https://github.com/aiacta-org/aiacta/tree/main/packages/ai-citation-sdk#readme","bugs":{"url":"https://github.com/aiacta-org/aiacta/issues"},"dist":{"shasum":"9199446021c13c612e4315bfbaf56d5f4ae612b5","tarball":"https://registry.npmjs.org/@aiacta-org/ai-citation-sdk/-/ai-citation-sdk-1.0.5.tgz","fileCount":20,"integrity":"sha512-yyPRsDI7Pdkk+RIb84VUeNLfsoqCLlQwh1JLNllUGvtHhVUOBY0hfiOmiu9qrBLqiFimGT1dyoPtEmuqbU68BA==","signatures":[{"sig":"MEQCIGSJYX8HsU5rNzIADvjqZdVStY/h0ZUC1YTctXEko7/oAiAjxtzPUASkty8/PZxAZycMwTWD4E0rT0pzKmEYVi/gNw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29261},"main":"./src/node/index.js","gitHead":"c0ba23ea58258f4a8b3a8e071f1c3751d4f65ada","scripts":{"test":"jest"},"_npmUser":{"name":"mobeloper","email":"shakesystems@gmail.com"},"repository":{"url":"git+https://github.com/aiacta-org/aiacta.git","type":"git","directory":"packages/ai-citation-sdk"},"_npmVersion":"10.8.2","description":"Webhook receiver SDK for AIACTA citation events. HMAC-SHA256 signature verification, idempotency, and Express middleware (AIACTA Proposal 2, §3.4)","directories":{},"_nodeVersion":"20.20.2","dependencies":{"express":"^5.2.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","supertest":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ai-citation-sdk_1.0.5_1775682286673_0.8616172323170705","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@aiacta-org/ai-citation-sdk","version":"1.0.6","keywords":["aiacta","ai-attribution","citation","citation-webhook","webhook","sdk","attribution","ai-transparency","content-attribution","publisher-rights","open-standard","hmac","signature-verification","idempotency","express-middleware","content-creators","ai-copyright","web-standard"],"author":{"name":"Eric Michel"},"license":"Apache-2.0","_id":"@aiacta-org/ai-citation-sdk@1.0.6","maintainers":[{"name":"mobeloper","email":"shakesystems@gmail.com"}],"homepage":"https://github.com/aiacta-org/aiacta/tree/main/packages/ai-citation-sdk#readme","bugs":{"url":"https://github.com/aiacta-org/aiacta/issues"},"dist":{"shasum":"fc95c9575095f59d06eb97e1734a2bd0ba413d99","tarball":"https://registry.npmjs.org/@aiacta-org/ai-citation-sdk/-/ai-citation-sdk-1.0.6.tgz","fileCount":20,"integrity":"sha512-wVkV1aUvu7937EUw8V0uAceWSDMg3YLnbFGmBpSQMnw+egVKkMv5Jb+Tp43qme8jAewLtvAbcwPQqgKpP2/dFw==","signatures":[{"sig":"MEYCIQC4jd1iTSX+ZsM2bHRDgK3GZlVGn6qOs+fFT1yKQ07StQIhANDT6L72sD8XGS8/9RjWniHkODSmdo9/sR4Q81cMWo4L","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29261},"main":"./src/node/index.js","gitHead":"dbce6f73e1cdaa890b98e07f0edaa678b156ce30","scripts":{"test":"jest"},"_npmUser":{"name":"mobeloper","email":"shakesystems@gmail.com"},"repository":{"url":"git+https://github.com/aiacta-org/aiacta.git","type":"git","directory":"packages/ai-citation-sdk"},"_npmVersion":"10.8.2","description":"Webhook receiver SDK for AIACTA citation events. HMAC-SHA256 signature verification, idempotency, and Express middleware (AIACTA Proposal 2, §3.4)","directories":{},"_nodeVersion":"20.20.2","dependencies":{"express":"^5.2.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","supertest":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ai-citation-sdk_1.0.6_1775686133938_0.7197926261841605","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@aiacta-org/ai-citation-sdk","version":"1.0.7","keywords":["aiacta","ai-attribution","citation","citation-webhook","webhook","sdk","attribution","ai-transparency","content-attribution","publisher-rights","open-standard","hmac","signature-verification","idempotency","express-middleware","content-creators","ai-copyright","web-standard"],"author":{"name":"Eric Michel"},"license":"Apache-2.0","_id":"@aiacta-org/ai-citation-sdk@1.0.7","maintainers":[{"name":"mobeloper","email":"shakesystems@gmail.com"}],"homepage":"https://github.com/aiacta-org/aiacta/tree/main/packages/ai-citation-sdk#readme","bugs":{"url":"https://github.com/aiacta-org/aiacta/issues"},"dist":{"shasum":"de7e210393ca302c05c3ac1ef8c9e82a4035f9dc","tarball":"https://registry.npmjs.org/@aiacta-org/ai-citation-sdk/-/ai-citation-sdk-1.0.7.tgz","fileCount":20,"integrity":"sha512-UQyvygVk+sFT51yEBsSjMHRwgBuVgsLSckOETeoc1K8bW49YCLk4jQUX3Eq595VOt6YHzpTWkwmAwAlrDNF0vg==","signatures":[{"sig":"MEUCIB2pQ0lo+SQ9ERg5OpYJHjWzXW4Za8mWXCitYRGwMivCAiEA5XzHKdJU9ectjXlGxP0iGnye2kXeiGW1CKnmphhXkW0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29261},"main":"./src/node/index.js","gitHead":"72d51a5bff929f7864db4d859b5d1705b34af5a1","scripts":{"test":"jest"},"_npmUser":{"name":"mobeloper","email":"shakesystems@gmail.com"},"repository":{"url":"git+https://github.com/aiacta-org/aiacta.git","type":"git","directory":"packages/ai-citation-sdk"},"_npmVersion":"10.8.2","description":"Webhook receiver SDK for AIACTA citation events. HMAC-SHA256 signature verification, idempotency, and Express middleware (AIACTA Proposal 2, §3.4)","directories":{},"_nodeVersion":"20.20.2","dependencies":{"express":"^5.2.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","supertest":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ai-citation-sdk_1.0.7_1775699882416_0.545971547634589","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"@aiacta-org/ai-citation-sdk","version":"1.0.8","keywords":["aiacta","ai-attribution","citation","citation-webhook","webhook","sdk","attribution","ai-transparency","content-attribution","publisher-rights","open-standard","hmac","signature-verification","idempotency","express-middleware","content-creators","ai-copyright","web-standard"],"author":{"name":"Eric Michel"},"license":"Apache-2.0","_id":"@aiacta-org/ai-citation-sdk@1.0.8","maintainers":[{"name":"mobeloper","email":"shakesystems@gmail.com"}],"homepage":"https://github.com/aiacta-org/aiacta/tree/main/packages/ai-citation-sdk#readme","bugs":{"url":"https://github.com/aiacta-org/aiacta/issues"},"dist":{"shasum":"b789414b50bf277385514b182e28189fb3f3e1d8","tarball":"https://registry.npmjs.org/@aiacta-org/ai-citation-sdk/-/ai-citation-sdk-1.0.8.tgz","fileCount":20,"integrity":"sha512-OJgI0Z6iF42F+o024+kIOUNT1aXud+tSTOeR6j7xgY/IpJ3hJT5QOZ46iH5Aejrqmw3qnWSXSAVFWdopaYgVow==","signatures":[{"sig":"MEUCIE9/PLHMOigRMRWRfk3QxdbWmdKZ8Zme67/kMIwN6W0GAiEAqBUWcv8HkuPsYJfDfUvzvLAmd0aoIgGj9/0yoPPdeMw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30194},"main":"./src/node/index.js","gitHead":"9cd7e4a13f8e5a1a1e15d204bb6916710858f741","scripts":{"test":"jest"},"_npmUser":{"name":"mobeloper","email":"shakesystems@gmail.com"},"repository":{"url":"git+https://github.com/aiacta-org/aiacta.git","type":"git","directory":"packages/ai-citation-sdk"},"_npmVersion":"10.8.2","description":"Webhook receiver SDK for AIACTA citation events. HMAC-SHA256 signature verification, idempotency, and Express middleware (AIACTA Proposal 2, §3.4)","directories":{},"_nodeVersion":"20.20.2","dependencies":{"express":"^5.2.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","supertest":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ai-citation-sdk_1.0.8_1775875729951_0.46952709230729517","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"@aiacta-org/ai-citation-sdk","version":"1.0.9","keywords":["aiacta","ai-attribution","citation","citation-webhook","webhook","sdk","attribution","ai-transparency","content-attribution","publisher-rights","open-standard","hmac","signature-verification","idempotency","express-middleware","content-creators","ai-copyright","web-standard"],"author":{"name":"Eric Michel"},"license":"Apache-2.0","_id":"@aiacta-org/ai-citation-sdk@1.0.9","maintainers":[{"name":"mobeloper","email":"shakesystems@gmail.com"}],"homepage":"https://github.com/aiacta-org/aiacta/tree/main/packages/ai-citation-sdk#readme","bugs":{"url":"https://github.com/aiacta-org/aiacta/issues"},"dist":{"shasum":"6e69f5d23ac8a7e6a11b06504b8cbf13c1e03029","tarball":"https://registry.npmjs.org/@aiacta-org/ai-citation-sdk/-/ai-citation-sdk-1.0.9.tgz","fileCount":20,"integrity":"sha512-oWn9mmrDTzN7MKHzdMhwN9Xfx9XF/dieOQx0P0yhBTBG6Lc69Xk8it1WosXrrtwwHflXDJZ4pNNwTknNYQuPCA==","signatures":[{"sig":"MEUCIAhGwoumf0kvTTv3sxWAKPndVezEVW+S+TjDW7nGUgK6AiEAnOV16m9sTq61dDS7aRRC28RDbsvGp13VIXY8LyYAGgo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30194},"main":"./src/node/index.js","gitHead":"0a542ba30d723870ae200781b1d50864efdd9031","scripts":{"test":"jest"},"_npmUser":{"name":"mobeloper","email":"shakesystems@gmail.com"},"repository":{"url":"git+https://github.com/aiacta-org/aiacta.git","type":"git","directory":"packages/ai-citation-sdk"},"_npmVersion":"10.8.2","description":"Webhook receiver SDK for AIACTA citation events. HMAC-SHA256 signature verification, idempotency, and Express middleware (AIACTA Proposal 2, §3.4)","directories":{},"_nodeVersion":"20.20.2","dependencies":{"express":"^5.2.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","supertest":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ai-citation-sdk_1.0.9_1775894794863_0.8478357479931895","host":"s3://npm-registry-packages-npm-production"}},"1.0.10":{"name":"@aiacta-org/ai-citation-sdk","version":"1.0.10","keywords":["aiacta","ai-attribution","citation","citation-webhook","webhook","sdk","attribution","ai-transparency","content-attribution","publisher-rights","open-standard","hmac","signature-verification","idempotency","express-middleware","content-creators","ai-copyright","web-standard"],"author":{"name":"Eric Michel"},"license":"Apache-2.0","_id":"@aiacta-org/ai-citation-sdk@1.0.10","maintainers":[{"name":"mobeloper","email":"shakesystems@gmail.com"}],"homepage":"https://github.com/aiacta-org/aiacta/tree/main/packages/ai-citation-sdk#readme","bugs":{"url":"https://github.com/aiacta-org/aiacta/issues"},"dist":{"shasum":"836593fc792a9d03b36692a0a12901867aef253b","tarball":"https://registry.npmjs.org/@aiacta-org/ai-citation-sdk/-/ai-citation-sdk-1.0.10.tgz","fileCount":20,"integrity":"sha512-SqkUIffyGYZxOQs4B0ZaGFdUhRnrn4gw3DlsubPso9Hx29TKEctoLmS9OCK4z0D8ESnNBItXgVAu9uR0SwoSaQ==","signatures":[{"sig":"MEYCIQCoM1YT4semGWAJlN72qV188OfZcdKEHNiyJgm/mum1RwIhAJmJfdzPEFztCm+3yy/vt6nP5xKJOyipevzUjwTWCbNB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30196},"main":"./src/node/index.js","gitHead":"5b50573dc2a62fe4f43120aae663de9404d1bce1","scripts":{"test":"jest"},"_npmUser":{"name":"mobeloper","email":"shakesystems@gmail.com"},"repository":{"url":"git+https://github.com/aiacta-org/aiacta.git","type":"git","directory":"packages/ai-citation-sdk"},"_npmVersion":"10.8.2","description":"Webhook receiver SDK for AIACTA citation events. HMAC-SHA256 signature verification, idempotency, and Express middleware (AIACTA Proposal 2, §3.4)","directories":{},"_nodeVersion":"20.20.2","dependencies":{"express":"^5.2.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","supertest":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ai-citation-sdk_1.0.10_1775924691792_0.8396073595178095","host":"s3://npm-registry-packages-npm-production"}},"1.0.11":{"name":"@aiacta-org/ai-citation-sdk","version":"1.0.11","keywords":["aiacta","ai-attribution","citation","citation-webhook","webhook","sdk","attribution","ai-transparency","content-attribution","publisher-rights","open-standard","hmac","signature-verification","idempotency","express-middleware","content-creators","ai-copyright","web-standard"],"author":{"name":"Eric Michel"},"license":"Apache-2.0","_id":"@aiacta-org/ai-citation-sdk@1.0.11","maintainers":[{"name":"mobeloper","email":"shakesystems@gmail.com"}],"homepage":"https://github.com/aiacta-org/aiacta/tree/main/packages/ai-citation-sdk#readme","bugs":{"url":"https://github.com/aiacta-org/aiacta/issues"},"dist":{"shasum":"243cf6d2337c7479ea02d86c70bec02e4489add6","tarball":"https://registry.npmjs.org/@aiacta-org/ai-citation-sdk/-/ai-citation-sdk-1.0.11.tgz","fileCount":20,"integrity":"sha512-0ny+1UK/zbETsdYulHH/PBWJcSa+LjNeOr50xMiuPB+DY3cxgB4FpYM9ga9XiAtKJi3Ckj/bD13v39bThIXNOQ==","signatures":[{"sig":"MEQCIGmiaddr5i7TRn1XXvf0AOF60wF43o63X341ZQ2WJ2IuAiAQP4suNKiVwsu1AhDTU9YoGKdt0ZsalHMczCOe07KbaA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30280},"main":"./src/node/index.js","gitHead":"d66af70bb3646dc1f8943d6f6cfc81df956dd5f6","scripts":{"test":"jest"},"_npmUser":{"name":"mobeloper","email":"shakesystems@gmail.com"},"repository":{"url":"git+https://github.com/aiacta-org/aiacta.git","type":"git","directory":"packages/ai-citation-sdk"},"_npmVersion":"11.11.0","description":"Webhook receiver SDK for AIACTA citation events. HMAC-SHA256 signature verification, idempotency, and Express middleware (AIACTA Proposal 2, §3.4)","directories":{},"_nodeVersion":"24.14.1","dependencies":{"express":"^5.2.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","supertest":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ai-citation-sdk_1.0.11_1776143494429_0.5605334755306446","host":"s3://npm-registry-packages-npm-production"}},"1.0.12":{"name":"@aiacta-org/ai-citation-sdk","version":"1.0.12","keywords":["aiacta","ai-attribution","citation","citation-webhook","webhook","sdk","attribution","ai-transparency","content-attribution","publisher-rights","open-standard","hmac","signature-verification","idempotency","express-middleware","content-creators","ai-copyright","web-standard"],"author":{"name":"Eric Michel"},"license":"Apache-2.0","_id":"@aiacta-org/ai-citation-sdk@1.0.12","maintainers":[{"name":"mobeloper","email":"shakesystems@gmail.com"}],"homepage":"https://github.com/aiacta-org/aiacta/tree/main/packages/ai-citation-sdk#readme","bugs":{"url":"https://github.com/aiacta-org/aiacta/issues"},"dist":{"shasum":"e6934e7ab963cd677ec985d02107b5e3e5402d81","tarball":"https://registry.npmjs.org/@aiacta-org/ai-citation-sdk/-/ai-citation-sdk-1.0.12.tgz","fileCount":20,"integrity":"sha512-Ag67W59k8bMhalRIIQUluZcv3fcjp4zXkfeK+WzuP9kPjHBhbFMcN6m/yAd0r5Eu94sN2sUcFd3MWFNpPcfnng==","signatures":[{"sig":"MEYCIQDAaC1di4fIgmCSy3tMI/la9AA9xEOrK/nCeqzFspOFfwIhAM0WiXXsFGaU9yV9yeaedMgZRzDNwlWgrilXlch3OjAY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30280},"main":"./src/node/index.js","gitHead":"c769ee41bc038a78070a3c2ce82db6d95dd8f7a7","scripts":{"test":"jest"},"_npmUser":{"name":"mobeloper","email":"shakesystems@gmail.com"},"repository":{"url":"git+https://github.com/aiacta-org/aiacta.git","type":"git","directory":"packages/ai-citation-sdk"},"_npmVersion":"10.8.2","description":"Webhook receiver SDK for AIACTA citation events. HMAC-SHA256 signature verification, idempotency, and Express middleware (AIACTA Proposal 2, §3.4)","directories":{},"_nodeVersion":"20.20.2","dependencies":{"express":"^5.2.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","supertest":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ai-citation-sdk_1.0.12_1776143763601_0.7984722679116765","host":"s3://npm-registry-packages-npm-production"}},"1.0.13":{"name":"@aiacta-org/ai-citation-sdk","version":"1.0.13","keywords":["aiacta","ai-attribution","citation","citation-webhook","webhook","sdk","attribution","ai-transparency","content-attribution","publisher-rights","open-standard","hmac","signature-verification","idempotency","express-middleware","content-creators","ai-copyright","web-standard"],"author":{"name":"Eric Michel"},"license":"Apache-2.0","_id":"@aiacta-org/ai-citation-sdk@1.0.13","maintainers":[{"name":"mobeloper","email":"shakesystems@gmail.com"}],"homepage":"https://github.com/aiacta-org/aiacta/tree/main/packages/ai-citation-sdk#readme","bugs":{"url":"https://github.com/aiacta-org/aiacta/issues"},"dist":{"shasum":"e4b2192f9730ba6f2125a9e3ef94ccf889f7acf1","tarball":"https://registry.npmjs.org/@aiacta-org/ai-citation-sdk/-/ai-citation-sdk-1.0.13.tgz","fileCount":20,"integrity":"sha512-5NFo+hXM/ayJKG4pRqnsjFlTVAHvwpIsYfSrKoY4o8/FQaIhbbov0M2oNKVdCPQDIi7QSWDPhtNY7PiR/HgJ9Q==","signatures":[{"sig":"MEQCIBvQdd4k/zDEKvUx6yfjpj5fZMf4pAQGSoO10OrC0cW7AiBzKZXTfGvm4uahO66yO9J83USWveewHnc0C2kI5jHq1g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30280},"main":"./src/node/index.js","gitHead":"6ae6940e1728448c6687312edc77f0a6bd2efb15","scripts":{"test":"jest"},"_npmUser":{"name":"mobeloper","email":"shakesystems@gmail.com"},"repository":{"url":"git+https://github.com/aiacta-org/aiacta.git","type":"git","directory":"packages/ai-citation-sdk"},"_npmVersion":"10.8.2","description":"Webhook receiver SDK for AIACTA citation events. HMAC-SHA256 signature verification, idempotency, and Express middleware (AIACTA Proposal 2, §3.4)","directories":{},"_nodeVersion":"20.20.2","dependencies":{"express":"^5.2.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","supertest":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ai-citation-sdk_1.0.13_1776209524380_0.08562756410140371","host":"s3://npm-registry-packages-npm-production"}},"1.0.14":{"name":"@aiacta-org/ai-citation-sdk","version":"1.0.14","description":"Webhook receiver SDK for AIACTA citation events. HMAC-SHA256 signature verification, idempotency, and Express middleware (AIACTA Proposal 2, §3.4)","author":{"name":"Eric Michel"},"license":"Apache-2.0","homepage":"https://github.com/aiacta-org/aiacta/tree/main/packages/ai-citation-sdk#readme","repository":{"type":"git","url":"git+https://github.com/aiacta-org/aiacta.git","directory":"packages/ai-citation-sdk"},"bugs":{"url":"https://github.com/aiacta-org/aiacta/issues"},"keywords":["aiacta","ai-attribution","citation","citation-webhook","webhook","sdk","attribution","ai-transparency","content-attribution","publisher-rights","open-standard","hmac","signature-verification","idempotency","express-middleware","content-creators","ai-copyright","web-standard"],"main":"./src/node/index.js","scripts":{"test":"jest"},"dependencies":{"express":"^5.2.1"},"devDependencies":{"jest":"^29.0.0","supertest":"^7.0.0"},"_id":"@aiacta-org/ai-citation-sdk@1.0.14","gitHead":"acd33d87518f566a195b0f6e8d30375ad40b570d","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-/Y1PjTgTYaeB0DEsARbZvy2/R1ifOc+c1cb2/jHa9l9sVMd3jDzIUMsC4LUoHzhZf/CGf7o6TYS1ePsdhvQSAw==","shasum":"7940b2a82fdc46043b750fa953bdbdfe987fd977","tarball":"https://registry.npmjs.org/@aiacta-org/ai-citation-sdk/-/ai-citation-sdk-1.0.14.tgz","fileCount":20,"unpackedSize":30280,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDRJhpNqE01izgPfyFRsIOKHcrJmcG3l8xi4DOoFVx65gIhANuo+UHWvZC+uZB9j35sryuYWXLAb5XLe0rI1Apef4kq"}]},"_npmUser":{"name":"mobeloper","email":"shakesystems@gmail.com"},"directories":{},"maintainers":[{"name":"mobeloper","email":"shakesystems@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ai-citation-sdk_1.0.14_1776804945562_0.013425594847858324"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-06T22:44:57.773Z","modified":"2026-04-21T20:55:45.875Z","1.0.0":"2026-04-06T22:44:58.009Z","1.0.1":"2026-04-07T19:13:22.701Z","1.0.2":"2026-04-08T01:58:59.347Z","1.0.3":"2026-04-08T06:54:22.416Z","1.0.4":"2026-04-08T20:08:09.785Z","1.0.5":"2026-04-08T21:04:46.830Z","1.0.6":"2026-04-08T22:08:54.083Z","1.0.7":"2026-04-09T01:58:02.563Z","1.0.8":"2026-04-11T02:48:50.088Z","1.0.9":"2026-04-11T08:06:35.005Z","1.0.10":"2026-04-11T16:24:51.946Z","1.0.11":"2026-04-14T05:11:34.585Z","1.0.12":"2026-04-14T05:16:03.723Z","1.0.13":"2026-04-14T23:32:04.517Z","1.0.14":"2026-04-21T20:55:45.739Z"},"bugs":{"url":"https://github.com/aiacta-org/aiacta/issues"},"author":{"name":"Eric Michel"},"license":"Apache-2.0","homepage":"https://github.com/aiacta-org/aiacta/tree/main/packages/ai-citation-sdk#readme","keywords":["aiacta","ai-attribution","citation","citation-webhook","webhook","sdk","attribution","ai-transparency","content-attribution","publisher-rights","open-standard","hmac","signature-verification","idempotency","express-middleware","content-creators","ai-copyright","web-standard"],"repository":{"type":"git","url":"git+https://github.com/aiacta-org/aiacta.git","directory":"packages/ai-citation-sdk"},"description":"Webhook receiver SDK for AIACTA citation events. HMAC-SHA256 signature verification, idempotency, and Express middleware (AIACTA Proposal 2, §3.4)","maintainers":[{"name":"mobeloper","email":"shakesystems@gmail.com"}],"readme":"# @aiacta-org/ai-citation-sdk\n\n> Webhook receiver SDK for [AIACTA](https://github.com/mobeloper/aiacta/blob/main/publications/AIACTA_FrameworkV1_0_EricMichel_2026March24.pdf) citation events. Verifies signatures, handles idempotency, and provides ready-to-use Express middleware (Proposal 2, §3.4).\n\n[![npm version](https://img.shields.io/npm/v/@aiacta-org/ai-citation-sdk.svg)](https://www.npmjs.com/package/@aiacta-org/ai-citation-sdk)\n[![PyPI version](https://img.shields.io/pypi/v/ai-citation-sdk.svg)](https://pypi.org/project/ai-citation-sdk/)\n[![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](../../LICENSE)\n[![AIACTA Spec](https://img.shields.io/badge/spec-AIACTA%2F1.0-orange.svg)](../../docs/proposals/proposal-2-citation-webhooks.md)\n\nAvailable in **Node.js**, **Python**, and **Go**.\n\n---\n\n## What is this?\n\nWhen an AI provider (Anthropic, OpenAI, Google, etc.) cites your content in a response, they POST a signed event to your `Citation-Webhook` endpoint. This SDK handles the security and plumbing so you can focus on what to do with the data.\n\nIt provides:\n- **Signature verification** — HMAC-SHA256 with constant-time comparison (prevents timing attacks)\n- **Replay attack prevention** — timestamps validated within a ±5-minute window\n- **Idempotency** — duplicate events are safely ignored\n- **Express middleware** — drop-in handler for Node.js servers\n- **Retry schedule** — implements the §3.5 six-attempt delivery retry\n\n---\n\n## Install\n\n**Node.js**\n```bash\nnpm install @aiacta-org/ai-citation-sdk\n```\n\n**Python**\n```bash\npip install ai-citation-sdk\n```\n\n**Go**\n```bash\ngo get github.com/aiacta-org/aiacta/ai-citation-sdk\n```\n\n---\n\n## Quick Start\n\n### Node.js — Express middleware (recommended)\n\n```javascript\nconst express = require('express');\nconst { createExpressMiddleware } = require('@aiacta-org/ai-citation-sdk');\n\nconst app = express();\n\n// IMPORTANT: express.raw() must come before the middleware.\n// Signature verification requires the raw bytes, not parsed JSON.\napp.post(\n  '/webhooks/ai-citations',\n  express.raw({ type: 'application/json' }),\n  createExpressMiddleware({\n    secret: process.env.WEBHOOK_SECRET,\n\n    // Idempotency store — prevents processing the same event twice.\n    // Replace with your database in production.\n    store: {\n      exists: async (key) => await db.citations.exists({ idempotency_key: key }),\n      set:    async (key) => await db.citations.markProcessed(key),\n    },\n\n    // Called once per unique, verified event\n    onEvent: async (event) => {\n      console.log('Citation received:', event.citation.url);\n      await db.citations.insert(event);\n    },\n  })\n);\n\napp.listen(3000);\n```\n\n### Node.js — manual verification\n\n```javascript\nconst { verifyWebhookSignature } = require('@aiacta-org/ai-citation-sdk');\n\napp.post('/webhooks/ai-citations', express.raw({ type: 'application/json' }), async (req, res) => {\n  try {\n    const valid = verifyWebhookSignature(\n      req.body,                                    // raw Buffer\n      req.headers['x-aiacta-webhook-timestamp'],       // UNIX seconds string\n      req.headers['x-aiacta-webhook-signature'],             // 'sha256=<hex>'\n      process.env.WEBHOOK_SECRET\n    );\n    if (!valid) return res.status(401).json({ error: 'Invalid signature' });\n  } catch (err) {\n    // Timestamp outside ±5 min window — possible replay attack\n    return res.status(400).json({ error: err.message });\n  }\n\n  res.status(200).json({ status: 'accepted' });\n\n  const event = JSON.parse(req.body.toString());\n  console.log('Provider:', event.provider);\n  console.log('Cited URL:', event.citation.url);\n});\n```\n\n### Python\n\n```python\nfrom aiacta import verify_webhook_signature\n\n@app.route('/webhooks/ai-citations', methods=['POST'])\ndef citation_webhook():\n    raw_body  = request.get_data()\n    timestamp = request.headers.get('X-AIACTA-Webhook-Timestamp')\n    sig       = request.headers.get('X-AIACTA-Webhook-Signature')\n    secret    = os.environ['WEBHOOK_SECRET']\n\n    try:\n        valid = verify_webhook_signature(raw_body, timestamp, sig, secret)\n    except ValueError as e:\n        return {'error': str(e)}, 400\n\n    if not valid:\n        return {'error': 'Invalid signature'}, 401\n\n    event = request.get_json(force=True)\n    print(f\"Citation: {event['citation']['url']} via {event['provider']}\")\n    return {'status': 'accepted'}, 200\n```\n\n### Go\n\n```go\nimport \"github.com/aiacta-org/aiacta/ai-citation-sdk\"\n\nfunc webhookHandler(w http.ResponseWriter, r *http.Request) {\n    body, _ := io.ReadAll(r.Body)\n    timestamp := r.Header.Get(\"X-AIACTA-Webhook-Timestamp\")\n    sig       := r.Header.Get(\"X-AIACTA-Webhook-Signature\")\n    secret    := os.Getenv(\"WEBHOOK_SECRET\")\n\n    ok, err := aiacta.VerifyWebhookSignature(body, timestamp, sig, secret)\n    if err != nil {\n        http.Error(w, err.Error(), http.StatusBadRequest)\n        return\n    }\n    if !ok {\n        http.Error(w, \"Invalid signature\", http.StatusUnauthorized)\n        return\n    }\n\n    w.WriteHeader(http.StatusOK)\n    // process event...\n}\n```\n\n---\n\n## Citation Event Schema\n\n```json\n{\n  \"schema_version\": \"1.0\",\n  \"provider\": \"anthropic\",\n  \"event_type\": \"citation.generated\",\n  \"event_id\": \"evt_01J4KXQN2QP7HBW8FMYRC3T5VZ\",\n  \"idempotency_key\": \"idem_01J4KXQN_f3a9b2c1\",\n  \"timestamp\": \"2026-03-24T09:14:00Z\",\n  \"citation\": {\n    \"url\": \"https://yourdomain.com/articles/your-article\",\n    \"citation_type\": \"factual_source\",\n    \"context_summary\": \"Used to answer question about ...\",\n    \"query_category_l1\": \"technology\",\n    \"model\": \"claude-3-5-sonnet\",\n    \"user_country\": \"US\"\n  },\n  \"attribution\": {\n    \"display_type\": \"inline_link\",\n    \"user_interface\": \"chat\"\n  }\n}\n```\n\n**Privacy note:** `user_country` is always country-level only. AI providers are prohibited from including user IDs or sub-country geodata (§3.3).\n\n---\n\n## Security Details\n\nThe signature covers: `timestamp + \".\" + raw_json_body`\n\n```\nsignature = HMAC-SHA256(shared_secret, signed_payload)\nheader    = \"sha256=\" + hex(signature)\n```\n\nThe SDK uses `crypto.timingSafeEqual()` (Node.js), `hmac.compare_digest()` (Python), and `hmac.Equal()` (Go) to prevent timing oracle attacks.\n\n---\n\n## API Reference\n\n### Node.js\n\n| Export | Description |\n|--------|-------------|\n| `verifyWebhookSignature(payload, timestamp, sigHeader, secret)` | Returns `boolean`. Throws `Error` if timestamp is outside ±300s. |\n| `processEvent(event, store, onEvent)` | Processes with idempotency check. |\n| `createExpressMiddleware({ secret, store, onEvent })` | Drop-in Express route handler. |\n\n### Python\n\n| Function | Description |\n|----------|-------------|\n| `verify_webhook_signature(payload, timestamp, sig_header, secret)` | Returns `True` if valid. Raises `ValueError` on timestamp violation. |\n\n### Go\n\n| Function | Description |\n|----------|-------------|\n| `VerifyWebhookSignature(rawBody, timestamp, sigHeader, secret)` | Returns `(bool, error)`. Error if timestamp outside window. |\n| `ProcessEvent(events, store, handler)` | Idempotent batch processing. |\n| `TruncateToMinute(t time.Time)` | Timestamp formatting per §3.2. |\n\n---\n\n## Related packages\n\n| Package | Purpose |\n|---------|---------|\n| [`@aiacta-org/ai-attribution-lint`](https://www.npmjs.com/package/@aiacta-org/ai-attribution-lint) | Validate your `ai-attribution.txt` |\n| [`@aiacta-org/crawl-manifest-client`](https://www.npmjs.com/package/@aiacta-org/crawl-manifest-client) | Query AI providers' crawl history |\n\n---\n\n## License & Copyright\n\nCopyright © 2026 Eric Michel, PhD. Licensed under the [Apache License 2.0](../../LICENSE).\n\nPart of the [AIACTA open standard](https://github.com/aiacta-org/aiacta).\n","readmeFilename":"README.md"}