@assistant-ui/react 0.10.23 → 0.10.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/dist/cloud/AssistantCloudThreadHistoryAdapter.d.ts +1 -1
  2. package/dist/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -1
  3. package/dist/cloud/AssistantCloudThreadHistoryAdapter.js.map +1 -1
  4. package/dist/cloud/auiV0.d.ts +1 -1
  5. package/dist/cloud/auiV0.d.ts.map +1 -1
  6. package/dist/cloud/auiV0.js.map +1 -1
  7. package/dist/cloud/index.d.ts +1 -1
  8. package/dist/cloud/index.d.ts.map +1 -1
  9. package/dist/cloud/index.js +1 -1
  10. package/dist/cloud/index.js.map +1 -1
  11. package/dist/cloud/useCloudThreadListRuntime.d.ts +1 -1
  12. package/dist/cloud/useCloudThreadListRuntime.d.ts.map +1 -1
  13. package/dist/cloud/useCloudThreadListRuntime.js.map +1 -1
  14. package/dist/context/react/AssistantContext.d.ts +23 -0
  15. package/dist/context/react/AssistantContext.d.ts.map +1 -1
  16. package/dist/context/react/AssistantContext.js.map +1 -1
  17. package/dist/context/react/ComposerContext.d.ts +64 -0
  18. package/dist/context/react/ComposerContext.d.ts.map +1 -1
  19. package/dist/context/react/ComposerContext.js.map +1 -1
  20. package/dist/context/react/MessageContext.d.ts +56 -0
  21. package/dist/context/react/MessageContext.d.ts.map +1 -1
  22. package/dist/context/react/MessageContext.js.map +1 -1
  23. package/dist/context/react/ThreadContext.d.ts +42 -0
  24. package/dist/context/react/ThreadContext.d.ts.map +1 -1
  25. package/dist/context/react/ThreadContext.js.map +1 -1
  26. package/dist/primitives/actionBar/ActionBarCopy.d.ts +42 -0
  27. package/dist/primitives/actionBar/ActionBarCopy.d.ts.map +1 -1
  28. package/dist/primitives/actionBar/ActionBarCopy.js.map +1 -1
  29. package/dist/primitives/actionBar/ActionBarEdit.d.ts +38 -0
  30. package/dist/primitives/actionBar/ActionBarEdit.d.ts.map +1 -1
  31. package/dist/primitives/actionBar/ActionBarEdit.js.map +1 -1
  32. package/dist/primitives/actionBar/ActionBarReload.d.ts +39 -0
  33. package/dist/primitives/actionBar/ActionBarReload.d.ts.map +1 -1
  34. package/dist/primitives/actionBar/ActionBarReload.js.map +1 -1
  35. package/dist/primitives/actionBar/ActionBarRoot.d.ts +56 -0
  36. package/dist/primitives/actionBar/ActionBarRoot.d.ts.map +1 -1
  37. package/dist/primitives/actionBar/ActionBarRoot.js.map +1 -1
  38. package/dist/primitives/attachment/AttachmentRoot.d.ts +18 -0
  39. package/dist/primitives/attachment/AttachmentRoot.d.ts.map +1 -1
  40. package/dist/primitives/attachment/AttachmentRoot.js.map +1 -1
  41. package/dist/primitives/branchPicker/BranchPickerCount.d.ts +17 -0
  42. package/dist/primitives/branchPicker/BranchPickerCount.d.ts.map +1 -1
  43. package/dist/primitives/branchPicker/BranchPickerCount.js.map +1 -1
  44. package/dist/primitives/branchPicker/BranchPickerNext.d.ts +17 -0
  45. package/dist/primitives/branchPicker/BranchPickerNext.d.ts.map +1 -1
  46. package/dist/primitives/branchPicker/BranchPickerNext.js.map +1 -1
  47. package/dist/primitives/branchPicker/BranchPickerPrevious.d.ts +38 -0
  48. package/dist/primitives/branchPicker/BranchPickerPrevious.d.ts.map +1 -1
  49. package/dist/primitives/branchPicker/BranchPickerPrevious.js.map +1 -1
  50. package/dist/primitives/branchPicker/BranchPickerRoot.d.ts +27 -0
  51. package/dist/primitives/branchPicker/BranchPickerRoot.d.ts.map +1 -1
  52. package/dist/primitives/branchPicker/BranchPickerRoot.js.map +1 -1
  53. package/dist/primitives/composer/ComposerAttachments.d.ts.map +1 -1
  54. package/dist/primitives/composer/ComposerAttachments.js +11 -8
  55. package/dist/primitives/composer/ComposerAttachments.js.map +1 -1
  56. package/dist/primitives/composer/ComposerCancel.d.ts +17 -0
  57. package/dist/primitives/composer/ComposerCancel.d.ts.map +1 -1
  58. package/dist/primitives/composer/ComposerCancel.js.map +1 -1
  59. package/dist/primitives/composer/ComposerInput.d.ts +72 -0
  60. package/dist/primitives/composer/ComposerInput.d.ts.map +1 -1
  61. package/dist/primitives/composer/ComposerInput.js.map +1 -1
  62. package/dist/primitives/composer/ComposerRoot.d.ts +19 -0
  63. package/dist/primitives/composer/ComposerRoot.d.ts.map +1 -1
  64. package/dist/primitives/composer/ComposerRoot.js.map +1 -1
  65. package/dist/primitives/composer/ComposerSend.d.ts +18 -0
  66. package/dist/primitives/composer/ComposerSend.d.ts.map +1 -1
  67. package/dist/primitives/composer/ComposerSend.js.map +1 -1
  68. package/dist/primitives/contentPart/ContentPartImage.d.ts +19 -0
  69. package/dist/primitives/contentPart/ContentPartImage.d.ts.map +1 -1
  70. package/dist/primitives/contentPart/ContentPartImage.js.map +1 -1
  71. package/dist/primitives/contentPart/ContentPartText.d.ts +34 -0
  72. package/dist/primitives/contentPart/ContentPartText.d.ts.map +1 -1
  73. package/dist/primitives/contentPart/ContentPartText.js.map +1 -1
  74. package/dist/primitives/message/MessageAttachments.d.ts.map +1 -1
  75. package/dist/primitives/message/MessageAttachments.js +11 -8
  76. package/dist/primitives/message/MessageAttachments.js.map +1 -1
  77. package/dist/primitives/message/MessageContent.d.ts +41 -0
  78. package/dist/primitives/message/MessageContent.d.ts.map +1 -1
  79. package/dist/primitives/message/MessageContent.js +14 -11
  80. package/dist/primitives/message/MessageContent.js.map +1 -1
  81. package/dist/primitives/message/MessageRoot.d.ts +22 -0
  82. package/dist/primitives/message/MessageRoot.d.ts.map +1 -1
  83. package/dist/primitives/message/MessageRoot.js.map +1 -1
  84. package/dist/primitives/thread/ThreadMessages.d.ts +44 -0
  85. package/dist/primitives/thread/ThreadMessages.d.ts.map +1 -1
  86. package/dist/primitives/thread/ThreadMessages.js +5 -2
  87. package/dist/primitives/thread/ThreadMessages.js.map +1 -1
  88. package/dist/primitives/thread/ThreadRoot.d.ts +19 -0
  89. package/dist/primitives/thread/ThreadRoot.d.ts.map +1 -1
  90. package/dist/primitives/thread/ThreadRoot.js.map +1 -1
  91. package/dist/primitives/thread/ThreadViewport.d.ts +24 -0
  92. package/dist/primitives/thread/ThreadViewport.d.ts.map +1 -1
  93. package/dist/primitives/thread/ThreadViewport.js.map +1 -1
  94. package/dist/primitives/threadList/ThreadListItems.d.ts.map +1 -1
  95. package/dist/primitives/threadList/ThreadListItems.js +12 -9
  96. package/dist/primitives/threadList/ThreadListItems.js.map +1 -1
  97. package/dist/runtimes/adapters/attachment/AttachmentAdapter.d.ts +54 -0
  98. package/dist/runtimes/adapters/attachment/AttachmentAdapter.d.ts.map +1 -1
  99. package/dist/runtimes/adapters/feedback/FeedbackAdapter.d.ts +33 -0
  100. package/dist/runtimes/adapters/feedback/FeedbackAdapter.d.ts.map +1 -1
  101. package/dist/runtimes/adapters/speech/SpeechAdapterTypes.d.ts +47 -0
  102. package/dist/runtimes/adapters/speech/SpeechAdapterTypes.d.ts.map +1 -1
  103. package/dist/runtimes/local/LocalRuntimeOptions.d.ts +2 -2
  104. package/dist/runtimes/local/LocalRuntimeOptions.d.ts.map +1 -1
  105. package/dist/runtimes/local/LocalRuntimeOptions.js.map +1 -1
  106. package/dist/runtimes/remote-thread-list/adapter/cloud.d.ts +1 -1
  107. package/dist/runtimes/remote-thread-list/adapter/cloud.d.ts.map +1 -1
  108. package/dist/runtimes/remote-thread-list/adapter/cloud.js +1 -1
  109. package/dist/runtimes/remote-thread-list/adapter/cloud.js.map +1 -1
  110. package/dist/tests/setup.js +8 -8
  111. package/dist/tests/setup.js.map +1 -1
  112. package/package.json +8 -7
  113. package/src/cloud/AssistantCloudThreadHistoryAdapter.tsx +1 -1
  114. package/src/cloud/auiV0.ts +1 -1
  115. package/src/cloud/index.ts +1 -1
  116. package/src/cloud/useCloudThreadListRuntime.tsx +1 -1
  117. package/src/context/react/AssistantContext.ts +23 -0
  118. package/src/context/react/ComposerContext.ts +64 -0
  119. package/src/context/react/MessageContext.ts +56 -0
  120. package/src/context/react/ThreadContext.ts +42 -0
  121. package/src/primitives/actionBar/ActionBarCopy.tsx +42 -0
  122. package/src/primitives/actionBar/ActionBarEdit.tsx +38 -0
  123. package/src/primitives/actionBar/ActionBarReload.tsx +39 -0
  124. package/src/primitives/actionBar/ActionBarRoot.tsx +38 -0
  125. package/src/primitives/attachment/AttachmentRoot.tsx +18 -0
  126. package/src/primitives/branchPicker/BranchPickerCount.tsx +17 -0
  127. package/src/primitives/branchPicker/BranchPickerNext.tsx +17 -0
  128. package/src/primitives/branchPicker/BranchPickerPrevious.tsx +38 -0
  129. package/src/primitives/branchPicker/BranchPickerRoot.tsx +22 -0
  130. package/src/primitives/composer/ComposerAttachments.tsx +11 -7
  131. package/src/primitives/composer/ComposerCancel.tsx +17 -0
  132. package/src/primitives/composer/ComposerInput.tsx +44 -0
  133. package/src/primitives/composer/ComposerRoot.tsx +19 -0
  134. package/src/primitives/composer/ComposerSend.tsx +18 -0
  135. package/src/primitives/contentPart/ContentPartImage.tsx +19 -0
  136. package/src/primitives/contentPart/ContentPartText.tsx +25 -0
  137. package/src/primitives/message/MessageAttachments.tsx +11 -7
  138. package/src/primitives/message/MessageContent.tsx +54 -18
  139. package/src/primitives/message/MessageRoot.tsx +22 -0
  140. package/src/primitives/thread/ThreadMessages.tsx +52 -4
  141. package/src/primitives/thread/ThreadRoot.tsx +19 -0
  142. package/src/primitives/thread/ThreadViewport.tsx +19 -0
  143. package/src/primitives/threadList/ThreadListItems.tsx +12 -8
  144. package/src/runtimes/adapters/attachment/AttachmentAdapter.ts +56 -0
  145. package/src/runtimes/adapters/feedback/FeedbackAdapter.ts +33 -0
  146. package/src/runtimes/adapters/speech/SpeechAdapterTypes.ts +47 -0
  147. package/src/runtimes/local/LocalRuntimeOptions.tsx +1 -1
  148. package/src/runtimes/remote-thread-list/adapter/cloud.tsx +1 -1
  149. package/dist/cloud/AssistantCloud.d.ts +0 -15
  150. package/dist/cloud/AssistantCloud.d.ts.map +0 -1
  151. package/dist/cloud/AssistantCloud.js +0 -25
  152. package/dist/cloud/AssistantCloud.js.map +0 -1
  153. package/dist/cloud/AssistantCloudAPI.d.ts +0 -28
  154. package/dist/cloud/AssistantCloudAPI.d.ts.map +0 -1
  155. package/dist/cloud/AssistantCloudAPI.js +0 -87
  156. package/dist/cloud/AssistantCloudAPI.js.map +0 -1
  157. package/dist/cloud/AssistantCloudAuthStrategy.d.ts +0 -30
  158. package/dist/cloud/AssistantCloudAuthStrategy.d.ts.map +0 -1
  159. package/dist/cloud/AssistantCloudAuthStrategy.js +0 -139
  160. package/dist/cloud/AssistantCloudAuthStrategy.js.map +0 -1
  161. package/dist/cloud/AssistantCloudAuthTokens.d.ts +0 -11
  162. package/dist/cloud/AssistantCloudAuthTokens.d.ts.map +0 -1
  163. package/dist/cloud/AssistantCloudAuthTokens.js +0 -13
  164. package/dist/cloud/AssistantCloudAuthTokens.js.map +0 -1
  165. package/dist/cloud/AssistantCloudFiles.d.ts +0 -27
  166. package/dist/cloud/AssistantCloudFiles.d.ts.map +0 -1
  167. package/dist/cloud/AssistantCloudFiles.js +0 -25
  168. package/dist/cloud/AssistantCloudFiles.js.map +0 -1
  169. package/dist/cloud/AssistantCloudRuns.d.ts +0 -26
  170. package/dist/cloud/AssistantCloudRuns.d.ts.map +0 -1
  171. package/dist/cloud/AssistantCloudRuns.js +0 -39
  172. package/dist/cloud/AssistantCloudRuns.js.map +0 -1
  173. package/dist/cloud/AssistantCloudThreadMessages.d.ts +0 -30
  174. package/dist/cloud/AssistantCloudThreadMessages.d.ts.map +0 -1
  175. package/dist/cloud/AssistantCloudThreadMessages.js +0 -21
  176. package/dist/cloud/AssistantCloudThreadMessages.js.map +0 -1
  177. package/dist/cloud/AssistantCloudThreads.d.ts +0 -48
  178. package/dist/cloud/AssistantCloudThreads.d.ts.map +0 -1
  179. package/dist/cloud/AssistantCloudThreads.js +0 -30
  180. package/dist/cloud/AssistantCloudThreads.js.map +0 -1
  181. package/src/cloud/AssistantCloud.tsx +0 -22
  182. package/src/cloud/AssistantCloudAPI.tsx +0 -121
  183. package/src/cloud/AssistantCloudAuthStrategy.tsx +0 -193
  184. package/src/cloud/AssistantCloudAuthTokens.tsx +0 -13
  185. package/src/cloud/AssistantCloudFiles.tsx +0 -48
  186. package/src/cloud/AssistantCloudRuns.tsx +0 -45
  187. package/src/cloud/AssistantCloudThreadMessages.tsx +0 -48
  188. package/src/cloud/AssistantCloudThreads.tsx +0 -79
  189. package/src/tests/AssistantCloudFiles.test.ts +0 -564
