@useknest/widget-core 0.1.0-beta.9 → 0.1.1

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.
@@ -0,0 +1,44 @@
1
+ import { Attachment } from './types';
2
+ /** Client-side validation before attempting upload. Returns an error message or null. */
3
+ export declare function validateAttachment(file: File): string | null;
4
+ /**
5
+ * Requests a presigned upload URL from the server.
6
+ * The server validates the request and generates a short-lived signed URL via the service role key.
7
+ */
8
+ export declare function requestUploadUrl({ publishableApiKey, threadId, fileName, fileType, fileSize, baseUrl }: {
9
+ publishableApiKey: string;
10
+ threadId: string;
11
+ fileName: string;
12
+ fileType: string;
13
+ fileSize: number;
14
+ baseUrl?: string;
15
+ }): Promise<{
16
+ uploadUrl: string;
17
+ token: string;
18
+ storagePath: string;
19
+ }>;
20
+ /**
21
+ * PUTs a file directly to Supabase Storage using a presigned upload URL.
22
+ * The server never touches the file bytes.
23
+ */
24
+ export declare function uploadToStorage(uploadUrl: string, file: File): Promise<void>;
25
+ /**
26
+ * Orchestrates the two-step upload: request presigned URL → PUT file to storage.
27
+ * Returns attachment metadata (without a signed download URL — resolved lazily at display time).
28
+ */
29
+ export declare function uploadAttachment({ publishableApiKey, threadId, file, baseUrl }: {
30
+ publishableApiKey: string;
31
+ threadId: string;
32
+ file: File;
33
+ baseUrl?: string;
34
+ }): Promise<Attachment>;
35
+ /**
36
+ * Fetches a temporary signed download URL for an attachment via the widget API.
37
+ * Used for lazy URL resolution in the ChatMessage component.
38
+ */
39
+ export declare function fetchSignedUrl({ publishableApiKey, storagePath, baseUrl }: {
40
+ publishableApiKey: string;
41
+ storagePath: string;
42
+ baseUrl?: string;
43
+ }): Promise<string | null>;
44
+ //# sourceMappingURL=attachments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachments.d.ts","sourceRoot":"","sources":["../src/attachments.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,yFAAyF;AACzF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAQ5D;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,EACtC,iBAAiB,EACjB,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,EAAE;IACF,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAoBrE;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAUlF;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,EACtC,iBAAiB,EACjB,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,EAAE;IACF,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,UAAU,CAAC,CAatB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,EACpC,iBAAiB,EACjB,WAAW,EACX,OAAO,EACP,EAAE;IACF,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmBzB"}
package/dist/auth.d.ts CHANGED
@@ -4,10 +4,10 @@ import { SupabaseClient } from '@supabase/supabase-js';
4
4
  * This must be called before sending chat messages.
5
5
  *
6
6
  * @param supabaseUrl - The Supabase project URL
7
- * @param supabaseAnonKey - The Supabase anonymous/public key
7
+ * @param supabasePublishableKey - The Supabase publishable key
8
8
  * @returns Promise resolving to true if auth succeeded, false otherwise
9
9
  */
10
- export declare function initWidgetAuth(supabaseUrl: string, supabaseAnonKey: string): Promise<boolean>;
10
+ export declare function initWidgetAuth(supabaseUrl: string, supabasePublishableKey: string): Promise<boolean>;
11
11
  /**
12
12
  * Gets the current access token for API requests.
13
13
  * Returns null if not authenticated.
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAM1E;;;;;;;GAOG;AACH,wBAAsB,cAAc,CACnC,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,GACrB,OAAO,CAAC,OAAO,CAAC,CAmDlB;AAED;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAU7D;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,GAAG,IAAI,CAEzD"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAM1E;;;;;;;GAOG;AACH,wBAAsB,cAAc,CACnC,WAAW,EAAE,MAAM,EACnB,sBAAsB,EAAE,MAAM,GAC5B,OAAO,CAAC,OAAO,CAAC,CAmDlB;AAED;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAU7D;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,GAAG,IAAI,CAEzD"}
@@ -1,7 +1,7 @@
1
1
  export declare const DEFAULT_BASE_URL = "https://useknest.com";
2
2
  export declare const API_PATH = "/api/v1";
3
3
  export declare const PUBLIC_SUPABASE_URL = "https://lghrsugmhzpccpriqhrx.supabase.co";
4
- export declare const PUBLIC_SUPABASE_ANON_KEY = "sb_publishable_-KUwilDA78QM849gk662FA_kEzMezNS";
4
+ export declare const PUBLIC_SUPABASE_PUBLISHABLE_KEY = "sb_publishable_-KUwilDA78QM849gk662FA_kEzMezNS";
5
5
  /** Builds the chat messages API URL from a base URL. */
6
6
  export declare function getChatApiUrl(baseUrl?: string): string;
7
7
  /** Builds the widget config API URL from a base URL. */
@@ -14,4 +14,21 @@ export declare const DEFAULT_AVATAR_URL = "https://useknest.com/default-avatar.s
14
14
  export declare const DEFAULT_BRAND_COLOR = "#3b82f6";
