@airweave/connect-js 0.9.27
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/dist/index.cjs +75 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +165 -0
- package/dist/index.iife.js +75 -0
- package/dist/index.iife.js.map +1 -0
- package/dist/index.js +487 -0
- package/dist/index.js.map +1 -0
- package/dist/index.umd.js +75 -0
- package/dist/index.umd.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.umd.js","sources":["../../../src/lib/connection-utils.ts","../../../src/lib/icons.ts","../../../src/lib/theme-defaults.ts","../src/constants.ts","../src/Modal.ts","../src/PostMessage.ts","../src/AirweaveConnect.ts"],"sourcesContent":["import type {\n ConnectLabels,\n ConnectSessionMode,\n SourceConnectionStatus,\n} from \"./types\";\n\nexport function canConnect(mode: ConnectSessionMode): boolean {\n return mode === \"all\" || mode === \"connect\";\n}\n\nexport function getStatusColor(status: SourceConnectionStatus): string {\n switch (status) {\n case \"active\":\n return \"var(--connect-success)\";\n case \"syncing\":\n return \"var(--connect-primary)\";\n case \"pending_auth\":\n return \"#f59e0b\";\n case \"error\":\n return \"var(--connect-error)\";\n case \"inactive\":\n default:\n return \"var(--connect-text-muted)\";\n }\n}\n\nexport function getStatusLabel(\n status: SourceConnectionStatus,\n labels: Required<ConnectLabels>,\n): string {\n switch (status) {\n case \"active\":\n return labels.statusActive;\n case \"syncing\":\n return labels.statusSyncing;\n case \"pending_auth\":\n return labels.statusPendingAuth;\n case \"error\":\n return labels.statusError;\n case \"inactive\":\n return labels.statusInactive;\n default:\n return status;\n }\n}\n","/**\n * Get the URL for an app icon based on short_name and theme.\n * Icons are served from /icons/apps/{shortName}.svg\n */\nexport function getAppIconUrl(\n shortName: string,\n theme?: \"dark\" | \"light\",\n): string {\n // Sources with dark-mode-specific light variants\n const darkModeVariants = [\n \"attio\",\n \"notion\",\n \"clickup\",\n \"github\",\n \"linear\",\n \"zendesk\",\n ];\n\n if (theme === \"dark\" && darkModeVariants.includes(shortName)) {\n return `/icons/apps/${shortName}-light.svg`;\n }\n\n return `/icons/apps/${shortName}.svg`;\n}\n","import type { ConnectLabels, ConnectOptions, ThemeColors } from \"./types\";\n\n// Default theme colors\nexport const defaultDarkColors: Required<ThemeColors> = {\n background: \"#0f172a\",\n surface: \"#1e293b\",\n text: \"#ffffff\",\n textMuted: \"#9ca3af\",\n primary: \"#06b6d4\",\n primaryForeground: \"#ffffff\",\n primaryHover: \"#0891b2\",\n secondary: \"#334155\",\n secondaryHover: \"#475569\",\n border: \"#334155\",\n success: \"#22c55e\",\n error: \"#ef4444\",\n};\n\nexport const defaultLightColors: Required<ThemeColors> = {\n background: \"#ffffff\",\n surface: \"#f9fafb\",\n text: \"#111827\",\n textMuted: \"#6b7280\",\n primary: \"#0891b2\",\n primaryForeground: \"#ffffff\",\n primaryHover: \"#0e7490\",\n secondary: \"#e5e7eb\",\n secondaryHover: \"#d1d5db\",\n border: \"#e5e7eb\",\n success: \"#16a34a\",\n error: \"#dc2626\",\n};\n\n// Default labels\nexport const defaultLabels: Required<ConnectLabels> = {\n // Main headings\n sourcesHeading: \"Sources\",\n\n // Connection status labels\n statusActive: \"Active\",\n statusSyncing: \"Syncing\",\n statusPendingAuth: \"Pending Auth\",\n statusError: \"Error\",\n statusInactive: \"Inactive\",\n\n // Connection item\n entitiesCount: \"{count} entities\",\n\n // Menu actions\n menuReconnect: \"Reconnect\",\n menuDelete: \"Delete\",\n\n // Empty state\n emptyStateHeading: \"Connect your apps\",\n emptyStateDescription:\n \"Add context from your apps to start working with your data.\",\n\n // Connect mode error\n connectModeErrorHeading: \"Cannot View Connections\",\n connectModeErrorDescription:\n \"Viewing connections is not available in connect mode.\",\n\n // Load error\n loadErrorHeading: \"Failed to Load Connections\",\n\n // Error screen titles\n errorInvalidTokenTitle: \"Invalid Session\",\n errorExpiredTokenTitle: \"Session Expired\",\n errorNetworkTitle: \"Connection Error\",\n errorSessionMismatchTitle: \"Session Mismatch\",\n errorDefaultTitle: \"Error\",\n\n // Error screen descriptions\n errorInvalidTokenDescription:\n \"The session token is invalid. Please try again.\",\n errorExpiredTokenDescription:\n \"Your session has expired. Please refresh and try again.\",\n errorNetworkDescription:\n \"Unable to connect to the server. Please check your connection.\",\n errorSessionMismatchDescription:\n \"The session ID does not match. Please try again.\",\n\n // Buttons\n buttonRetry: \"Retry\",\n buttonClose: \"Close\",\n buttonConnect: \"Connect\",\n buttonBack: \"Back\",\n\n // Sources list (available apps)\n sourcesListHeading: \"Connect a Source\",\n sourcesListLoading: \"Loading sources...\",\n sourcesListEmpty: \"No sources available.\",\n\n // Footer\n poweredBy: \"Powered by\",\n\n // Source config view - connection name\n configureNameLabel: \"Connection name\",\n configureNameDescription: \"Optional. Give this connection a memorable name.\",\n configureNamePlaceholder: \"My {source} connection\",\n\n // Source config view - sections\n configureAuthSection: \"Authentication\",\n configureConfigSection: \"Configuration\",\n\n // Source config view - buttons and status\n buttonCreateConnection: \"Create connection\",\n buttonCreatingConnection: \"Creating...\",\n connectionFailed: \"Failed to create connection\",\n loadSourceDetailsFailed: \"Failed to load source details\",\n fieldRequired: \"This field is required\",\n fieldOptional: \"Optional\",\n\n // Auth method selector\n authMethodLabel: \"Authentication method\",\n authMethodDirect: \"Enter credentials\",\n authMethodDirectDescription: \"Manually enter API key or token\",\n authMethodOAuth: \"Connect with {source}\",\n authMethodOAuthDescription: \"Authorize via browser login\",\n\n // OAuth status UI\n oauthWaiting: \"Waiting for authorization...\",\n oauthWaitingDescription: \"Complete the sign-in in the popup window\",\n oauthPopupBlocked: \"Popup was blocked\",\n oauthPopupBlockedDescription:\n \"Your browser blocked the authentication popup. You can try again or open the link manually.\",\n buttonTryAgain: \"Try again\",\n buttonOpenLinkManually: \"Open link manually\",\n buttonConnectOAuth: \"Connect with {source}\",\n buttonConnecting: \"Connecting...\",\n\n // BYOC fields\n byocDescription:\n \"This integration requires you to provide your own OAuth app credentials.\",\n byocClientIdLabel: \"Client ID\",\n byocClientIdPlaceholder: \"Your OAuth app client ID\",\n byocClientSecretLabel: \"Client Secret\",\n byocClientSecretPlaceholder: \"Your OAuth app client secret\",\n\n // Empty state info\n welcomeInfoVerify:\n \"Your credentials are encrypted and your data is securely stored.\",\n welcomeInfoAccess:\n \"You control which apps to connect and can disconnect anytime.\",\n\n // Folder selection\n folderSelectionHeading: \"Select folders to sync\",\n folderSelectionStartSync: \"Start sync\",\n folderSelectionCount: \"{count} folders\",\n};\n\n// Default options\nexport const defaultOptions: Required<ConnectOptions> = {\n showConnectionName: false,\n enableFolderSelection: false,\n logoUrl: \"\",\n};\n","export const DEFAULT_CONNECT_URL = \"https://connect.airweave.ai\";\n","import type { ModalStyle } from \"./types\";\n\nexport interface ModalOptions {\n url: string;\n style?: ModalStyle;\n showCloseButton?: boolean;\n onClose: () => void;\n onIframeLoad: (iframe: HTMLIFrameElement) => void;\n}\n\nconst CONTAINER_ID = \"airweave-connect-root\";\nconst STYLES_ID = \"airweave-connect-styles\";\n\n/**\n * Manages the modal DOM element that contains the Connect iframe.\n * Handles creating the overlay, modal box, iframe, and close button.\n */\nexport class Modal {\n private container: HTMLDivElement | null = null;\n private iframe: HTMLIFrameElement | null = null;\n private options: ModalOptions;\n private keydownHandler: ((e: KeyboardEvent) => void) | null = null;\n\n constructor(options: ModalOptions) {\n this.options = options;\n }\n\n /**\n * Show the modal with entrance animation.\n */\n show(): void {\n this.createContainer();\n this.createModal();\n this.attachEventListeners();\n\n // Trigger entrance animation on next frame\n requestAnimationFrame(() => {\n this.container?.classList.add(\"airweave-visible\");\n });\n }\n\n /**\n * Destroy the modal and clean up DOM.\n */\n destroy(): void {\n this.detachEventListeners();\n\n if (this.container?.parentNode) {\n this.container.parentNode.removeChild(this.container);\n }\n\n this.container = null;\n this.iframe = null;\n }\n\n private createContainer(): void {\n // Remove existing container if present\n const existing = document.getElementById(CONTAINER_ID);\n if (existing) {\n existing.remove();\n }\n\n this.container = document.createElement(\"div\");\n this.container.id = CONTAINER_ID;\n this.injectStyles();\n document.body.appendChild(this.container);\n }\n\n private createModal(): void {\n if (!this.container) return;\n\n const { style, showCloseButton, url } = this.options;\n\n // Overlay (dark background)\n const overlay = document.createElement(\"div\");\n overlay.className = \"airweave-overlay\";\n overlay.addEventListener(\"click\", (e) => {\n if (e.target === overlay) {\n this.options.onClose();\n }\n });\n\n // Modal box\n const modalBox = document.createElement(\"div\");\n modalBox.className = \"airweave-modal\";\n modalBox.style.width = style?.width ?? \"90%\";\n modalBox.style.maxWidth = style?.maxWidth ?? \"400px\";\n modalBox.style.height = style?.height ?? \"80%\";\n modalBox.style.maxHeight = style?.maxHeight ?? \"540px\";\n modalBox.style.borderRadius = style?.borderRadius ?? \"16px\";\n\n // Close button\n if (showCloseButton) {\n const closeBtn = document.createElement(\"button\");\n closeBtn.className = \"airweave-close-btn\";\n closeBtn.innerHTML = \"×\";\n closeBtn.setAttribute(\"aria-label\", \"Close\");\n closeBtn.addEventListener(\"click\", () => this.options.onClose());\n modalBox.appendChild(closeBtn);\n }\n\n // Iframe\n this.iframe = document.createElement(\"iframe\");\n this.iframe.src = url;\n this.iframe.className = \"airweave-iframe\";\n this.iframe.title = \"Airweave Connect\";\n this.iframe.addEventListener(\"load\", () => {\n if (this.iframe) {\n this.options.onIframeLoad(this.iframe);\n }\n });\n\n modalBox.appendChild(this.iframe);\n overlay.appendChild(modalBox);\n this.container.appendChild(overlay);\n }\n\n private injectStyles(): void {\n // Check if styles already exist\n if (document.getElementById(STYLES_ID)) return;\n\n const style = document.createElement(\"style\");\n style.id = STYLES_ID;\n style.textContent = `\n #${CONTAINER_ID} {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 10000;\n pointer-events: none;\n }\n\n .airweave-overlay {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0;\n transition: opacity 0.15s ease-out;\n pointer-events: auto;\n }\n\n #${CONTAINER_ID}.airweave-visible .airweave-overlay {\n opacity: 1;\n }\n\n .airweave-modal {\n position: relative;\n background-color: white;\n overflow: hidden;\n box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);\n transform: scale(0.95) translateY(10px);\n opacity: 0;\n transition: transform 0.15s ease-out, opacity 0.15s ease-out;\n }\n\n #${CONTAINER_ID}.airweave-visible .airweave-modal {\n transform: scale(1) translateY(0);\n opacity: 1;\n }\n\n .airweave-close-btn {\n position: absolute;\n top: 12px;\n right: 12px;\n width: 32px;\n height: 32px;\n border: none;\n background: rgba(0, 0, 0, 0.1);\n border-radius: 50%;\n cursor: pointer;\n font-size: 20px;\n color: #666;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10;\n transition: background 0.2s;\n }\n\n .airweave-close-btn:hover {\n background: rgba(0, 0, 0, 0.2);\n }\n\n .airweave-iframe {\n width: 100%;\n height: 100%;\n border: none;\n }\n `;\n document.head.appendChild(style);\n }\n\n private attachEventListeners(): void {\n this.keydownHandler = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n this.options.onClose();\n }\n };\n document.addEventListener(\"keydown\", this.keydownHandler);\n }\n\n private detachEventListeners(): void {\n if (this.keydownHandler) {\n document.removeEventListener(\"keydown\", this.keydownHandler);\n this.keydownHandler = null;\n }\n }\n}\n","import type {\n ChildToParentMessage,\n ParentToChildMessage,\n} from \"airweave-connect/lib/types\";\n\nexport interface PostMessageHandlerOptions {\n iframe: HTMLIFrameElement;\n expectedOrigin: string;\n onMessage: (message: ChildToParentMessage) => void;\n}\n\n/**\n * Handles secure postMessage communication with the Connect iframe.\n * Validates message origins to prevent spoofed messages from malicious sites.\n */\nexport class PostMessageHandler {\n private iframe: HTMLIFrameElement;\n private expectedOrigin: string;\n private onMessage: (message: ChildToParentMessage) => void;\n private messageHandler: ((event: MessageEvent) => void) | null = null;\n\n constructor(options: PostMessageHandlerOptions) {\n this.iframe = options.iframe;\n this.expectedOrigin = options.expectedOrigin;\n this.onMessage = options.onMessage;\n this.attachListener();\n }\n\n /**\n * Send a message to the iframe with the expected origin.\n */\n send(message: ParentToChildMessage): void {\n this.iframe.contentWindow?.postMessage(message, this.expectedOrigin);\n }\n\n /**\n * Clean up event listeners.\n */\n destroy(): void {\n this.detachListener();\n }\n\n private attachListener(): void {\n this.messageHandler = (event: MessageEvent) => {\n // Validate origin to prevent spoofed messages\n if (event.origin !== this.expectedOrigin) {\n return;\n }\n\n const data = event.data as ChildToParentMessage;\n if (!data || typeof data !== \"object\" || !(\"type\" in data)) {\n return;\n }\n\n this.onMessage(data);\n };\n\n window.addEventListener(\"message\", this.messageHandler);\n }\n\n private detachListener(): void {\n if (this.messageHandler) {\n window.removeEventListener(\"message\", this.messageHandler);\n this.messageHandler = null;\n }\n }\n}\n","import type {\n ChildToParentMessage,\n ConnectTheme,\n NavigateView,\n ParentToChildMessage,\n SessionError,\n} from \"airweave-connect/lib/types\";\nimport { DEFAULT_CONNECT_URL } from \"./constants\";\nimport { Modal } from \"./Modal\";\nimport { PostMessageHandler } from \"./PostMessage\";\nimport type { AirweaveConnectConfig, AirweaveConnectState } from \"./types\";\n\n/**\n * AirweaveConnect - Vanilla JavaScript SDK for Airweave Connect.\n *\n * Provides a simple class-based API to open a modal containing the\n * Airweave Connect iframe, handle authentication, and receive callbacks\n * when connections are created.\n *\n * @example\n * ```javascript\n * const connect = new AirweaveConnect({\n * getSessionToken: async () => {\n * const res = await fetch('/api/connect-session');\n * const data = await res.json();\n * return data.session_token;\n * },\n * onSuccess: (connectionId) => {\n * console.log('Connected:', connectionId);\n * },\n * onError: (error) => {\n * console.error('Error:', error.message);\n * },\n * onClose: (reason) => {\n * console.log('Modal closed:', reason);\n * },\n * });\n *\n * document.getElementById('connect-btn').addEventListener('click', () => {\n * connect.open();\n * });\n * ```\n */\nexport class AirweaveConnect {\n private config: Required<\n Pick<AirweaveConnectConfig, \"connectUrl\" | \"showCloseButton\">\n > &\n AirweaveConnectConfig;\n private state: AirweaveConnectState;\n private modal: Modal | null = null;\n private postMessageHandler: PostMessageHandler | null = null;\n private expectedOrigin: string;\n\n constructor(config: AirweaveConnectConfig) {\n this.config = {\n connectUrl: DEFAULT_CONNECT_URL,\n showCloseButton: false,\n ...config,\n };\n\n this.state = {\n isOpen: false,\n isLoading: false,\n error: null,\n status: null,\n };\n\n this.expectedOrigin = this.deriveOrigin(this.config.connectUrl);\n }\n\n /**\n * Open the Connect modal.\n * Fetches a session token using the configured `getSessionToken` function,\n * then displays the modal with the Connect iframe.\n */\n async open(): Promise<void> {\n if (this.state.isOpen) return;\n\n this.state.isLoading = true;\n this.state.error = null;\n\n try {\n await this.config.getSessionToken();\n\n // Build iframe URL\n const iframeUrl = this.buildIframeUrl();\n\n // Create and show modal\n this.modal = new Modal({\n url: iframeUrl,\n style: this.config.modalStyle,\n showCloseButton: this.config.showCloseButton,\n onClose: () => this.handleClose(\"cancel\"),\n onIframeLoad: (iframe) => this.setupPostMessage(iframe),\n });\n\n this.modal.show();\n this.state.isOpen = true;\n } catch (err) {\n const sessionError: SessionError = {\n code: \"network_error\",\n message:\n err instanceof Error ? err.message : \"Failed to get session token\",\n };\n this.state.error = sessionError;\n this.config.onError?.(sessionError);\n } finally {\n this.state.isLoading = false;\n }\n }\n\n /**\n * Close the Connect modal.\n */\n close(): void {\n this.handleClose(\"cancel\");\n }\n\n /**\n * Dynamically update the theme while the modal is open.\n */\n setTheme(theme: ConnectTheme): void {\n this.config.theme = theme;\n this.sendToIframe({ type: \"SET_THEME\", theme });\n }\n\n /**\n * Navigate to a specific view within the Connect modal.\n */\n navigate(view: NavigateView): void {\n this.sendToIframe({ type: \"NAVIGATE\", view });\n }\n\n /**\n * Get the current state (read-only).\n */\n getState(): Readonly<AirweaveConnectState> {\n return { ...this.state };\n }\n\n /**\n * Update configuration options.\n * Useful for changing callbacks after initialization.\n */\n updateConfig(config: Partial<AirweaveConnectConfig>): void {\n this.config = { ...this.config, ...config };\n if (config.connectUrl) {\n this.expectedOrigin = this.deriveOrigin(config.connectUrl);\n }\n }\n\n /**\n * Clean up all resources.\n * Call this when you're done with the instance.\n */\n destroy(): void {\n this.handleClose(\"cancel\");\n }\n\n private deriveOrigin(url: string): string {\n try {\n return new URL(url).origin;\n } catch {\n // Fallback for invalid URLs - will cause postMessage to fail safely\n return url;\n }\n }\n\n private buildIframeUrl(): string {\n const url = new URL(this.config.connectUrl);\n if (this.config.theme?.mode) {\n url.searchParams.set(\"theme\", this.config.theme.mode);\n }\n return url.toString();\n }\n\n private handleClose(reason: \"success\" | \"cancel\" | \"error\"): void {\n if (!this.state.isOpen) return;\n\n this.modal?.destroy();\n this.modal = null;\n this.postMessageHandler?.destroy();\n this.postMessageHandler = null;\n this.state.isOpen = false;\n this.state.status = null;\n\n this.config.onClose?.(reason);\n }\n\n private setupPostMessage(iframe: HTMLIFrameElement): void {\n this.postMessageHandler = new PostMessageHandler({\n iframe,\n expectedOrigin: this.expectedOrigin,\n onMessage: (message) => this.handleMessage(message),\n });\n }\n\n private sendToIframe(message: ParentToChildMessage): void {\n this.postMessageHandler?.send(message);\n }\n\n private handleMessage(data: ChildToParentMessage): void {\n switch (data.type) {\n case \"CONNECT_READY\":\n // Iframe is ready - navigate to initial view if specified\n if (this.config.initialView) {\n this.sendToIframe({ type: \"NAVIGATE\", view: this.config.initialView });\n }\n break;\n\n case \"REQUEST_TOKEN\":\n // Re-fetch token from the customer's backend to handle expiry/refresh\n this.config\n .getSessionToken()\n .then((token) => {\n this.sendToIframe({\n type: \"TOKEN_RESPONSE\",\n requestId: data.requestId,\n token,\n theme: this.config.theme,\n });\n })\n .catch(() => {\n this.sendToIframe({\n type: \"TOKEN_ERROR\",\n requestId: data.requestId,\n error: \"Failed to refresh session token\",\n });\n });\n break;\n\n case \"STATUS_CHANGE\":\n this.state.status = data.status;\n this.config.onStatusChange?.(data.status);\n\n if (data.status.status === \"error\") {\n this.state.error = data.status.error;\n this.config.onError?.(data.status.error);\n }\n break;\n\n case \"CONNECTION_CREATED\":\n this.config.onConnectionCreated?.(data.connectionId);\n this.config.onSuccess?.(data.connectionId);\n break;\n\n case \"CLOSE\":\n this.handleClose(data.reason);\n break;\n }\n }\n}\n"],"names":["canConnect","mode","getStatusColor","status","getStatusLabel","labels","getAppIconUrl","shortName","theme","defaultDarkColors","defaultLightColors","defaultLabels","defaultOptions","DEFAULT_CONNECT_URL","CONTAINER_ID","STYLES_ID","Modal","options","__publicField","_a","existing","style","showCloseButton","url","overlay","e","modalBox","closeBtn","PostMessageHandler","message","event","data","AirweaveConnect","config","iframeUrl","iframe","err","sessionError","_b","view","reason","_d","_c","token","_f","_e","_h","_g"],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@airweave/connect-js",
|
|
3
|
+
"version": "0.9.27",
|
|
4
|
+
"description": "Vanilla JavaScript SDK for Airweave Connect",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.cjs",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"unpkg": "./dist/index.iife.js",
|
|
10
|
+
"jsdelivr": "./dist/index.iife.js",
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"import": {
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"default": "./dist/index.js"
|
|
16
|
+
},
|
|
17
|
+
"require": {
|
|
18
|
+
"types": "./dist/index.d.cts",
|
|
19
|
+
"default": "./dist/index.cjs"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"files": [
|
|
24
|
+
"dist"
|
|
25
|
+
],
|
|
26
|
+
"sideEffects": false,
|
|
27
|
+
"scripts": {
|
|
28
|
+
"dev": "vite build --watch",
|
|
29
|
+
"build": "tsc && vite build",
|
|
30
|
+
"lint": "eslint .",
|
|
31
|
+
"test": "vitest run",
|
|
32
|
+
"test:watch": "vitest",
|
|
33
|
+
"prepublishOnly": "npm run build"
|
|
34
|
+
},
|
|
35
|
+
"peerDependencies": {},
|
|
36
|
+
"devDependencies": {
|
|
37
|
+
"airweave-connect": "file:../..",
|
|
38
|
+
"typescript": "^5.8.3",
|
|
39
|
+
"vite": "^6.3.5",
|
|
40
|
+
"vite-plugin-dts": "^4.5.4",
|
|
41
|
+
"vitest": "^3.2.4",
|
|
42
|
+
"jsdom": "^27.0.0"
|
|
43
|
+
},
|
|
44
|
+
"keywords": [
|
|
45
|
+
"airweave",
|
|
46
|
+
"connect",
|
|
47
|
+
"javascript",
|
|
48
|
+
"vanilla",
|
|
49
|
+
"integrations",
|
|
50
|
+
"oauth",
|
|
51
|
+
"iframe"
|
|
52
|
+
],
|
|
53
|
+
"license": "MIT",
|
|
54
|
+
"repository": {
|
|
55
|
+
"type": "git",
|
|
56
|
+
"url": "https://github.com/airweave-ai/airweave"
|
|
57
|
+
},
|
|
58
|
+
"publishConfig": {
|
|
59
|
+
"access": "public"
|
|
60
|
+
}
|
|
61
|
+
}
|