@syntrologie/adapt-chatbot 2.25.2 → 2.26.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.
@@ -1,8 +1,13 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
+ var __export = (target, all) => {
4
+ for (var name in all)
5
+ __defProp(target, name, { get: all[name], enumerable: true });
6
+ };
3
7
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
8
 
5
9
  export {
10
+ __export,
6
11
  __publicField
7
12
  };
8
- //# sourceMappingURL=chunk-V6TY7KAL.js.map
13
+ //# sourceMappingURL=chunk-UVKRO5ER.js.map
@@ -1,4 +1,4 @@
1
- import "./chunk-V6TY7KAL.js";
1
+ import "./chunk-UVKRO5ER.js";
2
2
 
3
3
  // src/editor-lit.ts
4
4
  import { html, LitElement } from "lit";
package/dist/runtime.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  ChatAssistantLitMountable
3
- } from "./chunk-FI7F22ED.js";
4
- import "./chunk-V6TY7KAL.js";
3
+ } from "./chunk-O7RWNUVU.js";
4
+ import "./chunk-UVKRO5ER.js";
5
5
 
6
6
  // src/runtime.ts
7
7
  var runtime = {
package/dist/schema.d.ts CHANGED
@@ -5,8 +5,8 @@
5
5
  */
6
6
  import { z } from 'zod';
7
7
  export declare const configSchema: z.ZodObject<{
8
- /** Backend URL for the chat API endpoint */
9
- backendUrl: z.ZodString;
8
+ /** Backend URL for the chat API endpoint. "" for same-origin, or an absolute http(s):// URL. */
9
+ backendUrl: z.ZodUnion<[z.ZodString, z.ZodLiteral<"">]>;
10
10
  /** MLflow run ID for experiment tracking */
11
11
  mlflowRunId: z.ZodOptional<z.ZodString>;
12
12
  /** Greeting message shown when the chat opens */
@@ -15,32 +15,82 @@ export declare const configSchema: z.ZodObject<{
15
15
  maxHistory: z.ZodDefault<z.ZodNumber>;
16
16
  /** Quick-reply suggestions shown in the empty state */
17
17
  suggestions: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
18
+ /**
19
+ * Per-customer fallback card rendered when chat can't open (Turnstile
20
+ * failure, network error, etc.). The end-user is redirected to the
21
+ * customer's normal support path — no Cloudflare-branded challenge is
22
+ * ever shown.
23
+ */
24
+ fallback: z.ZodOptional<z.ZodObject<{
25
+ /** Header shown on the fallback card. Defaults to a generic "unavailable" copy. */
26
+ title: z.ZodOptional<z.ZodString>;
27
+ /** Body copy explaining the situation in the customer's voice. */
28
+ message: z.ZodOptional<z.ZodString>;
29
+ /** Label for the call-to-action link. If `ctaHref` is set this should be too. */
30
+ ctaLabel: z.ZodOptional<z.ZodString>;
31
+ /** Target of the CTA link — typically the customer's existing support path. */
32
+ ctaHref: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodLiteral<"">]>>;
33
+ }, "strict", z.ZodTypeAny, {
34
+ title?: string | undefined;
35
+ message?: string | undefined;
36
+ ctaLabel?: string | undefined;
37
+ ctaHref?: string | undefined;
38
+ }, {
39
+ title?: string | undefined;
40
+ message?: string | undefined;
41
+ ctaLabel?: string | undefined;
42
+ ctaHref?: string | undefined;
43
+ }>>;
18
44
  }, "strip", z.ZodTypeAny, {
19
45
  backendUrl: string;
20
46
  greeting: string;
21
47
  maxHistory: number;
22
- suggestions?: string[] | undefined;
23
48
  mlflowRunId?: string | undefined;
49
+ suggestions?: string[] | undefined;
50
+ fallback?: {
51
+ title?: string | undefined;
52
+ message?: string | undefined;
53
+ ctaLabel?: string | undefined;
54
+ ctaHref?: string | undefined;
55
+ } | undefined;
24
56
  }, {
25
57
  backendUrl: string;
26
- suggestions?: string[] | undefined;
27
58
  mlflowRunId?: string | undefined;
28
59
  greeting?: string | undefined;
29
60
  maxHistory?: number | undefined;
61
+ suggestions?: string[] | undefined;
62
+ fallback?: {
63
+ title?: string | undefined;
64
+ message?: string | undefined;
65
+ ctaLabel?: string | undefined;
66
+ ctaHref?: string | undefined;
67
+ } | undefined;
30
68
  }>;
31
69
  export type ChatbotConfigSchema = z.infer<typeof configSchema>;
32
70
  export declare function validateChatbotConfig(data: unknown): z.SafeParseReturnType<{
33
71
  backendUrl: string;
34
- suggestions?: string[] | undefined;
35
72
  mlflowRunId?: string | undefined;
36
73
  greeting?: string | undefined;
37
74
  maxHistory?: number | undefined;
75
+ suggestions?: string[] | undefined;
76
+ fallback?: {
77
+ title?: string | undefined;
78
+ message?: string | undefined;
79
+ ctaLabel?: string | undefined;
80
+ ctaHref?: string | undefined;
81
+ } | undefined;
38
82
  }, {
39
83
  backendUrl: string;
40
84
  greeting: string;
41
85
  maxHistory: number;
42
- suggestions?: string[] | undefined;
43
86
  mlflowRunId?: string | undefined;
87
+ suggestions?: string[] | undefined;
88
+ fallback?: {
89
+ title?: string | undefined;
90
+ message?: string | undefined;
91
+ ctaLabel?: string | undefined;
92
+ ctaHref?: string | undefined;
93
+ } | undefined;
44
94
  }>;
45
95
  /**
46
96
  * Tile widget definitions for unified JSON Schema generation.
@@ -51,8 +101,8 @@ export declare const tileWidgets: {
51
101
  widget: string;
52
102
  defName: string;
53
103
  propsSchema: z.ZodObject<{
54
- /** Backend URL for the chat API endpoint */
55
- backendUrl: z.ZodString;
104
+ /** Backend URL for the chat API endpoint. "" for same-origin, or an absolute http(s):// URL. */
105
+ backendUrl: z.ZodUnion<[z.ZodString, z.ZodLiteral<"">]>;
56
106
  /** MLflow run ID for experiment tracking */
57
107
  mlflowRunId: z.ZodOptional<z.ZodString>;
58
108
  /** Greeting message shown when the chat opens */
@@ -61,18 +111,56 @@ export declare const tileWidgets: {
61
111
  maxHistory: z.ZodDefault<z.ZodNumber>;
62
112
  /** Quick-reply suggestions shown in the empty state */
63
113
  suggestions: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
114
+ /**
115
+ * Per-customer fallback card rendered when chat can't open (Turnstile
116
+ * failure, network error, etc.). The end-user is redirected to the
117
+ * customer's normal support path — no Cloudflare-branded challenge is
118
+ * ever shown.
119
+ */
120
+ fallback: z.ZodOptional<z.ZodObject<{
121
+ /** Header shown on the fallback card. Defaults to a generic "unavailable" copy. */
122
+ title: z.ZodOptional<z.ZodString>;
123
+ /** Body copy explaining the situation in the customer's voice. */
124
+ message: z.ZodOptional<z.ZodString>;
125
+ /** Label for the call-to-action link. If `ctaHref` is set this should be too. */
126
+ ctaLabel: z.ZodOptional<z.ZodString>;
127
+ /** Target of the CTA link — typically the customer's existing support path. */
128
+ ctaHref: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodLiteral<"">]>>;
129
+ }, "strict", z.ZodTypeAny, {
130
+ title?: string | undefined;
131
+ message?: string | undefined;
132
+ ctaLabel?: string | undefined;
133
+ ctaHref?: string | undefined;
134
+ }, {
135
+ title?: string | undefined;
136
+ message?: string | undefined;
137
+ ctaLabel?: string | undefined;
138
+ ctaHref?: string | undefined;
139
+ }>>;
64
140
  }, "strip", z.ZodTypeAny, {
65
141
  backendUrl: string;
66
142
  greeting: string;
67
143
  maxHistory: number;
68
- suggestions?: string[] | undefined;
69
144
  mlflowRunId?: string | undefined;
145
+ suggestions?: string[] | undefined;
146
+ fallback?: {
147
+ title?: string | undefined;
148
+ message?: string | undefined;
149
+ ctaLabel?: string | undefined;
150
+ ctaHref?: string | undefined;
151
+ } | undefined;
70
152
  }, {
71
153
  backendUrl: string;
72
- suggestions?: string[] | undefined;
73
154
  mlflowRunId?: string | undefined;
74
155
  greeting?: string | undefined;
75
156
  maxHistory?: number | undefined;
157
+ suggestions?: string[] | undefined;
158
+ fallback?: {
159
+ title?: string | undefined;
160
+ message?: string | undefined;
161
+ ctaLabel?: string | undefined;
162
+ ctaHref?: string | undefined;
163
+ } | undefined;
76
164
  }>;