15
15
  export declare const DEFAULT_WELCOME_MESSAGE = "Hi! I'm your AI assistant. I'm trained to answer questions about your documentation. How can I help you today?";
16
16
  export declare const DEFAULT_EXAMPLE_QUESTIONS: string[];
17
+ export declare const ALLOWED_IMAGE_TYPES: string[];
18
+ export declare const ALLOWED_DOCUMENT_TYPES: string[];
19
+ export declare const ALLOWED_ATTACHMENT_TYPES: string[];
20
+ export declare const ACCEPTED_FILE_TYPES_STRING: string;
21
+ export declare const MAX_ATTACHMENT_SIZE_BYTES: number;
22
+ export declare const MAX_ATTACHMENTS_PER_MESSAGE = 5;
23
+ /** Builds the attachment upload-URL endpoint from a base URL. */
24
+ export declare function getAttachmentUploadUrl(baseUrl?: string): string;
25
+ /** Builds the attachment signed-URL endpoint from a base URL. */
26
+ export declare function getAttachmentSignedUrlEndpoint(baseUrl?: string): string;
27
+ /** Returns true if the MIME type is a supported image type. */
28
+ export declare function isImageType(fileType: string): boolean;
29
+ export declare const WIDGET_Z_INDEX = 2147483647;
30
+ export declare const WIDGET_CLOSE_BTN_Z_INDEX = 2147483646;
31
+ export declare const HUMAN_TAKEOVER_CAPTION = "A human agent will get back to you shortly.";
32
+ export declare const PRESENCE_LABEL_WIDGET = "We are online";
33
+ export declare const PRESENCE_LABEL_DASHBOARD = "Customer online";
17
34
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,yBAAyB,CAAC;AACvD,eAAO,MAAM,QAAQ,YAAY,CAAC;AAIlC,eAAO,MAAM,mBAAmB,6CAA6C,CAAC;AAC9E,eAAO,MAAM,wBAAwB,mDAAmD,CAAC;AAEzF,wDAAwD;AACxD,wBAAgB,aAAa,CAAC,OAAO,GAAE,MAAyB,GAAG,MAAM,CAExE;AAED,wDAAwD;AACxD,wBAAgB,eAAe,CAAC,OAAO,GAAE,MAAyB,GAAG,MAAM,CAE1E;AAED,eAAO,MAAM,sBAAsB,oCAAoC,CAAC;AACxE,eAAO,MAAM,qBAAqB,2BAA2B,CAAC;AAC9D,eAAO,MAAM,kBAAkB,iGACgE,CAAC;AAChG,eAAO,MAAM,mBAAmB,mGACiE,CAAC;AAClG,eAAO,MAAM,kBAAkB,4CAA4C,CAAC;AAC5E,eAAO,MAAM,mBAAmB,YAAY,CAAC;AAC7C,eAAO,MAAM,uBAAuB,mHAC6E,CAAC;AAClH,eAAO,MAAM,yBAAyB,UAIrC,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,yBAAyB,CAAC;AACvD,eAAO,MAAM,QAAQ,YAAY,CAAC;AAIlC,eAAO,MAAM,mBAAmB,6CAA6C,CAAC;AAC9E,eAAO,MAAM,+BAA+B,mDAAmD,CAAC;AAEhG,wDAAwD;AACxD,wBAAgB,aAAa,CAAC,OAAO,GAAE,MAAyB,GAAG,MAAM,CAExE;AAED,wDAAwD;AACxD,wBAAgB,eAAe,CAAC,OAAO,GAAE,MAAyB,GAAG,MAAM,CAE1E;AAED,eAAO,MAAM,sBAAsB,oCAAoC,CAAC;AACxE,eAAO,MAAM,qBAAqB,2BAA2B,CAAC;AAC9D,eAAO,MAAM,kBAAkB,iGACgE,CAAC;AAChG,eAAO,MAAM,mBAAmB,mGACiE,CAAC;AAClG,eAAO,MAAM,kBAAkB,4CAA4C,CAAC;AAC5E,eAAO,MAAM,mBAAmB,YAAY,CAAC;AAC7C,eAAO,MAAM,uBAAuB,mHAC6E,CAAC;AAClH,eAAO,MAAM,yBAAyB,UAIrC,CAAC;AAEF,eAAO,MAAM,mBAAmB,UAAyD,CAAC;AAC1F,eAAO,MAAM,sBAAsB,UAIlC,CAAC;AACF,eAAO,MAAM,wBAAwB,UAAsD,CAAC;AAC5F,eAAO,MAAM,0BAA0B,QAAqC,CAAC;AAC7E,eAAO,MAAM,yBAAyB,QAAmB,CAAC;AAC1D,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAE7C,iEAAiE;AACjE,wBAAgB,sBAAsB,CAAC,OAAO,GAAE,MAAyB,GAAG,MAAM,CAEjF;AAED,iEAAiE;AACjE,wBAAgB,8BAA8B,CAAC,OAAO,GAAE,MAAyB,GAAG,MAAM,CAEzF;AAED,+DAA+D;AAC/D,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAErD;AAID,eAAO,MAAM,cAAc,aAAa,CAAC;AACzC,eAAO,MAAM,wBAAwB,aAAa,CAAC;AAEnD,eAAO,MAAM,sBAAsB,gDAAgD,CAAC;AACpF,eAAO,MAAM,qBAAqB,kBAAkB,CAAC;AACrD,eAAO,MAAM,wBAAwB,oBAAoB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,10 +1,16 @@
1
- export type { WidgetMode, MessageRole, Source, Message, ChatMessageRequest, ChatMessageResponse, ChatApiError, WidgetConfig, SSEEvent } from './types';
2
- export { DEFAULT_BASE_URL, API_PATH, getChatApiUrl, getConfigApiUrl, FALLBACK_ERROR_MESSAGE, DEFAULT_ERROR_MESSAGE, AUTH_ERROR_MESSAGE, USAGE_LIMIT_MESSAGE, DEFAULT_AVATAR_URL, DEFAULT_BRAND_COLOR, DEFAULT_WELCOME_MESSAGE, DEFAULT_EXAMPLE_QUESTIONS, PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY } from './constants';
1
+ export type { WidgetMode, MessageRole, Source, Attachment, Message, ChatMessageRequest, ChatMessageResponse, ChatApiError, WidgetConfig, SSEEvent, WidgetUser } from './types';
2
+ export { DEFAULT_BASE_URL, API_PATH, getChatApiUrl, getConfigApiUrl, FALLBACK_ERROR_MESSAGE, DEFAULT_ERROR_MESSAGE, AUTH_ERROR_MESSAGE, USAGE_LIMIT_MESSAGE, DEFAULT_AVATAR_URL, DEFAULT_BRAND_COLOR, DEFAULT_WELCOME_MESSAGE, DEFAULT_EXAMPLE_QUESTIONS, PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_PUBLISHABLE_KEY, ALLOWED_IMAGE_TYPES, ALLOWED_DOCUMENT_TYPES, ALLOWED_ATTACHMENT_TYPES, ACCEPTED_FILE_TYPES_STRING, MAX_ATTACHMENT_SIZE_BYTES, MAX_ATTACHMENTS_PER_MESSAGE, getAttachmentUploadUrl, getAttachmentSignedUrlEndpoint, isImageType, HUMAN_TAKEOVER_CAPTION, PRESENCE_LABEL_WIDGET, PRESENCE_LABEL_DASHBOARD } from './constants';
3
3
  export { fetchWidgetConfig } from './config';
