{"_id":"@apiclient.xyz/bunq","_rev":"23-1c07355ca6924c62e52316fef514f9bb","name":"@apiclient.xyz/bunq","dist-tags":{"latest":"5.1.1"},"versions":{"3.0.0":{"name":"@apiclient.xyz/bunq","version":"3.0.0","author":{"name":"Lossless GmbH"},"license":"MIT","_id":"@apiclient.xyz/bunq@3.0.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"dist":{"shasum":"35677c1478a6bfff788aeddcdb877bdee07f516e","tarball":"https://registry.npmjs.org/@apiclient.xyz/bunq/-/bunq-3.0.0.tgz","fileCount":90,"integrity":"sha512-2oGi1CWKb1zXJHSKzfoQC+JsEha0Nm9J9A/sg3XWV5WRNPkha4xzI2cp2dF8BMz99c/0npIsefg4QRTqhDeLZg==","signatures":[{"sig":"MEMCID1L9T8SJook97dkM+tYslza0MAwKXbAuxTCaKMl/BOAAh8zKu0yhu4HrZ5oG0GF8uBTqVcgnKGhSj9ku3Dceim2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":448598},"type":"module","_from":"file:apiclient.xyz-bunq-3.0.0.tgz","exports":{".":"./dist_ts/index.js"},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild --web)","test:basic":"(tstest test/test.ts --verbose)","test:errors":"(tstest test/test.errors.ts --verbose)","test:session":"(tstest test/test.session.ts --verbose)","test:advanced":"(tstest test/test.advanced.ts --verbose)","test:payments":"(tstest test/test.payments.simple.ts --verbose)","test:webhooks":"(tstest test/test.webhooks.ts --verbose)"},"_npmUser":{"name":"lossless","email":"hello@lossless.com"},"_resolved":"/tmp/d609d12def857383b0d91ec19eeb2363/apiclient.xyz-bunq-3.0.0.tgz","_integrity":"sha512-2oGi1CWKb1zXJHSKzfoQC+JsEha0Nm9J9A/sg3XWV5WRNPkha4xzI2cp2dF8BMz99c/0npIsefg4QRTqhDeLZg==","_npmVersion":"11.3.0","description":"A full-featured TypeScript/JavaScript client for the bunq API","directories":{},"_nodeVersion":"23.8.0","browserslist":["last 1 chrome versions"],"dependencies":{"@push.rocks/smartfile":"^11.2.5","@push.rocks/smartpath":"^5.0.18","@push.rocks/smarttime":"^4.0.54","@push.rocks/smartcrypto":"^2.0.4","@push.rocks/smartpromise":"^4.2.3","@push.rocks/smartrequest":"^2.0.21"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^24.0.14","@git.zone/tsrun":"^1.3.3","@git.zone/tstest":"^2.3.1","@push.rocks/qenv":"^6.1.0","@git.zone/tsbuild":"^2.6.4","@push.rocks/tapbundle":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/bunq_3.0.0_1752841923652_0.7829351632180717","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"name":"@apiclient.xyz/bunq","version":"3.0.1","author":{"name":"Lossless GmbH"},"license":"MIT","_id":"@apiclient.xyz/bunq@3.0.1","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"dist":{"shasum":"82bcc3385ba79ccb39e5f33b665e16bc50bf0a15","tarball":"https://registry.npmjs.org/@apiclient.xyz/bunq/-/bunq-3.0.1.tgz","fileCount":90,"integrity":"sha512-D63jsWU2+W+GUtrdgZ9eME393zJCy2FSAW90IyL9GcpuV0zhp9zdhNpEaUVTXR7JGKn2KrfRm3rRWpWPRuytyA==","signatures":[{"sig":"MEYCIQC3dXi0U/n5m90giHIfQUJWcbVn6Qf/OPwiTqAFL7soMgIhAIN+w7kWVSC1ELmJ9TAx+EDErrFdyB+s1r38f7Qomek/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":448894},"type":"module","_from":"file:apiclient.xyz-bunq-3.0.1.tgz","exports":{".":"./dist_ts/index.js"},"private":false,"scripts":{"test":"(tstest test/ --verbose)","build":"(tsbuild --web)","test:basic":"(tstest test/test.ts --verbose)","test:errors":"(tstest test/test.errors.ts --verbose)","test:session":"(tstest test/test.session.ts --verbose)","test:advanced":"(tstest test/test.advanced.ts --verbose)","test:payments":"(tstest test/test.payments.simple.ts --verbose)","test:webhooks":"(tstest test/test.webhooks.ts --verbose)"},"_npmUser":{"name":"lossless","email":"hello@lossless.com"},"_resolved":"/tmp/e5aa91f4aa5d8c45c35af5c20cb87e75/apiclient.xyz-bunq-3.0.1.tgz","_integrity":"sha512-D63jsWU2+W+GUtrdgZ9eME393zJCy2FSAW90IyL9GcpuV0zhp9zdhNpEaUVTXR7JGKn2KrfRm3rRWpWPRuytyA==","_npmVersion":"11.3.0","description":"A full-featured TypeScript/JavaScript client for the bunq API","directories":{},"_nodeVersion":"23.8.0","browserslist":["last 1 chrome versions"],"dependencies":{"@push.rocks/smartfile":"^11.2.5","@push.rocks/smartpath":"^5.0.18","@push.rocks/smarttime":"^4.0.54","@push.rocks/smartcrypto":"^2.0.4","@push.rocks/smartpromise":"^4.2.3","@push.rocks/smartrequest":"^2.0.21"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^24.0.14","@git.zone/tsrun":"^1.3.3","@git.zone/tstest":"^2.3.1","@push.rocks/qenv":"^6.1.0","@git.zone/tsbuild":"^2.6.4","@push.rocks/tapbundle":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/bunq_3.0.1_1752860227568_0.5810959398845061","host":"s3://npm-registry-packages-npm-production"}},"3.0.4":{"name":"@apiclient.xyz/bunq","version":"3.0.4","author":{"name":"Lossless GmbH"},"license":"MIT","_id":"@apiclient.xyz/bunq@3.0.4","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"dist":{"shasum":"501a9da90293b3feffef8127d8f75abe7c9c8632","tarball":"https://registry.npmjs.org/@apiclient.xyz/bunq/-/bunq-3.0.4.tgz","fileCount":90,"integrity":"sha512-AoLYiDGEiOmA85pbu+Um3k9X+QDzhWnWa6t+M2IUXI4v4peam+3dCAA5gYWObDEQwazxCkLZDp3v1m7gtDtm3w==","signatures":[{"sig":"MEQCIBwwfGpNru8+/LKAwExDOzY2I+MwaNQOSbKvh6cd76tcAiBHtVlldptXvsNC4fm7ZwCPVoMLWxez7mbGU267VjtznA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":453603},"type":"module","_from":"file:apiclient.xyz-bunq-3.0.4.tgz","exports":{".":"./dist_ts/index.js"},"private":false,"scripts":{"test":"(tstest test/ --verbose --logfile)","build":"(tsbuild --web)","test:basic":"(tstest test/test.ts --verbose)","test:errors":"(tstest test/test.errors.ts --verbose)","test:session":"(tstest test/test.session.ts --verbose)","test:advanced":"(tstest test/test.advanced.ts --verbose)","test:payments":"(tstest test/test.payments.simple.ts --verbose)","test:webhooks":"(tstest test/test.webhooks.ts --verbose)"},"_npmUser":{"name":"lossless","email":"hello@lossless.com"},"_resolved":"/tmp/623043e9fafab5394ee88a2e77f19407/apiclient.xyz-bunq-3.0.4.tgz","_integrity":"sha512-AoLYiDGEiOmA85pbu+Um3k9X+QDzhWnWa6t+M2IUXI4v4peam+3dCAA5gYWObDEQwazxCkLZDp3v1m7gtDtm3w==","_npmVersion":"11.3.0","description":"A full-featured TypeScript/JavaScript client for the bunq API","directories":{},"_nodeVersion":"23.8.0","browserslist":["last 1 chrome versions"],"dependencies":{"@push.rocks/smartfile":"^11.2.5","@push.rocks/smartpath":"^5.0.18","@push.rocks/smarttime":"^4.0.54","@push.rocks/smartcrypto":"^2.0.4","@push.rocks/smartpromise":"^4.2.3","@push.rocks/smartrequest":"^2.0.21"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^24.0.14","@git.zone/tsrun":"^1.3.3","@git.zone/tstest":"^2.3.1","@push.rocks/qenv":"^6.1.0","@git.zone/tsbuild":"^2.6.4","@push.rocks/tapbundle":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/bunq_3.0.4_1753216939241_0.27419058593920065","host":"s3://npm-registry-packages-npm-production"}},"3.0.5":{"name":"@apiclient.xyz/bunq","version":"3.0.5","author":{"name":"Lossless GmbH"},"license":"MIT","_id":"@apiclient.xyz/bunq@3.0.5","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"dist":{"shasum":"14556da33be98b319641a8eb8d2d631b6803962d","tarball":"https://registry.npmjs.org/@apiclient.xyz/bunq/-/bunq-3.0.5.tgz","fileCount":90,"integrity":"sha512-qjCI0BLsaNSWoVQ3clXNli5m3dMKiwqG5NqHzuUDbo9L988soLQz3lYzOPxRF6al4A83P6WFeQyaUOgF/xiJsA==","signatures":[{"sig":"MEQCIGAioek2LaNL0wIEjHzGRixSX1a741Zn5cgFJkncGbBSAiAD+9LByy5ZbPALRLgircm5sXzMhXBMR0cUIqXAybkHFQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":460096},"type":"module","_from":"file:apiclient.xyz-bunq-3.0.5.tgz","exports":{".":"./dist_ts/index.js"},"private":false,"scripts":{"test":"(tstest test/ --verbose --logfile)","build":"(tsbuild --web)","test:basic":"(tstest test/test.ts --verbose)","test:oauth":"(tstest test/test.oauth.ts --verbose)","test:errors":"(tstest test/test.errors.ts --verbose)","test:session":"(tstest test/test.session.ts --verbose)","test:advanced":"(tstest test/test.advanced.ts --verbose)","test:payments":"(tstest test/test.payments.simple.ts --verbose)","test:webhooks":"(tstest test/test.webhooks.ts --verbose)"},"_npmUser":{"name":"lossless","email":"hello@lossless.com"},"_resolved":"/tmp/18f12b25c11e8fca93e1bd820e1d30a3/apiclient.xyz-bunq-3.0.5.tgz","_integrity":"sha512-qjCI0BLsaNSWoVQ3clXNli5m3dMKiwqG5NqHzuUDbo9L988soLQz3lYzOPxRF6al4A83P6WFeQyaUOgF/xiJsA==","_npmVersion":"11.3.0","description":"A full-featured TypeScript/JavaScript client for the bunq API","directories":{},"_nodeVersion":"23.8.0","browserslist":["last 1 chrome versions"],"dependencies":{"@push.rocks/smartfile":"^11.2.5","@push.rocks/smartpath":"^5.0.18","@push.rocks/smarttime":"^4.0.54","@push.rocks/smartcrypto":"^2.0.4","@push.rocks/smartpromise":"^4.2.3","@push.rocks/smartrequest":"^2.0.21"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^24.0.14","@git.zone/tsrun":"^1.3.3","@git.zone/tstest":"^2.3.1","@push.rocks/qenv":"^6.1.0","@git.zone/tsbuild":"^2.6.4","@push.rocks/tapbundle":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/bunq_3.0.5_1753218699786_0.14546153067565282","host":"s3://npm-registry-packages-npm-production"}},"3.0.6":{"name":"@apiclient.xyz/bunq","version":"3.0.6","author":{"name":"Lossless GmbH"},"license":"MIT","_id":"@apiclient.xyz/bunq@3.0.6","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"dist":{"shasum":"139395fb3c77c606de5d46da7f4417e0b509ce86","tarball":"https://registry.npmjs.org/@apiclient.xyz/bunq/-/bunq-3.0.6.tgz","fileCount":90,"integrity":"sha512-+1qdJfHNUgSg+EeLorpqgQGJpuyAT6v3IwVvdhj+rtjb6J61neEZOkfmULUb1Z8Gm/qfxGTiYKNYb0eGFK9fWA==","signatures":[{"sig":"MEUCIQC+B4r02YuHVoP3xEbOFa3KQIcw+WazzFTupBQah07UhgIgU1P5b8idOy5VsJGwLiXxPSKBkDTCHiIXnKClsBdiaI0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":461990},"type":"module","_from":"file:apiclient.xyz-bunq-3.0.6.tgz","exports":{".":"./dist_ts/index.js"},"private":false,"scripts":{"test":"(tstest test/ --verbose --logfile)","build":"(tsbuild --web)","test:basic":"(tstest test/test.ts --verbose)","test:oauth":"(tstest test/test.oauth.ts --verbose)","test:errors":"(tstest test/test.errors.ts --verbose)","test:session":"(tstest test/test.session.ts --verbose)","test:advanced":"(tstest test/test.advanced.ts --verbose)","test:payments":"(tstest test/test.payments.simple.ts --verbose)","test:webhooks":"(tstest test/test.webhooks.ts --verbose)"},"_npmUser":{"name":"lossless","email":"hello@lossless.com"},"_resolved":"/tmp/285860a0314f75d742d925635fe139dc/apiclient.xyz-bunq-3.0.6.tgz","_integrity":"sha512-+1qdJfHNUgSg+EeLorpqgQGJpuyAT6v3IwVvdhj+rtjb6J61neEZOkfmULUb1Z8Gm/qfxGTiYKNYb0eGFK9fWA==","_npmVersion":"11.3.0","description":"A full-featured TypeScript/JavaScript client for the bunq API","directories":{},"_nodeVersion":"23.8.0","browserslist":["last 1 chrome versions"],"dependencies":{"@push.rocks/smartfile":"^11.2.5","@push.rocks/smartpath":"^5.0.18","@push.rocks/smarttime":"^4.0.54","@push.rocks/smartcrypto":"^2.0.4","@push.rocks/smartpromise":"^4.2.3","@push.rocks/smartrequest":"^2.0.21"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^24.0.14","@git.zone/tsrun":"^1.3.3","@git.zone/tstest":"^2.3.1","@push.rocks/qenv":"^6.1.0","@git.zone/tsbuild":"^2.6.4","@push.rocks/tapbundle":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/bunq_3.0.6_1753219155840_0.7516610692155969","host":"s3://npm-registry-packages-npm-production"}},"3.0.8":{"name":"@apiclient.xyz/bunq","version":"3.0.8","author":{"name":"Lossless GmbH"},"license":"MIT","_id":"@apiclient.xyz/bunq@3.0.8","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"dist":{"shasum":"ddea9e8b93e2c98287228acde0963e748346d907","tarball":"https://registry.npmjs.org/@apiclient.xyz/bunq/-/bunq-3.0.8.tgz","fileCount":90,"integrity":"sha512-b2/cT+IsbeZMm5tCfx/lZnG2FUqLo7m/GQBR3cbHplMfIONUomyvoqYyagaXxfGP9hnDqM+r+hmAUhOemN4yxA==","signatures":[{"sig":"MEUCIGkrKMk9NsMY5aZifM/YZIUN/xqpdoODO7TTr4I9P4OKAiEAg77K70abDpwUpuR4TiK3INcZIEJ1E0cmGXysXTwZkjU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":458507},"type":"module","_from":"file:apiclient.xyz-bunq-3.0.8.tgz","exports":{".":"./dist_ts/index.js"},"private":false,"scripts":{"test":"(tstest test/ --verbose --logfile)","build":"(tsbuild --web)","test:basic":"(tstest test/test.ts --verbose)","test:oauth":"(tstest test/test.oauth.ts --verbose)","test:errors":"(tstest test/test.errors.ts --verbose)","test:session":"(tstest test/test.session.ts --verbose)","test:advanced":"(tstest test/test.advanced.ts --verbose)","test:payments":"(tstest test/test.payments.simple.ts --verbose)","test:webhooks":"(tstest test/test.webhooks.ts --verbose)"},"_npmUser":{"name":"lossless","email":"hello@lossless.com"},"_resolved":"/tmp/0718fe29d3f7fe7a6118f38142b94a55/apiclient.xyz-bunq-3.0.8.tgz","_integrity":"sha512-b2/cT+IsbeZMm5tCfx/lZnG2FUqLo7m/GQBR3cbHplMfIONUomyvoqYyagaXxfGP9hnDqM+r+hmAUhOemN4yxA==","_npmVersion":"11.3.0","description":"A full-featured TypeScript/JavaScript client for the bunq API","directories":{},"_nodeVersion":"23.8.0","browserslist":["last 1 chrome versions"],"dependencies":{"@push.rocks/smartfile":"^11.2.5","@push.rocks/smartpath":"^5.0.18","@push.rocks/smarttime":"^4.0.54","@push.rocks/smartcrypto":"^2.0.4","@push.rocks/smartpromise":"^4.2.3","@push.rocks/smartrequest":"^2.0.21"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^24.0.14","@git.zone/tsrun":"^1.3.3","@git.zone/tstest":"^2.3.1","@push.rocks/qenv":"^6.1.0","@git.zone/tsbuild":"^2.6.4","@push.rocks/tapbundle":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/bunq_3.0.8_1753221406417_0.49073065164337737","host":"s3://npm-registry-packages-npm-production"}},"3.0.9":{"name":"@apiclient.xyz/bunq","version":"3.0.9","author":{"name":"Lossless GmbH"},"license":"MIT","_id":"@apiclient.xyz/bunq@3.0.9","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"dist":{"shasum":"8f318e2c80920c12727dcdf82880a8fb3764507e","tarball":"https://registry.npmjs.org/@apiclient.xyz/bunq/-/bunq-3.0.9.tgz","fileCount":90,"integrity":"sha512-U+oRwwhOQZNk8JjUVKntFp1N23ZYkKQCxbEkBJ31c9hDE92icE5UAcdPpoiLD76hDPKeJuK8pfGLh72vc1UmCA==","signatures":[{"sig":"MEQCIE86ywD6qxDtFmZpYWL9ER0S64uxSpfvsSzDDDROOlwLAiBTNJcnEtJODIr+5yljnIkEh5/DWwglkmI9STYVY74dzw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":458507},"type":"module","_from":"file:apiclient.xyz-bunq-3.0.9.tgz","exports":{".":"./dist_ts/index.js"},"private":false,"scripts":{"test":"(tstest test/ --verbose --logfile)","build":"(tsbuild --web)","test:basic":"(tstest test/test.ts --verbose)","test:oauth":"(tstest test/test.oauth.ts --verbose)","test:errors":"(tstest test/test.errors.ts --verbose)","test:session":"(tstest test/test.session.ts --verbose)","test:advanced":"(tstest test/test.advanced.ts --verbose)","test:payments":"(tstest test/test.payments.simple.ts --verbose)","test:webhooks":"(tstest test/test.webhooks.ts --verbose)"},"_npmUser":{"name":"lossless","email":"hello@lossless.com"},"_resolved":"/tmp/c5a06c90682d26e4009daaad90c8acc9/apiclient.xyz-bunq-3.0.9.tgz","_integrity":"sha512-U+oRwwhOQZNk8JjUVKntFp1N23ZYkKQCxbEkBJ31c9hDE92icE5UAcdPpoiLD76hDPKeJuK8pfGLh72vc1UmCA==","_npmVersion":"11.3.0","description":"A full-featured TypeScript/JavaScript client for the bunq API","directories":{},"_nodeVersion":"23.8.0","browserslist":["last 1 chrome versions"],"dependencies":{"@push.rocks/smartfile":"^11.2.5","@push.rocks/smartpath":"^5.0.18","@push.rocks/smarttime":"^4.0.54","@push.rocks/smartcrypto":"^2.0.4","@push.rocks/smartpromise":"^4.2.3","@push.rocks/smartrequest":"^2.0.21"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^24.0.14","@git.zone/tsrun":"^1.3.3","@git.zone/tstest":"^2.3.1","@push.rocks/qenv":"^6.1.0","@git.zone/tsbuild":"^2.6.4","@push.rocks/tapbundle":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/bunq_3.0.9_1753221899242_0.10130410315779659","host":"s3://npm-registry-packages-npm-production"}},"3.1.0":{"name":"@apiclient.xyz/bunq","version":"3.1.0","author":{"name":"Lossless GmbH"},"license":"MIT","_id":"@apiclient.xyz/bunq@3.1.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"dist":{"shasum":"6c7d0e0f6e196bbeb5c3be013c272416c94fe6ba","tarball":"https://registry.npmjs.org/@apiclient.xyz/bunq/-/bunq-3.1.0.tgz","fileCount":90,"integrity":"sha512-aI9QuOVpnErWsWjA3l3TvVXgPvvNmljTgkvLycK/e6IUb9bFDqFPdCmxPiIiJwGLUe8VpJD5/GKAh2S0IgXjLQ==","signatures":[{"sig":"MEUCIQDXM1aU7sH79LDtphNzvB49V+EfGTMe4ZVLJuo6BECAHwIgbxthcXh2SgD3NuvP65OF3M6HH2Jv/JIGG4xBr1HS66g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":472634},"type":"module","exports":{".":"./dist_ts/index.js"},"gitHead":"76c6b95f3d7f3ad9e23a78916aa5a9b393c2934c","private":false,"scripts":{"test":"(tstest test/ --verbose --logfile)","build":"(tsbuild --web)","test:basic":"(tstest test/test.ts --verbose)","test:oauth":"(tstest test/test.oauth.ts --verbose)","test:errors":"(tstest test/test.errors.ts --verbose)","test:session":"(tstest test/test.session.ts --verbose)","test:advanced":"(tstest test/test.advanced.ts --verbose)","test:payments":"(tstest test/test.payments.simple.ts --verbose)","test:webhooks":"(tstest test/test.webhooks.ts --verbose)"},"_npmUser":{"name":"lossless","email":"hello@lossless.com"},"_npmVersion":"11.3.0","description":"A full-featured TypeScript/JavaScript client for the bunq API","directories":{},"_nodeVersion":"23.8.0","browserslist":["last 1 chrome versions"],"dependencies":{"@push.rocks/smartfile":"^11.2.5","@push.rocks/smartpath":"^5.0.18","@push.rocks/smarttime":"^4.0.54","@push.rocks/smartcrypto":"^2.0.4","@push.rocks/smartpromise":"^4.2.3","@push.rocks/smartrequest":"^2.0.21"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.11.0+sha512.6540583f41cc5f628eb3d9773ecee802f4f9ef9923cc45b69890fb47991d4b092964694ec3a4f738a420c918a333062c8b925d312f42e4f0c263eb603551f977","devDependencies":{"@types/node":"^24.0.14","@git.zone/tsrun":"^1.3.3","@git.zone/tstest":"^2.3.1","@push.rocks/qenv":"^6.1.0","@git.zone/tsbuild":"^2.6.4","@push.rocks/tapbundle":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/bunq_3.1.0_1753225217786_0.14919058696360676","host":"s3://npm-registry-packages-npm-production"}},"3.1.1":{"name":"@apiclient.xyz/bunq","version":"3.1.1","author":{"name":"Lossless GmbH"},"license":"MIT","_id":"@apiclient.xyz/bunq@3.1.1","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"dist":{"shasum":"1478a842f87849189113f8049350fa5f105904e3","tarball":"https://registry.npmjs.org/@apiclient.xyz/bunq/-/bunq-3.1.1.tgz","fileCount":90,"integrity":"sha512-7i60+otmjTZaBdJn5BR5oXGVqo4Ol5MYAytJ5fsOvcf2v5oO9fNWSXpHNFD7E2pv36fFFz/ILZnrMmh0UdvnHw==","signatures":[{"sig":"MEUCIEpjKMQU4lUPjy7c0TCDfVRwgpGwTPhqgU3D/ePVBo7oAiEA8B4RaVmOKMlcp93CcgzbJPdfK433RU9NSTSQQGFrPMo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":474965},"type":"module","exports":{".":"./dist_ts/index.js"},"gitHead":"9011390dc4cfe37a944731cb03446d2164e9d458","private":false,"scripts":{"test":"(tstest test/ --verbose --logfile)","build":"(tsbuild --web)","test:basic":"(tstest test/test.ts --verbose)","test:oauth":"(tstest test/test.oauth.ts --verbose)","test:errors":"(tstest test/test.errors.ts --verbose)","test:session":"(tstest test/test.session.ts --verbose)","test:advanced":"(tstest test/test.advanced.ts --verbose)","test:payments":"(tstest test/test.payments.simple.ts --verbose)","test:webhooks":"(tstest test/test.webhooks.ts --verbose)"},"_npmUser":{"name":"lossless","email":"hello@lossless.com"},"_npmVersion":"11.3.0","description":"A full-featured TypeScript/JavaScript client for the bunq API","directories":{},"_nodeVersion":"23.8.0","browserslist":["last 1 chrome versions"],"dependencies":{"@push.rocks/smartfile":"^11.2.5","@push.rocks/smartpath":"^5.0.18","@push.rocks/smarttime":"^4.0.54","@push.rocks/smartcrypto":"^2.0.4","@push.rocks/smartpromise":"^4.2.3","@push.rocks/smartrequest":"^2.0.21"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.11.0+sha512.6540583f41cc5f628eb3d9773ecee802f4f9ef9923cc45b69890fb47991d4b092964694ec3a4f738a420c918a333062c8b925d312f42e4f0c263eb603551f977","devDependencies":{"@types/node":"^24.0.14","@git.zone/tsrun":"^1.3.3","@git.zone/tstest":"^2.3.1","@push.rocks/qenv":"^6.1.0","@git.zone/tsbuild":"^2.6.4","@push.rocks/tapbundle":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/bunq_3.1.1_1753360236603_0.8480166073461779","host":"s3://npm-registry-packages-npm-production"}},"3.1.2":{"name":"@apiclient.xyz/bunq","version":"3.1.2","author":{"name":"Lossless GmbH"},"license":"MIT","_id":"@apiclient.xyz/bunq@3.1.2","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"dist":{"shasum":"e735776ef27d9d2540edd0a2cbe9aa32ebb2194c","tarball":"https://registry.npmjs.org/@apiclient.xyz/bunq/-/bunq-3.1.2.tgz","fileCount":90,"integrity":"sha512-rLMuFywR0CK5UzpqjuFtA7cTUUygOdKi/iT9Ia/BuoQHtNg9qUPlCJO1wC4TqP8KF03fR03L5r+MoepsV0qySA==","signatures":[{"sig":"MEYCIQC8ZKP7+T5zhlfmUcMMcqPKMtm7XYi/0tuKaSufWutE5wIhAM9O98utzsYC5favnotKExFMeOhtZWdJkObcpjNxmtlM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":467339},"type":"module","exports":{".":"./dist_ts/index.js"},"gitHead":"f790984a95892b6c5f4119067d64884930298467","private":false,"scripts":{"test":"(tstest test/ --verbose --logfile)","build":"(tsbuild --web)","test:basic":"(tstest test/test.ts --verbose)","test:oauth":"(tstest test/test.oauth.ts --verbose)","test:errors":"(tstest test/test.errors.ts --verbose)","test:session":"(tstest test/test.session.ts --verbose)","test:advanced":"(tstest test/test.advanced.ts --verbose)","test:payments":"(tstest test/test.payments.simple.ts --verbose)","test:webhooks":"(tstest test/test.webhooks.ts --verbose)"},"_npmUser":{"name":"lossless","email":"hello@lossless.com"},"_npmVersion":"11.3.0","description":"A full-featured TypeScript/JavaScript client for the bunq API","directories":{},"_nodeVersion":"23.8.0","browserslist":["last 1 chrome versions"],"dependencies":{"@push.rocks/smartfile":"^11.2.5","@push.rocks/smartpath":"^5.0.18","@push.rocks/smarttime":"^4.0.54","@push.rocks/smartcrypto":"^2.0.4","@push.rocks/smartpromise":"^4.2.3","@push.rocks/smartrequest":"^2.0.21"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.11.0+sha512.6540583f41cc5f628eb3d9773ecee802f4f9ef9923cc45b69890fb47991d4b092964694ec3a4f738a420c918a333062c8b925d312f42e4f0c263eb603551f977","devDependencies":{"@types/node":"^24.0.14","@git.zone/tsrun":"^1.3.3","@git.zone/tstest":"^2.3.1","@push.rocks/qenv":"^6.1.0","@git.zone/tsbuild":"^2.6.4","@push.rocks/tapbundle":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/bunq_3.1.2_1753404274032_0.6864081008865672","host":"s3://npm-registry-packages-npm-production"}},"4.0.0":{"name":"@apiclient.xyz/bunq","version":"4.0.0","author":{"name":"Lossless GmbH"},"license":"MIT","_id":"@apiclient.xyz/bunq@4.0.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"dist":{"shasum":"e3867a5a4dd62ecb33b68a4e84d87b4e72605f61","tarball":"https://registry.npmjs.org/@apiclient.xyz/bunq/-/bunq-4.0.0.tgz","fileCount":89,"integrity":"sha512-Jod3n7L1q4VE7l0MwLWlv5Tz1pYHPPhKMJYRROia3kJWJLfZiW7aJxQElbZD1KB4kf474q6WNJLIoLArJK6Cnw==","signatures":[{"sig":"MEUCIBdBDT++hHUOFqa1GHCWQXLRvXQZlE590PfaPPGqvaPSAiEA8zoGv7Ke0VMGjUHyKHCQ75b+BqB3aHVTPNDdYVG1qno=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":486566},"type":"module","exports":{".":"./dist_ts/index.js"},"gitHead":"bc0517164f060e4959448eff0b49d9211f804de4","private":false,"scripts":{"test":"(tstest test/ --verbose --logfile)","build":"(tsbuild --web)","test:basic":"(tstest test/test.ts --verbose)","test:oauth":"(tstest test/test.oauth.ts --verbose)","test:errors":"(tstest test/test.errors.ts --verbose)","test:session":"(tstest test/test.session.ts --verbose)","test:advanced":"(tstest test/test.advanced.ts --verbose)","test:payments":"(tstest test/test.payments.simple.ts --verbose)","test:webhooks":"(tstest test/test.webhooks.ts --verbose)"},"_npmUser":{"name":"lossless","email":"hello@lossless.com"},"_npmVersion":"11.3.0","description":"A full-featured TypeScript/JavaScript client for the bunq API","directories":{},"_nodeVersion":"23.8.0","browserslist":["last 1 chrome versions"],"dependencies":{"@push.rocks/smartfile":"^11.2.5","@push.rocks/smartpath":"^5.0.18","@push.rocks/smarttime":"^4.0.54","@push.rocks/smartcrypto":"^2.0.4","@push.rocks/smartpromise":"^4.2.3","@push.rocks/smartrequest":"^2.0.21"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.11.0+sha512.6540583f41cc5f628eb3d9773ecee802f4f9ef9923cc45b69890fb47991d4b092964694ec3a4f738a420c918a333062c8b925d312f42e4f0c263eb603551f977","devDependencies":{"@types/node":"^24.0.14","@git.zone/tsrun":"^1.3.3","@git.zone/tstest":"^2.3.1","@push.rocks/qenv":"^6.1.0","@git.zone/tsbuild":"^2.6.4","@push.rocks/tapbundle":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/bunq_4.0.0_1753409547728_0.12318327060780287","host":"s3://npm-registry-packages-npm-production"}},"4.0.1":{"name":"@apiclient.xyz/bunq","version":"4.0.1","author":{"name":"Lossless GmbH"},"license":"MIT","_id":"@apiclient.xyz/bunq@4.0.1","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"dist":{"shasum":"9ec94ba17f3716d84cec39f5214470ab5f8d662f","tarball":"https://registry.npmjs.org/@apiclient.xyz/bunq/-/bunq-4.0.1.tgz","fileCount":89,"integrity":"sha512-cpibDb6P8SetqNhoy22VWTL7xK9s0ethrdtZxzFK1Gtdcoc2W2ue6DG/qvpR2rbFJlGlHhWt3dILDiGATmPZww==","signatures":[{"sig":"MEUCIQC5X9gs4EmNlx3zm5PU0NiwD87a3pV8xfaqkva5P9Mk1AIgVVSrvAgKCA8ZS2LgcRUKzrSHTJyJwujz2dvnMX1EiS4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":486566},"type":"module","exports":{".":"./dist_ts/index.js"},"gitHead":"7cb38acf1e3ec858d8df8cc94805b53a5abc3798","private":false,"scripts":{"test":"(tstest test/ --verbose --logfile)","build":"(tsbuild --web)","test:basic":"(tstest test/test.ts --verbose)","test:oauth":"(tstest test/test.oauth.ts --verbose)","test:errors":"(tstest test/test.errors.ts --verbose)","test:session":"(tstest test/test.session.ts --verbose)","test:advanced":"(tstest test/test.advanced.ts --verbose)","test:payments":"(tstest test/test.payments.simple.ts --verbose)","test:webhooks":"(tstest test/test.webhooks.ts --verbose)"},"_npmUser":{"name":"lossless","email":"hello@lossless.com"},"_npmVersion":"11.3.0","description":"A full-featured TypeScript/JavaScript client for the bunq API","directories":{},"_nodeVersion":"23.8.0","browserslist":["last 1 chrome versions"],"dependencies":{"@push.rocks/smartfile":"^11.2.5","@push.rocks/smartpath":"^5.0.18","@push.rocks/smarttime":"^4.0.54","@push.rocks/smartcrypto":"^2.0.4","@push.rocks/smartpromise":"^4.2.3","@push.rocks/smartrequest":"^2.0.21"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.11.0+sha512.6540583f41cc5f628eb3d9773ecee802f4f9ef9923cc45b69890fb47991d4b092964694ec3a4f738a420c918a333062c8b925d312f42e4f0c263eb603551f977","devDependencies":{"@types/node":"^24.0.14","@git.zone/tsrun":"^1.3.3","@git.zone/tstest":"^2.3.1","@push.rocks/qenv":"^6.1.0","@git.zone/tsbuild":"^2.6.4","@push.rocks/tapbundle":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/bunq_4.0.1_1753409719687_0.2372678109781381","host":"s3://npm-registry-packages-npm-production"}},"4.1.0":{"name":"@apiclient.xyz/bunq","version":"4.1.0","author":{"name":"Lossless GmbH"},"license":"MIT","_id":"@apiclient.xyz/bunq@4.1.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"dist":{"shasum":"142d4e53bbaf874081b9efc7ec1ab2501c6f6ba3","tarball":"https://registry.npmjs.org/@apiclient.xyz/bunq/-/bunq-4.1.0.tgz","fileCount":89,"integrity":"sha512-uvbI0a7sBJX8Wbcja3D8B48M+0B3grNqthR3bRxDj4e8LLgylyQ3S7/KM1JdwqcBfo6KQ2QYSEFt8xWB3fYL5g==","signatures":[{"sig":"MEUCIQCib2vlcGX4PtN0ZXVH7Yg312GE5ftsNGlyGGP+UHQDKAIgNKMPZOk1JdLyZdCt82pH8kjFO+6RWnerNu9XIgNU6UY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":489598},"type":"module","exports":{".":"./dist_ts/index.js"},"gitHead":"1190500221baf77fc602ae5b85e39c9575ab337f","private":false,"scripts":{"test":"(tstest test/ --verbose --logfile)","build":"(tsbuild --web)","test:basic":"(tstest test/test.ts --verbose)","test:oauth":"(tstest test/test.oauth.ts --verbose)","test:errors":"(tstest test/test.errors.ts --verbose)","test:session":"(tstest test/test.session.ts --verbose)","test:advanced":"(tstest test/test.advanced.ts --verbose)","test:payments":"(tstest test/test.payments.simple.ts --verbose)","test:webhooks":"(tstest test/test.webhooks.ts --verbose)"},"_npmUser":{"name":"lossless","email":"hello@lossless.com"},"_npmVersion":"11.3.0","description":"A full-featured TypeScript/JavaScript client for the bunq API","directories":{},"_nodeVersion":"23.8.0","browserslist":["last 1 chrome versions"],"dependencies":{"@push.rocks/smartfile":"^11.2.5","@push.rocks/smartpath":"^5.0.18","@push.rocks/smarttime":"^4.0.54","@push.rocks/smartcrypto":"^2.0.4","@push.rocks/smartpromise":"^4.2.3","@push.rocks/smartrequest":"^2.0.21"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.11.0+sha512.6540583f41cc5f628eb3d9773ecee802f4f9ef9923cc45b69890fb47991d4b092964694ec3a4f738a420c918a333062c8b925d312f42e4f0c263eb603551f977","devDependencies":{"@types/node":"^24.0.14","@git.zone/tsrun":"^1.3.3","@git.zone/tstest":"^2.3.1","@push.rocks/qenv":"^6.1.0","@git.zone/tsbuild":"^2.6.4","@push.rocks/tapbundle":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/bunq_4.1.0_1753412322472_0.5717295531794719","host":"s3://npm-registry-packages-npm-production"}},"4.1.1":{"name":"@apiclient.xyz/bunq","version":"4.1.1","author":{"name":"Lossless GmbH"},"license":"MIT","_id":"@apiclient.xyz/bunq@4.1.1","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"dist":{"shasum":"51f11350c78bcfc172395f85dfe22d61b044f091","tarball":"https://registry.npmjs.org/@apiclient.xyz/bunq/-/bunq-4.1.1.tgz","fileCount":89,"integrity":"sha512-7TPHrDl3fASTY3uiETQRm9vl1ngC6JVIohaE8ONNxV5nxkXMBqBx8A78rWI3f1kHMb5UZTD0nRHSJKqaS/J/3Q==","signatures":[{"sig":"MEUCIEbLp7t6V2srFNJ4CYfOg3aY3X/De+MODOJRgi/nFzCpAiEAip8tqYPvATJsYlmPpHsQI3U1xNTn86XjK84yWS0oxP8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":489535},"type":"module","exports":{".":"./dist_ts/index.js"},"gitHead":"16135cae022ceec601002de05e5c68cd04447a9f","private":false,"scripts":{"test":"(tstest test/ --verbose --logfile)","build":"(tsbuild --web)","test:basic":"(tstest test/test.ts --verbose)","test:oauth":"(tstest test/test.oauth.ts --verbose)","test:errors":"(tstest test/test.errors.ts --verbose)","test:session":"(tstest test/test.session.ts --verbose)","test:advanced":"(tstest test/test.advanced.ts --verbose)","test:payments":"(tstest test/test.payments.simple.ts --verbose)","test:webhooks":"(tstest test/test.webhooks.ts --verbose)"},"_npmUser":{"name":"lossless","email":"hello@lossless.com"},"_npmVersion":"11.3.0","description":"A full-featured TypeScript/JavaScript client for the bunq API","directories":{},"_nodeVersion":"23.8.0","browserslist":["last 1 chrome versions"],"dependencies":{"@push.rocks/smartfile":"^11.2.5","@push.rocks/smartpath":"^5.0.18","@push.rocks/smarttime":"^4.0.54","@push.rocks/smartcrypto":"^2.0.4","@push.rocks/smartpromise":"^4.2.3","@push.rocks/smartrequest":"^2.0.21"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.11.0+sha512.6540583f41cc5f628eb3d9773ecee802f4f9ef9923cc45b69890fb47991d4b092964694ec3a4f738a420c918a333062c8b925d312f42e4f0c263eb603551f977","devDependencies":{"@types/node":"^24.0.14","@git.zone/tsrun":"^1.3.3","@git.zone/tstest":"^2.3.1","@push.rocks/qenv":"^6.1.0","@git.zone/tsbuild":"^2.6.4","@push.rocks/tapbundle":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/bunq_4.1.1_1753442901301_0.18907303778720297","host":"s3://npm-registry-packages-npm-production"}},"4.1.2":{"name":"@apiclient.xyz/bunq","version":"4.1.2","author":{"name":"Lossless GmbH"},"license":"MIT","_id":"@apiclient.xyz/bunq@4.1.2","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"dist":{"shasum":"c786103396270b217b0fa0e9bd9758a15c1f19d1","tarball":"https://registry.npmjs.org/@apiclient.xyz/bunq/-/bunq-4.1.2.tgz","fileCount":89,"integrity":"sha512-mwzSY9ncSKscKLX+vxyHhYQgruKGq6sWUazkfn/3zytoax//f8W81hPKPS6wlpQhHLKSIfi3IRNMuaU2esdB0g==","signatures":[{"sig":"MEYCIQCmd+2ONUacsoexL+ApUUlLYRhtd1zVkQ/gOkGrqA0mMgIhAOYRd10TDCQR+FRScwUApC7b1NeukhxH8Be7q+PM7lEI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":489535},"type":"module","exports":{".":"./dist_ts/index.js"},"gitHead":"0e403e15845193992ce1e6081a77cba157921ae1","private":false,"scripts":{"test":"(tstest test/ --verbose --logfile)","build":"(tsbuild --web)","test:basic":"(tstest test/test.ts --verbose)","test:oauth":"(tstest test/test.oauth.ts --verbose)","test:errors":"(tstest test/test.errors.ts --verbose)","test:session":"(tstest test/test.session.ts --verbose)","test:advanced":"(tstest test/test.advanced.ts --verbose)","test:payments":"(tstest test/test.payments.simple.ts --verbose)","test:webhooks":"(tstest test/test.webhooks.ts --verbose)"},"_npmUser":{"name":"lossless","email":"hello@lossless.com"},"_npmVersion":"11.3.0","description":"A full-featured TypeScript/JavaScript client for the bunq API","directories":{},"_nodeVersion":"23.8.0","browserslist":["last 1 chrome versions"],"dependencies":{"@push.rocks/smartfile":"^11.2.5","@push.rocks/smartpath":"^5.0.18","@push.rocks/smarttime":"^4.0.54","@push.rocks/smartcrypto":"^2.0.4","@push.rocks/smartpromise":"^4.2.3","@push.rocks/smartrequest":"^2.0.21"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.11.0+sha512.6540583f41cc5f628eb3d9773ecee802f4f9ef9923cc45b69890fb47991d4b092964694ec3a4f738a420c918a333062c8b925d312f42e4f0c263eb603551f977","devDependencies":{"@types/node":"^24.0.14","@git.zone/tsrun":"^1.3.3","@git.zone/tstest":"^2.3.1","@push.rocks/qenv":"^6.1.0","@git.zone/tsbuild":"^2.6.4","@push.rocks/tapbundle":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/bunq_4.1.2_1753444393680_0.6086474212363071","host":"s3://npm-registry-packages-npm-production"}},"4.1.3":{"name":"@apiclient.xyz/bunq","version":"4.1.3","author":{"name":"Lossless GmbH"},"license":"MIT","_id":"@apiclient.xyz/bunq@4.1.3","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"dist":{"shasum":"6104fb44bead6b35be2741db760385af627d1f7e","tarball":"https://registry.npmjs.org/@apiclient.xyz/bunq/-/bunq-4.1.3.tgz","fileCount":89,"integrity":"sha512-ajbZUWlExrF19PgFZppHRqwYjdup5kM7c7dDj9e5lkOfFhUQMNRkLaRv7Q8Tmp0O5nmTu+bSN5Ep+RcbbcOJ+A==","signatures":[{"sig":"MEUCIQCVDqJ5wBbd2Jy22i3ZzIEr+lkmrvVRON+SFT9Rrp8FZQIgKRco50WaBWcKsfRZKi4dkFzl9yL/IwZICeM9JBPRANw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":488881},"type":"module","exports":{".":"./dist_ts/index.js"},"gitHead":"fb30c6f4e3938b8d3f65cfddfb6b5526a652c81a","private":false,"scripts":{"test":"(tstest test/ --verbose --logfile)","build":"(tsbuild --web)","test:basic":"(tstest test/test.ts --verbose)","test:oauth":"(tstest test/test.oauth.ts --verbose)","test:errors":"(tstest test/test.errors.ts --verbose)","test:session":"(tstest test/test.session.ts --verbose)","test:advanced":"(tstest test/test.advanced.ts --verbose)","test:payments":"(tstest test/test.payments.simple.ts --verbose)","test:webhooks":"(tstest test/test.webhooks.ts --verbose)"},"_npmUser":{"name":"lossless","email":"hello@lossless.com"},"_npmVersion":"11.3.0","description":"A full-featured TypeScript/JavaScript client for the bunq API","directories":{},"_nodeVersion":"23.8.0","browserslist":["last 1 chrome versions"],"dependencies":{"@push.rocks/smartfile":"^11.2.5","@push.rocks/smartpath":"^5.0.18","@push.rocks/smarttime":"^4.0.54","@push.rocks/smartcrypto":"^2.0.4","@push.rocks/smartpromise":"^4.2.3","@push.rocks/smartrequest":"^2.0.21"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.11.0+sha512.6540583f41cc5f628eb3d9773ecee802f4f9ef9923cc45b69890fb47991d4b092964694ec3a4f738a420c918a333062c8b925d312f42e4f0c263eb603551f977","devDependencies":{"@types/node":"^24.0.14","@git.zone/tsrun":"^1.3.3","@git.zone/tstest":"^2.3.1","@push.rocks/qenv":"^6.1.0","@git.zone/tsbuild":"^2.6.4","@push.rocks/tapbundle":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/bunq_4.1.3_1753600226829_0.34168138819252425","host":"s3://npm-registry-packages-npm-production"}},"4.2.0":{"name":"@apiclient.xyz/bunq","version":"4.2.0","author":{"name":"Lossless GmbH"},"license":"MIT","_id":"@apiclient.xyz/bunq@4.2.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"dist":{"shasum":"0f22202712da96feda509689dfa7ec61dc2f89bd","tarball":"https://registry.npmjs.org/@apiclient.xyz/bunq/-/bunq-4.2.0.tgz","fileCount":89,"integrity":"sha512-7Fj8aLZDPs8hKBGyLFzrTTVI5EMuVbFqqV45d4huxQUchhttlrnQcldnEFlzIfdj7El1wNoWK9L6o5+wOhsdYw==","signatures":[{"sig":"MEYCIQD2kBcsTT1MQnsky8DWNxmBPjx8Nyq1ly4WZlx0898z4gIhAO7GvyMR/FAwEG3VHrTH4hn3hoyBjfhZZTNxGp/0KybH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":490303},"type":"module","exports":{".":"./dist_ts/index.js"},"gitHead":"c9fab7def207754bac4f293facb6718cfd9b7f70","private":false,"scripts":{"test":"(tstest test/ --verbose --logfile)","build":"(tsbuild --web)","test:basic":"(tstest test/test.ts --verbose)","test:oauth":"(tstest test/test.oauth.ts --verbose)","test:errors":"(tstest test/test.errors.ts --verbose)","test:session":"(tstest test/test.session.ts --verbose)","test:advanced":"(tstest test/test.advanced.ts --verbose)","test:payments":"(tstest test/test.payments.simple.ts --verbose)","test:webhooks":"(tstest test/test.webhooks.ts --verbose)"},"_npmUser":{"name":"lossless","email":"hello@lossless.com"},"_npmVersion":"11.3.0","description":"A full-featured TypeScript/JavaScript client for the bunq API","directories":{},"_nodeVersion":"23.8.0","browserslist":["last 1 chrome versions"],"dependencies":{"@push.rocks/smartfile":"^11.2.5","@push.rocks/smartpath":"^5.0.18","@push.rocks/smarttime":"^4.0.54","@push.rocks/smartcrypto":"^2.0.4","@push.rocks/smartpromise":"^4.2.3"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.11.0+sha512.6540583f41cc5f628eb3d9773ecee802f4f9ef9923cc45b69890fb47991d4b092964694ec3a4f738a420c918a333062c8b925d312f42e4f0c263eb603551f977","devDependencies":{"@types/node":"^24.0.14","@git.zone/tsrun":"^1.3.3","@git.zone/tstest":"^2.3.1","@push.rocks/qenv":"^6.1.0","@git.zone/tsbuild":"^2.6.4","@push.rocks/tapbundle":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/bunq_4.2.0_1753600870711_0.5210105846360726","host":"s3://npm-registry-packages-npm-production"}},"4.2.1":{"name":"@apiclient.xyz/bunq","version":"4.2.1","author":{"name":"Lossless GmbH"},"license":"MIT","_id":"@apiclient.xyz/bunq@4.2.1","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"dist":{"shasum":"63998f3a40fb0e480938c254b785a2f30578694e","tarball":"https://registry.npmjs.org/@apiclient.xyz/bunq/-/bunq-4.2.1.tgz","fileCount":89,"integrity":"sha512-nIVHdVXRBbT2l9/2SPK/ffYpX2nJPWJRcTZ6SSefSksb4C60n8yGXLkKvNp8LxlJi1NRN8uxRHnrE7mzmisjLw==","signatures":[{"sig":"MEUCIANhQeYUSCQI/rzSjPwIvVV2UsV72Vu0IkmTQmJqdd2tAiEA7SSEnWCqTkZDlaNg/51iEUbVrkua8sCg4m2L8upkjiI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":490303},"type":"module","exports":{".":"./dist_ts/index.js"},"gitHead":"cb6e79ba50a7870b7d9252602c5eb8885d439489","private":false,"scripts":{"test":"(tstest test/ --verbose --logfile)","build":"(tsbuild --web)","test:basic":"(tstest test/test.ts --verbose)","test:oauth":"(tstest test/test.oauth.ts --verbose)","test:errors":"(tstest test/test.errors.ts --verbose)","test:session":"(tstest test/test.session.ts --verbose)","test:advanced":"(tstest test/test.advanced.ts --verbose)","test:payments":"(tstest test/test.payments.simple.ts --verbose)","test:webhooks":"(tstest test/test.webhooks.ts --verbose)"},"_npmUser":{"name":"lossless","email":"hello@lossless.com"},"_npmVersion":"11.3.0","description":"A full-featured TypeScript/JavaScript client for the bunq API","directories":{},"_nodeVersion":"23.8.0","browserslist":["last 1 chrome versions"],"dependencies":{"@push.rocks/smartfile":"^11.2.5","@push.rocks/smartpath":"^5.0.18","@push.rocks/smarttime":"^4.0.54","@push.rocks/smartcrypto":"^2.0.4","@push.rocks/smartpromise":"^4.2.3"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.11.0+sha512.6540583f41cc5f628eb3d9773ecee802f4f9ef9923cc45b69890fb47991d4b092964694ec3a4f738a420c918a333062c8b925d312f42e4f0c263eb603551f977","devDependencies":{"@types/node":"^24.0.14","@git.zone/tsrun":"^1.3.3","@git.zone/tstest":"^2.3.1","@push.rocks/qenv":"^6.1.0","@git.zone/tsbuild":"^2.6.4","@push.rocks/tapbundle":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/bunq_4.2.1_1753651323614_0.5364972670969668","host":"s3://npm-registry-packages-npm-production"}},"4.3.0":{"name":"@apiclient.xyz/bunq","version":"4.3.0","author":{"name":"Task Venture Capital GmbH"},"license":"MIT","_id":"@apiclient.xyz/bunq@4.3.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"dist":{"shasum":"3f97e2c8d2a6fe5a187738ad02c6d4b34d51c207","tarball":"https://registry.npmjs.org/@apiclient.xyz/bunq/-/bunq-4.3.0.tgz","fileCount":89,"integrity":"sha512-1RNrezstMSmkWbtZbn0j//4XtrSVpZusb16WnyWbkfSeFXowIiwTw+81FohKlRQ6SoNnH1JJwe0ZqVRKfM8Vqg==","signatures":[{"sig":"MEUCIQC4+dGP3CavGtlle2A6r2NEUiqVLkEtxuHfJDuVbHEhOgIgM1BDylAvSGS3ZNmXrid+d3LfdQlaeKsSOwFGPyDgWns=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":506739},"type":"module","exports":{".":"./dist_ts/index.js"},"gitHead":"4c0ad95eb1917679d401347922cdfaf663d7bd90","private":false,"scripts":{"test":"(tstest test/ --verbose --logfile --timeout 60)","build":"(tsbuild --web)"},"_npmUser":{"name":"lossless","email":"hello@lossless.com"},"_npmVersion":"11.3.0","description":"A full-featured TypeScript/JavaScript client for the bunq API","directories":{},"_nodeVersion":"23.8.0","browserslist":["last 1 chrome versions"],"dependencies":{"@push.rocks/smartfile":"^11.2.5","@push.rocks/smartpath":"^6.0.0","@push.rocks/smarttime":"^4.0.54","@push.rocks/smartcrypto":"^2.0.4","@push.rocks/smartpromise":"^4.2.3","@push.rocks/smartrequest":"^4.2.1"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.11.0+sha512.6540583f41cc5f628eb3d9773ecee802f4f9ef9923cc45b69890fb47991d4b092964694ec3a4f738a420c918a333062c8b925d312f42e4f0c263eb603551f977","devDependencies":{"@types/node":"^22","@git.zone/tsrun":"^1.3.3","@git.zone/tstest":"^2.3.2","@push.rocks/qenv":"^6.1.0","@git.zone/tsbuild":"^2.6.4","@push.rocks/tapbundle":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/bunq_4.3.0_1753809229548_0.967798778201594","host":"s3://npm-registry-packages-npm-production"}},"4.4.0":{"name":"@apiclient.xyz/bunq","version":"4.4.0","author":{"name":"Task Venture Capital GmbH"},"license":"MIT","_id":"@apiclient.xyz/bunq@4.4.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"dist":{"shasum":"7b036c27e822877282af409de5920ce46d43648f","tarball":"https://registry.npmjs.org/@apiclient.xyz/bunq/-/bunq-4.4.0.tgz","fileCount":89,"integrity":"sha512-/zC5vVuF4zx7dcmhyXZWtgbqOxwfk+vweTE24C1fVJ3r3trKHIFKTHL7XzOY1s7YJY4D99HinALG+fn5gODoAg==","signatures":[{"sig":"MEUCIAK4ATV1vemQEb92PnP8dqAd6qncaZUw9OLbyJjlGwgtAiEA2M0NJxFB0beSXFpsWe3mrNjGbgE6Fwxo0TkE5SAMS/k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":509770},"type":"module","exports":{".":"./dist_ts/index.js"},"gitHead":"40f9142d702e00dce7e7f74b5728617f123294fe","private":false,"scripts":{"test":"(tstest test/ --verbose --logfile --timeout 60)","build":"(tsbuild --web)"},"_npmUser":{"name":"lossless","email":"hello@lossless.com"},"_npmVersion":"11.3.0","description":"A full-featured TypeScript/JavaScript client for the bunq API","directories":{},"_nodeVersion":"23.8.0","browserslist":["last 1 chrome versions"],"dependencies":{"@push.rocks/smartfile":"^11.2.5","@push.rocks/smartpath":"^6.0.0","@push.rocks/smarttime":"^4.0.54","@push.rocks/smartcrypto":"^2.0.4","@push.rocks/smartpromise":"^4.2.3","@push.rocks/smartrequest":"^4.2.1"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.11.0+sha512.6540583f41cc5f628eb3d9773ecee802f4f9ef9923cc45b69890fb47991d4b092964694ec3a4f738a420c918a333062c8b925d312f42e4f0c263eb603551f977","devDependencies":{"@types/node":"^22","@git.zone/tsrun":"^1.3.3","@git.zone/tstest":"^2.3.2","@push.rocks/qenv":"^6.1.0","@git.zone/tsbuild":"^2.6.4","@push.rocks/tapbundle":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/bunq_4.4.0_1754132341518_0.5262906466186132","host":"s3://npm-registry-packages-npm-production"}},"5.0.0":{"name":"@apiclient.xyz/bunq","version":"5.0.0","author":"Task Venture Capital GmbH","license":"MIT","_id":"@apiclient.xyz/bunq@5.0.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/apiclient.xyz/bunq#readme","bugs":{"url":"https://code.foss.global/apiclient.xyz/bunq/issues"},"dist":{"shasum":"ce257334bd34da6a2c9b6205c39c3110fbbb3138","tarball":"https://registry.npmjs.org/@apiclient.xyz/bunq/-/bunq-5.0.0.tgz","fileCount":73,"integrity":"sha512-5LlpIP1H6zzbp6acnXPdjpZzdippJGN3hjo2TQwGRlPCRmDTDLfG1wxOaMo8mv6g08LsdqCjt7jHQ17pFwyyWw==","signatures":[{"sig":"MEUCIB+x8VlR1k1ZykiZsAtG37gyPb83zjU0m68DLgw5HYBKAiEA1MW1/SuutM/GJheCGMxTK9l93xRFkW6vqZz2AwLmHgY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDzXrBSN3lVefqyfybIfJYxGfhRVHe/G9ulggdYgigO/QIhANkXmKV0uhy9oCtfoOhfwq+3TSzhKBok1MP60TezJ2gG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":505643},"type":"module","exports":{".":"./dist_ts/index.js"},"private":false,"scripts":{"test":"(tstest test/ --verbose --logfile --timeout 60)","build":"(tsbuild --web)"},"_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"https://code.foss.global/apiclient.xyz/bunq.git","type":"git"},"description":"A full-featured TypeScript/JavaScript client for the bunq API","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"@push.rocks/smartfile":"^11.2.5","@push.rocks/smartpath":"^6.0.0","@push.rocks/smarttime":"^4.0.54","@push.rocks/smartcrypto":"^2.0.4","@push.rocks/smartpromise":"^4.2.3","@push.rocks/smartrequest":"^4.2.1"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^26.6.2","@git.zone/tsrun":"^3.0.0","@git.zone/tstest":"^6.3.1","@git.zone/tsbuild":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/bunq_5.0.0_1790492011841_0.5085759760497723","host":"s3://npm-registry-packages-npm-production"}},"5.1.0":{"name":"@apiclient.xyz/bunq","version":"5.1.0","author":"Task Venture Capital GmbH","license":"MIT","_id":"@apiclient.xyz/bunq@5.1.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/apiclient.xyz/bunq#readme","bugs":{"url":"https://code.foss.global/apiclient.xyz/bunq/issues"},"dist":{"shasum":"7b80a7431c8a3523c835ab26a1b6a3a437dfbddb","tarball":"https://registry.npmjs.org/@apiclient.xyz/bunq/-/bunq-5.1.0.tgz","fileCount":73,"integrity":"sha512-UC0TRI0EYBPzDuijDeYehcomeBvY/Yxp6vH14OsZ21O3Liqnx3JjyRGULRSNyhAknR7NjOe5lxkYeM9ikEkVaw==","signatures":[{"sig":"MEUCIQDuXvYPPqHJM7+VwdGZuM5L1gPYF6dpreX8TLPBGt7JQAIgapD675udKYRNWnTNmyMaV86no3YNTaGfEGr4E+wGGW4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDg2C3iw3moOaefky6IbRwsS0od1fExn+oY+NuuPOy4BQIgLAyX8s2UNfbIgGeHOEluFBR3C0VbzmqJ1HKi4srn3bY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":510045},"type":"module","exports":{".":"./dist_ts/index.js"},"private":false,"scripts":{"test":"(tstest test/ --verbose --logfile --timeout 60)","build":"(tsbuild --web)"},"_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"https://code.foss.global/apiclient.xyz/bunq.git","type":"git"},"description":"A full-featured TypeScript/JavaScript client for the bunq API","directories":{},"browserslist":["last 1 chrome versions"],"dependencies":{"@push.rocks/smartfile":"^11.2.5","@push.rocks/smartpath":"^6.0.0","@push.rocks/smarttime":"^4.0.54","@push.rocks/smartcrypto":"^2.0.4","@push.rocks/smartpromise":"^4.2.3","@push.rocks/smartrequest":"^4.2.1"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^26.6.2","@git.zone/tsrun":"^3.0.1","@git.zone/tstest":"^6.3.2","@git.zone/tsbuild":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/bunq_5.1.0_1790588189879_0.3342773815653759","host":"s3://npm-registry-packages-npm-production"}},"5.1.1":{"_id":"@apiclient.xyz/bunq@5.1.1","bugs":{"url":"https://code.foss.global/apiclient.xyz/bunq/issues"},"dist":{"shasum":"3277047a9a475d945f812094c565ab351d0205c0","tarball":"https://registry.npmjs.org/@apiclient.xyz/bunq/-/bunq-5.1.1.tgz","fileCount":73,"integrity":"sha512-U62m3EDItK0pMrNR+9IX3vAT69sv5a6cjmBZfFPDxbfNaoWwMUoNGH/dAJVqmtzxx76PQaGfzappQRN0qtJUsg==","signatures":[{"sig":"MEYCIQDkMUxQEsQ3KfwsXt8XTahoOwTcVhxeNvvWBL8I2xUj6gIhALAlXJ5e8q2LzAfZWhZyrHzdIsa4M9qj2sq3GOtpryRM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDcpZKBWQBJI4ro8twTgdwHQzSF4Oxab7Y5eBSzLGBq7AIgAMVsyLL1QMHHpIThoG/rv0sbYuRgmhNSTnDvpy7KsgU="}],"unpackedSize":511331},"name":"@apiclient.xyz/bunq","type":"module","author":"Task Venture Capital GmbH","exports":{".":"./dist_ts/index.js"},"license":"MIT","private":false,"scripts":{"test":"(tstest test/ --verbose --logfile --timeout 60)","build":"(tsbuild --web)"},"version":"5.1.1","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"homepage":"https://code.foss.global/apiclient.xyz/bunq#readme","repository":{"url":"https://code.foss.global/apiclient.xyz/bunq.git","type":"git"},"description":"A full-featured TypeScript/JavaScript client for the bunq API","directories":{},"maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"browserslist":["last 1 chrome versions"],"dependencies":{"@push.rocks/smartfile":"^11.2.5","@push.rocks/smartpath":"^6.0.0","@push.rocks/smarttime":"^4.0.54","@push.rocks/smartcrypto":"^2.0.4","@push.rocks/smartpromise":"^4.2.3","@push.rocks/smartrequest":"^4.2.1"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^26.6.2","@git.zone/tsrun":"^3.0.1","@git.zone/tstest":"^6.3.2","@git.zone/tsbuild":"^5.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/bunq_5.1.1_1790591041501_0.23143173613551138"}}},"time":{"created":"2025-07-18T12:32:03.573Z","modified":"2026-09-28T10:24:01.864Z","3.0.0":"2025-07-18T12:32:03.833Z","3.0.1":"2025-07-18T17:37:07.769Z","3.0.4":"2025-07-22T20:42:19.441Z","3.0.5":"2025-07-22T21:11:40.076Z","3.0.6":"2025-07-22T21:19:16.043Z","3.0.8":"2025-07-22T21:56:46.622Z","3.0.9":"2025-07-22T22:04:59.419Z","3.1.0":"2025-07-22T23:00:18.005Z","3.1.1":"2025-07-24T12:30:36.790Z","3.1.2":"2025-07-25T00:44:34.231Z","4.0.0":"2025-07-25T02:12:27.909Z","4.0.1":"2025-07-25T02:15:19.922Z","4.1.0":"2025-07-25T02:58:42.686Z","4.1.1":"2025-07-25T11:28:21.487Z","4.1.2":"2025-07-25T11:53:13.868Z","4.1.3":"2025-07-27T07:10:27.017Z","4.2.0":"2025-07-27T07:21:10.905Z","4.2.1":"2025-07-27T21:22:03.846Z","4.3.0":"2025-07-29T17:13:49.835Z","4.4.0":"2025-08-02T10:59:01.755Z","5.0.0":"2026-09-27T06:53:31.925Z","5.1.0":"2026-09-28T09:36:29.983Z","5.1.1":"2026-09-28T10:24:01.664Z"},"bugs":{"url":"https://code.foss.global/apiclient.xyz/bunq/issues"},"author":"Task Venture Capital GmbH","license":"MIT","homepage":"https://code.foss.global/apiclient.xyz/bunq#readme","repository":{"url":"https://code.foss.global/apiclient.xyz/bunq.git","type":"git"},"description":"A full-featured TypeScript/JavaScript client for the bunq API","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"readme":"# @apiclient.xyz/bunq\n\n[![npm version](https://img.shields.io/npm/v/@apiclient.xyz/bunq.svg)](https://www.npmjs.com/package/@apiclient.xyz/bunq)\n[![TypeScript](https://img.shields.io/badge/TypeScript-Ready-blue.svg)](https://www.typescriptlang.org/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA powerful, type-safe TypeScript/JavaScript client for the bunq API with full feature coverage\n\n## Table of Contents\n- [Features](#features)\n- [Stateless Architecture](#stateless-architecture-v400)\n- [Installation](#installation)\n- [Quick Start](#quick-start)\n- [Core Examples](#core-examples)\n  - [Account Management](#account-management)\n  - [Making Payments](#making-payments)\n  - [Payment Requests](#payment-requests)\n  - [Draft Payments](#draft-payments-requires-approval)\n  - [Card Management](#card-management)\n  - [Webhooks](#webhooks)\n  - [File Attachments](#file-attachments)\n  - [Export Statements](#export-statements)\n  - [Session Management](#stateless-session-management)\n  - [User Management](#user-management)\n- [Advanced Usage](#advanced-usage)\n- [Security Best Practices](#security-best-practices)\n- [Migration Guides](#migration-guide)\n- [Testing](#testing)\n- [Requirements](#requirements)\n- [License](#license-and-legal-information)\n\n## Features\n\n### Core Banking Operations\n- 💳 **Complete Account Management** - Access all account types (personal, business, joint)\n- 💸 **Advanced Payment Processing** - Single payments, batch payments, scheduled payments\n- 📊 **Transaction History** - Full transaction access with filtering and pagination\n- 💰 **Payment Requests** - Send and manage payment requests with bunq.me integration\n- 📝 **Draft Payments** - Create payments requiring approval\n\n### Advanced Features\n- 🔄 **Automatic Session Management** - Handles token refresh and session renewal\n- 🔐 **Full Security Implementation** - Request signing and response verification\n- 🎯 **Webhook Support** - Real-time notifications with signature verification\n- 💳 **Card Management** - Full card control (activation, limits, blocking)\n- 📎 **File Attachments** - Upload and attach files to payments\n- 📑 **Statement Exports** - Export statements in multiple formats (PDF, CSV, MT940)\n- 🔗 **OAuth Support** - Third-party app integration\n- 🧪 **Sandbox Environment** - Full testing support\n\n### Developer Experience\n- 📘 **Full TypeScript Support** - Complete type definitions for all API responses\n- 🏗️ **Builder Pattern APIs** - Intuitive payment and request builders\n- ⚡ **Promise-based** - Modern async/await support throughout\n- 🛡️ **Type Safety** - Compile-time type checking for all operations\n- 📚 **Comprehensive Documentation** - Detailed examples for every feature\n- 🔄 **Robust HTTP Client** - Built-in retry logic and rate limit handling\n\n## Stateless Architecture (v4.0.0+)\n\nStarting from version 4.0.0, this library is completely stateless. Session management is now entirely controlled by the consumer:\n\n### Key Changes\n- **No File Persistence** - The library no longer saves any state to disk\n- **Session Data Export** - Full session data is returned for you to persist\n- **Session Data Import** - Initialize with previously saved session data\n- **Explicit Session Management** - You control when and how sessions are stored\n\n### Benefits\n- **Full Control** - Store sessions in your preferred storage (database, Redis, etc.)\n- **Better for Microservices** - No shared state between instances\n- **Improved Testing** - Predictable behavior with no hidden state\n- **Enhanced Security** - You control where sensitive data is stored\n\n### Migration from v3.x\nIf you're upgrading from v3.x, you'll need to handle session persistence yourself. See the [Stateless Session Management](#stateless-session-management) section for examples.\n\n## Installation\n\n```bash\nnpm install @apiclient.xyz/bunq\n```\n\n```bash\nyarn add @apiclient.xyz/bunq\n```\n\n```bash\npnpm add @apiclient.xyz/bunq\n```\n\n## Quick Start\n\n```typescript\nimport { BunqAccount } from '@apiclient.xyz/bunq';\n\n// Initialize the client\nconst bunq = new BunqAccount({\n  apiKey: 'your-api-key',\n  deviceName: 'My App',\n  environment: 'PRODUCTION' // or 'SANDBOX' for testing\n});\n\n// Initialize connection and get session data\nconst sessionData = await bunq.init();\n\n// IMPORTANT: Save the session data for reuse\nawait saveSessionToDatabase(sessionData);\n\n// Get your accounts\nconst { accounts, sessionData: updatedSession } = await bunq.getAccounts();\nconsole.log(`Found ${accounts.length} accounts`);\n\n// If session was refreshed, save the updated data\nif (updatedSession) {\n  await saveSessionToDatabase(updatedSession);\n}\n\n// Get recent transactions\nconst transactions = await accounts[0].getTransactions();\ntransactions.forEach(tx => {\n  console.log(`${tx.created}: ${tx.amount.value} ${tx.amount.currency} - ${tx.description}`);\n});\n\n// Always cleanup when done\nawait bunq.stop();\n```\n\n## Core Examples\n\n### Account Management\n\n```typescript\n// Get all accounts with details\nconst accounts = await bunq.getAccounts();\n\nfor (const account of accounts) {\n  console.log(`Account: ${account.description}`);\n  console.log(`Balance: ${account.balance.value} ${account.balance.currency}`);\n  console.log(`IBAN: ${account.iban}`);\n  \n  // Get account-specific transactions\n  const transactions = await account.getTransactions({\n    count: 50,  // Last 50 transactions\n    newer_id: false,\n    older_id: false\n  });\n}\n\n// Create a new monetary account (business accounts only)\nconst newAccount = await BunqMonetaryAccount.create(bunq, {\n  currency: 'EUR',\n  description: 'Savings Account',\n  dailyLimit: '1000.00',\n  overdraftLimit: '0.00'\n});\n```\n\n### Making Payments\n\n#### Simple Payment\n```typescript\n// Using the payment builder pattern\nconst payment = await BunqPayment.builder(bunq, account)\n  .amount('25.00', 'EUR')\n  .toIban('NL91ABNA0417164300', 'John Doe')\n  .description('Birthday gift')\n  .create();\n\nconsole.log(`Payment created with ID: ${payment.id}`);\n```\n\n#### Payment with Custom Request ID (Idempotency)\n```typescript\n// Prevent duplicate payments with custom request IDs\nconst payment = await BunqPayment.builder(bunq, account)\n  .amount('100.00', 'EUR')\n  .toIban('NL91ABNA0417164300', 'Supplier B.V.')\n  .description('Invoice #12345')\n  .customRequestId('invoice-12345-payment')  // Prevents duplicate payments\n  .create();\n```\n\n#### Batch Payments\n```typescript\nconst batch = new BunqPaymentBatch(bunq);\n\n// Create multiple payments in one API call\nconst batchId = await batch.create(account, [\n  {\n    amount: { value: '10.00', currency: 'EUR' },\n    counterparty_alias: { \n      type: 'IBAN', \n      value: 'NL91ABNA0417164300', \n      name: 'Employee 1' \n    },\n    description: 'Salary payment'\n  },\n  {\n    amount: { value: '20.00', currency: 'EUR' },\n    counterparty_alias: { \n      type: 'EMAIL', \n      value: 'freelancer@example.com', \n      name: 'Freelancer' \n    },\n    description: 'Project payment'\n  }\n]);\n\n// Check batch status\nconst batchDetails = await batch.get(account, batchId);\nconsole.log(`Batch status: ${batchDetails.status}`);\nconsole.log(`Total amount: ${batchDetails.total_amount.value}`);\n```\n\n#### Scheduled & Recurring Payments\n```typescript\nconst scheduler = new BunqSchedulePayment(bunq);\n\n// One-time scheduled payment\nconst tomorrow = new Date();\ntomorrow.setDate(tomorrow.getDate() + 1);\n\nconst scheduledId = await BunqSchedulePayment.builder(bunq, account)\n  .amount('50.00', 'EUR')\n  .toIban('NL91ABNA0417164300', 'Landlord')\n  .description('Rent payment')\n  .scheduleOnce(tomorrow.toISOString())\n  .create();\n\n// Recurring monthly payment\nconst recurringId = await BunqSchedulePayment.builder(bunq, account)\n  .amount('9.99', 'EUR')\n  .toIban('NL91ABNA0417164300', 'Netflix B.V.')\n  .description('Monthly subscription')\n  .scheduleMonthly('2024-01-01T10:00:00Z', '2024-12-31T10:00:00Z')\n  .create();\n\n// List all scheduled payments\nconst schedules = await scheduler.list(account);\n\n// Cancel a scheduled payment\nawait scheduler.delete(account, scheduledId);\n```\n\n### Payment Requests\n\n```typescript\n// Create a payment request\nconst request = await BunqRequestInquiry.builder(bunq, account)\n  .amount('25.00', 'EUR')\n  .fromEmail('friend@example.com', 'My Friend')\n  .description('Lunch money')\n  .allowBunqme()  // Generate bunq.me link\n  .minimumAge(18)\n  .create();\n\nconsole.log(`Share this link: ${request.bunqmeShareUrl}`);\n\n// List pending requests\nconst requests = await BunqRequestInquiry.list(bunq, account.id);\nconst pending = requests.filter(r => r.status === 'PENDING');\n\n// Cancel a request\nawait request.update(requestId, { status: 'CANCELLED' });\n```\n\n### Draft Payments (Requires Approval)\n\n```typescript\nconst draft = new BunqDraftPayment(bunq, account);\n\n// Create a draft with multiple payments\nconst draftId = await draft.create({\n  numberOfRequiredAccepts: 2,  // Requires 2 approvals\n  entries: [\n    {\n      amount: { value: '1000.00', currency: 'EUR' },\n      counterparty_alias: { \n        type: 'IBAN', \n        value: 'NL91ABNA0417164300', \n        name: 'Supplier A' \n      },\n      description: 'Invoice payment'\n    },\n    {\n      amount: { value: '2000.00', currency: 'EUR' },\n      counterparty_alias: { \n        type: 'IBAN', \n        value: 'NL91ABNA0417164300', \n        name: 'Supplier B' \n      },\n      description: 'Equipment purchase'\n    }\n  ]\n});\n\n// Approve the draft\nawait draft.accept();\n\n// Or reject it\nawait draft.reject('Budget exceeded');\n```\n\n### Card Management\n\n```typescript\n// List all cards\nconst cards = await BunqCard.list(bunq);\n\n// Get card details\nfor (const card of cards) {\n  console.log(`Card: ${card.name_on_card}`);\n  console.log(`Status: ${card.status}`);\n  console.log(`Type: ${card.type}`)\n  console.log(`Expiry: ${card.expiry_date}`);\n  \n  // Get card limits\n  const limits = card.limit;\n  console.log(`Daily limit: ${limits.daily_spent}`);\n}\n\n// Note: Card management methods like activation, PIN updates, and ordering\n// new cards should be performed through the bunq app or API directly.\n```\n\n### Webhooks\n\n```typescript\n// Setup webhook server\nconst webhookServer = new BunqWebhookServer(bunq, {\n  port: 3000,\n  publicUrl: 'https://myapp.com/webhooks'\n});\n\n// Register event handlers\nwebhookServer.getHandler().onPayment((payment) => {\n  console.log(`New payment: ${payment.amount.value} ${payment.amount.currency}`);\n  console.log(`From: ${payment.counterparty_alias.display_name}`);\n  console.log(`Description: ${payment.description}`);\n  \n  // Your business logic here\n  updateDatabase(payment);\n  sendNotification(payment);\n});\n\nwebhookServer.getHandler().onRequest((request) => {\n  console.log(`New payment request: ${request.amount_inquired.value}`);\n  console.log(`From: ${request.user_alias_created.display_name}`);\n});\n\nwebhookServer.getHandler().onCard((card) => {\n  if (card.status === 'BLOCKED') {\n    console.log(`Card blocked: ${card.name_on_card}`);\n    alertSecurityTeam(card);\n  }\n});\n\n// Start server and register with bunq\nawait webhookServer.start();\nawait webhookServer.register();\n\n// Manual webhook management\nconst webhook = new BunqWebhook(bunq, account);\n\n// Create webhook for specific URL\nconst webhookId = await webhook.create(account, 'https://myapp.com/bunq-webhook');\n\n// List all webhooks\nconst webhooks = await webhook.list(account);\n\n// Delete webhook\nawait webhook.delete(account, webhookId);\n```\n\n### File Attachments\n\n```typescript\nconst attachment = new BunqAttachment(bunq);\n\n// Upload a file\nconst attachmentUuid = await attachment.uploadFile(\n  '/path/to/invoice.pdf',\n  'Invoice #12345'\n);\n\n// Attach to payment\nconst payment = await BunqPayment.builder(bunq, account)\n  .amount('150.00', 'EUR')\n  .toIban('NL91ABNA0417164300', 'Accountant')\n  .description('Services rendered')\n  .attachments([attachmentUuid])\n  .create();\n\n// Upload from buffer\nconst buffer = await generateReport();\nconst uuid = await attachment.uploadBuffer(\n  buffer,\n  'report.pdf',\n  'application/pdf',\n  'Monthly Report'\n);\n\n// Get attachment content\nconst content = await attachment.getContent(attachmentUuid);\nawait fs.writeFile('downloaded.pdf', content);\n```\n\n### Export Statements\n\n```typescript\n// Export last month as PDF\nawait new ExportBuilder(bunq, account)\n  .asPdf()\n  .lastMonth()\n  .downloadTo('/path/to/statement.pdf');\n\n// Export date range as CSV\nawait new ExportBuilder(bunq, account)\n  .asCsv()\n  .dateRange('2024-01-01', '2024-03-31')\n  .regionalFormat('EUROPEAN')\n  .downloadTo('/path/to/transactions.csv');\n\n// Export as MT940 for accounting software\nawait new ExportBuilder(bunq, account)\n  .asMt940()\n  .lastDays(90)  // Last 90 days\n  .downloadTo('/path/to/statement.sta');\n\n// Export last 30 days with attachments\nawait new ExportBuilder(bunq, account)\n  .asPdf()\n  .lastDays(30)\n  .includeAttachments(true)\n  .downloadTo('/path/to/statement-with-attachments.pdf');\n\n// Get statement as Buffer (no file saving)\nconst buffer = await new ExportBuilder(bunq, account)\n  .asPdf()\n  .lastMonth()\n  .download();\n// Use the buffer directly, e.g., send as email attachment\nawait emailService.sendWithAttachment(buffer, 'statement.pdf');\n\n// Get statement as ArrayBuffer for web APIs\nconst arrayBuffer = await new ExportBuilder(bunq, account)\n  .asCsv()\n  .lastDays(30)\n  .downloadAsArrayBuffer();\n// Use with web APIs like Blob\nconst blob = new Blob([arrayBuffer], { type: 'text/csv' });\n\n// Using account's getAccountStatement method for easy month selection\nconst statement1 = account.getAccountStatement({\n  monthlyIndexedFrom1: 1,  // Last month (1 = last month, 2 = two months ago, etc.)\n  includeTransactionAttachments: true\n});\nawait statement1.asPdf().downloadTo('/path/to/last-month.pdf');\n\n// Or using 0-based indexing\nconst statement2 = account.getAccountStatement({\n  monthlyIndexedFrom0: 0,  // Current month (0 = current, 1 = last month, etc.)\n  includeTransactionAttachments: false\n});\nawait statement2.asCsv().downloadTo('/path/to/current-month.csv');\n\n// Or specify exact date range\nconst statement3 = account.getAccountStatement({\n  from: new Date('2024-01-01'),\n  to: new Date('2024-03-31'),\n  includeTransactionAttachments: true\n});\nawait statement3.asMt940().downloadTo('/path/to/q1-statement.sta');\n```\n\n### Stateless Session Management\n\n```typescript\n// Initial session creation\nconst bunq = new BunqAccount({\n  apiKey: 'your-api-key',\n  deviceName: 'My App',\n  environment: 'PRODUCTION'\n});\n\n// Initialize and receive session data\nconst sessionData = await bunq.init();\n\n// Save to your preferred storage\nawait saveToDatabase({\n  userId: 'user123',\n  sessionData: sessionData,\n  createdAt: new Date()\n});\n\n// Reusing existing session\nconst savedData = await loadFromDatabase('user123');\nconst bunq2 = new BunqAccount({\n  apiKey: 'your-api-key',\n  deviceName: 'My App',\n  environment: 'PRODUCTION'\n});\n\n// Initialize with saved session; an ended session is renewed on the saved installation\nconst sessionInUse = await bunq2.initWithSession(savedData.sessionData);\nawait saveToDatabase({ userId: 'user123', sessionData: sessionInUse });\n\n// Making API calls with automatic refresh\nconst { accounts, sessionData: refreshedSession } = await bunq2.getAccounts();\n\n// Always save refreshed session data\nif (refreshedSession) {\n  await saveToDatabase({\n    userId: 'user123',\n    sessionData: refreshedSession,\n    updatedAt: new Date()\n  });\n}\n\n// Get current session data at any time\nconst currentSession = bunq2.getSessionData();\n```\n\nA session lives as long as the `session_timeout` bunq states for its user in the session-server response (the auto logout the user sets in the bunq app; bunq's examples show one week, 604800 seconds). `sessionData.expiresAt` is that moment, and `initWithSession` restores it, so a saved session is reused until then without a new installation or device registration. A session with 30 seconds or less left counts as expired, as in bunq's official SDK. `initWithSession` renews such a session on the saved installation and device (`POST /v1/session-server`, authenticated with the installation token) instead of refusing it, and resolves with the session in use, which you save; the API calls renew a session that ends while the account is in use the same way and return its data. Only a renewal bunq refuses, for example because the installation or the device was removed, fails, with bunq's `BunqApiError`; then `init()` registers a new installation and device.\n\n### User Management\n\n```typescript\n// Get user information\nconst user = await bunq.getUser();\nconst userInfo = await user.getInfo();\n\n// Determine user type\nif (userInfo.UserPerson) {\n  console.log(`Personal account: ${userInfo.UserPerson.display_name}`);\n} else if (userInfo.UserCompany) {\n  console.log(`Business account: ${userInfo.UserCompany.name}`);\n}\n\n// Update user settings\nawait user.update({\n  dailyLimitWithoutConfirmationLogin: '100.00',\n  notificationFilters: [\n    { category: 'PAYMENT', notificationDeliveryMethod: 'PUSH' }\n  ]\n});\n```\n\n## Advanced Usage\n\n### Custom Request Headers\n\n```typescript\n// Use custom request IDs for idempotency\nconst payment = await BunqPayment.builder(bunq, account)\n  .amount('100.00', 'EUR')\n  .toIban('NL91ABNA0417164300', 'Recipient')\n  .description('Invoice payment')\n  .customRequestId('unique-request-id-123')  // Prevents duplicate payments\n  .create();\n\n// The same request ID will return the original payment without creating a duplicate\n```\n\n### OAuth Token Support\n\n```typescript\n// Using OAuth access token instead of API key\nconst bunq = new BunqAccount({\n  apiKey: 'your-oauth-access-token',  // OAuth token from bunq OAuth flow\n  deviceName: 'OAuth App',\n  environment: 'PRODUCTION',\n  isOAuthToken: true  // Important for OAuth-specific handling\n});\n\ntry {\n  // Try normal initialization\n  const sessionData = await bunq.init();\n  await saveOAuthSession(sessionData);\n} catch (error) {\n  // OAuth token may already have installation/device\n  if (error.message.includes('already has a user session')) {\n    // Load existing installation data if available\n    const existingInstallation = await loadOAuthInstallation();\n    \n    // Initialize with existing installation\n    const sessionData = await bunq.initOAuthWithExistingInstallation(existingInstallation);\n    await saveOAuthSession(sessionData);\n  } else {\n    throw error;\n  }\n}\n\n// Use the OAuth-initialized account normally\nconst { accounts, sessionData } = await bunq.getAccounts();\n\n// OAuth tokens work like regular API keys:\n// 1. They go through installation → device → session creation\n// 2. The OAuth token is used as the 'secret' during authentication\n// 3. A session token is created and used for all API calls\n```\n\n### Error Handling\n\n```typescript\nimport { BunqApiError } from '@apiclient.xyz/bunq';\n\ntry {\n  await payment.create();\n} catch (error) {\n  if (error instanceof BunqApiError) {\n    // Handle API errors\n    console.error('API Error:', error.errors);\n    error.errors.forEach(e => {\n      console.error(`- ${e.error_description}`);\n    });\n  } else if (error.response?.status === 401) {\n    // Handle authentication errors\n    console.error('Authentication failed:', error.message);\n    await bunq.init();  // Re-initialize session\n  } else {\n    // Handle other errors\n    console.error('Unexpected error:', error);\n  }\n}\n```\n\n### Automatic Rate Limit Handling\n\nThe library automatically handles rate limiting (HTTP 429 responses) with intelligent exponential backoff:\n\n```typescript\n// No special handling needed - rate limits are handled automatically\nconst payments = await Promise.all([\n  payment1.create(),\n  payment2.create(),\n  payment3.create(),\n  // ... many more payments\n]);\n\n// The HTTP client will automatically:\n// 1. Detect 429 responses\n// 2. Wait for the time specified in Retry-After header\n// 3. Use exponential backoff if no Retry-After is provided\n// 4. Retry the request automatically (up to 3 times)\n```\n\n### Pagination\n\n```typescript\n// Paginate through all transactions\nasync function* getAllTransactions(account: BunqMonetaryAccount) {\n  let olderId: number | false = false;\n  \n  while (true) {\n    const transactions = await account.getTransactions({\n      count: 200,\n      older_id: olderId\n    });\n    \n    if (transactions.length === 0) break;\n    \n    yield* transactions;\n    olderId = transactions[transactions.length - 1].id;\n  }\n}\n\n// Usage\nfor await (const transaction of getAllTransactions(account)) {\n  console.log(`${transaction.created}: ${transaction.description}`);\n}\n```\n\n### Sandbox Testing\n\n```typescript\n// Create sandbox environment\nconst sandboxBunq = new BunqAccount({\n  apiKey: '',  // Will be generated\n  deviceName: 'My Test App',\n  environment: 'SANDBOX'\n});\n\n// Create sandbox user with €1000 balance\nconst apiKey = await sandboxBunq.createSandboxUser();\nconsole.log('Sandbox API key:', apiKey);\n\n// Re-initialize with the generated key\nconst bunq = new BunqAccount({\n  apiKey: apiKey,\n  deviceName: 'My Test App',\n  environment: 'SANDBOX'\n});\nawait bunq.init();\n\n// The sandbox environment provides €1000 initial balance for testing\n// Additional sandbox-specific features can be accessed through the bunq API directly\n```\n\n## Security Best Practices\n\n1. **API Key Storage**: Never commit API keys to version control\n   ```typescript\n   const bunq = new BunqAccount({\n     apiKey: process.env.BUNQ_API_KEY,\n     deviceName: 'Production App',\n     environment: 'PRODUCTION'\n   });\n   ```\n\n2. **IP Whitelisting**: Restrict API access to specific IPs\n   ```typescript\n   const bunq = new BunqAccount({\n     apiKey: process.env.BUNQ_API_KEY,\n     permittedIps: ['1.2.3.4', '5.6.7.8']\n   });\n   ```\n\n3. **Webhook Verification**: Always verify webhook signatures\n   ```typescript\n   app.post('/webhook', (req, res) => {\n     const signature = req.headers['x-bunq-client-signature'];\n     const isValid = bunq.verifyWebhookSignature(req.body, signature);\n     \n     if (!isValid) {\n       return res.status(401).send('Invalid signature');\n     }\n     \n     // Process webhook...\n   });\n   ```\n\n## Migration Guide\n\n### From @bunq-community/bunq-js-client\n\n```typescript\n// Old\nimport BunqJSClient from '@bunq-community/bunq-js-client';\nconst bunqJSClient = new BunqJSClient();\n\n// New\nimport { BunqAccount } from '@apiclient.xyz/bunq';\nconst bunq = new BunqAccount({\n  apiKey: 'your-api-key',\n  deviceName: 'My App'\n});\n\n// Old\nawait bunqJSClient.install();\nawait bunqJSClient.registerDevice();\nawait bunqJSClient.registerSession();\n\n// New - all handled in one call\nawait bunq.init();\n```\n\n## Migration Guide from v3.x to v4.0.0\n\nVersion 4.0.0 introduces a breaking change: the library is now completely stateless. Here's how to migrate:\n\n### Before (v3.x)\n```typescript\n// Session was automatically saved to .nogit/bunqproduction.json\nconst bunq = new BunqAccount({ apiKey, deviceName, environment });\nawait bunq.init(); // Session saved to disk automatically\nconst accounts = await bunq.getAccounts(); // Returns accounts directly\n```\n\n### After (v4.0.0)\n```typescript\n// You must handle session persistence yourself\nconst bunq = new BunqAccount({ apiKey, deviceName, environment });\nconst sessionData = await bunq.init(); // Returns session data\nawait myDatabase.save('session', sessionData); // You save it\n\n// API calls now return both data and potentially refreshed session\nconst { accounts, sessionData: newSession } = await bunq.getAccounts();\nif (newSession) {\n  await myDatabase.save('session', newSession); // Save refreshed session\n}\n```\n\n### Key Changes\n1. **No automatic file persistence** - Remove any dependency on `.nogit/` files\n2. **`init()` returns session data** - You must save this data yourself\n3. **API methods return objects** - Methods like `getAccounts()` now return `{ accounts, sessionData? }`\n4. **Session reuse requires explicit loading** - Use `initWithSession(savedData)`\n5. **OAuth handling is explicit** - Use `initOAuthWithExistingInstallation()` for OAuth tokens with existing installations\n\n### Session Storage Example\n```typescript\n// Simple file-based storage (similar to v3.x behavior)\nimport { promises as fs } from 'fs';\n\nasync function saveSession(data: ISessionData) {\n  await fs.writeFile('./my-session.json', JSON.stringify(data));\n}\n\nasync function loadSession(): Promise<ISessionData | null> {\n  try {\n    const data = await fs.readFile('./my-session.json', 'utf-8');\n    return JSON.parse(data);\n  } catch {\n    return null;\n  }\n}\n\n// Database storage example\nasync function saveSessionToDB(userId: string, data: ISessionData) {\n  await db.collection('bunq_sessions').updateOne(\n    { userId },\n    { $set: { sessionData: data, updatedAt: new Date() } },\n    { upsert: true }\n  );\n}\n```\n\n## Testing\n\nThe library includes comprehensive test coverage:\n\n```bash\n# Run all tests\nnpm test\n\n# Run specific test suites\nnpm run test:basic      # Core functionality\nnpm run test:payments   # Payment features\nnpm run test:webhooks   # Webhook functionality\nnpm run test:session    # Session management\nnpm run test:errors     # Error handling\nnpm run test:advanced   # Advanced features\n```\n\n## Requirements\n\n- Node.js 14.x or higher\n- TypeScript 4.5 or higher (for TypeScript users)\n\n## License and Legal Information\n\nThis repository contains open-source code that is licensed under the MIT License. A copy of the MIT License can be found in the [license](license) file within this repository. \n\n**Please note:** The MIT License does not grant permission to use the trade names, trademarks, service marks, or product names of the project, except as required for reasonable and customary use in describing the origin of the work and reproducing the content of the NOTICE file.\n\n### Trademarks\n\nThis project is owned and maintained by Task Venture Capital GmbH. The names and logos associated with Task Venture Capital GmbH and any related products or services are trademarks of Task Venture Capital GmbH and are not included within the scope of the MIT license granted herein. Use of these trademarks must comply with Task Venture Capital GmbH's Trademark Guidelines, and any usage must be approved in writing by Task Venture Capital GmbH.\n\n### Company Information\n\nTask Venture Capital GmbH  \nRegistered at District court Bremen HRB 35230 HB, Germany\n\nFor any legal inquiries or if you require further information, please contact us via email at hello@task.vc.\n\nBy using this repository, you acknowledge that you have read this section, agree to comply with its terms, and understand that the licensing of the code does not imply endorsement by Task Venture Capital GmbH of any derivative works.","readmeFilename":""}