@botonic/core 2.26.0 → 2.28.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.
Files changed (75) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/package.json +7 -2
  3. package/src/index.d.ts +3 -1
  4. package/src/index.js +3 -1
  5. package/src/index.js.map +1 -1
  6. package/src/lib/actions/index.d.ts +1 -0
  7. package/src/lib/actions/index.js +2 -0
  8. package/src/lib/actions/index.js.map +1 -0
  9. package/src/lib/actions/update-webchat-client-settings.d.ts +5 -0
  10. package/src/lib/actions/update-webchat-client-settings.js +51 -0
  11. package/src/lib/actions/update-webchat-client-settings.js.map +1 -0
  12. package/src/lib/core-bot/index.d.ts +14 -11
  13. package/src/lib/core-bot/index.js +55 -44
  14. package/src/lib/core-bot/index.js.map +1 -1
  15. package/src/lib/plugins/index.d.ts +2 -2
  16. package/src/lib/plugins/index.js +6 -6
  17. package/src/lib/plugins/index.js.map +1 -1
  18. package/src/lib/routes/router.d.ts +4 -4
  19. package/src/lib/routes/router.js +13 -13
  20. package/src/lib/routes/router.js.map +1 -1
  21. package/src/lib/routes/types.d.ts +2 -2
  22. package/src/lib/server/bot-server-message.d.ts +71 -0
  23. package/src/lib/server/bot-server-message.js +111 -0
  24. package/src/lib/server/bot-server-message.js.map +1 -0
  25. package/src/lib/server/botonic-context/botonic-action.d.ts +10 -0
  26. package/src/lib/server/botonic-context/botonic-action.js +9 -0
  27. package/src/lib/server/botonic-context/botonic-action.js.map +1 -0
  28. package/src/lib/server/botonic-context/botonic-context-input.d.ts +96 -0
  29. package/src/lib/server/botonic-context/botonic-context-input.js +124 -0
  30. package/src/lib/server/botonic-context/botonic-context-input.js.map +1 -0
  31. package/src/lib/server/botonic-context/botonic-context-session.d.ts +159 -0
  32. package/src/lib/server/botonic-context/botonic-context-session.js +297 -0
  33. package/src/lib/server/botonic-context/botonic-context-session.js.map +1 -0
  34. package/src/lib/server/botonic-context/botonic-context-settings.d.ts +16 -0
  35. package/src/lib/server/botonic-context/botonic-context-settings.js +48 -0
  36. package/src/lib/server/botonic-context/botonic-context-settings.js.map +1 -0
  37. package/src/lib/server/botonic-context/botonic-context.d.ts +59 -0
  38. package/src/lib/server/botonic-context/botonic-context.js +42 -0
  39. package/src/lib/server/botonic-context/botonic-context.js.map +1 -0
  40. package/src/lib/server/botonic-context/botonic-session-patch-slice.d.ts +30 -0
  41. package/src/lib/server/botonic-context/botonic-session-patch-slice.js +80 -0
  42. package/src/lib/server/botonic-context/botonic-session-patch-slice.js.map +1 -0
  43. package/src/lib/server/botonic-context/factory.d.ts +29 -0
  44. package/src/lib/server/botonic-context/factory.js +31 -0
  45. package/src/lib/server/botonic-context/factory.js.map +1 -0
  46. package/src/lib/server/botonic-context/index.d.ts +9 -0
  47. package/src/lib/server/botonic-context/index.js +10 -0
  48. package/src/lib/server/botonic-context/index.js.map +1 -0
  49. package/src/lib/server/botonic-context/send-messages-utils.d.ts +3 -0
  50. package/src/lib/server/botonic-context/send-messages-utils.js +33 -0
  51. package/src/lib/server/botonic-context/send-messages-utils.js.map +1 -0
  52. package/src/lib/server/botonic-context/types.d.ts +24 -0
  53. package/src/lib/server/botonic-context/types.js +6 -0
  54. package/src/lib/server/botonic-context/types.js.map +1 -0
  55. package/src/lib/server/factory.d.ts +169 -0
  56. package/src/lib/server/factory.js +192 -0
  57. package/src/lib/server/factory.js.map +1 -0
  58. package/src/lib/server/index.d.ts +3 -0
  59. package/src/lib/server/index.js +4 -0
  60. package/src/lib/server/index.js.map +1 -0
  61. package/src/lib/services/hubtype-api-service.d.ts +13 -0
  62. package/src/lib/services/hubtype-api-service.js +67 -0
  63. package/src/lib/services/hubtype-api-service.js.map +1 -0
  64. package/src/lib/services/hubtype-external-api-client.d.ts +22 -0
  65. package/src/lib/services/hubtype-external-api-client.js +111 -0
  66. package/src/lib/services/hubtype-external-api-client.js.map +1 -0
  67. package/src/lib/services/index.d.ts +2 -0
  68. package/src/lib/services/index.js +3 -0
  69. package/src/lib/services/index.js.map +1 -0
  70. package/src/lib/hubtype-service/handoff.d.ts +0 -4
  71. package/src/lib/hubtype-service/handoff.js +0 -32
  72. package/src/lib/hubtype-service/handoff.js.map +0 -1
  73. package/src/lib/hubtype-service/index.d.ts +0 -10
  74. package/src/lib/hubtype-service/index.js +0 -96
  75. package/src/lib/hubtype-service/index.js.map +0 -1
