@hivegpt/hiveai-angular 0.0.587 → 0.0.589

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 (65) hide show
  1. package/README.md +0 -26
  2. package/bundles/hivegpt-hiveai-angular.umd.js +538 -3623
  3. package/bundles/hivegpt-hiveai-angular.umd.js.map +1 -1
  4. package/bundles/hivegpt-hiveai-angular.umd.min.js +1 -1
  5. package/bundles/hivegpt-hiveai-angular.umd.min.js.map +1 -1
  6. package/esm2015/hivegpt-hiveai-angular.js +5 -8
  7. package/esm2015/lib/components/NotificationSocket.js +22 -29
  8. package/esm2015/lib/components/bot.service.js +12 -18
  9. package/esm2015/lib/components/chat-drawer/chat-drawer.component.js +214 -2429
  10. package/esm2015/lib/components/chatbot/chatbot.component.js +5 -9
  11. package/esm2015/lib/components/conversation.service.js +5 -13
  12. package/esm2015/lib/components/socket-service.service.js +11 -21
  13. package/esm2015/lib/components/translations/translation.service.js +36 -38
  14. package/esm2015/lib/components/voice-agent/components/voice-agent-modal/voice-agent-modal.component.js +17 -35
  15. package/esm2015/lib/components/voice-agent/services/audio-analyzer.service.js +5 -11
  16. package/esm2015/lib/components/voice-agent/services/voice-agent.service.js +142 -215
  17. package/esm2015/lib/components/voice-agent/voice-agent.module.js +2 -10
  18. package/esm2015/lib/components/voice-agent/voice-modal-tokens.js +1 -1
  19. package/esm2015/lib/models/chat.js +2 -0
  20. package/esm2015/lib/utils/utils.js +2 -4
  21. package/esm2015/public-api.js +3 -2
  22. package/fesm2015/hivegpt-hiveai-angular.js +462 -3389
  23. package/fesm2015/hivegpt-hiveai-angular.js.map +1 -1
  24. package/hivegpt-hiveai-angular.d.ts +4 -7
  25. package/hivegpt-hiveai-angular.d.ts.map +1 -1
  26. package/hivegpt-hiveai-angular.metadata.json +1 -1
  27. package/lib/components/NotificationSocket.d.ts +3 -1
  28. package/lib/components/NotificationSocket.d.ts.map +1 -1
  29. package/lib/components/bot.service.d.ts +2 -1
  30. package/lib/components/bot.service.d.ts.map +1 -1
  31. package/lib/components/chat-drawer/chat-drawer.component.d.ts +52 -285
  32. package/lib/components/chat-drawer/chat-drawer.component.d.ts.map +1 -1
  33. package/lib/components/chatbot/chatbot.component.d.ts +1 -8
  34. package/lib/components/chatbot/chatbot.component.d.ts.map +1 -1
  35. package/lib/components/conversation.service.d.ts +2 -8
  36. package/lib/components/conversation.service.d.ts.map +1 -1
  37. package/lib/components/socket-service.service.d.ts +4 -3
  38. package/lib/components/socket-service.service.d.ts.map +1 -1
  39. package/lib/components/translations/translation.service.d.ts.map +1 -1
  40. package/lib/components/voice-agent/components/voice-agent-modal/voice-agent-modal.component.d.ts +4 -10
  41. package/lib/components/voice-agent/components/voice-agent-modal/voice-agent-modal.component.d.ts.map +1 -1
  42. package/lib/components/voice-agent/services/audio-analyzer.service.d.ts +0 -5
  43. package/lib/components/voice-agent/services/audio-analyzer.service.d.ts.map +1 -1
  44. package/lib/components/voice-agent/services/voice-agent.service.d.ts +9 -34
  45. package/lib/components/voice-agent/services/voice-agent.service.d.ts.map +1 -1
  46. package/lib/components/voice-agent/voice-agent.module.d.ts +0 -4
  47. package/lib/components/voice-agent/voice-agent.module.d.ts.map +1 -1
  48. package/lib/components/voice-agent/voice-modal-tokens.d.ts +0 -4
  49. package/lib/components/voice-agent/voice-modal-tokens.d.ts.map +1 -1
  50. package/lib/models/chat.d.ts +134 -0
  51. package/lib/models/chat.d.ts.map +1 -0
  52. package/lib/utils/utils.d.ts +1 -1
  53. package/lib/utils/utils.d.ts.map +1 -1
  54. package/package.json +2 -4
  55. package/public-api.d.ts +2 -1
  56. package/public-api.d.ts.map +1 -1
  57. package/esm2015/lib/components/voice-agent/services/daily-voice-client.service.js +0 -326
  58. package/esm2015/lib/components/voice-agent/services/websocket-voice-client.service.js +0 -95
  59. package/esm2015/lib/services/platform-token-refresh.service.js +0 -173
  60. package/lib/components/voice-agent/services/daily-voice-client.service.d.ts +0 -70
  61. package/lib/components/voice-agent/services/daily-voice-client.service.d.ts.map +0 -1
  62. package/lib/components/voice-agent/services/websocket-voice-client.service.d.ts +0 -49
  63. package/lib/components/voice-agent/services/websocket-voice-client.service.d.ts.map +0 -1
  64. package/lib/services/platform-token-refresh.service.d.ts +0 -59
  65. package/lib/services/platform-token-refresh.service.d.ts.map +0 -1
