@toothfairyai/sdk 0.1.0-beta.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.
Files changed (39) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +395 -0
  3. package/dist/chat/ChatManager.d.ts +22 -0
  4. package/dist/chat/ChatManager.d.ts.map +1 -0
  5. package/dist/chat/ChatManager.js +89 -0
  6. package/dist/chat/ChatManager.js.map +1 -0
  7. package/dist/client.d.ts +38 -0
  8. package/dist/client.d.ts.map +1 -0
  9. package/dist/client.js +126 -0
  10. package/dist/client.js.map +1 -0
  11. package/dist/documents/DocumentManager.d.ts +34 -0
  12. package/dist/documents/DocumentManager.d.ts.map +1 -0
  13. package/dist/documents/DocumentManager.js +268 -0
  14. package/dist/documents/DocumentManager.js.map +1 -0
  15. package/dist/entities/EntityManager.d.ts +24 -0
  16. package/dist/entities/EntityManager.d.ts.map +1 -0
  17. package/dist/entities/EntityManager.js +56 -0
  18. package/dist/entities/EntityManager.js.map +1 -0
  19. package/dist/folders/FolderManager.d.ts +30 -0
  20. package/dist/folders/FolderManager.d.ts.map +1 -0
  21. package/dist/folders/FolderManager.js +86 -0
  22. package/dist/folders/FolderManager.js.map +1 -0
  23. package/dist/index.d.ts +13 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +42 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/prompts/PromptManager.d.ts +23 -0
  28. package/dist/prompts/PromptManager.d.ts.map +1 -0
  29. package/dist/prompts/PromptManager.js +83 -0
  30. package/dist/prompts/PromptManager.js.map +1 -0
  31. package/dist/streaming/StreamingManager.d.ts +53 -0
  32. package/dist/streaming/StreamingManager.d.ts.map +1 -0
  33. package/dist/streaming/StreamingManager.js +217 -0
  34. package/dist/streaming/StreamingManager.js.map +1 -0
  35. package/dist/types/index.d.ts +273 -0
  36. package/dist/types/index.d.ts.map +1 -0
  37. package/dist/types/index.js +17 -0
  38. package/dist/types/index.js.map +1 -0
  39. package/package.json +76 -0