77
165
  }[];
78
166
  //# sourceMappingURL=schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,YAAY;IACvB,4CAA4C;;IAE5C,4CAA4C;;IAE5C,iDAAiD;;IAEjD,6DAA6D;;IAE7D,uDAAuD;;;;;;;;;;;;;;EAEvD,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAE/D,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO;;;;;;;;;;;;GAElD;AAMD;;;;GAIG;AACH,eAAO,MAAM,WAAW;;;;QA3BtB,4CAA4C;;QAE5C,4CAA4C;;QAE5C,iDAAiD;;QAEjD,6DAA6D;;QAE7D,uDAAuD;;;;;;;;;;;;;;;GAyBxD,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAsExB,eAAO,MAAM,YAAY;IACvB,gGAAgG;;IAEhG,4CAA4C;;IAE5C,iDAAiD;;IAEjD,6DAA6D;;IAE7D,uDAAuD;;IAEvD;;;;;OAKG;;QA3BD,mFAAmF;;QAEnF,kEAAkE;;QAElE,iFAAiF;;QAEjF,+EAA+E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuBjF,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAE/D,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;GAElD;AAMD;;;;GAIG;AACH,eAAO,MAAM,WAAW;;;;QAlCtB,gGAAgG;;QAEhG,4CAA4C;;QAE5C,iDAAiD;;QAEjD,6DAA6D;;QAE7D,uDAAuD;;QAEvD;;;;;WAKG;;YA3BD,mFAAmF;;YAEnF,kEAAkE;;YAElE,iFAAiF;;YAEjF,+EAA+E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8ClF,CAAC"}
