gunsmith-common 2.3.27 → 2.4.0

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.
@@ -0,0 +1,71 @@
1
+ import { HttpClient } from '@angular/common/http';
2
+ import { Inject, Injectable, InjectionToken, Optional } from '@angular/core';
3
+ import { HubConnectionBuilder, HubConnectionState } from '@microsoft/signalr';
4
+ import { Subject } from 'rxjs';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common/http";
7
+ /**
8
+ * Supplies a bearer token (the Cognito ID token) for the SignalR hub connection.
9
+ * Provided by the host app so this library stays decoupled from the auth provider.
10
+ */
11
+ export const AI_ID_TOKEN_FACTORY = new InjectionToken('AI_ID_TOKEN_FACTORY');
12
+ /**
13
+ * REST + SignalR client for the GunSmith.AI service. REST auth is handled by the host app's
14
+ * HTTP interceptor; the hub uses the injected token factory via accessTokenFactory.
15
+ */
16
+ export class AiAssistantService {
17
+ constructor(http, env, idTokenFactory) {
18
+ this.http = http;
19
+ this.env = env;
20
+ this.idTokenFactory = idTokenFactory;
21
+ this.token$ = new Subject();
22
+ this.toolStarted$ = new Subject();
23
+ this.citations$ = new Subject();
24
+ this.completed$ = new Subject();
25
+ this.streamError$ = new Subject();
26
+ this.apiBase = this.env.aiBaseUrl;
27
+ }
28
+ get connectionId() {
29
+ return this.hub ? this.hub.connectionId : null;
30
+ }
31
+ async connect() {
32
+ if (this.hub && this.hub.state === HubConnectionState.Connected) {
33
+ return;
34
+ }
35
+ const builder = new HubConnectionBuilder().withUrl(this.apiBase + 'api/ai-chat-hub', this.idTokenFactory ? { accessTokenFactory: this.idTokenFactory } : {});
36
+ this.hub = builder.withAutomaticReconnect().build();
37
+ this.hub.on('TokenReceived', (streamId, text) => this.token$.next({ streamId, text }));
38
+ this.hub.on('ToolStarted', (streamId, toolName) => this.toolStarted$.next({ streamId, toolName }));
39
+ this.hub.on('CitationsReceived', (streamId, citations) => this.citations$.next({ streamId, citations }));
40
+ this.hub.on('MessageCompleted', (streamId, messageId) => this.completed$.next({ streamId, messageId }));
41
+ this.hub.on('StreamError', (streamId, message) => this.streamError$.next({ streamId, message }));
42
+ await this.hub.start();
43
+ }
44
+ createConversation() {
45
+ return this.http.post(this.apiBase + 'api/ai/conversations', {});
46
+ }
47
+ getConversations() {
48
+ return this.http.get(this.apiBase + 'api/ai/conversations');
49
+ }
50
+ getConversation(id) {
51
+ return this.http.get(this.apiBase + 'api/ai/conversations/' + id);
52
+ }
53
+ sendMessage(id, content, connectionId) {
54
+ return this.http.post(this.apiBase + 'api/ai/conversations/' + id + '/messages', { content, connectionId });
55
+ }
56
+ }
57
+ AiAssistantService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AiAssistantService, deps: [{ token: i1.HttpClient }, { token: 'env' }, { token: AI_ID_TOKEN_FACTORY, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
58
+ AiAssistantService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AiAssistantService, providedIn: 'root' });
59
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AiAssistantService, decorators: [{
60
+ type: Injectable,
61
+ args: [{ providedIn: 'root' }]
62
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: undefined, decorators: [{
63
+ type: Inject,
64
+ args: ['env']
65
+ }] }, { type: undefined, decorators: [{
66
+ type: Optional
67
+ }, {
68
+ type: Inject,
69
+ args: [AI_ID_TOKEN_FACTORY]
70
+ }] }]; } });
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktYXNzaXN0YW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndW5zbWl0aC1jb21tb24vc3JjL3NoYXJlZC9zZXJ2aWNlcy9haS1hc3Npc3RhbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RSxPQUFPLEVBQWlCLG9CQUFvQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDN0YsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7O0FBRTNDOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLElBQUksY0FBYyxDQUF3QixxQkFBcUIsQ0FBQyxDQUFDO0FBZXBHOzs7R0FHRztBQUVILE1BQU0sT0FBTyxrQkFBa0I7SUFVN0IsWUFDVSxJQUFnQixFQUNELEdBQVEsRUFDa0IsY0FBc0M7UUFGL0UsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNELFFBQUcsR0FBSCxHQUFHLENBQUs7UUFDa0IsbUJBQWMsR0FBZCxjQUFjLENBQXdCO1FBVGhGLFdBQU0sR0FBRyxJQUFJLE9BQU8sRUFBYyxDQUFDO1FBQ25DLGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQWEsQ0FBQztRQUN4QyxlQUFVLEdBQUcsSUFBSSxPQUFPLEVBQWtCLENBQUM7UUFDM0MsZUFBVSxHQUFHLElBQUksT0FBTyxFQUFrQixDQUFDO1FBQzNDLGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQW9CLENBQUM7UUFPdEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2Qs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Qy9CLENBQUM7O2dIQWhFVSxrQkFBa0IsNENBWW5CLEtBQUssYUFDTyxtQkFBbUI7b0hBYjlCLGtCQUFrQixjQURMLE1BQU07NEZBQ25CLGtCQUFrQjtrQkFEOUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQWE3QixNQUFNOzJCQUFDLEtBQUs7OzBCQUNaLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdWJDb25uZWN0aW9uLCBIdWJDb25uZWN0aW9uQnVpbGRlciwgSHViQ29ubmVjdGlvblN0YXRlIH0gZnJvbSAnQG1pY3Jvc29mdC9zaWduYWxyJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBTdXBwbGllcyBhIGJlYXJlciB0b2tlbiAodGhlIENvZ25pdG8gSUQgdG9rZW4pIGZvciB0aGUgU2lnbmFsUiBodWIgY29ubmVjdGlvbi5cbiAqIFByb3ZpZGVkIGJ5IHRoZSBob3N0IGFwcCBzbyB0aGlzIGxpYnJhcnkgc3RheXMgZGVjb3VwbGVkIGZyb20gdGhlIGF1dGggcHJvdmlkZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBBSV9JRF9UT0tFTl9GQUNUT1JZID0gbmV3IEluamVjdGlvblRva2VuPCgpID0+IFByb21pc2U8c3RyaW5nPj4oJ0FJX0lEX1RPS0VOX0ZBQ1RPUlknKTtcblxuZXhwb3J0IGludGVyZmFjZSBDb252ZXJzYXRpb25EdG8geyBpZDogbnVtYmVyOyB0aXRsZT86IHN0cmluZzsgY3JlYXRlZFV0Yzogc3RyaW5nOyBsYXN0QWN0aXZpdHlVdGM6IHN0cmluZzsgfVxuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlRHRvIHsgaWQ6IG51bWJlcjsgcm9sZTogc3RyaW5nOyBjb250ZW50OiBzdHJpbmc7IGNyZWF0ZWRVdGM6IHN0cmluZzsgdG9vbFRyYWNlSnNvbj86IHN0cmluZzsgfVxuZXhwb3J0IGludGVyZmFjZSBDb252ZXJzYXRpb25EZXRhaWxEdG8geyBpZDogbnVtYmVyOyB0aXRsZT86IHN0cmluZzsgbWVzc2FnZXM6IE1lc3NhZ2VEdG9bXTsgfVxuZXhwb3J0IGludGVyZmFjZSBTZW5kTWVzc2FnZVJlc3BvbnNlIHsgc3RyZWFtSWQ6IHN0cmluZzsgdXNlck1lc3NhZ2VJZDogbnVtYmVyOyB9XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2l0YXRpb24geyB0aXRsZT86IHN0cmluZzsgdXJpPzogc3RyaW5nOyBwYWdlPzogbnVtYmVyOyBoZWFkaW5nPzogc3RyaW5nOyB9XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5FdmVudCB7IHN0cmVhbUlkOiBzdHJpbmc7IHRleHQ6IHN0cmluZzsgfVxuZXhwb3J0IGludGVyZmFjZSBUb29sRXZlbnQgeyBzdHJlYW1JZDogc3RyaW5nOyB0b29sTmFtZTogc3RyaW5nOyB9XG5leHBvcnQgaW50ZXJmYWNlIENpdGF0aW9uc0V2ZW50IHsgc3RyZWFtSWQ6IHN0cmluZzsgY2l0YXRpb25zOiBDaXRhdGlvbltdOyB9XG5leHBvcnQgaW50ZXJmYWNlIENvbXBsZXRlZEV2ZW50IHsgc3RyZWFtSWQ6IHN0cmluZzsgbWVzc2FnZUlkOiBudW1iZXI7IH1cbmV4cG9ydCBpbnRlcmZhY2UgU3RyZWFtRXJyb3JFdmVudCB7IHN0cmVhbUlkOiBzdHJpbmc7IG1lc3NhZ2U6IHN0cmluZzsgfVxuXG4vKipcbiAqIFJFU1QgKyBTaWduYWxSIGNsaWVudCBmb3IgdGhlIEd1blNtaXRoLkFJIHNlcnZpY2UuIFJFU1QgYXV0aCBpcyBoYW5kbGVkIGJ5IHRoZSBob3N0IGFwcCdzXG4gKiBIVFRQIGludGVyY2VwdG9yOyB0aGUgaHViIHVzZXMgdGhlIGluamVjdGVkIHRva2VuIGZhY3RvcnkgdmlhIGFjY2Vzc1Rva2VuRmFjdG9yeS5cbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBBaUFzc2lzdGFudFNlcnZpY2Uge1xuICBwcml2YXRlIGh1Yj86IEh1YkNvbm5lY3Rpb247XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBpQmFzZTogc3RyaW5nO1xuXG4gIHJlYWRvbmx5IHRva2VuJCA9IG5ldyBTdWJqZWN0PFRva2VuRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IHRvb2xTdGFydGVkJCA9IG5ldyBTdWJqZWN0PFRvb2xFdmVudD4oKTtcbiAgcmVhZG9ubHkgY2l0YXRpb25zJCA9IG5ldyBTdWJqZWN0PENpdGF0aW9uc0V2ZW50PigpO1xuICByZWFkb25seSBjb21wbGV0ZWQkID0gbmV3IFN1YmplY3Q8Q29tcGxldGVkRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IHN0cmVhbUVycm9yJCA9IG5ldyBTdWJqZWN0PFN0cmVhbUVycm9yRXZlbnQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIEBJbmplY3QoJ2VudicpIHByaXZhdGUgZW52OiBhbnksXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBSV9JRF9UT0tFTl9GQUNUT1JZKSBwcml2YXRlIGlkVG9rZW5GYWN0b3J5PzogKCkgPT4gUHJvbWlzZTxzdHJpbmc+XG4gICkge1xuICAgIHRoaXMuYXBpQmFzZSA9IHRoaXMuZW52LmFpQmFzZVVybDtcbiAgfVxuXG4gIGdldCBjb25uZWN0aW9uSWQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuaHViID8gdGhpcy5odWIuY29ubmVjdGlvbklkIDogbnVsbDtcbiAgfVxuXG4gIGFzeW5jIGNvbm5lY3QoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaHViICYmIHRoaXMuaHViLnN0YXRlID09PSBIdWJDb25uZWN0aW9uU3RhdGUuQ29ubmVjdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYnVpbGRlciA9IG5ldyBIdWJDb25uZWN0aW9uQnVpbGRlcigpLndpdGhVcmwoXG4gICAgICB0aGlzLmFwaUJhc2UgKyAnYXBpL2FpLWNoYXQtaHViJyxcbiAgICAgIHRoaXMuaWRUb2tlbkZhY3RvcnkgPyB7IGFjY2Vzc1Rva2VuRmFjdG9yeTogdGhpcy5pZFRva2VuRmFjdG9yeSB9IDoge31cbiAgICApO1xuXG4gICAgdGhpcy5odWIgPSBidWlsZGVyLndpdGhBdXRvbWF0aWNSZWNvbm5lY3QoKS5idWlsZCgpO1xuXG4gICAgdGhpcy5odWIub24oJ1Rva2VuUmVjZWl2ZWQnLCAoc3RyZWFtSWQ6IHN0cmluZywgdGV4dDogc3RyaW5nKSA9PlxuICAgICAgdGhpcy50b2tlbiQubmV4dCh7IHN0cmVhbUlkLCB0ZXh0IH0pKTtcbiAgICB0aGlzLmh1Yi5vbignVG9vbFN0YXJ0ZWQnLCAoc3RyZWFtSWQ6IHN0cmluZywgdG9vbE5hbWU6IHN0cmluZykgPT5cbiAgICAgIHRoaXMudG9vbFN0YXJ0ZWQkLm5leHQoeyBzdHJlYW1JZCwgdG9vbE5hbWUgfSkpO1xuICAgIHRoaXMuaHViLm9uKCdDaXRhdGlvbnNSZWNlaXZlZCcsIChzdHJlYW1JZDogc3RyaW5nLCBjaXRhdGlvbnM6IENpdGF0aW9uW10pID0+XG4gICAgICB0aGlzLmNpdGF0aW9ucyQubmV4dCh7IHN0cmVhbUlkLCBjaXRhdGlvbnMgfSkpO1xuICAgIHRoaXMuaHViLm9uKCdNZXNzYWdlQ29tcGxldGVkJywgKHN0cmVhbUlkOiBzdHJpbmcsIG1lc3NhZ2VJZDogbnVtYmVyKSA9PlxuICAgICAgdGhpcy5jb21wbGV0ZWQkLm5leHQoeyBzdHJlYW1JZCwgbWVzc2FnZUlkIH0pKTtcbiAgICB0aGlzLmh1Yi5vbignU3RyZWFtRXJyb3InLCAoc3RyZWFtSWQ6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSA9PlxuICAgICAgdGhpcy5zdHJlYW1FcnJvciQubmV4dCh7IHN0cmVhbUlkLCBtZXNzYWdlIH0pKTtcblxuICAgIGF3YWl0IHRoaXMuaHViLnN0YXJ0KCk7XG4gIH1cblxuICBjcmVhdGVDb252ZXJzYXRpb24oKTogT2JzZXJ2YWJsZTxDb252ZXJzYXRpb25EdG8+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8Q29udmVyc2F0aW9uRHRvPih0aGlzLmFwaUJhc2UgKyAnYXBpL2FpL2NvbnZlcnNhdGlvbnMnLCB7fSk7XG4gIH1cblxuICBnZXRDb252ZXJzYXRpb25zKCk6IE9ic2VydmFibGU8Q29udmVyc2F0aW9uRHRvW10+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxDb252ZXJzYXRpb25EdG9bXT4odGhpcy5hcGlCYXNlICsgJ2FwaS9haS9jb252ZXJzYXRpb25zJyk7XG4gIH1cblxuICBnZXRDb252ZXJzYXRpb24oaWQ6IG51bWJlcik6IE9ic2VydmFibGU8Q29udmVyc2F0aW9uRGV0YWlsRHRvPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8Q29udmVyc2F0aW9uRGV0YWlsRHRvPih0aGlzLmFwaUJhc2UgKyAnYXBpL2FpL2NvbnZlcnNhdGlvbnMvJyArIGlkKTtcbiAgfVxuXG4gIHNlbmRNZXNzYWdlKGlkOiBudW1iZXIsIGNvbnRlbnQ6IHN0cmluZywgY29ubmVjdGlvbklkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFNlbmRNZXNzYWdlUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8U2VuZE1lc3NhZ2VSZXNwb25zZT4oXG4gICAgICB0aGlzLmFwaUJhc2UgKyAnYXBpL2FpL2NvbnZlcnNhdGlvbnMvJyArIGlkICsgJy9tZXNzYWdlcycsXG4gICAgICB7IGNvbnRlbnQsIGNvbm5lY3Rpb25JZCB9KTtcbiAgfVxufVxuIl19
@@ -41,4 +41,5 @@ export * from './coating-value.service';
41
41
  export * from './finish-date-helper.service';
