@saltsquareio/nestjs-backend-platform 0.0.1
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/LICENSE +21 -0
- package/README.md +72 -0
- package/dist/cli/migrate.d.ts +2 -0
- package/dist/cli/migrate.js +34 -0
- package/dist/cli/migrate.js.map +1 -0
- package/dist/core/ai/ai.module.d.ts +5 -0
- package/dist/core/ai/ai.module.js +53 -0
- package/dist/core/ai/ai.module.js.map +1 -0
- package/dist/core/ai/ai.options.d.ts +33 -0
- package/dist/core/ai/ai.options.js +14 -0
- package/dist/core/ai/ai.options.js.map +1 -0
- package/dist/core/ai/ai.service.d.ts +49 -0
- package/dist/core/ai/ai.service.js +381 -0
- package/dist/core/ai/ai.service.js.map +1 -0
- package/dist/core/ai/ai.types.d.ts +133 -0
- package/dist/core/ai/ai.types.js +3 -0
- package/dist/core/ai/ai.types.js.map +1 -0
- package/dist/core/ai/context/context-formatter.service.d.ts +9 -0
- package/dist/core/ai/context/context-formatter.service.js +66 -0
- package/dist/core/ai/context/context-formatter.service.js.map +1 -0
- package/dist/core/ai/cost/cost-tracking.service.d.ts +12 -0
- package/dist/core/ai/cost/cost-tracking.service.js +65 -0
- package/dist/core/ai/cost/cost-tracking.service.js.map +1 -0
- package/dist/core/ai/entities/ai-invocation-log.entity.d.ts +19 -0
- package/dist/core/ai/entities/ai-invocation-log.entity.js +116 -0
- package/dist/core/ai/entities/ai-invocation-log.entity.js.map +1 -0
- package/dist/core/ai/entities/prompt-template.entity.d.ts +13 -0
- package/dist/core/ai/entities/prompt-template.entity.js +75 -0
- package/dist/core/ai/entities/prompt-template.entity.js.map +1 -0
- package/dist/core/ai/index.d.ts +18 -0
- package/dist/core/ai/index.js +36 -0
- package/dist/core/ai/index.js.map +1 -0
- package/dist/core/ai/llm/dummy-llm-model.d.ts +9 -0
- package/dist/core/ai/llm/dummy-llm-model.js +18 -0
- package/dist/core/ai/llm/dummy-llm-model.js.map +1 -0
- package/dist/core/ai/llm/index.d.ts +2 -0
- package/dist/core/ai/llm/index.js +19 -0
- package/dist/core/ai/llm/index.js.map +1 -0
- package/dist/core/ai/llm/openai-llm-model.d.ts +10 -0
- package/dist/core/ai/llm/openai-llm-model.js +46 -0
- package/dist/core/ai/llm/openai-llm-model.js.map +1 -0
- package/dist/core/ai/llm-model.d.ts +17 -0
- package/dist/core/ai/llm-model.js +3 -0
- package/dist/core/ai/llm-model.js.map +1 -0
- package/dist/core/ai/memory/memory.service.d.ts +18 -0
- package/dist/core/ai/memory/memory.service.js +157 -0
- package/dist/core/ai/memory/memory.service.js.map +1 -0
- package/dist/core/ai/memory/memory.types.d.ts +6 -0
- package/dist/core/ai/memory/memory.types.js +3 -0
- package/dist/core/ai/memory/memory.types.js.map +1 -0
- package/dist/core/ai/memory/memory.utils.d.ts +1 -0
- package/dist/core/ai/memory/memory.utils.js +17 -0
- package/dist/core/ai/memory/memory.utils.js.map +1 -0
- package/dist/core/ai/model-registry.service.d.ts +19 -0
- package/dist/core/ai/model-registry.service.js +60 -0
- package/dist/core/ai/model-registry.service.js.map +1 -0
- package/dist/core/ai/model-resolver.service.d.ts +6 -0
- package/dist/core/ai/model-resolver.service.js +28 -0
- package/dist/core/ai/model-resolver.service.js.map +1 -0
- package/dist/core/ai/prompt-builder.service.d.ts +16 -0
- package/dist/core/ai/prompt-builder.service.js +34 -0
- package/dist/core/ai/prompt-builder.service.js.map +1 -0
- package/dist/core/ai/provider/provider-factory.service.d.ts +18 -0
- package/dist/core/ai/provider/provider-factory.service.js +60 -0
- package/dist/core/ai/provider/provider-factory.service.js.map +1 -0
- package/dist/core/ai/safety/safety-guardrail.service.d.ts +9 -0
- package/dist/core/ai/safety/safety-guardrail.service.js +65 -0
- package/dist/core/ai/safety/safety-guardrail.service.js.map +1 -0
- package/dist/core/ai/summarization/summarization.service.d.ts +24 -0
- package/dist/core/ai/summarization/summarization.service.js +66 -0
- package/dist/core/ai/summarization/summarization.service.js.map +1 -0
- package/dist/core/ai/template/template.service.d.ts +14 -0
- package/dist/core/ai/template/template.service.js +88 -0
- package/dist/core/ai/template/template.service.js.map +1 -0
- package/dist/core/audit-log/audit-log.entity.d.ts +13 -0
- package/dist/core/audit-log/audit-log.entity.js +72 -0
- package/dist/core/audit-log/audit-log.entity.js.map +1 -0
- package/dist/core/audit-log/audit-log.module.d.ts +2 -0
- package/dist/core/audit-log/audit-log.module.js +25 -0
- package/dist/core/audit-log/audit-log.module.js.map +1 -0
- package/dist/core/audit-log/audit-log.service.d.ts +20 -0
- package/dist/core/audit-log/audit-log.service.js +59 -0
- package/dist/core/audit-log/audit-log.service.js.map +1 -0
- package/dist/core/audit-log/index.d.ts +6 -0
- package/dist/core/audit-log/index.js +11 -0
- package/dist/core/audit-log/index.js.map +1 -0
- package/dist/core/auth/auth.provider.d.ts +4 -0
- package/dist/core/auth/auth.provider.js +3 -0
- package/dist/core/auth/auth.provider.js.map +1 -0
- package/dist/core/auth/decorators.d.ts +4 -0
- package/dist/core/auth/decorators.js +11 -0
- package/dist/core/auth/decorators.js.map +1 -0
- package/dist/core/auth/index.d.ts +6 -0
- package/dist/core/auth/index.js +23 -0
- package/dist/core/auth/index.js.map +1 -0
- package/dist/core/auth/params.d.ts +2 -0
- package/dist/core/auth/params.js +23 -0
- package/dist/core/auth/params.js.map +1 -0
- package/dist/core/auth/role.can-activate.d.ts +10 -0
- package/dist/core/auth/role.can-activate.js +42 -0
- package/dist/core/auth/role.can-activate.js.map +1 -0
- package/dist/core/auth/types.d.ts +6 -0
- package/dist/core/auth/types.js +3 -0
- package/dist/core/auth/types.js.map +1 -0
- package/dist/core/auth/utils.d.ts +4 -0
- package/dist/core/auth/utils.js +22 -0
- package/dist/core/auth/utils.js.map +1 -0
- package/dist/core/configuration/coerce.d.ts +2 -0
- package/dist/core/configuration/coerce.js +8 -0
- package/dist/core/configuration/coerce.js.map +1 -0
- package/dist/core/configuration/configuration.module.d.ts +9 -0
- package/dist/core/configuration/configuration.module.js +38 -0
- package/dist/core/configuration/configuration.module.js.map +1 -0
- package/dist/core/configuration/define-config.d.ts +2 -0
- package/dist/core/configuration/define-config.js +20 -0
- package/dist/core/configuration/define-config.js.map +1 -0
- package/dist/core/configuration/env-files.d.ts +1 -0
- package/dist/core/configuration/env-files.js +7 -0
- package/dist/core/configuration/env-files.js.map +1 -0
- package/dist/core/configuration/index.d.ts +5 -0
- package/dist/core/configuration/index.js +22 -0
- package/dist/core/configuration/index.js.map +1 -0
- package/dist/core/configuration/schemas/app.schema.d.ts +16 -0
- package/dist/core/configuration/schemas/app.schema.js +23 -0
- package/dist/core/configuration/schemas/app.schema.js.map +1 -0
- package/dist/core/database/common.d.ts +12 -0
- package/dist/core/database/common.js +15 -0
- package/dist/core/database/common.js.map +1 -0
- package/dist/core/database/custom-snake-case-naming-strategy.d.ts +9 -0
- package/dist/core/database/custom-snake-case-naming-strategy.js +28 -0
- package/dist/core/database/custom-snake-case-naming-strategy.js.map +1 -0
- package/dist/core/database/database.config.d.ts +4 -0
- package/dist/core/database/database.config.js +39 -0
- package/dist/core/database/database.config.js.map +1 -0
- package/dist/core/database/database.module.d.ts +7 -0
- package/dist/core/database/database.module.js +58 -0
- package/dist/core/database/database.module.js.map +1 -0
- package/dist/core/database/database.schema.d.ts +41 -0
- package/dist/core/database/database.schema.js +33 -0
- package/dist/core/database/database.schema.js.map +1 -0
- package/dist/core/database/index.d.ts +5 -0
- package/dist/core/database/index.js +22 -0
- package/dist/core/database/index.js.map +1 -0
- package/dist/core/database/ssl-config.d.ts +3 -0
- package/dist/core/database/ssl-config.js +8 -0
- package/dist/core/database/ssl-config.js.map +1 -0
- package/dist/core/exception/all-exceptions.filter.d.ts +8 -0
- package/dist/core/exception/all-exceptions.filter.js +56 -0
- package/dist/core/exception/all-exceptions.filter.js.map +1 -0
- package/dist/core/exception/index.d.ts +1 -0
- package/dist/core/exception/index.js +18 -0
- package/dist/core/exception/index.js.map +1 -0
- package/dist/core/exception/utils.d.ts +6 -0
- package/dist/core/exception/utils.js +15 -0
- package/dist/core/exception/utils.js.map +1 -0
- package/dist/core/health/health.controller.d.ts +9 -0
- package/dist/core/health/health.controller.js +52 -0
- package/dist/core/health/health.controller.js.map +1 -0
- package/dist/core/health/health.module.d.ts +2 -0
- package/dist/core/health/health.module.js +24 -0
- package/dist/core/health/health.module.js.map +1 -0
- package/dist/core/health/index.d.ts +1 -0
- package/dist/core/health/index.js +18 -0
- package/dist/core/health/index.js.map +1 -0
- package/dist/core/health/shutdown-handler.d.ts +2 -0
- package/dist/core/health/shutdown-handler.js +20 -0
- package/dist/core/health/shutdown-handler.js.map +1 -0
- package/dist/core/health/shutdown.service.d.ts +11 -0
- package/dist/core/health/shutdown.service.js +54 -0
- package/dist/core/health/shutdown.service.js.map +1 -0
- package/dist/core/http/http.circuit-breaker.d.ts +4 -0
- package/dist/core/http/http.circuit-breaker.js +25 -0
- package/dist/core/http/http.circuit-breaker.js.map +1 -0
- package/dist/core/http/http.client.factory.d.ts +3 -0
- package/dist/core/http/http.client.factory.js +32 -0
- package/dist/core/http/http.client.factory.js.map +1 -0
- package/dist/core/http/http.module.d.ts +2 -0
- package/dist/core/http/http.module.js +19 -0
- package/dist/core/http/http.module.js.map +1 -0
- package/dist/core/http/http.open-api.d.ts +8 -0
- package/dist/core/http/http.open-api.js +22 -0
- package/dist/core/http/http.open-api.js.map +1 -0
- package/dist/core/http/http.types.d.ts +6 -0
- package/dist/core/http/http.types.js +3 -0
- package/dist/core/http/http.types.js.map +1 -0
- package/dist/core/http/index.d.ts +4 -0
- package/dist/core/http/index.js +21 -0
- package/dist/core/http/index.js.map +1 -0
- package/dist/core/info/index.d.ts +1 -0
- package/dist/core/info/index.js +18 -0
- package/dist/core/info/index.js.map +1 -0
- package/dist/core/info/info.controller.d.ts +3 -0
- package/dist/core/info/info.controller.js +33 -0
- package/dist/core/info/info.controller.js.map +1 -0
- package/dist/core/info/info.module.d.ts +6 -0
- package/dist/core/info/info.module.js +27 -0
- package/dist/core/info/info.module.js.map +1 -0
- package/dist/core/info/info.utils.d.ts +13 -0
- package/dist/core/info/info.utils.js +32 -0
- package/dist/core/info/info.utils.js.map +1 -0
- package/dist/core/logger/hash-pii.d.ts +1 -0
- package/dist/core/logger/hash-pii.js +13 -0
- package/dist/core/logger/hash-pii.js.map +1 -0
- package/dist/core/logger/index.d.ts +4 -0
- package/dist/core/logger/index.js +21 -0
- package/dist/core/logger/index.js.map +1 -0
- package/dist/core/logger/logger.module.d.ts +2 -0
- package/dist/core/logger/logger.module.js +30 -0
- package/dist/core/logger/logger.module.js.map +1 -0
- package/dist/core/logger/logging.interceptor.d.ts +8 -0
- package/dist/core/logger/logging.interceptor.js +51 -0
- package/dist/core/logger/logging.interceptor.js.map +1 -0
- package/dist/core/logger/pino.config.d.ts +9 -0
- package/dist/core/logger/pino.config.js +47 -0
- package/dist/core/logger/pino.config.js.map +1 -0
- package/dist/core/migrations/create-migration-data-source.d.ts +8 -0
- package/dist/core/migrations/create-migration-data-source.js +18 -0
- package/dist/core/migrations/create-migration-data-source.js.map +1 -0
- package/dist/core/migrations/index.d.ts +3 -0
- package/dist/core/migrations/index.js +20 -0
- package/dist/core/migrations/index.js.map +1 -0
- package/dist/core/migrations/platform-entities.d.ts +2 -0
- package/dist/core/migrations/platform-entities.js +10 -0
- package/dist/core/migrations/platform-entities.js.map +1 -0
- package/dist/core/migrations/run-migrations.d.ts +3 -0
- package/dist/core/migrations/run-migrations.js +80 -0
- package/dist/core/migrations/run-migrations.js.map +1 -0
- package/dist/core/newrelic/index.d.ts +1 -0
- package/dist/core/newrelic/index.js +18 -0
- package/dist/core/newrelic/index.js.map +1 -0
- package/dist/core/newrelic/newrelic.utils.d.ts +2 -0
- package/dist/core/newrelic/newrelic.utils.js +31 -0
- package/dist/core/newrelic/newrelic.utils.js.map +1 -0
- package/dist/core/scheduler/index.d.ts +3 -0
- package/dist/core/scheduler/index.js +20 -0
- package/dist/core/scheduler/index.js.map +1 -0
- package/dist/core/scheduler/scheduled-cron.decorator.d.ts +6 -0
- package/dist/core/scheduler/scheduled-cron.decorator.js +31 -0
- package/dist/core/scheduler/scheduled-cron.decorator.js.map +1 -0
- package/dist/core/scheduler/scheduler-control.service.d.ts +14 -0
- package/dist/core/scheduler/scheduler-control.service.js +42 -0
- package/dist/core/scheduler/scheduler-control.service.js.map +1 -0
- package/dist/core/scheduler/scheduler.module.d.ts +4 -0
- package/dist/core/scheduler/scheduler.module.js +27 -0
- package/dist/core/scheduler/scheduler.module.js.map +1 -0
- package/dist/core/throttler/index.d.ts +7 -0
- package/dist/core/throttler/index.js +25 -0
- package/dist/core/throttler/index.js.map +1 -0
- package/dist/core/throttler/pg-throttler.storage.d.ts +10 -0
- package/dist/core/throttler/pg-throttler.storage.js +58 -0
- package/dist/core/throttler/pg-throttler.storage.js.map +1 -0
- package/dist/core/throttler/rate-limit-hit.entity.d.ts +6 -0
- package/dist/core/throttler/rate-limit-hit.entity.js +36 -0
- package/dist/core/throttler/rate-limit-hit.entity.js.map +1 -0
- package/dist/core/throttler/throttler-cleanup.service.d.ts +7 -0
- package/dist/core/throttler/throttler-cleanup.service.js +41 -0
- package/dist/core/throttler/throttler-cleanup.service.js.map +1 -0
- package/dist/core/throttler/throttler-tracker.d.ts +2 -0
- package/dist/core/throttler/throttler-tracker.js +29 -0
- package/dist/core/throttler/throttler-tracker.js.map +1 -0
- package/dist/core/throttler/throttler.module.d.ts +2 -0
- package/dist/core/throttler/throttler.module.js +41 -0
- package/dist/core/throttler/throttler.module.js.map +1 -0
- package/dist/core/utils/app-initializer.d.ts +5 -0
- package/dist/core/utils/app-initializer.js +37 -0
- package/dist/core/utils/app-initializer.js.map +1 -0
- package/dist/core/utils/feature-flag.d.ts +1 -0
- package/dist/core/utils/feature-flag.js +10 -0
- package/dist/core/utils/feature-flag.js.map +1 -0
- package/dist/core/utils/index.d.ts +5 -0
- package/dist/core/utils/index.js +22 -0
- package/dist/core/utils/index.js.map +1 -0
- package/dist/core/utils/parse-allowed-origins.d.ts +1 -0
- package/dist/core/utils/parse-allowed-origins.js +21 -0
- package/dist/core/utils/parse-allowed-origins.js.map +1 -0
- package/dist/core/utils/security-middleware.d.ts +2 -0
- package/dist/core/utils/security-middleware.js +19 -0
- package/dist/core/utils/security-middleware.js.map +1 -0
- package/dist/core/utils/with-timeout.d.ts +4 -0
- package/dist/core/utils/with-timeout.js +23 -0
- package/dist/core/utils/with-timeout.js.map +1 -0
- package/dist/core/ws/index.d.ts +4 -0
- package/dist/core/ws/index.js +23 -0
- package/dist/core/ws/index.js.map +1 -0
- package/dist/core/ws/validate-ws-dto.d.ts +1 -0
- package/dist/core/ws/validate-ws-dto.js +14 -0
- package/dist/core/ws/validate-ws-dto.js.map +1 -0
- package/dist/core/ws/ws-token.module.d.ts +2 -0
- package/dist/core/ws/ws-token.module.js +21 -0
- package/dist/core/ws/ws-token.module.js.map +1 -0
- package/dist/core/ws/ws-token.service.d.ts +8 -0
- package/dist/core/ws/ws-token.service.js +57 -0
- package/dist/core/ws/ws-token.service.js.map +1 -0
- package/dist/core/ws/ws.constants.d.ts +7 -0
- package/dist/core/ws/ws.constants.js +11 -0
- package/dist/core/ws/ws.constants.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/package.json +167 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 SaltSquare
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# @saltsquareio/nestjs-backend-platform
|
|
2
|
+
|
|
3
|
+
Reusable NestJS platform library for SaltSquare backend services: configuration,
|
|
4
|
+
database + migrations, logging, HTTP client, health, exceptions, rate limiting,
|
|
5
|
+
scheduling, audit logging, auth primitives, WebSocket tokens, observability, and an
|
|
6
|
+
optional AI module.
|
|
7
|
+
|
|
8
|
+
> Pre-1.0 (`0.x`). Every release may contain breaking changes — pin an exact version.
|
|
9
|
+
|
|
10
|
+
## Install
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
npm install @saltsquareio/nestjs-backend-platform
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Most capabilities are framework-aligned **peer dependencies** (install the ones your
|
|
17
|
+
app uses — `@nestjs/*`, `typeorm`, `pino`, etc.). The AI stack (`ai`, `@ai-sdk/*`,
|
|
18
|
+
`mem0ai`) and `newrelic` are **optional** peers.
|
|
19
|
+
|
|
20
|
+
## Quick start
|
|
21
|
+
|
|
22
|
+
```ts
|
|
23
|
+
// main.ts
|
|
24
|
+
import { initialize } from '@saltsquareio/nestjs-backend-platform';
|
|
25
|
+
import { AppModule } from './app.module';
|
|
26
|
+
|
|
27
|
+
async function bootstrap() {
|
|
28
|
+
const app = await initialize(AppModule);
|
|
29
|
+
await app.listen(process.env.PORT ?? 3000);
|
|
30
|
+
}
|
|
31
|
+
void bootstrap();
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
```ts
|
|
35
|
+
// app.module.ts
|
|
36
|
+
import {
|
|
37
|
+
ConfigurationModule,
|
|
38
|
+
DatabaseModule,
|
|
39
|
+
LoggerModule,
|
|
40
|
+
HealthModule,
|
|
41
|
+
} from '@saltsquareio/nestjs-backend-platform';
|
|
42
|
+
|
|
43
|
+
@Module({
|
|
44
|
+
imports: [
|
|
45
|
+
ConfigurationModule.forRoot(),
|
|
46
|
+
LoggerModule,
|
|
47
|
+
DatabaseModule.forRootAsync(),
|
|
48
|
+
HealthModule,
|
|
49
|
+
],
|
|
50
|
+
})
|
|
51
|
+
export class AppModule {}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
The AI module is imported from a subpath so its heavy deps stay optional:
|
|
55
|
+
|
|
56
|
+
```ts
|
|
57
|
+
import { AiModule } from '@saltsquareio/nestjs-backend-platform/ai';
|
|
58
|
+
// AiModule.forRoot({ defaultModel, safety, summarization, costRates, memory })
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Documentation
|
|
62
|
+
|
|
63
|
+
- [Configuration](./docs/configuration.md) — env model, namespaces, defaults, extension
|
|
64
|
+
- [Database](./docs/database.md) — config, overridable defaults, transactions
|
|
65
|
+
- [Migrations](./docs/migrations.md) — the `platform-db` CLI and what the lib vs consumer owns
|
|
66
|
+
- [Modules](./docs/modules.md) — catalogue of what the library provides
|
|
67
|
+
- [AI](./docs/ai.md) — providers, memory, cost, safety, summarization (business-agnostic)
|
|
68
|
+
- [Releasing](./docs/releasing.md) — conventional commits + release-please
|
|
69
|
+
|
|
70
|
+
## License
|
|
71
|
+
|
|
72
|
+
MIT — see [LICENSE](./LICENSE).
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const node_path_1 = require("node:path");
|
|
5
|
+
const typeorm_1 = require("typeorm");
|
|
6
|
+
const run_migrations_1 = require("../core/migrations/run-migrations");
|
|
7
|
+
const COMMANDS = ['run', 'show', 'revert'];
|
|
8
|
+
function loadDataSource(path) {
|
|
9
|
+
const mod = require((0, node_path_1.resolve)(path));
|
|
10
|
+
const candidate = mod.default ?? mod.MigrationsDataSource ?? mod.dataSource;
|
|
11
|
+
if (!(candidate instanceof typeorm_1.DataSource)) {
|
|
12
|
+
throw new Error(`No DataSource export in ${path} (expected default, MigrationsDataSource, or dataSource)`);
|
|
13
|
+
}
|
|
14
|
+
return candidate;
|
|
15
|
+
}
|
|
16
|
+
async function main() {
|
|
17
|
+
const args = process.argv.slice(2);
|
|
18
|
+
const command = (args[0] ?? 'run');
|
|
19
|
+
if (!COMMANDS.includes(command)) {
|
|
20
|
+
throw new Error(`Unknown command "${command}". Expected one of: ${COMMANDS.join(', ')}`);
|
|
21
|
+
}
|
|
22
|
+
const flag = args.findIndex((arg) => arg === '-d' || arg === '--datasource');
|
|
23
|
+
const datasourcePath = flag >= 0 ? args[flag + 1] : process.env.MIGRATIONS_DATASOURCE;
|
|
24
|
+
if (!datasourcePath) {
|
|
25
|
+
throw new Error('Missing datasource: pass -d <compiled-datasource-path> or set MIGRATIONS_DATASOURCE');
|
|
26
|
+
}
|
|
27
|
+
const steps = command === 'revert' ? Number(args[1] ?? '1') : 1;
|
|
28
|
+
await (0, run_migrations_1.runMigrations)(loadDataSource(datasourcePath), command, steps);
|
|
29
|
+
}
|
|
30
|
+
void main().catch((err) => {
|
|
31
|
+
console.error('[migrations] failed:', err);
|
|
32
|
+
process.exit(1);
|
|
33
|
+
});
|
|
34
|
+
//# sourceMappingURL=migrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/cli/migrate.ts"],"names":[],"mappings":";;;AACA,yCAAoC;AACpC,qCAAqC;AACrC,sEAG2C;AAE3C,MAAM,QAAQ,GAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AAE/D,SAAS,cAAc,CAAC,IAAY;IAElC,MAAM,GAAG,GAAG,OAAO,CAAC,IAAA,mBAAO,EAAC,IAAI,CAAC,CAA4B,CAAC;IAC9D,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,oBAAoB,IAAI,GAAG,CAAC,UAAU,CAAC;IAC5E,IAAI,CAAC,CAAC,SAAS,YAAY,oBAAU,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CACb,2BAA2B,IAAI,0DAA0D,CAC1F,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAqB,CAAC;IACvD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CACb,oBAAoB,OAAO,uBAAuB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACxE,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,cAAc,CAAC,CAAC;IAC7E,MAAM,cAAc,GAClB,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;IACjE,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,qFAAqF,CACtF,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,MAAM,IAAA,8BAAa,EAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACtE,CAAC;AAED,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IACjC,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC;IAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var AiModule_1;
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.AiModule = void 0;
|
|
11
|
+
const common_1 = require("@nestjs/common");
|
|
12
|
+
const database_1 = require("../database");
|
|
13
|
+
const ai_service_1 = require("./ai.service");
|
|
14
|
+
const ai_options_1 = require("./ai.options");
|
|
15
|
+
const context_formatter_service_1 = require("./context/context-formatter.service");
|
|
16
|
+
const cost_tracking_service_1 = require("./cost/cost-tracking.service");
|
|
17
|
+
const ai_invocation_log_entity_1 = require("./entities/ai-invocation-log.entity");
|
|
18
|
+
const prompt_template_entity_1 = require("./entities/prompt-template.entity");
|
|
19
|
+
const memory_service_1 = require("./memory/memory.service");
|
|
20
|
+
const provider_factory_service_1 = require("./provider/provider-factory.service");
|
|
21
|
+
const safety_guardrail_service_1 = require("./safety/safety-guardrail.service");
|
|
22
|
+
const summarization_service_1 = require("./summarization/summarization.service");
|
|
23
|
+
const template_service_1 = require("./template/template.service");
|
|
24
|
+
let AiModule = AiModule_1 = class AiModule {
|
|
25
|
+
static forRoot(options = {}) {
|
|
26
|
+
return {
|
|
27
|
+
module: AiModule_1,
|
|
28
|
+
imports: [database_1.DatabaseModule.forFeature([prompt_template_entity_1.PromptTemplate, ai_invocation_log_entity_1.AiInvocationLog])],
|
|
29
|
+
providers: [
|
|
30
|
+
{ provide: ai_options_1.AI_MODULE_OPTIONS, useValue: options },
|
|
31
|
+
provider_factory_service_1.ProviderFactory,
|
|
32
|
+
context_formatter_service_1.ContextFormatterService,
|
|
33
|
+
template_service_1.TemplateService,
|
|
34
|
+
memory_service_1.MemoryService,
|
|
35
|
+
safety_guardrail_service_1.SafetyGuardrailService,
|
|
36
|
+
cost_tracking_service_1.CostTrackingService,
|
|
37
|
+
ai_service_1.AiService,
|
|
38
|
+
summarization_service_1.SummarizationService,
|
|
39
|
+
],
|
|
40
|
+
exports: [
|
|
41
|
+
ai_service_1.AiService,
|
|
42
|
+
template_service_1.TemplateService,
|
|
43
|
+
memory_service_1.MemoryService,
|
|
44
|
+
summarization_service_1.SummarizationService,
|
|
45
|
+
],
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
exports.AiModule = AiModule;
|
|
50
|
+
exports.AiModule = AiModule = AiModule_1 = __decorate([
|
|
51
|
+
(0, common_1.Module)({})
|
|
52
|
+
], AiModule);
|
|
53
|
+
//# sourceMappingURL=ai.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai.module.js","sourceRoot":"","sources":["../../../src/core/ai/ai.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAuD;AACvD,0CAA6C;AAC7C,6CAAyC;AACzC,6CAAkE;AAClE,mFAA8E;AAC9E,wEAAmE;AACnE,kFAAsE;AACtE,8EAAmE;AACnE,4DAAwD;AACxD,kFAAsE;AACtE,gFAA2E;AAC3E,iFAA6E;AAC7E,kEAA8D;AAGvD,IAAM,QAAQ,gBAAd,MAAM,QAAQ;IACnB,MAAM,CAAC,OAAO,CAAC,UAA2B,EAAE;QAC1C,OAAO;YACL,MAAM,EAAE,UAAQ;YAChB,OAAO,EAAE,CAAC,yBAAc,CAAC,UAAU,CAAC,CAAC,uCAAc,EAAE,0CAAe,CAAC,CAAC,CAAC;YACvE,SAAS,EAAE;gBACT,EAAE,OAAO,EAAE,8BAAiB,EAAE,QAAQ,EAAE,OAAO,EAAE;gBACjD,0CAAe;gBACf,mDAAuB;gBACvB,kCAAe;gBACf,8BAAa;gBACb,iDAAsB;gBACtB,2CAAmB;gBACnB,sBAAS;gBACT,4CAAoB;aACrB;YACD,OAAO,EAAE;gBACP,sBAAS;gBACT,kCAAe;gBACf,8BAAa;gBACb,4CAAoB;aACrB;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AAxBY,4BAAQ;mBAAR,QAAQ;IADpB,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,QAAQ,CAwBpB"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { MemoryConfig as Mem0Config } from 'mem0ai/oss';
|
|
2
|
+
import { AiServiceModelConfig } from './ai.types';
|
|
3
|
+
export declare const AI_MODULE_OPTIONS: unique symbol;
|
|
4
|
+
export interface SafetyPattern {
|
|
5
|
+
flag: string;
|
|
6
|
+
pattern: RegExp;
|
|
7
|
+
}
|
|
8
|
+
export interface AiMemoryOptions {
|
|
9
|
+
enabled?: boolean;
|
|
10
|
+
config?: Partial<Mem0Config>;
|
|
11
|
+
factExtractionPrompt?: string;
|
|
12
|
+
fetchTimeoutMs?: number;
|
|
13
|
+
}
|
|
14
|
+
export interface AiSummarizationOptions {
|
|
15
|
+
systemPrompt?: string;
|
|
16
|
+
model?: AiServiceModelConfig;
|
|
17
|
+
targetTokens?: number;
|
|
18
|
+
threshold?: number;
|
|
19
|
+
}
|
|
20
|
+
export interface AiModuleOptions {
|
|
21
|
+
defaultModel?: AiServiceModelConfig;
|
|
22
|
+
summarization?: AiSummarizationOptions;
|
|
23
|
+
safety?: {
|
|
24
|
+
patterns?: SafetyPattern[];
|
|
25
|
+
};
|
|
26
|
+
costRates?: Record<string, {
|
|
27
|
+
input: number;
|
|
28
|
+
output: number;
|
|
29
|
+
}>;
|
|
30
|
+
memory?: AiMemoryOptions;
|
|
31
|
+
}
|
|
32
|
+
export declare const ECHO_MODEL: AiServiceModelConfig;
|
|
33
|
+
export declare const DEFAULT_SUMMARIZATION_PROMPT: string;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_SUMMARIZATION_PROMPT = exports.ECHO_MODEL = exports.AI_MODULE_OPTIONS = void 0;
|
|
4
|
+
exports.AI_MODULE_OPTIONS = Symbol('AI_MODULE_OPTIONS');
|
|
5
|
+
exports.ECHO_MODEL = {
|
|
6
|
+
provider: 'echo',
|
|
7
|
+
name: 'echo',
|
|
8
|
+
};
|
|
9
|
+
exports.DEFAULT_SUMMARIZATION_PROMPT = [
|
|
10
|
+
'Summarize the preceding conversation for context compression.',
|
|
11
|
+
'Preserve concrete facts, timelines, decisions, and open questions; compress wording, not content.',
|
|
12
|
+
'Output plain text only — no markdown, headings, or pleasantries.',
|
|
13
|
+
].join(' ');
|
|
14
|
+
//# sourceMappingURL=ai.options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai.options.js","sourceRoot":"","sources":["../../../src/core/ai/ai.options.ts"],"names":[],"mappings":";;;AAGa,QAAA,iBAAiB,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;AA0ChD,QAAA,UAAU,GAAyB;IAC9C,QAAQ,EAAE,MAAM;IAChB,IAAI,EAAE,MAAM;CACb,CAAC;AAEW,QAAA,4BAA4B,GAAG;IAC1C,+DAA+D;IAC/D,mGAAmG;IACnG,kEAAkE;CACnE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { type SystemModelMessage } from 'ai';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { type AiModuleOptions } from './ai.options';
|
|
4
|
+
import { AiServiceProvider, GenerationResult, InvokeOptions, StreamGenerationResult, StreamInvokeOptions, TextInvokeOptions } from './ai.types';
|
|
5
|
+
import { ContextFormatterService } from './context/context-formatter.service';
|
|
6
|
+
import { CostTrackingService } from './cost/cost-tracking.service';
|
|
7
|
+
import { MemoryService } from './memory/memory.service';
|
|
8
|
+
import { ProviderFactory } from './provider/provider-factory.service';
|
|
9
|
+
import { SafetyGuardrailService } from './safety/safety-guardrail.service';
|
|
10
|
+
import { TemplateService } from './template/template.service';
|
|
11
|
+
export declare class AiService {
|
|
12
|
+
private readonly providerFactory;
|
|
13
|
+
private readonly contextFormatter;
|
|
14
|
+
private readonly templateService;
|
|
15
|
+
private readonly safetyService;
|
|
16
|
+
private readonly costService;
|
|
17
|
+
private readonly memoryService;
|
|
18
|
+
private readonly logger;
|
|
19
|
+
private readonly defaultModel;
|
|
20
|
+
private readonly memoryFetchTimeoutMs;
|
|
21
|
+
constructor(providerFactory: ProviderFactory, contextFormatter: ContextFormatterService, templateService: TemplateService, safetyService: SafetyGuardrailService, costService: CostTrackingService, memoryService: MemoryService, options: AiModuleOptions);
|
|
22
|
+
invoke<T extends z.ZodType>(options: InvokeOptions<T>): Promise<GenerationResult<z.infer<T>>>;
|
|
23
|
+
invokeStream(options: StreamInvokeOptions): Promise<StreamGenerationResult>;
|
|
24
|
+
invokeText(options: TextInvokeOptions): Promise<GenerationResult<string>>;
|
|
25
|
+
private initialErrorParams;
|
|
26
|
+
private prepareInvocation;
|
|
27
|
+
private echoMetadata;
|
|
28
|
+
private buildMetadata;
|
|
29
|
+
private logSuccess;
|
|
30
|
+
private handleError;
|
|
31
|
+
private fetchMemories;
|
|
32
|
+
private buildContextSections;
|
|
33
|
+
}
|
|
34
|
+
export declare function mapMessagesWithCache(sourceMessages: Array<{
|
|
35
|
+
role: 'user' | 'assistant';
|
|
36
|
+
content: string;
|
|
37
|
+
}>, provider: AiServiceProvider, cacheRecentHistory: boolean): Array<{
|
|
38
|
+
role: 'user' | 'assistant';
|
|
39
|
+
content: string;
|
|
40
|
+
providerOptions?: {
|
|
41
|
+
anthropic: {
|
|
42
|
+
cacheControl: {
|
|
43
|
+
type: string;
|
|
44
|
+
ttl: string;
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
}>;
|
|
49
|
+
export declare function buildSystemParam(provider: AiServiceProvider, rawTemplate: string, contextSections: string[]): string | Array<SystemModelMessage>;
|