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.
- package/esm2020/shared/services/ai-assistant.service.mjs +71 -0
- package/esm2020/shared/services/index.mjs +2 -1
- package/fesm2015/gunsmith-common.mjs +73 -2
- package/fesm2015/gunsmith-common.mjs.map +1 -1
- package/fesm2020/gunsmith-common.mjs +68 -2
- package/fesm2020/gunsmith-common.mjs.map +1 -1
- package/gunsmith-common-2.4.0.tgz +0 -0
- package/package.json +3 -2
- package/shared/services/ai-assistant.service.d.ts +82 -0
- package/shared/services/index.d.ts +1 -0
- package/gunsmith-common-2.3.27.tgz +0 -0
|
@@ -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
|
-
|
|
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
|