@@ -1,173 +0,0 @@
1
- import { isPlatformBrowser } from '@angular/common';
2
- import { HttpClient } from '@angular/common/http';
3
- import { Inject, Injectable, InjectionToken, Optional, PLATFORM_ID, } from '@angular/core';
4
- import { BehaviorSubject, of, throwError } from 'rxjs';
5
- import { catchError, filter, switchMap, take } from 'rxjs/operators';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@angular/common/http";
8
- /**
9
- * Default matches Pro-Events `AppConstants.authTokenKey` — same localStorage shape
10
- * `{ accessToken, refreshToken, ... }` as JSON.
11
- * Named factory (no arrow fn) so ngc metadata collection accepts it.
12
- */
13
- export function hiveGptAuthStorageKeyFactory() {
14
- return 'authcc-aae1';
15
- }
16
- export const HIVEGPT_AUTH_STORAGE_KEY = new InjectionToken('HIVEGPT_AUTH_STORAGE_KEY', {
17
- providedIn: 'root',
18
- factory: hiveGptAuthStorageKeyFactory,
19
- });
20
- /**
21
- * Proactive access-token refresh (JWT `exp`) + single-flight queue, aligned with
22
- * Pro-Events `EventInterceptor` + `AuthService.refreshToken`.
23
- */
24
- export class PlatformTokenRefreshService {
25
- constructor(http,
26
- /** Use `Object` (not `object`) so ngc metadata collection accepts the parameter type. */
27
- platformId,
28
- /**
29
- * Avoid `string | null` on the parameter — `|` is treated as unsupported expression in ngc metadata.
30
- */
31
- authStorageKey) {
32
- this.http = http;
33
- this.platformId = platformId;
34
- this.refreshTokenInProgress = false;
35
- this.refreshTokenSubject = new BehaviorSubject(null);
36
- this.storageKey =
37
- authStorageKey != null && authStorageKey !== ''
38
- ? authStorageKey
39
- : 'authcc-aae1';
40
- }
41
- /** Read parsed auth blob from localStorage (same as host app). */
42
- readStoredAuth() {
43
- if (!isPlatformBrowser(this.platformId)) {
44
- return null;
45
- }
46
- try {
47
- const raw = localStorage.getItem(this.storageKey);
48
- if (!raw) {
49
- return null;
50
- }
51
- return JSON.parse(raw);
52
- }
53
- catch (_a) {
54
- return null;
55
- }
56
- }
57
- persistAuth(res) {
58
- if (!isPlatformBrowser(this.platformId) || !res) {
59
- return;
60
- }
61
- try {
62
- localStorage.setItem(this.storageKey, JSON.stringify(res));
63
- }
64
- catch (e) {
65
- console.warn('[HiveGpt] Failed to persist auth tokens', e);
66
- }
67
- }
68
- /**
69
- * JWT `exp` check without @auth0/angular-jwt (keeps package lean).
70
- * @param skewSeconds refresh slightly before actual expiry (clock skew).
71
- */
72
- isAccessTokenExpired(token, skewSeconds = 60) {
73
- if (!token || typeof token !== 'string') {
74
- return true;
75
- }
76
- const expMs = this.getJwtExpirationMs(token);
77
- if (expMs == null) {
78
- return false;
79
- }
80
- return expMs - skewSeconds * 1000 < Date.now();
81
- }
82
- getJwtExpirationMs(token) {
83
- try {
84
- const parts = token.split('.');
85
- if (parts.length < 2) {
86
- return null;
87
- }
88
- const payload = parts[1]
89
- .replace(/-/g, '+')
90
- .replace(/_/g, '/');
91
- const padded = payload + '='.repeat((4 - (payload.length % 4)) % 4);
92
- if (typeof atob === 'undefined') {
93
- return null;
94
- }
95
- const json = JSON.parse(atob(padded));
96
- if ((json === null || json === void 0 ? void 0 : json.exp) == null || typeof json.exp !== 'number') {
97
- return null;
98
- }
99
- return json.exp * 1000;
100
- }
101
- catch (_a) {
102
- return null;
103
- }
104
- }
105
- /**
106
- * Returns a valid access token: refreshes via `POST {usersApiBaseUrl}/user/tokenRefresh`
107
- * when JWT is expired and a refresh token exists in storage.
108
- */
109
- ensureValidAccessToken(currentAccessToken, usersApiBaseUrl) {
110
- if (!isPlatformBrowser(this.platformId)) {
111
- return of({
112
- accessToken: currentAccessToken !== null && currentAccessToken !== void 0 ? currentAccessToken : '',
113
- refreshed: false,
114
- });
115
- }
116
- const stored = this.readStoredAuth();
117
- const access = (currentAccessToken && String(currentAccessToken).trim()) ||
118
- (stored === null || stored === void 0 ? void 0 : stored.accessToken) ||
119
- '';
120
- const refresh = stored === null || stored === void 0 ? void 0 : stored.refreshToken;
121
- if (access && !this.isAccessTokenExpired(access)) {
122
- return of({ accessToken: access, refreshed: false });
123
- }
124
- if (!refresh || typeof refresh !== 'string') {
125
- return of({ accessToken: access, refreshed: false });
126
- }
127
- const base = (usersApiBaseUrl || '').replace(/\/+$/, '');
128
- if (!base) {
129
- return of({ accessToken: access, refreshed: false });
130
- }
131
- const url = `${base}/user/tokenRefresh`;
132
- if (!this.refreshTokenInProgress) {
133
- this.refreshTokenInProgress = true;
134
- this.refreshTokenSubject.next(null);
135
- return this.http
136
- .post(url, { refreshToken: refresh })
137
- .pipe(switchMap((authResponse) => {
138
- this.refreshTokenInProgress = false;
139
- if (authResponse === null || authResponse === void 0 ? void 0 : authResponse.accessToken) {
140
- this.persistAuth(authResponse);
141
- this.refreshTokenSubject.next(authResponse.accessToken);
142
- return of({
143
- accessToken: authResponse.accessToken,
144
- refreshed: true,
145
- authResponse,
146
- });
147
- }
148
- this.refreshTokenSubject.next(null);
149
- return throwError(() => new Error('Token refresh returned no accessToken'));
150
- }), catchError((err) => {
151
- this.refreshTokenInProgress = false;
152
- this.refreshTokenSubject.next(null);
153
- return throwError(() => err);
154
- }));
155
- }
156
- return this.refreshTokenSubject.pipe(filter((t) => t != null && t !== ''), take(1), switchMap((token) => of({
157
- accessToken: token,
158
- refreshed: true,
159
- })));
160
- }
161
- }
162
- PlatformTokenRefreshService.ɵprov = i0.ɵɵdefineInjectable({ factory: function PlatformTokenRefreshService_Factory() { return new PlatformTokenRefreshService(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(i0.PLATFORM_ID), i0.ɵɵinject(HIVEGPT_AUTH_STORAGE_KEY, 8)); }, token: PlatformTokenRefreshService, providedIn: "root" });
163
- PlatformTokenRefreshService.decorators = [
164
- { type: Injectable, args: [{
165
- providedIn: 'root',
166
- },] }
167
- ];
168
- PlatformTokenRefreshService.ctorParameters = () => [
169
- { type: HttpClient },
170
- { type: Object, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] },
171
- { type: String, decorators: [{ type: Optional }, { type: Inject, args: [HIVEGPT_AUTH_STORAGE_KEY,] }] }
172
- ];
173
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm0tdG9rZW4tcmVmcmVzaC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii9Vc2Vycy9yb2hpdHRoYWt1ci9oaXZlLWdwdC9IaXZlQUktUGFja2FnZXMvQW5ndWxhci9wcm9qZWN0cy9oaXZlZ3B0L2V2ZW50c2dwdC1hbmd1bGFyL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9wbGF0Zm9ybS10b2tlbi1yZWZyZXNoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFDTCxNQUFNLEVBQ04sVUFBVSxFQUNWLGNBQWMsRUFDZCxRQUFRLEVBQ1IsV0FBVyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQWMsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQUVyRTs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLDRCQUE0QjtJQUMxQyxPQUFPLGFBQWEsQ0FBQztBQUN2QixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxjQUFjLENBQ3hELDBCQUEwQixFQUMxQjtJQUNFLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLE9BQU8sRUFBRSw0QkFBNEI7Q0FDdEMsQ0FDRixDQUFDO0FBbUJGOzs7R0FHRztBQUlILE1BQU0sT0FBTywyQkFBMkI7SUFNdEMsWUFDVSxJQUFnQjtJQUN4Qix5RkFBeUY7SUFDNUQsVUFBa0I7SUFDL0M7O09BRUc7SUFDMkMsY0FBc0I7UUFONUQsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUVLLGVBQVUsR0FBVixVQUFVLENBQVE7UUFSekMsMkJB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LEdBQUcsRUFBRSxFQUFFO2dCQUNqQixJQUFJLENBQUMsc0JBQXNCLEdBQUcsS0FBSyxDQUFDO2dCQUNwQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNwQyxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMvQixDQUFDLENBQUMsQ0FDSCxDQUFDO1NBQ0w7UUFFRCxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBZSxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQ2pELElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNsQixFQUFFLENBQUM7WUFDRCxXQUFXLEVBQUUsS0FBSztZQUNsQixTQUFTLEVBQUUsSUFBSTtTQUNLLENBQUMsQ0FDeEIsQ0FDRixDQUFDO0lBQ0osQ0FBQzs7OztZQXhLRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQW5EUSxVQUFVO1lBNkQwQixNQUFNLHVCQUE5QyxNQUFNLFNBQUMsV0FBVzt5Q0FJbEIsUUFBUSxZQUFJLE1BQU0sU0FBQyx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtcbiAgSW5qZWN0LFxuICBJbmplY3RhYmxlLFxuICBJbmplY3Rpb25Ub2tlbixcbiAgT3B0aW9uYWwsXG4gIFBMQVRGT1JNX0lELFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpbHRlciwgc3dpdGNoTWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG4vKipcbiAqIERlZmF1bHQgbWF0Y2hlcyBQcm8tRXZlbnRzIGBBcHBDb25zdGFudHMuYXV0aFRva2VuS2V5YCDigJQgc2FtZSBsb2NhbFN0b3JhZ2Ugc2hhcGVcbiAqIGB7IGFjY2Vzc1Rva2VuLCByZWZyZXNoVG9rZW4sIC4uLiB9YCBhcyBKU09OLlxuICogTmFtZWQgZmFjdG9yeSAobm8gYXJyb3cgZm4pIHNvIG5nYyBtZXRhZGF0YSBjb2xsZWN0aW9uIGFjY2VwdHMgaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoaXZlR3B0QXV0aFN0b3JhZ2VLZXlGYWN0b3J5KCk6IHN0cmluZyB7XG4gIHJldHVybiAnYXV0aGNjLWFhZTEnO1xufVxuXG5leHBvcnQgY29uc3QgSElWRUdQVF9BVVRIX1NUT1JBR0VfS0VZID0gbmV3IEluamVjdGlvblRva2VuPHN0cmluZz4oXG4gICdISVZFR1BUX0FVVEhfU1RPUkFHRV9LRVknLFxuICB7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICAgIGZhY3Rvcnk6IGhpdmVHcHRBdXRoU3RvcmFnZUtleUZhY3RvcnksXG4gIH0sXG4pO1xuXG4vKiogU3Vic2V0IG9mIHBsYXRmb3JtIHRva2VuIHJlZnJlc2ggcmVzcG9uc2UgKHVzZXIvdG9rZW5SZWZyZXNoKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGl2ZUdwdFBsYXRmb3JtVG9rZW5SZXNwb25zZSB7XG4gIGFjY2Vzc1Rva2VuPzogc3RyaW5nO1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG4gIGVtYWlsPzogc3RyaW5nO1xuICBleHBpcmVzSW4/OiBudW1iZXIgfCBzdHJpbmc7XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW5zdXJlVG9rZW5SZXN1bHQge1xuICBhY2Nlc3NUb2tlbjogc3RyaW5nO1xuICAvKiogVHJ1ZSB3aGVuIGEgbmV0d29yayByZWZyZXNoIHdhcyBwZXJmb3JtZWQgc3VjY2Vzc2Z1bGx5LiAqL1xuICByZWZyZXNoZWQ6IGJvb2xlYW47XG4gIC8qKiBGdWxsIEFQSSBwYXlsb2FkIHdoZW4gcmVmcmVzaGVkIChmb3IgaG9zdCBgc2F2ZVRva2VuQW5kTG9naW5Vc2VyYCkuICovXG4gIGF1dGhSZXNwb25zZT86IEhpdmVHcHRQbGF0Zm9ybVRva2VuUmVzcG9uc2U7XG59XG5cbi8qKlxuICogUHJvYWN0aXZlIGFjY2Vzcy10b2tlbiByZWZyZXNoIChKV1QgYGV4cGApICsgc2luZ2xlLWZsaWdodCBxdWV1ZSwgYWxpZ25lZCB3aXRoXG4gKiBQcm8tRXZlbnRzIGBFdmVudEludGVyY2VwdG9yYCArIGBBdXRoU2VydmljZS5yZWZyZXNoVG9rZW5gLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUGxhdGZvcm1Ub2tlblJlZnJlc2hTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWZyZXNoVG9rZW5JblByb2dyZXNzID0gZmFsc2U7XG4gIHByaXZhdGUgcmVmcmVzaFRva2VuU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzdG9yYWdlS2V5OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIC8qKiBVc2UgYE9iamVjdGAgKG5vdCBgb2JqZWN0YCkgc28gbmdjIG1ldGFkYXRhIGNvbGxlY3Rpb24gYWNjZXB0cyB0aGUgcGFyYW1ldGVyIHR5cGUuICovXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBPYmplY3QsXG4gICAgLyoqXG4gICAgICogQXZvaWQgYHN0cmluZyB8IG51bGxgIG9uIHRoZSBwYXJhbWV0ZXIg4oCUIGB8YCBpcyB0cmVhdGVkIGFzIHVuc3VwcG9ydGVkIGV4cHJlc3Npb24gaW4gbmdjIG1ldGFkYXRhLlxuICAgICAqL1xuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoSElWRUdQVF9BVVRIX1NUT1JBR0VfS0VZKSBhdXRoU3RvcmFnZUtleTogc3RyaW5nLFxuICApIHtcbiAgICB0aGlzLnN0b3JhZ2VLZXkgPVxuICAgICAgYXV0aFN0b3JhZ2VLZXkgIT0gbnVsbCAmJiBhdXRoU3RvcmFnZUtleSAhPT0gJydcbiAgICAgICAgPyBhdXRoU3RvcmFnZUtleVxuICAgICAgICA6ICdhdXRoY2MtYWFlMSc7XG4gIH1cblxuICAvKiogUmVhZCBwYXJzZWQgYXV0aCBibG9iIGZyb20gbG9jYWxTdG9yYWdlIChzYW1lIGFzIGhvc3QgYXBwKS4gKi9cbiAgcmVhZFN0b3JlZEF1dGgoKTogSGl2ZUdwdFBsYXRmb3JtVG9rZW5SZXNwb25zZSB8IG51bGwge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCByYXcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXkpO1xuICAgICAgaWYgKCFyYXcpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShyYXcpIGFzIEhpdmVHcHRQbGF0Zm9ybVRva2VuUmVzcG9uc2U7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwZXJzaXN0QXV0aChyZXM6IEhpdmVHcHRQbGF0Zm9ybVRva2VuUmVzcG9uc2UpOiB2b2lkIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkgfHwgIXJlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5zdG9yYWdlS2V5LCBKU09OLnN0cmluZ2lmeShyZXMpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tIaXZlR3B0XSBGYWlsZWQgdG8gcGVyc2lzdCBhdXRoIHRva2VucycsIGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBKV1QgYGV4cGAgY2hlY2sgd2l0aG91dCBAYXV0aDAvYW5ndWxhci1qd3QgKGtlZXBzIHBhY2thZ2UgbGVhbikuXG4gICAqIEBwYXJhbSBza2V3U2Vjb25kcyByZWZyZXNoIHNsaWdodGx5IGJlZm9yZSBhY3R1YWwgZXhwaXJ5IChjbG9jayBza2V3KS5cbiAgICovXG4gIGlzQWNjZXNzVG9rZW5FeHBpcmVkKFxuICAgIHRva2VuOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgIHNrZXdTZWNvbmRzID0gNjAsXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmICghdG9rZW4gfHwgdHlwZW9mIHRva2VuICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGV4cE1zID0gdGhpcy5nZXRKd3RFeHBpcmF0aW9uTXModG9rZW4pO1xuICAgIGlmIChleHBNcyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBleHBNcyAtIHNrZXdTZWNvbmRzICogMTAwMCA8IERhdGUubm93KCk7XG4gIH1cblxuICBwcml2YXRlIGdldEp3dEV4cGlyYXRpb25Ncyh0b2tlbjogc3RyaW5nKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcnRzID0gdG9rZW4uc3BsaXQoJy4nKTtcbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPCAyKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgcGF5bG9hZCA9IHBhcnRzWzFdXG4gICAgICAgIC5yZXBsYWNlKC8tL2csICcrJylcbiAgICAgICAgLnJlcGxhY2UoL18vZywgJy8nKTtcbiAgICAgIGNvbnN0IHBhZGRlZCA9IHBheWxvYWQgKyAnPScucmVwZWF0KCg0IC0gKHBheWxvYWQubGVuZ3RoICUgNCkpICUgNCk7XG4gICAgICBpZiAodHlwZW9mIGF0b2IgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QganNvbiA9IEpTT04ucGFyc2UoYXRvYihwYWRkZWQpKSBhcyB7IGV4cD86IG51bWJlciB9O1xuICAgICAgaWYgKGpzb24/LmV4cCA9PSBudWxsIHx8IHR5cGVvZiBqc29uLmV4cCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4ganNvbi5leHAgKiAxMDAwO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSB2YWxpZCBhY2Nlc3MgdG9rZW46IHJlZnJlc2hlcyB2aWEgYFBPU1Qge3VzZXJzQXBpQmFzZVVybH0vdXNlci90b2tlblJlZnJlc2hgXG4gICAqIHdoZW4gSldUIGlzIGV4cGlyZWQgYW5kIGEgcmVmcmVzaCB0b2tlbiBleGlzdHMgaW4gc3RvcmFnZS5cbiAgICovXG4gIGVuc3VyZVZhbGlkQWNjZXNzVG9rZW4oXG4gICAgY3VycmVudEFjY2Vzc1Rva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsLFxuICAgIHVzZXJzQXBpQmFzZVVybDogc3RyaW5nLFxuICApOiBPYnNlcnZhYmxlPEVuc3VyZVRva2VuUmVzdWx0PiB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICByZXR1cm4gb2Yoe1xuICAgICAgICBhY2Nlc3NUb2tlbjogY3VycmVudEFjY2Vzc1Rva2VuID8/ICcnLFxuICAgICAgICByZWZyZXNoZWQ6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RvcmVkID0gdGhpcy5yZWFkU3RvcmVkQXV0aCgpO1xuICAgIGNvbnN0IGFjY2VzcyA9XG4gICAgICAoY3VycmVudEFjY2Vzc1Rva2VuICYmIFN0cmluZyhjdXJyZW50QWNjZXNzVG9rZW4pLnRyaW0oKSkgfHxcbiAgICAgIHN0b3JlZD8uYWNjZXNzVG9rZW4gfHxcbiAgICAgICcnO1xuICAgIGNvbnN0IHJlZnJlc2ggPSBzdG9yZWQ/LnJlZnJlc2hUb2tlbjtcblxuICAgIGlmIChhY2Nlc3MgJiYgIXRoaXMuaXNBY2Nlc3NUb2tlbkV4cGlyZWQoYWNjZXNzKSkge1xuICAgICAgcmV0dXJuIG9mKHsgYWNjZXNzVG9rZW46IGFjY2VzcywgcmVmcmVzaGVkOiBmYWxzZSB9KTtcbiAgICB9XG5cbiAgICBpZiAoIXJlZnJlc2ggfHwgdHlwZW9mIHJlZnJlc2ggIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gb2YoeyBhY2Nlc3NUb2tlbjogYWNjZXNzLCByZWZyZXNoZWQ6IGZhbHNlIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGJhc2UgPSAodXNlcnNBcGlCYXNlVXJsIHx8ICcnKS5yZXBsYWNlKC9cXC8rJC8sICcnKTtcbiAgICBpZiAoIWJhc2UpIHtcbiAgICAgIHJldHVybiBvZih7IGFjY2Vzc1Rva2VuOiBhY2Nlc3MsIHJlZnJlc2hlZDogZmFsc2UgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gYCR7YmFzZX0vdXNlci90b2tlblJlZnJlc2hgO1xuXG4gICAgaWYgKCF0aGlzLnJlZnJlc2hUb2tlbkluUHJvZ3Jlc3MpIHtcbiAgICAgIHRoaXMucmVmcmVzaFRva2VuSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICB0aGlzLnJlZnJlc2hUb2tlblN1YmplY3QubmV4dChudWxsKTtcblxuICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAucG9zdDxIaXZlR3B0UGxhdGZvcm1Ub2tlblJlc3BvbnNlPih1cmwsIHsgcmVmcmVzaFRva2VuOiByZWZyZXNoIH0pXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgoYXV0aFJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlbkluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChhdXRoUmVzcG9uc2U/LmFjY2Vzc1Rva2VuKSB7XG4gICAgICAgICAgICAgIHRoaXMucGVyc2lzdEF1dGgoYXV0aFJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW5TdWJqZWN0Lm5leHQoYXV0aFJlc3BvbnNlLmFjY2Vzc1Rva2VuKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG9mKHtcbiAgICAgICAgICAgICAgICBhY2Nlc3NUb2tlbjogYXV0aFJlc3BvbnNlLmFjY2Vzc1Rva2VuLFxuICAgICAgICAgICAgICAgIHJlZnJlc2hlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBhdXRoUmVzcG9uc2UsXG4gICAgICAgICAgICAgIH0gYXMgRW5zdXJlVG9rZW5SZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW5TdWJqZWN0Lm5leHQobnVsbCk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoJ1Rva2VuIHJlZnJlc2ggcmV0dXJuZWQgbm8gYWNjZXNzVG9rZW4nKSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlbkluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFRva2VuU3ViamVjdC5uZXh0KG51bGwpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5yZWZyZXNoVG9rZW5TdWJqZWN0LnBpcGUoXG4gICAgICBmaWx0ZXIoKHQpOiB0IGlzIHN0cmluZyA9PiB0ICE9IG51bGwgJiYgdCAhPT0gJycpLFxuICAgICAgdGFrZSgxKSxcbiAgICAgIHN3aXRjaE1hcCgodG9rZW4pID0+XG4gICAgICAgIG9mKHtcbiAgICAgICAgICBhY2Nlc3NUb2tlbjogdG9rZW4sXG4gICAgICAgICAgcmVmcmVzaGVkOiB0cnVlLFxuICAgICAgICB9IGFzIEVuc3VyZVRva2VuUmVzdWx0KSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -1,70 +0,0 @@
1
- import { NgZone } from '@angular/core';
2
- import { Observable } from 'rxjs';
3
- /**
4
- * Daily.js WebRTC client for voice agent audio.
5
- * Responsibilities:
6
- * - Create and manage Daily CallObject
7
- * - Join Daily room using room_url
8
- * - Handle mic capture + speaker playback
9
- * - Bot speaking detection via AnalyserNode on remote track (instant)
10
- * - User speaking detection via active-speaker-change
11
- * - Expose speaking$ (bot speaking), userSpeaking$ (user speaking), micMuted$
12
- * - Expose localStream$ for waveform visualization (AudioAnalyzerService)
13
- */
14
- export declare class DailyVoiceClientService {
15
- private ngZone;
16
- private callObject;
17
- private localStream;
18
- private localSessionId;
19
- /** Explicit playback of remote (bot) audio; required in some browsers. */
20
- private remoteAudioElement;
21
- /** AnalyserNode-based remote audio monitor for instant bot speaking detection. */
22
- private remoteAudioContext;
23
- private remoteSpeakingRAF;
24
- private speakingSubject;
25
- private userSpeakingSubject;
26
- private micMutedSubject;
27
- private localStreamSubject;
28
- private firstRemoteAudioFrameSubject;
29
- /** True when bot (remote participant) is the active speaker. */
30
- speaking$: Observable<boolean>;
31
- /** True when user (local participant) is the active speaker. */
32
- userSpeaking$: Observable<boolean>;
33
- /** True when mic is muted. */
34
- micMuted$: Observable<boolean>;
35
- /** Emits local mic stream for waveform visualization. */
36
- localStream$: Observable<MediaStream | null>;
37
- /** Emits true once when first remote audio frame starts playing. */
38
- firstRemoteAudioFrame$: Observable<boolean>;
39
- constructor(ngZone: NgZone);
40
- /**
41
- * Prompt for microphone access up front so callers can handle permission
42
- * denial before creating backend room/session resources.
43
- */
44
- ensureMicrophoneAccess(): Promise<void>;
45
- /**
46
- * Connect to Daily room. Acquires mic first for waveform, then joins with audio.
47
- * @param roomUrl Daily room URL (from room_created)
48
- * @param token Optional meeting token
49
- */
50
- connect(roomUrl: string, token?: string): Promise<void>;
51
- private setupEventHandlers;
52
- /**
53
- * Play remote (bot) audio track via a dedicated audio element.
54
- * Required in many browsers where Daily's internal playback does not output to speakers.
55
- */
56
- private playRemoteTrack;
57
- /**
58
- * Monitor remote audio track energy via AnalyserNode.
59
- * Polls at ~60fps and flips speakingSubject based on actual audio energy.
60
- */
61
- private monitorRemoteAudio;
62
- private stopRemoteAudioMonitor;
63
- private stopRemoteAudio;
64
- /** Set mic muted state. */
65
- setMuted(muted: boolean): void;
66
- /** Disconnect and cleanup. */
67
- disconnect(): Promise<void>;
68
- private cleanup;
69
- }
70
- //# sourceMappingURL=daily-voice-client.service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"daily-voice-client.service.d.ts","sourceRoot":"/Users/rohitthakur/hive-gpt/HiveAI-Packages/Angular/projects/hivegpt/eventsgpt-angular/src/","sources":["lib/components/voice-agent/services/daily-voice-client.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,MAAM,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAmB,UAAU,EAAE,MAAM,MAAM,CAAC;AAInD;;;;;;;;;;GAUG;AACH,qBAGa,uBAAuB;IAkCtB,OAAO,CAAC,MAAM;IAjC1B,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,cAAc,CAAuB;IAC7C,0EAA0E;IAC1E,OAAO,CAAC,kBAAkB,CAAiC;IAE3D,kFAAkF;IAClF,OAAO,CAAC,kBAAkB,CAA6B;IACvD,OAAO,CAAC,iBAAiB,CAAuB;IAEhD,OAAO,CAAC,eAAe,CAAuC;IAC9D,OAAO,CAAC,mBAAmB,CAAuC;IAClE,OAAO,CAAC,eAAe,CAAuC;IAC9D,OAAO,CAAC,kBAAkB,CAAiD;IAC3E,OAAO,CAAC,4BAA4B,CAAuC;IAE3E,gEAAgE;IAChE,SAAS,EAAE,UAAU,CAAC,OAAO,CAAC,CAAuC;IAErE,gEAAgE;IAChE,aAAa,EAAE,UAAU,CAAC,OAAO,CAAC,CAA2C;IAE7E,8BAA8B;IAC9B,SAAS,EAAE,UAAU,CAAC,OAAO,CAAC,CAAuC;IAErE,yDAAyD;IACzD,YAAY,EAAE,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,CACH;IAEzC,oEAAoE;IACpE,sBAAsB,EAAE,UAAU,CAAC,OAAO,CAAC,CACQ;gBAE/B,MAAM,EAAE,MAAM;IAElC;;;OAGG;IACG,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ7C;;;;OAIG;IACG,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmD7D,OAAO,CAAC,kBAAkB;IAuD1B;;;OAGG;IACH,OAAO,CAAC,eAAe;IA0CvB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAoD1B,OAAO,CAAC,sBAAsB;IAW9B,OAAO,CAAC,eAAe;IAUvB,2BAA2B;IAC3B,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAM9B,8BAA8B;IACxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAajC,OAAO,CAAC,OAAO;CAkBhB"}
@@ -1,49 +0,0 @@
1
- import { Observable } from 'rxjs';
2
- /** WebSocket message types from backend signaling. */
3
- export interface WsMessageRoomCreated {
4
- type: 'room_created';
5
- room_url: string;
6
- }
7
- export interface WsMessageUserTranscript {
8
- type: 'user_transcript';
9
- text: string;
10
- final?: boolean;
11
- }
12
- export interface WsMessageBotTranscript {
13
- type: 'bot_transcript';
14
- text: string;
15
- }
16
- export declare type WsMessage = WsMessageRoomCreated | WsMessageUserTranscript | WsMessageBotTranscript;
17
- export interface TranscriptData {
18
- text: string;
19
- final: boolean;
20
- }
21
- /**
22
- * WebSocket-only client for voice agent signaling.
23
- * CRITICAL: Uses native WebSocket only. NO Socket.IO, NO ngx-socket-io.
24
- *
25
- * Responsibilities:
26
- * - Connect to ws_url (from POST /ai/ask-voice response)
27
- * - Parse JSON messages (room_created, user_transcript, bot_transcript)
28
- * - Emit roomCreated$, userTranscript$, botTranscript$
29
- * - NO audio logic, NO mic logic. Audio is handled by Daily.js (WebRTC).
30
- */
31
- export declare class WebSocketVoiceClientService {
32
- private ws;
33
- private roomCreatedSubject;
34
- private userTranscriptSubject;
35
- private botTranscriptSubject;
36
- /** Emits room_url when backend sends room_created. */
37
- roomCreated$: Observable<string>;
38
- /** Emits user transcript updates. */
39
- userTranscript$: Observable<TranscriptData>;
40
- /** Emits bot transcript updates. */
41
- botTranscript$: Observable<string>;
42
- /** Connect to signaling WebSocket. No audio over this connection. */
43
- connect(wsUrl: string): void;
44
- /** Disconnect and cleanup. */
45
- disconnect(): void;
46
- /** Whether the WebSocket is open. */
47
- get isConnected(): boolean;
48
- }
49
- //# sourceMappingURL=websocket-voice-client.service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"websocket-voice-client.service.d.ts","sourceRoot":"/Users/rohitthakur/hive-gpt/HiveAI-Packages/Angular/projects/hivegpt/eventsgpt-angular/src/","sources":["lib/components/voice-agent/services/websocket-voice-client.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAW,MAAM,MAAM,CAAC;AAE3C,sDAAsD;AACtD,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,gBAAgB,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,oBAAY,SAAS,GACjB,oBAAoB,GACpB,uBAAuB,GACvB,sBAAsB,CAAC;AAE3B,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,qBAGa,2BAA2B;IACtC,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,kBAAkB,CAAyB;IACnD,OAAO,CAAC,qBAAqB,CAAiC;IAC9D,OAAO,CAAC,oBAAoB,CAAyB;IAErD,sDAAsD;IACtD,YAAY,EAAE,UAAU,CAAC,MAAM,CAAC,CAA0C;IAE1E,qCAAqC;IACrC,eAAe,EAAE,UAAU,CAAC,cAAc,CAAC,CACC;IAE5C,oCAAoC;IACpC,cAAc,EAAE,UAAU,CAAC,MAAM,CAAC,CACS;IAE3C,qEAAqE;IACrE,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IA4C5B,8BAA8B;IAC9B,UAAU,IAAI,IAAI;IAOlB,qCAAqC;IACrC,IAAI,WAAW,IAAI,OAAO,CAEzB;CACF"}
@@ -1,59 +0,0 @@
1
- import { HttpClient } from '@angular/common/http';
2
- import { InjectionToken } from '@angular/core';
3
- import { Observable } from 'rxjs';
4
- /**
5
- * Default matches Pro-Events `AppConstants.authTokenKey` — same localStorage shape
6
- * `{ accessToken, refreshToken, ... }` as JSON.
7
- * Named factory (no arrow fn) so ngc metadata collection accepts it.
8
- */
9
- export declare function hiveGptAuthStorageKeyFactory(): string;
10
- export declare const HIVEGPT_AUTH_STORAGE_KEY: InjectionToken<string>;
11
- /** Subset of platform token refresh response (user/tokenRefresh). */
12
- export interface HiveGptPlatformTokenResponse {
13
- accessToken?: string;
14
- refreshToken?: string;
15
- email?: string;
16
- expiresIn?: number | string;
17
- [key: string]: unknown;
18
- }
19
- export interface EnsureTokenResult {
20
- accessToken: string;
21
- /** True when a network refresh was performed successfully. */
22
- refreshed: boolean;
23
- /** Full API payload when refreshed (for host `saveTokenAndLoginUser`). */
24
- authResponse?: HiveGptPlatformTokenResponse;
25
- }
26
- /**
27
- * Proactive access-token refresh (JWT `exp`) + single-flight queue, aligned with
28
- * Pro-Events `EventInterceptor` + `AuthService.refreshToken`.
29
- */
30
- export declare class PlatformTokenRefreshService {
31
- private http;
32
- /** Use `Object` (not `object`) so ngc metadata collection accepts the parameter type. */
33
- private platformId;
34
- private refreshTokenInProgress;
35
- private refreshTokenSubject;
36
- private readonly storageKey;
37
- constructor(http: HttpClient,
38
- /** Use `Object` (not `object`) so ngc metadata collection accepts the parameter type. */
39
- platformId: Object,
40
- /**
41
- * Avoid `string | null` on the parameter — `|` is treated as unsupported expression in ngc metadata.
42
- */
43
- authStorageKey: string);
44
- /** Read parsed auth blob from localStorage (same as host app). */
45
- readStoredAuth(): HiveGptPlatformTokenResponse | null;
46
- persistAuth(res: HiveGptPlatformTokenResponse): void;
47
- /**
48
- * JWT `exp` check without @auth0/angular-jwt (keeps package lean).
49
- * @param skewSeconds refresh slightly before actual expiry (clock skew).
50
- */
51
- isAccessTokenExpired(token: string | null | undefined, skewSeconds?: number): boolean;
52
- private getJwtExpirationMs;
53
- /**
54
- * Returns a valid access token: refreshes via `POST {usersApiBaseUrl}/user/tokenRefresh`
55
- * when JWT is expired and a refresh token exists in storage.
56
- */
57
- ensureValidAccessToken(currentAccessToken: string | undefined | null, usersApiBaseUrl: string): Observable<EnsureTokenResult>;
58
- }
59
- //# sourceMappingURL=platform-token-refresh.service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"platform-token-refresh.service.d.ts","sourceRoot":"/Users/rohitthakur/hive-gpt/HiveAI-Packages/Angular/projects/hivegpt/eventsgpt-angular/src/","sources":["lib/services/platform-token-refresh.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAGL,cAAc,EAGf,MAAM,eAAe,CAAC;AACvB,OAAO,EAAmB,UAAU,EAAkB,MAAM,MAAM,CAAC;AAGnE;;;;GAIG;AACH,wBAAgB,4BAA4B,IAAI,MAAM,CAErD;AAED,eAAO,MAAM,wBAAwB,wBAMpC,CAAC;AAEF,qEAAqE;AACrE,MAAM,WAAW,4BAA4B;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,8DAA8D;IAC9D,SAAS,EAAE,OAAO,CAAC;IACnB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,4BAA4B,CAAC;CAC7C;AAED;;;GAGG;AACH,qBAGa,2BAA2B;IAOpC,OAAO,CAAC,IAAI;IACZ,yFAAyF;IACpE,OAAO,CAAC,UAAU;IARzC,OAAO,CAAC,sBAAsB,CAAS;IACvC,OAAO,CAAC,mBAAmB,CAA4C;IAEvE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAG1B,IAAI,EAAE,UAAU;IACxB,yFAAyF;IAC5D,UAAU,EAAE,MAAM;IAC/C;;OAEG;IAC2C,cAAc,EAAE,MAAM;IAQtE,kEAAkE;IAClE,cAAc,IAAI,4BAA4B,GAAG,IAAI;IAerD,WAAW,CAAC,GAAG,EAAE,4BAA4B,GAAG,IAAI;IAWpD;;;OAGG;IACH,oBAAoB,CAClB,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAChC,WAAW,SAAK,GACf,OAAO;IAWV,OAAO,CAAC,kBAAkB;IAuB1B;;;OAGG;IACH,sBAAsB,CACpB,kBAAkB,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EAC7C,eAAe,EAAE,MAAM,GACtB,UAAU,CAAC,iBAAiB,CAAC;CAsEjC"}