{"_id":"sponsorflare","_rev":"47-0852519b8f9cd471895c0e17c20e4d76","name":"sponsorflare","dist-tags":{"latest":"0.2.11"},"versions":{"0.0.1":{"name":"sponsorflare","version":"0.0.1","_id":"sponsorflare@0.0.1","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"7990016ee9f72882b07f6b4d690b7cb3025ddfde","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.0.1.tgz","fileCount":9,"integrity":"sha512-+tUkBzzZxASVaH4qvzrWI0esGfqA27bl2xD5njK6qM8TvU5z3iUS1SPVdMyD1Le0ncVIR6BWqcTUpEI500KKpQ==","signatures":[{"sig":"MEYCIQCr8gJA2Bs8acjtSASa6/niTYLXPz1Brtg9U/i8lx1xRgIhANMD6AZawGlNhrnipuqm1yIzq4y0sSMZNWmm+5wd2uSD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13877},"gitHead":"c25c45e25d52d5a477977934fb289d73b6957070","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"10.9.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.0.1_1737895086091_0.5312672123291495","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"sponsorflare","version":"0.0.2","_id":"sponsorflare@0.0.2","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"9ed72e11132b1e53483bdcd8a3252c53db5553ec","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.0.2.tgz","fileCount":13,"integrity":"sha512-5N1hoQ6GqVAxklXIA9bZz3tjJMuKFZrzy/lA7cFHtd8csEsBpVca9kscYyWlYSH50OF3Vh5kVoy9JMXmLox0jA==","signatures":[{"sig":"MEUCID06gdBDKliqYa0ZFExoqIEn1YirmSwtAlvqyIIT0B/7AiEAjYip+jAW3vOnz8VESYWpjdzI2P/HODiOvwfyecvcAW4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58005},"main":"sponsorflare.ts","gitHead":"02ed9cc1fa7d882089f663a19921d9f680bf177c","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"10.9.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.0.2_1737968626921_0.3494593208542258","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"sponsorflare","version":"0.0.3","_id":"sponsorflare@0.0.3","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"f00526b799947967059b4bf8b753fb931a361aa6","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.0.3.tgz","fileCount":15,"integrity":"sha512-0YPC3kfYOes4nOAFFFUAE+ve5RvDrqBQvr2dloTEQnoDDImk2vlW8ojO+Nw09nZPupt2g+u8TVB5LStdv7m6sw==","signatures":[{"sig":"MEYCIQDr+7pTOS6e8sRrwdARP8WnYcuBqptLCSKqLHVy5gzGLgIhAN+QVX75vyvsEeTZ6AWEsQTIXkN7SugyYVQo9kZWN8Fl","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":75648},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"02ed9cc1fa7d882089f663a19921d9f680bf177c","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"10.9.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.0.3_1737968870044_0.7834090264510984","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"sponsorflare","version":"0.0.4","_id":"sponsorflare@0.0.4","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"b22b58933d2390fa2bb6590896a6a7faaa803cee","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.0.4.tgz","fileCount":18,"integrity":"sha512-6zx3F7MTFsH0asiGoogeqVockNVaCvug/6H64MlPsSs9nJ5T8JlgoTLZCkLEJxexbIEv2VMLee9UNc6tkJqriA==","signatures":[{"sig":"MEQCICfCAj4vOl8TJ2aTFtgCDQrbRZ09BQ3Tb6Z+ovGGRm3PAiAj5GRFCqBRGfuimMlHMjGSONJdaRppiPHh0T2V8eY5Kw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":311682},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"d9342b8d7b338b8d85864bd086d2920ed21843fc","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"10.9.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.0.4_1737997448175_0.3390130720299145","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"sponsorflare","version":"0.0.5","_id":"sponsorflare@0.0.5","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"5337b4a9fdabe1f0fe608c176e37a765dce631f7","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.0.5.tgz","fileCount":18,"integrity":"sha512-WiK70aPdYOpWxI/TtV3hSaLsaTaio8hWLuVbVtW+2WfnFdIr/0qfxOpSa6WvOp8pyS+CxUNwB6lf8Key4eBf8Q==","signatures":[{"sig":"MEUCIQCrMDQxuykoW7njW8lArUWpdPjklDjSP2d7GTINYn7UKQIgG3ssly8hKM6cwmVAjwW0XDFgENqTPr7ml+ioVskAFN8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":388505},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"f9441a99a46c411d7f5c717b5ef3d7de4ff23210","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"10.9.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.0.5_1738165815409_0.045005768076032515","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"sponsorflare","version":"0.0.6","_id":"sponsorflare@0.0.6","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"ec695aa7b1911a17ccc78658b8a21f2628dabbbe","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.0.6.tgz","fileCount":20,"integrity":"sha512-VinR1s3CatNZjPhmMkk0j9Z+K3Rx2hsOyXdBH8tyJKoUcENZRK/hny8FSfxOJyO2l9ny1qC32TK2vwnhK8vTFw==","signatures":[{"sig":"MEQCIFzBLSHdIE/rq91tt5pY2yu4cWaE0TgcxizAVh+0l4XgAiBWXBGc0R+qBpFYRZahQ0voLsWQujftaVE5gDa7JBUpeQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":400394},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"9a5a7be0a7fa636f350a4f8905b5798e70a28b04","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"10.9.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.0.6_1738175594874_0.7407392656392229","host":"s3://npm-registry-packages-npm-production"}},"0.0.7":{"name":"sponsorflare","version":"0.0.7","_id":"sponsorflare@0.0.7","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"7ac6d089298fa0ce7014f343ce592d58520e65b0","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.0.7.tgz","fileCount":20,"integrity":"sha512-XEf04/xH53Y1ZTJNkBAz1S3DO85pG3kaM3xYud26AHBr4evHH2KXvZ43EW5m0Jhb3grg1tE3EawgNP0MyGL0Vg==","signatures":[{"sig":"MEUCIHBQFdmCVwHwNPdoaM3uKAhCK4UKFz76mdvBJEkU4pmQAiEAwJkZnd+Xo/yZ3AVcu0pfuCOvdGNHMnRi2TRlmDgpO+s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":401227},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"9a5a7be0a7fa636f350a4f8905b5798e70a28b04","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"10.9.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.0.7_1738185553049_0.42893335388656184","host":"s3://npm-registry-packages-npm-production"}},"0.0.8":{"name":"sponsorflare","version":"0.0.8","_id":"sponsorflare@0.0.8","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"37e816d97c58fb549f14fe7bfacb4ad8b37bcf98","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.0.8.tgz","fileCount":20,"integrity":"sha512-cyoYoX64ayzUoo2YW0Ye64Nhf4nEw1JfhK0E5pC/CJAuHi085WD2RFUrgR2zny/lZd73V+chRSit0eFijrvvXQ==","signatures":[{"sig":"MEQCIARXEb+KiXaQwEjDPYRZez1WqDonZ+ZLqKs/j4x+9+GeAiAdMFShxMwyEIaIt9Bs6Q32zFOEj8xaJSrzIxjgSGY5Gw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":401227},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"9a5a7be0a7fa636f350a4f8905b5798e70a28b04","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"10.9.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.0.8_1738185570312_0.5352745897545668","host":"s3://npm-registry-packages-npm-production"}},"0.0.9":{"name":"sponsorflare","version":"0.0.9","_id":"sponsorflare@0.0.9","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"192becb6dffb0a064f6f316d10570df0f4611b0b","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.0.9.tgz","fileCount":20,"integrity":"sha512-2k079l1gL5xr9k0p6DVrxAPwbyW+duFml/QyKvBwZcLCQ3Rz/aaIx23dk8lYD3rP1YTV+DYFS9RgtTeQP8i1LQ==","signatures":[{"sig":"MEUCIQCBywReHRipcyzG+VntH+zdwzpMFRuoAxWkmaWQYImf5gIgSl8KWHxn0ovyCofJTZNf1jjc/4+QTc1g3Rr19o4209k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":402412},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"1ed7e58cf40282f3d40d4d6cd9210b2488a3ccf5","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"10.9.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.0.9_1738335639811_0.9307134847853251","host":"s3://npm-registry-packages-npm-production"}},"0.0.10":{"name":"sponsorflare","version":"0.0.10","_id":"sponsorflare@0.0.10","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"f1ad86a9c28b398526e63a1df75c7e40eab58b86","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.0.10.tgz","fileCount":20,"integrity":"sha512-M1dM3RsfvHlM8C80Mkjt76rcwZe89o2qmeXY9qrQC6tIMe3rBehA5VNyWF6i/pSdenod3/BFlKkon/LtMOTejg==","signatures":[{"sig":"MEUCIQCXd1UcQQRIAVGLwjLBV3iwbHMM7iob/CxoG5FY3WZhCwIgLYRPvsP0DDOkrJ8bT9hvNTwJs6P+ZvtmMUDHSRbUyzw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":402413},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"1ed7e58cf40282f3d40d4d6cd9210b2488a3ccf5","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"10.9.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.0.10_1738335673915_0.835745583380519","host":"s3://npm-registry-packages-npm-production"}},"0.0.11":{"name":"sponsorflare","version":"0.0.11","_id":"sponsorflare@0.0.11","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"21950622d75b1c809bac14bd06942aaa8933160c","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.0.11.tgz","fileCount":20,"integrity":"sha512-GJwOVWS0IumvKn8+x+BTR77XhxrkvHN01JbX2Ybjs+/m89pTXmsTKXIpc79vLAnK0xTthpcuTlBYrseedJU15A==","signatures":[{"sig":"MEQCIEGlh+KxVlT5Kbmlv3DIj3j/e2on1ipjKOIzFAQ7cXesAiBkGWlkVTyJK/V5zb7iyySt0rATFlWfCFBqHuei9HnUWg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":402875},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"6fc6f3a7742de5d625fef2366fbbe9bb69fd23c6","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"10.9.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.0.11_1738335903666_0.517518924234414","host":"s3://npm-registry-packages-npm-production"}},"0.0.12":{"name":"sponsorflare","version":"0.0.12","_id":"sponsorflare@0.0.12","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"2be4164584508dbc1130feffaa552e60f4101625","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.0.12.tgz","fileCount":20,"integrity":"sha512-E8BWIaweyPOandpcOPhKM3vwSE6syPdc9r++pgWRrkWmMSOJ4othtA6kjGAeK1ZU/sYfW4DiPom09rYma6tbTQ==","signatures":[{"sig":"MEUCIQD+K3d8yjxBY79CEIBh0KQD/RWPAtmcCXT+ZT8SFeGRngIgf7fLp6HEL2MHXFteBH7vu+v5KqfZd2Ewky8gb19gHqA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":403704},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"a8469292cc3d504836dc0bca0af77f707cb05b0c","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"10.9.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.0.12_1738338845422_0.08336334680222524","host":"s3://npm-registry-packages-npm-production"}},"0.0.13":{"name":"sponsorflare","version":"0.0.13","_id":"sponsorflare@0.0.13","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"b3db7b6383ac8c7c9f35eba07bcb027e011b4269","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.0.13.tgz","fileCount":20,"integrity":"sha512-rSk2vurcxadwS8OA8KZDUqOgq0KHakHLfCcY6bFmnhpWExA3Ggxs9u/jcCiJJCAtajXB8miMv6JHLC2o7SeODQ==","signatures":[{"sig":"MEQCIFmMa4X5R/s+NUhqr/JtsRlCzjv578KxQ7gFXci+QYG2AiANywJrB0yEYEJSLWk67ZNOV9p4IhpWnrChyhb4ry8dnw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":404074},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"edb2c9c6d0015a195f40328734fdcc9c2a151b87","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"10.9.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.0.13_1738352626146_0.0680315863060712","host":"s3://npm-registry-packages-npm-production"}},"0.0.14":{"name":"sponsorflare","version":"0.0.14","_id":"sponsorflare@0.0.14","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"79bc8db72ee4c44caf7c83b9d711509b67667b97","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.0.14.tgz","fileCount":20,"integrity":"sha512-t6V6mJLNlyPw1Seowp0pMHK/Mld79UhYNUndkXzNked2ORngGxnuwDOJcmFvNhrppBs/jOC0Vq6DCU96vj/bsA==","signatures":[{"sig":"MEUCIQCobE/ht0CHMPtxUt6MgsAx31Gorp5e0rycG83WMAcVHAIgAxSGBpN6ZSpmHifxZaJiO+yFalMOptcuNuCLBjvz7EA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":404034},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"edb2c9c6d0015a195f40328734fdcc9c2a151b87","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"10.9.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.0.14_1738352730918_0.9164741628645068","host":"s3://npm-registry-packages-npm-production"}},"0.0.15":{"name":"sponsorflare","version":"0.0.15","_id":"sponsorflare@0.0.15","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"cb52b28283fdf959c0aed97cf3c495f452f8dc1d","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.0.15.tgz","fileCount":20,"integrity":"sha512-A7UOhKJUTMsp6g2oH9Mn3ZNccyT+0XdLhGDEeCI9teF9FP/XmmSr16gv9tv1Vxu2HkSXDKQs12K/DlFQLKchaQ==","signatures":[{"sig":"MEUCIA4hT4axYaifrrQmR0FyGjVTRW6HcayYgHJcWAcMvqXJAiEAk1tT3dCJ1gj7nS/8TNAkmFz4TJRD5kzKOZR6PLKeTkw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":404034},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"edb2c9c6d0015a195f40328734fdcc9c2a151b87","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"10.9.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.0.15_1738352773178_0.31812166659688423","host":"s3://npm-registry-packages-npm-production"}},"0.0.16":{"name":"sponsorflare","version":"0.0.16","_id":"sponsorflare@0.0.16","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"e9a00fc03905311d4643a16f56e6d2945ffc7d27","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.0.16.tgz","fileCount":20,"integrity":"sha512-G1AaVIkmKXUFZm7A+WTdbc30aVG9breprmJBdW7hqxj0watz2ssAqT2u9Fl49EcQC4KP7eq9MhNIJAC6mZ2VvQ==","signatures":[{"sig":"MEUCIQCA4p0bWZENBC0GL885ftAJ/q8TfKAXRTJ5MbvEKUxD8AIgRaEq8Dor5DvE+8cXXMj4PgSj9HM/4aMF+TYYp/n7J94=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":404114},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"edb2c9c6d0015a195f40328734fdcc9c2a151b87","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"10.9.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.0.16_1738353090667_0.4161413194658208","host":"s3://npm-registry-packages-npm-production"}},"0.0.17":{"name":"sponsorflare","version":"0.0.17","_id":"sponsorflare@0.0.17","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"3a41c3957b06e30885add661240cdc85d009bbd9","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.0.17.tgz","fileCount":20,"integrity":"sha512-izq/FfQUDNKvdpe/ukez5Vw7A1ZrQzRkx0AdweuU2Fo495/B0WoNrGSX4s9rbBFKxrfhxqhotUtuQdkGvUi48Q==","signatures":[{"sig":"MEQCIFgaWMO+NVtaYxuVnFNutVV+4QTURIpDb0Po1UMcEvaIAiAhBA8DO+k3TY+5ssL081ZnI28N97e7dC6T1th84qObyg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":404005},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"edb2c9c6d0015a195f40328734fdcc9c2a151b87","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"10.9.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.0.17_1738353213538_0.7136446484870209","host":"s3://npm-registry-packages-npm-production"}},"0.0.18":{"name":"sponsorflare","version":"0.0.18","_id":"sponsorflare@0.0.18","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"f52e10452bbf1ee13471f1d4c277a5e7c53bf554","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.0.18.tgz","fileCount":20,"integrity":"sha512-eY1ugmtD+OHv8jkqH69Nx8wrpbCeT1MPIFId+Hfb9ONN4xUS2vyvrTeAlPs6tW2XEBOSjDjFXCOSYSvI5K66UA==","signatures":[{"sig":"MEQCIGzMDWI5gPA+v25mRMAlNxmtGImGrUGjzDxova0wrOZxAiAi5XXHAFzX+buRUIPsj2i7gi1gk+/xA4YOJBW3QfJSHg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":404005},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"edb2c9c6d0015a195f40328734fdcc9c2a151b87","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"10.9.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.0.18_1738353229579_0.486689118750639","host":"s3://npm-registry-packages-npm-production"}},"0.0.19":{"name":"sponsorflare","version":"0.0.19","_id":"sponsorflare@0.0.19","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"b5d6f2af1e11ab32999a3306dacd7fe5152de01f","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.0.19.tgz","fileCount":23,"integrity":"sha512-utr9rQeM5X+SCXqbi9YfQEpO8sUKAwts21teuAbJsSNBRFJk3VFCDm+BJbYFLg5gwXw17jc08R3dWkzQoQ2wGg==","signatures":[{"sig":"MEUCIQCx6omEgu9Aqu9qyNM8wFImdP76/ZwPpOXTGdGMbOEOqwIgE0J80aIrmheqXg1cGUGElozBG6IE0BnF6JsDBW+du2k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":417305},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"19daa813b6cf56ebe705c0991dce7710677498d8","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"10.9.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.0.19_1738678701357_0.14327828158342726","host":"s3://npm-registry-packages-npm-production"}},"0.0.20":{"name":"sponsorflare","version":"0.0.20","_id":"sponsorflare@0.0.20","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"4a8b8628c3e0196b00786ab77351dc12c96c07e2","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.0.20.tgz","fileCount":23,"integrity":"sha512-4bJZSGVpFjn5cLfGPEEj7awz7vow0DFh5ImfNDMWI+P3bUC6vNVQje4KPmisWkJ5Vpxplw7Xs4d6FKPCOETEmg==","signatures":[{"sig":"MEUCIH+NoOb9Zl9fNtPIFVz6pHn7sxmre1K1o7PzR2k9g+P6AiEAyFncNEjlve8Foh7DfkAs64NvxAAeZbOJUe+IHfPCOcI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":417562},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"7b5f8395c0522e99dc783111cd7cb95519515b70","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"10.9.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.0.20_1738748589816_0.1276284935806642","host":"s3://npm-registry-packages-npm-production"}},"0.0.21":{"name":"sponsorflare","version":"0.0.21","_id":"sponsorflare@0.0.21","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"0aeee4a5d38ca8a9775e6ae61da91a05b4948b94","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.0.21.tgz","fileCount":23,"integrity":"sha512-GaLDxhAJvg4PJdH7pOLHKqmspH3nBatPHcrSbHhKRCkeUyEHfiDmvrnGZFUt47z3tqlIBvp//qNYN4HoWtGgVw==","signatures":[{"sig":"MEYCIQD03K1bINGVEZ9z4/HU58MmuHWMkTy5XaKtq8oLjQZ3MQIhAJYoAYeRNYQ7UmKaxJo5JR2yWw11B/A7fiX8ZXD/2PDc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":418236},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"a64930ff8db51351ef0faf363f49ff4d7931a314","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"10.9.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.0.21_1738948968801_0.3437149371427053","host":"s3://npm-registry-packages-npm-production"}},"0.0.22":{"name":"sponsorflare","version":"0.0.22","_id":"sponsorflare@0.0.22","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"1a21a3c271163a0d5a4e9f4d58a285f30d3fbabc","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.0.22.tgz","fileCount":23,"integrity":"sha512-Dmh3PjgLwAQLmjD6Uxat2eCyeizoX6X9PYPEnFJxtW5DA0V761ip2uVRdG6Q+JIxy9tuJVXztLQBGWJ9gQd3Lw==","signatures":[{"sig":"MEYCIQDCwaX7JDiNrE/bP1QluInHjW3pGONMPH37XgmE+nGfngIhAIVFC55TJB+wWlKp785YernraBuslFzp4S/ovDqLjNMQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":421570},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"1114670245c2d7b9d8ce69e9711746e1affead70","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"10.9.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.0.22_1739018110161_0.2923033023454351","host":"s3://npm-registry-packages-npm-production"}},"0.0.23":{"name":"sponsorflare","version":"0.0.23","_id":"sponsorflare@0.0.23","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"384f7c11abe036a15d8d22297d08856e56b2af57","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.0.23.tgz","fileCount":23,"integrity":"sha512-ZpH2NXJ2JAx1iBVQ3fyED1BXUN8g+t5qh+XJJXI+pvW6jUw+IRzpvQumITPF9Hu28i6hHZlx0LGr/Q9iGWmvgQ==","signatures":[{"sig":"MEQCIH8ZuwwXC/300xaEZ6RwcpDoeWe3c3X492w9qD9cmh1AAiAPK37/kg0/jVGZVqEtAWKRTkwpAsu1ZRx3ZDxBAWJ/bA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":421680},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"fe5bc09b8c6cc1e2144008a7a18043a5df736fac","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"11.1.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.0.23_1739470253601_0.6445278187497374","host":"s3://npm-registry-packages-npm-production"}},"0.0.25":{"name":"sponsorflare","version":"0.0.25","_id":"sponsorflare@0.0.25","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"f468f786ee3776bddf065a294a2fc2de58490475","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.0.25.tgz","fileCount":23,"integrity":"sha512-iz9LXaOITqr4X1NUz786yNNkbfKt6l2IEv7kO46MgbVoNdqBu+N/RSaX7jMuHU5Gkap/Xu6fKFESNgQ5TtQRlw==","signatures":[{"sig":"MEYCIQCHKZ/RwZRtXlr0nhl2egaaZQ7WfA8x2r9V1ynd3jBl2QIhALlPnDZaWZj/xCZWWulBb3qjE0/tuDpTJq182kjUZ1EH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":421829},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"fe5bc09b8c6cc1e2144008a7a18043a5df736fac","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"11.1.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.0.25_1739472373620_0.7619756395117432","host":"s3://npm-registry-packages-npm-production"}},"0.0.26":{"name":"sponsorflare","version":"0.0.26","_id":"sponsorflare@0.0.26","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"80f75d8b6f1df611c1e7698711e97f464520902c","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.0.26.tgz","fileCount":23,"integrity":"sha512-3yxAFDVEGUis7llp3ZqpG0DQkHqfkS6/6lbBO25Cwv5BwWFNO/yqqCHXdEepepQ+hI4XRSUEjVH8Vydb3wvFnQ==","signatures":[{"sig":"MEUCIQCCxdpAZiJrkNcbPnzUM0noNWTagfwwjLi9QaQBuAKQdQIgNM75Atezzr+gOEkJ98VQQXMnptyIevK+mTvjgU0p4oA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":421807},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"fe5bc09b8c6cc1e2144008a7a18043a5df736fac","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"11.1.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.0.26_1739473674577_0.23884374451171464","host":"s3://npm-registry-packages-npm-production"}},"0.0.27":{"name":"sponsorflare","version":"0.0.27","_id":"sponsorflare@0.0.27","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"a8b5a16b6233c831e88a941a76d6fa103d7f2608","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.0.27.tgz","fileCount":23,"integrity":"sha512-GnIaY53ckY1OCe0qEVRBhtPUxWN/PXSjUJGIXkAb8Kn3lZ5woCxqxA5t4GdSiLnun4BJPSGf5fdCTWl1QvTTVQ==","signatures":[{"sig":"MEYCIQCsHV6gG3cIB5ey4RO6TAv+cNu8kUgyKnO5u6hVzeHOhwIhAJbrDr8IEF4KTByb9i9qLKXEk7v5L1tgVsFLXGB7ONpT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":421933},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"fe5bc09b8c6cc1e2144008a7a18043a5df736fac","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"11.1.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.0.27_1739474114218_0.8962774240301279","host":"s3://npm-registry-packages-npm-production"}},"0.0.29":{"name":"sponsorflare","version":"0.0.29","_id":"sponsorflare@0.0.29","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"5ec2e4bf7529266600fc6156d4c60558e5b1db77","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.0.29.tgz","fileCount":23,"integrity":"sha512-nUhH8qc/+MJMowT942Ka8Eoj1uraZndrcR4HjfvDq5c+aoBi2uvpAz62p2V1IBf40r7ak/mlE+S4KQJ9OwkfJw==","signatures":[{"sig":"MEUCIHBWxvLJvPG5TqZnTj7l5TIBIqXO6Pk3IlUpAvoc+RtjAiEAw25TmSEu7x7LOYhRNyf8gGBfAOMaDHnLsx3gvgr9j9s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":421933},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"fe5bc09b8c6cc1e2144008a7a18043a5df736fac","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"11.1.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.0.29_1739474311373_0.7933645750448699","host":"s3://npm-registry-packages-npm-production"}},"0.0.30":{"name":"sponsorflare","version":"0.0.30","_id":"sponsorflare@0.0.30","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"0b8ecee677e4da7c50f180aab1d4aba0619fcf42","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.0.30.tgz","fileCount":23,"integrity":"sha512-N2XFims3cmaE5VIV35l3Wdlz8hce5LQ4+QdHJ3HHE+nZSVKbiexBMOWDxY0iXfcgG79qIj0kzRC2VBHjTqYIZg==","signatures":[{"sig":"MEUCIAJ+y7e/Uc3T7EL0r2Fh9JBHgcdhAx7DcF/G/zUN1vrUAiEA9Xus8xyhWMvEgI5thfzMbrq+5ACBPYq5Flo6Pjf1YPQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":421933},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"fe5bc09b8c6cc1e2144008a7a18043a5df736fac","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"11.1.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.0.30_1739474519416_0.3472627547113236","host":"s3://npm-registry-packages-npm-production"}},"0.0.31":{"name":"sponsorflare","version":"0.0.31","_id":"sponsorflare@0.0.31","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"d09b933f869efbfa4b5b29b701a2b7e40cbd9f01","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.0.31.tgz","fileCount":23,"integrity":"sha512-QN//FPemoyVcBbcXlKJ1mq3DkUiOoqmwkhwU8Uw65w2jE9+41LFxAyNK74EL1Gh2LzL3jCmYONYxGfr+IGZQog==","signatures":[{"sig":"MEUCIEWVXveKhAk1IDKBoOL4YuivZ+31qYR+ZqSMrLoPEe2qAiEAznhvYM0dZNmJoPmrgEymxGgZMKvj1I8GM4qF+j95XVk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":421723},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"fe5bc09b8c6cc1e2144008a7a18043a5df736fac","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"11.1.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.0.31_1739476187765_0.4520344452538585","host":"s3://npm-registry-packages-npm-production"}},"0.0.33":{"name":"sponsorflare","version":"0.0.33","_id":"sponsorflare@0.0.33","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"7f1cf11853b319b5639fabc09503d6670928677e","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.0.33.tgz","fileCount":26,"integrity":"sha512-IHcckfJ1NPRtGIWCNZOdaYro14MBBC6yGcGSxSfcJH0vjQcHFeTwMlXkA0AQ/0nPbAj8QigTQ9rQJhf08zf14w==","signatures":[{"sig":"MEUCIQCdW5QOfjQ7kw6fsxRBqo/7wGPj6VW82AadVqnNG0lnPgIgTwv+hoUMpGBSD+bIa+aUDLG1k6piSSbsoAjx1NZ9OFU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":434659},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"172f976a54b3c24264e6de588f125dd968af209f","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"11.1.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.0.33_1739528052600_0.11801037567424078","host":"s3://npm-registry-packages-npm-production"}},"0.0.35":{"name":"sponsorflare","version":"0.0.35","_id":"sponsorflare@0.0.35","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"8011332aa8a711b4b30df7207a5335c0d2938ae0","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.0.35.tgz","fileCount":28,"integrity":"sha512-anf2yDjJHeCO7QFz9e1NgoesIMZXeuxNP2A2zYYsAJen0AJF5IvPNy/nG6oSo8OOh43eZLCrdNT1ePVEbswXzg==","signatures":[{"sig":"MEYCIQD3Eg5WmM0fq/AqhheLpX8XsYm4EgZctgJQjmkdQoRV/QIhAOd916TV5P9yMxyOUYF1Wx95+1Nsv4H8IFtSShSUDiqu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":444162},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"c844a1b58ca9ef15bcb7274d73cf06a32492018d","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"11.1.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.0.35_1739529767531_0.8803862429168827","host":"s3://npm-registry-packages-npm-production"}},"0.0.36":{"name":"sponsorflare","version":"0.0.36","_id":"sponsorflare@0.0.36","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"d526d42cd61fb18cc304a615dc3aedf116055d50","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.0.36.tgz","fileCount":28,"integrity":"sha512-Ztwk3mfI1NDdSe5GPKauKf1riTTjAqb4nlzE1UN8siwkbDjOHnBSvOhFuYEH4f1/61LX803e/lrH9xLSqoHNdg==","signatures":[{"sig":"MEQCIFtk/oX1PybXeRgjqy+kIaKmCnu0LQZb/l1Id6+s0u5YAiBe7y9LQgWF5LMjQ9lpSbOlXWIkxIp8f3jpfg76fi1tGw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":445792},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"84074444f89103b25ae577bc7af6ebed7dc3c6a4","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"11.1.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.0.36_1740407849256_0.5204913011712264","host":"s3://npm-registry-packages-npm-production"}},"0.0.37":{"name":"sponsorflare","version":"0.0.37","_id":"sponsorflare@0.0.37","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"eac61ee98d46d66d9336ca14300117d41175fefd","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.0.37.tgz","fileCount":28,"integrity":"sha512-0kxfWGEq865r3V0PBhA8dVznmsvSYSKI6V2jrcFzCoLLIZYGufeSXe7j05BtvYqr0jYf3TEP+/thMFHy9vyPjQ==","signatures":[{"sig":"MEQCIFfJvb1D8OXr3pycCYVqfB9ij+2LmcmzveP7a7WZG9yTAiBVB7flyFa1Z9bD/T0JIbP71PDepHHh7Kat5g701UsfqQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":448643},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"84074444f89103b25ae577bc7af6ebed7dc3c6a4","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"11.1.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.0.37_1740477593553_0.9800070650843191","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"sponsorflare","version":"0.1.0","_id":"sponsorflare@0.1.0","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"cc4dabd7bcfa4b3ffd1448d792896e0ce90b8b72","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.1.0.tgz","fileCount":28,"integrity":"sha512-QMtF0TsLhV+7A+9VQG7oAmoCr+HHBFT7un+0/lxD5Q3c3/cv6QlKk3kQa8d0qELiSmgsikhS2S4wnZYxN+77Mw==","signatures":[{"sig":"MEYCIQDIeUq6hKgccU2fNS4tD3vx3M16GyXTHOzMPReS2filbAIhAIzAeAvKnb0/IS8apYL3VgPexzcIGW9kkmNKTd5lYWkC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":465791},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"8c93b0cd6355d49f7c0112dd66159aef347ddfa5","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"11.1.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.1.0_1741793259803_0.6390564755425496","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"sponsorflare","version":"0.1.1","_id":"sponsorflare@0.1.1","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"e1e9a84f06b3acb08e2ebbaf587f0955149d9e6e","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.1.1.tgz","fileCount":28,"integrity":"sha512-enKrOvg2AoZCFUvuD8hHSqqaurafyTMNaD0OBp43aTbYkJsWrl0xw8Gs2rvv8+C3/e5fFezV53otf5vAjFSqrg==","signatures":[{"sig":"MEUCIAsZfh0RJG5LYhFsEZqvGLdLJwFjBRTbAze+UxufaBn+AiEA9RQjfVE3hxwDwJb1Rbk+ObheuX5olaETSksvc1x1KFM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":465466},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"10c7f7769de8d88a49e000f7c0f4136414e6c903","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"11.1.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.1.1_1741794193385_0.51781659893034","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"sponsorflare","version":"0.1.2","_id":"sponsorflare@0.1.2","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"4b5b2022f2a391022d1d67700dac665995a57dca","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.1.2.tgz","fileCount":28,"integrity":"sha512-IAOl/Jc9vesr0EUyG2Y4Or94yCulh6C1ubqmiLgfcWo4kd8mTkdn8fikzyA0n8pV5d7VEzVeIeHqfB3WonYVNQ==","signatures":[{"sig":"MEUCIQD+qClS5CzYNp0AzJFWi73xHYYuo2CwW9iN932JinbSQgIgWQ+ZgZav4rfpUU8OUvD9UI8yCClNrkWAL0x4w7wozYM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":465944},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"10c7f7769de8d88a49e000f7c0f4136414e6c903","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"11.1.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.1.2_1741952195442_0.06883979753783853","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"sponsorflare","version":"0.2.0","_id":"sponsorflare@0.2.0","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"8268ed42e53446151e3b76d04ec057dd88fab56b","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.2.0.tgz","fileCount":34,"integrity":"sha512-KIfoaa0ZtN/AA1wvKLsmkQ7MgOJhQqbH/7zB1DwNofGMUdQaxeKftP0RPeHOw1z29AuGWHpgYv6/0XkF1A0ojw==","signatures":[{"sig":"MEQCIHfZBEJxc6DNRQtF4c9xspW+x/r7XhFKcKs9II0iUas8AiAIEJ02QhJRApXwVol8mqlrMrMCsBVp1BsrZrVuwkSLZQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":492795},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"77daa33c4aa8bcc005af18b44ef0dff2dde57d34","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"11.1.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.2.0_1742115625026_0.6946132784097037","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"sponsorflare","version":"0.2.1","_id":"sponsorflare@0.2.1","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"a39976337e51997681faded9d192a6a25b04d3d7","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.2.1.tgz","fileCount":34,"integrity":"sha512-P1+caFEtqWAuXRF+4YO8RGRnYpvK7oaQCDIAhYuebxfqAFFnFjT3PLii2xZJNbiqI8WOel5PXJjErmPwWlSMtQ==","signatures":[{"sig":"MEUCIHsp8QIO/tOAU8T48vayB4sGuExSp3lI4IW82nb7Q7c4AiEArRxj+p5lnkZ82+cfTSp4DbXYw5UPr69NAGHBPBCMQQE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":492991},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"77daa33c4aa8bcc005af18b44ef0dff2dde57d34","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"11.1.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.2.1_1742115829239_0.4598849773183573","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"sponsorflare","version":"0.2.2","_id":"sponsorflare@0.2.2","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"b04d4810577c8fba2adfe131ed81562fd0f6c55b","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.2.2.tgz","fileCount":34,"integrity":"sha512-EYrrbBuUptKrhJJyJ6rQhqOlrGVfBjy+zA8KMSPGADXS88MbyG0nMr5z7TAC/y9zIrqFUh2nEmNr7Jt++9DVZw==","signatures":[{"sig":"MEYCIQDFbxcAhI/mf5ezOreHBGbmOo1eChGWXqSLVBJHR2dajAIhAOcw1Fa2tgoe+2hwZvxIE76SI0/0ZDJoxQkXzvxYrhwK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":493010},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"e0ff76bc9bed7086b0bfddcc36613c0d5a7c991a","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"11.1.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.2.2_1742116233928_0.4363278748773691","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"sponsorflare","version":"0.2.3","_id":"sponsorflare@0.2.3","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"97a2e82a598b850a353ca062191e946e5aa37786","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.2.3.tgz","fileCount":34,"integrity":"sha512-JFoaGrV1sWh0wDxvRow+122M1dQaXXpcJdPOPpM8TzBXqrRVVEUAFRmgbcaSEVW8bhz4UAt3LPONcMp0ovT9vA==","signatures":[{"sig":"MEQCIFfYQUdU6f2DSWMF0x18Lt7wxJjDeVe2WOicD6oAj6hKAiAJI7nElSguR4O+vhfzBNPi6akBDWCUNe8bNQxR3AMcHg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":493010},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"e0ff76bc9bed7086b0bfddcc36613c0d5a7c991a","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"11.1.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"@cloudflare/workers-types":"^4.20250124.3"},"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.2.3_1742116273506_0.6539754427722688","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"sponsorflare","version":"0.2.4","_id":"sponsorflare@0.2.4","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"18e3b4bcee02d64c06ab4f95aadcd3ca6ce73060","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.2.4.tgz","fileCount":34,"integrity":"sha512-Na7WuvGp2RdKoZkQEBPCbg8lHvd2/KavFTUmIJIQ29tEJVIrOAhI0NAwij9g8KrML/r0g9B7YKWRNasILXEu0Q==","signatures":[{"sig":"MEQCIBwK6OdrwLHn6iZbaXCTO176b+6+s6avgoVRc8EKMMORAiAGPD/HMd9WyhwJUwhHI0x9Dpb6dgXj/UVxloZVaXCJyg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":493313},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"8a2ece4487116de21c1b4c9d27e2210b97bd4d75","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"11.1.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.2.4_1742310300844_0.5728024623673613","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"sponsorflare","version":"0.2.5","_id":"sponsorflare@0.2.5","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"482fc35ab0371c930b0f376ada6e6bf1529e0bf4","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.2.5.tgz","fileCount":34,"integrity":"sha512-ipQ4mda857nGLJPWStdAZ9b6igrIfCdxKgnp+A3jzJ3lSGpre8wobD4yBacGAY1bJ2WbwzKFQrYrTK6RF1LRrQ==","signatures":[{"sig":"MEUCIQDiZfYQOEUZiKWBS+qPOPKJs5MrJTx7Zwdr1XQjj3u+1AIgA5CBE6GP1JTLZm3OJ1Gijt+WSA5dVC4Yq+rivPJSNDs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":493783},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"9bbebe7283a3c9d4c86c029f5e8fe238fe2143ba","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"11.1.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.2.5_1742487059813_0.8475271804188598","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"sponsorflare","version":"0.2.6","_id":"sponsorflare@0.2.6","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"eb4953f5f9ac3635203d7f9683868d7edb230dbd","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.2.6.tgz","fileCount":34,"integrity":"sha512-ECgCIHk70oi0hpBwgpGzetz9fCl43gLj2o7495ks5yKcsoCNFk0pCFbvvgWPKf5PDJXRMPo+BGSYIcexsyEUBQ==","signatures":[{"sig":"MEYCIQCt5ClM9XFX/h2FzCM8YelNpDZgg3kLWnfHle57W5Qn/wIhAO5ZSDL5lAogNxs568pKtfiTkH8hDqNofGXaylS9jsTd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":494962},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"6f5c53c6c75a54461411882e6c7cfe01b4c04b88","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"11.2.0","description":"Inspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.2.6_1743861414387_0.47302694219303487","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"sponsorflare","version":"0.2.7","_id":"sponsorflare@0.2.7","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"7bb20f81f7f4516449520d3804f9b6a96551c472","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.2.7.tgz","fileCount":33,"integrity":"sha512-WNVygBvS5LzNf+XD5/jEzHvbNEiouUJ/EVkgN7cov7DfurR/sLtVi1Y73wVkHi/+rZJ3HTGI1oe/67ADycLUnA==","signatures":[{"sig":"MEQCIFMZWdlRf4Qf96/mJejwcYOT4o9FVqs4pv34/WvzQUWYAiBu62VBmzW6lj+JuDKqw6fYzorFkDOcUR+1+WauqQr9wg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":496473},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"3c30e25c9d79582a3eefd67705cc76529678326c","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"11.2.0","description":"[![janwilmake/cloudflare-sponsorware context](https://badge.forgithub.com/janwilmake/cloudflare-sponsorware)](https://uithub.com/janwilmake/cloudflare-sponsorware) [![](https://badge.xymake.com/janwilmake/status/1883922928976162947)](https://xymake.com/ja","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.2.7_1746214724214_0.661749689332024","host":"s3://npm-registry-packages-npm-production"}},"0.2.9":{"name":"sponsorflare","version":"0.2.9","_id":"sponsorflare@0.2.9","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"30ca136dfa3887279707dc057c134b6c564f1e79","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.2.9.tgz","fileCount":34,"integrity":"sha512-3V/k6glqp7upvoDsW7E/40IGr1dCfLhI8ObrEZQnucrWWikIT4XUdtFm22XvOYocw+40HOhktOBZOwl90c8Gng==","signatures":[{"sig":"MEUCIQCRb0zGSIS78mmlk5QVaWug1wiA9nTPQWQRRFVeecP0PgIgW7bax6hmhJGIqZHzk/bOWMpd9+T8uFc8X0Rb69s2zNQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":510201},"main":"build/sponsorflare.js","types":"build/sponsorflare.d.ts","gitHead":"3c30e25c9d79582a3eefd67705cc76529678326c","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"11.2.0","description":"[![janwilmake/cloudflare-sponsorware context](https://badge.forgithub.com/janwilmake/cloudflare-sponsorware)](https://uithub.com/janwilmake/cloudflare-sponsorware) [![](https://badge.xymake.com/janwilmake/status/1883922928976162947)](https://xymake.com/ja","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.2.9_1746214985262_0.9029629149921721","host":"s3://npm-registry-packages-npm-production"}},"0.2.10":{"name":"sponsorflare","version":"0.2.10","_id":"sponsorflare@0.2.10","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"dist":{"shasum":"5211c7063ac2d14b1f5749d7a3f7879ce4d8f5c8","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.2.10.tgz","fileCount":21,"integrity":"sha512-437Onc1IKjE0KUwu3PhnBVC1xQ2/Up7O29M/EDtGkMyKAsUccWEiuU0NC5PU2ygxbJOzIeVFAyd9kjx3FFt3vg==","signatures":[{"sig":"MEUCIDDGTqKHWWQJJcuxVwHYGl0KLvOc9spzQGtrd2YFFqG2AiEA8k8w9HUphDAbXQSHN7Yl/6EZ+NfAfaTp3u5Uth+NTdY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":417690},"main":"sponsorflare.ts","gitHead":"3c30e25c9d79582a3eefd67705cc76529678326c","_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"_npmVersion":"11.2.0","description":"[![janwilmake/cloudflare-sponsorware context](https://badge.forgithub.com/janwilmake/cloudflare-sponsorware)](https://uithub.com/janwilmake/cloudflare-sponsorware) [![](https://badge.xymake.com/janwilmake/status/1883922928976162947)](https://xymake.com/ja","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sponsorflare_0.2.10_1746215261876_0.32148596198133683","host":"s3://npm-registry-packages-npm-production"}},"0.2.11":{"name":"sponsorflare","version":"0.2.11","main":"sponsorflare.ts","_id":"sponsorflare@0.2.11","gitHead":"3c30e25c9d79582a3eefd67705cc76529678326c","description":"[![janwilmake/cloudflare-sponsorware context](https://badge.forgithub.com/janwilmake/cloudflare-sponsorware)](https://uithub.com/janwilmake/cloudflare-sponsorware) [![](https://badge.xymake.com/janwilmake/status/1883922928976162947)](https://xymake.com/ja","_nodeVersion":"22.12.0","_npmVersion":"11.2.0","dist":{"integrity":"sha512-ER5bCXAY62M5zJUh7rm5gdqVfi54terYgsKoGgRLjg73e2HCZ10KQ8gAuVqfcWzmy3yoImu/oDzfBqPbcknLEw==","shasum":"dae383005e670bb6bd9703ef03cc7a42fe90fabc","tarball":"https://registry.npmjs.org/sponsorflare/-/sponsorflare-0.2.11.tgz","fileCount":21,"unpackedSize":417690,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDFW6c4sFJlzJ/5rdUwU+3e80b2S2X+oiPwTKYXjtWoNgIgH4+mdzKuBGt7lvUfz5JJHIqgCBZh/xMik/Cy7W5XM38="}]},"_npmUser":{"name":"janwilmake","email":"jan@wilmake.com"},"directories":{},"maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sponsorflare_0.2.11_1746215289516_0.40161203502139187"},"_hasShrinkwrap":false}},"time":{"created":"2025-01-26T12:38:06.090Z","modified":"2025-05-02T19:48:09.982Z","0.0.1":"2025-01-26T12:38:06.298Z","0.0.2":"2025-01-27T09:03:47.121Z","0.0.3":"2025-01-27T09:07:50.249Z","0.0.4":"2025-01-27T17:04:08.407Z","0.0.5":"2025-01-29T15:50:15.637Z","0.0.6":"2025-01-29T18:33:15.190Z","0.0.7":"2025-01-29T21:19:13.239Z","0.0.8":"2025-01-29T21:19:30.596Z","0.0.9":"2025-01-31T15:00:40.081Z","0.0.10":"2025-01-31T15:01:14.391Z","0.0.11":"2025-01-31T15:05:03.943Z","0.0.12":"2025-01-31T15:54:05.686Z","0.0.13":"2025-01-31T19:43:46.448Z","0.0.14":"2025-01-31T19:45:31.223Z","0.0.15":"2025-01-31T19:46:13.431Z","0.0.16":"2025-01-31T19:51:30.908Z","0.0.17":"2025-01-31T19:53:33.815Z","0.0.18":"2025-01-31T19:53:49.824Z","0.0.19":"2025-02-04T14:18:21.537Z","0.0.20":"2025-02-05T09:43:10.031Z","0.0.21":"2025-02-07T17:22:49.162Z","0.0.22":"2025-02-08T12:35:10.501Z","0.0.23":"2025-02-13T18:10:53.888Z","0.0.25":"2025-02-13T18:46:13.851Z","0.0.26":"2025-02-13T19:07:54.852Z","0.0.27":"2025-02-13T19:15:14.458Z","0.0.29":"2025-02-13T19:18:31.609Z","0.0.30":"2025-02-13T19:21:59.690Z","0.0.31":"2025-02-13T19:49:48.036Z","0.0.33":"2025-02-14T10:14:12.959Z","0.0.35":"2025-02-14T10:42:47.822Z","0.0.36":"2025-02-24T14:37:29.536Z","0.0.37":"2025-02-25T09:59:53.745Z","0.1.0":"2025-03-12T15:27:40.018Z","0.1.1":"2025-03-12T15:43:13.600Z","0.1.2":"2025-03-14T11:36:35.687Z","0.2.0":"2025-03-16T09:00:25.213Z","0.2.1":"2025-03-16T09:03:49.504Z","0.2.2":"2025-03-16T09:10:34.206Z","0.2.3":"2025-03-16T09:11:13.747Z","0.2.4":"2025-03-18T15:05:01.057Z","0.2.5":"2025-03-20T16:11:00.034Z","0.2.6":"2025-04-05T13:56:54.651Z","0.2.7":"2025-05-02T19:38:44.456Z","0.2.9":"2025-05-02T19:43:05.510Z","0.2.10":"2025-05-02T19:47:42.156Z","0.2.11":"2025-05-02T19:48:09.777Z"},"description":"[![janwilmake/cloudflare-sponsorware context](https://badge.forgithub.com/janwilmake/cloudflare-sponsorware)](https://uithub.com/janwilmake/cloudflare-sponsorware) [![](https://badge.xymake.com/janwilmake/status/1883922928976162947)](https://xymake.com/ja","maintainers":[{"name":"janwilmake","email":"jan@wilmake.com"}],"readme":"# Sponsorflare - Cloudflare Middleware for easy Monetisation of a worker using GitHub Sponsors\n\n[![janwilmake/cloudflare-sponsorware context](https://badge.forgithub.com/janwilmake/cloudflare-sponsorware)](https://uithub.com/janwilmake/cloudflare-sponsorware) [![](https://badge.xymake.com/janwilmake/status/1883922928976162947)](https://xymake.com/janwilmake/status/1883922928976162947)\n\nInspired by [sponsorware](https://github.com/sponsorware/docs) and [this blog](https://calebporzio.com/sponsorware), sponsorflare aims allowing for [cloudflare workers](https://workers.cloudflare.com) monetisation in a few lines of code.\n\n![](flow.drawio.png)\n\nExamples:\n\n- this repo itself exposes https://sponsorflare.com at [main.ts](main.ts)\n- https://github.com/janwilmake/zipobject - example of ratelimit + github oauth + bandwidth-based monetisation\n\n## Usage\n\nInstallation:\n\n1. run `cp .dev.vars.example .dev.vars`\n2. create a github oauth client at https://github.com/settings/applications/new with the right redirect URI, and get the client ID and secret\n3. accept sponsors at your github account. you first need to be approved\n4. once accepted, go to: your sponsor dashboard -> webhook -> add webhook\n   1. URL: one of your workers at `/github-webhook`\n   2. add a secret that you save to `.dev.vars`\n   3. content type: JSON\n5. run `npm i sponsorflare` (or copy over the `sponsorflare.ts` file)\n\n`wrangler.toml`:\n\n```toml\n[vars]\nGITHUB_REDIRECT_URI = \"https://yourworkerdomain.com/callback\"\nLOGIN_REDIRECT_URI = \"/\"\nADMIN_OWNER_LOGIN = \"your_admin_github_username\"\nCOOKIE_DOMAIN_SHARING = \"false\" # set this to true, if you want to share the cookie for the entire hostname/domain including all subdomains\n\n[[durable_objects.bindings]]\nname = \"SPONSOR_DO\"\nclass_name = \"SponsorDO\"\n\n[[durable_objects.bindings]]\nname = \"RATELIMIT_DO\"\nclass_name = \"RatelimitDO\"\n\n[[migrations]]\ntag = \"v1\"\nnew_sqlite_classes = [\"SponsorDO\", \"RatelimitDO\"]\n\n```\n\n`main.ts`:\n\n```ts\nimport { middleware, getSponsor, Env } from \"sponsorflare\";\nexport { SponsorDO, RatelimitDO } from \"./sponsorflare\";\n\nexport default {\n  fetch: async (request: Request, env: Env) => {\n    // This middleware adds /login, /callback, and /github-webhook endpoints\n    const sponsorflare = middleware(request, env);\n    if (sponsorflare) return sponsorflare;\n\n    // This is how you charge someone and/or get the sponsor info\n    const { charged, ...sponsor } = await getSponsor(request, env, {\n      charge: 1,\n    });\n\n    if (!charged) {\n      return new Response(\"Payment required.\", {\n        status: 402,\n        headers: { Location: \"https://github.com/sponsors/janwilmake\" },\n      });\n    }\n\n    // Do your paid stuff here after charging the user\n  },\n};\n```\n\n## How does it work?\n\nThis implementation uses a [Cloudflare Durable Object](https://developers.cloudflare.com/durable-objects/) for each user, to store their charges in their own database. Because of this, the charging happens at the location near to where the worker is executing the request, and it's incredibly fast. We can call it 'Physical Database-per-tenant' because each database is physically separated from others and very close to users.\n\n![](user-database.drawio.png)\n\n- When the user doesn't have any 'authorization' cookies, the request takes anywhere between 25-120ms (normal for a worker)\n- When the user is authorized and we need to charge them, the request takes anywhere between 50-120ms because it needs to do an extra request between the worker and the DO (not much slower!)\n- If we would've used a regular D1 database (or another consistent one, which requires it to be global) the request would take anywhere between 230ms and 1000ms, depending on where it is coming from (not measured much). Much slower!\n\n## An idea for a new storage service\n\nThis design pattern of a DO per user can be expanded to store more state for a user. If you don't have too many logic that connects many different users and their state in your worker/app, it allows for stateful apps without having a central database!\n\nEveryone their own DB ❤️ Attached to a oauth service like Google, GitHub, or X to get a userID.\n\nAs a result, now your users can access their data, safely stored on the edge, within 10-20ms + ±40ms to access the worker.\n\nHow cool would that be?! [(Pls respond)](https://x.com/janwilmake/status/1884550721795653931)\n\n## CHANGELOG\n\n### 2025-01-25\n\nBuilt oauth github-login in a secure way! finally! one file way of doing this in a worker that is easily copy-paste-able. Great!\n\n### Creating the POC (2025-01-26)\n\n1. Built https://github.com/janwilmake/xlogin\n2. Decided Sponsorware is the GOAT. https://github.com/sponsorware/docs\n3. ✅ Create a standalone repo called `cloudflare-sponsorware` that you can just use it with your app to allow for github login, github watching sponsorship events, and keeping the KV. people can use their own github acc and cloudflare acc for this. Open source.\n4. ✅ Buy sponsorflare.com and set up the repo and [tweet](https://x.com/janwilmake/status/1883493435635585198)\n5. ✅ Make sponsorflare github oauth work (took just 5 minutes!) and create indended demo-layout with Deepseek (took just 1 minute)\n6. ✅ Take a deep breath. Look into the apis and find which APIs and webhooks are needed (and validate this is even possible as the way I want it).\n7. ✅ Test out retrieving required information from a sponsor with matching userId.\n8. ✅ Created getSponsors function.\n9. ✅ Create consistent storage: D1 with `type Sponsors={source,ownerId,ownerLogin,clv,spent}` for the POC.\n10. ✅ Upsert user upon login\n11. ✅ Ensure webhooks get delivered (https://docs.github.com/en/webhooks/using-webhooks/handling-webhook-deliveries)\n12. ✅ Upsert user upon webhook: sync using `getSponsors` storing total livetime value with money spent ensuring it makes sense.\n13. ✅ Create `access_tokens` table that maps `access_token` to `sponsorid`\n14. ✅ Now I can make function `getSponsor(request,env,config?:{charge?:number})` that charges and/or gets clv/spent of the current request.\n\nYeah! The Proof of Concept is out there. You can choose to simply use it by installing the package, or use it as a template and build it out further if you so desire. I'm going to be using this for most of my products.\n\n![](poc.png)\n\n### Moving from a single D1 SQLite DB to a durable object per user! (2025-01-27)\n\nI learned that we can improve latency by using user-based DOs rather than a globally central database. This has a side-effect that we can't recall all active users, but that's also not something we need!\n\nSo I asked claude to update this code so:\n\nIt uses a Durable object instead of d1 database with a storage containing a storage for each access token (the key is the access_token, the value is 'true') and for the sponsor (key is 'sponsor')\n\n1. upon /callback\n\n- it puts the owner_id in a cookie\n- it spawns a DO with name equal to `owner_id`\n- it sets the access_token and the sponsor in the DO (ensure to use the access_token as key, not value)\n- it redirects like it does now (but with extra owner_id cookie)\n\n2. upon `getSponsor`\n\n- it looks for DO with name equals the `owner_id` (from cookie)\n- it confirms the access_token provided in the cookie is present in the DO, if not, abort\n- it charges if that was requested by updating the sponsor in the DO\n- it returns the same information like now in the DO response, then in the response of the function.\n\nAfter this, I added one more measure for security, namely an idempotency key to a charge, to be sure the charge doesn't occur twice. It also tracks all charges.\n\nThere is no way possible to get an overview of all users with this implementation, and we also don't have a way to back up the data! Nevertheless, this is a very powerful way to charge people for using workers, and DO's should be sufficiently reliable to handle this usecase, I think.\n\nBecause we're not using a global database but a separate database per user, the response latency is incredibly low! This is because a DO always spawns as nearby the worker as possible, and stays there.\n\n### 2025-01-28\n\n✅ added easy way to login in development (skipping oauth) - `SKIP_LOGIN=true`\n\n✅ added redirect_uri param to redirect elsewhere after login\n\n✅ confirmed redirect_uri works\n\n### 2025-01-29\n\n✅ `COOKIE_DOMAIN_SHARING=true` should be a configurable param.\n\n✅ Added `getUsage` function that tracks usage.\n\n✅ Ensure the URL is stored for every transaction.\n\n✅ Learn more about the behavior of cookies and the specifications that are currently mostly implemented in 99% of used browsers. Write a thread on sponsorflare again and the concepts of sharing login across subdomains and the 'GitHub Automatic Login'.\n\n✅ Become my own sponsor using a different Github Account, for $50/m, to test it works as intended, and test the flow. Especially: how fast does the credit get there?\n\n✅ Fixed a bug where the ID couldn't be parsed and we missed a header for github\n\n✅ Add ability to logout via `/logout` which removes headers, removes access from client, and takes `?redirect_uri`.\n\n✅ Create `wilmake.cftemplate` template which basically just has all basic files for a new repo including a package of sponsorflare, so I can start with `gh repo create --public abcabc -p wilmake.cftemplate`\n\n🔥 For the first time, I feel like I have a very powerful way of measuring work done with workers. Let's start using sponsorflare as a package and create a template.\n\n### 2025-02-04\n\n✅ Added ability to set balance of a user via the api using the admin token\n\n✅ Created a `proxy` and an example to use it, in which we can keep a todo database per user. See: [user-todo-example.ts](user-todo-example.ts)\n\n### 2025-02-14 QOL updates\n\n- ✅ due to the fact that remote do doesnt contain the same state as locally, we now can't authenticate in sponsorflare remotely from localhost. this can be resolved by, in sponsorflare, checking and adding an unknown auth token, if `owner_id` was provided\n- ✅ Ensure to store email in the DB as well as bio, twitter username, blog.\n- ✅ Add ability to track created at, and last verified date\n- ✅ To list all items in the namespace, use https://developers.cloudflare.com/api/resources/durable_objects/subresources/namespaces/subresources/objects/methods/list/ and retrieve \"sponsor\" from storage.\n- ✅ Store more things like activity\n- ✅ Created openapi to understand the endpoints in the middleware\n- ✅ Sponsorflare fix oauth. Now errors.\n\n### Revamp 2025-02-14\n\n- ❌ Additional mapping from a global KV-stored sponsorflare-access-token to a user_id + access_token + scope. This way it remains fast as KV is replicated globally, while it also makes it easier to authenticate, since we don't need to set 3 different cookies/headers.\n- ✅ Allow for single access-token Authorization Bearer token (encoded other 3) and expose the parsing/creation of this along with an improved `getAuthorization` function.\n- ✅ Create a programmatic way to login by passing just a github access_token and returning the sponsorflare access_token after user_id+scope lookup. Can be `/login?token=XXX => string`\n- ✅ Update sponsorflare version everywhere\n\n### DO Observability (2025-03-11)\n\n- ✅ Figure out how to make Sponsorflare an SQLite-enabled DO without loosing data https://developers.cloudflare.com/durable-objects/api/sql-storage/ --> **cannot be done. need export then import**\n- ✅ `/usage` is now slow. Store transactions in SQL rather than KV (more efficient to query)\n- ✅ export sponsorflare DO list by updating `/stats` and making it available in sponsorflare.\n- ✅ Make a new DO that uses SQLite\n- ✅ Convert stuff to use SQLite\n- ✅ Deploy/publish this new version with README on how to migrate.\n\n### bugfixes (2025-03-14)\n\n- ✅ Fix bug with id sent as number, not as string, fixing the payments\n\n### Finish Observability (2025-03-14)\n\n- ✅ Finished login setup with new sponsorflare2 script\n- ✅ export old sponsorflare one more time\n- ✅ ensure sponsorship works. test with other account\n- ✅ ensure I go to sponsorflare2 everywhere to avoid missing emails\n- ✅ Also add it to Sponsorflare middleware such that I can visit the API over `/:id`\n- ✅ Add https://gist.github.com/Brayden/dfbf51e889323484b10c7f4a7e343eb1 to Sponsorflare DO. For this, sponsorflare first needs to become a SQLite-enabled DO (✅)\n- ✅ Deploy for Sponsorflare itself\n- ✅ Try adding it as SQL Server in https://app.outerbase.com (Starbase)\n\n🎉 Goal: migrate sponsorflare to sqlite and see all data in it. Also have a simple DO middleware + sqlite middleware that can be added to any DO.\n\n### Create ratelimiter (2025-03-16)\n\nFor uithub I need to ensure unauthenticated people are ratelimited, and authenticated people that didn't pay are still able to use the app, based on how much they spent. The ratelimiter allows for this type of new behavior.\n\n- ✅ Create a ratelimiter based on the IP that resets after X amount of requests.\n- ✅ Update README and deploy as v1.2\n\n###\n\nTry rewriting on top of https://github.com/janwilmake/dorm\n\nSee if that makes it more approachable or doesn't change much! Ideally, I have an easy way to open any DO in the outerbase UI.\n\n###\n\nSponsorflare improvements\n\n- Add support for `username:password@` in ANY URL by connecting that to sponsorflares `getSponsor`.\n- Add `/oauth/token` to sponsorflare as well, having it create an access token that can also be used as password now.\n- Add support to create tokens with specific scope, timeout, and budget.\n- Add optional ability to connect central DO for READ-only for all users and transactions. The central DO must be required to implement the `/sqlite` endpoint and certain tables. This way you can have your state centrally\n- Add X login to sponsorflare???\n- Update endpoints to be `/oauth/login`, `/oauth/callback`, `/oauth/logout`, `/oauth/token` etc, as it's more standardized.\n\nThen:\n\n- Use new sponsorflare in `user-agent-router`, and show why the combination of it is so powerful.\n- Use new sponsorflare in `xymake.console`. This could be the start of something wonderful.\n\n### Improvement\n\n- Insert the 100 users I had back into the DOs again\n- Also track the \"access_token\" last use for each `access_token`.\n- Ensure source of a user is the full domain, always. Seems not to be the case right now\n\n### Solve logging\n\n- `this.log` function that logs into a SQL table so I can track this via the dashboard. I can debug any DO now.\n- Solve `forgithub.activity` in the same way by connecting SQL_dashboard and using `this.log` instead of console.log only.\n\n🎉 Goal: have logging in forgithub activity so I know what's happening. try solve issue for merge!!\n\n### Central Shadow DB\n\n- Currently, fetching all users requires 1 subrequest per user, which can be problematic. We need a master DO that keeps track of user info. Let's try a master DO that simply we write to each time we execute a query, but in waitUntil, such that it's a direct clone of all stuff together, but it doesn't slow stuff down.\n- If that's too slow, another way is with alarms. Each time a DO is activated, it can set an alarm (if not already) to back up itself to the master DO, within an hour.\n- The master DB is great to explore over outerbases UI.\n\n### Sponsorflare using X and skyfire\n\n- Same but with X login and the alarm\n- Already had flarefare but now reuse this and make the skyfire integration nicer. use the stripe button, replacing github sponsors with skyfire+stripe. It's a better flow for users coming from X if I don't need the code per se.\n- xymake built from new sponsorflare base... but with wrapped DO with alarm and augmented data.\n- merge the sponsorflare and evaloncloud into 1 product. probably best to call it evaloncloud and put the demo at demo.evaloncloud.com\n\n### Ideas (Backlog):\n\n- Sponsorflare Dashboard should be prettier. Ideally, the bar width is adjusted to the screen size and amount of bars.\n- Builtin Unauthenticated Ratelimiting per IP; useful, but this is completely separate so can as well be a completely separate thing.\n","readmeFilename":"README.md"}