42
42
  export * from './milling-type-addon.service';
43
43
  export * from './firearm-milling-type.service';
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndW5zbWl0aC1jb21tb24vc3JjL3NoYXJlZC9zZXJ2aWNlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLGdDQUFnQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jdXN0b21lci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vZmlyZWFybS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vZ3VuLXBhcnQuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3N0YXRlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi92ZW5kb3Iuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3RvdGFscy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vd29yay1ob2xpZGF5LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi93b3JrLW9yZGVyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9kZWFsZXIuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2ZpbGUtdXBsb2FkLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi93YWl0bGlzdC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vd2FpdGxpc3QtY3VzdG9tZXIuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL29wdGljLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9wcm9kdWN0LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9taWxsaW5nLXR5cGUuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvYXRpbmcuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL21hdGVyaWFsLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9wdXJjaGFzZS1vcmRlci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vdXNlci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vd2FpdGxpc3QtcHJvamVjdC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vaW52ZW50b3J5LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zdGF0dXMtaGlzdG9yeS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcGFja2FnZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcmVmaW5pc2gtY29kZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vd29yay1vcmRlci1zaGlwcGluZy1pdGVtLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi93b3JrLW9yZGVyLWRpc2NvdW50LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWlja2Jvb2tzLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi93b3JrLW9yZGVyLW5vbi1pbnZlbnRvcnktaXRlbS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vYmFzZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbW91bnQtdHlwZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2lnaHQuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NpZ2h0LXR5cGUuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NpZ2h0LW1hdGVyaWFsLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9maXJlYXJtLW9wdGljLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9maXJlYXJtLXNpZ2h0LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9wYWNrYWdlLW9wdGlvbmFsLWl0ZW0uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3BhY2thZ2UtdmFyaWF0aW9uLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zbGlkZS1hZGRvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vY29hdGluZy12YWx1ZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vZmluaXNoLWRhdGUtaGVscGVyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9taWxsaW5nLXR5cGUtYWRkb24uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2ZpcmVhcm0tbWlsbGluZy10eXBlLnNlcnZpY2UnO1xuIl19
44
+ export * from './ai-assistant.service';
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndW5zbWl0aC1jb21tb24vc3JjL3NoYXJlZC9zZXJ2aWNlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLGdDQUFnQyxDQUFDO0FBRS9DLGNBQWMsd0JBQXdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2N1c3RvbWVyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9maXJlYXJtLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9ndW4tcGFydC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc3RhdGUuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3ZlbmRvci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vdG90YWxzLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi93b3JrLWhvbGlkYXkuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3dvcmstb3JkZXIuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2RlYWxlci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vZmlsZS11cGxvYWQuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3dhaXRsaXN0LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi93YWl0bGlzdC1jdXN0b21lci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vb3B0aWMuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3Byb2R1Y3Quc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL21pbGxpbmctdHlwZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vY29hdGluZy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbWF0ZXJpYWwuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3B1cmNoYXNlLW9yZGVyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi91c2VyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi93YWl0bGlzdC1wcm9qZWN0LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnZlbnRvcnkuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3N0YXR1cy1oaXN0b3J5LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9wYWNrYWdlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9yZWZpbmlzaC1jb2RlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi93b3JrLW9yZGVyLXNoaXBwaW5nLWl0ZW0uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3dvcmstb3JkZXItZGlzY291bnQuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3F1aWNrYm9va3Muc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3dvcmstb3JkZXItbm9uLWludmVudG9yeS1pdGVtLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9iYXNlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9tb3VudC10eXBlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zaWdodC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2lnaHQtdHlwZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2lnaHQtbWF0ZXJpYWwuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2ZpcmVhcm0tb3B0aWMuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2ZpcmVhcm0tc2lnaHQuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3BhY2thZ2Utb3B0aW9uYWwtaXRlbS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcGFja2FnZS12YXJpYXRpb24uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NsaWRlLWFkZG9uLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9jb2F0aW5nLXZhbHVlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9maW5pc2gtZGF0ZS1oZWxwZXIuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL21pbGxpbmctdHlwZS1hZGRvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vZmlyZWFybS1taWxsaW5nLXR5cGUuc2VydmljZSc7XG5cbmV4cG9ydCAqIGZyb20gJy4vYWktYXNzaXN0YW50LnNlcnZpY2UnO1xuIl19
@@ -1,9 +1,11 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, Inject, Pipe, Directive, Input, Component, EventEmitter, Output, NgModule } from '@angular/core';
2
+ import { Injectable, Inject, InjectionToken, Optional, Pipe, Directive, Input, Component, EventEmitter, Output, NgModule } from '@angular/core';
3
3
  import * as i1 from '@angular/common/http';