@@ -4,12 +4,68 @@ import {
4
4
  CompleteAttachment,
5
5
  } from "../../../types/AttachmentTypes";
6
6
 
7
+ /**
8
+ * Interface for handling file attachments in the assistant runtime.
9
+ *
10
+ * AttachmentAdapter provides methods for managing file attachments throughout
11
+ * their lifecycle: adding, processing, removing, and sending attachments with messages.
12
+ *
13
+ * @example
14
+ * ```tsx
15
+ * const imageAdapter: AttachmentAdapter = {
16
+ * accept: "image/*",
17
+ *
18
+ * async add({ file }) {
19
+ * return {
20
+ * id: generateId(),
21
+ * type: "image",
22
+ * name: file.name,
23
+ * file,
24
+ * status: { type: "uploading" }
25
+ * };
26
+ * },
27
+ *
28
+ * async remove(attachment) {
29
+ * // Clean up resources
30
+ * },
31
+ *
32
+ * async send(attachment) {
33
+ * const url = await uploadFile(attachment.file);
34
+ * return { ...attachment, url, status: { type: "complete" } };
35
+ * }
36
+ * };
37
+ * ```
38
+ */
7
39
  export type AttachmentAdapter = {
40
+ /**
41
+ * MIME type pattern for accepted file types (e.g., "image/*", "text/plain").
42
+ */
8
43
  accept: string;
9
44
 
45
+ /**
46
+ * Processes a file when it's added as an attachment.
47
+ *
48
+ * @param state - Object containing the file to process
49
+ * @param state.file - The File object to be attached
50
+ * @returns Promise or AsyncGenerator yielding PendingAttachment states
51
+ */
10
52
  add(state: {
11
53
  file: File;
12
54
  }): Promise<PendingAttachment> | AsyncGenerator<PendingAttachment, void>;
55
+
56
+ /**
57
+ * Removes an attachment and cleans up associated resources.
58
+ *
59
+ * @param attachment - The attachment to remove
60
+ * @returns Promise that resolves when removal is complete
61
+ */
13
62
  remove(attachment: Attachment): Promise<void>;
63
+
64
+ /**
65
+ * Finalizes an attachment for sending with a message.
66
+ *
67
+ * @param attachment - The pending attachment to finalize
68
+ * @returns Promise resolving to the complete attachment
69
+ */
14
70
  send(attachment: PendingAttachment): Promise<CompleteAttachment>;
15
71
  };
