@carlonicora/nestjs-neo4jsonapi 2.11.0 → 2.12.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/dist/agents/community.summariser/cron/community.summariser.cron.d.ts +6 -1
- package/dist/agents/community.summariser/cron/community.summariser.cron.d.ts.map +1 -1
- package/dist/agents/community.summariser/cron/community.summariser.cron.js +16 -2
- package/dist/agents/community.summariser/cron/community.summariser.cron.js.map +1 -1
- package/dist/agents/community.summariser/processors/community.summariser.processor.d.ts.map +1 -1
- package/dist/agents/community.summariser/processors/community.summariser.processor.js +5 -0
- package/dist/agents/community.summariser/processors/community.summariser.processor.js.map +1 -1
- package/dist/agents/operator/controllers/operator.controller.d.ts +16 -1
- package/dist/agents/operator/controllers/operator.controller.d.ts.map +1 -1
- package/dist/agents/operator/controllers/operator.controller.js +17 -2
- package/dist/agents/operator/controllers/operator.controller.js.map +1 -1
- package/dist/common/helpers/credit-gate.d.ts +11 -0
- package/dist/common/helpers/credit-gate.d.ts.map +1 -1
- package/dist/common/helpers/credit-gate.js +19 -0
- package/dist/common/helpers/credit-gate.js.map +1 -1
- package/dist/common/tokens.d.ts +23 -0
- package/dist/common/tokens.d.ts.map +1 -1
- package/dist/common/tokens.js +12 -0
- package/dist/common/tokens.js.map +1 -1
- package/dist/foundations/assistant/controllers/assistant.controller.d.ts.map +1 -1
- package/dist/foundations/assistant/controllers/assistant.controller.js +7 -0
- package/dist/foundations/assistant/controllers/assistant.controller.js.map +1 -1
- package/dist/foundations/assistant-action/controllers/assistant-action.controller.d.ts +23 -3
- package/dist/foundations/assistant-action/controllers/assistant-action.controller.d.ts.map +1 -1
- package/dist/foundations/assistant-action/controllers/assistant-action.controller.js +25 -2
- package/dist/foundations/assistant-action/controllers/assistant-action.controller.js.map +1 -1
- package/dist/foundations/chunk/processors/chunk.embedding.processor.d.ts.map +1 -1
- package/dist/foundations/chunk/processors/chunk.embedding.processor.js +6 -0
- package/dist/foundations/chunk/processors/chunk.embedding.processor.js.map +1 -1
- package/dist/foundations/chunk/processors/chunk.processor.d.ts.map +1 -1
- package/dist/foundations/chunk/processors/chunk.processor.js +5 -0
- package/dist/foundations/chunk/processors/chunk.processor.js.map +1 -1
- package/dist/foundations/company/entities/company.d.ts +9 -0
- package/dist/foundations/company/entities/company.d.ts.map +1 -1
- package/dist/foundations/company/entities/company.js +1 -0
- package/dist/foundations/company/entities/company.js.map +1 -1
- package/dist/foundations/company/events/company.events.d.ts +12 -0
- package/dist/foundations/company/events/company.events.d.ts.map +1 -0
- package/dist/foundations/company/events/company.events.js +12 -0
- package/dist/foundations/company/events/company.events.js.map +1 -0
- package/dist/foundations/company/index.d.ts +1 -0
- package/dist/foundations/company/index.d.ts.map +1 -1
- package/dist/foundations/company/index.js +3 -1
- package/dist/foundations/company/index.js.map +1 -1
- package/dist/foundations/company/repositories/company.repository.d.ts +2 -0
- package/dist/foundations/company/repositories/company.repository.d.ts.map +1 -1
- package/dist/foundations/company/repositories/company.repository.js +5 -0
- package/dist/foundations/company/repositories/company.repository.js.map +1 -1
- package/dist/foundations/company/services/company.service.d.ts +46 -1
- package/dist/foundations/company/services/company.service.d.ts.map +1 -1
- package/dist/foundations/company/services/company.service.js +71 -2
- package/dist/foundations/company/services/company.service.js.map +1 -1
- package/dist/foundations/keyconcept/processors/keyconcept.embedding.processor.d.ts +6 -1
- package/dist/foundations/keyconcept/processors/keyconcept.embedding.processor.d.ts.map +1 -1
- package/dist/foundations/keyconcept/processors/keyconcept.embedding.processor.js +20 -2
- package/dist/foundations/keyconcept/processors/keyconcept.embedding.processor.js.map +1 -1
- package/dist/foundations/stripe-subscription/services/token-allocation.service.d.ts +3 -1
- package/dist/foundations/stripe-subscription/services/token-allocation.service.d.ts.map +1 -1
- package/dist/foundations/stripe-subscription/services/token-allocation.service.js +8 -3
- package/dist/foundations/stripe-subscription/services/token-allocation.service.js.map +1 -1
- package/dist/foundations/stripe-trial/services/trial.service.d.ts +3 -1
- package/dist/foundations/stripe-trial/services/trial.service.d.ts.map +1 -1
- package/dist/foundations/stripe-trial/services/trial.service.js +14 -9
- package/dist/foundations/stripe-trial/services/trial.service.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
import { Queue } from "bullmq";
|
|
2
|
+
import { CreditValidatorInterface } from "../../../common/tokens";
|
|
2
3
|
import { AppLoggingService } from "../../../core/logging/services/logging.service";
|
|
3
4
|
import { CommunityRepository } from "../../../foundations/community/repositories/community.repository";
|
|
4
5
|
export declare class CommunitySummariserCron {
|
|
5
6
|
private readonly communityRepository;
|
|
6
7
|
private readonly summariserQueue;
|
|
7
8
|
private readonly logger;
|
|
8
|
-
|
|
9
|
+
/** See ChunkProcessor: seam, not CompanyService — CompanyModule would mount `companies/*` here. */
|
|
10
|
+
private readonly creditValidator?;
|
|
11
|
+
constructor(communityRepository: CommunityRepository, summariserQueue: Queue, logger: AppLoggingService,
|
|
12
|
+
/** See ChunkProcessor: seam, not CompanyService — CompanyModule would mount `companies/*` here. */
|
|
13
|
+
creditValidator?: CreditValidatorInterface);
|
|
9
14
|
handleStaleCommunities(): Promise<void>;
|
|
10
15
|
}
|
|
11
16
|
//# sourceMappingURL=community.summariser.cron.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"community.summariser.cron.d.ts","sourceRoot":"","sources":["../../../../src/agents/community.summariser/cron/community.summariser.cron.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAE/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kEAAkE,CAAC;AAEvG,qBACa,uBAAuB;IAEhC,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IAEpC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM;
|
|
1
|
+
{"version":3,"file":"community.summariser.cron.d.ts","sourceRoot":"","sources":["../../../../src/agents/community.summariser/cron/community.summariser.cron.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAE/B,OAAO,EAAoB,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAEpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kEAAkE,CAAC;AAEvG,qBACa,uBAAuB;IAEhC,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IAEpC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,mGAAmG;IAGnG,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;gBAPhB,mBAAmB,EAAE,mBAAmB,EAExC,eAAe,EAAE,KAAK,EACtB,MAAM,EAAE,iBAAiB;IAC1C,mGAAmG;IAGlF,eAAe,CAAC,EAAE,wBAAwB;IAIvD,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;CAyB9C"}
|
|
@@ -17,18 +17,30 @@ const bullmq_1 = require("@nestjs/bullmq");
|
|
|
17
17
|
const common_1 = require("@nestjs/common");
|
|
18
18
|
const schedule_1 = require("@nestjs/schedule");
|
|
19
19
|
const bullmq_2 = require("bullmq");
|
|
20
|
+
const credit_gate_1 = require("../../../common/helpers/credit-gate");
|
|
21
|
+
const tokens_1 = require("../../../common/tokens");
|
|
20
22
|
const config_1 = require("../../../config");
|
|
21
23
|
const logging_service_1 = require("../../../core/logging/services/logging.service");
|
|
22
24
|
const community_repository_1 = require("../../../foundations/community/repositories/community.repository");
|
|
23
25
|
let CommunitySummariserCron = class CommunitySummariserCron {
|
|
24
|
-
constructor(communityRepository, summariserQueue, logger) {
|
|
26
|
+
constructor(communityRepository, summariserQueue, logger, creditValidator) {
|
|
25
27
|
this.communityRepository = communityRepository;
|
|
26
28
|
this.summariserQueue = summariserQueue;
|
|
27
29
|
this.logger = logger;
|
|
30
|
+
this.creditValidator = creditValidator;
|
|
28
31
|
}
|
|
29
32
|
async handleStaleCommunities() {
|
|
30
33
|
const staleCommunities = await this.communityRepository.findAllStaleCommunities();
|
|
31
34
|
for (const { communityId, companyId } of staleCommunities) {
|
|
35
|
+
// No AI on this plan: never enqueue. The processor's own gate stops the
|
|
36
|
+
// model CALL, but only this filter stops the ENQUEUE — and it is the only
|
|
37
|
+
// thing that terminates the loop. In the no-credits case the processor
|
|
38
|
+
// sets `pendingCredits`, which drops the community out of
|
|
39
|
+
// `findAllStaleCommunities`; the AI-free branch correctly writes nothing,
|
|
40
|
+
// so without this check the same job is re-queued every 10 minutes
|
|
41
|
+
// forever.
|
|
42
|
+
if (!(await (0, credit_gate_1.isAiEnabledVia)(this.creditValidator, { companyId })))
|
|
43
|
+
continue;
|
|
32
44
|
try {
|
|
33
45
|
await this.summariserQueue.add("process-stale", {
|
|
34
46
|
communityId,
|
|
@@ -51,8 +63,10 @@ __decorate([
|
|
|
51
63
|
exports.CommunitySummariserCron = CommunitySummariserCron = __decorate([
|
|
52
64
|
(0, common_1.Injectable)(),
|
|
53
65
|
__param(1, (0, bullmq_1.InjectQueue)(config_1.QueueId.COMMUNITY_SUMMARISER)),
|
|
66
|
+
__param(3, (0, common_1.Optional)()),
|
|
67
|
+
__param(3, (0, common_1.Inject)(tokens_1.CREDIT_VALIDATOR)),
|
|
54
68
|
__metadata("design:paramtypes", [community_repository_1.CommunityRepository,
|
|
55
69
|
bullmq_2.Queue,
|
|
56
|
-
logging_service_1.AppLoggingService])
|
|
70
|
+
logging_service_1.AppLoggingService, Object])
|
|
57
71
|
], CommunitySummariserCron);
|
|
58
72
|
//# sourceMappingURL=community.summariser.cron.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"community.summariser.cron.js","sourceRoot":"","sources":["../../../../src/agents/community.summariser/cron/community.summariser.cron.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA6C;AAC7C,
|
|
1
|
+
{"version":3,"file":"community.summariser.cron.js","sourceRoot":"","sources":["../../../../src/agents/community.summariser/cron/community.summariser.cron.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA6C;AAC7C,2CAA8D;AAC9D,+CAAwD;AACxD,mCAA+B;AAC/B,qEAAqE;AACrE,mDAAoF;AACpF,4CAA0C;AAC1C,oFAAmF;AACnF,2GAAuG;AAGhG,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAClC,YACmB,mBAAwC,EAExC,eAAsB,EACtB,MAAyB,EAIzB,eAA0C;QAP1C,wBAAmB,GAAnB,mBAAmB,CAAqB;QAExC,oBAAe,GAAf,eAAe,CAAO;QACtB,WAAM,GAAN,MAAM,CAAmB;QAIzB,oBAAe,GAAf,eAAe,CAA2B;IAC1D,CAAC;IAGE,AAAN,KAAK,CAAC,sBAAsB;QAC1B,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,EAAE,CAAC;QAClF,KAAK,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,gBAAgB,EAAE,CAAC;YAC1D,wEAAwE;YACxE,0EAA0E;YAC1E,uEAAuE;YACvE,0DAA0D;YAC1D,0EAA0E;YAC1E,mEAAmE;YACnE,WAAW;YACX,IAAI,CAAC,CAAC,MAAM,IAAA,4BAAc,EAAC,IAAI,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;gBAAE,SAAS;YAE3E,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,eAAe,EAAE;oBAC9C,WAAW;oBACX,SAAS;iBACV,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,qCAAqC,WAAW,gBAAgB,SAAS,KAAM,KAAe,CAAC,OAAO,EAAE,EACxG,yBAAyB,CAC1B,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;CACF,CAAA;AAtCY,0DAAuB;AAa5B;IADL,IAAA,eAAI,EAAC,yBAAc,CAAC,gBAAgB,CAAC;;;;qEAyBrC;kCArCU,uBAAuB;IADnC,IAAA,mBAAU,GAAE;IAIR,WAAA,IAAA,oBAAW,EAAC,gBAAO,CAAC,oBAAoB,CAAC,CAAA;IAIzC,WAAA,IAAA,iBAAQ,GAAE,CAAA;IACV,WAAA,IAAA,eAAM,EAAC,yBAAgB,CAAC,CAAA;qCANa,0CAAmB;QAEvB,cAAK;QACd,mCAAiB;GALjC,uBAAuB,CAsCnC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"community.summariser.processor.d.ts","sourceRoot":"","sources":["../../../../src/agents/community.summariser/processors/community.summariser.processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEtE,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,EAAoB,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAEpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oDAAoD,CAAC;AACtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kEAAkE,CAAC;AACvG,OAAO,EAAE,0BAA0B,EAAE,MAAM,0CAA0C,CAAC;AAEtF,UAAU,0BAA0B;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBACa,4BAA6B,SAAQ,UAAU;IAExD,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACpC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,mGAAmG;IAGnG,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;gBARhB,iBAAiB,EAAE,0BAA0B,EAC7C,GAAG,EAAE,UAAU,EACf,MAAM,EAAE,iBAAiB,EACzB,mBAAmB,EAAE,mBAAmB,EACxC,gBAAgB,EAAE,gBAAgB;IACnD,mGAAmG;IAGlF,eAAe,CAAC,EAAE,wBAAwB;IAM7D,QAAQ,CAAC,GAAG,EAAE,GAAG;IAKjB,OAAO,CAAC,GAAG,EAAE,GAAG;IAOhB,WAAW,CAAC,GAAG,EAAE,GAAG;IAId,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,0BAA0B,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"community.summariser.processor.d.ts","sourceRoot":"","sources":["../../../../src/agents/community.summariser/processors/community.summariser.processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEtE,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,EAAoB,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAEpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oDAAoD,CAAC;AACtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kEAAkE,CAAC;AACvG,OAAO,EAAE,0BAA0B,EAAE,MAAM,0CAA0C,CAAC;AAEtF,UAAU,0BAA0B;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBACa,4BAA6B,SAAQ,UAAU;IAExD,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACpC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,mGAAmG;IAGnG,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;gBARhB,iBAAiB,EAAE,0BAA0B,EAC7C,GAAG,EAAE,UAAU,EACf,MAAM,EAAE,iBAAiB,EACzB,mBAAmB,EAAE,mBAAmB,EACxC,gBAAgB,EAAE,gBAAgB;IACnD,mGAAmG;IAGlF,eAAe,CAAC,EAAE,wBAAwB;IAM7D,QAAQ,CAAC,GAAG,EAAE,GAAG;IAKjB,OAAO,CAAC,GAAG,EAAE,GAAG;IAOhB,WAAW,CAAC,GAAG,EAAE,GAAG;IAId,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,0BAA0B,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CAuCnE"}
|
|
@@ -47,6 +47,11 @@ let CommunitySummariserProcessor = class CommunitySummariserProcessor extends bu
|
|
|
47
47
|
const { communityId, companyId } = job.data;
|
|
48
48
|
await this.cls.run(async () => {
|
|
49
49
|
this.cls.set("companyId", companyId);
|
|
50
|
+
// No AI on this plan: drop silently. Deliberately BEFORE the credit
|
|
51
|
+
// check so nothing is ever marked pending or deferred — an AI-free
|
|
52
|
+
// company must accumulate no backlog.
|
|
53
|
+
if (!(await (0, credit_gate_1.isAiEnabledVia)(this.creditValidator, { companyId })))
|
|
54
|
+
return;
|
|
50
55
|
if (!(await (0, credit_gate_1.hasAvailableCreditsVia)(this.creditValidator, { companyId }))) {
|
|
51
56
|
// Leave isStale set; flag pendingCredits so the 10-minute cron stops
|
|
52
57
|
// re-enqueueing it (spec §2: a fresh top-up must not be silently eaten).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"community.summariser.processor.js","sourceRoot":"","sources":["../../../../src/agents/community.summariser/processors/community.summariser.processor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAsE;AACtE,2CAAkD;AAClD,mCAA6B;AAC7B,2CAAwC;AACxC,
|
|
1
|
+
{"version":3,"file":"community.summariser.processor.js","sourceRoot":"","sources":["../../../../src/agents/community.summariser/processors/community.summariser.processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { AuthenticatedRequest } from "../../../common/interfaces/authenticated.request.interface";
|
|
2
|
+
import { CreditValidatorInterface } from "../../../common/tokens";
|
|
2
3
|
import { JsonApiService } from "../../../core/jsonapi/services/jsonapi.service";
|
|
3
4
|
import { AssistantAppendDto } from "../../../foundations/assistant/dtos/assistant-append.dto";
|
|
4
5
|
import { AssistantPostDto } from "../../../foundations/assistant/dtos/assistant-post.dto";
|
|
@@ -15,8 +16,22 @@ import { AssistantService } from "../../../foundations/assistant/services/assist
|
|
|
15
16
|
export declare class OperatorController {
|
|
16
17
|
private readonly assistants;
|
|
17
18
|
private readonly jsonApi;
|
|
19
|
+
/**
|
|
20
|
+
* Same seam `AssistantController` uses. The operator engine runs the LLM on
|
|
21
|
+
* its own routes, so it needs its own gate — the assistant module's gate
|
|
22
|
+
* covers only the other engine and the frontend picks between them by
|
|
23
|
+
* `assistant.engine`.
|
|
24
|
+
*/
|
|
25
|
+
private readonly creditValidator?;
|
|
18
26
|
private readonly logger;
|
|
19
|
-
constructor(assistants: AssistantService, jsonApi: JsonApiService
|
|
27
|
+
constructor(assistants: AssistantService, jsonApi: JsonApiService,
|
|
28
|
+
/**
|
|
29
|
+
* Same seam `AssistantController` uses. The operator engine runs the LLM on
|
|
30
|
+
* its own routes, so it needs its own gate — the assistant module's gate
|
|
31
|
+
* covers only the other engine and the frontend picks between them by
|
|
32
|
+
* `assistant.engine`.
|
|
33
|
+
*/
|
|
34
|
+
creditValidator?: CreditValidatorInterface);
|
|
20
35
|
/**
|
|
21
36
|
* POST /operator — create a new assistant thread whose turns run on the
|
|
22
37
|
* checkpointed operator engine (durable, approval-gated). Response shape
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operator.controller.d.ts","sourceRoot":"","sources":["../../../../src/agents/operator/controllers/operator.controller.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"operator.controller.d.ts","sourceRoot":"","sources":["../../../../src/agents/operator/controllers/operator.controller.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4DAA4D,CAAC;AAClG,OAAO,EAAoB,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAIhF,OAAO,EAAE,kBAAkB,EAAE,MAAM,0DAA0D,CAAC;AAC9F,OAAO,EAAE,gBAAgB,EAAE,MAAM,wDAAwD,CAAC;AAI1F,OAAO,EAAE,gBAAgB,EAAE,MAAM,2DAA2D,CAAC;AAG7F;;;;;;;;GAQG;AACH,qBAEa,kBAAkB;IAI3B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB;;;;;OAKG;IACmC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;IAXzE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;gBAG3C,UAAU,EAAE,gBAAgB,EAC5B,OAAO,EAAE,cAAc;IACxC;;;;;OAKG;IACoD,eAAe,CAAC,EAAE,wBAAwB;IAGnG;;;;;;;OAOG;IAEG,MAAM,CAAS,IAAI,EAAE,gBAAgB,EAAS,GAAG,EAAE,oBAAoB,GAAG,OAAO,CAAC,GAAG,CAAC;IA6C5F;;;;;OAKG;IAEG,MAAM,CACY,WAAW,EAAE,MAAM,EACjC,IAAI,EAAE,kBAAkB,EACzB,GAAG,EAAE,oBAAoB,GAC/B,OAAO,CAAC,GAAG,CAAC;CAsChB"}
|
|
@@ -16,6 +16,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
16
16
|
exports.OperatorController = void 0;
|
|
17
17
|
const common_1 = require("@nestjs/common");
|
|
18
18
|
const jwt_auth_guard_1 = require("../../../common/guards/jwt.auth.guard");
|
|
19
|
+
const credit_gate_1 = require("../../../common/helpers/credit-gate");
|
|
20
|
+
const tokens_1 = require("../../../common/tokens");
|
|
19
21
|
const jsonapi_service_1 = require("../../../core/jsonapi/services/jsonapi.service");
|
|
20
22
|
const assistant_action_1 = require("../../../foundations/assistant-action/entities/assistant-action");
|
|
21
23
|
const assistant_message_1 = require("../../../foundations/assistant-message/entities/assistant-message");
|
|
@@ -37,9 +39,10 @@ const operator_meta_1 = require("../entities/operator.meta");
|
|
|
37
39
|
* request DTOs and response documents reuse the assistant descriptors.
|
|
38
40
|
*/
|
|
39
41
|
let OperatorController = OperatorController_1 = class OperatorController {
|
|
40
|
-
constructor(assistants, jsonApi) {
|
|
42
|
+
constructor(assistants, jsonApi, creditValidator) {
|
|
41
43
|
this.assistants = assistants;
|
|
42
44
|
this.jsonApi = jsonApi;
|
|
45
|
+
this.creditValidator = creditValidator;
|
|
43
46
|
this.logger = new common_1.Logger(OperatorController_1.name);
|
|
44
47
|
}
|
|
45
48
|
/**
|
|
@@ -51,6 +54,11 @@ let OperatorController = OperatorController_1 = class OperatorController {
|
|
|
51
54
|
* approval card immediately.
|
|
52
55
|
*/
|
|
53
56
|
async create(body, req) {
|
|
57
|
+
if (req.user?.companyId && !(await (0, credit_gate_1.isAiEnabledVia)(this.creditValidator, { companyId: req.user.companyId }))) {
|
|
58
|
+
throw new common_1.NotFoundException();
|
|
59
|
+
}
|
|
60
|
+
if (this.creditValidator && req.user?.companyId)
|
|
61
|
+
await this.creditValidator.validateCredits({ companyId: req.user.companyId });
|
|
54
62
|
const { content, title, howToMode, limitToHowToId } = body.data.attributes;
|
|
55
63
|
this.logger.log(`create: userId=${req.user.userId} companyId=${req.user.companyId} firstMessageLen=${content.length}`);
|
|
56
64
|
const { assistant, userMessage, assistantMessage, toolCalls, action } = await this.assistants.createWithFirstMessageOperator({
|
|
@@ -88,6 +96,11 @@ let OperatorController = OperatorController_1 = class OperatorController {
|
|
|
88
96
|
* a pending approval surfaces the `assistant-actions` resource in `included`.
|
|
89
97
|
*/
|
|
90
98
|
async append(assistantId, body, req) {
|
|
99
|
+
if (req.user?.companyId && !(await (0, credit_gate_1.isAiEnabledVia)(this.creditValidator, { companyId: req.user.companyId }))) {
|
|
100
|
+
throw new common_1.NotFoundException();
|
|
101
|
+
}
|
|
102
|
+
if (this.creditValidator && req.user?.companyId)
|
|
103
|
+
await this.creditValidator.validateCredits({ companyId: req.user.companyId });
|
|
91
104
|
const { content, howToMode, limitToHowToId } = body.data.attributes;
|
|
92
105
|
this.logger.log(`append: assistantId=${assistantId} userId=${req.user.userId} messageLen=${content.length}`);
|
|
93
106
|
const { userMessage, assistantMessage, toolCalls, action } = await this.assistants.appendMessageOperator({
|
|
@@ -136,7 +149,9 @@ __decorate([
|
|
|
136
149
|
exports.OperatorController = OperatorController = OperatorController_1 = __decorate([
|
|
137
150
|
(0, common_1.UseGuards)(jwt_auth_guard_1.JwtAuthGuard),
|
|
138
151
|
(0, common_1.Controller)(),
|
|
152
|
+
__param(2, (0, common_1.Optional)()),
|
|
153
|
+
__param(2, (0, common_1.Inject)(tokens_1.CREDIT_VALIDATOR)),
|
|
139
154
|
__metadata("design:paramtypes", [assistant_service_1.AssistantService,
|
|
140
|
-
jsonapi_service_1.JsonApiService])
|
|
155
|
+
jsonapi_service_1.JsonApiService, Object])
|
|
141
156
|
], OperatorController);
|
|
142
157
|
//# sourceMappingURL=operator.controller.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operator.controller.js","sourceRoot":"","sources":["../../../../src/agents/operator/controllers/operator.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"operator.controller.js","sourceRoot":"","sources":["../../../../src/agents/operator/controllers/operator.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,4 +27,15 @@ import { CreditValidatorInterface } from "../tokens";
|
|
|
27
27
|
export declare function hasAvailableCreditsVia(validator: CreditValidatorInterface | undefined, params: {
|
|
28
28
|
companyId: string;
|
|
29
29
|
}): Promise<boolean>;
|
|
30
|
+
/**
|
|
31
|
+
* Boolean AI-capability check for background jobs.
|
|
32
|
+
*
|
|
33
|
+
* Fails OPEN in every uncertain case — unbound validator, unimplemented
|
|
34
|
+
* method, or a thrown error — because wrongly reporting "no AI" would silently
|
|
35
|
+
* drop work for a paying customer, which is unrecoverable. Wrongly reporting
|
|
36
|
+
* "AI enabled" only means the credit gate downstream handles it.
|
|
37
|
+
*/
|
|
38
|
+
export declare function isAiEnabledVia(validator: CreditValidatorInterface | undefined, params: {
|
|
39
|
+
companyId: string;
|
|
40
|
+
}): Promise<boolean>;
|
|
30
41
|
//# sourceMappingURL=credit-gate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credit-gate.d.ts","sourceRoot":"","sources":["../../../src/common/helpers/credit-gate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,wBAAwB,GAAG,SAAS,EAC/C,MAAM,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAC5B,OAAO,CAAC,OAAO,CAAC,CAUlB"}
|
|
1
|
+
{"version":3,"file":"credit-gate.d.ts","sourceRoot":"","sources":["../../../src/common/helpers/credit-gate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,wBAAwB,GAAG,SAAS,EAC/C,MAAM,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAC5B,OAAO,CAAC,OAAO,CAAC,CAUlB;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,SAAS,EAAE,wBAAwB,GAAG,SAAS,EAC/C,MAAM,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAC5B,OAAO,CAAC,OAAO,CAAC,CAOlB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.hasAvailableCreditsVia = hasAvailableCreditsVia;
|
|
4
|
+
exports.isAiEnabledVia = isAiEnabledVia;
|
|
4
5
|
const common_1 = require("@nestjs/common");
|
|
5
6
|
/**
|
|
6
7
|
* Non-throwing credit probe for background work.
|
|
@@ -40,4 +41,22 @@ async function hasAvailableCreditsVia(validator, params) {
|
|
|
40
41
|
throw error;
|
|
41
42
|
}
|
|
42
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Boolean AI-capability check for background jobs.
|
|
46
|
+
*
|
|
47
|
+
* Fails OPEN in every uncertain case — unbound validator, unimplemented
|
|
48
|
+
* method, or a thrown error — because wrongly reporting "no AI" would silently
|
|
49
|
+
* drop work for a paying customer, which is unrecoverable. Wrongly reporting
|
|
50
|
+
* "AI enabled" only means the credit gate downstream handles it.
|
|
51
|
+
*/
|
|
52
|
+
async function isAiEnabledVia(validator, params) {
|
|
53
|
+
if (!validator?.isAiEnabled)
|
|
54
|
+
return true;
|
|
55
|
+
try {
|
|
56
|
+
return await validator.isAiEnabled({ companyId: params.companyId });
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
43
62
|
//# sourceMappingURL=credit-gate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credit-gate.js","sourceRoot":"","sources":["../../../src/common/helpers/credit-gate.ts"],"names":[],"mappings":";;AA4BA,wDAaC;
|
|
1
|
+
{"version":3,"file":"credit-gate.js","sourceRoot":"","sources":["../../../src/common/helpers/credit-gate.ts"],"names":[],"mappings":";;AA4BA,wDAaC;AAUD,wCAUC;AA7DD,2CAA2D;AAG3D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACI,KAAK,UAAU,sBAAsB,CAC1C,SAA+C,EAC/C,MAA6B;IAE7B,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5B,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,sBAAa,IAAI,KAAK,CAAC,SAAS,EAAE,KAAK,mBAAU,CAAC,gBAAgB;YAAE,OAAO,KAAK,CAAC;QACtG,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACI,KAAK,UAAU,cAAc,CAClC,SAA+C,EAC/C,MAA6B;IAE7B,IAAI,CAAC,SAAS,EAAE,WAAW;QAAE,OAAO,IAAI,CAAC;IACzC,IAAI,CAAC;QACH,OAAO,MAAM,SAAS,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
package/dist/common/tokens.d.ts
CHANGED
|
@@ -106,6 +106,18 @@ export interface TokenUsageRecorderInterface {
|
|
|
106
106
|
* | Validator throws anything else | rethrown — never read as an empty balance |
|
|
107
107
|
* | Credits disabled (`creditCost <= 0`) | `true` — validator is a documented no-op |
|
|
108
108
|
*
|
|
109
|
+
* The same processors also consult the OPTIONAL `isAiEnabled` method below
|
|
110
|
+
* through `isAiEnabledVia` (`common/helpers/credit-gate.ts`), a separate
|
|
111
|
+
* boolean check for a DIFFERENT question — not "is there balance?" but "does
|
|
112
|
+
* this plan carry AI at all?". It fails OPEN on every uncertain case:
|
|
113
|
+
*
|
|
114
|
+
* | Situation | Result |
|
|
115
|
+
* |---------------------------------------------|--------------------------------|
|
|
116
|
+
* | No provider bound for `CREDIT_VALIDATOR` | `true` — AI treated as enabled |
|
|
117
|
+
* | Validator does not implement `isAiEnabled` | `true` — AI treated as enabled |
|
|
118
|
+
* | `isAiEnabled` throws | `true` — AI treated as enabled |
|
|
119
|
+
* | `isAiEnabled` resolves | its answer, as-is |
|
|
120
|
+
*
|
|
109
121
|
* The first row is the dangerous one: **an application that intends to enforce
|
|
110
122
|
* credits but forgets to bind this token runs entirely ungated, silently.**
|
|
111
123
|
* Failing open is deliberate — it preserves behaviour for consumers that never
|
|
@@ -130,5 +142,16 @@ export interface CreditValidatorInterface {
|
|
|
130
142
|
validateCredits(params: {
|
|
131
143
|
companyId: string;
|
|
132
144
|
}): Promise<void>;
|
|
145
|
+
/**
|
|
146
|
+
* Whether the company's plan carries AI at all. OPTIONAL so existing
|
|
147
|
+
* implementations keep compiling; an implementation that omits it is treated
|
|
148
|
+
* as "AI enabled", matching this seam's documented unbound behaviour.
|
|
149
|
+
*
|
|
150
|
+
* Distinct from validateCredits: a company can have AI and no balance (defer
|
|
151
|
+
* the work) or no AI at all (drop the work).
|
|
152
|
+
*/
|
|
153
|
+
isAiEnabled?(params: {
|
|
154
|
+
companyId: string;
|
|
155
|
+
}): Promise<boolean>;
|
|
133
156
|
}
|
|
134
157
|
//# sourceMappingURL=tokens.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/common/tokens.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAE9E;;;;GAIG;AAGH,eAAO,MAAM,YAAY,eAAyB,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB,eAA8B,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,eAAe,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,GAAG,CAAC;QAAC,OAAO,EAAE,gBAAgB,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC5F;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,oBAAoB,eAAiC,CAAC;AAEnE;;;;;;GAMG;AACH,MAAM,WAAW,2BAA2B;IAC1C,gBAAgB,CAAC,MAAM,EAAE;QACvB,MAAM,EAAE,mBAAmB,CAAC;QAC5B,IAAI,EAAE,MAAM,CAAC;QACb,cAAc,EAAE,MAAM,CAAC;QACvB,gBAAgB,EAAE,MAAM,CAAC;QACzB,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,WAAW,CAAC,EAAE,WAAW,CAAC;QAC1B,sJAAsJ;QACtJ,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,6HAA6H;QAC7H,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnB;AAED
|
|
1
|
+
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/common/tokens.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAE9E;;;;GAIG;AAGH,eAAO,MAAM,YAAY,eAAyB,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB,eAA8B,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,eAAe,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,GAAG,CAAC;QAAC,OAAO,EAAE,gBAAgB,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC5F;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,oBAAoB,eAAiC,CAAC;AAEnE;;;;;;GAMG;AACH,MAAM,WAAW,2BAA2B;IAC1C,gBAAgB,CAAC,MAAM,EAAE;QACvB,MAAM,EAAE,mBAAmB,CAAC;QAC5B,IAAI,EAAE,MAAM,CAAC;QACb,cAAc,EAAE,MAAM,CAAC;QACvB,gBAAgB,EAAE,MAAM,CAAC;QACzB,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,WAAW,CAAC,EAAE,WAAW,CAAC;QAC1B,sJAAsJ;QACtJ,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,6HAA6H;QAC7H,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,eAAO,MAAM,gBAAgB,eAA6B,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,eAAe,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9D;;;;;;;OAOG;IACH,WAAW,CAAC,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC/D"}
|
package/dist/common/tokens.js
CHANGED
|
@@ -70,6 +70,18 @@ exports.TOKEN_USAGE_RECORDER = Symbol("TOKEN_USAGE_RECORDER");
|
|
|
70
70
|
* | Validator throws anything else | rethrown — never read as an empty balance |
|
|
71
71
|
* | Credits disabled (`creditCost <= 0`) | `true` — validator is a documented no-op |
|
|
72
72
|
*
|
|
73
|
+
* The same processors also consult the OPTIONAL `isAiEnabled` method below
|
|
74
|
+
* through `isAiEnabledVia` (`common/helpers/credit-gate.ts`), a separate
|
|
75
|
+
* boolean check for a DIFFERENT question — not "is there balance?" but "does
|
|
76
|
+
* this plan carry AI at all?". It fails OPEN on every uncertain case:
|
|
77
|
+
*
|
|
78
|
+
* | Situation | Result |
|
|
79
|
+
* |---------------------------------------------|--------------------------------|
|
|
80
|
+
* | No provider bound for `CREDIT_VALIDATOR` | `true` — AI treated as enabled |
|
|
81
|
+
* | Validator does not implement `isAiEnabled` | `true` — AI treated as enabled |
|
|
82
|
+
* | `isAiEnabled` throws | `true` — AI treated as enabled |
|
|
83
|
+
* | `isAiEnabled` resolves | its answer, as-is |
|
|
84
|
+
*
|
|
73
85
|
* The first row is the dangerous one: **an application that intends to enforce
|
|
74
86
|
* credits but forgets to bind this token runs entirely ungated, silently.**
|
|
75
87
|
* Failing open is deliberate — it preserves behaviour for consumers that never
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/common/tokens.ts"],"names":[],"mappings":";;;AAIA;;;;GAIG;AAEH,8BAA8B;AACjB,QAAA,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AAUnD;;;;;;;;;GASG;AACU,QAAA,iBAAiB,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAS7D;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACU,QAAA,oBAAoB,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC;AAwBnE
|
|
1
|
+
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/common/tokens.ts"],"names":[],"mappings":";;;AAIA;;;;GAIG;AAEH,8BAA8B;AACjB,QAAA,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AAUnD;;;;;;;;;GASG;AACU,QAAA,iBAAiB,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAS7D;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACU,QAAA,oBAAoB,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC;AAwBnE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACU,QAAA,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assistant.controller.d.ts","sourceRoot":"","sources":["../../../../src/foundations/assistant/controllers/assistant.controller.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"assistant.controller.d.ts","sourceRoot":"","sources":["../../../../src/foundations/assistant/controllers/assistant.controller.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAIvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,4DAA4D,CAAC;AAElG,OAAO,EAAoB,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAK9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,OAAO,EAAE,GAAG,SAAS,EAC3B,SAAS,EAAE,OAAO,EAAE,GAAG,SAAS,EAChC,eAAe,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GACnD,GAAG,EAAE,CA0BP;AAED,qBAEa,mBAAmB;IAK5B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACc,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;IANzE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwC;IAC/D,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA6C;gBAG/C,UAAU,EAAE,gBAAgB,EAC5B,OAAO,EAAE,cAAc,EACe,eAAe,CAAC,EAAE,wBAAwB;IAGnG;;;;;;;OAOG;IAEG,MAAM,CAAS,IAAI,EAAE,gBAAgB,EAAS,GAAG,EAAE,oBAAoB,GAAG,OAAO,CAAC,GAAG,CAAC;IA8C5F;;;;;OAKG;IAEG,MAAM,CACY,WAAW,EAAE,MAAM,EACjC,IAAI,EAAE,kBAAkB,EACzB,GAAG,EAAE,oBAAoB,GAC/B,OAAO,CAAC,GAAG,CAAC;IA2Bf;;;;;;;;OAQG;IAEG,OAAO,CACJ,KAAK,EAAE,YAAY,EACjB,KAAK,EAAE,GAAG,EACF,MAAM,CAAC,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,OAAO,EACnB,OAAO,CAAC,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,MAAM;IAapC;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAS3B;;OAEG;IAEG,QAAQ,CAAQ,KAAK,EAAE,YAAY,EAAwB,WAAW,EAAE,MAAM;IAIpF;;OAEG;IAEG,KAAK,CAAQ,KAAK,EAAE,YAAY,EAAU,IAAI,EAAE,iBAAiB;IAIvE;;OAEG;IAGG,MAAM,CAAQ,KAAK,EAAE,YAAY,EAAwB,WAAW,EAAE,MAAM;CAGnF"}
|
|
@@ -18,6 +18,7 @@ exports.mergeIncluded = mergeIncluded;
|
|
|
18
18
|
const common_1 = require("@nestjs/common");
|
|
19
19
|
const jwt_auth_guard_1 = require("../../../common/guards/jwt.auth.guard");
|
|
20
20
|
const crud_handlers_1 = require("../../../common/handlers/crud.handlers");
|
|
21
|
+
const credit_gate_1 = require("../../../common/helpers/credit-gate");
|
|
21
22
|
const registry_1 = require("../../../common/registries/registry");
|
|
22
23
|
const tokens_1 = require("../../../common/tokens");
|
|
23
24
|
const jsonapi_service_1 = require("../../../core/jsonapi/services/jsonapi.service");
|
|
@@ -89,6 +90,9 @@ let AssistantController = AssistantController_1 = class AssistantController {
|
|
|
89
90
|
* a round-trip to render the initial thread).
|
|
90
91
|
*/
|
|
91
92
|
async create(body, req) {
|
|
93
|
+
if (req.user?.companyId && !(await (0, credit_gate_1.isAiEnabledVia)(this.creditValidator, { companyId: req.user.companyId }))) {
|
|
94
|
+
throw new common_1.NotFoundException();
|
|
95
|
+
}
|
|
92
96
|
if (this.creditValidator && req.user?.companyId)
|
|
93
97
|
await this.creditValidator.validateCredits({ companyId: req.user.companyId });
|
|
94
98
|
const { content, title, howToMode, limitToHowToId } = body.data.attributes;
|
|
@@ -133,6 +137,9 @@ let AssistantController = AssistantController_1 = class AssistantController {
|
|
|
133
137
|
* in the document's `meta`.
|
|
134
138
|
*/
|
|
135
139
|
async append(assistantId, body, req) {
|
|
140
|
+
if (req.user?.companyId && !(await (0, credit_gate_1.isAiEnabledVia)(this.creditValidator, { companyId: req.user.companyId }))) {
|
|
141
|
+
throw new common_1.NotFoundException();
|
|
142
|
+
}
|
|
136
143
|
if (this.creditValidator && req.user?.companyId)
|
|
137
144
|
await this.creditValidator.validateCredits({ companyId: req.user.companyId });
|
|
138
145
|
const { content, howToMode, limitToHowToId } = body.data.attributes;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assistant.controller.js","sourceRoot":"","sources":["../../../../src/foundations/assistant/controllers/assistant.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"assistant.controller.js","sourceRoot":"","sources":["../../../../src/foundations/assistant/controllers/assistant.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { FastifyReply, FastifyRequest } from "fastify";
|
|
2
|
+
import { AuthenticatedRequest } from "../../../common/interfaces/authenticated.request.interface";
|
|
3
|
+
import { CreditValidatorInterface } from "../../../common/tokens";
|
|
2
4
|
import { CacheService } from "../../../core/cache/services/cache.service";
|
|
3
5
|
import { JsonApiService } from "../../../core/jsonapi/services/jsonapi.service";
|
|
4
6
|
import { AuditService } from "../../audit/services/audit.service";
|
|
@@ -10,21 +12,39 @@ export declare class AssistantActionController {
|
|
|
10
12
|
private readonly jsonApi;
|
|
11
13
|
private readonly auditService;
|
|
12
14
|
private readonly cacheService;
|
|
15
|
+
/**
|
|
16
|
+
* Approving or denying a pending action RESUMES a frozen operator run —
|
|
17
|
+
* i.e. it runs the LLM. Same seam and same 404 as `AssistantController`.
|
|
18
|
+
*/
|
|
19
|
+
private readonly creditValidator?;
|
|
13
20
|
private readonly crud;
|
|
14
|
-
constructor(assistantActions: AssistantActionService, assistants: AssistantService, jsonApi: JsonApiService, auditService: AuditService, cacheService: CacheService
|
|
21
|
+
constructor(assistantActions: AssistantActionService, assistants: AssistantService, jsonApi: JsonApiService, auditService: AuditService, cacheService: CacheService,
|
|
22
|
+
/**
|
|
23
|
+
* Approving or denying a pending action RESUMES a frozen operator run —
|
|
24
|
+
* i.e. it runs the LLM. Same seam and same 404 as `AssistantController`.
|
|
25
|
+
*/
|
|
26
|
+
creditValidator?: CreditValidatorInterface);
|
|
15
27
|
findById(request: FastifyRequest, reply: FastifyReply, actionId: string): Promise<void>;
|
|
16
28
|
/**
|
|
17
29
|
* POST /assistant-actions/:actionId/approve — resolve the pending action and
|
|
18
30
|
* resume the frozen operator run with approval. Synchronously returns the
|
|
19
31
|
* final assistant message (JSON:API) with the resolved action included.
|
|
20
32
|
*/
|
|
21
|
-
approve(request:
|
|
33
|
+
approve(request: AuthenticatedRequest, reply: FastifyReply, actionId: string): Promise<void>;
|
|
22
34
|
/**
|
|
23
35
|
* POST /assistant-actions/:actionId/deny — resolve the pending action and
|
|
24
36
|
* resume with denial. Returns the wrap-up assistant message with the
|
|
25
37
|
* resolved action included.
|
|
26
38
|
*/
|
|
27
|
-
deny(request:
|
|
39
|
+
deny(request: AuthenticatedRequest, reply: FastifyReply, actionId: string): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* 404 when the caller's plan carries no AI, then the ordinary credit check.
|
|
42
|
+
*
|
|
43
|
+
* Order matters and mirrors `AssistantController`: an AI-free company must
|
|
44
|
+
* never receive a 402, because "pay and you can have this" tells them AI
|
|
45
|
+
* exists. Resuming the run is an unmetered LLM turn without both checks.
|
|
46
|
+
*/
|
|
47
|
+
private gate;
|
|
28
48
|
private resolve;
|
|
29
49
|
}
|
|
30
50
|
//# sourceMappingURL=assistant-action.controller.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assistant-action.controller.d.ts","sourceRoot":"","sources":["../../../../src/foundations/assistant-action/controllers/assistant-action.controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"assistant-action.controller.d.ts","sourceRoot":"","sources":["../../../../src/foundations/assistant-action/controllers/assistant-action.controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAKvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4DAA4D,CAAC;AAClG,OAAO,EAAoB,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AAI9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAE9E,qBAEa,yBAAyB;IAIlC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B;;;OAGG;IACmC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;IAZzE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmD;gBAGrD,gBAAgB,EAAE,sBAAsB,EACxC,UAAU,EAAE,gBAAgB,EAC5B,OAAO,EAAE,cAAc,EACvB,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,YAAY;IAC3C;;;OAGG;IACoD,eAAe,CAAC,EAAE,wBAAwB;IAM7F,QAAQ,CAAQ,OAAO,EAAE,cAAc,EAAS,KAAK,EAAE,YAAY,EAAqB,QAAQ,EAAE,MAAM;IAI9G;;;;OAIG;IAGG,OAAO,CAAQ,OAAO,EAAE,oBAAoB,EAAS,KAAK,EAAE,YAAY,EAAqB,QAAQ,EAAE,MAAM;IAKnH;;;;OAIG;IAGG,IAAI,CAAQ,OAAO,EAAE,oBAAoB,EAAS,KAAK,EAAE,YAAY,EAAqB,QAAQ,EAAE,MAAM;IAKhH;;;;;;OAMG;YACW,IAAI;YASJ,OAAO;CAqBtB"}
|
|
@@ -17,6 +17,8 @@ const common_1 = require("@nestjs/common");
|
|
|
17
17
|
const decorators_1 = require("../../../common/decorators");
|
|
18
18
|
const jwt_auth_guard_1 = require("../../../common/guards/jwt.auth.guard");
|
|
19
19
|
const crud_handlers_1 = require("../../../common/handlers/crud.handlers");
|
|
20
|
+
const credit_gate_1 = require("../../../common/helpers/credit-gate");
|
|
21
|
+
const tokens_1 = require("../../../common/tokens");
|
|
20
22
|
const cache_service_1 = require("../../../core/cache/services/cache.service");
|
|
21
23
|
const jsonapi_service_1 = require("../../../core/jsonapi/services/jsonapi.service");
|
|
22
24
|
const audit_service_1 = require("../../audit/services/audit.service");
|
|
@@ -26,12 +28,13 @@ const assistant_action_1 = require("../entities/assistant-action");
|
|
|
26
28
|
const assistant_action_meta_1 = require("../entities/assistant-action.meta");
|
|
27
29
|
const assistant_action_service_1 = require("../services/assistant-action.service");
|
|
28
30
|
let AssistantActionController = class AssistantActionController {
|
|
29
|
-
constructor(assistantActions, assistants, jsonApi, auditService, cacheService) {
|
|
31
|
+
constructor(assistantActions, assistants, jsonApi, auditService, cacheService, creditValidator) {
|
|
30
32
|
this.assistantActions = assistantActions;
|
|
31
33
|
this.assistants = assistants;
|
|
32
34
|
this.jsonApi = jsonApi;
|
|
33
35
|
this.auditService = auditService;
|
|
34
36
|
this.cacheService = cacheService;
|
|
37
|
+
this.creditValidator = creditValidator;
|
|
35
38
|
this.crud = (0, crud_handlers_1.createCrudHandlers)(() => this.assistantActions);
|
|
36
39
|
}
|
|
37
40
|
// GET /assistant-actions/:actionId
|
|
@@ -44,6 +47,7 @@ let AssistantActionController = class AssistantActionController {
|
|
|
44
47
|
* final assistant message (JSON:API) with the resolved action included.
|
|
45
48
|
*/
|
|
46
49
|
async approve(request, reply, actionId) {
|
|
50
|
+
await this.gate(request);
|
|
47
51
|
return this.resolve(reply, actionId, true);
|
|
48
52
|
}
|
|
49
53
|
/**
|
|
@@ -52,8 +56,25 @@ let AssistantActionController = class AssistantActionController {
|
|
|
52
56
|
* resolved action included.
|
|
53
57
|
*/
|
|
54
58
|
async deny(request, reply, actionId) {
|
|
59
|
+
await this.gate(request);
|
|
55
60
|
return this.resolve(reply, actionId, false);
|
|
56
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* 404 when the caller's plan carries no AI, then the ordinary credit check.
|
|
64
|
+
*
|
|
65
|
+
* Order matters and mirrors `AssistantController`: an AI-free company must
|
|
66
|
+
* never receive a 402, because "pay and you can have this" tells them AI
|
|
67
|
+
* exists. Resuming the run is an unmetered LLM turn without both checks.
|
|
68
|
+
*/
|
|
69
|
+
async gate(request) {
|
|
70
|
+
const companyId = request.user?.companyId;
|
|
71
|
+
if (!companyId)
|
|
72
|
+
return;
|
|
73
|
+
if (!(await (0, credit_gate_1.isAiEnabledVia)(this.creditValidator, { companyId })))
|
|
74
|
+
throw new common_1.NotFoundException();
|
|
75
|
+
if (this.creditValidator)
|
|
76
|
+
await this.creditValidator.validateCredits({ companyId });
|
|
77
|
+
}
|
|
57
78
|
async resolve(reply, actionId, approved) {
|
|
58
79
|
const { assistantMessage, action } = await this.assistants.resolveAction({ actionId, approved });
|
|
59
80
|
const document = await this.jsonApi.buildSingle(assistant_message_1.AssistantMessageDescriptor.model, assistantMessage);
|
|
@@ -110,10 +131,12 @@ __decorate([
|
|
|
110
131
|
exports.AssistantActionController = AssistantActionController = __decorate([
|
|
111
132
|
(0, common_1.UseGuards)(jwt_auth_guard_1.JwtAuthGuard),
|
|
112
133
|
(0, common_1.Controller)(),
|
|
134
|
+
__param(5, (0, common_1.Optional)()),
|
|
135
|
+
__param(5, (0, common_1.Inject)(tokens_1.CREDIT_VALIDATOR)),
|
|
113
136
|
__metadata("design:paramtypes", [assistant_action_service_1.AssistantActionService,
|
|
114
137
|
assistant_service_1.AssistantService,
|
|
115
138
|
jsonapi_service_1.JsonApiService,
|
|
116
139
|
audit_service_1.AuditService,
|
|
117
|
-
cache_service_1.CacheService])
|
|
140
|
+
cache_service_1.CacheService, Object])
|
|
118
141
|
], AssistantActionController);
|
|
119
142
|
//# sourceMappingURL=assistant-action.controller.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assistant-action.controller.js","sourceRoot":"","sources":["../../../../src/foundations/assistant-action/controllers/assistant-action.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"assistant-action.controller.js","sourceRoot":"","sources":["../../../../src/foundations/assistant-action/controllers/assistant-action.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk.embedding.processor.d.ts","sourceRoot":"","sources":["../../../../src/foundations/chunk/processors/chunk.embedding.processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEtE,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,EAAoB,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kDAAkD,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAInE,qBACa,uBAAwB,SAAQ,UAAU;IAInD,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAEhC,mGAAmG;IAGnG,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;IAVnC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;gBAG3B,UAAU,EAAE,UAAU,EACtB,eAAe,EAAE,eAAe,EAChC,eAAe,EAAE,eAAe,EACjD,aAAa,EAAE,aAAa,CAAC,mBAAmB,CAAC;IACjD,mGAAmG;IAGlF,eAAe,CAAC,EAAE,wBAAwB;IAQ7D,QAAQ,CAAC,GAAG,EAAE,GAAG;IAKjB,OAAO,CAAC,GAAG,EAAE,GAAG;IAKhB,WAAW,CAAC,GAAG,EAAE,GAAG;IAId,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"chunk.embedding.processor.d.ts","sourceRoot":"","sources":["../../../../src/foundations/chunk/processors/chunk.embedding.processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEtE,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,EAAoB,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kDAAkD,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAInE,qBACa,uBAAwB,SAAQ,UAAU;IAInD,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAEhC,mGAAmG;IAGnG,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;IAVnC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;gBAG3B,UAAU,EAAE,UAAU,EACtB,eAAe,EAAE,eAAe,EAChC,eAAe,EAAE,eAAe,EACjD,aAAa,EAAE,aAAa,CAAC,mBAAmB,CAAC;IACjD,mGAAmG;IAGlF,eAAe,CAAC,EAAE,wBAAwB;IAQ7D,QAAQ,CAAC,GAAG,EAAE,GAAG;IAKjB,OAAO,CAAC,GAAG,EAAE,GAAG;IAKhB,WAAW,CAAC,GAAG,EAAE,GAAG;IAId,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CAqDxD"}
|