@botonic/shared 2.26.0 → 2.27.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/CHANGELOG.md +21 -2
- package/package.json +1 -1
- package/src/lib/domain/botonic/index.d.ts +5 -4
- package/src/lib/domain/botonic/index.js +5 -4
- package/src/lib/domain/botonic/index.js.map +1 -1
- package/src/lib/domain/botonic/outputs.d.ts +11 -4
- package/src/lib/domain/botonic/outputs.js +7 -1
- package/src/lib/domain/botonic/outputs.js.map +1 -1
- package/src/lib/domain/botonic/session.d.ts +63 -0
- package/src/lib/domain/botonic/session.js +2 -0
- package/src/lib/domain/botonic/session.js.map +1 -0
- package/src/lib/domain/botonic/settings.d.ts +18 -0
- package/src/lib/domain/botonic/settings.js +2 -0
- package/src/lib/domain/botonic/settings.js.map +1 -0
- package/src/lib/domain/botonic/types.d.ts +8 -3
- package/src/lib/domain/botonic/types.js +8 -1
- package/src/lib/domain/botonic/types.js.map +1 -1
- package/src/lib/domain/botonic/webchat-client-settings.d.ts +22 -0
- package/src/lib/domain/botonic/webchat-client-settings.js +29 -0
- package/src/lib/domain/botonic/webchat-client-settings.js.map +1 -0
- package/src/lib/domain/botonic/webviews-session.d.ts +20 -0
- package/src/lib/domain/botonic/webviews-session.js +2 -0
- package/src/lib/domain/botonic/webviews-session.js.map +1 -0
- package/src/lib/domain/botonic/whatsapp-outputs/whatsapp-button-list/index.d.ts +1 -1
- package/src/lib/domain/index.d.ts +1 -0
- package/src/lib/domain/index.js +2 -0
- package/src/lib/domain/index.js.map +1 -1
- package/src/lib/domain/server/bot-server-message.d.ts +5 -2
- package/src/lib/domain/server/bot-server-message.js +5 -0
- package/src/lib/domain/server/bot-server-message.js.map +1 -1
- package/src/lib/domain/server/botonic-context/botonic-action.d.ts +10 -0
- package/src/lib/domain/server/botonic-context/botonic-action.js +9 -0
- package/src/lib/domain/server/botonic-context/botonic-action.js.map +1 -0
- package/src/lib/domain/server/botonic-context/botonic-context-input.d.ts +8 -11
- package/src/lib/domain/server/botonic-context/botonic-context-input.js +4 -4
- package/src/lib/domain/server/botonic-context/botonic-context-input.js.map +1 -1
- package/src/lib/domain/server/botonic-context/botonic-context-session.d.ts +90 -77
- package/src/lib/domain/server/botonic-context/botonic-context-session.js +193 -105
- package/src/lib/domain/server/botonic-context/botonic-context-session.js.map +1 -1
- package/src/lib/domain/server/botonic-context/botonic-context-settings.d.ts +16 -0
- package/src/lib/domain/server/botonic-context/botonic-context-settings.js +48 -0
- package/src/lib/domain/server/botonic-context/botonic-context-settings.js.map +1 -0
- package/src/lib/domain/server/botonic-context/botonic-context.d.ts +20 -17
- package/src/lib/domain/server/botonic-context/botonic-context.js +24 -5
- package/src/lib/domain/server/botonic-context/botonic-context.js.map +1 -1
- package/src/lib/domain/server/botonic-context/botonic-session-patch-slice.d.ts +30 -0
- package/src/lib/domain/server/botonic-context/botonic-session-patch-slice.js +80 -0
- package/src/lib/domain/server/botonic-context/botonic-session-patch-slice.js.map +1 -0
- package/src/lib/domain/server/botonic-context/factory.d.ts +18 -12
- package/src/lib/domain/server/botonic-context/factory.js +14 -14
- package/src/lib/domain/server/botonic-context/factory.js.map +1 -1
- package/src/lib/domain/server/botonic-context/index.d.ts +4 -0
- package/src/lib/domain/server/botonic-context/index.js +4 -0
- package/src/lib/domain/server/botonic-context/index.js.map +1 -1
- package/src/lib/domain/server/botonic-context/send-messages-utils.d.ts +3 -0
- package/src/lib/domain/server/botonic-context/send-messages-utils.js +33 -0
- package/src/lib/domain/server/botonic-context/send-messages-utils.js.map +1 -0
- package/src/lib/domain/server/botonic-context/types.d.ts +9 -5
- package/src/lib/domain/server/botonic-context/types.js.map +1 -1
- package/src/lib/domain/server/factory.d.ts +11 -11
- package/src/lib/domain/server/factory.js +31 -8
- package/src/lib/domain/server/factory.js.map +1 -1
- package/src/lib/domain/webchat/factory.d.ts +21 -14
- package/src/lib/domain/webchat/factory.js +17 -8
- package/src/lib/domain/webchat/factory.js.map +1 -1
- package/src/lib/domain/webchat/realtime/factory.js +5 -2
- package/src/lib/domain/webchat/realtime/factory.js.map +1 -1
- package/src/lib/domain/webchat/realtime/realtime-response-message.d.ts +5 -2
- package/src/lib/domain/webchat/realtime/realtime-response-message.js +5 -0
- package/src/lib/domain/webchat/realtime/realtime-response-message.js.map +1 -1
- package/src/lib/domain/webchat/webchat-message.d.ts +4 -1
- package/src/lib/domain/webchat/webchat-message.js +9 -4
- package/src/lib/domain/webchat/webchat-message.js.map +1 -1
- package/src/lib/domain/webviews/botonic-context-webviews.d.ts +71 -0
- package/src/lib/domain/webviews/botonic-context-webviews.js +80 -0
- package/src/lib/domain/webviews/botonic-context-webviews.js.map +1 -0
- package/src/lib/domain/webviews/factory.d.ts +17 -0
- package/src/lib/domain/webviews/factory.js +21 -0
- package/src/lib/domain/webviews/factory.js.map +1 -0
- package/src/lib/domain/webviews/index.d.ts +2 -0
- package/src/lib/domain/webviews/index.js +3 -0
- package/src/lib/domain/webviews/index.js.map +1 -0
- package/src/lib/hubtype-analytics-types.d.ts +2 -2
- package/src/lib/index.d.ts +1 -1
- package/src/lib/index.js +1 -1
- package/src/lib/index.js.map +1 -1
- package/src/lib/services/handoff.d.ts +4 -0
- package/src/lib/services/handoff.js +23 -0
- package/src/lib/services/handoff.js.map +1 -0
- package/src/lib/services/hubtype-api-service.d.ts +12 -0
- package/src/lib/services/hubtype-api-service.js +67 -0
- package/src/lib/services/hubtype-api-service.js.map +1 -0
- package/src/lib/services/hubtype-external-api-client.d.ts +21 -0
- package/src/lib/services/hubtype-external-api-client.js +111 -0
- package/src/lib/services/hubtype-external-api-client.js.map +1 -0
- package/src/lib/services/index.d.ts +4 -0
- package/src/lib/services/index.js +5 -0
- package/src/lib/services/index.js.map +1 -0
- package/src/lib/services/webchat-api.d.ts +3 -3
- package/src/lib/domain/botonic/legacy/index.d.ts +0 -2
- package/src/lib/domain/botonic/legacy/index.js +0 -3
- package/src/lib/domain/botonic/legacy/index.js.map +0 -1
- package/src/lib/domain/botonic/legacy/input-adapter.d.ts +0 -25
- package/src/lib/domain/botonic/legacy/input-adapter.js +0 -203
- package/src/lib/domain/botonic/legacy/input-adapter.js.map +0 -1
- package/src/lib/domain/botonic/legacy/types.d.ts +0 -32
- package/src/lib/domain/botonic/legacy/types.js +0 -2
- package/src/lib/domain/botonic/legacy/types.js.map +0 -1
|
@@ -1,96 +1,105 @@
|
|
|
1
1
|
import { MessagingChannel } from '../../../shared-types';
|
|
2
|
-
|
|
2
|
+
import type { BotonicSession, BotonicSessionBot, BotonicSessionHubtypeCase, BotonicSessionUser, BotonicSessionUserContactInfoItem, UserExtraData } from '../../botonic/session';
|
|
3
|
+
import { WebchatClientSettings } from '../../botonic/webchat-client-settings';
|
|
4
|
+
import { BotonicAction } from './botonic-action';
|
|
5
|
+
export type { UserExtraData };
|
|
6
|
+
export interface BotonicRequestSessionBasicEntity {
|
|
7
|
+
id: string;
|
|
8
|
+
name: string;
|
|
9
|
+
}
|
|
10
|
+
export type BotonicRequestSessionOrganization = BotonicRequestSessionBasicEntity;
|
|
11
|
+
export type BotonicRequestSessionBot = BotonicRequestSessionBasicEntity;
|
|
12
|
+
export interface BotonicRequestSessionUserContactInfoItem {
|
|
3
13
|
name: string;
|
|
4
14
|
type: string;
|
|
5
15
|
value: string;
|
|
6
16
|
description?: string;
|
|
7
17
|
}
|
|
8
|
-
export interface
|
|
9
|
-
|
|
10
|
-
|
|
18
|
+
export interface BotonicRequestSessionChannel {
|
|
19
|
+
provider: MessagingChannel;
|
|
20
|
+
imp_id?: string;
|
|
21
|
+
unformatted_phone_number?: string;
|
|
11
22
|
}
|
|
12
|
-
/** Extra data attached to session user. API and runtime treat it as a string-keyed object. */
|
|
13
|
-
export type UserExtraData = Record<string, any>;
|
|
14
23
|
export interface BotonicRequestSessionUser<TExtraData extends UserExtraData = UserExtraData> {
|
|
15
24
|
id: string;
|
|
16
|
-
|
|
25
|
+
provider_id: string;
|
|
17
26
|
name?: string;
|
|
18
|
-
|
|
19
|
-
imp_id?: string;
|
|
20
|
-
provider_id?: string;
|
|
21
|
-
chat_id?: string;
|
|
27
|
+
override_name?: string;
|
|
22
28
|
extra_data?: TExtraData;
|
|
29
|
+
contact_info?: BotonicRequestSessionUserContactInfoItem[];
|
|
23
30
|
locale: string;
|
|
24
31
|
country: string;
|
|
25
32
|
system_locale: string;
|
|
26
|
-
contact_info?: ContactInfo[];
|
|
27
|
-
}
|
|
28
|
-
export interface CaptureUserInput {
|
|
29
|
-
node_id: string;
|
|
30
33
|
}
|
|
31
|
-
export declare enum BotonicAction {
|
|
32
|
-
Redirect = "redirect_action",
|
|
33
|
-
CreateCase = "create_case",
|
|
34
|
-
DeleteUser = "delete_user",
|
|
35
|
-
DiscardCase = "discard_case"
|
|
36
|
-
}
|
|
37
|
-
type BotonicActionSeparator = ':';
|
|
38
|
-
export type BotonicActionType = `${BotonicAction.CreateCase}${BotonicActionSeparator}${string}` | `${BotonicAction.Redirect}${BotonicActionSeparator}${string}` | `${BotonicAction.DiscardCase}${BotonicActionSeparator}${string}` | `${BotonicAction.DiscardCase}` | `${BotonicAction.DeleteUser}`;
|
|
39
34
|
export interface BotonicRequestSession<TExtraData extends UserExtraData = UserExtraData> {
|
|
35
|
+
organization: BotonicRequestSessionOrganization;
|
|
40
36
|
bot: BotonicRequestSessionBot;
|
|
37
|
+
channel: BotonicRequestSessionChannel;
|
|
41
38
|
user: BotonicRequestSessionUser<TExtraData>;
|
|
42
|
-
organization: string;
|
|
43
|
-
organization_id: string;
|
|
44
|
-
__retries: number;
|
|
45
|
-
is_first_interaction: boolean;
|
|
46
39
|
is_test_integration: boolean;
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
40
|
+
is_first_interaction: boolean;
|
|
41
|
+
shadowing: boolean;
|
|
42
|
+
flow_thread_id?: string;
|
|
43
|
+
had_hubtype_handoff: boolean;
|
|
44
|
+
hubtype_case?: BotonicSessionHubtypeCase;
|
|
45
|
+
custom: Record<string, any>;
|
|
46
|
+
external: Record<string, any>;
|
|
47
|
+
webviews_custom: Record<string, any>;
|
|
48
|
+
webchat_client_settings: WebchatClientSettings;
|
|
54
49
|
}
|
|
55
50
|
/**
|
|
56
|
-
*
|
|
57
|
-
*
|
|
51
|
+
* Hydrated BotonicSession from Lambda `session`.
|
|
52
|
+
* Field names match backend `model_dump(mode="json")` (snake_case).
|
|
58
53
|
*/
|
|
59
54
|
export interface BotonicSessionUpdate<TExtraData extends UserExtraData = UserExtraData> {
|
|
55
|
+
shadowing?: boolean | null;
|
|
56
|
+
flowThreadId?: string | null;
|
|
57
|
+
custom?: Record<string, unknown>;
|
|
58
|
+
webviewsCustom?: Record<string, unknown>;
|
|
59
|
+
webchatClientSettings?: Record<string, unknown>;
|
|
60
|
+
/** Flow Builder capture node id; maps to `capture_user_input_node_id` on `PATCH …/session/`. */
|
|
61
|
+
captureUserInputNodeId?: string | null;
|
|
62
|
+
/** Stored as `_botonic_action` on session; not sent on v2 session PATCH. */
|
|
63
|
+
botonicAction?: string | null;
|
|
64
|
+
/** Maps to `is_first_interaction` on session; included in `PATCH …/session/` when set. */
|
|
60
65
|
isFirstInteraction?: boolean;
|
|
61
|
-
botonicAction?: BotonicActionType | null;
|
|
62
|
-
flowThreadId?: string;
|
|
63
|
-
captureUserInput?: CaptureUserInput;
|
|
64
66
|
user?: {
|
|
67
|
+
overrideName?: string | null;
|
|
65
68
|
extraData?: TExtraData;
|
|
66
|
-
systemLocale?: string;
|
|
67
69
|
locale?: string;
|
|
68
70
|
country?: string;
|
|
71
|
+
systemLocale?: string;
|
|
69
72
|
};
|
|
70
73
|
}
|
|
71
74
|
/**
|
|
72
|
-
*
|
|
75
|
+
* Maps camelCase session updates to snake_case PATCH body (v2 only).
|
|
76
|
+
*/
|
|
77
|
+
export declare function sessionUpdateToPatchBody<TExtraData extends UserExtraData = UserExtraData>(update: BotonicSessionUpdate<TExtraData>): Record<string, unknown>;
|
|
78
|
+
/**
|
|
79
|
+
* Mutates `session.raw` immediately so the rest of the turn sees updates.
|
|
80
|
+
* Handles `capture_user_input_node_id` (mirror of {@link sessionUpdateToPatchBody}) and
|
|
81
|
+
* `_botonic_action` (not sent on session PATCH).
|
|
82
|
+
* For `isFirstInteraction`, also updates in-memory `is_first_interaction`; the same
|
|
83
|
+
* value is emitted by {@link sessionUpdateToPatchBody} for `PATCH …/session/`.
|
|
73
84
|
*/
|
|
74
|
-
export declare function
|
|
85
|
+
export declare function applyNonPatchSessionUpdateFields<TExtraData extends UserExtraData = UserExtraData>(session: BotonicSession<TExtraData>, updates: BotonicSessionUpdate<TExtraData>): void;
|
|
75
86
|
/**
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
* request.session.user.extraData, etc.
|
|
87
|
+
* Maps `BotonicSessionUpdate.user` to `PATCH …/users/<user_id>/` body (ChatUserPatchSerializer keys, snake_case).
|
|
88
|
+
* Unknown keys are omitted — only serializer fields are sent.
|
|
79
89
|
*/
|
|
90
|
+
export declare function userUpdateToChatUserPatchBody<TExtraData extends UserExtraData = UserExtraData>(user: BotonicSessionUpdate<TExtraData>['user'] | undefined): Record<string, unknown>;
|
|
80
91
|
export declare class BotonicContextSessionUser<TExtraData extends UserExtraData = UserExtraData> {
|
|
81
92
|
private rawUser;
|
|
82
93
|
private readonly onUserUpdate?;
|
|
83
|
-
constructor(rawUser:
|
|
94
|
+
constructor(rawUser: BotonicSessionUser<TExtraData>, onUserUpdate?: ((updates: {
|
|
84
95
|
extraData?: TExtraData;
|
|
85
96
|
}) => void) | undefined);
|
|
86
|
-
|
|
87
|
-
get raw(): BotonicRequestSessionUser<TExtraData>;
|
|
97
|
+
get raw(): BotonicSessionUser<TExtraData>;
|
|
88
98
|
get id(): string;
|
|
89
99
|
get username(): string | undefined;
|
|
90
100
|
get name(): string | undefined;
|
|
91
|
-
get
|
|
92
|
-
get
|
|
93
|
-
get chatId(): string | undefined;
|
|
101
|
+
get overrideName(): string | undefined;
|
|
102
|
+
get providerId(): string;
|
|
94
103
|
get locale(): string;
|
|
95
104
|
set locale(v: string);
|
|
96
105
|
get country(): string;
|
|
@@ -99,38 +108,46 @@ export declare class BotonicContextSessionUser<TExtraData extends UserExtraData
|
|
|
99
108
|
set systemLocale(v: string);
|
|
100
109
|
get extraData(): TExtraData | undefined;
|
|
101
110
|
set extraData(v: TExtraData | undefined);
|
|
102
|
-
get contactInfo():
|
|
111
|
+
get contactInfo(): BotonicSessionUserContactInfoItem[] | undefined;
|
|
103
112
|
}
|
|
104
|
-
/**
|
|
105
|
-
* Runtime class that wraps Session and exposes accessor methods for common attributes.
|
|
106
|
-
* Use this as BotRequest.session so consumers can call request.session.user.id,
|
|
107
|
-
* request.session.bot.id, etc.
|
|
108
|
-
*/
|
|
109
113
|
export declare class BotonicContextSession<TExtraData extends UserExtraData = UserExtraData> {
|
|
110
|
-
private
|
|
114
|
+
private sessionData;
|
|
111
115
|
private onUpdate?;
|
|
112
|
-
constructor(
|
|
113
|
-
/** Register a callback to run when session is mutated (e.g. user.extraData set). Calls updateBotSession internally. */
|
|
116
|
+
constructor(sessionData: BotonicSession<TExtraData>);
|
|
114
117
|
setOnUpdate(cb: (updates: BotonicSessionUpdate<TExtraData>) => void): void;
|
|
115
|
-
/**
|
|
116
|
-
|
|
117
|
-
get
|
|
118
|
+
/** Replace underlying session object (e.g. after GET session from Hubtype). */
|
|
119
|
+
replaceSession(next: BotonicSession<TExtraData>): void;
|
|
120
|
+
get raw(): BotonicSession<TExtraData>;
|
|
121
|
+
get bot(): BotonicSessionBot;
|
|
118
122
|
get user(): BotonicContextSessionUser<TExtraData>;
|
|
119
|
-
get organization(): string;
|
|
120
123
|
get organizationId(): string;
|
|
121
|
-
get
|
|
124
|
+
get organizationName(): string;
|
|
122
125
|
get isFirstInteraction(): boolean;
|
|
126
|
+
set isFirstInteraction(v: boolean);
|
|
127
|
+
get botonicAction(): string | undefined;
|
|
128
|
+
set botonicAction(v: string | undefined);
|
|
129
|
+
isBotonicActionRedirect(): boolean;
|
|
130
|
+
getBotonicActionPayload(action: BotonicAction): string | undefined;
|
|
123
131
|
get isTestIntegration(): boolean;
|
|
124
|
-
get flowThreadId(): string;
|
|
125
|
-
get accessToken(): string;
|
|
126
|
-
get botonicAction(): BotonicActionType | undefined;
|
|
127
|
-
set botonicAction(v: BotonicActionType | undefined);
|
|
128
|
-
get hubtypeApi(): string;
|
|
132
|
+
get flowThreadId(): string | null | undefined;
|
|
129
133
|
get shadowing(): boolean | undefined;
|
|
134
|
+
set shadowing(v: boolean | undefined);
|
|
135
|
+
get hadHubtypeHandoff(): boolean | undefined;
|
|
136
|
+
get hubtypeCase(): BotonicSessionHubtypeCase | undefined;
|
|
137
|
+
/** Convenience for legacy code paths; prefer {@link hubtypeCase}. */
|
|
130
138
|
get hubtypeCaseId(): string | undefined;
|
|
131
|
-
get
|
|
132
|
-
|
|
133
|
-
|
|
139
|
+
get custom(): Record<string, unknown> | undefined;
|
|
140
|
+
get external(): Record<string, unknown> | undefined;
|
|
141
|
+
get webviewsCustom(): Record<string, unknown> | undefined;
|
|
142
|
+
set webviewsCustom(v: Record<string, unknown> | undefined);
|
|
143
|
+
get webchatClientSettings(): WebchatClientSettings;
|
|
144
|
+
set webchatClientSettings(v: WebchatClientSettings);
|
|
145
|
+
/** Flow Builder: node id capturing user input (`capture_user_input_node_id` in JSON). */
|
|
146
|
+
get captureUserInputNodeId(): string | undefined;
|
|
147
|
+
/** Channel provider (e.g. webchat, whatsapp). */
|
|
148
|
+
get provider(): string;
|
|
149
|
+
get impId(): string;
|
|
150
|
+
get unformattedPhoneNumber(): string | undefined;
|
|
134
151
|
isDev(): boolean;
|
|
135
152
|
isWebchat(): boolean;
|
|
136
153
|
isTelegram(): boolean;
|
|
@@ -138,9 +155,5 @@ export declare class BotonicContextSession<TExtraData extends UserExtraData = Us
|
|
|
138
155
|
isInstagram(): boolean;
|
|
139
156
|
isTwitter(): boolean;
|
|
140
157
|
isWhatsapp(): boolean;
|
|
141
|
-
isBotonicActionRedirect(): boolean;
|
|
142
|
-
getBotonicActionPayload(action: BotonicAction): string | undefined;
|
|
143
|
-
/** True when the session has a flow thread id. */
|
|
144
158
|
hasFlowThreadId(): boolean;
|
|
145
159
|
}
|
|
146
|
-
export {};
|
|
@@ -1,61 +1,98 @@
|
|
|
1
1
|
import { MessagingChannel } from '../../../shared-types';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
BotonicAction["Redirect"] = "redirect_action";
|
|
5
|
-
BotonicAction["CreateCase"] = "create_case";
|
|
6
|
-
BotonicAction["DeleteUser"] = "delete_user";
|
|
7
|
-
BotonicAction["DiscardCase"] = "discard_case";
|
|
8
|
-
})(BotonicAction || (BotonicAction = {}));
|
|
2
|
+
import { DEFAULT_WEBCHAT_CLIENT_SETTINGS, } from '../../botonic/webchat-client-settings';
|
|
3
|
+
import { BotonicAction } from './botonic-action';
|
|
9
4
|
/**
|
|
10
|
-
*
|
|
5
|
+
* Maps camelCase session updates to snake_case PATCH body (v2 only).
|
|
11
6
|
*/
|
|
12
7
|
export function sessionUpdateToPatchBody(update) {
|
|
13
|
-
|
|
14
|
-
const raw = {};
|
|
8
|
+
const body = {};
|
|
15
9
|
if (update.isFirstInteraction !== undefined) {
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
if ('botonicAction' in update) {
|
|
19
|
-
raw._botonic_action =
|
|
20
|
-
(_a = update.botonicAction) !== null && _a !== void 0 ? _a : null;
|
|
10
|
+
body.is_first_interaction = update.isFirstInteraction;
|
|
21
11
|
}
|
|
12
|
+
if (update.shadowing !== undefined)
|
|
13
|
+
body.shadowing = update.shadowing;
|
|
22
14
|
if (update.flowThreadId !== undefined) {
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
if (update.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
if (
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
;
|
|
41
|
-
raw.user = userPatch;
|
|
15
|
+
body.flow_thread_id = update.flowThreadId;
|
|
16
|
+
}
|
|
17
|
+
if (update.custom !== undefined)
|
|
18
|
+
body.custom = update.custom;
|
|
19
|
+
if (update.webviewsCustom !== undefined) {
|
|
20
|
+
body.webviews_custom = update.webviewsCustom;
|
|
21
|
+
}
|
|
22
|
+
if (update.webchatClientSettings !== undefined) {
|
|
23
|
+
body.webchat_client_settings = update.webchatClientSettings;
|
|
24
|
+
}
|
|
25
|
+
if (update.captureUserInputNodeId !== undefined) {
|
|
26
|
+
const id = update.captureUserInputNodeId;
|
|
27
|
+
if (id === null || id === '') {
|
|
28
|
+
body.capture_user_input_node_id = null;
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
body.capture_user_input_node_id = id;
|
|
42
32
|
}
|
|
43
33
|
}
|
|
44
|
-
return
|
|
34
|
+
return body;
|
|
45
35
|
}
|
|
46
36
|
/**
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
37
|
+
* Mutates `session.raw` immediately so the rest of the turn sees updates.
|
|
38
|
+
* Handles `capture_user_input_node_id` (mirror of {@link sessionUpdateToPatchBody}) and
|
|
39
|
+
* `_botonic_action` (not sent on session PATCH).
|
|
40
|
+
* For `isFirstInteraction`, also updates in-memory `is_first_interaction`; the same
|
|
41
|
+
* value is emitted by {@link sessionUpdateToPatchBody} for `PATCH …/session/`.
|
|
50
42
|
*/
|
|
51
|
-
|
|
52
|
-
|
|
43
|
+
export function applyNonPatchSessionUpdateFields(session, updates) {
|
|
44
|
+
if (updates.captureUserInputNodeId !== undefined) {
|
|
45
|
+
const id = updates.captureUserInputNodeId;
|
|
46
|
+
if (id === null || id === '') {
|
|
47
|
+
delete session.capture_user_input_node_id;
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
session.capture_user_input_node_id = id;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (updates.isFirstInteraction !== undefined) {
|
|
54
|
+
session.is_first_interaction = updates.isFirstInteraction;
|
|
55
|
+
}
|
|
56
|
+
if (updates.botonicAction !== undefined) {
|
|
57
|
+
const w = session;
|
|
58
|
+
if (updates.botonicAction === null || updates.botonicAction === '') {
|
|
59
|
+
delete w._botonic_action;
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
w._botonic_action = updates.botonicAction;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Maps `BotonicSessionUpdate.user` to `PATCH …/users/<user_id>/` body (ChatUserPatchSerializer keys, snake_case).
|
|
68
|
+
* Unknown keys are omitted — only serializer fields are sent.
|
|
69
|
+
*/
|
|
70
|
+
export function userUpdateToChatUserPatchBody(user) {
|
|
71
|
+
if (user === undefined)
|
|
72
|
+
return {};
|
|
73
|
+
const body = {};
|
|
74
|
+
if (user.overrideName !== undefined) {
|
|
75
|
+
body.override_name = user.overrideName;
|
|
76
|
+
}
|
|
77
|
+
if (user.locale !== undefined) {
|
|
78
|
+
body.locale = user.locale;
|
|
79
|
+
}
|
|
80
|
+
if (user.country !== undefined) {
|
|
81
|
+
body.country = user.country;
|
|
82
|
+
}
|
|
83
|
+
if (user.systemLocale !== undefined) {
|
|
84
|
+
body.system_locale = user.systemLocale;
|
|
85
|
+
}
|
|
86
|
+
if (user.extraData !== undefined) {
|
|
87
|
+
body.extra_data = user.extraData;
|
|
88
|
+
}
|
|
89
|
+
return body;
|
|
90
|
+
}
|
|
53
91
|
export class BotonicContextSessionUser {
|
|
54
92
|
constructor(rawUser, onUserUpdate) {
|
|
55
93
|
this.rawUser = rawUser;
|
|
56
94
|
this.onUserUpdate = onUserUpdate;
|
|
57
95
|
}
|
|
58
|
-
/** Raw user for API calls and serialization. */
|
|
59
96
|
get raw() {
|
|
60
97
|
return this.rawUser;
|
|
61
98
|
}
|
|
@@ -63,19 +100,19 @@ export class BotonicContextSessionUser {
|
|
|
63
100
|
return this.rawUser.id;
|
|
64
101
|
}
|
|
65
102
|
get username() {
|
|
66
|
-
|
|
103
|
+
var _a;
|
|
104
|
+
return (_a = this.rawUser.username) !== null && _a !== void 0 ? _a : undefined;
|
|
67
105
|
}
|
|
68
106
|
get name() {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
get provider() {
|
|
72
|
-
return this.rawUser.provider;
|
|
107
|
+
var _a;
|
|
108
|
+
return (_a = this.rawUser.name) !== null && _a !== void 0 ? _a : undefined;
|
|
73
109
|
}
|
|
74
|
-
get
|
|
75
|
-
|
|
110
|
+
get overrideName() {
|
|
111
|
+
var _a;
|
|
112
|
+
return (_a = this.rawUser.override_name) !== null && _a !== void 0 ? _a : undefined;
|
|
76
113
|
}
|
|
77
|
-
get
|
|
78
|
-
return this.rawUser.
|
|
114
|
+
get providerId() {
|
|
115
|
+
return this.rawUser.provider_id;
|
|
79
116
|
}
|
|
80
117
|
get locale() {
|
|
81
118
|
return this.rawUser.locale;
|
|
@@ -107,103 +144,154 @@ export class BotonicContextSessionUser {
|
|
|
107
144
|
return this.rawUser.contact_info;
|
|
108
145
|
}
|
|
109
146
|
}
|
|
110
|
-
/**
|
|
111
|
-
* Runtime class that wraps Session and exposes accessor methods for common attributes.
|
|
112
|
-
* Use this as BotRequest.session so consumers can call request.session.user.id,
|
|
113
|
-
* request.session.bot.id, etc.
|
|
114
|
-
*/
|
|
115
147
|
export class BotonicContextSession {
|
|
116
|
-
constructor(
|
|
117
|
-
this.
|
|
148
|
+
constructor(sessionData) {
|
|
149
|
+
this.sessionData = sessionData;
|
|
118
150
|
}
|
|
119
|
-
/** Register a callback to run when session is mutated (e.g. user.extraData set). Calls updateBotSession internally. */
|
|
120
151
|
setOnUpdate(cb) {
|
|
121
152
|
this.onUpdate = cb;
|
|
122
153
|
}
|
|
123
|
-
/**
|
|
154
|
+
/** Replace underlying session object (e.g. after GET session from Hubtype). */
|
|
155
|
+
replaceSession(next) {
|
|
156
|
+
this.sessionData = next;
|
|
157
|
+
}
|
|
124
158
|
get raw() {
|
|
125
|
-
return this.
|
|
159
|
+
return this.sessionData;
|
|
126
160
|
}
|
|
127
161
|
get bot() {
|
|
128
|
-
return this.
|
|
162
|
+
return this.sessionData.bot;
|
|
129
163
|
}
|
|
130
164
|
get user() {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
165
|
+
const notify = this.onUpdate;
|
|
166
|
+
return new BotonicContextSessionUser(this.sessionData.user, notify !== undefined
|
|
167
|
+
? updates => {
|
|
168
|
+
notify({ user: updates });
|
|
169
|
+
}
|
|
170
|
+
: undefined);
|
|
137
171
|
}
|
|
138
172
|
get organizationId() {
|
|
139
|
-
return this.
|
|
173
|
+
return this.sessionData.organization.id;
|
|
140
174
|
}
|
|
141
|
-
get
|
|
142
|
-
return this.
|
|
175
|
+
get organizationName() {
|
|
176
|
+
return this.sessionData.organization.name;
|
|
143
177
|
}
|
|
144
178
|
get isFirstInteraction() {
|
|
145
|
-
return this.
|
|
146
|
-
}
|
|
147
|
-
get isTestIntegration() {
|
|
148
|
-
return this.rawSession.is_test_integration;
|
|
179
|
+
return this.sessionData.is_first_interaction;
|
|
149
180
|
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
}
|
|
153
|
-
get accessToken() {
|
|
154
|
-
return this.rawSession._access_token;
|
|
181
|
+
set isFirstInteraction(v) {
|
|
182
|
+
this.sessionData.is_first_interaction = v;
|
|
155
183
|
}
|
|
156
184
|
get botonicAction() {
|
|
157
|
-
|
|
185
|
+
const w = this.sessionData;
|
|
186
|
+
const v = w._botonic_action;
|
|
187
|
+
return typeof v === 'string' ? v : undefined;
|
|
158
188
|
}
|
|
159
189
|
set botonicAction(v) {
|
|
160
|
-
|
|
190
|
+
const w = this.sessionData;
|
|
191
|
+
if (v === undefined || v === '') {
|
|
192
|
+
delete w._botonic_action;
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
w._botonic_action = v;
|
|
196
|
+
}
|
|
161
197
|
}
|
|
162
|
-
|
|
163
|
-
|
|
198
|
+
isBotonicActionRedirect() {
|
|
199
|
+
const a = this.botonicAction;
|
|
200
|
+
const prefix = `${BotonicAction.Redirect}:`;
|
|
201
|
+
return typeof a === 'string' && a.startsWith(prefix);
|
|
202
|
+
}
|
|
203
|
+
getBotonicActionPayload(action) {
|
|
204
|
+
const prefix = `${action}:`;
|
|
205
|
+
const a = this.botonicAction;
|
|
206
|
+
if (typeof a !== 'string' || !a.startsWith(prefix))
|
|
207
|
+
return undefined;
|
|
208
|
+
return a.slice(prefix.length);
|
|
209
|
+
}
|
|
210
|
+
get isTestIntegration() {
|
|
211
|
+
return this.sessionData.is_test_integration;
|
|
212
|
+
}
|
|
213
|
+
get flowThreadId() {
|
|
214
|
+
return this.sessionData.flow_thread_id;
|
|
164
215
|
}
|
|
165
216
|
get shadowing() {
|
|
166
|
-
return this.
|
|
217
|
+
return this.sessionData.shadowing;
|
|
218
|
+
}
|
|
219
|
+
set shadowing(v) {
|
|
220
|
+
this.sessionData.shadowing = v;
|
|
221
|
+
}
|
|
222
|
+
get hadHubtypeHandoff() {
|
|
223
|
+
return this.sessionData.had_hubtype_handoff;
|
|
224
|
+
}
|
|
225
|
+
get hubtypeCase() {
|
|
226
|
+
return this.sessionData.hubtype_case;
|
|
167
227
|
}
|
|
228
|
+
/** Convenience for legacy code paths; prefer {@link hubtypeCase}. */
|
|
168
229
|
get hubtypeCaseId() {
|
|
169
|
-
|
|
230
|
+
var _a;
|
|
231
|
+
return (_a = this.sessionData.hubtype_case) === null || _a === void 0 ? void 0 : _a.id;
|
|
232
|
+
}
|
|
233
|
+
get custom() {
|
|
234
|
+
return this.sessionData.custom;
|
|
235
|
+
}
|
|
236
|
+
get external() {
|
|
237
|
+
return this.sessionData.external;
|
|
238
|
+
}
|
|
239
|
+
get webviewsCustom() {
|
|
240
|
+
return this.sessionData.webviews_custom;
|
|
170
241
|
}
|
|
171
|
-
|
|
172
|
-
|
|
242
|
+
set webviewsCustom(v) {
|
|
243
|
+
this.sessionData.webviews_custom = v;
|
|
244
|
+
}
|
|
245
|
+
get webchatClientSettings() {
|
|
246
|
+
var _a;
|
|
247
|
+
return ((_a = this.sessionData.webchat_client_settings) !== null && _a !== void 0 ? _a : DEFAULT_WEBCHAT_CLIENT_SETTINGS);
|
|
248
|
+
}
|
|
249
|
+
set webchatClientSettings(v) {
|
|
250
|
+
this.sessionData.webchat_client_settings = v;
|
|
251
|
+
}
|
|
252
|
+
/** Flow Builder: node id capturing user input (`capture_user_input_node_id` in JSON). */
|
|
253
|
+
get captureUserInputNodeId() {
|
|
254
|
+
const id = this.sessionData.capture_user_input_node_id;
|
|
255
|
+
if (id == null || id === '') {
|
|
256
|
+
return undefined;
|
|
257
|
+
}
|
|
258
|
+
return id;
|
|
259
|
+
}
|
|
260
|
+
/** Channel provider (e.g. webchat, whatsapp). */
|
|
261
|
+
get provider() {
|
|
262
|
+
return this.sessionData.channel.provider;
|
|
263
|
+
}
|
|
264
|
+
get impId() {
|
|
265
|
+
return this.sessionData.channel.imp_id;
|
|
266
|
+
}
|
|
267
|
+
get unformattedPhoneNumber() {
|
|
268
|
+
var _a;
|
|
269
|
+
return (_a = this.sessionData.channel.unformatted_phone_number) !== null && _a !== void 0 ? _a : undefined;
|
|
173
270
|
}
|
|
174
|
-
// TODO: Still needed?
|
|
175
271
|
isDev() {
|
|
176
|
-
return this.
|
|
272
|
+
return this.provider === MessagingChannel.Webchat;
|
|
177
273
|
}
|
|
178
274
|
isWebchat() {
|
|
179
|
-
return this.
|
|
275
|
+
return this.provider === MessagingChannel.Webchat;
|
|
180
276
|
}
|
|
181
277
|
isTelegram() {
|
|
182
|
-
return this.
|
|
278
|
+
return this.provider === MessagingChannel.Telegram;
|
|
183
279
|
}
|
|
184
280
|
isFacebook() {
|
|
185
|
-
return this.
|
|
281
|
+
return this.provider === MessagingChannel.Facebook;
|
|
186
282
|
}
|
|
187
283
|
isInstagram() {
|
|
188
|
-
return this.
|
|
284
|
+
return this.provider === MessagingChannel.Instagram;
|
|
189
285
|
}
|
|
190
286
|
isTwitter() {
|
|
191
|
-
return this.
|
|
287
|
+
return this.provider === MessagingChannel.Twitter;
|
|
192
288
|
}
|
|
193
289
|
isWhatsapp() {
|
|
194
|
-
return this.
|
|
195
|
-
}
|
|
196
|
-
isBotonicActionRedirect() {
|
|
197
|
-
var _a, _b;
|
|
198
|
-
return (_b = (_a = this.botonicAction) === null || _a === void 0 ? void 0 : _a.startsWith(BotonicAction.Redirect)) !== null && _b !== void 0 ? _b : false;
|
|
199
|
-
}
|
|
200
|
-
getBotonicActionPayload(action) {
|
|
201
|
-
var _a;
|
|
202
|
-
return (_a = this.botonicAction) === null || _a === void 0 ? void 0 : _a.split(action + ':')[1];
|
|
290
|
+
return this.provider === MessagingChannel.Whatsapp;
|
|
203
291
|
}
|
|
204
|
-
/** True when the session has a flow thread id. */
|
|
205
292
|
hasFlowThreadId() {
|
|
206
|
-
|
|
293
|
+
const ft = this.flowThreadId;
|
|
294
|
+
return ft != null && ft !== '';
|
|
207
295
|
}
|
|
208
296
|
}
|
|
209
297
|
//# sourceMappingURL=botonic-context-session.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"botonic-context-session.js","sourceRoot":"","sources":["../../../../../../../../../libs/botonic/shared/src/lib/domain/server/botonic-context/botonic-context-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"botonic-context-session.js","sourceRoot":"","sources":["../../../../../../../../../libs/botonic/shared/src/lib/domain/server/botonic-context/botonic-context-session.ts"],"names":[],"mappings":"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"}
|