package/dist/schema.js CHANGED
@@ -1,10 +1,42 @@
1
- import "./chunk-V6TY7KAL.js";
1
+ import "./chunk-UVKRO5ER.js";
2
2
 
3
3
  // src/schema.ts
4
4
  import { z } from "zod";
5
+ var backendUrlSchema = z.union(
6
+ [
7
+ z.string().url("backendUrl must be an absolute URL").regex(/^https?:\/\//, "backendUrl must use http or https"),
8
+ z.literal("")
9
+ ],
10
+ {
11
+ errorMap: () => ({
12
+ message: 'backendUrl must be either "" (same-origin) or an absolute http(s):// URL \u2014 relative paths are not allowed'
13
+ })
14
+ }
15
+ );
16
+ var fallbackHrefSchema = z.union(
17
+ [
18
+ z.string().url("fallback.ctaHref must be an absolute URL").regex(/^https?:\/\//, "fallback.ctaHref must use http or https"),
19
+ z.literal("")
20
+ ],
21
+ {
22
+ errorMap: () => ({
23
+ message: 'fallback.ctaHref must be either "" (same-origin) or an absolute http(s):// URL'
24
+ })
25
+ }
26
+ );
27
+ var fallbackSchema = z.object({
28
+ /** Header shown on the fallback card. Defaults to a generic "unavailable" copy. */
29
+ title: z.string().optional(),
30
+ /** Body copy explaining the situation in the customer's voice. */
31
+ message: z.string().optional(),
32
+ /** Label for the call-to-action link. If `ctaHref` is set this should be too. */
33
+ ctaLabel: z.string().optional(),
34
+ /** Target of the CTA link — typically the customer's existing support path. */
35
+ ctaHref: fallbackHrefSchema.optional()
36
+ }).strict();
5
37
  var configSchema = z.object({
6
- /** Backend URL for the chat API endpoint */
7
- backendUrl: z.string().min(1, "Backend URL is required"),
38
+ /** Backend URL for the chat API endpoint. "" for same-origin, or an absolute http(s):// URL. */
39
+ backendUrl: backendUrlSchema,
8
40
  /** MLflow run ID for experiment tracking */
9
41
  mlflowRunId: z.string().optional(),
10
42
  /** Greeting message shown when the chat opens */
@@ -12,7 +44,14 @@ var configSchema = z.object({
12
44
  /** Maximum number of history messages sent to the backend */
13
45
  maxHistory: z.number().int().min(1).max(100).default(20),
14
46
  /** Quick-reply suggestions shown in the empty state */
15
- suggestions: z.array(z.string()).optional()
47
+ suggestions: z.array(z.string()).optional(),
48
+ /**
49
+ * Per-customer fallback card rendered when chat can't open (Turnstile
50
+ * failure, network error, etc.). The end-user is redirected to the
51
+ * customer's normal support path — no Cloudflare-branded challenge is
52
+ * ever shown.
53
+ */
54
+ fallback: fallbackSchema.optional()
16
55
  });
17
56
  function validateChatbotConfig(data) {
18
57
  return configSchema.safeParse(data);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/schema.ts"],
4
- "sourcesContent": ["/**\n * Adaptive Chatbot - Config Schema\n *\n * Zod schema for validating chatbot widget configuration.\n */\n\nimport { z } from 'zod';\n\nexport const configSchema = z.object({\n /** Backend URL for the chat API endpoint */\n backendUrl: z.string().min(1, 'Backend URL is required'),\n /** MLflow run ID for experiment tracking */\n mlflowRunId: z.string().optional(),\n /** Greeting message shown when the chat opens */\n greeting: z.string().default('Hi! How can I help?'),\n /** Maximum number of history messages sent to the backend */\n maxHistory: z.number().int().min(1).max(100).default(20),\n /** Quick-reply suggestions shown in the empty state */\n suggestions: z.array(z.string()).optional(),\n});\n\nexport type ChatbotConfigSchema = z.infer<typeof configSchema>;\n\nexport function validateChatbotConfig(data: unknown) {\n return configSchema.safeParse(data);\n}\n\n// ============================================================================\n// Tile Widget Props Export\n// ============================================================================\n\n/**\n * Tile widget definitions for unified JSON Schema generation.\n * Maps widget IDs to their props validation schema so the build script\n * can inject if/then constraints on tile.props.\n */\nexport const tileWidgets = [\n {\n widget: 'adaptive-chatbot:assistant',\n defName: 'chatbotAssistantProps',\n propsSchema: configSchema,\n },\n];\n"],
5
- "mappings": ";;;AAMA,SAAS,SAAS;AAEX,IAAM,eAAe,EAAE,OAAO;AAAA;AAAA,EAEnC,YAAY,EAAE,OAAO,EAAE,IAAI,GAAG,yBAAyB;AAAA;AAAA,EAEvD,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA;AAAA,EAEjC,UAAU,EAAE,OAAO,EAAE,QAAQ,qBAAqB;AAAA;AAAA,EAElD,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,QAAQ,EAAE;AAAA;AAAA,EAEvD,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAC5C,CAAC;AAIM,SAAS,sBAAsB,MAAe;AACnD,SAAO,aAAa,UAAU,IAAI;AACpC;AAWO,IAAM,cAAc;AAAA,EACzB;AAAA,IACE,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AACF;",
4
+ "sourcesContent": ["/**\n * Adaptive Chatbot - Config Schema\n *\n * Zod schema for validating chatbot widget configuration.\n */\n\nimport { z } from 'zod';\n\n// The widget composes `${backendUrl}/api/adaptive/session` and\n// `${backendUrl}/api/adaptive/action`. backendUrl must be either:\n// - \"\" (empty string) \u2014 same-origin opt-in; resolves to /api/adaptive/*\n// - an absolute http:// or https:// URL \u2014 the chat backend's origin\n// A relative path like \"/api/chat\" produces \"/api/chat/api/adaptive/session\"\n// which 404s on the host SPA and surfaces as a generic SSE error.\n//\n// Split into a `.url()` branch + literal \"\" branch so zod-to-json-schema\n// produces an `anyOf` that AJV (used by `make sdk-validate`) enforces.\n// Refinements alone do not survive the JSON-schema translation.\nconst backendUrlSchema = z.union(\n [\n z\n .string()\n .url('backendUrl must be an absolute URL')\n .regex(/^https?:\\/\\//, 'backendUrl must use http or https'),\n z.literal(''),\n ],\n {\n errorMap: () => ({\n message:\n 'backendUrl must be either \"\" (same-origin) or an absolute http(s):// URL \u2014 relative paths are not allowed',\n }),\n }\n);\n\n// Per-customer fallback card. Rendered in place of the chat input when the\n// chat backend is unreachable for any reason (most commonly: Cloudflare\n// Turnstile bot-check failure for an end-user on a hardened browser / locked\n// network). The customer fills these in; we never show Cloudflare branding\n// to the end-user.\n//\n// `ctaHref` follows the same absolute-URL guard as `backendUrl` so a typo\n// like \"/support\" can't 404 on the host SPA \u2014 must be empty (same-origin)\n// or an absolute http(s):// URL pointing to the customer's existing support\n// path.\nconst fallbackHrefSchema = z.union(\n [\n z\n .string()\n .url('fallback.ctaHref must be an absolute URL')\n .regex(/^https?:\\/\\//, 'fallback.ctaHref must use http or https'),\n z.literal(''),\n ],\n {\n errorMap: () => ({\n message: 'fallback.ctaHref must be either \"\" (same-origin) or an absolute http(s):// URL',\n }),\n }\n);\n\n// `.strict()` so unknown keys are rejected at validation time (matches the\n// emitted JSON Schema's `additionalProperties: false`). Future fields land\n// here intentionally rather than silently slipping through and behaving\n// like feature stubs.\nconst fallbackSchema = z\n .object({\n /** Header shown on the fallback card. Defaults to a generic \"unavailable\" copy. */\n title: z.string().optional(),\n /** Body copy explaining the situation in the customer's voice. */\n message: z.string().optional(),\n /** Label for the call-to-action link. If `ctaHref` is set this should be too. */\n ctaLabel: z.string().optional(),\n /** Target of the CTA link \u2014 typically the customer's existing support path. */\n ctaHref: fallbackHrefSchema.optional(),\n })\n .strict();\n\nexport const configSchema = z.object({\n /** Backend URL for the chat API endpoint. \"\" for same-origin, or an absolute http(s):// URL. */\n backendUrl: backendUrlSchema,\n /** MLflow run ID for experiment tracking */\n mlflowRunId: z.string().optional(),\n /** Greeting message shown when the chat opens */\n greeting: z.string().default('Hi! How can I help?'),\n /** Maximum number of history messages sent to the backend */\n maxHistory: z.number().int().min(1).max(100).default(20),\n /** Quick-reply suggestions shown in the empty state */\n suggestions: z.array(z.string()).optional(),\n /**\n * Per-customer fallback card rendered when chat can't open (Turnstile\n * failure, network error, etc.). The end-user is redirected to the\n * customer's normal support path \u2014 no Cloudflare-branded challenge is\n * ever shown.\n */\n fallback: fallbackSchema.optional(),\n});\n\nexport type ChatbotConfigSchema = z.infer<typeof configSchema>;\n\nexport function validateChatbotConfig(data: unknown) {\n return configSchema.safeParse(data);\n}\n\n// ============================================================================\n// Tile Widget Props Export\n// ============================================================================\n\n/**\n * Tile widget definitions for unified JSON Schema generation.\n * Maps widget IDs to their props validation schema so the build script\n * can inject if/then constraints on tile.props.\n */\nexport const tileWidgets = [\n {\n widget: 'adaptive-chatbot:assistant',\n defName: 'chatbotAssistantProps',\n propsSchema: configSchema,\n },\n];\n"],
5
+ "mappings": ";;;AAMA,SAAS,SAAS;AAYlB,IAAM,mBAAmB,EAAE;AAAA,EACzB;AAAA,IACE,EACG,OAAO,EACP,IAAI,oCAAoC,EACxC,MAAM,gBAAgB,mCAAmC;AAAA,IAC5D,EAAE,QAAQ,EAAE;AAAA,EACd;AAAA,EACA;AAAA,IACE,UAAU,OAAO;AAAA,MACf,SACE;AAAA,IACJ;AAAA,EACF;AACF;AAYA,IAAM,qBAAqB,EAAE;AAAA,EAC3B;AAAA,IACE,EACG,OAAO,EACP,IAAI,0CAA0C,EAC9C,MAAM,gBAAgB,yCAAyC;AAAA,IAClE,EAAE,QAAQ,EAAE;AAAA,EACd;AAAA,EACA;AAAA,IACE,UAAU,OAAO;AAAA,MACf,SAAS;AAAA,IACX;AAAA,EACF;AACF;AAMA,IAAM,iBAAiB,EACpB,OAAO;AAAA;AAAA,EAEN,OAAO,EAAE,OAAO,EAAE,SAAS;AAAA;AAAA,EAE3B,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA;AAAA,EAE7B,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA;AAAA,EAE9B,SAAS,mBAAmB,SAAS;AACvC,CAAC,EACA,OAAO;AAEH,IAAM,eAAe,EAAE,OAAO;AAAA;AAAA,EAEnC,YAAY;AAAA;AAAA,EAEZ,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA;AAAA,EAEjC,UAAU,EAAE,OAAO,EAAE,QAAQ,qBAAqB;AAAA;AAAA,EAElD,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,QAAQ,EAAE;AAAA;AAAA,EAEvD,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO1C,UAAU,eAAe,SAAS;AACpC,CAAC;AAIM,SAAS,sBAAsB,MAAe;AACnD,SAAO,aAAa,UAAU,IAAI;AACpC;AAWO,IAAM,cAAc;AAAA,EACzB;AAAA,IACE,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AACF;",
6
6
  "names": []
7
7
  }
package/dist/types.d.ts CHANGED
@@ -1,12 +1,29 @@
1
1
  /**
2
2
  * Adaptive Chatbot - Types
3
3
  */
4
+ export interface ChatbotFallback {
5
+ /** Header shown on the fallback card. */
6
+ title?: string;
7
+ /** Body copy explaining the situation. */
8
+ message?: string;
9
+ /** Label for the CTA link. */
10
+ ctaLabel?: string;
11
+ /** Target — typically the customer's existing support path. */
12
+ ctaHref?: string;
13
+ }
4
14
  export interface ChatbotConfig {
5
15
  backendUrl: string;
6
16
  mlflowRunId?: string;
7
17
  greeting?: string;
8
18
  maxHistory?: number;
9
19
  suggestions?: string[];
20
+ /**
21
+ * Per-customer fallback card rendered when chat can't open. Endpoint of
22
+ * last resort for users whose browser/network fails the bot check; they
23
+ * see a polite "chat unavailable, contact support at …" instead of a
24
+ * raw Cloudflare challenge.
25
+ */
26
+ fallback?: ChatbotFallback;
10
27
  }
11
28
  export interface ActionHandle {
12
29
  id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,SAAS,EAAE,MAAM,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,SAAS,EAAE,MAAM,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IAClD,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAChE;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE;QACN,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;KAClE,CAAC;CACH;AAED,YAAY,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,eAAe;IAC9B,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,SAAS,EAAE,MAAM,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,SAAS,EAAE,MAAM,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IAClD,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAChE;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE;QACN,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;KAClE,CAAC;CACH;AAED,YAAY,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@syntrologie/adapt-chatbot",
3
- "version": "2.25.2",
3
+ "version": "2.26.0",
4
4
  "description": "Adaptive Chatbot - AI chat assistant widget with action execution",
5
5
  "license": "Proprietary",
6
6
  "private": false,
@@ -61,7 +61,8 @@
61
61
  "dependencies": {
62
62
  "@a2ui/lit": "^0.10.0",
63
63
  "@a2ui/web_core": "^0.10.0",
64
- "@syntrologie/chat": "*"
64
+ "@syntrologie/chat": "*",
65
+ "@syntrologie/sdk-contracts": "*"
65
66
  },
66
67
  "peerDependencies": {
67
68
  "lit": "^3.0.0",