{"_id":"@absolutejs/dispatch-vonage","_rev":"2-bf93701f594fd2e0323f004ddd9d1960","name":"@absolutejs/dispatch-vonage","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@absolutejs/dispatch-vonage","version":"0.1.0","keywords":["absolutejs","dispatch","vonage","sms","mms","rcs","whatsapp","viber"],"author":{"name":"Alex Kahn"},"license":"Apache-2.0","_id":"@absolutejs/dispatch-vonage@0.1.0","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"homepage":"https://github.com/absolutejs/dispatch-adapters/tree/main/vonage","bugs":{"url":"https://github.com/absolutejs/dispatch-adapters/issues"},"dist":{"shasum":"273aef26c494d4f9fc3d2dedb50311c134864350","tarball":"https://registry.npmjs.org/@absolutejs/dispatch-vonage/-/dispatch-vonage-0.1.0.tgz","fileCount":22,"integrity":"sha512-6Mi5c7018zMBDt9i16ENoTBIpWhOQF5JWjmw3mf0kjmefE16/d2H7QHGIrsNXTVutEriu2pBIuSeVm6mlsQoUQ==","signatures":[{"sig":"MEUCIAQh+QbyWWZ11xyf/aex1srljWjJ7ERmUncdXbGztsj5AiEA7FSOuqPQpZd2LBv/OMxxxNU91qIajskpdTp5l3rX9Js=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":136448},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./manifest":{"types":"./dist/manifest.d.ts","import":"./dist/manifest.js","default":"./dist/manifest.js"},"./manifest.json":"./dist/manifest.json"},"gitHead":"ac4ca39431662b229f1ff78f6eeff465d00c5949","scripts":{"test":"bun test","build":"rm -rf dist && bun build src/index.ts src/manifest.ts --outdir dist --sourcemap --target=bun --external @absolutejs/compliance --external @absolutejs/dispatch --external '@absolutejs/dispatch/*' --external @absolutejs/reliability --external '@absolutejs/reliability/*' --external @absolutejs/manifest --external @sinclair/typebox --external @vonage/server-sdk --external '@vonage/*' && tsc --project tsconfig.build.json && absolute-manifest emit","format":"prettier --write \"./**/*.{ts,json,md}\"","release":"bun run check:package && npm publish --access public","typecheck":"tsc --noEmit","check:package":"bun run format && bun run typecheck && bun run test && bun run verify-package && bun run build && bun run verify-package --artifacts","verify-package":"absolute-manifest verify-package"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"absolutejs":{"runtimePeers":{"@vonage/server-sdk":{"range":">=3.29.0 <4","tested":"3.29.0","optional":false,"buildExternals":["@vonage/server-sdk","@vonage/*"],"artifactImports":[]},"@absolutejs/dispatch":{"range":">=0.6.0 <0.7","tested":"0.6.0","optional":false,"buildExternals":["@absolutejs/dispatch","@absolutejs/dispatch/*"],"artifactImports":[]},"@absolutejs/compliance":{"range":">=0.6.0 <0.7","tested":"0.6.0","optional":true,"buildExternals":["@absolutejs/compliance"],"artifactImports":[]}},"manifestContract":2},"repository":{"url":"git+https://github.com/absolutejs/dispatch-adapters.git","type":"git","directory":"vonage"},"_npmVersion":"10.9.2","description":"Production Vonage Messages API adapter for AbsoluteJS with multichannel failover, signed durable webhooks, consent, readiness, and 10DLC inspection.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@sinclair/typebox":"^0.34.0","@absolutejs/manifest":"0.7.2","@absolutejs/reliability":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"pg":"8.22.0","prettier":"3.8.1","@types/pg":"8.20.3","@types/bun":"1.3.14","typescript":"5.9.3","@vonage/server-sdk":"3.29.0","@absolutejs/dispatch":"0.6.0","@absolutejs/compliance":"0.6.0"},"peerDependencies":{"@vonage/server-sdk":">=3.29.0 <4","@absolutejs/dispatch":">=0.6.0 <0.7","@absolutejs/compliance":">=0.6.0 <0.7"},"peerDependenciesMeta":{"@absolutejs/compliance":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dispatch-vonage_0.1.0_1785612572250_0.7858161594810467","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@absolutejs/dispatch-vonage","version":"0.2.0","description":"Production Vonage Messages API adapter for AbsoluteJS with multichannel failover, signed durable webhooks, consent, readiness, and 10DLC inspection.","repository":{"type":"git","url":"git+https://github.com/absolutejs/dispatch-adapters.git","directory":"vonage"},"homepage":"https://github.com/absolutejs/dispatch-adapters/tree/main/vonage","bugs":{"url":"https://github.com/absolutejs/dispatch-adapters/issues"},"type":"module","main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","license":"Apache-2.0","author":{"name":"Alex Kahn"},"publishConfig":{"access":"public"},"keywords":["absolutejs","dispatch","vonage","sms","mms","rcs","whatsapp","viber"],"scripts":{"build":"rm -rf dist && bun build src/index.ts src/manifest.ts --outdir dist --sourcemap --target=bun --external @absolutejs/compliance --external @absolutejs/dispatch --external '@absolutejs/dispatch/*' --external @absolutejs/reliability --external '@absolutejs/reliability/*' --external @absolutejs/manifest --external @sinclair/typebox --external @vonage/server-sdk --external '@vonage/*' && tsc --project tsconfig.build.json && absolute-manifest emit","test":"bun test","typecheck":"tsc --noEmit","format":"prettier --write \"./**/*.{ts,json,md}\"","verify-package":"absolute-manifest verify-package","check:package":"bun run format && bun run typecheck && bun run test && bun run verify-package && bun run build && bun run verify-package --artifacts","release":"bun run check:package && npm publish --access public"},"peerDependencies":{"@absolutejs/compliance":">=0.7.0 <0.8","@absolutejs/dispatch":">=0.7.0 <0.8","@vonage/server-sdk":">=3.29.0 <4"},"peerDependenciesMeta":{"@absolutejs/compliance":{"optional":true}},"dependencies":{"@absolutejs/manifest":"0.7.2","@absolutejs/reliability":"0.1.0","@sinclair/typebox":"^0.34.0"},"devDependencies":{"@absolutejs/compliance":"0.7.0","@absolutejs/dispatch":"0.7.1","@types/bun":"1.3.14","@types/pg":"8.20.3","@vonage/server-sdk":"3.29.0","pg":"8.22.0","prettier":"3.8.1","typescript":"5.9.3"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./manifest":{"types":"./dist/manifest.d.ts","import":"./dist/manifest.js","default":"./dist/manifest.js"},"./manifest.json":"./dist/manifest.json"},"absolutejs":{"manifestContract":2,"runtimePeers":{"@absolutejs/compliance":{"artifactImports":[],"buildExternals":["@absolutejs/compliance"],"optional":true,"range":">=0.7.0 <0.8","tested":"0.7.0"},"@absolutejs/dispatch":{"artifactImports":[],"buildExternals":["@absolutejs/dispatch","@absolutejs/dispatch/*"],"optional":false,"range":">=0.7.0 <0.8","tested":"0.7.1"},"@vonage/server-sdk":{"artifactImports":[],"buildExternals":["@vonage/server-sdk","@vonage/*"],"optional":false,"range":">=3.29.0 <4","tested":"3.29.0"}}},"_id":"@absolutejs/dispatch-vonage@0.2.0","gitHead":"c7ced4f2c36deff0db92b72ef5bf86ca98aa004d","_nodeVersion":"22.14.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-ISVfyn/4/Wjn1YaQRrAqXichu+t4VMyLDbzsI6g2temseyuF/+4VgBmtwAeOC5rn0Tam4zRV1lkxjMbPGjtwrQ==","shasum":"40f6ed1489def7fbde7c9af7de14838311803efe","tarball":"https://registry.npmjs.org/@absolutejs/dispatch-vonage/-/dispatch-vonage-0.2.0.tgz","fileCount":22,"unpackedSize":136448,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDsDTZv/Gp/sPgmPiv6gstGoiFcdmv8jG+ZZ/LfYjC5rAIgLC2LLvp7RrSk7ZAUZVHQj6NNia1GrQwfssPNTR01/24="}]},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"directories":{},"maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dispatch-vonage_0.2.0_1785618470599_0.8604380852865667"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-01T19:29:32.140Z","modified":"2026-08-01T21:07:50.933Z","0.1.0":"2026-08-01T19:29:32.404Z","0.2.0":"2026-08-01T21:07:50.748Z"},"bugs":{"url":"https://github.com/absolutejs/dispatch-adapters/issues"},"author":{"name":"Alex Kahn"},"license":"Apache-2.0","homepage":"https://github.com/absolutejs/dispatch-adapters/tree/main/vonage","keywords":["absolutejs","dispatch","vonage","sms","mms","rcs","whatsapp","viber"],"repository":{"type":"git","url":"git+https://github.com/absolutejs/dispatch-adapters.git","directory":"vonage"},"description":"Production Vonage Messages API adapter for AbsoluteJS with multichannel failover, signed durable webhooks, consent, readiness, and 10DLC inspection.","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"readme":"# @absolutejs/dispatch-vonage\n\nProduction Vonage Messages API adapter for `@absolutejs/dispatch`. It supports\nSMS, MMS, RCS, WhatsApp, Viber, and Facebook Messenger; ordered provider-native\nfailover; signed durable webhooks; consent ingestion; tenant routing; readiness;\nand 10DLC inspection.\n\n## Install\n\n```sh\nbun add @absolutejs/dispatch@^0.6 @absolutejs/dispatch-vonage @vonage/server-sdk\nbun add @absolutejs/compliance@^0.6 # when enforcing program consent\n```\n\nThese are normal npm releases. No overrides, file dependencies, prepare, or\nprepack hooks are required.\n\n## Send with failover\n\n```ts\nimport { createDispatcher } from \"@absolutejs/dispatch\";\nimport {\n  createPostgresIdempotentOperationStore,\n  createPostgresTransactionRunner,\n  createVonageAdapter,\n} from \"@absolutejs/dispatch-vonage\";\nimport { Vonage } from \"@vonage/server-sdk\";\n\nconst client = new Vonage({\n  applicationId: process.env.VONAGE_APPLICATION_ID!,\n  privateKey: process.env.VONAGE_PRIVATE_KEY!,\n});\nconst runner = createPostgresTransactionRunner(postgresPool);\nconst messaging = createVonageAdapter({\n  apiKey: process.env.VONAGE_API_KEY!,\n  applicationId: process.env.VONAGE_APPLICATION_ID!,\n  client,\n  defaultFrom: {\n    rcs: process.env.VONAGE_RCS_SENDER!,\n    sms: process.env.VONAGE_SMS_SENDER!,\n  },\n  idempotencyStore: createPostgresIdempotentOperationStore(runner),\n  webhookUrl: \"https://app.example.com/webhooks/vonage/messages\",\n});\n\nconst dispatch = createDispatcher({ messaging });\nawait dispatch.messaging({\n  content: {\n    actions: [{ kind: \"reply\", label: \"Acknowledge\", payload: \"ack:42\" }],\n    kind: \"rich\",\n    mediaUrl: \"https://cdn.example.com/incidents/42.png\",\n    text: \"Database latency is elevated.\",\n    title: \"Production incident\",\n  },\n  consent: { programId: \"pro-alerts\", purpose: \"incident-alerts\" },\n  fallbacks: [\n    {\n      content: { kind: \"text\", text: \"Database latency is elevated.\" },\n      transport: \"sms\",\n    },\n  ],\n  idempotencyKey: \"incident-42:recipient-7\",\n  tenant: \"tenant-a\",\n  to: { address: \"+12025550100\", transport: \"rcs\" },\n});\n```\n\n`extensions.vonage` accepts channel-specific message content such as an RCS\ncarousel while protecting routing, sender, recipient, and failover fields from\noverride.\n\n## Signed durable webhooks\n\n```ts\nimport {\n  createPostgresWebhookInboxStore,\n  createVonageWebhookHandler,\n} from \"@absolutejs/dispatch-vonage\";\n\nconst webhook = createVonageWebhookHandler({\n  consentLedger,\n  handler: (event) => lifecycle.record(event),\n  inbox: createPostgresWebhookInboxStore(runner),\n  resolveAccount: (apiKey) => webhookAccount(apiKey),\n  resolveConsentScopes: (event) => programsForNumber(event.from!.address),\n});\n\napp.post(\"/webhooks/vonage/messages\", ({ request }) => webhook(request));\n```\n\nThe handler requires an HS256 Bearer JWT, validates issuer, API key,\napplication binding, issuance time, signature rotation, and the SHA-256 hash of\nthe exact raw request body before parsing. Normalized events include typed\ncontent/endpoints, fallback attempt position, price/currency, SMS segments,\nnetwork code, provider errors, and delivery/read state. Completed inbox rows\ndefault to 24-hour retention; pending work remains recoverable.\n\n## Operational boundaries\n\n- Native scheduling is intentionally rejected; enqueue the Dispatch call so\n  consent is re-evaluated immediately before delivery.\n- `inspectVonageMessagingReadiness()` checks the live application webhooks plus\n  durable inbox, signature, consent, opt-out, and carrier assertions.\n- `createVonageRegistrationManager()` registers and inspects 10DLC brands and\n  campaigns, then links approved sending numbers\n- `createVonageRcsCapabilityManager()` checks device reachability and supported\n  RCS features before choosing rich content or a fallback\n- `createVonageMessageController()` revokes supported outbound RCS messages and\n  marks inbound WhatsApp messages read\n  and number linkage through a narrow API client.\n- OTP/Verify, number intelligence, support conversations, and campaigns remain\n  separate product boundaries rather than being hidden inside Dispatch.\n\n## License\n\n[Apache-2.0](./LICENSE)\n","readmeFilename":"README.md"}