@hivegpt/hiveai-angular 0.0.593 → 0.0.596
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/environments/environment.d.ts.map +1 -1
- package/esm2020/environments/environment.mjs +15 -0
- package/esm2020/hivegpt-hiveai-angular.mjs +5 -0
- package/esm2020/lib/components/NotificationSocket.mjs +45 -0
- package/esm2020/lib/components/bot-html-editor/bot-html-editor.component.mjs +113 -0
- package/esm2020/lib/components/bot.service.mjs +45 -0
- package/esm2020/lib/components/chat-drawer/chat-drawer.component.mjs +3904 -0
- package/esm2020/lib/components/chatbot/chatbot.component.mjs +95 -0
- package/esm2020/lib/components/conversation.service.mjs +58 -0
- package/esm2020/lib/components/socket-service.service.mjs +65 -0
- package/esm2020/lib/components/translations/translation.service.mjs +244 -0
- package/esm2020/lib/components/video-player/video-player.component.mjs +131 -0
- package/esm2020/lib/components/voice-agent/components/voice-agent-modal/voice-agent-modal.component.mjs +187 -0
- package/esm2020/lib/components/voice-agent/services/audio-analyzer.service.mjs +127 -0
- package/esm2020/lib/components/voice-agent/services/voice-agent.service.mjs +352 -0
- package/esm2020/lib/components/voice-agent/voice-agent.module.mjs +37 -0
- package/esm2020/lib/components/voice-agent/voice-modal-tokens.mjs +4 -0
- package/esm2020/lib/hivegpt.module.mjs +28 -0
- package/esm2020/lib/models/video.mjs +2 -0
- package/esm2020/lib/pipes/safe-html.pipe.mjs +20 -0
- package/esm2020/lib/services/platform-token-refresh.service.mjs +177 -0
- package/esm2020/lib/utils/utils.mjs +36 -0
- package/esm2020/public-api.mjs +15 -0
- package/fesm2015/hivegpt-hiveai-angular.mjs +5605 -0
- package/fesm2015/hivegpt-hiveai-angular.mjs.map +1 -0
- package/fesm2020/hivegpt-hiveai-angular.mjs +5606 -0
- package/fesm2020/hivegpt-hiveai-angular.mjs.map +1 -0
- package/hivegpt-hiveai-angular.d.ts.map +1 -1
- package/index.d.ts +6 -0
- package/lib/components/NotificationSocket.d.ts +6 -1
- package/lib/components/NotificationSocket.d.ts.map +1 -1
- package/lib/components/bot-html-editor/bot-html-editor.component.d.ts +3 -0
- package/lib/components/bot-html-editor/bot-html-editor.component.d.ts.map +1 -1
- package/lib/components/bot.service.d.ts +5 -1
- package/lib/components/bot.service.d.ts.map +1 -1
- package/lib/components/chat-drawer/chat-drawer.component.d.ts +7 -3
- package/lib/components/chat-drawer/chat-drawer.component.d.ts.map +1 -1
- package/lib/components/chatbot/chatbot.component.d.ts +3 -0
- package/lib/components/chatbot/chatbot.component.d.ts.map +1 -1
- package/lib/components/conversation.service.d.ts +3 -0
- package/lib/components/conversation.service.d.ts.map +1 -1
- package/lib/components/socket-service.service.d.ts +7 -3
- package/lib/components/socket-service.service.d.ts.map +1 -1
- package/lib/components/translations/translation.service.d.ts +3 -0
- package/lib/components/translations/translation.service.d.ts.map +1 -1
- package/lib/components/video-player/video-player.component.d.ts +3 -0
- package/lib/components/video-player/video-player.component.d.ts.map +1 -1
- package/lib/components/voice-agent/components/voice-agent-modal/voice-agent-modal.component.d.ts +3 -0
- package/lib/components/voice-agent/components/voice-agent-modal/voice-agent-modal.component.d.ts.map +1 -1
- package/lib/components/voice-agent/services/audio-analyzer.service.d.ts +3 -0
- package/lib/components/voice-agent/services/audio-analyzer.service.d.ts.map +1 -1
- package/lib/components/voice-agent/services/voice-agent.service.d.ts +4 -1
- package/lib/components/voice-agent/services/voice-agent.service.d.ts.map +1 -1
- package/lib/components/voice-agent/voice-agent.module.d.ts +6 -0
- package/lib/components/voice-agent/voice-agent.module.d.ts.map +1 -1
- package/lib/components/voice-agent/voice-modal-tokens.d.ts.map +1 -1
- package/lib/hivegpt.module.d.ts +16 -0
- package/lib/hivegpt.module.d.ts.map +1 -1
- package/lib/models/video.d.ts.map +1 -1
- package/lib/pipes/safe-html.pipe.d.ts +3 -0
- package/lib/pipes/safe-html.pipe.d.ts.map +1 -1
- package/lib/services/platform-token-refresh.service.d.ts +3 -0
- package/lib/services/platform-token-refresh.service.d.ts.map +1 -1
- package/lib/utils/utils.d.ts.map +1 -1
- package/package.json +24 -12
- package/public-api.d.ts +2 -0
- package/public-api.d.ts.map +1 -1
- package/bundles/hivegpt-hiveai-angular.umd.js +0 -6285
- package/bundles/hivegpt-hiveai-angular.umd.js.map +0 -1
- package/bundles/hivegpt-hiveai-angular.umd.min.js +0 -2
- package/bundles/hivegpt-hiveai-angular.umd.min.js.map +0 -1
- package/esm2015/environments/environment.js +0 -15
- package/esm2015/hivegpt-hiveai-angular.js +0 -13
- package/esm2015/lib/components/NotificationSocket.js +0 -39
- package/esm2015/lib/components/bot-html-editor/bot-html-editor.component.js +0 -112
- package/esm2015/lib/components/bot.service.js +0 -50
- package/esm2015/lib/components/chat-drawer/chat-drawer.component.js +0 -3809
- package/esm2015/lib/components/chatbot/chatbot.component.js +0 -57
- package/esm2015/lib/components/conversation.service.js +0 -57
- package/esm2015/lib/components/socket-service.service.js +0 -79
- package/esm2015/lib/components/translations/translation.service.js +0 -244
- package/esm2015/lib/components/video-player/video-player.component.js +0 -123
- package/esm2015/lib/components/voice-agent/components/voice-agent-modal/voice-agent-modal.component.js +0 -192
- package/esm2015/lib/components/voice-agent/services/audio-analyzer.service.js +0 -125
- package/esm2015/lib/components/voice-agent/services/voice-agent.service.js +0 -364
- package/esm2015/lib/components/voice-agent/voice-agent.module.js +0 -29
- package/esm2015/lib/components/voice-agent/voice-modal-tokens.js +0 -4
- package/esm2015/lib/hivegpt.module.js +0 -23
- package/esm2015/lib/models/video.js +0 -2
- package/esm2015/lib/pipes/safe-html.pipe.js +0 -19
- package/esm2015/lib/services/platform-token-refresh.service.js +0 -173
- package/esm2015/lib/utils/utils.js +0 -38
- package/esm2015/public-api.js +0 -13
- package/fesm2015/hivegpt-hiveai-angular.js +0 -5484
- package/fesm2015/hivegpt-hiveai-angular.js.map +0 -1
- package/hivegpt-hiveai-angular.d.ts +0 -13
- package/hivegpt-hiveai-angular.metadata.json +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,38 +0,0 @@
|
|
|
1
|
-
const formatHoursAndMinutes = (date) => {
|
|
2
|
-
let hours = date.getHours() % 12;
|
|
3
|
-
const minutes = date.getMinutes();
|
|
4
|
-
const amPm = date.getHours() < 12 ? 'AM' : 'PM';
|
|
5
|
-
if (hours === 0)
|
|
6
|
-
hours = 12;
|
|
7
|
-
const formattedHours = hours < 10 ? `0${hours}` : hours;
|
|
8
|
-
const formattedMinutes = minutes < 10 ? `0${minutes}` : minutes;
|
|
9
|
-
return `${formattedHours}:${formattedMinutes} ${amPm}`;
|
|
10
|
-
};
|
|
11
|
-
const ɵ0 = formatHoursAndMinutes;
|
|
12
|
-
export const formatNow = (timezone) => {
|
|
13
|
-
const now = new Date();
|
|
14
|
-
if (timezone) {
|
|
15
|
-
const options = {
|
|
16
|
-
hour12: true,
|
|
17
|
-
hour: 'numeric',
|
|
18
|
-
minute: 'numeric',
|
|
19
|
-
timeZone: timezone,
|
|
20
|
-
};
|
|
21
|
-
return now.toLocaleString('en-US', options);
|
|
22
|
-
}
|
|
23
|
-
return formatHoursAndMinutes(now);
|
|
24
|
-
};
|
|
25
|
-
export const formatTimeStamps = (timezone, timestamps) => {
|
|
26
|
-
const date = new Date(timestamps + 'Z');
|
|
27
|
-
const options = {
|
|
28
|
-
hour12: true,
|
|
29
|
-
hour: 'numeric',
|
|
30
|
-
minute: 'numeric',
|
|
31
|
-
};
|
|
32
|
-
if (timezone && timezone.trim()) {
|
|
33
|
-
options.timeZone = timezone.trim();
|
|
34
|
-
}
|
|
35
|
-
return date.toLocaleString('en-US', options);
|
|
36
|
-
};
|
|
37
|
-
export { ɵ0 };
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL3JvaGl0dGhha3VyL2hpdmUtZ3B0L0hpdmVBSS1QYWNrYWdlcy9Bbmd1bGFyL3Byb2plY3RzL2hpdmVncHQvZXZlbnRzZ3B0LWFuZ3VsYXIvc3JjLyIsInNvdXJjZXMiOlsibGliL3V0aWxzL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxJQUFVLEVBQUUsRUFBRTtJQUMzQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNsQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNoRCxJQUFHLEtBQUssS0FBSyxDQUFDO1FBQUUsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUUzQixNQUFNLGNBQWMsR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDeEQsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFFaEUsT0FBTyxHQUFHLGNBQWMsSUFBSSxnQkFBZ0IsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUN6RCxDQUFDLENBQUM7O0FBRUYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsUUFBaUIsRUFBRSxFQUFFO0lBQzdDLE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7SUFDdkIsSUFBSSxRQUFRLEVBQUU7UUFDWixNQUFNLE9BQU8sR0FBUTtZQUNuQixNQUFNLEVBQUUsSUFBSTtZQUNaLElBQUksRUFBRSxTQUFTO1lBQ2YsTUFBTSxFQUFFLFNBQVM7WUFDakIsUUFBUSxFQUFFLFFBQVE7U0FDbkIsQ0FBQztRQUNGLE9BQU8sR0FBRyxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDN0M7SUFDRCxPQUFPLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsUUFBNEIsRUFBRSxVQUFlLEVBQUUsRUFBRTtJQUNoRixNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDeEMsTUFBTSxPQUFPLEdBQVE7UUFDbkIsTUFBTSxFQUFFLElBQUk7UUFDWixJQUFJLEVBQUUsU0FBUztRQUNmLE1BQU0sRUFBRSxTQUFTO0tBQ2xCLENBQUM7SUFDRixJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDL0IsT0FBTyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7S0FDcEM7SUFDRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9DLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGZvcm1hdEhvdXJzQW5kTWludXRlcyA9IChkYXRlOiBEYXRlKSA9PiB7XG4gIGxldCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKSAlIDEyO1xuICBjb25zdCBtaW51dGVzID0gZGF0ZS5nZXRNaW51dGVzKCk7XG4gIGNvbnN0IGFtUG0gPSBkYXRlLmdldEhvdXJzKCkgPCAxMiA/ICdBTScgOiAnUE0nO1xuICBpZihob3VycyA9PT0gMCkgaG91cnMgPSAxMjtcblxuICBjb25zdCBmb3JtYXR0ZWRIb3VycyA9IGhvdXJzIDwgMTAgPyBgMCR7aG91cnN9YCA6IGhvdXJzO1xuICBjb25zdCBmb3JtYXR0ZWRNaW51dGVzID0gbWludXRlcyA8IDEwID8gYDAke21pbnV0ZXN9YCA6IG1pbnV0ZXM7XG5cbiAgcmV0dXJuIGAke2Zvcm1hdHRlZEhvdXJzfToke2Zvcm1hdHRlZE1pbnV0ZXN9ICR7YW1QbX1gO1xufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdE5vdyA9ICh0aW1lem9uZT86IHN0cmluZykgPT4ge1xuICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICBpZiAodGltZXpvbmUpIHtcbiAgICBjb25zdCBvcHRpb25zOiBhbnkgPSB7XG4gICAgICBob3VyMTI6IHRydWUsXG4gICAgICBob3VyOiAnbnVtZXJpYycsXG4gICAgICBtaW51dGU6ICdudW1lcmljJyxcbiAgICAgIHRpbWVab25lOiB0aW1lem9uZSxcbiAgICB9O1xuICAgIHJldHVybiBub3cudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywgb3B0aW9ucyk7XG4gIH1cbiAgcmV0dXJuIGZvcm1hdEhvdXJzQW5kTWludXRlcyhub3cpO1xufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdFRpbWVTdGFtcHMgPSAodGltZXpvbmU6IHN0cmluZyB8IHVuZGVmaW5lZCwgdGltZXN0YW1wczogYW55KSA9PiB7XG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh0aW1lc3RhbXBzICsgJ1onKTtcbiAgY29uc3Qgb3B0aW9uczogYW55ID0ge1xuICAgIGhvdXIxMjogdHJ1ZSxcbiAgICBob3VyOiAnbnVtZXJpYycsXG4gICAgbWludXRlOiAnbnVtZXJpYycsXG4gIH07XG4gIGlmICh0aW1lem9uZSAmJiB0aW1lem9uZS50cmltKCkpIHtcbiAgICBvcHRpb25zLnRpbWVab25lID0gdGltZXpvbmUudHJpbSgpO1xuICB9XG4gIHJldHVybiBkYXRlLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIG9wdGlvbnMpO1xufTtcbiJdfQ==
|
package/esm2015/public-api.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Public API Surface of hive-gpt
|
|
3
|
-
*/
|
|
4
|
-
export * from './lib/components/chat-drawer/chat-drawer.component';
|
|
5
|
-
export * from './lib/components/chatbot/chatbot.component';
|
|
6
|
-
export * from './lib/components/voice-agent/components/voice-agent-modal/voice-agent-modal.component';
|
|
7
|
-
export * from './lib/components/voice-agent/services/voice-agent.service';
|
|
8
|
-
export * from './lib/components/voice-agent/services/audio-analyzer.service';
|
|
9
|
-
export * from './lib/components/voice-agent/voice-agent.module';
|
|
10
|
-
export * from './lib/components/voice-agent/voice-modal-tokens';
|
|
11
|
-
export * from './lib/hivegpt.module';
|
|
12
|
-
export * from './lib/services/platform-token-refresh.service';
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIvVXNlcnMvcm9oaXR0aGFrdXIvaGl2ZS1ncHQvSGl2ZUFJLVBhY2thZ2VzL0FuZ3VsYXIvcHJvamVjdHMvaGl2ZWdwdC9ldmVudHNncHQtYW5ndWxhci9zcmMvIiwic291cmNlcyI6WyJwdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxvREFBb0QsQ0FBQztBQUNuRSxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsdUZBQXVGLENBQUM7QUFDdEcsY0FBYywyREFBMkQsQ0FBQztBQUMxRSxjQUFjLDhEQUE4RCxDQUFDO0FBQzdFLGNBQWMsaURBQWlELENBQUM7QUFDaEUsY0FBYyxpREFBaUQsQ0FBQztBQUNoRSxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsK0NBQStDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIGhpdmUtZ3B0XG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9jaGF0LWRyYXdlci9jaGF0LWRyYXdlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9jaGF0Ym90L2NoYXRib3QuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdm9pY2UtYWdlbnQvY29tcG9uZW50cy92b2ljZS1hZ2VudC1tb2RhbC92b2ljZS1hZ2VudC1tb2RhbC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy92b2ljZS1hZ2VudC9zZXJ2aWNlcy92b2ljZS1hZ2VudC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdm9pY2UtYWdlbnQvc2VydmljZXMvYXVkaW8tYW5hbHl6ZXIuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3ZvaWNlLWFnZW50L3ZvaWNlLWFnZW50Lm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3ZvaWNlLWFnZW50L3ZvaWNlLW1vZGFsLXRva2Vucyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9oaXZlZ3B0Lm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9wbGF0Zm9ybS10b2tlbi1yZWZyZXNoLnNlcnZpY2UnO1xuIl19
|