{"_id":"@superbuilders/primer-tives","_rev":"53-017457bfea5d7cfaf041daeb2ca968b5","name":"@superbuilders/primer-tives","dist-tags":{"latest":"11.0.0"},"versions":{"0.0.1":{"name":"@superbuilders/primer-tives","version":"0.0.1","_id":"@superbuilders/primer-tives@0.0.1","maintainers":[{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"4489f3c6bcf0d1f19e24594f39dc8f001e11326a","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-0.0.1.tgz","fileCount":22,"integrity":"sha512-Uwv5YeRehGW4N5YTZOQqxB5mLow5WL1r01PpqGKb3KYNKrcg/nM1l+8Xn7UptwekRp0/nCq2XQnOvmVb8xtZMw==","signatures":[{"sig":"MEUCIGPNf3mLZOVoBc3fDbfdZVjjXFZa4Q1e2WTC4Sl8zr9AAiEAporRD4SdOH/uyAQyWk24WRVAJvJZR5Q6b6CsYmBbjRA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":79149},"type":"module","shasum":"4489f3c6bcf0d1f19e24594f39dc8f001e11326a","exports":{"./pci":{"types":"./dist/pci.d.ts","import":"./dist/pci.js"},"./types":{"types":"./dist/types.d.ts","import":"./dist/types.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js"},"./content":{"types":"./dist/content.d.ts","import":"./dist/content.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-Uwv5YeRehGW4N5YTZOQqxB5mLow5WL1r01PpqGKb3KYNKrcg/nM1l+8Xn7UptwekRp0/nCq2XQnOvmVb8xtZMw==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@superbuilders/errors":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_0.0.1_1775009274971_0.4207332322380415","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@superbuilders/primer-tives","version":"0.0.2","_id":"@superbuilders/primer-tives@0.0.2","maintainers":[{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"39ac836a2554e362f08784ec94328b3061aa768c","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-0.0.2.tgz","fileCount":22,"integrity":"sha512-pr5jWQ6cgHc8C93dvXNc1aEXrUlqraQuIbYDxiw5MMAGeo8C1rs5w+Mnv1BcESyV+dUuoJ+1l6yT0H1oDIIbPA==","signatures":[{"sig":"MEYCIQDvn9sTBTUc1fAvxiEYS/bWbBMftVoJoh8+Nr6ETMRBNgIhAIJVcnDniVHgxc8WwkXz2hGMXA2jPGt8ivLAbuC9e+D4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":79164},"type":"module","shasum":"39ac836a2554e362f08784ec94328b3061aa768c","exports":{"./pci":{"types":"./dist/pci.d.ts","import":"./dist/pci.js"},"./types":{"types":"./dist/types.d.ts","import":"./dist/types.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js"},"./content":{"types":"./dist/content.d.ts","import":"./dist/content.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-pr5jWQ6cgHc8C93dvXNc1aEXrUlqraQuIbYDxiw5MMAGeo8C1rs5w+Mnv1BcESyV+dUuoJ+1l6yT0H1oDIIbPA==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@superbuilders/errors":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_0.0.2_1775009446852_0.8788254840440546","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@superbuilders/primer-tives","version":"0.0.3","_id":"@superbuilders/primer-tives@0.0.3","maintainers":[{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"f06003ffcff60804c0efc9630ce33c8286c0bf99","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-0.0.3.tgz","fileCount":22,"integrity":"sha512-gbZwKJ50IVoGoSMFyPPceIqNffCrtBwzzsLKYmX1DREW8dvHaHlO5eEmOfAgxHCKTlnqhEIZZO+88oexSBZsdA==","signatures":[{"sig":"MEQCIAZt8UT+MPX+nz8eV29wcEii0hxLUwZaOsdF8htdA57FAiBt8CvpFYdgU5H1ZQVkoNgStBS7DFyq2LI+cDcztUccMA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":81434},"type":"module","shasum":"f06003ffcff60804c0efc9630ce33c8286c0bf99","exports":{"./pci":{"types":"./dist/pci.d.ts","import":"./dist/pci.js"},"./types":{"types":"./dist/types.d.ts","import":"./dist/types.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js"},"./content":{"types":"./dist/content.d.ts","import":"./dist/content.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-gbZwKJ50IVoGoSMFyPPceIqNffCrtBwzzsLKYmX1DREW8dvHaHlO5eEmOfAgxHCKTlnqhEIZZO+88oexSBZsdA==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@superbuilders/errors":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_0.0.3_1775068310118_0.16414570206551815","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@superbuilders/primer-tives","version":"0.0.4","_id":"@superbuilders/primer-tives@0.0.4","maintainers":[{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"f0b6833048b7b5e259092f200b373dd78dbb92ff","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-0.0.4.tgz","fileCount":36,"integrity":"sha512-xmlIELPDPKM4V77Xi6P0Tt4rn6/xQPXJ0z9SpjnIklObjfJHlMcePZ01Eu6C+GRRZUJeGgox0gE/RoohYsMroQ==","signatures":[{"sig":"MEUCIQDP6XBV8afr4A/nMnMMUj7+YdmQzttytHsmLfH1vn3p/AIgWZFCIdvwGVSsGP1Ee+cYDS+BUQf3zgQutP0VSXd6ghY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":107658},"type":"module","shasum":"f0b6833048b7b5e259092f200b373dd78dbb92ff","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-xmlIELPDPKM4V77Xi6P0Tt4rn6/xQPXJ0z9SpjnIklObjfJHlMcePZ01Eu6C+GRRZUJeGgox0gE/RoohYsMroQ==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@superbuilders/errors":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_0.0.4_1775074494605_0.9323668379417547","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@superbuilders/primer-tives","version":"0.0.5","_id":"@superbuilders/primer-tives@0.0.5","maintainers":[{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"271d0962b306c40cb6f86ffbe7e007db4ec159a5","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-0.0.5.tgz","fileCount":36,"integrity":"sha512-R9AHcjdG6MWbYrYd70UYcCkIvIbfTQ8NaoRR/4M8eJF7AOMgZMQnXW4JENwG/y8pGctnMC7tqJL4MA33B94V6A==","signatures":[{"sig":"MEUCIQCD4iJ9OF7tH210HGjPU//HqTw1yTaHa6aEuciFhC3ZBAIgWT8BFZjTlBHpfQ05U646d8lvavkQp8Wlp3AYnly0F8w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":105925},"type":"module","shasum":"271d0962b306c40cb6f86ffbe7e007db4ec159a5","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-R9AHcjdG6MWbYrYd70UYcCkIvIbfTQ8NaoRR/4M8eJF7AOMgZMQnXW4JENwG/y8pGctnMC7tqJL4MA33B94V6A==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@superbuilders/errors":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_0.0.5_1775076673744_0.9678485046511185","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"@superbuilders/primer-tives","version":"0.0.6","_id":"@superbuilders/primer-tives@0.0.6","maintainers":[{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"690894af7d2c34ff04a4a391d1674865a1e027ab","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-0.0.6.tgz","fileCount":36,"integrity":"sha512-IcRuO3ARq1k0ip4FKy6v/RdImFGB7L71/nu1dpiRexTgU6RgOPOHnyFYmrUlQrFd2EPqu56lhN1Uk9/vMHNrOA==","signatures":[{"sig":"MEUCIByQe+0acvln8JEVJInC1s/VdaI1H3Fcg9Bor56+Sj4iAiEAxMZAjftwhFXLFAvwpJK3WB3drONFw8p+JksAjhhY17Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":108246},"type":"module","shasum":"690894af7d2c34ff04a4a391d1674865a1e027ab","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-IcRuO3ARq1k0ip4FKy6v/RdImFGB7L71/nu1dpiRexTgU6RgOPOHnyFYmrUlQrFd2EPqu56lhN1Uk9/vMHNrOA==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@superbuilders/errors":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_0.0.6_1775082511814_0.3337265062200243","host":"s3://npm-registry-packages-npm-production"}},"0.0.7":{"name":"@superbuilders/primer-tives","version":"0.0.7","_id":"@superbuilders/primer-tives@0.0.7","maintainers":[{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"5ad6d0a2c867e7486ffe66c00f9f8bcf414c3995","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-0.0.7.tgz","fileCount":36,"integrity":"sha512-cl7roRqARFWIqVh0uLTpTX3AgvkXnjAtgSHzBOtg+FuHOhQmrrAAPRfK4b2WlZis5v74WS22mmQwc4ZDEivgAA==","signatures":[{"sig":"MEYCIQCRKvFuP1p8i4UEmn4Cl71i6Hp/NV1QjzNEakn8Q2M3xAIhAPUEytf8ZUKqdRGYSeu0YwyJRnq7O7dAwtvSo1vWKqbI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":108818},"type":"module","shasum":"5ad6d0a2c867e7486ffe66c00f9f8bcf414c3995","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-cl7roRqARFWIqVh0uLTpTX3AgvkXnjAtgSHzBOtg+FuHOhQmrrAAPRfK4b2WlZis5v74WS22mmQwc4ZDEivgAA==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@superbuilders/errors":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_0.0.7_1775090119556_0.29401386532030904","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@superbuilders/primer-tives","version":"0.1.0","_id":"@superbuilders/primer-tives@0.1.0","maintainers":[{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"e4b94b59b249ffbb8bb4d5dd80b68b5cdea136fa","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-0.1.0.tgz","fileCount":36,"integrity":"sha512-Gqt6fLMlKsSqafVnDAPtsRsqFr9qjD04RrLi++N7TbXCUsJO8KBb3iVUfsvm2T1jJTPFBd3vm7ak7NBia6vBUQ==","signatures":[{"sig":"MEYCIQCqYBNR4mrEdFLaWZS8Ppr8yCYY1ztm9kFLLUkVboN17QIhALURETnffxPD+C+H0IvPam0U6F54wkErvyVcQLBK2shX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":108523},"type":"module","shasum":"e4b94b59b249ffbb8bb4d5dd80b68b5cdea136fa","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-Gqt6fLMlKsSqafVnDAPtsRsqFr9qjD04RrLi++N7TbXCUsJO8KBb3iVUfsvm2T1jJTPFBd3vm7ak7NBia6vBUQ==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@superbuilders/errors":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_0.1.0_1775236599101_0.5683804604800435","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@superbuilders/primer-tives","version":"0.2.0","_id":"@superbuilders/primer-tives@0.2.0","maintainers":[{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"939536ed56f3ce31dbbb7ab4a3f41ceb20d48174","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-0.2.0.tgz","fileCount":38,"integrity":"sha512-65xT1VP3co/W8yNfawGa7cE8TOnJyX6WSfTI7sL5aWw/jUqrR/3rBgc9uGmk4qSriDj6/biYNlJCQ5pBundTUQ==","signatures":[{"sig":"MEQCICuKFL/+7ggLMLljxUTxuGtMx7TQiBt+5mzAvryF1U/CAiAdjz2hSdQ/o66f6Kd1ja5jyKepecXimaT9LRx/HsS4fQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":110454},"type":"module","shasum":"939536ed56f3ce31dbbb7ab4a3f41ceb20d48174","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-65xT1VP3co/W8yNfawGa7cE8TOnJyX6WSfTI7sL5aWw/jUqrR/3rBgc9uGmk4qSriDj6/biYNlJCQ5pBundTUQ==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@superbuilders/errors":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_0.2.0_1775242840328_0.22571197508495122","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@superbuilders/primer-tives","version":"0.3.0","_id":"@superbuilders/primer-tives@0.3.0","maintainers":[{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"caf52636f6a72d3d3a7b0f283df956d18a9385d5","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-0.3.0.tgz","fileCount":36,"integrity":"sha512-Ip6d032yeiO9SI3RSnbl5OoywUIIKNZH7QiIuMj5oCmJJRrY6g+tzOP0IJfWOGaIVm8j/YNeie9r/N43rAITGg==","signatures":[{"sig":"MEYCIQDyxJoYyklZKsvvYq0Kppve050GKb5tsK3BTr7o/BTO5wIhAJdb+iyMlVXuwfO2DimWExmu+Rw55TeeD2VBQxQzObpO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":105783},"type":"module","shasum":"caf52636f6a72d3d3a7b0f283df956d18a9385d5","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-Ip6d032yeiO9SI3RSnbl5OoywUIIKNZH7QiIuMj5oCmJJRrY6g+tzOP0IJfWOGaIVm8j/YNeie9r/N43rAITGg==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@superbuilders/errors":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_0.3.0_1775269062435_0.7343727728008178","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@superbuilders/primer-tives","version":"0.3.1","_id":"@superbuilders/primer-tives@0.3.1","maintainers":[{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"0a722e8bca14b56daa88dd80ffba3ea30749d3b5","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-0.3.1.tgz","fileCount":40,"integrity":"sha512-UeTAHT/W1lEczqTfykkZZJwEhSPaN7nfPDzoCV/7fg6AZnZ8/mz99JnB8QAGmDH3y2FYICDLKRe7nLmF7XZnsA==","signatures":[{"sig":"MEUCIQCz5ImTfGjY8Mntnm8xPZn238vTW54xXQsoFmj7acZozAIgSqHpevgxaL86S0d4N3cgij+U45zSTEBbFC+jee1YEgk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":135220},"type":"module","shasum":"0a722e8bca14b56daa88dd80ffba3ea30749d3b5","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-UeTAHT/W1lEczqTfykkZZJwEhSPaN7nfPDzoCV/7fg6AZnZ8/mz99JnB8QAGmDH3y2FYICDLKRe7nLmF7XZnsA==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@superbuilders/errors":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_0.3.1_1775658233354_0.3045062807067884","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@superbuilders/primer-tives","version":"0.3.2","_id":"@superbuilders/primer-tives@0.3.2","maintainers":[{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"7cafa4c5a6998b502315fd0e553cb2f17bc12804","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-0.3.2.tgz","fileCount":40,"integrity":"sha512-TcsUnVtxaT2Pf5V7juA2d2cY/oauM7D7CQZPfH7jg7jDtHc4iYolJ/21kji7jZRzfx7wFkr7PQjfM3E/etAsmw==","signatures":[{"sig":"MEUCIQCyswewLPlbrcfSswBNwrz+bV9A3sWncgvRniITFn9p+wIgYDot0rZJwkRfhcgnZW5pXKxnI2Zig1Fu/DuQ2bXvE7I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":135220},"type":"module","shasum":"7cafa4c5a6998b502315fd0e553cb2f17bc12804","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-TcsUnVtxaT2Pf5V7juA2d2cY/oauM7D7CQZPfH7jg7jDtHc4iYolJ/21kji7jZRzfx7wFkr7PQjfM3E/etAsmw==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@superbuilders/errors":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_0.3.2_1775852601646_0.8498201761398512","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@superbuilders/primer-tives","version":"0.4.0","_id":"@superbuilders/primer-tives@0.4.0","maintainers":[{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"78f103561e752fba1f5a538e59e63c5a4e473866","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-0.4.0.tgz","fileCount":40,"integrity":"sha512-neoA8qL/KeZ/vDcE8DffzCWyPAAlh442fhaV7FWTUQCBzKUGA5z7VM/mf98+sYv3rdUvCYHiSQDiSEHJCIndyg==","signatures":[{"sig":"MEUCIQDwJjxjRtXi/qkWUSs62mZlavQ9PGNLeja4cfJwGOG+mAIgHoClzGywca6h8kX2BEVvFMox5BLdbRk6vPxbiSgAkvc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":135869},"type":"module","shasum":"78f103561e752fba1f5a538e59e63c5a4e473866","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-neoA8qL/KeZ/vDcE8DffzCWyPAAlh442fhaV7FWTUQCBzKUGA5z7VM/mf98+sYv3rdUvCYHiSQDiSEHJCIndyg==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@superbuilders/errors":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_0.4.0_1776292055968_0.5356141475494334","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@superbuilders/primer-tives","version":"0.5.0","_id":"@superbuilders/primer-tives@0.5.0","maintainers":[{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"beec3cd66beebc7312d43375fb5606123e2263f4","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-0.5.0.tgz","fileCount":40,"integrity":"sha512-Fz5AuxeQtxCtoZYxAm+EA/4NMzwt+Ro8OlVm32UbAFQzNRMReFoXQjPuUM3DjfVscCAe8qHrEhp0oXD5k6O+kA==","signatures":[{"sig":"MEQCIEgFmnZumCB5ob2LOAs9CWw24fMCoYpO2gZCpWa7BXV+AiBotfCKg3+wUxMN95uwcZvp8GWkjnrqCldF3ZFBPfBGDQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":165363},"type":"module","shasum":"beec3cd66beebc7312d43375fb5606123e2263f4","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-Fz5AuxeQtxCtoZYxAm+EA/4NMzwt+Ro8OlVm32UbAFQzNRMReFoXQjPuUM3DjfVscCAe8qHrEhp0oXD5k6O+kA==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@superbuilders/errors":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_0.5.0_1776385800190_0.2332091471614326","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@superbuilders/primer-tives","version":"0.6.0","_id":"@superbuilders/primer-tives@0.6.0","maintainers":[{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"f4a4efc960e79a3c17725424d7e8855b833cfdc0","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-0.6.0.tgz","fileCount":42,"integrity":"sha512-mFMLr2SChYJ5TTVrANo5ERXsaGc+tqQw4fVh/T86jGuYMFFp5rxNH/LlXcM/mIZyK9CCv7BnRDDH/+sdT+BCLA==","signatures":[{"sig":"MEUCIQDGSIRdoXbxk/0Y2nWaWB7CYKhnJzjvFqS5B+rIUitXYgIgdRHwRvjc3xRyypdvYTZYEqj9xdXFDlyFHCQyz8Yv1M4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":177697},"type":"module","shasum":"f4a4efc960e79a3c17725424d7e8855b833cfdc0","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-mFMLr2SChYJ5TTVrANo5ERXsaGc+tqQw4fVh/T86jGuYMFFp5rxNH/LlXcM/mIZyK9CCv7BnRDDH/+sdT+BCLA==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@superbuilders/errors":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_0.6.0_1776477313452_0.3456996711493887","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@superbuilders/primer-tives","version":"0.8.0","_id":"@superbuilders/primer-tives@0.8.0","maintainers":[{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"eae34fc94220f503d83b783c29e47528e0e333cf","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-0.8.0.tgz","fileCount":56,"integrity":"sha512-PebRKy12iTdwVlJo8tDYrvDtNnALCSljEV5f9CbVsAuSSgoHGCowruxvWnoG/Rc7KwZ3mGDoqFdF0frZfVzBgQ==","signatures":[{"sig":"MEQCIDi3/048dUvQAImVWUfwbh2IEKKGtk65cEC8Xg72mctbAiAKdoP8JZIjFRPVrUIdotqTflY0f1916A8pBNpxeHgRQA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":204950},"type":"module","shasum":"eae34fc94220f503d83b783c29e47528e0e333cf","exports":{"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-PebRKy12iTdwVlJo8tDYrvDtNnALCSljEV5f9CbVsAuSSgoHGCowruxvWnoG/Rc7KwZ3mGDoqFdF0frZfVzBgQ==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@superbuilders/errors":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_0.8.0_1776480471187_0.4339359869998807","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"@superbuilders/primer-tives","version":"0.8.1","_id":"@superbuilders/primer-tives@0.8.1","maintainers":[{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"9219358cb561bcdb7546efeca64f1fbe42bc65d3","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-0.8.1.tgz","fileCount":56,"integrity":"sha512-gdoyDAaQ4I9qoIVow1JbU/I9Ku4KHwYml0vFAgcdZxcHYDgK8ueMP26LORjHVlq8NEzIuBp0MamsM9CKGI66dA==","signatures":[{"sig":"MEUCIQDsl47jQmrjIFRLGP+nqQWGc9v8gM3KndizGFB3duyrBwIgAKbzd0xX1OmZv8Eh5GiM1XHzMcOyJ89qkhGnU7kuQrI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":204956},"type":"module","shasum":"9219358cb561bcdb7546efeca64f1fbe42bc65d3","exports":{"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-gdoyDAaQ4I9qoIVow1JbU/I9Ku4KHwYml0vFAgcdZxcHYDgK8ueMP26LORjHVlq8NEzIuBp0MamsM9CKGI66dA==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@superbuilders/errors":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_0.8.1_1776481001625_0.5286434387062118","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@superbuilders/primer-tives","version":"0.9.0","_id":"@superbuilders/primer-tives@0.9.0","maintainers":[{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"d2b32aa951b76f42ca42d6d0aff8c51603225985","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-0.9.0.tgz","fileCount":56,"integrity":"sha512-VTtWA4N8Nzl4YxMj8FPKsPs5cIrxJ3LYLFpjVvseLVGP/fGh0xiQhroa/dexDDDW+vRYOFvMdk8BC91cISl84Q==","signatures":[{"sig":"MEQCIF3gATPDEeD8fvivlwjbMV9LTpaBC6t+khdTFNePYy5AAiBCjrfYYW2N6xuVJFbRZv75mQR8mJywh9sLAN4LN72sEw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":202986},"type":"module","shasum":"d2b32aa951b76f42ca42d6d0aff8c51603225985","exports":{"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-VTtWA4N8Nzl4YxMj8FPKsPs5cIrxJ3LYLFpjVvseLVGP/fGh0xiQhroa/dexDDDW+vRYOFvMdk8BC91cISl84Q==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@superbuilders/errors":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_0.9.0_1776731559907_0.9729288289585145","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@superbuilders/primer-tives","version":"1.0.0","_id":"@superbuilders/primer-tives@1.0.0","maintainers":[{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"de8a6b4c7ab255a8639107068136cd89cfd696d7","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-1.0.0.tgz","fileCount":58,"integrity":"sha512-ijO3ndQujSllprVAGpV2DBIrXRB8AvaT9QJ3oZbc89RtWuBWWtt2MZPqOss/Gsgc8h0fKVrMXKVXw59puDUP5A==","signatures":[{"sig":"MEUCIQCzzVPRd9Zfjaa6RZ2o/8ejDJ2eBiDgp83Ixwmg8K4rYAIgPz5tWKaEDGQu8L6dVmSRiKuzN5dkOOpn1vFzMKuvCPs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":235316},"type":"module","shasum":"de8a6b4c7ab255a8639107068136cd89cfd696d7","exports":{"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-ijO3ndQujSllprVAGpV2DBIrXRB8AvaT9QJ3oZbc89RtWuBWWtt2MZPqOss/Gsgc8h0fKVrMXKVXw59puDUP5A==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@superbuilders/errors":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_1.0.0_1776925356688_0.7534939469287447","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@superbuilders/primer-tives","version":"1.1.0","_id":"@superbuilders/primer-tives@1.1.0","maintainers":[{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"08e3a3747b33620870270a33c33d65afc1fed2bf","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-1.1.0.tgz","fileCount":70,"integrity":"sha512-zGN6yZgsjclPALk5krrvl1vd3vG52Z4wXyq/qM4MimHte73plpdz3WmJWC4ZficsVaUe/goAOG4JZNuk1EfQyQ==","signatures":[{"sig":"MEQCIASfUeUpK1b6MYoRwBv7CaFA11aDhb24ci3P2QluIr9/AiAIA9Atefo7AJFKtgUg3Gm3HsfW5VTVzzcsnJ1kQ024pQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":304290},"type":"module","types":"./dist/index.d.ts","shasum":"08e3a3747b33620870270a33c33d65afc1fed2bf","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js"},"./contracts":{"types":"./dist/contracts/index.d.ts","import":"./dist/contracts/index.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-zGN6yZgsjclPALk5krrvl1vd3vG52Z4wXyq/qM4MimHte73plpdz3WmJWC4ZficsVaUe/goAOG4JZNuk1EfQyQ==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.3.6","@superbuilders/errors":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_1.1.0_1777062340079_0.21868571643608625","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@superbuilders/primer-tives","version":"1.1.1","_id":"@superbuilders/primer-tives@1.1.1","maintainers":[{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"73de5b9e0e8b0c5177721f0331df88c040e5ea0d","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-1.1.1.tgz","fileCount":74,"integrity":"sha512-FdI2M8NI6DT4laX/4ZlQyIaF/BFJ8JbFS7Z8IonpqA4ZwcZrmQk7pbZd6K/ST3k4/2kiAMvvp++eT+hvLrIc6g==","signatures":[{"sig":"MEUCIQCzx2BXfOARW/Y/4xfq37i7xow3LFeNxB8XIRaLJ0DLlgIgdZVL0F+zLtS9+ThoamYA9S/OVoK2XqpJ692ys5SwSA0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":350026},"type":"module","types":"./dist/index.d.ts","shasum":"73de5b9e0e8b0c5177721f0331df88c040e5ea0d","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js"},"./contracts":{"types":"./dist/contracts/index.d.ts","import":"./dist/contracts/index.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-FdI2M8NI6DT4laX/4ZlQyIaF/BFJ8JbFS7Z8IonpqA4ZwcZrmQk7pbZd6K/ST3k4/2kiAMvvp++eT+hvLrIc6g==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.3.6","@superbuilders/errors":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_1.1.1_1777063868741_0.02500198052009117","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@superbuilders/primer-tives","version":"1.1.2","_id":"@superbuilders/primer-tives@1.1.2","maintainers":[{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"843a24259413dc5e41e2ec899b985b2bec3aeab8","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-1.1.2.tgz","fileCount":2,"integrity":"sha512-1O3paKcXQs8nOnnO4ZEVvWv/QH0QSdCRMgPqpPGVClpdAbGi42ZK9l4y7iRNPAHs+k5M6DLYZjdMCwRHczoTqg==","signatures":[{"sig":"MEQCICtD7LcRg8m+70XbgmXdQ6PJuuMFi6yTGz485Ok+XBFSAiBkyKk5dEz79aOG+68T34JpBwvNj7zaiIof+sPmOa5ILw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24147},"type":"module","types":"./dist/index.d.ts","shasum":"843a24259413dc5e41e2ec899b985b2bec3aeab8","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js"},"./contracts":{"types":"./dist/contracts/index.d.ts","import":"./dist/contracts/index.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-1O3paKcXQs8nOnnO4ZEVvWv/QH0QSdCRMgPqpPGVClpdAbGi42ZK9l4y7iRNPAHs+k5M6DLYZjdMCwRHczoTqg==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.3.6","@superbuilders/errors":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_1.1.2_1777065217792_0.06125738416146165","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@superbuilders/primer-tives","version":"1.1.3","_id":"@superbuilders/primer-tives@1.1.3","maintainers":[{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"731dd21d97451050d06ce155f9bd31721569ef09","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-1.1.3.tgz","fileCount":74,"integrity":"sha512-CkyyDFzL20whfldPB9UApUjlKAtwmJLG4XCYuETdOWgJfYHqnV+k3GjFAqBkzD8XU+QrEzOVP/LqnIxtVFYKTQ==","signatures":[{"sig":"MEUCIFIE/BD/MvBWMbAuRvWNRvjNsHHct5m9GIUjZ95DT1yJAiEAvqkM0jxD8/FDKjangdKO0aJR9fSFmKi6rFEMAmvPKSI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":335797},"type":"module","types":"./dist/index.d.ts","shasum":"731dd21d97451050d06ce155f9bd31721569ef09","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js"},"./contracts":{"types":"./dist/contracts/index.d.ts","import":"./dist/contracts/index.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit","prepublishOnly":"bun run build.ts"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-CkyyDFzL20whfldPB9UApUjlKAtwmJLG4XCYuETdOWgJfYHqnV+k3GjFAqBkzD8XU+QrEzOVP/LqnIxtVFYKTQ==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.3.6","@superbuilders/errors":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_1.1.3_1777066288465_0.8404275477704493","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"name":"@superbuilders/primer-tives","version":"1.1.4","_id":"@superbuilders/primer-tives@1.1.4","maintainers":[{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"8b04cb4676279f41d0e817044963f2808219a33e","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-1.1.4.tgz","fileCount":78,"integrity":"sha512-+M837l4DY1D39sqS0kzDKALvZup87J32tpuYlkO27GPMkRGayIY5+B4Hej9yD5UxnLE8MizM9/i0kHfG5GrcfQ==","signatures":[{"sig":"MEUCIAeRcnXvS1S761sCCyd/Dbu5g3YA4ZTIu+/JZ287u3J7AiEAhpvNhLxpzVBQvfAKg9OETuz1dd7FyKOKuxPnOlD7OA4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":304665},"type":"module","shasum":"8b04cb4676279f41d0e817044963f2808219a33e","exports":{"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js"},"./subject":{"types":"./dist/subject.d.ts","import":"./dist/subject.js"},"./contracts":{"types":"./dist/contracts/index.d.ts","import":"./dist/contracts/index.js"},"./grade-level":{"types":"./dist/grade-level.d.ts","import":"./dist/grade-level.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit","prepublishOnly":"bun run build.ts"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-+M837l4DY1D39sqS0kzDKALvZup87J32tpuYlkO27GPMkRGayIY5+B4Hej9yD5UxnLE8MizM9/i0kHfG5GrcfQ==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.3.6","@superbuilders/errors":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_1.1.4_1777067838527_0.959806365180393","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@superbuilders/primer-tives","version":"1.2.0","_id":"@superbuilders/primer-tives@1.2.0","maintainers":[{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"da90093fa58dc8bb1ce9ee7dd62839e3e0c6fea1","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-1.2.0.tgz","fileCount":78,"integrity":"sha512-0HjopbRfBDYRAVEAwFwlVgndf781bW/km7sInNT/CjeypeGJH5pJqhLO0tyHqoW8dQLJhtWxj5VCLlYcer4fgA==","signatures":[{"sig":"MEUCIQDbkyEZI4YaKRFo2yiKf4kUTBY4TdIQVVTios8qA5ePbwIgeVVq4USGBXVYKOQFKlyoLew0EUyblD2P/NDRN8KkQuo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":305806},"type":"module","shasum":"da90093fa58dc8bb1ce9ee7dd62839e3e0c6fea1","exports":{"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js"},"./subject":{"types":"./dist/subject.d.ts","import":"./dist/subject.js"},"./contracts":{"types":"./dist/contracts/index.d.ts","import":"./dist/contracts/index.js"},"./grade-level":{"types":"./dist/grade-level.d.ts","import":"./dist/grade-level.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit","prepublishOnly":"bun run build.ts"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-0HjopbRfBDYRAVEAwFwlVgndf781bW/km7sInNT/CjeypeGJH5pJqhLO0tyHqoW8dQLJhtWxj5VCLlYcer4fgA==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.3.6","@superbuilders/errors":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_1.2.0_1777428760394_0.3740039168771623","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@superbuilders/primer-tives","version":"2.0.0","_id":"@superbuilders/primer-tives@2.0.0","maintainers":[{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"dde1181268b0b13ccbc967f0203552a91c832682","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-2.0.0.tgz","fileCount":80,"integrity":"sha512-Au8CrMSN4a92OK/gZj87j6OK9BlUExh+eBYN1nkFUa+paA/Rb4qk00vKRbjjnUHQsq5gRkyBTTWfLh8mGv0JuQ==","signatures":[{"sig":"MEUCIQCJYYwGg+NXnPAD3QoRQCzYcghnHvZEQDgEuIK98yYCKgIgP/sOCfZ6vczysdZj7RCe5LNQs3brnIgV08VgQsXT+bM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":318316},"type":"module","shasum":"dde1181268b0b13ccbc967f0203552a91c832682","exports":{"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js"},"./subject":{"types":"./dist/subject.d.ts","import":"./dist/subject.js"},"./contracts":{"types":"./dist/contracts/index.d.ts","import":"./dist/contracts/index.js"},"./grade-level":{"types":"./dist/grade-level.d.ts","import":"./dist/grade-level.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit","prepublishOnly":"bun run build.ts"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-Au8CrMSN4a92OK/gZj87j6OK9BlUExh+eBYN1nkFUa+paA/Rb4qk00vKRbjjnUHQsq5gRkyBTTWfLh8mGv0JuQ==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.3.6","@superbuilders/errors":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_2.0.0_1777848180267_0.2902433396075992","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"@superbuilders/primer-tives","version":"2.2.0","_id":"@superbuilders/primer-tives@2.2.0","maintainers":[{"name":"abhi-superbuilders","email":"abhi.balagurusamy@superbuilders.school"},{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"0b4595a77fe6e4639cea6ce11bc7777a952fdaa3","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-2.2.0.tgz","fileCount":78,"integrity":"sha512-B9I0pGdjaiBzx3ekNAlsZA20JF2BQ+Gyy0FbA7HiNJrT/0r9Umk5MgVZg2/oghRtw28t0yGSEZ3xZftUKwBQpw==","signatures":[{"sig":"MEUCIDz9kEo2fyhn+Hey/8Dnzk3StDx5jvOd55Y49sw638DGAiEAzn6esycOZLGk5jKhx60DshzcyUMGOKqW2hdT16E2KLo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":286561},"type":"module","shasum":"0b4595a77fe6e4639cea6ce11bc7777a952fdaa3","exports":{"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js"},"./subject":{"types":"./dist/subject.d.ts","import":"./dist/subject.js"},"./contracts":{"types":"./dist/contracts/index.d.ts","import":"./dist/contracts/index.js"},"./grade-level":{"types":"./dist/grade-level.d.ts","import":"./dist/grade-level.js"},"./subject-pcis":{"types":"./dist/subject-pcis.d.ts","import":"./dist/subject-pcis.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit","prepublishOnly":"bun run build.ts"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-B9I0pGdjaiBzx3ekNAlsZA20JF2BQ+Gyy0FbA7HiNJrT/0r9Umk5MgVZg2/oghRtw28t0yGSEZ3xZftUKwBQpw==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.3.6","@superbuilders/errors":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_2.2.0_1778036103149_0.6392204840748372","host":"s3://npm-registry-packages-npm-production"}},"2.2.1":{"name":"@superbuilders/primer-tives","version":"2.2.1","_id":"@superbuilders/primer-tives@2.2.1","maintainers":[{"name":"abhi-superbuilders","email":"abhi.balagurusamy@superbuilders.school"},{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"6e4fed8e6fa8b8eda64814c5ff1c69f3ef4b6f73","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-2.2.1.tgz","fileCount":78,"integrity":"sha512-D/w3S+FnN8a5Jm3VLQGRSUg5TrLzdMgBlK3TKpZo63+JDXKL+XBdDUcBV2b0Eyi2ypeI1SXt9wd9zrIfSHm4Lw==","signatures":[{"sig":"MEUCIDdqmvC3lwZ+EdId1GO6Ki/k4e1QNV1BNdG9/GjK9EfIAiEAj8LF+SeXzqqYKyyfh+W9GK/qb1x9z2qz6o8kwt7A5WY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":291661},"type":"module","shasum":"6e4fed8e6fa8b8eda64814c5ff1c69f3ef4b6f73","exports":{"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js"},"./subject":{"types":"./dist/subject.d.ts","import":"./dist/subject.js"},"./contracts":{"types":"./dist/contracts/index.d.ts","import":"./dist/contracts/index.js"},"./grade-level":{"types":"./dist/grade-level.d.ts","import":"./dist/grade-level.js"},"./subject-pcis":{"types":"./dist/subject-pcis.d.ts","import":"./dist/subject-pcis.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit","prepublishOnly":"bun run build.ts"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-D/w3S+FnN8a5Jm3VLQGRSUg5TrLzdMgBlK3TKpZo63+JDXKL+XBdDUcBV2b0Eyi2ypeI1SXt9wd9zrIfSHm4Lw==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.3.6","@superbuilders/errors":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_2.2.1_1778106883540_0.8793464330143625","host":"s3://npm-registry-packages-npm-production"}},"3.5.0":{"name":"@superbuilders/primer-tives","version":"3.5.0","_id":"@superbuilders/primer-tives@3.5.0","maintainers":[{"name":"abhi-superbuilders","email":"abhi.balagurusamy@superbuilders.school"},{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"d7733bc78fc54d84632e291631eff4bb95bb7b91","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-3.5.0.tgz","fileCount":88,"integrity":"sha512-Ss7zvgCZwiR2cs/cCwdy1oryiMaLGtNtlj7AmPk4qZTz+wiqTh0X4/oDfAjBwE78Cd+s0hQTShegMsh4FpR19A==","signatures":[{"sig":"MEUCIQCHk1tI3quG0zj0+OTko0e56B+mFhHBUcYY8ZzccrcGQQIgG0CdAj3oVa9Fd077Q/7/oShKCnXA7cQFd/x/EJJoK/Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":292790},"type":"module","shasum":"d7733bc78fc54d84632e291631eff4bb95bb7b91","exports":{"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.js"},"./subject":{"types":"./dist/subject.d.ts","import":"./dist/subject.js"},"./contracts":{"types":"./dist/contracts/index.d.ts","import":"./dist/contracts/index.js"},"./grade-level":{"types":"./dist/grade-level.d.ts","import":"./dist/grade-level.js"},"./subject-pcis":{"types":"./dist/subject-pcis.d.ts","import":"./dist/subject-pcis.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit && bun --bun tsc --project tsconfig.type-tests.json --noEmit","prepublishOnly":"bun run build.ts"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-Ss7zvgCZwiR2cs/cCwdy1oryiMaLGtNtlj7AmPk4qZTz+wiqTh0X4/oDfAjBwE78Cd+s0hQTShegMsh4FpR19A==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.3.6","@superbuilders/errors":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_3.5.0_1778179835697_0.5135962969182559","host":"s3://npm-registry-packages-npm-production"}},"3.5.1":{"name":"@superbuilders/primer-tives","version":"3.5.1","_id":"@superbuilders/primer-tives@3.5.1","maintainers":[{"name":"abhi-superbuilders","email":"abhi.balagurusamy@superbuilders.school"},{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"23bbcb637ae892bb9e2388cd8552474acc121dcf","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-3.5.1.tgz","fileCount":88,"integrity":"sha512-xtKae6+AVolcREaEN9PXO49x5y9tyZPKLlj3gpVIz4xrUqXIor+s6dA/+5U9Lo1jjcVJQQD+h6igPA8QiOkpDg==","signatures":[{"sig":"MEYCIQC+gSzmhccwnY44ZIK74W9qAZ1Iwoj3gwhISWzcyWaACQIhAJihCHrDb5JGM9Pu3BHkfT31aVKFYfkWDadZOFl4eTln","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":324143},"type":"module","shasum":"23bbcb637ae892bb9e2388cd8552474acc121dcf","exports":{"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.js"},"./subject":{"types":"./dist/subject.d.ts","import":"./dist/subject.js"},"./contracts":{"types":"./dist/contracts/index.d.ts","import":"./dist/contracts/index.js"},"./grade-level":{"types":"./dist/grade-level.d.ts","import":"./dist/grade-level.js"},"./subject-pcis":{"types":"./dist/subject-pcis.d.ts","import":"./dist/subject-pcis.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit && bun --bun tsc --project tsconfig.type-tests.json --noEmit","prepublishOnly":"bun run build.ts"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-xtKae6+AVolcREaEN9PXO49x5y9tyZPKLlj3gpVIz4xrUqXIor+s6dA/+5U9Lo1jjcVJQQD+h6igPA8QiOkpDg==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.3.6","@superbuilders/errors":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_3.5.1_1778181186390_0.1505248736387217","host":"s3://npm-registry-packages-npm-production"}},"3.6.0":{"name":"@superbuilders/primer-tives","version":"3.6.0","_id":"@superbuilders/primer-tives@3.6.0","maintainers":[{"name":"abhi-superbuilders","email":"abhi.balagurusamy@superbuilders.school"},{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"0c8c11f1a3b3a1f37996bad7c30f0d175177a11f","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-3.6.0.tgz","fileCount":90,"integrity":"sha512-7v4olQFkJoawuP1TEK8957fIcnZrqCNFcz5sEjY6Q7yU4r4uBOZIFNNC2mL4lPsimvGXPoyUdT7LiNQkGHxA1g==","signatures":[{"sig":"MEQCIAmaGEzl7cTULStH5hFEIoKE1oohuJm6031cO/jZRstuAiBynS+7RY8QAT0pzlTfToHDTvTrhGZn+xdPaRsBYNOqrg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":348848},"type":"module","shasum":"0c8c11f1a3b3a1f37996bad7c30f0d175177a11f","exports":{"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.js"},"./subject":{"types":"./dist/subject.d.ts","import":"./dist/subject.js"},"./contracts":{"types":"./dist/contracts/index.d.ts","import":"./dist/contracts/index.js"},"./grade-level":{"types":"./dist/grade-level.d.ts","import":"./dist/grade-level.js"},"./subject-pcis":{"types":"./dist/subject-pcis.d.ts","import":"./dist/subject-pcis.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit && bun --bun tsc --project tsconfig.type-tests.json --noEmit","prepublishOnly":"bun run build.ts"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-7v4olQFkJoawuP1TEK8957fIcnZrqCNFcz5sEjY6Q7yU4r4uBOZIFNNC2mL4lPsimvGXPoyUdT7LiNQkGHxA1g==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.3.6","@superbuilders/errors":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_3.6.0_1778185500269_0.4732405507368853","host":"s3://npm-registry-packages-npm-production"}},"3.7.0":{"name":"@superbuilders/primer-tives","version":"3.7.0","_id":"@superbuilders/primer-tives@3.7.0","maintainers":[{"name":"abhi-superbuilders","email":"abhi.balagurusamy@superbuilders.school"},{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"3c0dbe5734ea4ede910f5ea1cd29bdba80568062","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-3.7.0.tgz","fileCount":90,"integrity":"sha512-n9pp4J7d+8gZlzSUW+SRMMmvKqgCEMNoBUowmASKAR5daV5p3hBTkUnZBE9dk8WhHs/Kd0JGBPgGUx+xKXGdZw==","signatures":[{"sig":"MEQCICNKzAxyUV6Bq5/3ZT4ouJh0B/jTBOiJRnb0HUv0pc35AiAeelaVq/i7TXMSimybIYXEtSp/ZOnFvR5KOq8fG911cA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":352738},"type":"module","shasum":"3c0dbe5734ea4ede910f5ea1cd29bdba80568062","exports":{"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.js"},"./subject":{"types":"./dist/subject.d.ts","import":"./dist/subject.js"},"./contracts":{"types":"./dist/contracts/index.d.ts","import":"./dist/contracts/index.js"},"./grade-level":{"types":"./dist/grade-level.d.ts","import":"./dist/grade-level.js"},"./subject-pcis":{"types":"./dist/subject-pcis.d.ts","import":"./dist/subject-pcis.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit && bun --bun tsc --project tsconfig.type-tests.json --noEmit","prepublishOnly":"bun run build.ts"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-n9pp4J7d+8gZlzSUW+SRMMmvKqgCEMNoBUowmASKAR5daV5p3hBTkUnZBE9dk8WhHs/Kd0JGBPgGUx+xKXGdZw==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.3.6","@superbuilders/errors":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_3.7.0_1778190495776_0.7793187645404158","host":"s3://npm-registry-packages-npm-production"}},"3.7.1":{"name":"@superbuilders/primer-tives","version":"3.7.1","_id":"@superbuilders/primer-tives@3.7.1","maintainers":[{"name":"abhi-superbuilders","email":"abhi.balagurusamy@superbuilders.school"},{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"44e8a33a4348118b3ae9c61eb84d65874b281695","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-3.7.1.tgz","fileCount":90,"integrity":"sha512-p3NpEiWdIsf+g9i7aYpr2HwuFnsGPItTTzZKcrivZOJRat1Wuw0ptUmTbeRhyNanO0laBE7wVXW61EhMyH84Yw==","signatures":[{"sig":"MEQCIDYa7z8w7aFRjxKbybOCV+YD1kMYLiQh/dMmH5yWvtItAiBn+kJkPSSpIrh2ROk82AS/XOTZdwDy/XOk6PgNPnffwQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":353183},"type":"module","shasum":"44e8a33a4348118b3ae9c61eb84d65874b281695","exports":{"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.js"},"./subject":{"types":"./dist/subject.d.ts","import":"./dist/subject.js"},"./contracts":{"types":"./dist/contracts/index.d.ts","import":"./dist/contracts/index.js"},"./grade-level":{"types":"./dist/grade-level.d.ts","import":"./dist/grade-level.js"},"./subject-pcis":{"types":"./dist/subject-pcis.d.ts","import":"./dist/subject-pcis.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit && bun --bun tsc --project tsconfig.type-tests.json --noEmit","prepublishOnly":"bun run build.ts"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-p3NpEiWdIsf+g9i7aYpr2HwuFnsGPItTTzZKcrivZOJRat1Wuw0ptUmTbeRhyNanO0laBE7wVXW61EhMyH84Yw==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.3.6","@superbuilders/errors":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_3.7.1_1778263921860_0.6357172137614515","host":"s3://npm-registry-packages-npm-production"}},"4.0.0":{"name":"@superbuilders/primer-tives","version":"4.0.0","_id":"@superbuilders/primer-tives@4.0.0","maintainers":[{"name":"abhi-superbuilders","email":"abhi.balagurusamy@superbuilders.school"},{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"ec991f78355099899dbf42986cbc89b040dc68eb","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-4.0.0.tgz","fileCount":90,"integrity":"sha512-lAp6nEZySk0piwSXZ3ukTWnLoCO4btWl5QNhFjX3+yKF7h2RNbHXzqIkQV8gW5+AWuBpGRxr63QlmktzIzWV6A==","signatures":[{"sig":"MEYCIQCQuU7p1mNYYQMdq59tnHwcvNk3EhRdFU9p6/gd8B5P3QIhANpSvW9GOYDW04FlPuIOnoL5R0b88ifvFeuGm1Rh3Gww","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":353255},"type":"module","shasum":"ec991f78355099899dbf42986cbc89b040dc68eb","exports":{"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.js"},"./subject":{"types":"./dist/subject.d.ts","import":"./dist/subject.js"},"./contracts":{"types":"./dist/contracts/index.d.ts","import":"./dist/contracts/index.js"},"./grade-level":{"types":"./dist/grade-level.d.ts","import":"./dist/grade-level.js"},"./subject-pcis":{"types":"./dist/subject-pcis.d.ts","import":"./dist/subject-pcis.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit && bun --bun tsc --project tsconfig.type-tests.json --noEmit","prepublishOnly":"bun run build.ts"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-lAp6nEZySk0piwSXZ3ukTWnLoCO4btWl5QNhFjX3+yKF7h2RNbHXzqIkQV8gW5+AWuBpGRxr63QlmktzIzWV6A==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.3.6","@superbuilders/errors":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_4.0.0_1778264752088_0.6774423481130514","host":"s3://npm-registry-packages-npm-production"}},"4.0.1":{"name":"@superbuilders/primer-tives","version":"4.0.1","_id":"@superbuilders/primer-tives@4.0.1","maintainers":[{"name":"abhi-superbuilders","email":"abhi.balagurusamy@superbuilders.school"},{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"9b2489d5ac7b3beb2954157f26ea4042c43e9bfa","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-4.0.1.tgz","fileCount":90,"integrity":"sha512-gIcW6PRCbsPxvmy0OuxkvSXHOLq5eVTvhY9DEKbhQyvTVIP2XIqCvUBW3P8b1aPrLFiUEoRVAc2X0z3TvYHPOQ==","signatures":[{"sig":"MEUCIF/U/16W0NwQ3HGQGFy+BM7kYgGZooRo7AuI42R96JIXAiEAvC7eUZPEfE1VfvDXuv6La5h0ZlXIqC+NLuy9r6GU2gk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":360416},"type":"module","shasum":"9b2489d5ac7b3beb2954157f26ea4042c43e9bfa","exports":{"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.js"},"./subject":{"types":"./dist/subject.d.ts","import":"./dist/subject.js"},"./contracts":{"types":"./dist/contracts/index.d.ts","import":"./dist/contracts/index.js"},"./grade-level":{"types":"./dist/grade-level.d.ts","import":"./dist/grade-level.js"},"./subject-pcis":{"types":"./dist/subject-pcis.d.ts","import":"./dist/subject-pcis.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit && bun --bun tsc --project tsconfig.type-tests.json --noEmit","prepublishOnly":"bun run build.ts"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-gIcW6PRCbsPxvmy0OuxkvSXHOLq5eVTvhY9DEKbhQyvTVIP2XIqCvUBW3P8b1aPrLFiUEoRVAc2X0z3TvYHPOQ==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.3.6","pino":"^10.3.1","@superbuilders/errors":"^3.0.2"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_4.0.1_1778513679378_0.3878999407106871","host":"s3://npm-registry-packages-npm-production"}},"4.0.2":{"name":"@superbuilders/primer-tives","version":"4.0.2","_id":"@superbuilders/primer-tives@4.0.2","maintainers":[{"name":"abhi-superbuilders","email":"abhi.balagurusamy@superbuilders.school"},{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"7a2b1cd572904ac5eea2c5eff6088743eaafb269","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-4.0.2.tgz","fileCount":90,"integrity":"sha512-ooor4nGPb+DBJMYTKyJbujM0Yumx6Vh3qpnY0GBuOZR2CR716l71Yri5D1ZKT3pyXebzsutu1Lww1UkD3bvMOw==","signatures":[{"sig":"MEQCIHWSC+l6fQohPDNUShNlmOvW3Fx6FhUW+32ioeYjaTl0AiBslpPBamPyGO6j4BTHCI9YzENa3dTwQjqHM7uZ/YYY7w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1678307},"type":"module","shasum":"7a2b1cd572904ac5eea2c5eff6088743eaafb269","exports":{"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.js"},"./subject":{"types":"./dist/subject.d.ts","import":"./dist/subject.js"},"./contracts":{"types":"./dist/contracts/index.d.ts","import":"./dist/contracts/index.js"},"./grade-level":{"types":"./dist/grade-level.d.ts","import":"./dist/grade-level.js"},"./subject-pcis":{"types":"./dist/subject-pcis.d.ts","import":"./dist/subject-pcis.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit && bun --bun tsc --project tsconfig.type-tests.json --noEmit","prepublishOnly":"bun run build.ts"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-ooor4nGPb+DBJMYTKyJbujM0Yumx6Vh3qpnY0GBuOZR2CR716l71Yri5D1ZKT3pyXebzsutu1Lww1UkD3bvMOw==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"pino":"^10.3.1","@superbuilders/errors":"^3.0.2","@superbuilders/validate":"^0.1.0"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_4.0.2_1778789546849_0.8677902907250208","host":"s3://npm-registry-packages-npm-production"}},"4.0.3":{"name":"@superbuilders/primer-tives","version":"4.0.3","_id":"@superbuilders/primer-tives@4.0.3","maintainers":[{"name":"abhi-superbuilders","email":"abhi.balagurusamy@superbuilders.school"},{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"598aef4bb0f762afc5578880c20030063f8543c0","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-4.0.3.tgz","fileCount":90,"integrity":"sha512-v6TjkvJnv5nF3pvH3Oxfi4puvEGApN5ZMbYU/ViBLd9xHEJBToGxm58qFz9WXnaq7q2gChWE2jhe7a4HpiYDrg==","signatures":[{"sig":"MEYCIQC2Kmf/VwGIUqMphhkmPatQIdfs7hDUCAW/hELgZiJMGgIhAPqaJJXtG4tZwHbMzRVHBNhNu9VhLFaGKsxJKnwfufsk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1678307},"type":"module","shasum":"598aef4bb0f762afc5578880c20030063f8543c0","exports":{"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.js"},"./subject":{"types":"./dist/subject.d.ts","import":"./dist/subject.js"},"./contracts":{"types":"./dist/contracts/index.d.ts","import":"./dist/contracts/index.js"},"./grade-level":{"types":"./dist/grade-level.d.ts","import":"./dist/grade-level.js"},"./subject-pcis":{"types":"./dist/subject-pcis.d.ts","import":"./dist/subject-pcis.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit && bun --bun tsc --project tsconfig.type-tests.json --noEmit","prepublishOnly":"bun run build.ts"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-v6TjkvJnv5nF3pvH3Oxfi4puvEGApN5ZMbYU/ViBLd9xHEJBToGxm58qFz9WXnaq7q2gChWE2jhe7a4HpiYDrg==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"pino":"^10.3.1","@superbuilders/errors":"^3.0.2","@superbuilders/validate":"^0.1.1"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_4.0.3_1778792694320_0.9590566906276861","host":"s3://npm-registry-packages-npm-production"}},"4.0.4":{"name":"@superbuilders/primer-tives","version":"4.0.4","_id":"@superbuilders/primer-tives@4.0.4","maintainers":[{"name":"abhi-superbuilders","email":"abhi.balagurusamy@superbuilders.school"},{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"c3766ee8b93c561409ddb3f2ccdf46f2a945d7ec","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-4.0.4.tgz","fileCount":86,"integrity":"sha512-ZjqLjDfO5YW6y6UkvfvtcT0nwrcnffzTx20nr4z8Q/Rb1XmSIt47L2xBKzlRiSLOnDFsDdEhmsd30WcYT8f7Pg==","signatures":[{"sig":"MEUCIQCjkbjeQJDzRNVpvcS8jvtQuBmTP5nFqcjU8YVOSiRJegIgcrl7lZepa3kZujbLnOwcTWO1DhCnO6PAKesy+h0noDc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1674072},"type":"module","shasum":"c3766ee8b93c561409ddb3f2ccdf46f2a945d7ec","exports":{"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.js"},"./subject":{"types":"./dist/subject.d.ts","import":"./dist/subject.js"},"./contracts":{"types":"./dist/contracts/index.d.ts","import":"./dist/contracts/index.js"},"./grade-level":{"types":"./dist/grade-level.d.ts","import":"./dist/grade-level.js"},"./subject-pcis":{"types":"./dist/subject-pcis.d.ts","import":"./dist/subject-pcis.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit && bun --bun tsc --project tsconfig.type-tests.json --noEmit","prepublishOnly":"bun run build.ts"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-ZjqLjDfO5YW6y6UkvfvtcT0nwrcnffzTx20nr4z8Q/Rb1XmSIt47L2xBKzlRiSLOnDFsDdEhmsd30WcYT8f7Pg==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"pino":"^10.3.1","@superbuilders/errors":"^3.0.2","@superbuilders/validate":"^0.1.1"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_4.0.4_1778803424819_0.434651722405349","host":"s3://npm-registry-packages-npm-production"}},"4.0.5":{"name":"@superbuilders/primer-tives","version":"4.0.5","_id":"@superbuilders/primer-tives@4.0.5","maintainers":[{"name":"abhi-superbuilders","email":"abhi.balagurusamy@superbuilders.school"},{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"0b21d6e27e867bf555afbdf8dcae3089a9b0ee27","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-4.0.5.tgz","fileCount":88,"integrity":"sha512-/KdItJjOMkDL1p+lUZDlCfNlQz4XuuwA5zAa55UxUA3glN/NAZTEQQ9RhfpH39bvvXxaFTM52fIXa5K+FqCCJQ==","signatures":[{"sig":"MEQCIFUEU81tJIeY6JZxauHW8AsyOJlFWVWga9GB/nfZSAQdAiAOQqccPCycRzxZwZOHssfJhiIvxLKd2unLCXTFsAJ8zA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1685207},"type":"module","shasum":"0b21d6e27e867bf555afbdf8dcae3089a9b0ee27","exports":{"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.js"},"./subject":{"types":"./dist/subject.d.ts","import":"./dist/subject.js"},"./contracts":{"types":"./dist/contracts/index.d.ts","import":"./dist/contracts/index.js"},"./grade-level":{"types":"./dist/grade-level.d.ts","import":"./dist/grade-level.js"},"./subject-pcis":{"types":"./dist/subject-pcis.d.ts","import":"./dist/subject-pcis.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit && bun --bun tsc --project tsconfig.type-tests.json --noEmit","prepublishOnly":"bun run build.ts"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-/KdItJjOMkDL1p+lUZDlCfNlQz4XuuwA5zAa55UxUA3glN/NAZTEQQ9RhfpH39bvvXxaFTM52fIXa5K+FqCCJQ==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"pino":"^10.3.1","@superbuilders/errors":"^3.0.2","@superbuilders/validate":"^0.1.1"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_4.0.5_1778805195810_0.9646506850213308","host":"s3://npm-registry-packages-npm-production"}},"4.1.0":{"name":"@superbuilders/primer-tives","version":"4.1.0","_id":"@superbuilders/primer-tives@4.1.0","maintainers":[{"name":"abhi-superbuilders","email":"abhi.balagurusamy@superbuilders.school"},{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"5d255686a023fc34de204cb93685b4018dc4c2b5","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-4.1.0.tgz","fileCount":88,"integrity":"sha512-opL5AnHJ3L2k4yRU+TFAlqyyTkg8/Pstfs+wGUw7BBKeV3C0aS9OzL/xgz/TntHfyD1nnYwBPjguoCa966xRPA==","signatures":[{"sig":"MEUCIQDeTU3Tmtj7l27D9zDuuAK9l5xSgTdt4IJYiHxBx+jD8QIgV4rWpUueil4mkoGAbUiE+32Na9KxyBM0+j5D5HssuAA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1690290},"type":"module","shasum":"5d255686a023fc34de204cb93685b4018dc4c2b5","exports":{"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.js"},"./subject":{"types":"./dist/subject.d.ts","import":"./dist/subject.js"},"./contracts":{"types":"./dist/contracts/index.d.ts","import":"./dist/contracts/index.js"},"./grade-level":{"types":"./dist/grade-level.d.ts","import":"./dist/grade-level.js"},"./subject-pcis":{"types":"./dist/subject-pcis.d.ts","import":"./dist/subject-pcis.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit && bun --bun tsc --project tsconfig.type-tests.json --noEmit","prepublishOnly":"bun run build.ts"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-opL5AnHJ3L2k4yRU+TFAlqyyTkg8/Pstfs+wGUw7BBKeV3C0aS9OzL/xgz/TntHfyD1nnYwBPjguoCa966xRPA==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"pino":"^10.3.1","@superbuilders/errors":"^3.0.2","@superbuilders/validate":"^0.1.1"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_4.1.0_1779141824093_0.19939066574081243","host":"s3://npm-registry-packages-npm-production"}},"5.0.0":{"name":"@superbuilders/primer-tives","version":"5.0.0","_id":"@superbuilders/primer-tives@5.0.0","maintainers":[{"name":"abhi-superbuilders","email":"abhi.balagurusamy@superbuilders.school"},{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"403a318366c12f6d07a4921b2e879ee7504a1c7d","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-5.0.0.tgz","fileCount":88,"integrity":"sha512-fvvXOktW020+Yb4bDrWXSIdAJtisxVI4Wc2jb2n6uhzits+R25tvTizFF1dx2dUaNHwyonHQGEfI2mETSCSlXA==","signatures":[{"sig":"MEYCIQDcnJSypEnO+vLorefvv3T0adxfG/7g/012+lSnD/WQ0wIhALG2PimYZ8csSGVOCxhXmrLBgpUEleA5mt38BeL4Gw+F","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1708100},"type":"module","shasum":"403a318366c12f6d07a4921b2e879ee7504a1c7d","exports":{"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.js"},"./subject":{"types":"./dist/subject.d.ts","import":"./dist/subject.js"},"./contracts":{"types":"./dist/contracts/index.d.ts","import":"./dist/contracts/index.js"},"./grade-level":{"types":"./dist/grade-level.d.ts","import":"./dist/grade-level.js"},"./subject-pcis":{"types":"./dist/subject-pcis.d.ts","import":"./dist/subject-pcis.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit && bun --bun tsc --project tsconfig.type-tests.json --noEmit","prepublishOnly":"bun run build.ts"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-fvvXOktW020+Yb4bDrWXSIdAJtisxVI4Wc2jb2n6uhzits+R25tvTizFF1dx2dUaNHwyonHQGEfI2mETSCSlXA==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"pino":"^10.3.1","@superbuilders/errors":"^3.0.2","@superbuilders/validate":"^0.1.1"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_5.0.0_1779936112337_0.2896056246160714","host":"s3://npm-registry-packages-npm-production"}},"5.0.1":{"name":"@superbuilders/primer-tives","version":"5.0.1","_id":"@superbuilders/primer-tives@5.0.1","maintainers":[{"name":"abhi-superbuilders","email":"abhi.balagurusamy@superbuilders.school"},{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"e3ea4749ceeb45437812c766725cb4032ff5bd03","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-5.0.1.tgz","fileCount":88,"integrity":"sha512-02GqWNQwHczvrEfE8bkAsIMX5o4nVR2c9vpEhYmff6MiaFrmLcgcv1y5GZbxpnDNeTdjLChR+Lk/7EWaGnIdSw==","signatures":[{"sig":"MEQCID3w4gNrw8jCgSgmElFGGcFE+4I1LOfKtpM/UOvlXmBAAiABDQlaoKlS9MhCg0W5996qJ6SuI22nAgmEFKjPIIL7iw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1709928},"type":"module","shasum":"e3ea4749ceeb45437812c766725cb4032ff5bd03","exports":{"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.js"},"./subject":{"types":"./dist/subject.d.ts","import":"./dist/subject.js"},"./contracts":{"types":"./dist/contracts/index.d.ts","import":"./dist/contracts/index.js"},"./grade-level":{"types":"./dist/grade-level.d.ts","import":"./dist/grade-level.js"},"./subject-pcis":{"types":"./dist/subject-pcis.d.ts","import":"./dist/subject-pcis.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit && bun --bun tsc --project tsconfig.type-tests.json --noEmit","prepublishOnly":"bun run build.ts"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-02GqWNQwHczvrEfE8bkAsIMX5o4nVR2c9vpEhYmff6MiaFrmLcgcv1y5GZbxpnDNeTdjLChR+Lk/7EWaGnIdSw==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"pino":"^10.3.1","@superbuilders/errors":"^3.0.2","@superbuilders/validate":"^0.1.1"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_5.0.1_1780348798616_0.8059407413216424","host":"s3://npm-registry-packages-npm-production"}},"5.0.2":{"name":"@superbuilders/primer-tives","version":"5.0.2","_id":"@superbuilders/primer-tives@5.0.2","maintainers":[{"name":"abhi-superbuilders","email":"abhi.balagurusamy@superbuilders.school"},{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"448c0710d5bb4a5ab2f25a52d0c8637e73890b2a","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-5.0.2.tgz","fileCount":88,"integrity":"sha512-+fizjTTXES63qoG+3W3GLNNtfk2jW5hRHXM7y0Ye4BTjLLNcPGA/unje5iZa2ZQgSraUPO+p1Qxka/MrOsCZEw==","signatures":[{"sig":"MEUCIAM+uUybh+05+8Ihjw56oE3fWE+uP4L+YILm92D9Kd4gAiEA+mN8FqvN/WCe8GHGcVsn0ykOHCxMGvg6R6b3oWIN7sk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1717800},"type":"module","shasum":"448c0710d5bb4a5ab2f25a52d0c8637e73890b2a","exports":{"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.js"},"./subject":{"types":"./dist/subject.d.ts","import":"./dist/subject.js"},"./contracts":{"types":"./dist/contracts/index.d.ts","import":"./dist/contracts/index.js"},"./grade-level":{"types":"./dist/grade-level.d.ts","import":"./dist/grade-level.js"},"./subject-pcis":{"types":"./dist/subject-pcis.d.ts","import":"./dist/subject-pcis.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit && bun --bun tsc --project tsconfig.type-tests.json --noEmit","prepublishOnly":"bun run build.ts"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-+fizjTTXES63qoG+3W3GLNNtfk2jW5hRHXM7y0Ye4BTjLLNcPGA/unje5iZa2ZQgSraUPO+p1Qxka/MrOsCZEw==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"pino":"^10.3.1","@superbuilders/errors":"^3.0.2","@superbuilders/validate":"^0.1.1"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_5.0.2_1780351594570_0.4487126407544526","host":"s3://npm-registry-packages-npm-production"}},"5.0.4":{"name":"@superbuilders/primer-tives","version":"5.0.4","_id":"@superbuilders/primer-tives@5.0.4","maintainers":[{"name":"abhi-superbuilders","email":"abhi.balagurusamy@superbuilders.school"},{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"2ee10c9d2af272ec0627aee67063e5a17f043acb","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-5.0.4.tgz","fileCount":88,"integrity":"sha512-raUPU/i/V2dmgIP7mtqHE0VHhUfyBekkx9inSyoe6Ewaf0FR398tdw2jSYhdJni1QE3yuHCaS7zE7p99KikXqw==","signatures":[{"sig":"MEUCIHzRA7Zm+BXFOojvI2aHJ5JBG1JEVwi0NoVHJQXckNJ5AiEAywb0xxiFxrsi6wse0EM6it/x9wPSODKdxY4ebbmH3dw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1715147},"type":"module","shasum":"2ee10c9d2af272ec0627aee67063e5a17f043acb","exports":{"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.js"},"./subject":{"types":"./dist/subject.d.ts","import":"./dist/subject.js"},"./contracts":{"types":"./dist/contracts/index.d.ts","import":"./dist/contracts/index.js"},"./grade-level":{"types":"./dist/grade-level.d.ts","import":"./dist/grade-level.js"},"./subject-pcis":{"types":"./dist/subject-pcis.d.ts","import":"./dist/subject-pcis.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit && bun --bun tsc --project tsconfig.type-tests.json --noEmit","prepublishOnly":"bun run build.ts"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-raUPU/i/V2dmgIP7mtqHE0VHhUfyBekkx9inSyoe6Ewaf0FR398tdw2jSYhdJni1QE3yuHCaS7zE7p99KikXqw==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"pino":"^10.3.1","@superbuilders/errors":"^3.0.2","@superbuilders/validate":"^0.1.1"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_5.0.4_1780352536649_0.11486458160003865","host":"s3://npm-registry-packages-npm-production"}},"5.1.0":{"name":"@superbuilders/primer-tives","version":"5.1.0","_id":"@superbuilders/primer-tives@5.1.0","maintainers":[{"name":"abhi-superbuilders","email":"abhi.balagurusamy@superbuilders.school"},{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"84b9838933d6d88a1409b55b7315c9b6cf0e4787","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-5.1.0.tgz","fileCount":90,"integrity":"sha512-lhA5jiyqUyXM7+ilaUwiFhM5DPjKRjYjtw60bWTsbh/oD5Ezo61A5wkFz11bENuSJx0HBlX1eGqjeNXruvM/8A==","signatures":[{"sig":"MEUCIHAFVFc+wNDQdTjoazga1eOsUzOVyaClADIR0v7wKIy+AiEAoOMf7Vg/4LKMWYO9JmwMvICmUsktX9MIh3tf695AX/g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1732211},"type":"module","shasum":"84b9838933d6d88a1409b55b7315c9b6cf0e4787","exports":{"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.js"},"./subject":{"types":"./dist/subject.d.ts","import":"./dist/subject.js"},"./contracts":{"types":"./dist/contracts/index.d.ts","import":"./dist/contracts/index.js"},"./grade-level":{"types":"./dist/grade-level.d.ts","import":"./dist/grade-level.js"},"./subject-pcis":{"types":"./dist/subject-pcis.d.ts","import":"./dist/subject-pcis.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit && bun --bun tsc --project tsconfig.type-tests.json --noEmit","prepublishOnly":"bun run build.ts"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-lhA5jiyqUyXM7+ilaUwiFhM5DPjKRjYjtw60bWTsbh/oD5Ezo61A5wkFz11bENuSJx0HBlX1eGqjeNXruvM/8A==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"pino":"^10.3.1","@superbuilders/errors":"^3.0.2","@superbuilders/validate":"^0.1.1"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_5.1.0_1780428106676_0.6597000910312478","host":"s3://npm-registry-packages-npm-production"}},"6.0.0":{"name":"@superbuilders/primer-tives","version":"6.0.0","_id":"@superbuilders/primer-tives@6.0.0","maintainers":[{"name":"abhi-superbuilders","email":"abhi.balagurusamy@superbuilders.school"},{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"df52d58c02af5c94e7bb47226c2bab13f074b420","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-6.0.0.tgz","fileCount":92,"integrity":"sha512-VkgnYBR8XOWHkQ+I/bhKw1H8wnC7WT+BXdMM3nQmUzQla7eBY3P0Qk4cdsvF7pvK3VmVdUiJ+OxdjeLh6UMnCw==","signatures":[{"sig":"MEUCIQD/SeXQIvKTfMVfdD5m9JR80q2QMqPCzIyzSq8qvXbJhQIgbGxs+MgRZqSPi5eH4H+eQyUk83gSqzNUwB0J6aWQy2c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1741571},"type":"module","shasum":"df52d58c02af5c94e7bb47226c2bab13f074b420","exports":{"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.js"},"./subject":{"types":"./dist/subject.d.ts","import":"./dist/subject.js"},"./contracts":{"types":"./dist/contracts/index.d.ts","import":"./dist/contracts/index.js"},"./grade-level":{"types":"./dist/grade-level.d.ts","import":"./dist/grade-level.js"},"./subject-pcis":{"types":"./dist/subject-pcis.d.ts","import":"./dist/subject-pcis.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit && bun --bun tsc --project tsconfig.type-tests.json --noEmit","prepublishOnly":"bun run build.ts"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-VkgnYBR8XOWHkQ+I/bhKw1H8wnC7WT+BXdMM3nQmUzQla7eBY3P0Qk4cdsvF7pvK3VmVdUiJ+OxdjeLh6UMnCw==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"pino":"^10.3.1","@superbuilders/errors":"^3.0.2","@superbuilders/validate":"^0.1.1"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_6.0.0_1780593124240_0.7980286012258075","host":"s3://npm-registry-packages-npm-production"}},"6.1.0":{"name":"@superbuilders/primer-tives","version":"6.1.0","_id":"@superbuilders/primer-tives@6.1.0","maintainers":[{"name":"abhi-superbuilders","email":"abhi.balagurusamy@superbuilders.school"},{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"e24c44835e4d16b8c15ec5e264dc382242cc03c0","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-6.1.0.tgz","fileCount":92,"integrity":"sha512-vrN8or++4yv5iIfUM/YV2xP1OIATS2ORm1XJBavdWQ/2m9PqnPa82EBmNZIFutxhuGns/hMQby1XlB3FMxhuJA==","signatures":[{"sig":"MEUCICjvLANf/BV9GTsfn1Vlucx2tHjahKnrFdeshvAF8ISkAiEA/5vdH2rYI/0AURxpn+NLZ+khodHXptuGwIRZoBbczXE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1746141},"type":"module","shasum":"e24c44835e4d16b8c15ec5e264dc382242cc03c0","exports":{"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.js"},"./subject":{"types":"./dist/subject.d.ts","import":"./dist/subject.js"},"./contracts":{"types":"./dist/contracts/index.d.ts","import":"./dist/contracts/index.js"},"./grade-level":{"types":"./dist/grade-level.d.ts","import":"./dist/grade-level.js"},"./subject-pcis":{"types":"./dist/subject-pcis.d.ts","import":"./dist/subject-pcis.js"}},"scripts":{"build":"bun run build.ts","typecheck":"bun --bun tsc --noEmit && bun --bun tsc --project tsconfig.type-tests.json --noEmit","prepublishOnly":"bun run build.ts"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-vrN8or++4yv5iIfUM/YV2xP1OIATS2ORm1XJBavdWQ/2m9PqnPa82EBmNZIFutxhuGns/hMQby1XlB3FMxhuJA==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"pino":"^10.3.1","@superbuilders/errors":"^3.0.2","@superbuilders/validate":"^0.1.1"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_6.1.0_1780882465826_0.2745477529162619","host":"s3://npm-registry-packages-npm-production"}},"9.0.0":{"name":"@superbuilders/primer-tives","version":"9.0.0","_id":"@superbuilders/primer-tives@9.0.0","maintainers":[{"name":"abhi-superbuilders","email":"abhi.balagurusamy@superbuilders.school"},{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"8de989c644d8fb23033e248c32aab7ae522955b1","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-9.0.0.tgz","fileCount":110,"integrity":"sha512-XG0T2isgxKG17yei7FdEUo8c9IU1BcN0t7tTavrQHIoP4xuOsLYu55ewSed4z9DtAfHr5MyGP6C0IZ+aUjQy1g==","signatures":[{"sig":"MEYCIQDSJb9OsXAuUWSWObiUogl6iNv8AprNxmCSC01JKnG42wIhAIs8FBnFk6ZFWG7x/3R2tgGCkBxRfpB3ZM8zS1fbVul7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2534881},"type":"module","exports":{"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.js"},"./subject":{"types":"./dist/subject.d.ts","import":"./dist/subject.js"},"./version":{"types":"./dist/version.d.ts","import":"./dist/version.js"},"./contracts":{"types":"./dist/contracts/index.d.ts","import":"./dist/contracts/index.js"},"./grade-level":{"types":"./dist/grade-level.d.ts","import":"./dist/grade-level.js"},"./subject-pcis":{"types":"./dist/subject-pcis.d.ts","import":"./dist/subject-pcis.js"}},"gitHead":"43f7fbb257773138dd8d991f959ced7e6cb9c0f6","imports":{"#primer-tives/*":"./src/*.ts","#primer-tives/client":"./src/client/index.ts","#primer-tives/contracts":"./src/contracts/index.ts"},"scripts":{"build":"bun run build.ts","typecheck":"tsgo --noEmit && tsgo --project tsconfig.type-tests.json --noEmit","prepublishOnly":"bun run build.ts"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_npmVersion":"10.9.3","description":"TypeScript SDK primitives for the Primer adaptive learning runtime.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"pino":"^10.3.1","@superbuilders/errors":"^3.0.2","@superbuilders/validate":"^0.1.1"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_9.0.0_1781636147623_0.6077701619500093","host":"s3://npm-registry-packages-npm-production"}},"9.1.0":{"name":"@superbuilders/primer-tives","version":"9.1.0","_id":"@superbuilders/primer-tives@9.1.0","maintainers":[{"name":"abhi-superbuilders","email":"abhi.balagurusamy@superbuilders.school"},{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"d498b058d7c49a66540a1cd204b3bf8362941532","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-9.1.0.tgz","fileCount":110,"integrity":"sha512-cnxg6+E9515tNpUbpvfUDmaNuzja4hbDh5zIW3uOMvVuJAT3ur0BipHjL3yTZqyIvQtUIMNMVM9Yk66Sm6lD7g==","signatures":[{"sig":"MEUCIQDT4HfHRZl7ZeqiVPJozp4lNmqjCyVFsZtEtK3vpMZ+NgIgApSKv7qXJOMht11SxJ6YwlRNXiLEhw/8FzbUKK/gs4g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2546261},"type":"module","exports":{"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"},"./errors":{"types":"./dist/errors.d.ts","import":"./dist/errors.js"},"./logger":{"types":"./dist/logger.d.ts","import":"./dist/logger.js"},"./subject":{"types":"./dist/subject.d.ts","import":"./dist/subject.js"},"./version":{"types":"./dist/version.d.ts","import":"./dist/version.js"},"./contracts":{"types":"./dist/contracts/index.d.ts","import":"./dist/contracts/index.js"},"./grade-level":{"types":"./dist/grade-level.d.ts","import":"./dist/grade-level.js"},"./subject-pcis":{"types":"./dist/subject-pcis.d.ts","import":"./dist/subject-pcis.js"}},"gitHead":"bc5c8ac04a1c3959ab9dedfb64cf4d2914cfea88","imports":{"#primer-tives/*":"./src/*.ts","#primer-tives/client":"./src/client/index.ts","#primer-tives/contracts":"./src/contracts/index.ts"},"scripts":{"build":"bun run build.ts","typecheck":"tsgo --noEmit && tsgo --project tsconfig.type-tests.json --noEmit","prepublishOnly":"bun run build.ts"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_npmVersion":"10.9.3","description":"TypeScript SDK primitives for the Primer adaptive learning runtime.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"pino":"^10.3.1","@superbuilders/errors":"^3.0.2","@superbuilders/validate":"^0.1.1"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_9.1.0_1781637434421_0.5513010944508714","host":"s3://npm-registry-packages-npm-production"}},"10.0.0":{"name":"@superbuilders/primer-tives","version":"10.0.0","_id":"@superbuilders/primer-tives@10.0.0","maintainers":[{"name":"abhi-superbuilders","email":"abhi.balagurusamy@superbuilders.school"},{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"eb5a4cebbfae9573030c841abf030f6c10be0109","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-10.0.0.tgz","fileCount":346,"integrity":"sha512-K91OyJB/ORAZXWumAdjYqNNWfiPLuRZA/s8iq4YpCzS5RiQrubw0BTszVN7TvPfN1ny/A0IGQlMnl2lvn/cmCA==","signatures":[{"sig":"MEUCIQCyDY/wI3n1o5dtUsT/JIxr5QQhmKU4TH47P3iWXYTPfgIgYKJuZb/r4iT7zcgY/quUjGaGJZmKqnDU9W9szc091Fc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17481368},"type":"module","shasum":"eb5a4cebbfae9573030c841abf030f6c10be0109","exports":{"./types":"./src/client/types.ts","./client":"./src/client.ts","./errors":"./src/errors.ts","./version":"./src/version.ts","./contracts":"./src/contracts.ts"},"scripts":{"build":"bun run build.ts","typecheck":"tsgo --noEmit","prepublishOnly":"bun run build.ts"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-K91OyJB/ORAZXWumAdjYqNNWfiPLuRZA/s8iq4YpCzS5RiQrubw0BTszVN7TvPfN1ny/A0IGQlMnl2lvn/cmCA==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"pino":"^10.3.1","@superbuilders/errors":"^3.0.2","@superbuilders/validate":"^0.1.1"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_10.0.0_1782331057589_0.8992554781210083","host":"s3://npm-registry-packages-npm-production"}},"10.0.1":{"name":"@superbuilders/primer-tives","version":"10.0.1","_id":"@superbuilders/primer-tives@10.0.1","maintainers":[{"name":"abhi-superbuilders","email":"abhi.balagurusamy@superbuilders.school"},{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"dist":{"shasum":"5fbb9c0ca052697b7c261bce89d7bfe1a4be297b","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-10.0.1.tgz","fileCount":346,"integrity":"sha512-ozUKfTY7QnBMKUoM2CgrCDrk6+/qIEddTZzlHtInNa7wY/E9uX1s7H6cjBInsPraDPpUC8W2bTt3+pCyY+aFjg==","signatures":[{"sig":"MEUCIC5vMgE3zMkk5qujNd+4X7TllPmZd7f27OX0DfOWcwVzAiEAomt34BpGHcoO9wfGzg5Vn8ITJ4LIeuvGe1sdU2Pkta4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3172213},"type":"module","shasum":"5fbb9c0ca052697b7c261bce89d7bfe1a4be297b","exports":{"./types":{"types":"./dist/client/types.d.ts","default":"./dist/client/types.js"},"./client":{"types":"./dist/client.d.ts","default":"./dist/client.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./version":{"types":"./dist/version.d.ts","default":"./dist/version.js"},"./contracts":{"types":"./dist/contracts.d.ts","default":"./dist/contracts.js"}},"scripts":{"build":"bun run build.ts","typecheck":"tsgo --noEmit","prepublishOnly":"bun run build.ts"},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"_integrity":"sha512-ozUKfTY7QnBMKUoM2CgrCDrk6+/qIEddTZzlHtInNa7wY/E9uX1s7H6cjBInsPraDPpUC8W2bTt3+pCyY+aFjg==","_npmVersion":"10.8.3","directories":{},"_nodeVersion":"24.3.0","dependencies":{"pino":"^10.3.1","@superbuilders/errors":"^3.0.2","@superbuilders/validate":"^0.1.1"},"_hasShrinkwrap":false,"devDependencies":{"resolve-tspaths":"^0.8.23"},"_npmOperationalInternal":{"tmp":"tmp/primer-tives_10.0.1_1782332878997_0.16412188109946002","host":"s3://npm-registry-packages-npm-production"}},"11.0.0":{"name":"@superbuilders/primer-tives","version":"11.0.0","type":"module","exports":{"./client":{"types":"./dist/client.d.ts","default":"./dist/client.js"},"./types":{"types":"./dist/client/types.d.ts","default":"./dist/client/types.js"},"./contracts":{"types":"./dist/contracts.d.ts","default":"./dist/contracts.js"},"./errors":{"types":"./dist/errors.d.ts","default":"./dist/errors.js"},"./version":{"types":"./dist/version.d.ts","default":"./dist/version.js"}},"dependencies":{"@superbuilders/errors":"^3.0.2","@superbuilders/validate":"^0.3.0","pino":"^10.3.1"},"scripts":{"build":"bun run build.ts","prepublishOnly":"bun run build.ts","typecheck":"tsgo --noEmit"},"devDependencies":{"resolve-tspaths":"^0.8.23"},"_id":"@superbuilders/primer-tives@11.0.0","_integrity":"sha512-dMDByrhNohnDz9ScM0ZsSVBB5lDX+5WkgYnLZaDbjOn7f4cScgmu+CvAc7I+KjhJm065CEXwXA05H9uUC4tuEg==","_nodeVersion":"24.3.0","_npmVersion":"10.8.3","shasum":"8ee120e8d13c61b8886955d9e8b0cce02c1e6491","dist":{"integrity":"sha512-dMDByrhNohnDz9ScM0ZsSVBB5lDX+5WkgYnLZaDbjOn7f4cScgmu+CvAc7I+KjhJm065CEXwXA05H9uUC4tuEg==","shasum":"8ee120e8d13c61b8886955d9e8b0cce02c1e6491","tarball":"https://registry.npmjs.org/@superbuilders/primer-tives/-/primer-tives-11.0.0.tgz","fileCount":354,"unpackedSize":3565653,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIE3b6LdtmYxFCEiydrICWSZvkj0FO69iA9ACF0Wn3jfeAiAWP88U35muS3np6gUE5mkNZz7FkLPiipQDIABGpaovZg=="}]},"_npmUser":{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},"directories":{},"maintainers":[{"name":"abhi-superbuilders","email":"abhi.balagurusamy@superbuilders.school"},{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/primer-tives_11.0.0_1782512517159_0.025588485101683656"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-01T02:07:54.857Z","modified":"2026-06-26T22:21:57.556Z","0.0.1":"2026-04-01T02:07:55.120Z","0.0.2":"2026-04-01T02:10:46.997Z","0.0.3":"2026-04-01T18:31:50.286Z","0.0.4":"2026-04-01T20:14:54.753Z","0.0.5":"2026-04-01T20:51:13.892Z","0.0.6":"2026-04-01T22:28:31.986Z","0.0.7":"2026-04-02T00:35:19.716Z","0.1.0":"2026-04-03T17:16:39.240Z","0.2.0":"2026-04-03T19:00:40.473Z","0.3.0":"2026-04-04T02:17:42.595Z","0.3.1":"2026-04-08T14:23:53.525Z","0.3.2":"2026-04-10T20:23:21.772Z","0.4.0":"2026-04-15T22:27:36.139Z","0.5.0":"2026-04-17T00:30:00.395Z","0.6.0":"2026-04-18T01:55:13.600Z","0.8.0":"2026-04-18T02:47:51.349Z","0.8.1":"2026-04-18T02:56:41.773Z","0.9.0":"2026-04-21T00:32:40.040Z","1.0.0":"2026-04-23T06:22:36.818Z","1.1.0":"2026-04-24T20:25:40.221Z","1.1.1":"2026-04-24T20:51:08.879Z","1.1.2":"2026-04-24T21:13:37.937Z","1.1.3":"2026-04-24T21:31:28.601Z","1.1.4":"2026-04-24T21:57:18.683Z","1.2.0":"2026-04-29T02:12:40.532Z","2.0.0":"2026-05-03T22:43:00.421Z","2.2.0":"2026-05-06T02:55:03.284Z","2.2.1":"2026-05-06T22:34:43.706Z","3.5.0":"2026-05-07T18:50:35.843Z","3.5.1":"2026-05-07T19:13:06.547Z","3.6.0":"2026-05-07T20:25:00.452Z","3.7.0":"2026-05-07T21:48:15.923Z","3.7.1":"2026-05-08T18:12:02.028Z","4.0.0":"2026-05-08T18:25:52.238Z","4.0.1":"2026-05-11T15:34:39.729Z","4.0.2":"2026-05-14T20:12:27.027Z","4.0.3":"2026-05-14T21:04:54.579Z","4.0.4":"2026-05-15T00:03:45.012Z","4.0.5":"2026-05-15T00:33:16.061Z","4.1.0":"2026-05-18T22:03:44.336Z","5.0.0":"2026-05-28T02:41:52.568Z","5.0.1":"2026-06-01T21:19:58.832Z","5.0.2":"2026-06-01T22:06:34.720Z","5.0.4":"2026-06-01T22:22:16.868Z","5.1.0":"2026-06-02T19:21:46.883Z","6.0.0":"2026-06-04T17:12:04.431Z","6.1.0":"2026-06-08T01:34:26.031Z","9.0.0":"2026-06-16T18:55:47.837Z","9.1.0":"2026-06-16T19:17:14.598Z","10.0.0":"2026-06-24T19:57:37.811Z","10.0.1":"2026-06-24T20:27:59.204Z","11.0.0":"2026-06-26T22:21:57.371Z"},"maintainers":[{"name":"abhi-superbuilders","email":"abhi.balagurusamy@superbuilders.school"},{"name":"hbauer","email":"handlebauer@protonmail.com"},{"name":"bjornpagen","email":"ngi7tihz@bjornpagen.com"},{"name":"supersterling","email":"aiden.zepp@superbuilders.school"},{"name":"ameeralns","email":"ameer.alnseirat@superbuilders.school"}],"readme":"# @superbuilders/primer-tives\n\nTypeScript SDK primitives for the Primer adaptive learning runtime.\n\nThe public lifecycle starts with one async call and, when hosted auth is needed, one user-gesture auth transition:\n\n```txt\nstart(options with accessToken) -> Promise<AccessTokenStartState>\nstart(options without accessToken) -> Promise<ManagedStartState>\nSignInRequiredState.login() -> Promise<ManagedStartState>\nSignInFailedState.login() -> Promise<ManagedStartState>\n```\n\n`start` enters the first Primer learning state when learner auth is ready and returns the live state machine object your renderer drives. For an authenticated learner that first state is typically `FrontierState`: a set of equally valid next-lesson routes the frontend chooses between. When learner sign-in is needed, managed-auth `start` returns `SignInRequiredState`; render a sign-in button and call `state.login()` directly from that button's click or tap handler.\n\n```sh\nbun add @superbuilders/primer-tives\n```\n\n## Version\n\nThe current SDK version is `10.0.0` (`SDK_MAJOR` 10). The host declares only `supportedPcis`; the course-grade a learner runs is owned by the Primer frontend identified by `publishableKey` and resolved server-side, so `PrimerOptions` carries no `subject`, `courseId`, or `gradeLevel`, and the advance request body is exactly `{ supportedPcis, intent }`. `supportedPcis: readonly PciId[]` is the only host-declared capability input.\n\nEvery graded response carries a total `next: frontier | completed | pending`. When the server-side write already served the next state, `advance()` from the feedback state resolves it LOCALLY with zero network round trips — route consumption and frame-open beacon semantics are identical to a transported frontier. When `next.outcome === \"pending\"`, the server has derived that future work is still in flight, and `advance()` executes exactly one real continue to resolve it.\n\nHosted Primer gates the SDK major and rejects a mismatched major with `sdk_upgrade_required`; first-party renderer deployments ship the server and SDK from the same monorepo build, so the `X-Primer-SDK-Version` header always agrees with the server's `SDK_MAJOR`.\n\n## Entrypoints\n\nThere is no package-root export. The public surface is five semantic entrypoints, each a barrel that owns one concern. Import from the entrypoint that owns the surface you need.\n\n| Entrypoint | Owns |\n| --- | --- |\n| `@superbuilders/primer-tives/client` | `start`, the option types (`PrimerOptions`, `PrimerOptionsWithAccessToken`, `PrimerOptionsWithManagedAuth`, `StartOptions`), the origin helpers (`primerOrigin`, `primerAuthOrigin`), and the exhaustive state matchers (`matchPrimerState`, `matchInteraction`, `matchFeedback`, `matchErrorState`) |\n| `@superbuilders/primer-tives/types` | `PrimerState` and every state interface (`SignInRequiredState`, `FrontierState`, `ObservationState`, `InteractionState`, `FeedbackState`, `CompletedState`, `FatalState`, …), plus the optional host-renderer PCI prop types (`PciRenderProps`, `PciPendingRenderProps`, `PciSubmittedRenderProps`) — none of which are `start` inputs |\n| `@superbuilders/primer-tives/contracts` | Every shared data and validation contract: content (`ContentBlock`, `ContentInline`, plain-text helpers), renderer types (`RendererInteraction`, `RendererStimulus`, `RendererChoice`, `RendererSubmission`, `MatchPair`), calibration, the PCI registry (`PciId`, `PciProps`, `PciValue`, `PCI_IDS`, `PCI_REGISTRY`, `isPciId`) and PCI schemas, reviews (`InteractionReview`), `LessonStage`, `GradeLevel` (standalone display vocabulary — not a `start` input or wire field), the advance wire types (`AdvanceRequest`, `AdvanceResult`, `WireFrame`, `AdvanceErrorCode`, …), and submission validation (`validateSubmission`, schemas, per-kind validators) |\n| `@superbuilders/primer-tives/errors` | Every SDK error sentinel (`ErrMalformedAccessToken`, `ErrAuthCancelled`, `ErrUnsupportedPci`, …) and `ADVANCE_WIRE_ERRORS`, the wire-error-code → sentinel/state mapping |\n| `@superbuilders/primer-tives/version` | `SDK_VERSION`, `SDK_MAJOR` |\n\nThe `PrimerLogger` type is `pino`'s `Logger`; import it directly from `pino` (`import type { Logger as PrimerLogger } from \"pino\"`). There is no `subject` or `subject-pcis` entrypoint — the content scope is owned by the frontend keyed by your `publishableKey` and resolved server-side.\n\n## Architecture: Three Layers\n\nPrimerTives is a **framework-agnostic** TypeScript SDK. It owns the learner runtime state machine and wire protocol. It does **not** render UI, bundle React components, or invoke host renderer code.\n\nIntegrators should keep three layers separate:\n\n```txt\n┌──────────────────────────────────────────────────────────────────────┐\n│  Layer 1 — primer-tives (framework-agnostic)                         │\n│  start() → PrimerState → enter / advance / submit / timeout / login  │\n│  declares supportedPcis: PciId[] for wire PCI capability negotiation   │\n│  never calls host renderer functions                                 │\n└──────────────────────────────────────────────────────────────────────┘\n                                    │\n                                    ▼  every advance request body is exactly:\n                          { supportedPcis, intent }\n┌──────────────────────────────────────────────────────────────────────┐\n│  Layer 2 — Primer server                                             │\n│  derives the learner's course-grade from the frontend (publishableKey) │\n│  filters frontier routes whose frames need PCIs not in supportedPcis │\n│  grades submissions, advances curriculum, returns next state           │\n└──────────────────────────────────────────────────────────────────────┘\n\n┌──────────────────────────────────────────────────────────────────────┐\n│  Layer 3 — your host renderer (React, Vue, Svelte, vanilla DOM, …)   │\n│  switch on state.phase and state.kind                                │\n│  for portable-custom: read state.pciId + state.properties, render UI │\n│  call state.submit(value) with typed PciValue<K>                     │\n│  optional: import PciRenderProps<K> to type your component props       │\n└──────────────────────────────────────────────────────────────────────┘\n```\n\n### Layer boundaries\n\n| Concern | Owner | SDK surface |\n| --- | --- | --- |\n| Auth and session token cache | `primer-tives` | `start`, `SignInRequiredState.login()`, … |\n| Frontier routing and frame transitions | `primer-tives` + server | `FrontierState.enter`, `advance`, `submit`, … |\n| PCI capability negotiation on the wire | `primer-tives` + server | `supportedPcis` on `PrimerOptions` |\n| PCI widget UI (fraction inputs, etc.) | **host renderer** | `PciInteractionState`, optional `PciRenderProps` |\n| Reference React implementation | `@superbuilders/primer-renderer` (separate package) | not required for SDK integration |\n\n### Invariants integrators should memorize\n\n1. **`start()` never invokes renderer functions.** There is no renderer registry on the state machine. `supportedPcis` is a readonly array of PCI id strings sent on the wire.\n2. **PCI rendering is orthogonal to the state machine.** When `state.kind === \"portable-custom\"`, the SDK gives you `pciId`, `properties`, and `submit(value)`. How you paint that on screen is entirely host code.\n3. **`PciRenderProps` is an optional host-renderer contract**, exported for component authors. Import it when typing your fraction-input component. Do **not** pass it to `start()`.\n4. **The SDK has no React dependency.** `package.json` depends on `errors`, `validate`, and `pino` only. Examples in this README may show React for familiarity; the same `start()` options work in any runtime.\n\n### What the SDK does not do\n\nPrimerTives intentionally does **not**:\n\n- render Portable Custom Interactions or standard interactions\n- require React, Vue, Svelte, or any UI framework\n- ship UI components in the npm package\n- call functions you pass in `start` options (you do not pass functions)\n- negotiate PCI support implicitly — you declare `supportedPcis` explicitly\n- select frontier routes server-side — the frontend chooses from `FrontierState.routes`\n\nIf documentation or examples suggest passing React components to `start()`, that is incorrect. `start()` accepts `supportedPcis: readonly PciId[]` — a list of ids, never components. You render every PCI yourself in your own UI layer when the state machine reaches `PciInteractionState`.\n\n## Quick Start\n\nA host declares which Portable Custom Interactions (PCIs) it can render in `supportedPcis`. This is wire capability negotiation only — the Primer server uses the list to avoid serving a frame whose interaction the host cannot paint, and you still render the PCI in your own UI layer when the state machine reaches `PciInteractionState`. The course-grade a learner runs is **not** a host input: it is owned by the Primer frontend identified by your `publishableKey` and resolved server-side, so there is no `subject`, `courseId`, or `gradeLevel` to pass.\n\nIf the frontend's assigned course can emit the fraction-input PCI, declare it:\n\n```ts\nimport { start } from \"@superbuilders/primer-tives/client\"\nimport type {\n\tPrimerOptionsWithAccessToken,\n\tPrimerOptionsWithManagedAuth\n} from \"@superbuilders/primer-tives/client\"\nimport { logger } from \"@/logger\"\n\nconst options = {\n\tpublishableKey: \"pk_...\",\n\tsupportedPcis: [\"urn:primer:pci:fraction-input\"],\n\tlogger\n} satisfies PrimerOptionsWithManagedAuth<\"urn:primer:pci:fraction-input\">\n\nlet state = await start(options)\n```\n\nPrimer exposes one unified learning surface. There is no product-mode option and no content-scope option: every learner moves through the same frontier-driven curriculum state machine for the course-grade their frontend is assigned, and the server owns all progression policy.\n\nIf your frontend's course needs no Portable Custom Interactions, declare an empty capability set. `supportedPcis` is required, but an empty array is valid for a host that renders only the standard interactions:\n\n```ts\nconst options = {\n\tpublishableKey: \"pk_...\",\n\tsupportedPcis: [],\n\tlogger\n} satisfies PrimerOptionsWithManagedAuth\n\nlet state = await start(options)\n```\n\nIf your application already has a learner access token, pass it directly. `start` uses that token for the learning runtime.\n\n```ts\nconst options = {\n\tpublishableKey: \"pk_...\",\n\taccessToken,\n\tsupportedPcis: [\"urn:primer:pci:fraction-input\"],\n\tlogger\n} satisfies PrimerOptionsWithAccessToken<\"urn:primer:pci:fraction-input\">\n\nlet state = await start(options)\n```\n\nWhen managed-auth `start` returns `SignInRequiredState`, render sign-in UI and call `login()` directly from a user gesture:\n\n```ts\nimport type { ManagedStartState, SignInRequiredState } from \"@superbuilders/primer-tives/types\"\n\nlet state: ManagedStartState = await start(options)\n\nif (state.phase === \"sign-in-required\") {\n\trenderSignInButton(state)\n}\n\nfunction handleSignInClick(authState: SignInRequiredState): void {\n\tvoid authState.login().then(function continueAfterLogin(nextState) {\n\t\tstate = nextState\n\t\trenderPrimer(state)\n\t})\n}\n```\n\nFor Chrome and other popup blockers, `login()` must be called directly from the click or tap handler. Do not put `await`, `setTimeout`, dynamic imports, analytics calls, or other async work before `state.login()`.\n\nWhether a frontend's course can emit a required PCI is a server-side property of the assigned course-grade, not something the host chooses. Declare every PCI id your renderer supports and let the server decide what is routable for that frontend; the same empty-capability shape is valid for a host that renders only the standard interactions:\n\n```ts\nconst options = {\n\tpublishableKey: \"pk_...\",\n\tsupportedPcis: [],\n\tlogger\n} satisfies PrimerOptionsWithManagedAuth\n\nlet state = await start(options)\n```\n\n## The Frontier Model\n\nPrimer routing is frontier-first. For an authenticated, configured learner, `start` typically resolves to `FrontierState`: the set of equally valid next-lesson routes at the learner's current position in the curriculum DAG.\n\n```ts\ninterface FrontierState<Pcis extends PciId = PciId> {\n\treadonly phase: \"frontier\"\n\treadonly routes: readonly [FrontierRoute, ...FrontierRoute[]]\n\tenter(route: FrontierRoute): ObservationState<Pcis> | InteractionState<Pcis>\n}\n\ninterface FrontierRoute {\n\treadonly lesson: LessonMetadata\n}\n\ninterface LessonMetadata {\n\treadonly id: string\n\treadonly title: string\n\treadonly stage: LessonStage\n}\n\ntype LessonStage = \"teaching\" | \"testing\" | \"transfer\"\n```\n\nThe frontend chooses the route. That is the point of the frontier: every route is an equally valid path through the curriculum DAG, and Primer delegates the choice to the renderer. Pick the first route, render `route.lesson` metadata as a chooser, or apply any host-side selection policy.\n\n`state.enter(route)` is synchronous. It returns `ObservationState | InteractionState` immediately from local data already delivered with the frontier. Never write `await state.enter(route)`. Entering a route fires a background frame-open beacon that the caller never sees and never waits on.\n\n```ts\nif (state.phase === \"frontier\") {\n\tconst route = state.routes[0]\n\trenderLessonTitle(route.lesson.title, route.lesson.stage)\n\tstate = state.enter(route)\n}\n```\n\nAfter the entered frame reaches a terminal action (a graded submission or timeout) and the learner advances through feedback with `advance()`, the SDK returns a fresh `FrontierState` reflecting the learner's new position, or `CompletedState` when the runtime scope is finished.\n\nIf a frontier route's frame requires a PCI that the host did not declare in `supportedPcis`, the server filters that route before it reaches the SDK. The SDK keeps an unsupported-PCI fatal path as an invariant guard.\n\n## `start(options)`\n\n```ts\nfunction start<const Pcis extends PciId = PciId>(\n\toptions: PrimerOptionsWithAccessToken<Pcis>\n): Promise<AccessTokenStartState<Pcis>>\n\nfunction start<const Pcis extends PciId = PciId>(\n\toptions: PrimerOptionsWithManagedAuth<Pcis>\n): Promise<ManagedStartState<Pcis>>\n```\n\n`start` is generic over a single type parameter `Pcis extends PciId` — the union of PCI ids your host declared in `supportedPcis`. The `const` modifier infers that union from the literal array you pass, so the rest of the state machine (`PciInteractionState`, submissions, reviews) is narrowed to exactly the PCIs you support. There is no `Subject` type parameter and no content-scope parameter: the course-grade is owned by the frontend keyed by `publishableKey` and resolved server-side. `AccessTokenStartState<Pcis>` is `PrimerState<Pcis, \"access-token\">` and `ManagedStartState<Pcis>` is `PrimerState<Pcis, \"managed\">`; the access-token overload can never resolve to a sign-in state, while the managed overload can.\n\n`start` is the first SDK lifecycle operation. Its return type depends on whether `accessToken` is present:\n\n| Result | Meaning |\n| --- | --- |\n| `SignInRequiredState` | Learner sign-in is needed before runtime learning can begin. Managed-auth mode only. |\n| `SignInFailedState` | Hosted sign-in failed but can be retried. Managed-auth mode only. |\n| `AuthUnavailableState` | Browser-hosted auth cannot run in the current runtime. Managed-auth mode only. |\n| `AuthConfigInvalidState` | Hosted-auth configuration is invalid and cannot be retried. Managed-auth mode only. |\n| `FrontierState` | A frontier of next-lesson routes is ready. The renderer chooses a route and enters it. |\n| `ObservationState`, `InteractionState`, or `FeedbackState` | A learning state is ready to render. |\n| `CompletedState` | The runtime scope is already complete. |\n| `ErroredState` | Startup or runtime communication failed but may be retriable. |\n| `FatalState` | Startup or runtime communication failed terminally for this state object. |\n\nAlways switch on `state.phase`. Do not assume the first state is renderable learning content.\n\nEvery learning state exposes `state.journey`, a read-only NON-NULL learner progress object. Auth states (`sign-in-required`, `sign-in-failed`, `auth-unavailable`, `auth-config-invalid`, `not-entitled`, `placement-required`) have no journey field at all; `session-expired` carries the last-known journey or `null`; `errored`/`fatal` carry an optional last-known journey for display continuity. The journey is pure progress data — course and lesson, each with `{ done, total }` — and carries no mode: `journey.lesson === null` means the run is complete, anything else is active learning. Runtime identity is resolved by TimeBack auth and server-owned roster identity. Placement is server-owned and grade is not an SDK input, output, state field, export, or error.\n\n```ts\ninterface Journey {\n\treadonly course: { readonly title: string; readonly progress: JourneyProgress }\n\treadonly lesson: { readonly title: string; readonly progress: JourneyProgress } | null\n}\n```\n\n`state.journey` cannot be used to select content or change Primer routing. It is display data only.\n\n```ts\nimport * as errors from \"@superbuilders/errors\"\nimport { logger } from \"@/logger\"\nimport { start } from \"@superbuilders/primer-tives/client\"\nimport type { PrimerOptionsWithAccessToken } from \"@superbuilders/primer-tives/client\"\nimport { ErrAuthUnavailable, ErrMalformedAccessToken } from \"@superbuilders/primer-tives/errors\"\n\nconst options = {\n\tpublishableKey,\n\taccessToken,\n\tsupportedPcis: [\"urn:primer:pci:fraction-input\"],\n\tlogger\n} satisfies PrimerOptionsWithAccessToken<\"urn:primer:pci:fraction-input\">\n\nlet state = await start(options)\nif (state.phase === \"fatal\") {\n\tif (errors.is(state.error, ErrMalformedAccessToken)) {\n\t\trenderSignInAgain()\n\t\treturn\n\t}\n\tlogger.error({ error: state.error }, \"primer fatal state\")\n\tthrow state.error\n}\n```\n\n## `PrimerOptions`\n\n```ts\ntype PrimerOptions<Pcis extends PciId = PciId> = {\n\treadonly publishableKey: string\n\treadonly supportedPcis: readonly Pcis[]\n\treadonly origin?: string\n\treadonly authOrigin?: string | undefined\n\treadonly fetch?: typeof globalThis.fetch\n\treadonly abort?: AbortController\n\treadonly logger: PrimerLogger\n}\n\ntype PrimerOptionsWithAccessToken<Pcis extends PciId = PciId> = PrimerOptions<Pcis> & {\n\treadonly accessToken: string\n}\n\ntype PrimerOptionsWithManagedAuth<Pcis extends PciId = PciId> = PrimerOptions<Pcis> & {\n\treadonly accessToken?: undefined\n}\n```\n\n`PrimerOptions` is generic over a single parameter `Pcis extends PciId` — the union of PCI ids the host can render. There is no `Subject` type parameter, no `subject` field, and no `courseId`/`gradeLevel` field; the course-grade is owned by the frontend keyed by `publishableKey` and resolved server-side.\n\n| Field | Required | Meaning |\n| --- | --- | --- |\n| `publishableKey` | Yes | Public key identifying the Primer frontend your runtime belongs to. The frontend's assigned course-grade is derived from this key server-side. |\n| `supportedPcis` | Yes | Renderer PCI capability declaration (ids only), `readonly Pcis[]`. Always required; pass `[]` for a host that renders only the standard interactions. Sent on every advance request; not a UI registry and never invoked. |\n| `origin` | No | Primer origin. Defaults to `https://primerlearn.dev`. |\n| `authOrigin` | No | Hosted-auth origin override. Defaults to the resolved `origin`. |\n| `accessToken` | Mode-dependent | Learner access token. When present, `start` uses access-token mode. When absent, `start` uses managed hosted-auth mode. |\n| `fetch` | No | Fetch override for tests, instrumentation, or host runtime integration. |\n| `abort` | No | Abort controller for SDK runtime work. |\n| `logger` | Yes | Structured logger implementing `debug`, `info`, `warn`, and `error`. The type is `pino`'s `Logger` (re-exported as `PrimerLogger`). |\n\nThe presence or absence of `accessToken` selects startup auth semantics.\n\nThe SDK uses Primer's production runtime by default.\n\n| Shape | Semantics |\n| --- | --- |\n| `accessToken` present | `start` validates the token shape locally and returns `AccessTokenStartState`. This mode cannot return sign-in states. |\n| `accessToken` absent | `start` uses managed hosted-auth mode. It reads and writes the SDK-managed browser session token cache documented below. |\n\nThe public API exposes hosted auth as state behavior. `SignInRequiredState.login()` and `SignInFailedState.login()` are the sign-in transitions. `AuthUnavailableState` and `AuthConfigInvalidState` expose no login operation.\n\n`supportedPcis` must be a concrete literal array at the options declaration site so the `const` type parameter on `start` can infer the exact PCI union. Construct options with `satisfies PrimerOptionsWithManagedAuth<\"urn:primer:pci:fraction-input\">`, `satisfies PrimerOptionsWithAccessToken<\"urn:primer:pci:fraction-input\">`, or — for a host that renders only the standard interactions — the default `satisfies PrimerOptionsWithManagedAuth` with `supportedPcis: []`. Do not widen `supportedPcis` to a broad `PciId[]` if you want the downstream `PciInteractionState`, submission, and review types narrowed to exactly the PCIs you support.\n\n## Managed Auth Token Persistence\n\nManaged hosted auth is designed for browser-only consumers that do not have their own server-side token broker. When `accessToken` is absent, PrimerTives owns a session-scoped browser token cache with one fixed storage location:\n\n```txt\nsessionStorage[\"primer:access-token:<publishableKey>\"]\n```\n\nThis is intentionally zero config. There is no storage selector and no persistence flag. Managed-auth mode always uses `globalThis.sessionStorage`; if `sessionStorage` is unavailable, `start` returns `AuthUnavailableState`.\n\nThe cache stores only the final Primer access token returned by hosted sign-in. OAuth transaction state, nonce, verifier, and callback validation state are not stored in browser storage; those remain server-managed by Primer.\n\nManaged-auth startup behavior is:\n\n| Situation | SDK behavior |\n| --- | --- |\n| Valid cached token exists | `start` uses it and enters the runtime without opening sign-in. |\n| No cached token exists | `start` returns `SignInRequiredState`. |\n| Cached token is malformed or expired | SDK clears the key and returns `SignInRequiredState`. |\n| Hosted sign-in succeeds | SDK validates the returned token, stores it at the documented key, then starts the runtime. |\n| Runtime rejects a managed cached token as expired or invalid | SDK clears the key and returns `SessionExpiredState` so the app can ask the learner to sign in again with progress context. |\n\nAccess-token mode bypasses this cache entirely. If `accessToken` is present in `start` options, PrimerTives does not read, write, or clear `sessionStorage`.\n\nThe cached value is a bearer credential. Browser-only consumers get reload convenience from this default, but any script that can read the page can read the token. Host applications must maintain normal XSS protections and should use access-token mode if they need to own token storage themselves.\n\n## Auth Semantics\n\nAn access token is expected to be JWS-shaped: it starts with `eyJ` and contains exactly two dots. If a provided token does not match that shape, `start` returns `FatalState` with `ErrMalformedAccessToken`.\n\nSDK-managed auth may require browser capabilities and learner interaction. Auth failures are represented by explicit auth states:\n\n| Sentinel | Meaning |\n| --- | --- |\n| `ErrAuthUnavailable` | SDK-managed auth requires browser functionality that is unavailable in the current runtime. |\n| `ErrAuthConfigInvalid` | SDK-managed auth was given invalid public configuration. |\n| `ErrAuthCallbackInvalid` | The auth result could not be accepted as a successful learner auth result. |\n| `ErrAuthStateMismatch` | The auth result did not match the auth attempt that initiated it. |\n| `ErrAuthPopupBlocked` | The browser blocked the learner auth window. |\n| `ErrAuthCancelled` | The learner auth interaction was closed or exceeded its allowed time. |\n| `ErrMalformedAccessToken` | The resolved token was not shaped like a learner access token. |\n\nApplications should handle user-actionable auth failures directly and log unexpected failures before propagating them.\n\n```ts\nimport * as errors from \"@superbuilders/errors\"\nimport { logger } from \"@/logger\"\nimport {\n\tErrAuthCancelled,\n\tErrAuthPopupBlocked,\n\tErrAuthUnavailable\n} from \"@superbuilders/primer-tives/errors\"\n\nlet state = await start(options)\nif (state.phase === \"sign-in-failed\") {\n\tif (errors.is(state.error, ErrAuthPopupBlocked)) {\n\t\trenderPopupInstructions(state)\n\t\treturn\n\t}\n\tif (errors.is(state.error, ErrAuthCancelled)) {\n\t\trenderTryAgain(state)\n\t\treturn\n\t}\n\tlogger.error({ error: state.error }, \"primer auth failed\")\n\trenderSignInButton(state)\n\treturn\n}\n\nif (state.phase === \"auth-unavailable\") {\n\trenderUnsupportedBrowserMessage(state.error)\n\treturn\n}\n\nif (state.phase === \"auth-config-invalid\") {\n\tlogger.error({ error: state.error }, \"primer auth configuration invalid\")\n\trenderIntegrationError(state.error)\n\treturn\n}\n\nif (state.phase === \"sign-in-required\") {\n\trenderSignInButton(state)\n}\n```\n\n## PCI Capability Contract\n\n`supportedPcis` is the host's declaration of which Portable Custom Interactions its renderer can paint. It is the only capability input to `start` — there is no `subject`, no content-scope option, and no per-call course selection. The course-grade a learner runs is owned by the Primer frontend identified by `publishableKey` and resolved server-side; the host never names it.\n\n`PciId` is the union of every registered PCI id, derived from the `PciRegistry`:\n\n```ts\nimport { PCI_IDS, isPciId, type PciId } from \"@superbuilders/primer-tives/contracts\"\n\nconst ids = PCI_IDS                       // readonly [\"urn:primer:pci:fraction-input\"]\ntype RuntimePciId = PciId                 // \"urn:primer:pci:fraction-input\"\n```\n\nCurrently exactly one PCI is registered:\n\n| PCI id | Host must render |\n| --- | --- |\n| `\"urn:primer:pci:fraction-input\"` | a fraction input widget (see [Fraction Input PCI](#fraction-input-pci)) |\n| any future registered id | the corresponding widget |\n\nThe contract is a capability negotiation, not a content request:\n\n```txt\nthe host renders exactly the PCIs it lists in supportedPcis\nthe server serves a frontend's course only the frames the host can render\n```\n\nOrder does not matter and an empty list is valid. `supportedPcis` is a **capability declaration** for wire negotiation, not a content request and not a component registry — the SDK never calls host renderer code. The `const Pcis` type parameter on `start` infers the exact union from your literal array, so the rest of the state machine is typed to precisely the PCIs you declared.\n\nA host that renders only the standard interactions passes an empty array:\n\n```ts\nconst options = {\n\tpublishableKey,\n\tsupportedPcis: [],\n\tlogger\n} satisfies PrimerOptionsWithManagedAuth\n\nawait start(options)\n```\n\nA host that can render the fraction-input PCI declares it; the resulting state machine is narrowed to that id:\n\n```ts\nconst options = {\n\tpublishableKey,\n\tsupportedPcis: [\"urn:primer:pci:fraction-input\"],\n\tlogger\n} satisfies PrimerOptionsWithManagedAuth<\"urn:primer:pci:fraction-input\">\n\nawait start(options)\n```\n\nThe server uses the declared `supportedPcis` list to avoid serving the frontend's course frames whose portable custom interactions the host cannot render: a frontier route whose frame needs an undeclared PCI is filtered out before it reaches the SDK. The SDK keeps `ErrUnsupportedPci` as an invariant guard — if the server ever returns an undeclared PCI anyway, the affected route resolves to a `FatalState` with code `\"unsupported-pci\"`.\n\n## Runtime Loop\n\nRenderer code can use total matcher helpers instead of hand-written switches. Handler maps are exhaustive at compile time.\n\n```ts\nimport { matchPrimerState } from \"@superbuilders/primer-tives/client\"\nimport type { PrimerState } from \"@superbuilders/primer-tives/types\"\n\nfunction renderPrimer(state: PrimerState) {\n\treturn matchPrimerState(state, {\n\t\t\"sign-in-required\": renderSignIn,\n\t\t\"sign-in-failed\": renderSignInFailure,\n\t\t\"session-expired\": renderSessionExpired,\n\t\t\"auth-unavailable\": renderAuthUnavailable,\n\t\t\"auth-config-invalid\": renderAuthConfigInvalid,\n\t\t\"not-entitled\": renderNotEntitled,\n\t\t\"placement-required\": renderPlacementRequired,\n\t\tfrontier: renderFrontier,\n\t\tobservation: renderObservation,\n\t\tinteraction: renderInteraction,\n\t\tfeedback: renderFeedback,\n\t\tcompleted: renderCompleted,\n\t\terrored: renderErrored,\n\t\tfatal: renderFatal\n\t})\n}\n```\n\nRaw switch statements remain supported. Every renderer should switch on `state.phase`. Interaction rendering should then switch on `state.kind`.\n\n```ts\nimport { logger } from \"@/logger\"\nimport type { PrimerState } from \"@superbuilders/primer-tives/types\"\n\nasync function runPrimer(initialState: PrimerState): Promise<void> {\n\tlet state = initialState\n\n\twhile (state.phase !== \"completed\" && state.phase !== \"fatal\") {\n\t\tswitch (state.phase) {\n\t\tcase \"sign-in-required\":\n\t\tcase \"sign-in-failed\":\n\t\t\trenderSignInButton(state)\n\t\t\treturn\n\t\tcase \"auth-unavailable\":\n\t\t\trenderUnsupportedBrowserMessage(state.error)\n\t\t\treturn\n\t\t\tcase \"frontier\": {\n\t\t\t\t// Every route is equally valid. Pick one, or render route.lesson\n\t\t\t\t// metadata as a chooser and enter the learner's pick.\n\t\t\t\tconst route = state.routes[0]\n\t\t\t\tstate = state.enter(route)\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase \"observation\":\n\t\t\t\trenderFrame(state.body, state.stimulus)\n\t\t\t\tstate = await state.advance()\n\t\t\t\tbreak\n\t\t\tcase \"interaction\":\n\t\t\t\tstate = await renderAndSubmitInteraction(state)\n\t\t\t\tbreak\n\t\t\tcase \"feedback\":\n\t\t\t\tif (state.verdict === \"timedOut\") {\n\t\t\t\t\trenderTimeoutFeedback(state.feedbackContent)\n\t\t\t\t} else {\n\t\t\t\t\trenderAnsweredFeedback(state.feedbackContent, state.verdict === \"correct\", state.review)\n\t\t\t\t}\n\t\t\t\tstate = await state.advance()\n\t\t\t\tbreak\n\t\t\tcase \"errored\":\n\t\t\t\tif (state.retriable) {\n\t\t\t\t\tstate = await state.retry()\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tlogger.error({ error: state.error }, \"primer state error\")\n\t\t\t\tthrow state.error\n\t\t}\n\t}\n\n\tif (state.phase === \"fatal\") {\n\t\tlogger.error({ error: state.error }, \"primer fatal state\")\n\t\tthrow state.error\n\t}\n}\n```\n\nState transitions:\n\n| Current state | Valid operation | Next result |\n| --- | --- | --- |\n| `SignInRequiredState` | `login()` | `Promise<ManagedStartState>` |\n| `SignInFailedState` | `login()` | `Promise<ManagedStartState>` |\n| `SessionExpiredState` | `login()` | `Promise<ManagedStartState>` |\n| `AuthUnavailableState` | none | terminal for hosted auth in this runtime |\n| `AuthConfigInvalidState` | none | terminal for the current configuration |\n| `FrontierState` | `enter(route)` | `EnterNext` (synchronous) |\n| `ObservationState` | `advance()` | `Promise<ObservationAdvanceNext>` |\n| `ChoiceState` | `submitChoice(selectedKeys)` or `timeout()` | `Promise<SubmitNext>` / `Promise<TimeoutNext>` |\n| `TextEntryState` | `submitText(value)` or `timeout()` | `Promise<SubmitNext>` / `Promise<TimeoutNext>` |\n| `ExtendedTextSingleState` | `submitText(value)` or `timeout()` | `Promise<SubmitNext>` / `Promise<TimeoutNext>` |\n| `ExtendedTextMultipleState` | `submitTexts(values)` or `timeout()` | `Promise<SubmitNext>` / `Promise<TimeoutNext>` |\n| `OrderState` | `submitOrder(orderedKeys)` or `timeout()` | `Promise<SubmitNext>` / `Promise<TimeoutNext>` |\n| `MatchState` | `submitMatch(pairs)` or `timeout()` | `Promise<SubmitNext>` / `Promise<TimeoutNext>` |\n| `PciInteractionState` | `submit(value)` or `timeout()` | `Promise<SubmitNext>` / `Promise<TimeoutNext>` |\n| `FeedbackState` | `advance()` | `Promise<FeedbackAdvanceNext>` |\n| `CompletedState` | none | terminal |\n| `RetriableErroredState` | `retry()` | `Promise<RetryNext>` |\n| `NonRetriableErroredState` | none | terminal for the failed intent |\n| `FatalState` | none | terminal |\n\n## `PrimerState`\n\n```ts\ntype PrimerState<Pcis extends PciId = PciId, M extends AuthMode = \"managed\"> =\n\t| SignInRequiredState<Pcis>\n\t| SignInFailedState<Pcis>\n\t| SessionExpiredState<Pcis>\n\t| AuthUnavailableState\n\t| AuthConfigInvalidState\n\t| RuntimeState<Pcis, M>\n\t| CompletedState\n\t| ErroredState<Pcis, M>\n\t| FatalState\n\ntype RuntimeState<Pcis extends PciId = PciId, M extends AuthMode = \"managed\"> =\n\t| FrontierState<Pcis, M>\n\t| ObservationState<Pcis, M>\n\t| InteractionState<Pcis, M>\n\t| FeedbackState<Pcis, M>\n```\n\n`PrimerState` is live in-memory state. It contains transition closures, pending-operation guards, and retry behavior. Do not serialize it, store it, clone it through JSON, or pass it through host data. Calling `JSON.stringify(state)` throws `ErrNotSerializable`.\n\nStart a new state by calling `start` again after a reload, remount, account switch, or frontend reassignment.\n\n## `SignInRequiredState`\n\n```ts\ninterface SignInRequiredState<Pcis extends PciId = PciId> {\n\treadonly phase: \"sign-in-required\"\n\tlogin(): Promise<ManagedStartState<Pcis>>\n}\n```\n\n`SignInRequiredState` means learner sign-in is required before learning content can be rendered. It has no `error` field because no sign-in attempt has failed. Render a sign-in button or equivalent learner action. Call `login()` only from that user action.\n\nCorrect browser-safe pattern:\n\n```ts\nfunction handleSignInClick(state: SignInRequiredState): void {\n\tvoid state.login().then(function continueAfterLogin(nextState) {\n\t\trenderPrimer(nextState)\n\t})\n}\n```\n\nReact renderers should use the same direct-call rule:\n\n```tsx\nfunction SignInButton({ state }: { state: SignInRequiredState }) {\n\tasync function handleClick() {\n\t\tconst nextState = await state.login()\n\t\trenderPrimer(nextState)\n\t}\n\n\treturn <button type=\"button\" onClick={handleClick}>Sign in to continue</button>\n}\n```\n\nFor Chrome popup blocking, `state.login()` must be the first async-producing operation in the click or tap handler. This is correct:\n\n```ts\nasync function handleClick() {\n\tconst nextState = await state.login()\n\trenderPrimer(nextState)\n}\n```\n\nThis is not browser-safe:\n\n```ts\nasync function handleClick() {\n\tawait recordAnalyticsClick()\n\tconst nextState = await state.login()\n\trenderPrimer(nextState)\n}\n```\n\nIf `login()` fails in a retryable hosted-auth way, it resolves to `SignInFailedState`. If hosted auth cannot run in the current runtime, it resolves to `AuthUnavailableState`. If the public hosted-auth configuration is invalid, it resolves to `AuthConfigInvalidState`.\n\n## `SignInFailedState`\n\n```ts\ninterface SignInFailedState<Pcis extends PciId = PciId> {\n\treadonly phase: \"sign-in-failed\"\n\treadonly error: Error\n\tlogin(): Promise<ManagedStartState<Pcis>>\n}\n```\n\n`SignInFailedState` means a hosted sign-in attempt failed but another user gesture may retry it. Render the error and bind `login()` to a retry button.\n\n## `SessionExpiredState`\n\n```ts\ninterface SessionExpiredState<Pcis extends PciId = PciId> {\n\treadonly phase: \"session-expired\"\n\treadonly error: Error\n\treadonly journey: Journey | null\n\tlogin(): Promise<ManagedStartState<Pcis>>\n}\n```\n\n`SessionExpiredState` means a managed-auth runtime token expired or was rejected after learning had started. Render sign-in UI again; `journey` carries the last known learner position when one was available.\n\n## `AuthUnavailableState`\n\n```ts\ninterface AuthUnavailableState {\n\treadonly phase: \"auth-unavailable\"\n\treadonly error: Error\n}\n```\n\n`AuthUnavailableState` means the browser capabilities needed for hosted auth are unavailable. It does not expose `login()` because retrying the same operation cannot work in that runtime.\n\n## `AuthConfigInvalidState`\n\n```ts\ninterface AuthConfigInvalidState {\n\treadonly phase: \"auth-config-invalid\"\n\treadonly error: Error\n}\n```\n\n`AuthConfigInvalidState` means hosted auth cannot run because the public configuration is invalid. It does not expose `login()` because retrying cannot fix invalid configuration.\n\n## Common State Fields\n\nLearning states that render content expose `body` and `stimulus`.\n\n```ts\ninterface RenderableState {\n\treadonly body: ContentBlock[]\n\treadonly stimulus: RendererStimulus | null\n}\n```\n\n`body` is the main instructional content. `stimulus` is optional supporting material. Current stimulus support is image-only, but it is still a discriminated union so renderers can remain future-safe.\n\nObservation and interaction states also expose `lesson`, the public metadata of the lesson the frame belongs to.\n\n```ts\ninterface LessonMetadata {\n\treadonly id: string\n\treadonly title: string\n\treadonly stage: LessonStage\n}\n```\n\n`lesson.stage` is the lesson's stage in the curriculum: `\"teaching\"`, `\"testing\"`, or `\"transfer\"`. `LessonStage`, `LESSON_STAGES`, and `isLessonStage` are exported from `@superbuilders/primer-tives/contracts`. `lesson` is display data; it cannot be used to select content or change Primer routing.\n\n## `FrontierState`\n\n```ts\ninterface FrontierState<Pcis extends PciId = PciId> {\n\treadonly phase: \"frontier\"\n\treadonly routes: readonly [FrontierRoute, ...FrontierRoute[]]\n\tenter(route: FrontierRoute): ObservationState<Pcis> | InteractionState<Pcis>\n}\n\ninterface FrontierRoute {\n\treadonly lesson: LessonMetadata\n}\n```\n\nThe frontier is the central routing state. Each route carries public `lesson` metadata so the renderer can present the choice. The frontend chooses which route to enter; every route is an equally valid next step in the curriculum DAG.\n\n`state.enter(route)` is synchronous and local. It does not return a promise; never `await state.enter(route)`. It returns the route's frame as `ObservationState | InteractionState` from data already delivered with the frontier, and fires a background frame-open beacon the caller never observes.\n\nEnter exactly one route per frontier. After the entered frame's terminal action and feedback `advance()`, the SDK resolves a fresh frontier (or `CompletedState`).\n\n## `ObservationState`\n\n```ts\ninterface ObservationState<Pcis extends PciId = PciId> {\n\treadonly phase: \"observation\"\n\treadonly lesson: LessonMetadata\n\treadonly body: ContentBlock[]\n\treadonly stimulus: RendererStimulus | null\n\tadvance(): Promise<PrimerState<Pcis>>\n}\n```\n\nRender the frame, then call `advance()` when the learner is ready to continue. Observation states have no answer to submit.\n\nRepeated `advance()` calls while the first one is pending return the same pending result.\n\n## `InteractionState`\n\n```ts\ntype InteractionState<Pcis extends PciId = PciId> =\n\t| ChoiceState<Pcis>\n\t| TextEntryState<Pcis>\n\t| ExtendedTextState<Pcis>\n\t| OrderState<Pcis>\n\t| MatchState<Pcis>\n\t| PciInteractionState<Pcis>\n```\n\nEvery interaction state includes:\n\n| Field | Meaning |\n| --- | --- |\n| `phase: \"interaction\"` | State-machine discriminator. |\n| `kind` | Renderer-facing interaction kind. |\n| `lesson` | Public lesson metadata for the frame. |\n| `body` | Frame content. |\n| `stimulus` | Optional frame stimulus. |\n| `interaction` | Full interaction contract object. |\n| `feedback` | Recoverable feedback for the current attempt, or `null` on a fresh frame. |\n| `rejection` | Local/server submission validation feedback for the current attempt, or `null`. |\n| submit method | Kind-specific learner submission operation. |\n| `timeout()` | Records that the learner timed out or the host chose to end the attempt without a submission. A successful timeout resolves to timeout feedback before the next frame. |\n\nSubmission methods validate standard interaction payloads before runtime submission. Invalid standard submissions resolve back to `InteractionState` with `rejection` populated, so `state = await state.submit...()` is always safe.\n\n### Recoverable Feedback\n\nNot every submission is terminal. A submission may resolve back to the same interaction phase with `feedback` populated (`ContentInline[]`) so the learner can revise and resubmit.\n\nWhen a recoverable result arrives, the prior input is preserved in `state.revision` — uniformly across every interaction kind. Render `state.revision.feedback`, prefill the input from `state.revision.previous`, and let the learner submit again. `state.revision.revisionsRemaining` exposes the revision budget and `state.revision.finalAttempt` is `true` when the next submit is terminal. Terminal submissions resolve to `FeedbackState` instead.\n\nConcurrent interaction operations are guarded:\n\n| Situation | SDK behavior |\n| --- | --- |\n| Same submit payload while submit is pending | Returns the same pending result. |\n| Different submit payload while submit is pending | Returns the already in-flight submit result. |\n| Submit while timeout is pending | Returns the already in-flight timeout result. |\n| Timeout while submit is pending | Returns the already in-flight submit result. |\n| Repeated timeout while timeout is pending | Returns the same pending result. |\n\n## Interaction Calibration And Accuracy\n\nEvery interaction object carries aggregate calibration and accuracy data:\n\n```ts\ntype InteractionCalibration = {\n\treadonly p0: number\n\treadonly p25: number\n\treadonly p50: number\n\treadonly p75: number\n\treadonly p100: number\n}\n\ntype InteractionAccuracy =\n\t| { readonly correct: number; readonly total: number }\n\t| { readonly correct: 0; readonly total: 0 }\n```\n\nAccess these fields from the interaction contract object:\n\n```ts\nstate.interaction.calibration\nstate.interaction.accuracy\n```\n\n`interaction.calibration` is nullable. If Primer has no terminal samples for an interaction, calibration is `null`.\n\n```ts\nif (state.interaction.calibration !== null) {\n\tconst medianMs = state.interaction.calibration.p50\n}\n```\n\n`interaction.accuracy` is never nullable. If Primer has no terminal samples, accuracy is `{ correct: 0, total: 0 }`.\n\n```ts\nconst { correct, total } = state.interaction.accuracy\nconst observedAccuracy = total === 0 ? undefined : correct / total\n```\n\nCalibration is aggregate historical timing data for this interaction. It measures elapsed time from frame open to the first terminal green/red submitted response. All calibration values are milliseconds. Yellow-path recoverable responses are not terminal and are excluded. Timeouts are excluded. `p100` is the literal maximum observed terminal duration.\n\nAccuracy is aggregate correctness over the same terminal submitted response set. `correct` is the number of terminal responses graded correct. `total` is the number of terminal responses. Primer exposes counts rather than a ratio so hosts can choose their own smoothing and display rules.\n\nPrimer uses UUIDv7 event ids as the timing source for calibration. No timestamp fields are exposed through the SDK.\n\nObservation states do not expose interaction calibration or accuracy because they have no interaction object.\n\nExample game-feedback usage:\n\n```ts\nif (state.phase === \"interaction\") {\n\tconst calibration = state.interaction.calibration\n\tconst accuracy = state.interaction.accuracy\n\n\tif (calibration !== null) {\n\t\tconst fastTarget = calibration.p25\n\t\tconst typicalTarget = calibration.p50\n\t\tconst slowTarget = calibration.p75\n\t\tconfigureRewardTiming({ fastTarget, typicalTarget, slowTarget })\n\t}\n\n\tconst observedAccuracy = accuracy.total === 0 ? undefined : accuracy.correct / accuracy.total\n\tconfigureRewardRules({ observedAccuracy })\n}\n```\n\n## `ChoiceState`\n\n```ts\ninterface ChoiceState<Pcis extends PciId = PciId> {\n\treadonly phase: \"interaction\"\n\treadonly kind: \"choice\"\n\treadonly lesson: LessonMetadata\n\treadonly body: ContentBlock[]\n\treadonly stimulus: RendererStimulus | null\n\treadonly interaction: Extract<StandardRendererInteraction, { type: \"choice\" }>\n\treadonly revision: Revision<{ readonly selectedKeys: string[] }> | null\n\treadonly options: RendererChoice[]\n\treadonly minChoices: number\n\treadonly maxChoices: number\n\tsubmitChoice(selectedKeys: string[]): Promise<PrimerState<Pcis>>\n\ttimeout(): Promise<PrimerState<Pcis>>\n}\n```\n\nUse `minChoices` and `maxChoices` to decide whether the UI should submit immediately or require an explicit submit action.\n\nValid `submitChoice` payloads use identifiers from `state.options`:\n\n| Requirement | Error if violated |\n| --- | --- |\n| At least `minChoices` identifiers | `ErrInvalidSubmission` |\n| At most `maxChoices` identifiers | `ErrInvalidSubmission` |\n| Every identifier exists in `options` | `ErrInvalidSubmission` |\n| No duplicate identifiers | `ErrInvalidSubmission` |\n\n## `TextEntryState`\n\n```ts\ninterface TextEntryState<Pcis extends PciId = PciId> {\n\treadonly phase: \"interaction\"\n\treadonly kind: \"text-entry\"\n\treadonly lesson: LessonMetadata\n\treadonly body: ContentBlock[]\n\treadonly stimulus: RendererStimulus | null\n\treadonly interaction: Extract<StandardRendererInteraction, { type: \"text-entry\" }>\n\treadonly revision: Revision<{ readonly value: string }> | null\n\tsubmitText(value: string): Promise<PrimerState<Pcis>>\n\ttimeout(): Promise<PrimerState<Pcis>>\n}\n```\n\nThe interaction may include `expectedLength`, `patternMask`, and `placeholderText`. These are renderer hints. The SDK requires the submission to be a text-entry submission with a string value.\n\n## `ExtendedTextState`\n\nExtended text has two cardinalities.\n\n```ts\ninterface ExtendedTextSingleState<Pcis extends PciId = PciId> {\n\treadonly phase: \"interaction\"\n\treadonly kind: \"extended-text\"\n\treadonly cardinality: \"single\"\n\treadonly lesson: LessonMetadata\n\treadonly body: ContentBlock[]\n\treadonly stimulus: RendererStimulus | null\n\treadonly interaction: Extract<\n\t\tStandardRendererInteraction,\n\t\t{ type: \"extended-text\"; cardinality: \"single\" }\n\t>\n\treadonly revision: Revision<{ readonly value: string }> | null\n\tsubmitText(value: string): Promise<PrimerState<Pcis>>\n\ttimeout(): Promise<PrimerState<Pcis>>\n}\n\ninterface ExtendedTextMultipleState<Pcis extends PciId = PciId> {\n\treadonly phase: \"interaction\"\n\treadonly kind: \"extended-text\"\n\treadonly cardinality: \"multiple\"\n\treadonly lesson: LessonMetadata\n\treadonly body: ContentBlock[]\n\treadonly stimulus: RendererStimulus | null\n\treadonly interaction: Extract<\n\t\tStandardRendererInteraction,\n\t\t{ type: \"extended-text\"; cardinality: \"multiple\" }\n\t>\n\treadonly revision: Revision<{ readonly values: string[] }> | null\n\treadonly minStrings: number\n\treadonly maxStrings: number\n\tsubmitTexts(values: string[]): Promise<PrimerState<Pcis>>\n\ttimeout(): Promise<PrimerState<Pcis>>\n}\n```\n\nFor single-cardinality extended text, call `submitText(value)`. For multiple-cardinality extended text, call `submitTexts(values)`.\n\nValid multiple-cardinality payloads:\n\n| Requirement | Error if violated |\n| --- | --- |\n| At least `minStrings` values | `ErrInvalidSubmission` |\n| At most `maxStrings` values | `ErrInvalidSubmission` |\n| No duplicate values | `ErrInvalidSubmission` |\n\n`expectedLength`, `expectedLines`, `patternMask`, and `placeholderText` are renderer hints.\n\n## `OrderState`\n\n```ts\ninterface OrderState<Pcis extends PciId = PciId> {\n\treadonly phase: \"interaction\"\n\treadonly kind: \"order\"\n\treadonly lesson: LessonMetadata\n\treadonly body: ContentBlock[]\n\treadonly stimulus: RendererStimulus | null\n\treadonly interaction: Extract<StandardRendererInteraction, { type: \"order\" }>\n\treadonly revision: Revision<{ readonly orderedKeys: string[] }> | null\n\treadonly choices: RendererChoice[]\n\treadonly minChoices: number\n\treadonly maxChoices: number\n\tsubmitOrder(orderedKeys: string[]): Promise<PrimerState<Pcis>>\n\ttimeout(): Promise<PrimerState<Pcis>>\n}\n```\n\nSubmit identifiers from `state.choices` in learner-selected order.\n\nValid `submitOrder` payloads:\n\n| Requirement | Error if violated |\n| --- | --- |\n| At least `minChoices` identifiers | `ErrInvalidSubmission` |\n| At most `maxChoices` identifiers | `ErrInvalidSubmission` |\n| Every identifier exists in `choices` | `ErrInvalidSubmission` |\n| No duplicate identifiers | `ErrInvalidSubmission` |\n\n## `MatchState`\n\n```ts\ninterface MatchPair {\n\tsource: string\n\ttarget: string\n}\n\ninterface MatchState<Pcis extends PciId = PciId> {\n\treadonly phase: \"interaction\"\n\treadonly kind: \"match\"\n\treadonly lesson: LessonMetadata\n\treadonly body: ContentBlock[]\n\treadonly stimulus: RendererStimulus | null\n\treadonly interaction: Extract<StandardRendererInteraction, { type: \"match\" }>\n\treadonly revision: Revision<{ readonly pairs: MatchPair[] }> | null\n\treadonly sourceChoices: RendererChoice[]\n\treadonly targetChoices: RendererChoice[]\n\treadonly minAssociations: number\n\treadonly maxAssociations: number\n\tsubmitMatch(pairs: MatchPair[]): Promise<PrimerState<Pcis>>\n\ttimeout(): Promise<PrimerState<Pcis>>\n}\n```\n\nEach pair connects one source identifier from `state.sourceChoices` to one target identifier from `state.targetChoices`.\n\nValid `submitMatch` payloads:\n\n| Requirement | Error if violated |\n| --- | --- |\n| At least `minAssociations` pairs | `ErrInvalidSubmission` |\n| At most `maxAssociations` pairs | `ErrInvalidSubmission` |\n| Every source identifier exists in `sourceChoices` | `ErrInvalidSubmission` |\n| Every target identifier exists in `targetChoices` | `ErrInvalidSubmission` |\n| No duplicate source-target pairs | `ErrInvalidSubmission` |\n| No duplicate source identifiers | `ErrInvalidSubmission` |\n| No duplicate target identifiers | `ErrInvalidSubmission` |\n\n## `PciInteractionState`\n\nPortable Custom Interaction state is typed by PCI id.\n\n```ts\ntype PciInteractionState<Pcis extends PciId = PciId> = {\n\t[K in Pcis]: {\n\t\treadonly phase: \"interaction\"\n\t\treadonly kind: \"portable-custom\"\n\t\treadonly lesson: LessonMetadata\n\t\treadonly body: ContentBlock[]\n\t\treadonly stimulus: RendererStimulus | null\n\t\treadonly interaction: PciInteraction<K>\n\t\treadonly revision: Revision<{ readonly value: PciValue<K> }> | null\n\t\treadonly pciId: K\n\t\treadonly properties: PciProps<K>\n\t\tsubmit(value: PciValue<K>): Promise<PrimerState<Pcis>>\n\t\ttimeout(): Promise<PrimerState<Pcis>>\n\t}\n}[Pcis]\n```\n\nWhen the state is narrowed to a PCI id, `submit` accepts only that PCI's value type.\n\n```ts\nimport type { PciValue } from \"@superbuilders/primer-tives/contracts\"\n\nif (state.phase === \"interaction\" && state.kind === \"portable-custom\") {\n\tif (state.pciId === \"urn:primer:pci:fraction-input\") {\n\t\tconst value: PciValue<\"urn:primer:pci:fraction-input\"> = readFractionInput(\n\t\t\tstate.properties\n\t\t)\n\t\tstate = await state.submit(value)\n\t}\n}\n```\n\n## `FeedbackState`\n\n```ts\ntype FeedbackState<Pcis extends PciId = PciId> =\n\t| AnsweredFeedbackState<Pcis>\n\t| TimedOutFeedbackState<Pcis>\n\ntype AnsweredFeedbackState<Pcis extends PciId = PciId> = {\n\t[K in InteractionKind]: {\n\t\treadonly phase: \"feedback\"\n\t\treadonly verdict: \"correct\" | \"incorrect\"\n\t\treadonly kind: K\n\t\treadonly body: ContentBlock[]\n\t\treadonly stimulus: RendererStimulus | null\n\t\treadonly interaction: InteractionFor<K, Pcis>\n\t\treadonly submission: SubmissionFor<K, Pcis>\n\t\treadonly feedbackContent: ContentInline[]\n\t\treadonly review: ReviewFor<K, Pcis> | null\n\t\tadvance(): Promise<PrimerState<Pcis>>\n\t}\n}[InteractionKind]\n\ninterface TimedOutFeedbackState<Pcis extends PciId = PciId> {\n\treadonly phase: \"feedback\"\n\treadonly verdict: \"timedOut\"\n\treadonly body: ContentBlock[]\n\treadonly stimulus: RendererStimulus | null\n\treadonly interaction: RendererInteraction<Pcis>\n\treadonly feedbackContent: ContentInline[]\n\tadvance(): Promise<PrimerState<Pcis>>\n}\n```\n\nFeedback state is returned after a terminal learner submission or timeout. Switch on `verdict` — wrongness has one name: `verdict !== \"correct\"`. Answered feedback (`\"correct\" | \"incorrect\"`) includes the submitted value, feedback content, and optional review data. `\"timedOut\"` feedback has no submitted value (there is none) and is scored as wrong. Call `advance()` when the learner is ready to continue; it typically resolves to a fresh `FrontierState` (or `CompletedState`).\n\nRepeated `advance()` calls while the first one is pending return the same pending result.\n\n## `CompletedState`\n\n```ts\ninterface CompletedState {\n\treadonly phase: \"completed\"\n}\n```\n\nTerminal state. There is no transition method.\n\n## `ErroredState`\n\n```ts\ntype ErroredState<Pcis extends PciId = PciId> =\n\t| RetriableErroredState<Pcis>\n\t| NonRetriableErroredState\n\ninterface RetriableErroredState<Pcis extends PciId = PciId> {\n\treadonly phase: \"errored\"\n\treadonly error: Error\n\treadonly retriable: true\n\tretry(): Promise<PrimerState<Pcis>>\n}\n\ninterface NonRetriableErroredState {\n\treadonly phase: \"errored\"\n\treadonly error: Error\n\treadonly retriable: false\n}\n```\n\n`ErroredState` means the current learner intent could not complete, but the learning session itself is not necessarily terminal.\n\nIf `retriable` is `true`, `retry()` repeats the exact failed intent. If `retriable` is `false`, the state does not expose `retry()`.\n\nLocal and server submission validation failures resolve back to the interaction phase with `rejection` populated. Renderer code can safely adopt the returned state and let the learner fix the payload in place.\n\n## `FatalState`\n\n```ts\ninterface FatalState {\n\treadonly phase: \"fatal\"\n\treadonly error: Error\n\treadonly retriable: false\n}\n```\n\nFatal state means the SDK cannot recover by retrying the current learner intent. Render a terminal error UI, call `start` again with valid options, or send the learner through auth again depending on the sentinel.\n\nFatal sentinels:\n\n| Sentinel | Meaning |\n| --- | --- |\n| `ErrBadRequest` | Primer rejected the runtime request as invalid for the SDK contract. |\n| `ErrWireContractViolation` | A successful response violated the wire contract (version skew or server bug). |\n| `ErrInvalidPublishableKey` | The publishable key is missing or unknown — integrator configuration; the token is NOT cleared. |\n| `ErrInvalidAccessToken` | The learner token was rejected. |\n| `ErrTokenExpired` | The learner token expired. |\n| `ErrNoRoutableContent` | The catalog has no routable bootstrap content for the learner's scope. |\n| `ErrSdkUpgradeRequired` | The installed SDK is too old for the current Primer runtime. |\n| `ErrUnsupportedPci` | Primer presented a PCI that the host did not declare in `supportedPcis`. |\n\nStale-offer responses are NOT fatal: when a `frame_event` answers with\n`offer_not_found`, `offer_superseded`, `frame_already_completed`, or\n`event_kind_mismatch`, the SDK silently issues `continue` once and resolves to\nthe fresh state — multi-tab races self-heal. A second consecutive stale\nresponse lands in a retriable errored state instead of looping.\n\nLocal in-flight races (`submit` while `timeout` is pending, conflicting\npayloads) resolve to the first in-flight transition's pending promise. Local and\nserver `ErrInvalidSubmission` results are converted back into interaction states\nwith `rejection` populated. `ErrContentUngradeable` (authored content cannot be\ngraded) and infrastructure failures land in retriable errored states.\n\nThe frontier is one-shot: the first `state.enter(route)` call wins, every\nsubsequent `enter(route)` on that `FrontierState` returns the same state object,\nand the open beacon fires exactly once for the entered route.\n\n## Contracts\n\nImport renderer-facing data types and validation helpers from the `@superbuilders/primer-tives/contracts` entrypoint.\n\n```ts\nimport { blocksToPlainText, inlinesToPlainText } from \"@superbuilders/primer-tives/contracts\"\nimport { LESSON_STAGES, isLessonStage } from \"@superbuilders/primer-tives/contracts\"\nimport { isPciId, PCI_IDS } from \"@superbuilders/primer-tives/contracts\"\nimport {\n\tChoiceSubmissionSchema,\n\tExtendedTextSubmissionSchema,\n\tFractionInputPciSubmissionSchema,\n\tMatchPairSchema,\n\tMatchSubmissionSchema,\n\tOrderSubmissionSchema,\n\tRendererSubmissionSchema,\n\tTextEntrySubmissionSchema,\n\tcorrelateSubmission,\n\tsubmissionValidationMessage,\n\tvalidateSubmission\n} from \"@superbuilders/primer-tives/contracts\"\n\nimport type { ContentBlock, ContentInline, ContentSpan } from \"@superbuilders/primer-tives/contracts\"\nimport type { LessonStage } from \"@superbuilders/primer-tives/contracts\"\nimport type {\n\tFractionInputForm,\n\tFractionInputProps,\n\tFractionInputSubmission,\n\tPciId,\n\tPciProps,\n\tPciRegistry,\n\tPciUrn,\n\tPciValue\n} from \"@superbuilders/primer-tives/contracts\"\nimport type { InteractionReview } from \"@superbuilders/primer-tives/contracts\"\nimport type {\n\tInteractionFor,\n\tInteractionKind,\n\tMatchPair,\n\tPciInteraction,\n\tPciSubmission,\n\tRendererChoice,\n\tRendererInteraction,\n\tRendererStimulus,\n\tRendererSubmission,\n\tReviewFor,\n\tSubmissionFor,\n\tStandardRendererInteraction\n} from \"@superbuilders/primer-tives/contracts\"\n```\n\n## Content\n\n```ts\ntype ContentSpan = { type: \"text\"; value: string } | { type: \"italic\"; value: string }\ntype ContentInline = ContentSpan | { type: \"latex\"; value: string }\ntype ContentBlock = { type: \"paragraph\"; children: ContentInline[] }\n```\n\nHelpers:\n\n```ts\nfunction inlinesToPlainText(nodes: ContentInline[]): string\nfunction blocksToPlainText(blocks: ContentBlock[]): string\n```\n\nUse the plain-text helpers for accessibility labels, logging summaries, search snippets, and renderer fallbacks. LaTeX inline nodes contribute their raw `value` to plain text.\n\n## Stimulus\n\n```ts\ninterface RendererStimulus {\n\tkind: \"image\"\n\talt: ContentInline[]\n\tsrc: string\n\tmime: \"image/png\" | \"image/jpeg\" | \"image/webp\"\n}\n```\n\n`RendererStimulus` is currently image-only. Always switch on `stimulus.kind` anyway.\n\n## Interactions\n\n```ts\ntype RendererInteraction<Pcis extends PciId = PciId> =\n\t| StandardRendererInteraction\n\t| PciInteraction<Pcis>\n```\n\nStandard interactions:\n\n| Type | Key fields |\n| --- | --- |\n| `choice` | `prompt`, `options`, `minChoices`, `maxChoices` |\n| `text-entry` | `prompt`, `base`, `expectedLength`, `patternMask`, `placeholderText` |\n| `extended-text` single | `prompt`, `format`, `expectedLines`, `expectedLength`, `patternMask`, `placeholderText` |\n| `extended-text` multiple | single fields plus `minStrings`, `maxStrings` |\n| `order` | `prompt`, `choices`, `minChoices`, `maxChoices` |\n| `match` | `prompt`, `sourceChoices`, `targetChoices`, `minAssociations`, `maxAssociations` |\n| `portable-custom` | `prompt`, `pciId`, `properties` |\n\nChoice objects:\n\n```ts\ninterface RendererChoice {\n\tidentifier: string\n\tcontent: ContentInline[]\n}\n```\n\n## Submissions\n\n```ts\ntype RendererSubmission<Pcis extends PciId = PciId> =\n\t| { type: \"choice\"; selectedKeys: string[] }\n\t| { type: \"text-entry\"; value: string }\n\t| { type: \"extended-text\"; values: string[] }\n\t| { type: \"order\"; orderedKeys: string[] }\n\t| { type: \"match\"; pairs: MatchPair[] }\n\t| PciSubmission<Pcis>\n```\n\nPublic schemas:\n\n| Schema | Validates |\n| --- | --- |\n| `MatchPairSchema` | `{ source, target }` match pair shape |\n| `ChoiceSubmissionSchema` | choice submission shape |\n| `TextEntrySubmissionSchema` | text-entry submission shape |\n| `ExtendedTextSubmissionSchema` | extended-text submission shape |\n| `OrderSubmissionSchema` | order submission shape |\n| `MatchSubmissionSchema` | match submission shape |\n| `FractionInputPciSubmissionSchema` | fraction-input PCI submission shape |\n| `RendererSubmissionSchema` | union of all supported submission shapes |\n\nAlways use the exported AJV-backed Draft 7 validator when parsing arbitrary input.\n\n```ts\nimport * as errors from \"@superbuilders/errors\"\nimport { logger } from \"@/logger\"\nimport * as validate from \"@superbuilders/validate\"\nimport { RendererSubmissionSchema } from \"@superbuilders/primer-tives/contracts\"\n\nconst parsed = RendererSubmissionSchema.parse(payload)\nif (!parsed.success) {\n\tlogger.error({ error: parsed.error }, \"submission payload invalid\")\n\tthrow errors.wrap(parsed.error, \"submission payload\")\n}\n\nconst submission = parsed.data\n```\n\n## Semantic Submission Validation\n\nShape validation answers “does this look like a submission?” Semantic validation answers “is this submission valid for this exact interaction?”\n\n```ts\nfunction validateSubmission<K extends InteractionKind>(\n\tinteraction: InteractionFor<K>,\n\tsubmission: SubmissionFor<K>\n): SubmissionValidationResult<SubmissionFor<K>>\n\nfunction correlateSubmission(\n\tinteraction: RendererInteraction,\n\tsubmission: RendererSubmission\n): SubmissionValidationResult<RendererSubmission>\n\nfunction submissionValidationMessage(result: SubmissionValidationFailure): string\n```\n\nResult shape:\n\n```ts\ntype SubmissionValidationResult<S> =\n\t| { ok: true; value: S }\n\t| { ok: false; issues: readonly string[] }\n```\n\nValidation checks:\n\n| Interaction | Checks |\n| --- | --- |\n| `choice` | min/max selection count, duplicate identifiers, unknown identifiers |\n| `text-entry` | typed shape |\n| `extended-text` single | exactly one value |\n| `extended-text` multiple | min/max value count, duplicate values |\n| `order` | min/max selection count, duplicate identifiers, unknown identifiers |\n| `match` | min/max association count, duplicate pairs, duplicate sources, duplicate targets, unknown sources, unknown targets |\n| `portable-custom` | PCI value schema |\n\nThe built-in standard interaction state methods call typed `validateSubmission` before submitting. Server and other hostile JSON boundaries should call `correlateSubmission`, which rejects interaction/submission mismatches before using `validation.value`.\n\n```ts\nimport * as errors from \"@superbuilders/errors\"\nimport { logger } from \"@/logger\"\nimport {\n\tcorrelateSubmission,\n\tsubmissionValidationMessage,\n\tvalidateSubmission\n} from \"@superbuilders/primer-tives/contracts\"\nimport { ErrInvalidSubmission } from \"@superbuilders/primer-tives/errors\"\n\nconst validation = correlateSubmission(interaction, submission)\nif (!validation.ok) {\n\tconst message = submissionValidationMessage(validation)\n\tlogger.error({ issues: validation.issues }, \"submission invalid\")\n\tthrow errors.wrap(ErrInvalidSubmission, message)\n}\n```\n\n## Review Types\n\n`AnsweredFeedbackState.review` is `InteractionReview | null`. Timeout feedback does not carry review data because no submission was graded.\n\n```ts\ntype InteractionReview<Pcis extends PciId = PciId> =\n\t| ChoiceReview\n\t| TextEntryReview\n\t| ExtendedTextReview\n\t| OrderReview\n\t| MatchReview\n\t| PciReview<Pcis>\n```\n\nReview variants:\n\n| Type | Data |\n| --- | --- |\n| `choice` | `correctKeys: string[]` |\n| `text-entry` | `correctValue: ReviewScalarValue | null` |\n| `extended-text` | `correctValues: ReviewScalarValue[]` |\n| `order` | `correctOrder: string[]` |\n| `match` | `correctPairs: MatchPair[]` |\n| `portable-custom` | `pciId`, `fields: ReviewRecordField[]` |\n\nReview scalar values:\n\n```ts\ntype ReviewScalarValue =\n\t| { kind: \"identifier\"; value: string }\n\t| { kind: \"string\"; value: string }\n\t| { kind: \"integer\"; value: number }\n\t| { kind: \"float\"; value: number }\n\t| { kind: \"pair\"; source: string; target: string }\n```\n\n`review` is for renderer display and inspection. The correctness outcome lives on the feedback state's `verdict` (`\"correct\" | \"incorrect\" | \"timedOut\"`).\n\n## PCI Registry\n\nThe current PCI registry contains one PCI.\n\n```ts\nconst PCI_IDS = [\"urn:primer:pci:fraction-input\"] as const\n```\n\n```ts\ntype PciId = \"urn:primer:pci:fraction-input\"\ntype PciProps<K extends PciId> = PciRegistry[K][\"props\"]\ntype PciValue<K extends PciId> = PciRegistry[K][\"value\"]\n```\n\nUse `isPciId(value)` to narrow an arbitrary string to the current `PciId` union.\n\n## Fraction Input PCI\n\n```ts\ntype FractionInputForm = \"whole\" | \"proper\" | \"improper\" | \"mixed\"\n\ninterface FractionInputProps {\n\tform: FractionInputForm\n\trequireSimplified: boolean\n}\n```\n\nSubmitted value:\n\n```ts\ntype FractionInputSubmission =\n\t| { form: \"whole\"; whole: string }\n\t| { form: \"proper\"; numerator: string; denominator: string }\n\t| { form: \"improper\"; numerator: string; denominator: string }\n\t| { form: \"mixed\"; whole: string; numerator: string; denominator: string }\n```\n\nExample renderer branch:\n\n```ts\nif (state.phase === \"interaction\" && state.kind === \"portable-custom\") {\n\tif (state.pciId === \"urn:primer:pci:fraction-input\") {\n\t\trenderFractionInput({\n\t\t\tmode: \"pending\",\n\t\t\tproperties: state.properties,\n\t\t\tonValueChange: handleFractionValueChange\n\t\t})\n\t}\n}\n```\n\n## Rendering Portable Custom Interactions\n\nPortable Custom Interactions (PCIs) split cleanly across the three architecture layers documented above. This section is the authoritative guide for integrators wiring PCI rendering into a host.\n\n### Step 1 — Declare capabilities at `start` (wire only)\n\nWhen your renderer can paint a PCI, list it in `supportedPcis`. This tells the Primer server which PCI ids your host can render, so it only routes the frontend's course frames you can display. The SDK copies this array onto every advance request body unchanged. The course-grade itself is owned by the frontend keyed by `publishableKey` and never appears in options.\n\n```ts\nconst options = {\n\tpublishableKey: \"pk_...\",\n\tsupportedPcis: [\"urn:primer:pci:fraction-input\"] as const,\n\tlogger\n} satisfies PrimerOptionsWithManagedAuth<\"urn:primer:pci:fraction-input\">\n```\n\nNothing in this step imports React, mounts components, or registers render functions. You are declaring ids.\n\n### Step 2 — Render when the state machine says `portable-custom`\n\nWhen the learner enters a PCI frame, the SDK returns `PciInteractionState<K>`:\n\n```ts\nif (state.phase === \"interaction\" && state.kind === \"portable-custom\") {\n\tswitch (state.pciId) {\n\tcase \"urn:primer:pci:fraction-input\": {\n\t\t// Host UI: read state.properties (FractionInputProps)\n\t\t// Collect learner input, then:\n\t\tconst value = buildFractionSubmissionFromHostUi()\n\t\tstate = await state.submit(value)\n\t\tbreak\n\t}\n\t}\n}\n```\n\nThe state machine gives you:\n\n| Field | Role |\n| --- | --- |\n| `state.pciId` | Which PCI contract applies |\n| `state.properties` | Authoring-time PCI configuration (`PciProps<K>`) |\n| `state.interaction` | Full interaction contract including prompt and calibration |\n| `state.revision` | Recoverable yellow-path bundle when applicable |\n| `state.submit(value)` | Validates and sends `PciValue<K>` to the runtime |\n\nRendering is **your** switch on `pciId`. The SDK does not do it for you.\n\n### Step 3 — Optional `PciRenderProps` for component authors\n\nIf you extract a fraction-input widget, `PciRenderProps<K>` types its pending vs submitted modes. This is exported from `@superbuilders/pr","readmeFilename":"README.md"}