@@ -1,10 +1,43 @@
1
1
  import { ThreadMessage } from "../../../types/AssistantTypes";
2
2
 
3
+ /**
4
+ * Feedback data structure for rating messages.
5
+ */
3
6
  type FeedbackAdapterFeedback = {
7
+ /** The message being rated */
4
8
  message: ThreadMessage;
9
+ /** The type of feedback being provided */
5
10
  type: "positive" | "negative";
6
11
  };
7
12
 
13
+ /**
14
+ * Interface for handling user feedback on assistant messages.
15
+ *
16
+ * FeedbackAdapter allows users to provide positive or negative feedback
17
+ * on assistant responses, which can be used for analytics, model improvement,
18
+ * or user experience tracking.
19
+ *
20
+ * @example
21
+ * ```tsx
22
+ * const feedbackAdapter: FeedbackAdapter = {
23
+ * submit: (feedback) => {
24
+ * console.log(`User gave ${feedback.type} feedback on message:`, feedback.message.id);
25
+ *
26
+ * // Send to analytics service
27
+ * analytics.track('message_feedback', {
28
+ * messageId: feedback.message.id,
29
+ * feedbackType: feedback.type,
30
+ * messageContent: feedback.message.content
31
+ * });
32
+ * }
33
+ * };
34
+ * ```
35
+ */
8
36
  export type FeedbackAdapter = {
37
+ /**
38
+ * Submits user feedback for a message.
39
+ *
40
+ * @param feedback - The feedback data containing message and rating type
41
+ */
9
42
  submit: (feedback: FeedbackAdapterFeedback) => void;
10
43
  };
@@ -1,24 +1,71 @@
1
1
  import { Unsubscribe } from "../../../types";
2
2
 
3
+ /**
4
+ * Types and interfaces for speech synthesis (text-to-speech) functionality.
5
+ */
3
6
  export namespace SpeechSynthesisAdapter {
7
+ /**
8
+ * Status of a speech synthesis operation.
9
+ */
4
10
  export type Status =
5
11
  | {
12
+ /** Speech is starting or currently running */
6
13
  type: "starting" | "running";
7
14
  }
8
15
  | {
16
+ /** Speech has ended */
9
17
  type: "ended";
18
+ /** Reason why speech ended */
10
19
  reason: "finished" | "cancelled" | "error";
20
+ /** Error details if speech ended due to error */
11
21
  error?: unknown;
12
22
  };
13
23
 
24
+ /**
25
+ * Represents a single speech utterance with control and status tracking.
26
+ */
14
27
  export type Utterance = {
28
+ /** Current status of the utterance */
15
29
  status: Status;
30
+ /** Cancel the current speech */
16
31
  cancel: () => void;
32
+ /** Subscribe to status changes */
17
33
  subscribe: (callback: () => void) => Unsubscribe;
18
34
  };
19
35
  }
20
36
 
37
+ /**
38
+ * Interface for text-to-speech functionality.
39
+ *
40
+ * SpeechSynthesisAdapter provides the ability to convert text content
41
+ * into spoken audio, with status tracking and cancellation support.
42
+ *
43
+ * @example
44
+ * ```tsx
45
+ * const speechAdapter: SpeechSynthesisAdapter = {
46
+ * speak: (text) => {
47
+ * const utterance = new SpeechSynthesisUtterance(text);
48
+ * speechSynthesis.speak(utterance);
49
+ *
50
+ * return {
51
+ * status: { type: "starting" },
52
+ * cancel: () => speechSynthesis.cancel(),
53
+ * subscribe: (callback) => {
54
+ * utterance.addEventListener('end', callback);
55
+ * return () => utterance.removeEventListener('end', callback);
56
+ * }
57
+ * };
58
+ * }
59
+ * };
60
+ * ```
61
+ */
21
62
  export type SpeechSynthesisAdapter = {
63
+ /**
64
+ * Converts text to speech and returns an utterance object for control.
65
+ *
66
+ * @param text - The text content to speak
67
+ * @returns An utterance object with status and control methods
68
+ */
22
69
  speak: (text: string) => SpeechSynthesisAdapter.Utterance;
23
70
  };