4
4
  export type { ConfigResult, ConfigErrorType } from './config';
5
5
  export { streamChatMessage } from './streaming';
6
6
  export type { StreamCallbacks, StreamMessageOptions } from './streaming';
7
- export { formatContent } from './utils';
7
+ export { formatContent, formatFileSize } from './utils';
8
+ export { validateAttachment, requestUploadUrl, uploadToStorage, uploadAttachment, fetchSignedUrl } from './attachments';
8
9
  export { initWidgetAuth, getAccessToken, isAuthenticated, getSupabaseClient } from './auth';
9
10
  export { initWidgetSentry, captureWidgetException } from './sentry';
11
+ export { subscribeToThread } from './realtime';
12
+ export type { BroadcastMessage, PresenceOptions } from './realtime';
13
+ export { loadChatState, saveChatState, saveChatStateDebounced, clearChatState } from './persistence';
14
+ export type { PersistedChatState } from './persistence';
15
+ export { lockBodyScroll, unlockBodyScroll, MOBILE_BREAKPOINT_PX } from './scroll-lock';
10
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACX,UAAU,EACV,WAAW,EACX,MAAM,EACN,OAAO,EACP,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,MAAM,SAAS,CAAC;AAGjB,OAAO,EACN,gBAAgB,EAChB,QAAQ,EACR,aAAa,EACb,eAAe,EACf,sBAAsB,EACtB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,yBAAyB,EACzB,mBAAmB,EACnB,wBAAwB,EACxB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAG9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAGzE,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAGxC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAG5F,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACX,UAAU,EACV,WAAW,EACX,MAAM,EACN,UAAU,EACV,OAAO,EACP,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,MAAM,SAAS,CAAC;AAGjB,OAAO,EACN,gBAAgB,EAChB,QAAQ,EACR,aAAa,EACb,eAAe,EACf,sBAAsB,EACtB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,yBAAyB,EACzB,mBAAmB,EACnB,+BAA+B,EAC/B,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,EACxB,0BAA0B,EAC1B,yBAAyB,EACzB,2BAA2B,EAC3B,sBAAsB,EACtB,8BAA8B,EAC9B,WAAW,EACX,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,EACxB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAG9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAGzE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAGxD,OAAO,EACN,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAG5F,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAGpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGpE,OAAO,EACN,aAAa,EACb,aAAa,EACb,sBAAsB,EACtB,cAAc,EACd,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAGxD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC"}