4
4
  import { of, switchMap as switchMap$1, EMPTY, forkJoin, Subject } from 'rxjs';
5
5
  import { switchMap } from 'rxjs/operators';
6
6
  import { DateTime } from 'luxon';
7
+ import { __awaiter } from 'tslib';
8
+ import { HubConnectionState, HubConnectionBuilder } from '@microsoft/signalr';
7
9
  import * as i1$1 from '@angular/forms';
8
10
  import { FormsModule, ReactiveFormsModule } from '@angular/forms';
9
11
  import * as i2 from '@angular/common';
@@ -2160,6 +2162,75 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
2160
2162
  }] }];
2161
2163
  } });
2162
2164
 
2165
+ /**
2166
+ * Supplies a bearer token (the Cognito ID token) for the SignalR hub connection.
2167
+ * Provided by the host app so this library stays decoupled from the auth provider.
2168
+ */
2169
+ const AI_ID_TOKEN_FACTORY = new InjectionToken('AI_ID_TOKEN_FACTORY');
2170
+ /**
2171
+ * REST + SignalR client for the GunSmith.AI service. REST auth is handled by the host app's
2172
+ * HTTP interceptor; the hub uses the injected token factory via accessTokenFactory.
2173
+ */
2174
+ class AiAssistantService {
2175
+ constructor(http, env, idTokenFactory) {
2176
+ this.http = http;
2177
+ this.env = env;
2178
+ this.idTokenFactory = idTokenFactory;
2179
+ this.token$ = new Subject();
2180
+ this.toolStarted$ = new Subject();
2181
+ this.citations$ = new Subject();
2182
+ this.completed$ = new Subject();
2183
+ this.streamError$ = new Subject();
2184
+ this.apiBase = this.env.aiBaseUrl;
2185
+ }
2186
+ get connectionId() {
2187
+ return this.hub ? this.hub.connectionId : null;
2188
+ }
2189
+ connect() {
2190
+ return __awaiter(this, void 0, void 0, function* () {
2191
+ if (this.hub && this.hub.state === HubConnectionState.Connected) {
2192
+ return;
2193
+ }
2194
+ const builder = new HubConnectionBuilder().withUrl(this.apiBase + 'api/ai-chat-hub', this.idTokenFactory ? { accessTokenFactory: this.idTokenFactory } : {});
2195
+ this.hub = builder.withAutomaticReconnect().build();
2196
+ this.hub.on('TokenReceived', (streamId, text) => this.token$.next({ streamId, text }));
2197
+ this.hub.on('ToolStarted', (streamId, toolName) => this.toolStarted$.next({ streamId, toolName }));
2198
+ this.hub.on('CitationsReceived', (streamId, citations) => this.citations$.next({ streamId, citations }));
2199
+ this.hub.on('MessageCompleted', (streamId, messageId) => this.completed$.next({ streamId, messageId }));
2200
+ this.hub.on('StreamError', (streamId, message) => this.streamError$.next({ streamId, message }));
2201
+ yield this.hub.start();
2202
+ });
2203
+ }
2204
+ createConversation() {
2205
+ return this.http.post(this.apiBase + 'api/ai/conversations', {});
2206
+ }
2207
+ getConversations() {
2208
+ return this.http.get(this.apiBase + 'api/ai/conversations');
2209
+ }
2210
+ getConversation(id) {
2211
+ return this.http.get(this.apiBase + 'api/ai/conversations/' + id);
2212
+ }
2213
+ sendMessage(id, content, connectionId) {
2214
+ return this.http.post(this.apiBase + 'api/ai/conversations/' + id + '/messages', { content, connectionId });
2215
+ }
2216
+ }
2217
+ AiAssistantService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AiAssistantService, deps: [{ token: i1.HttpClient }, { token: 'env' }, { token: AI_ID_TOKEN_FACTORY, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
2218
+ AiAssistantService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AiAssistantService, providedIn: 'root' });
2219
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AiAssistantService, decorators: [{
2220
+ type: Injectable,
2221
+ args: [{ providedIn: 'root' }]
2222
+ }], ctorParameters: function () {
2223
+ return [{ type: i1.HttpClient }, { type: undefined, decorators: [{
2224
+ type: Inject,
2225
+ args: ['env']
2226
+ }] }, { type: undefined, decorators: [{
2227
+ type: Optional
2228
+ }, {
2229
+ type: Inject,
2230
+ args: [AI_ID_TOKEN_FACTORY]
2231
+ }] }];
2232
+ } });
2233
+
2163
2234
  class PhonePipe {
2164
2235
  transform(value, args) {
2165
2236
  if (value && value.length >= 10) {
@@ -2487,5 +2558,5 @@ var NotificationType;
2487
2558
  * Generated bundle index. Do not edit.
2488
2559
  */
2489
2560
 
2490
- export { Address, BaseService, BillingInfo, BundleItem, ChangeOrderPackageDetail, ChangeOrderStatus, Coating, CoatingService, CoatingValue, CoatingValueService, Configuration, ConfigurationService, Customer, CustomerService, Dealer, DealerContact, DealerCoupon, DealerService, DisableControlDirective, EnumPipe, FileNamePipe, FileUploadService, FilterOptions, FinishDateHelperService, Firearm, FirearmMillingTypeService, FirearmOptic, FirearmOpticService, FirearmService, FirearmSightService, FormErrorMessageComponent, FrameMaterial, FrameMaterialPipe, GunCaliber, GunPart, GunPartOption, GunPartService, InventoryItem, InventoryService, JFile, Material, MaterialService, MillingDetail, MillingItem, MillingType, MillingTypeAddon, MillingTypeAddonOption, MillingTypeAddonService, MillingTypeService, ModalHeaderComponent, MountType, MountTypeService, NewLinePipe, NotificationBarComponent, NotificationModule, NotificationService, NotificationType, Optic, OpticService, OpticSight, OpticStatus, Package, PackageItem, PackageOptionalItem, PackageOptionalItemService, PackageService, PackageTotal, PackageVariation, PackageVariationOption, PackageVariationService, PhonePipe, Product, ProductService, ProjectType, PurchaseOrder, PurchaseOrderRefinishItem, PurchaseOrderService, PurchaseOrderStatus, QuickbooksService, RearSightPosition, RefinishCode, RefinishCodeService, RefinishDetail, ReportMillingItem, ReportRefinishItem, SharedModule, ShieldRMSOptions, Sight, SightMaterialService, SightMaterialType, SightService, SightType, SightTypeEnum, SightTypeService, SlideAddon, SlideAddonService, State, StateService, StatusHistoryService, Total, TotalItem, TotalsService, UserService, Vendor, VendorContact, VendorService, WaitlistAction, WaitlistCustomerService, WaitlistGun, WaitlistGunPackageDetail, WaitlistGunPhoto, WaitlistHistory, WaitlistItem, WaitlistProjectService, WaitlistService, WaitlistStatus, WorkChangeOrder, WorkHoliday, WorkHolidayService, WorkOrder, WorkOrderAction, WorkOrderBillingTransaction, WorkOrderDiscount, WorkOrderDiscountService, WorkOrderHistory, WorkOrderInventoryItem, WorkOrderListItem, WorkOrderNonInventoryItem, WorkOrderNonInventoryItemService, WorkOrderPackageDetail, WorkOrderPhoto, WorkOrderRefinishItem, WorkOrderService, WorkOrderShippingItem, WorkOrderShippingItemService, WorkOrderStatus, WorkOrderTotal, WorkOrderType, coatingDescriptionValidator, coatingValueValidator, convertEnumToObjectArray, getCoatingValues, getCoatings, hasCoatingDescription, hasCoatingValues, refinishDetailsValidator, touchControls };
2561
+ export { AI_ID_TOKEN_FACTORY, Address, AiAssistantService, BaseService, BillingInfo, BundleItem, ChangeOrderPackageDetail, ChangeOrderStatus, Coating, CoatingService, CoatingValue, CoatingValueService, Configuration, ConfigurationService, Customer, CustomerService, Dealer, DealerContact, DealerCoupon, DealerService, DisableControlDirective, EnumPipe, FileNamePipe, FileUploadService, FilterOptions, FinishDateHelperService, Firearm, FirearmMillingTypeService, FirearmOptic, FirearmOpticService, FirearmService, FirearmSightService, FormErrorMessageComponent, FrameMaterial, FrameMaterialPipe, GunCaliber, GunPart, GunPartOption, GunPartService, InventoryItem, InventoryService, JFile, Material, MaterialService, MillingDetail, MillingItem, MillingType, MillingTypeAddon, MillingTypeAddonOption, MillingTypeAddonService, MillingTypeService, ModalHeaderComponent, MountType, MountTypeService, NewLinePipe, NotificationBarComponent, NotificationModule, NotificationService, NotificationType, Optic, OpticService, OpticSight, OpticStatus, Package, PackageItem, PackageOptionalItem, PackageOptionalItemService, PackageService, PackageTotal, PackageVariation, PackageVariationOption, PackageVariationService, PhonePipe, Product, ProductService, ProjectType, PurchaseOrder, PurchaseOrderRefinishItem, PurchaseOrderService, PurchaseOrderStatus, QuickbooksService, RearSightPosition, RefinishCode, RefinishCodeService, RefinishDetail, ReportMillingItem, ReportRefinishItem, SharedModule, ShieldRMSOptions, Sight, SightMaterialService, SightMaterialType, SightService, SightType, SightTypeEnum, SightTypeService, SlideAddon, SlideAddonService, State, StateService, StatusHistoryService, Total, TotalItem, TotalsService, UserService, Vendor, VendorContact, VendorService, WaitlistAction, WaitlistCustomerService, WaitlistGun, WaitlistGunPackageDetail, WaitlistGunPhoto, WaitlistHistory, WaitlistItem, WaitlistProjectService, WaitlistService, WaitlistStatus, WorkChangeOrder, WorkHoliday, WorkHolidayService, WorkOrder, WorkOrderAction, WorkOrderBillingTransaction, WorkOrderDiscount, WorkOrderDiscountService, WorkOrderHistory, WorkOrderInventoryItem, WorkOrderListItem, WorkOrderNonInventoryItem, WorkOrderNonInventoryItemService, WorkOrderPackageDetail, WorkOrderPhoto, WorkOrderRefinishItem, WorkOrderService, WorkOrderShippingItem, WorkOrderShippingItemService, WorkOrderStatus, WorkOrderTotal, WorkOrderType, coatingDescriptionValidator, coatingValueValidator, convertEnumToObjectArray, getCoatingValues, getCoatings, hasCoatingDescription, hasCoatingValues, refinishDetailsValidator, touchControls };
2491
2562
  //# sourceMappingURL=gunsmith-common.mjs.map