{"_id":"@atlasnpm/atlas-api-helper","_rev":"18-144b7115e4d46c16f212caa4c50290b0","name":"@atlasnpm/atlas-api-helper","dist-tags":{"latest":"0.2.26"},"versions":{"0.2.4":{"name":"@atlasnpm/atlas-api-helper","version":"0.2.4","license":"MIT","_id":"@atlasnpm/atlas-api-helper@0.2.4","maintainers":[{"name":"drunken_coder","email":"laraujo123546@gmail.com"}],"dist":{"shasum":"3f992db9576d07358be52f20d935093c6ecbd052","tarball":"https://registry.npmjs.org/@atlasnpm/atlas-api-helper/-/atlas-api-helper-0.2.4.tgz","fileCount":7,"integrity":"sha512-s24PqQe0TcZ5twMv2wAwXlTbcz+/MOzUOMR12sP6k1RZOrAVjTvQyM9wOYdH91EzQnI76xHM8SgzAloJ7Yw/hQ==","signatures":[{"sig":"MEUCIQDQyh4rLfz++qI+ZUJy4hTijT5J74rsvrgDqsd9CsKvaAIgKaNq50nC2z36t9A/UlQY5Vric+UGl7v6XRMS2EaxjVw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30063},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"a75fae1af514929dcc4a9e9d81a13067c274f33e","scripts":{"test":"vitest run","build":"npx tsup","prepare":"node ./scripts/prepare.mjs"},"_npmUser":{"name":"drunken_coder","email":"laraujo123546@gmail.com"},"_npmVersion":"10.8.2","description":"HTTP client for the Atlas Command REST API.","directories":{},"_nodeVersion":"20.19.5","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^1.5.0","typescript":"^5.4.5","@types/node":"^24.10.1"},"_npmOperationalInternal":{"tmp":"tmp/atlas-api-helper_0.2.4_1764631752472_0.01308524125641819","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@atlasnpm/atlas-api-helper","version":"0.2.5","license":"MIT","_id":"@atlasnpm/atlas-api-helper@0.2.5","maintainers":[{"name":"drunken_coder","email":"laraujo123546@gmail.com"}],"dist":{"shasum":"dfb39ff0f99934a37b1ab8ee4b5fdbd6ff09dfc4","tarball":"https://registry.npmjs.org/@atlasnpm/atlas-api-helper/-/atlas-api-helper-0.2.5.tgz","fileCount":7,"integrity":"sha512-UlVl6vK8MXOl4FAE4zxMaj0X9YiERSl3d2nD31FwboCGqBnohNvaiyFj71r02TmMJna0s5VvhDuQ2F8+M9zjJA==","signatures":[{"sig":"MEUCIE7UeNjuWdABH6sMD3TmSYsBnxcYzzRm1YZKpXUZihOmAiEAw+HtTJUiMjwYa75R63D472uHFd9WlGHt7eOYgcJoY3o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37727},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"d6d8603ad04266de93ae453e1b85119a7af5a232","scripts":{"test":"vitest run","build":"npx tsup","prepare":"node ./scripts/prepare.mjs"},"_npmUser":{"name":"drunken_coder","email":"laraujo123546@gmail.com"},"_npmVersion":"10.8.2","description":"HTTP client for the Atlas Command REST API.","directories":{},"_nodeVersion":"20.19.5","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^1.5.0","typescript":"^5.4.5","@types/node":"^24.10.1"},"_npmOperationalInternal":{"tmp":"tmp/atlas-api-helper_0.2.5_1764718320670_0.4613620494414643","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@atlasnpm/atlas-api-helper","version":"0.2.6","license":"MIT","_id":"@atlasnpm/atlas-api-helper@0.2.6","maintainers":[{"name":"drunken_coder","email":"laraujo123546@gmail.com"}],"dist":{"shasum":"fb156e2ef376469afef8a7c4b8ff24a88f95f0cf","tarball":"https://registry.npmjs.org/@atlasnpm/atlas-api-helper/-/atlas-api-helper-0.2.6.tgz","fileCount":7,"integrity":"sha512-YQi/u0+AWJvZ1FfhA3KjwX4OiXvA5G0OW18e/SWrCZsw3spzqBwlA22cHIp4qVbb+PYDr5c4HEgPgzTJzO0lww==","signatures":[{"sig":"MEQCIHeikYIDOTnnXXdC6RtV9mUFXDVPp96gDWKP8qrjF/+PAiBZuWFvRpsNPssTki2J6ioNxNAZQ07wBSZyoteIIDLdGQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39250},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"bc4a93fef28dd24cc421638f3e8da05b39f6a4d2","scripts":{"test":"vitest run","build":"npx tsup","prepare":"node ./scripts/prepare.mjs"},"_npmUser":{"name":"drunken_coder","email":"laraujo123546@gmail.com"},"_npmVersion":"10.8.2","description":"HTTP client for the Atlas Command REST API.","directories":{},"_nodeVersion":"20.19.6","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^1.5.0","typescript":"^5.4.5","@types/node":"^24.10.1"},"_npmOperationalInternal":{"tmp":"tmp/atlas-api-helper_0.2.6_1764908988705_0.9156183527709723","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"@atlasnpm/atlas-api-helper","version":"0.2.7","license":"MIT","_id":"@atlasnpm/atlas-api-helper@0.2.7","maintainers":[{"name":"drunken_coder","email":"laraujo123546@gmail.com"}],"dist":{"shasum":"9a9bd33bbd632ff2a8da90c090fd42e4e4f8f772","tarball":"https://registry.npmjs.org/@atlasnpm/atlas-api-helper/-/atlas-api-helper-0.2.7.tgz","fileCount":7,"integrity":"sha512-HjJ/9qQFn369K8sZhK77MdcSOCPsYF+7rgWlGp9mvBJg+mVEV6lMI9N8fkPBkSWXzpfihc6GtWX5zR8clELJMg==","signatures":[{"sig":"MEUCIEk88VYSdc6yPeXqLTRRTHCd+MWK1sZnT0SGFy27ub1tAiEA/7W8ak1gIvpCdauum/TGPCVB34sZhDu2KOpxAtfc2VI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58002},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"b69e8922309ce89ab45a10141d5c79e8f245e4ef","scripts":{"test":"vitest run","build":"npx tsup","prepare":"node ./scripts/prepare.mjs"},"_npmUser":{"name":"drunken_coder","email":"laraujo123546@gmail.com"},"_npmVersion":"10.8.2","description":"HTTP client for the Atlas Command REST API.","directories":{},"_nodeVersion":"20.19.6","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^1.5.0","typescript":"^5.4.5","@types/node":"^24.10.1"},"_npmOperationalInternal":{"tmp":"tmp/atlas-api-helper_0.2.7_1764970058946_0.9892991932039301","host":"s3://npm-registry-packages-npm-production"}},"0.2.8":{"name":"@atlasnpm/atlas-api-helper","version":"0.2.8","license":"MIT","_id":"@atlasnpm/atlas-api-helper@0.2.8","maintainers":[{"name":"drunken_coder","email":"laraujo123546@gmail.com"}],"dist":{"shasum":"2474621c50097bb36890c8b4a5fc25d2c2ebb084","tarball":"https://registry.npmjs.org/@atlasnpm/atlas-api-helper/-/atlas-api-helper-0.2.8.tgz","fileCount":7,"integrity":"sha512-PkQ9bO5iyc0Wr/qjaIUOL1J/nbi0qDQCifnVx/O4r7xyiLCicxqfQWe6d4OXR447lv7EEy/645QIYoJIWgO7/g==","signatures":[{"sig":"MEUCIQCjKy8SphbOy1vSCmSqcV04sYwSMJCjHp2tS4AtsE3oKQIgFazJgWbITYypMjdLjOPRLTxI0TjfYWXBgHbXiIKWQ3o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":61155},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"857e8007a0382d8d7dc6f7959e74f0e391b1d4b2","scripts":{"test":"vitest run","build":"npx tsup","prepare":"node ./scripts/prepare.mjs"},"_npmUser":{"name":"drunken_coder","email":"laraujo123546@gmail.com"},"_npmVersion":"10.8.2","description":"HTTP client for the Atlas Command REST API.","directories":{},"_nodeVersion":"20.19.6","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^1.5.0","typescript":"^5.4.5","@types/node":"^24.10.1"},"_npmOperationalInternal":{"tmp":"tmp/atlas-api-helper_0.2.8_1764972851247_0.22611050417822032","host":"s3://npm-registry-packages-npm-production"}},"0.2.10":{"name":"@atlasnpm/atlas-api-helper","version":"0.2.10","license":"MIT","_id":"@atlasnpm/atlas-api-helper@0.2.10","maintainers":[{"name":"drunken_coder","email":"laraujo123546@gmail.com"}],"dist":{"shasum":"d53c2de085bafbf5f50ef680627c955c4423ed6a","tarball":"https://registry.npmjs.org/@atlasnpm/atlas-api-helper/-/atlas-api-helper-0.2.10.tgz","fileCount":7,"integrity":"sha512-1pvokT34ZGf38TE8+WhRYSnw/NcpHGwSndSsI+d8wxk4qgoSejra5uDenAYJXkDEo2jsX2hEaZkg55LU7cuvBw==","signatures":[{"sig":"MEYCIQCHVhg4kJ6BqP4GASi9EaM9r8hiaKF4FF1Zzh4IVtuFPAIhAK34UP+dPX3hQ5F5FUVJ4diMSq7F+DPVmwMXmQrMwoY9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":65215},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"46a20131413098896d88a17b3f9edd14c1419291","scripts":{"test":"vitest run","build":"npx tsup","prepare":"node ./scripts/prepare.mjs"},"_npmUser":{"name":"drunken_coder","email":"laraujo123546@gmail.com"},"_npmVersion":"10.8.2","description":"HTTP client for the Atlas Command REST API.","directories":{},"_nodeVersion":"20.19.6","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.0.15","typescript":"^5.4.5","@types/node":"^24.10.1"},"_npmOperationalInternal":{"tmp":"tmp/atlas-api-helper_0.2.10_1765424051216_0.9164610406804095","host":"s3://npm-registry-packages-npm-production"}},"0.2.11":{"name":"@atlasnpm/atlas-api-helper","version":"0.2.11","license":"MIT","_id":"@atlasnpm/atlas-api-helper@0.2.11","maintainers":[{"name":"drunken_coder","email":"laraujo123546@gmail.com"}],"dist":{"shasum":"f2fb3a84d018a925951dede4d999a0636cf53b59","tarball":"https://registry.npmjs.org/@atlasnpm/atlas-api-helper/-/atlas-api-helper-0.2.11.tgz","fileCount":7,"integrity":"sha512-ciL85fdlOZaaQFJ9dmo7L/a6/v4/y9VgDc5T57o9S0xSyfWsM4bO6Mq2nt8hob6CAzySZgkAqThviMJlErcvFg==","signatures":[{"sig":"MEQCIDUdFqEFqvguomGnTKkqTPVXKIBrT6zct+78gPl5G5bvAiBITKJy45wamVzrVjs2Zy5bAPcLrQ1ZxxU23sJop51Qrg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":65217},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"b5c3cef05eb1e2f9df6b48888de64bdd6d73e038","scripts":{"test":"vitest run","build":"npx tsup","prepare":"node ./scripts/prepare.mjs"},"_npmUser":{"name":"drunken_coder","email":"laraujo123546@gmail.com"},"_npmVersion":"10.8.2","description":"HTTP client for the Atlas Command REST API.","directories":{},"_nodeVersion":"20.19.6","dependencies":{"tsup":"^8.5.1","typescript":"^5.4.5","@types/node":"^24.10.1"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.15"},"_npmOperationalInternal":{"tmp":"tmp/atlas-api-helper_0.2.11_1768110206332_0.25984884878321024","host":"s3://npm-registry-packages-npm-production"}},"0.2.12":{"name":"@atlasnpm/atlas-api-helper","version":"0.2.12","license":"MIT","_id":"@atlasnpm/atlas-api-helper@0.2.12","maintainers":[{"name":"drunken_coder","email":"laraujo123546@gmail.com"}],"dist":{"shasum":"71cdab38003f839bbc0de564d4d34ba9574860e5","tarball":"https://registry.npmjs.org/@atlasnpm/atlas-api-helper/-/atlas-api-helper-0.2.12.tgz","fileCount":7,"integrity":"sha512-Me9RUbzdysiiclO4DhlqTutfPz1xcpcyryWy2LYTajoB2Hxt+PV5NFQJwQFrxwKsgqUYjBOXiMzQdv+sK144oA==","signatures":[{"sig":"MEYCIQDuSGtORgmSB/kTWuVRniRSVBN1wGBLKmoP2zdsF5fUWQIhAJm1sX4c71NVluWBshWKIQa73TIfqGafyWNX3n4FTHut","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":66309},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"4672488a77762995def8c539b23c20140ac46795","scripts":{"test":"vitest run","build":"npx tsup","prepare":"node ./scripts/prepare.mjs"},"_npmUser":{"name":"drunken_coder","email":"laraujo123546@gmail.com"},"_npmVersion":"10.8.2","description":"HTTP client for the Atlas Command REST API.","directories":{},"_nodeVersion":"20.19.6","dependencies":{"tsup":"^8.5.1","typescript":"^5.4.5","@types/node":"^24.10.1"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.15"},"_npmOperationalInternal":{"tmp":"tmp/atlas-api-helper_0.2.12_1768695146588_0.05415773419245373","host":"s3://npm-registry-packages-npm-production"}},"0.2.13":{"name":"@atlasnpm/atlas-api-helper","version":"0.2.13","license":"MIT","_id":"@atlasnpm/atlas-api-helper@0.2.13","maintainers":[{"name":"drunken_coder","email":"laraujo123546@gmail.com"}],"dist":{"shasum":"20b441e8bf180df49525786bede79cba997228b9","tarball":"https://registry.npmjs.org/@atlasnpm/atlas-api-helper/-/atlas-api-helper-0.2.13.tgz","fileCount":7,"integrity":"sha512-cDFOZwlAcWrFAzo0EpfdqBbuIyKDvKGfbDS2JCB2v98MBI/wUvoeNpNEZJiEy0ysRHMfwaIRzkA5RNNFbS4kCg==","signatures":[{"sig":"MEUCIQCRt1grbv8NifhBnU8AL9yfjqWj7m65F4RvYfjdklrgdgIgfArBjmdf9udorLl8vg/4KOnAPVFA5UpoRj7joa46OQQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72613},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"b010afd3060efaceaaa4f660b92e5020a825c4fd","scripts":{"test":"vitest run","build":"npx tsup","prepare":"node ./scripts/prepare.mjs"},"_npmUser":{"name":"drunken_coder","email":"laraujo123546@gmail.com"},"_npmVersion":"10.8.2","description":"HTTP client for the Atlas Command REST API.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"tsup":"^8.5.1","typescript":"^5.4.5","@types/node":"^24.10.1"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.15"},"_npmOperationalInternal":{"tmp":"tmp/atlas-api-helper_0.2.13_1770310343000_0.2559949589216377","host":"s3://npm-registry-packages-npm-production"}},"0.2.14":{"name":"@atlasnpm/atlas-api-helper","version":"0.2.14","license":"MIT","_id":"@atlasnpm/atlas-api-helper@0.2.14","maintainers":[{"name":"drunken_coder","email":"laraujo123546@gmail.com"}],"dist":{"shasum":"6d352928379e69f04919576cd0df1f7948fe8e5a","tarball":"https://registry.npmjs.org/@atlasnpm/atlas-api-helper/-/atlas-api-helper-0.2.14.tgz","fileCount":7,"integrity":"sha512-EeD/D0b8kcufNg2uYVR1LD0T9rWt/kssqx5R6GSG+hlRc924l0h9zHvD0Uu49sXxSy0gRXMeSPp1ebuy1Tougg==","signatures":[{"sig":"MEYCIQDHD0chCbo4qoiBDUMXSyXhwMEEb0ahJkJBJfM5MnHeMAIhALSgFwVgAZ24qcmYfFEC8vilCUgr3II8pg/3d5Pc9R3r","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":73943},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"0000a39c330b88de88addc0e1b54c5508ec92a1e","scripts":{"test":"vitest run","build":"npx tsup","prepare":"node ./scripts/prepare.mjs"},"_npmUser":{"name":"drunken_coder","email":"laraujo123546@gmail.com"},"_npmVersion":"10.8.2","description":"HTTP client for the Atlas Command REST API.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"tsup":"^8.5.1","typescript":"^5.4.5","@types/node":"^24.10.1"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.15"},"_npmOperationalInternal":{"tmp":"tmp/atlas-api-helper_0.2.14_1770946739357_0.5785930622678053","host":"s3://npm-registry-packages-npm-production"}},"0.2.15":{"name":"@atlasnpm/atlas-api-helper","version":"0.2.15","license":"MIT","_id":"@atlasnpm/atlas-api-helper@0.2.15","maintainers":[{"name":"drunken_coder","email":"laraujo123546@gmail.com"}],"dist":{"shasum":"478419761499b970234edcd8338e269c11605775","tarball":"https://registry.npmjs.org/@atlasnpm/atlas-api-helper/-/atlas-api-helper-0.2.15.tgz","fileCount":7,"integrity":"sha512-IkZIVVh8JxhnoZATcNh6iEfVgToJ1BYQPMB05D+qoOTn+aLXoF9aXf20LMW5R8U3xxY3I/sB2HEt/910BVd4WQ==","signatures":[{"sig":"MEYCIQDleQMzpVN15RuR6kye4XxbyKjVZfRjX0h0lLvhC/g9XgIhAPqfvM6t0YYsUo95FCnW82Htde1HrOcyAFVImy6S+T+e","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":74211},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"8e4ffcc43bcd96ad3d0c6b845c63c35be2c630e3","scripts":{"test":"vitest run","build":"npx tsup","prepare":"node ./scripts/prepare.mjs"},"_npmUser":{"name":"drunken_coder","email":"laraujo123546@gmail.com"},"_npmVersion":"10.8.2","description":"HTTP client for the Atlas Command REST API.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"tsup":"^8.5.1","typescript":"^5.4.5","@types/node":"^24.10.1"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.15"},"_npmOperationalInternal":{"tmp":"tmp/atlas-api-helper_0.2.15_1771357300521_0.8179974094700979","host":"s3://npm-registry-packages-npm-production"}},"0.2.18":{"name":"@atlasnpm/atlas-api-helper","version":"0.2.18","license":"MIT","_id":"@atlasnpm/atlas-api-helper@0.2.18","maintainers":[{"name":"drunken_coder","email":"laraujo123546@gmail.com"}],"dist":{"shasum":"dbf46e6d5e6ccc2d1f901cda261c3e7c216ecb51","tarball":"https://registry.npmjs.org/@atlasnpm/atlas-api-helper/-/atlas-api-helper-0.2.18.tgz","fileCount":7,"integrity":"sha512-2aH9AFJnq57kSpxSrWO7QmsZu15G6uvMvaz1RQRKGZirDXqmaq7tpPNkYR0LOvoSVbw6YbW0ALeOepdIDNEfBQ==","signatures":[{"sig":"MEUCIEindekSXJSL5Kgu5NhCoxf7WIVOo0BHU+GYHikR50CrAiEAg2y0xUCUVgHwvUPD669cBrIfnOPOgV0QD3kjTZ1VmX4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":74997},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"f3462547feaa7e6a0f495b466921063b51a01e53","scripts":{"test":"vitest run","build":"npx tsup","prepare":"node ./scripts/prepare.mjs"},"_npmUser":{"name":"drunken_coder","email":"laraujo123546@gmail.com"},"_npmVersion":"10.8.2","description":"HTTP client for the Atlas Command REST API.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"tsup":"^8.5.1","typescript":"^5.4.5","@types/node":"^24.10.1"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.15"},"_npmOperationalInternal":{"tmp":"tmp/atlas-api-helper_0.2.18_1771433149369_0.9351276120033643","host":"s3://npm-registry-packages-npm-production"}},"0.2.19":{"name":"@atlasnpm/atlas-api-helper","version":"0.2.19","license":"MIT","_id":"@atlasnpm/atlas-api-helper@0.2.19","maintainers":[{"name":"drunken_coder","email":"laraujo123546@gmail.com"}],"dist":{"shasum":"587336018c7f4b3ab2930597fc335adb3c60f3f6","tarball":"https://registry.npmjs.org/@atlasnpm/atlas-api-helper/-/atlas-api-helper-0.2.19.tgz","fileCount":7,"integrity":"sha512-wg4/CYdEGJI+o4M8UD69d9Kz1Hg/CnQN8oPUf8kSppTXpjCzBvCjlzv2TexLm3Jg/U1w46hDzrcG/wU+S1W21A==","signatures":[{"sig":"MEUCIDWHdiVoTN+q9q469RCmk0/ISoyc+0Y9xrFcSWQXXq/IAiEAzDikqcMSmkKUZDawdOr5SEEhHl2S0GLPByTnj85rOwY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":75693},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"b55788086f76d5c240077bd86d70255a028d5bb5","scripts":{"test":"vitest run","build":"npx tsup","prepare":"node ./scripts/prepare.mjs"},"_npmUser":{"name":"drunken_coder","email":"laraujo123546@gmail.com"},"_npmVersion":"10.8.2","description":"HTTP client for the Atlas Command REST API.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"tsup":"^8.5.1","typescript":"^5.4.5","@types/node":"^24.10.1"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.15"},"_npmOperationalInternal":{"tmp":"tmp/atlas-api-helper_0.2.19_1771492646396_0.585453385068275","host":"s3://npm-registry-packages-npm-production"}},"0.2.21":{"name":"@atlasnpm/atlas-api-helper","version":"0.2.21","license":"MIT","_id":"@atlasnpm/atlas-api-helper@0.2.21","maintainers":[{"name":"drunken_coder","email":"laraujo123546@gmail.com"}],"dist":{"shasum":"53da23281a0b5067355cff9fcffbfb23b377809a","tarball":"https://registry.npmjs.org/@atlasnpm/atlas-api-helper/-/atlas-api-helper-0.2.21.tgz","fileCount":7,"integrity":"sha512-PVDNof+gWyCLW55CQe9Ay4vCzvdxomdwBuD5zG/R8TJ/nyvDd2QR+XqaDLU53ZgbTDV61OaZlAMw4XXgjOfEZg==","signatures":[{"sig":"MEYCIQDHwYGXd6pl3B9EdeaTilKgAqsG+Ftt7dZfMD7+GnYE1AIhALqwPaGYVhWUIqncGqoKhfSDYvvK33xQxHPwd/PY9j7o","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":75693},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"79ef0c26a689f7c8f67f3035f2badbf11da72cc8","scripts":{"test":"vitest run","build":"npx tsup","prepare":"node ./scripts/prepare.mjs"},"_npmUser":{"name":"drunken_coder","email":"laraujo123546@gmail.com"},"_npmVersion":"10.8.2","description":"HTTP client for the Atlas Command REST API.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"tsup":"^8.5.1","typescript":"^5.4.5","@types/node":"^24.10.1"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.15"},"_npmOperationalInternal":{"tmp":"tmp/atlas-api-helper_0.2.21_1771578889931_0.5241727898788977","host":"s3://npm-registry-packages-npm-production"}},"0.2.23":{"name":"@atlasnpm/atlas-api-helper","version":"0.2.23","license":"MIT","_id":"@atlasnpm/atlas-api-helper@0.2.23","maintainers":[{"name":"drunken_coder","email":"laraujo123546@gmail.com"}],"dist":{"shasum":"a1b35482164e5a4831a7bb94606a8fe8d6137e6d","tarball":"https://registry.npmjs.org/@atlasnpm/atlas-api-helper/-/atlas-api-helper-0.2.23.tgz","fileCount":7,"integrity":"sha512-lLI4jnHAlzeOWO1+7CphFmGLEzu1sbe/a0qVAS7M9W4Ljjl4wDAyjeuc9D3LLv+yIwiSqTc9V/O2sz49yYb5ZQ==","signatures":[{"sig":"MEQCIDDR4LK+Bt4fstbKyAdEynQrAJ9BuBc6LJWdGReJbwskAiAftyBsPC/as+lZvkf9Si5vUiiErYAS05PoGEYy/DfKGg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":75951},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"5c04294070dcfa8991760b1e5f3e3cc08d5fbc44","scripts":{"test":"vitest run","build":"npx tsup","prepare":"node ./scripts/prepare.mjs"},"_npmUser":{"name":"drunken_coder","email":"laraujo123546@gmail.com"},"_npmVersion":"10.8.2","description":"HTTP client for the Atlas Command REST API.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"tsup":"^8.5.1","typescript":"^5.4.5","@types/node":"^24.10.1"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.15"},"_npmOperationalInternal":{"tmp":"tmp/atlas-api-helper_0.2.23_1771605799145_0.3192461464432126","host":"s3://npm-registry-packages-npm-production"}},"0.2.24":{"name":"@atlasnpm/atlas-api-helper","version":"0.2.24","license":"MIT","_id":"@atlasnpm/atlas-api-helper@0.2.24","maintainers":[{"name":"drunken_coder","email":"laraujo123546@gmail.com"}],"dist":{"shasum":"d935472bad1ad13e85498fb72e83d3fd7d4562e3","tarball":"https://registry.npmjs.org/@atlasnpm/atlas-api-helper/-/atlas-api-helper-0.2.24.tgz","fileCount":7,"integrity":"sha512-ThJPbhp2D4pstEFQvqfeLRlqIw4IvPJyYlnehc0SUvi0xESR3PfNx0I/HhWfpHSiAfIJec1O2NZtqWUJjl7yxQ==","signatures":[{"sig":"MEUCIDP7qL0fW3bU4Z1udqE7MoDZg2+uFudCpLVcW7fRDqbbAiEAqfS2hUE2G9ftUTmVbVxDKoFBY9/BAKI6miGvK42+MHM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76221},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"b7f7f22a8f89d23a7d342bea18ff45dcc517bad8","scripts":{"test":"vitest run","build":"npx tsup","prepare":"node ./scripts/prepare.mjs"},"_npmUser":{"name":"drunken_coder","email":"laraujo123546@gmail.com"},"_npmVersion":"10.8.2","description":"HTTP client for the Atlas Command REST API.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"tsup":"^8.5.1","typescript":"^5.4.5","@types/node":"^24.10.1"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.15"},"_npmOperationalInternal":{"tmp":"tmp/atlas-api-helper_0.2.24_1771664926504_0.10355602663065366","host":"s3://npm-registry-packages-npm-production"}},"0.2.25":{"name":"@atlasnpm/atlas-api-helper","version":"0.2.25","license":"MIT","_id":"@atlasnpm/atlas-api-helper@0.2.25","maintainers":[{"name":"drunken_coder","email":"laraujo123546@gmail.com"}],"dist":{"shasum":"341212e3418c481b96fa6224fcc4b2a995fbe06f","tarball":"https://registry.npmjs.org/@atlasnpm/atlas-api-helper/-/atlas-api-helper-0.2.25.tgz","fileCount":7,"integrity":"sha512-pdHo7hy7DiKZN3khgEg3bTKtF8HMH9qUNq/RC524N3vaQVGAmJD+N2cRFrmE8Y6KtFBPgwagkt3AKe8hr6r+dA==","signatures":[{"sig":"MEQCIDwp8bytM3DQ5Yn1nAnDG8ovUm5Ku3uFhyVFRcBI4XjoAiBTZMoVXd7n7RdDL2vPDmIHetTqWHX7RoG59WFoibUZ1g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76221},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"14294985b2e2602da13210e6bee46078b921f4aa","scripts":{"test":"vitest run","build":"npx tsup","prepare":"node ./scripts/prepare.mjs"},"_npmUser":{"name":"drunken_coder","email":"laraujo123546@gmail.com"},"_npmVersion":"10.8.2","description":"HTTP client for the Atlas Command REST API.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"tsup":"^8.5.1","typescript":"^5.4.5","@types/node":"^24.10.1"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.15"},"_npmOperationalInternal":{"tmp":"tmp/atlas-api-helper_0.2.25_1772615669941_0.9972016614053973","host":"s3://npm-registry-packages-npm-production"}},"0.2.26":{"name":"@atlasnpm/atlas-api-helper","version":"0.2.26","type":"module","description":"HTTP client for the Atlas Command REST API.","license":"MIT","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"}},"scripts":{"build":"npx tsup","test":"vitest run","prepare":"node ./scripts/prepare.mjs"},"dependencies":{"@types/node":"^24.10.1","tsup":"^8.5.1","typescript":"^5.4.5"},"devDependencies":{"vitest":"^4.0.15"},"engines":{"node":">=18"},"_id":"@atlasnpm/atlas-api-helper@0.2.26","gitHead":"08cd33047f3ce39dd3717752b96f74ec751ad130","_nodeVersion":"20.20.1","_npmVersion":"10.8.2","dist":{"integrity":"sha512-XEq8ivWfg80/7ZJ9M/3cqKbZyrxvqHHxsWGB25r4t5qMqRv0y42unK+rgeeiFRqQDse7K3dxK4R8t8XzbUYESw==","shasum":"44ace4299d2cdc81cf3f721f418bfa2d402e854a","tarball":"https://registry.npmjs.org/@atlasnpm/atlas-api-helper/-/atlas-api-helper-0.2.26.tgz","fileCount":7,"unpackedSize":119526,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAHSn9WazwsWS5+6f3vQnXtDSxoWbSSfrOv/TWMBzNFPAiEA7sK+tbIUNmXBxBwQ2xKD/VrFqzxKiyespeBsczq6i/Q="}]},"_npmUser":{"name":"drunken_coder","email":"laraujo123546@gmail.com"},"directories":{},"maintainers":[{"name":"drunken_coder","email":"laraujo123546@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/atlas-api-helper_0.2.26_1774257851717_0.7519836734184253"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-01T23:29:12.364Z","modified":"2026-03-23T09:24:11.993Z","0.2.4":"2025-12-01T23:29:12.660Z","0.2.5":"2025-12-02T23:32:00.897Z","0.2.6":"2025-12-05T04:29:48.859Z","0.2.7":"2025-12-05T21:27:39.093Z","0.2.8":"2025-12-05T22:14:11.407Z","0.2.10":"2025-12-11T03:34:11.373Z","0.2.11":"2026-01-11T05:43:26.474Z","0.2.12":"2026-01-18T00:12:26.732Z","0.2.13":"2026-02-05T16:52:23.143Z","0.2.14":"2026-02-13T01:38:59.498Z","0.2.15":"2026-02-17T19:41:40.681Z","0.2.18":"2026-02-18T16:45:49.613Z","0.2.19":"2026-02-19T09:17:26.537Z","0.2.21":"2026-02-20T09:14:50.075Z","0.2.23":"2026-02-20T16:43:19.308Z","0.2.24":"2026-02-21T09:08:46.654Z","0.2.25":"2026-03-04T09:14:30.085Z","0.2.26":"2026-03-23T09:24:11.863Z"},"license":"MIT","description":"HTTP client for the Atlas Command REST API.","maintainers":[{"name":"drunken_coder","email":"laraujo123546@gmail.com"}],"readme":"# Atlas Command HTTP Client (TypeScript)\n\nA TypeScript client for the Atlas Command REST API with full type support for entities, tasks, objects, and queries.\n\n## Installation\n\n```bash\nnpm install @atlasnpm/atlas-api-helper\n```\n\n**Requirements:** Node.js 18+\n\n## Quick Start\n\n```ts\nimport { AtlasHttpClient } from \"@atlasnpm/atlas-api-helper\";\n\nconst client = new AtlasHttpClient({\n  baseUrl: \"http://localhost:8000\",\n  token: \"my-api-token\",  // Optional Bearer token\n});\n\n// Create an entity\nawait client.createEntity(\"drone-01\", \"asset\", \"Demo Drone\", \"drone\", {\n  telemetry: { latitude: 40.7128, longitude: -74.0060 },\n});\n\n// Create a task assigned to the entity\nawait client.createTask(\"task-1\", { parameters: { altitude_m: 120 } }, {\n  entity_id: \"drone-01\",\n});\n\n// Start and complete the task\nawait client.startTask(\"task-1\");\nawait client.completeTask(\"task-1\");\n```\n\n## Client Configuration\n\n```ts\ninterface ClientOptions {\n  baseUrl: string;              // Atlas Command server URL\n  token?: string;               // Optional Bearer token for Authorization header\n  fetchImpl?: FetchImplementation;  // Custom fetch function (defaults to globalThis.fetch)\n}\n```\n\n## Service Operations\n\n```ts\ngetRoot(): Promise<JsonRecord>\ngetHealth(): Promise<JsonRecord>\ngetReadiness(): Promise<JsonRecord>\n```\n\n## Entity Operations\n\n### Creating Entities\n\n```ts\ncreateEntity(\n  entityId: string,\n  entityType: string,  // \"asset\" | \"track\" | \"geofeature\"\n  alias: string,\n  subtype: string,\n  components?: EntityComponents | JsonRecord\n): Promise<Entity>\n```\n\n**Example:**\n```ts\nawait client.createEntity(\"drone-01\", \"asset\", \"Demo Drone\", \"drone\", {\n  telemetry: {\n    latitude: 40.7128,\n    longitude: -74.0060,\n    altitude_m: 120,\n    speed_m_s: 8.2,\n    heading_deg: 165,\n  },\n  health: { battery_percent: 85 },\n  communications: { link_state: \"connected\" },\n});\n```\n\n### Updating Entities\n\n```ts\nupdateEntity(\n  entityId: string,\n  components?: EntityComponents | JsonRecord,\n  options?: { subtype?: string }\n): Promise<Entity>\n```\n\nAt least one of `components` or `options.subtype` must be provided.\n\n**Example:**\n```ts\n// Update components only\nawait client.updateEntity(\"drone-01\", { health: { battery_percent: 72 } });\n\n// Update subtype only\nawait client.updateEntity(\"drone-01\", undefined, { subtype: \"quadcopter\" });\n\n// Update both\nawait client.updateEntity(\"drone-01\", { health: { battery_percent: 72 } }, { subtype: \"quadcopter\" });\n```\n\n### Updating Telemetry\n\nA convenience method for updating only telemetry fields:\n\n```ts\nupdateEntityTelemetry(\n  entityId: string,\n  options: {\n    latitude?: number;\n    longitude?: number;\n    altitude_m?: number;\n    speed_m_s?: number;\n    heading_deg?: number;\n  }\n): Promise<Entity>\n```\n\n**Example:**\n```ts\nawait client.updateEntityTelemetry(\"drone-01\", {\n  latitude: 40.7128,\n  longitude: -74.0060,\n  altitude_m: 100,\n  speed_m_s: 15,\n  heading_deg: 90,\n});\n```\n\n### Other Entity Methods\n\n| Method | Description |\n|--------|-------------|\n| `listEntities(limit?, offset?)` | List entities with pagination (defaults: limit=100, offset=0) |\n| `getEntity(entityId)` | Get entity by ID |\n| `getEntityByAlias(alias)` | Get entity by alias |\n| `checkinEntity(entityId, telemetry, options?)` | Check in an entity and optionally request filtered tasks (`status_filter`, `limit`, `since`, `fields`) |\n| `deleteEntity(entityId)` | Delete an entity |\n\n## Task Operations\n\n### Creating Tasks\n\n```ts\ncreateTask(\n  taskId: string,\n  components?: TaskComponents | JsonRecord,\n  options?: {\n    status?: string;      // Defaults to \"pending\"\n    entity_id?: string;   // Entity to assign the task to\n    extra?: JsonRecord;   // Additional metadata\n  }\n): Promise<Task>\n```\n\n**Example:**\n```ts\nawait client.createTask(\"mission-1\", {\n  parameters: { latitude: 40.123, longitude: -74.456, altitude_m: 120 },\n  progress: { percent: 0, status_detail: \"Pending\" },\n}, {\n  entity_id: \"drone-01\",\n  status: \"pending\",\n});\n```\n\n### Updating Tasks\n\n```ts\nupdateTask(\n  taskId: string,\n  components?: TaskComponents | JsonRecord,\n  options?: {\n    status?: string;\n    entity_id?: string;\n    extra?: JsonRecord;\n  }\n): Promise<Task>\n```\n\nAt least one of `components` or `options` must be provided.\n\n**Example:**\n```ts\nawait client.updateTask(\"mission-1\", {\n  progress: { percent: 50, status_detail: \"En route\" },\n});\n```\n\n### Task Lifecycle Methods\n\n```ts\nstartTask(taskId: string): Promise<Task>\ncompleteTask(taskId: string, result?: JsonRecord): Promise<Task>\ntransitionTaskStatus(\n  taskId: string,\n  status: string,\n  options?: {\n    progress?: number;\n    message?: string;\n    validate?: boolean;  // Deprecated and ignored for one release\n    extra?: JsonRecord;  // Deprecated and ignored for one release\n  }\n): Promise<Task>\nfailTask(taskId: string, errorMessage?: string, errorDetails?: JsonRecord): Promise<Task>\n```\n\n**Example:**\n```ts\nawait client.startTask(\"mission-1\");\n// ... task execution ...\nawait client.completeTask(\"mission-1\", { summary: \"Mission completed successfully\" });\n\n// Explicitly transition to a status\nawait client.transitionTaskStatus(\"mission-2\", \"in_progress\", {\n  progress: 50,\n  message: \"Manual override\",\n});\n\n// Or if the task fails:\nawait client.failTask(\"mission-2\", \"Calibration failed\", { code: \"CAL-01\" });\n```\n\n### Other Task Methods\n\n| Method | Description |\n|--------|-------------|\n| `listTasks(limit?, offset?, status?)` | List tasks (default limit: 25, offset: 0). `status` is deprecated and ignored for one release. |\n| `getTask(taskId)` | Get task by ID |\n| `deleteTask(taskId)` | Delete a task |\n| `getTasksByEntity(entityId, limit?, offset?)` | Get tasks for an entity with optional offset (default: 0) |\n\n## Object Operations\n\n### Uploading Objects\n\n```ts\ncreateObject(\n  file: Blob | File,\n  objectId: string,\n  usageHint?: string,\n  referencedBy?: Array<{ entity_id?: string; task_id?: string }>\n): Promise<StoredObject>\n```\n\n**Example:**\n```ts\nconst videoBlob = new Blob([videoData], { type: \"video/mp4\" });\nconst stored = await client.createObject(videoBlob, \"mission-video\", \"mission_recording\", [\n  { entity_id: \"drone-01\" },\n  { task_id: \"mission-1\" },\n]);\n```\n\n### Creating Object Metadata\n\n```ts\ncreateObjectMetadata(\n  objectId: string,\n  options?: {\n    path?: string;\n    bucket?: string;\n    size_bytes?: number;\n    content_type?: string;\n    type?: string;\n    usage_hints?: string[];\n    referenced_by?: Array<{ entity_id?: string; task_id?: string }>;\n    extra?: JsonRecord;\n  }\n): Promise<StoredObject>\n```\n\n### Viewing Object Content\n\n```ts\nviewObject(objectId: string): Promise<{\n  data: string;\n  contentType?: string;\n  contentLength?: number;\n}>\n```\n\n**Example:**\n```ts\nconst preview = await client.viewObject(\"mission-log\");\nconsole.log(preview.data);\n```\n\n### Updating Object Metadata\n\n```ts\nupdateObject(\n  objectId: string,\n  usageHints?: string[],\n  referencedBy?: Array<{ entity_id?: string; task_id?: string }>,\n  etag?: string,\n): Promise<StoredObject>\n```\n\nAt least one of `usageHints` or `referencedBy` must be provided.\n\n**Example:**\n```ts\nawait client.updateObject(\"mission-video\", [\"final_recording\", \"approved\"], [\n  { task_id: \"mission-1\" },\n]);\n```\n\n### Object Reference Methods\n\n`addObjectReference` / `removeObjectReference` read `referenced_by`, capture the object `ETag`, then PATCH with `If-Match`. If the server returns `412 Precondition Failed`, the client refetches the object, reapplies the merge/filter locally, and retries once so concurrent writers do not silently overwrite each other.\n\n`removeObjectReference` matches **exactly**: both IDs remove only that pair; entity-only removes only refs with that entity and no `task_id`; task-only removes only refs with that task and no `entity_id`.\n\n| Method | Description |\n|--------|-------------|\n| `addObjectReference(objectId, entityId?, taskId?)` | Add reference to entity/task |\n| `removeObjectReference(objectId, entityId?, taskId?)` | Remove reference |\n| `getObjectReferences(objectId)` | Get all references for an object |\n| `validateObjectReferences(objectId)` | Check if references point to existing entities/tasks |\n| `cleanupObjectReferences(objectId)` | Remove references to deleted entities/tasks |\n\n### Other Object Methods\n\n| Method | Description |\n|--------|-------------|\n| `listObjects(limit?, offset?, contentType?, type?, validate?)` | List objects. Deprecated positional filter args are ignored for one release. |\n| `getObject(objectId)` | Get object by ID |\n| `viewObject(objectId)` | Fetch viewable object content inline |\n| `deleteObject(objectId)` | Delete an object |\n| `getObjectsByEntity(entityId, limit?, offset?)` | Get objects referenced by an entity |\n| `getObjectsByTask(taskId, limit?, offset?)` | Get objects referenced by a task |\n| `findOrphanedObjects(limit?)` | Find objects with no references |\n\n## Query Operations\n\n### Changed Since\n\nGet entities, tasks, and objects modified after a timestamp:\n\n```ts\ngetChangedSince(\n  since: string,\n  limitPerType?: number,\n  cursors?: QueryStreamCursors,\n): Promise<ChangedSinceResponse>\n```\n\nIf any `has_more_*` flag is true, use the matching `next_*_cursor` from the response as the corresponding field on `QueryStreamCursors` for the next call (same `since`). Only pass cursors for streams that are still truncated—for example, if `has_more_entities` is true, set `entityCursor` from `next_entity_cursor`; omit or leave unset cursors for streams that are not continued.\n\n**Example:**\n```ts\nconst changes = await client.getChangedSince(\"2025-01-01T00:00:00Z\", 50);\nconst cursors: QueryStreamCursors = {};\nif (changes.has_more_entities) cursors.entityCursor = changes.next_entity_cursor;\nif (changes.has_more_tasks) cursors.taskCursor = changes.next_task_cursor;\nif (changes.has_more_objects) cursors.objectCursor = changes.next_object_cursor;\nif (changes.has_more_deleted_entities)\n  cursors.deletedEntityCursor = changes.next_deleted_entity_cursor;\nif (changes.has_more_deleted_tasks) cursors.deletedTaskCursor = changes.next_deleted_task_cursor;\nif (changes.has_more_deleted_objects)\n  cursors.deletedObjectCursor = changes.next_deleted_object_cursor;\nconst more = await client.getChangedSince(\"2025-01-01T00:00:00Z\", 50, cursors);\n```\n\n### Full Dataset\n\nGet a snapshot of all data with configurable limits:\n\n```ts\ngetFullDataset(options?: FullDatasetOptions): Promise<FullDatasetResponse>\n```\n\n**Example:**\n```ts\nconst snapshot = await client.getFullDataset({\n  entityLimit: 100,\n  taskLimit: 50,\n  objectLimit: 200,\n});\nconst page2 = await client.getFullDataset({\n  entityLimit: 100,\n  entityCursor: snapshot.next_entity_cursor,\n});\n```\n\n## Typed Components\n\nThe client provides type-safe interfaces for entity and task components. Use these to get IDE autocomplete and compile-time validation.\n\n### Entity Components\n\n```ts\nimport type { EntityComponents, TelemetryComponent } from \"@atlasnpm/atlas-api-helper\";\n\nconst components: EntityComponents = {\n  telemetry: {\n    latitude: 40.7128,      // degrees (WGS84)\n    longitude: -74.0060,    // degrees (WGS84)\n    altitude_m: 120,        // meters above sea level\n    speed_m_s: 8.2,         // horizontal speed in m/s\n    heading_deg: 165,       // heading (0=N, 90=E)\n  },\n  geometry: {\n    type: \"Point\",          // \"Point\" | \"LineString\" | \"Polygon\"\n    coordinates: [-74.0060, 40.7128],\n  },\n  health: {\n    battery_percent: 85,\n  },\n  communications: {\n    link_state: \"connected\",  // \"connected\" | \"disconnected\" | \"degraded\" | \"unknown\"\n  },\n  task_catalog: {\n    supported_tasks: [\"move_to_location\", \"survey_grid\"],\n  },\n  task_queue: {\n    current_task_id: \"mission-1\",\n    queued_task_ids: [\"mission-2\", \"mission-3\"],\n  },\n  mil_view: {\n    classification: \"friendly\",  // \"friendly\" | \"hostile\" | \"neutral\" | \"unknown\" | \"civilian\"\n    last_seen: \"2025-12-01T10:30:00Z\",\n  },\n  media_refs: [\n    { object_id: \"video-001\", role: \"camera_feed\" },\n  ],\n  sensor_refs: [\n    { sensor_id: \"radar-1\", type: \"radar\", horizontal_fov: 120 },\n  ],\n};\n```\n\n### Task Components\n\n```ts\nimport type { TaskComponents } from \"@atlasnpm/atlas-api-helper\";\n\nconst taskComponents: TaskComponents = {\n  parameters: {\n    latitude: 40.123,\n    longitude: -74.456,\n    altitude_m: 120,\n    // Additional custom parameters are allowed\n    speed_limit: 25,\n  },\n  progress: {\n    percent: 65,\n    updated_at: \"2025-12-01T08:45:00Z\",\n    status_detail: \"En route to destination\",\n  },\n};\n```\n\n### Custom Components\n\nCustom components must be prefixed with `custom_`:\n\n```ts\nconst components: EntityComponents = {\n  telemetry: { latitude: 40.7128 },\n  custom_weather: { wind_speed: 12, gusts: 18 },\n  custom_mission_data: { priority: \"high\" },\n};\n```\n\n### Component Validation\n\nThe client validates entity component keys before sending requests. Unknown keys that don't start with `custom_` will throw an error:\n\n```ts\n// This will throw: \"Unknown component 'unknown_key'...\"\nawait client.createEntity(\"test\", \"asset\", \"Test\", \"drone\", {\n  unknown_key: { foo: \"bar\" },\n});\n\n// This works - prefixed with custom_\nawait client.createEntity(\"test\", \"asset\", \"Test\", \"drone\", {\n  custom_mydata: { foo: \"bar\" },\n});\n```\n\n## Error Handling\n\nAll methods throw an `Error` on non-2xx responses. The error message includes the HTTP status and response body:\n\n```ts\ntry {\n  await client.getEntity(\"nonexistent\");\n} catch (error) {\n  // Error: HTTP 404: {\"detail\":\"Entity not found\",\"code\":\"ENTITY_NOT_FOUND\"}\n  console.error(error.message);\n}\n```\n\nFor 204 No Content responses (like successful deletes), methods return `undefined`.\n\n## TypeScript Types\n\nThe package exports comprehensive types for all API resources:\n\n```ts\nimport type {\n  // Core types\n  Entity,\n  Task,\n  StoredObject,\n  \n  // Entity aliases\n  Asset,\n  Track,\n  GeoFeature,\n  Command,\n  \n  // Component types\n  EntityComponents,\n  TaskComponents,\n  TelemetryComponent,\n  GeometryComponent,\n  HealthComponent,\n  CommunicationsComponent,\n  TaskCatalogComponent,\n  TaskQueueComponent,\n  MilViewComponent,\n  MediaRefItem,\n  SensorRefItem,\n  TaskParametersComponent,\n  TaskProgressComponent,\n  \n  // Object types\n  ObjectMetadata,\n  ObjectReferenceItem,\n  ObjectReference,\n  ObjectCreate,\n  ObjectUpdate,\n  \n  // Task lifecycle\n  TaskStatusUpdate,\n  TaskStart,\n  TaskComplete,\n  TaskFail,\n  Telemetry,\n  \n  // Other entity types\n  Model,\n  CommandDefinition,\n  EventType,\n  Event,\n  Sensor,\n  TrackTelemetry,\n  \n  // Query types\n  ChangedSinceOptions,\n  FullDatasetOptions,\n  \n  // Client types\n  ClientOptions,\n  FetchImplementation,\n  JsonRecord,\n} from \"@atlasnpm/atlas-api-helper\";\n```\n\n### Utility Functions\n\n```ts\nimport { validateEntityComponents, componentsToRecord } from \"@atlasnpm/atlas-api-helper\";\n\n// Validate component keys (throws on unknown non-custom keys)\nvalidateEntityComponents({ telemetry: {}, custom_data: {} });\n\n// Convert components to plain object, stripping null/undefined values\nconst cleaned = componentsToRecord({ telemetry: { latitude: 40.7, altitude_m: undefined } });\n// Result: { telemetry: { latitude: 40.7 } }\n```\n\n## Custom Fetch / Testing\n\nPass a custom `fetchImpl` when constructing the client to inject your own transport (e.g., `node-fetch`, `cross-fetch`, or a mocked implementation for unit tests):\n\n```ts\nconst client = new AtlasHttpClient({\n  baseUrl: \"https://atlas.example.com\",\n  fetchImpl: myCustomFetch,\n});\n```\n\nSee `tests/httpClient.test.ts` for examples using mocked fetch functions.\n\n## Building & Testing\n\n```bash\nnpm install\nnpm run build\nnpm run test\n```\n\nThe build produces both ESM and CJS bundles plus `.d.ts` type definitions via `tsup`.\n\n## Publishing\n\nPublishing is handled by `.github/workflows/publish-atlas-api-helper-npm.yml`. Ensure the `@atlasnpm` scope and automation token are set up as documented in the workflow README before triggering a release.\n","readmeFilename":"README.md"}