qqsl-agent 0.0.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 (70) hide show
  1. package/README.md +24 -0
  2. package/assets/images/card/copy.png +0 -0
  3. package/assets/images/card/refresh.png +0 -0
  4. package/assets/images/card/share.png +0 -0
  5. package/assets/images/card/think-finish.png +0 -0
  6. package/assets/images/input/relate.png +0 -0
  7. package/assets/images/input/send-gray.png +0 -0
  8. package/assets/images/input/send.png +0 -0
  9. package/assets/images/input/toggle-model.png +0 -0
  10. package/assets/images/logo.png +0 -0
  11. package/assets/images/sidebar/collapse.png +0 -0
  12. package/assets/images/sidebar/delete.png +0 -0
  13. package/assets/images/sidebar/expand.png +0 -0
  14. package/assets/images/sidebar/history-chat.png +0 -0
  15. package/assets/images/sidebar/new-chat.png +0 -0
  16. package/assets/images/sidebar/time.png +0 -0
  17. package/assets/styles/index.css +1 -0
  18. package/chat/chat-input/chat-input.component.d.ts +46 -0
  19. package/chat/chat-messages/chat-messages.component.d.ts +33 -0
  20. package/chat/chat-sidebar/chat-sidebar.component.d.ts +20 -0
  21. package/chat/chat-sidebar/history-group/history-group.component.d.ts +18 -0
  22. package/chat/chat.component.d.ts +34 -0
  23. package/chat/chat.module.d.ts +28 -0
  24. package/chat/components/pagination/pagination.component.d.ts +14 -0
  25. package/chat/index.d.ts +5 -0
  26. package/chat/models/conversation.model.d.ts +20 -0
  27. package/chat/models/knowledge-list.model.d.ts +8 -0
  28. package/chat/models/message.model.d.ts +41 -0
  29. package/chat/models/model-list.model.d.ts +9 -0
  30. package/chat/models/send-message.model.d.ts +33 -0
  31. package/chat/pipes/markdown.pipe.d.ts +8 -0
  32. package/chat/public-api.d.ts +2 -0
  33. package/chat/services/http.service.d.ts +13 -0
  34. package/chat/services/http2.service.d.ts +45 -0
  35. package/chat/services/markdown-stream.service.d.ts +10 -0
  36. package/chat/services/sse.service.d.ts +28 -0
  37. package/chat/store/store.service.d.ts +17 -0
  38. package/esm2020/chat/chat-input/chat-input.component.mjs +151 -0
  39. package/esm2020/chat/chat-messages/chat-messages.component.mjs +110 -0
  40. package/esm2020/chat/chat-sidebar/chat-sidebar.component.mjs +118 -0
  41. package/esm2020/chat/chat-sidebar/history-group/history-group.component.mjs +124 -0
  42. package/esm2020/chat/chat.component.mjs +138 -0
  43. package/esm2020/chat/chat.module.mjs +98 -0
  44. package/esm2020/chat/components/pagination/pagination.component.mjs +91 -0
  45. package/esm2020/chat/models/conversation.model.mjs +2 -0
  46. package/esm2020/chat/models/knowledge-list.model.mjs +2 -0
  47. package/esm2020/chat/models/message.model.mjs +35 -0
  48. package/esm2020/chat/models/model-list.model.mjs +2 -0
  49. package/esm2020/chat/models/send-message.model.mjs +2 -0
  50. package/esm2020/chat/pipes/markdown.pipe.mjs +24 -0
  51. package/esm2020/chat/public-api.mjs +3 -0
  52. package/esm2020/chat/qqsl-agent-chat.mjs +5 -0
  53. package/esm2020/chat/services/http.service.mjs +68 -0
  54. package/esm2020/chat/services/http2.service.mjs +101 -0
  55. package/esm2020/chat/services/markdown-stream.service.mjs +137 -0
  56. package/esm2020/chat/services/sse.service.mjs +107 -0
  57. package/esm2020/chat/store/store.service.mjs +38 -0
  58. package/esm2020/public-api.mjs +5 -0
  59. package/esm2020/qqsl-agent.mjs +5 -0
  60. package/fesm2015/qqsl-agent-chat.mjs +1255 -0
  61. package/fesm2015/qqsl-agent-chat.mjs.map +1 -0
  62. package/fesm2015/qqsl-agent.mjs +9 -0
  63. package/fesm2015/qqsl-agent.mjs.map +1 -0
  64. package/fesm2020/qqsl-agent-chat.mjs +1248 -0
  65. package/fesm2020/qqsl-agent-chat.mjs.map +1 -0
  66. package/fesm2020/qqsl-agent.mjs +9 -0
  67. package/fesm2020/qqsl-agent.mjs.map +1 -0
  68. package/index.d.ts +5 -0
  69. package/package.json +45 -0
  70. package/public-api.d.ts +2 -0
