@nekutima/biome-sdk 0.1.31 → 0.1.33
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/README.md +4 -0
- package/dist/chat/chat.service.d.ts +47 -31
- package/dist/chat/chat.service.d.ts.map +1 -1
- package/dist/chat/chat.service.js +158 -8
- package/dist/chat/chat.service.js.map +1 -1
- package/dist/ecosystem/ecosystem.model.d.ts +46 -3
- package/dist/ecosystem/ecosystem.model.d.ts.map +1 -1
- package/dist/ecosystem/ecosystem.model.js +2 -2
- package/dist/ecosystem/ecosystem.service.d.ts +76 -0
- package/dist/ecosystem/ecosystem.service.d.ts.map +1 -0
- package/dist/ecosystem/ecosystem.service.js +211 -0
- package/dist/ecosystem/ecosystem.service.js.map +1 -0
- package/dist/ecosystem/organization.model.d.ts +83 -0
- package/dist/ecosystem/organization.model.d.ts.map +1 -0
- package/dist/ecosystem/organization.model.js +7 -0
- package/dist/ecosystem/organization.model.js.map +1 -0
- package/dist/ecosystem/organization.service.d.ts +76 -0
- package/dist/ecosystem/organization.service.d.ts.map +1 -0
- package/dist/ecosystem/organization.service.js +213 -0
- package/dist/ecosystem/organization.service.js.map +1 -0
- package/dist/ecosystem/person.model.d.ts +75 -0
- package/dist/ecosystem/person.model.d.ts.map +1 -0
- package/dist/ecosystem/person.model.js +7 -0
- package/dist/ecosystem/person.model.js.map +1 -0
- package/dist/ecosystem/person.service.d.ts +77 -0
- package/dist/ecosystem/person.service.d.ts.map +1 -0
- package/dist/ecosystem/person.service.js +214 -0
- package/dist/ecosystem/person.service.js.map +1 -0
- package/dist/ecosystem/schemas.d.ts +30 -1
- package/dist/ecosystem/schemas.d.ts.map +1 -1
- package/dist/ecosystem/schemas.js +39 -2
- package/dist/ecosystem/schemas.js.map +1 -1
- package/dist/ecosystem/search.model.d.ts +28 -0
- package/dist/ecosystem/search.model.d.ts.map +1 -0
- package/dist/ecosystem/search.model.js +6 -0
- package/dist/ecosystem/search.model.js.map +1 -0
- package/dist/ecosystem/search.service.d.ts +30 -0
- package/dist/ecosystem/search.service.d.ts.map +1 -0
- package/dist/ecosystem/search.service.js +92 -0
- package/dist/ecosystem/search.service.js.map +1 -0
- package/dist/index.d.ts +18 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25 -3
- package/dist/index.js.map +1 -1
- package/dist/models/chat.model.d.ts +52 -11
- package/dist/models/chat.model.d.ts.map +1 -1
- package/dist/utils/validation.utils.d.ts +20 -0
- package/dist/utils/validation.utils.d.ts.map +1 -1
- package/dist/utils/validation.utils.js +39 -1
- package/dist/utils/validation.utils.js.map +1 -1
- package/package.json +1 -2
package/README.md
CHANGED
|
@@ -11,6 +11,7 @@ The Biome SDK is the **official contract** between frontend and backend teams, p
|
|
|
11
11
|
- 🔄 **Authentication** - Login, logout, session management
|
|
12
12
|
- 📋 **Task Management** - CRUD operations, state transitions, search
|
|
13
13
|
- 👤 **Profile Management** - User profiles, updates, validation
|
|
14
|
+
- 💬 **Chat System** - Real-time messaging, typing indicators, read receipts
|
|
14
15
|
- 📁 **File Upload** - Image validation, upload, management
|
|
15
16
|
- 🛡️ **CSRF Protection** - Auto-injection, token management
|
|
16
17
|
- 🔧 **Utilities** - Sorting, validation, date manipulation
|
|
@@ -176,6 +177,9 @@ const biomeNoCsrf = BiomeSDK.initialize({
|
|
|
176
177
|
- [CONTRACT.md](./CONTRACT.md) - SDK contract and scope
|
|
177
178
|
- [FRONTEND_INTEGRATION.md](./FRONTEND_INTEGRATION.md) - Frontend integration guide
|
|
178
179
|
- [BACKEND_INTEGRATION.md](./BACKEND_INTEGRATION.md) - Backend integration guide
|
|
180
|
+
- [docs/INDEX.md](./docs/INDEX.md) - Complete documentation index
|
|
181
|
+
- [docs/chat-sdk.md](./docs/chat-sdk.md) - Comprehensive chat SDK documentation
|
|
182
|
+
- [CHANGELOG.md](./CHANGELOG.md) - Version history and changes
|
|
179
183
|
|
|
180
184
|
## Version
|
|
181
185
|
|
|
@@ -1,48 +1,64 @@
|
|
|
1
1
|
import { BiomeHttpClient } from "../core/http-client";
|
|
2
|
-
|
|
3
|
-
id: number;
|
|
4
|
-
chatId: number;
|
|
5
|
-
senderId: number;
|
|
6
|
-
senderUsername: string;
|
|
7
|
-
senderAvatarUrl?: string;
|
|
8
|
-
content: string;
|
|
9
|
-
createdAt: Date;
|
|
10
|
-
updatedAt?: Date;
|
|
11
|
-
}
|
|
12
|
-
export interface ChatWithParticipants {
|
|
13
|
-
id: number;
|
|
14
|
-
taskId: number;
|
|
15
|
-
participantIds: number[];
|
|
16
|
-
participantUsernames: string[];
|
|
17
|
-
createdAt: Date;
|
|
18
|
-
updatedAt?: Date;
|
|
19
|
-
}
|
|
20
|
-
export interface TaskChatMessagesResponse {
|
|
21
|
-
chat: ChatWithParticipants;
|
|
22
|
-
messages: ChatMessageWithSender[];
|
|
23
|
-
pagination: {
|
|
24
|
-
hasMore: boolean;
|
|
25
|
-
nextCursor?: string;
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
export interface SendChatMessageResponse {
|
|
29
|
-
message: ChatMessageWithSender;
|
|
30
|
-
}
|
|
2
|
+
import { ChatMessageWithSender, TaskChatMessagesResponse, ChatEvent } from "../models/chat.model";
|
|
31
3
|
export declare class BiomeChat {
|
|
32
4
|
private readonly http;
|
|
5
|
+
private eventSources;
|
|
6
|
+
private eventListeners;
|
|
33
7
|
constructor(http: BiomeHttpClient);
|
|
34
8
|
/**
|
|
35
9
|
* Get chat messages for a task
|
|
10
|
+
* @param taskId - The task ID
|
|
11
|
+
* @param cursor - Pagination cursor for loading more messages
|
|
12
|
+
* @param limit - Number of messages to fetch (default: 50)
|
|
36
13
|
*/
|
|
37
|
-
getMessages(taskId: number, cursor?: string): Promise<TaskChatMessagesResponse>;
|
|
14
|
+
getMessages(taskId: number, cursor?: string, limit?: number): Promise<TaskChatMessagesResponse>;
|
|
38
15
|
/**
|
|
39
16
|
* Send a chat message for a task
|
|
17
|
+
* @param taskId - The task ID
|
|
18
|
+
* @param content - The message content
|
|
40
19
|
*/
|
|
41
20
|
sendMessage(taskId: number, content: string): Promise<ChatMessageWithSender>;
|
|
21
|
+
/**
|
|
22
|
+
* Mark a message as read
|
|
23
|
+
* @param messageId - The message ID to mark as read
|
|
24
|
+
*/
|
|
25
|
+
markMessageAsRead(messageId: number): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Send typing indicator
|
|
28
|
+
* @param taskId - The task ID
|
|
29
|
+
* @param isTyping - Whether user is typing
|
|
30
|
+
*/
|
|
31
|
+
sendTypingIndicator(taskId: number, isTyping: boolean): Promise<void>;
|
|
42
32
|
/**
|
|
43
33
|
* Connect to chat events via SSE
|
|
44
|
-
*
|
|
34
|
+
* @param chatId - The chat ID
|
|
35
|
+
* @returns EventSource connection
|
|
45
36
|
*/
|
|
46
37
|
connect(chatId: number): EventSource;
|
|
38
|
+
/**
|
|
39
|
+
* Disconnect from chat events
|
|
40
|
+
* @param chatId - The chat ID
|
|
41
|
+
*/
|
|
42
|
+
disconnect(chatId: number): void;
|
|
43
|
+
/**
|
|
44
|
+
* Subscribe to chat events
|
|
45
|
+
* @param chatId - The chat ID
|
|
46
|
+
* @param listener - Event listener callback
|
|
47
|
+
*/
|
|
48
|
+
subscribeToEvents(chatId: number, listener: (event: ChatEvent) => void): void;
|
|
49
|
+
/**
|
|
50
|
+
* Unsubscribe from chat events
|
|
51
|
+
* @param chatId - The chat ID
|
|
52
|
+
* @param listener - Event listener callback to remove
|
|
53
|
+
*/
|
|
54
|
+
unsubscribeFromEvents(chatId: number, listener: (event: ChatEvent) => void): void;
|
|
55
|
+
/**
|
|
56
|
+
* Get all active chat connections
|
|
57
|
+
*/
|
|
58
|
+
getActiveConnections(): number[];
|
|
59
|
+
/**
|
|
60
|
+
* Disconnect all chat connections
|
|
61
|
+
*/
|
|
62
|
+
disconnectAll(): void;
|
|
47
63
|
}
|
|
48
64
|
//# sourceMappingURL=chat.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.service.d.ts","sourceRoot":"","sources":["../../src/chat/chat.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"chat.service.d.ts","sourceRoot":"","sources":["../../src/chat/chat.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGtD,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EAIxB,SAAS,EACV,MAAM,sBAAsB,CAAC;AAE9B,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAkB;IACvC,OAAO,CAAC,YAAY,CAAuC;IAC3D,OAAO,CAAC,cAAc,CAA6D;gBAEvE,IAAI,EAAE,eAAe;IAIjC;;;;;OAKG;IACG,WAAW,CACf,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,EACf,KAAK,GAAE,MAAW,GACjB,OAAO,CAAC,wBAAwB,CAAC;IAiBpC;;;;OAIG;IACG,WAAW,CACf,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,qBAAqB,CAAC;IAqBjC;;;OAGG;IACG,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYzD;;;;OAIG;IACG,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAY3E;;;;OAIG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW;IAUpC;;;OAGG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAShC;;;;OAIG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,GAAG,IAAI;IAsD7E;;;;OAIG;IACH,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,GAAG,IAAI;IAUjF;;OAEG;IACH,oBAAoB,IAAI,MAAM,EAAE;IAIhC;;OAEG;IACH,aAAa,IAAI,IAAI;CAOtB"}
|
|
@@ -4,42 +4,192 @@ exports.BiomeChat = void 0;
|
|
|
4
4
|
const error_handler_1 = require("../core/error-handler");
|
|
5
5
|
class BiomeChat {
|
|
6
6
|
constructor(http) {
|
|
7
|
+
this.eventSources = new Map();
|
|
8
|
+
this.eventListeners = new Map();
|
|
7
9
|
this.http = http;
|
|
8
10
|
}
|
|
9
11
|
/**
|
|
10
12
|
* Get chat messages for a task
|
|
13
|
+
* @param taskId - The task ID
|
|
14
|
+
* @param cursor - Pagination cursor for loading more messages
|
|
15
|
+
* @param limit - Number of messages to fetch (default: 50)
|
|
11
16
|
*/
|
|
12
|
-
async getMessages(taskId, cursor) {
|
|
17
|
+
async getMessages(taskId, cursor, limit = 50) {
|
|
13
18
|
try {
|
|
14
|
-
const params =
|
|
15
|
-
|
|
19
|
+
const params = new URLSearchParams();
|
|
20
|
+
if (cursor)
|
|
21
|
+
params.append('cursor', cursor);
|
|
22
|
+
if (limit)
|
|
23
|
+
params.append('limit', limit.toString());
|
|
24
|
+
const queryString = params.toString() ? `?${params.toString()}` : "";
|
|
25
|
+
const response = await this.http.get(`/tasks/task/${taskId}/chat/messages${queryString}`);
|
|
16
26
|
return response.payload;
|
|
17
27
|
}
|
|
18
28
|
catch (error) {
|
|
19
|
-
|
|
29
|
+
const sdkError = (0, error_handler_1.createSdkError)(error, "Failed to get chat messages");
|
|
30
|
+
throw new Error(sdkError.userMessage || sdkError.message);
|
|
20
31
|
}
|
|
21
32
|
}
|
|
22
33
|
/**
|
|
23
34
|
* Send a chat message for a task
|
|
35
|
+
* @param taskId - The task ID
|
|
36
|
+
* @param content - The message content
|
|
24
37
|
*/
|
|
25
38
|
async sendMessage(taskId, content) {
|
|
26
39
|
try {
|
|
40
|
+
// Validate message content
|
|
41
|
+
if (!content || content.trim().length === 0) {
|
|
42
|
+
const error = (0, error_handler_1.createSdkError)(new Error("Message content cannot be empty"), "Invalid message");
|
|
43
|
+
throw new Error(error.userMessage || error.message);
|
|
44
|
+
}
|
|
27
45
|
const response = await this.http.post(`/tasks/task/${taskId}/chat/messages`, { content });
|
|
28
46
|
return response.payload.message;
|
|
29
47
|
}
|
|
30
48
|
catch (error) {
|
|
31
|
-
|
|
49
|
+
if (error instanceof Error && error.message.includes("Message content cannot be empty")) {
|
|
50
|
+
throw error;
|
|
51
|
+
}
|
|
52
|
+
const sdkError = (0, error_handler_1.createSdkError)(error, "Failed to send chat message");
|
|
53
|
+
throw new Error(sdkError.userMessage || sdkError.message);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Mark a message as read
|
|
58
|
+
* @param messageId - The message ID to mark as read
|
|
59
|
+
*/
|
|
60
|
+
async markMessageAsRead(messageId) {
|
|
61
|
+
try {
|
|
62
|
+
await this.http.post(`/chats/messages/${messageId}/read`, {});
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
const sdkError = (0, error_handler_1.createSdkError)(error, "Failed to mark message as read");
|
|
66
|
+
throw new Error(sdkError.userMessage || sdkError.message);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Send typing indicator
|
|
71
|
+
* @param taskId - The task ID
|
|
72
|
+
* @param isTyping - Whether user is typing
|
|
73
|
+
*/
|
|
74
|
+
async sendTypingIndicator(taskId, isTyping) {
|
|
75
|
+
try {
|
|
76
|
+
await this.http.post(`/tasks/task/${taskId}/chat/typing`, { isTyping });
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
// Silently fail typing indicators to avoid disrupting user experience
|
|
80
|
+
console.debug("Failed to send typing indicator:", error);
|
|
32
81
|
}
|
|
33
82
|
}
|
|
34
83
|
/**
|
|
35
84
|
* Connect to chat events via SSE
|
|
36
|
-
*
|
|
85
|
+
* @param chatId - The chat ID
|
|
86
|
+
* @returns EventSource connection
|
|
37
87
|
*/
|
|
38
88
|
connect(chatId) {
|
|
39
|
-
const baseUrl = this.http.baseURL;
|
|
40
|
-
|
|
89
|
+
const baseUrl = this.http.baseURL.replace(/\/$/, ''); // Remove trailing slash
|
|
90
|
+
const eventSource = new EventSource(`${baseUrl}/chats/${chatId}/events`, {
|
|
41
91
|
withCredentials: true,
|
|
42
92
|
});
|
|
93
|
+
this.eventSources.set(chatId, eventSource);
|
|
94
|
+
return eventSource;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Disconnect from chat events
|
|
98
|
+
* @param chatId - The chat ID
|
|
99
|
+
*/
|
|
100
|
+
disconnect(chatId) {
|
|
101
|
+
const eventSource = this.eventSources.get(chatId);
|
|
102
|
+
if (eventSource) {
|
|
103
|
+
eventSource.close();
|
|
104
|
+
this.eventSources.delete(chatId);
|
|
105
|
+
this.eventListeners.delete(chatId);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Subscribe to chat events
|
|
110
|
+
* @param chatId - The chat ID
|
|
111
|
+
* @param listener - Event listener callback
|
|
112
|
+
*/
|
|
113
|
+
subscribeToEvents(chatId, listener) {
|
|
114
|
+
if (!this.eventListeners.has(chatId)) {
|
|
115
|
+
this.eventListeners.set(chatId, []);
|
|
116
|
+
// Set up the EventSource connection if not already connected
|
|
117
|
+
let eventSource = this.eventSources.get(chatId);
|
|
118
|
+
if (!eventSource) {
|
|
119
|
+
eventSource = this.connect(chatId);
|
|
120
|
+
}
|
|
121
|
+
// Handle different event types
|
|
122
|
+
eventSource.addEventListener('chat.message.created', (e) => {
|
|
123
|
+
try {
|
|
124
|
+
const payload = JSON.parse(e.data);
|
|
125
|
+
const event = {
|
|
126
|
+
type: 'message.created',
|
|
127
|
+
payload: payload
|
|
128
|
+
};
|
|
129
|
+
this.eventListeners.get(chatId)?.forEach(cb => cb(event));
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
console.error('Failed to parse message.created event:', error);
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
eventSource.addEventListener('chat.message.read', (e) => {
|
|
136
|
+
try {
|
|
137
|
+
const payload = JSON.parse(e.data);
|
|
138
|
+
const event = {
|
|
139
|
+
type: 'message.read',
|
|
140
|
+
payload: payload
|
|
141
|
+
};
|
|
142
|
+
this.eventListeners.get(chatId)?.forEach(cb => cb(event));
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
console.error('Failed to parse message.read event:', error);
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
eventSource.addEventListener('user.typing', (e) => {
|
|
149
|
+
try {
|
|
150
|
+
const payload = JSON.parse(e.data);
|
|
151
|
+
const event = {
|
|
152
|
+
type: 'user.typing',
|
|
153
|
+
payload: payload
|
|
154
|
+
};
|
|
155
|
+
this.eventListeners.get(chatId)?.forEach(cb => cb(event));
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
console.error('Failed to parse user.typing event:', error);
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
this.eventListeners.get(chatId)?.push(listener);
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Unsubscribe from chat events
|
|
166
|
+
* @param chatId - The chat ID
|
|
167
|
+
* @param listener - Event listener callback to remove
|
|
168
|
+
*/
|
|
169
|
+
unsubscribeFromEvents(chatId, listener) {
|
|
170
|
+
const listeners = this.eventListeners.get(chatId);
|
|
171
|
+
if (listeners) {
|
|
172
|
+
const index = listeners.indexOf(listener);
|
|
173
|
+
if (index > -1) {
|
|
174
|
+
listeners.splice(index, 1);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Get all active chat connections
|
|
180
|
+
*/
|
|
181
|
+
getActiveConnections() {
|
|
182
|
+
return Array.from(this.eventSources.keys());
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Disconnect all chat connections
|
|
186
|
+
*/
|
|
187
|
+
disconnectAll() {
|
|
188
|
+
this.eventSources.forEach((es, chatId) => {
|
|
189
|
+
es.close();
|
|
190
|
+
});
|
|
191
|
+
this.eventSources.clear();
|
|
192
|
+
this.eventListeners.clear();
|
|
43
193
|
}
|
|
44
194
|
}
|
|
45
195
|
exports.BiomeChat = BiomeChat;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.service.js","sourceRoot":"","sources":["../../src/chat/chat.service.ts"],"names":[],"mappings":";;;AACA,yDAAuD;
|
|
1
|
+
{"version":3,"file":"chat.service.js","sourceRoot":"","sources":["../../src/chat/chat.service.ts"],"names":[],"mappings":";;;AACA,yDAAuD;AAWvD,MAAa,SAAS;IAKpB,YAAY,IAAqB;QAHzB,iBAAY,GAA6B,IAAI,GAAG,EAAE,CAAC;QACnD,mBAAc,GAAmD,IAAI,GAAG,EAAE,CAAC;QAGjF,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,WAAW,CACf,MAAc,EACd,MAAe,EACf,QAAgB,EAAE;QAElB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;YACrC,IAAI,MAAM;gBAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC5C,IAAI,KAAK;gBAAE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;YAEpD,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAElC,eAAe,MAAM,iBAAiB,WAAW,EAAE,CAAC,CAAC;YACvD,OAAO,QAAQ,CAAC,OAAO,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,IAAA,8BAAc,EAAC,KAAK,EAAE,6BAA6B,CAAC,CAAC;YACtE,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,WAAW,CACf,MAAc,EACd,OAAe;QAEf,IAAI,CAAC;YACH,2BAA2B;YAC3B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5C,MAAM,KAAK,GAAG,IAAA,8BAAc,EAAC,IAAI,KAAK,CAAC,iCAAiC,CAAC,EAAE,iBAAiB,CAAC,CAAC;gBAC9F,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;YACtD,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAEnC,eAAe,MAAM,gBAAgB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YACtD,OAAO,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,iCAAiC,CAAC,EAAE,CAAC;gBACxF,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,QAAQ,GAAG,IAAA,8BAAc,EAAC,KAAK,EAAE,6BAA6B,CAAC,CAAC;YACtE,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,iBAAiB,CAAC,SAAiB;QACvC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAClB,mBAAmB,SAAS,OAAO,EACnC,EAAE,CACH,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,IAAA,8BAAc,EAAC,KAAK,EAAE,gCAAgC,CAAC,CAAC;YACzE,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,mBAAmB,CAAC,MAAc,EAAE,QAAiB;QACzD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAClB,eAAe,MAAM,cAAc,EACnC,EAAE,QAAQ,EAAE,CACb,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,sEAAsE;YACtE,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAC,MAAc;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,wBAAwB;QAC9E,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,GAAG,OAAO,UAAU,MAAM,SAAS,EAAE;YACvE,eAAe,EAAE,IAAI;SACtB,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAC3C,OAAO,WAAW,CAAC;IACrB,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,MAAc;QACvB,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,WAAW,EAAE,CAAC;YAChB,WAAW,CAAC,KAAK,EAAE,CAAC;YACpB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACjC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,iBAAiB,CAAC,MAAc,EAAE,QAAoC;QACpE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAEpC,6DAA6D;YAC7D,IAAI,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAChD,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACrC,CAAC;YAED,+BAA+B;YAC/B,WAAW,CAAC,gBAAgB,CAAC,sBAAsB,EAAE,CAAC,CAAe,EAAE,EAAE;gBACvE,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;oBACnC,MAAM,KAAK,GAAc;wBACvB,IAAI,EAAE,iBAAiB;wBACvB,OAAO,EAAE,OAAgC;qBAC1C,CAAC;oBACF,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC5D,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC;gBACjE,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,WAAW,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC,CAAe,EAAE,EAAE;gBACpE,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;oBACnC,MAAM,KAAK,GAAc;wBACvB,IAAI,EAAE,cAAc;wBACpB,OAAO,EAAE,OAA+B;qBACzC,CAAC;oBACF,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC5D,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;gBAC9D,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,WAAW,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAe,EAAE,EAAE;gBAC9D,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;oBACnC,MAAM,KAAK,GAAc;wBACvB,IAAI,EAAE,aAAa;wBACnB,OAAO,EAAE,OAA0B;qBACpC,CAAC;oBACF,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC5D,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;gBAC7D,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC;IAED;;;;OAIG;IACH,qBAAqB,CAAC,MAAc,EAAE,QAAoC;QACxE,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC1C,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;gBACf,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,oBAAoB;QAClB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,aAAa;QACX,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE;YACvC,EAAE,CAAC,KAAK,EAAE,CAAC;QACb,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC;CACF;AAzND,8BAyNC"}
|
|
@@ -1,16 +1,59 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* Ecosystem model for Biome platform
|
|
3
|
+
* Ecosystems are containers that can be nested and have participants
|
|
4
4
|
*/
|
|
5
|
+
import { OrganizationMinimal } from './organization.model';
|
|
6
|
+
import { PersonMinimal } from './person.model';
|
|
7
|
+
export type EcosystemType = 'business' | 'personal' | 'community' | 'government' | 'nonprofit' | 'other';
|
|
8
|
+
export type EcosystemStatus = 'active' | 'inactive' | 'archived';
|
|
9
|
+
export { OrganizationMinimal };
|
|
10
|
+
export { PersonMinimal };
|
|
5
11
|
export interface Ecosystem {
|
|
6
12
|
id?: number;
|
|
7
13
|
name: string;
|
|
8
14
|
description?: string;
|
|
9
|
-
|
|
15
|
+
type?: EcosystemType;
|
|
16
|
+
status?: EcosystemStatus;
|
|
17
|
+
ownerId: number;
|
|
18
|
+
parentEcosystemId?: number;
|
|
19
|
+
deletedAt?: Date;
|
|
20
|
+
deletedBy?: number;
|
|
10
21
|
createdAt: Date;
|
|
11
22
|
createdBy: number;
|
|
12
23
|
updatedAt: Date;
|
|
13
24
|
updatedBy: number;
|
|
14
25
|
}
|
|
15
26
|
export type EcosystemMinimal = Pick<Ecosystem, 'id' | 'name' | 'description'>;
|
|
27
|
+
export interface CreateEcosystemRequest {
|
|
28
|
+
name: string;
|
|
29
|
+
description?: string;
|
|
30
|
+
type?: EcosystemType;
|
|
31
|
+
parentEcosystemId?: number;
|
|
32
|
+
}
|
|
33
|
+
export interface UpdateEcosystemRequest {
|
|
34
|
+
name?: string;
|
|
35
|
+
description?: string;
|
|
36
|
+
type?: EcosystemType;
|
|
37
|
+
status?: EcosystemStatus;
|
|
38
|
+
parentEcosystemId?: number;
|
|
39
|
+
}
|
|
40
|
+
export interface EcosystemListParams {
|
|
41
|
+
page?: number;
|
|
42
|
+
limit?: number;
|
|
43
|
+
status?: EcosystemStatus;
|
|
44
|
+
parentEcosystemId?: number;
|
|
45
|
+
}
|
|
46
|
+
export interface EcosystemListResponse {
|
|
47
|
+
ecosystems: Ecosystem[];
|
|
48
|
+
pagination: {
|
|
49
|
+
page: number;
|
|
50
|
+
limit: number;
|
|
51
|
+
total: number;
|
|
52
|
+
totalPages: number;
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
export interface EcosystemWithParticipants extends Ecosystem {
|
|
56
|
+
organizations: OrganizationMinimal[];
|
|
57
|
+
people: PersonMinimal[];
|
|
58
|
+
}
|
|
16
59
|
//# sourceMappingURL=ecosystem.model.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ecosystem.model.d.ts","sourceRoot":"","sources":["../../src/ecosystem/ecosystem.model.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,SAAS;IACtB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,
|
|
1
|
+
{"version":3,"file":"ecosystem.model.d.ts","sourceRoot":"","sources":["../../src/ecosystem/ecosystem.model.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAgB,mBAAmB,EAAoB,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EAAU,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEvD,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,GAAG,YAAY,GAAG,WAAW,GAAG,OAAO,CAAC;AACzG,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAC;AAEjE,OAAO,EAAE,mBAAmB,EAAE,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,CAAC;AAEzB,MAAM,WAAW,SAAS;IACtB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,GAAG,MAAM,GAAG,aAAa,CAAC,CAAC;AAE9E,MAAM,WAAW,sBAAsB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,sBAAsB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAqB;IAClC,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,UAAU,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;KACtB,CAAC;CACL;AAED,MAAM,WAAW,yBAA0B,SAAQ,SAAS;IACxD,aAAa,EAAE,mBAAmB,EAAE,CAAC;IACrC,MAAM,EAAE,aAAa,EAAE,CAAC;CAC3B"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
3
|
+
* Ecosystem model for Biome platform
|
|
4
|
+
* Ecosystems are containers that can be nested and have participants
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
//# sourceMappingURL=ecosystem.model.js.map
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { BiomeHttpClient } from "../core/http-client";
|
|
2
|
+
import { Ecosystem, CreateEcosystemRequest, UpdateEcosystemRequest, EcosystemListParams, EcosystemListResponse, OrganizationMinimal, PersonMinimal } from "./ecosystem.model";
|
|
3
|
+
/**
|
|
4
|
+
* Ecosystem management service
|
|
5
|
+
*/
|
|
6
|
+
export declare class BiomeEcosystems {
|
|
7
|
+
private http;
|
|
8
|
+
constructor(http: BiomeHttpClient);
|
|
9
|
+
/**
|
|
10
|
+
* Get ecosystem by ID
|
|
11
|
+
*/
|
|
12
|
+
getById(id: number): Promise<Ecosystem>;
|
|
13
|
+
/**
|
|
14
|
+
* Get organizations belonging to an ecosystem
|
|
15
|
+
*/
|
|
16
|
+
getOrganizations(ecosystemId: number): Promise<OrganizationMinimal[]>;
|
|
17
|
+
/**
|
|
18
|
+
* Get people belonging to an ecosystem
|
|
19
|
+
*/
|
|
20
|
+
getPeople(ecosystemId: number): Promise<PersonMinimal[]>;
|
|
21
|
+
/**
|
|
22
|
+
* List ecosystems with pagination and filters
|
|
23
|
+
*/
|
|
24
|
+
list(params?: EcosystemListParams): Promise<EcosystemListResponse>;
|
|
25
|
+
/**
|
|
26
|
+
* Get child ecosystems (nested 1:n)
|
|
27
|
+
*/
|
|
28
|
+
getChildren(parentId: number): Promise<Ecosystem[]>;
|
|
29
|
+
/**
|
|
30
|
+
* Create a new ecosystem
|
|
31
|
+
*/
|
|
32
|
+
create(ecosystem: CreateEcosystemRequest): Promise<{
|
|
33
|
+
id: number;
|
|
34
|
+
}>;
|
|
35
|
+
/**
|
|
36
|
+
* Update an existing ecosystem
|
|
37
|
+
*/
|
|
38
|
+
update(id: number, updates: UpdateEcosystemRequest): Promise<Ecosystem>;
|
|
39
|
+
/**
|
|
40
|
+
* Delete an ecosystem (soft delete)
|
|
41
|
+
*/
|
|
42
|
+
delete(id: number): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Add organization to ecosystem
|
|
45
|
+
*/
|
|
46
|
+
addOrganization(ecosystemId: number, organizationId: number): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* Remove organization from ecosystem
|
|
49
|
+
*/
|
|
50
|
+
removeOrganization(ecosystemId: number, organizationId: number): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* Add person to ecosystem
|
|
53
|
+
*/
|
|
54
|
+
addPerson(ecosystemId: number, personId: number): Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* Remove person from ecosystem
|
|
57
|
+
*/
|
|
58
|
+
removePerson(ecosystemId: number, personId: number): Promise<void>;
|
|
59
|
+
/**
|
|
60
|
+
* Set parent ecosystem (for nesting)
|
|
61
|
+
*/
|
|
62
|
+
setParent(ecosystemId: number, parentEcosystemId: number): Promise<Ecosystem>;
|
|
63
|
+
/**
|
|
64
|
+
* Remove parent ecosystem
|
|
65
|
+
*/
|
|
66
|
+
removeParent(ecosystemId: number): Promise<Ecosystem>;
|
|
67
|
+
/**
|
|
68
|
+
* Transfer ownership to another user
|
|
69
|
+
*/
|
|
70
|
+
transferOwnership(ecosystemId: number, newOwnerId: number): Promise<Ecosystem>;
|
|
71
|
+
/**
|
|
72
|
+
* Build query parameters from filters
|
|
73
|
+
*/
|
|
74
|
+
private buildQueryParams;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=ecosystem.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ecosystem.service.d.ts","sourceRoot":"","sources":["../../src/ecosystem/ecosystem.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGtD,OAAO,EACH,SAAS,EACT,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EAErB,mBAAmB,EACnB,aAAa,EAChB,MAAM,mBAAmB,CAAC;AAE3B;;GAEG;AACH,qBAAa,eAAe;IACZ,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,eAAe;IAEzC;;OAEG;IACG,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAW7C;;OAEG;IACG,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAW3E;;OAEG;IACG,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAW9D;;OAEG;IACG,IAAI,CAAC,MAAM,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAYxE;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAWzD;;OAEG;IACG,MAAM,CAAC,SAAS,EAAE,sBAAsB,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAYxE;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,SAAS,CAAC;IAY7E;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQvC;;OAEG;IACG,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWjF;;OAEG;IACG,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQpF;;OAEG;IACG,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWrE;;OAEG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxE;;OAEG;IACG,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAYnF;;OAEG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAW3D;;OAEG;IACG,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAYpF;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAoB3B"}
|