tychat-contracts 1.4.6 → 1.4.8

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.
@@ -1,3 +1,4 @@
1
+ import { TenantAiTokenStateDto } from '../tenants/tenant-ai-token-state.dto';
1
2
  import { PlanSummaryDto } from './plan-summary.dto';
2
3
  import { TenantLimitsSummaryDto } from './tenant-limits-summary.dto';
3
4
  import { TenantStorageUsageSummaryDto } from './tenant-storage-usage-summary.dto';
@@ -14,6 +15,7 @@ export declare class ConfigurationTenantSummaryDto {
14
15
  plan: PlanSummaryDto | null;
15
16
  limits: TenantLimitsSummaryDto | null;
16
17
  storageUsage: TenantStorageUsageSummaryDto | null;
18
+ aiTokenState: TenantAiTokenStateDto | null;
17
19
  conversationEffectiveLimitBytes?: string;
18
20
  clinicEffectiveLimitBytes?: string;
19
21
  extraStorageCharge?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"configuration-tenant-summary.dto.d.ts","sourceRoot":"","sources":["../../src/configurations/configuration-tenant-summary.dto.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AAElF;;GAEG;AACH,qBAAa,6BAA6B;IAExC,IAAI,EAAE,MAAM,CAAC;IAGb,IAAI,EAAE,MAAM,CAAC;IAGb,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAGxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAGzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAGxB,MAAM,EAAE,QAAQ,GAAG,UAAU,CAAC;IAO9B,IAAI,EAAE,cAAc,GAAG,IAAI,CAAC;IAO5B,MAAM,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAOtC,YAAY,EAAE,4BAA4B,GAAG,IAAI,CAAC;IAGlD,+BAA+B,CAAC,EAAE,MAAM,CAAC;IAGzC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IAKnC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAK5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B"}
1
+ {"version":3,"file":"configuration-tenant-summary.dto.d.ts","sourceRoot":"","sources":["../../src/configurations/configuration-tenant-summary.dto.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AAElF;;GAEG;AACH,qBAAa,6BAA6B;IAExC,IAAI,EAAE,MAAM,CAAC;IAGb,IAAI,EAAE,MAAM,CAAC;IAGb,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAGxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAGzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAGxB,MAAM,EAAE,QAAQ,GAAG,UAAU,CAAC;IAO9B,IAAI,EAAE,cAAc,GAAG,IAAI,CAAC;IAO5B,MAAM,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAOtC,YAAY,EAAE,4BAA4B,GAAG,IAAI,CAAC;IAOlD,YAAY,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAG3C,+BAA+B,CAAC,EAAE,MAAM,CAAC;IAGzC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IAKnC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAK5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B"}
@@ -11,6 +11,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.ConfigurationTenantSummaryDto = void 0;
13
13
  const swagger_1 = require("@nestjs/swagger");
14
+ const tenant_ai_token_state_dto_1 = require("../tenants/tenant-ai-token-state.dto");
14
15
  const plan_summary_dto_1 = require("./plan-summary.dto");
15
16
  const tenant_limits_summary_dto_1 = require("./tenant-limits-summary.dto");
16
17
  const tenant_storage_usage_summary_dto_1 = require("./tenant-storage-usage-summary.dto");
@@ -27,6 +28,7 @@ class ConfigurationTenantSummaryDto {
27
28
  plan;
28
29
  limits;
29
30
  storageUsage;
31
+ aiTokenState;
30
32
  conversationEffectiveLimitBytes;
31
33
  clinicEffectiveLimitBytes;
32
34
  extraStorageCharge;
@@ -81,6 +83,14 @@ __decorate([
81
83
  }),
82
84
  __metadata("design:type", Object)
83
85
  ], ConfigurationTenantSummaryDto.prototype, "storageUsage", void 0);
86
+ __decorate([
87
+ (0, swagger_1.ApiPropertyOptional)({
88
+ description: 'Saldo e cota de tokens de IA no ciclo atual',
89
+ type: () => tenant_ai_token_state_dto_1.TenantAiTokenStateDto,
90
+ nullable: true,
91
+ }),
92
+ __metadata("design:type", Object)
93
+ ], ConfigurationTenantSummaryDto.prototype, "aiTokenState", void 0);
84
94
  __decorate([
85
95
  (0, swagger_1.ApiPropertyOptional)({ description: 'Limite efetivo de conversas em bytes (plano + extras)' }),
86
96
  __metadata("design:type", String)
@@ -4,4 +4,6 @@ export * from './delete-object.dto';
4
4
  export * from './presigned-url-response.dto';
5
5
  export * from './exists-query.dto';
6
6
  export * from './issue-upload-token.dto';
7
+ export * from './presign-download-rpc.dto';
8
+ export * from './storage-rmq-patterns';
7
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC"}
@@ -20,3 +20,5 @@ __exportStar(require("./delete-object.dto"), exports);
20
20
  __exportStar(require("./presigned-url-response.dto"), exports);
21
21
  __exportStar(require("./exists-query.dto"), exports);
22
22
  __exportStar(require("./issue-upload-token.dto"), exports);
23
+ __exportStar(require("./presign-download-rpc.dto"), exports);
24
+ __exportStar(require("./storage-rmq-patterns"), exports);
@@ -0,0 +1,12 @@
1
+ /** RMQ: `tychat-api` pede URL presigned GET após validar o documento no patient-service (confiança interna). */
2
+ export declare class PresignDownloadRpcDto {
3
+ tenantSlug: string;
4
+ objectKey: string;
5
+ expiresInSeconds?: number;
6
+ }
7
+ export declare class PresignDownloadRpcResultDto {
8
+ url: string;
9
+ expiresAt: number;
10
+ expiresInSeconds: number;
11
+ }
12
+ //# sourceMappingURL=presign-download-rpc.dto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presign-download-rpc.dto.d.ts","sourceRoot":"","sources":["../../src/storage/presign-download-rpc.dto.ts"],"names":[],"mappings":"AAGA,gHAAgH;AAChH,qBAAa,qBAAqB;IAKhC,UAAU,EAAE,MAAM,CAAC;IAMnB,SAAS,EAAE,MAAM,CAAC;IAUlB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,2BAA2B;IAEtC,GAAG,EAAE,MAAM,CAAC;IAGZ,SAAS,EAAE,MAAM,CAAC;IAGlB,gBAAgB,EAAE,MAAM,CAAC;CAC1B"}
@@ -0,0 +1,64 @@
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 __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.PresignDownloadRpcResultDto = exports.PresignDownloadRpcDto = void 0;
13
+ const swagger_1 = require("@nestjs/swagger");
14
+ const class_validator_1 = require("class-validator");
15
+ /** RMQ: `tychat-api` pede URL presigned GET após validar o documento no patient-service (confiança interna). */
16
+ class PresignDownloadRpcDto {
17
+ tenantSlug;
18
+ objectKey;
19
+ expiresInSeconds;
20
+ }
21
+ exports.PresignDownloadRpcDto = PresignDownloadRpcDto;
22
+ __decorate([
23
+ (0, swagger_1.ApiProperty)({ description: 'Tenant slug (deve corresponder ao prefixo do objectKey)', example: 'clinica_sampaio' }),
24
+ (0, class_validator_1.IsString)(),
25
+ (0, class_validator_1.MinLength)(1),
26
+ (0, class_validator_1.MaxLength)(255),
27
+ __metadata("design:type", String)
28
+ ], PresignDownloadRpcDto.prototype, "tenantSlug", void 0);
29
+ __decorate([
30
+ (0, swagger_1.ApiProperty)({ description: 'Chave S3 do objeto', example: 'tenants/clinica_sampaio/patients/.../doc.pdf' }),
31
+ (0, class_validator_1.IsString)(),
32
+ (0, class_validator_1.MinLength)(1),
33
+ (0, class_validator_1.MaxLength)(2048),
34
+ __metadata("design:type", String)
35
+ ], PresignDownloadRpcDto.prototype, "objectKey", void 0);
36
+ __decorate([
37
+ (0, swagger_1.ApiPropertyOptional)({
38
+ description: 'TTL da URL em segundos (60–3600; predefinido no storage)',
39
+ example: 300,
40
+ }),
41
+ (0, class_validator_1.IsOptional)(),
42
+ (0, class_validator_1.IsInt)(),
43
+ (0, class_validator_1.Min)(60),
44
+ (0, class_validator_1.Max)(3600),
45
+ __metadata("design:type", Number)
46
+ ], PresignDownloadRpcDto.prototype, "expiresInSeconds", void 0);
47
+ class PresignDownloadRpcResultDto {
48
+ url;
49
+ expiresAt;
50
+ expiresInSeconds;
51
+ }
52
+ exports.PresignDownloadRpcResultDto = PresignDownloadRpcResultDto;
53
+ __decorate([
54
+ (0, swagger_1.ApiProperty)({ description: 'URL GET presigned' }),
55
+ __metadata("design:type", String)
56
+ ], PresignDownloadRpcResultDto.prototype, "url", void 0);
57
+ __decorate([
58
+ (0, swagger_1.ApiProperty)({ description: 'Unix timestamp (ms) quando a URL expira' }),
59
+ __metadata("design:type", Number)
60
+ ], PresignDownloadRpcResultDto.prototype, "expiresAt", void 0);
61
+ __decorate([
62
+ (0, swagger_1.ApiProperty)({ description: 'TTL em segundos' }),
63
+ __metadata("design:type", Number)
64
+ ], PresignDownloadRpcResultDto.prototype, "expiresInSeconds", void 0);
@@ -0,0 +1,5 @@
1
+ /** Pedido de token OTT para HTTP POST /storage/presign-upload */
2
+ export declare const STORAGE_ISSUE_UPLOAD_TOKEN = "storage.issueUploadToken";
3
+ /** URL presigned GET (chamada interna; sem JWT HTTP para o storage) */
4
+ export declare const STORAGE_PRESIGN_DOWNLOAD = "storage.presignDownload";
5
+ //# sourceMappingURL=storage-rmq-patterns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-rmq-patterns.d.ts","sourceRoot":"","sources":["../../src/storage/storage-rmq-patterns.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,eAAO,MAAM,0BAA0B,6BAA6B,CAAC;AAErE,uEAAuE;AACvE,eAAO,MAAM,wBAAwB,4BAA4B,CAAC"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.STORAGE_PRESIGN_DOWNLOAD = exports.STORAGE_ISSUE_UPLOAD_TOKEN = void 0;
4
+ /** Pedido de token OTT para HTTP POST /storage/presign-upload */
5
+ exports.STORAGE_ISSUE_UPLOAD_TOKEN = 'storage.issueUploadToken';
6
+ /** URL presigned GET (chamada interna; sem JWT HTTP para o storage) */
7
+ exports.STORAGE_PRESIGN_DOWNLOAD = 'storage.presignDownload';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tychat-contracts",
3
- "version": "1.4.6",
3
+ "version": "1.4.8",
4
4
  "description": "DTOs compartilhados com class-validator (API e microserviços)",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1,4 +1,5 @@
1
1
  import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
2
+ import { TenantAiTokenStateDto } from '../tenants/tenant-ai-token-state.dto';
2
3
  import { PlanSummaryDto } from './plan-summary.dto';
3
4
  import { TenantLimitsSummaryDto } from './tenant-limits-summary.dto';
4
5
  import { TenantStorageUsageSummaryDto } from './tenant-storage-usage-summary.dto';
@@ -46,6 +47,13 @@ export class ConfigurationTenantSummaryDto {
46
47
  })
47
48
  storageUsage: TenantStorageUsageSummaryDto | null;
48
49
 
50
+ @ApiPropertyOptional({
51
+ description: 'Saldo e cota de tokens de IA no ciclo atual',
52
+ type: () => TenantAiTokenStateDto,
53
+ nullable: true,
54
+ })
55
+ aiTokenState: TenantAiTokenStateDto | null;
56
+
49
57
  @ApiPropertyOptional({ description: 'Limite efetivo de conversas em bytes (plano + extras)' })
50
58
  conversationEffectiveLimitBytes?: string;
51
59
 
@@ -4,3 +4,5 @@ export * from './delete-object.dto';
4
4
  export * from './presigned-url-response.dto';
5
5
  export * from './exists-query.dto';
6
6
  export * from './issue-upload-token.dto';
7
+ export * from './presign-download-rpc.dto';
8
+ export * from './storage-rmq-patterns';
@@ -0,0 +1,38 @@
1
+ import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
2
+ import { IsInt, IsOptional, IsString, Max, MaxLength, Min, MinLength } from 'class-validator';
3
+
4
+ /** RMQ: `tychat-api` pede URL presigned GET após validar o documento no patient-service (confiança interna). */
5
+ export class PresignDownloadRpcDto {
6
+ @ApiProperty({ description: 'Tenant slug (deve corresponder ao prefixo do objectKey)', example: 'clinica_sampaio' })
7
+ @IsString()
8
+ @MinLength(1)
9
+ @MaxLength(255)
10
+ tenantSlug: string;
11
+
12
+ @ApiProperty({ description: 'Chave S3 do objeto', example: 'tenants/clinica_sampaio/patients/.../doc.pdf' })
13
+ @IsString()
14
+ @MinLength(1)
15
+ @MaxLength(2048)
16
+ objectKey: string;
17
+
18
+ @ApiPropertyOptional({
19
+ description: 'TTL da URL em segundos (60–3600; predefinido no storage)',
20
+ example: 300,
21
+ })
22
+ @IsOptional()
23
+ @IsInt()
24
+ @Min(60)
25
+ @Max(3600)
26
+ expiresInSeconds?: number;
27
+ }
28
+
29
+ export class PresignDownloadRpcResultDto {
30
+ @ApiProperty({ description: 'URL GET presigned' })
31
+ url: string;
32
+
33
+ @ApiProperty({ description: 'Unix timestamp (ms) quando a URL expira' })
34
+ expiresAt: number;
35
+
36
+ @ApiProperty({ description: 'TTL em segundos' })
37
+ expiresInSeconds: number;
38
+ }
@@ -0,0 +1,5 @@
1
+ /** Pedido de token OTT para HTTP POST /storage/presign-upload */
2
+ export const STORAGE_ISSUE_UPLOAD_TOKEN = 'storage.issueUploadToken';
3
+
4
+ /** URL presigned GET (chamada interna; sem JWT HTTP para o storage) */
5
+ export const STORAGE_PRESIGN_DOWNLOAD = 'storage.presignDownload';