{"_id":"@adobe/helix-shared-queue-servicebus","_rev":"6-90ed82de86dc171ddd3a73128484f271","name":"@adobe/helix-shared-queue-servicebus","dist-tags":{"latest":"2.1.1"},"versions":{"1.0.0":{"name":"@adobe/helix-shared-queue-servicebus","version":"1.0.0","author":"","license":"Apache-2.0","_id":"@adobe/helix-shared-queue-servicebus@1.0.0","maintainers":[{"name":"marbec","email":"mabecker@adobe.com"},{"name":"tripod","email":"tripod@bocanegra.ch"},{"name":"garthdb","email":"garthdb@gmail.com"},{"name":"lazd","email":"lazdnet@gmail.com"},{"name":"adobe-admin","email":"grp-opensourceoffice@adobe.com"},{"name":"patrickfulton","email":"patrickfulton@gmail.com"},{"name":"trieloff","email":"lars@trieloff.net"},{"name":"krisnye","email":"krisnye@gmail.com"},{"name":"dcpfsdk","email":"dcpfsdk@adobe.com"},{"name":"natebaldwin","email":"natebaldwindesign@gmail.com"},{"name":"devongovett","email":"devongovett@gmail.com"},{"name":"aspro83","email":"danniintheus@gmail.com"},{"name":"symanovi","email":"symanovi@adobe.com"},{"name":"dpfister","email":"dominique.pfister@gmail.com"},{"name":"stefan-guggisberg","email":"sg@adobe.com"},{"name":"rofe","email":"npm@rofe.com"},{"name":"kptdobe","email":"kptdobe@gmail.com"},{"name":"adobehalls","email":"halls@adobe.com"},{"name":"fullcolorcoder","email":"bradjohn@adobe.com"},{"name":"djaeggi","email":"djaeggi@adobe.com"},{"name":"dylandepass","email":"dylandepass@gmail.com"},{"name":"mhaack","email":"mhaack@adobe.com"},{"name":"amol-anand","email":"amol@adobe.com"},{"name":"stopp-adobe","email":"stopp@adobe.com"},{"name":"namarora","email":"namarora@adobe.com"},{"name":"doten","email":"doten@adobe.com"},{"name":"duh_schmidt","email":"schmidt@adobe.com"},{"name":"asthabh23","email":"astha.bhargava23@gmail.com"},{"name":"zdahbi","email":"zouhir.dahbi@outlook.com"},{"name":"tuicu","email":"tuicu@adobe.com"},{"name":"fmeschbe","email":"fmeschbe@adobe.com"}],"homepage":"https://github.com/adobe/helix-shared#readme","bugs":{"url":"https://github.com/adobe/helix-shared/issues"},"dist":{"shasum":"45607878191a1d42c75c8234d46641df0b9c7c68","tarball":"https://registry.npmjs.org/@adobe/helix-shared-queue-servicebus/-/helix-shared-queue-servicebus-1.0.0.tgz","fileCount":9,"integrity":"sha512-ueUD3WJeDEsF/I+Hm8cS+KCT/hJTsgzKwoDIpa7sX08GlKpMdl8h0bw0vPR7193N1GoUQ0+LWBDoZKXPwhrIrA==","signatures":[{"sig":"MEYCIQDiYsLBzOgVWvlt1CYglNZZOkXJIxoInLIM7TxYsOeBGwIhAOUnGE/qPR4IQ/asidOXWi/SHLqZasvNJYfn+85yG3x4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46563},"main":"src/index.js","type":"module","mocha":{"require":["mocha-suppress-logs"],"reporter":"mocha-multi-reporters","reporter-options":"configFile=.mocha-multi.json"},"gitHead":"fd48f45b2c6f4a5c1ff8a697a5b3d7830da8027c","scripts":{"lint":"eslint .","test":"c8 mocha","clean":"rm -rf package-lock.json node_modules"},"_npmUser":{"name":"adobe-admin","email":"grp-opensourceoffice@adobe.com"},"repository":{"url":"git+https://github.com/adobe/helix-shared.git","type":"git"},"_npmVersion":"11.19.1","description":"Shared modules of the Helix Project - Azure Service Bus queue backend for @adobe/helix-shared-queue","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@azure/service-bus":"^7.9.5","@adobe/helix-shared-queue":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"22.1.0","@adobe/helix-shared-storage":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/helix-shared-queue-servicebus_1.0.0_1789132277175_0.5009745055111823","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@adobe/helix-shared-queue-servicebus","version":"1.1.0","author":"","license":"Apache-2.0","_id":"@adobe/helix-shared-queue-servicebus@1.1.0","maintainers":[{"name":"marbec","email":"mabecker@adobe.com"},{"name":"tripod","email":"tripod@bocanegra.ch"},{"name":"garthdb","email":"garthdb@gmail.com"},{"name":"lazd","email":"lazdnet@gmail.com"},{"name":"adobe-admin","email":"grp-opensourceoffice@adobe.com"},{"name":"patrickfulton","email":"patrickfulton@gmail.com"},{"name":"trieloff","email":"lars@trieloff.net"},{"name":"krisnye","email":"krisnye@gmail.com"},{"name":"dcpfsdk","email":"dcpfsdk@adobe.com"},{"name":"natebaldwin","email":"natebaldwindesign@gmail.com"},{"name":"devongovett","email":"devongovett@gmail.com"},{"name":"aspro83","email":"danniintheus@gmail.com"},{"name":"symanovi","email":"symanovi@adobe.com"},{"name":"dpfister","email":"dominique.pfister@gmail.com"},{"name":"stefan-guggisberg","email":"sg@adobe.com"},{"name":"rofe","email":"npm@rofe.com"},{"name":"kptdobe","email":"kptdobe@gmail.com"},{"name":"adobehalls","email":"halls@adobe.com"},{"name":"fullcolorcoder","email":"bradjohn@adobe.com"},{"name":"djaeggi","email":"djaeggi@adobe.com"},{"name":"dylandepass","email":"dylandepass@gmail.com"},{"name":"mhaack","email":"mhaack@adobe.com"},{"name":"amol-anand","email":"amol@adobe.com"},{"name":"stopp-adobe","email":"stopp@adobe.com"},{"name":"namarora","email":"namarora@adobe.com"},{"name":"doten","email":"doten@adobe.com"},{"name":"duh_schmidt","email":"schmidt@adobe.com"},{"name":"asthabh23","email":"astha.bhargava23@gmail.com"},{"name":"zdahbi","email":"zouhir.dahbi@outlook.com"},{"name":"tuicu","email":"tuicu@adobe.com"},{"name":"fmeschbe","email":"fmeschbe@adobe.com"}],"homepage":"https://github.com/adobe/helix-shared#readme","bugs":{"url":"https://github.com/adobe/helix-shared/issues"},"dist":{"shasum":"376bd804d3dd7f310bc9f1c9a1835d6bb750ea8b","tarball":"https://registry.npmjs.org/@adobe/helix-shared-queue-servicebus/-/helix-shared-queue-servicebus-1.1.0.tgz","fileCount":10,"integrity":"sha512-G/W+/59ojO5tiszP6IJXuoFnr4PK2eyKDzZO7yo5J8RYTgPUOOZASGt2A2obZ8sQ7HiZoLh4qIk5vq/OKV7rcQ==","signatures":[{"sig":"MEUCIHsEfycPUnRXJ6HIizaL8Ub8SZMeO7DYMa2RjgRDK4d6AiEAqIeMRx/p7+HgMOXTNaxxx4shx3aypBK0/lEe5wn4DtE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHXWFmoUfOWjA+A9tY7EfHK3/wGjnVr9NhQ14k24n9vsAiB8+b4zWMPm7SsCIW5oBFlQdpKMWEilkFSMojxCrIDrzg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50163},"main":"src/index.js","type":"module","mocha":{"require":["mocha-suppress-logs"],"reporter":"mocha-multi-reporters","reporter-options":"configFile=.mocha-multi.json"},"gitHead":"2ac96fb3b741187bed0b13203010c06c88023af1","scripts":{"lint":"eslint .","test":"c8 mocha","clean":"rm -rf package-lock.json node_modules"},"_npmUser":{"name":"adobe-admin","email":"grp-opensourceoffice@adobe.com"},"repository":{"url":"git+https://github.com/adobe/helix-shared.git","type":"git"},"_npmVersion":"11.19.1","description":"Shared modules of the Helix Project - Azure Service Bus queue backend for @adobe/helix-shared-queue","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@azure/service-bus":"^7.9.5","@adobe/helix-shared-queue":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"22.1.0","@adobe/helix-shared-storage":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/helix-shared-queue-servicebus_1.1.0_1789417776432_0.13195068850551106","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@adobe/helix-shared-queue-servicebus","version":"2.0.0","author":"","license":"Apache-2.0","_id":"@adobe/helix-shared-queue-servicebus@2.0.0","maintainers":[{"name":"marbec","email":"mabecker@adobe.com"},{"name":"tripod","email":"tripod@bocanegra.ch"},{"name":"garthdb","email":"garthdb@gmail.com"},{"name":"lazd","email":"lazdnet@gmail.com"},{"name":"adobe-admin","email":"grp-opensourceoffice@adobe.com"},{"name":"patrickfulton","email":"patrickfulton@gmail.com"},{"name":"trieloff","email":"lars@trieloff.net"},{"name":"krisnye","email":"krisnye@gmail.com"},{"name":"dcpfsdk","email":"dcpfsdk@adobe.com"},{"name":"natebaldwin","email":"natebaldwindesign@gmail.com"},{"name":"devongovett","email":"devongovett@gmail.com"},{"name":"aspro83","email":"danniintheus@gmail.com"},{"name":"symanovi","email":"symanovi@adobe.com"},{"name":"dpfister","email":"dominique.pfister@gmail.com"},{"name":"stefan-guggisberg","email":"sg@adobe.com"},{"name":"rofe","email":"npm@rofe.com"},{"name":"kptdobe","email":"kptdobe@gmail.com"},{"name":"adobehalls","email":"halls@adobe.com"},{"name":"fullcolorcoder","email":"bradjohn@adobe.com"},{"name":"djaeggi","email":"djaeggi@adobe.com"},{"name":"dylandepass","email":"dylandepass@gmail.com"},{"name":"mhaack","email":"mhaack@adobe.com"},{"name":"amol-anand","email":"amol@adobe.com"},{"name":"stopp-adobe","email":"stopp@adobe.com"},{"name":"namarora","email":"namarora@adobe.com"},{"name":"doten","email":"doten@adobe.com"},{"name":"duh_schmidt","email":"schmidt@adobe.com"},{"name":"asthabh23","email":"astha.bhargava23@gmail.com"},{"name":"zdahbi","email":"zouhir.dahbi@outlook.com"},{"name":"tuicu","email":"tuicu@adobe.com"},{"name":"fmeschbe","email":"fmeschbe@adobe.com"}],"homepage":"https://github.com/adobe/helix-shared#readme","bugs":{"url":"https://github.com/adobe/helix-shared/issues"},"dist":{"shasum":"43bfcd69ecb2db01170bd7b9df13255e03326f9a","tarball":"https://registry.npmjs.org/@adobe/helix-shared-queue-servicebus/-/helix-shared-queue-servicebus-2.0.0.tgz","fileCount":10,"integrity":"sha512-ZMlFTXHVOp8YWCH+p5D4ZsUtvZrV4njEfXUG0OhGiGYNEEeo0ZrKwXkqXeVsRuUZAxVuvALZtMn/3xAVi0h/Vg==","signatures":[{"sig":"MEYCIQDT8M7IxOmOWeZV931Zu8iOrP7S1HVTnJeEY5n/fdu7qwIhAOBSWhurP22IcPyrFWPR8I77J08vADRfCiAcKgOCdrqX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCPkA2/jehNzY7FfbJhYfIXdO/u8x27mBDsikig7Qs23wIhAJ4e06sjDfu4ZDHsVauIvVyW6MJC9ISQHbUzCuML4a3x","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":52584},"main":"src/index.js","type":"module","mocha":{"require":["mocha-suppress-logs"],"reporter":"mocha-multi-reporters","reporter-options":"configFile=.mocha-multi.json"},"gitHead":"1a5894f564ac2b9d26c254d69f18ffeac73d15bd","scripts":{"lint":"eslint .","test":"c8 mocha","clean":"rm -rf package-lock.json node_modules"},"_npmUser":{"name":"adobe-admin","email":"grp-opensourceoffice@adobe.com"},"repository":{"url":"git+https://github.com/adobe/helix-shared.git","type":"git"},"_npmVersion":"11.19.1","description":"Shared modules of the Helix Project - Azure Service Bus queue backend for @adobe/helix-shared-queue","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@azure/service-bus":"^7.9.5","@adobe/helix-shared-queue":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"22.1.0","@adobe/helix-shared-storage":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/helix-shared-queue-servicebus_2.0.0_1789480767091_0.6200891991820181","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@adobe/helix-shared-queue-servicebus","version":"2.1.0","author":"","license":"Apache-2.0","_id":"@adobe/helix-shared-queue-servicebus@2.1.0","maintainers":[{"name":"marbec","email":"mabecker@adobe.com"},{"name":"tripod","email":"tripod@bocanegra.ch"},{"name":"garthdb","email":"garthdb@gmail.com"},{"name":"lazd","email":"lazdnet@gmail.com"},{"name":"adobe-admin","email":"grp-opensourceoffice@adobe.com"},{"name":"patrickfulton","email":"patrickfulton@gmail.com"},{"name":"trieloff","email":"lars@trieloff.net"},{"name":"krisnye","email":"krisnye@gmail.com"},{"name":"dcpfsdk","email":"dcpfsdk@adobe.com"},{"name":"natebaldwin","email":"natebaldwindesign@gmail.com"},{"name":"devongovett","email":"devongovett@gmail.com"},{"name":"aspro83","email":"danniintheus@gmail.com"},{"name":"symanovi","email":"symanovi@adobe.com"},{"name":"dpfister","email":"dominique.pfister@gmail.com"},{"name":"stefan-guggisberg","email":"sg@adobe.com"},{"name":"rofe","email":"npm@rofe.com"},{"name":"kptdobe","email":"kptdobe@gmail.com"},{"name":"adobehalls","email":"halls@adobe.com"},{"name":"fullcolorcoder","email":"bradjohn@adobe.com"},{"name":"djaeggi","email":"djaeggi@adobe.com"},{"name":"dylandepass","email":"dylandepass@gmail.com"},{"name":"mhaack","email":"mhaack@adobe.com"},{"name":"amol-anand","email":"amol@adobe.com"},{"name":"stopp-adobe","email":"stopp@adobe.com"},{"name":"namarora","email":"namarora@adobe.com"},{"name":"doten","email":"doten@adobe.com"},{"name":"duh_schmidt","email":"schmidt@adobe.com"},{"name":"asthabh23","email":"astha.bhargava23@gmail.com"},{"name":"zdahbi","email":"zouhir.dahbi@outlook.com"},{"name":"tuicu","email":"tuicu@adobe.com"},{"name":"fmeschbe","email":"fmeschbe@adobe.com"}],"homepage":"https://github.com/adobe/helix-shared#readme","bugs":{"url":"https://github.com/adobe/helix-shared/issues"},"dist":{"shasum":"742b3d17e79437589e7037bfcdcdea93cb8870a9","tarball":"https://registry.npmjs.org/@adobe/helix-shared-queue-servicebus/-/helix-shared-queue-servicebus-2.1.0.tgz","fileCount":10,"integrity":"sha512-CtIK00aCUUyWRRYkQFEQMGhDtmTOcJBNAxun11+y8B7i8/+wz68itm0DQS7rWXQeIl8QVJOk4Z6Bbl+V4ghDhA==","signatures":[{"sig":"MEYCIQDpPkaeuBNhwWBJpOxoCbCAwoArvg5qDrJS+NaaoU+6sgIhANoDw8WpIgUrvCGpr6g0fVd9hdiewUyENPhCPIhOs898","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBlGhHFx2P26476Z2tnuxq9oY+A4KW/nSZ2lkunr1K0tAiASlcV0bLOUrFi/G0QLfpuwZReiSGaRh35WtMzO53qIfA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":54730},"main":"src/index.js","type":"module","mocha":{"require":["mocha-suppress-logs"],"reporter":"mocha-multi-reporters","reporter-options":"configFile=.mocha-multi.json"},"engines":{"node":">=24"},"gitHead":"7d7ddf4e819e48173b051b98dc2eb06258428363","scripts":{"lint":"eslint .","test":"c8 mocha","clean":"rm -rf package-lock.json node_modules"},"_npmUser":{"name":"adobe-admin","email":"grp-opensourceoffice@adobe.com"},"repository":{"url":"git+https://github.com/adobe/helix-shared.git","type":"git"},"_npmVersion":"11.19.1","description":"Shared modules of the Helix Project - Azure Service Bus queue backend for @adobe/helix-shared-queue","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@azure/service-bus":"^7.9.5","@adobe/helix-shared-queue":"^2.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"22.1.0","@adobe/helix-shared-storage":"^3.3.0"},"_npmOperationalInternal":{"tmp":"tmp/helix-shared-queue-servicebus_2.1.0_1789649932099_0.22474350280388755","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"@adobe/helix-shared-queue-servicebus","version":"2.1.1","author":"","license":"Apache-2.0","_id":"@adobe/helix-shared-queue-servicebus@2.1.1","maintainers":[{"name":"marbec","email":"mabecker@adobe.com"},{"name":"tripod","email":"tripod@bocanegra.ch"},{"name":"garthdb","email":"garthdb@gmail.com"},{"name":"lazd","email":"lazdnet@gmail.com"},{"name":"adobe-admin","email":"grp-opensourceoffice@adobe.com"},{"name":"patrickfulton","email":"patrickfulton@gmail.com"},{"name":"trieloff","email":"lars@trieloff.net"},{"name":"krisnye","email":"krisnye@gmail.com"},{"name":"dcpfsdk","email":"dcpfsdk@adobe.com"},{"name":"natebaldwin","email":"natebaldwindesign@gmail.com"},{"name":"devongovett","email":"devongovett@gmail.com"},{"name":"aspro83","email":"danniintheus@gmail.com"},{"name":"symanovi","email":"symanovi@adobe.com"},{"name":"dpfister","email":"dominique.pfister@gmail.com"},{"name":"stefan-guggisberg","email":"sg@adobe.com"},{"name":"rofe","email":"npm@rofe.com"},{"name":"kptdobe","email":"kptdobe@gmail.com"},{"name":"adobehalls","email":"halls@adobe.com"},{"name":"fullcolorcoder","email":"bradjohn@adobe.com"},{"name":"djaeggi","email":"djaeggi@adobe.com"},{"name":"dylandepass","email":"dylandepass@gmail.com"},{"name":"mhaack","email":"mhaack@adobe.com"},{"name":"amol-anand","email":"amol@adobe.com"},{"name":"stopp-adobe","email":"stopp@adobe.com"},{"name":"namarora","email":"namarora@adobe.com"},{"name":"doten","email":"doten@adobe.com"},{"name":"duh_schmidt","email":"schmidt@adobe.com"},{"name":"asthabh23","email":"astha.bhargava23@gmail.com"},{"name":"zdahbi","email":"zouhir.dahbi@outlook.com"},{"name":"tuicu","email":"tuicu@adobe.com"},{"name":"fmeschbe","email":"fmeschbe@adobe.com"}],"homepage":"https://github.com/adobe/helix-shared#readme","bugs":{"url":"https://github.com/adobe/helix-shared/issues"},"dist":{"shasum":"bcaa3e048d4658937c7dbeece757debe9ffea524","tarball":"https://registry.npmjs.org/@adobe/helix-shared-queue-servicebus/-/helix-shared-queue-servicebus-2.1.1.tgz","fileCount":10,"integrity":"sha512-yAzOwCk7TfErghLzEM0lb+C7Ob/CIyNIoYlJA1DBkA+JKgg+tnKxyKas2RnAEGKUa2QWlAOnewX3j7/W4ZeHgw==","signatures":[{"sig":"MEUCIF4ng+/Xk63+/nF9um/7Lm+FlSd8uAr5Eb3fBmJpkXUeAiEA4V0uY8FOposbPgLKN5rRRNDE1jhyiYmD+mt5RjqUllY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDKgMxuAFzXOahNwjS1h+hjpYt8CvaFQCF/ZpajptmmPwIge+bbiYMT1aVaLI+4rEsi5HS+/7G2Uf0tpR9mNjhiKpw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":56311},"main":"src/index.js","type":"module","mocha":{"require":["mocha-suppress-logs"],"reporter":"mocha-multi-reporters","reporter-options":"configFile=.mocha-multi.json"},"engines":{"node":">=24"},"gitHead":"90c09e910af4348f24aaa5174e4b2466f814142a","scripts":{"lint":"eslint .","test":"c8 mocha","clean":"rm -rf package-lock.json node_modules"},"_npmUser":{"name":"adobe-admin","email":"grp-opensourceoffice@adobe.com"},"repository":{"url":"git+https://github.com/adobe/helix-shared.git","type":"git"},"_npmVersion":"11.19.1","description":"Shared modules of the Helix Project - Azure Service Bus queue backend for @adobe/helix-shared-queue","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@azure/service-bus":"^7.9.5","@adobe/helix-shared-queue":"^2.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"22.1.0","@adobe/helix-shared-storage":"^3.3.0"},"_npmOperationalInternal":{"tmp":"tmp/helix-shared-queue-servicebus_2.1.1_1789664681066_0.5913571522174872","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-09-11T13:11:16.995Z","modified":"2026-10-01T01:34:21.824Z","1.0.0":"2026-09-11T13:11:17.307Z","1.1.0":"2026-09-14T20:29:36.576Z","2.0.0":"2026-09-15T13:59:27.192Z","2.1.0":"2026-09-17T12:58:52.208Z","2.1.1":"2026-09-17T17:04:41.157Z"},"bugs":{"url":"https://github.com/adobe/helix-shared/issues"},"license":"Apache-2.0","homepage":"https://github.com/adobe/helix-shared#readme","repository":{"url":"git+https://github.com/adobe/helix-shared.git","type":"git"},"description":"Shared modules of the Helix Project - Azure Service Bus queue backend for @adobe/helix-shared-queue","maintainers":[{"email":"mabecker@adobe.com","name":"marbec"},{"email":"tripod@bocanegra.ch","name":"tripod"},{"email":"garthdb@gmail.com","name":"garthdb"},{"email":"lazdnet@gmail.com","name":"lazd"},{"email":"grp-opensourceoffice@adobe.com","name":"adobe-admin"},{"email":"patrickfulton@gmail.com","name":"patrickfulton"},{"email":"lars@trieloff.net","name":"trieloff"},{"email":"krisnye@gmail.com","name":"krisnye"},{"email":"dcpfsdk@adobe.com","name":"dcpfsdk"},{"email":"natebaldwindesign@gmail.com","name":"natebaldwin"},{"email":"devongovett@gmail.com","name":"devongovett"},{"email":"danniintheus@gmail.com","name":"aspro83"},{"email":"symanovi@adobe.com","name":"symanovi"},{"email":"dominique.pfister@gmail.com","name":"dpfister"},{"email":"sg@adobe.com","name":"stefan-guggisberg"},{"email":"npm@rofe.com","name":"rofe"},{"email":"kptdobe@gmail.com","name":"kptdobe"},{"email":"halls@adobe.com","name":"adobehalls"},{"email":"bradjohn@adobe.com","name":"fullcolorcoder"},{"email":"djaeggi@adobe.com","name":"djaeggi"},{"email":"dylandepass@gmail.com","name":"dylandepass"},{"email":"mhaack@adobe.com","name":"mhaack"},{"email":"amol@adobe.com","name":"amol-anand"},{"email":"stopp@adobe.com","name":"stopp-adobe"},{"email":"namarora@adobe.com","name":"namarora"},{"email":"doten@adobe.com","name":"doten"},{"email":"schmidt@adobe.com","name":"duh_schmidt"},{"email":"astha.bhargava23@gmail.com","name":"asthabh23"},{"email":"aljoseph@adobe.com","name":"aljoseph"},{"email":"zouhir.dahbi@outlook.com","name":"zdahbi"},{"email":"tuicu@adobe.com","name":"tuicu"},{"email":"fmeschbe@adobe.com","name":"fmeschbe"}],"readme":"# Helix Shared - queue - Azure Service Bus\n\nThe Azure Service Bus `QueueBackend` for `@adobe/helix-shared-queue` — the concrete backend proposed (tracking-only, no code) in issue #1271, built to validate that the pluggable-queue pattern established for SQS (`@adobe/helix-shared-queue-sqs`) generalizes to a second, materially different provider.\n\n## Installation\n\n```bash\nnpm install @adobe/helix-shared-queue @adobe/helix-shared-queue-servicebus\n```\n\n## Basic Usage\n\n`QueueServiceServiceBus` is a `QueueService` subclass pre-wired with the default Service Bus backend:\n\n```js\nimport { QueueServiceServiceBus as QueueService } from '@adobe/helix-shared-queue-servicebus';\n\nexport async function main(req, context) {\n  const service = QueueService.fromContext(context);\n  const queue = service.queue('my-queue-name');\n\n  const { messageIds } = await queue.send([{ body: JSON.stringify({ hello: 'world' }) }]);\n\n  return new Response(JSON.stringify({ messageIds }));\n}\n```\n\n## Environment Variables\n\n`createDefaultBackendFactory(env, opts)` (used internally by `QueueServiceServiceBus.fromContext()`) reads:\n\n- `HLX_AZURE_SERVICE_BUS_CONNECTION_STRING` — a Service Bus namespace connection string. This is the only supported auth method for now — there is no managed-identity (`@azure/identity`) support yet, matching `@adobe/helix-shared-storage-azure`'s connection-string/account-key-only precedent. See issue #1271 for context on this being a deferred decision.\n- `HLX_AZURE_SERVICE_BUS_TRANSPORT` — set to `ws` to connect over AMQP-over-WebSockets (port 443) instead of raw AMQP (port 5671, the default when this var is unset or has any other value). Useful when raw AMQP connections get reset by a corporate VPN/firewall — a common source of otherwise-opaque `ECONNRESET` errors from `ServiceBusBackend`. Uses the platform global `WebSocket`, so no extra dependency is required.\n\n## Real API Differences from the SQS Backend (not implementation choices)\n\nPorting the same abstraction onto Azure Service Bus surfaced genuine API-shape differences, not just naming differences:\n\n- **No partial batch success/failure.** SQS's `SendMessageBatchCommand` reports per-entry `Successful`/`Failed`; Service Bus's `sendMessages()` either sends the whole batch or throws. So unlike the SQS backend, `sendBatch()` here cannot log-and-skip an individual bad message within an otherwise-good batch — a batch failure here always propagates as a `QueueError`.\n- **No bulk-ack API.** SQS batches deletes via `DeleteMessageBatchCommand`; Service Bus only exposes `completeMessage()` for one message at a time, so `deleteBatch()` completes each message individually (in parallel), which also means per-message ack failures are naturally isolated without needing SQS's chunking logic.\n- **Exact, connection-aware batch sizing.** `ServiceBusMessageBatch#tryAddMessage()` does real, connection-negotiated size checking, so — unlike the SQS backend, which has to approximate serialized entry size itself — this backend needs no `MAX_BATCH_BYTES`-style constant at all.\n- **Ack requires the exact received object.** SQS acks via a `ReceiptHandle` string copied out of the message; Service Bus's `completeMessage(message)` requires the *same* `ServiceBusReceivedMessage` instance the SDK returned (it's used for internal lock tracking) — so unlike the SQS backend, this one mutates the raw message in place to attach its `cleanup` closure rather than building a plain-object copy.\n- **`groupId` → `sessionId`, send-side only.** Service Bus's `sessionId` (mapped from `groupId`) requires session-enabled queues, and session-ordered *consumption* requires an entirely different receiver (`acceptSession()`/`acceptNextSession()`, not the plain `createReceiver()` this backend uses). This backend supports the send-side mapping but does not implement session-based receive — a known, documented limitation, not an oversight.\n\n## Oversized-Message Spillover\n\nSame pattern as the SQS backend: a single message too large to fit any batch is spilled to a bucket resolved by name from an injected `@adobe/helix-shared-storage` `Storage`. This package has no prior wire format to stay compatible with, so there's only one pointer shape: `{swapBucket, swapKey}` — no SQS-style `legacySwapFormat` equivalent.\n\n```js\nimport { QueueServiceServiceBus as QueueService } from '@adobe/helix-shared-queue-servicebus';\nimport { StorageAzure as Storage } from '@adobe/helix-shared-storage-azure';\n\nconst storage = Storage.fromContext(context);\nconst service = QueueService.fromContext(context, { storage, bucketName: 'my-bucket' });\n```\n\n`storage`/`bucketName` (and `swapPrefix`, defaulting to `'default/servicebus-swap'`) can also be set per queue: `service.queue('my-queue-name', { storage, bucketName, swapPrefix })`.\n\n### Receiving a Swapped Message: `isSwapped()`/`deserialize()`\n\n`queue.receive()` does **not** transparently fetch a swapped-out message's real content — see `@adobe/helix-shared-queue`'s README for why (in short: forcing a blob fetch for every swapped message regardless of whether the caller needs the full body is wasteful). Check and resolve explicitly instead, off the `service` itself — no need to call `service.queue(name)` just for this:\n\n```js\nconst { messages } = await queue.receive();\nfor (let message of messages) {\n  if (await service.isSwapped(message)) {\n    message = await service.deserialize(message);\n  }\n  console.log(message.body); // guaranteed real now\n}\nawait queue.delete(messages);\n```\n\n`service.deserialize()` resolves the bucket named by the message's own pointer (`swapBucket`) via `storage.bucket(swapBucket)` — it does **not** require that name to match the `bucketName` configured above. `Storage.bucket()` itself enforces no allowlist, so the only thing bounding which bucket actually gets read is whatever IAM/ACL scope the underlying cloud credentials already have; don't grant those credentials broader bucket access than you're comfortable with a queue message being able to reach.\n\n`queue.delete()` cleans up the spilled body from this backend's own configured bucket once the message is acknowledged — regardless of whether `deserialize()` was ever called for it; cleanup failures are logged and otherwise ignored.\n\n### Using Outside `receive()`/`delete()` (e.g. an Azure Function Service Bus Trigger)\n\nAn Azure Function with a Service Bus trigger delivers the message straight to the handler, never calling `Queue#receive()` at all. For that case, use the same `service.isSwapped()`/`service.deserialize()` shown above — they resolve directly from `message.body`, so they work identically whether the message came from `receive()` or from a trigger. First normalize the raw trigger message into the same `ReceivedMessage` shape `queue.receive()` produces, using `service.toReceivedMessages()`:\n\n```js\nimport { QueueServiceServiceBus as QueueService } from '@adobe/helix-shared-queue-servicebus';\n\nexport async function handler(message, context) {\n  const service = QueueService.fromContext(context, { storage, bucketName: 'my-bucket' });\n  const rawMessage = { ...context.triggerMetadata, body: message };\n  const [received] = service.toReceivedMessages([rawMessage]);\n\n  let resolved = received;\n  if (await service.isSwapped(resolved)) {\n    resolved = await service.deserialize(resolved);\n  }\n  await process(JSON.parse(resolved.body));\n  if (resolved.cleanup) {\n    await resolved.cleanup(); // only after successful, durable processing\n  }\n}\n```\n\n`rawMessage` must be shaped like a `ServiceBusReceivedMessage` (`messageId`/`body`/`sessionId`/`deliveryCount`). The Azure Functions v4 programming model's binding hands the trigger handler only the (possibly already-parsed) message body by default — `messageId`/`sessionId`/`deliveryCount` live on `context.triggerMetadata` instead, so assemble `rawMessage` from both before calling this.\n\nUnlike the `receive()`/`delete()` flow above, there's no `Queue#delete()` call here to clean up a swapped body on ack, so `deserialize()` attaches a `cleanup` function to the resolved message instead (present only when a swap was actually resolved) — call it yourself once processing has durably succeeded.\n\nFor a consumer that doesn't want a `QueueService` instance at all, the same dereference-and-cleanup logic is available standalone via `dereferenceMessageBody()`/`isSwappedBody()`, fetching immediately since there's little benefit to laziness processing one message at a time:\n\n```js\nimport { dereferenceMessageBody } from '@adobe/helix-shared-queue-servicebus';\n\nexport async function handler(message, context) {\n  const { body, cleanup } = await dereferenceMessageBody(String(message.body), { storage, log: context.log });\n  await process(JSON.parse(body));\n  await cleanup(); // only after successful, durable processing\n}\n```\n\n## Long-Polling\n\n`queue.receive({ minTime, maxTime, maxMessages })` follows the same contract as the SQS backend (see `@adobe/helix-shared-queue`'s README), adapted to `receiveMessages()`'s single-call shape — unlike SQS, there's no fixed per-call message-count cap to chunk against.\n","readmeFilename":"README.md"}