{"_id":"@adriangalilea/utils","_rev":"125-b5c400dc5ee750ec0614728863bf2204","name":"@adriangalilea/utils","dist-tags":{"latest":"8.0.0"},"versions":{"0.0.10":{"name":"@adriangalilea/utils","version":"0.0.10","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.0.10","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"0b8af2522e48a33ca6afa959ea3ca00d7d08c64a","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.0.10.tgz","fileCount":110,"integrity":"sha512-HGVAnq6Us1G0quNbgj3QSkYPBjxIyoK8FlmQF2n5iLcspvvBcxDywtMlwMAsJWIGDA5y5WYXRvRLpDB4UZZDRA==","signatures":[{"sig":"MEUCIDj5R2qeykTn/7cNFjMbAjFp11URwodq4byPmqg228xDAiEAoAGR1ab3HNtGetTx7EBWzSwxp6l9uqrmBMyMF1HpUoI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":988004},"main":"./dist/index.js","type":"module","_from":"file:adriangalilea-utils-0.0.10.tgz","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"}},"scripts":{"dev":"tsx src/index.ts","lint":"echo 'No linter configured yet'","test":"echo 'Tests not configured yet'","build":"tsc","example":"tsx tests/example.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts"},"_npmUser":{"name":"adriangalilea","email":"adriangalilea@gmail.com"},"_resolved":"/tmp/9dce70bf0fbfcbd4e7cbeac718430b29/adriangalilea-utils-0.0.10.tgz","_integrity":"sha512-HGVAnq6Us1G0quNbgj3QSkYPBjxIyoK8FlmQF2n5iLcspvvBcxDywtMlwMAsJWIGDA5y5WYXRvRLpDB4UZZDRA==","repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"10.8.2","description":"TypeScript utilities - logger, currency, formatter, and more","directories":{},"_nodeVersion":"20.19.4","dependencies":{"chalk":"^5.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","typescript":"^5.9.2","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/utils_0.0.10_1755543198482_0.017715855128965785","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@adriangalilea/utils","version":"0.1.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.1.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"f37d20f161999774f2b35b4bab77e33f0029ec67","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.1.0.tgz","fileCount":110,"integrity":"sha512-gephxJXcoY+05/vPabAiWuJ1+mdHicZ8cX9JW1hsnCF8kt2mOk3GrcGuPjGVFPCJx8coFDzBgUEW/zw6qOtDNw==","signatures":[{"sig":"MEUCIQCNrasASobLVrVbg18zX0hrh6LPFaaXu4qKMIuW6on9xgIgY07p8XJVCId7BU/Ld4YOf+/KliPvNGoG6jdSYAqsfLI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":987794},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"}},"gitHead":"79f92ad209a58811562207a88eb70f372a25aad6","scripts":{"dev":"tsx src/index.ts","lint":"echo 'No linter configured yet'","test":"echo 'Tests not configured yet'","build":"tsc","example":"tsx tests/example.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.6.2","description":"TypeScript utilities - logger, currency, formatter, and more","directories":{},"_nodeVersion":"24.13.0","dependencies":{"chalk":"^5.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","typescript":"^5.9.2","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/utils_0.1.0_1770640894364_0.841069782057444","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@adriangalilea/utils","version":"0.2.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.2.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"f2dbfce02b51b5970fe748e44ba9ae47cac8c49a","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.2.0.tgz","fileCount":114,"integrity":"sha512-nmPZmfPrBg22+F/GyU2ZLdpt02ESYHfFQGKQz5R2/vMlebyMuA8I3LEcYSpleTCTCW+op9vcDIPbKhUxfaSsIA==","signatures":[{"sig":"MEQCIEFyIDzLc8rT/LVvB1AMXluuTOodFeljyHa7FU4otAMOAiAGhZpJMZWC1248zWre8Ff0q3pysRJOxpQ/gIJSJBA8xQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":991020},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"}},"gitHead":"5efed89f7d20ab62145f71bc95ab8f91a65c10e2","scripts":{"dev":"tsx src/index.ts","lint":"echo 'No linter configured yet'","test":"echo 'Tests not configured yet'","build":"tsc","example":"tsx tests/example.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.9.0","description":"TypeScript utilities - logger, currency, formatter, and more","directories":{},"_nodeVersion":"24.14.0","dependencies":{"chalk":"^5.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","typescript":"^5.9.2","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/utils_0.2.0_1772798236867_0.35006078982215083","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@adriangalilea/utils","version":"0.3.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.3.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"f25f5643cd90794a466884af449c3bfc40e02f0a","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.3.0.tgz","fileCount":118,"integrity":"sha512-5AMQwoqHWQjHUwH+ktCvPR5DIFoCqtEENdnZaDTVrEXeOSoYQCgpP21yeb9diNFmtynFvUihupm9Q3/nKdJuIA==","signatures":[{"sig":"MEUCIQC8rl/n+G5E5/9bmamlpt3rYiKEY0R0Mj5jjyVqVJWkgwIgYvIT2/iuhN3Y9NjDXOgo206aqgzr6tEh16/gPqo1kcw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":995879},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"}},"gitHead":"6dcd867189d84a8b82701c4077285c1d7820f814","scripts":{"dev":"tsx src/index.ts","lint":"echo 'No linter configured yet'","test":"echo 'Tests not configured yet'","build":"tsc","example":"tsx tests/example.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.9.0","description":"TypeScript utilities - logger, currency, formatter, and more","directories":{},"_nodeVersion":"24.14.0","dependencies":{"chalk":"^5.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","typescript":"^5.9.2","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/utils_0.3.0_1774720997565_0.5408698749262371","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@adriangalilea/utils","version":"0.3.1","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.3.1","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"df154b6f4a4bb75544d6d676f666193b79c4f8b5","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.3.1.tgz","fileCount":118,"integrity":"sha512-LHoOpxISvZt840U4+5HUwMMOR+JvUSGmr2oOV2VZQaRJM4ZkGooB4OnOq81X3oCgtm5mBDg4JQxD8tYlXFtboQ==","signatures":[{"sig":"MEQCIAoiOUFLH5l2nU+afuy1ZVjtLZC7ohFtn3VPFn+v2CYoAiAVJ9dKTw+qnkm7Q2K2WKPjskLPbZ4bktn35SAsgwYAtA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":995922},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"}},"gitHead":"e2126c155b471aca901e97d20dac548e3f52a9b9","scripts":{"dev":"tsx src/index.ts","lint":"echo 'No linter configured yet'","test":"echo 'Tests not configured yet'","build":"tsc","example":"tsx tests/example.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.9.0","description":"TypeScript utilities - logger, currency, formatter, and more","directories":{},"_nodeVersion":"24.14.0","dependencies":{"chalk":"^5.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","typescript":"^5.9.2","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/utils_0.3.1_1774721562241_0.48312302233609383","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@adriangalilea/utils","version":"0.4.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.4.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"d5810d951585ca076d9ab1cb6e4a8a68317ab6e8","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.4.0.tgz","fileCount":118,"integrity":"sha512-xcV/bea1bFQLjKZ5YBRw+fhcAMw5jnHidNkLC1Fvv7aWcqcv7+MqJjr9+VhKDcZ3ZVcHrnSAvhlUTGqzgyQyCg==","signatures":[{"sig":"MEQCIHSy87C8aJp4PG9r/xh55Ctn6B7DH+QMgKpyA9LdCpr6AiA8YGIxescXTe/6s9cVOaHpVF7DPl2eVNi/OsO45Oo7Dg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":996252},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"}},"gitHead":"b6deb9e4afa8f704272e520ec4d6e6e432105c81","scripts":{"dev":"tsx src/index.ts","lint":"echo 'No linter configured yet'","test":"echo 'Tests not configured yet'","build":"tsc","example":"tsx tests/example.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.9.0","description":"TypeScript utilities - logger, currency, formatter, and more","directories":{},"_nodeVersion":"24.14.0","dependencies":{"chalk":"^5.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","typescript":"^5.9.2","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/utils_0.4.0_1774723869510_0.40129806347128527","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@adriangalilea/utils","version":"0.4.1","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.4.1","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"08fa7bb2530ce21a9b29f4b96fa97f070be226ce","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.4.1.tgz","fileCount":118,"integrity":"sha512-jTu90+dgrsMCeaoYjn2KXadGmyYRBRcHBubpDXr4oMC6XhlOjh9XTA3n1njLW5Yb9n0oFID41BoUfA5UbH96dw==","signatures":[{"sig":"MEUCIQCm7sZJ6DGqDUyDaFVmHVTUinXhB316i1XCNvNxa8/VZwIgD9DNayl/ls01x++WD81xkzUalt4On0CJ0c+jCh8wWco=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":997917},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"}},"gitHead":"cb68e6c220c545ef166da8c7a9f01bbcf8520717","scripts":{"dev":"tsx src/index.ts","lint":"echo 'No linter configured yet'","test":"echo 'Tests not configured yet'","build":"tsc","example":"tsx tests/example.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.9.0","description":"TypeScript utilities - logger, currency, formatter, and more","directories":{},"_nodeVersion":"24.14.0","dependencies":{"chalk":"^5.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","typescript":"^5.9.2","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/utils_0.4.1_1774826102396_0.6254422420602013","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@adriangalilea/utils","version":"0.5.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.5.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"eea4bb463ed73326f14e3474fa3fec6ce40a3bba","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.5.0.tgz","fileCount":118,"integrity":"sha512-D486wtef5WfP6Tv6TjRDY/tx6kXdX4k5unuqCrWJl7Thss0niGrcCNFcmONpBI4pdEqG3K6z2f6DlMO7WxaSbg==","signatures":[{"sig":"MEYCIQCHgqOVQ+LUd22fiuGgtPLxVB8BZun7/QEJotTNc68XqQIhALJNd+0Urctg3JQUx2E0aSlSm0XEhNK2PS/g4qOJJnKx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1007487},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"}},"gitHead":"43ead436b27454d196bec3598571abfe7f67ab77","scripts":{"dev":"tsx src/index.ts","lint":"echo 'No linter configured yet'","test":"echo 'Tests not configured yet'","build":"tsc","example":"tsx tests/example.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.11.0","description":"TypeScript utilities - logger, currency, formatter, and more","directories":{},"_nodeVersion":"24.14.1","dependencies":{"chalk":"^5.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","typescript":"^5.9.2","@types/node":"^24.3.0"},"_npmOperationalInternal":{"tmp":"tmp/utils_0.5.0_1776036509683_0.4725726278499296","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@adriangalilea/utils","version":"0.6.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.6.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"47225ad01deb84710fadfbce2814cc0a5c137493","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.6.0.tgz","fileCount":134,"integrity":"sha512-BPwNfGicKO+eDemcKIYoERkiDKKIJk+oNl/7Bdoj94ReYTwupjdrpI4+JZf1l0KzJ0jYgvI791XLE12yJKiYWg==","signatures":[{"sig":"MEUCIQCsbQG4LJGblEfq39KdcLoOMPWObk9p9r2QMQhx0nWQ5wIgbuC7I+rkwMI0gCnbBaAjj61+n0Dpfg6cn9HBreOYbgg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1090524},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/llm-stream":{"types":"./dist/bot/llm-stream.d.ts","default":"./dist/bot/llm-stream.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"2c390399fc073cf17f6fd6b1bd3524ee035d3bef","scripts":{"dev":"tsx src/index.ts","lint":"echo 'No linter configured yet'","test":"echo 'Tests not configured yet'","build":"tsc","example":"tsx tests/example.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.11.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"_nodeVersion":"24.14.1","dependencies":{"chalk":"^5.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","gramio":"^0.10.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.6.0_1778434738008_0.5762738651910773","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@adriangalilea/utils","version":"0.7.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.7.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"b3ce26b158e18f0cbc94bfd0462b09a9dc6f437d","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.7.0.tgz","fileCount":138,"integrity":"sha512-EWEC/CRu09K1MuxSs3g3lx99i1ydWwZ5194KxGybin4zvEzydCQG7drm4B/n1+ErMcJq2OCKEdzA/teGQ6ik8Q==","signatures":[{"sig":"MEUCIQDbPa1PcNS9xNXgYYNqL+RdPhWeDuysxV4er/X0T3zDkAIgQ4Yvkibbd6nslQdX+IIkpgT956bU9jpdfkxSvxHp5eQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1106960},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/llm-stream":{"types":"./dist/bot/llm-stream.d.ts","default":"./dist/bot/llm-stream.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"459f08874a6febe36e89f778f88de5d93fe4aab0","scripts":{"dev":"tsx src/index.ts","lint":"echo 'No linter configured yet'","test":"echo 'Tests not configured yet'","build":"tsc","example":"tsx tests/example.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.11.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"_nodeVersion":"24.14.1","dependencies":{"chalk":"^5.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","gramio":"^0.10.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.7.0_1778441698863_0.9216657011503411","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@adriangalilea/utils","version":"0.8.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.8.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"38bf3fae4520c267612f31486f08394063c0fdca","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.8.0.tgz","fileCount":102,"integrity":"sha512-3ITN16oaAM+AjHrv3Y4a4uTXjdOsGP/KpfLpcPYsmFM+RVJvgLwf9x4YSziVLAd1sqEAOoltV48+B2d4aXYUYw==","signatures":[{"sig":"MEYCIQDzvwa2WjzQ1SIQXRMs3XJFxu9psJ++uELa5+aFLS+KMgIhANlYJ15XjdweR6X0qBAJ8nhg6UNdzmkiHTyDYKklcPlr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":692143},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/llm-stream":{"types":"./dist/bot/llm-stream.d.ts","default":"./dist/bot/llm-stream.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/message-history":{"types":"./dist/bot/message-history.d.ts","default":"./dist/bot/message-history.js"}},"gitHead":"9be1314c28562e9982bdbc350972a11d0a8317e8","scripts":{"dev":"tsx src/index.ts","lint":"echo 'No linter configured yet'","test":"echo 'Tests not configured yet'","build":"tsc","example":"tsx tests/example.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.11.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"_nodeVersion":"24.14.1","dependencies":{"chalk":"^5.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","gramio":"^0.10.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.8.0_1778450793800_0.1630703750568514","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@adriangalilea/utils","version":"0.9.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.9.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"8ff13a0326549ad72eb172f99911785ecc8c93e6","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.9.0.tgz","fileCount":106,"integrity":"sha512-t255mdbQGuw/FrPNXG6YMsKV0kKbZ68ZmeEaQjljGvXXB8GVJDAVPzPdr4biJNF+NP+sTJ3PqsqQuBQ6meZNvg==","signatures":[{"sig":"MEYCIQCrqQiWUwOmJZg57R2Y3Z13Y3r61hhmy5bfAfXYCk/PMAIhAIohWjtZL7d99nAJ3XsMlPSj/yCm9CNR6UPyvHoMh+jb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":716608},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/llm-stream":{"types":"./dist/bot/llm-stream.d.ts","default":"./dist/bot/llm-stream.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/message-history":{"types":"./dist/bot/message-history.d.ts","default":"./dist/bot/message-history.js"}},"gitHead":"6f48146a965252d621f3f0f4aacbd6aa4fc91fed","scripts":{"dev":"tsx src/index.ts","lint":"echo 'No linter configured yet'","test":"echo 'Tests not configured yet'","build":"tsc","example":"tsx tests/example.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.11.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"_nodeVersion":"24.14.1","dependencies":{"chalk":"^5.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","gramio":"^0.10.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.9.0_1778453353430_0.531885888452168","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@adriangalilea/utils","version":"0.10.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.10.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"05efcae769ebf5bf62cca0acaa53bc674ed71f7a","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.10.0.tgz","fileCount":106,"integrity":"sha512-SDc0qWlIWJcyfagn5lxa3Yep98NOEvS0GBgg3ukoz3lJiH28fXqWcX5KBfadiEBG6A47uOf8SnAtgP5OZf0pTw==","signatures":[{"sig":"MEQCIArT+q6vL2H80Hf4QI2A1A1s7Wm/wS5LGM1kCQmbFQw/AiB0P5bv7SEtZm+RmQKhHhfp3vxt1nAh5md4Di5rgxvD5g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":725593},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/llm-stream":{"types":"./dist/bot/llm-stream.d.ts","default":"./dist/bot/llm-stream.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/message-history":{"types":"./dist/bot/message-history.d.ts","default":"./dist/bot/message-history.js"}},"gitHead":"d0ea5422c907beea5974dd94358f61ccd5e0f05e","scripts":{"dev":"tsx src/index.ts","lint":"echo 'No linter configured yet'","test":"echo 'Tests not configured yet'","build":"tsc","example":"tsx tests/example.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.11.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"_nodeVersion":"24.14.1","dependencies":{"chalk":"^5.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","gramio":"^0.10.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.10.0_1778455082485_0.5954064603117772","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"@adriangalilea/utils","version":"0.11.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.11.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"31d18467962c85d6930d9e90f0b9c0006a5b42c5","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.11.0.tgz","fileCount":106,"integrity":"sha512-6D+W9+JOmAuHa+pM1p0e2Sy7Z16A+TRpEuuu5rdmOsJVob6w2IQ2LHBLpngh2Uk5l8ufgtZ/gUn+PcSddBKP1w==","signatures":[{"sig":"MEUCIQDKO2Q1fkiwoZfFFh/xtkf0eWIt/z8EzMAdBV+DEM3xsgIgUeUoMCIxbMrU4Qejk98JjwskAlOVLbKF133X4gN8T7U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":721907},"main":"./dist/index.js","pnpm":{"overrides":{"@gramio/contexts":"github:adriangalilea/contexts#local-build/auto-thread-private-chat-threaded-mode"}},"type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/llm-stream":{"types":"./dist/bot/llm-stream.d.ts","default":"./dist/bot/llm-stream.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/message-history":{"types":"./dist/bot/message-history.d.ts","default":"./dist/bot/message-history.js"}},"gitHead":"3075a482e32b57cfd74eb2344c45ab3c8be6f553","scripts":{"dev":"tsx src/index.ts","lint":"echo 'No linter configured yet'","test":"echo 'Tests not configured yet'","build":"tsc","example":"tsx tests/example.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.11.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"_nodeVersion":"24.14.1","dependencies":{"chalk":"^5.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","gramio":"^0.10.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.11.0_1778457840233_0.2658322429810436","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"@adriangalilea/utils","version":"0.12.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.12.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"851a6a1e184092a6247bda4f5a00e933a3dd8e6e","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.12.0.tgz","fileCount":106,"integrity":"sha512-NdEySazm2pGoESR20tM2ZQPTDj9vIBv0s6AYBFCi71GP2X9qR9nlqugB3IBEmujBMoAxZh2cdfW7XcYmNSs8iQ==","signatures":[{"sig":"MEUCIEdNZpBNebI2z5ZliqboEMTSngHdTippHXyoMCxQctcNAiEA74JI0/4Pk1pNzUi5/U2sXudVQ3YOIK1x5CcVwe4Q/uU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":729572},"main":"./dist/index.js","pnpm":{"overrides":{"@gramio/contexts":"github:adriangalilea/contexts#local-build/auto-thread-private-chat-threaded-mode"}},"type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/llm-stream":{"types":"./dist/bot/llm-stream.d.ts","default":"./dist/bot/llm-stream.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/message-history":{"types":"./dist/bot/message-history.d.ts","default":"./dist/bot/message-history.js"}},"gitHead":"58d4e8d7014c126f4f63f145abdaeb66137a845e","scripts":{"dev":"tsx src/index.ts","lint":"echo 'No linter configured yet'","test":"echo 'Tests not configured yet'","build":"tsc","example":"tsx tests/example.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.11.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"_nodeVersion":"24.14.1","dependencies":{"chalk":"^5.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","gramio":"^0.10.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.12.0_1778459600841_0.7481693990152138","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"@adriangalilea/utils","version":"0.13.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.13.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"7d33f5026ae3b1c0821113b4c5cbff4d1afee180","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.13.0.tgz","fileCount":102,"integrity":"sha512-RqIHDZuJLmD4fpPb6QQBd4ToYuKBdL9b+BJifqUjLapd1ydNXs/Ie4RmeieC3i3VzeoT1XfEHozB/EYVntShFA==","signatures":[{"sig":"MEUCIQD1L0SPb2sd965tCnevlpo5o2Yn37JJ+I9R8iv61HnjdAIgXtrfaxTd3c7fWz/8zHX2wlMlupW8nGTPcRmk/zIbUgk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":730077},"main":"./dist/index.js","pnpm":{"overrides":{"@gramio/contexts":"github:adriangalilea/contexts#local-build/auto-thread-private-chat-threaded-mode"}},"type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"bbf4ce1adfaf92ff0a3c74052b46736fafa137bc","scripts":{"dev":"tsx src/index.ts","lint":"echo 'No linter configured yet'","test":"echo 'Tests not configured yet'","build":"tsc","example":"tsx tests/example.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.11.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"_nodeVersion":"24.14.1","dependencies":{"chalk":"^5.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","gramio":"^0.10.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.13.0_1778460829575_0.556181731224872","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"@adriangalilea/utils","version":"0.14.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.14.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"b38c63301f503d9f84fb02360d2341eea46a8bf0","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.14.0.tgz","fileCount":102,"integrity":"sha512-1y8QhI4qMYqy9Q0L5qQL55/lwdeohT8LcGcLMgKwB4WJpOhTQ6ydCaehL5c5qS3iHRsQmPKQVEw/6EFLQloG3g==","signatures":[{"sig":"MEQCIGgqIXLKytJggKXsUCkoo5UzxLccQtpyIq4n9EZ9U25LAiA0HLfX9TUjzQDjn80u3gpMpGquriVvaGgYSBhJPwEdEQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.14.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":755957},"main":"./dist/index.js","pnpm":{"overrides":{"@gramio/contexts":"github:adriangalilea/contexts#local-build/auto-thread-private-chat-threaded-mode"}},"type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"f9ea9c3f44dc6d8519d26c8c721a62915042a238","scripts":{"dev":"tsx src/index.ts","lint":"echo 'No linter configured yet'","test":"echo 'Tests not configured yet'","build":"tsc","example":"tsx tests/example.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.11.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"_nodeVersion":"24.14.1","dependencies":{"chalk":"^5.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","gramio":"^0.10.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.14.0_1778462945214_0.9568960788715903","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"@adriangalilea/utils","version":"0.15.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.15.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"294a863b4ceda6023e963acf6cbc3a01d2d1c331","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.15.0.tgz","fileCount":102,"integrity":"sha512-/EdJY6zi6rYKKfH1V0ogAQPKrxYjG6h5U4eg1ErK+ndO1/uyqcxR87OIDiLm09pjvCSuXeudZgv4205lYNuxoQ==","signatures":[{"sig":"MEQCIG7NBYKgZhleuRFo3hdxmQxMjrRMWYfu7Db7yAVfq6WOAiAUKfx5yqrWXXbdwz/oTDIqEFNu0l2UnaQP2K1NaXQsPg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.15.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":764575},"main":"./dist/index.js","pnpm":{"overrides":{"@gramio/contexts":"github:adriangalilea/contexts#local-build/auto-thread-private-chat-threaded-mode"}},"type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"28539adf33c6584265f778732d38ac1ed3994f1a","scripts":{"dev":"tsx src/index.ts","lint":"echo 'No linter configured yet'","test":"echo 'Tests not configured yet'","build":"tsc","example":"tsx tests/example.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.11.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"_nodeVersion":"24.14.1","dependencies":{"chalk":"^5.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","gramio":"^0.10.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.15.0_1778463929107_0.2532535594030083","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"@adriangalilea/utils","version":"0.16.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.16.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"d38ab700d63e4066f8225bf835bfc10236ae1ed7","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.16.0.tgz","fileCount":102,"integrity":"sha512-jkGOSzdIv+dvAyZAWYMEadPFnJCKQHoQje4dFaokxPmD5dxvSDl2OhNMDwhDLzZmPkjWqI568diupPfosQDjpQ==","signatures":[{"sig":"MEUCIQDMJUnSYdA9RX85K8kEVgu7WMGw5aOvPSAlaplaDpSpkgIgGsIPKJjh4wsNgT0G2/7Fta2czWdQpwYlYop3ZIv5kI4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.16.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":778394},"main":"./dist/index.js","pnpm":{"overrides":{"@gramio/contexts":"github:adriangalilea/contexts#local-build/auto-thread-private-chat-threaded-mode"}},"type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"12b044dd17acec4ce8564dc78f6ba5cfd97f0af7","scripts":{"dev":"tsx src/index.ts","lint":"echo 'No linter configured yet'","test":"echo 'Tests not configured yet'","build":"tsc","example":"tsx tests/example.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.11.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"_nodeVersion":"24.14.1","dependencies":{"chalk":"^5.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","gramio":"^0.10.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.16.0_1778464728886_0.07067420617964149","host":"s3://npm-registry-packages-npm-production"}},"0.16.1":{"name":"@adriangalilea/utils","version":"0.16.1","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.16.1","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"8cc2a174fcd26e2e96b0905d635bf2cd9e04c0fc","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.16.1.tgz","fileCount":102,"integrity":"sha512-GAdehCWkJGtERuZiDCbvsqPpaSBYVhgrZ/B1FyrluvuJbtsKiWqoCA4sYD7oRkc76cYxGq6vCrymGtYtUw1hMQ==","signatures":[{"sig":"MEQCIHUXtmFdpaDeT+V9mMbnP7hbva47h6v56h6wdBVz17J5AiBK44iG2eOycrLE7Ez52ZO6lguNCs36BDDBlvq334qxvg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.16.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":779077},"main":"./dist/index.js","pnpm":{"overrides":{"@gramio/contexts":"github:adriangalilea/contexts#local-build/auto-thread-private-chat-threaded-mode"}},"type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"d0c43d2ed729f5f8a8193bc42fbd6106fdb821be","scripts":{"dev":"tsx src/index.ts","lint":"echo 'No linter configured yet'","test":"echo 'Tests not configured yet'","build":"tsc","example":"tsx tests/example.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.11.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"_nodeVersion":"24.14.1","dependencies":{"chalk":"^5.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","gramio":"^0.10.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.16.1_1778486217198_0.6947862699752623","host":"s3://npm-registry-packages-npm-production"}},"0.16.2":{"name":"@adriangalilea/utils","version":"0.16.2","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.16.2","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"f5a3c11d297bd0043f0507dfd966de4a23981e6d","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.16.2.tgz","fileCount":102,"integrity":"sha512-SoYwUeKnqEps1P4S4kaNfeMVmoQTasWgeDGlnzimlmyBeLGcOR/Vb6Zu9yjlHWjVH1iYOrS9iSj7v77hCGWtMw==","signatures":[{"sig":"MEUCIDUwRl3BZPLNenMPDxD8fnP17iz62+J88I5ykMy4fMWeAiEAmrBn2urU1/Ef/esSzRXIAhTq2isTH9zX37LspnP5KTg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.16.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":781011},"main":"./dist/index.js","pnpm":{"overrides":{"@gramio/contexts":"github:adriangalilea/contexts#local-build/auto-thread-private-chat-threaded-mode"}},"type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"5a4e6e7c7464364e6f509bf1812c0feca260eab7","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.11.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"_nodeVersion":"24.14.1","dependencies":{"chalk":"^5.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","gramio":"^0.10.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.16.2_1778487839465_0.9810124660154449","host":"s3://npm-registry-packages-npm-production"}},"0.16.3":{"name":"@adriangalilea/utils","version":"0.16.3","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.16.3","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"f9f7263796243f6ae00d919f82eab97439088359","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.16.3.tgz","fileCount":102,"integrity":"sha512-5Ed1H2sT2+OvqLSl7CLb4tEuqFTX7aGTYC8vt4BS45bcWOA4vVPov6sKpqGWxEYyQz11gzecW5G4bMubn6JdiQ==","signatures":[{"sig":"MEUCIQDirzbo2eYUezr6iOaNrJl1kNF4pz1Uw8kMhDUmGtlasAIgQJ6rZ6OG4uVaui6SGucgp835iJzWLjSHJBPn6Mo0Mck=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.16.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":781203},"main":"./dist/index.js","pnpm":{"overrides":{"@gramio/contexts":"github:adriangalilea/contexts#local-build/auto-thread-private-chat-threaded-mode"}},"type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"3b2c6b45f01202aec927e1dfdd1ca3591aa5ece8","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.11.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"_nodeVersion":"24.14.1","dependencies":{"chalk":"^5.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","gramio":"^0.10.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.16.3_1778489916460_0.5761049939851526","host":"s3://npm-registry-packages-npm-production"}},"0.16.4":{"name":"@adriangalilea/utils","version":"0.16.4","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.16.4","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"db1344fe3b579945d033cd45d188421660173f49","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.16.4.tgz","fileCount":102,"integrity":"sha512-yAoTTVbPP7b99ysELYmadD2C2I1UTdQxowYaqVkc1CvSprsOyNauRlS2zvbGAqGBVaTeNTgZtKssZEmTXHvXDQ==","signatures":[{"sig":"MEUCIQCvlw3Ynd1bb6cD00R39nix703bb07UUehmG76Hu5PZWQIgY3f9wMbxzf01nG6tDYC257pEqJrLo5Uu0JmTboIpico=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.16.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":785303},"main":"./dist/index.js","pnpm":{"overrides":{"@gramio/contexts":"github:adriangalilea/contexts#local-build/auto-thread-private-chat-threaded-mode"}},"type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"071f971087ffc6f2965da75f2d4f1eb72308230c","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.11.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"_nodeVersion":"24.14.1","dependencies":{"chalk":"^5.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","gramio":"^0.10.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.16.4_1778490720828_0.2565103460765301","host":"s3://npm-registry-packages-npm-production"}},"0.16.5":{"name":"@adriangalilea/utils","version":"0.16.5","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.16.5","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"63a5f643fb06c9537d0a17cb3f2a2995211a0fc4","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.16.5.tgz","fileCount":102,"integrity":"sha512-XSqV60BHP0ePddHjXFE5DgMqKQWJAdMvZOcSHQ9+2C33RCduSggAL7aE+XM6pnt5YuMbkoE6ZynoTw/Wuh89wg==","signatures":[{"sig":"MEUCIQDHN0HG315gW0unVlkP6E7LIoixnmyngkGJmxELUIgZsQIgNG7a+36yFpuZXKLHTSwiDImrm+8MXcjJuiyFgyXMVDg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.16.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":787590},"main":"./dist/index.js","pnpm":{"overrides":{"@gramio/contexts":"github:adriangalilea/contexts#local-build/auto-thread-private-chat-threaded-mode"}},"type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"7f5624c3fcd2ae85f56a96feec888640370775fc","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.11.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"_nodeVersion":"24.14.1","dependencies":{"chalk":"^5.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","gramio":"^0.10.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.16.5_1778491322363_0.9939437588612627","host":"s3://npm-registry-packages-npm-production"}},"0.16.6":{"name":"@adriangalilea/utils","version":"0.16.6","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.16.6","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"8c332575445ea5c2190994ef2cf941307698afed","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.16.6.tgz","fileCount":102,"integrity":"sha512-6VVD99E0tHKNwax4rtCpfsOjrDDajQOmnKEchsZT7k1rpOVFz7fNST2cEbLtQer67wRoxbbGfDrAPunQIXsquQ==","signatures":[{"sig":"MEYCIQD/p3Llo9LQtAnpIzz7waVvzP1pdMnL9ECc8Qu1/AoSlwIhAKv+MtIT8ybXs18UTGzOt/bDRhkpTcDFJnBxiKod1UoP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.16.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":788268},"main":"./dist/index.js","pnpm":{"overrides":{"@gramio/contexts":"github:adriangalilea/contexts#local-build/auto-thread-private-chat-threaded-mode"}},"type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"5147fe5cf600c927ffe1f79924ef6e8f8c59ae6d","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.11.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"_nodeVersion":"24.14.1","dependencies":{"chalk":"^5.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","gramio":"^0.10.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.16.6_1778491510743_0.6083333222956078","host":"s3://npm-registry-packages-npm-production"}},"0.16.7":{"name":"@adriangalilea/utils","version":"0.16.7","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.16.7","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"eee4b13a8deac2a0a5ff26916ab46e1adc1de862","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.16.7.tgz","fileCount":102,"integrity":"sha512-T/rJMIMmkRn4bpr+EZ5+QsiHW4f98WJwrGfXWfcAvI99X/Ri0+TMPvwVO539Yhk0GyMKTB/QZRW3KILpW9sQHA==","signatures":[{"sig":"MEUCIQD9K+DPw2tQ2nR3w3+SGg1N4CPavZAba4q5zrjf4XlFdAIgO8jm9UJtTrQpbli/DvQLYoOVwFdifManv+gRRlwl6L4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.16.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":789218},"main":"./dist/index.js","pnpm":{"overrides":{"@gramio/contexts":"github:adriangalilea/contexts#local-build/auto-thread-private-chat-threaded-mode"}},"type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"25326fffd1ed25fa45c00d631410827c0c1deee8","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.11.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"_nodeVersion":"24.14.1","dependencies":{"chalk":"^5.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","gramio":"^0.10.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.16.7_1778491625415_0.8177495102653976","host":"s3://npm-registry-packages-npm-production"}},"0.16.8":{"name":"@adriangalilea/utils","version":"0.16.8","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.16.8","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"897adfc0767eaed84602ccfe6bf91a87749cd50f","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.16.8.tgz","fileCount":102,"integrity":"sha512-xyoFEWWRCvxtgf711lTjMcEBAHj2fVIN2GTjDug68Bycf0VrxC6b8LAVJzeb/0Ezqah6DYf6i1hRflESd6kLcA==","signatures":[{"sig":"MEUCIQCi6SR+O+1SCK5bqp+zBsQim5k8kEMWJk60VhwGrnKUVgIgZD53KJ7isdjG/93Epp/Uwla8XQfWSzip1TM8piQCZbU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.16.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":787762},"main":"./dist/index.js","pnpm":{"overrides":{"@gramio/contexts":"github:adriangalilea/contexts#local-build/auto-thread-private-chat-threaded-mode"}},"type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"da81fc4f0ead7949c7eb9ae9f7fb57848aec0849","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.11.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"_nodeVersion":"24.14.1","dependencies":{"chalk":"^5.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","gramio":"^0.10.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.16.8_1778491772521_0.610410498633428","host":"s3://npm-registry-packages-npm-production"}},"0.16.9":{"name":"@adriangalilea/utils","version":"0.16.9","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.16.9","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"588b65c3f3931250e68ec6d7c914159787080ff0","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.16.9.tgz","fileCount":102,"integrity":"sha512-OUa6mkOFbk4ya/Sh3uX5yVZVXEaKxR6eomPyeI+BAuq2362D7iQpt5HIWIk7/rXGKMw265G4SGNir5luCujZYw==","signatures":[{"sig":"MEYCIQD98NRiBFhIjt8wkpTIHZDgE4I+MbobNSbypw0TaspuugIhAIhAcD6o+wrfMNwDMkKanmk052UQyPcMlR5cfazN8wsu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.16.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":793546},"main":"./dist/index.js","pnpm":{"overrides":{"@gramio/contexts":"github:adriangalilea/contexts#local-build/auto-thread-private-chat-threaded-mode"}},"type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"6d2cd76323a4bc89a894d212df117c377ab40a49","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.11.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"_nodeVersion":"24.14.1","dependencies":{"chalk":"^5.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","gramio":"^0.10.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.16.9_1778492438636_0.8965444134333542","host":"s3://npm-registry-packages-npm-production"}},"0.16.10":{"name":"@adriangalilea/utils","version":"0.16.10","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.16.10","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"c9675697e8f7b35800ec060b4a315a65f8169a42","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.16.10.tgz","fileCount":102,"integrity":"sha512-Pcj0IwhP+9n1eDROYnQb0cZFA+q+08/GuETk3PJv0asIQaJ9N9LwO0LihIqcoe67R93G0G6igPaR/mM/7+JwEw==","signatures":[{"sig":"MEYCIQCa9JZNAWxTSqomBBHxwec3LhLW6mguSmejv1G9BQGqSwIhAKCc/GSni0dKWx6vLFUKmFs0kk3LnrFCVo9n8HOgEXlw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.16.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":794032},"main":"./dist/index.js","pnpm":{"overrides":{"@gramio/contexts":"github:adriangalilea/contexts#local-build/auto-thread-private-chat-threaded-mode"}},"type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"48d439706643933a8878dbf67b34310cddf34455","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.11.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"_nodeVersion":"24.14.1","dependencies":{"chalk":"^5.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","gramio":"^0.10.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.16.10_1778492884161_0.03651080792291839","host":"s3://npm-registry-packages-npm-production"}},"0.17.0":{"name":"@adriangalilea/utils","version":"0.17.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.17.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"6589a7cd35d79ddf85b05f8d275e6e3273381285","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.17.0.tgz","fileCount":102,"integrity":"sha512-E7io9vy1auM6pPkGBnidZg/5c5mgYJS/Fo2Dl62SYG4RhCbrcbhQnmy0u7ydhQakV0pTNgzqbqWEu9GtTIJAGg==","signatures":[{"sig":"MEUCIBdZg+r9zK+sbhD/4NW3WdvqvaBcIcZigOktYJkK/3yOAiEAhYuRs8Gsv0g04gON33eVj/8ER+Ym0+8ierFqcZ5Lieg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.17.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":805472},"main":"./dist/index.js","pnpm":{"overrides":{"@gramio/contexts":"github:adriangalilea/contexts#local-build/auto-thread-private-chat-threaded-mode"}},"type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"05e5a8ca10927e50266a23aceb791937c7ded5ff","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.11.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"_nodeVersion":"24.14.1","dependencies":{"chalk":"^5.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","gramio":"^0.10.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.17.0_1778494730722_0.3268487226603889","host":"s3://npm-registry-packages-npm-production"}},"0.17.1":{"name":"@adriangalilea/utils","version":"0.17.1","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.17.1","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"98c2275cbe5d3b3d3c58daad6edbd0b5995965db","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.17.1.tgz","fileCount":102,"integrity":"sha512-hDW/mjGhzfvccutCMq39FdGsT8Qn3y0DPuNhem80YVzT3Dct8l3ndCSAhU7YQQ8Myeh5WBKQYNprlTYqVMKYAw==","signatures":[{"sig":"MEUCIQDNKBMGdKRTPGwKXpbuo7G9OfJwdcCO4hmv3d0ycwsxYwIgRVJfCo3Z1yEcnSGIqh6nrDc2jv9wfot4+3nRpodIX6Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.17.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":805639},"main":"./dist/index.js","pnpm":{"overrides":{"@gramio/contexts":"github:adriangalilea/contexts#local-build/auto-thread-private-chat-threaded-mode"}},"type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"30f556d4829e8310d83c9890573a9f8ca1c6be9e","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.11.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"_nodeVersion":"24.14.1","dependencies":{"chalk":"^5.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","gramio":"^0.10.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.17.1_1778495310057_0.591965175350921","host":"s3://npm-registry-packages-npm-production"}},"0.18.0":{"name":"@adriangalilea/utils","version":"0.18.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.18.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"46f95d35eabd8ff61466be99d208e5643ba01bde","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.18.0.tgz","fileCount":102,"integrity":"sha512-McyJh3pXkd7Qd0A6HTXGViarFc2oL/2cG3rr5JOnFe/ZDMJJox+zlS8k8JgR5D5YQrD/3YDQUbgzANJ5llVS5g==","signatures":[{"sig":"MEUCIQChEAtyySvJ7zhC0Pcw/2Dv84y5o9txKSKR0maR6zdG6QIgOXoFB+BiopdmeI50wAxvCR4sgTylF9aUeF9ZXdyE3yM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.18.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":816378},"main":"./dist/index.js","pnpm":{"overrides":{"@gramio/contexts":"github:adriangalilea/contexts#local-build/auto-thread-private-chat-threaded-mode"}},"type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"256bb348c59bdebfd498731f13d9b64cff27ef2e","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.11.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"_nodeVersion":"24.14.1","dependencies":{"chalk":"^5.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","gramio":"^0.10.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.18.0_1778496208961_0.6107579893243771","host":"s3://npm-registry-packages-npm-production"}},"0.19.0":{"name":"@adriangalilea/utils","version":"0.19.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.19.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"a76116915d2aedac5584a0b2c9acf182cad1b19a","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.19.0.tgz","fileCount":182,"integrity":"sha512-1iQx2qCzBHSwzzuIN7c7qa4iSQ8TLsjLWs8qs+iLstwrda6xG+KMxm8cmK/sbOEhHJK7YANc9MKobu9lHkg81A==","signatures":[{"sig":"MEQCICemFc0pecw2PH6Ji7kG1hQKJ5NsNiVGhSB9lOuWCzcBAiAKPd0hJIcXKj/AEYDosHt7rOZrot34h9UvIcZPDsix8g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.19.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1126698},"main":"./dist/index.js","pnpm":{"overrides":{"@gramio/contexts":"github:adriangalilea/contexts#local-build/auto-thread-private-chat-threaded-mode"}},"type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"c200db4d46e4385bbbc37159e57944692f5feafc","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.11.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"_nodeVersion":"24.14.1","dependencies":{"chalk":"^5.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.10.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"zod":">=3.22","gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.19.0_1778524035025_0.7235840484334561","host":"s3://npm-registry-packages-npm-production"}},"0.20.0":{"name":"@adriangalilea/utils","version":"0.20.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.20.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"90f271d45a0beae3127547f4922dac95e83e0613","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.20.0.tgz","fileCount":186,"integrity":"sha512-dG6undamwoP6gOpOPMV/msDOILrL4qu1SoSbx+gmpgboXcsBjgjmNg/+5/YXPGnxgbOFbka5t/5nj64I5kaYkg==","signatures":[{"sig":"MEYCIQChMhbOm8oicbhQL6H34bRvLqvCMFfAP+yswMYj81cFVgIhAMXoXJ2VRfPEn0iT4hOw5Jw84HGey+G7HxR4bPCfSNjM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.20.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1133031},"main":"./dist/index.js","pnpm":{"overrides":{"@gramio/contexts":"github:adriangalilea/contexts#local-build/auto-thread-private-chat-threaded-mode"}},"type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"74f1551e6a219665b07aa9d50c6984c9faa18230","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.13.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"_nodeVersion":"24.16.0","dependencies":{"chalk":"^5.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.10.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"zod":">=3.22","gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.20.0_1780495603301_0.08520008398766676","host":"s3://npm-registry-packages-npm-production"}},"0.21.0":{"name":"@adriangalilea/utils","version":"0.21.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.21.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"27e6cce04ae17f22408ceec050b7eda2290e377e","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.21.0.tgz","fileCount":190,"integrity":"sha512-JmOLmfjjdXmR+4B3LiKaFNcnJtM1e+W3RIBD2PSc4dAAIgOk/F9mbYz4nBXuXjT7tYv+1flqpFunqCWO2cplAA==","signatures":[{"sig":"MEQCIEd/+L2l7Jxcc1UlbxKOPtmXtyA4Gj/mK/B+qR1jpWn+AiB88/oR1zqLbMmJsvw3bE2y2e/d+8aFVe2YF2/XjYXDxg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.21.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1145569},"main":"./dist/index.js","pnpm":{"overrides":{"@gramio/contexts":"github:adriangalilea/contexts#local-build/auto-thread-private-chat-threaded-mode"}},"type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"793991e4607fb7e594c5128fa42e2e5ed77cdfa9","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"_nodeVersion":"24.18.0","dependencies":{"chalk":"^5.6.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.10.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"zod":">=3.22","gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.21.0_1782906109985_0.3026633868052695","host":"s3://npm-registry-packages-npm-production"}},"0.22.0":{"name":"@adriangalilea/utils","version":"0.22.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.22.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"bfffd37e72fe2bb28caf0407954c359651fdea71","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.22.0.tgz","fileCount":198,"integrity":"sha512-YR2gZF76UL+Uy6zoRgQ3AFNp9l/RwYWUp6A7Io9f5Zr3mV2Ky3f3UmH9C8NqpHGXIGcWged/ZWO75/DqXLcIdw==","signatures":[{"sig":"MEQCID9uMHmYcnzxGJS2YG8YZpWexG/6xbzqHxbuqhPJdZfbAiB61oQDIC9v9exSBJ2+dvxA7qPw6OkKDTnWhRcoOCeDFw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.22.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1173431},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"5de9f5125821d4128e4c579b101e77d6a394be60","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.10.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"zod":">=3.22","gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.22.0_1783347119562_0.1938437334750549","host":"s3://npm-registry-packages-npm-production"}},"0.23.0":{"name":"@adriangalilea/utils","version":"0.23.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.23.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"c3a7c38352a1c81e42dd9f04d109847f6e2fb20a","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.23.0.tgz","fileCount":198,"integrity":"sha512-JOhyQ7FZAZdbyvHv6FF7Hh3mbjlE2OM6fhw/r65Z1fdGJ2ve95HfzXtSQWHdYOFQbtVG/NGkCTVb3DzvWPou0g==","signatures":[{"sig":"MEUCIE47IHQ6vAxKRcbbuXrQpm9AYc7TXPz8BALWtf1Y/uNeAiEA8jE7ZUwPPdMIoa1qTB1OxOgBt0LkZsg0nxuiS1iHBpA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.23.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1177421},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"8fb6cfba5c9731e8dbd3f95f2a61a8552e59be9f","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","test:text":"tsx tests/text-test.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.10.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"zod":">=3.22","gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.23.0_1783348615630_0.9512550739047352","host":"s3://npm-registry-packages-npm-production"}},"0.24.0":{"name":"@adriangalilea/utils","version":"0.24.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.24.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"6f9f2f518a8fabbc525952189376f45bd0c75fdd","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.24.0.tgz","fileCount":198,"integrity":"sha512-lCSgNdbgjTm6jCZz5uHoPZoceC81YBZPP+VApXCQXY7wLb1VmgRMKUOBcXK0yAIQ3cu+KaTiOf1SL+wmQtMyrw==","signatures":[{"sig":"MEUCIQC8wMQmQPbz1vRIiIq2Q7yVbn1dG1SIo15Ac+icre4qwQIgKymVwk9D/YzEsoRhT57iM5uP6xzP3w/cMjLS/FOYajQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.24.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1187059},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"7fd10d97fe29e66471ec0a867d8c3cadf5862c77","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","test:text":"tsx tests/text-test.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"zod":">=3.22","gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.24.0_1783352264612_0.8983564705230387","host":"s3://npm-registry-packages-npm-production"}},"0.25.0":{"name":"@adriangalilea/utils","version":"0.25.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.25.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"8a52436255c574351605a0210e822874d1d593ed","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.25.0.tgz","fileCount":202,"integrity":"sha512-7ZwMHozhJ8mNM3WRAJlaHQx2RmBSR3uJENLszr2DL0tkRopchCVRttEQb70pZtU+kq5Mt4FXneKsG2YP2BA8Eg==","signatures":[{"sig":"MEUCIQCCOQcItQjGBg/7iogcLisrSy789JjWc6GstcJHQcfRugIgdpnVa4lUksOAPgKQUz94LeBglqEpltDYE4w1FNwQ8CA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.25.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1188976},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"750e2bc3b614ddb26399c2c368cde24d93ba62b4","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","test:text":"tsx tests/text-test.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"zod":">=3.22","gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.25.0_1783355959270_0.3023943241455276","host":"s3://npm-registry-packages-npm-production"}},"0.26.0":{"name":"@adriangalilea/utils","version":"0.26.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.26.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"739782dfa1513b7ae4f3ab41ef4533b1427bf651","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.26.0.tgz","fileCount":202,"integrity":"sha512-lGGFVi7Xsm7fMOReuC7y00i8R+Dm3JkrmPKbkuvPsedT1Sp1KA9yYs0kwCL8Tv80fIBF5sGR7nyrOL87/rNAaA==","signatures":[{"sig":"MEYCIQC/YpPZNuIBWZNIGVkiX9vVyoIkkDgu9E1DCHMnJj1/ZAIhAJy1FZogIZeFHCf8LtEKkROuFRL7bl7VIlryb+jmASS4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.26.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1189406},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"2f0a6edbc88b73578c1ceeb4cc430880b277d2fc","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","test:text":"tsx tests/text-test.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"zod":">=3.22","gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.26.0_1783358997406_0.23765157355928834","host":"s3://npm-registry-packages-npm-production"}},"0.27.0":{"name":"@adriangalilea/utils","version":"0.27.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.27.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"28cdebfe8e510093efb0ae0bd841c9231de2790c","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.27.0.tgz","fileCount":210,"integrity":"sha512-U5q2rZUe3t3qORa8VQpZG2b9zJndmsg2Dk9vYoTOk0BkQ/mgJjnNJjz8P18UfHAvbdXNCyJvYOtv+pY2hewWFg==","signatures":[{"sig":"MEQCIH/amkePs0j74rz2wYsxT5HqHH2o4pyIXFxJjKBZ2XhlAiAVDL3gF5rbL64r7CBTjaBGUq0uK/uQ4SP9cLeVK+GWiA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.27.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1197728},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"f35ecaafe98f18354d546f9a137b8334b2177054","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","test:text":"tsx tests/text-test.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"zod":">=3.22","gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.27.0_1783364268555_0.15221273745208563","host":"s3://npm-registry-packages-npm-production"}},"0.28.0":{"name":"@adriangalilea/utils","version":"0.28.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.28.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"d39528243aad7862f093ec2bdd1e311db2447dab","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.28.0.tgz","fileCount":210,"integrity":"sha512-zaKArPV7V4c9hxDjXUC7vYvXefyiXoyOM0mm/KMh8bxeLkZBC8DCIwdbLc3sJB0BEN3n/2hMLafE8FJ6s/hlng==","signatures":[{"sig":"MEQCIH3XoiEC+PmLEDpL3v4QZwsjQxZoNkiVI5FmrcWr5WUzAiAXROWgXvNWfkTA/38Flnt0JYQjqUqTuC9WUqQxJhdL/A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.28.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1199143},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"5245f561130c4b0ab545283cf199d492e38a9224","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","test:text":"tsx tests/text-test.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"zod":">=3.22","gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.28.0_1783364786495_0.57985140961194","host":"s3://npm-registry-packages-npm-production"}},"0.29.0":{"name":"@adriangalilea/utils","version":"0.29.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.29.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"c012f2a319eb8d536b1c6ed059248b72647cdf64","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.29.0.tgz","fileCount":214,"integrity":"sha512-AIhaXZdcXxl3WOAPOJrfwmxrMrNooAzH0KuMJxor8FyLhFDlXkcxRiSJPRm0fcbllmIEdv9XBjlEmxt8U1SOzg==","signatures":[{"sig":"MEQCIG1J+d+maG/nCdqoqxVXujH3gzjyAONmrBJUUVI3lzu4AiA9ppSawrkExEy3AmoVRSmzesWMq2EFuqdhAbxUBbA3SQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.29.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1203783},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"26c30ad2bf40301c99c91436b9cc65f8b3d5a01d","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","test:text":"tsx tests/text-test.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"zod":">=3.22","gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.29.0_1783456749905_0.9318015300790095","host":"s3://npm-registry-packages-npm-production"}},"0.30.0":{"name":"@adriangalilea/utils","version":"0.30.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.30.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"966728a8d8c717b748b9f3d5f10835363d77c52d","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.30.0.tgz","fileCount":214,"integrity":"sha512-kWYzTU8KQNAi6Rky1IhKCaGDS7Q7XpjsDgsBq0yOfivxuMQlbWR4Z2Kpethocgr0DlTnxz+K/4UqBPX/crH2fQ==","signatures":[{"sig":"MEQCIAlX9IfOuj9JZb1uNMxKOKuIhly2liKjrk8kt/FJIW3aAiA77xYCoU8LA0+P/fgrEi7oYuZpaDhAplBLBfDqi9PxsA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.30.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1203882},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"ea1dcf841dac3f47f1618c962055504554a73810","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","test:text":"tsx tests/text-test.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"zod":">=3.22","gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.30.0_1783677884074_0.30561855300354224","host":"s3://npm-registry-packages-npm-production"}},"0.31.0":{"name":"@adriangalilea/utils","version":"0.31.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@0.31.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"5563fceee287eb9d02910acf811c72ce21eb01cd","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-0.31.0.tgz","fileCount":214,"integrity":"sha512-Lz4dNChLCYMFCK3H0nh5An5g/Y9ZTl+E1IUp6nm3kfGKPzzMtfBGm6lC7e3LIw70oRIHrrzG4PsR2OOKzd0SiA==","signatures":[{"sig":"MEUCICPAHhq8PANew3LSWuU8jLGgh3clMXCL/+39CfeWiyv9AiEA2nv9WUVI4qiqOG4cTA1/DOM6tgrhD2BaS8vWNjvL4YI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@0.31.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1207761},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"e8d09a4ccd8e2a5d18b092de1bf56bb6e2b9f8ea","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","test:text":"tsx tests/text-test.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"zod":">=3.22","gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_0.31.0_1783679746036_0.7373052853070152","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@adriangalilea/utils","version":"1.0.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@1.0.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"b2ba490d0a3f6b7f37daa7ed1e60d6699ebfacc1","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-1.0.0.tgz","fileCount":226,"integrity":"sha512-JoFPC4N0mxvbc2erUcm6kfqC3yvBGeIO6uGY+TmDC/t0C+fUN3Q96eqZjWGkjfAKvMc5/nrV1WOxXBHEE+w9ug==","signatures":[{"sig":"MEUCIQDG+U25im3jQs0yaX/f7lmZvmsKhqCuCF+zPMarVdv0uwIgNIfVfpKyTAeMmp2UNeWv2argsCIFMXlgPWQxK7JSYzk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1272046},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"d7b7cc557c61597908a3978e8e3dfda1c74ef168","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","test:text":"tsx tests/text-test.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"zod":">=3.22","gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_1.0.0_1783684114609_0.7689918178602717","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@adriangalilea/utils","version":"1.1.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@1.1.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"611115ec7833dc5265264a5ade15cc4ba48b9148","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-1.1.0.tgz","fileCount":226,"integrity":"sha512-FP3ya0DsI228E44g0ePhWjS5vcLDmqYMiNS5hPbB8SE35TB5cFldUTIHTgFooC7FQWkV9l0IIO+5RHhOhxqITw==","signatures":[{"sig":"MEYCIQDWFjRVW/HWC7tOn/xyXYpTSsF8o6vOiGMpl/UCvPqv9AIhAJDJaz3uotK+1a7vq3qpRyG/xzYom9uAgr6DEve1GXgM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1277451},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"2e02542039f03e428c1fa914142f029d45fd0b8b","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:text":"tsx tests/text-test.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"zod":">=3.22","gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_1.1.0_1783685718675_0.7040211017101257","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@adriangalilea/utils","version":"1.2.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@1.2.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"aa3a66cce575fcc12f287b94fcfe02be80d01caf","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-1.2.0.tgz","fileCount":226,"integrity":"sha512-408/pVfKWEM1z7P+JqxBogDmfm0sQ/1/pU9YnaJYP1hF5mh2pOg123T4LXho0gDrkQImb+BgMCFv2wqK4SDUuA==","signatures":[{"sig":"MEUCIDWqbhPG14ZaPCYEw+BW2d2BNVYYQniHqS0jXpw0Q4NTAiEAxjitK1VaNiuNqCCFV8rSM/lC9uxOwKvc0MneS6Wx6Mg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1281494},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"eafee947c73c487cd094e95daa437bbf31823687","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:text":"tsx tests/text-test.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"zod":">=3.22","gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_1.2.0_1783687973599_0.7065300339701148","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@adriangalilea/utils","version":"1.3.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@1.3.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"897d27c435b66a35e214872ce86e6fe5b42fdde8","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-1.3.0.tgz","fileCount":230,"integrity":"sha512-y4o8FGodIK3MDROaW36NKS7FP3pmga824/2q0QNmUd70B7r7MvvL3feHI8wdS8gBl0prMgh0kXUoTgC0U6gZuA==","signatures":[{"sig":"MEUCIFCwDWrVDZuclm8Hp79TYy6YALnTt7z3taM0Bm51AKUtAiEAz+xf/cpE00GCHgSRtpEh5ErE8yZ2yN9TYVuNA+Mvgus=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@1.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1300386},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"04620d0ba543c14c57499f9768915e4ed84a8800","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:text":"tsx tests/text-test.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"zod":">=3.22","gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_1.3.0_1783693638550_0.6730399342504836","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@adriangalilea/utils","version":"1.4.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@1.4.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"222e0596559865e737f1c013f20dbbe6a1807d5a","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-1.4.0.tgz","fileCount":234,"integrity":"sha512-YAr7FEzT66tbIDgkvRfpphk9gXr8LkTkXaVFofCrAVAObjIpyUow/GfohDsKv4ZSr9csURNqOe+UmKyQwEGdeg==","signatures":[{"sig":"MEYCIQC8Z+8W9P/zdCJWbicl5zcCGrgnbdD/GZa0CL00zYNkIQIhAPBdMHZwp9kRivzMPJW50k9LCJqvd6ML+lcp8FIk5OrA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@1.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1316452},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"a22363614d21b103d2da9efb87535a8119ec12bc","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:text":"tsx tests/text-test.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"zod":">=3.22","gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_1.4.0_1783694224880_0.6171668556290757","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"@adriangalilea/utils","version":"1.4.1","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@1.4.1","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"aa60a4c2d892e7807017580393ece845679c1368","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-1.4.1.tgz","fileCount":234,"integrity":"sha512-O61/Nvr9MOcIcDXUug2RcfSjwVDois/cBY1f0huUP9Qg/i78VwETiW89A9INt00tvOTWQupBZJxWtgnBXa4T/A==","signatures":[{"sig":"MEQCICDr5M+UGQmLH0Eh9xghbdi2JafnbirlLbOsDbm4FCbNAiAuy1xVXIAt/FVen2gbiGxSuwKsLZhGmsj4czhYApqZpg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@1.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1317091},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"d735d39df7cb236e3ff80537a1bd557be3fc0821","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:text":"tsx tests/text-test.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"zod":">=3.22","gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_1.4.1_1783694412697_0.33344802888465397","host":"s3://npm-registry-packages-npm-production"}},"1.4.2":{"name":"@adriangalilea/utils","version":"1.4.2","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@1.4.2","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"a454fc5abe9c0574b2594500cc2a6f04a4437dd5","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-1.4.2.tgz","fileCount":234,"integrity":"sha512-D823GffVJAmOUfQTYZtKpcssf8HKLp6pFCEub8Sx538ekkbp6wvuIKWxXxV7qaBsXANTVagKN7Ede0GZu+ea2g==","signatures":[{"sig":"MEUCIQDykkUUsdNsThQnD/6gnUlf+1JorvzFKHrtXCA8qjPK0QIgJyFAXruB6cWiD2g8l13+iutKNnP69gQNWxOA9tLPlyI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@1.4.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1317961},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"39a2820cf96b560ea6b257137dea25c8f2a22356","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:text":"tsx tests/text-test.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"zod":">=3.22","gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_1.4.2_1783694610069_0.9961754273594321","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@adriangalilea/utils","version":"1.5.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@1.5.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"2b8da2772cac4db2cd4e605dcaab49c4addd8b58","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-1.5.0.tgz","fileCount":238,"integrity":"sha512-4r83fVj3FEie9ZTTiBxVP9uAP/U++AIoyoKnFTHqfnmtqAAGUVIe/KfORUXWRiW7j4tLBpGIlTQTI+JUU7+bdw==","signatures":[{"sig":"MEUCIQD854OXSlvjYODe8aPtsmeHWMrh7XPMDw2FkdX6+aKJ/QIgHIThXYSrlK6f7Q+Xkp7cv//BNT1rjyFzjlv3Uq/lNU4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@1.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1335415},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"8cc7d1e2ac96773e1594ce03e6bf59279a96cd01","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:text":"tsx tests/text-test.ts","test:flags":"tsx tests/flags-test.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"zod":">=3.22","gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_1.5.0_1783699678430_0.39377114373168176","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@adriangalilea/utils","version":"1.6.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@1.6.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"17e0330110cfa2308fed87d2aca2aab8e22ced9d","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-1.6.0.tgz","fileCount":238,"integrity":"sha512-QtocxJVnkNgQHp9wpSTQkVpgyP9Nwyi90QeE/Voz7bnuzIM+WyDYoGwZ591jkT3I10kTV8iGY4taJelTdCkbMQ==","signatures":[{"sig":"MEQCICpr48zW1rJe3fBafZtscqxmoZFcmyMkkFnMLuVHUgECAiB306Rhhu3XC/+t6OQ+pd6wR1QZ60IJSu/gcu6A0ZuEfw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@1.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1336177},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"f8451b7e4098414651e32e97028dfc6a2f51688f","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:text":"tsx tests/text-test.ts","test:flags":"tsx tests/flags-test.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"zod":">=3.22","gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_1.6.0_1783700030498_0.9528479505007625","host":"s3://npm-registry-packages-npm-production"}},"1.6.1":{"name":"@adriangalilea/utils","version":"1.6.1","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@1.6.1","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"388a8f6a09a6a30105ec9276f9c5c6d040ffd54f","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-1.6.1.tgz","fileCount":238,"integrity":"sha512-OfiMsjA5SJPTWoF0JuEIXqZAR+w3FanUEVdTv54nYqAgwnB7u0enqvfpQctQ8cVY1v0GrBgag1oh5kWLxPxYtA==","signatures":[{"sig":"MEUCIAD6bKQFiPk3O6Uk+cWzyBAiTszkufoAsy0iROmVp62pAiEAq2NSy3MPSLsZEBSX2HGdLbiFynSagGILHQjhoCsW8LU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@1.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1336241},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"580f3a5e97aca4a4d68255f88c39be66c48c7eba","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:text":"tsx tests/text-test.ts","test:flags":"tsx tests/flags-test.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"zod":">=3.22","gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_1.6.1_1783700535185_0.7681069203158892","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"@adriangalilea/utils","version":"1.7.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@1.7.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"ee83a0019189216f4b9bc4ee964693bb92f826d8","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-1.7.0.tgz","fileCount":238,"integrity":"sha512-qYoe1pYTleAi45vla1h43WI3OM8DJqnf7RR459YWadBickOJTYYWwUiLGgoA5h7dl7Y3OYXcABuUKmU62zqBpw==","signatures":[{"sig":"MEUCIQDn42lXUJ9e+jxqDK6h+/66bnMzmQANLN2aJoKPy0I2WAIgHR0uzqH0tzMbq4MqyJaJvNLb/EWZw1hKiTlPipY8zEU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@1.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1337324},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"ea9268d020fc41534b9966c2459c5aa2ad2520b2","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:text":"tsx tests/text-test.ts","test:flags":"tsx tests/flags-test.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"zod":">=3.22","gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_1.7.0_1783701171037_0.7328813410609891","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"@adriangalilea/utils","version":"1.8.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@1.8.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"9088b5e4c5325b1e406ea882047485973c158766","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-1.8.0.tgz","fileCount":238,"integrity":"sha512-dR0px0lYwjkOgZX0Pn5ziekwnDOlfUC9qKwf29vQ4KExlcxge1Nm2TjCGTl7N44xxXClSbDVSOh5fCQXTMyNWQ==","signatures":[{"sig":"MEQCIDB4G9LYMwWmeiog8RlD4wxylXTnkpgqMefbTxK1GI/DAiACox6W97YWKiLSr8y8KXvhaXT7JJLn/ICZcey3VlWzuQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@1.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1340652},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"da8abb247163f2986c491b3fc261c322c2e9eb6d","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:text":"tsx tests/text-test.ts","test:flags":"tsx tests/flags-test.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"zod":">=3.22","gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_1.8.0_1783723555622_0.6291784869450321","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"name":"@adriangalilea/utils","version":"1.9.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@1.9.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"0446c5bf1104f54a210d659254e5364262bf6abd","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-1.9.0.tgz","fileCount":238,"integrity":"sha512-ePrgcL4SeDESLrlxg3qJaKSEe4Ionlbv4c/vJLOWtBG+SAnCxMi4Ogff8vvqXW/yFcThmkmmLEfUyn99e/S9RA==","signatures":[{"sig":"MEUCIE/kpQhGjzrbrk6WBNFhEtegIXgVD9NKY+qMUe0ZAxV2AiEAvtYRE7JuwiP/TUhDcZhDPRT4grvLCbkv7UfC1XAPzww=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@1.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1346417},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"03719467b3f172902e2b7780f46755f5c695f32e","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:text":"tsx tests/text-test.ts","test:flags":"tsx tests/flags-test.ts","type-check":"tsc --noEmit","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"zod":">=3.22","gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_1.9.0_1783726197762_0.8843249176752281","host":"s3://npm-registry-packages-npm-production"}},"1.10.0":{"name":"@adriangalilea/utils","version":"1.10.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@1.10.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"c1ae97c1922858a76d80479c198b8fa3121a8870","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-1.10.0.tgz","fileCount":242,"integrity":"sha512-hYsowPab47MrgT97ajlLlSO5tvDnilEBbubtubsh9ivw4O4XzlOmnkyuE8zUziocPcu8TOoT7AOWLMTXpIBjfg==","signatures":[{"sig":"MEUCIDEP0mNTS7ncngbh44LBpgOc4YgiPVd1hydG9Fc5Jm/TAiEAybhn3Lh8KLDWyRjyWGIVE5KySpdbyB/0wr2yc28/9/Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@1.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1353811},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"9a8f1fce5b633584a8fa0b1ce38ddbb3ed5450af","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:text":"tsx tests/text-test.ts","test:flags":"tsx tests/flags-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"zod":">=3.22","gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_1.10.0_1783764654358_0.06398479858492179","host":"s3://npm-registry-packages-npm-production"}},"1.10.1":{"name":"@adriangalilea/utils","version":"1.10.1","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@1.10.1","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"20ad7866816e3c903aef3afc311f0885cdb13523","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-1.10.1.tgz","fileCount":242,"integrity":"sha512-lafH1UzlyPil+j9aYnwUQnRKfNWv44EAsoqOhO3T4/GuHVZ51feE2SWwovxWWBEu0fo2VWDy/xjfTCkN8ivpmw==","signatures":[{"sig":"MEUCIQCwjbFiU41J4aOIyg2r8oNrF/xLw3zsrFQzA9b43hknLwIgaS3C8nWGc9ZlB0ctLJHCmkq1DqA9eLkYqk8/BtUZYSE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@1.10.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1356884},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"03472630f68ba2d73143679da30cbd916704c4d2","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:text":"tsx tests/text-test.ts","test:flags":"tsx tests/flags-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"zod":">=3.22","gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_1.10.1_1783766394589_0.2524046058023912","host":"s3://npm-registry-packages-npm-production"}},"1.11.0":{"name":"@adriangalilea/utils","version":"1.11.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@1.11.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"e783f97b88711ab529b6a89edcfc4b536ac61b04","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-1.11.0.tgz","fileCount":246,"integrity":"sha512-PXul/ZwWvC6YdPcnM1+VEt/x4zzYtWQHd/ywD7vc6uN/oivP/D2AD6aXULsF4mFOQ2CaDT8tgwOafAWQNA1Xfg==","signatures":[{"sig":"MEQCIAyjzXnAfkVEM8QuIRi3DlSBjqEyfNc6+F1cladJU8FkAiBGBF+typ3oaLPVQ73YFgvoF2E/P19d54Ya4Uu63Leh+w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@1.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1361790},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"76f5bddc936dac8a381d2ea874570a950882fa20","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"zod":">=3.22","gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_1.11.0_1783767256275_0.21815415999536358","host":"s3://npm-registry-packages-npm-production"}},"1.12.0":{"name":"@adriangalilea/utils","version":"1.12.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@1.12.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"6334546dd09e554940a7022fb5eeb5e9cf0b9b92","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-1.12.0.tgz","fileCount":246,"integrity":"sha512-JfyrPVzMhoG9MLBJE94BlmdpWJEqFZpnxrn6pHxx/hs7nCUHrEa1kBjgiSX2jsHAZZ5XgP0SPUxgOecwdVE2jg==","signatures":[{"sig":"MEUCIG/KZGK/FeHSkrd8rkX6zjUbaLaoHy5R2gTHjlTq01nyAiEA1WMz4GvgQfqL41a0Mj5NkBaa+zspUYa7McIikYYfWLg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@1.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1368353},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"ec863b140d14b2427e8878e6341c852ae928d018","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"zod":">=3.22","gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_1.12.0_1783767879290_0.1853946209798918","host":"s3://npm-registry-packages-npm-production"}},"1.13.0":{"name":"@adriangalilea/utils","version":"1.13.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@1.13.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"5ec039a4158f7d54e6c0cfbefad4164c4d219094","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-1.13.0.tgz","fileCount":246,"integrity":"sha512-eOjKbDl81DRe7HxhA8aHZHTitbr4B2O1vmF5eDaCuqy2P/UjOMQVtKRprydRXOw0R5OxfUomU+lZzCrHxTb9qw==","signatures":[{"sig":"MEQCIAmeRaIkw6tW0cws/i7opMBiaBniwyj7HdDv5FmUL6k0AiBdmoyx6a4P6YG6ROo+w+5zzIK6zYJCor+0FuSXu8Zz7Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@1.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1368670},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"6586a4e8c6b9816f65d533037d0e5a58ed5fd9b9","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"zod":">=3.22","gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_1.13.0_1783770432351_0.6205939030212824","host":"s3://npm-registry-packages-npm-production"}},"1.14.0":{"name":"@adriangalilea/utils","version":"1.14.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@1.14.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"66a4b69df524747872de040b685a0310f5f5545c","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-1.14.0.tgz","fileCount":246,"integrity":"sha512-siGVVNkVwS6TaKbwnMnFRNUz8QRpU1XohcCSAgTZd0myo86C43wP46DwNULpHag3EH5BI4hNx+MWTXiuspvXzQ==","signatures":[{"sig":"MEUCIQC2wwAvR3HqdXSgzcCgnNkAXj6Zd1YIFh1HaIiwxzi6oQIgdmUZYWs+iq0ohphRS+3hIfCLyTddiOnmgtORNCu2TaM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@1.14.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1370089},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"999c459c38a6f7fe319f91a7868d2d4fb44a437d","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"zod":">=3.22","gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_1.14.0_1783770900204_0.02729333591157146","host":"s3://npm-registry-packages-npm-production"}},"1.14.1":{"name":"@adriangalilea/utils","version":"1.14.1","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@1.14.1","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"7cd7712b865136c57376bb756d5a36ed17350097","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-1.14.1.tgz","fileCount":246,"integrity":"sha512-Dyw7xJy6PwtZsPSaVQRQHaLTL2n699Rv0eKLXGMdBHWTi+zmziyL2YIgvHgjBM3CxblA2lT0Srrul+to8HcJdA==","signatures":[{"sig":"MEUCIQC8WyVAyLMmWQ7UJK6R/8aa5Iy2db3wSQTDL7/6jqDurwIgL6Nx1MNJOhrI0s916+K3+6jfFfa4h9uFnJpPh0puZrs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@1.14.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1370187},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"322efbe0c71f59b2f8f977fa0ce77f30a508dc17","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"zod":">=3.22","gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_1.14.1_1783798761176_0.6578664676451753","host":"s3://npm-registry-packages-npm-production"}},"1.15.0":{"name":"@adriangalilea/utils","version":"1.15.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@1.15.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"335d2f8843e73ccb631ca330a2e4a13570b7ae76","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-1.15.0.tgz","fileCount":246,"integrity":"sha512-uy6QXzWhotmL7Ia8izMB/Rz1Tl/uppivJKUEgv9+ruvh69AXDFRXYKcAmBF/GpZyGi5RecbhnKwzQAnBXCaa1w==","signatures":[{"sig":"MEUCIQCqXVvnR+xQ/oYjGCtJx5shcupaUOnPmfhQcKNxM3BL8wIgKVmBB+pUVxZeH64+GKDWTc91yOAU/nel6V7uEJaMjDc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@1.15.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1371176},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"78cf5fca081a97faadc23549d18a01a6b5e8b531","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1"},"peerDependencies":{"zod":">=3.22","gramio":">=0.10.0","marked":">=12","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0"},"peerDependenciesMeta":{"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_1.15.0_1783817778043_0.03071408676767029","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@adriangalilea/utils","version":"2.0.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.0.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"914aa87ed26e028906498b0b67efa8e586ebc519","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.0.0.tgz","fileCount":250,"integrity":"sha512-0gYEgkKV0lqO4CGkPU8BGtZTzCOl7mt5oi/h1Kkr6JUruVK0Mf9aT8I6ZHtE6dYuObtW/FUL86fbuK2Hr+XMRg==","signatures":[{"sig":"MEYCIQDNoaenmtkXDWggWdZ/mUxx4Lfha8YvL89OOWpXP3lJigIhAKQEW3GjDFtR+f5UMGa39GE5oviSI+L+npL6AiHAZBn8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1399513},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"31695f54b9a70d4629e415830f198344ac61c056","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.0.0_1783875965400_0.29893717975944645","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@adriangalilea/utils","version":"2.0.1","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.0.1","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"6dfe81cef003b9cbc8b86fa34876050fa7ebd141","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.0.1.tgz","fileCount":250,"integrity":"sha512-KyvRLuxp49ygeq+MHjeoo7OdUEFoJHDgIlqBn0T7FKtMhtecxTMHfk4k2InRtgSWoqOV5yqYqL6aGhShLwvObw==","signatures":[{"sig":"MEUCIFgkQu1lYgVDw05MIl+iEcdbUXJNpqOjtrHebfOEnJZ/AiEAh0rhxtjjlSht1WSFCf3fH6ObWiBZozZkQeaSIXs4+oA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1399793},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"8cbc45067122b097502db4acffc25f66b9e59fb9","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.0.1_1783876547382_0.4421980920898003","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@adriangalilea/utils","version":"2.1.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.1.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"631f8f961c5e24adfa3e1e93cbffb4d58ad4dcc7","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.1.0.tgz","fileCount":250,"integrity":"sha512-RAB7W8CVy/LmbrAfzSNvF5H8eh+bNVumiqGU46cZOCKNmqYG1HAzdXT9vqBlo65tnDVdZkKn8D/Di4ipJLewIw==","signatures":[{"sig":"MEYCIQD/Qb6Xlzmbv5wfsDKSqbhW+3p+5zwe/0qN5JIMwa/C3QIhAPWbB5PDPHOYVHYDNbPZGXnsOA6ljqhQ+G5mIK/4574y","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1413505},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"58ef96fc4d22624fe71f9df097d55272263d66cd","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.1.0_1783878275084_0.7530100280405596","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"@adriangalilea/utils","version":"2.2.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.2.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"ba2980581aa0a208e1eb98e2b8777a882b80fe8f","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.2.0.tgz","fileCount":254,"integrity":"sha512-QdEnytdDFzYO8QmQFBad80VqXpJz600AEnhP72lL+v8LRd1Bv3K0dFFiUPIJ4paCDWevcVh03ULQVoSxABgOuQ==","signatures":[{"sig":"MEYCIQD4GMVHbDM4qCSjpvFpiBJgX2X2p2Q13H8TiBRua+FVzQIhANXKF9lXpAz6W6gWR+TrPgBfw39Yhm18I5EWo2ojNeHJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1415763},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"d9fa52df29dd72861ae87ded1bace4f58967dd1c","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.2.0_1783879128742_0.37808841003382665","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"@adriangalilea/utils","version":"2.3.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.3.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"f48106ac65ac11f254a7e8c85dbbcb5c6b64ecb9","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.3.0.tgz","fileCount":258,"integrity":"sha512-QY1CfsrVcyvTjhFUykrgOWHNoV9t7LyCtThcGyTMM+Fa0ql/fpwPLrVZ2Q6xWja1O1nJdX6e+Okv5oJw6N40nQ==","signatures":[{"sig":"MEYCIQC/Sv1kY8Otcl++lTGR0/RSI3i4yBcXpVYFmy/X36NzuQIhAMqO6m4YCGWSyQ8LpIw1TUKSRrKuGa0/TxpVwSP0GQeC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1438395},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"7b68a7516697db68edba0f81751695876acb8a54","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.3.0_1783880045756_0.10369839570517381","host":"s3://npm-registry-packages-npm-production"}},"2.3.1":{"name":"@adriangalilea/utils","version":"2.3.1","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.3.1","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"00bda8ed3bc6a180d3be6d946930d0cdd857dc7b","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.3.1.tgz","fileCount":258,"integrity":"sha512-bpJtti0WprLTYzOf2LGB1Ve/PpAOZENPHjYenCOAAbG878V9QASkmQ4wFPVGQjMiNYd67oAyqwPTM1r4fm0lbA==","signatures":[{"sig":"MEQCIGtW0WPJ5HxGZE4+ra7P3Ts+tHzRV8erF+NNUqUhuP9zAiAQK+WOedrfXOuTckr97GeD3+iwwXbL7hLtQZpzb6hAvQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1440138},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"ef6032309d577d98fb8d017e71ebb0e93f582253","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.3.1_1783881055651_0.7726507105148173","host":"s3://npm-registry-packages-npm-production"}},"2.4.0":{"name":"@adriangalilea/utils","version":"2.4.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.4.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"346f83d44dbbeba22237b3e84429b708c110c90e","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.4.0.tgz","fileCount":258,"integrity":"sha512-pBIPb6F4uY8hwyabgrOGTBYq/8X0EARwqbCym1LSHD0NHJln3hAWlGGOcy2y70Uy1R9ULDwMlNDCQWf2QddA9Q==","signatures":[{"sig":"MEQCIGO2NGdX3+Qv7iGF6LbTOOMn1u/nNiBdP5/sPAenLKySAiBrxkdfH+nAic1oKOR0QtwCUMv0oGxAW7vtZJQpnkYHyg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1444962},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"2c6abe57d28a1f2adf4b355b59fc742ceaf2133c","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.4.0_1783883449256_0.3540969869016297","host":"s3://npm-registry-packages-npm-production"}},"2.5.0":{"name":"@adriangalilea/utils","version":"2.5.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.5.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"2ea09f287dc3f22f5ca8605eb3bbcab86e62e8ad","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.5.0.tgz","fileCount":258,"integrity":"sha512-r5EThVui4WEMObCRL8hH6M6M+hK93yoQZU4uz2a9GfKNq4lec8cgJe5kheqiSDIu7N5PVAJNEXFvMS5VoEqthQ==","signatures":[{"sig":"MEUCIQCcf273Dptq9NI1QDCmvROgY20YL3idyoLSkYnnJXohAQIgItbaJzT0FAPbO9qunRcIUoMINdd/6KK8edWURT+0J9g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1446290},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"18fa626962111dd8eed19c597f60bbc861c52d02","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.5.0_1783888660096_0.09045711624924446","host":"s3://npm-registry-packages-npm-production"}},"2.6.0":{"name":"@adriangalilea/utils","version":"2.6.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.6.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"f8938c01be7eeca7570fbe72b0dfa02328297faf","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.6.0.tgz","fileCount":258,"integrity":"sha512-qJSsiWV5R61ppumz2MaUBq6qCIwRE2qQjahghv90uFlNIn9ApXofuvClIEVciyWmir60/GY6Xq9fivMGufT+ww==","signatures":[{"sig":"MEYCIQDeVEt2AcRn0ZsfCKNGyb0z3XHrejDJe+NafGMF4+X5cAIhAOSTZLmfdVJ60e4z876HV6Za+zUS6sCiOtxIIx+O2pOE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1446893},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"}},"gitHead":"83471b375eb7cdc2fd563a263c22267a5f4a7281","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.6.0_1783888824718_0.16614238340527887","host":"s3://npm-registry-packages-npm-production"}},"2.7.0":{"name":"@adriangalilea/utils","version":"2.7.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.7.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"2c631b1427d1b78c0909b9a8fcdf2131c077eb89","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.7.0.tgz","fileCount":262,"integrity":"sha512-3gNVtDs1oBk/Zi1exlfGboGcr9uLSsQQzPwyvt8qTPtCqRp8wIPP64Q8htCdTue0X5zH4F8K3GBzvwZKzKimZw==","signatures":[{"sig":"MEUCIQCPXj1lRgd5EZ3lDCKhSlhyBlhzCuMwhh7vQSJIGnxI6AIgT+71fvsCCPCXhXL2QWelF0CLisvZHJ2H37DgUofoN9I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1454616},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"}},"gitHead":"35592178192d8efc3611cec98cf2ac613a472181","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.7.0_1783891735475_0.33579535503349534","host":"s3://npm-registry-packages-npm-production"}},"2.8.0":{"name":"@adriangalilea/utils","version":"2.8.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.8.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"2a700ad2a1a136e51ceb1532346c15613c83a038","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.8.0.tgz","fileCount":266,"integrity":"sha512-WFIXL4CwrXPB/P0K5B1PtGRfvAO/MwggbsPWZiEJXqgXHMgrM/sXgw0vnRCK2hUo6pjftE2wZNcZQXYh683SRQ==","signatures":[{"sig":"MEUCIQDTKQuR7U76gOzTbER9Y0yYRA434CyArHtwHr8X6JrzlwIgcsdKAPi5HXxD58ii7qnSENJ/NFKLDQyezCVTNiWsHoY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1468635},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"}},"gitHead":"83aa089cd4285571ffb5a9c2d5bdf4ee07a47129","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.8.0_1783893050591_0.5382209823588473","host":"s3://npm-registry-packages-npm-production"}},"2.9.0":{"name":"@adriangalilea/utils","version":"2.9.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.9.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"bfa8f2ce1a03f22912ae09040d4a0a12e1bbdc16","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.9.0.tgz","fileCount":266,"integrity":"sha512-il/pph8SNsxwoido2vLBCkEJiT6BQmQwhn9A2tqFYq2hQk29whbfpVswpXQA8Y5AGrfXu7RIBknx2W7Y5ne2BQ==","signatures":[{"sig":"MEQCIHFCLKZX62usTqyktNBClj7schSrBOfAum8/mM6NZKMzAiBKQLWu+pN7GGkDcFGPLUcfT/ndLH9Fh44RkaMDJCdQOg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1471179},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"}},"gitHead":"452a854df53458c9343daef0fb56c8d53e7c7c8a","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:self-echo":"tsx tests/self-echo-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.9.0_1783926242276_0.1627454851380079","host":"s3://npm-registry-packages-npm-production"}},"2.10.0":{"name":"@adriangalilea/utils","version":"2.10.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.10.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"2275e5aebd82dd1699905b2d96ce3ae407796981","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.10.0.tgz","fileCount":282,"integrity":"sha512-IiDI+OP0tWTaHeFdaQX+gpTVsvdfjNAeJweRBvhuSv+zy6zkmKCD6tuGfl4/jyLlG26CrarwDr12ACZTAy/IKA==","signatures":[{"sig":"MEYCIQD2gtOSP65I4nc57BYlgKtWOHdSbJ/EU5b/AbXZYwMvXAIhAKJXZWZnmX2RFZLXtYJWR8VXrFTQKY8dJNrR7P8qJweY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1551536},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"}},"gitHead":"9625295a41129c5fbbd17b88d3659261b7f364d2","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:self-echo":"tsx tests/self-echo-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.10.0_1783941935192_0.45774417644718124","host":"s3://npm-registry-packages-npm-production"}},"2.11.0":{"name":"@adriangalilea/utils","version":"2.11.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.11.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"d4b287a1370bcf1ce9ffaca996123f519d74ec32","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.11.0.tgz","fileCount":282,"integrity":"sha512-kDNEC8QlNqht/UGL+vrNrk1u2RONmQP/bQ30bnK1qZTg/Ir99l7ZaTytoBnN5SDkDfP/lwbFj3g86VlTrM6aRA==","signatures":[{"sig":"MEYCIQDp8l15Vp6QB3GzHsHGytuwn6UUqoPjqTl6hqwS1H6NswIhAIOcvwUrh99Yfogfl6oTobMkqc0NA6XbqZZN0STSwI/U","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1558675},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"}},"gitHead":"88004062e081d1b50f761f22d0539b8a9d320c23","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:self-echo":"tsx tests/self-echo-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.11.0_1783942946305_0.07045331974973901","host":"s3://npm-registry-packages-npm-production"}},"2.12.0":{"name":"@adriangalilea/utils","version":"2.12.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.12.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"4fd0ca3cfa994cd1abf8d48fb6fea9bab6b270d5","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.12.0.tgz","fileCount":286,"integrity":"sha512-P0Kx+ho/E4HUpd/Y8Ct9tqp4S34/3roz0QLhtHq+1/PGALdw2OJcM/uE72p9jgnySkLFtx3uoeJepZBf2Qat5w==","signatures":[{"sig":"MEYCIQDmiuaWVFip/LJwBuPJ8YVSaTR56+j6QaJGF+cVaVCPiAIhAKo/ZY7jSUL1JI4KreGZp9ISE9z5ebQzDqRekJ6PT5wG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1573860},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"}},"gitHead":"56b39ff597d9186a35000787df3230707656a7f4","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:self-echo":"tsx tests/self-echo-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.12.0_1783943902730_0.5564439513495409","host":"s3://npm-registry-packages-npm-production"}},"2.13.0":{"name":"@adriangalilea/utils","version":"2.13.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.13.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"a8448793a534f8569fe068ce7702001f409798fe","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.13.0.tgz","fileCount":286,"integrity":"sha512-MPOCJv6AUJtx/cY987T0qKTpAnRHE6gZOHdqZknl+J3dU2Lxvg9do+4gOVERiv5KrBYiuVNSlwvQVkmuBx4Ong==","signatures":[{"sig":"MEUCIQD9+fWYyMAkP2INmGo6Cm/MW6nLEydyUaJaHiBS6FqOBgIgdeYC6BxPmRMh3J1s6VayFD2wjFhgXot9oIdC98h7Vns=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1575854},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"}},"gitHead":"85cc38f941f997e770c16b3bae757aa2c015efd8","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:self-echo":"tsx tests/self-echo-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.13.0_1783944245079_0.18830681594802567","host":"s3://npm-registry-packages-npm-production"}},"2.14.0":{"name":"@adriangalilea/utils","version":"2.14.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.14.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"27fe073c60355769e06cc13d3e7601850d582c6a","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.14.0.tgz","fileCount":290,"integrity":"sha512-HNk4WMl1Xoc8f/PMWWcAUuw+iMSUSLyzvGh/KdJgJSfSHJvmxJMGHjCex7atcuTmZxFpl7PU8/KqFoVv/ScozA==","signatures":[{"sig":"MEQCIBqMULOKRmOTL1iXztsGqiUdq96MPWEqagnTwrXPe1llAiBFb9RY0YYjtACdw8i4Y3arh+zEUWClDjeeU5CgrDyWnQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.14.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1586557},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"}},"gitHead":"1e7262034587273fab82c6e2d9b6cf42abb3ec93","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:self-echo":"tsx tests/self-echo-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.14.0_1783944932046_0.8419202974717295","host":"s3://npm-registry-packages-npm-production"}},"2.15.0":{"name":"@adriangalilea/utils","version":"2.15.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.15.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"019a89997ece56dbee46b7a8da954bdc175e9c37","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.15.0.tgz","fileCount":290,"integrity":"sha512-77F8qDbVu1/C/n2HQjupxA8FeykqdMp7jQKTi6UgMHlPfZCvOMP4EVzdaCR49kAr4SN42Zah5w8Q7B/leDIw+A==","signatures":[{"sig":"MEUCIQDkvj9ZkyvFd7RmxMRbLz/94GF+rwr20w+Fku3Oz6D/RwIgWQOzSro8MxG0AZBcWqJpc1YABa4AArn7SMe3z7wLzTs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.15.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1587256},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"}},"gitHead":"13742cfa8b35dbb18b9905ca173a9011daab7361","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:self-echo":"tsx tests/self-echo-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.15.0_1783945733090_0.19972721905120983","host":"s3://npm-registry-packages-npm-production"}},"2.16.0":{"name":"@adriangalilea/utils","version":"2.16.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.16.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"ce578a1cd5ecb710339af831b678f48585794d25","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.16.0.tgz","fileCount":294,"integrity":"sha512-bZuXqzYRFyzyBYQru5j2jLLfuzfCkmPTmpHOevPpZqtEFbvu+uVVxqyjjNKzH5u0GjRG4YmJh0cclffmvJWJfg==","signatures":[{"sig":"MEUCIQDr4WG/3dlJ9TpnJck523H1WleKX0z2ZmexJOo9H1g2NwIgbtyeJIHcSlJxJZfmQPWg7F6MuIqVwra0xm6df5pIXHA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.16.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1595836},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"}},"gitHead":"072e74adc811eb584c0a1fbc8a07e1103ba9afee","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.16.0_1783958519389_0.005228282854909727","host":"s3://npm-registry-packages-npm-production"}},"2.16.1":{"name":"@adriangalilea/utils","version":"2.16.1","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.16.1","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"eee2c146487e7ea7ac72d8ddf0f1ecedd3d26a19","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.16.1.tgz","fileCount":294,"integrity":"sha512-Z7Zvw92XyEI8TjTFjlQ1z9wLagqkWac4cO0ggMx+0wgGKfcn+5VUe2suGkWRRvkNI1VhzCVmtonoHT06GlfjBQ==","signatures":[{"sig":"MEYCIQCdPTxokG54ggjiiIEaUVy4pHdjXn8FxdSqwznQHV4aQAIhAKZMAZSc6cMi1qwIPJ8tDBOsWUBWjEcD2iJ38pNFSWfc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.16.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1596375},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"}},"gitHead":"c0d83ccb7be82da539e606cae2f7ecaa98d373ea","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.16.1_1783958719373_0.01879622012508997","host":"s3://npm-registry-packages-npm-production"}},"2.17.0":{"name":"@adriangalilea/utils","version":"2.17.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.17.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"e0744d94f15e1242c308af98a63f332e4035f947","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.17.0.tgz","fileCount":294,"integrity":"sha512-w7BqpLHI8XOJ/i2E2dks3553cYz4UkcTkdc7E7Kl3KBlgZQWgXX9IrF9c9ZXk7XMod0+G5qOnCNmuFOmGzB9Hw==","signatures":[{"sig":"MEUCIGdxjlrnRQmBMNLpUNTALPS0YMCBcOdY9xAD/lI7McyYAiEAp57tTTL5k2b4qLbzCpKtjEwFZOvbQZzrQ03swGjQpHM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.17.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1597898},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"}},"gitHead":"2e4e558057a4b998ce1517c06690d4ebe0a511c2","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.17.0_1783959396501_0.6676549458213974","host":"s3://npm-registry-packages-npm-production"}},"2.18.0":{"name":"@adriangalilea/utils","version":"2.18.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.18.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"68eb2fb6ded7639fad41be74551882be453ecf4f","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.18.0.tgz","fileCount":294,"integrity":"sha512-RdhhngVZK++MzcGoUTMS+VOqzZxrxn4Hhl1gBeYcvVbazk8hs8oxpnkXa2PbaIcZcr26EUqwNDDY4Ak9HeOI7A==","signatures":[{"sig":"MEQCIEKBymFwFl/PfePgi0aRmVPrRUDPGYEFC/biVGtMXA8QAiABdgsQRkWFN+rruAqXAisqV8vfRUuhYCRUOKb/iGNGgA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.18.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1636064},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"}},"gitHead":"a6164834425ebc071df8e2e87bab5fbcda1d4065","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.18.0_1783961299983_0.5273614127250748","host":"s3://npm-registry-packages-npm-production"}},"2.19.0":{"name":"@adriangalilea/utils","version":"2.19.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.19.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"795ebb6b3f6f4da2419647f494daa772d14a90c0","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.19.0.tgz","fileCount":294,"integrity":"sha512-iywSu+XGLG0AbpunqPd1+4uVgXPKEfrZlkI3ds28DvD9Aw0w2wgRXpGZFxTyxDZ24EkHYL+4YFTwVzb7rx7CwA==","signatures":[{"sig":"MEUCIEhWacx3nucosAE8g6yXspCyfXOPDoDyTIAdqweQ2NGHAiEAzJyV3Z2jBaDcQGNXeqzp9gUM6S/XCvEe3PDL0dRn95I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.19.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1637842},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"}},"gitHead":"dc3624fe11b6e5da758bab41b0393e2a70ab7345","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.19.0_1783961675534_0.25048591635371587","host":"s3://npm-registry-packages-npm-production"}},"2.20.0":{"name":"@adriangalilea/utils","version":"2.20.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.20.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"2e2c15f02a02740811ad0afa44cb2848dab22d9f","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.20.0.tgz","fileCount":294,"integrity":"sha512-qb+DI8zWbAtp7RuvuhcdhIyjihwnpo+wVJNkicg0LBRdWkuN1tCk6v1xPVYBzom9/6XCgTPLclGH/9aVcO7i/w==","signatures":[{"sig":"MEYCIQDur+NTgn3MXwmp23mWuwfg5NH2oYboM3BUWtn4NjjhvwIhAN/EbZiFp7oC9UPKKRIO+jGWg/2XE3M3Q1zkT/KCtKjh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.20.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1650490},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"}},"gitHead":"ad84bc3cbb110cdf03b083857d2a63b55e0c91b8","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.20.0_1783962129547_0.4157582289438706","host":"s3://npm-registry-packages-npm-production"}},"2.20.1":{"name":"@adriangalilea/utils","version":"2.20.1","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.20.1","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"87971faea028bb50b1ee9d25533b87cf134aef34","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.20.1.tgz","fileCount":294,"integrity":"sha512-iXzrGWKnd7c2FH7JPNQBrAqc3yS0l+euErg+7Rz7rVG6+al6nHlalmsSa+DlnGxpgO6aWF2oAaMzV+FXOHPXcA==","signatures":[{"sig":"MEUCIQDvgdrJc3t6xi5vdKnicmGhCO1T7j7PoeclxvdaMqp2lAIgJM50xuBDHJL58kir+6o6Ei5P+TtWp8V30wtHUSn8m/Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.20.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1651151},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"}},"gitHead":"c3213839bf3292f53f5bb17c5b2ed04863a707f3","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.20.1_1783962333269_0.4291631625548331","host":"s3://npm-registry-packages-npm-production"}},"2.21.0":{"name":"@adriangalilea/utils","version":"2.21.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.21.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"e2db0aeeb4e19d118cf6346f321fd6320de14ea6","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.21.0.tgz","fileCount":294,"integrity":"sha512-/cXn7SFAmjoQb5W8UDaCirlAJCICfbeql1abqOLtiyiuG1q6303TzFQGRtfh936+5KtwuBQQTfDqP2gM6sab9w==","signatures":[{"sig":"MEUCIQDeSXF9eiu2FH8oNCyyrwwa+hT1xwCoiT40++ttN0bDMwIgYO4O/ZInlC5HVl8ovMHQi+BnbLhykwEkVWgUuM6Oc04=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.21.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1648076},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"}},"gitHead":"9c398a5e1ffacfe0fed36a4d87974e86bc0437ec","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.21.0_1783964944548_0.06429911552597178","host":"s3://npm-registry-packages-npm-production"}},"2.21.1":{"name":"@adriangalilea/utils","version":"2.21.1","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.21.1","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"f5878f64b74d0b02cd94888ef8fe74e6ded3b9bc","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.21.1.tgz","fileCount":294,"integrity":"sha512-Nv1SbW8vNEOW59y4wRRmiRW+6h/6mSF2/ySy1icQ+EU4zR2ChoObpnYCp3J57uvM27vLoRHnoK+HJvzn6sYjkQ==","signatures":[{"sig":"MEQCIEAzqCVtB2Lpng/8uNn+qtTYrYRkmDiWy9gB+g3yS1CJAiBwNfFx0xXbMkwgZDWlERA0i20Osepft9hxeWJDW/hdAg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.21.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1648206},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"}},"gitHead":"f0452b2096682875b4edf163894efb2eb9e29bd9","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.21.1_1783971930191_0.5088203411719168","host":"s3://npm-registry-packages-npm-production"}},"2.22.0":{"name":"@adriangalilea/utils","version":"2.22.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.22.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"5c22bf254278763cd65092c50ad4c951e423a96d","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.22.0.tgz","fileCount":294,"integrity":"sha512-HGO2dskjp3LReH30BFqP0g5u2D23Pudfm9Uib1u3El8a/C1+80xE0M+vWKN6o53usINTtnMsJE2IBCXrqGtaaQ==","signatures":[{"sig":"MEQCICb471JS5cxtXXiqhz5Akm4BzRRvDV93lTP4pshMkPWZAiB60H4tzQXq6Rdz3Q4z6fUsJbFLAWG5HFFNi56oCCQWeA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.22.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1651011},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"}},"gitHead":"1d3e5de76dcfdf0dd4ae12306fff0c1d8fbc1c68","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.22.0_1784626341735_0.15726972995701893","host":"s3://npm-registry-packages-npm-production"}},"2.23.0":{"name":"@adriangalilea/utils","version":"2.23.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.23.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"5fb0b78758e07dc98bee51b9315160be5c1102b4","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.23.0.tgz","fileCount":298,"integrity":"sha512-Z1G9cF8H1U/97zhK9aifC/QzZlqEUEk6gILh+sDFum6mfEJE9wQSCvIwiFfcv+0H5K+zQRF1T12/Y2BPLYKskQ==","signatures":[{"sig":"MEUCIQCVXGhlD3P4mSVlx3B9Cp68W5PMdrt0AVXtpf8TM81eOwIgN6uA431xgy6F+7lqSRl2QTZAJ0I97s89vv9JttYJBuk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.23.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1662885},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/updates":{"types":"./dist/bot/updates.d.ts","default":"./dist/bot/updates.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"}},"gitHead":"d31345e8acda562510f73c1667974c669c704365","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:bot-updates":"tsx tests/bot-updates-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.23.0_1784627502851_0.6025134459663111","host":"s3://npm-registry-packages-npm-production"}},"2.24.0":{"name":"@adriangalilea/utils","version":"2.24.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.24.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"9c8a1f3220e007b0778c2cbaed569f4ec61596f4","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.24.0.tgz","fileCount":302,"integrity":"sha512-4ovI39oarz1WnZZ1yqu7HrqMK/DTcFaacmxRUa+WUhRIe8FINntFQs9+qUkUEX++w1rrlVM/7uQPFXpufJbZRA==","signatures":[{"sig":"MEUCIQDzRSnSQcns0AT/gagDOoV6g7WQyQtCETX22slwxXQU8QIgI1b55upAZsL4AsMhGnMVA+WcvKN4rW7+KD1CnobbpQE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.24.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1670330},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/updates":{"types":"./dist/bot/updates.d.ts","default":"./dist/bot/updates.js"},"./bot/announce":{"types":"./dist/bot/announce.d.ts","default":"./dist/bot/announce.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"}},"gitHead":"72f1d2f809da321f0ca3125782f2f7f32b0766ee","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:bot-updates":"tsx tests/bot-updates-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:bot-announce":"tsx tests/bot-announce-test.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.24.0_1784634670384_0.9095813832203106","host":"s3://npm-registry-packages-npm-production"}},"2.24.1":{"name":"@adriangalilea/utils","version":"2.24.1","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.24.1","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"af7bd0c0e4b12788226750807fa8b46c16597f53","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.24.1.tgz","fileCount":302,"integrity":"sha512-/96tFLm4SR/8cheVtjlNmBrXZbqKpepxqZQO3iBQyn61AVRLl2UVYVQX2FxkjbzwVOPXgdPb1ccXhLCj6eqiGg==","signatures":[{"sig":"MEUCICTGujWPM5G3MRA9SQwCOSP2uh0zhLWJJZ4K4gecZLGKAiEA0lxl/QQnmpGRrkYz4waOQP2Q1EXqJm/QCPv2xk/obvk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.24.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1670330},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/updates":{"types":"./dist/bot/updates.d.ts","default":"./dist/bot/updates.js"},"./bot/announce":{"types":"./dist/bot/announce.d.ts","default":"./dist/bot/announce.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"}},"gitHead":"34b781e52acdd69d1ab5ee379588662c585f2ed0","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:bot-updates":"tsx tests/bot-updates-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:bot-announce":"tsx tests/bot-announce-test.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.24.1_1784645389719_0.236950446291331","host":"s3://npm-registry-packages-npm-production"}},"2.25.0":{"name":"@adriangalilea/utils","version":"2.25.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.25.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"9366b82d689184d50ba3d0cce2a644499fe68f83","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.25.0.tgz","fileCount":302,"integrity":"sha512-GO08c853foXEu64MXhnfvxnHTo0Xb4yn1cUg9LEEvp4cJIJaiWTi1QbgzpacGNuF0ydPfOcmnbY/xE3ctBV/XA==","signatures":[{"sig":"MEUCIEoUeM4ImGwGnSypIMbgrc6O7DePytmRw1J77pXHL0TgAiEA/0OTlmY7iy9ZzDID2BtCOBQksMHpXIRvnSILQi16FOE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.25.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1678723},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/updates":{"types":"./dist/bot/updates.d.ts","default":"./dist/bot/updates.js"},"./bot/announce":{"types":"./dist/bot/announce.d.ts","default":"./dist/bot/announce.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"}},"gitHead":"c5b29a08b948aec23ae5ebf6e223c82aacc63afa","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:bot-updates":"tsx tests/bot-updates-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:bot-announce":"tsx tests/bot-announce-test.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.25.0_1785232539254_0.2785083276132978","host":"s3://npm-registry-packages-npm-production"}},"2.25.1":{"name":"@adriangalilea/utils","version":"2.25.1","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.25.1","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"f8829bdefe789c63dd8d6104cad92343427da940","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.25.1.tgz","fileCount":302,"integrity":"sha512-xdVF0m1dOMFXuvF10yXe0Rh9erLKh2H1VkiJtShUZMEgHqSWotcCHQ4fpKkFug8tflECBvsNOPjQxrzJrOJ31Q==","signatures":[{"sig":"MEYCIQCo+BGwkIXjyymty1LuOFFDaX+YEwLgJCTqeEGfiaUaLwIhAOwIGM3zTx3/toegOMAXNFaa8jxzpob5ncvonfSz6q72","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.25.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1681270},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/updates":{"types":"./dist/bot/updates.d.ts","default":"./dist/bot/updates.js"},"./bot/announce":{"types":"./dist/bot/announce.d.ts","default":"./dist/bot/announce.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"}},"gitHead":"69a9877251dec443cf190dc3b31ea3566c36c619","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:bot-updates":"tsx tests/bot-updates-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:bot-announce":"tsx tests/bot-announce-test.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.25.1_1785232890541_0.03617898790169183","host":"s3://npm-registry-packages-npm-production"}},"2.26.0":{"name":"@adriangalilea/utils","version":"2.26.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.26.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"b6e33c69f8216b52ad0a3462a1ccf7a85b83f18f","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.26.0.tgz","fileCount":326,"integrity":"sha512-ufza9BYYREo68Nk+QiNFoqOmtMygfVowSSBtqDZipkDj5Hd5gqoLmi97k5W/Fbd6yr0koxgDiEOhYJJfqPf7VQ==","signatures":[{"sig":"MEYCIQCPnv5HaLWCUX22T7GUe65DvhPZURFmEVDgtv495a+8lAIhAN0IJSkpXLu3s1rQy9P9qzNnJ/vZoH26iSM0BVnNxHUL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.26.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1690845},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/updates":{"types":"./dist/bot/updates.d.ts","default":"./dist/bot/updates.js"},"./bot/announce":{"types":"./dist/bot/announce.d.ts","default":"./dist/bot/announce.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"}},"gitHead":"a902a4b9cb51e28ad0a69ece5579ff159cb61e7d","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:bot-updates":"tsx tests/bot-updates-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:bot-announce":"tsx tests/bot-announce-test.ts","test:language-picker":"tsx tests/language-picker-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.26.0_1785233458037_0.003469623703314939","host":"s3://npm-registry-packages-npm-production"}},"2.27.0":{"name":"@adriangalilea/utils","version":"2.27.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.27.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"45b337547202bd9b1b7a8e1ca2140e3d7397d05e","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.27.0.tgz","fileCount":334,"integrity":"sha512-qNObQhsJVHp4fgil0csTGRu3JJr+nGelBGWncme7ZAMCWSFlRtA8WKDC2ND+58U5HTRS33RDtDUx02uyB9lkLw==","signatures":[{"sig":"MEQCIG0JeX6J3jwEK69BySZH2xBkFQBDXT6VgHPl6ojX+1HxAiAWkgkfUljhxQ+dJHpCsKW7cM3L6ZOzq9RCVVSpifYG+A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.27.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1724426},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/text":{"types":"./dist/bot/text.d.ts","default":"./dist/bot/text.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/updates":{"types":"./dist/bot/updates.d.ts","default":"./dist/bot/updates.js"},"./bot/announce":{"types":"./dist/bot/announce.d.ts","default":"./dist/bot/announce.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"},"./bot/update-identity":{"types":"./dist/bot/update-identity.d.ts","default":"./dist/bot/update-identity.js"}},"gitHead":"fc15f6a4e3d6eac83955c7ea88fb14222f16924b","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-text":"tsx tests/bot-text-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:bot-updates":"tsx tests/bot-updates-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:bot-announce":"tsx tests/bot-announce-test.ts","test:language-picker":"tsx tests/language-picker-test.ts","test:update-identity":"tsx tests/update-identity-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.27.0_1785833658926_0.5252469994550311","host":"s3://npm-registry-packages-npm-production"}},"2.28.0":{"name":"@adriangalilea/utils","version":"2.28.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.28.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"cae757ef49c35ea383c2fb6103c1353a0186076a","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.28.0.tgz","fileCount":342,"integrity":"sha512-xumKH25NYW3A9Zri6PWkPMPOI4nJSbskXjh2XiRx2PJ6lWlXOdmbigtC3FcmAaZDVSaQsmh85IlsijORIPlefw==","signatures":[{"sig":"MEUCIGOG/dcQeqrhnQgZYx+KAh244VxoJnl7PFvBzMfyYdvKAiEA4QWCdCEFRLYhM6mR4Votxdy6S/pW+Dt+1esyXwan1X0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.28.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1741955},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./ansi":{"types":"./dist/universal/ansi.d.ts","default":"./dist/universal/ansi.js"},"./time":{"types":"./dist/universal/time.d.ts","default":"./dist/universal/time.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/text":{"types":"./dist/bot/text.d.ts","default":"./dist/bot/text.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/updates":{"types":"./dist/bot/updates.d.ts","default":"./dist/bot/updates.js"},"./bot/announce":{"types":"./dist/bot/announce.d.ts","default":"./dist/bot/announce.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"},"./bot/update-identity":{"types":"./dist/bot/update-identity.d.ts","default":"./dist/bot/update-identity.js"}},"gitHead":"c6e596f702f05157193985dd7849a711137cfb7a","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-text":"tsx tests/bot-text-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:bot-updates":"tsx tests/bot-updates-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:bot-announce":"tsx tests/bot-announce-test.ts","test:language-picker":"tsx tests/language-picker-test.ts","test:update-identity":"tsx tests/update-identity-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.28.0_1785921509067_0.21894053786595613","host":"s3://npm-registry-packages-npm-production"}},"2.29.0":{"name":"@adriangalilea/utils","version":"2.29.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.29.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"39e82b33240c01efde50db3c34eaaa07aba505d4","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.29.0.tgz","fileCount":342,"integrity":"sha512-pDdcQ/+0Vt1BWE7NpuxcD0RcDtqGEye1SeHVIwmgjR4s6OJhDKX8sp6EeG8vOoNe7wN3sTUHKz887icdmG0+UQ==","signatures":[{"sig":"MEQCIDMfNBnnouBiWcHAwEl7yxf+nX9fhUFDDXv7lHFJysL9AiBLkltO3TD04Zhr0sK6sFE1bXN3yZPur85f6A4pwBpKeg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.29.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1742892},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./ansi":{"types":"./dist/universal/ansi.d.ts","default":"./dist/universal/ansi.js"},"./time":{"types":"./dist/universal/time.d.ts","default":"./dist/universal/time.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/text":{"types":"./dist/bot/text.d.ts","default":"./dist/bot/text.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/updates":{"types":"./dist/bot/updates.d.ts","default":"./dist/bot/updates.js"},"./bot/announce":{"types":"./dist/bot/announce.d.ts","default":"./dist/bot/announce.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"},"./bot/update-identity":{"types":"./dist/bot/update-identity.d.ts","default":"./dist/bot/update-identity.js"}},"gitHead":"fa32ff249db8ef65b80c173c420d64eb6233cdec","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-text":"tsx tests/bot-text-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:bot-updates":"tsx tests/bot-updates-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:bot-announce":"tsx tests/bot-announce-test.ts","test:language-picker":"tsx tests/language-picker-test.ts","test:update-identity":"tsx tests/update-identity-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.29.0_1786023868538_0.35622917065544235","host":"s3://npm-registry-packages-npm-production"}},"2.30.0":{"name":"@adriangalilea/utils","version":"2.30.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.30.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"6342bacbd06df564506e85e1da1737293ba3b7e8","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.30.0.tgz","fileCount":342,"integrity":"sha512-9oMj+kAqFcquffT+PhJwtRE/JPtFPLfT5LwLIRccuQEz0X1Pjm7IDXFfcbWYn6rXgWV6O9cScJCP0yITGtoPJA==","signatures":[{"sig":"MEUCIQCtDYw6N4HT412ETSIHTbZ5So4xN2FzfJ6kpsIeRaLiogIgKJAewAiwR4c1842JbDdl12DNmlP5JSt6tbv+93n+sKk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.30.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1748448},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./ansi":{"types":"./dist/universal/ansi.d.ts","default":"./dist/universal/ansi.js"},"./time":{"types":"./dist/universal/time.d.ts","default":"./dist/universal/time.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/text":{"types":"./dist/bot/text.d.ts","default":"./dist/bot/text.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/updates":{"types":"./dist/bot/updates.d.ts","default":"./dist/bot/updates.js"},"./bot/announce":{"types":"./dist/bot/announce.d.ts","default":"./dist/bot/announce.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"},"./bot/update-identity":{"types":"./dist/bot/update-identity.d.ts","default":"./dist/bot/update-identity.js"}},"gitHead":"9b51e6334e4386d6e002450dcfe47d70e9c69aeb","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-text":"tsx tests/bot-text-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:bot-updates":"tsx tests/bot-updates-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:bot-announce":"tsx tests/bot-announce-test.ts","test:language-picker":"tsx tests/language-picker-test.ts","test:update-identity":"tsx tests/update-identity-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.30.0_1786025326897_0.2317052238539261","host":"s3://npm-registry-packages-npm-production"}},"2.31.0":{"name":"@adriangalilea/utils","version":"2.31.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.31.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"c2bf754b678ca5d33814e259a078cbd3d567d9c4","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.31.0.tgz","fileCount":342,"integrity":"sha512-uhll+QZqADfgdgQ9GVGDanyP0MBZ1br4LCE4CcUF9E1iHBXyWr3mINm+P06n32e64LTR3Tqd89FjuqLyvy+EXw==","signatures":[{"sig":"MEYCIQCSPHvGbQpI4VmtO4QIt5EOvhSqnWQS+po7Xy3pEimEIwIhALptcBsfUMMktNkUBSGkbFlKyjRQymMKrZRzN7JDLCE+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.31.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1756159},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./ansi":{"types":"./dist/universal/ansi.d.ts","default":"./dist/universal/ansi.js"},"./time":{"types":"./dist/universal/time.d.ts","default":"./dist/universal/time.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/text":{"types":"./dist/bot/text.d.ts","default":"./dist/bot/text.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/updates":{"types":"./dist/bot/updates.d.ts","default":"./dist/bot/updates.js"},"./bot/announce":{"types":"./dist/bot/announce.d.ts","default":"./dist/bot/announce.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"},"./bot/update-identity":{"types":"./dist/bot/update-identity.d.ts","default":"./dist/bot/update-identity.js"}},"gitHead":"8e5f80e8b9623633a9d908de2bb1e642f992da55","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:log":"tsx tests/log-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-text":"tsx tests/bot-text-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:bot-updates":"tsx tests/bot-updates-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:bot-announce":"tsx tests/bot-announce-test.ts","test:language-picker":"tsx tests/language-picker-test.ts","test:update-identity":"tsx tests/update-identity-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.31.0_1786108965295_0.10954320904866988","host":"s3://npm-registry-packages-npm-production"}},"2.32.0":{"name":"@adriangalilea/utils","version":"2.32.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.32.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"209ce7bee927da0bd6397b5ac7d32a629481054c","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.32.0.tgz","fileCount":342,"integrity":"sha512-1n27T6CcPLKKyor/IsMIh3Hydc8Pf1oYdkaSUqNT4eNfoRRXTHV1DtqC428U9S34rONcRZyMAJX79/PqcoWbbg==","signatures":[{"sig":"MEQCIEwqTe0KxaH7d4zszlDq9Wh8ehVWtFpKF2e2Mp/uJx9FAiAnpHOw89SXKOFYF/VW1cLtmcU8GLwjwrHbGt2c210Ilw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.32.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1762818},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./ansi":{"types":"./dist/universal/ansi.d.ts","default":"./dist/universal/ansi.js"},"./time":{"types":"./dist/universal/time.d.ts","default":"./dist/universal/time.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/text":{"types":"./dist/bot/text.d.ts","default":"./dist/bot/text.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/updates":{"types":"./dist/bot/updates.d.ts","default":"./dist/bot/updates.js"},"./bot/announce":{"types":"./dist/bot/announce.d.ts","default":"./dist/bot/announce.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"},"./bot/update-identity":{"types":"./dist/bot/update-identity.d.ts","default":"./dist/bot/update-identity.js"}},"gitHead":"29316028a8822e271356e2a683347de7fe03846f","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:log":"tsx tests/log-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-text":"tsx tests/bot-text-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:bot-updates":"tsx tests/bot-updates-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:bot-announce":"tsx tests/bot-announce-test.ts","test:language-picker":"tsx tests/language-picker-test.ts","test:update-identity":"tsx tests/update-identity-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.16.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.32.0_1786299725335_0.4467905478303842","host":"s3://npm-registry-packages-npm-production"}},"2.33.0":{"name":"@adriangalilea/utils","version":"2.33.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.33.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"51689edcb77524d8cfcbdfc857e70da4d55b37b5","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.33.0.tgz","fileCount":342,"integrity":"sha512-/gNwT1aBJyzgH+7e2zS3kHO4neSUajW4OBYhxxPpqT/sBid3y5W5ZvWON19WknwvZ2clBF02TQcwI9KZNtnbMg==","signatures":[{"sig":"MEYCIQDv4+IR5lpojXRgCGxnuENbLEGUZ8M0UEHLzE+4w8BrUgIhAJKAEiADZCFpo4A2MyrJ7e/e7Suy0vTygZfKGyU+N4hp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.33.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1763431},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./ansi":{"types":"./dist/universal/ansi.d.ts","default":"./dist/universal/ansi.js"},"./time":{"types":"./dist/universal/time.d.ts","default":"./dist/universal/time.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/text":{"types":"./dist/bot/text.d.ts","default":"./dist/bot/text.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/updates":{"types":"./dist/bot/updates.d.ts","default":"./dist/bot/updates.js"},"./bot/announce":{"types":"./dist/bot/announce.d.ts","default":"./dist/bot/announce.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"},"./bot/update-identity":{"types":"./dist/bot/update-identity.d.ts","default":"./dist/bot/update-identity.js"}},"gitHead":"e436053adf1ae6e6892ed75cbb374a4d8c12fa2c","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:log":"tsx tests/log-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-text":"tsx tests/bot-text-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:bot-updates":"tsx tests/bot-updates-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:bot-announce":"tsx tests/bot-announce-test.ts","test:language-picker":"tsx tests/language-picker-test.ts","test:update-identity":"tsx tests/update-identity-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.17.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.33.0_1786899881381_0.1561099648675246","host":"s3://npm-registry-packages-npm-production"}},"2.34.0":{"name":"@adriangalilea/utils","version":"2.34.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.34.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"d96fe743ad7c1810e339d0f8d436fbc8a2c4b0c7","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.34.0.tgz","fileCount":342,"integrity":"sha512-wB2Ktljt9uiRmxD5eqwIXRtwAS3ePjO7InVG9g5ARGyxCXFg0nmJFqrpsUwRGgfwy64PBm60LQ2PHV5sYuz35w==","signatures":[{"sig":"MEQCIDJy4+9fkEbK/9tPhiPHZ2hPwGaQk6Ngsp5YZr/l0t0dAiAE17pU7nkhc3HUCkuV5swdrpYe6vW8Gqpja7uHfvjEIg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.34.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1765567},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./ansi":{"types":"./dist/universal/ansi.d.ts","default":"./dist/universal/ansi.js"},"./time":{"types":"./dist/universal/time.d.ts","default":"./dist/universal/time.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/text":{"types":"./dist/bot/text.d.ts","default":"./dist/bot/text.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/updates":{"types":"./dist/bot/updates.d.ts","default":"./dist/bot/updates.js"},"./bot/announce":{"types":"./dist/bot/announce.d.ts","default":"./dist/bot/announce.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"},"./bot/update-identity":{"types":"./dist/bot/update-identity.d.ts","default":"./dist/bot/update-identity.js"}},"gitHead":"fafc2a19208f2051798da16dd6f9e6929deb3a11","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:log":"tsx tests/log-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-text":"tsx tests/bot-text-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:bot-updates":"tsx tests/bot-updates-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:bot-announce":"tsx tests/bot-announce-test.ts","test:language-picker":"tsx tests/language-picker-test.ts","test:update-identity":"tsx tests/update-identity-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.17.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.34.0_1786901451288_0.7626955174342942","host":"s3://npm-registry-packages-npm-production"}},"2.35.0":{"name":"@adriangalilea/utils","version":"2.35.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.35.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"1249279091301eaec449fed0e6d95525929858ab","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.35.0.tgz","fileCount":342,"integrity":"sha512-XiYje1mFyj4qgMwajF0241W3woDj0N4JUUebIVgnOgWQTvH9xYFug4Ptzv6K8tr9AvbU1xTu2QTSnShdPtQK/g==","signatures":[{"sig":"MEYCIQDKWlUt1zheFdak77Eo6S6gXm8uqoU9VQ5NVfRfGlkxGgIhAJHyMHzq0FrCzZFJQkgNLkQ7ZmyVhJX6mkQ0L4A2sRGR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.35.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1766578},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./ansi":{"types":"./dist/universal/ansi.d.ts","default":"./dist/universal/ansi.js"},"./time":{"types":"./dist/universal/time.d.ts","default":"./dist/universal/time.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/text":{"types":"./dist/bot/text.d.ts","default":"./dist/bot/text.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/updates":{"types":"./dist/bot/updates.d.ts","default":"./dist/bot/updates.js"},"./bot/announce":{"types":"./dist/bot/announce.d.ts","default":"./dist/bot/announce.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"},"./bot/update-identity":{"types":"./dist/bot/update-identity.d.ts","default":"./dist/bot/update-identity.js"}},"gitHead":"00bedbd0f8a541c16eada43ca0a3c18860b38384","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:log":"tsx tests/log-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-text":"tsx tests/bot-text-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:bot-updates":"tsx tests/bot-updates-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:bot-announce":"tsx tests/bot-announce-test.ts","test:language-picker":"tsx tests/language-picker-test.ts","test:update-identity":"tsx tests/update-identity-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.17.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.35.0_1787050137667_0.19170634219032556","host":"s3://npm-registry-packages-npm-production"}},"2.35.1":{"name":"@adriangalilea/utils","version":"2.35.1","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.35.1","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"ee52bff168ee9fab89f2da83289133b6456b1687","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.35.1.tgz","fileCount":342,"integrity":"sha512-bK/sgt+1OrGr2j1qph3L3RwxaWPRTiaNoWEhMUJ3HqTalQmKJH6thWCqtNKJe+x3SPHCoTM6WIqoLBhJjvlmwQ==","signatures":[{"sig":"MEQCIH8f6x8E/5qS1jNSEYy6M9vP1G6kPJpuztFBaOPpCb0XAiA/MikMqiwHYmhvvHWbl/tDyd6cwRCAfm08WB4BHkF2lQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.35.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1766753},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./ansi":{"types":"./dist/universal/ansi.d.ts","default":"./dist/universal/ansi.js"},"./time":{"types":"./dist/universal/time.d.ts","default":"./dist/universal/time.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/text":{"types":"./dist/bot/text.d.ts","default":"./dist/bot/text.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/updates":{"types":"./dist/bot/updates.d.ts","default":"./dist/bot/updates.js"},"./bot/announce":{"types":"./dist/bot/announce.d.ts","default":"./dist/bot/announce.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"},"./bot/update-identity":{"types":"./dist/bot/update-identity.d.ts","default":"./dist/bot/update-identity.js"}},"gitHead":"3b0553c83d878796af952eb4c38fd72d81f98706","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:log":"tsx tests/log-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-text":"tsx tests/bot-text-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:llm-reset":"tsx tests/llm-reset-test.ts","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:bot-updates":"tsx tests/bot-updates-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:bot-announce":"tsx tests/bot-announce-test.ts","test:language-picker":"tsx tests/language-picker-test.ts","test:update-identity":"tsx tests/update-identity-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.17.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.35.1_1787837847012_0.8163353130912392","host":"s3://npm-registry-packages-npm-production"}},"2.36.0":{"name":"@adriangalilea/utils","version":"2.36.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.36.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"20e568232f1e85d86d930a029f6d3dd011150030","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.36.0.tgz","fileCount":342,"integrity":"sha512-pZL2y1fwTlVnQKeZZql/HeDjkzSsmpXS2I92VCHKj02ZTYLyUlvf8wUlxYrZ6nwTW1pJVhsRwJxOu+SUEAM2CA==","signatures":[{"sig":"MEYCIQCHziZLsGBSrgHs7P4/tTzctHdlVMIPlDzg60tUZrreyAIhANLDZY5FVL4E2bgxd794s7ZMqJB5HWEimy9GGQR/Fa8t","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.36.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1768546},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./ansi":{"types":"./dist/universal/ansi.d.ts","default":"./dist/universal/ansi.js"},"./time":{"types":"./dist/universal/time.d.ts","default":"./dist/universal/time.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/text":{"types":"./dist/bot/text.d.ts","default":"./dist/bot/text.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/updates":{"types":"./dist/bot/updates.d.ts","default":"./dist/bot/updates.js"},"./bot/announce":{"types":"./dist/bot/announce.d.ts","default":"./dist/bot/announce.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"},"./bot/update-identity":{"types":"./dist/bot/update-identity.d.ts","default":"./dist/bot/update-identity.js"}},"gitHead":"e6b125bb4c6ff1d1035f3eca36f5b0429ca2ca4b","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:log":"tsx tests/log-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-text":"tsx tests/bot-text-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:llm-reset":"tsx tests/llm-reset-test.ts","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:bot-updates":"tsx tests/bot-updates-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:bot-announce":"tsx tests/bot-announce-test.ts","test:language-picker":"tsx tests/language-picker-test.ts","test:update-identity":"tsx tests/update-identity-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.17.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.36.0_1787851952456_0.2314269922898038","host":"s3://npm-registry-packages-npm-production"}},"2.36.1":{"name":"@adriangalilea/utils","version":"2.36.1","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.36.1","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"54efe47e1b74febfe51741f81ac627a042758145","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.36.1.tgz","fileCount":342,"integrity":"sha512-lpLZlNztucoHwi1yiJ4UlX/HB6jVCCzPcZJlQlpYV9AB+s6Q1P2B05hY8t+IjdnColf9+ifmELk+Q2mdKINfmg==","signatures":[{"sig":"MEUCIC57H5uh+2fKmpeWdLaLPly66PGGyaqoC1bLH5xXCpBjAiEA/RCe3VfmGTHIrDqmph/9QPhHpFx2vrE4ZTafS8xmByY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.36.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1768990},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./ansi":{"types":"./dist/universal/ansi.d.ts","default":"./dist/universal/ansi.js"},"./time":{"types":"./dist/universal/time.d.ts","default":"./dist/universal/time.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/text":{"types":"./dist/bot/text.d.ts","default":"./dist/bot/text.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/updates":{"types":"./dist/bot/updates.d.ts","default":"./dist/bot/updates.js"},"./bot/announce":{"types":"./dist/bot/announce.d.ts","default":"./dist/bot/announce.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"},"./bot/update-identity":{"types":"./dist/bot/update-identity.d.ts","default":"./dist/bot/update-identity.js"}},"gitHead":"e8c9c2a0fdaadb423fa5522a7036d24f337eaf8c","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:log":"tsx tests/log-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-text":"tsx tests/bot-text-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:llm-reset":"tsx tests/llm-reset-test.ts","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:bot-updates":"tsx tests/bot-updates-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:bot-announce":"tsx tests/bot-announce-test.ts","test:language-picker":"tsx tests/language-picker-test.ts","test:update-identity":"tsx tests/update-identity-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.17.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.36.1_1787852375204_0.03913703399183244","host":"s3://npm-registry-packages-npm-production"}},"2.37.0":{"name":"@adriangalilea/utils","version":"2.37.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.37.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"fe24091ba5a72c198c735f7cb08a3e9c66d26996","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.37.0.tgz","fileCount":342,"integrity":"sha512-CpfssbuyfHPgmMoTxoIyMu8mk0pb6mKUEdyfO6/hY1gvWCA8MVAnfSKWpEHos06SPBGl+iI4MmM212mt0qBxRA==","signatures":[{"sig":"MEUCIQChYJY5y4J2QTY746k2HijN2Zq6Kg7WBDKAjkgrQAzIWQIgXiv1i4/CG6o3Z04AwxD/Z1W2KYS0YE5bxAekpZNMdHs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.37.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1772113},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./ansi":{"types":"./dist/universal/ansi.d.ts","default":"./dist/universal/ansi.js"},"./time":{"types":"./dist/universal/time.d.ts","default":"./dist/universal/time.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/text":{"types":"./dist/bot/text.d.ts","default":"./dist/bot/text.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/updates":{"types":"./dist/bot/updates.d.ts","default":"./dist/bot/updates.js"},"./bot/announce":{"types":"./dist/bot/announce.d.ts","default":"./dist/bot/announce.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"},"./bot/update-identity":{"types":"./dist/bot/update-identity.d.ts","default":"./dist/bot/update-identity.js"}},"gitHead":"2ef634e5e1d09b8d99f4ff289267548f23722b9c","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:log":"tsx tests/log-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-text":"tsx tests/bot-text-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:llm-reset":"tsx tests/llm-reset-test.ts","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:bot-updates":"tsx tests/bot-updates-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:bot-announce":"tsx tests/bot-announce-test.ts","test:language-picker":"tsx tests/language-picker-test.ts","test:update-identity":"tsx tests/update-identity-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.17.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.37.0_1787855924910_0.7199395346330386","host":"s3://npm-registry-packages-npm-production"}},"2.37.1":{"name":"@adriangalilea/utils","version":"2.37.1","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.37.1","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"581e8e549bf3b8b4ec0e25422694c02deea9c77c","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.37.1.tgz","fileCount":342,"integrity":"sha512-gRL62cU9cHtuI3Lgj99kpjQ2ZqBLt2qrXvLKDEU5/abS46tzxnUeVFSo3AXPm1HvqGDuVuqA85jVs1fpcQ/ZMw==","signatures":[{"sig":"MEYCIQCtIffBEnLEX6syVPVkX5KcQ2G5auT626mQvttacjLZSwIhAI//Qsd/wf570+0D5FmVmc/soUP8GAR7vKhoJeZGvq4o","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.37.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1774117},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./ansi":{"types":"./dist/universal/ansi.d.ts","default":"./dist/universal/ansi.js"},"./time":{"types":"./dist/universal/time.d.ts","default":"./dist/universal/time.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/text":{"types":"./dist/bot/text.d.ts","default":"./dist/bot/text.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/updates":{"types":"./dist/bot/updates.d.ts","default":"./dist/bot/updates.js"},"./bot/announce":{"types":"./dist/bot/announce.d.ts","default":"./dist/bot/announce.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"},"./bot/update-identity":{"types":"./dist/bot/update-identity.d.ts","default":"./dist/bot/update-identity.js"}},"gitHead":"d78fd2aceab70d7243125d915925840bdf6042ff","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:log":"tsx tests/log-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-text":"tsx tests/bot-text-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:llm-reset":"tsx tests/llm-reset-test.ts","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:bot-updates":"tsx tests/bot-updates-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:bot-announce":"tsx tests/bot-announce-test.ts","test:language-picker":"tsx tests/language-picker-test.ts","test:update-identity":"tsx tests/update-identity-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.17.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.12.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.12.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.37.1_1787856357942_0.032695985447633635","host":"s3://npm-registry-packages-npm-production"}},"2.38.0":{"name":"@adriangalilea/utils","version":"2.38.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.38.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"978f4504722fd6814ae640e53a1145f12db45b94","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.38.0.tgz","fileCount":342,"integrity":"sha512-exwQRygESHJZoe+L8dlpc0b27spHStFj3dh8X6AG/huDCqpoezWT7i47YER54Fd1ZG/lyS2PIoirroAhQqmNyA==","signatures":[{"sig":"MEYCIQDs/Ge2lpEtYHU1rCw3PWF/MeNbWFXfyScxzJ9wj3BCeAIhAPQL3YaIxinsMMNSoHApG0u9ws+Uz2TID/p3qy/X/+TN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.38.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1775701},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./ansi":{"types":"./dist/universal/ansi.d.ts","default":"./dist/universal/ansi.js"},"./time":{"types":"./dist/universal/time.d.ts","default":"./dist/universal/time.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/text":{"types":"./dist/bot/text.d.ts","default":"./dist/bot/text.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/updates":{"types":"./dist/bot/updates.d.ts","default":"./dist/bot/updates.js"},"./bot/announce":{"types":"./dist/bot/announce.d.ts","default":"./dist/bot/announce.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"},"./bot/update-identity":{"types":"./dist/bot/update-identity.d.ts","default":"./dist/bot/update-identity.js"}},"gitHead":"f3973b1bd7cfa50c27722be7a262fcd9faa2cf32","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:log":"tsx tests/log-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-text":"tsx tests/bot-text-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:llm-reset":"tsx tests/llm-reset-test.ts","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:bot-updates":"tsx tests/bot-updates-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:bot-announce":"tsx tests/bot-announce-test.ts","test:language-picker":"tsx tests/language-picker-test.ts","test:update-identity":"tsx tests/update-identity-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.17.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.14.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.14.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.38.0_1787859012103_0.5662947943300347","host":"s3://npm-registry-packages-npm-production"}},"2.38.1":{"name":"@adriangalilea/utils","version":"2.38.1","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@2.38.1","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"79c6000fbdf7aedeae40dbaabd43c37fe0d7c038","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-2.38.1.tgz","fileCount":342,"integrity":"sha512-vKFZlao+98d+Lts7jkBjvxASCKMNA0rmGGH6fGwymEyGsU+aidVe1FDyQ779+lumF7iqVFxnpmSWnbC5Ife1BA==","signatures":[{"sig":"MEYCIQDh7xxaKkxHGHbqiMWqL25C5Zvn742Ux/eCQLOzC0d9ZQIhANp9JQhUZ6rTlb+i1cW0gh4yjt2dA9TfaXnFlZmHEluq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@2.38.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1776835},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./ansi":{"types":"./dist/universal/ansi.d.ts","default":"./dist/universal/ansi.js"},"./time":{"types":"./dist/universal/time.d.ts","default":"./dist/universal/time.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/text":{"types":"./dist/bot/text.d.ts","default":"./dist/bot/text.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/metrics":{"types":"./dist/bot/metrics.d.ts","default":"./dist/bot/metrics.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/updates":{"types":"./dist/bot/updates.d.ts","default":"./dist/bot/updates.js"},"./bot/announce":{"types":"./dist/bot/announce.d.ts","default":"./dist/bot/announce.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"},"./bot/update-identity":{"types":"./dist/bot/update-identity.d.ts","default":"./dist/bot/update-identity.js"}},"gitHead":"74a00db291564532dc5150b7bab82408afc1299f","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"echo 'Tests not configured yet'","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:log":"tsx tests/log-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-text":"tsx tests/bot-text-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:llm-reset":"tsx tests/llm-reset-test.ts","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:bot-updates":"tsx tests/bot-updates-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:bot-announce":"tsx tests/bot-announce-test.ts","test:language-picker":"tsx tests/language-picker-test.ts","test:update-identity":"tsx tests/update-identity-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.17.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.14.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.14.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_2.38.1_1787863347860_0.9611739812517885","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@adriangalilea/utils","version":"3.0.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@3.0.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"0d34954a83805b346be1bd7b3dc18ece583b5be4","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-3.0.0.tgz","fileCount":354,"integrity":"sha512-dciUoUMsIN2hO5n7i99STq4JPbSUBmYY+B5+w7HS01332/KdM2dYV5cJawBCvdvQzKmqEw8HnJuwRviKxhCpTA==","signatures":[{"sig":"MEYCIQDQd9TGQmkIcYbifQHt1ZrRQPPdi/1ElRzNO5Mx/uVQIgIhAPhUJzH0Dghc9+ue67253urHmKH0Krzfk/AWzCKg8Txn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@3.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1796799},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./ansi":{"types":"./dist/universal/ansi.d.ts","default":"./dist/universal/ansi.js"},"./time":{"types":"./dist/universal/time.d.ts","default":"./dist/universal/time.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./metrics":{"types":"./dist/metrics/index.d.ts","default":"./dist/metrics/index.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/text":{"types":"./dist/bot/text.d.ts","default":"./dist/bot/text.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/updates":{"types":"./dist/bot/updates.d.ts","default":"./dist/bot/updates.js"},"./metrics/cli":{"types":"./dist/metrics/cli.d.ts","default":"./dist/metrics/cli.js"},"./bot/announce":{"types":"./dist/bot/announce.d.ts","default":"./dist/bot/announce.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./metrics/report":{"types":"./dist/metrics/report.d.ts","default":"./dist/metrics/report.js"},"./metrics/sqlite":{"types":"./dist/metrics/sqlite.d.ts","default":"./dist/metrics/sqlite.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"},"./bot/update-identity":{"types":"./dist/bot/update-identity.d.ts","default":"./dist/bot/update-identity.js"}},"gitHead":"1b253da18c43251d4a63701c6f55d342ed1d6359","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"tsx tests/metrics-test.ts","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:log":"tsx tests/log-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-text":"tsx tests/bot-text-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:llm-reset":"tsx tests/llm-reset-test.ts","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:bot-updates":"tsx tests/bot-updates-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:bot-announce":"tsx tests/bot-announce-test.ts","test:language-picker":"tsx tests/language-picker-test.ts","test:update-identity":"tsx tests/update-identity-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.19.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.14.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.14.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_3.0.0_1788887327871_0.22582127669620444","host":"s3://npm-registry-packages-npm-production"}},"4.0.0":{"name":"@adriangalilea/utils","version":"4.0.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@4.0.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"c98a8ddb5a79d417d4f25c4ba51443e4bc7cbf7e","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-4.0.0.tgz","fileCount":354,"integrity":"sha512-bfmkxSSp2tlXSClMmRr+GbhGU+7qrxUopELzE7lECnN00HbuaxMRlUc4p/Yroi2EbQC4WfurnGqXoCuyczNw0Q==","signatures":[{"sig":"MEUCIQCvrIjumlh2rjn1oX0UQRZKidz7Xzuqoy0WLUnlKAXgeAIgBC3JXStDGM1BCtmW6BHAPbcEl0P0lLtNBDcBix3m+AY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@4.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1797140},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./ansi":{"types":"./dist/universal/ansi.d.ts","default":"./dist/universal/ansi.js"},"./time":{"types":"./dist/universal/time.d.ts","default":"./dist/universal/time.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./metrics":{"types":"./dist/metrics/index.d.ts","default":"./dist/metrics/index.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/text":{"types":"./dist/bot/text.d.ts","default":"./dist/bot/text.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/updates":{"types":"./dist/bot/updates.d.ts","default":"./dist/bot/updates.js"},"./metrics/cli":{"types":"./dist/metrics/cli.d.ts","default":"./dist/metrics/cli.js"},"./bot/announce":{"types":"./dist/bot/announce.d.ts","default":"./dist/bot/announce.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./metrics/report":{"types":"./dist/metrics/report.d.ts","default":"./dist/metrics/report.js"},"./metrics/sqlite":{"types":"./dist/metrics/sqlite.d.ts","default":"./dist/metrics/sqlite.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"},"./bot/update-identity":{"types":"./dist/bot/update-identity.d.ts","default":"./dist/bot/update-identity.js"}},"gitHead":"fcb3b2b0f2954cb6b137fced44b653f3a212f67e","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"tsx tests/metrics-test.ts","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:log":"tsx tests/log-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-text":"tsx tests/bot-text-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:llm-reset":"tsx tests/llm-reset-test.ts","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:bot-updates":"tsx tests/bot-updates-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:bot-announce":"tsx tests/bot-announce-test.ts","test:language-picker":"tsx tests/language-picker-test.ts","test:update-identity":"tsx tests/update-identity-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.19.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.14.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.14.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_4.0.0_1788892264903_0.6734116981706033","host":"s3://npm-registry-packages-npm-production"}},"4.1.0":{"name":"@adriangalilea/utils","version":"4.1.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@4.1.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"480d399c39d9b1b9dd2d9f92f39aecd98d16a87f","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-4.1.0.tgz","fileCount":354,"integrity":"sha512-mzYrwBSJliOhkbdjZ5nw2JypbzKWu2iOh1Gf9MkpeG/o/CaOBh2zAl5Xq7ll9WKEhhymOBdYlRYNN2OHSFWuqg==","signatures":[{"sig":"MEUCIQCdxpcxvI2kjTNpGWH0mDzVPqCuLahduCsNdieN7U71yAIgPNjDwEy/KoTJEJFgJlKC3WjbE6zflqmrmmWQC1CmlEI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@4.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1810496},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./ansi":{"types":"./dist/universal/ansi.d.ts","default":"./dist/universal/ansi.js"},"./time":{"types":"./dist/universal/time.d.ts","default":"./dist/universal/time.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./metrics":{"types":"./dist/metrics/index.d.ts","default":"./dist/metrics/index.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/text":{"types":"./dist/bot/text.d.ts","default":"./dist/bot/text.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/updates":{"types":"./dist/bot/updates.d.ts","default":"./dist/bot/updates.js"},"./metrics/cli":{"types":"./dist/metrics/cli.d.ts","default":"./dist/metrics/cli.js"},"./bot/announce":{"types":"./dist/bot/announce.d.ts","default":"./dist/bot/announce.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./metrics/report":{"types":"./dist/metrics/report.d.ts","default":"./dist/metrics/report.js"},"./metrics/sqlite":{"types":"./dist/metrics/sqlite.d.ts","default":"./dist/metrics/sqlite.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"},"./bot/update-identity":{"types":"./dist/bot/update-identity.d.ts","default":"./dist/bot/update-identity.js"}},"gitHead":"6c4ce74d7c74f3fa071525eeab80bead575af35f","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"tsx tests/metrics-test.ts","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:log":"tsx tests/log-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-text":"tsx tests/bot-text-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:llm-reset":"tsx tests/llm-reset-test.ts","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:bot-updates":"tsx tests/bot-updates-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:bot-announce":"tsx tests/bot-announce-test.ts","test:language-picker":"tsx tests/language-picker-test.ts","test:update-identity":"tsx tests/update-identity-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.19.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.14.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.14.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_4.1.0_1788894172195_0.48255225495902376","host":"s3://npm-registry-packages-npm-production"}},"4.1.1":{"name":"@adriangalilea/utils","version":"4.1.1","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@4.1.1","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"8320c6340c5edbe792ac0f52c677e79b88b0441c","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-4.1.1.tgz","fileCount":354,"integrity":"sha512-JJio2AY3oShtPBRQajI+BouJJKhZqh6EdSWNVbsFbS6OPQC5LBkNTnVVWj/HcCln3yi3Y4ntLIdd7Eway0wn8A==","signatures":[{"sig":"MEQCIDS7ONxO3z8agXblnH83aJZo9cvHT7CYRJ6CPtCpZpQHAiBkRfypz7UKYh0AH5AutdnxN3e5wZddCMqLFPdxsivJQg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@4.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1811307},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./ansi":{"types":"./dist/universal/ansi.d.ts","default":"./dist/universal/ansi.js"},"./time":{"types":"./dist/universal/time.d.ts","default":"./dist/universal/time.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./metrics":{"types":"./dist/metrics/index.d.ts","default":"./dist/metrics/index.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/text":{"types":"./dist/bot/text.d.ts","default":"./dist/bot/text.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/updates":{"types":"./dist/bot/updates.d.ts","default":"./dist/bot/updates.js"},"./metrics/cli":{"types":"./dist/metrics/cli.d.ts","default":"./dist/metrics/cli.js"},"./bot/announce":{"types":"./dist/bot/announce.d.ts","default":"./dist/bot/announce.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./metrics/report":{"types":"./dist/metrics/report.d.ts","default":"./dist/metrics/report.js"},"./metrics/sqlite":{"types":"./dist/metrics/sqlite.d.ts","default":"./dist/metrics/sqlite.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"},"./bot/update-identity":{"types":"./dist/bot/update-identity.d.ts","default":"./dist/bot/update-identity.js"}},"gitHead":"23ae5f66f173073173eaf43aa718782cfddfd5bd","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"tsx tests/metrics-test.ts","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:log":"tsx tests/log-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-text":"tsx tests/bot-text-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:llm-reset":"tsx tests/llm-reset-test.ts","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:bot-updates":"tsx tests/bot-updates-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:bot-announce":"tsx tests/bot-announce-test.ts","test:language-picker":"tsx tests/language-picker-test.ts","test:update-identity":"tsx tests/update-identity-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.19.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.14.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.14.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_4.1.1_1788942719908_0.9005456180856266","host":"s3://npm-registry-packages-npm-production"}},"5.0.0":{"name":"@adriangalilea/utils","version":"5.0.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@5.0.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"75e5cce375bf82423974fce1ac436bcabc5cf0d8","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-5.0.0.tgz","fileCount":362,"integrity":"sha512-XTWL1rHXp6a7HM6SN9NLgxHYXMTLMf4aAxVuRpxqMNZsaciilYgPYlHtIVHZOUmqsOh+GGHZisFSDdJygn6DJg==","signatures":[{"sig":"MEUCIQCf8Qgqn1DKfFcvB3N/K1DBA45+WQNs95bXXmaVEGS3DwIgNZAZJqsgc+Qus7NgID69sjfgsxlcNrJ2Mirhy37IX5E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@5.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1822580},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./ansi":{"types":"./dist/universal/ansi.d.ts","default":"./dist/universal/ansi.js"},"./time":{"types":"./dist/universal/time.d.ts","default":"./dist/universal/time.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./metrics":{"types":"./dist/metrics/index.d.ts","default":"./dist/metrics/index.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/text":{"types":"./dist/bot/text.d.ts","default":"./dist/bot/text.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./metrics/d1":{"types":"./dist/metrics/d1.d.ts","default":"./dist/metrics/d1.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/updates":{"types":"./dist/bot/updates.d.ts","default":"./dist/bot/updates.js"},"./metrics/cli":{"types":"./dist/metrics/cli.d.ts","default":"./dist/metrics/cli.js"},"./bot/announce":{"types":"./dist/bot/announce.d.ts","default":"./dist/bot/announce.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./metrics/libsql":{"types":"./dist/metrics/libsql.d.ts","default":"./dist/metrics/libsql.js"},"./metrics/report":{"types":"./dist/metrics/report.d.ts","default":"./dist/metrics/report.js"},"./metrics/sqlite":{"types":"./dist/metrics/sqlite.d.ts","default":"./dist/metrics/sqlite.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"},"./bot/update-identity":{"types":"./dist/bot/update-identity.d.ts","default":"./dist/bot/update-identity.js"}},"gitHead":"d6937c96e39717ee93f198421fbe1d3c599599bf","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"tsx tests/metrics-test.ts","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:log":"tsx tests/log-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-text":"tsx tests/bot-text-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:llm-reset":"tsx tests/llm-reset-test.ts","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:bot-updates":"tsx tests/bot-updates-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:bot-announce":"tsx tests/bot-announce-test.ts","test:language-picker":"tsx tests/language-picker-test.ts","test:update-identity":"tsx tests/update-identity-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.19.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.14.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.14.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_5.0.0_1788944668172_0.19438766407481567","host":"s3://npm-registry-packages-npm-production"}},"6.0.0":{"name":"@adriangalilea/utils","version":"6.0.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@6.0.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"70a8ef345197b5c9ec6e928ea0417cd0b4cc7a7c","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-6.0.0.tgz","fileCount":366,"integrity":"sha512-Gky9WmBrMFcN1g/ulQzg5zPnV2bRWiSEmP5apekjBbq+cDGMV5KBq0+ZaiK9FD4gx8UslZAHTfJrt8zwB0mJZw==","signatures":[{"sig":"MEYCIQDDa9VyvHGxtcbZHhY8df/6ZYJuvcopg+k74WVGv1MV2wIhAIa0Fcmf+24h2hUjbHJGYPlhvR4wCCAU8xvMswMfROwX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@6.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1835264},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./ansi":{"types":"./dist/universal/ansi.d.ts","default":"./dist/universal/ansi.js"},"./time":{"types":"./dist/universal/time.d.ts","default":"./dist/universal/time.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./metrics":{"types":"./dist/metrics/index.d.ts","default":"./dist/metrics/index.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/text":{"types":"./dist/bot/text.d.ts","default":"./dist/bot/text.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./metrics/d1":{"types":"./dist/metrics/d1.d.ts","default":"./dist/metrics/d1.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/updates":{"types":"./dist/bot/updates.d.ts","default":"./dist/bot/updates.js"},"./metrics/cli":{"types":"./dist/metrics/cli.d.ts","default":"./dist/metrics/cli.js"},"./bot/announce":{"types":"./dist/bot/announce.d.ts","default":"./dist/bot/announce.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./metrics/libsql":{"types":"./dist/metrics/libsql.d.ts","default":"./dist/metrics/libsql.js"},"./metrics/report":{"types":"./dist/metrics/report.d.ts","default":"./dist/metrics/report.js"},"./metrics/sqlite":{"types":"./dist/metrics/sqlite.d.ts","default":"./dist/metrics/sqlite.js"},"./metrics/d1-rest":{"types":"./dist/metrics/d1-rest.d.ts","default":"./dist/metrics/d1-rest.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"},"./bot/update-identity":{"types":"./dist/bot/update-identity.d.ts","default":"./dist/bot/update-identity.js"}},"gitHead":"7437732c570aa1968429975e209c40332a68ffad","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"tsx tests/metrics-test.ts","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:log":"tsx tests/log-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-text":"tsx tests/bot-text-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:llm-reset":"tsx tests/llm-reset-test.ts","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:bot-updates":"tsx tests/bot-updates-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:bot-announce":"tsx tests/bot-announce-test.ts","test:language-picker":"tsx tests/language-picker-test.ts","test:update-identity":"tsx tests/update-identity-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.19.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.14.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.14.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_6.0.0_1788946297156_0.041677742525492834","host":"s3://npm-registry-packages-npm-production"}},"7.0.0":{"name":"@adriangalilea/utils","version":"7.0.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@7.0.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"5bcb56ddcba0ad2f7e779fdaa59117d64a1a094f","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-7.0.0.tgz","fileCount":366,"integrity":"sha512-TYBO5gyUpEg1D+V3c0XNnwxIe5I2OZz3upkDU2+F1mhWaA4eHkkj088ZOls0JKhkjZrJce6nkyGRf6cQ5ta3Dw==","signatures":[{"sig":"MEUCIAJPA7C4ALp5ZR5+o/PK5kIkEuXWEv6/c4LaJ9DtHoSJAiEA9vGc8Q99O7Gc56yHwyhrGMWcfxw266tqnZm9t6Deg+k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@7.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1835317},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./ansi":{"types":"./dist/universal/ansi.d.ts","default":"./dist/universal/ansi.js"},"./time":{"types":"./dist/universal/time.d.ts","default":"./dist/universal/time.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./metrics":{"types":"./dist/metrics/index.d.ts","default":"./dist/metrics/index.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/text":{"types":"./dist/bot/text.d.ts","default":"./dist/bot/text.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./metrics/d1":{"types":"./dist/metrics/d1.d.ts","default":"./dist/metrics/d1.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/updates":{"types":"./dist/bot/updates.d.ts","default":"./dist/bot/updates.js"},"./metrics/cli":{"types":"./dist/metrics/cli.d.ts","default":"./dist/metrics/cli.js"},"./bot/announce":{"types":"./dist/bot/announce.d.ts","default":"./dist/bot/announce.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./metrics/libsql":{"types":"./dist/metrics/libsql.d.ts","default":"./dist/metrics/libsql.js"},"./metrics/report":{"types":"./dist/metrics/report.d.ts","default":"./dist/metrics/report.js"},"./metrics/sqlite":{"types":"./dist/metrics/sqlite.d.ts","default":"./dist/metrics/sqlite.js"},"./metrics/d1-rest":{"types":"./dist/metrics/d1-rest.d.ts","default":"./dist/metrics/d1-rest.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"},"./bot/update-identity":{"types":"./dist/bot/update-identity.d.ts","default":"./dist/bot/update-identity.js"}},"gitHead":"c7393681d72b3cf7472a14bac34200de5ffb4d84","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"tsx tests/metrics-test.ts","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:log":"tsx tests/log-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-text":"tsx tests/bot-text-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:llm-reset":"tsx tests/llm-reset-test.ts","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:bot-updates":"tsx tests/bot-updates-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:bot-announce":"tsx tests/bot-announce-test.ts","test:language-picker":"tsx tests/language-picker-test.ts","test:update-identity":"tsx tests/update-identity-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.19.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.14.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.14.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_7.0.0_1788947032829_0.7229183287423844","host":"s3://npm-registry-packages-npm-production"}},"7.1.0":{"name":"@adriangalilea/utils","version":"7.1.0","keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","_id":"@adriangalilea/utils@7.1.0","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"homepage":"https://github.com/adriangalilea/ts-utils#readme","bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"dist":{"shasum":"a40b9ee6a610c8fe8f88e6d62da63484e51128cd","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-7.1.0.tgz","fileCount":366,"integrity":"sha512-D5+bXKSYBAfjRciLFQeKoDpQ5BPf/EV+pcY9LY03H5GO0R8ZK7xfQkbDkDCozhwNiJ6gt43lcfcK3GJTQxOGnQ==","signatures":[{"sig":"MEQCIFZYWsuHWqGbfhDE99m2iSyiHhnzm2XzYT2gwf1/znpmAiBtK9KGmEnxlYrj6lYOnmCdfQh7iM00mNkB/XKu4u+CQQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@7.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1843252},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"node":"./dist/index.js","types":"./dist/index.d.ts","browser":"./dist/browser.js","default":"./dist/index.js"},"./bot":{"types":"./dist/bot/index.d.ts","default":"./dist/bot/index.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./ansi":{"types":"./dist/universal/ansi.d.ts","default":"./dist/universal/ansi.js"},"./time":{"types":"./dist/universal/time.d.ts","default":"./dist/universal/time.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./metrics":{"types":"./dist/metrics/index.d.ts","default":"./dist/metrics/index.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/text":{"types":"./dist/bot/text.d.ts","default":"./dist/bot/text.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./metrics/d1":{"types":"./dist/metrics/d1.d.ts","default":"./dist/metrics/d1.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/updates":{"types":"./dist/bot/updates.d.ts","default":"./dist/bot/updates.js"},"./metrics/cli":{"types":"./dist/metrics/cli.d.ts","default":"./dist/metrics/cli.js"},"./bot/announce":{"types":"./dist/bot/announce.d.ts","default":"./dist/bot/announce.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./metrics/libsql":{"types":"./dist/metrics/libsql.d.ts","default":"./dist/metrics/libsql.js"},"./metrics/report":{"types":"./dist/metrics/report.d.ts","default":"./dist/metrics/report.js"},"./metrics/sqlite":{"types":"./dist/metrics/sqlite.d.ts","default":"./dist/metrics/sqlite.js"},"./metrics/d1-rest":{"types":"./dist/metrics/d1-rest.d.ts","default":"./dist/metrics/d1-rest.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"},"./bot/update-identity":{"types":"./dist/bot/update-identity.d.ts","default":"./dist/bot/update-identity.js"}},"gitHead":"164cae9a3d6bf5ec0ddce77c0b27cf1ab80ebc5f","scripts":{"ci":"biome ci","dev":"tsx src/index.ts","fix":"biome check --write --unsafe","lint":"biome lint","test":"tsx tests/metrics-test.ts","build":"tsc","check":"biome check","format":"biome format","example":"tsx tests/example.ts","demo:bot":"tsx tests/create-demo.ts","test:llm":"tsx tests/llm-live-test.ts","test:log":"tsx tests/log-test.ts","test:url":"tsx tests/url-test.ts","test:text":"tsx tests/text-test.ts","test:user":"tsx tests/user-test.ts","test:flags":"tsx tests/flags-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","type-check":"tsc --noEmit","test:groups":"tsx tests/groups-test.ts","test:browser":"open tests/browser-test.html","test:runtime":"tsx tests/runtime-test.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:bot-text":"tsx tests/bot-text-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","update-crypto":"tsx src/universal/currency/download-crypto-list.ts","prepublishOnly":"pnpm run build","test:llm-reset":"tsx tests/llm-reset-test.ts","test:reactions":"tsx tests/reactions-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:bot-updates":"tsx tests/bot-updates-test.ts","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","update-url-rules":"tsx src/universal/url/update-rules.ts","test:bot-announce":"tsx tests/bot-announce-test.ts","test:language-picker":"tsx tests/language-picker-test.ts","test:update-identity":"tsx tests/update-identity-test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"repository":{"url":"git+https://github.com/adriangalilea/ts-utils.git","type":"git"},"_npmVersion":"11.19.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"linkifyjs":"^4.3.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.22","tsx":"^4.20.4","zod":"^4.4.3","gramio":"^0.14.0","marked":"^15.0.11","typescript":"^5.9.2","@types/node":"^24.3.0","@gramio/split":"^0.0.1","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/storage":"^2.0.1","@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependencies":{"ai":"^7.0.0","zod":">=3.22","gramio":"^0.14.0","marked":">=12","@gramio/split":"^0.0.1","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/storage":">=2.0.0","@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@openrouter/ai-sdk-provider":"^3.0.0"},"peerDependenciesMeta":{"ai":{"optional":true},"zod":{"optional":true},"gramio":{"optional":true},"marked":{"optional":true},"@gramio/split":{"optional":true},"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/utils_7.1.0_1788949208984_0.7564208541028856","host":"s3://npm-registry-packages-npm-production"}},"8.0.0":{"name":"@adriangalilea/utils","version":"8.0.0","description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","main":"./dist/index.js","types":"./dist/index.d.ts","type":"module","exports":{".":{"types":"./dist/index.d.ts","browser":"./dist/browser.js","node":"./dist/index.js","default":"./dist/index.js"},"./browser":{"types":"./dist/browser.d.ts","default":"./dist/browser.js"},"./runtime":{"types":"./dist/runtime.d.ts","default":"./dist/runtime.js"},"./ansi":{"types":"./dist/universal/ansi.d.ts","default":"./dist/universal/ansi.js"},"./format":{"types":"./dist/universal/format.d.ts","default":"./dist/universal/format.js"},"./time":{"types":"./dist/universal/time.d.ts","default":"./dist/universal/time.js"},"./url":{"types":"./dist/universal/url/index.d.ts","default":"./dist/universal/url/index.js"},"./url/sites":{"types":"./dist/universal/url/sites.d.ts","default":"./dist/universal/url/sites.js"},"./log":{"types":"./dist/universal/log.d.ts","default":"./dist/universal/log.js"},"./cli":{"types":"./dist/cli/index.d.ts","default":"./dist/cli/index.js"},"./currency":{"types":"./dist/universal/currency/index.d.ts","default":"./dist/universal/currency/index.js"},"./say":{"types":"./dist/say/index.d.ts","default":"./dist/say/index.js"},"./tg-html":{"types":"./dist/tg-html/index.d.ts","default":"./dist/tg-html/index.js"},"./tg-md":{"types":"./dist/tg-md/index.d.ts","default":"./dist/tg-md/index.js"},"./bot/access-control":{"types":"./dist/bot/access-control.d.ts","default":"./dist/bot/access-control.js"},"./bot/admin":{"types":"./dist/bot/admin.d.ts","default":"./dist/bot/admin.js"},"./bot/allow-list":{"types":"./dist/bot/allow-list.d.ts","default":"./dist/bot/allow-list.js"},"./bot/coalesce":{"types":"./dist/bot/coalesce.d.ts","default":"./dist/bot/coalesce.js"},"./bot/draft":{"types":"./dist/bot/draft.d.ts","default":"./dist/bot/draft.js"},"./bot/language":{"types":"./dist/bot/language.d.ts","default":"./dist/bot/language.js"},"./bot/menu":{"types":"./dist/bot/menu.d.ts","default":"./dist/bot/menu.js"},"./bot/kit":{"types":"./dist/bot/kit.d.ts","default":"./dist/bot/kit.js"},"./bot/llm":{"types":"./dist/bot/llm.d.ts","default":"./dist/bot/llm.js"},"./bot/reactions":{"types":"./dist/bot/reactions.d.ts","default":"./dist/bot/reactions.js"},"./bot/payments":{"types":"./dist/bot/payments/index.d.ts","default":"./dist/bot/payments/index.js"},"./bot/storage":{"types":"./dist/bot/storage.d.ts","default":"./dist/bot/storage.js"},"./bot/storage-d1":{"types":"./dist/bot/storage-d1.d.ts","default":"./dist/bot/storage-d1.js"},"./bot/ctx":{"types":"./dist/bot/ctx.d.ts","default":"./dist/bot/ctx.js"},"./bot/keys":{"types":"./dist/bot/keys.d.ts","default":"./dist/bot/keys.js"},"./bot/callbacks":{"types":"./dist/bot/callbacks.d.ts","default":"./dist/bot/callbacks.js"},"./bot/session":{"types":"./dist/bot/session.d.ts","default":"./dist/bot/session.js"},"./bot/notify":{"types":"./dist/bot/notify.d.ts","default":"./dist/bot/notify.js"},"./bot/worker":{"types":"./dist/bot/worker.d.ts","default":"./dist/bot/worker.js"},"./bot/create":{"types":"./dist/bot/create.d.ts","default":"./dist/bot/create.js"},"./bot/profile":{"types":"./dist/bot/profile.d.ts","default":"./dist/bot/profile.js"},"./bot/flags":{"types":"./dist/bot/flags.d.ts","default":"./dist/bot/flags.js"},"./bot/groups":{"types":"./dist/bot/groups.d.ts","default":"./dist/bot/groups.js"},"./bot/user":{"types":"./dist/bot/user.d.ts","default":"./dist/bot/user.js"},"./bot/urls":{"types":"./dist/bot/urls.d.ts","default":"./dist/bot/urls.js"},"./bot/announce":{"types":"./dist/bot/announce.d.ts","default":"./dist/bot/announce.js"},"./bot/updates":{"types":"./dist/bot/updates.d.ts","default":"./dist/bot/updates.js"},"./llm":{"types":"./dist/llm/index.d.ts","default":"./dist/llm/index.js"},"./bot/inline-feedback":{"types":"./dist/bot/inline-feedback.d.ts","default":"./dist/bot/inline-feedback.js"},"./metrics":{"types":"./dist/metrics/index.d.ts","default":"./dist/metrics/index.js"},"./metrics/sqlite":{"types":"./dist/metrics/sqlite.d.ts","default":"./dist/metrics/sqlite.js"},"./metrics/libsql":{"types":"./dist/metrics/libsql.d.ts","default":"./dist/metrics/libsql.js"},"./metrics/d1":{"types":"./dist/metrics/d1.d.ts","default":"./dist/metrics/d1.js"},"./metrics/d1-rest":{"types":"./dist/metrics/d1-rest.d.ts","default":"./dist/metrics/d1-rest.js"},"./metrics/report":{"types":"./dist/metrics/report.d.ts","default":"./dist/metrics/report.js"},"./metrics/cli":{"types":"./dist/metrics/cli.d.ts","default":"./dist/metrics/cli.js"},"./bot/text":{"types":"./dist/bot/text.d.ts","default":"./dist/bot/text.js"},"./bot/update-identity":{"types":"./dist/bot/update-identity.d.ts","default":"./dist/bot/update-identity.js"}},"scripts":{"build":"rm -rf dist && tsc","test":"tsx tests/metrics-test.ts","test:all":"pnpm run test && pnpm run test:log && pnpm run test:runtime && pnpm run test:text && pnpm run test:tg-html && pnpm run test:tg-md && pnpm run test:flags && pnpm run test:groups && pnpm run test:user && pnpm run test:language-picker && pnpm run test:self-echo && pnpm run test:update-identity && pnpm run test:bot-text && pnpm run test:url && pnpm run test:bot-urls && pnpm run test:bot-updates && pnpm run test:bot-announce && pnpm run test:reactions && pnpm run test:llm-reset && pnpm run test:worker-safe","test:log":"tsx tests/log-test.ts","test:runtime":"tsx tests/runtime-test.ts","test:text":"tsx tests/text-test.ts","example":"tsx tests/example.ts","update-crypto":"tsx scripts/update-crypto-list.ts","update-url-rules":"tsx scripts/update-url-rules.ts","type-check":"tsc --noEmit","type-check:tests":"tsc -p tests/tsconfig.json","lint":"biome lint","format":"biome format","check":"biome check","fix":"biome check --write --unsafe","ci":"biome ci","prepublishOnly":"pnpm run build","test:worker-safe":"pnpm run build && tsx tests/worker-safe-test.ts","demo:bot":"tsx tests/create-demo.ts","demo:bot-integration":"tsx tests/bot-integration.ts","demo:cli":"tsx tests/cli-demo.ts","demo:live":"tsx tests/live-demo.ts","test:tg-html":"tsx tests/tg-html-test.ts","test:flags":"tsx tests/flags-test.ts","test:groups":"tsx tests/groups-test.ts","test:user":"tsx tests/user-test.ts","test:language-picker":"tsx tests/language-picker-test.ts","test:llm":"tsx tests/llm-live-test.ts","test:tg-md":"tsx tests/tg-md-test.ts","test:self-echo":"tsx tests/self-echo-test.ts","test:update-identity":"tsx tests/update-identity-test.ts","test:bot-text":"tsx tests/bot-text-test.ts","test:url":"tsx tests/url-test.ts","test:bot-urls":"tsx tests/bot-urls-test.ts","test:bot-updates":"tsx tests/bot-updates-test.ts","test:bot-announce":"tsx tests/bot-announce-test.ts","test:reactions":"tsx tests/reactions-test.ts","test:llm-reset":"tsx tests/llm-reset-test.ts"},"keywords":["typescript","utils","log","currency","format"],"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","devDependencies":{"@ai-sdk/anthropic":"^4.0.12","@ai-sdk/openai-compatible":"^3.0.7","@biomejs/biome":"2.4.15","@gramio/format":"^0.8.0","@gramio/session":"^0.2.0","@gramio/split":"^0.0.1","@gramio/storage":"^2.0.1","@openrouter/ai-sdk-provider":"^3.0.0","@types/node":"^24.3.0","ai":"^7.0.22","gramio":"^0.14.0","tsx":"^4.20.4","typescript":"^5.9.2","zod":"^4.4.3"},"peerDependencies":{"@ai-sdk/anthropic":"^4.0.0","@ai-sdk/openai-compatible":"^3.0.0","@gramio/format":">=0.8.0","@gramio/session":">=0.2.0","@gramio/split":"^0.0.1","@gramio/storage":">=2.0.0","@openrouter/ai-sdk-provider":"^3.0.0","ai":"^7.0.0","gramio":"^0.14.0","zod":">=3.22"},"peerDependenciesMeta":{"@gramio/format":{"optional":true},"@gramio/session":{"optional":true},"@gramio/storage":{"optional":true},"gramio":{"optional":true},"zod":{"optional":true},"ai":{"optional":true},"@ai-sdk/anthropic":{"optional":true},"@ai-sdk/openai-compatible":{"optional":true},"@openrouter/ai-sdk-provider":{"optional":true},"@gramio/split":{"optional":true}},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"repository":{"type":"git","url":"git+https://github.com/adriangalilea/ts-utils.git"},"bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"homepage":"https://github.com/adriangalilea/ts-utils#readme","sideEffects":false,"dependencies":{"linkifyjs":"^4.3.3"},"gitHead":"fbf6f1d20c78db9135923ef544a4af59851fa374","_id":"@adriangalilea/utils@8.0.0","_nodeVersion":"24.20.0","_npmVersion":"11.19.0","dist":{"integrity":"sha512-hbSfD7derDE9R3+xyVyLRpX3dw3laK4cL+xI0lz2tVDwpFkZT+M6SkPNVaeSyA4mMnt3+od6XNoWLYqfwbJvrA==","shasum":"470c2684765feeb6eb5a510db8be358d6cc84de3","tarball":"https://registry.npmjs.org/@adriangalilea/utils/-/utils-8.0.0.tgz","fileCount":358,"unpackedSize":1819571,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@adriangalilea%2futils@8.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIE76qcV6s0yUfv/PKt3kl2WayEWnDNaZNJQVvoqPrCgoAiEAg+3MH8+/X94F1H1cCCkUZXZ038GIg1ZpRDF0MtpLPN8="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e7f365e2-e630-4cb3-bd5f-89330ab20415"}},"directories":{},"maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/utils_8.0.0_1788960709584_0.8623221225686601"},"_hasShrinkwrap":false}},"time":{"created":"2025-08-18T18:53:18.402Z","modified":"2026-09-09T13:31:50.076Z","0.0.10":"2025-08-18T18:53:18.846Z","0.1.0":"2026-02-09T12:41:34.533Z","0.2.0":"2026-03-06T11:57:17.049Z","0.3.0":"2026-03-28T18:03:17.749Z","0.3.1":"2026-03-28T18:12:42.422Z","0.4.0":"2026-03-28T18:51:09.729Z","0.4.1":"2026-03-29T23:15:02.642Z","0.5.0":"2026-04-12T23:28:29.855Z","0.6.0":"2026-05-10T17:38:58.204Z","0.7.0":"2026-05-10T19:34:59.097Z","0.8.0":"2026-05-10T22:06:34.017Z","0.9.0":"2026-05-10T22:49:13.592Z","0.10.0":"2026-05-10T23:18:02.687Z","0.11.0":"2026-05-11T00:04:00.401Z","0.12.0":"2026-05-11T00:33:21.031Z","0.13.0":"2026-05-11T00:53:49.778Z","0.14.0":"2026-05-11T01:29:05.351Z","0.15.0":"2026-05-11T01:45:29.308Z","0.16.0":"2026-05-11T01:58:49.056Z","0.16.1":"2026-05-11T07:56:57.356Z","0.16.2":"2026-05-11T08:23:59.694Z","0.16.3":"2026-05-11T08:58:36.656Z","0.16.4":"2026-05-11T09:12:00.974Z","0.16.5":"2026-05-11T09:22:02.593Z","0.16.6":"2026-05-11T09:25:10.965Z","0.16.7":"2026-05-11T09:27:05.593Z","0.16.8":"2026-05-11T09:29:32.731Z","0.16.9":"2026-05-11T09:40:38.805Z","0.16.10":"2026-05-11T09:48:04.359Z","0.17.0":"2026-05-11T10:18:50.896Z","0.17.1":"2026-05-11T10:28:30.242Z","0.18.0":"2026-05-11T10:43:29.159Z","0.19.0":"2026-05-11T18:27:15.232Z","0.20.0":"2026-06-03T14:06:43.488Z","0.21.0":"2026-07-01T11:41:50.156Z","0.22.0":"2026-07-06T14:11:59.772Z","0.23.0":"2026-07-06T14:36:55.798Z","0.24.0":"2026-07-06T15:37:44.788Z","0.25.0":"2026-07-06T16:39:19.452Z","0.26.0":"2026-07-06T17:29:57.646Z","0.27.0":"2026-07-06T18:57:48.742Z","0.28.0":"2026-07-06T19:06:26.647Z","0.29.0":"2026-07-07T20:39:10.082Z","0.30.0":"2026-07-10T10:04:44.236Z","0.31.0":"2026-07-10T10:35:46.211Z","1.0.0":"2026-07-10T11:48:34.779Z","1.1.0":"2026-07-10T12:15:18.855Z","1.2.0":"2026-07-10T12:52:53.788Z","1.3.0":"2026-07-10T14:27:18.734Z","1.4.0":"2026-07-10T14:37:05.192Z","1.4.1":"2026-07-10T14:40:12.919Z","1.4.2":"2026-07-10T14:43:30.241Z","1.5.0":"2026-07-10T16:07:58.663Z","1.6.0":"2026-07-10T16:13:50.705Z","1.6.1":"2026-07-10T16:22:15.529Z","1.7.0":"2026-07-10T16:32:51.190Z","1.8.0":"2026-07-10T22:45:55.801Z","1.9.0":"2026-07-10T23:29:57.965Z","1.10.0":"2026-07-11T10:10:54.532Z","1.10.1":"2026-07-11T10:39:54.785Z","1.11.0":"2026-07-11T10:54:16.432Z","1.12.0":"2026-07-11T11:04:39.464Z","1.13.0":"2026-07-11T11:47:12.515Z","1.14.0":"2026-07-11T11:55:00.366Z","1.14.1":"2026-07-11T19:39:21.417Z","1.15.0":"2026-07-12T00:56:18.193Z","2.0.0":"2026-07-12T17:06:05.586Z","2.0.1":"2026-07-12T17:15:47.524Z","2.1.0":"2026-07-12T17:44:35.257Z","2.2.0":"2026-07-12T17:58:48.902Z","2.3.0":"2026-07-12T18:14:05.897Z","2.3.1":"2026-07-12T18:30:55.787Z","2.4.0":"2026-07-12T19:10:49.428Z","2.5.0":"2026-07-12T20:37:40.293Z","2.6.0":"2026-07-12T20:40:24.889Z","2.7.0":"2026-07-12T21:28:55.648Z","2.8.0":"2026-07-12T21:50:50.779Z","2.9.0":"2026-07-13T07:04:02.457Z","2.10.0":"2026-07-13T11:25:35.374Z","2.11.0":"2026-07-13T11:42:26.454Z","2.12.0":"2026-07-13T11:58:22.945Z","2.13.0":"2026-07-13T12:04:05.240Z","2.14.0":"2026-07-13T12:15:32.290Z","2.15.0":"2026-07-13T12:28:53.279Z","2.16.0":"2026-07-13T16:01:59.624Z","2.16.1":"2026-07-13T16:05:19.586Z","2.17.0":"2026-07-13T16:16:36.716Z","2.18.0":"2026-07-13T16:48:20.143Z","2.19.0":"2026-07-13T16:54:35.677Z","2.20.0":"2026-07-13T17:02:09.751Z","2.20.1":"2026-07-13T17:05:33.481Z","2.21.0":"2026-07-13T17:49:04.691Z","2.21.1":"2026-07-13T19:45:30.452Z","2.22.0":"2026-07-21T09:32:21.947Z","2.23.0":"2026-07-21T09:51:43.002Z","2.24.0":"2026-07-21T11:51:10.563Z","2.24.1":"2026-07-21T14:49:49.915Z","2.25.0":"2026-07-28T09:55:39.432Z","2.25.1":"2026-07-28T10:01:30.705Z","2.26.0":"2026-07-28T10:10:58.188Z","2.27.0":"2026-08-04T08:54:19.106Z","2.28.0":"2026-08-05T09:18:29.251Z","2.29.0":"2026-08-06T13:44:28.709Z","2.30.0":"2026-08-06T14:08:47.045Z","2.31.0":"2026-08-07T13:22:45.463Z","2.32.0":"2026-08-09T18:22:05.582Z","2.33.0":"2026-08-16T17:04:41.530Z","2.34.0":"2026-08-16T17:30:51.428Z","2.35.0":"2026-08-18T10:48:57.798Z","2.35.1":"2026-08-27T13:37:27.167Z","2.36.0":"2026-08-27T17:32:32.633Z","2.36.1":"2026-08-27T17:39:35.378Z","2.37.0":"2026-08-27T18:38:45.052Z","2.37.1":"2026-08-27T18:45:58.138Z","2.38.0":"2026-08-27T19:30:12.281Z","2.38.1":"2026-08-27T20:42:28.035Z","3.0.0":"2026-09-08T17:08:48.016Z","4.0.0":"2026-09-08T18:31:05.078Z","4.1.0":"2026-09-08T19:02:52.348Z","4.1.1":"2026-09-09T08:32:00.042Z","5.0.0":"2026-09-09T09:04:28.365Z","6.0.0":"2026-09-09T09:31:37.288Z","7.0.0":"2026-09-09T09:43:52.983Z","7.1.0":"2026-09-09T10:20:09.123Z","8.0.0":"2026-09-09T13:31:49.772Z"},"bugs":{"url":"https://github.com/adriangalilea/ts-utils/issues"},"author":{"name":"Adrian Galilea","email":"adriangalilea@gmail.com"},"license":"MIT","homepage":"https://github.com/adriangalilea/ts-utils#readme","keywords":["typescript","utils","log","currency","format"],"repository":{"type":"git","url":"git+https://github.com/adriangalilea/ts-utils.git"},"description":"TypeScript utilities - logger, currency, formatter, GramIO bot plugins, and more","maintainers":[{"name":"adriangalilea","email":"adriangalilea@gmail.com"}],"readme":"# ts-utils\n\nTypeScript utilities - logger, currency, offensive programming, file operations, environment management, and more. The sibling of [swift-utils](https://github.com/adriangalilea/swift-utils), [py-utils](https://github.com/adriangalilea/py-utils), and [go-utils](https://github.com/adriangalilea/go-utils). The logging doctrine the three share, and the harness that proves they emit the same record line, live in [utils](https://github.com/adriangalilea/utils).\n\n## Product metrics\n\n```ts\nimport { createClient } from \"@libsql/client\"\nimport { defineMetrics } from \"@adriangalilea/utils/metrics\"\nimport { libsqlDriver } from \"@adriangalilea/utils/metrics/libsql\"\nimport { metricsStore } from \"@adriangalilea/utils/metrics/sqlite\"\n\nconst driver = libsqlDriver(createClient({ url: process.env.METRICS_DATABASE_URL!, authToken: process.env.METRICS_AUTH_TOKEN }))\nconst metrics = defineMetrics({\n  installCopy: { kind: \"counter\", label: \"install command copies\", dimensions: { component: [\"chat\", \"glass\"] } },\n}, { store: metricsStore(driver, \"my-project\") })\n\nawait metrics.installCopy.bump({ dimensions: { component: \"chat\" } })\n```\n\nOne SQLite dialect, many stores. `metrics/sqlite` holds the schema, the store and\nthe readers over a `MetricsDriver`: two verbs, `query(statement)` for rows and\n`transact(statements)` for an all-or-nothing write batch. `metrics/libsql` wraps a\nTurso / libSQL client, `metrics/d1` wraps a Cloudflare D1 binding (`d1Driver(env.DB)`),\neach with the driver's native calls and structural types, so no database client is\nbundled. Any other SQLite driver implements the two verbs in a few lines (the test\ndoes it over `node:sqlite`). Readers need only `query`, a `MetricsReader`:\n`metrics/d1-rest` reads a D1 database over Cloudflare's REST API from a process with\nno binding (`d1RestReader({ accountId, databaseId, token })`). A store that does not\nspeak SQLite implements the `MetricsStore` contract, `declare(schema)` and\n`write(measurement)`, and its own readers returning the `metrics/report` types.\n\n**The store describes itself.** `declare` runs once per process before the first\nsample and carries the whole schema: kinds, labels, help, units, per-user flags and\noverlaps. Every later sample is one small transaction. A reader therefore never needs\nthe declaring code: `readSchema(reader, project)` returns what a project declared,\nand `readReport(reader, { project, days, includeToday? })` returns everything a panel\nrenders in one call, `{ project, window, schema, daily, audience }`. A changed kind or\nunit is refused at declaration and every sample of that process fails loudly; a store\nthat was briefly away is asked again by the next sample.\n\nProvision the exported `METRICS_SCHEMA` once before collecting. `readMetrics(reader,\n{ from, to, project? })` returns daily rows with labels and dimensions, using inclusive\nUTC dates. `readAudience(reader, { from, to, project }, schema)` answers who did it\nfrom the opt-in per-user rows: one row per declared per-user metric (zeros when nobody\ntouched it), with distinct actors, actors with more than one sample on a single day,\nactors seen on more than one day, then each declared overlap as `fromUsers` and\n`bothUsers`. Readers propagate database errors rather than presenting missing data\nas zero.\n`summarizeMetrics(rows)` from `metrics/report` produces one generic report shape;\n`renderMetrics(rows, { daily? })` from `metrics/cli` renders it with the existing\nANSI-aware `cli.table` helpers. Both discover every recorded metric from its\ndeclaration metadata. No product-specific metric list belongs in a renderer.\n\nFor period comparisons, `metricWindows(days, { now?, includeToday? })` from\n`metrics/report` returns adjacent equal-length `current` and `previous` UTC ranges.\nBy default both contain completed days; `includeToday` marks the current window\n`partial`. Fetch those ranges through your adapter, then call\n`compareMetrics(currentRows, previousRows)` and\n`renderMetricComparison(comparisons)` from `metrics/cli`. Comparisons include\ndisappearing series, count changes and weighted timing-average changes. Percent\nchange is null without a nonzero baseline; missing timing samples stay null.\nChanging a metric's kind or unit across the inputs is rejected. Missing observations\nare not proof that collection was running: deltas compare recorded data only.\nUse a new key for a new meaning; labels, help and the per-user flag can be edited.\n\nMeasurements validate finite nonnegative samples, positive integer counts, and\ndeclared dimension values. Calls resolve even when validation or storage fails;\n`onError(error, key)` observes failures (the default logs a warning without actor\ndata). Await calls or attach them to the runtime's request lifetime (`after` in\nNext.js, `waitUntil` in Workers). Unattached promises are not reliable delivery.\nCounters are best-effort observations, not exactly-once ledgers; retries can count\ntwice. Money and successful-install accounting belong elsewhere.\n\n`perUser: true` accepts an optional string or numeric `user` for daily actor rows.\nEnable it only with a deletion and retention policy; no identity is inferred.\n`overlaps: [[\"a\", \"b\"]]` declares unordered audience overlap, not an ordered funnel.\nDaily totals support counts and averages, not percentile latency or event ordering.\n\n## Installation\n\n```bash\npnpm add @adriangalilea/utils\n```\n\n## Usage\n\n### Logger\n\nTwo renderings, one automatic decision: a TTY gets *human* (symbols, color), anything else gets *record* (level words, plain text, greppable). The same program prints `✓ synced` while you develop it and `2026-08-07T12:34:56Z INFO  synced` the moment launchd points it at a file. Detection happens on the stream actually written to (stderr in Node; stdout stays clean for data).\n\n```typescript\nimport { wait, step, error, fail, warn, warnOnce, ready, info, success, debug, trace, scope, time, timeEnd } from '@adriangalilea/utils/log'\n\n// Verbs express outcome; each renders at its level (fail is error-level, the rest info)\nwait('Loading...')          // ○\nstep('resolving config')    //   • (indented sub-step)\ninfo('Information message')\nsuccess('Operation successful')  // ✓\nready('Server is ready')    // ▶\nwarn('This is a warning')   // ⚠\nerror('Something went wrong')    // ⨯\nfail('Deploy failed')       // ⨯\ndebug('Cache miss')         // ◦\ntrace('Trace message')      // »\n\n// Warn once (won't repeat same message)\nwarnOnce('This warning appears only once')\n\n// Timer functionality (reports at trace level)\ntime('operation')\n// ... do something\ntimeEnd('operation') // operation: 123ms\n\n// Scoped logger — lines carry [api], and API_LOG_LEVEL controls it from env\nconst api = scope('api')\napi.info('Request received')          //  [api] Request received\napi.scope('auth').warn('token old')   // ⚠ [api auth] token old\n```\n\nLevels filter (`silent < error < warn < info < debug < trace`); an unknown `LOG_LEVEL` throws. A scoped logger reads `{SCOPE}_LOG_LEVEL` before `LOG_LEVEL`, live: `GZIP_LOG_LEVEL=silent` shuts one subsystem up without touching code, `GZIP_LOG_LEVEL=trace` opens it wide while the rest stays quiet.\n\nTwo knobs, both env + runtime setter, both with sane defaults:\n\n- `LOG_FORMAT=human|record` / `setLogFormat()` — how lines render. Default: TTY → human, otherwise record. Workers and browsers use level-mapped console methods; Node funnels everything to stderr.\n- `LOG_TIME=1|0` / `setLogTime()` — whether lines open with time. Default: on in Node record mode (a daemon's log file must answer \"when\"), off everywhere else (human eyes don't need stamps; Worker and browser consoles stamp lines themselves). Record time is UTC RFC3339; human time is a dim local `HH:MM:SS`.\n\nThe record line format is identical across go-utils and py-utils by design:\n\n```\n2026-08-07T12:34:56Z WARN  [scope] message\n```\n\n### Currency\n\nCurrency utilities with comprehensive crypto support (500+ symbols):\n\n```typescript\nimport { currency, isCrypto, isStablecoin, isFiat, getSymbol, getOptimalDecimals } from '@adriangalilea/utils'\n\n// Check currency types\nisCrypto('BTC')  // true\nisCrypto('XBT')  // true (alternative for BTC)\nisCrypto('WBTC')  // true (wrapped tokens detected)\nisStablecoin('USDT')  // true\nisFiat('USD')  // true\n\n// Get currency symbols\ngetSymbol('BTC')  // '₿'\ngetSymbol('ETH')  // 'Ξ'\ngetSymbol('USD')  // '$'\n\n// Get optimal decimal places based on value\ngetOptimalDecimals(0.00001234, 'BTC')  // 10\ngetOptimalDecimals(1234.56, 'USD')  // 2\ngetOptimalDecimals(0.123, 'ETH')  // 6\n\n// Percentage calculations\ncurrency.percentageOf(25, 100)  // 25\ncurrency.percentageChange(100, 150)  // 50\ncurrency.percentageDiff(100, 150)  // 40\n\n// Basis points\ncurrency.basisPointsToPercent(100)  // 1\ncurrency.percentToBasisPoints(1)  // 100\ncurrency.formatBasisPoints(50)  // \"50 bps\"\n```\n\n### Format\n\nPure number formatting — named exports, tree-shakeable, zero currency baggage\n(money formatting lives in the currency module, which owns the symbol/decimals\nknowledge and its crypto-symbol dataset):\n\nEvery Intl call pins `en` — SSR apps hydrate identically on server and client\n(no React #418 from a runtime-default locale). Every formatter accepts\n`null | undefined` and renders `\"—\"`, so DB fields pass straight through.\n\n```typescript\nimport { compact, percentage, fixed, withCommas, bytes, bitsPerSec } from '@adriangalilea/utils/format'\n\nwithCommas(1234567)     // \"1,234,567\" (bigint-safe)\nwithCommas(1234.567, 2) // \"1,234.57\"\ncompact(1234567)        // \"1.2M\"\ncompact(1234)           // \"1.2K\"\npercentage(12.3456)     // \"12.3%\" (smart decimals)\npercentage(0.05)        // \"0.05%\"\npercentage(123.456)     // \"123%\"\npercentage(2.41, { sign: true })    // \"+2.4%\" (deltas: 24h change, diffs)\npercentage(2.4126, { decimals: 2 }) // \"2.41%\" (fixed decimals)\nfixed(1.234)            // \"1.23\" (plain toFixed, no grouping)\nbytes(12.7e12)          // \"12.7 TB\" (decimal SI, like drive specs / df -h)\nbitsPerSec(2.5e9)       // \"2.5 Gbps\"\npercentage(null)        // \"—\" (every formatter)\n```\n\nMoney lives in `currency`, which is split by dependency weight so the barrel\ntree-shakes at file granularity: the 133KB crypto-symbol dataset is imported\nonly by its classify module, so `import { usd } from '…/currency'` ships\ndollars, not 13k tickers.\n\n```typescript\nimport { usd, usdIntlOptions, btc, money } from '@adriangalilea/utils/currency'\n\nusd(1234.56)                  // \"$1,234.56\" (grouped; dataset-free import)\nusd(4.3387e-7)                // \"$0.00000043\" (sub-cent keeps 2 significant digits)\nusd(0.43387, { decimals: 4 }) // \"$0.4339\" (policy override)\nusd(60892283, { compact: true }) // \"$60.9M\" (market-cap scale)\nbtc(0.00001234)     // \"0.000012340 ₿\" (dataset via optimal decimals)\nmoney(100, 'EUR')   // \"€100.00\"\n\n// The decimals policy as Intl.NumberFormatOptions — for consumers that format\n// internally (NumberFlow-style animated numbers, chart axes):\nusdIntlOptions(0.43387) // { style: 'currency', currency: 'USD', minimumFractionDigits: 3, ... }\n```\n\n### ANSI primitives (`ansi`)\n\nRaw escape codes, ALWAYS ON — the vocabulary under the TTY-aware layers. The\nlogger and `cli` palettes decide *whether* to color (TTY, `NO_COLOR`,\n`FORCE_COLOR`); this module is for output whose consumer renders ANSI\nregardless of what stdout is: Claude Code status lines, tmux status strings,\nfiles a terminal will cat. 256-color first (`fg`/`bg` — stable across\nterminals and multiplexers); `rgb` for known-truecolor consumers. Out-of-range\nindices panic.\n\n```typescript\nimport { fg, bg, rgb, BOLD, RESET, stripAnsi, ANSI_RE } from '@adriangalilea/utils/ansi'\n\n`${BOLD}${fg(171)}Fable 5${RESET}`   // bold bright violet\nfg(196)                              // red foreground\nbg(238)                              // dark gray background\nrgb(173, 127, 168)                   // 24-bit, when the consumer renders it\nstripAnsi(styled)                    // the string minus its escapes\n```\n\n`cli`'s ANSI-aware `width()` / `clip()` measure strings styled with these\n(they share `ANSI_RE`).\n\n### Time (`time`)\n\nHumanized time — three questions, three functions: how long is a duration\n(`span`), how long ago was an instant (`ago`, raw-duration twin `since`), how\nlong until an instant (`until`). `ago` degrades by distance instead of\nstacking units: fresh instants stay relative, older ones snap to the clock the\nreader would check. Accepts `Date | ISO string | epoch ms | null | undefined`\n(null renders `\"—\"`); epoch numbers are milliseconds only, by design — a\nseconds heuristic would silently shift dates near the boundary.\n\n```typescript\nimport { span, since, ago, until } from '@adriangalilea/utils/time'\n\nspan(6_000_000)                    // \"1h 40m\"  (also \"45s\", \"47m\", \"2d 3h\")\nsince(sessionStart)                // \"47m\" — elapsed, no \"ago\"\nago(twoMinutesAgo)                 // \"2m ago\"  (\"now\" under a minute)\nago(fiveHoursAgo)                  // \"5h 12m ago\"  (relative up to 6h)\nago(thisMorning)                   // \"10:30\"       (clock time, today)\nago(lastNight)                     // \"yst 22:15\"\nago(fourDaysAgo)                   // \"Mon 09:00\"   (within a week)\nago(lastMonth)                     // \"07/28\"\nuntil(weeklyReset)                 // \"in 3d 13h\"   (\"now\" if passed)\nago(null)                          // \"—\" (every function)\n```\n\n### URL (`url`)\n\nURLs, from user-typed text to cache identity. The whole funnel — *is there a\nURL? which resource? whose content? what identity?* — answered once, on one\nobject. Each concern rides its state of the art instead of hand-rolls:\ndetection is [linkifyjs](https://linkify.js.org) (scanner-based, TLD-aware);\nparsing is the WHATWG URL API, never regexes; the knowledge of WHICH params\nare tracking is vendored from\n[@protontech/tidy-url](https://www.npmjs.com/package/@protontech/tidy-url)\n(Proton's maintained fork of DrKain/tidy-url, MIT; refresh with\n`pnpm update-url-rules`) plus a small tested overlay; per-site content\nidentity is an adapter registry (YouTube built in). Global rules only for\nunambiguous trackers (utm_*, fbclid, gclid, …); ambiguous names stay per-host —\n`si` is junk on YouTube/Spotify but `ref` on GitHub names a branch and\nsurvives.\n\n```typescript\nimport { urlsIn, urlOf, cleanUrl, urlKey, hostOf, hostMatches,\n         youtubeVideoId, youtubeUrl, youtubeThumbnailUrl } from '@adriangalilea/utils/url'\n\n// Every http(s) URL in free text, in order, fully resolved:\nurlsIn('watch youtu.be/dQw4w9WgXcQ?si=junk and https://a.com/x?utm_source=t')\n// [{ raw: 'youtu.be/dQw4w9WgXcQ?si=junk', start: 6, end: 34, hadScheme: false,\n//    href: 'https://youtu.be/dQw4w9WgXcQ',          // cleaned — fetch/share this\n//    host: 'youtu.be', site: 'youtube', id: 'dQw4w9WgXcQ',\n//    key:  'youtube:dQw4w9WgXcQ' },                  // THE cache/dedupe identity\n//  { …, href: 'https://a.com/x', site: null, id: null, key: 'a.com/x' }]\n\n// One pasted token → one resolved Url (or null). Punctuation, brackets,\n// emails-are-not-URLs: the scanner's problem, not yours.\nurlOf('<https://example.com/a?utm_source=x>,')?.href  // 'https://example.com/a'\nurlOf('example.com/a', { requireScheme: true })       // null (bare domains opt-out)\n\n// `key` is the point: every spelling of one resource collides.\n// Recognized sites collapse to their native content id —\nurlKey('https://music.youtube.com/watch?v=dQw4w9WgXcQ&si=x')  // 'youtube:dQw4w9WgXcQ'\nurlKey('https://www.youtube.com/shorts/dQw4w9WgXcQ')          // 'youtube:dQw4w9WgXcQ'\n// — everything else canonicalizes generically:\nurlKey('https://www.theverge.com/2026/story/?utm_source=x#c') // 'theverge.com/2026/story'\n\n// The SAME resource minus tracking — keeps scheme, www., order, fragment.\ncleanUrl('https://www.youtube.com/watch?v=abc&t=120s&si=junk')\n// 'https://www.youtube.com/watch?v=abc&t=120s'\n\n// YouTube identity from ANY spelling (watch, youtu.be, shorts, live, embed,\n// music., nocookie, redirect wrappers, bare 11-char id):\nyoutubeVideoId('https://www.youtube.com/attribution_link?u=%2Fwatch%3Fv%3DdQw4w9WgXcQ')\n// 'dQw4w9WgXcQ'\nyoutubeUrl('dQw4w9WgXcQ')           // 'https://www.youtube.com/watch?v=dQw4w9WgXcQ'\nyoutubeThumbnailUrl('dQw4w9WgXcQ')  // 'https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg'\n\nhostOf('https://www.theverge.com/a')            // 'theverge.com'\nhostMatches('music.youtube.com', 'youtube.com') // true (RFC 6265 domain-match)\nhostMatches('notyoutube.com', 'youtube.com')    // false\n\n// App-specific junk rides along per call\nurlKey(url, { strip: ['session_id'] })\n```\n\nUnparseable or non-http(s) input passes through unchanged — these are hygiene\nfunctions over user-pasted text, not validators.\n\n### CLI presentation (`cli`)\n\nTerminal output: aligned tables, key/value blocks, trees, and a semantic color\npalette. Distinct from `format` (universal value formatting) — this is\nterminal-scoped. Colors come from the logger and auto-disable on non-TTY /\n`NO_COLOR`, and alignment is **ANSI-aware** (padding uses visible width), so a\n`table()` renders colored in a terminal and as plain aligned text in a pipe, log\nfile, or a bot's monospace block.\n\n```typescript\nimport { table, kv, tree, indent, clip, ui } from '@adriangalilea/utils/cli'\n\n// Semantic palette — use these, not raw colors, so intent stays consistent\nui.head('Name')   ui.accent('id')   ui.muted('note')\nui.ok('done')     ui.warn('!')      ui.bad('err')   ui.ref('#abc123')\n\n// Aligned columns (auto width; per-column align; optional bolded header).\n// Cells may be pre-colored — widths use visible length so they still line up.\ntable(\n  [['Ada', ui.accent('ada@x.com'), ui.ref('42')],\n   ['Bo',  ui.accent('bo@y.com'),  ui.ref('7')]],\n  { head: ['name', 'email', 'msgs'], align: ['l', 'l', 'r'] },\n)\n\n// Key/value block (aligned keys) — for a detail view\nkv([['name', 'Ada'], ['email', 'ada@x.com']], { indent: 2 })\n\n// Nesting\ntree('Ada', ['email: ada@x.com', 'phone: +1…'])   // labeled node + children\nindent(block, 4)                                    // indent every line\nclip('a very long value', 10)                       // \"a very lo…\" (ANSI-aware — styled input stays styled)\n```\n\nRun the demo: `FORCE_COLOR=1 pnpm tsx tests/cli-demo.ts`.\n\n### Live output (`cli`) — pinned region, spinner, progress\n\nA pinned, self-repainting region at the bottom of the terminal for progress UIs. You own the state; the region is a `render: () => string` repainted on a timer — a frame is just a string, so `table()` / `kv()` / `ui` and the widgets (`spin()`, `bar()`, `elapsed()`) compose inside it unchanged.\n\n```typescript\nimport { live, spinner, spin, bar, elapsed, table, ui } from '@adriangalilea/utils/cli'\n\n// The one-liner: animated while fn runs, persists \"✓ label 1.2s\" when done\nawait spinner('connecting to imap.gmail.com', () => adapter.connect())\n\n// The general region: declarative multi-line progress\nconst region = live(() => table(accounts.map(a => [\n  a.done === a.total ? ui.ok('✓') : spin(),\n  a.alias,\n  bar(a.done, a.total, 18),\n  ui.muted(`${a.rate}/s`),\n])))\n// ...mutate your state; it repaints ~12.5fps (region.refresh() for instant)\nregion.done()   // final frame persists into scrollback (or .clear() to remove)\n```\n\nPatterns:\n\n```typescript\n// Relabel a spinner mid-flight — fn receives a setter\nawait spinner('connecting 0/4', async (set) => {\n  for (const [i, a] of accounts.entries()) { await a.connect(); set(`connecting ${i + 1}/4`) }\n})\n\n// Streaming table — rows appear as they arrive, columns re-align retroactively\nconst rows: string[][] = []\nconst region = live(() => table(rows, { head: ['day', 'author', 'title'] }))\nfor await (const e of feed) { rows.push(renderRow(e)); region.refresh() }\nregion.done()   // full aligned table persists (a pipe gets exactly this, once)\n\n// State-dependent bar color — style hook on the filled part\nbar(done, total, 18, ui.warn)   // amber: throttled/cooling\n```\n\nWhat makes it hold up:\n\n- **Logging never tears the UI, with no API to learn.** While a region is active, `console.log/warn/error` — and therefore the logger — are rerouted to print *above* the region (erase → write → repaint). Keep logging from anywhere, including third-party code. Boundary: only `console.*` is patched — a library writing raw to `process.stdout.write` bypasses the routing and can tear.\n- **Non-TTY degrades to sane output.** In a pipe / CI / log file nothing animates: `done()` prints the final frame once, `spinner()` prints just its `✓ label 1.2s` line. Same calling code. Opt-in `heartbeat: ms` prints plain snapshots so long CI runs aren't silent.\n- **Renders to stderr by default** — stdout stays clean for `--json` and pipes.\n- **Crash-safe cursor**: hidden while painting, restored on done/clear, process exit, and signals — politely (if the app has its own SIGINT handler for graceful shutdown, it stays in charge).\n- **Flicker-free**: synchronized-update escapes (`?2026`) make repaints atomic on modern terminals; lines are ANSI-aware clipped to the terminal width so the erase math never breaks.\n- **Measurement is grapheme-aware**: a ZWJ emoji / flag counts as one visible unit in `width()`/`clip()`/`table()` alignment. East-Asian double-width (CJK) is a known TODO — those columns can drift a cell.\n- One **region** at a time, by design (`assert`): two pinned regions can't share the bottom of one screen — compose into a single `render()`. A `spinner()` started *under* an active region is legitimate composition and degrades gracefully: its final line prints above the region.\n\nRun the demo: `pnpm tsx tests/live-demo.ts` (and pipe it through `| cat` to see the non-TTY degradation).\n\n### Offensive Programming\n\nFail loud, fail fast. Zero dependencies, works in Node, Deno, Bun, and browsers.\n\nTwo kinds of errors, kept separate: **`Panic`** (bugs in us — crash the process) and **`SourcedError`** (boundary failures — handle per-source).\n\n```typescript\nimport { assert, panic, assertNever, must, unwrap, Panic, SourcedError, isSourcedError } from '@adriangalilea/utils'\n\n// Assert invariants — narrows types via `asserts condition`\nassert(port > 0 && port < 65536, 'invalid port:', port)\n\n// Impossible state\nswitch (state) {\n  case 'ready': handleReady(); break\n  default: panic('impossible state:', state)\n}\n\n// Exhaustiveness check — TS compile error if you miss a case\ntype Event = { kind: 'click' } | { kind: 'hover' } | { kind: 'scroll' }\nfunction handle(e: Event) {\n  switch (e.kind) {\n    case 'click': return handleClick()\n    case 'hover': return handleHover()\n    // forgot 'scroll' → TS error: Argument of type '{ kind: \"scroll\" }' not assignable to 'never'\n    default: return assertNever(e)\n  }\n}\n// Add a new variant to Event → every assertNever site lights up at compile time.\n\n// Unwrap operations that shouldn't fail (sync + async)\nconst data = must(() => JSON.parse(staticJsonString))\nconst file = must(() => readFileSync(path))\nconst resp = await must(() => fetch(url))\n\n// Unwrap nullable values — T | null | undefined → T in one expression\nconst user = unwrap(db.findUser(id), 'user not found:', id)\nconst el = unwrap(document.getElementById('app'))\n```\n\n#### Typed boundary errors — `SourcedError`\n\nEvery external system call should wear its source. When it fails, carry forensics:\n\n```typescript\nimport { SourcedError, isSourcedError, Panic } from '@adriangalilea/utils'\n\ntry {\n  return await stripe.charges.create({ customer, amount })\n} catch (e) {\n  throw new SourcedError({\n    source: 'stripe',\n    operation: 'charge_customer',\n    message: e instanceof Error ? e.message : String(e),\n    status: (e as any)?.statusCode,\n    cause: e,\n    context: { customer, amount },\n  })\n}\n\n// At catch boundaries — keep Panics and SourcedErrors separate:\ntry { await doWork() }\ncatch (e) {\n  if (e instanceof Panic) throw e                            // bug in us — crash\n  if (isSourcedError(e, 'stripe') && e.status === 402) {\n    // TS knows e.source === 'stripe' here (generic narrows)\n    return { error: 'card declined' }\n  }\n  if (isSourcedError(e)) {\n    log.scope(e.source).error(e.operation, e.toJSON())  // structured forensics\n    throw e\n  }\n  throw e                                                     // unknown — re-throw\n}\n```\n\nEvery `SourcedError` carries `source`, `operation`, `status`, `context`, and the original exception via `cause`. Call `.toJSON()` for serialization across process boundaries.\n\n## Features\n\n- **Logger**: human/record dual rendering (TTY-detected), scoped env-controlled levels, shared record format with go-utils and py-utils\n- **Currency**:\n  - 13,750+ crypto symbols from CoinGecko (auto-updatable)\n  - Alternative ticker support (XBT→BTC, wrapped tokens, etc.)\n  - Optimal decimal calculations\n  - Percentage and basis point utilities\n  - Fiat and stablecoin detection\n- **Format**: Number and currency formatting with compact notation\n- **CLI**: ANSI-aware tables/kv/trees + semantic palette, and live output — pinned self-repainting region, spinner, progress bar, with logs flowing above and clean non-TTY degradation\n- **Offensive Programming**: assert, panic, assertNever, must, unwrap (throw `Panic`) + SourcedError for typed boundary failures\n- **File Operations**: Read, write with automatic path resolution\n- **Directory Operations**: Create, list, walk directories\n- **KEV**: Redis-style environment variable management with monorepo support\n- **XDG**: XDG Base Directory paths — reads env vars set by [xdg-dirs](https://github.com/adriangalilea/xdg-dirs), falls back to spec defaults\n- **Unseen**: Persistent dedup filter — \"what's new since last time?\" for cron/monitoring workflows\n- **Project Discovery**: Find project/monorepo roots, detect JS/TS projects\n- **LLM caller (`llm`)**: multi-provider failover on top of the Vercel AI SDK — priority ordering, per-key circuit breaker (KV-backed), reset events for live previews, usage accounting with actual billed cost (OpenRouter), tool calling. Worker-safe.\n- **Bot plugins (GramIO)**: `kit` (graceful shutdown + admin context), `access-control` (gate + approve/deny menu, backed by sessions), `llm` (draft-streamed replies `streamChatReply` + per-thread conversation history `ctx.llm`), `payments` (Telegram Stars: VIP tiers + credits + perks + waiver + refund flow, ToS-compliant, Spanish-autónomo-aware), `coalesce`, `language`, `menu`\n\n### XDG Base Directories\n\nXDG paths that respect env vars from [xdg-dirs](https://github.com/adriangalilea/xdg-dirs) with spec-compliant fallbacks:\n\n```typescript\nimport { xdg, dir } from '@adriangalilea/utils'\n\nxdg.state('notify')                    // ~/.local/state/notify\nxdg.state('notify', 'watchers.json')   // ~/.local/state/notify/watchers.json\nxdg.config('myapp')                    // ~/.config/myapp\nxdg.data('myapp')                      // ~/.local/share/myapp\nxdg.cache('myapp')                     // ~/.cache/myapp\nxdg.runtime('myapp')                   // $XDG_RUNTIME_DIR/myapp\n\n// Ensure the directory exists before writing\ndir.create(xdg.state('notify'))\n```\n\n### Unseen\n\n\"What's new since last time?\" — filters an array of objects to only the ones you haven't seen before. Remembers across runs.\n\n```typescript\nimport { unseen } from '@adriangalilea/utils'\n\nconst messages = await fetchMessages()\nconst newMessages = await unseen('messages', messages, 'id')\n```\n\n1st run:\n```\nmessages    = [{ id: '1', from: 'alice', text: 'hi' }]\nnewMessages = [{ id: '1', from: 'alice', text: 'hi' }]\n```\n\n2nd run, no new message:\n```\nnewMessages = []\n```\n\n3rd run, bob replied:\n```\nmessages    = [{ id: '1', ... }, { id: '2', from: 'bob', text: 'hey' }]\nnewMessages = [{ id: '2', from: 'bob', text: 'hey' }]\n```\n\nSaves state to: `$XDG_STATE_HOME/unseen/{name}.json`\n\n### Polyglot strings (`say`)\n\nA typed multi-language string is just an object literal `{ en, es, … }` — the keys are the source of truth, the TS compiler enforces completeness, there's no JSON file / extraction tool / registry.\n\n```typescript\nimport { say, type Polyglot } from '@adriangalilea/utils/say'\n\nsay({ en: 'Hello', es: 'Hola' }, 'es')       // → 'Hola'\nsay({ en: 'Hello', es: 'Hola' }, 'fr')       // TS error: '\"fr\"' not in '\"en\" | \"es\"'\n\n// parametric — closures, no wrapper:\nconst greeting = (name: string) => ({ en: `Hi ${name}`, es: `Hola ${name}` })\nsay(greeting('Adrian'), 'es')                 // → 'Hola Adrian'\n\n// type your own adapter:\nconst notify = (msg: Polyglot<'en' | 'es'>, lang: 'en' | 'es') =>\n  transport.send(say(msg, lang))\n```\n\nIn a bot, `bot/language` adds `ctx.lang` + `ctx.say`. Both resolve stored explicit pick → Telegram client hint → configured default, at READ time — the hint is never persisted, and `session.language` is written only by an explicit pick (the plugin's menuItem action):\n\n```typescript\nctx.say({ en: 'Continue', es: 'Continuar' })       // → string\nawait ctx.say.send({ en: 'Hi', es: 'Hola' })       // → ctx.send(resolved)\nawait ctx.say.edit({ en: 'Done', es: 'Listo' })    // → ctx.editText (callback only)\nawait ctx.say.answer({ en: 'OK', es: 'OK' })       // → ctx.answer (callback only)\n```\n\n### Telegram HTML (`tg-html`)\n\nTransform arbitrary (LLM-emitted) HTML into Telegram-compatible `parse_mode=HTML` with opinionated, consistent spacing. Telegram's HTML subset has no headings, lists, or block layout — send it `<h1>`/`<ul>` and the API rejects the whole message. `transform()` accepts the HTML a model naturally writes and renders the structure typographically: `h1` → bold+underline + blank line, `h2…h6` → bold + blank line, `ul/li` → `• ` bullets, blocks get blank lines, blockquotes keep their internal line breaks, allowed tags pass through with attributes filtered, unknown tags drop their markup (content kept), and stray `<`/`>` escape instead of vanishing. Zero dependencies, no DOM, Worker-safe.\n\n```typescript\nimport { transform } from '@adriangalilea/utils/tg-html'\n\ntransform('<h1>Title</h1><ul><li>Point one</li><li>Point two</li></ul>')\n// '<b><u>Title</u></b>\\n\\n• Point one\\n• Point two'\n```\n\n### Telegram Markdown (`tg-md`)\n\nThe MARKDOWN twin of `tg-html`, for the markdown LLMs actually emit (grown in xtldr's bot, moved here verbatim). One opinionated dialect — `_` is NEVER emphasis so `snake_case` survives, every tag balanced by construction so Telegram can't reject a render, pure whole-string functions so full-frame draft repaints (`bot/draft`) degrade malformed mid-stream markdown to literal text — rendered to every shape a bot sends:\n\n```typescript\nimport { markdownToRichHtml, markdownToTelegramHtml, toPlainText, tidyRichMarkdown } from '@adriangalilea/utils/tg-md'\n\nmarkdownToRichHtml(md, coverUrl) // rich-message HTML (Bot API 10.1): real <h1>/<ul>, cover <img> spliced after the title\nmarkdownToTelegramHtml(md)       // strict parse_mode=HTML subset: bold-underlined title, breathing headings, • bullets, ###### footer stays quiet\ntoPlainText(md)                  // last-ditch fallback; quotes keep their > marker\ntidyRichMarkdown(md)             // strip the stray ```fence``` models wrap replies in\n```\n\nZero dependencies, Worker-safe. Typography (heading air, bullet glyph, title underline) IS the opinion; it gets options when a second consumer needs a different look, not before.\n\n### Telegram bot plugins (GramIO)\n\nPlugins for personal Telegram bots built on [GramIO](https://gramio.dev). Each plugin lives at its own subpath; peer deps (`gramio`, `@gramio/storage`, `@gramio/session`, `@gramio/format`) are **all optional** — install only what you import.\n\n```bash\npnpm add @adriangalilea/utils gramio @gramio/storage @gramio/session\n```\n\n#### One bot file, ideation → production (`bot/create`)\n\n`createBot` is the composer: it constructs the storage + session pair ONCE and threads it into every feature, so \"must be the SAME instance you passed to session()\" is unrepresentable instead of a doc warning. The same file runs in every stage — **storage and transport are environment decisions, never code shape**:\n\n| stage | run | session | transport |\n|---|---|---|---|\n| ideation | `BOT_TOKEN=… tsx bot.ts` | memory (ephemeral, announced) | long-poll |\n| experiment | `BOT_PERSIST=./bot.sqlite tsx bot.ts` | sqlite | long-poll |\n| prod · your own hardware | systemd/launchd unit running the same command | sqlite / `BOT_PERSIST=redis://…` | long-poll (a legitimate prod mode: dials out, no inbound port/TLS) |\n| prod · Cloudflare Worker | `wrangler deploy` (D1 binding `DB`) | D1 (`bot/storage-d1`) | webhook (`bot/worker`) |\n| prod · Node/Bun server | webhook behind your HTTP server | sqlite/redis | fetch-shaped handler |\n\n```typescript\nimport { createBot } from '@adriangalilea/utils/bot/create'\n\nconst app = createBot({\n  admins: 190202471,\n  language: { supported: ['en', 'es'] as const, default: 'en' },\n  menu: {\n    adminContact: '@you',\n    header: async (ctx) => `⚙️ hi ${ctx.from?.firstName}`,   // async — read your db here\n    items: [/* … */],\n    personalData: { onForget: async (ctx, userId) => {/* wipe YOUR tables */} },\n  },\n  handlers: (bot) => bot.command('start', (ctx) => ctx.say({ en: 'hi', es: 'hola' })),\n})\n\nexport default app                       // Worker: webhook + /setup + /pause + deploy DMs\nif (app.isMain(import.meta)) app.poll()  // Node: `tsx bot.ts` long-polls\n```\n\nCloudflare is one adapter, not the architecture: `bot/worker` and `bot/storage-d1` are the workerd cap (~each 100 lines, both optional); `bot/kit`'s `gracefulStart` is the Node twin (signals + start/stop DMs) and stays the one deliberately Node-only corner. The worker-safe tripwire (`pnpm test:worker-safe`) guarantees the core never grows a Node dependency.\n\n#### Design rules the bot plugins hold to (each learned the hard way)\n\n- **Resolution is read-time.** Language resolves stored pick → live Telegram hint → default on every surface (`ctx.lang`, `ctx.say`, menu chrome, picker highlight). Inferred values are NEVER persisted — a user who switches their client language moves with it until they pick.\n- **Only explicit user signals are stored.** The session holds picks, consent, state the user created — never derived values, never render caches. If a sync signature ever tempts you to cache a rendered string into the session, the signature is the bug (menu resolvers are async for exactly this reason).\n- **Derives cover every event the user can speak through** — message, callback, AND inline. A feature that skips inline forces consumers to fork shadow helpers that read the session directly; those forks then read as design.\n- **Forget actually forgets.** `personalData.onForget` runs inside the same try as the session delete: your message logs/metrics/credit rows get wiped too, or the user is told it failed — never a partial erasure reading as success.\n- **The composer owns instance wiring.** Features still compose manually (below) when you need full control, but every \"same instance\" contract has one home.\n\n#### Threaded Mode\n\nTelegram's [Threaded Mode](https://telegram.org/blog/threaded-conversations) for private chats (BotFather → Bot Settings → Threaded Mode) auto-threads out of the box: `@gramio/contexts` ≥0.9 (what gramio ≥0.12 resolves) forwards `message_thread_id` on every `ctx.send` / `ctx.sendDocument` / `ctx.reply` — including from callback handlers, which carry `threadId` too. No fork, no override.\n\n**Runs on Cloudflare Workers / bun / anywhere.** Every bot subpath below is import-safe off Node — no filesystem access, no `node:*` modules, no import-time side effects anywhere in its graph — **except `bot/kit`**, whose `gracefulStart` handles process signals. `pnpm test:worker-safe` walks every graph and screams on regression.\n\n| Subpath | What it does |\n|---|---|\n| `@adriangalilea/utils/bot/ctx` | Structural ctx types (`BotMessageCtx`, `BotCallbackCtx`, …) and the `narrow<T>(ctx)` cast helper. Pure typing — no runtime state. |\n| `@adriangalilea/utils/bot/keys` | The bot-id key namespace, a **persisted contract**: `botId(ctx)`, `botStorageKey(ctx, userId)` → `bot-<id>:<userId>`, `botSubKey(ctx, sub)` → `bot-<id>:<sub>`. Every storage key the library writes derives from here, and those keys live in YOUR Redis/D1 rows — the shape never changes. Pure functions of `ctx.bot.info.id` (no env/fs), which is what keeps the whole bot surface Worker-safe. |\n| `@adriangalilea/utils/bot/kit` | The Node-only corner, one function: `gracefulStart(bot, opts?)` — SIGINT/SIGTERM → `bot.stop()` → exit; force-kills if shutdown hangs; calls `bot.syncCommands()` before `bot.start()`. DMs the admin `@<bot> started.` / `@<bot> shutting down.` by default when `KEV.TELEGRAM_ADMIN_ID` is set (graceful only — crashes don't trigger `onStop`); pass `notifyAdmin: false` to disable or `notifyAdmin: 12345` for an explicit chat id. |\n| `@adriangalilea/utils/bot/admin` | `adminContext(admins)` — decorates `ctx.adminId` (the primary admin: the approve/deny and notification target) and `ctx.isAdmin` (any admin) on every event. Ids arrive POSITIONALLY as a number, an array, or a FUNCTION consulted per update, so a db-backed resolver changes who is admin with no restart. Reads no env and touches no OS, which is what keeps it Worker-safe; a Node bot composes env in at the call site (`adminContext(kev.int('TELEGRAM_ADMIN_ID', 123))`). `parseIdList(\"123, 456 789\")` turns an env string into clean ids. `accessControl` and the payments refund flow declare a gramio dependency on this plugin, so gramio throws at `bot.start()` if you forget it. |\n| `@adriangalilea/utils/bot/session` | `botSession(opts)` — **drop-in replacement for `@gramio/session`'s `session()`** that auto-namespaces every key as `bot-<id>:<senderId>` using `ctx.bot.info.id` (populated by `getMe()` at startup). Use this instead of `session()` — full stop. Multiple bots sharing one Redis/D1 stay isolated by construction; every plugin in this package derives the same prefix internally via `botStorageKey(ctx, userId)` / `botSubKey(ctx, sub)` (from `bot/keys`). No regex, no manual prefix argument, no way to forget. Worker-safe. |\n| `@adriangalilea/utils/bot/notify` | Best-effort admin DMs, worker-safe (you pass the ids; no env, no process). `notifyAdmins(bot, adminIds, text, extra?)` — DM each admin, failures logged and swallowed (a notification must never take the bot down). `alertAdminError(bot, adminIds, label, error, throttle?)` — truncated `🚨 label\\nName: message`, rate-limited through a caller-owned `alertThrottle(ms?)` so a failure storm sends one alert per window. `gracefulStart`'s start/stop DMs are built on this. |\n| `@adriangalilea/utils/bot/profile` | `syncBotProfile(bot, { name?, description?, about?, photo?, commands?, expects?, adminIds? })` — the bot's Telegram-facing identity as CODE, never BotFather: localized name / description / About / public command list, reconciled idempotently on every boot (get → compare → set per field per language; unchanged values cost one read, so cold-start firing is rate-limit-free). `expects: { inline: true }` declares the BotFather-only capabilities the code assumes — a mismatch (inline mode off on an inline-dependent bot) DMs the admins, since the API can only detect it, not fix it. Never throws; failures log and the bot keeps running. |\n| `@adriangalilea/utils/bot/access-control` | Personal-bot ACL — gates non-admin/non-default users; admin gets DM with `[✅ Aprobar][❌ Denegar]` on first attempt; `/access` opens a persistent menu (revoke / reapprove / list pending). Backed by `@gramio/session` per-user + a small index. **Native alternative**: BotFather → Bot Settings → Access → \"Restrict bot usage\" — flat allow-list at Telegram. Use this plugin when you want in-bot approval flow instead of a BotFather round-trip; both can coexist. |\n| `@adriangalilea/utils/bot/allow-list` | Static allow-list by **id and/or @username** — stateless, no session/storage. `allowList({ ids?, usernames? })` is a plugin that decorates `ctx.allowed` (boolean); gate in your handlers (`if (!ctx.allowed) return`). `makeAllowList(...)` is the pure framework-free predicate. The light counterpart to `access-control` (which adds an approve/deny flow + revocable store, needing session+storage). Username caveat: a `@username` is optional and mutable, and the Bot API can't resolve username→id ahead of time — prefer `ids` when known, `usernames` is the pragmatic fallback. |\n| `@adriangalilea/utils/bot/groups` | Group-chat identity as plain functions: `chatIdOf(ctx)` (the chat id on any ctx flavour), `isGroupChat(ctx)` / `isPrivateChat(ctx)`, and `isGroupAdmin(ctx, { chatId?, userId? }?)` — the `getChatMember` creator/administrator check behind every admin-gated group setting (auto-summary toggles, \"dismiss\" buttons on group welcomes), chat/user defaulted from the ctx. Every reader resolves both gramio spellings — message ctxs carry `chat`, callback ctxs (inline-button taps) only `chatId`/`message.chat` — so the same gate works in handlers and taps; read chat ids via `chatIdOf`, never `ctx.chat?.id`. Takes real gramio ctxs and `MenuCtx` with no cast; a miswired ctx panics, an API rejection fails closed (`false`). Composition over policy: bot-owner override stays at your call site (`ctx.isAdmin \\|\\| await isGroupAdmin(ctx)`). |\n| `@adriangalilea/utils/bot/language` (picker surface) | The language-picker vocabulary and surfaces, so bots don't fork label lists: `flagFor` / `autonym` / `languageLabel` (\"🇪🇸 Español\"), `languagePickerItem({ label, codes, isActive, pick })` (the 2-up primary-highlighted MenuItem factory — storage and policy live in your closures), and `addLanguageRows(kb, { codes, pack, active?, activeStyle? })` (the raw-InlineKeyboard twin for onboarding / group-welcome keyboards; `activeStyle: \"success\"` when primary already marks something else on the keyboard). |\n| `@adriangalilea/utils/bot/user` | `userLabel(u)` — the conditional \"[name] [@username] [id]\" line every bot re-rolls for admin DMs and logs: `Ada Lovelace (@ada · 42)` / `Ada (42)` / `@ada (42)` / `id 42`, missing pieces drop instead of padding. Reads both gramio spellings (`firstName` / `first_name`); plain text by design. |\n| `@adriangalilea/utils/bot/urls` | Telegram-message URL + entity parsing, on what the platform ALREADY parsed (entities carry exact UTF-16 spans — never `startsWith(\"/\")` or a mention regex). `urlsInMessage(msg)` → the url module's `Url[]`: the visible text scanned by `urlsIn` PLUS `text_link` entities — hyperlinked words whose URL never appears in the text, invisible to any text scanner (what forwarded newsletters carry); a text_link's `raw` is its anchor words and its span covers them, so span-cutting treats linked words as the link. `isCommandMessage(msg)` (a `bot_command` entity at offset 0), `commandToken(msg)` (the leading command without any `@botname` suffix, `/summary@my_bot` → `/summary`; null for ordinary text), `commandAddressee(msg)` (the bot a command is explicitly addressed to, lowercased, null when bare — the group addressing gate: a bare command may belong to any bot in the room, one addressed elsewhere never concerns yours), `cutEntities(text, entities, shouldCut)` (exact span surgery; the predicate sees each visible slice), `messageTextAndEntities(msg)` (text or caption with ITS entity set). Framework-agnostic by shape: gramio's `MessageEntity` class and the raw Bot API object both fit. |\n| `@adriangalilea/utils/bot/announce` | The house announcement (news) template for bot mass messages, first-class: an `Announcement` = banner (`# 📰 <bot> News`), ordered sections (canonical `section.info/features/fixes` with 💬/✨/🐛, free-form allowed), italic closer, `· signature` (middle dot by design, never an em dash). `renderAnnouncement(a)` → the Telegram-markdown subset; `renderAnnouncementBodies({en, es, …})` → per-language bodies for a polyglot broadcast engine (\"en\" is the required fallback anchor). Pure, zero deps. |\n| `@adriangalilea/utils/bot/updates` | The pending-update queue of a webhook-less bot token, treated as the destroy-on-read resource it is (`getUpdates` with an offset CONFIRMS — destroys — everything below it). `updateQueue({ token, fetch?, apiRoot? })` → `peek({ limit? })` (webhook state + pending count + the queue head, verbatim; sends NO offset so nothing is ever confirmed — repeatable, zero risk), `count()`, `webhookInfo()`, and `drain({ onBatch, limit?, timeoutS?, quietPolls? })` — the one-chance-safe sweep: each raw batch is handed to `onBatch` (persist it somewhere durable) and AWAITED before the offset advances, because the next call is the confirmation; a crash re-delivers the unconfirmed tail on re-run, and the drain ends only after several consecutive silent long-polls, never on the first empty response. A 409 (webhook registered / competing poller) is a typed `SourcedError`, never a silent retry. Plain `fetch`, injectable for tests; no framework. |\n| `@adriangalilea/utils/bot/inline-feedback` | Behavioral tripwire for BotFather's inline feedback probability (gates `chosen_inline_result`; defaults 0%, silently resets on bot transfer and inline-mode toggling, invisible to `getMe`): served-but-never-chosen crosses a threshold → throttled admin DM naming the exact BotFather switch. Storage injected as three ops; never throws into the answer path. |\n| `@adriangalilea/utils/bot/coalesce` | Joins client-split inbound messages back into one. When a user pastes >4096 chars, Telegram clients fragment it into separate `message` updates with no marker. Middleware detects the burst and emits one combined event. |\n| `@adriangalilea/utils/llm` | Multi-provider LLM caller on the Vercel AI SDK — the policy layer the SDK doesn't ship. `createLlm({ providers, health? })` → `.stream(req)` (typed events: `delta` / `reasoning` / `reset` / `tool-call` / `end`) and `.complete(req)`. **Failover:** priority-ordered across OpenAI-compatible, Anthropic-compatible, and OpenRouter endpoints; multiple keys per provider (health tracked per key fingerprint); per-key circuit breaker with exponential cool-down persisted in any KV-shaped `HealthStore`; an attempt that dies after emitting yields `reset` (discard, next candidate regenerates); empty completions count as failures. **Accounting:** tokens summed across billed attempts; `costUsd` is the ACTUAL charge (OpenRouter usage accounting via `providerMetadata`, or a `cost` field on the raw usage frame) — never a price-table estimate. **Knobs:** per-model temperature, maxTokens caps, `disableThinking` mapped to each dialect. **Tools:** AI SDK `tool()` + `toolChoice` pass through (re-exported). Worker-safe; peers: `ai`, `@ai-sdk/openai-compatible`, `@ai-sdk/anthropic`, `@openrouter/ai-sdk-provider`. |\n| `@adriangalilea/utils/bot/llm` | The Telegram side of an LLM chatbot; the model side is `@adriangalilea/utils/llm`. **Output:** `streamChatReply(ctx, events, opts?)` consumes an `AsyncIterable<LlmStreamEvent>` and paints it with Telegram's native message-draft streaming (`sendMessageDraft` full-frame repaints, throttled ~1/s, keepalive under the ~30s draft TTL), then persists the finished markdown via `ctx.send`, entity-split across 4096 by `@gramio/split`. Reasoning models get a thinking phase — streams into the ephemeral draft and evaporates (`reasoning: 'preview'`, default), persists as an expandable blockquote (`'message'`), or never renders at all (`'hidden'`). Upstream `reset` (provider failover) repaints the draft from scratch. Drafts are private-chat-only (+ BotFather forum-topic mode); elsewhere the preview phase is skipped and only the final send happens. Returns `{ content, reasoning, toolCalls, usage, messages }`. The painter underneath is `@adriangalilea/utils/bot/draft` (`createDraftPreview(ctx, { render, throttleMs? })`): dependency-light (no markdown machinery), for producers that push deltas or own their per-frame rendering (plain or rich-message frames) and persist path, with `streamForensics` (render-regression + reset warnings) built in and exported standalone. **History:** `llmHistory({...})` returns `.plugin` (decorates `ctx.llm` with `.add() / .get() / .clear() / .all() / .clearAll()`, per-(user, thread) OpenAI `ChatMessage` shape, persisted in the shared session record so the menu's 🗑 Forget wipes it automatically) AND `.menuItem` (drop-in \"🗑 Delete this thread\" for `botMenu` — wipes the LLM history AND calls `deleteForumTopic` so the Telegram thread + all its messages disappear from the chat; falls back to history-only clear when no `threadId` is present). |\n| `@adriangalilea/utils/metrics` | Declared counters and timings, bounded dimensions, optional actor IDs, and a schema for generic reporting. Inject a store (`store: metricsStore(driver, project)`); measurement failures are reported without rejecting calls. See Product metrics below. |\n| `@adriangalilea/utils/metrics/sqlite` | Atomic SQLite driver, explicit provisioning schema, and inclusive UTC daily reports; libSQL is its own module (`metrics/libsql`) over the same driver shape. Connections and credentials belong to the application. |\n| `@adriangalilea/utils/bot/menu` | `botMenu({ command, description, items, privacy?, personalData?, adminContact })` — `/settings` command + InlineKeyboard router. Root view always renders a `🛡️ Privacy & data` submenu button that wraps the privacy policy link plus (if `personalData: { storage }`) 🗑 Forget + 📥 Export buttons. Items take `keepRow` (render on the same row as the next item — e.g. a two-per-row language picker) and `rootExtra` (render at the bottom of the root menu, below Privacy & data). `label` / `header` / `style` / `visible` resolvers may be **async** (read your db at render time — never cache render strings in the session); `parseMode: 'HTML'` renders the header formatted (you own escaping); `personalData.onForget(ctx, userId)` wipes YOUR tables inside the same try as the session delete, so Forget either forgets everything or reports failure. `toggleMenuItem({ id, read, write, label: { off, on }, toast? })` — convenience factory for boolean-toggle items with dynamic label + optional toast, storage-agnostic via `read`/`write` closures. |\n| `@adriangalilea/utils/bot/payments` | `botPayments({ session, storage, paysupport, paysupportHint?, legal, waiver, vip?, credits?, perks? })` — Telegram Stars monetization in one drop-in plugin. **Three axes, all optional:** `vip` (positional tier ladder — single rung in v1 is just `vip: [{...}]`, ladder is `vip: [{...}, {...}]`; ids are `vip.1`, `vip.2`, …), `credits` (consumable balance + top-up packs `credits.1`, `credits.2`, …), `perks` (orthogonal one-shot unlocks `perks.<key>`). **Surface:** `ctx.payments.atLeast('vip')` / `atLeast('vip.2')` (typed rank check), `ctx.payments.tier()` / `.tier.level()` / `.tier.label()`, `ctx.payments.credits.{balance, consume, tryConsume}` (throws `InsufficientCredits`), `ctx.payments.has(perkId)`, `await ctx.payments.require('vip', { feature? })` (gate that sends a localized upgrade prompt deep-linked to `/settings → 💎 VIP`), `await ctx.payments.invoice(productKey)` (threads Art. 103(m) TRLGDCU consent inline before `sendInvoice`). **Owns:** waiver consent flow (versioned text → forces re-consent on bump, snapshotted on every charge for audit), `/paysupport` slash command (Telegram ToS §6.5; `paysupportHint` overrides the where-to-manage-charges line when your menu isn't `/settings`), idempotent `successful_payment` fulfillment via `pay:idempotency:{chargeId}` sentinel, lazy subscription expiry (no cron needed), tier upgrade auto-cancel of the lower rung's renewal, and admin-DM refund approval (mirror of `accessControl`'s [✅ Aprobar][❌ Denegar] pattern). **Returns:** `{ plugin, menuItem, payouts, admin, onFulfilled, onRefunded }` — `menuItem` is the drop-in `💎 VIP` entry for `botMenu`; `admin.{listCharges, getCharge}` backs custom admin commands; `payouts.{record, list, export, exportForUsers}` is the Fragment payout ledger (you receive TON, log the EUR conversion, export time-windowed CSV/JSON for your gestor); `onFulfilled(productKey \\| '*', handler)` / `onRefunded(...)` register fire-and-forget hooks (purchase applied / admin-approved refund — a revenue ledger writes on one, reverses on the other). **Stars-only by design** — Telegram ToS §6.2 forbids third-party payment providers for digital goods. Crypto Pay deferred (MiCA risk); Stripe-outside-Telegram is a future v2 channel. Full compliance memo (Spanish-autónomo seller-of-record analysis, Verifactu vs Crea y Crece, MiCA, Art. 103(m) waiver text, GDPR retention) in `src/bot/payments/CLAUDE.md`. |\n| `@adriangalilea/utils/bot/create` | `createBot<S>({ token?, storage?, initial?, admins?, language?, menu?, access?, payments?, handlers?, worker? })` — the composer (see \"One bot file, ideation → production\" above). Returns `{ build, session, poll, isMain, fetch }`: `poll()` long-polls, `export default app` is a complete Worker, `app.session(ctx)` / the `handlers` callback's `session(ctx)` is the TYPED accessor for your `S` fields. Owns storage+session wiring; resolves storage per environment (D1 binding → `bot/storage-d1`; `BOT_PERSIST` path → sqlite, `redis://` → redis, lazily-imported optional peers; else announced-ephemeral memory) — or pass `storage: (env) => Storage` when the choice is env-dependent (e.g. a D1 binding not named `DB`). Boot NARRATES the composition (`session: memory …`, `features: language(en,es) · menu(/settings)`) so every implicit decision is visible where you're looking. Runnable demo: `pnpm demo:bot`. |\n| `@adriangalilea/utils/bot/worker` | `botWorkerFetch(resolve)` — the Cloudflare Worker cap: secret-checked webhook (ack fast, work + storage flush ride `ctx.waitUntil`, errors DM admins throttled), `POST /setup` (webhook registration with handler-derived `allowed_updates` + a commit-narrating 🚀 deploy DM from the request body), `POST /deploy-started` (the 🛳 \"what is shipping\" DM — curl it from your deploy script on the still-live version, body `{sha, author, message, etaSeconds?}`), operator-authed `/pause` `/resume` `/webhook-status` (+ `statusExtra`), and a `routes` escape hatch tried before the built-ins. Structural bot type — no workers-types dependency. |\n| `@adriangalilea/utils/bot/flags` | `defineFlags(spec, { read, write? })` — feature flags declared ONCE in code, resolved LIVE from the bot's operator-config record (D1 json row, Redis hash — storage-agnostic, Worker-safe, zero deps). Each flag: `{ kind: 'bool'\\|'number'\\|'string', label, help?, default }`, where `default` is a scalar or a **tier map** `{ free, vip?, 'vip.N'? }` resolved off `ctx.payments.tier()` — \"free users get this limit, premium users get that model\" is one declaration, zero branching at the call site (ladder walks down: exact rung → lower rungs → `vip` → `free`). Read sites: `await flags.<key>(ctx)` — stored override wins over the code default, per-ctx reads coalesce into one config fetch. `flags.describe()` is the JSON schema admin panels render generically, so a new flag appears in every panel with zero panel edits; `flags.set(ctx, key, value)` writes a kind-checked live override (`null` clears it — RFC 7386 null-delete, matching SQLite `json_patch`); `flags.overrides(ctx)` lists what's overridden. Corrupt stored values scream (`SourcedError`); bad specs panic at construction. |\n| `@adriangalilea/utils/bot/storage-d1` | `d1Storage({ db, table? })` — `@gramio/storage` adapter over a D1 `session` table (schema in the module doc). `flush()` matters: the session plugin writes un-awaited and workerd freezes the isolate the instant `fetch()` returns — hand `flush` to `bot/worker` (automatic via `createBot`) so writes survive. |\n\nStandard wiring:\n\n```typescript\nimport { Bot } from 'gramio'\nimport { redisStorage } from '@gramio/storage-redis'\nimport { adminContext } from '@adriangalilea/utils/bot/admin'\nimport { gracefulStart } from '@adriangalilea/utils/bot/kit'\nimport { botSession } from '@adriangalilea/utils/bot/session'\nimport { accessControl } from '@adriangalilea/utils/bot/access-control'\nimport { createLlm } from '@adriangalilea/utils/llm'\nimport { streamChatReply, llmHistory, toModelMessages } from '@adriangalilea/utils/bot/llm'\nimport { kev } from '@adriangalilea/utils'\n\n// Raw redis is fine — bot-id namespacing happens inside botSession +\n// every plugin via ctx.bot.info.id. Multiple bots sharing this Redis\n// stay isolated by construction. No manual prefix to remember.\nconst storage = redisStorage()\nconst userSession = botSession({ storage, key: 'session', initial: () => ({}) })\nconst chat = llmHistory({ session: userSession, maxTurns: 20, retentionDays: 7 })\n\n// Any OpenAI-compatible endpoint: vllm-mlx, mlx-lm, llama.cpp, Together, Groq, OpenAI, …\n// More entries = priority failover; a KV-shaped `health` store adds the circuit breaker.\nconst llm = createLlm({\n  providers: [{ id: 'local', type: 'openai', baseUrl: process.env.LLM_URL!, apiKey: 'none', defaultModel: process.env.LLM_MODEL! }],\n})\n\nconst bot = new Bot(process.env.BOT_TOKEN!)\n  .extend(adminContext(kev.int('TELEGRAM_ADMIN_ID', 190202471)))   // or a live resolver\n  .extend(userSession)\n  .extend(accessControl({ session: userSession, storage, defaults: [] }))\n  .extend(chat.plugin)\n  .on('message', async (ctx) => {\n    if (!ctx.access.allowed) return\n    ctx.llm.add({ role: 'user', content: ctx.text ?? '' })\n\n    // Draft-streamed reply: thinking phase previews + final entity-split send.\n    const { content } = await streamChatReply(ctx, llm.stream({\n      instructions: 'You are helpful.',\n      messages: toModelMessages(ctx.llm.get()),\n    }))\n    ctx.llm.add({ role: 'assistant', content })\n  })\n\nawait gracefulStart(bot)\n```\n\nInside handlers, `ctx.access` is a typed discriminated union — `{ allowed: true, source: 'admin' | 'default' | 'store', record? }` or `{ allowed: false, reason }`. `ctx.adminId` and `ctx.isAdmin` are available on every event from `adminContext`.\n\nFor tests/demos without a second Telegram account, `simulateAccessRequest(bot, storage, adminId, fakeUser, msg)` injects a synthetic pending request so admin can exercise the approve/deny flow.\n\n### Menu items — coloured buttons, refresh, toast-return, confirm\n\n`MenuItem` supports four cooperating fields for richer UX. Each is opt-in:\n\n```typescript\nimport { botMenu, toggleMenuItem } from '@adriangalilea/utils/bot/menu'\n\nconst menu = botMenu({\n  command: 'settings',\n  description: 'Open settings',\n  adminContact: '@yourhandle',\n  personalData: { storage },\n  items: [\n    lang.menuItem,           // ← submenu, selected lang renders as a blue (primary) button\n    chat.menuItem,           // ← red (danger) button with built-in \"⚠️ Sure?\" confirm step\n\n    // Boolean toggle — dynamic label + automatic colour + auto-refresh + toast.\n    toggleMenuItem({\n      id: 'thinking',\n      read: (ctx) => (ctx.session as { thinking?: boolean }).thinking ?? false,\n      write: (ctx, v) => { (ctx.session as { thinking?: boolean }).thinking = v },\n      label: {\n        off: { en: '💭 Thinking: OFF', es: '💭 Razonamiento: OFF' },\n        on:  { en: '💭 Thinking: ON',  es: '💭 Razonamiento: ON'  },\n      },\n      toast: {\n        on:  { en: 'Thinking on.',  es: 'Razonamiento activado.'  },\n        off: { en: 'Thinking off.', es: 'Razonamiento desactivado.' },\n      },\n    }),\n\n    // Custom destructive action with an explicit confirm step. The\n    // action only runs after the user taps Confirm in the overlay.\n    {\n      id: 'reset',\n      label: { en: '💥 Reset everything', es: '💥 Resetear todo' },\n      style: 'danger',\n      confirm: {\n        prompt: {\n          en: '⚠️ Reset ALL your data?\\n\\nThis is irreversible.',\n          es: '⚠️ ¿Resetear TODOS tus datos?\\n\\nNo se puede deshacer.',\n        },\n      },\n      action: (ctx) => {\n        ctx.session.somethingHeavy = undefined\n        // Return the toast string — the menu plugin owns the single\n        // answerCallbackQuery for the tap. Calling ctx.answer here\n        // would be a double-answer and would break refresh.\n        return { en: '✅ Reset.', es: '✅ Reseteado.' }\n      },\n    },\n  ],\n})\n```\n\nField summary:\n\n- `style: 'primary' | 'success' | 'danger'` (or `(ctx) => …` for state-dependent colouring) maps to Telegram's native [InlineKeyboardButton.style](https://core.telegram.org/bots/api#inlinekeyboardbutton). Use `style` instead of emoji markers (`●`/`○`) for active-selection signalling — same UX, native rendering.\n- `refresh: true` re-renders the menu in place after `action` runs, so dynamic `label` / `style` resolvers reflect mutated state without the user re-opening `/settings`. `toggleMenuItem` enables this by default.\n- `action` returns `void | string | Polyglot<string>`; the menu plugin sends a single `answerCallbackQuery` with that text. **Never call `ctx.answer(...)` from inside an action** — Telegram rejects the second answer, the action throws, and `refresh` never runs.\n- `confirm: { prompt }` adds a one-step confirmation overlay before the action runs. Cancel returns to root. Use this for destructive actions instead of `ctx.answer({ show_alert: true })` — Telegram's alert UI doesn't compose with refresh / toast.\n- `disabled` (a `(ctx) => boolean` predicate on action items) renders the button greyed-out and non-tappable (Bot API 10.3 DisabledButton — no callback ever fires). A disabled button can't explain itself: pair it with header/body copy saying why, and keep a guard in the action for clients predating the field. `radioMenuItem` exposes it per choice as `disabledWhen(ctx, value)`.\n\n**Live state inside resolvers**: `label` / `style` / `header` / `visible` resolvers fire AFTER the action mutated the session, and they may be **async** — read your database (or `ctx.session.<field>`) directly at render time; never cache render strings into the session to satisfy a signature. `ctx.lang` from `bot/language` is a snapshot at event start and goes stale within the same callback; `ctx.say(...)` IS live and safe to use anywhere.\n\nSee `src/bot/CLAUDE.md` for storage layout, design decisions, and gotchas.\n\n## Release\n\nBump version in `package.json`, push to `main`. CI handles everything:\n\n1. Type-check, lint, build\n2. Publish to npm via [OIDC trusted publishing](https://docs.npmjs.com/generating-provenance-statements) (no tokens — GitHub Actions proves identity directly to npm)\n3. Create git tag `vX.Y.Z`\n4. Generate changelog via [git-cliff](https://github.com/orhun/git-cliff) and create GitHub release\n\n## License\n\nMIT\n","readmeFilename":"README.md"}