katanakit-js 2.13.7 → 2.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +233 -0
- package/dist/adapters/assistant/assistant.service.d.ts +27 -0
- package/dist/adapters/assistant/assistant.service.d.ts.map +1 -0
- package/dist/adapters/assistant/assistant.service.js +76 -0
- package/dist/adapters/assistant/assistant.service.js.map +1 -0
- package/dist/adapters/assistant/index.d.ts +2 -0
- package/dist/adapters/assistant/index.d.ts.map +1 -0
- package/dist/adapters/assistant/index.js +2 -0
- package/dist/adapters/assistant/index.js.map +1 -0
- package/dist/adapters/assistant/main.d.ts +2 -0
- package/dist/adapters/assistant/main.d.ts.map +1 -0
- package/dist/adapters/assistant/main.js +12 -0
- package/dist/adapters/assistant/main.js.map +1 -0
- package/dist/adapters/astro/astro.service.d.ts.map +1 -0
- package/dist/adapters/astro/astro.service.js.map +1 -0
- package/dist/adapters/astro/index.d.ts.map +1 -0
- package/dist/adapters/astro/index.js.map +1 -0
- package/dist/adapters/astro/rss.service.d.ts.map +1 -0
- package/dist/adapters/astro/rss.service.js.map +1 -0
- package/dist/adapters/astro/seo.service.d.ts.map +1 -0
- package/dist/adapters/astro/seo.service.js.map +1 -0
- package/dist/adapters/express/app.d.ts.map +1 -0
- package/dist/adapters/express/app.js.map +1 -0
- package/dist/{katanakit-js/adapters → adapters}/express/index.d.ts +1 -1
- package/dist/adapters/express/index.d.ts.map +1 -0
- package/dist/{katanakit-js/adapters → adapters}/express/index.js +1 -1
- package/dist/adapters/express/index.js.map +1 -0
- package/dist/{katanakit-js/adapters → adapters}/express/main.d.ts.map +1 -1
- package/dist/adapters/express/main.js.map +1 -0
- package/dist/adapters/express/products.controller.d.ts.map +1 -0
- package/dist/adapters/express/products.controller.js.map +1 -0
- package/dist/adapters/express/router.d.ts.map +1 -0
- package/dist/adapters/express/router.js.map +1 -0
- package/dist/adapters/express/server.d.ts +63 -0
- package/dist/adapters/express/server.d.ts.map +1 -0
- package/dist/{katanakit-js/adapters → adapters}/express/server.js +45 -6
- package/dist/adapters/express/server.js.map +1 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/nuxt/index.d.ts.map +1 -0
- package/dist/adapters/nuxt/index.js.map +1 -0
- package/dist/adapters/nuxt/nuxt.service.d.ts.map +1 -0
- package/dist/adapters/nuxt/nuxt.service.js.map +1 -0
- package/dist/adapters/telegram/index.d.ts +3 -0
- package/dist/adapters/telegram/index.d.ts.map +1 -0
- package/dist/adapters/telegram/index.js +2 -0
- package/dist/adapters/telegram/index.js.map +1 -0
- package/dist/adapters/telegram/main.d.ts +2 -0
- package/dist/adapters/telegram/main.d.ts.map +1 -0
- package/dist/adapters/telegram/main.js +11 -0
- package/dist/adapters/telegram/main.js.map +1 -0
- package/dist/adapters/telegram/telegram.service.d.ts +60 -0
- package/dist/adapters/telegram/telegram.service.d.ts.map +1 -0
- package/dist/adapters/telegram/telegram.service.js +103 -0
- package/dist/adapters/telegram/telegram.service.js.map +1 -0
- package/dist/adapters/vue/index.d.ts.map +1 -0
- package/dist/adapters/vue/index.js.map +1 -0
- package/dist/adapters/vue/vue.service.d.ts.map +1 -0
- package/dist/adapters/vue/vue.service.js.map +1 -0
- package/dist/adapters/whatsapp/index.d.ts +3 -0
- package/dist/adapters/whatsapp/index.d.ts.map +1 -0
- package/dist/adapters/whatsapp/index.js +2 -0
- package/dist/adapters/whatsapp/index.js.map +1 -0
- package/dist/adapters/whatsapp/main.d.ts +2 -0
- package/dist/adapters/whatsapp/main.d.ts.map +1 -0
- package/dist/adapters/whatsapp/main.js +14 -0
- package/dist/adapters/whatsapp/main.js.map +1 -0
- package/dist/adapters/whatsapp/whatsapp.service.d.ts +96 -0
- package/dist/adapters/whatsapp/whatsapp.service.d.ts.map +1 -0
- package/dist/adapters/whatsapp/whatsapp.service.js +191 -0
- package/dist/adapters/whatsapp/whatsapp.service.js.map +1 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/seo-meta.types.d.ts.map +1 -0
- package/dist/config/seo-meta.types.js.map +1 -0
- package/dist/config/seo.service.d.ts.map +1 -0
- package/dist/config/seo.service.js.map +1 -0
- package/dist/config/site.config.d.ts.map +1 -0
- package/dist/config/site.config.js.map +1 -0
- package/dist/{katanakit-js/core → core}/index.d.ts +2 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/{katanakit-js/core → core}/index.js +2 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/services/agent.service.d.ts +76 -0
- package/dist/core/services/agent.service.d.ts.map +1 -0
- package/dist/core/services/agent.service.js +291 -0
- package/dist/core/services/agent.service.js.map +1 -0
- package/dist/core/services/assistant.service.d.ts +94 -0
- package/dist/core/services/assistant.service.d.ts.map +1 -0
- package/dist/core/services/assistant.service.js +200 -0
- package/dist/core/services/assistant.service.js.map +1 -0
- package/dist/core/services/dates.service.d.ts.map +1 -0
- package/dist/core/services/dates.service.js.map +1 -0
- package/dist/core/services/error.service.d.ts.map +1 -0
- package/dist/core/services/error.service.js.map +1 -0
- package/dist/core/services/formatter.service.d.ts.map +1 -0
- package/dist/core/services/formatter.service.js.map +1 -0
- package/dist/core/services/generator.service.d.ts.map +1 -0
- package/dist/core/services/generator.service.js.map +1 -0
- package/dist/core/services/geometry.service.d.ts.map +1 -0
- package/dist/core/services/geometry.service.js.map +1 -0
- package/dist/core/services/http.service.d.ts.map +1 -0
- package/dist/core/services/http.service.js.map +1 -0
- package/dist/core/services/logger.service.d.ts.map +1 -0
- package/dist/core/services/logger.service.js.map +1 -0
- package/dist/core/services/reactive.service.d.ts.map +1 -0
- package/dist/core/services/reactive.service.js.map +1 -0
- package/dist/core/services/timing.service.d.ts.map +1 -0
- package/dist/core/services/timing.service.js.map +1 -0
- package/dist/core/services/utils.service.d.ts.map +1 -0
- package/dist/core/services/utils.service.js.map +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js.map +1 -0
- package/dist/infrastructure/dom/dom.service.d.ts.map +1 -0
- package/dist/infrastructure/dom/dom.service.js.map +1 -0
- package/dist/infrastructure/index.d.ts.map +1 -0
- package/dist/infrastructure/index.js.map +1 -0
- package/dist/infrastructure/observer/observer.service.d.ts.map +1 -0
- package/dist/infrastructure/observer/observer.service.js.map +1 -0
- package/dist/infrastructure/sensors/sensors.service.d.ts.map +1 -0
- package/dist/infrastructure/sensors/sensors.service.js.map +1 -0
- package/dist/{katanakit-js/infrastructure → infrastructure}/storage/storage.service.d.ts +3 -2
- package/dist/infrastructure/storage/storage.service.d.ts.map +1 -0
- package/dist/{katanakit-js/infrastructure → infrastructure}/storage/storage.service.js +24 -28
- package/dist/infrastructure/storage/storage.service.js.map +1 -0
- package/dist/infrastructure/theme/theme.service.d.ts.map +1 -0
- package/dist/infrastructure/theme/theme.service.js.map +1 -0
- package/dist/infrastructure/viewport/viewport.service.d.ts.map +1 -0
- package/dist/infrastructure/viewport/viewport.service.js.map +1 -0
- package/dist/infrastructure/worker/worker.service.d.ts.map +1 -0
- package/dist/infrastructure/worker/worker.service.js.map +1 -0
- package/dist/prisma/assistant.store.d.ts +11 -0
- package/dist/prisma/assistant.store.d.ts.map +1 -0
- package/dist/prisma/assistant.store.js +40 -0
- package/dist/prisma/assistant.store.js.map +1 -0
- package/dist/prisma/db.d.ts.map +1 -0
- package/dist/prisma/db.js.map +1 -0
- package/dist/prisma/index.d.ts +3 -0
- package/dist/prisma/index.d.ts.map +1 -0
- package/dist/prisma/index.js +3 -0
- package/dist/prisma/index.js.map +1 -0
- package/dist/{katanakit-js/prisma → prisma}/schema.json +321 -13
- package/dist/prisma/use-prisma.d.ts.map +1 -0
- package/dist/prisma/use-prisma.js.map +1 -0
- package/dist/{katanakit-js/types → types}/index.d.ts +127 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/{katanakit-js/types → types}/index.js.map +1 -1
- package/package.json +30 -9
- package/dist/katanakit-js/adapters/astro/astro.service.d.ts.map +0 -1
- package/dist/katanakit-js/adapters/astro/astro.service.js.map +0 -1
- package/dist/katanakit-js/adapters/astro/index.d.ts.map +0 -1
- package/dist/katanakit-js/adapters/astro/index.js.map +0 -1
- package/dist/katanakit-js/adapters/astro/rss.service.d.ts.map +0 -1
- package/dist/katanakit-js/adapters/astro/rss.service.js.map +0 -1
- package/dist/katanakit-js/adapters/astro/seo.service.d.ts.map +0 -1
- package/dist/katanakit-js/adapters/astro/seo.service.js.map +0 -1
- package/dist/katanakit-js/adapters/express/app.d.ts.map +0 -1
- package/dist/katanakit-js/adapters/express/app.js.map +0 -1
- package/dist/katanakit-js/adapters/express/index.d.ts.map +0 -1
- package/dist/katanakit-js/adapters/express/index.js.map +0 -1
- package/dist/katanakit-js/adapters/express/main.js.map +0 -1
- package/dist/katanakit-js/adapters/express/products.controller.d.ts.map +0 -1
- package/dist/katanakit-js/adapters/express/products.controller.js.map +0 -1
- package/dist/katanakit-js/adapters/express/router.d.ts.map +0 -1
- package/dist/katanakit-js/adapters/express/router.js.map +0 -1
- package/dist/katanakit-js/adapters/express/server.d.ts +0 -39
- package/dist/katanakit-js/adapters/express/server.d.ts.map +0 -1
- package/dist/katanakit-js/adapters/express/server.js.map +0 -1
- package/dist/katanakit-js/adapters/index.d.ts.map +0 -1
- package/dist/katanakit-js/adapters/index.js.map +0 -1
- package/dist/katanakit-js/adapters/nuxt/index.d.ts.map +0 -1
- package/dist/katanakit-js/adapters/nuxt/index.js.map +0 -1
- package/dist/katanakit-js/adapters/nuxt/nuxt.service.d.ts.map +0 -1
- package/dist/katanakit-js/adapters/nuxt/nuxt.service.js.map +0 -1
- package/dist/katanakit-js/adapters/vue/index.d.ts.map +0 -1
- package/dist/katanakit-js/adapters/vue/index.js.map +0 -1
- package/dist/katanakit-js/adapters/vue/vue.service.d.ts.map +0 -1
- package/dist/katanakit-js/adapters/vue/vue.service.js.map +0 -1
- package/dist/katanakit-js/config/index.d.ts.map +0 -1
- package/dist/katanakit-js/config/index.js.map +0 -1
- package/dist/katanakit-js/config/seo-meta.types.d.ts.map +0 -1
- package/dist/katanakit-js/config/seo-meta.types.js.map +0 -1
- package/dist/katanakit-js/config/seo.service.d.ts.map +0 -1
- package/dist/katanakit-js/config/seo.service.js.map +0 -1
- package/dist/katanakit-js/config/site.config.d.ts.map +0 -1
- package/dist/katanakit-js/config/site.config.js.map +0 -1
- package/dist/katanakit-js/core/index.d.ts.map +0 -1
- package/dist/katanakit-js/core/index.js.map +0 -1
- package/dist/katanakit-js/core/services/dates.service.d.ts.map +0 -1
- package/dist/katanakit-js/core/services/dates.service.js.map +0 -1
- package/dist/katanakit-js/core/services/error.service.d.ts.map +0 -1
- package/dist/katanakit-js/core/services/error.service.js.map +0 -1
- package/dist/katanakit-js/core/services/formatter.service.d.ts.map +0 -1
- package/dist/katanakit-js/core/services/formatter.service.js.map +0 -1
- package/dist/katanakit-js/core/services/generator.service.d.ts.map +0 -1
- package/dist/katanakit-js/core/services/generator.service.js.map +0 -1
- package/dist/katanakit-js/core/services/geometry.service.d.ts.map +0 -1
- package/dist/katanakit-js/core/services/geometry.service.js.map +0 -1
- package/dist/katanakit-js/core/services/http.service.d.ts.map +0 -1
- package/dist/katanakit-js/core/services/http.service.js.map +0 -1
- package/dist/katanakit-js/core/services/logger.service.d.ts.map +0 -1
- package/dist/katanakit-js/core/services/logger.service.js.map +0 -1
- package/dist/katanakit-js/core/services/reactive.service.d.ts.map +0 -1
- package/dist/katanakit-js/core/services/reactive.service.js.map +0 -1
- package/dist/katanakit-js/core/services/timing.service.d.ts.map +0 -1
- package/dist/katanakit-js/core/services/timing.service.js.map +0 -1
- package/dist/katanakit-js/core/services/utils.service.d.ts.map +0 -1
- package/dist/katanakit-js/core/services/utils.service.js.map +0 -1
- package/dist/katanakit-js/index.d.ts.map +0 -1
- package/dist/katanakit-js/index.js.map +0 -1
- package/dist/katanakit-js/infrastructure/dom/dom.service.d.ts.map +0 -1
- package/dist/katanakit-js/infrastructure/dom/dom.service.js.map +0 -1
- package/dist/katanakit-js/infrastructure/index.d.ts.map +0 -1
- package/dist/katanakit-js/infrastructure/index.js.map +0 -1
- package/dist/katanakit-js/infrastructure/observer/observer.service.d.ts.map +0 -1
- package/dist/katanakit-js/infrastructure/observer/observer.service.js.map +0 -1
- package/dist/katanakit-js/infrastructure/sensors/sensors.service.d.ts.map +0 -1
- package/dist/katanakit-js/infrastructure/sensors/sensors.service.js.map +0 -1
- package/dist/katanakit-js/infrastructure/storage/storage.service.d.ts.map +0 -1
- package/dist/katanakit-js/infrastructure/storage/storage.service.js.map +0 -1
- package/dist/katanakit-js/infrastructure/theme/theme.service.d.ts.map +0 -1
- package/dist/katanakit-js/infrastructure/theme/theme.service.js.map +0 -1
- package/dist/katanakit-js/infrastructure/viewport/viewport.service.d.ts.map +0 -1
- package/dist/katanakit-js/infrastructure/viewport/viewport.service.js.map +0 -1
- package/dist/katanakit-js/infrastructure/worker/worker.service.d.ts.map +0 -1
- package/dist/katanakit-js/infrastructure/worker/worker.service.js.map +0 -1
- package/dist/katanakit-js/prisma/db.d.ts.map +0 -1
- package/dist/katanakit-js/prisma/db.js.map +0 -1
- package/dist/katanakit-js/prisma/index.d.ts +0 -2
- package/dist/katanakit-js/prisma/index.d.ts.map +0 -1
- package/dist/katanakit-js/prisma/index.js +0 -2
- package/dist/katanakit-js/prisma/index.js.map +0 -1
- package/dist/katanakit-js/prisma/use-prisma.d.ts.map +0 -1
- package/dist/katanakit-js/prisma/use-prisma.js.map +0 -1
- package/dist/katanakit-js/types/index.d.ts.map +0 -1
- /package/dist/{katanakit-js/adapters → adapters}/astro/astro.service.d.ts +0 -0
- /package/dist/{katanakit-js/adapters → adapters}/astro/astro.service.js +0 -0
- /package/dist/{katanakit-js/adapters → adapters}/astro/index.d.ts +0 -0
- /package/dist/{katanakit-js/adapters → adapters}/astro/index.js +0 -0
- /package/dist/{katanakit-js/adapters → adapters}/astro/rss.service.d.ts +0 -0
- /package/dist/{katanakit-js/adapters → adapters}/astro/rss.service.js +0 -0
- /package/dist/{katanakit-js/adapters → adapters}/astro/seo.service.d.ts +0 -0
- /package/dist/{katanakit-js/adapters → adapters}/astro/seo.service.js +0 -0
- /package/dist/{katanakit-js/adapters → adapters}/express/app.d.ts +0 -0
- /package/dist/{katanakit-js/adapters → adapters}/express/app.js +0 -0
- /package/dist/{katanakit-js/adapters → adapters}/express/main.d.ts +0 -0
- /package/dist/{katanakit-js/adapters → adapters}/express/main.js +0 -0
- /package/dist/{katanakit-js/adapters → adapters}/express/products.controller.d.ts +0 -0
- /package/dist/{katanakit-js/adapters → adapters}/express/products.controller.js +0 -0
- /package/dist/{katanakit-js/adapters → adapters}/express/router.d.ts +0 -0
- /package/dist/{katanakit-js/adapters → adapters}/express/router.js +0 -0
- /package/dist/{katanakit-js/adapters → adapters}/index.d.ts +0 -0
- /package/dist/{katanakit-js/adapters → adapters}/index.js +0 -0
- /package/dist/{katanakit-js/adapters → adapters}/nuxt/index.d.ts +0 -0
- /package/dist/{katanakit-js/adapters → adapters}/nuxt/index.js +0 -0
- /package/dist/{katanakit-js/adapters → adapters}/nuxt/nuxt.service.d.ts +0 -0
- /package/dist/{katanakit-js/adapters → adapters}/nuxt/nuxt.service.js +0 -0
- /package/dist/{katanakit-js/adapters → adapters}/vue/index.d.ts +0 -0
- /package/dist/{katanakit-js/adapters → adapters}/vue/index.js +0 -0
- /package/dist/{katanakit-js/adapters → adapters}/vue/vue.service.d.ts +0 -0
- /package/dist/{katanakit-js/adapters → adapters}/vue/vue.service.js +0 -0
- /package/dist/{katanakit-js/config → config}/index.d.ts +0 -0
- /package/dist/{katanakit-js/config → config}/index.js +0 -0
- /package/dist/{katanakit-js/config → config}/seo-meta.types.d.ts +0 -0
- /package/dist/{katanakit-js/config → config}/seo-meta.types.js +0 -0
- /package/dist/{katanakit-js/config → config}/seo.service.d.ts +0 -0
- /package/dist/{katanakit-js/config → config}/seo.service.js +0 -0
- /package/dist/{katanakit-js/config → config}/site.config.d.ts +0 -0
- /package/dist/{katanakit-js/config → config}/site.config.js +0 -0
- /package/dist/{katanakit-js/core → core}/services/dates.service.d.ts +0 -0
- /package/dist/{katanakit-js/core → core}/services/dates.service.js +0 -0
- /package/dist/{katanakit-js/core → core}/services/error.service.d.ts +0 -0
- /package/dist/{katanakit-js/core → core}/services/error.service.js +0 -0
- /package/dist/{katanakit-js/core → core}/services/formatter.service.d.ts +0 -0
- /package/dist/{katanakit-js/core → core}/services/formatter.service.js +0 -0
- /package/dist/{katanakit-js/core → core}/services/generator.service.d.ts +0 -0
- /package/dist/{katanakit-js/core → core}/services/generator.service.js +0 -0
- /package/dist/{katanakit-js/core → core}/services/geometry.service.d.ts +0 -0
- /package/dist/{katanakit-js/core → core}/services/geometry.service.js +0 -0
- /package/dist/{katanakit-js/core → core}/services/http.service.d.ts +0 -0
- /package/dist/{katanakit-js/core → core}/services/http.service.js +0 -0
- /package/dist/{katanakit-js/core → core}/services/logger.service.d.ts +0 -0
- /package/dist/{katanakit-js/core → core}/services/logger.service.js +0 -0
- /package/dist/{katanakit-js/core → core}/services/reactive.service.d.ts +0 -0
- /package/dist/{katanakit-js/core → core}/services/reactive.service.js +0 -0
- /package/dist/{katanakit-js/core → core}/services/timing.service.d.ts +0 -0
- /package/dist/{katanakit-js/core → core}/services/timing.service.js +0 -0
- /package/dist/{katanakit-js/core → core}/services/utils.service.d.ts +0 -0
- /package/dist/{katanakit-js/core → core}/services/utils.service.js +0 -0
- /package/dist/{katanakit-js/index.d.ts → index.d.ts} +0 -0
- /package/dist/{katanakit-js/index.js → index.js} +0 -0
- /package/dist/{katanakit-js/infrastructure → infrastructure}/dom/dom.service.d.ts +0 -0
- /package/dist/{katanakit-js/infrastructure → infrastructure}/dom/dom.service.js +0 -0
- /package/dist/{katanakit-js/infrastructure → infrastructure}/index.d.ts +0 -0
- /package/dist/{katanakit-js/infrastructure → infrastructure}/index.js +0 -0
- /package/dist/{katanakit-js/infrastructure → infrastructure}/observer/observer.service.d.ts +0 -0
- /package/dist/{katanakit-js/infrastructure → infrastructure}/observer/observer.service.js +0 -0
- /package/dist/{katanakit-js/infrastructure → infrastructure}/sensors/sensors.service.d.ts +0 -0
- /package/dist/{katanakit-js/infrastructure → infrastructure}/sensors/sensors.service.js +0 -0
- /package/dist/{katanakit-js/infrastructure → infrastructure}/theme/theme.service.d.ts +0 -0
- /package/dist/{katanakit-js/infrastructure → infrastructure}/theme/theme.service.js +0 -0
- /package/dist/{katanakit-js/infrastructure → infrastructure}/viewport/viewport.service.d.ts +0 -0
- /package/dist/{katanakit-js/infrastructure → infrastructure}/viewport/viewport.service.js +0 -0
- /package/dist/{katanakit-js/infrastructure → infrastructure}/worker/worker.service.d.ts +0 -0
- /package/dist/{katanakit-js/infrastructure → infrastructure}/worker/worker.service.js +0 -0
- /package/dist/{katanakit-js/prisma → prisma}/db.d.ts +0 -0
- /package/dist/{katanakit-js/prisma → prisma}/db.js +0 -0
- /package/dist/{katanakit-js/prisma → prisma}/use-prisma.d.ts +0 -0
- /package/dist/{katanakit-js/prisma → prisma}/use-prisma.js +0 -0
- /package/dist/{katanakit-js/types → types}/index.js +0 -0
|
@@ -5,8 +5,20 @@ import router from "./router.js";
|
|
|
5
5
|
/** Module-level state for the Express server. */
|
|
6
6
|
let app = null;
|
|
7
7
|
let started = false;
|
|
8
|
+
let finalized = false;
|
|
9
|
+
/**
|
|
10
|
+
* Returns the raw request body buffer captured by the JSON parser, if any.
|
|
11
|
+
* Needed to verify webhook signatures (e.g. `X-Hub-Signature-256`).
|
|
12
|
+
*
|
|
13
|
+
* @param request - The Express request.
|
|
14
|
+
* @returns The raw body buffer, or `undefined` when not available.
|
|
15
|
+
*/
|
|
16
|
+
export function useGetRawBody(request) {
|
|
17
|
+
return request.rawBody;
|
|
18
|
+
}
|
|
8
19
|
/**
|
|
9
20
|
* Set up CORS, JSON body parser and URL-encoded middleware.
|
|
21
|
+
* The JSON parser also captures the raw body for signature verification.
|
|
10
22
|
*
|
|
11
23
|
* @param expressApp - Express application instance
|
|
12
24
|
*
|
|
@@ -25,7 +37,12 @@ function useExpressSetupMiddlewares(expressApp) {
|
|
|
25
37
|
methods: ["GET", "POST", "PUT", "DELETE"],
|
|
26
38
|
}));
|
|
27
39
|
expressApp.disable("x-powered-by");
|
|
28
|
-
expressApp.use(express.json({
|
|
40
|
+
expressApp.use(express.json({
|
|
41
|
+
limit: "100kb",
|
|
42
|
+
verify: (req, _res, buf) => {
|
|
43
|
+
req.rawBody = buf;
|
|
44
|
+
},
|
|
45
|
+
}));
|
|
29
46
|
expressApp.use(express.urlencoded({ extended: true, limit: "100kb" }));
|
|
30
47
|
}
|
|
31
48
|
/**
|
|
@@ -49,7 +66,8 @@ function useExpressSetupRoutes(expressApp) {
|
|
|
49
66
|
expressApp.use("/", router);
|
|
50
67
|
}
|
|
51
68
|
/**
|
|
52
|
-
* Set up global error handling and 404 fallback.
|
|
69
|
+
* Set up global error handling and 404 fallback. Register this AFTER all
|
|
70
|
+
* channel routers are mounted so it does not shadow them.
|
|
53
71
|
*
|
|
54
72
|
* @param expressApp - Express application instance
|
|
55
73
|
*
|
|
@@ -61,7 +79,7 @@ function useExpressSetupRoutes(expressApp) {
|
|
|
61
79
|
*/
|
|
62
80
|
function useExpressSetupErrorHandling(expressApp) {
|
|
63
81
|
expressApp.use((err, _req, res, _next) => {
|
|
64
|
-
|
|
82
|
+
useLogger("error", "Unhandled error:", err);
|
|
65
83
|
res.status(500).json({ error: "Internal Server Error" });
|
|
66
84
|
});
|
|
67
85
|
expressApp.use((_req, res) => {
|
|
@@ -69,14 +87,17 @@ function useExpressSetupErrorHandling(expressApp) {
|
|
|
69
87
|
});
|
|
70
88
|
}
|
|
71
89
|
/**
|
|
72
|
-
* Create and configure the Express application.
|
|
90
|
+
* Create and configure the Express application. Mount channel routers on the
|
|
91
|
+
* returned app BEFORE calling {@link useExpressFinalize} / {@link useExpressStart},
|
|
92
|
+
* otherwise the 404 catch-all will shadow them.
|
|
73
93
|
*
|
|
74
94
|
* @returns Configured Express Application instance
|
|
75
95
|
*
|
|
76
96
|
* @example
|
|
77
97
|
* ```ts
|
|
78
98
|
* const expressApp = useExpressCreate();
|
|
79
|
-
*
|
|
99
|
+
* expressApp.use("/assistant", useCreateAssistantRouter());
|
|
100
|
+
* useExpressStart();
|
|
80
101
|
* ```
|
|
81
102
|
*/
|
|
82
103
|
export const useExpressCreate = () => {
|
|
@@ -85,11 +106,28 @@ export const useExpressCreate = () => {
|
|
|
85
106
|
app = express();
|
|
86
107
|
useExpressSetupMiddlewares(app);
|
|
87
108
|
useExpressSetupRoutes(app);
|
|
88
|
-
useExpressSetupErrorHandling(app);
|
|
89
109
|
return app;
|
|
90
110
|
};
|
|
111
|
+
/**
|
|
112
|
+
* Registers the error handler and 404 catch-all. Idempotent. Call this after
|
|
113
|
+
* mounting every channel router so it runs last. {@link useExpressStart}
|
|
114
|
+
* invokes it automatically.
|
|
115
|
+
*
|
|
116
|
+
* @example
|
|
117
|
+
* ```ts
|
|
118
|
+
* useExpressGetApp().use("/assistant", useCreateAssistantRouter());
|
|
119
|
+
* useExpressFinalize();
|
|
120
|
+
* ```
|
|
121
|
+
*/
|
|
122
|
+
export const useExpressFinalize = () => {
|
|
123
|
+
if (finalized)
|
|
124
|
+
return;
|
|
125
|
+
finalized = true;
|
|
126
|
+
useExpressSetupErrorHandling(useExpressCreate());
|
|
127
|
+
};
|
|
91
128
|
/**
|
|
92
129
|
* Start the Express HTTP server. Idempotent — subsequent calls are no-ops.
|
|
130
|
+
* Finalizes error handling before listening.
|
|
93
131
|
*
|
|
94
132
|
* @param port - Port to listen on (default: 3000)
|
|
95
133
|
* @param host - Host to bind to (default: "localhost")
|
|
@@ -104,6 +142,7 @@ export const useExpressStart = (port = 3000, host = "localhost") => {
|
|
|
104
142
|
if (started)
|
|
105
143
|
return;
|
|
106
144
|
started = true;
|
|
145
|
+
useExpressFinalize();
|
|
107
146
|
const expressApp = useExpressCreate();
|
|
108
147
|
expressApp.listen(port, host, () => {
|
|
109
148
|
useLogger("info", `Server running on http://${host}:${port}`);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/adapters/express/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/nuxt/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/nuxt/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nuxt.service.d.ts","sourceRoot":"","sources":["../../../src/adapters/nuxt/nuxt.service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAsBxD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,CAUxE;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG;IAC3D,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACf,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAClD,EAAE,EAAE,OAAO,CAAC;CACZ,CAaA;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EACjC,KAAK,EAAE;IAAE,IAAI,EAAE;QAAE,GAAG,EAAE;YAAE,UAAU,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAA;CAAE,EAChD,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,GACpB,CAAC,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAWvC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nuxt.service.js","sourceRoot":"","sources":["../../../src/adapters/nuxt/nuxt.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export type { TelegramConfig, TelegramPollingOptions, TelegramReplyFn, } from "./telegram.service.js";
|
|
2
|
+
export { TELEGRAM_API_BASE, useHandleTelegramUpdate, useInitTelegram, useStartTelegramPolling, useTelegramSendMessage, } from "./telegram.service.js";
|
|
3
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/telegram/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACX,cAAc,EACd,sBAAsB,EACtB,eAAe,GACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACN,iBAAiB,EACjB,uBAAuB,EACvB,eAAe,EACf,uBAAuB,EACvB,sBAAsB,GACtB,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/telegram/index.ts"],"names":[],"mappings":"AAKA,OAAO,EACN,iBAAiB,EACjB,uBAAuB,EACvB,eAAe,EACf,uBAAuB,EACvB,sBAAsB,GACtB,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../src/adapters/telegram/main.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import "dotenv/config";
|
|
2
|
+
import { useInitAssistant } from "../../core/services/assistant.service.js";
|
|
3
|
+
import { useInitTelegram, useStartTelegramPolling } from "./telegram.service.js";
|
|
4
|
+
const token = process.env.TELEGRAM_BOT_TOKEN;
|
|
5
|
+
if (!token) {
|
|
6
|
+
throw new Error("[telegram] TELEGRAM_BOT_TOKEN is not set.");
|
|
7
|
+
}
|
|
8
|
+
useInitAssistant();
|
|
9
|
+
useInitTelegram({ token });
|
|
10
|
+
useStartTelegramPolling();
|
|
11
|
+
//# sourceMappingURL=main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/adapters/telegram/main.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAEvB,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEjF,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;AAC7C,IAAI,CAAC,KAAK,EAAE,CAAC;IACZ,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;AAC9D,CAAC;AAED,gBAAgB,EAAE,CAAC;AACnB,eAAe,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAE3B,uBAAuB,EAAE,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { AssistantResult } from "../../types/index.js";
|
|
2
|
+
/** Default Telegram Bot API base URL. */
|
|
3
|
+
export declare const TELEGRAM_API_BASE = "https://api.telegram.org";
|
|
4
|
+
/** Configuration for a Telegram bot. */
|
|
5
|
+
export interface TelegramConfig {
|
|
6
|
+
token: string;
|
|
7
|
+
apiBaseUrl?: string;
|
|
8
|
+
}
|
|
9
|
+
/** Callback producing an assistant reply for a channel session. */
|
|
10
|
+
export type TelegramReplyFn = (sessionId: string, text: string) => Promise<AssistantResult>;
|
|
11
|
+
/**
|
|
12
|
+
* Registers the Telegram bot configuration.
|
|
13
|
+
*
|
|
14
|
+
* @param cfg - Bot token (from BotFather) and optional API base URL.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* useInitTelegram({ token: process.env.TELEGRAM_BOT_TOKEN });
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare function useInitTelegram(cfg: TelegramConfig): void;
|
|
22
|
+
/**
|
|
23
|
+
* Sends a text message to a Telegram chat.
|
|
24
|
+
*
|
|
25
|
+
* @param chatId - Destination chat id.
|
|
26
|
+
* @param text - Message body.
|
|
27
|
+
* @returns The Telegram API response.
|
|
28
|
+
*/
|
|
29
|
+
export declare function useTelegramSendMessage(chatId: number, text: string): Promise<Response>;
|
|
30
|
+
/**
|
|
31
|
+
* Handles a single Telegram update: replies to inbound text messages.
|
|
32
|
+
*
|
|
33
|
+
* @param update - A Telegram update object (from `getUpdates` or a webhook).
|
|
34
|
+
* @param reply - Reply callback. Defaults to the assistant {@link useReply}.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```ts
|
|
38
|
+
* await useHandleTelegramUpdate(update);
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export declare function useHandleTelegramUpdate(update: unknown, reply?: TelegramReplyFn): Promise<void>;
|
|
42
|
+
/** Options for the long-polling loop. */
|
|
43
|
+
export interface TelegramPollingOptions {
|
|
44
|
+
intervalMs?: number;
|
|
45
|
+
signal?: AbortSignal;
|
|
46
|
+
reply?: TelegramReplyFn;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Starts the long-polling loop that keeps fetching and answering updates.
|
|
50
|
+
* Runs until the provided signal aborts (or forever).
|
|
51
|
+
*
|
|
52
|
+
* @param options - Polling cadence, abort signal and reply callback.
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```ts
|
|
56
|
+
* useStartTelegramPolling();
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
export declare function useStartTelegramPolling(options?: TelegramPollingOptions): Promise<void>;
|
|
60
|
+
//# sourceMappingURL=telegram.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telegram.service.d.ts","sourceRoot":"","sources":["../../../src/adapters/telegram/telegram.service.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,yCAAyC;AACzC,eAAO,MAAM,iBAAiB,6BAA6B,CAAC;AAE5D,wCAAwC;AACxC,MAAM,WAAW,cAAc;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,mEAAmE;AACnE,MAAM,MAAM,eAAe,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;AAa5F;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,CAEzD;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAO5F;AAQD;;;;;;;;;;GAUG;AACH,wBAAsB,uBAAuB,CAC5C,MAAM,EAAE,OAAO,EACf,KAAK,GAAE,eAA0B,GAC/B,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,yCAAyC;AACzC,MAAM,WAAW,sBAAsB;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,KAAK,CAAC,EAAE,eAAe,CAAC;CACxB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,uBAAuB,CAAC,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAkCjG"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { useReply } from "../../core/services/assistant.service.js";
|
|
2
|
+
import { useLogger } from "../../core/services/logger.service.js";
|
|
3
|
+
import { useSleep } from "../../core/services/utils.service.js";
|
|
4
|
+
/** Default Telegram Bot API base URL. */
|
|
5
|
+
export const TELEGRAM_API_BASE = "https://api.telegram.org";
|
|
6
|
+
/** Module-level bot configuration. */
|
|
7
|
+
let config = null;
|
|
8
|
+
/** Retrieves the configured bot or throws. */
|
|
9
|
+
function getConfig() {
|
|
10
|
+
if (!config) {
|
|
11
|
+
throw new Error("[Telegram] Not configured. Call useInitTelegram() first.");
|
|
12
|
+
}
|
|
13
|
+
return config;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Registers the Telegram bot configuration.
|
|
17
|
+
*
|
|
18
|
+
* @param cfg - Bot token (from BotFather) and optional API base URL.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```ts
|
|
22
|
+
* useInitTelegram({ token: process.env.TELEGRAM_BOT_TOKEN });
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export function useInitTelegram(cfg) {
|
|
26
|
+
config = { ...cfg };
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Sends a text message to a Telegram chat.
|
|
30
|
+
*
|
|
31
|
+
* @param chatId - Destination chat id.
|
|
32
|
+
* @param text - Message body.
|
|
33
|
+
* @returns The Telegram API response.
|
|
34
|
+
*/
|
|
35
|
+
export async function useTelegramSendMessage(chatId, text) {
|
|
36
|
+
const { token, apiBaseUrl } = getConfig();
|
|
37
|
+
return fetch(`${apiBaseUrl ?? TELEGRAM_API_BASE}/bot${token}/sendMessage`, {
|
|
38
|
+
method: "POST",
|
|
39
|
+
headers: { "Content-Type": "application/json" },
|
|
40
|
+
body: JSON.stringify({ chat_id: chatId, text }),
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Handles a single Telegram update: replies to inbound text messages.
|
|
45
|
+
*
|
|
46
|
+
* @param update - A Telegram update object (from `getUpdates` or a webhook).
|
|
47
|
+
* @param reply - Reply callback. Defaults to the assistant {@link useReply}.
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```ts
|
|
51
|
+
* await useHandleTelegramUpdate(update);
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
export async function useHandleTelegramUpdate(update, reply = useReply) {
|
|
55
|
+
const message = update?.message;
|
|
56
|
+
if (!message?.text || message.text.trim() === "")
|
|
57
|
+
return;
|
|
58
|
+
const sessionId = `telegram:${message.chat.id}`;
|
|
59
|
+
const result = await reply(sessionId, message.text);
|
|
60
|
+
if (result.ok) {
|
|
61
|
+
await useTelegramSendMessage(message.chat.id, result.data.reply);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Starts the long-polling loop that keeps fetching and answering updates.
|
|
66
|
+
* Runs until the provided signal aborts (or forever).
|
|
67
|
+
*
|
|
68
|
+
* @param options - Polling cadence, abort signal and reply callback.
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```ts
|
|
72
|
+
* useStartTelegramPolling();
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
75
|
+
export async function useStartTelegramPolling(options = {}) {
|
|
76
|
+
const { intervalMs = 2000, signal, reply = useReply } = options;
|
|
77
|
+
const { token, apiBaseUrl } = getConfig();
|
|
78
|
+
const base = apiBaseUrl ?? TELEGRAM_API_BASE;
|
|
79
|
+
let offset = 0;
|
|
80
|
+
while (!signal?.aborted) {
|
|
81
|
+
try {
|
|
82
|
+
const response = await fetch(`${base}/bot${token}/getUpdates?timeout=30&offset=${offset}`, {
|
|
83
|
+
signal,
|
|
84
|
+
});
|
|
85
|
+
if (!response.ok) {
|
|
86
|
+
throw new Error(`getUpdates HTTP ${response.status}`);
|
|
87
|
+
}
|
|
88
|
+
const data = (await response.json());
|
|
89
|
+
for (const update of data.result ?? []) {
|
|
90
|
+
offset = Math.max(offset, update.update_id + 1);
|
|
91
|
+
await useHandleTelegramUpdate(update, reply);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
if (signal?.aborted)
|
|
96
|
+
break;
|
|
97
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
98
|
+
useLogger("error", `[Telegram] ${message}`);
|
|
99
|
+
}
|
|
100
|
+
await useSleep(intervalMs);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=telegram.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telegram.service.js","sourceRoot":"","sources":["../../../src/adapters/telegram/telegram.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/vue/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/vue/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vue.service.d.ts","sourceRoot":"","sources":["../../../src/adapters/vue/vue.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,KAAK,QAAQ,EAEb,KAAK,GAAG,EAKR,MAAM,KAAK,CAAC;AAGb,OAAO,KAAK,EAAE,QAAQ,EAAe,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAE9E;;GAEG;AACH,MAAM,WAAW,gBAAgB,CAAC,CAAC;IAClC,sDAAsD;IACtD,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACpB,0DAA0D;IAC1D,KAAK,EAAE,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IAC5B,sCAAsC;IACtC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACtB,oCAAoC;IACpC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAC/B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,GAC5B,gBAAgB,CAAC,CAAC,CAAC,CAiErB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vue.service.js","sourceRoot":"","sources":["../../../src/adapters/vue/vue.service.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,kBAAkB,EAClB,KAAK,EAEL,WAAW,EAEX,GAAG,EACH,UAAU,EACV,KAAK,EACL,KAAK,GACL,MAAM,KAAK,CAAC;AAEb,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAiB/D;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,cAAc,CAC7B,OAAe,EACf,YAAoB,EACpB,OAA8B;IAE9B,MAAM,IAAI,GAAG,UAAU,CAAW,IAAI,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,GAAG,CAAkB,IAAI,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;IAE1B,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,gBAAgB,GAA2B,IAAI,CAAC;IACpD,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,MAAM,OAAO,GAAG,KAAK,IAAmB,EAAE;QACzC,MAAM,OAAO,GAAG,EAAE,cAAc,CAAC;QACjC,gBAAgB,EAAE,KAAK,EAAE,CAAC;QAC1B,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,gBAAgB,GAAG,UAAU,CAAC;QAE9B,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;QACrB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;QAEnB,MAAM,MAAM,GAAmB,MAAM,QAAQ,CAAI,OAAO,EAAE,YAAY,EAAE;YACvE,MAAM,EAAE,KAAK;YACb,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC;YAC1B,MAAM,EAAE,UAAU,CAAC,MAAM;SACzB,CAAC,CAAC;QAEH,IAAI,QAAQ,IAAI,OAAO,KAAK,cAAc,EAAE,CAAC;YAC5C,OAAO;QACR,CAAC;QAED,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;YACzB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,CAAC;aAAM,CAAC;YACP,4DAA4D;YAC5D,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACjF,IAAI,CAAC,OAAO,EAAE,CAAC;gBACd,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YAC5B,CAAC;QACF,CAAC;QAED,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC,CAAC;IAEF,6DAA6D;IAC7D,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACpB,KAAK,CACJ,OAAO,EACP,GAAG,EAAE;YACJ,KAAK,OAAO,EAAE,CAAC;QAChB,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACd,CAAC;IACH,CAAC;IAED,4DAA4D;IAC5D,IAAI,kBAAkB,EAAE,EAAE,CAAC;QAC1B,WAAW,CAAC,GAAG,EAAE;YAChB,QAAQ,GAAG,IAAI,CAAC;YAChB,gBAAgB,EAAE,KAAK,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,0BAA0B;IAC1B,KAAK,OAAO,EAAE,CAAC;IAEf,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export type { WhatsAppConfig, WhatsAppReplyFn } from "./whatsapp.service.js";
|
|
2
|
+
export { useCreateWhatsAppRouter, useHandleWhatsAppMessage, useInitWhatsApp, useSendWhatsAppMessage, useStartWhatsApp, useVerifyWhatsAppSignature, useVerifyWhatsAppWebhook, WHATSAPP_API_BASE, WHATSAPP_API_VERSION, WHATSAPP_MAX_MESSAGES_PER_WEBHOOK, } from "./whatsapp.service.js";
|
|
3
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/whatsapp/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EACN,uBAAuB,EACvB,wBAAwB,EACxB,eAAe,EACf,sBAAsB,EACtB,gBAAgB,EAChB,0BAA0B,EAC1B,wBAAwB,EACxB,iBAAiB,EACjB,oBAAoB,EACpB,iCAAiC,GACjC,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { useCreateWhatsAppRouter, useHandleWhatsAppMessage, useInitWhatsApp, useSendWhatsAppMessage, useStartWhatsApp, useVerifyWhatsAppSignature, useVerifyWhatsAppWebhook, WHATSAPP_API_BASE, WHATSAPP_API_VERSION, WHATSAPP_MAX_MESSAGES_PER_WEBHOOK, } from "./whatsapp.service.js";
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/whatsapp/index.ts"],"names":[],"mappings":"AACA,OAAO,EACN,uBAAuB,EACvB,wBAAwB,EACxB,eAAe,EACf,sBAAsB,EACtB,gBAAgB,EAChB,0BAA0B,EAC1B,wBAAwB,EACxB,iBAAiB,EACjB,oBAAoB,EACpB,iCAAiC,GACjC,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../src/adapters/whatsapp/main.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import "dotenv/config";
|
|
2
|
+
import { useInitAssistant } from "../../core/services/assistant.service.js";
|
|
3
|
+
import { useInitWhatsApp, useStartWhatsApp } from "./whatsapp.service.js";
|
|
4
|
+
const token = process.env.WHATSAPP_TOKEN;
|
|
5
|
+
const phoneNumberId = process.env.WHATSAPP_PHONE_NUMBER_ID;
|
|
6
|
+
const verifyToken = process.env.WHATSAPP_VERIFY_TOKEN;
|
|
7
|
+
const appSecret = process.env.WHATSAPP_APP_SECRET;
|
|
8
|
+
if (!token || !phoneNumberId || !verifyToken || !appSecret) {
|
|
9
|
+
throw new Error("[whatsapp] WHATSAPP_TOKEN, WHATSAPP_PHONE_NUMBER_ID, WHATSAPP_VERIFY_TOKEN and WHATSAPP_APP_SECRET must be set.");
|
|
10
|
+
}
|
|
11
|
+
useInitAssistant();
|
|
12
|
+
useInitWhatsApp({ token, phoneNumberId, verifyToken, appSecret });
|
|
13
|
+
useStartWhatsApp(Number(process.env.PORT ?? 3000), process.env.HOST ?? "localhost");
|
|
14
|
+
//# sourceMappingURL=main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/adapters/whatsapp/main.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAEvB,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE1E,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;AACzC,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;AAC3D,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;AACtD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;AAElD,IAAI,CAAC,KAAK,IAAI,CAAC,aAAa,IAAI,CAAC,WAAW,IAAI,CAAC,SAAS,EAAE,CAAC;IAC5D,MAAM,IAAI,KAAK,CACd,iHAAiH,CACjH,CAAC;AACH,CAAC;AAED,gBAAgB,EAAE,CAAC;AACnB,eAAe,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;AAElE,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,WAAW,CAAC,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { Router } from "express";
|
|
2
|
+
import type { AssistantResult } from "../../types/index.js";
|
|
3
|
+
/** Default WhatsApp Cloud API (Graph) base URL. */
|
|
4
|
+
export declare const WHATSAPP_API_BASE = "https://graph.facebook.com";
|
|
5
|
+
/** Default Graph API version. */
|
|
6
|
+
export declare const WHATSAPP_API_VERSION = "v21.0";
|
|
7
|
+
/** Cap of inbound messages processed per webhook payload (cost-amplification guard). */
|
|
8
|
+
export declare const WHATSAPP_MAX_MESSAGES_PER_WEBHOOK = 5;
|
|
9
|
+
/** Configuration for the WhatsApp Cloud API integration. */
|
|
10
|
+
export interface WhatsAppConfig {
|
|
11
|
+
token: string;
|
|
12
|
+
phoneNumberId: string;
|
|
13
|
+
verifyToken: string;
|
|
14
|
+
/** Meta app secret used to verify webhook signatures (`X-Hub-Signature-256`). */
|
|
15
|
+
appSecret: string;
|
|
16
|
+
apiVersion?: string;
|
|
17
|
+
apiBaseUrl?: string;
|
|
18
|
+
}
|
|
19
|
+
/** Callback producing an assistant reply for a channel session. */
|
|
20
|
+
export type WhatsAppReplyFn = (sessionId: string, text: string) => Promise<AssistantResult>;
|
|
21
|
+
/**
|
|
22
|
+
* Registers the WhatsApp Cloud API configuration.
|
|
23
|
+
*
|
|
24
|
+
* @param cfg - Access token, phone number id and webhook verify token.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```ts
|
|
28
|
+
* useInitWhatsApp({
|
|
29
|
+
* token: process.env.WHATSAPP_TOKEN,
|
|
30
|
+
* phoneNumberId: process.env.WHATSAPP_PHONE_NUMBER_ID,
|
|
31
|
+
* verifyToken: process.env.WHATSAPP_VERIFY_TOKEN,
|
|
32
|
+
* appSecret: process.env.WHATSAPP_APP_SECRET,
|
|
33
|
+
* });
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare function useInitWhatsApp(cfg: WhatsAppConfig): void;
|
|
37
|
+
/**
|
|
38
|
+
* Verifies a Meta webhook delivery signature (`X-Hub-Signature-256`).
|
|
39
|
+
*
|
|
40
|
+
* @param rawBody - The raw request body buffer captured by the JSON parser.
|
|
41
|
+
* @param signatureHeader - Value of the `X-Hub-Signature-256` header.
|
|
42
|
+
* @returns `true` when the signature matches the app secret HMAC.
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```ts
|
|
46
|
+
* const ok = useVerifyWhatsAppSignature(useGetRawBody(req), req.header("x-hub-signature-256"));
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
export declare function useVerifyWhatsAppSignature(rawBody: Buffer | undefined, signatureHeader: string | undefined): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Verifies a Meta webhook challenge. Returns the challenge to echo on success,
|
|
52
|
+
* or `null` when the mode or token is invalid.
|
|
53
|
+
*
|
|
54
|
+
* @param mode - `hub.mode` query param.
|
|
55
|
+
* @param verifyToken - `hub.verify_token` query param.
|
|
56
|
+
* @param challenge - `hub.challenge` query param.
|
|
57
|
+
* @returns The challenge string when valid, otherwise `null`.
|
|
58
|
+
*/
|
|
59
|
+
export declare function useVerifyWhatsAppWebhook(mode: string, verifyToken: string, challenge: string): string | null;
|
|
60
|
+
/**
|
|
61
|
+
* Sends a text message to a WhatsApp number via the Cloud API.
|
|
62
|
+
*
|
|
63
|
+
* @param to - Destination number (E.164).
|
|
64
|
+
* @param text - Message body.
|
|
65
|
+
* @returns The Graph API response.
|
|
66
|
+
*/
|
|
67
|
+
export declare function useSendWhatsAppMessage(to: string, text: string): Promise<Response>;
|
|
68
|
+
/**
|
|
69
|
+
* Handles a WhatsApp webhook payload: replies to each inbound text message.
|
|
70
|
+
*
|
|
71
|
+
* @param payload - The JSON webhook body from Meta.
|
|
72
|
+
* @param reply - Reply callback. Defaults to the assistant {@link useReply}.
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* ```ts
|
|
76
|
+
* await useHandleWhatsAppMessage(payload);
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
export declare function useHandleWhatsAppMessage(payload: unknown, reply?: WhatsAppReplyFn): Promise<void>;
|
|
80
|
+
/** Builds the Express router exposing the WhatsApp webhook. */
|
|
81
|
+
export declare function useCreateWhatsAppRouter(): Router;
|
|
82
|
+
/**
|
|
83
|
+
* Mounts the WhatsApp webhook on the shared Express app and starts the server.
|
|
84
|
+
*
|
|
85
|
+
* @param port - Port to listen on (default: 3000)
|
|
86
|
+
* @param host - Host to bind to (default: "localhost")
|
|
87
|
+
* @param mountPath - Base path for the webhook routes (default: "/whatsapp")
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```ts
|
|
91
|
+
* useStartWhatsApp(3000, "localhost");
|
|
92
|
+
* // GET /whatsapp/webhook (verify), POST /whatsapp/webhook (messages)
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
export declare function useStartWhatsApp(port?: number, host?: string, mountPath?: string): void;
|
|
96
|
+
//# sourceMappingURL=whatsapp.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whatsapp.service.d.ts","sourceRoot":"","sources":["../../../src/adapters/whatsapp/whatsapp.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAkD,MAAM,EAAE,MAAM,SAAS,CAAC;AAKjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG5D,mDAAmD;AACnD,eAAO,MAAM,iBAAiB,+BAA+B,CAAC;AAE9D,iCAAiC;AACjC,eAAO,MAAM,oBAAoB,UAAU,CAAC;AAE5C,wFAAwF;AACxF,eAAO,MAAM,iCAAiC,IAAI,CAAC;AAEnD,4DAA4D;AAC5D,MAAM,WAAW,cAAc;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,iFAAiF;IACjF,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,mEAAmE;AACnE,MAAM,MAAM,eAAe,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;AAa5F;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,CAEzD;AAUD;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,CACzC,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,eAAe,EAAE,MAAM,GAAG,SAAS,GACjC,OAAO,CAKT;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACvC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GACf,MAAM,GAAG,IAAI,CAMf;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAkBxF;AAkBD;;;;;;;;;;GAUG;AACH,wBAAsB,wBAAwB,CAC7C,OAAO,EAAE,OAAO,EAChB,KAAK,GAAE,eAA0B,GAC/B,OAAO,CAAC,IAAI,CAAC,CAef;AAED,+DAA+D;AAC/D,wBAAgB,uBAAuB,IAAI,MAAM,CAwChD;AAKD;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,SAAO,EAAE,IAAI,SAAc,EAAE,SAAS,SAAc,GAAG,IAAI,CAM/F"}
|