24
71
 
@@ -4,7 +4,7 @@ import { ThreadMessageLike } from "../external-store";
4
4
  import { FeedbackAdapter } from "../adapters/feedback/FeedbackAdapter";
5
5
  import { SpeechSynthesisAdapter } from "../adapters/speech/SpeechAdapterTypes";
6
6
  import { ChatModelAdapter } from "./ChatModelAdapter";
7
- import { AssistantCloud } from "../../cloud";
7
+ import { AssistantCloud } from "assistant-cloud";
8
8
  import { SuggestionAdapter } from "../adapters";
9
9
 
10
10
  export type LocalRuntimeOptionsBase = {
@@ -6,7 +6,7 @@ import {
6
6
  useMemo,
7
7
  useRef,
8
8
  } from "react";
9
- import { AssistantCloud } from "../../../cloud";
9
+ import { AssistantCloud } from "assistant-cloud";
10
10
  import { RemoteThreadListAdapter } from "../types";
11
11
  import { useAssistantCloudThreadHistoryAdapter } from "../../../cloud/AssistantCloudThreadHistoryAdapter";
12
12
  import { RuntimeAdapterProvider } from "../../adapters/RuntimeAdapterProvider";
@@ -1,15 +0,0 @@
1
- import { AssistantCloudConfig } from "./AssistantCloudAPI";
2
- import { AssistantCloudAuthTokens } from "./AssistantCloudAuthTokens";
3
- import { AssistantCloudRuns } from "./AssistantCloudRuns";
4
- import { AssistantCloudThreads } from "./AssistantCloudThreads";
5
- import { AssistantCloudFiles } from "./AssistantCloudFiles";
6
- export declare class AssistantCloud {
7
- readonly threads: AssistantCloudThreads;
8
- readonly auth: {
9
- tokens: AssistantCloudAuthTokens;
10
- };
11
- readonly runs: AssistantCloudRuns;
12
- readonly files: AssistantCloudFiles;
13
- constructor(config: AssistantCloudConfig);
14
- }
15
- //# sourceMappingURL=AssistantCloud.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AssistantCloud.d.ts","sourceRoot":"","sources":["../../src/cloud/AssistantCloud.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,qBAAa,cAAc;IACzB,SAAgB,OAAO,wBAAC;IACxB,SAAgB,IAAI;;MAAC;IACrB,SAAgB,IAAI,qBAAC;IACrB,SAAgB,KAAK,sBAAC;gBAEV,MAAM,EAAE,oBAAoB;CASzC"}
@@ -1,25 +0,0 @@
1
- // src/cloud/AssistantCloud.tsx
2
- import { AssistantCloudAPI } from "./AssistantCloudAPI.js";
3
- import { AssistantCloudAuthTokens } from "./AssistantCloudAuthTokens.js";
4
- import { AssistantCloudRuns } from "./AssistantCloudRuns.js";
5
- import { AssistantCloudThreads } from "./AssistantCloudThreads.js";
6
- import { AssistantCloudFiles } from "./AssistantCloudFiles.js";
7
- var AssistantCloud = class {
8
- threads;
9
- auth;
10
- runs;
11
- files;
12
- constructor(config) {
13
- const api = new AssistantCloudAPI(config);
14
- this.threads = new AssistantCloudThreads(api);
15
- this.auth = {
16
- tokens: new AssistantCloudAuthTokens(api)
17
- };
18
- this.runs = new AssistantCloudRuns(api);
19
- this.files = new AssistantCloudFiles(api);
20
- }
21
- };
22
- export {
23
- AssistantCloud
24
- };
25
- //# sourceMappingURL=AssistantCloud.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/cloud/AssistantCloud.tsx"],"sourcesContent":["import { AssistantCloudAPI, AssistantCloudConfig } from \"./AssistantCloudAPI\";\nimport { AssistantCloudAuthTokens } from \"./AssistantCloudAuthTokens\";\nimport { AssistantCloudRuns } from \"./AssistantCloudRuns\";\nimport { AssistantCloudThreads } from \"./AssistantCloudThreads\";\nimport { AssistantCloudFiles } from \"./AssistantCloudFiles\";\n\nexport class AssistantCloud {\n public readonly threads;\n public readonly auth;\n public readonly runs;\n public readonly files;\n\n constructor(config: AssistantCloudConfig) {\n const api = new AssistantCloudAPI(config);\n this.threads = new AssistantCloudThreads(api);\n this.auth = {\n tokens: new AssistantCloudAuthTokens(api),\n };\n this.runs = new AssistantCloudRuns(api);\n this.files = new AssistantCloudFiles(api);\n }\n}\n"],"mappings":";AAAA,SAAS,yBAA+C;AACxD,SAAS,gCAAgC;AACzC,SAAS,0BAA0B;AACnC,SAAS,6BAA6B;AACtC,SAAS,2BAA2B;AAE7B,IAAM,iBAAN,MAAqB;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEhB,YAAY,QAA8B;AACxC,UAAM,MAAM,IAAI,kBAAkB,MAAM;AACxC,SAAK,UAAU,IAAI,sBAAsB,GAAG;AAC5C,SAAK,OAAO;AAAA,MACV,QAAQ,IAAI,yBAAyB,GAAG;AAAA,IAC1C;AACA,SAAK,OAAO,IAAI,mBAAmB,GAAG;AACtC,SAAK,QAAQ,IAAI,oBAAoB,GAAG;AAAA,EAC1C;AACF;","names":[]}
@@ -1,28 +0,0 @@
1
- import { AssistantCloudAuthStrategy } from "./AssistantCloudAuthStrategy";
2
- export type AssistantCloudConfig = {
3
- baseUrl: string;
4
- authToken: () => Promise<string | null>;
5
- } | {
6
- apiKey: string;
7
- userId: string;
8
- workspaceId: string;
9
- } | {
10
- baseUrl: string;
11
- anonymous: true;
12
- };
13
- type MakeRequestOptions = {
14
- method?: "POST" | "PUT" | "DELETE" | undefined;
15
- headers?: Record<string, string> | undefined;
16
- query?: Record<string, string | number | boolean> | undefined;
17
- body?: object | undefined;
18
- };
19
- export declare class AssistantCloudAPI {
20
- _auth: AssistantCloudAuthStrategy;
21
- _baseUrl: string;
22
- constructor(config: AssistantCloudConfig);
23
- initializeAuth(): Promise<boolean>;
24
- makeRawRequest(endpoint: string, options?: MakeRequestOptions): Promise<Response>;
25
- makeRequest(endpoint: string, options?: MakeRequestOptions): Promise<any>;
26
- }
27
- export {};
28
- //# sourceMappingURL=AssistantCloudAPI.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AssistantCloudAPI.d.ts","sourceRoot":"","sources":["../../src/cloud/AssistantCloudAPI.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAI3B,MAAM,8BAA8B,CAAC;AAEtC,MAAM,MAAM,oBAAoB,GAC5B;IACE,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CACzC,GACD;IACE,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB,GACD;IACE,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB,CAAC;AASN,KAAK,kBAAkB,GAAG;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,SAAS,CAAC;IAC9D,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B,CAAC;AAEF,qBAAa,iBAAiB;IACrB,KAAK,EAAE,0BAA0B,CAAC;IAClC,QAAQ,SAAC;gBAEJ,MAAM,EAAE,oBAAoB;IAqB3B,cAAc;IAId,cAAc,CACzB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,kBAAuB;IAiDrB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB;CAI5E"}
@@ -1,87 +0,0 @@
1
- // src/cloud/AssistantCloudAPI.tsx
2
- import {
3
- AssistantCloudJWTAuthStrategy,
4
- AssistantCloudAPIKeyAuthStrategy,
5
- AssistantCloudAnonymousAuthStrategy
6
- } from "./AssistantCloudAuthStrategy.js";
7
- var CloudAPIError = class extends Error {
8
- constructor(message) {
9
- super(message);
10
- this.name = "APIError";
11
- }
12
- };
13
- var AssistantCloudAPI = class {
14
- _auth;
15
- _baseUrl;
16
- constructor(config) {
17
- if ("authToken" in config) {
18
- this._baseUrl = config.baseUrl;
19
- this._auth = new AssistantCloudJWTAuthStrategy(config.authToken);
20
- } else if ("apiKey" in config) {
21
- this._baseUrl = "https://backend.assistant-api.com";
22
- this._auth = new AssistantCloudAPIKeyAuthStrategy(
23
- config.apiKey,
24
- config.userId,
25
- config.workspaceId
26
- );
27
- } else if ("anonymous" in config) {
28
- this._baseUrl = config.baseUrl;
29
- this._auth = new AssistantCloudAnonymousAuthStrategy(config.baseUrl);
30
- } else {
31
- throw new Error(
32
- "Invalid configuration: Must provide authToken, apiKey, or anonymous configuration"
33
- );
34
- }
35
- }
36
- async initializeAuth() {
37
- return !!this._auth.getAuthHeaders();
38
- }
39
- async makeRawRequest(endpoint, options = {}) {
40
- const authHeaders = await this._auth.getAuthHeaders();
41
- if (!authHeaders) throw new Error("Authorization failed");
42
- const headers = {
43
- ...authHeaders,
44
- ...options.headers,
45
- "Content-Type": "application/json"
46
- };
47
- const queryParams = new URLSearchParams();
48
- if (options.query) {
49
- for (const [key, value] of Object.entries(options.query)) {
50
- if (value === false) continue;
51
- if (value === true) {
52
- queryParams.set(key, "true");
53
- } else {
54
- queryParams.set(key, value.toString());
55
- }
56
- }
57
- }
58
- const url = new URL(`${this._baseUrl}/v1${endpoint}`);
59
- url.search = queryParams.toString();
60
- const response = await fetch(url, {
61
- method: options.method ?? "GET",
62
- headers,
63
- body: options.body ? JSON.stringify(options.body) : null
64
- });
65
- this._auth.readAuthHeaders(response.headers);
66
- if (!response.ok) {
67
- const text = await response.text();
68
- try {
69
- const body = JSON.parse(text);
70
- throw new CloudAPIError(body.message);
71
- } catch {
72
- throw new Error(
73
- `Request failed with status ${response.status}, ${text}`
74
- );
75
- }
76
- }
77
- return response;
78
- }
79
- async makeRequest(endpoint, options = {}) {
80
- const response = await this.makeRawRequest(endpoint, options);
81
- return response.json();
82
- }
83
- };
84
- export {
85
- AssistantCloudAPI
86
- };
87
- //# sourceMappingURL=AssistantCloudAPI.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/cloud/AssistantCloudAPI.tsx"],"sourcesContent":["import {\n AssistantCloudAuthStrategy,\n AssistantCloudJWTAuthStrategy,\n AssistantCloudAPIKeyAuthStrategy,\n AssistantCloudAnonymousAuthStrategy,\n} from \"./AssistantCloudAuthStrategy\";\n\nexport type AssistantCloudConfig =\n | {\n baseUrl: string;\n authToken: () => Promise<string | null>;\n }\n | {\n apiKey: string;\n userId: string;\n workspaceId: string;\n }\n | {\n baseUrl: string;\n anonymous: true;\n };\n\nclass CloudAPIError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"APIError\";\n }\n}\n\ntype MakeRequestOptions = {\n method?: \"POST\" | \"PUT\" | \"DELETE\" | undefined;\n headers?: Record<string, string> | undefined;\n query?: Record<string, string | number | boolean> | undefined;\n body?: object | undefined;\n};\n\nexport class AssistantCloudAPI {\n public _auth: AssistantCloudAuthStrategy;\n public _baseUrl;\n\n constructor(config: AssistantCloudConfig) {\n if (\"authToken\" in config) {\n this._baseUrl = config.baseUrl;\n this._auth = new AssistantCloudJWTAuthStrategy(config.authToken);\n } else if (\"apiKey\" in config) {\n this._baseUrl = \"https://backend.assistant-api.com\";\n this._auth = new AssistantCloudAPIKeyAuthStrategy(\n config.apiKey,\n config.userId,\n config.workspaceId,\n );\n } else if (\"anonymous\" in config) {\n this._baseUrl = config.baseUrl;\n this._auth = new AssistantCloudAnonymousAuthStrategy(config.baseUrl);\n } else {\n throw new Error(\n \"Invalid configuration: Must provide authToken, apiKey, or anonymous configuration\",\n );\n }\n }\n\n public async initializeAuth() {\n return !!this._auth.getAuthHeaders();\n }\n\n public async makeRawRequest(\n endpoint: string,\n options: MakeRequestOptions = {},\n ) {\n const authHeaders = await this._auth.getAuthHeaders();\n if (!authHeaders) throw new Error(\"Authorization failed\");\n\n const headers = {\n ...authHeaders,\n ...options.headers,\n \"Content-Type\": \"application/json\",\n };\n\n const queryParams = new URLSearchParams();\n if (options.query) {\n for (const [key, value] of Object.entries(options.query)) {\n if (value === false) continue;\n if (value === true) {\n queryParams.set(key, \"true\");\n } else {\n queryParams.set(key, value.toString());\n }\n }\n }\n\n const url = new URL(`${this._baseUrl}/v1${endpoint}`);\n url.search = queryParams.toString();\n\n const response = await fetch(url, {\n method: options.method ?? \"GET\",\n headers,\n body: options.body ? JSON.stringify(options.body) : null,\n });\n\n this._auth.readAuthHeaders(response.headers);\n\n if (!response.ok) {\n const text = await response.text();\n try {\n const body = JSON.parse(text);\n throw new CloudAPIError(body.message);\n } catch {\n throw new Error(\n `Request failed with status ${response.status}, ${text}`,\n );\n }\n }\n\n return response;\n }\n\n public async makeRequest(endpoint: string, options: MakeRequestOptions = {}) {\n const response = await this.makeRawRequest(endpoint, options);\n return response.json();\n }\n}\n"],"mappings":";AAAA;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAiBP,IAAM,gBAAN,cAA4B,MAAM;AAAA,EAChC,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;AASO,IAAM,oBAAN,MAAwB;AAAA,EACtB;AAAA,EACA;AAAA,EAEP,YAAY,QAA8B;AACxC,QAAI,eAAe,QAAQ;AACzB,WAAK,WAAW,OAAO;AACvB,WAAK,QAAQ,IAAI,8BAA8B,OAAO,SAAS;AAAA,IACjE,WAAW,YAAY,QAAQ;AAC7B,WAAK,WAAW;AAChB,WAAK,QAAQ,IAAI;AAAA,QACf,OAAO;AAAA,QACP,OAAO;AAAA,QACP,OAAO;AAAA,MACT;AAAA,IACF,WAAW,eAAe,QAAQ;AAChC,WAAK,WAAW,OAAO;AACvB,WAAK,QAAQ,IAAI,oCAAoC,OAAO,OAAO;AAAA,IACrE,OAAO;AACL,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAa,iBAAiB;AAC5B,WAAO,CAAC,CAAC,KAAK,MAAM,eAAe;AAAA,EACrC;AAAA,EAEA,MAAa,eACX,UACA,UAA8B,CAAC,GAC/B;AACA,UAAM,cAAc,MAAM,KAAK,MAAM,eAAe;AACpD,QAAI,CAAC,YAAa,OAAM,IAAI,MAAM,sBAAsB;AAExD,UAAM,UAAU;AAAA,MACd,GAAG;AAAA,MACH,GAAG,QAAQ;AAAA,MACX,gBAAgB;AAAA,IAClB;AAEA,UAAM,cAAc,IAAI,gBAAgB;AACxC,QAAI,QAAQ,OAAO;AACjB,iBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,QAAQ,KAAK,GAAG;AACxD,YAAI,UAAU,MAAO;AACrB,YAAI,UAAU,MAAM;AAClB,sBAAY,IAAI,KAAK,MAAM;AAAA,QAC7B,OAAO;AACL,sBAAY,IAAI,KAAK,MAAM,SAAS,CAAC;AAAA,QACvC;AAAA,MACF;AAAA,IACF;AAEA,UAAM,MAAM,IAAI,IAAI,GAAG,KAAK,QAAQ,MAAM,QAAQ,EAAE;AACpD,QAAI,SAAS,YAAY,SAAS;AAElC,UAAM,WAAW,MAAM,MAAM,KAAK;AAAA,MAChC,QAAQ,QAAQ,UAAU;AAAA,MAC1B;AAAA,MACA,MAAM,QAAQ,OAAO,KAAK,UAAU,QAAQ,IAAI,IAAI;AAAA,IACtD,CAAC;AAED,SAAK,MAAM,gBAAgB,SAAS,OAAO;AAE3C,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,OAAO,MAAM,SAAS,KAAK;AACjC,UAAI;AACF,cAAM,OAAO,KAAK,MAAM,IAAI;AAC5B,cAAM,IAAI,cAAc,KAAK,OAAO;AAAA,MACtC,QAAQ;AACN,cAAM,IAAI;AAAA,UACR,8BAA8B,SAAS,MAAM,KAAK,IAAI;AAAA,QACxD;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAa,YAAY,UAAkB,UAA8B,CAAC,GAAG;AAC3E,UAAM,WAAW,MAAM,KAAK,eAAe,UAAU,OAAO;AAC5D,WAAO,SAAS,KAAK;AAAA,EACvB;AACF;","names":[]}
@@ -1,30 +0,0 @@
1
- export type AssistantCloudAuthStrategy = {
2
- readonly strategy: "anon" | "jwt" | "api-key";
3
- getAuthHeaders(): Promise<Record<string, string> | false>;
4
- readAuthHeaders(headers: Headers): void;
5
- };
6
- export declare class AssistantCloudJWTAuthStrategy implements AssistantCloudAuthStrategy {
7
- #private;
8
- readonly strategy = "jwt";
9
- private cachedToken;
10
- private tokenExpiry;
11
- constructor(authTokenCallback: () => Promise<string | null>);
12
- getAuthHeaders(): Promise<Record<string, string> | false>;
13
- readAuthHeaders(headers: Headers): void;
14
- }
15
- export declare class AssistantCloudAPIKeyAuthStrategy implements AssistantCloudAuthStrategy {
16
- #private;
17
- readonly strategy = "api-key";
18
- constructor(apiKey: string, userId: string, workspaceId: string);
19
- getAuthHeaders(): Promise<Record<string, string>>;
20
- readAuthHeaders(): void;
21
- }
22
- export declare class AssistantCloudAnonymousAuthStrategy implements AssistantCloudAuthStrategy {
23
- readonly strategy = "anon";
24
- private baseUrl;
25
- private jwtStrategy;
26
- constructor(baseUrl: string);
27
- getAuthHeaders(): Promise<Record<string, string> | false>;
28
- readAuthHeaders(headers: Headers): void;
29
- }
30
- //# sourceMappingURL=AssistantCloudAuthStrategy.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AssistantCloudAuthStrategy.d.ts","sourceRoot":"","sources":["../../src/cloud/AssistantCloudAuthStrategy.tsx"],"names":[],"mappings":"AAAA,MAAM,MAAM,0BAA0B,GAAG;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;IAC9C,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC;IAC1D,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CACzC,CAAC;AAgCF,qBAAa,6BACX,YAAW,0BAA0B;;IAErC,SAAgB,QAAQ,SAAS;IAEjC,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,WAAW,CAAuB;gBAG9B,iBAAiB,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAI9C,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;IAsB/D,eAAe,CAAC,OAAO,EAAE,OAAO;CAYxC;AAED,qBAAa,gCACX,YAAW,0BAA0B;;IAErC,SAAgB,QAAQ,aAAa;gBAMzB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IAMlD,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAQvD,eAAe;CAGvB;AAID,qBAAa,mCACX,YAAW,0BAA0B;IAErC,SAAgB,QAAQ,UAAU;IAElC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAgC;gBAEvC,OAAO,EAAE,MAAM;IA8Dd,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;IAI/D,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;CAG/C"}
@@ -1,139 +0,0 @@
1
- // src/cloud/AssistantCloudAuthStrategy.tsx
2
- var getJwtExpiry = (jwt) => {
3
- try {
4
- const parts = jwt.split(".");
5
- const bodyPart = parts[1];
6
- if (!bodyPart) {
7
- throw new Error("Invalid JWT format");
8
- }
9
- let base64 = bodyPart.replace(/-/g, "+").replace(/_/g, "/");
10
- while (base64.length % 4 !== 0) {
11
- base64 += "=";
12
- }
13
- const payload = atob(base64);
14
- const payloadObj = JSON.parse(payload);
15
- const exp = payloadObj.exp;
16
- if (!exp || typeof exp !== "number") {
17
- throw new Error('JWT does not contain a valid "exp" field');
18
- }
19
- return exp * 1e3;
20
- } catch (error) {
21
- throw new Error("Unable to determine the token expiry: " + error);
22
- }
23
- };
24
- var AssistantCloudJWTAuthStrategy = class {
25
- strategy = "jwt";
26
- cachedToken = null;
27
- tokenExpiry = null;
28
- #authTokenCallback;
29
- constructor(authTokenCallback) {
30
- this.#authTokenCallback = authTokenCallback;
31
- }
32
- async getAuthHeaders() {
33
- const currentTime = Date.now();
34
- if (this.cachedToken && this.tokenExpiry && this.tokenExpiry - currentTime > 30 * 1e3) {
35
- return { Authorization: `Bearer ${this.cachedToken}` };
36
- }
37
- const newToken = await this.#authTokenCallback();
38
- if (!newToken) return false;
39
- this.cachedToken = newToken;
40
- this.tokenExpiry = getJwtExpiry(newToken);
41
- return { Authorization: `Bearer ${newToken}` };
42
- }
43
- readAuthHeaders(headers) {
44
- const authHeader = headers.get("Authorization");
45
- if (!authHeader) return;
46
- const [scheme, token] = authHeader.split(" ");
47
- if (scheme !== "Bearer" || !token) {
48
- throw new Error("Invalid auth header received");
49
- }
50
- this.cachedToken = token;
51
- this.tokenExpiry = getJwtExpiry(token);
52
- }
53
- };
54
- var AssistantCloudAPIKeyAuthStrategy = class {
55
- strategy = "api-key";
56
- #apiKey;
57
- #userId;
58
- #workspaceId;
59
- constructor(apiKey, userId, workspaceId) {
60
- this.#apiKey = apiKey;
61
- this.#userId = userId;
62
- this.#workspaceId = workspaceId;
63
- }
64
- async getAuthHeaders() {
65
- return {
66
- Authorization: `Bearer ${this.#apiKey}`,
67
- "Aui-User-Id": this.#userId,
68
- "Aui-Workspace-Id": this.#workspaceId
69
- };
70
- }
71
- readAuthHeaders() {
72
- }
73
- };
74
- var AUI_REFRESH_TOKEN_NAME = "aui:refresh_token";
75
- var AssistantCloudAnonymousAuthStrategy = class {
76
- strategy = "anon";
77
- baseUrl;
78
- jwtStrategy;
79
- constructor(baseUrl) {
80
- this.baseUrl = baseUrl;
81
- this.jwtStrategy = new AssistantCloudJWTAuthStrategy(async () => {
82
- const currentTime = Date.now();
83
- const storedRefreshTokenJson = localStorage.getItem(
84
- AUI_REFRESH_TOKEN_NAME
85
- );
86
- const storedRefreshToken = storedRefreshTokenJson ? JSON.parse(storedRefreshTokenJson) : void 0;
87
- if (storedRefreshToken) {
88
- const refreshExpiry = new Date(storedRefreshToken.expires_at).getTime();
89
- if (refreshExpiry - currentTime > 30 * 1e3) {
90
- const response2 = await fetch(
91
- `${this.baseUrl}/v1/auth/tokens/refresh`,
92
- {
93
- method: "POST",
94
- headers: { "Content-Type": "application/json" },
95
- body: JSON.stringify({ refresh_token: storedRefreshToken.token })
96
- }
97
- );
98
- if (response2.ok) {
99
- const data2 = await response2.json();
100
- const { access_token: access_token2, refresh_token: refresh_token2 } = data2;
101
- if (refresh_token2) {
102
- localStorage.setItem(
103
- AUI_REFRESH_TOKEN_NAME,
104
- JSON.stringify(refresh_token2)
105
- );
106
- }
107
- return access_token2;
108
- }
109
- } else {
110
- localStorage.removeItem(AUI_REFRESH_TOKEN_NAME);
111
- }
112
- }
113
- const response = await fetch(`${this.baseUrl}/v1/auth/tokens/anonymous`, {
114
- method: "POST"
115
- });
116
- if (!response.ok) return null;
117
- const data = await response.json();
118
- const { access_token, refresh_token } = data;
119
- if (!access_token || !refresh_token) return null;
120
- localStorage.setItem(
121
- AUI_REFRESH_TOKEN_NAME,
122
- JSON.stringify(refresh_token)
123
- );
124
- return access_token;
125
- });
126
- }
127
- async getAuthHeaders() {
128
- return this.jwtStrategy.getAuthHeaders();
129
- }
130
- readAuthHeaders(headers) {
131
- this.jwtStrategy.readAuthHeaders(headers);
132
- }
133
- };
134
- export {
135
- AssistantCloudAPIKeyAuthStrategy,
136
- AssistantCloudAnonymousAuthStrategy,
137
- AssistantCloudJWTAuthStrategy
138
- };
139
- //# sourceMappingURL=AssistantCloudAuthStrategy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/cloud/AssistantCloudAuthStrategy.tsx"],"sourcesContent":["export type AssistantCloudAuthStrategy = {\n readonly strategy: \"anon\" | \"jwt\" | \"api-key\";\n getAuthHeaders(): Promise<Record<string, string> | false>;\n readAuthHeaders(headers: Headers): void;\n};\n\nconst getJwtExpiry = (jwt: string): number => {\n try {\n const parts = jwt.split(\".\");\n const bodyPart = parts[1];\n if (!bodyPart) {\n throw new Error(\"Invalid JWT format\");\n }\n\n // Convert from Base64Url to Base64 and add padding if necessary\n let base64 = bodyPart.replace(/-/g, \"+\").replace(/_/g, \"/\");\n while (base64.length % 4 !== 0) {\n base64 += \"=\";\n }\n\n // Decode the Base64 string and parse the payload\n const payload = atob(base64);\n const payloadObj = JSON.parse(payload);\n const exp = payloadObj.exp;\n\n if (!exp || typeof exp !== \"number\") {\n throw new Error('JWT does not contain a valid \"exp\" field');\n }\n\n // Convert expiration time to milliseconds\n return exp * 1000;\n } catch (error) {\n throw new Error(\"Unable to determine the token expiry: \" + error);\n }\n};\n\nexport class AssistantCloudJWTAuthStrategy\n implements AssistantCloudAuthStrategy\n{\n public readonly strategy = \"jwt\";\n\n private cachedToken: string | null = null;\n private tokenExpiry: number | null = null;\n #authTokenCallback: () => Promise<string | null>;\n\n constructor(authTokenCallback: () => Promise<string | null>) {\n this.#authTokenCallback = authTokenCallback;\n }\n\n public async getAuthHeaders(): Promise<Record<string, string> | false> {\n const currentTime = Date.now();\n\n // Use cached token if it's valid for at least 30 more seconds\n if (\n this.cachedToken &&\n this.tokenExpiry &&\n this.tokenExpiry - currentTime > 30 * 1000\n ) {\n return { Authorization: `Bearer ${this.cachedToken}` };\n }\n\n // Fetch a new token via the callback\n const newToken = await this.#authTokenCallback();\n if (!newToken) return false;\n\n this.cachedToken = newToken;\n this.tokenExpiry = getJwtExpiry(newToken);\n\n return { Authorization: `Bearer ${newToken}` };\n }\n\n public readAuthHeaders(headers: Headers) {\n const authHeader = headers.get(\"Authorization\");\n if (!authHeader) return;\n\n const [scheme, token] = authHeader.split(\" \");\n if (scheme !== \"Bearer\" || !token) {\n throw new Error(\"Invalid auth header received\");\n }\n\n this.cachedToken = token;\n this.tokenExpiry = getJwtExpiry(token);\n }\n}\n\nexport class AssistantCloudAPIKeyAuthStrategy\n implements AssistantCloudAuthStrategy\n{\n public readonly strategy = \"api-key\";\n\n #apiKey: string;\n #userId: string;\n #workspaceId: string;\n\n constructor(apiKey: string, userId: string, workspaceId: string) {\n this.#apiKey = apiKey;\n this.#userId = userId;\n this.#workspaceId = workspaceId;\n }\n\n public async getAuthHeaders(): Promise<Record<string, string>> {\n return {\n Authorization: `Bearer ${this.#apiKey}`,\n \"Aui-User-Id\": this.#userId,\n \"Aui-Workspace-Id\": this.#workspaceId,\n };\n }\n\n public readAuthHeaders() {\n // No operation needed for API key auth\n }\n}\n\nconst AUI_REFRESH_TOKEN_NAME = \"aui:refresh_token\";\n\nexport class AssistantCloudAnonymousAuthStrategy\n implements AssistantCloudAuthStrategy\n{\n public readonly strategy = \"anon\";\n\n private baseUrl: string;\n private jwtStrategy: AssistantCloudJWTAuthStrategy;\n\n constructor(baseUrl: string) {\n this.baseUrl = baseUrl;\n this.jwtStrategy = new AssistantCloudJWTAuthStrategy(async () => {\n const currentTime = Date.now();\n const storedRefreshTokenJson = localStorage.getItem(\n AUI_REFRESH_TOKEN_NAME,\n );\n const storedRefreshToken = storedRefreshTokenJson\n ? (JSON.parse(storedRefreshTokenJson) as {\n token: string;\n expires_at: string;\n })\n : undefined;\n\n if (storedRefreshToken) {\n const refreshExpiry = new Date(storedRefreshToken.expires_at).getTime();\n if (refreshExpiry - currentTime > 30 * 1000) {\n const response = await fetch(\n `${this.baseUrl}/v1/auth/tokens/refresh`,\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ refresh_token: storedRefreshToken.token }),\n },\n );\n\n if (response.ok) {\n const data = await response.json();\n const { access_token, refresh_token } = data;\n if (refresh_token) {\n localStorage.setItem(\n AUI_REFRESH_TOKEN_NAME,\n JSON.stringify(refresh_token),\n );\n }\n return access_token;\n }\n } else {\n localStorage.removeItem(AUI_REFRESH_TOKEN_NAME);\n }\n }\n\n // No valid refresh token; request a new anonymous token\n const response = await fetch(`${this.baseUrl}/v1/auth/tokens/anonymous`, {\n method: \"POST\",\n });\n\n if (!response.ok) return null;\n\n const data = await response.json();\n const { access_token, refresh_token } = data;\n\n if (!access_token || !refresh_token) return null;\n\n localStorage.setItem(\n AUI_REFRESH_TOKEN_NAME,\n JSON.stringify(refresh_token),\n );\n return access_token;\n });\n }\n\n public async getAuthHeaders(): Promise<Record<string, string> | false> {\n return this.jwtStrategy.getAuthHeaders();\n }\n\n public readAuthHeaders(headers: Headers): void {\n this.jwtStrategy.readAuthHeaders(headers);\n }\n}\n"],"mappings":"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","names":["response","data","access_token","refresh_token"]}
@@ -1,11 +0,0 @@
1
- import { AssistantCloudAPI } from "./AssistantCloudAPI";
2
- type AssistantCloudAuthTokensCreateResponse = {
3
- token: string;
4
- };
5
- export declare class AssistantCloudAuthTokens {
6
- private cloud;
7
- constructor(cloud: AssistantCloudAPI);
8
- create(): Promise<AssistantCloudAuthTokensCreateResponse>;
9
- }
10
- export {};
11
- //# sourceMappingURL=AssistantCloudAuthTokens.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AssistantCloudAuthTokens.d.ts","sourceRoot":"","sources":["../../src/cloud/AssistantCloudAuthTokens.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,KAAK,sCAAsC,GAAG;IAC5C,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,qBAAa,wBAAwB;IACvB,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,iBAAiB;IAE/B,MAAM,IAAI,OAAO,CAAC,sCAAsC,CAAC;CAGvE"}
@@ -1,13 +0,0 @@
1
- // src/cloud/AssistantCloudAuthTokens.tsx
2
- var AssistantCloudAuthTokens = class {
3
- constructor(cloud) {
4
- this.cloud = cloud;
5
- }
6
- async create() {
7
- return this.cloud.makeRequest("/auth/tokens", { method: "POST" });
8
- }
9
- };
10
- export {
11
- AssistantCloudAuthTokens
12
- };
13
- //# sourceMappingURL=AssistantCloudAuthTokens.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/cloud/AssistantCloudAuthTokens.tsx"],"sourcesContent":["import { AssistantCloudAPI } from \"./AssistantCloudAPI\";\n\ntype AssistantCloudAuthTokensCreateResponse = {\n token: string;\n};\n\nexport class AssistantCloudAuthTokens {\n constructor(private cloud: AssistantCloudAPI) {}\n\n public async create(): Promise<AssistantCloudAuthTokensCreateResponse> {\n return this.cloud.makeRequest(\"/auth/tokens\", { method: \"POST\" });\n }\n}\n"],"mappings":";AAMO,IAAM,2BAAN,MAA+B;AAAA,EACpC,YAAoB,OAA0B;AAA1B;AAAA,EAA2B;AAAA,EAE/C,MAAa,SAA0D;AACrE,WAAO,KAAK,MAAM,YAAY,gBAAgB,EAAE,QAAQ,OAAO,CAAC;AAAA,EAClE;AACF;","names":[]}
@@ -1,27 +0,0 @@
1
- import { AssistantCloudAPI } from "./AssistantCloudAPI";
2
- type PdfToImagesRequestBody = {
3
- file_blob?: string | undefined;
4
- file_url?: string | undefined;
5
- };
6
- type PdfToImagesResponse = {
7
- success: boolean;
8
- urls: string[];
9
- message: string;
10
- };
11
- type GeneratePresignedUploadUrlRequestBody = {
12
- filename: string;
13
- };
14
- type GeneratePresignedUploadUrlResponse = {
15
- success: boolean;
16
- signedUrl: string;
17
- expiresAt: string;
18
- publicUrl: string;
19
- };
20
- export declare class AssistantCloudFiles {
21
- private cloud;
22
- constructor(cloud: AssistantCloudAPI);
23
- pdfToImages(body: PdfToImagesRequestBody): Promise<PdfToImagesResponse>;
24
- generatePresignedUploadUrl(body: GeneratePresignedUploadUrlRequestBody): Promise<GeneratePresignedUploadUrlResponse>;
25
- }
26
- export {};
27
- //# sourceMappingURL=AssistantCloudFiles.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AssistantCloudFiles.d.ts","sourceRoot":"","sources":["../../src/cloud/AssistantCloudFiles.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,KAAK,sBAAsB,GAAG;IAC5B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,KAAK,qCAAqC,GAAG;IAC3C,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,KAAK,kCAAkC,GAAG;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,qBAAa,mBAAmB;IAClB,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,iBAAiB;IAE/B,WAAW,CACtB,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,mBAAmB,CAAC;IAOlB,0BAA0B,CACrC,IAAI,EAAE,qCAAqC,GAC1C,OAAO,CAAC,kCAAkC,CAAC;CAS/C"}