{"_id":"@3halves-labs/score-loyalty-sdk","_rev":"14-f424b969693db2cfc725262030eb2bd5","name":"@3halves-labs/score-loyalty-sdk","dist-tags":{"latest":"1.8.0"},"versions":{"1.0.1":{"name":"@3halves-labs/score-loyalty-sdk","version":"1.0.1","keywords":["loyalty","gamification","rewards","challenges","leaderboard","points","karma","react","typescript","sdk"],"author":{"name":"3 Halves Labs"},"license":"MIT","_id":"@3halves-labs/score-loyalty-sdk@1.0.1","maintainers":[{"name":"3halves-labs","email":"info@3halves-labs.com"}],"homepage":"https://github.com/3halveslabs/score-anything-loyalty/tree/main/loyalty-sdk#readme","bugs":{"url":"https://github.com/3halveslabs/score-anything-loyalty/issues"},"dist":{"shasum":"54db66756bf9af4b131fb32612863f2ab29d62db","tarball":"https://registry.npmjs.org/@3halves-labs/score-loyalty-sdk/-/score-loyalty-sdk-1.0.1.tgz","fileCount":15,"integrity":"sha512-VFIIDhM5KLd9eredcDmPvfg+in1067dlzova0MbVIHXR00v3NAYZhapZ6puo5+snN7t0JY9QOnyEnljaq2HAEQ==","signatures":[{"sig":"MEUCIQDBPPHXq2ffaxTQg3tnE4DquRKliCn7XO1iLHJspNKkFAIgSzDiNqOdu1zQ1wVbZfj/Mn/3DNnP54cfQOhn9YseGOg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":181939},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","require":"./dist/index.cjs.js"},"./react":{"types":"./dist/react/index.d.ts","import":"./dist/react/index.esm.js","require":"./dist/react/index.cjs.js"}},"gitHead":"07a8b885f83f4b006f6f6a39765acef22ada5995","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rimraf dist","release":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk","typecheck":"tsc --noEmit","test:watch":"vitest","release:major":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk major","release:minor":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk minor","release:patch":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk patch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"3halves-labs","email":"info@3halves-labs.com"},"repository":{"url":"https://gitea.3halves-labs.com/3halveslabs/score-anything-loyalty.git","type":"git","directory":"loyalty-sdk"},"_npmVersion":"10.7.0","description":"Official SDK for integrating with Score Anything Loyalty platform - manage points, challenges, rewards, and leaderboards","directories":{},"sideEffects":false,"_nodeVersion":"18.20.4","dependencies":{"axios":"^1.6.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","react":"^18.3.1","rimraf":"^6.0.1","vitest":"^2.1.9","typescript":"^5.5.4","@types/react":"^18.3.3","@tanstack/react-query":"^5.17.0"},"peerDependencies":{"react":">=17 || >=18","@tanstack/react-query":">=4 || >=5"},"peerDependenciesMeta":{"react":{"optional":true},"@tanstack/react-query":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/score-loyalty-sdk_1.0.1_1779982319576_0.5106297019190038","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@3halves-labs/score-loyalty-sdk","version":"1.0.2","keywords":["loyalty","gamification","rewards","challenges","leaderboard","points","karma","react","typescript","sdk"],"author":{"name":"3 Halves Labs"},"license":"MIT","_id":"@3halves-labs/score-loyalty-sdk@1.0.2","maintainers":[{"name":"3halves-labs","email":"info@3halves-labs.com"}],"homepage":"https://github.com/3halveslabs/score-anything-loyalty/tree/main/loyalty-sdk#readme","bugs":{"url":"https://github.com/3halveslabs/score-anything-loyalty/issues"},"dist":{"shasum":"0532b22197cb2284b40165cedf1b5199b55405fa","tarball":"https://registry.npmjs.org/@3halves-labs/score-loyalty-sdk/-/score-loyalty-sdk-1.0.2.tgz","fileCount":15,"integrity":"sha512-RbOkwDLPin63Yy0RgxMc1p4NsSfUlAj5nqAVRDgnEAIQ3alECntHnLWzJBTEH7zqVT5kXKaXewqxOckLOjrrTQ==","signatures":[{"sig":"MEUCIQDHkuGTN85JKVfna1ZOCC/4FaZsPoZ6dmNGEjsjNzGshAIgDfifdg+M/LCCB7qGThLjtIajUzLeitVZqiyr9iUwPFQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":192979},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","require":"./dist/index.cjs.js"},"./react":{"types":"./dist/react/index.d.ts","import":"./dist/react/index.esm.js","require":"./dist/react/index.cjs.js"}},"gitHead":"4d2c2498879e5f2ac5ed78b6646c443028731a01","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rimraf dist","release":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk","typecheck":"tsc --noEmit","test:watch":"vitest","release:major":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk major","release:minor":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk minor","release:patch":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk patch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"3halves-labs","email":"info@3halves-labs.com"},"repository":{"url":"https://gitea.3halves-labs.com/3halveslabs/score-anything-loyalty.git","type":"git","directory":"loyalty-sdk"},"_npmVersion":"10.7.0","description":"Official SDK for integrating with Score Anything Loyalty platform - manage points, challenges, rewards, and leaderboards","directories":{},"sideEffects":false,"_nodeVersion":"18.20.4","dependencies":{"axios":"^1.6.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","react":"^18.3.1","rimraf":"^6.0.1","vitest":"^2.1.9","typescript":"^5.5.4","@types/react":"^18.3.3","@tanstack/react-query":"^5.17.0"},"peerDependencies":{"react":">=17 || >=18","@tanstack/react-query":">=4 || >=5"},"peerDependenciesMeta":{"react":{"optional":true},"@tanstack/react-query":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/score-loyalty-sdk_1.0.2_1779982926216_0.4546121642328904","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@3halves-labs/score-loyalty-sdk","version":"1.1.0","keywords":["loyalty","gamification","rewards","challenges","leaderboard","points","karma","react","typescript","sdk"],"author":{"name":"3 Halves Labs"},"license":"MIT","_id":"@3halves-labs/score-loyalty-sdk@1.1.0","maintainers":[{"name":"3halves-labs","email":"info@3halves-labs.com"}],"homepage":"https://github.com/3halveslabs/score-anything-loyalty/tree/main/loyalty-sdk#readme","bugs":{"url":"https://github.com/3halveslabs/score-anything-loyalty/issues"},"dist":{"shasum":"6f4892b53c1d7bb970dc7cfa10ffe2932ff0a446","tarball":"https://registry.npmjs.org/@3halves-labs/score-loyalty-sdk/-/score-loyalty-sdk-1.1.0.tgz","fileCount":15,"integrity":"sha512-0Fh2EgBNHX0k1WOErXNUUK4yRUQRonAIxkxYDxuUOIvPpYEA+YxsUWKzzgNeRjhvbR+UQOnf2gt84fJ3IQ9Tow==","signatures":[{"sig":"MEUCIQCQ2XZADLQKTFkrOwOTA39BzvEH9ArDiRao3BtlMK/WKwIgOm1WOuVwTptvYfQKyAkhKyKDdjSD28mtri5lHNYBSqc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":385055},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","require":"./dist/index.cjs.js"},"./react":{"types":"./dist/react/index.d.ts","import":"./dist/react/index.esm.js","require":"./dist/react/index.cjs.js"}},"gitHead":"81acbab09ecf9b83573cb729fc99ac31f777131c","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rimraf dist","release":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk","typecheck":"tsc --noEmit","test:watch":"vitest","release:major":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk major","release:minor":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk minor","release:patch":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk patch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"3halves-labs","email":"info@3halves-labs.com"},"repository":{"url":"https://gitea.3halves-labs.com/3halveslabs/score-anything-loyalty.git","type":"git","directory":"loyalty-sdk"},"_npmVersion":"10.7.0","description":"Official SDK for integrating with Score Anything Loyalty platform - manage points, challenges, rewards, and leaderboards","directories":{},"sideEffects":false,"_nodeVersion":"18.20.4","dependencies":{"axios":"^1.6.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","react":"^18.3.1","rimraf":"^6.0.1","vitest":"^2.1.9","typescript":"^5.5.4","@types/react":"^18.3.3","@tanstack/react-query":"^5.17.0"},"peerDependencies":{"react":">=17 || >=18","@tanstack/react-query":">=4 || >=5"},"peerDependenciesMeta":{"react":{"optional":true},"@tanstack/react-query":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/score-loyalty-sdk_1.1.0_1784818146256_0.05705885374278141","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@3halves-labs/score-loyalty-sdk","version":"1.2.0","keywords":["loyalty","gamification","rewards","challenges","leaderboard","points","karma","react","typescript","sdk"],"author":{"name":"3 Halves Labs"},"license":"MIT","_id":"@3halves-labs/score-loyalty-sdk@1.2.0","maintainers":[{"name":"3halves-labs","email":"info@3halves-labs.com"}],"homepage":"https://github.com/3halveslabs/score-anything-loyalty/tree/main/loyalty-sdk#readme","bugs":{"url":"https://github.com/3halveslabs/score-anything-loyalty/issues"},"dist":{"shasum":"01225669db86b0bf80cbcd1a4f3b9fd78aa25682","tarball":"https://registry.npmjs.org/@3halves-labs/score-loyalty-sdk/-/score-loyalty-sdk-1.2.0.tgz","fileCount":15,"integrity":"sha512-NlRok2TAv+dgAOw2a+MR2YF7kVYl3B/Xpgv7IJaOBO6S/Udd35or3aDLAxsBGk30ZX4xegVEzXu8WhdYCfOEfA==","signatures":[{"sig":"MEUCIQCY/aogP3ZSe04OQAx93Aaul5cz6SpCDfWXTfINIbismwIgJb7CLFsSusfcSledDfYtH5AQQSK6upn1O0X1OVLC9BU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":506736},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","require":"./dist/index.cjs.js"},"./react":{"types":"./dist/react/index.d.ts","import":"./dist/react/index.esm.js","require":"./dist/react/index.cjs.js"}},"gitHead":"6c64a68e55604a3fef665830f08c72504de5fd30","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rimraf dist","release":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk","typecheck":"tsc --noEmit","test:watch":"vitest","release:major":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk major","release:minor":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk minor","release:patch":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk patch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"3halves-labs","email":"info@3halves-labs.com"},"repository":{"url":"https://gitea.3halves-labs.com/3halveslabs/score-anything-loyalty.git","type":"git","directory":"loyalty-sdk"},"_npmVersion":"10.7.0","description":"Official SDK for integrating with Score Anything Loyalty platform - manage points, challenges, rewards, and leaderboards","directories":{},"sideEffects":false,"_nodeVersion":"18.20.4","dependencies":{"axios":"^1.6.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","react":"^18.3.1","rimraf":"^6.0.1","vitest":"^2.1.9","typescript":"^5.5.4","@types/react":"^18.3.3","@tanstack/react-query":"^5.17.0"},"peerDependencies":{"react":">=17 || >=18","@tanstack/react-query":">=4 || >=5"},"peerDependenciesMeta":{"react":{"optional":true},"@tanstack/react-query":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/score-loyalty-sdk_1.2.0_1785430506036_0.8416784385975336","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@3halves-labs/score-loyalty-sdk","version":"1.3.0","keywords":["loyalty","gamification","rewards","challenges","leaderboard","points","karma","react","typescript","sdk"],"author":{"name":"3 Halves Labs"},"license":"MIT","_id":"@3halves-labs/score-loyalty-sdk@1.3.0","maintainers":[{"name":"3halves-labs","email":"info@3halves-labs.com"}],"homepage":"https://github.com/3halveslabs/score-anything-loyalty/tree/main/loyalty-sdk#readme","bugs":{"url":"https://github.com/3halveslabs/score-anything-loyalty/issues"},"dist":{"shasum":"e3c7e3626e3c0035548ad1f65644e142b9ddc956","tarball":"https://registry.npmjs.org/@3halves-labs/score-loyalty-sdk/-/score-loyalty-sdk-1.3.0.tgz","fileCount":15,"integrity":"sha512-LHRlIUrylu5XBTIrC6aYMQtRcgvR/TLd5fvOkETl1l8oHILMWVIrLwCFFdBrGo3I9+/MlX3vlDBwlELoyAAFrA==","signatures":[{"sig":"MEUCIQC4kozA4mtR7AP4nfkNpxVK9u/Rgx86+ixYqWOOXH6wIwIgAZ4S04tXp5sQq973ec01hHvLj3HT5X6o+Ujf7Z9V1V0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":534682},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","require":"./dist/index.cjs.js"},"./react":{"types":"./dist/react/index.d.ts","import":"./dist/react/index.esm.js","require":"./dist/react/index.cjs.js"}},"gitHead":"202c7c0a6e2a08aa072d9c9aad6c9d1982fa2725","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rimraf dist","release":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk","typecheck":"tsc --noEmit","test:watch":"vitest","release:major":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk major","release:minor":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk minor","release:patch":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk patch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"3halves-labs","email":"info@3halves-labs.com"},"repository":{"url":"https://gitea.3halves-labs.com/3halveslabs/score-anything-loyalty.git","type":"git","directory":"loyalty-sdk"},"_npmVersion":"10.7.0","description":"Official SDK for integrating with Score Anything Loyalty platform - manage points, challenges, rewards, and leaderboards","directories":{},"sideEffects":false,"_nodeVersion":"18.20.4","dependencies":{"axios":"^1.6.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","react":"^18.3.1","rimraf":"^6.0.1","vitest":"^2.1.9","typescript":"^5.5.4","@types/react":"^18.3.3","@tanstack/react-query":"^5.17.0"},"peerDependencies":{"react":">=17 || >=18","@tanstack/react-query":">=4 || >=5"},"peerDependenciesMeta":{"react":{"optional":true},"@tanstack/react-query":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/score-loyalty-sdk_1.3.0_1785859124487_0.8832921982041262","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@3halves-labs/score-loyalty-sdk","version":"1.4.0","keywords":["loyalty","gamification","rewards","challenges","leaderboard","points","karma","react","typescript","sdk"],"author":{"name":"3 Halves Labs"},"license":"MIT","_id":"@3halves-labs/score-loyalty-sdk@1.4.0","maintainers":[{"name":"3halves-labs","email":"info@3halves-labs.com"}],"homepage":"https://github.com/3halveslabs/score-anything-loyalty/tree/main/loyalty-sdk#readme","bugs":{"url":"https://github.com/3halveslabs/score-anything-loyalty/issues"},"dist":{"shasum":"40fc907cc350544cf29093d5bc0659a9f5a3b2c5","tarball":"https://registry.npmjs.org/@3halves-labs/score-loyalty-sdk/-/score-loyalty-sdk-1.4.0.tgz","fileCount":15,"integrity":"sha512-02ZroF5YgRtFtfpSBHGa2qqvJOJQhjb0bZVld0Km8crz4CisfzxFrOP9DrUYPCNczzYiRb8fsQZn2I9aEcxn2w==","signatures":[{"sig":"MEUCIQC34UIdzE0tRtSivz7ZJ24Dd5a7/zs/81qSO8KDIg+cCwIgJ3Ytxtl2mMdwhRLjiODs7kkTnvd9VA3G/OdKzkjPmA4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":566479},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","require":"./dist/index.cjs.js"},"./react":{"types":"./dist/react/index.d.ts","import":"./dist/react/index.esm.js","require":"./dist/react/index.cjs.js"}},"gitHead":"2390386657cdd64037f4a22b90f14dd8a862117f","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rimraf dist","release":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk","typecheck":"tsc --noEmit","test:watch":"vitest","release:major":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk major","release:minor":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk minor","release:patch":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk patch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"3halves-labs","email":"info@3halves-labs.com"},"repository":{"url":"https://gitea.3halves-labs.com/3halveslabs/score-anything-loyalty.git","type":"git","directory":"loyalty-sdk"},"_npmVersion":"10.7.0","description":"Official SDK for integrating with Score Anything Loyalty platform - manage points, challenges, rewards, and leaderboards","directories":{},"sideEffects":false,"_nodeVersion":"18.20.4","dependencies":{"axios":"^1.6.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","react":"^18.3.1","rimraf":"^6.0.1","vitest":"^2.1.9","typescript":"^5.5.4","@types/react":"^18.3.3","@tanstack/react-query":"^5.17.0"},"peerDependencies":{"react":">=17 || >=18","@tanstack/react-query":">=4 || >=5"},"peerDependenciesMeta":{"react":{"optional":true},"@tanstack/react-query":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/score-loyalty-sdk_1.4.0_1786590311319_0.6203918553325629","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@3halves-labs/score-loyalty-sdk","version":"1.5.0","keywords":["loyalty","gamification","rewards","challenges","leaderboard","points","karma","react","typescript","sdk"],"author":{"name":"3 Halves Labs"},"license":"MIT","_id":"@3halves-labs/score-loyalty-sdk@1.5.0","maintainers":[{"name":"3halves-labs","email":"info@3halves-labs.com"}],"homepage":"https://github.com/3halveslabs/score-anything-loyalty/tree/main/loyalty-sdk#readme","bugs":{"url":"https://github.com/3halveslabs/score-anything-loyalty/issues"},"dist":{"shasum":"03e3bd08acfa11989bf251cce679a6f868a539a6","tarball":"https://registry.npmjs.org/@3halves-labs/score-loyalty-sdk/-/score-loyalty-sdk-1.5.0.tgz","fileCount":15,"integrity":"sha512-yF/BKUDjyrTJfQps9eiGD0NpNiFf1z0gC2eHi7meZ2P53XyHI2pKG56kklNeOgNhnu7RHoSdy4wFXKbZ26aL4A==","signatures":[{"sig":"MEUCIQCQ8qJHkyvq4oB6kieMUYZec2Vjh0byjoPBqL05tNwccgIgQcnnsIHPvg0p4qY6gpJbsH+IPcNrvtHXcdv+hRsifwI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":656107},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","require":"./dist/index.cjs.js"},"./react":{"types":"./dist/react/index.d.ts","import":"./dist/react/index.esm.js","require":"./dist/react/index.cjs.js"}},"gitHead":"6bcbb27e58cdeaafafae319a20b32ee7ceb1c5b9","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rimraf dist","release":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk","typecheck":"tsc --noEmit","test:watch":"vitest","release:major":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk major","release:minor":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk minor","release:patch":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk patch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"3halves-labs","email":"info@3halves-labs.com"},"repository":{"url":"https://gitea.3halves-labs.com/3halveslabs/score-anything-loyalty.git","type":"git","directory":"loyalty-sdk"},"_npmVersion":"10.7.0","description":"Official SDK for integrating with Score Anything Loyalty platform - manage points, challenges, rewards, and leaderboards","directories":{},"sideEffects":false,"_nodeVersion":"18.20.4","dependencies":{"axios":"^1.6.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","react":"^18.3.1","rimraf":"^6.0.1","vitest":"^2.1.9","typescript":"^5.5.4","@types/react":"^18.3.3","@tanstack/react-query":"^5.17.0"},"peerDependencies":{"react":">=17 || >=18","@tanstack/react-query":">=4 || >=5"},"peerDependenciesMeta":{"react":{"optional":true},"@tanstack/react-query":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/score-loyalty-sdk_1.5.0_1787077612954_0.8236297109697741","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"name":"@3halves-labs/score-loyalty-sdk","version":"1.5.1","keywords":["loyalty","gamification","rewards","challenges","leaderboard","points","karma","react","typescript","sdk"],"author":{"name":"3 Halves Labs"},"license":"MIT","_id":"@3halves-labs/score-loyalty-sdk@1.5.1","maintainers":[{"name":"3halves-labs","email":"info@3halves-labs.com"}],"homepage":"https://github.com/3halveslabs/score-anything-loyalty/tree/main/loyalty-sdk#readme","bugs":{"url":"https://github.com/3halveslabs/score-anything-loyalty/issues"},"dist":{"shasum":"b630d357e04436bb120be30a84719aac97503354","tarball":"https://registry.npmjs.org/@3halves-labs/score-loyalty-sdk/-/score-loyalty-sdk-1.5.1.tgz","fileCount":15,"integrity":"sha512-55lSTlESKmYP5OKTg9RARR9x6Ajp+JsMZUwH6H2aCgGdvp3fSgMcLQQN+1kZJPhMX/gelsjT8uVj22Uw5adAQA==","signatures":[{"sig":"MEUCIQDQaHUTcDte2f8jsf/R7ra9zNrBIGjzmNCm9A/rgxmArgIgY1Mk+pKBvsLMus3WrJoPGHzzqdI+woge9McyaMhyTtc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":661325},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","require":"./dist/index.cjs.js"},"./react":{"types":"./dist/react/index.d.ts","import":"./dist/react/index.esm.js","require":"./dist/react/index.cjs.js"}},"gitHead":"03d12678f2f6623543aaacc5224cd2fa6f4c2f0b","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rimraf dist","release":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk","typecheck":"tsc --noEmit","test:watch":"vitest","release:major":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk major","release:minor":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk minor","release:patch":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk patch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"3halves-labs","email":"info@3halves-labs.com"},"repository":{"url":"https://gitea.3halves-labs.com/3halveslabs/score-anything-loyalty.git","type":"git","directory":"loyalty-sdk"},"_npmVersion":"10.7.0","description":"Official SDK for integrating with Score Anything Loyalty platform - manage points, challenges, rewards, and leaderboards","directories":{},"sideEffects":false,"_nodeVersion":"18.20.4","dependencies":{"axios":"^1.6.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","react":"^18.3.1","rimraf":"^6.0.1","vitest":"^2.1.9","typescript":"^5.5.4","@types/react":"^18.3.3","@tanstack/react-query":"^5.17.0"},"peerDependencies":{"react":">=17 || >=18","@tanstack/react-query":">=4 || >=5"},"peerDependenciesMeta":{"react":{"optional":true},"@tanstack/react-query":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/score-loyalty-sdk_1.5.1_1787577236354_0.44660715831901165","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@3halves-labs/score-loyalty-sdk","version":"1.6.0","keywords":["loyalty","gamification","rewards","challenges","leaderboard","points","karma","react","typescript","sdk"],"author":{"name":"3 Halves Labs"},"license":"MIT","_id":"@3halves-labs/score-loyalty-sdk@1.6.0","maintainers":[{"name":"3halves-labs","email":"info@3halves-labs.com"}],"homepage":"https://github.com/3halveslabs/score-anything-loyalty/tree/main/loyalty-sdk#readme","bugs":{"url":"https://github.com/3halveslabs/score-anything-loyalty/issues"},"dist":{"shasum":"51579d5364b88f2452678f5b57252ac0a66e3563","tarball":"https://registry.npmjs.org/@3halves-labs/score-loyalty-sdk/-/score-loyalty-sdk-1.6.0.tgz","fileCount":15,"integrity":"sha512-4MHB30GmjXDARutvFup8E5tzwtL0zriSxZeqBoYroI/ugMtVn5YYho07Wz83pI/CwEvs6QntmReloytxvh/EQw==","signatures":[{"sig":"MEYCIQDteJG3xRM9y8R1BS35iVQqroOBwEc801DEYGZWv9uvvwIhAMi4fZy1MiHbx76W96/DkAUstw9v8OETXKf8+UHuZ08H","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":707480},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","require":"./dist/index.cjs.js"},"./react":{"types":"./dist/react/index.d.ts","import":"./dist/react/index.esm.js","require":"./dist/react/index.cjs.js"}},"gitHead":"24390d089ac01b21319f3dac58aed81858210238","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rimraf dist","release":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk","typecheck":"tsc --noEmit","test:watch":"vitest","release:major":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk major","release:minor":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk minor","release:patch":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk patch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"3halves-labs","email":"info@3halves-labs.com"},"repository":{"url":"https://gitea.3halves-labs.com/3halveslabs/score-anything-loyalty.git","type":"git","directory":"loyalty-sdk"},"_npmVersion":"10.7.0","description":"Official SDK for integrating with Score Anything Loyalty platform - manage points, challenges, rewards, and leaderboards","directories":{},"sideEffects":false,"_nodeVersion":"18.20.4","dependencies":{"axios":"^1.6.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","react":"^18.3.1","rimraf":"^6.0.1","vitest":"^2.1.9","typescript":"^5.5.4","@types/react":"^18.3.3","@tanstack/react-query":"^5.17.0"},"peerDependencies":{"react":">=17 || >=18","@tanstack/react-query":">=4 || >=5"},"peerDependenciesMeta":{"react":{"optional":true},"@tanstack/react-query":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/score-loyalty-sdk_1.6.0_1787601195647_0.48140340601043596","host":"s3://npm-registry-packages-npm-production"}},"1.6.1":{"name":"@3halves-labs/score-loyalty-sdk","version":"1.6.1","keywords":["loyalty","gamification","rewards","challenges","leaderboard","points","karma","react","typescript","sdk"],"author":{"name":"3 Halves Labs"},"license":"MIT","_id":"@3halves-labs/score-loyalty-sdk@1.6.1","maintainers":[{"name":"3halves-labs","email":"info@3halves-labs.com"}],"homepage":"https://github.com/3halveslabs/score-anything-loyalty/tree/main/loyalty-sdk#readme","bugs":{"url":"https://github.com/3halveslabs/score-anything-loyalty/issues"},"dist":{"shasum":"b2bf8d0cc237ef20d6eb5ab30a67179b12c60335","tarball":"https://registry.npmjs.org/@3halves-labs/score-loyalty-sdk/-/score-loyalty-sdk-1.6.1.tgz","fileCount":15,"integrity":"sha512-0mEbyHl5rL8P+1DoecomJWAlwQkCzgpifDmnGtqSd6cuKsB7G959Zphk1ltkMhTqQGsIk4cGw10C8L27qHt+lw==","signatures":[{"sig":"MEYCIQC+ZI07YLCxcu0K5m8Itf+zncglKP/jHPc68npLElDwAwIhAI0dVpQJE6ZuvkSYWYM/C9LJLzO0eDrYkBOgGepE4dsN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":711121},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","require":"./dist/index.cjs.js"},"./react":{"types":"./dist/react/index.d.ts","import":"./dist/react/index.esm.js","require":"./dist/react/index.cjs.js"}},"gitHead":"d9e1871b5b643e66338c35ea6afb24132c8483f5","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rimraf dist","release":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk","typecheck":"tsc --noEmit","test:watch":"vitest","release:major":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk major","release:minor":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk minor","release:patch":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk patch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"3halves-labs","email":"info@3halves-labs.com"},"repository":{"url":"https://gitea.3halves-labs.com/3halveslabs/score-anything-loyalty.git","type":"git","directory":"loyalty-sdk"},"_npmVersion":"10.7.0","description":"Official SDK for integrating with Score Anything Loyalty platform - manage points, challenges, rewards, and leaderboards","directories":{},"sideEffects":false,"_nodeVersion":"18.20.4","dependencies":{"axios":"^1.6.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","react":"^18.3.1","rimraf":"^6.0.1","vitest":"^2.1.9","typescript":"^5.5.4","@types/react":"^18.3.3","@tanstack/react-query":"^5.17.0"},"peerDependencies":{"react":">=17 || >=18","@tanstack/react-query":">=4 || >=5"},"peerDependenciesMeta":{"react":{"optional":true},"@tanstack/react-query":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/score-loyalty-sdk_1.6.1_1787616618548_0.689594845987918","host":"s3://npm-registry-packages-npm-production"}},"1.6.2":{"name":"@3halves-labs/score-loyalty-sdk","version":"1.6.2","keywords":["loyalty","gamification","rewards","challenges","leaderboard","points","karma","react","typescript","sdk"],"author":{"name":"3 Halves Labs"},"license":"MIT","_id":"@3halves-labs/score-loyalty-sdk@1.6.2","maintainers":[{"name":"3halves-labs","email":"info@3halves-labs.com"}],"homepage":"https://github.com/3halveslabs/score-anything-loyalty/tree/main/loyalty-sdk#readme","bugs":{"url":"https://github.com/3halveslabs/score-anything-loyalty/issues"},"dist":{"shasum":"da9f083fe10d951031a37f2024c182bbfec14b1a","tarball":"https://registry.npmjs.org/@3halves-labs/score-loyalty-sdk/-/score-loyalty-sdk-1.6.2.tgz","fileCount":15,"integrity":"sha512-aQ/KOjv7WPJwMW0L/11bDIjU9VMG/yFr+4fdLiKo/8lFoQ/NZ7kPnEKBgPUIvB7n3jUBJ2IktwlNDZHkDFB6mQ==","signatures":[{"sig":"MEYCIQCBs09yM7Tz+Pk6QDEfJvNYo/ey6a3KbHl7jTpFWbnr5gIhANeGkS2enPf68fCpHnaNgyWBU/5+9Hug4Rs1wc1wV6k2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":725621},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","require":"./dist/index.cjs.js"},"./react":{"types":"./dist/react/index.d.ts","import":"./dist/react/index.esm.js","require":"./dist/react/index.cjs.js"}},"gitHead":"e63b91419953368043ab02a4c5e07a782ec4ec7d","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rimraf dist","release":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk","typecheck":"tsc --noEmit","test:watch":"vitest","release:major":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk major","release:minor":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk minor","release:patch":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk patch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"3halves-labs","email":"info@3halves-labs.com"},"repository":{"url":"https://gitea.3halves-labs.com/3halveslabs/score-anything-loyalty.git","type":"git","directory":"loyalty-sdk"},"_npmVersion":"10.9.8","description":"Official SDK for integrating with Score Anything Loyalty platform - manage points, challenges, rewards, and leaderboards","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"axios":"^1.6.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","react":"^18.3.1","rimraf":"^6.0.1","vitest":"^2.1.9","typescript":"^5.5.4","@types/react":"^18.3.3","@tanstack/react-query":"^5.17.0"},"peerDependencies":{"react":">=17 || >=18","@tanstack/react-query":">=4 || >=5"},"peerDependenciesMeta":{"react":{"optional":true},"@tanstack/react-query":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/score-loyalty-sdk_1.6.2_1787940362500_0.3804664351066014","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"@3halves-labs/score-loyalty-sdk","version":"1.7.0","keywords":["loyalty","gamification","rewards","challenges","leaderboard","points","karma","react","typescript","sdk"],"author":{"name":"3 Halves Labs"},"license":"MIT","_id":"@3halves-labs/score-loyalty-sdk@1.7.0","maintainers":[{"name":"3halves-labs","email":"info@3halves-labs.com"}],"homepage":"https://github.com/3halveslabs/score-anything-loyalty/tree/main/loyalty-sdk#readme","bugs":{"url":"https://github.com/3halveslabs/score-anything-loyalty/issues"},"dist":{"shasum":"559b44c584489e2e2fd56b97d5c3d996452132d4","tarball":"https://registry.npmjs.org/@3halves-labs/score-loyalty-sdk/-/score-loyalty-sdk-1.7.0.tgz","fileCount":15,"integrity":"sha512-BpYYlN73gkkWgF748Xe12GApVLH+PCozBqYvz+Nt0HWh325e1JRf4OU5eKzyG3TmtQPlejKp8hwNwQPkI5vD1Q==","signatures":[{"sig":"MEYCIQDMnCiF3h631XfntNLAQ86x166js8bHtHdm/WSdoPx4fQIhANHAgA3mwNHcTZvvhsIwZplI1Uwhn3DPN+okHFlEIs//","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCUhTKN38q+CK9KDYxoudsvAfzR4bHdQ0z/72WapAgXNgIhAMZQQLeeXshcbF2p4yRUwAMyCDkUp7wekGuNajenQ5vp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":734810},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","require":"./dist/index.cjs.js"},"./react":{"types":"./dist/react/index.d.ts","import":"./dist/react/index.esm.js","require":"./dist/react/index.cjs.js"}},"gitHead":"9382931a3d0f939c2b748112781fcce993fc6f29","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rimraf dist","release":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk","typecheck":"tsc --noEmit","test:watch":"vitest","release:major":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk major","release:minor":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk minor","release:patch":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk patch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"3halves-labs","email":"info@3halves-labs.com"},"repository":{"url":"https://gitea.3halves-labs.com/3halveslabs/score-anything-loyalty.git","type":"git","directory":"loyalty-sdk"},"_npmVersion":"10.9.8","description":"Official SDK for integrating with Score Anything Loyalty platform - manage points, challenges, rewards, and leaderboards","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"axios":"^1.6.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","react":"^18.3.1","rimraf":"^6.0.1","vitest":"^2.1.9","typescript":"^5.5.4","@types/react":"^18.3.3","@tanstack/react-query":"^5.17.0"},"peerDependencies":{"react":">=17 || >=18","@tanstack/react-query":">=4 || >=5"},"peerDependenciesMeta":{"react":{"optional":true},"@tanstack/react-query":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/score-loyalty-sdk_1.7.0_1790961517841_0.11645768857654759","host":"s3://npm-registry-packages-npm-production"}},"1.7.1":{"name":"@3halves-labs/score-loyalty-sdk","version":"1.7.1","keywords":["loyalty","gamification","rewards","challenges","leaderboard","points","karma","react","typescript","sdk"],"author":{"name":"3 Halves Labs"},"license":"MIT","_id":"@3halves-labs/score-loyalty-sdk@1.7.1","maintainers":[{"name":"3halves-labs","email":"info@3halves-labs.com"}],"homepage":"https://github.com/3halveslabs/score-anything-loyalty/tree/main/loyalty-sdk#readme","bugs":{"url":"https://github.com/3halveslabs/score-anything-loyalty/issues"},"dist":{"shasum":"d64dbb3b141e4e2b64697554b9f90136efa711ec","tarball":"https://registry.npmjs.org/@3halves-labs/score-loyalty-sdk/-/score-loyalty-sdk-1.7.1.tgz","fileCount":15,"integrity":"sha512-XSxa2x7p2rQaVVwhhRtXQNOvLrl4k/RqumLsZXCg22Lek3n9bIJR78K1q6/ighzfcp3qWYkvBVRrOLDrKuPlQg==","signatures":[{"sig":"MEYCIQCESOjiD9sd2NB7PqCGgJkxjxNfxke8oEix97VPrCMm/QIhAN4cWJ41VTOLAoMxEbF3LplietZJZg7XpT5BIBsdDQko","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDvhmpGXzMH7y6GtzeC+LQ3Cxxuj2/AKUa1bFK0hsc0tAIgVt+h1CHqw6kLKkh0C7R3MWoukvFgldO/1kKGAm34yWo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":739438},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","require":"./dist/index.cjs.js"},"./react":{"types":"./dist/react/index.d.ts","import":"./dist/react/index.esm.js","require":"./dist/react/index.cjs.js"}},"gitHead":"3621f3283054df03da6ddf7632d8b3a95d48ca26","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rimraf dist","release":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk","typecheck":"tsc --noEmit","test:watch":"vitest","release:major":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk major","release:minor":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk minor","release:patch":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk patch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"3halves-labs","email":"info@3halves-labs.com"},"repository":{"url":"https://gitea.3halves-labs.com/3halveslabs/score-anything-loyalty.git","type":"git","directory":"loyalty-sdk"},"_npmVersion":"10.9.8","description":"Official SDK for integrating with Score Anything Loyalty platform - manage points, challenges, rewards, and leaderboards","directories":{},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"axios":"^1.6.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","react":"^18.3.1","rimraf":"^6.0.1","vitest":"^2.1.9","typescript":"^5.5.4","@types/react":"^18.3.3","@tanstack/react-query":"^5.17.0"},"peerDependencies":{"react":">=17 || >=18","@tanstack/react-query":">=4 || >=5"},"peerDependenciesMeta":{"react":{"optional":true},"@tanstack/react-query":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/score-loyalty-sdk_1.7.1_1791001826156_0.9871725647660043","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"_id":"@3halves-labs/score-loyalty-sdk@1.8.0","bugs":{"url":"https://github.com/3halveslabs/score-anything-loyalty/issues"},"dist":{"shasum":"a3464f0bd6134ecb03ff736b0d47c9537a94dce6","tarball":"https://registry.npmjs.org/@3halves-labs/score-loyalty-sdk/-/score-loyalty-sdk-1.8.0.tgz","fileCount":15,"integrity":"sha512-J8LwQw32wgL1i7B/CO72WEDwa18mOtBdlUwhas2OIQ2jcJePyeq1HuEwN23WG2GDUkn4qsrnoVMEfkOSv74Pwg==","signatures":[{"sig":"MEYCIQCgNrbtvAu6zjHJUyFh8iUg8kD/Rhf/4wIFrF5DovPdMgIhAPW5hAB+KjlU2VQ8LRAlgOYfc/kpXjb5ssZUq8mB1IFc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICvK1I6ERJRRbTLI32u5NgaP2fqNpDtheilKPvlEwW3uAiEA45pHSIEf16w8oOHAh9nui02xKYglMbJ8WKPBBJ7jVmk="}],"unpackedSize":821854},"main":"dist/index.cjs.js","name":"@3halves-labs/score-loyalty-sdk","types":"dist/index.d.ts","author":{"name":"3 Halves Labs"},"module":"dist/index.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","require":"./dist/index.cjs.js"},"./react":{"types":"./dist/react/index.d.ts","import":"./dist/react/index.esm.js","require":"./dist/react/index.cjs.js"}},"gitHead":"b55715f4f5a6ac5520cb4e561a01b73e33cc97f3","license":"MIT","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rimraf dist","release":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk","typecheck":"tsc --noEmit","test:watch":"vitest","release:major":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk major","release:minor":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk minor","release:patch":"../scripts/release-sdk.sh loyalty-sdk loyalty-sdk patch","prepublishOnly":"npm run clean && npm run build"},"version":"1.8.0","_npmUser":{"name":"3halves-labs","email":"info@3halves-labs.com"},"homepage":"https://github.com/3halveslabs/score-anything-loyalty/tree/main/loyalty-sdk#readme","keywords":["loyalty","gamification","rewards","challenges","leaderboard","points","karma","react","typescript","sdk"],"repository":{"url":"https://gitea.3halves-labs.com/3halveslabs/score-anything-loyalty.git","type":"git","directory":"loyalty-sdk"},"_npmVersion":"10.9.8","description":"Official SDK for integrating with Score Anything Loyalty platform - manage points, challenges, rewards, and leaderboards","directories":{},"maintainers":[{"name":"3halves-labs","email":"info@3halves-labs.com"}],"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"axios":"^1.6.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","react":"^18.3.1","rimraf":"^6.0.1","vitest":"^2.1.9","typescript":"^5.5.4","@types/react":"^18.3.3","@tanstack/react-query":"^5.17.0"},"peerDependencies":{"react":">=17 || >=18","@tanstack/react-query":">=4 || >=5"},"peerDependenciesMeta":{"react":{"optional":true},"@tanstack/react-query":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/score-loyalty-sdk_1.8.0_1791171734884_0.6454435298468175"}}},"time":{"created":"2026-05-28T15:31:59.392Z","modified":"2026-10-05T03:42:15.099Z","1.0.1":"2026-05-28T15:31:59.740Z","1.0.2":"2026-05-28T15:42:06.349Z","1.1.0":"2026-07-23T14:49:06.392Z","1.2.0":"2026-07-30T16:55:06.182Z","1.3.0":"2026-08-04T15:58:44.691Z","1.4.0":"2026-08-13T03:05:11.483Z","1.5.0":"2026-08-18T18:26:53.113Z","1.5.1":"2026-08-24T13:13:56.534Z","1.6.0":"2026-08-24T19:53:15.792Z","1.6.1":"2026-08-25T00:10:18.716Z","1.6.2":"2026-08-28T18:06:02.671Z","1.7.0":"2026-10-02T17:18:37.991Z","1.7.1":"2026-10-03T04:30:26.249Z","1.8.0":"2026-10-05T03:42:14.963Z"},"bugs":{"url":"https://github.com/3halveslabs/score-anything-loyalty/issues"},"author":{"name":"3 Halves Labs"},"license":"MIT","homepage":"https://github.com/3halveslabs/score-anything-loyalty/tree/main/loyalty-sdk#readme","keywords":["loyalty","gamification","rewards","challenges","leaderboard","points","karma","react","typescript","sdk"],"repository":{"url":"https://gitea.3halves-labs.com/3halveslabs/score-anything-loyalty.git","type":"git","directory":"loyalty-sdk"},"description":"Official SDK for integrating with Score Anything Loyalty platform - manage points, challenges, rewards, and leaderboards","maintainers":[{"name":"3halves-labs","email":"info@3halves-labs.com"}],"readme":"# Score Anything Loyalty SDK\n\nOfficial SDK for integrating with the Score Anything Loyalty platform. Manage points, challenges, rewards, leaderboards, and user profiles with ease.\n\n## Features\n\n- 🎯 **Points Management** - Award, deduct, and track loyalty points (Karma)\n- 🏆 **Challenges** - Create and manage user challenges with progress tracking\n- 🎁 **Rewards** - Handle reward catalog and redemption\n- 📊 **Leaderboards** - Query rankings and user positions\n- 🔔 **Notifications** - Poll-based listener for badge/tier notifications (the backend has no push channel)\n- 👤 **User Profiles** - Manage user data and achievements\n- ⚛️ **React Support** - First-class React integration with hooks\n- 📘 **TypeScript** - Full TypeScript support with type definitions\n- 🔄 **React Query** - Built-in caching and state management\n\n## Installation\n\n```bash\nnpm install @3halves-labs/score-loyalty-sdk\n```\n\nFor React integration, you'll also need React Query:\n\n```bash\nnpm install @tanstack/react-query\n```\n\n## Quick Start\n\n### Basic Usage (JavaScript/TypeScript)\n\n```typescript\nimport { LoyaltyClient } from '@3halves-labs/score-loyalty-sdk';\n\n// Initialize the client\nconst client = new LoyaltyClient({\n  apiUrl: 'https://your-loyalty-api.com',\n  apiKey: 'your-api-key',\n  userId: 'user-123'\n});\n\n// Award points\nawait client.awardPoints(100, 'Completed first game');\n\n// Get challenges\nconst challenges = await client.getChallenges({ status: 'active' });\n\n// Redeem a reward\nawait client.redeemReward('reward-id');\n```\n\n### Authentication — `getToken` (recommended for fan sessions)\n\nFor fan (Auth0) sessions, pass a **`getToken`** provider instead of a static\n`Authorization` header. The SDK calls it before every request and attaches a\nfresh `Authorization: Bearer <token>`, so the token can refresh transparently\nand you **never rebuild the client** when it changes:\n\n```typescript\nconst client = new LoyaltyClient({\n  apiUrl: 'https://api.urc.anything-loyalty.3halves-labs.com',\n  getToken: () => auth0.getTokenSilently(),   // () => string | undefined | Promise<...>\n});\n```\n\n`getToken` takes precedence over a static `Authorization` in `headers`; returning\n`undefined` sends the request unauthenticated (anonymous), and a thrown/rejected\n`getToken` is swallowed so it never breaks the request pipeline. See\n`docs/AUTH_QUICKSTART.md` for the full fan-auth flow.\n\n### React Integration\n\n```tsx\nimport { LoyaltyProvider, usePoints, useChallenges } from '@3halves-labs/score-loyalty-sdk/react';\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\n\nconst queryClient = new QueryClient();\n\nfunction App() {\n  return (\n    <QueryClientProvider client={queryClient}>\n      <LoyaltyProvider config={{\n        apiUrl: 'https://your-api.com',\n        apiKey: 'your-key',\n        userId: 'user-123'\n      }}>\n        <Dashboard />\n      </LoyaltyProvider>\n    </QueryClientProvider>\n  );\n}\n\nfunction Dashboard() {\n  const { data: points, isLoading } = usePoints();\n  const { data: challenges } = useChallenges({ status: 'active' });\n\n  if (isLoading) return <div>Loading...</div>;\n\n  return (\n    <div>\n      <h1>You have {points} points!</h1>\n      <ChallengeList challenges={challenges?.data || []} />\n    </div>\n  );\n}\n```\n\n## Endpoint coverage\n\nThis client targets the real score-middleware REST surface (`/api/users`,\n`/api/challenges`, `/api/products`, `/api/redemption`, `/api/leaderboard`,\n`/api/badges`). The legacy `/api/loyalty/*` paths it used before **never existed**\non the backend — only `/api/loyalty/{join,status}` are mounted there, for the\nWordPress enrolment proxy (#112).\n\n| Method | Middleware route | Notes |\n| --- | --- | --- |\n| `getPoints` / `getProfile` | `GET /api/users/me` · `GET /api/users/:id` (admin) | points = `karmaPoints`; profile carries `tier` / `pointsToNextTier` / streaks |\n| `awardPoints` / `deductPoints` | `PUT /api/users/:id/karma` | **admin**; returns the new karma balance |\n| `getChallenges` / `getChallenge` | `GET /api/challenges` · `/:id` | list returns `{ items, total, page, totalPages }` |\n| `joinChallenge` | `POST /api/challenges/:id/join` | replaces the old `completeChallenge` |\n| `completeChallengeGoal` | `POST /api/challenges/:id/complete-goal/:goalDefinitionId` | goal-based completion |\n| `getChallengeProgress` | `GET /api/challenges/:id/progress?userId=` · `/my-progress` | self route when no id |\n| `getMyChallengesProgress` | `GET /api/users/me/challenges/progress[?ids=]` | **all** the caller's challenges + goals in one call (replaces the per-challenge fan-out, #288); `ids` narrows to a subset |\n| `getTodaysGoals` | `GET /api/users/me/challenges/today[?date=]` | the caller's challenges/goals active **today** (Europe/London), same shape as bulk progress; `date` resolves a specific day (#297) |\n| `getChallengeLeaderboard` | `GET /api/challenges/:id/leaderboard[?cadence=today\\|?date=]` | per-challenge board — all-time by default, or a **per-cadence** (daily) board (#297) |\n| `getInteraction` | `GET /api/interactions/:id` | published survey/poll/trivia definition — **correct answers withheld**, server-scored (#307) |\n| `submitInteractionResponses` | `POST /api/interactions/:id/responses` | submit answers → **server-authoritative** score + karma award (#307/#308) |\n| `getInteractionResults` | `GET /api/interactions/:id/results` | the caller's plays + top-scores leaderboard |\n| `getMyInteractions` | `GET /api/users/me/interactions` | the caller's interaction history, grouped by game |\n| `getMyChallenges` | `GET /api/users/me/challenges` | the user's **joined** challenges (distinct from the catalogue); needs the middleware endpoint (#247) |\n| `getRewards` / `getReward` | `GET /api/products` · `/:id` | product catalogue |\n| `redeemReward` | `POST /api/products/:id/redeem` | |\n| `getRedemptionHistory` | `GET /api/redemption/history` | authenticated user's own history |\n| `getLeaderboard` | `GET /api/leaderboard/karma` | flat karma board |\n| `getMatchweekLeaderboard` | `GET /api/leaderboard/matchweek` | segment envelope (`entries` + `total` + pinned self); `since`/`until` **required** |\n| `getAllLeaderboards` | `GET /api/leaderboard/all` | combined dashboard: `topKarma` / `topMovers` / `campaignLeaders` |\n| `getUserRank` | _computed client-side_ | no rank endpoint; derived from the karma board |\n| `getTiers` | `GET /api/tiers` | read-only tier ladder (`min`/`max`/`content`/`rankUsersCount`) |\n| `getTotalFans` | `GET /api/users/count` | headline fan count → `data.totalFans` (denominator: ranked) (#274) |\n| `getAchievements` | `GET /api/badges?include=image` | full catalogue (returns a raw array), with art as data URIs in `icon`, plus `rarity`; pass `{ lockedArt: true }` for `lockedIcon` too. The fan's earned badges are `GET /api/users/me/badges` |\n| `unlockAchievement` | `POST /api/badges/award` | **admin** |\n| `getBadgeAudit` | `GET /api/badges/audit` | award audit trail; `{ auditTrail, totalPages }` → `{ items, totalPages }`; optional `userId` filter |\n| `getEvents` | `GET /api/events` | **admin** system-audit feed (#232); `{ events, totalPages }` → `{ items, totalPages }` |\n| `getPointsHistory` | `GET /api/users/me/points` | fan's own karma ledger (#271); `{ items, total, page, totalPages }`, items `{ points, action, type, timestamp, reasonCode }` |\n| `getMyStats` | `GET /api/users/me/stats` | per-round profile stats (#273): `{ round, resetsOn, motm, polls }` |\n| `getMissions` / `getMission` | `GET /api/missions` · `/:id` | matchweek missions w/ progress (#117); list → `{ matchweek, missions }` |\n| `getNotifications` / `getNotificationCount` | `GET /api/users/me/notifications` · `/count` | Odoo-chatter notifications; the poll source for `watchNotifications` |\n| `markNotificationsRead` | `POST /api/users/me/notifications/read` | |\n| `watchNotifications` | _polls the two count/list routes_ | poll-based listener (no SSE/WebSocket on the backend) |\n| `updateProfile` | — | **`LoyaltyNotSupportedError`** — no profile PATCH |\n\n### Trivia (Ruck & Recall) — `/api/trivia/*`\n\nThe dedicated session game, distinct from the score.game interactions above.\nScoring is server-side (the answer key is withheld); karma lands asynchronously\nvia the `loyalty.trivia` outbox. All 13 middleware routes are covered (#401, #468):\n\n| Method | Middleware route | Notes |\n| --- | --- | --- |\n| `getTriviaTracks` | `GET /api/trivia/tracks` | tracks + live item counts |\n| `startTriviaSession` | `POST /api/trivia/sessions` | sends the client's renderable types (#353); returns the session + first question |\n| `getNextTriviaQuestion` | `GET /api/trivia/sessions/:id/next` | `null` when exhausted |\n| `prefetchTriviaQuestions` | `POST /api/trivia/sessions/:id/prefetch` | offline bundle (≤10, #354). **Voids the run's speed bonuses** and flags the session offline: prefetch only when the fan is about to lose signal |\n| `submitTriviaAnswer` | `POST /api/trivia/sessions/:id/answers` | server-scored; `correctness` carries partial credit (#436) |\n| `completeTriviaSession` | `POST /api/trivia/sessions/:id/complete` | karma awarded async; re-read with `getProfile` a moment later |\n| `getTriviaProfile` | `GET /api/trivia/profile` | per-track band, ability (`theta`, null until answered), accuracy, `polymathEligible` |\n| `getTriviaObjectives` | `GET /api/trivia/objectives` | **contract stub** until #358: check `stub` and show \"coming soon\", not the placeholder rows |\n| `reportTriviaItem` | `POST /api/trivia/items/:id/report` | \"this looks wrong\", feeds the triage queue (#364); idempotent per fan and item (`duplicate: true`) |\n| `getTriviaCacheMetrics` | `GET /api/trivia/cache/metrics` | **admin**; `poolHitRate` should sit near 1.0 |\n| `warmTriviaCache` | `POST /api/trivia/cache/warm[?locale=]` | **admin**; per-track results, failures as `error` rather than a thrown call |\n| `invalidateTriviaCache` | `POST /api/trivia/cache/invalidate` | **admin**; after retiring or recalibrating items; omit `track` for all |\n| _(none)_ | `GET /api/trivia/image/:ref` | the signed image proxy. Not a method: questions already carry a ready-to-use signed `imageUrl`, which works in a plain `<img src>` |\n\n> Methods marked **admin** require an admin session. Methods that throw\n> `LoyaltyNotSupportedError` fail fast (no doomed request) — they become small\n> `repo:middleware` follow-ups if a consumer needs them.\n\n## Core API\n\n### Points\n\n```typescript\n// Get current karma balance (self)\nconst points = await client.getPoints();\n\n// Award / deduct karma (admin — PUT /api/users/:id/karma). Returns new balance.\nconst balance = await client.awardPoints(100, 'Challenge completed', 'user-id');\nawait client.deductPoints(50, 'Reward redeemed', 'user-id');\n\n// The fan's own points history (self-scoped karma ledger) → { items, total, page, totalPages }\nconst { items } = await client.getPointsHistory({ page: 1, limit: 20 });\nitems[0]; // { points, action, type: 'award'|'progress'|'denied', timestamp, reasonCode }\n\n// Per-round profile stats (MOTM + Polls) + the headline fan count\nconst stats = await client.getMyStats();   // { round, resetsOn, motm:{…}, polls:{…} }\nconst fans  = await client.getTotalFans();  // e.g. 14822\n```\n\n### Challenges\n\n```typescript\n// List challenges (page/limit + optional filters) → { items, total, page, totalPages }\nconst { items } = await client.getChallenges({ status: 'active', type: 'daily' });\n\n// Get progress (self route when no userId is known)\nconst progress = await client.getChallengeProgress('challenge-id');\n\n// All of the caller's challenges + goals in ONE call (no per-challenge fan-out)\nconst all = await client.getMyChallengesProgress();          // every joined challenge\nconst some = await client.getMyChallengesProgress([12, 22]); // narrow via ?ids=\n// each: { challengeId, challengeName, goals: [{ id, state, current, target, completeness, goalDefinitionId, goalName }] }\n\n// Daily challenges: the caller's goals active TODAY (Europe/London), same shape\nconst today = await client.getTodaysGoals();                 // or getTodaysGoals('2026-08-14')\n\n// Per-challenge leaderboard — all-time, or today's cadence board\nconst board = await client.getChallengeLeaderboard(22);                     // all-time\nconst todayBoard = await client.getChallengeLeaderboard(22, { cadence: 'today' });\n// { challengeId, date, cadence: 'daily'|'all-time', entries: [{ rank, userId, points }] }\n\n// Join a challenge, then complete its goals\nawait client.joinChallenge('challenge-id');\nconst completion = await client.completeChallengeGoal('challenge-id', 'goal-def-id');\n\n// The challenges THIS user has joined (distinct from the catalogue above)\nconst mine = await client.getMyChallenges(); // { items, total, ... }\n```\n\n### Rewards\n\n```typescript\n// List rewards from the product catalogue → { items, total, page, totalPages }\nconst { items } = await client.getRewards({ available: true, maxCost: 500 });\n\n// Redeem a reward (optional quantity)\nconst redemption = await client.redeemReward('reward-id', undefined, 1);\n\n// Get the authenticated user's redemption history\nconst history = await client.getRedemptionHistory();\n```\n\n### Leaderboard\n\n```typescript\n// Karma leaderboard\nconst leaderboard = await client.getLeaderboard({ limit: 100 });\n\n// User's rank (computed client-side from the karma board)\nconst rank = await client.getUserRank('user-id');\n\n// Matchweek segment — since/until are required (Date or ISO string)\nconst matchweek = await client.getMatchweekLeaderboard({\n  since: '2026-01-01T00:00:00Z', until: '2026-01-08T00:00:00Z', limit: 10,\n});\nmatchweek.entries;    // ranked page\nmatchweek.pinnedUser; // the caller's own row, pinned in\n\n// Combined dashboard — top karma + movers + campaign leaders in one call\nconst { topKarma, topMovers, campaignLeaders } = await client.getAllLeaderboards();\n```\n\n### Tiers\n\n```typescript\n// Read-only tier ladder (min/max karma bounds per band)\nconst tiers = await client.getTiers();\n```\n\n### Missions (matchweek)\n\n```typescript\n// Current matchweek's missions with the caller's progress\nconst { matchweek, missions } = await client.getMissions();\nmissions[0]; // { id, title, actionType, pointsValue, completionState, progress: { current, target }, … }\n\n// A specific matchweek / team, or a single mission\nawait client.getMissions({ matchweek: 7, teamId: 'team-id' });\nawait client.getMission('mission-id');\n```\n\n### Audit feeds (admin)\n\n```typescript\n// Badge-award audit trail (optionally filtered to one user)\nconst { items, totalPages } = await client.getBadgeAudit({ userId: 'user-id', page: 1 });\n\n// System audit events (#232)\nconst events = await client.getEvents({ type: 'login', page: 1, limit: 20 });\n```\n\n### User Profile\n\n```typescript\n// Get profile (self → /api/users/me; explicit id → admin /api/users/:id)\nconst profile = await client.getProfile();\nprofile.karmaPoints; // points\nprofile.tier;        // 'amateur' | 'professional' | 'elite' | 'legend'\n\n// updateProfile() throws LoyaltyNotSupportedError — no profile PATCH endpoint.\n\n// Get badges (achievements): full catalogue, with art as data URIs\nconst achievements = await client.getAchievements();\n// achievements[0].icon → 'data:image/png;base64,…', .rarity → 'rare'\n// Also fetch the not-yet-earned art (larger payload):\nconst withLocked = await client.getAchievements(undefined, { lockedArt: true });\n```\n\n### Notifications (poll-based)\n\nThe backend has no push channel (no SSE/WebSocket), so `watchNotifications`\npolls the cheap unread-count endpoint on an interval and pulls the full list\nonly when the count rises — giving you a `.on(...)` listener without a socket.\n\n```typescript\nconst stop = client\n  .watchNotifications({ intervalMs: 30_000 }) // defaults: 30s, unreadOnly, silent first poll\n  .on('badge_awarded', (n) => toast(n.subject)) // by notification type\n  .on('*', () => refreshInbox())                // any notification\n  .on('count', (c) => setBadge(c))              // unread-count changes\n  .on('error', (e) => console.warn(e))          // a failed poll\n  .start();                                     // returns stop()\n\n// …later\nstop();\n```\n\nBehaviour: the first poll seeds a **silent baseline** (you only hear about\nnotifications that arrive *after* you start; pass `emitInitial: true` to emit\nexisting ones), events are **de-duped by id**, polling **pauses while the tab is\nhidden**, and failures **back off exponentially**. You can also call the\nunderlying reads directly: `getNotifications()`, `getNotificationCount()`,\n`markNotificationsRead(ids)`.\n\n## React Hooks\n\nAll hooks support React Query options for caching, refetching, and more.\n\n### Points Hooks\n\n```tsx\nconst { data: points } = usePoints();\nconst { mutate: awardPoints } = useAwardPoints(); // admin\n\n// Award points (admin)\nawardPoints({ amount: 100, reason: 'Game completed', userId: 'user-id' });\n\n// usePointsHistory() exists for parity but errors with LoyaltyNotSupportedError\n// (no ledger endpoint) — its `error` will be set, `data` stays undefined.\n```\n\n### Challenge Hooks\n\n```tsx\nconst { data: challenges } = useChallenges({ status: 'active' }); // → { items, total, ... }\nconst { data: challenge } = useChallenge('challenge-id');\nconst { data: progress } = useChallengeProgress('challenge-id');\nconst { mutate: join } = useJoinChallenge();\nconst { mutate: completeGoal } = useCompleteChallengeGoal();\n\n// Join, then complete a goal\njoin({ challengeId: 'challenge-id' });\ncompleteGoal({ challengeId: 'challenge-id', goalDefinitionId: 'goal-def-id' });\n```\n\n### Reward Hooks\n\n```tsx\nconst { data: rewards } = useRewards({ available: true });\nconst { data: reward } = useReward('reward-id');\nconst { mutate: redeem } = useRedeemReward();\n\n// Redeem reward\nredeem({ rewardId: 'reward-id' });\n```\n\n### Leaderboard Hooks\n\n```tsx\nconst { data: leaderboard } = useLeaderboard({ period: 'weekly' });\nconst { data: rank } = useUserRank();\n```\n\n### Profile Hooks\n\n```tsx\nconst { data: profile } = useProfile();\nprofile?.karmaPoints; // points · profile?.tier\n\n// useUpdateProfile() exists for parity but errors with LoyaltyNotSupportedError\n// (no profile PATCH endpoint).\n```\n\n## TypeScript Support\n\nThe SDK is written in TypeScript and provides full type definitions:\n\n```typescript\nimport type {\n  Challenge,\n  Reward,\n  UserProfile,\n  LeaderboardEntry,\n  PointTransaction\n} from '@3halves-labs/score-loyalty-sdk';\n\nconst challenge: Challenge = {\n  id: '123',\n  name: 'Daily Login',\n  type: 'daily',\n  status: 'active',\n  points: 10,\n  // ... TypeScript will validate the structure\n};\n```\n\n## Error Handling\n\n```typescript\ntry {\n  await client.awardPoints(100, 'Completed task');\n} catch (error) {\n  if (error instanceof Error) {\n    console.error('Failed to award points:', error.message);\n  }\n}\n```\n\nWith React hooks:\n\n```tsx\nconst { mutate, error, isError } = useAwardPoints({\n  onError: (error) => {\n    console.error('Award failed:', error.message);\n  }\n});\n\nif (isError) {\n  return <div>Error: {error.message}</div>;\n}\n```\n\n### Auth-edge vs application errors\n\nThe loyalty API sits behind score-auth's **ForwardAuth edge** (Traefik → Keycloak). A request can fail at **two distinct layers**, and they look similar on the wire (both 401/403) but mean very different things:\n\n| Layer | What it means | Shape on the wire | SDK surfaces as |\n| --- | --- | --- | --- |\n| **Edge** (ForwardAuth) | The request never reached the middleware — it was rejected by the auth gate (infra). | `401/403` with an `x-auth-request-redirect` header and/or `{ error: 'Authentication required', redirectUrl: 'https://login.…' }` | **`LoyaltyEdgeAuthError`** (`.atEdge === true`, `.status`, `.redirectUrl`) |\n| **App** (middleware) | The request reached the API and was refused by it (bad request, insufficient points, etc.). | `{ success: false, error, message }` | a plain `Error` with the server message |\n\nToday the loyalty API is fully behind the edge for browser callers, so a fan token gets a `LoyaltyEdgeAuthError`. That's **expected infrastructure** until the fan-API tier lands (Gitea #220 / #122 / #221) — handle it distinctly so your UI says \"loyalty isn't available yet\" rather than showing a bare 403:\n\n```ts\nimport { LoyaltyClient, LoyaltyEdgeAuthError } from '@3halves-labs/score-loyalty-sdk';\n\ntry {\n  const { items } = await client.getChallenges({ status: 'active' });\n} catch (e) {\n  if (e instanceof LoyaltyEdgeAuthError) {\n    // Blocked at the auth edge — not your fault, not a bad request.\n    showNotice('Loyalty features are coming soon.');\n  } else {\n    showError((e as Error).message); // genuine app-level error\n  }\n}\n```\n\n## Documentation\n\n- [Getting Started Guide](https://github.com/3halveslabs/score-anything-loyalty/tree/main/docs/loyalty-sdk/getting-started.md)\n- [API Reference](https://github.com/3halveslabs/score-anything-loyalty/tree/main/docs/loyalty-sdk/api-reference.md)\n- [React Integration](https://github.com/3halveslabs/score-anything-loyalty/tree/main/docs/loyalty-sdk/react-integration.md)\n- [Examples](https://github.com/3halveslabs/score-anything-loyalty/tree/main/docs/loyalty-sdk/examples)\n\n## License\n\nMIT © 3 Halves Labs\n\n## Support\n\n- [GitHub Issues](https://github.com/3halveslabs/score-anything-loyalty/issues)\n- [Documentation](https://github.com/3halveslabs/score-anything-loyalty/tree/main/docs/loyalty-sdk)\n\n","readmeFilename":"README.md"}