@@ -0,0 +1,31 @@
1
+ import { BotonicContext } from './botonic-context';
2
+ import { BotonicContextInput } from './botonic-context-input';
3
+ import { BotonicContextSession } from './botonic-context-session';
4
+ import { BotonicContextSecrets, BotonicContextSettings, } from './botonic-context-settings';
5
+ /**
6
+ * Factory that creates BotonicContext from raw lambda request.
7
+ * Injects hubtypeService so the context has working sendMessages, doHandoff, etc.
8
+ */
9
+ export class BotonicContextFactory {
10
+ constructor(hubtypeService, plugins, defaultTyping, defaultDelay, defaultTypingMode = 'inBetweenTyping') {
11
+ this.hubtypeService = hubtypeService;
12
+ this.plugins = plugins;
13
+ this.defaultTyping = defaultTyping;
14
+ this.defaultDelay = defaultDelay;
15
+ this.defaultTypingMode = defaultTypingMode;
16
+ }
17
+ /** Creates input, session, settings, and secrets from a {@link BotonicRequest}. */
18
+ static from(raw) {
19
+ return {
20
+ input: new BotonicContextInput(raw.input),
21
+ session: new BotonicContextSession(raw.session),
22
+ settings: new BotonicContextSettings(raw.settings),
23
+ secrets: new BotonicContextSecrets(raw.secrets),
24
+ };
25
+ }
26
+ create(raw) {
27
+ const base = BotonicContextFactory.from(raw);
28
+ return new BotonicContext(this.hubtypeService, base, this.plugins, this.defaultTyping, this.defaultDelay, this.defaultTypingMode);
29
+ }
30
+ }
31
+ //# sourceMappingURL=factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../../../../../../libs/botonic/core/src/lib/server/botonic-context/factory.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AACjE,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,4BAA4B,CAAA;AAanC;;;GAGG;AACH,MAAM,OAAO,qBAAqB;IAGhC,YACmB,cAAiC,EACjC,OAAiB,EACjB,aAAqB,EACrB,YAAoB,EACpB,oBAAgC,iBAAiB;QAJjD,mBAAc,GAAd,cAAc,CAAmB;QACjC,YAAO,GAAP,OAAO,CAAU;QACjB,kBAAa,GAAb,aAAa,CAAQ;QACrB,iBAAY,GAAZ,YAAY,CAAQ;QACpB,sBAAiB,GAAjB,iBAAiB,CAAgC;IACjE,CAAC;IAEJ,mFAAmF;IACnF,MAAM,CAAC,IAAI,CACT,GAA+B;QAE/B,OAAO;YACL,KAAK,EAAE,IAAI,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC;YACzC,OAAO,EAAE,IAAI,qBAAqB,CAAa,GAAG,CAAC,OAAO,CAAC;YAC3D,QAAQ,EAAE,IAAI,sBAAsB,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClD,OAAO,EAAE,IAAI,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC;SAChD,CAAA;IACH,CAAC;IAED,MAAM,CACJ,GAA+B;QAE/B,MAAM,IAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC5C,OAAO,IAAI,cAAc,CACvB,IAAI,CAAC,cAAc,EACnB,IAAI,EACJ,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,iBAAiB,CACvB,CAAA;IACH,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ export * from './botonic-action';
2
+ export * from './botonic-context';
3
+ export * from './botonic-context-input';
4
+ export * from './botonic-context-session';
5
+ export * from './botonic-context-settings';
6
+ export * from './botonic-session-patch-slice';
7
+ export * from './factory';
8
+ export * from './send-messages-utils';
9
+ export * from './types';
@@ -0,0 +1,10 @@
1
+ export * from './botonic-action';
2
+ export * from './botonic-context';
3
+ export * from './botonic-context-input';
4
+ export * from './botonic-context-session';
5
+ export * from './botonic-context-settings';
6
+ export * from './botonic-session-patch-slice';
7
+ export * from './factory';
8
+ export * from './send-messages-utils';
9
+ export * from './types';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../libs/botonic/core/src/lib/server/botonic-context/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,yBAAyB,CAAA;AACvC,cAAc,2BAA2B,CAAA;AACzC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,WAAW,CAAA;AACzB,cAAc,uBAAuB,CAAA;AACrC,cAAc,SAAS,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { BotServerMessage } from '../bot-server-message';
2
+ import type { TypingMode } from './types';
3
+ export declare function injectTypingEvents(messages: BotServerMessage[], mode: TypingMode | false | undefined): BotServerMessage[];
@@ -0,0 +1,33 @@
1
+ import { TypingEventName } from '@botonic/shared';
2
+ import { BotServerMessageFactory } from '../factory';
3
+ const DEFAULT_TYPING_DELAY = 1;
4
+ function typingEvent() {
5
+ return BotServerMessageFactory.createTypingEvent({
6
+ eventName: TypingEventName.TypingOn,
7
+ });
8
+ }
9
+ function withDefaultDelay(msg) {
10
+ if (msg.delay !== undefined)
11
+ return msg;
12
+ const clone = Object.create(Object.getPrototypeOf(msg));
13
+ return Object.assign(clone, msg, { delay: DEFAULT_TYPING_DELAY });
14
+ }
15
+ export function injectTypingEvents(messages, mode) {
16
+ if (!mode || messages.length === 0)
17
+ return messages;
18
+ if (mode === 'onlyFirst') {
19
+ const [first, ...rest] = messages;
20
+ return [typingEvent(), withDefaultDelay(first), ...rest];
21
+ }
22
+ return messages.reduce((acc, msg, index) => {
23
+ if (index > 0) {
24
+ acc.push(typingEvent());
25
+ acc.push(withDefaultDelay(msg));
26
+ }
27
+ else {
28
+ acc.push(msg);
29
+ }
30
+ return acc;
31
+ }, []);
32
+ }
33
+ //# sourceMappingURL=send-messages-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send-messages-utils.js","sourceRoot":"","sources":["../../../../../../../../libs/botonic/core/src/lib/server/botonic-context/send-messages-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AAGpD,MAAM,oBAAoB,GAAG,CAAC,CAAA;AAE9B,SAAS,WAAW;IAClB,OAAO,uBAAuB,CAAC,iBAAiB,CAAC;QAC/C,SAAS,EAAE,eAAe,CAAC,QAAQ;KACpC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,gBAAgB,CAA6B,GAAM;IAC1D,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,GAAG,CAAA;IACvC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAM,CAAA;IAC5D,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAA;AACnE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,QAA4B,EAC5B,IAAoC;IAEpC,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAA;IAEnD,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QACzB,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,QAAQ,CAAA;QACjC,OAAO,CAAC,WAAW,EAAE,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAA;IAC1D,CAAC;IAED,OAAO,QAAQ,CAAC,MAAM,CAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QAC7D,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;YACvB,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAA;QACjC,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACf,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC,EAAE,EAAE,CAAC,CAAA;AACR,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { BotonicContext } from './botonic-context';
2
+ export type TypingMode = 'onlyFirst' | 'inBetweenTyping';
3
+ export interface SendMessagesOptions {
4
+ typingMode?: TypingMode | false;
5
+ }
6
+ export interface ActionResponse {
7
+ status: number;
8
+ response: string;
9
+ }
10
+ export type Action = (botonicContext: BotonicContext) => Promise<ActionResponse>;
11
+ export interface Plugin {
12
+ pre?(request: BotonicContext): void | Promise<void>;
13
+ post?(request: BotonicContext): void | Promise<void>;
14
+ }
15
+ export type ResolvedPlugins = Record<string, Plugin>;
16
+ export interface RunPluginArgs {
17
+ botonicContext: BotonicContext;
18
+ mode: PluginMode;
19
+ response?: ActionResponse;
20
+ }
21
+ export declare enum PluginMode {
22
+ PRE = "pre",
23
+ POST = "post"
24
+ }
@@ -0,0 +1,6 @@
1
+ export var PluginMode;
2
+ (function (PluginMode) {
3
+ PluginMode["PRE"] = "pre";
4
+ PluginMode["POST"] = "post";
5
+ })(PluginMode || (PluginMode = {}));
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../../../libs/botonic/core/src/lib/server/botonic-context/types.ts"],"names":[],"mappings":"AA4BA,MAAM,CAAN,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,yBAAW,CAAA;IACX,2BAAa,CAAA;AACf,CAAC,EAHW,UAAU,KAAV,UAAU,QAGrB"}
@@ -0,0 +1,169 @@
1
+ import { BotMessageMetadata } from '@botonic/shared';
2
+ import { BotonicButtonContent, BotonicCarouselElement, TypingEventName } from '@botonic/shared';
3
+ import { WebchatClientSettings } from '@botonic/shared';
4
+ import { WhatsappButtonListSection, WhatsappHeaderType, WhatsappMediaCarouselCard, WhatsappProductCarouselCard, WhatsappProductListSection, WhatsappTemplateComponent } from '@botonic/shared';
5
+ import { BotServerMessageAudio, BotServerMessageButtonMessage, BotServerMessageCarousel, BotServerMessageCustom, BotServerMessageDocument, BotServerMessageImage, BotServerMessageLocation, BotServerMessageText, BotServerMessageTypingEvent, BotServerMessageVideo, BotServerMessageWebchatClientSettings, BotServerMessageWhatsappButtonList, BotServerMessageWhatsappCatalog, BotServerMessageWhatsappCTAUrlButton, BotServerMessageWhatsappMediaCarousel, BotServerMessageWhatsappProduct, BotServerMessageWhatsappProductCarousel, BotServerMessageWhatsappProductList, BotServerMessageWhatsappTemplate } from './bot-server-message';
6
+ import { BotonicContext } from './botonic-context';
7
+ interface WebviewButtonParams {
8
+ title: string;
9
+ webview: string;
10
+ params?: Record<string, string>;
11
+ }
12
+ export declare class BotServerMessageFactory {
13
+ static createText({ text, payload, metadata, }: {
14
+ text: string;
15
+ payload?: string;
16
+ metadata?: BotMessageMetadata;
17
+ }): BotServerMessageText;
18
+ static createAudio({ attachmentUrl, attachmentContent, caption, fileInfo, metadata, }: {
19
+ attachmentUrl: string;
20
+ attachmentContent?: string;
21
+ caption?: string;
22
+ fileInfo?: Record<string, unknown>;
23
+ metadata?: BotMessageMetadata;
24
+ }): BotServerMessageAudio;
25
+ static createImage({ attachmentUrl, attachmentContent, caption, fileInfo, metadata, }: {
26
+ attachmentUrl: string;
27
+ attachmentContent?: string;
28
+ caption?: string;
29
+ fileInfo?: Record<string, unknown>;
30
+ metadata?: BotMessageMetadata;
31
+ }): BotServerMessageImage;
32
+ static createVideo({ attachmentUrl, attachmentContent, caption, fileInfo, metadata, }: {
33
+ attachmentUrl: string;
34
+ attachmentContent?: string;
35
+ caption?: string;
36
+ fileInfo?: Record<string, unknown>;
37
+ metadata?: BotMessageMetadata;
38
+ }): BotServerMessageVideo;
39
+ static createDocument({ attachmentUrl, attachmentContent, caption, fileInfo, metadata, }: {
40
+ attachmentUrl: string;
41
+ attachmentContent?: string;
42
+ caption?: string;
43
+ fileInfo?: Record<string, unknown>;
44
+ metadata?: BotMessageMetadata;
45
+ }): BotServerMessageDocument;
46
+ static createLocation({ latitude, longitude, title, address, metadata, }: {
47
+ latitude: number;
48
+ longitude: number;
49
+ title?: string;
50
+ address?: string;
51
+ metadata?: BotMessageMetadata;
52
+ }): BotServerMessageLocation;
53
+ static createButtonMessage({ text, buttons, metadata, }: {
54
+ text: string;
55
+ buttons: BotonicButtonContent[];
56
+ metadata?: BotMessageMetadata;
57
+ }): BotServerMessageButtonMessage;
58
+ static createCarousel({ elements, text, metadata, }: {
59
+ elements: BotonicCarouselElement[];
60
+ text?: string;
61
+ metadata?: BotMessageMetadata;
62
+ }): BotServerMessageCarousel;
63
+ static createCustom({ name, props, metadata, }: {
64
+ name: string;
65
+ props: Record<string, unknown>;
66
+ metadata?: BotMessageMetadata;
67
+ }): BotServerMessageCustom;
68
+ static createTypingEvent({ eventName, metadata, }: {
69
+ eventName: TypingEventName;
70
+ metadata?: BotMessageMetadata;
71
+ }): BotServerMessageTypingEvent;
72
+ /** Payload type `webchat_client_settings` for Hubtype `send_messages` (v2 bots). */
73
+ static createWebchatClientSettings({ settings, metadata, }: {
74
+ settings: Partial<WebchatClientSettings> | WebchatClientSettings;
75
+ metadata?: BotMessageMetadata;
76
+ }): BotServerMessageWebchatClientSettings;
77
+ /**
78
+ * Creates a postback button that sends a payload when clicked
79
+ */
80
+ static createPostbackButton({ title, payload, }: {
81
+ title: string;
82
+ payload: string;
83
+ }): BotonicButtonContent;
84
+ /**
85
+ * Creates a URL button that opens a link in the browser
86
+ */
87
+ static createUrlButton({ title, url, }: {
88
+ title: string;
89
+ url: string;
90
+ }): BotonicButtonContent;
91
+ /**
92
+ * Creates a webview button that opens a URL in a webview.
93
+ * Uses `settings.STATIC_URL` (Lambda settings), not `process.env`.
94
+ */
95
+ static createWebviewButton(webviewButtonParams: WebviewButtonParams, botonicContext: BotonicContext): BotonicButtonContent;
96
+ /**
97
+ * Helper method to create a carousel element
98
+ * This simplifies carousel element creation
99
+ */
100
+ static createCarouselElement({ title, subtitle, image, buttons, }: {
101
+ title: string;
102
+ subtitle: string;
103
+ image: string;
104
+ buttons: BotonicButtonContent[];
105
+ }): BotonicCarouselElement;
106
+ static createWhatsappButtonList({ header, body, footer, button, sections, metadata, }: {
107
+ header?: string;
108
+ body: string;
109
+ footer?: string;
110
+ button: string;
111
+ sections: WhatsappButtonListSection[];
112
+ metadata?: BotMessageMetadata;
113
+ }): BotServerMessageWhatsappButtonList;
114
+ static createWhatsappCTAUrlButton({ headerType, header, headerImage, headerDocument, headerVideo, body, url, displayText, footer, metadata, }: {
115
+ headerType?: WhatsappHeaderType;
116
+ header?: string;
117
+ headerImage?: string;
118
+ headerDocument?: string;
119
+ headerVideo?: string;
120
+ body: string;
121
+ url: string;
122
+ displayText: string;
123
+ footer?: string;
124
+ metadata?: BotMessageMetadata;
125
+ }): BotServerMessageWhatsappCTAUrlButton;
126
+ static createWhatsappCatalog({ body, footer, thumbnailProductId, metadata, }: {
127
+ body: string;
128
+ footer?: string;
129
+ thumbnailProductId?: string;
130
+ metadata?: BotMessageMetadata;
131
+ }): BotServerMessageWhatsappCatalog;
132
+ static createWhatsappProduct({ body, catalogId, productId, footer, metadata, }: {
133
+ body: string;
134
+ catalogId: string;
135
+ productId: string;
136
+ footer?: string;
137
+ metadata?: BotMessageMetadata;
138
+ }): BotServerMessageWhatsappProduct;
139
+ static createWhatsappProductList({ header, body, footer, catalogId, sections, metadata, }: {
140
+ body: string;
141
+ catalogId: string;
142
+ header: string;
143
+ sections: WhatsappProductListSection[];
144
+ footer?: string;
145
+ metadata?: BotMessageMetadata;
146
+ }): BotServerMessageWhatsappProductList;
147
+ static createWhatsappProductCarousel({ templateName, templateLanguage, cards, bodyParameters, metadata, }: {
148
+ templateName: string;
149
+ templateLanguage: string;
150
+ cards: WhatsappProductCarouselCard[];
151
+ bodyParameters?: Record<string, any>[];
152
+ metadata?: BotMessageMetadata;
153
+ }): BotServerMessageWhatsappProductCarousel;
154
+ static createWhatsappMediaCarousel({ templateName, templateLanguage, cards, bodyParameters, metadata, }: {
155
+ templateName: string;
156
+ templateLanguage: string;
157
+ cards: WhatsappMediaCarouselCard[];
158
+ bodyParameters?: Record<string, any>[];
159
+ metadata?: BotMessageMetadata;
160
+ }): BotServerMessageWhatsappMediaCarousel;
161
+ static createWhatsappTemplate({ name, namespace, languageCode, components, metadata, }: {
162
+ name: string;
163
+ namespace: string;
164
+ languageCode: string;
165
+ components: WhatsappTemplateComponent[];
166
+ metadata?: BotMessageMetadata;
167
+ }): BotServerMessageWhatsappTemplate;
168
+ }
169
+ export {};
@@ -0,0 +1,192 @@
1
+ import { BotonicOutputAudioData, BotonicOutputDocumentData, BotonicOutputImageData, BotonicOutputVideoData, } from '@botonic/shared';
2
+ import { BotonicButtonMessageData, BotonicButtonType, BotonicCarouselData, BotonicCustomData, BotonicLocationData, BotonicTextData, BotonicTypingEventData, } from '@botonic/shared';
3
+ import { WebchatClientSettings } from '@botonic/shared';
4
+ import { BotonicWhatsappButtonListData, BotonicWhatsappCatalogData, BotonicWhatsappCTAUrlButtonData, BotonicWhatsappMediaCarouselData, BotonicWhatsappProductCarouselData, BotonicWhatsappProductData, BotonicWhatsappProductListData, BotonicWhatsappTemplateData, } from '@botonic/shared';
5
+ import { BotServerMessageAudio, BotServerMessageButtonMessage, BotServerMessageCarousel, BotServerMessageCustom, BotServerMessageDocument, BotServerMessageImage, BotServerMessageLocation, BotServerMessageText, BotServerMessageTypingEvent, BotServerMessageVideo, BotServerMessageWebchatClientSettings, BotServerMessageWhatsappButtonList, BotServerMessageWhatsappCatalog, BotServerMessageWhatsappCTAUrlButton, BotServerMessageWhatsappMediaCarousel, BotServerMessageWhatsappProduct, BotServerMessageWhatsappProductCarousel, BotServerMessageWhatsappProductList, BotServerMessageWhatsappTemplate, } from './bot-server-message';
6
+ export class BotServerMessageFactory {
7
+ static createText({ text, payload, metadata, }) {
8
+ return new BotServerMessageText(new BotonicTextData(text, payload), metadata);
9
+ }
10
+ static createAudio({ attachmentUrl, attachmentContent, caption, fileInfo, metadata, }) {
11
+ return new BotServerMessageAudio(new BotonicOutputAudioData({
12
+ attachment_url: attachmentUrl,
13
+ attachment_content: attachmentContent,
14
+ caption: caption,
15
+ file_info: fileInfo,
16
+ }), metadata);
17
+ }
18
+ static createImage({ attachmentUrl, attachmentContent, caption, fileInfo, metadata, }) {
19
+ return new BotServerMessageImage(new BotonicOutputImageData({
20
+ attachment_url: attachmentUrl,
21
+ attachment_content: attachmentContent,
22
+ caption: caption,
23
+ file_info: fileInfo,
24
+ }), metadata);
25
+ }
26
+ static createVideo({ attachmentUrl, attachmentContent, caption, fileInfo, metadata, }) {
27
+ return new BotServerMessageVideo(new BotonicOutputVideoData({
28
+ attachment_url: attachmentUrl,
29
+ attachment_content: attachmentContent,
30
+ caption: caption,
31
+ file_info: fileInfo,
32
+ }), metadata);
33
+ }
34
+ static createDocument({ attachmentUrl, attachmentContent, caption, fileInfo, metadata, }) {
35
+ return new BotServerMessageDocument(new BotonicOutputDocumentData({
36
+ attachment_url: attachmentUrl,
37
+ attachment_content: attachmentContent,
38
+ caption: caption,
39
+ file_info: fileInfo,
40
+ }), metadata);
41
+ }
42
+ static createLocation({ latitude, longitude, title, address, metadata, }) {
43
+ return new BotServerMessageLocation(new BotonicLocationData(latitude, longitude, title, address), metadata);
44
+ }
45
+ static createButtonMessage({ text, buttons, metadata, }) {
46
+ return new BotServerMessageButtonMessage(new BotonicButtonMessageData(text, buttons), metadata);
47
+ }
48
+ static createCarousel({ elements, text, metadata, }) {
49
+ return new BotServerMessageCarousel(new BotonicCarouselData(elements, text), metadata);
50
+ }
51
+ static createCustom({ name, props, metadata, }) {
52
+ return new BotServerMessageCustom(new BotonicCustomData(name, props), metadata);
53
+ }
54
+ static createTypingEvent({ eventName, metadata, }) {
55
+ return new BotServerMessageTypingEvent(new BotonicTypingEventData(eventName), metadata);
56
+ }
57
+ /** Payload type `webchat_client_settings` for Hubtype `send_messages` (v2 bots). */
58
+ static createWebchatClientSettings({ settings, metadata, }) {
59
+ const data = settings instanceof WebchatClientSettings
60
+ ? settings
61
+ : new WebchatClientSettings(settings);
62
+ return new BotServerMessageWebchatClientSettings(data, metadata);
63
+ }
64
+ /**
65
+ * Creates a postback button that sends a payload when clicked
66
+ */
67
+ static createPostbackButton({ title, payload, }) {
68
+ return { type: BotonicButtonType.Postback, title, payload };
69
+ }
70
+ /**
71
+ * Creates a URL button that opens a link in the browser
72
+ */
73
+ static createUrlButton({ title, url, }) {
74
+ return { type: BotonicButtonType.WebUrl, title, url };
75
+ }
76
+ /**
77
+ * Creates a webview button that opens a URL in a webview.
78
+ * Uses `settings.STATIC_URL` (Lambda settings), not `process.env`.
79
+ */
80
+ static createWebviewButton(webviewButtonParams, botonicContext) {
81
+ const { title, webview, params } = webviewButtonParams;
82
+ const staticUrl = resolveStaticUrl(botonicContext.settings);
83
+ if (!staticUrl) {
84
+ throw new Error('STATIC_URL is missing from bot context settings (required for webview buttons)');
85
+ }
86
+ const base = staticUrl.replace(/\/+$/, '');
87
+ const url = new URL(`${base}/webviews/${webview}`);
88
+ url.searchParams.set('user_id', botonicContext.session.user.id);
89
+ url.searchParams.set('bot_id', botonicContext.session.bot.id);
90
+ url.searchParams.set('hubtype_api_url', botonicContext.settings.hubtypeApiUrl);
91
+ if (params) {
92
+ for (const [key, value] of Object.entries(params)) {
93
+ url.searchParams.set(key, String(value));
94
+ }
95
+ }
96
+ return {
97
+ type: BotonicButtonType.WebUrl,
98
+ title,
99
+ url: url.toString(),
100
+ };
101
+ }
102
+ /**
103
+ * Helper method to create a carousel element
104
+ * This simplifies carousel element creation
105
+ */
106
+ static createCarouselElement({ title, subtitle, image, buttons, }) {
107
+ return {
108
+ title,
109
+ subtitle,
110
+ image,
111
+ buttons,
112
+ };
113
+ }
114
+ static createWhatsappButtonList({ header, body, footer, button, sections, metadata, }) {
115
+ return new BotServerMessageWhatsappButtonList(new BotonicWhatsappButtonListData({
116
+ header,
117
+ body,
118
+ footer,
119
+ button,
120
+ sections,
121
+ }), metadata);
122
+ }
123
+ static createWhatsappCTAUrlButton({ headerType, header, headerImage, headerDocument, headerVideo, body, url, displayText, footer, metadata, }) {
124
+ return new BotServerMessageWhatsappCTAUrlButton(new BotonicWhatsappCTAUrlButtonData({
125
+ header_type: headerType,
126
+ header,
127
+ header_image: headerImage,
128
+ header_document: headerDocument,
129
+ header_video: headerVideo,
130
+ body,
131
+ url,
132
+ display_text: displayText,
133
+ footer,
134
+ }), metadata);
135
+ }
136
+ static createWhatsappCatalog({ body, footer, thumbnailProductId, metadata, }) {
137
+ return new BotServerMessageWhatsappCatalog(new BotonicWhatsappCatalogData({
138
+ body,
139
+ footer,
140
+ thumbnail_product_id: thumbnailProductId,
141
+ }), metadata);
142
+ }
143
+ static createWhatsappProduct({ body, catalogId, productId, footer, metadata, }) {
144
+ return new BotServerMessageWhatsappProduct(new BotonicWhatsappProductData({
145
+ body,
146
+ catalog_id: catalogId,
147
+ product_id: productId,
148
+ footer,
149
+ }), metadata);
150
+ }
151
+ static createWhatsappProductList({ header, body, footer, catalogId, sections, metadata, }) {
152
+ return new BotServerMessageWhatsappProductList(new BotonicWhatsappProductListData({
153
+ body,
154
+ catalog_id: catalogId,
155
+ header,
156
+ sections,
157
+ footer,
158
+ }), metadata);
159
+ }
160
+ static createWhatsappProductCarousel({ templateName, templateLanguage, cards, bodyParameters, metadata, }) {
161
+ return new BotServerMessageWhatsappProductCarousel(new BotonicWhatsappProductCarouselData({
162
+ template_name: templateName,
163
+ template_language: templateLanguage,
164
+ cards,
165
+ body_parameters: bodyParameters,
166
+ }), metadata);
167
+ }
168
+ static createWhatsappMediaCarousel({ templateName, templateLanguage, cards, bodyParameters, metadata, }) {
169
+ return new BotServerMessageWhatsappMediaCarousel(new BotonicWhatsappMediaCarouselData({
170
+ template_name: templateName,
171
+ template_language: templateLanguage,
172
+ cards,
173
+ body_parameters: bodyParameters,
174
+ }), metadata);
175
+ }
176
+ static createWhatsappTemplate({ name, namespace, languageCode, components, metadata, }) {
177
+ return new BotServerMessageWhatsappTemplate(new BotonicWhatsappTemplateData({
178
+ name,
179
+ namespace,
180
+ language_code: languageCode,
181
+ components,
182
+ }), metadata);
183
+ }
184
+ }
185
+ const resolveStaticUrl = (settings) => {
186
+ // This has to be defined in developers template.yaml (Local Development)
187
+ if (process.env.AWS_SAM_LOCAL === 'true') {
188
+ return process.env.STATIC_URL;
189
+ }
190
+ return settings.staticUrl;
191
+ };
192
+ //# sourceMappingURL=factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../../../../../libs/botonic/core/src/lib/server/factory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from './bot-server-message';
2
+ export * from './botonic-context';
3
+ export * from './factory';
@@ -0,0 +1,4 @@
1
+ export * from './bot-server-message';
2
+ export * from './botonic-context';
3
+ export * from './factory';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../libs/botonic/core/src/lib/server/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,mBAAmB,CAAA;AACjC,cAAc,WAAW,CAAA"}
@@ -0,0 +1,13 @@
1
+ import type { BotonicSession, BotonicWebviewsSession, UserExtraData } from '@botonic/shared';
2
+ import { type BotonicContext, type BotonicSessionPatchSlice, type BotonicSessionUpdate, type BotServerMessage, type ChatUserPatchResponse, type HandoffOptions, type ResolvedPlugins } from '../server';
3
+ import { type GetBotonicWebviewsSessionParams } from './hubtype-external-api-client';
4
+ export declare class HubtypeApiService {
5
+ updateBotSession<TExtraData extends UserExtraData = UserExtraData>(botonicContext: BotonicContext<ResolvedPlugins, TExtraData>, updates: BotonicSessionUpdate<TExtraData>): Promise<void>;
6
+ getBotonicSession(botonicContext: BotonicContext<ResolvedPlugins, UserExtraData>): Promise<BotonicSession<UserExtraData> | null>;
7
+ getBotSession(botonicContext: BotonicContext<ResolvedPlugins, UserExtraData>): Promise<BotonicSession<UserExtraData>>;
8
+ patchBotonicSession(botonicContext: BotonicContext<ResolvedPlugins, UserExtraData>, body: Record<string, unknown>): Promise<BotonicSessionPatchSlice>;
9
+ patchChatUser(botonicContext: BotonicContext<ResolvedPlugins, UserExtraData>, body: Record<string, unknown>): Promise<ChatUserPatchResponse>;
10
+ doHandoff(botonicContext: BotonicContext<ResolvedPlugins, UserExtraData>, handoffOptions?: HandoffOptions): Promise<unknown>;
11
+ sendMessages(botonicContext: BotonicContext<ResolvedPlugins, UserExtraData>, messages: BotServerMessage[]): Promise<unknown>;
12
+ getBotonicWebviewsSession(params: GetBotonicWebviewsSessionParams): Promise<BotonicWebviewsSession | null>;
13
+ }
@@ -0,0 +1,67 @@
1
+ import { __awaiter } from "tslib";
2
+ import { applyNonPatchSessionUpdateFields, mergeBotonicSessionPatchSlice, mergeChatUserPatchResponseIntoSessionUser, sessionUpdateToPatchBody, userUpdateToChatUserPatchBody, } from '../server';
3
+ import { HubtypeExternalApiClient, } from './hubtype-external-api-client';
4
+ export class HubtypeApiService {
5
+ updateBotSession(botonicContext, updates) {
6
+ return __awaiter(this, void 0, void 0, function* () {
7
+ applyNonPatchSessionUpdateFields(botonicContext.session.raw, updates);
8
+ const client = new HubtypeExternalApiClient();
9
+ const sessionPatchBody = sessionUpdateToPatchBody(updates);
10
+ if (Object.keys(sessionPatchBody).length > 0) {
11
+ const slice = yield client.patchBotonicSession(botonicContext, sessionPatchBody);
12
+ mergeBotonicSessionPatchSlice(botonicContext.session.raw, slice);
13
+ }
14
+ const chatUserBody = userUpdateToChatUserPatchBody(updates.user);
15
+ if (Object.keys(chatUserBody).length > 0) {
16
+ const userSlice = yield client.patchChatUser(botonicContext, chatUserBody);
17
+ mergeChatUserPatchResponseIntoSessionUser(botonicContext.session.raw.user, userSlice);
18
+ }
19
+ });
20
+ }
21
+ getBotonicSession(botonicContext) {
22
+ return __awaiter(this, void 0, void 0, function* () {
23
+ const client = new HubtypeExternalApiClient();
24
+ return client.getBotonicSession(botonicContext);
25
+ });
26
+ }
27
+ getBotSession(botonicContext) {
28
+ return __awaiter(this, void 0, void 0, function* () {
29
+ const session = yield this.getBotonicSession(botonicContext);
30
+ if (session === null) {
31
+ throw new Error('Failed to get bot session');
32
+ }
33
+ return session;
34
+ });
35
+ }
36
+ patchBotonicSession(botonicContext, body) {
37
+ return __awaiter(this, void 0, void 0, function* () {
38
+ const client = new HubtypeExternalApiClient();
39
+ return client.patchBotonicSession(botonicContext, body);
40
+ });
41
+ }
42
+ patchChatUser(botonicContext, body) {
43
+ return __awaiter(this, void 0, void 0, function* () {
44
+ const client = new HubtypeExternalApiClient();
45
+ return client.patchChatUser(botonicContext, body);
46
+ });
47
+ }
48
+ doHandoff(botonicContext, handoffOptions) {
49
+ return __awaiter(this, void 0, void 0, function* () {
50
+ const client = new HubtypeExternalApiClient();
51
+ return client.doHandoff(botonicContext, handoffOptions);
52
+ });
53
+ }
54
+ sendMessages(botonicContext, messages) {
55
+ return __awaiter(this, void 0, void 0, function* () {
56
+ const client = new HubtypeExternalApiClient();
57
+ return client.sendMessages(botonicContext, messages);
58
+ });
59
+ }
60
+ getBotonicWebviewsSession(params) {
61
+ return __awaiter(this, void 0, void 0, function* () {
62
+ const client = new HubtypeExternalApiClient();
63
+ return client.getBotonicWebviewsSession(params);
64
+ });
65
+ }
66
+ }
67
+ //# sourceMappingURL=hubtype-api-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hubtype-api-service.js","sourceRoot":"","sources":["../../../../../../../libs/botonic/core/src/lib/services/hubtype-api-service.ts"],"names":[],"mappings":";AAKA,OAAO,EACL,gCAAgC,EAChC,6BAA6B,EAC7B,yCAAyC,EACzC,wBAAwB,EACxB,6BAA6B,GAQ9B,MAAM,WAAW,CAAA;AAClB,OAAO,EAEL,wBAAwB,GACzB,MAAM,+BAA+B,CAAA;AAEtC,MAAM,OAAO,iBAAiB;IACtB,gBAAgB,CACpB,cAA2D,EAC3D,OAAyC;;YAEzC,gCAAgC,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;YAErE,MAAM,MAAM,GAAG,IAAI,wBAAwB,EAAE,CAAA;YAC7C,MAAM,gBAAgB,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAA;YAC1D,IAAI,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7C,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAC5C,cAAgE,EAChE,gBAAgB,CACjB,CAAA;gBACD,6BAA6B,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;YAClE,CAAC;YAED,MAAM,YAAY,GAAG,6BAA6B,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YAChE,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzC,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,aAAa,CAC1C,cAAgE,EAChE,YAAY,CACb,CAAA;gBACD,yCAAyC,CACvC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAC/B,SAAS,CACV,CAAA;YACH,CAAC;QACH,CAAC;KAAA;IAEK,iBAAiB,CACrB,cAA8D;;YAE9D,MAAM,MAAM,GAAG,IAAI,wBAAwB,EAAE,CAAA;YAC7C,OAAO,MAAM,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAA;QACjD,CAAC;KAAA;IAEK,aAAa,CACjB,cAA8D;;YAE9D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAA;YAC5D,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAA;YAC9C,CAAC;YACD,OAAO,OAAO,CAAA;QAChB,CAAC;KAAA;IAEK,mBAAmB,CACvB,cAA8D,EAC9D,IAA6B;;YAE7B,MAAM,MAAM,GAAG,IAAI,wBAAwB,EAAE,CAAA;YAC7C,OAAO,MAAM,CAAC,mBAAmB,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;QACzD,CAAC;KAAA;IAEK,aAAa,CACjB,cAA8D,EAC9D,IAA6B;;YAE7B,MAAM,MAAM,GAAG,IAAI,wBAAwB,EAAE,CAAA;YAC7C,OAAO,MAAM,CAAC,aAAa,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;QACnD,CAAC;KAAA;IAEK,SAAS,CACb,cAA8D,EAC9D,cAA+B;;YAE/B,MAAM,MAAM,GAAG,IAAI,wBAAwB,EAAE,CAAA;YAC7C,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,EAAE,cAAc,CAAC,CAAA;QACzD,CAAC;KAAA;IAEK,YAAY,CAChB,cAA8D,EAC9D,QAA4B;;YAE5B,MAAM,MAAM,GAAG,IAAI,wBAAwB,EAAE,CAAA;YAC7C,OAAO,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAA;QACtD,CAAC;KAAA;IAEK,yBAAyB,CAC7B,MAAuC;;YAEvC,MAAM,MAAM,GAAG,IAAI,wBAAwB,EAAE,CAAA;YAC7C,OAAO,MAAM,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAA;QACjD,CAAC;KAAA;CACF"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Hubtype external v2 conversational HTTP client (session, webviews, chat user, handoff, send message).
3
+ * Do not use legacy `…/context/` for v2 bots — see BE spec.
4
+ *
5
+ * @see openspec/specs/BE-botonic-v2-botonic-session-endpoints/spec.md
6
+ */
7
+ import type { BotonicSession, BotonicWebviewsSession, UserExtraData } from '@botonic/shared';
8
+ import type { BotonicContext, BotonicSessionPatchSlice, BotServerMessage, ChatUserPatchResponse, HandoffOptions, ResolvedPlugins } from '../server';
9
+ /** Target for GET …/session/webviews/ (no auth on this endpoint). */
10
+ export interface GetBotonicWebviewsSessionParams {
11
+ hubtypeApiUrl: string;
12
+ botId: string;
13
+ userId: string;
14
+ }
15
+ export declare class HubtypeExternalApiClient {
16
+ getBotonicSession<TSessionExtra extends UserExtraData = UserExtraData>(botonicContext: BotonicContext<ResolvedPlugins, UserExtraData>): Promise<BotonicSession<TSessionExtra> | null>;
17
+ patchBotonicSession(botonicContext: BotonicContext<ResolvedPlugins, UserExtraData>, body: Record<string, unknown>): Promise<BotonicSessionPatchSlice>;
18
+ getBotonicWebviewsSession(params: GetBotonicWebviewsSessionParams): Promise<BotonicWebviewsSession | null>;
19
+ patchChatUser(botonicContext: BotonicContext<ResolvedPlugins, UserExtraData>, body: Record<string, unknown>): Promise<ChatUserPatchResponse>;
20
+ doHandoff(botonicContext: BotonicContext<ResolvedPlugins, UserExtraData>, handoffOptions?: HandoffOptions): Promise<unknown>;
21
+ sendMessages(botonicContext: BotonicContext<ResolvedPlugins, UserExtraData>, messages: BotServerMessage[]): Promise<unknown>;
22
+ }