@@ -0,0 +1,68 @@
1
+ import { HttpHeaders, HttpResponse } from '@angular/common/http';
2
+ import { Injectable } from '@angular/core';
3
+ import { filter, map } from 'rxjs';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common/http";
6
+ import * as i2 from "../store/store.service";
7
+ export class HttpService {
8
+ constructor(http, storeService) {
9
+ this.http = http;
10
+ this.storeService = storeService;
11
+ }
12
+ get(url, paramObj) {
13
+ if (paramObj) {
14
+ return this.http
15
+ .get(url, {
16
+ headers: new HttpHeaders({
17
+ 'Content-Type': 'application/json',
18
+ Authorization: this.storeService.getToken(),
19
+ }),
20
+ observe: 'response',
21
+ params: paramObj,
22
+ responseType: 'json',
23
+ withCredentials: false,
24
+ })
25
+ .pipe(filter((r) => r instanceof HttpResponse), map((r) => {
26
+ return r.body;
27
+ }));
28
+ }
29
+ return this.http
30
+ .get(url, {
31
+ headers: new HttpHeaders({
32
+ 'Content-Type': 'application/json',
33
+ Authorization: this.storeService.getToken(),
34
+ }),
35
+ observe: 'response',
36
+ responseType: 'json',
37
+ withCredentials: false,
38
+ })
39
+ .pipe(filter((r) => r instanceof HttpResponse), map((r) => {
40
+ return r.body;
41
+ }));
42
+ }
43
+ post(url, body, options) {
44
+ // 默认配置
45
+ const defaultOptions = {
46
+ headers: new HttpHeaders({
47
+ 'Content-Type': 'application/json',
48
+ Authorization: this.storeService.getToken(),
49
+ }),
50
+ observe: 'response',
51
+ responseType: 'json',
52
+ withCredentials: false,
53
+ };
54
+ // 如果提供了自定义选项,则合并配置
55
+ const httpOptions = options ? { ...defaultOptions, ...options } : defaultOptions;
56
+ // 发送 POST 请求
57
+ return this.http.post(url, body, httpOptions);
58
+ }
59
+ }
60
+ HttpService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: HttpService, deps: [{ token: i1.HttpClient }, { token: i2.StoreService }], target: i0.ɵɵFactoryTarget.Injectable });
61
+ HttpService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: HttpService, providedIn: 'root' });
62
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: HttpService, decorators: [{
63
+ type: Injectable,
64
+ args: [{
65
+ providedIn: 'root',
66
+ }]
67
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.StoreService }]; } });
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWdlbnQvY2hhdC9zZXJ2aWNlcy9odHRwLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFjLE1BQU0sTUFBTSxDQUFDOzs7O0FBTS9DLE1BQU0sT0FBTyxXQUFXO0lBQ3RCLFlBQ1UsSUFBZ0IsRUFDaEIsWUFBMEI7UUFEMUIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixpQkFBWSxHQUFaLFlBQVksQ0FBYztJQUNqQyxDQUFDO0lBRUcsR0FBRyxDQUFDLEdBQVcsRUFBRSxRQUFjO1FBQ3BDLElBQUksUUFBUSxFQUFFO1lBQ1osT0FBTyxJQUFJLENBQUMsSUFBSTtpQkFDYixHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUNSLE9BQU8sRUFBRSxJQUFJLFdBQVcsQ0FBQztvQkFDdkIsY0FBYyxFQUFFLGtCQUFrQjtvQkFDbEMsYUFBYSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFO2lCQUM1QyxDQUFDO2dCQUNGLE9BQU8sRUFBRSxVQUFVO2dCQUNuQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsWUFBWSxFQUFFLE1BQU07Z0JBQ3BCLGVBQWUsRUFBRSxLQUFLO2FBQ3ZCLENBQUM7aUJBQ0QsSUFBSSxDQUNILE1BQU0sQ0FBQyxDQUFDLENBQU0sRUFBMEIsRUFBRSxDQUFDLENBQUMsWUFBWSxZQUFZLENBQUMsRUFDckUsR0FBRyxDQUFDLENBQUMsQ0FBb0IsRUFBRSxFQUFFO2dCQUMzQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDaEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztTQUNMO1FBQ0QsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUixPQUFPLEVBQUUsSUFBSSxXQUFXLENBQUM7Z0JBQ3ZCLGNBQWMsRUFBRSxrQkFBa0I7Z0JBQ2xDLGFBQWEsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRTthQUM1QyxDQUFDO1lBQ0YsT0FBTyxFQUFFLFVBQVU7WUFDbkIsWUFBWSxFQUFFLE1BQU07WUFDcEIsZUFBZSxFQUFFLEtBQUs7U0FDdkIsQ0FBQzthQUNELElBQUksQ0FDSCxNQUFNLENBQUMsQ0FBQyxDQUFNLEVBQTBCLEVBQUUsQ0FBQyxDQUFDLFlBQVksWUFBWSxDQUFDLEVBQ3JFLEdBQUcsQ0FBQyxDQUFDLENBQW9CLEVBQUUsRUFBRTtZQUMzQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUM7SUFFTSxJQUFJLENBQUMsR0FBVyxFQUFFLElBQVMsRUFBRSxPQUFhO1FBQy9DLE9BQU87UUFDUCxNQUFNLGNBQWMsR0FBRztZQUNyQixPQUFPLEVBQUUsSUFBSSxXQUFXLENBQUM7Z0JBQ3ZCLGNBQWMsRUFBRSxrQkFBa0I7Z0JBQ2xDLGFBQWEsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRTthQUM1QyxDQUFDO1lBQ0YsT0FBTyxFQUFFLFVBQVU7WUFDbkIsWUFBWSxFQUFFLE1BQU07WUFDcEIsZUFBZSxFQUFFLEtBQUs7U0FDdkIsQ0FBQztRQUVGLG1CQUFtQjtRQUNuQixNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxjQUFjLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO1FBRWpGLGFBQWE7UUFDYixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDaEQsQ0FBQzs7eUdBN0RVLFdBQVc7NkdBQVgsV0FBVyxjQUZWLE1BQU07NEZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFN0b3JlU2VydmljZSB9IGZyb20gJy4uL3N0b3JlL3N0b3JlLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgSHR0cFNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBzdG9yZVNlcnZpY2U6IFN0b3JlU2VydmljZSxcbiAgKSB7fVxuXG4gIHB1YmxpYyBnZXQodXJsOiBzdHJpbmcsIHBhcmFtT2JqPzogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBpZiAocGFyYW1PYmopIHtcbiAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgLmdldCh1cmwsIHtcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgIEF1dGhvcml6YXRpb246IHRoaXMuc3RvcmVTZXJ2aWNlLmdldFRva2VuKCksXG4gICAgICAgICAgfSksXG4gICAgICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyxcbiAgICAgICAgICBwYXJhbXM6IHBhcmFtT2JqLFxuICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogZmFsc2UsXG4gICAgICAgIH0pXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGZpbHRlcigocjogYW55KTogciBpcyBIdHRwUmVzcG9uc2U8YW55PiA9PiByIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlKSxcbiAgICAgICAgICBtYXAoKHI6IEh0dHBSZXNwb25zZTxhbnk+KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gci5ib2R5O1xuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KHVybCwge1xuICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogdGhpcy5zdG9yZVNlcnZpY2UuZ2V0VG9rZW4oKSxcbiAgICAgICAgfSksXG4gICAgICAgIG9ic2VydmU6ICdyZXNwb25zZScsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IGZhbHNlLFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKHI6IGFueSk6IHIgaXMgSHR0cFJlc3BvbnNlPGFueT4gPT4gciBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSksXG4gICAgICAgIG1hcCgocjogSHR0cFJlc3BvbnNlPGFueT4pID0+IHtcbiAgICAgICAgICByZXR1cm4gci5ib2R5O1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gIH1cblxuICBwdWJsaWMgcG9zdCh1cmw6IHN0cmluZywgYm9keTogYW55LCBvcHRpb25zPzogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAvLyDpu5jorqTphY3nva5cbiAgICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIEF1dGhvcml6YXRpb246IHRoaXMuc3RvcmVTZXJ2aWNlLmdldFRva2VuKCksXG4gICAgICB9KSxcbiAgICAgIG9ic2VydmU6ICdyZXNwb25zZScsXG4gICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogZmFsc2UsXG4gICAgfTtcblxuICAgIC8vIOWmguaenOaPkOS+m+S6huiHquWumuS5iemAiemhue+8jOWImeWQiOW5tumFjee9rlxuICAgIGNvbnN0IGh0dHBPcHRpb25zID0gb3B0aW9ucyA/IHsgLi4uZGVmYXVsdE9wdGlvbnMsIC4uLm9wdGlvbnMgfSA6IGRlZmF1bHRPcHRpb25zO1xuXG4gICAgLy8g5Y+R6YCBIFBPU1Qg6K+35rGCXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHVybCwgYm9keSwgaHR0cE9wdGlvbnMpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,101 @@
1
+ import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
2
+ import { inject, Injectable } from '@angular/core';
3
+ import { StoreService } from '../store/store.service';
4
+ import * as i0 from "@angular/core";
5
+ export class HttpService {
6
+ constructor() {
7
+ this.http = inject(HttpClient);
8
+ this.storeService = inject(StoreService);
9
+ this.BASE_URL = '/api'; // 或者完整域名
10
+ }
11
+ /**
12
+ * 统一获取 Headers
13
+ */
14
+ getHeaders() {
15
+ return new HttpHeaders({
16
+ 'Content-Type': 'application/json',
17
+ Authorization: `${this.storeService.getToken()}`,
18
+ });
19
+ }
20
+ /**
21
+ * GET 请求
22
+ */
23
+ get(url, params) {
24
+ return this.http.get(this.formatUrl(url), {
25
+ headers: this.getHeaders(),
26
+ params: this.resolveParams(params),
27
+ });
28
+ }
29
+ /**
30
+ * POST 请求
31
+ */
32
+ post(url, body) {
33
+ return this.http.post(this.formatUrl(url), body, {
34
+ headers: this.getHeaders(),
35
+ });
36
+ }
37
+ /**
38
+ * PUT 请求
39
+ */
40
+ put(url, body) {
41
+ return this.http.put(this.formatUrl(url), body, {
42
+ headers: this.getHeaders(),
43
+ });
44
+ }
45
+ /**
46
+ * DELETE 请求
47
+ * 兼容支持:既支持 URL 参数,也支持 Body
48
+ */
49
+ delete(url, params, body) {
50
+ return this.http.request('DELETE', this.formatUrl(url), {
51
+ headers: this.getHeaders(),
52
+ params: this.resolveParams(params),
53
+ body: body, // HttpClient 的 delete() 方法默认不支持 body,需用 request() 通用方法
54
+ });
55
+ }
56
+ // ================= 私有辅助方法 =================
57
+ /**
58
+ * 统一处理 URL
59
+ * 比如自动拼接 BaseUrl,或者处理斜杠
60
+ */
61
+ formatUrl(url) {
62
+ if (url.startsWith('http'))
63
+ return url;
64
+ // 确保拼接顺滑
65
+ const baseUrl = this.storeService.getBaseUrl();
66
+ const cleanBase = baseUrl.replace(/\/$/, '');
67
+ const cleanUrl = url.startsWith('/') ? url : `/${url}`;
68
+ return `${cleanBase}${cleanUrl}`;
69
+ }
70
+ /**
71
+ * 统一清洗参数
72
+ * 过滤掉 null 和 undefined,防止传给后端 "null" 字符串
73
+ */
74
+ resolveParams(params) {
75
+ let httpParams = new HttpParams();
76
+ if (params) {
77
+ Object.keys(params).forEach(key => {
78
+ const value = params[key];
79
+ if (value !== null && value !== undefined) {
80
+ if (Array.isArray(value)) {
81
+ // 支持数组参数 ids: [1, 2] => ids=1&ids=2
82
+ value.forEach(val => (httpParams = httpParams.append(key, val)));
83
+ }
84
+ else {
85
+ httpParams = httpParams.set(key, value);
86
+ }
87
+ }
88
+ });
89
+ }
90
+ return httpParams;
91
+ }
92
+ }
93
+ HttpService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: HttpService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
94
+ HttpService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: HttpService, providedIn: 'root' });
95
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: HttpService, decorators: [{
96
+ type: Injectable,
97
+ args: [{
98
+ providedIn: 'root',
99
+ }]
100
+ }] });
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cDIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FnZW50L2NoYXQvc2VydmljZXMvaHR0cDIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7O0FBV3RELE1BQU0sT0FBTyxXQUFXO0lBSHhCO1FBSVUsU0FBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxQixpQkFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUUzQixhQUFRLEdBQUcsTUFBTSxDQUFDLENBQUMsU0FBUztLQXdGOUM7SUF0RkM7O09BRUc7SUFDSyxVQUFVO1FBQ2hCLE9BQU8sSUFBSSxXQUFXLENBQUM7WUFDckIsY0FBYyxFQUFFLGtCQUFrQjtZQUNsQyxhQUFhLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUFFO1NBQ2pELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNJLEdBQUcsQ0FBSSxHQUFXLEVBQUUsTUFBWTtRQUNyQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDM0MsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDMUIsTUFBTSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO1NBQ25DLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNJLElBQUksQ0FBSSxHQUFXLEVBQUUsSUFBUztRQUNuQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFO1lBQ2xELE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO1NBQzNCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNJLEdBQUcsQ0FBSSxHQUFXLEVBQUUsSUFBUztRQUNsQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFO1lBQ2pELE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO1NBQzNCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSSxNQUFNLENBQUksR0FBVyxFQUFFLE1BQVksRUFBRSxJQUFVO1FBQ3BELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUksUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDekQsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDMUIsTUFBTSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO1lBQ2xDLElBQUksRUFBRSxJQUFJLEVBQUUsdURBQXVEO1NBQ3BFLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCw2Q0FBNkM7SUFFN0M7OztPQUdHO0lBQ0ssU0FBUyxDQUFDLEdBQVc7UUFDM0IsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztZQUFFLE9BQU8sR0FBRyxDQUFDO1FBQ3ZDLFNBQVM7UUFDVCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQy9DLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN2RCxPQUFPLEdBQUcsU0FBUyxHQUFHLFFBQVEsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFRDs7O09BR0c7SUFDSyxhQUFhLENBQUMsTUFBVztRQUMvQixJQUFJLFVBQVUsR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ2xDLElBQUksTUFBTSxFQUFFO1lBQ1YsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2hDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDMUIsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7b0JBQ3pDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTt3QkFDeEIsb0NBQW9DO3dCQUNwQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUNsRTt5QkFBTTt3QkFDTCxVQUFVLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7cUJBQ3pDO2lCQUNGO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7O3lHQTNGVSxXQUFXOzZHQUFYLFdBQVcsY0FGVixNQUFNOzRGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFN0b3JlU2VydmljZSB9IGZyb20gJy4uL3N0b3JlL3N0b3JlLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwaVJlc3BvbnNlPFQgPSBhbnk+IHtcbiAgY29kZTogbnVtYmVyO1xuICBtc2c6IHN0cmluZztcbiAgZGF0YTogVDtcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEh0dHBTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuICBwcml2YXRlIHN0b3JlU2VydmljZSA9IGluamVjdChTdG9yZVNlcnZpY2UpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgQkFTRV9VUkwgPSAnL2FwaSc7IC8vIOaIluiAheWujOaVtOWfn+WQjVxuXG4gIC8qKlxuICAgKiDnu5/kuIDojrflj5YgSGVhZGVyc1xuICAgKi9cbiAgcHJpdmF0ZSBnZXRIZWFkZXJzKCk6IEh0dHBIZWFkZXJzIHtcbiAgICByZXR1cm4gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICBBdXRob3JpemF0aW9uOiBgJHt0aGlzLnN0b3JlU2VydmljZS5nZXRUb2tlbigpfWAsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR0VUIOivt+axglxuICAgKi9cbiAgcHVibGljIGdldDxUPih1cmw6IHN0cmluZywgcGFyYW1zPzogYW55KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8VD4odGhpcy5mb3JtYXRVcmwodXJsKSwge1xuICAgICAgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKCksXG4gICAgICBwYXJhbXM6IHRoaXMucmVzb2x2ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBPU1Qg6K+35rGCXG4gICAqL1xuICBwdWJsaWMgcG9zdDxUPih1cmw6IHN0cmluZywgYm9keTogYW55KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFQ+KHRoaXMuZm9ybWF0VXJsKHVybCksIGJvZHksIHtcbiAgICAgIGhlYWRlcnM6IHRoaXMuZ2V0SGVhZGVycygpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBVVCDor7fmsYJcbiAgICovXG4gIHB1YmxpYyBwdXQ8VD4odXJsOiBzdHJpbmcsIGJvZHk6IGFueSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PFQ+KHRoaXMuZm9ybWF0VXJsKHVybCksIGJvZHksIHtcbiAgICAgIGhlYWRlcnM6IHRoaXMuZ2V0SGVhZGVycygpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERFTEVURSDor7fmsYJcbiAgICog5YW85a655pSv5oyB77ya5pei5pSv5oyBIFVSTCDlj4LmlbDvvIzkuZ/mlK/mjIEgQm9keVxuICAgKi9cbiAgcHVibGljIGRlbGV0ZTxUPih1cmw6IHN0cmluZywgcGFyYW1zPzogYW55LCBib2R5PzogYW55KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0PFQ+KCdERUxFVEUnLCB0aGlzLmZvcm1hdFVybCh1cmwpLCB7XG4gICAgICBoZWFkZXJzOiB0aGlzLmdldEhlYWRlcnMoKSxcbiAgICAgIHBhcmFtczogdGhpcy5yZXNvbHZlUGFyYW1zKHBhcmFtcyksXG4gICAgICBib2R5OiBib2R5LCAvLyBIdHRwQ2xpZW50IOeahCBkZWxldGUoKSDmlrnms5Xpu5jorqTkuI3mlK/mjIEgYm9kee+8jOmcgOeUqCByZXF1ZXN0KCkg6YCa55So5pa55rOVXG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PSDnp4HmnInovoXliqnmlrnms5UgPT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICog57uf5LiA5aSE55CGIFVSTFxuICAgKiDmr5TlpoLoh6rliqjmi7zmjqUgQmFzZVVybO+8jOaIluiAheWkhOeQhuaWnOadoFxuICAgKi9cbiAgcHJpdmF0ZSBmb3JtYXRVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICh1cmwuc3RhcnRzV2l0aCgnaHR0cCcpKSByZXR1cm4gdXJsO1xuICAgIC8vIOehruS/neaLvOaOpemhuua7kVxuICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLnN0b3JlU2VydmljZS5nZXRCYXNlVXJsKCk7XG4gICAgY29uc3QgY2xlYW5CYXNlID0gYmFzZVVybC5yZXBsYWNlKC9cXC8kLywgJycpO1xuICAgIGNvbnN0IGNsZWFuVXJsID0gdXJsLnN0YXJ0c1dpdGgoJy8nKSA/IHVybCA6IGAvJHt1cmx9YDtcbiAgICByZXR1cm4gYCR7Y2xlYW5CYXNlfSR7Y2xlYW5Vcmx9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiDnu5/kuIDmuIXmtJflj4LmlbBcbiAgICog6L+H5ruk5o6JIG51bGwg5ZKMIHVuZGVmaW5lZO+8jOmYsuatouS8oOe7meWQjuerryBcIm51bGxcIiDlrZfnrKbkuLJcbiAgICovXG4gIHByaXZhdGUgcmVzb2x2ZVBhcmFtcyhwYXJhbXM6IGFueSk6IEh0dHBQYXJhbXMge1xuICAgIGxldCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBpZiAocGFyYW1zKSB7XG4gICAgICBPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJhbXNba2V5XTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIC8vIOaUr+aMgeaVsOe7hOWPguaVsCBpZHM6IFsxLCAyXSA9PiBpZHM9MSZpZHM9MlxuICAgICAgICAgICAgdmFsdWUuZm9yRWFjaCh2YWwgPT4gKGh0dHBQYXJhbXMgPSBodHRwUGFyYW1zLmFwcGVuZChrZXksIHZhbCkpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaHR0cFBhcmFtcyA9IGh0dHBQYXJhbXMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBodHRwUGFyYW1zO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,137 @@
1
+ // markdown-stream.service.ts
2
+ import { Injectable } from '@angular/core';
3
+ import { Marked } from 'marked';
4
+ import { markedHighlight } from 'marked-highlight';
5
+ import hljs from 'highlight.js';
6
+ import DOMPurify from 'dompurify'; // 防 XSS
7
+ import * as i0 from "@angular/core";
8
+ export class MarkdownStreamService {
9
+ constructor() {
10
+ this.marked = new Marked(
11
+ // 高亮代码
12
+ markedHighlight({
13
+ emptyLangClass: 'hljs',
14
+ langPrefix: 'hljs language-',
15
+ highlight(code, lang, info) {
16
+ const language = hljs.getLanguage(lang) ? lang : 'plaintext';
17
+ return hljs.highlight(code, { language }).value;
18
+ },
19
+ }));
20
+ // 支持 $$...$$ 和 $...$ 数学公式
21
+ // this.marked.use({
22
+ // // 包含从 markdown 创建标记的函数的对象
23
+ // tokenizer: {
24
+ // inlineMath(src: string) {
25
+ // const cap = /^\$([^\$]+)\$/.exec(src);
26
+ // if (cap) {
27
+ // return { type: 'inlineMath', raw: cap[0], text: cap[1] };
28
+ // }
29
+ // },
30
+ // codespan(src: string) {
31
+ // const math = this.inlineMath(src);
32
+ // if (math) return math;
33
+ // return false;
34
+ // }
35
+ // }
36
+ // });
37
+ // marked 17+ 必须使用 extensions 方式注册
38
+ this.marked.use({
39
+ extensions: [
40
+ {
41
+ name: 'inlineMath',
42
+ level: 'inline',
43
+ start(src) {
44
+ return src.indexOf('$'); // 告诉 marked 从哪里开始尝试匹配
45
+ },
46
+ tokenizer(src) {
47
+ // 匹配 $...$,但不能包含换行,且不允许 $$ 开头(留给块级公式)
48
+ const match = src.match(/^\$(?!\$)([^\n$]+?)\$/);
49
+ if (match) {
50
+ return {
51
+ type: 'inlineMath',
52
+ raw: match[0],
53
+ text: match[1].trim(), // 公式内容
54
+ };
55
+ }
56
+ return undefined;
57
+ },
58
+ renderer(token) {
59
+ // 这里直接返回原始文本,后面你可以用 KaTeX / MathJax 渲染
60
+ return `$${token.text}$`;
61
+ // 或者如果你已经全局接管了渲染,可以 return false
62
+ },
63
+ },
64
+ // 可选:同时支持 $$...$$ 块级公式
65
+ {
66
+ name: 'displayMath',
67
+ level: 'block',
68
+ start(src) {
69
+ return src.indexOf('$$');
70
+ },
71
+ tokenizer(src) {
72
+ const match = src.match(/^\$\$([\s\S]+?)\$\$/);
73
+ if (match) {
74
+ return {
75
+ type: 'displayMath',
76
+ raw: match[0],
77
+ text: match[1].trim(),
78
+ };
79
+ }
80
+ return undefined;
81
+ },
82
+ renderer(token) {
83
+ return `$$${token.text}$$`;
84
+ },
85
+ },
86
+ ],
87
+ });
88
+ }
89
+ // 关键:增量渲染(流式专用!)
90
+ renderIncremental(markdown) {
91
+ // 防止渲染一半的代码块崩溃
92
+ const safeMarkdown = this.completeCodeBlocks(markdown);
93
+ try {
94
+ let html = this.marked.parse(safeMarkdown);
95
+ html = DOMPurify.sanitize(html); // 安全
96
+ return html;
97
+ }
98
+ catch (e) {
99
+ return this.escapeHtml(safeMarkdown);
100
+ }
101
+ }
102
+ // 智能补全未闭合的代码块(流式必备!)
103
+ completeCodeBlocks(text) {
104
+ const lines = text.split('\n');
105
+ let inCode = false;
106
+ let fence = '';
107
+ for (let i = 0; i < lines.length; i++) {
108
+ const line = lines[i];
109
+ if (line.trim().match(/^```/)) {
110
+ if (!inCode) {
111
+ fence = line.trim();
112
+ inCode = true;
113
+ }
114
+ else if (line.trim() === '```' || line.trim().startsWith('```')) {
115
+ inCode = false;
116
+ fence = '';
117
+ }
118
+ }
119
+ }
120
+ if (inCode) {
121
+ text += '\n```';
122
+ }
123
+ return text;
124
+ }
125
+ escapeHtml(text) {
126
+ const div = document.createElement('div');
127
+ div.textContent = text;
128
+ return div.innerHTML;
129
+ }
130
+ }
131
+ MarkdownStreamService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MarkdownStreamService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
132
+ MarkdownStreamService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MarkdownStreamService, providedIn: 'root' });
133
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MarkdownStreamService, decorators: [{
134
+ type: Injectable,
135
+ args: [{ providedIn: 'root' }]
136
+ }], ctorParameters: function () { return []; } });
137
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24tc3RyZWFtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hZ2VudC9jaGF0L3NlcnZpY2VzL21hcmtkb3duLXN0cmVhbS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZCQUE2QjtBQUM3QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDaEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ25ELE9BQU8sSUFBSSxNQUFNLGNBQWMsQ0FBQztBQUVoQyxPQUFPLFNBQVMsTUFBTSxXQUFXLENBQUMsQ0FBQyxRQUFROztBQUczQyxNQUFNLE9BQU8scUJBQXFCO0lBR2hDO1FBQ0UsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE1BQU07UUFDdEIsT0FBTztRQUNQLGVBQWUsQ0FBQztZQUNkLGNBQWMsRUFBRSxNQUFNO1lBQ3RCLFVBQVUsRUFBRSxnQkFBZ0I7WUFDNUIsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtnQkFDeEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7Z0JBQzdELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUNsRCxDQUFDO1NBQ0YsQ0FBQyxDQWlCSCxDQUFDO1FBRUYsMEJBQTBCO1FBQzFCLG9CQUFvQjtRQUNwQixpQ0FBaUM7UUFDakMsbUJBQW1CO1FBQ25CLG9DQUFvQztRQUNwQyxxREFBcUQ7UUFDckQseUJBQXlCO1FBQ3pCLDRFQUE0RTtRQUM1RSxnQkFBZ0I7UUFDaEIsYUFBYTtRQUNiLGtDQUFr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QUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUM3QixJQUFJLENBQUMsTUFBTSxFQUFFO29CQUNYLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ3BCLE1BQU0sR0FBRyxJQUFJLENBQUM7aUJBQ2Y7cUJBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ2pFLE1BQU0sR0FBRyxLQUFLLENBQUM7b0JBQ2YsS0FBSyxHQUFHLEVBQUUsQ0FBQztpQkFDWjthQUNGO1NBQ0Y7UUFDRCxJQUFJLE1BQU0sRUFBRTtZQUNWLElBQUksSUFBSSxPQUFPLENBQUM7U0FDakI7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxVQUFVLENBQUMsSUFBWTtRQUM3QixNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLEdBQUcsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLE9BQU8sR0FBRyxDQUFDLFNBQVMsQ0FBQztJQUN2QixDQUFDOzttSEFoSlUscUJBQXFCO3VIQUFyQixxQkFBcUIsY0FEUixNQUFNOzRGQUNuQixxQkFBcUI7a0JBRGpDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLy8gbWFya2Rvd24tc3RyZWFtLnNlcnZpY2UudHNcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hcmtlZCB9IGZyb20gJ21hcmtlZCc7XG5pbXBvcnQgeyBtYXJrZWRIaWdobGlnaHQgfSBmcm9tICdtYXJrZWQtaGlnaGxpZ2h0JztcbmltcG9ydCBobGpzIGZyb20gJ2hpZ2hsaWdodC5qcyc7XG5pbXBvcnQgKiBhcyBrYXRleCBmcm9tICdrYXRleCc7XG5pbXBvcnQgRE9NUHVyaWZ5IGZyb20gJ2RvbXB1cmlmeSc7IC8vIOmYsiBYU1NcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBNYXJrZG93blN0cmVhbVNlcnZpY2Uge1xuICBwcml2YXRlIG1hcmtlZDogTWFya2VkO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMubWFya2VkID0gbmV3IE1hcmtlZChcbiAgICAgIC8vIOmrmOS6ruS7o+eggVxuICAgICAgbWFya2VkSGlnaGxpZ2h0KHtcbiAgICAgICAgZW1wdHlMYW5nQ2xhc3M6ICdobGpzJyxcbiAgICAgICAgbGFuZ1ByZWZpeDogJ2hsanMgbGFuZ3VhZ2UtJyxcbiAgICAgICAgaGlnaGxpZ2h0KGNvZGUsIGxhbmcsIGluZm8pIHtcbiAgICAgICAgICBjb25zdCBsYW5ndWFnZSA9IGhsanMuZ2V0TGFuZ3VhZ2UobGFuZykgPyBsYW5nIDogJ3BsYWludGV4dCc7XG4gICAgICAgICAgcmV0dXJuIGhsanMuaGlnaGxpZ2h0KGNvZGUsIHsgbGFuZ3VhZ2UgfSkudmFsdWU7XG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIC8vIHtcbiAgICAgIC8vICAgICBnZm06IHRydWUsXG4gICAgICAvLyAgICAgYnJlYWtzOiB0cnVlLFxuICAgICAgLy8gICAgIC8vIOiHquWumuS5iSByZW5kZXJlciDmlK/mjIEgS2FUZVhcbiAgICAgIC8vICAgICByZW5kZXJlcjoge1xuICAgICAgLy8gICAgICAgICBjb2RlKGNvZGU6IHN0cmluZywgbGFuZzogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgICAvLyAgICAgICAgICAgICBpZiAobGFuZyA9PT0gJ21hdGgnIHx8IGxhbmcgPT09ICdrYXRleCcpIHtcbiAgICAgIC8vICAgICAgICAgICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9XCJtYXRoLWJsb2NrXCI+JHtrYXRleC5yZW5kZXJUb1N0cmluZyhjb2RlLCB7IHRocm93T25FcnJvcjogZmFsc2UsIGRpc3BsYXlNb2RlOiB0cnVlIH0pfTwvZGl2PmA7XG4gICAgICAvLyAgICAgICAgICAgICB9XG4gICAgICAvLyAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIOS6pOe7mSBoaWdobGlnaHQg5aSE55CGXG4gICAgICAvLyAgICAgICAgIH0sXG4gICAgICAvLyAgICAgICAgIGlubGluZU1hdGgobWF0aDogc3RyaW5nKSB7XG4gICAgICAvLyAgICAgICAgICAgICByZXR1cm4ga2F0ZXgucmVuZGVyVG9TdHJpbmcobWF0aCwgeyB0aHJvd09uRXJyb3I6IGZhbHNlIH0pO1xuICAgICAgLy8gICAgICAgICB9XG4gICAgICAvLyAgICAgfVxuICAgICAgLy8gfVxuICAgICk7XG5cbiAgICAvLyDmlK/mjIEgJCQuLi4kJCDlkowgJC4uLiQg5pWw5a2m5YWs5byPXG4gICAgLy8gdGhpcy5tYXJrZWQudXNlKHtcbiAgICAvLyAgICAgLy8g5YyF5ZCr5LuOIG1hcmtkb3duIOWIm+W7uuagh+iusOeahOWHveaVsOeahOWvueixoVxuICAgIC8vICAgICB0b2tlbml6ZXI6IHtcbiAgICAvLyAgICAgICAgIGlubGluZU1hdGgoc3JjOiBzdHJpbmcpIHtcbiAgICAvLyAgICAgICAgICAgICBjb25zdCBjYXAgPSAvXlxcJChbXlxcJF0rKVxcJC8uZXhlYyhzcmMpO1xuICAgIC8vICAgICAgICAgICAgIGlmIChjYXApIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogJ2lubGluZU1hdGgnLCByYXc6IGNhcFswXSwgdGV4dDogY2FwWzFdIH07XG4gICAgLy8gICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgfSxcbiAgICAvLyAgICAgICAgIGNvZGVzcGFuKHNyYzogc3RyaW5nKSB7XG4gICAgLy8gICAgICAgICAgICAgY29uc3QgbWF0aCA9IHRoaXMuaW5saW5lTWF0aChzcmMpO1xuICAgIC8vICAgICAgICAgICAgIGlmIChtYXRoKSByZXR1cm4gbWF0aDtcbiAgICAvLyAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gICAgICAgICB9XG4gICAgLy8gICAgIH1cbiAgICAvLyB9KTtcblxuICAgIC8vIG1hcmtlZCAxNysg5b+F6aG75L2/55SoIGV4dGVuc2lvbnMg5pa55byP5rOo5YaMXG4gICAgdGhpcy5tYXJrZWQudXNlKHtcbiAgICAgIGV4dGVuc2lvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdpbmxpbmVNYXRoJyxcbiAgICAgICAgICBsZXZlbDogJ2lubGluZScsIC8vIOW/hemhu+aYryBpbmxpbmVcbiAgICAgICAgICBzdGFydChzcmM6IHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHNyYy5pbmRleE9mKCckJyk7IC8vIOWRiuiviSBtYXJrZWQg5LuO5ZOq6YeM5byA5aeL5bCd6K+V5Yy56YWNXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0b2tlbml6ZXIoc3JjOiBzdHJpbmcpIHtcbiAgICAgICAgICAgIC8vIOWMuemFjSAkLi4uJO+8jOS9huS4jeiDveWMheWQq+aNouihjO+8jOS4lOS4jeWFgeiuuCAkJCDlvIDlpLTvvIjnlZnnu5nlnZfnuqflhazlvI/vvIlcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gc3JjLm1hdGNoKC9eXFwkKD8hXFwkKShbXlxcbiRdKz8pXFwkLyk7XG4gICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnaW5saW5lTWF0aCcsXG4gICAgICAgICAgICAgICAgcmF3OiBtYXRjaFswXSwgLy8g5Y6f5aeL5paH5pys77yaJHh4eCRcbiAgICAgICAgICAgICAgICB0ZXh0OiBtYXRjaFsxXS50cmltKCksIC8vIOWFrOW8j+WGheWuuVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlbmRlcmVyKHRva2VuOiBhbnkpIHtcbiAgICAgICAgICAgIC8vIOi/memHjOebtOaOpei/lOWbnuWOn+Wni+aWh+acrO+8jOWQjumdouS9oOWPr+S7peeUqCBLYVRlWCAvIE1hdGhKYXgg5riy5p+TXG4gICAgICAgICAgICByZXR1cm4gYCQke3Rva2VuLnRleHR9JGA7XG4gICAgICAgICAgICAvLyDmiJbogIXlpoLmnpzkvaDlt7Lnu4/lhajlsYDmjqXnrqHkuobmuLLmn5PvvIzlj6/ku6UgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcblxuICAgICAgICAvLyDlj6/pgInvvJrlkIzml7bmlK/mjIEgJCQuLi4kJCDlnZfnuqflhazlvI9cbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdkaXNwbGF5TWF0aCcsXG4gICAgICAgICAgbGV2ZWw6ICdibG9jaycsXG4gICAgICAgICAgc3RhcnQoc3JjOiBzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzcmMuaW5kZXhPZignJCQnKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRva2VuaXplcihzcmM6IHN0cmluZykge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBzcmMubWF0Y2goL15cXCRcXCQoW1xcc1xcU10rPylcXCRcXCQvKTtcbiAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdkaXNwbGF5TWF0aCcsXG4gICAgICAgICAgICAgICAgcmF3OiBtYXRjaFswXSxcbiAgICAgICAgICAgICAgICB0ZXh0OiBtYXRjaFsxXS50cmltKCksXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVuZGVyZXIodG9rZW46IGFueSkge1xuICAgICAgICAgICAgcmV0dXJuIGAkJCR7dG9rZW4udGV4dH0kJGA7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cblxuICAvLyDlhbPplK7vvJrlop7ph4/muLLmn5PvvIjmtYHlvI/kuJPnlKjvvIHvvIlcbiAgcmVuZGVySW5jcmVtZW50YWwobWFya2Rvd246IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8g6Ziy5q2i5riy5p+T5LiA5Y2K55qE5Luj56CB5Z2X5bSp5rqDXG4gICAgY29uc3Qgc2FmZU1hcmtkb3duID0gdGhpcy5jb21wbGV0ZUNvZGVCbG9ja3MobWFya2Rvd24pO1xuICAgIHRyeSB7XG4gICAgICBsZXQgaHRtbCA9IHRoaXMubWFya2VkLnBhcnNlKHNhZmVNYXJrZG93bikgYXMgc3RyaW5nO1xuICAgICAgaHRtbCA9IERPTVB1cmlmeS5zYW5pdGl6ZShodG1sKTsgLy8g5a6J5YWoXG4gICAgICByZXR1cm4gaHRtbDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdGhpcy5lc2NhcGVIdG1sKHNhZmVNYXJrZG93bik7XG4gICAgfVxuICB9XG5cbiAgLy8g5pm66IO96KGl5YWo5pyq6Zet5ZCI55qE5Luj56CB5Z2X77yI5rWB5byP5b+F5aSH77yB77yJXG4gIHByaXZhdGUgY29tcGxldGVDb2RlQmxvY2tzKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbGluZXMgPSB0ZXh0LnNwbGl0KCdcXG4nKTtcbiAgICBsZXQgaW5Db2RlID0gZmFsc2U7XG4gICAgbGV0IGZlbmNlID0gJyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgbGluZSA9IGxpbmVzW2ldO1xuICAgICAgaWYgKGxpbmUudHJpbSgpLm1hdGNoKC9eYGBgLykpIHtcbiAgICAgICAgaWYgKCFpbkNvZGUpIHtcbiAgICAgICAgICBmZW5jZSA9IGxpbmUudHJpbSgpO1xuICAgICAgICAgIGluQ29kZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAobGluZS50cmltKCkgPT09ICdgYGAnIHx8IGxpbmUudHJpbSgpLnN0YXJ0c1dpdGgoJ2BgYCcpKSB7XG4gICAgICAgICAgaW5Db2RlID0gZmFsc2U7XG4gICAgICAgICAgZmVuY2UgPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaW5Db2RlKSB7XG4gICAgICB0ZXh0ICs9ICdcXG5gYGAnO1xuICAgIH1cbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIHByaXZhdGUgZXNjYXBlSHRtbCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGRpdi50ZXh0Q29udGVudCA9IHRleHQ7XG4gICAgcmV0dXJuIGRpdi5pbm5lckhUTUw7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,107 @@
1
+ import { inject, Injectable } from '@angular/core';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ import { StoreService } from '../store/store.service';
4
+ import * as i0 from "@angular/core";
5
+ export class SseService {
6
+ constructor() {
7
+ this.storeService = inject(StoreService);
8
+ this.conversationICodeSource = new BehaviorSubject(null);
9
+ this.conversationICode$ = this.conversationICodeSource.asObservable();
10
+ // 思考内容
11
+ this.thinkingSource = new BehaviorSubject('');
12
+ this.thinking$ = this.thinkingSource.asObservable();
13
+ // 实时流式文本
14
+ this.messageSource = new BehaviorSubject('');
15
+ this.currentMessage$ = this.messageSource.asObservable();
16
+ this.deltaSource = new BehaviorSubject('');
17
+ this.delta$ = this.deltaSource.asObservable();
18
+ this.loadingSource = new BehaviorSubject(false);
19
+ this.loading$ = this.loadingSource.asObservable();
20
+ // 完整消息历史
21
+ this.fullThinking = '';
22
+ this.fullMessage = '';
23
+ // 支持取消(关键!)
24
+ this.controller = new AbortController();
25
+ }
26
+ async streamChat(body) {
27
+ this.loadingSource.next(true);
28
+ this.messageSource.next(''); // 清空
29
+ this.fullMessage = '';
30
+ try {
31
+ const response = await fetch(`${this.storeService.getBaseUrl()}/api/ChatModel/generate`, {
32
+ method: 'POST',
33
+ headers: {
34
+ 'Content-Type': 'application/json',
35
+ Authorization: this.storeService.getToken(),
36
+ Accept: 'text/event-stream',
37
+ },
38
+ body: JSON.stringify(body),
39
+ });
40
+ if (!response.ok || !response.body) {
41
+ throw new Error('网络错误');
42
+ }
43
+ const reader = response.body.getReader();
44
+ const decoder = new TextDecoder('utf-8');
45
+ while (true) {
46
+ const { done, value } = await reader.read();
47
+ if (done)
48
+ break;
49
+ const chunk = decoder.decode(value, { stream: true });
50
+ const lines = chunk.split('\n\n');
51
+ for (const line of lines) {
52
+ if (line.startsWith('data:')) {
53
+ const jsonStr = line.replaceAll('data:', '');
54
+ try {
55
+ const data = JSON.parse(jsonStr);
56
+ const delta = data.content || '';
57
+ if (delta) {
58
+ // 对话以及问答编码
59
+ if (delta.conversation) {
60
+ this.conversationICodeSource.next(delta);
61
+ continue;
62
+ }
63
+ // 比如显示“AI 正在思考...”
64
+ if (data.think) {
65
+ this.fullThinking += delta;
66
+ this.thinkingSource.next(this.fullThinking);
67
+ continue;
68
+ }
69
+ this.fullMessage += delta;
70
+ this.messageSource.next(this.fullMessage); // 实时推送完整内容
71
+ this.deltaSource.next(delta); // 只推本次新增的文字
72
+ }
73
+ if (data.down) {
74
+ // down: true 表示结束
75
+ this.loadingSource.next(false);
76
+ }
77
+ }
78
+ catch (e) {
79
+ console.log('sse error', e);
80
+ }
81
+ }
82
+ }
83
+ }
84
+ }
85
+ catch (err) {
86
+ if (err.name !== 'AbortError') {
87
+ this.messageSource.next('请求失败:' + err.message);
88
+ }
89
+ }
90
+ finally {
91
+ this.loadingSource.next(false);
92
+ }
93
+ }
94
+ cancel() {
95
+ this.controller.abort();
96
+ this.controller = new AbortController();
97
+ }
98
+ }
99
+ SseService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SseService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
100
+ SseService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SseService, providedIn: 'root' });
101
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SseService, decorators: [{
102
+ type: Injectable,
103
+ args: [{
104
+ providedIn: 'root',
105
+ }]
106
+ }] });
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hZ2VudC9jaGF0L3NlcnZpY2VzL3NzZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQVd0RCxNQUFNLE9BQU8sVUFBVTtJQUh2QjtRQUlVLGlCQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3BDLDRCQUF1QixHQUFHLElBQUksZUFBZSxDQUE4QixJQUFJLENBQUMsQ0FBQztRQUN6Rix1QkFBa0IsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFakUsT0FBTztRQUNDLG1CQUFjLEdBQUcsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLENBQUM7UUFDekQsY0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFL0MsU0FBUztRQUNELGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLENBQUM7UUFDeEQsb0JBQWUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRTVDLGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLENBQUM7UUFDdEQsV0FBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFekMsa0JBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNwRCxhQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUU3QyxTQUFTO1FBQ0QsaUJBQVksR0FBRyxFQUFF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QUFDLElBQUksRUFBRTtnQ0FDYixrQkFBa0I7Z0NBQ2xCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDOzZCQUNoQzt5QkFDRjt3QkFBQyxPQUFPLENBQUMsRUFBRTs0QkFDVixPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQzt5QkFDN0I7cUJBQ0Y7aUJBQ0Y7YUFDRjtTQUNGO1FBQUMsT0FBTyxHQUFRLEVBQUU7WUFDakIsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLFlBQVksRUFBRTtnQkFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUNoRDtTQUNGO2dCQUFTO1lBQ1IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDaEM7SUFDSCxDQUFDO0lBS0QsTUFBTTtRQUNKLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO0lBQzFDLENBQUM7O3dHQXJHVSxVQUFVOzRHQUFWLFVBQVUsY0FGVCxNQUFNOzRGQUVQLFVBQVU7a0JBSHRCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJU2VuZE1lc3NhZ2UgfSBmcm9tICcuLi9tb2RlbHMvc2VuZC1tZXNzYWdlLm1vZGVsJztcbmltcG9ydCB7IFN0b3JlU2VydmljZSB9IGZyb20gJy4uL3N0b3JlL3N0b3JlLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnZlcnNhdGlvbklDb2RlT2JqIHtcbiAgY29udmVyc2F0aW9uOiBzdHJpbmc7XG4gIHF1ZXN0aW9uOiBzdHJpbmc7XG4gIGFuc3dlcjogc3RyaW5nO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgU3NlU2VydmljZSB7XG4gIHByaXZhdGUgc3RvcmVTZXJ2aWNlID0gaW5qZWN0KFN0b3JlU2VydmljZSk7XG4gIHByaXZhdGUgY29udmVyc2F0aW9uSUNvZGVTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENvbnZlcnNhdGlvbklDb2RlT2JqIHwgbnVsbD4obnVsbCk7XG4gIGNvbnZlcnNhdGlvbklDb2RlJCA9IHRoaXMuY29udmVyc2F0aW9uSUNvZGVTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG5cbiAgLy8g5oCd6ICD5YaF5a65XG4gIHByaXZhdGUgdGhpbmtpbmdTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICB0aGlua2luZyQgPSB0aGlzLnRoaW5raW5nU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIC8vIOWunuaXtua1geW8j+aWh+acrFxuICBwcml2YXRlIG1lc3NhZ2VTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBjdXJyZW50TWVzc2FnZSQgPSB0aGlzLm1lc3NhZ2VTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBkZWx0YVNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG4gIGRlbHRhJCA9IHRoaXMuZGVsdGFTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG5cbiAgbG9hZGluZ1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBsb2FkaW5nJCA9IHRoaXMubG9hZGluZ1NvdXJjZS5hc09ic2VydmFibGUoKTtcblxuICAvLyDlrozmlbTmtojmga/ljoblj7JcbiAgcHJpdmF0ZSBmdWxsVGhpbmtpbmcgPSAnJztcbiAgcHJpdmF0ZSBmdWxsTWVzc2FnZSA9ICcnO1xuXG4gIGFzeW5jIHN0cmVhbUNoYXQoYm9keTogSVNlbmRNZXNzYWdlKSB7XG4gICAgdGhpcy5sb2FkaW5nU291cmNlLm5leHQodHJ1ZSk7XG4gICAgdGhpcy5tZXNzYWdlU291cmNlLm5leHQoJycpOyAvLyDmuIXnqbpcbiAgICB0aGlzLmZ1bGxNZXNzYWdlID0gJyc7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHt0aGlzLnN0b3JlU2VydmljZS5nZXRCYXNlVXJsKCl9L2FwaS9DaGF0TW9kZWwvZ2VuZXJhdGVgLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICBBdXRob3JpemF0aW9uOiB0aGlzLnN0b3JlU2VydmljZS5nZXRUb2tlbigpLFxuICAgICAgICAgIEFjY2VwdDogJ3RleHQvZXZlbnQtc3RyZWFtJyxcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYm9keSksXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFyZXNwb25zZS5vayB8fCAhcmVzcG9uc2UuYm9keSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+e9kee7nOmUmeivrycpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5LmdldFJlYWRlcigpO1xuICAgICAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigndXRmLTgnKTtcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKTtcbiAgICAgICAgaWYgKGRvbmUpIGJyZWFrO1xuXG4gICAgICAgIGNvbnN0IGNodW5rID0gZGVjb2Rlci5kZWNvZGUodmFsdWUsIHsgc3RyZWFtOiB0cnVlIH0pO1xuICAgICAgICBjb25zdCBsaW5lcyA9IGNodW5rLnNwbGl0KCdcXG5cXG4nKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgICAgICBpZiAobGluZS5zdGFydHNXaXRoKCdkYXRhOicpKSB7XG4gICAgICAgICAgICBjb25zdCBqc29uU3RyID0gbGluZS5yZXBsYWNlQWxsKCdkYXRhOicsICcnKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGpzb25TdHIpO1xuICAgICAgICAgICAgICBjb25zdCBkZWx0YSA9IGRhdGEuY29udGVudCB8fCAnJztcblxuICAgICAgICAgICAgICBpZiAoZGVsdGEpIHtcbiAgICAgICAgICAgICAgICAvLyDlr7nor53ku6Xlj4rpl67nrZTnvJbnoIFcbiAgICAgICAgICAgICAgICBpZiAoZGVsdGEuY29udmVyc2F0aW9uKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbnZlcnNhdGlvbklDb2RlU291cmNlLm5leHQoZGVsdGEpO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIOavlOWmguaYvuekuuKAnEFJIOato+WcqOaAneiAgy4uLuKAnVxuICAgICAgICAgICAgICAgIGlmIChkYXRhLnRoaW5rKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmZ1bGxUaGlua2luZyArPSBkZWx0YTtcbiAgICAgICAgICAgICAgICAgIHRoaXMudGhpbmtpbmdTb3VyY2UubmV4dCh0aGlzLmZ1bGxUaGlua2luZyk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5mdWxsTWVzc2FnZSArPSBkZWx0YTtcbiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VTb3VyY2UubmV4dCh0aGlzLmZ1bGxNZXNzYWdlKTsgLy8g5a6e5pe25o6o6YCB5a6M5pW05YaF5a65XG4gICAgICAgICAgICAgICAgdGhpcy5kZWx0YVNvdXJjZS5uZXh0KGRlbHRhKTsgLy8g5Y+q5o6o5pys5qyh5paw5aKe55qE5paH5a2XXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGRhdGEuZG93bikge1xuICAgICAgICAgICAgICAgIC8vIGRvd246IHRydWUg6KGo56S657uT5p2fXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nU291cmNlLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzc2UgZXJyb3InLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgaWYgKGVyci5uYW1lICE9PSAnQWJvcnRFcnJvcicpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlU291cmNlLm5leHQoJ+ivt+axguWksei0pe+8micgKyBlcnIubWVzc2FnZSk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubG9hZGluZ1NvdXJjZS5uZXh0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICAvLyDmlK/mjIHlj5bmtojvvIjlhbPplK7vvIHvvIlcbiAgcHJpdmF0ZSBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLmNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICB0aGlzLmNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,38 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ export class StoreService {
5
+ constructor() {
6
+ this.token = '';
7
+ this.baseUrl = '';
8
+ this.currentConversationSource = new BehaviorSubject(null);
9
+ this.currentConversation$ = this.currentConversationSource.asObservable();
10
+ }
11
+ setToken(token) {
12
+ this.token = token;
13
+ }
14
+ getToken() {
15
+ return (this.token ||
16
+ 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0aWQiOiI2YjBjZjcwNC1hNmE5LTQxZDQtOWRkYy1kZmZmODlkYTZiNWMiLCJ1c2VyX3V1aWQiOjMxNTAsInVzZXJfbmFtZSI6IjEzMDg5MTI3MzcwIiwicmVnaW9uQ29kZSI6IjYzMDEwMDAwMDAwMCIsImF1dGhvcml0aWVzIjpbIldBVEVSX1NVUFBMWV9VU0VSIiwiTkVUV09SS19QUk9UT0NPTF9VU0VSIiwiUE9SVEFMX01BTkFHRV9BRE1JTiIsIkRJR0lUQUxfSVJSSUdBVElPTl9BRE1JTiIsIkVRVUlQTUVOVF9NT0RFTF9BRE1JTiIsIklOU1BFQ1RJT05fVVNFUiIsIkJJTV9CQU5LIiwiREFUQV9DQURBU1RSRV9BRE1JTiIsIklSUklHQVRJT05fR0FURV9VU0VSIiwiV0FURVJfUVVBTElUWV9VU0VSIiwiSVJSSUdBVElPTl9BRE1JTl9VU0VSIiwiQlVER0VUX01BVEVSX0FETUlOIiwiV0FURVJfTkVUV09SS19BRE1JTiIsIklOU1BFQ1RJT05fQURNSU5fVVNFUiIsIkRJR0lUQUxfSVJSSUdBVElPTl9KRyIsIlJPTEVfVVNFUiIsIkRBVEFfQ0VOVEVSX0lDT05fQURNSU4iLCJXQVJOSU5HX1VTRVIiLCJSRVNPVVJDRV9BRE1JTiIsIldBVEVSX1FVQUxJVFlfQURNSU4iLCJCVURHRVRfTUFURVJfVVNFUiIsIkJVSUxEX0NPTlNUUlVDVElPTl9BRE1JTiIsIkNBTENVTEFUSU9OX0RBVEFfQURNSU4iLCJURVhUVVJFX0FETUlOIiwiREFUQV9DRU5URVJfRklMRV9BRE1JTiIsIlNUQVRJQ19NT0RFTF9BRE1JTiIsIkJJT19QTEFOVF9BRE1JTiIsIkJJTV9ERVNJR04iLCJST0xFX1NVUEVSX0FETUlOIiwiTkVUV09SS19NT0RFTF9VU0VSIiwiV0FURVJfUVVPVEFfQURNSU4iLCJEQVRBX0NFTlRFUl9SSVZFUl9MQUtFIiwiREFNX1VTRVIiLCJTVVBQTFlfRFJBSU5BR0VfQURNSU4iLCJSRVNPVVJDRV9VU0VSIiwiQVJHVU1FTlRBVElPTl9VU0VSIiwiTE9HR0lOR19VU0VSIiwiREFUQV9URVJSQUlOX0FETUlOIiwiQlVER0VUX1FVT1RBX1VTRVIiLCJEQVRBX0NFTlRFUl9SRUdJT05fQURNSU4iLCJURVhUVVJFX1VTRVIiLCJEQVRBX0NFTlRFUl9VU0VSIiwiRVFVSVBNRU5UX01PREVMX1VTRVIiLCJEQVRBX0NFTlRFUl9QQU5PUkFNQSIsIkFSR1VNRU5UQVRJT05fQURNSU4iLCJEQVRBX0NFTlRFUl9XQVRFUl9SRVNPVVJDRSIsIkJJTV9QUk9DRURVUkUiLCJNQU5BR0VNRU5UX0FETUlOX1VTRVIiLCJEUklOR1dBVEVSX1VTRVIiLCJXQVRFUl9TVVBQTFlfQURNSU4iLCJMQU5EX1VTRV9BRE1JTiIsIkRBVEFfQ0VOVEVSX0ZJTEVfVVNFUiIsIkRBVEFfQ0VOVEVSX1dBVEVSX1BST0pFQ1QiLCJIWl9TTEFWRSIsIkRvY3VtZW50X1VTRVIiLCJCVURHRVRfUVVPVEFfQURNSU4iLCJJUlJJR0FUSU9OX1VTRVIiLCJORVRXT1JLX01PREVMX0FETUlOIiwiU1VQUExZX0RSQUlOQUdFX1VTRVIiLCJMT0dHSU5HX0FETUlOIiwiRFJJTkdXQVRFUl9BRE1JTl9VU0VSIiwiTkVUV09SS19VU0VSIiwiTU9ERUxfUEFSQU1fQURNSU4iLCJXQVRFUl9RVU9UQV9VU0VSIiwiU1RBVElDX01PREVMX0RFVkVMT1BFUiIsIkRFUEFSVE1FTlRfQURNSU4iLCJEQVRBX0NFTlRFUl9BTk5FWCIsIk5FVFdPUktfQURNSU4iLCJCSU1fRVFVSVBNRU5UIiwiRElHSVRBTF9JUlJJR0FUSU9OX1VTRVIiLCJNQU5BR0VNRU5UX1VTRVIiLCJCVUlMRF9DT05TVFJVQ1RJT05fVVNFUiIsIkRBVEFfQ0VOVEVSX0FETUlOIiwiUklWRVJfTEFLRV9FVkFMVVRJT05fVVNFUiIsIkJJTV9DT1NUIiwiRFJJTkdXQVRFUl9HQVRFX1VTRVIiLCJEQVRBX0NFTlRFUl9XQVRFUl9XQURJTkciLCJORVRXT1JLX1BST1RPQ09MX0FETUlOIiwiQklNX1VTRVIiLCJEQVRBX0NBREFTVFJFX1VTRVIiLCJTVEFUSUNfTU9ERUxfVVNFUiIsIlJPTEVfQURNSU4iLCJXQVRFUl9TVVBQTFlfR0FURV9VU0VSIiwiUklWRVJfTEFLRV9FVkFMVVRJT05fQURNSU4iLCJCSU1fQURNSU4iLCJCSU9fUExBTlRfVVNFUiJdLCJleHAiOjE3NjQwNjA0NzA1MTQsInJvbGVzIjpbIkhaX1NMQVZFIiwiUk9MRV9BRE1JTiIsIkJJT19QTEFOVF9BRE1JTiIsIlJPTEVfVVNFUiIsIkRBVEFfQ0VOVEVSX1VTRVIiLCJEQVRBX0NFTlRFUl9BRE1JTiIsIkRvY3VtZW50X1VTRVIiLCJEQVRBX0NFTlRFUl9BTk5FWCIsIkJJTV9FUVVJUE1FTlQiLCJMT0dHSU5HX0FETUlOIiwiU1VQUExZX0RSQUlOQUdFX1VTRVIiLCJSSVZFUl9MQUtFX0VWQUxVVElPTl9BRE1JTiIsIkRBVEFfQ0VOVEVSX0lDT05fQURNSU4iLCJXQVRFUl9RVUFMSVRZX1VTRVIiLCJXQVRFUl9RVU9UQV9VU0VSIiwiSVJSSUdBVElPTl9BRE1JTl9VU0VSIiwiQlVER0VUX1FVT1RBX0FETUlOIiwiREFUQV9DRU5URVJfRklMRV9VU0VSIiwiQklNX0RFU0lHTiIsIk1BTkFHRU1FTlRfVVNFUiIsIk5FVFdPUktfUFJPVE9DT0xfQURNSU4iLCJTVEFUSUNfTU9ERUxfREVWRUxPUEVSIiwiV0FSTklOR19VU0VSIiwiQklNX1VTRVIiLCJEQVRBX0NFTlRFUl9SSVZFUl9MQUtFIiwiRFJJTkdXQVRFUl9BRE1JTl9VU0VSIiwiQVJHVU1FTlRBVElPTl9VU0VSIiwiREFUQV9DRU5URVJfV0FURVJfUFJPSkVDVCIsIkRBVEFfQ0FEQVNUUkVfQURNSU4iLCJERVBBUlRNRU5UX0FETUlOIiwiTkVUV09SS19VU0VSIiwiU1RBVElDX01PREVMX0FETUlOIiwiQklNX0JBTksiLCJXQVRFUl9TVVBQTFlfQURNSU4iLCJCSU1fQURNSU4iLCJSRVNPVVJDRV9VU0VSIiwiREFUQV9URVJSQUlOX0FETUlOIiwiREFUQV9DRU5URVJfUkVHSU9OX0FETUlOIiwiV0FURVJfU1VQUExZX1VTRVIiLCJESUdJVEFMX0lSUklHQVRJT05fVVNFUiIsIldBVEVSX1FVQUxJVFlfQURNSU4iLCJORVRXT1JLX0FETUlOIiwiTE9HR0lOR19VU0VSIiwiSU5TUEVDVElPTl9BRE1JTl9VU0VSIiwiSVJSSUdBVElPTl9HQVRFX1VTRVIiLCJORVRXT1JLX1BST1RPQ09MX1VTRVIiLCJMQU5EX1VTRV9BRE1JTiIsIkJVSUxEX0NPTlNUUlVDVElPTl9BRE1JTiIsIkRBVEFfQ0VOVEVSX1BBTk9SQU1BIiwiREFUQV9DRU5URVJfV0FURVJfV0FESU5HIiwiQ0FMQ1VMQVRJT05fREFUQV9BRE1JTiIsIkRBVEFfQ0FEQVNUUkVfVVNFUiIsIkJJT19QTEFOVF9VU0VSIiwiTU9ERUxfUEFSQU1fQURNSU4iLCJTVVBQTFlfRFJBSU5BR0VfQURNSU4iLCJFUVVJUE1FTlRfTU9ERUxfQURNSU4iLCJURVhUVVJFX0FETUlOIiwiQlVER0VUX01BVEVSX1VTRVIiLCJXQVRFUl9RVU9UQV9BRE1JTiIsIkRJR0lUQUxfSVJSSUdBVElPTl9KRyIsIldBVEVSX05FVFdPUktfQURNSU4iLCJCSU1fUFJPQ0VEVVJFIiwiRFJJTkdXQVRFUl9VU0VSIiwiV0FURVJfU1VQUExZX0dBVEVfVVNFUiIsIkJVSUxEX0NPTlNUUlVDVElPTl9VU0VSIiwiRElHSVRBTF9JUlJJR0FUSU9OX0FETUlOIiwiSVJSSUdBVElPTl9VU0VSIiwiUk9MRV9TVVBFUl9BRE1JTiIsIkVRVUlQTUVOVF9NT0RFTF9VU0VSIiwiQklNX0NPU1QiLCJEUklOR1dBVEVSX0dBVEVfVVNFUiIsIklOU1BFQ1RJT05fVVNFUiIsIkFSR1VNRU5UQVRJT05fQURNSU4iLCJQT1JUQUxfTUFOQUdFX0FETUlOIiwiVEVYVFVSRV9VU0VSIiwiTUFOQUdFTUVOVF9BRE1JTl9VU0VSIiwiTkVUV09SS19NT0RFTF9BRE1JTiIsIkJVREdFVF9RVU9UQV9VU0VSIiwiQlVER0VUX01BVEVSX0FETUlOIiwiU1RBVElDX01PREVMX1VTRVIiLCJSSVZFUl9MQUtFX0VWQUxVVElPTl9VU0VSIiwiREFNX1VTRVIiLCJSRVNPVVJDRV9BRE1JTiIsIkRBVEFfQ0VOVEVSX1dBVEVSX1JFU09VUkNFIiwiREFUQV9DRU5URVJfRklMRV9BRE1JTiIsIk5FVFdPUktfTU9ERUxfVVNFUiJdLCJyZWFsX25hbWUiOiLnrqHnkIblkZgiLCJwbGF0Zm9ybUNvZGUiOiI2MzAxMDAwMDAwMDAiLCJwbGF0Zm9ybU5hbWUiOiLopb_lroHluIIiLCJ1c2VyTWFyayI6ZmFsc2UsInBob25lIjoiMTMwODkxMjczNzAiLCJlbnYiOiJyZWxlYXNlIiwidG9wUmVnaW9uQ29kZSI6IjYzMDEwMDAwMDAwMCJ9.Bzlz0LC5rbwItBgw6B-dhSKhXnAATXiaL-rR3EHD4wmJ-BpWWrDakYAjzUCtWL4ExkTqSxXIClCztc412o5pT3b9EN7R6WH5namjpxzwozCVXQyBYvjoCrS5UX1_iUkvVMr6WAqiUUzIanVSrmaRpszxyD8S_fLBge971-Cli44J1FQDBY8QN8TiH3v3c5aDWDBJVYPHqe3_zEAeL3dlERgl8pTLAydx54a2QqCVH2xfX_zSzFXJeK2iamIyI8H4cyP0pQrYl2rjSuR7LsjJSJz_QeSQKZlctG8odrBMV5OoHlWC2isNGqszqyp1POX2HyWb-U4qn8KuKKryjACrow');
17
+ }
18
+ setBaseUrl(url) {
19
+ this.baseUrl = url;
20
+ }
21
+ getBaseUrl() {
22
+ return this.baseUrl;
23
+ }
24
+ setCurrentConversation(conversation) {
25
+ this.conversationICode = conversation?.iCode;
26
+ this.currentConversationSource.next(conversation);
27
+ }
28
+ getConversationICode() {
29
+ return this.conversationICode;
30
+ }
31
+ }
32
+ StoreService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: StoreService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
33
+ StoreService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: StoreService, providedIn: 'root' });
34
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: StoreService, decorators: [{
35
+ type: Injectable,
36
+ args: [{ providedIn: 'root' }]
37
+ }] });
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FnZW50L2NoYXQvc3RvcmUvc3RvcmUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBSXZDLE1BQU0sT0FBTyxZQUFZO0lBRHpCO1FBRVUsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUNYLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFHYiw4QkFBeUIsR0FBRyxJQUFJLGVBQWUsQ0FBc0IsSUFBSSxDQUFDLENBQUM7UUFDbkYseUJBQW9CLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFlBQVksRUFBRSxDQUFDO0tBNkJ0RTtJQTNCQyxRQUFRLENBQUMsS0FBYTtRQUNwQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sQ0FDTCxJQUFJLENBQUMsS0FBSztZQUNWLDgzS0FBODNLLENBQy8zSyxDQUFDO0lBQ0osQ0FBQztJQUVELFVBQVUsQ0FBQyxHQUFXO1FBQ3BCLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxVQUFVO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxZQUFpQztRQUN0RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsWUFBWSxFQUFFLEtBQUssQ0FBQztRQUM3QyxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQzs7MEdBbENVLFlBQVk7OEdBQVosWUFBWSxjQURDLE1BQU07NEZBQ25CLFlBQVk7a0JBRHhCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb252ZXJzYXRpb24gfSBmcm9tICcuLi9tb2RlbHMvY29udmVyc2F0aW9uLm1vZGVsJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBTdG9yZVNlcnZpY2Uge1xuICBwcml2YXRlIHRva2VuID0gJyc7XG4gIHByaXZhdGUgYmFzZVVybCA9ICcnO1xuICBwcml2YXRlIGNvbnZlcnNhdGlvbklDb2RlPzogc3RyaW5nO1xuXG4gIHByaXZhdGUgY3VycmVudENvbnZlcnNhdGlvblNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29udmVyc2F0aW9uIHwgbnVsbD4obnVsbCk7XG4gIGN1cnJlbnRDb252ZXJzYXRpb24kID0gdGhpcy5jdXJyZW50Q29udmVyc2F0aW9uU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHNldFRva2VuKHRva2VuOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnRva2VuID0gdG9rZW47XG4gIH1cblxuICBnZXRUb2tlbigpOiBzdHJpbmcge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnRva2VuIHx8XG4gICAgICAnZXlKaGJHY2lPaUpTVXpJMU5pSXNJblI1Y0NJNklrcFhWQ0o5LmV5SjBhV1FpT2lJMllqQmpaamN3TkMxaE5tRTVMVFF4WkRRdE9XUmtZeTFrWm1abU9EbGtZVFppTldNaUxDSjFjMlZ5WDNWMWFXUWlPak14TlRBc0luVnpaWEpmYm1GdFpTSTZJakV6TURnNU1USTNNemN3SWl3aWNtVm5hVzl1UTI5a1pTSTZJall6TURFd01EQXdNREF3TUNJc0ltRjFkR2h2Y21sMGFXVnpJanBiSWxkQlZFVlNYMU5WVUZCTVdWOVZVMFZTSWl3aVRrVlVWMDlTUzE5UVVrOVVUME5QVEY5VlUwVlNJaXdpVUU5U1ZFRk1YMDFCVGtGSFJWOUJSRTFKVGlJc0lrUkpSMGxVUVV4ZlNWSlNTVWRCVkVsUFRsOUJSRTFKVGlJc0lrVlJWVWxRVFVWT1ZGOU5UMFJGVEY5QlJFMUpUaUlzSWtsT1UxQkZRMVJKVDA1ZlZWTkZVaUlzSWtKSlRWOUNRVTVMSWl3aVJFRlVRVjlEUVVSQlUxUlNSVjlCUkUxSlRpSXNJa2xTVWtsSFFWUkpUMDVmUjBGVVJWOVZVMFZTSWl3aVYwRlVSVkpmVVZWQlRFbFVXVjlWVTBWU0lpd2lTVkpTU1VkQlZFbFBUbDlCUkUxSlRsOVZVMFZTSWl3aVFsVkVSMFZVWDAxQlZFVlNYMEZFVFVsT0lpd2lWMEZVUlZKZlRrVlVWMDlTUzE5QlJFMUpUaUlzSWtsT1UxQkZRMVJKVDA1ZlFVUk5TVTVmVlZORlVpSXNJa1JKUjBsVVFVeGZTVkpTU1VkQlZFbFBUbDlLUnlJc0lsSlBURVZmVlZORlVpSXNJa1JCVkVGZlEwVk9WRVZTWDBsRFQwNWZRVVJOU1U0aUxDSlhRVkpPU1U1SFgxVlRSVklpTENKU1JWTlBWVkpEUlY5QlJFMUpUaUlzSWxkQlZFVlNYMUZWUVV4SlZGbGZRVVJOU1U0aUxDSkNWVVJIUlZSZlRVRlVSVkpmVlZORlVpSXNJa0pWU1V4RVgwTlBUbE5VVWxWRFZFbFBUbDlCUkUxSlRpSXNJa05CVEVOVlRFRlVTVTlPWDBSQlZFRmZRVVJOU1U0aUxDSlVSVmhVVlZKRlgwRkVUVWxPSWl3aVJFRlVRVjlEUlU1VVJWSmZSa2xNUlY5QlJFMUpUaUlzSWxOVVFWUkpRMTlOVDBSRlRGOUJSRTFKVGlJc0lrSkpUMTlRVEVGT1ZGOUJSRTFKVGlJc0lrSkpUVjlFUlZOSlIwNGlMQ0pTVDB4RlgxTlZVRVZTWDBGRVRVbE9JaXdpVGtWVVYwOVNTMTlOVDBSRlRGOVZVMFZTSWl3aVYwRlVSVkpmVVZWUFZFRmZRVVJOU1U0aUxDSkVRVlJCWDBORlRsUkZVbDlTU1ZaRlVsOU1RVXRGSWl3aVJFRk5YMVZUUlZJaUxDSlRWVkJRVEZsZlJGSkJTVTVCUjBWZlFVUk5TVTRpTENKU1JWTlBWVkpEUlY5VlUwVlNJaXdpUVZKSFZVMUZUbFJCVkVsUFRsOVZVMFZTSWl3aVRFOUhSMGxPUjE5VlUwVlNJaXdpUkVGVVFWOVVSVkpTUVVsT1gwRkVUVWxPSWl3aVFsVkVSMFZVWDFGVlQxUkJYMVZUUlZJaUxDSkVRVlJCWDBORlRsUkZVbDlTUlVkSlQwNWZRVVJOU1U0aUxDSlVSVmhVVlZKRlgxVlRSVklpTENKRVFWUkJYME5GVGxSRlVsOVZVMFZTSWl3aVJWRlZTVkJOUlU1VVgwMVBSRVZNWDFWVFJWSWlMQ0pFUVZSQlgwTkZUbFJGVWw5UVFVNVBVa0ZOUVNJc0lrRlNSMVZOUlU1VVFWUkpUMDVmUVVSTlNVNGlMQ0pFUVZSQlgwTkZUbFJGVWw5WFFWUkZVbDlTUlZOUFZWSkRSU0lzSWtKSlRWOVFVazlEUlVSVlVrVWlMQ0pOUVU1QlIwVk5SVTVVWDBGRVRVbE9YMVZUUlZJaUxDSkVVa2xPUjFkQlZFVlNYMVZUUlZJaUxDSlhRVlJGVWw5VFZWQlFURmxmUVVSTlNVNGlMQ0pNUVU1RVgxVlRSVjlCUkUxSlRpSXNJa1JCVkVGZlEwVk9WRVZTWDBaSlRFVmZWVk5GVWlJc0lrUkJWRUZmUTBWT1ZFVlNYMWRCVkVWU1gxQlNUMHBGUTFRaUxDSklXbDlUVEVGV1JTSXNJa1J2WTNWdFpXNTBYMVZUUlZJaUxDSkNWVVJIUlZSZlVWVlBWRUZmUVVSTlNVNGlMQ0pKVWxKSlIwRlVTVTlPWDFWVFJWSWlMQ0pPUlZSWFQxSkxYMDFQUkVWTVgwRkVUVWxPSWl3aVUxVlFVRXhaWDBSU1FVbE9RVWRGWDFWVFJWSWlMQ0pNVDBkSFNVNUhYMEZFVFVsT0lpd2lSRkpKVGtkWFFWUkZVbDlCUkUxSlRsOVZVMFZTSWl3aVRrVlVWMDlTUzE5VlUwVlNJaXdpVFU5RVJVeGZVRUZTUVUxZlFVUk5TVTRpTENKWFFWUkZVbDlSVlU5VVFWOVZVMFZTSWl3aVUxUkJWRWxEWDAxUFJFVk1YMFJGVmtWTVQxQkZVaUlzSWtSRlVFRlNWRTFGVGxSZlFVUk5TVTRpTENKRVFWUkJYME5GVGxSRlVsOUJUazVGV0NJc0lrNUZWRmRQVWt0ZlFVUk5TVTRpTENKQ1NVMWZSVkZWU1ZCTlJVNVVJaXdpUkVsSFNWUkJURjlKVWxKSlIwRlVTVTlPWDFWVFJWSWlMQ0pOUVU1QlIwVk5SVTVVWDFWVFJWSWlMQ0pDVlVsTVJGOURUMDVUVkZKVlExUkpUMDVmVlZORlVpSXNJa1JCVkVGZlEwVk9WRVZTWDBGRVRVbE9JaXdpVWtsV1JWSmZURUZMUlY5RlZrRk1WVlJKVDA1ZlZWTkZVaUlzSWtKSlRWOURUMU5VSWl3aVJGSkpUa2RYUVZSRlVsOUhRVlJGWDFWVFJWSWlMQ0pFUVZSQlgwTkZUbFJGVWw5WFFWUkZVbDlYUVVSSlRrY2lMQ0pPUlZSWFQxSkxYMUJTVDFSUFEwOU1YMEZFVFVsT0lpd2lRa2xOWDFWVFJWSWlMQ0pFUVZSQlgwTkJSRUZUVkZKRlgxVlRSVklpTENKVFZFRlVTVU5mVFU5RVJVeGZWVk5GVWlJc0lsSlBURVZmUVVSTlNVNGlMQ0pYUVZSRlVsOVRWVkJRVEZsZlIwRlVSVjlWVTBWU0lpd2lVa2xXUlZKZlRFRkxSVjlGVmtGTVZWUkpUMDVmUVVSTlNVNGlMQ0pDU1UxZlFVUk5TVTRpTENKQ1NVOWZVRXhCVGxSZlZWTkZVaUpkTENKbGVIQWlPakUzTmpRd05qQTBOekExTVRRc0luSnZiR1Z6SWpwYklraGFYMU5NUVZaRklpd2lVazlNUlY5QlJFMUpUaUlzSWtKSlQxOVFURUZPVkY5QlJFMUpUaUlzSWxKUFRFVmZWVk5GVWlJc0lrUkJWRUZmUTBWT1ZFVlNYMVZUUlZJaUxDSkVRVlJCWDBORlRsUkZVbDlCUkUxSlRpSXNJa1J2WTNWdFpXNTBYMVZUUlZJaUxDSkVRVlJCWDBORlRsUkZVbDlCVGs1RldDSXNJa0pKVFY5RlVWVkpVRTFGVGxRaUxDSk1UMGRIU1U1SFgwRkVUVWxPSWl3aVUxVlFVRXhaWDBSU1FVbE9RVWRGWDFWVFJWSWlMQ0pTU1ZaRlVsOU1RVXRGWDBWV1FVeFZWRWxQVGw5QlJFMUpUaUlzSWtSQlZFRmZRMFZPVkVWU1gwbERUMDVmUVVSTlNVNGlMQ0pYUVZSRlVsOVJWVUZNU1ZSWlgxVlRSVklpTENKWFFWUkZVbDlSVlU5VVFWOVZVMFZTSWl3aVNWSlNTVWRCVkVsUFRsOUJSRTFKVGw5VlUwVlNJaXdpUWxWRVIwVlVYMUZWVDFSQlgwRkVUVWxPSWl3aVJFRlVRVjlEUlU1VVJWSmZSa2xNUlY5VlUwVlNJaXdpUWtsTlgwUkZVMGxIVGlJc0lrMUJUa0ZIUlUxRlRsUmZWVk5GVWlJc0lrNUZWRmRQVWt0ZlVGSlBWRTlEVDB4ZlFVUk5TVTRpTENKVFZFRlVTVU5mVFU5RVJVeGZSRVZXUlV4UFVFVlNJaXdpVjBGU1RrbE9SMTlWVTBWU0lpd2lRa2xOWDFWVFJWSWlMQ0pFUVZSQlgwTkZUbFJGVWw5U1NWWkZVbDlNUVV0Rklpd2lSRkpKVGtkWFFWUkZVbDlCUkUxSlRsOVZVMFZTSWl3aVFWSkhWVTFGVGxSQlZFbFBUbDlWVTBWU0lpd2lSRUZVUVY5RFJVNVVSVkpmVjBGVVJWSmZVRkpQU2tWRFZDSXNJa1JCVkVGZlEwRkVRVk5VVWtWZlFVUk5TVTRpTENKRVJWQkJVbFJOUlU1VVgwRkVUVWxPSWl3aVRrVlVWMDlTUzE5VlUwVlNJaXdpVTFSQlZFbERYMDFQUkVWTVgwRkVUVWxPSWl3aVFrbE5YMEpCVGtzaUxDSlhRVlJGVWw5VFZWQlFURmxmUVVSTlNVNGlMQ0pDU1UxZlFVUk5TVTRpTENKU1JWTlBWVkpEUlY5VlUwVlNJaXdpUkVGVVFWOVVSVkpTUVVsT1gwRkVUVWxPSWl3aVJFRlVRVjlEUlU1VVJWSmZVa1ZIU1U5T1gwRkVUVWxPSWl3aVYwRlVSVkpmVTFWUVVFeFpYMVZUUlZJaUxDSkVTVWRKVkVGTVgwbFNVa2xIUVZSSlQwNWZWVk5GVWlJc0lsZEJWRVZTWDFGVlFVeEpWRmxmUVVSTlNVNGlMQ0pPUlZSWFQxSkxYMEZFVFVsT0lpd2lURTlIUjBsT1IxOVZVMFZTSWl3aVNVNVRVRVZEVkVsUFRsOUJSRTFKVGw5VlUwVlNJaXdpU1ZKU1NVZEJWRWxQVGw5SFFWUkZYMVZUUlZJaUxDSk9SVlJYVDFKTFgxQlNUMVJQUTA5TVgxVlRSVklpTENKTVFVNUVYMVZUUlY5QlJFMUpUaUlzSWtKVlNVeEVYME5QVGxOVVVsVkRWRWxQVGw5QlJFMUpUaUlzSWtSQlZFRmZRMFZPVkVWU1gxQkJUazlTUVUxQklpd2lSRUZVUVY5RFJVNVVSVkpmVjBGVVJWSmZWMEZFU1U1SElpd2lRMEZNUTFWTVFWUkpUMDVmUkVGVVFWOUJSRTFKVGlJc0lrUkJWRUZmUTBGRVFWTlVVa1ZmVlZORlVpSXNJa0pKVDE5UVRFRk9WRjlWVTBWU0lpd2lUVTlFUlV4ZlVFRlNRVTFmUVVSTlNVNGlMQ0pUVlZCUVRGbGZSRkpCU1U1QlIwVmZRVVJOU1U0aUxDSkZVVlZKVUUxRlRsUmZUVTlFUlV4ZlFVUk5TVTRpTENKVVJWaFVWVkpGWDBGRVRVbE9JaXdpUWxWRVIwVlVYMDFCVkVWU1gxVlRSVklpTENKWFFWUkZVbDlSVlU5VVFWOUJSRTFKVGlJc0lrUkpSMGxVUVV4ZlNWSlNTVWRCVkVsUFRsOUtSeUlzSWxkQlZFVlNYMDVGVkZkUFVrdGZRVVJOU1U0aUxDSkNTVTFmVUZKUFEwVkVWVkpGSWl3aVJGSkpUa2RYUVZSRlVsOVZVMFZTSWl3aVYwRlVSVkpmVTFWUVVFeFpYMGRCVkVWZlZWTkZVaUlzSWtKVlNVeEVYME5QVGxOVVVsVkRWRWxQVGw5VlUwVlNJaXdpUkVsSFNWUkJURjlKVWxKSlIwRlVTVTlPWDBGRVRVbE9JaXdpU1ZKU1NVZEJWRWxQVGw5VlUwVlNJaXdpVWs5TVJWOVRWVkJGVWw5QlJFMUpUaUlzSWtWUlZVbFFUVVZPVkY5TlQwUkZURjlWVTBWU0lpd2lRa2xOWDBOUFUxUWlMQ0pFVWtsT1IxZEJWRVZTWDBkQlZFVmZWVk5GVWlJc0lrbE9VMUJGUTFSSlQwNWZWVk5GVWlJc0lrRlNSMVZOUlU1VVFWUkpUMDVmUVVSTlNVNGlMQ0pRVDFKVVFVeGZUVUZPUVVkRlgwRkVUVWxPSWl3aVZFVllWRlZTUlY5VlUwVlNJaXdpVFVGT1FVZEZUVVZPVkY5QlJFMUpUbDlWVTBWU0lpd2lUa1ZVVjA5U1MxOU5UMFJGVEY5QlJFMUpUaUlzSWtKVlJFZEZWRjlSVlU5VVFWOVZVMFZTSWl3aVFsVkVSMFZVWDAxQlZFVlNYMEZFVFVsT0lpd2lVMVJCVkVsRFgwMVBSRVZNWDFWVFJWSWlMQ0pTU1ZaRlVsOU1RVXRGWDBWV1FVeFZWRWxQVGw5VlUwVlNJaXdpUkVGTlgxVlRSVklpTENKU1JWTlBWVkpEUlY5QlJFMUpUaUlzSWtSQlZFRmZRMFZPVkVWU1gxZEJWRVZTWDFKRlUwOVZVa05GSWl3aVJFRlVRVjlEUlU1VVJWSmZSa2xNUlY5QlJFMUpUaUlzSWs1RlZGZFBVa3RmVFU5RVJVeGZWVk5GVWlKZExDSnlaV0ZzWDI1aGJXVWlPaUxucnFIbmtJYmxrWmdpTENKd2JHRjBabTl5YlVOdlpHVWlPaUkyTXpBeE1EQXdNREF3TURBaUxDSndiR0YwWm05eWJVNWhiV1VpT2lMb3BiX2xyb0hsdUlJaUxDSjFjMlZ5VFdGeWF5STZabUZzYzJVc0luQm9iMjVsSWpvaU1UTXdPRGt4TWpjek56QWlMQ0psYm5ZaU9pSnlaV3hsWVhObElpd2lkRzl3VW1WbmFXOXVRMjlrWlNJNklqWXpNREV3TURBd01EQXdNQ0o5LkJ6bHowTEM1cmJ3SXRCZ3c2Qi1kaFNLaFhuQUFUWGlhTC1yUjNFSEQ0d21KLUJwV1dyRGFrWUFqelVDdFdMNEV4a1RxU3hYSUNsQ3p0YzQxMm81cFQzYjlFTjdSNldINW5hbWpweHp3b3pDVlhReUJZdmpvQ3JTNVVYMV9pVWt2Vk1yNldBcWlVVXpJYW5WU3JtYVJwc3p4eUQ4U19mTEJnZTk3MS1DbGk0NEoxRlFEQlk4UU44VGlIM3YzYzVhRFdEQkpWWVBIcWUzX3pFQWVMM2RsRVJnbDhwVExBeWR4NTRhMlFxQ1ZIMnhmWF96U3pGWEplSzJpYW1JeUk4SDRjeVAwcFFyWWwycmpTdVI3THNqSlNKel9RZVNRS1psY3RHOG9kckJNVjVPb0hsV0MyaXNOR3FzenF5cDFQT1gySHlXYi1VNHFuOEt1S0tyeWpBQ3JvdydcbiAgICApO1xuICB9XG5cbiAgc2V0QmFzZVVybCh1cmw6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuYmFzZVVybCA9IHVybDtcbiAgfVxuXG4gIGdldEJhc2VVcmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlVXJsO1xuICB9XG5cbiAgc2V0Q3VycmVudENvbnZlcnNhdGlvbihjb252ZXJzYXRpb246IENvbnZlcnNhdGlvbiB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnZlcnNhdGlvbklDb2RlID0gY29udmVyc2F0aW9uPy5pQ29kZTtcbiAgICB0aGlzLmN1cnJlbnRDb252ZXJzYXRpb25Tb3VyY2UubmV4dChjb252ZXJzYXRpb24pO1xuICB9XG5cbiAgZ2V0Q29udmVyc2F0aW9uSUNvZGUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jb252ZXJzYXRpb25JQ29kZTtcbiAgfVxufVxuIl19
@@ -0,0 +1,5 @@
1
+ /*
2
+ * Public API Surface of ai-agent
3
+ */
4
+ export default void 0;
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2FnZW50L3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxlQUFlLEtBQUssQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBhaS1hZ2VudFxuICovXG5cbmV4cG9ydCBkZWZhdWx0IHZvaWQgMDsiXX0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXFzbC1hZ2VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2FnZW50L3Fxc2wtYWdlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==