package/dist/client.js ADDED
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ToothFairyClient = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const types_1 = require("./types");
9
+ const ChatManager_1 = require("./chat/ChatManager");
10
+ const DocumentManager_1 = require("./documents/DocumentManager");
11
+ const EntityManager_1 = require("./entities/EntityManager");
12
+ const FolderManager_1 = require("./folders/FolderManager");
13
+ const PromptManager_1 = require("./prompts/PromptManager");
14
+ const StreamingManager_1 = require("./streaming/StreamingManager");
15
+ class ToothFairyClient {
16
+ constructor(config) {
17
+ this.config = {
18
+ baseUrl: 'https://api.toothfairyai.com',
19
+ aiUrl: 'https://ai.toothfairyai.com',
20
+ aiStreamUrl: 'https://ai-stream.toothfairyai.com',
21
+ timeout: 120000,
22
+ ...config
23
+ };
24
+ if (!this.config.apiKey) {
25
+ throw new types_1.ToothFairyError('API key is required', 'MISSING_API_KEY');
26
+ }
27
+ if (!this.config.workspaceId) {
28
+ throw new types_1.ToothFairyError('Workspace ID is required', 'MISSING_WORKSPACE_ID');
29
+ }
30
+ this.httpClient = axios_1.default.create({
31
+ timeout: this.config.timeout,
32
+ headers: {
33
+ 'Content-Type': 'application/json',
34
+ 'x-api-key': this.config.apiKey,
35
+ },
36
+ });
37
+ this.httpClient.interceptors.request.use((config) => {
38
+ if (config.method === 'post' || config.method === 'put') {
39
+ if (config.data && typeof config.data === 'object') {
40
+ config.data = { workspaceid: this.config.workspaceId, ...config.data };
41
+ }
42
+ }
43
+ else if (config.method === 'get' && config.params) {
44
+ config.params = { workspaceid: this.config.workspaceId, ...config.params };
45
+ }
46
+ return config;
47
+ });
48
+ this.httpClient.interceptors.response.use((response) => response, (error) => {
49
+ if (error.response) {
50
+ throw new types_1.ToothFairyError(error.response.data?.message || 'API request failed', 'API_ERROR', error.response.status, error.response.data);
51
+ }
52
+ else if (error.request) {
53
+ throw new types_1.ToothFairyError('Network error - please check your connection', 'NETWORK_ERROR');
54
+ }
55
+ else {
56
+ throw new types_1.ToothFairyError(error.message || 'Unknown error occurred', 'UNKNOWN_ERROR');
57
+ }
58
+ });
59
+ this.chat = new ChatManager_1.ChatManager(this);
60
+ this.documents = new DocumentManager_1.DocumentManager(this);
61
+ this.entities = new EntityManager_1.EntityManager(this);
62
+ this.folders = new FolderManager_1.FolderManager(this);
63
+ this.prompts = new PromptManager_1.PromptManager(this);
64
+ this.streaming = new StreamingManager_1.StreamingManager(this);
65
+ }
66
+ getConfig() {
67
+ return { ...this.config };
68
+ }
69
+ getWorkspaceId() {
70
+ return this.config.workspaceId;
71
+ }
72
+ async request(method, endpoint, data, config) {
73
+ const url = `${this.config.baseUrl}/${endpoint}`;
74
+ const requestConfig = {
75
+ method,
76
+ url,
77
+ ...(data && { data }),
78
+ ...config,
79
+ };
80
+ const response = await this.httpClient(requestConfig);
81
+ return response.data;
82
+ }
83
+ async aiRequest(method, endpoint, data, config) {
84
+ const url = `${this.config.aiUrl}/${endpoint}`;
85
+ const requestConfig = {
86
+ method,
87
+ url,
88
+ ...(data && { data }),
89
+ ...config,
90
+ };
91
+ if (data && typeof data === 'object') {
92
+ requestConfig.data = { workspaceid: this.config.workspaceId, ...data };
93
+ }
94
+ const response = await this.httpClient(requestConfig);
95
+ return response.data;
96
+ }
97
+ getStreamingUrl(endpoint) {
98
+ return `${this.config.aiStreamUrl}/${endpoint}`;
99
+ }
100
+ async testConnection() {
101
+ try {
102
+ await this.chat.list();
103
+ return true;
104
+ }
105
+ catch (error) {
106
+ return false;
107
+ }
108
+ }
109
+ async getHealth() {
110
+ try {
111
+ const response = await this.request('GET', 'health');
112
+ return {
113
+ status: response.status || 'unknown',
114
+ timestamp: new Date().toISOString()
115
+ };
116
+ }
117
+ catch (error) {
118
+ return {
119
+ status: 'error',
120
+ timestamp: new Date().toISOString()
121
+ };
122
+ }
123
+ }
124
+ }
125
+ exports.ToothFairyClient = ToothFairyClient;
126
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { Document, DocumentCreateData, DocumentUpdateData, FileUploadOptions, FileUploadResult, FileDownloadOptions, FileDownloadResult } from '../types';
2
+ import { IToothFairyClient } from '../client';
3
+ export declare class DocumentManager {
4
+ private client;
5
+ constructor(client: IToothFairyClient);
6
+ create(documentData: DocumentCreateData): Promise<Document>;
7
+ createFromPath(filePath: string, userId: string, options?: {
8
+ title?: string;
9
+ folderId?: string;
10
+ topics?: string[];
11
+ status?: string;
12
+ scope?: string;
13
+ }): Promise<Document>;
14
+ update(documentId: string, userId: string, fields: DocumentUpdateData): Promise<Document>;
15
+ get(documentId: string): Promise<Document>;
16
+ delete(documentId: string): Promise<{
17
+ success: boolean;
18
+ }>;
19
+ search(text: string, options?: {
20
+ topK?: number;
21
+ metadata?: Record<string, any>;
22
+ }): Promise<any[]>;
23
+ upload(filePath: string, options?: FileUploadOptions): Promise<FileUploadResult>;
24
+ download(filename: string, outputPath: string, options?: FileDownloadOptions): Promise<FileDownloadResult>;
25
+ private getUploadUrl;
26
+ private getDownloadUrl;
27
+ private sanitizeFilename;
28
+ private getImportType;
29
+ private getContentType;
30
+ private getDocumentType;
31
+ private getExternalPath;
32
+ private getTitleFromPath;
33
+ }
34
+ //# sourceMappingURL=DocumentManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocumentManager.d.ts","sourceRoot":"","sources":["../../src/documents/DocumentManager.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,QAAQ,EACR,kBAAkB,EAClB,kBAAkB,EAGlB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAGnB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AA+B9C,qBAAa,eAAe;IACd,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,iBAAiB;IAQvC,MAAM,CAAC,YAAY,EAAE,kBAAkB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAmB3D,cAAc,CAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;KACX,GACL,OAAO,CAAC,QAAQ,CAAC;IAgCd,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAmBzF,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAU1C,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAWzD,MAAM,CACV,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;QACP,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAC3B,GACL,OAAO,CAAC,GAAG,EAAE,CAAC;IAuBX,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAmGpF,QAAQ,CACZ,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,kBAAkB,CAAC;YA2DhB,YAAY;YAaZ,cAAc;IAe5B,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,cAAc;IA2CtB,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,gBAAgB;CAMzB"}
@@ -0,0 +1,268 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DocumentManager = void 0;
7
+ const fs_1 = require("fs");
8
+ const path_1 = require("path");
9
+ const axios_1 = __importDefault(require("axios"));
10
+ class DocumentManager {
11
+ constructor(client) {
12
+ this.client = client;
13
+ }
14
+ async create(documentData) {
15
+ const payload = {
16
+ data: [{
17
+ ...documentData,
18
+ workspaceid: this.client.getWorkspaceId()
19
+ }]
20
+ };
21
+ return this.client.request('POST', 'doc/create', payload);
22
+ }
23
+ async createFromPath(filePath, userId, options = {}) {
24
+ const { title = this.getTitleFromPath(filePath), folderId = 'mrcRoot', topics = [], status = 'published', scope = undefined } = options;
25
+ const documentData = {
26
+ userid: userId,
27
+ type: this.getDocumentType(filePath),
28
+ title,
29
+ topics,
30
+ folderid: folderId,
31
+ external_path: this.getExternalPath(filePath),
32
+ source: 'api',
33
+ status,
34
+ ...(scope && { scope })
35
+ };
36
+ return this.create(documentData);
37
+ }
38
+ async update(documentId, userId, fields) {
39
+ const updateData = {
40
+ fields: {
41
+ workspaceid: this.client.getWorkspaceId(),
42
+ userid: userId,
43
+ id: documentId,
44
+ ...fields
45
+ }
46
+ };
47
+ return this.client.request('POST', 'doc/update', updateData);
48
+ }
49
+ async get(documentId) {
50
+ return this.client.request('GET', `doc/get/${documentId}`);
51
+ }
52
+ async delete(documentId) {
53
+ return this.client.request('DELETE', `doc/delete/${documentId}`);
54
+ }
55
+ async search(text, options = {}) {
56
+ const { topK = 10, metadata } = options;
57
+ if (topK < 1 || topK > 50) {
58
+ throw new Error('topK must be between 1 and 50');
59
+ }
60
+ const searchData = {
61
+ text,
62
+ topK,
63
+ ...(metadata && { metadata })
64
+ };
65
+ return this.client.aiRequest('POST', 'searcher', searchData);
66
+ }
67
+ async upload(filePath, options = {}) {
68
+ const { importType, contentType, onProgress } = options;
69
+ try {
70
+ await fs_1.promises.access(filePath);
71
+ }
72
+ catch (error) {
73
+ throw new Error(`File not found: ${filePath}`);
74
+ }
75
+ const stats = await fs_1.promises.stat(filePath);
76
+ const fileSizeInMB = stats.size / (1024 * 1024);
77
+ if (fileSizeInMB > 15) {
78
+ throw new Error(`File size (${fileSizeInMB.toFixed(2)}MB) exceeds 15MB limit`);
79
+ }
80
+ const originalFilename = (0, path_1.basename)(filePath);
81
+ const sanitizedFilename = this.sanitizeFilename(originalFilename);
82
+ const finalImportType = importType || this.getImportType(filePath);
83
+ const finalContentType = contentType || this.getContentType(filePath);
84
+ const fullFilename = `${this.client.getWorkspaceId()}/${sanitizedFilename}`;
85
+ const uploadData = await this.getUploadUrl(fullFilename, finalImportType, finalContentType);
86
+ let parsedUploadData;
87
+ if (uploadData.body && typeof uploadData.body === 'string') {
88
+ try {
89
+ parsedUploadData = JSON.parse(uploadData.body);
90
+ }
91
+ catch (error) {
92
+ throw new Error(`Failed to parse upload response: ${error.message}`);
93
+ }
94
+ }
95
+ else {
96
+ parsedUploadData = uploadData;
97
+ }
98
+ if (!parsedUploadData.uploadURL) {
99
+ throw new Error('Failed to get upload URL from server');
100
+ }
101
+ const fileData = await fs_1.promises.readFile(filePath);
102
+ const uploadConfig = {
103
+ method: 'PUT',
104
+ url: parsedUploadData.uploadURL,
105
+ data: fileData,
106
+ headers: {
107
+ 'Content-Type': finalContentType,
108
+ },
109
+ maxContentLength: Infinity,
110
+ maxBodyLength: Infinity,
111
+ onUploadProgress: onProgress ? (progressEvent) => {
112
+ const percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total);
113
+ onProgress(percentCompleted, progressEvent.loaded, progressEvent.total);
114
+ } : undefined,
115
+ };
116
+ await (0, axios_1.default)(uploadConfig);
117
+ let downloadFilename = fullFilename;
118
+ if (parsedUploadData.filePath) {
119
+ downloadFilename = parsedUploadData.filePath.replace(/^s3:\/\/[^/]+\//, '');
120
+ }
121
+ return {
122
+ success: true,
123
+ originalFilename,
124
+ sanitizedFilename,
125
+ filename: downloadFilename,
126
+ importType: finalImportType,
127
+ contentType: finalContentType,
128
+ size: stats.size,
129
+ sizeInMB: fileSizeInMB,
130
+ };
131
+ }
132
+ async download(filename, outputPath, options = {}) {
133
+ const { context = 'pdf', onProgress } = options;
134
+ const downloadData = await this.getDownloadUrl(filename, context);
135
+ if (!downloadData.url) {
136
+ throw new Error('Failed to get download URL from server');
137
+ }
138
+ const outputDir = (0, path_1.dirname)(outputPath);
139
+ await fs_1.promises.mkdir(outputDir, { recursive: true });
140
+ const downloadConfig = {
141
+ method: 'GET',
142
+ url: downloadData.url,
143
+ responseType: 'stream',
144
+ onDownloadProgress: onProgress ? (progressEvent) => {
145
+ if (progressEvent.total) {
146
+ const percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total);
147
+ onProgress(percentCompleted, progressEvent.loaded, progressEvent.total);
148
+ }
149
+ } : undefined,
150
+ };
151
+ const response = await (0, axios_1.default)(downloadConfig);
152
+ return new Promise((resolve, reject) => {
153
+ const writeStream = require('fs').createWriteStream(outputPath);
154
+ response.data.pipe(writeStream);
155
+ writeStream.on('finish', async () => {
156
+ try {
157
+ const stats = await fs_1.promises.stat(outputPath);
158
+ resolve({
159
+ success: true,
160
+ outputPath,
161
+ size: stats.size,
162
+ sizeInMB: (stats.size / (1024 * 1024)).toFixed(2),
163
+ });
164
+ }
165
+ catch (error) {
166
+ reject(error);
167
+ }
168
+ });
169
+ writeStream.on('error', reject);
170
+ });
171
+ }
172
+ async getUploadUrl(filename, importType, contentType) {
173
+ const params = new URLSearchParams({ filename });
174
+ if (importType)
175
+ params.append('importType', importType);
176
+ if (contentType)
177
+ params.append('contentType', contentType);
178
+ return this.client.request('GET', `documents/requestPreSignedURL?${params.toString()}`);
179
+ }
180
+ async getDownloadUrl(filename, context) {
181
+ const params = new URLSearchParams({
182
+ filename,
183
+ context,
184
+ workspaceid: this.client.getWorkspaceId()
185
+ });
186
+ return this.client.request('GET', `documents/requestDownloadURLIncognito?${params.toString()}`);
187
+ }
188
+ sanitizeFilename(filename) {
189
+ let sanitized = filename.replace(/[^a-zA-Z0-9.]/g, '');
190
+ if (sanitized.length > 100) {
191
+ throw new Error('File name cannot be more than 100 characters.');
192
+ }
193
+ return String(Date.now()) + sanitized;
194
+ }
195
+ getImportType(filePath) {
196
+ const ext = (0, path_1.extname)(filePath).toLowerCase().slice(1);
197
+ const imageExts = ['png', 'jpg', 'jpeg', 'gif', 'bmp', 'svg'];
198
+ const videoExts = ['mp4', 'avi', 'mov', 'wmv', 'flv', 'webm'];
199
+ const audioExts = ['wav', 'mp3', 'aac', 'ogg', 'flac'];
200
+ if (imageExts.includes(ext))
201
+ return 'imported-image';
202
+ if (videoExts.includes(ext))
203
+ return 'imported_video_files';
204
+ if (audioExts.includes(ext))
205
+ return 'imported_audio_files';
206
+ return 'imported_doc_files';
207
+ }
208
+ getContentType(filePath) {
209
+ const ext = (0, path_1.extname)(filePath).toLowerCase().slice(1);
210
+ const contentTypes = {
211
+ txt: 'text/plain',
212
+ md: 'text/markdown',
213
+ html: 'text/html',
214
+ pdf: 'application/pdf',
215
+ json: 'application/json',
216
+ jsonl: 'application/json',
217
+ wav: 'audio/wav',
218
+ mp4: 'video/mp4',
219
+ png: 'image/png',
220
+ jpg: 'image/jpeg',
221
+ jpeg: 'image/jpeg',
222
+ csv: 'text/csv',
223
+ docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
224
+ xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
225
+ pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
226
+ ppt: 'application/vnd.ms-powerpoint',
227
+ java: 'text/plain',
228
+ py: 'text/plain',
229
+ js: 'text/plain',
230
+ ts: 'text/plain',
231
+ tsx: 'text/plain',
232
+ jsx: 'text/plain',
233
+ yaml: 'text/plain',
234
+ yml: 'text/plain',
235
+ sql: 'text/plain',
236
+ sh: 'text/plain',
237
+ php: 'text/plain',
238
+ csharp: 'text/plain',
239
+ rb: 'text/plain',
240
+ };
241
+ return contentTypes[ext] || 'application/octet-stream';
242
+ }
243
+ getDocumentType(filePath) {
244
+ if (filePath.startsWith('http://') || filePath.startsWith('https://')) {
245
+ return 'readComprehensionUrl';
246
+ }
247
+ const ext = (0, path_1.extname)(filePath).toLowerCase().slice(1);
248
+ if (ext === 'pdf') {
249
+ return 'readComprehensionPdf';
250
+ }
251
+ return 'readComprehensionFile';
252
+ }
253
+ getExternalPath(filePath) {
254
+ if (filePath.startsWith('http://') || filePath.startsWith('https://')) {
255
+ return filePath;
256
+ }
257
+ const filename = (0, path_1.basename)(filePath);
258
+ return `s3://files-to-import-aus-prod/imported-pdf/${filename}`;
259
+ }
260
+ getTitleFromPath(filePath) {
261
+ if (filePath.startsWith('http://') || filePath.startsWith('https://')) {
262
+ return filePath;
263
+ }
264
+ return (0, path_1.basename)(filePath);
265
+ }
266
+ }
267
+ exports.DocumentManager = DocumentManager;
268
+ //# sourceMappingURL=DocumentManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocumentManager.js","sourceRoot":"","sources":["../../src/documents/DocumentManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { Entity, EntityUpdateData, EntityType, ListResponse } from '../types';
2
+ import { IToothFairyClient } from '../client';
3
+ export declare class EntityManager {
4
+ private client;
5
+ constructor(client: IToothFairyClient);
6
+ create(userId: string, label: string, type?: EntityType, options?: {
7
+ description?: string;
8
+ emoji?: string;
9
+ parentEntity?: string;
10
+ backgroundColor?: string;
11
+ }): Promise<Entity>;
12
+ update(entityId: string, fields: EntityUpdateData): Promise<Entity>;
13
+ get(entityId: string): Promise<Entity>;
14
+ delete(entityId: string): Promise<{
15
+ success: boolean;
16
+ }>;
17
+ list(options?: {
18
+ limit?: number;
19
+ type?: EntityType;
20
+ }): Promise<ListResponse<Entity>>;
21
+ getByType(type: EntityType, limit?: number): Promise<Entity[]>;
22
+ search(searchTerm: string, type?: EntityType): Promise<Entity[]>;
23
+ }
24
+ //# sourceMappingURL=EntityManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EntityManager.d.ts","sourceRoot":"","sources":["../../src/entities/EntityManager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EAEN,gBAAgB,EAChB,UAAU,EACV,YAAY,EACb,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAwB9C,qBAAa,aAAa;IACZ,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,iBAAiB;IAWvC,MAAM,CACV,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,UAAoB,EAC1B,OAAO,GAAE;QACP,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,eAAe,CAAC,EAAE,MAAM,CAAC;KACrB,GACL,OAAO,CAAC,MAAM,CAAC;IAmBZ,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBnE,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUtC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAUvD,IAAI,CAAC,OAAO,GAAE;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,UAAU,CAAC;KACd,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAuBhC,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAY9D,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAMvE"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EntityManager = void 0;
4
+ class EntityManager {
5
+ constructor(client) {
6
+ this.client = client;
7
+ }
8
+ async create(userId, label, type = 'topic', options = {}) {
9
+ const entityData = {
10
+ workspaceid: this.client.getWorkspaceId(),
11
+ createdBy: userId,
12
+ label,
13
+ type,
14
+ ...options
15
+ };
16
+ return this.client.request('POST', 'entity/create', entityData);
17
+ }
18
+ async update(entityId, fields) {
19
+ const updateData = {
20
+ id: entityId,
21
+ workspaceid: this.client.getWorkspaceId(),
22
+ ...fields
23
+ };
24
+ return this.client.request('POST', 'entity/update', updateData);
25
+ }
26
+ async get(entityId) {
27
+ return this.client.request('GET', `entity/get/${entityId}`);
28
+ }
29
+ async delete(entityId) {
30
+ return this.client.request('DELETE', `entity/delete/${entityId}`);
31
+ }
32
+ async list(options = {}) {
33
+ const { limit, type } = options;
34
+ const params = { workspaceid: this.client.getWorkspaceId() };
35
+ if (limit)
36
+ params.limit = limit;
37
+ if (type)
38
+ params.type = type;
39
+ const response = await this.client.request('GET', 'entity/list', null, { params });
40
+ return {
41
+ items: Array.isArray(response) ? response : [],
42
+ total: Array.isArray(response) ? response.length : 0,
43
+ limit
44
+ };
45
+ }
46
+ async getByType(type, limit) {
47
+ const result = await this.list({ type, limit });
48
+ return result.items;
49
+ }
50
+ async search(searchTerm, type) {
51
+ const result = await this.list({ type });
52
+ return result.items.filter(entity => entity.label.toLowerCase().includes(searchTerm.toLowerCase()));
53
+ }
54
+ }
55
+ exports.EntityManager = EntityManager;
56
+ //# sourceMappingURL=EntityManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EntityManager.js","sourceRoot":"","sources":["../../src/entities/EntityManager.ts"],"names":[],"mappings":";;;AA+BA,MAAa,aAAa;IACxB,YAAoB,MAAyB;QAAzB,WAAM,GAAN,MAAM,CAAmB;IAAG,CAAC;IAWjD,KAAK,CAAC,MAAM,CACV,MAAc,EACd,KAAa,EACb,OAAmB,OAAO,EAC1B,UAKI,EAAE;QAEN,MAAM,UAAU,GAAG;YACjB,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE;YACzC,SAAS,EAAE,MAAM;YACjB,KAAK;YACL,IAAI;YACJ,GAAG,OAAO;SACX,CAAC;QAEF,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;IAClE,CAAC;IASD,KAAK,CAAC,MAAM,CAAC,QAAgB,EAAE,MAAwB;QACrD,MAAM,UAAU,GAAG;YACjB,EAAE,EAAE,QAAQ;YACZ,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE;YACzC,GAAG,MAAM;SACV,CAAC;QAEF,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;IAClE,CAAC;IAQD,KAAK,CAAC,GAAG,CAAC,QAAgB;QACxB,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,QAAQ,EAAE,CAAC,CAAC;IAC9D,CAAC;IAQD,KAAK,CAAC,MAAM,CAAC,QAAgB;QAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,iBAAiB,QAAQ,EAAE,CAAC,CAAC;IACpE,CAAC;IAQD,KAAK,CAAC,IAAI,CAAC,UAGP,EAAE;QACJ,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QAEhC,MAAM,MAAM,GAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE,CAAC;QAClE,IAAI,KAAK;YAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QAChC,IAAI,IAAI;YAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;QAE7B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAEnF,OAAO;YACL,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAC9C,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACpD,KAAK;SACN,CAAC;IACJ,CAAC;IASD,KAAK,CAAC,SAAS,CAAC,IAAgB,EAAE,KAAc;QAC9C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAChD,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC;IASD,KAAK,CAAC,MAAM,CAAC,UAAkB,EAAE,IAAiB;QAChD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAClC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAC9D,CAAC;IACJ,CAAC;CACF;AAzHD,sCAyHC"}
@@ -0,0 +1,30 @@
1
+ import { Folder, FolderUpdateData, ListResponse } from '../types';
2
+ import { IToothFairyClient } from '../client';
3
+ export declare class FolderManager {
4
+ private client;
5
+ constructor(client: IToothFairyClient);
6
+ create(userId: string, name: string, options?: {
7
+ description?: string;
8
+ emoji?: string;
9
+ status?: string;
10
+ parent?: string;
11
+ }): Promise<Folder>;
12
+ update(folderId: string, fields: FolderUpdateData): Promise<Folder>;
13
+ get(folderId: string): Promise<Folder>;
14
+ delete(folderId: string): Promise<{
15
+ success: boolean;
16
+ }>;
17
+ list(options?: {
18
+ status?: string;
19
+ limit?: number;
20
+ offset?: number;
21
+ }): Promise<ListResponse<Folder>>;
22
+ getRootFolders(): Promise<Folder[]>;
23
+ getSubfolders(parentId: string): Promise<Folder[]>;
24
+ getTree(): Promise<FolderTreeNode[]>;
25
+ search(searchTerm: string): Promise<Folder[]>;
26
+ }
27
+ export interface FolderTreeNode extends Folder {
28
+ children: FolderTreeNode[];
29
+ }
30
+ //# sourceMappingURL=FolderManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FolderManager.d.ts","sourceRoot":"","sources":["../../src/folders/FolderManager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EAEN,gBAAgB,EAChB,YAAY,EACb,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAwB9C,qBAAa,aAAa;IACZ,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,iBAAiB;IAUvC,MAAM,CACV,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;QACP,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;KACZ,GACL,OAAO,CAAC,MAAM,CAAC;IAkBZ,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IAenE,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUtC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAUvD,IAAI,CAAC,OAAO,GAAE;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACZ,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAuBhC,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAWnC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAUlD,OAAO,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAuCpC,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAMpD;AAKD,MAAM,WAAW,cAAe,SAAQ,MAAM;IAC5C,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B"}