clhq-postgres-module 1.1.0-alpha.182 → 1.1.0-alpha.184
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/entities/index.d.ts +2 -0
- package/dist/entities/index.js +2 -0
- package/dist/entities/recording-chunk.entity.d.ts +11 -0
- package/dist/entities/recording-chunk.entity.js +58 -0
- package/dist/entities/recording-session.entity.d.ts +65 -0
- package/dist/entities/recording-session.entity.js +161 -0
- package/dist/migrations/1713000000054-CreateRecordingSessionsAndChunks.d.ts +6 -0
- package/dist/migrations/1713000000054-CreateRecordingSessionsAndChunks.js +82 -0
- package/dist/migrations/1713000000055-CreateAgentJobsTable.d.ts +6 -0
- package/dist/migrations/1713000000055-CreateAgentJobsTable.js +149 -0
- package/dist/postgres.module.js +2 -0
- package/dist/repositories/index.d.ts +2 -0
- package/dist/repositories/index.js +6 -1
- package/dist/repositories/recording-chunk.repository.d.ts +9 -0
- package/dist/repositories/recording-chunk.repository.js +41 -0
- package/dist/repositories/recording-session.repository.d.ts +10 -0
- package/dist/repositories/recording-session.repository.js +46 -0
- package/dist/repositories/repository.module.js +4 -0
- package/package.json +1 -1
package/dist/entities/index.d.ts
CHANGED
|
@@ -44,6 +44,8 @@ export * from './asset-category.entity';
|
|
|
44
44
|
export * from './project-brand-override.entity';
|
|
45
45
|
export * from './ai-video-job.entity';
|
|
46
46
|
export * from './ai-video-scene-task.entity';
|
|
47
|
+
export * from './recording-session.entity';
|
|
48
|
+
export * from './recording-chunk.entity';
|
|
47
49
|
export * from './social-account.entity';
|
|
48
50
|
export * from './platform-config.entity';
|
|
49
51
|
export * from './social-post.entity';
|
package/dist/entities/index.js
CHANGED
|
@@ -62,6 +62,8 @@ __exportStar(require("./asset-category.entity"), exports);
|
|
|
62
62
|
__exportStar(require("./project-brand-override.entity"), exports);
|
|
63
63
|
__exportStar(require("./ai-video-job.entity"), exports);
|
|
64
64
|
__exportStar(require("./ai-video-scene-task.entity"), exports);
|
|
65
|
+
__exportStar(require("./recording-session.entity"), exports);
|
|
66
|
+
__exportStar(require("./recording-chunk.entity"), exports);
|
|
65
67
|
__exportStar(require("./social-account.entity"), exports);
|
|
66
68
|
__exportStar(require("./platform-config.entity"), exports);
|
|
67
69
|
__exportStar(require("./social-post.entity"), exports);
|
|
@@ -0,0 +1,58 @@
|
|
|
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.RecordingChunk = void 0;
|
|
13
|
+
const typeorm_1 = require("typeorm");
|
|
14
|
+
let RecordingChunk = class RecordingChunk {
|
|
15
|
+
};
|
|
16
|
+
exports.RecordingChunk = RecordingChunk;
|
|
17
|
+
__decorate([
|
|
18
|
+
(0, typeorm_1.PrimaryGeneratedColumn)('uuid'),
|
|
19
|
+
__metadata("design:type", String)
|
|
20
|
+
], RecordingChunk.prototype, "id", void 0);
|
|
21
|
+
__decorate([
|
|
22
|
+
(0, typeorm_1.Column)({ name: 'session_id', type: 'uuid' }),
|
|
23
|
+
__metadata("design:type", String)
|
|
24
|
+
], RecordingChunk.prototype, "sessionId", void 0);
|
|
25
|
+
__decorate([
|
|
26
|
+
(0, typeorm_1.Column)({ type: 'integer' }),
|
|
27
|
+
__metadata("design:type", Number)
|
|
28
|
+
], RecordingChunk.prototype, "seq", void 0);
|
|
29
|
+
__decorate([
|
|
30
|
+
(0, typeorm_1.Column)({ name: 's3_key', type: 'text' }),
|
|
31
|
+
__metadata("design:type", String)
|
|
32
|
+
], RecordingChunk.prototype, "s3Key", void 0);
|
|
33
|
+
__decorate([
|
|
34
|
+
(0, typeorm_1.Column)({ type: 'varchar', length: 64 }),
|
|
35
|
+
__metadata("design:type", String)
|
|
36
|
+
], RecordingChunk.prototype, "etag", void 0);
|
|
37
|
+
__decorate([
|
|
38
|
+
(0, typeorm_1.Column)({ type: 'bigint' }),
|
|
39
|
+
__metadata("design:type", String)
|
|
40
|
+
], RecordingChunk.prototype, "size", void 0);
|
|
41
|
+
__decorate([
|
|
42
|
+
(0, typeorm_1.Column)({ name: 'duration_ms', type: 'integer' }),
|
|
43
|
+
__metadata("design:type", Number)
|
|
44
|
+
], RecordingChunk.prototype, "durationMs", void 0);
|
|
45
|
+
__decorate([
|
|
46
|
+
(0, typeorm_1.Column)({ name: 'captured_at', type: 'timestamp', nullable: true }),
|
|
47
|
+
__metadata("design:type", Date)
|
|
48
|
+
], RecordingChunk.prototype, "capturedAt", void 0);
|
|
49
|
+
__decorate([
|
|
50
|
+
(0, typeorm_1.CreateDateColumn)({ name: 'created_at' }),
|
|
51
|
+
__metadata("design:type", Date)
|
|
52
|
+
], RecordingChunk.prototype, "createdAt", void 0);
|
|
53
|
+
exports.RecordingChunk = RecordingChunk = __decorate([
|
|
54
|
+
(0, typeorm_1.Entity)('recording_chunks'),
|
|
55
|
+
(0, typeorm_1.Index)(['sessionId']),
|
|
56
|
+
(0, typeorm_1.Index)(['sessionId', 'seq']),
|
|
57
|
+
(0, typeorm_1.Unique)('uq_recording_chunks_session_seq', ['sessionId', 'seq'])
|
|
58
|
+
], RecordingChunk);
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
export declare enum RecordingKind {
|
|
2
|
+
AUDIO = "audio",
|
|
3
|
+
VIDEO = "video",
|
|
4
|
+
SCREEN = "screen"
|
|
5
|
+
}
|
|
6
|
+
export declare enum RecordingStatus {
|
|
7
|
+
INITIALIZING = "initializing",
|
|
8
|
+
RECORDING = "recording",
|
|
9
|
+
PAUSED = "paused",
|
|
10
|
+
FINALIZING = "finalizing",
|
|
11
|
+
PROCESSING = "processing",
|
|
12
|
+
READY = "ready",
|
|
13
|
+
FAILED = "failed",
|
|
14
|
+
DISCARDED = "discarded"
|
|
15
|
+
}
|
|
16
|
+
export interface RecordingChunkStrategy {
|
|
17
|
+
targetSeconds: number;
|
|
18
|
+
maxBytes: number;
|
|
19
|
+
}
|
|
20
|
+
export interface RecordingEnhancementFlags {
|
|
21
|
+
autoSubtitle: boolean;
|
|
22
|
+
silenceRemoval: boolean;
|
|
23
|
+
fillerWordStrip: boolean;
|
|
24
|
+
voiceNormalize: boolean;
|
|
25
|
+
aiChapters: boolean;
|
|
26
|
+
musicBedUrl?: string | null;
|
|
27
|
+
}
|
|
28
|
+
export interface RecordingPendingChildJobs {
|
|
29
|
+
transcode?: 'pending' | 'done' | 'failed';
|
|
30
|
+
subtitle?: 'pending' | 'done' | 'failed';
|
|
31
|
+
waveform?: 'pending' | 'done' | 'failed';
|
|
32
|
+
thumbnail?: 'pending' | 'done' | 'failed';
|
|
33
|
+
enhancements?: Record<string, 'pending' | 'done' | 'failed'>;
|
|
34
|
+
}
|
|
35
|
+
export declare class RecordingSession {
|
|
36
|
+
id: string;
|
|
37
|
+
userId: string;
|
|
38
|
+
workspaceId: string | null;
|
|
39
|
+
projectId: string | null;
|
|
40
|
+
kind: RecordingKind;
|
|
41
|
+
status: RecordingStatus;
|
|
42
|
+
mimeType: string;
|
|
43
|
+
chunkSeqNext: number;
|
|
44
|
+
totalBytes: string;
|
|
45
|
+
durationEstimateMs: string;
|
|
46
|
+
chunkStrategy: RecordingChunkStrategy;
|
|
47
|
+
enhancements: RecordingEnhancementFlags;
|
|
48
|
+
masterS3Key: string | null;
|
|
49
|
+
masterSize: string | null;
|
|
50
|
+
masterEtag: string | null;
|
|
51
|
+
masterDurationSeconds: string | null;
|
|
52
|
+
hlsManifestS3Key: string | null;
|
|
53
|
+
subtitleVideoId: string | null;
|
|
54
|
+
waveformS3Key: string | null;
|
|
55
|
+
thumbnailS3Key: string | null;
|
|
56
|
+
pendingChildJobs: RecordingPendingChildJobs | null;
|
|
57
|
+
assetId: string | null;
|
|
58
|
+
reservationId: string | null;
|
|
59
|
+
title: string | null;
|
|
60
|
+
errorMessage: string | null;
|
|
61
|
+
createdAt: Date;
|
|
62
|
+
updatedAt: Date;
|
|
63
|
+
finalizedAt: Date | null;
|
|
64
|
+
readyAt: Date | null;
|
|
65
|
+
}
|
|
@@ -0,0 +1,161 @@
|
|
|
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.RecordingSession = exports.RecordingStatus = exports.RecordingKind = void 0;
|
|
13
|
+
const typeorm_1 = require("typeorm");
|
|
14
|
+
var RecordingKind;
|
|
15
|
+
(function (RecordingKind) {
|
|
16
|
+
RecordingKind["AUDIO"] = "audio";
|
|
17
|
+
RecordingKind["VIDEO"] = "video";
|
|
18
|
+
RecordingKind["SCREEN"] = "screen";
|
|
19
|
+
})(RecordingKind || (exports.RecordingKind = RecordingKind = {}));
|
|
20
|
+
var RecordingStatus;
|
|
21
|
+
(function (RecordingStatus) {
|
|
22
|
+
RecordingStatus["INITIALIZING"] = "initializing";
|
|
23
|
+
RecordingStatus["RECORDING"] = "recording";
|
|
24
|
+
RecordingStatus["PAUSED"] = "paused";
|
|
25
|
+
RecordingStatus["FINALIZING"] = "finalizing";
|
|
26
|
+
RecordingStatus["PROCESSING"] = "processing";
|
|
27
|
+
RecordingStatus["READY"] = "ready";
|
|
28
|
+
RecordingStatus["FAILED"] = "failed";
|
|
29
|
+
RecordingStatus["DISCARDED"] = "discarded";
|
|
30
|
+
})(RecordingStatus || (exports.RecordingStatus = RecordingStatus = {}));
|
|
31
|
+
let RecordingSession = class RecordingSession {
|
|
32
|
+
};
|
|
33
|
+
exports.RecordingSession = RecordingSession;
|
|
34
|
+
__decorate([
|
|
35
|
+
(0, typeorm_1.PrimaryGeneratedColumn)('uuid'),
|
|
36
|
+
__metadata("design:type", String)
|
|
37
|
+
], RecordingSession.prototype, "id", void 0);
|
|
38
|
+
__decorate([
|
|
39
|
+
(0, typeorm_1.Column)({ name: 'user_id', type: 'uuid' }),
|
|
40
|
+
__metadata("design:type", String)
|
|
41
|
+
], RecordingSession.prototype, "userId", void 0);
|
|
42
|
+
__decorate([
|
|
43
|
+
(0, typeorm_1.Column)({ name: 'workspace_id', type: 'uuid', nullable: true }),
|
|
44
|
+
__metadata("design:type", String)
|
|
45
|
+
], RecordingSession.prototype, "workspaceId", void 0);
|
|
46
|
+
__decorate([
|
|
47
|
+
(0, typeorm_1.Column)({ name: 'project_id', type: 'varchar', length: 255, nullable: true }),
|
|
48
|
+
__metadata("design:type", String)
|
|
49
|
+
], RecordingSession.prototype, "projectId", void 0);
|
|
50
|
+
__decorate([
|
|
51
|
+
(0, typeorm_1.Column)({ type: 'enum', enum: RecordingKind }),
|
|
52
|
+
__metadata("design:type", String)
|
|
53
|
+
], RecordingSession.prototype, "kind", void 0);
|
|
54
|
+
__decorate([
|
|
55
|
+
(0, typeorm_1.Column)({ type: 'enum', enum: RecordingStatus, default: RecordingStatus.INITIALIZING }),
|
|
56
|
+
__metadata("design:type", String)
|
|
57
|
+
], RecordingSession.prototype, "status", void 0);
|
|
58
|
+
__decorate([
|
|
59
|
+
(0, typeorm_1.Column)({ name: 'mime_type', type: 'varchar', length: 100 }),
|
|
60
|
+
__metadata("design:type", String)
|
|
61
|
+
], RecordingSession.prototype, "mimeType", void 0);
|
|
62
|
+
__decorate([
|
|
63
|
+
(0, typeorm_1.Column)({ name: 'chunk_seq_next', type: 'integer', default: 0 }),
|
|
64
|
+
__metadata("design:type", Number)
|
|
65
|
+
], RecordingSession.prototype, "chunkSeqNext", void 0);
|
|
66
|
+
__decorate([
|
|
67
|
+
(0, typeorm_1.Column)({ name: 'total_bytes', type: 'bigint', default: 0 }),
|
|
68
|
+
__metadata("design:type", String)
|
|
69
|
+
], RecordingSession.prototype, "totalBytes", void 0);
|
|
70
|
+
__decorate([
|
|
71
|
+
(0, typeorm_1.Column)({ name: 'duration_estimate_ms', type: 'bigint', default: 0 }),
|
|
72
|
+
__metadata("design:type", String)
|
|
73
|
+
], RecordingSession.prototype, "durationEstimateMs", void 0);
|
|
74
|
+
__decorate([
|
|
75
|
+
(0, typeorm_1.Column)({ name: 'chunk_strategy', type: 'jsonb' }),
|
|
76
|
+
__metadata("design:type", Object)
|
|
77
|
+
], RecordingSession.prototype, "chunkStrategy", void 0);
|
|
78
|
+
__decorate([
|
|
79
|
+
(0, typeorm_1.Column)({ type: 'jsonb' }),
|
|
80
|
+
__metadata("design:type", Object)
|
|
81
|
+
], RecordingSession.prototype, "enhancements", void 0);
|
|
82
|
+
__decorate([
|
|
83
|
+
(0, typeorm_1.Column)({ name: 'master_s3_key', type: 'text', nullable: true }),
|
|
84
|
+
__metadata("design:type", String)
|
|
85
|
+
], RecordingSession.prototype, "masterS3Key", void 0);
|
|
86
|
+
__decorate([
|
|
87
|
+
(0, typeorm_1.Column)({ name: 'master_size', type: 'bigint', nullable: true }),
|
|
88
|
+
__metadata("design:type", String)
|
|
89
|
+
], RecordingSession.prototype, "masterSize", void 0);
|
|
90
|
+
__decorate([
|
|
91
|
+
(0, typeorm_1.Column)({ name: 'master_etag', type: 'varchar', length: 64, nullable: true }),
|
|
92
|
+
__metadata("design:type", String)
|
|
93
|
+
], RecordingSession.prototype, "masterEtag", void 0);
|
|
94
|
+
__decorate([
|
|
95
|
+
(0, typeorm_1.Column)({
|
|
96
|
+
name: 'master_duration_seconds',
|
|
97
|
+
type: 'decimal',
|
|
98
|
+
precision: 10,
|
|
99
|
+
scale: 3,
|
|
100
|
+
nullable: true,
|
|
101
|
+
}),
|
|
102
|
+
__metadata("design:type", String)
|
|
103
|
+
], RecordingSession.prototype, "masterDurationSeconds", void 0);
|
|
104
|
+
__decorate([
|
|
105
|
+
(0, typeorm_1.Column)({ name: 'hls_manifest_s3_key', type: 'text', nullable: true }),
|
|
106
|
+
__metadata("design:type", String)
|
|
107
|
+
], RecordingSession.prototype, "hlsManifestS3Key", void 0);
|
|
108
|
+
__decorate([
|
|
109
|
+
(0, typeorm_1.Column)({ name: 'subtitle_video_id', type: 'varchar', length: 255, nullable: true }),
|
|
110
|
+
__metadata("design:type", String)
|
|
111
|
+
], RecordingSession.prototype, "subtitleVideoId", void 0);
|
|
112
|
+
__decorate([
|
|
113
|
+
(0, typeorm_1.Column)({ name: 'waveform_s3_key', type: 'text', nullable: true }),
|
|
114
|
+
__metadata("design:type", String)
|
|
115
|
+
], RecordingSession.prototype, "waveformS3Key", void 0);
|
|
116
|
+
__decorate([
|
|
117
|
+
(0, typeorm_1.Column)({ name: 'thumbnail_s3_key', type: 'text', nullable: true }),
|
|
118
|
+
__metadata("design:type", String)
|
|
119
|
+
], RecordingSession.prototype, "thumbnailS3Key", void 0);
|
|
120
|
+
__decorate([
|
|
121
|
+
(0, typeorm_1.Column)({ name: 'pending_child_jobs', type: 'jsonb', nullable: true }),
|
|
122
|
+
__metadata("design:type", Object)
|
|
123
|
+
], RecordingSession.prototype, "pendingChildJobs", void 0);
|
|
124
|
+
__decorate([
|
|
125
|
+
(0, typeorm_1.Column)({ name: 'asset_id', type: 'uuid', nullable: true }),
|
|
126
|
+
__metadata("design:type", String)
|
|
127
|
+
], RecordingSession.prototype, "assetId", void 0);
|
|
128
|
+
__decorate([
|
|
129
|
+
(0, typeorm_1.Column)({ name: 'reservation_id', type: 'varchar', length: 255, nullable: true }),
|
|
130
|
+
__metadata("design:type", String)
|
|
131
|
+
], RecordingSession.prototype, "reservationId", void 0);
|
|
132
|
+
__decorate([
|
|
133
|
+
(0, typeorm_1.Column)({ type: 'varchar', length: 255, nullable: true }),
|
|
134
|
+
__metadata("design:type", String)
|
|
135
|
+
], RecordingSession.prototype, "title", void 0);
|
|
136
|
+
__decorate([
|
|
137
|
+
(0, typeorm_1.Column)({ name: 'error_message', type: 'text', nullable: true }),
|
|
138
|
+
__metadata("design:type", String)
|
|
139
|
+
], RecordingSession.prototype, "errorMessage", void 0);
|
|
140
|
+
__decorate([
|
|
141
|
+
(0, typeorm_1.CreateDateColumn)({ name: 'created_at' }),
|
|
142
|
+
__metadata("design:type", Date)
|
|
143
|
+
], RecordingSession.prototype, "createdAt", void 0);
|
|
144
|
+
__decorate([
|
|
145
|
+
(0, typeorm_1.UpdateDateColumn)({ name: 'updated_at' }),
|
|
146
|
+
__metadata("design:type", Date)
|
|
147
|
+
], RecordingSession.prototype, "updatedAt", void 0);
|
|
148
|
+
__decorate([
|
|
149
|
+
(0, typeorm_1.Column)({ name: 'finalized_at', type: 'timestamp', nullable: true }),
|
|
150
|
+
__metadata("design:type", Date)
|
|
151
|
+
], RecordingSession.prototype, "finalizedAt", void 0);
|
|
152
|
+
__decorate([
|
|
153
|
+
(0, typeorm_1.Column)({ name: 'ready_at', type: 'timestamp', nullable: true }),
|
|
154
|
+
__metadata("design:type", Date)
|
|
155
|
+
], RecordingSession.prototype, "readyAt", void 0);
|
|
156
|
+
exports.RecordingSession = RecordingSession = __decorate([
|
|
157
|
+
(0, typeorm_1.Entity)('recording_sessions'),
|
|
158
|
+
(0, typeorm_1.Index)(['userId']),
|
|
159
|
+
(0, typeorm_1.Index)(['status']),
|
|
160
|
+
(0, typeorm_1.Index)(['createdAt'])
|
|
161
|
+
], RecordingSession);
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { MigrationInterface, QueryRunner } from 'typeorm';
|
|
2
|
+
export declare class CreateRecordingSessionsAndChunks1713000000054 implements MigrationInterface {
|
|
3
|
+
name: string;
|
|
4
|
+
up(queryRunner: QueryRunner): Promise<void>;
|
|
5
|
+
down(queryRunner: QueryRunner): Promise<void>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CreateRecordingSessionsAndChunks1713000000054 = void 0;
|
|
4
|
+
class CreateRecordingSessionsAndChunks1713000000054 {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.name = 'CreateRecordingSessionsAndChunks1713000000054';
|
|
7
|
+
}
|
|
8
|
+
async up(queryRunner) {
|
|
9
|
+
await queryRunner.query(`
|
|
10
|
+
DO $$ BEGIN
|
|
11
|
+
CREATE TYPE recording_kind_enum AS ENUM ('audio','video','screen');
|
|
12
|
+
EXCEPTION WHEN duplicate_object THEN NULL;
|
|
13
|
+
END $$;
|
|
14
|
+
`);
|
|
15
|
+
await queryRunner.query(`
|
|
16
|
+
DO $$ BEGIN
|
|
17
|
+
CREATE TYPE recording_status_enum AS ENUM (
|
|
18
|
+
'initializing','recording','paused','finalizing','processing','ready','failed','discarded'
|
|
19
|
+
);
|
|
20
|
+
EXCEPTION WHEN duplicate_object THEN NULL;
|
|
21
|
+
END $$;
|
|
22
|
+
`);
|
|
23
|
+
await queryRunner.query(`
|
|
24
|
+
CREATE TABLE IF NOT EXISTS recording_sessions (
|
|
25
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
26
|
+
user_id UUID NOT NULL,
|
|
27
|
+
workspace_id UUID,
|
|
28
|
+
project_id VARCHAR(255),
|
|
29
|
+
kind recording_kind_enum NOT NULL,
|
|
30
|
+
status recording_status_enum NOT NULL DEFAULT 'initializing',
|
|
31
|
+
mime_type VARCHAR(100) NOT NULL,
|
|
32
|
+
chunk_seq_next INTEGER NOT NULL DEFAULT 0,
|
|
33
|
+
total_bytes BIGINT NOT NULL DEFAULT 0,
|
|
34
|
+
duration_estimate_ms BIGINT NOT NULL DEFAULT 0,
|
|
35
|
+
chunk_strategy JSONB NOT NULL,
|
|
36
|
+
enhancements JSONB NOT NULL,
|
|
37
|
+
master_s3_key TEXT,
|
|
38
|
+
master_size BIGINT,
|
|
39
|
+
master_etag VARCHAR(64),
|
|
40
|
+
master_duration_seconds DECIMAL(10,3),
|
|
41
|
+
hls_manifest_s3_key TEXT,
|
|
42
|
+
subtitle_video_id VARCHAR(255),
|
|
43
|
+
waveform_s3_key TEXT,
|
|
44
|
+
thumbnail_s3_key TEXT,
|
|
45
|
+
pending_child_jobs JSONB,
|
|
46
|
+
asset_id UUID,
|
|
47
|
+
reservation_id VARCHAR(255),
|
|
48
|
+
title VARCHAR(255),
|
|
49
|
+
error_message TEXT,
|
|
50
|
+
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
51
|
+
updated_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
52
|
+
finalized_at TIMESTAMP,
|
|
53
|
+
ready_at TIMESTAMP
|
|
54
|
+
)
|
|
55
|
+
`);
|
|
56
|
+
await queryRunner.query(`CREATE INDEX IF NOT EXISTS idx_recording_sessions_user_id ON recording_sessions(user_id)`);
|
|
57
|
+
await queryRunner.query(`CREATE INDEX IF NOT EXISTS idx_recording_sessions_status ON recording_sessions(status)`);
|
|
58
|
+
await queryRunner.query(`CREATE INDEX IF NOT EXISTS idx_recording_sessions_created_at ON recording_sessions(created_at DESC)`);
|
|
59
|
+
await queryRunner.query(`
|
|
60
|
+
CREATE TABLE IF NOT EXISTS recording_chunks (
|
|
61
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
62
|
+
session_id UUID NOT NULL REFERENCES recording_sessions(id) ON DELETE CASCADE,
|
|
63
|
+
seq INTEGER NOT NULL,
|
|
64
|
+
s3_key TEXT NOT NULL,
|
|
65
|
+
etag VARCHAR(64) NOT NULL,
|
|
66
|
+
size BIGINT NOT NULL,
|
|
67
|
+
duration_ms INTEGER NOT NULL,
|
|
68
|
+
captured_at TIMESTAMP,
|
|
69
|
+
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
70
|
+
CONSTRAINT uq_recording_chunks_session_seq UNIQUE (session_id, seq)
|
|
71
|
+
)
|
|
72
|
+
`);
|
|
73
|
+
await queryRunner.query(`CREATE INDEX IF NOT EXISTS idx_recording_chunks_session_seq ON recording_chunks(session_id, seq)`);
|
|
74
|
+
}
|
|
75
|
+
async down(queryRunner) {
|
|
76
|
+
await queryRunner.query(`DROP TABLE IF EXISTS recording_chunks`);
|
|
77
|
+
await queryRunner.query(`DROP TABLE IF EXISTS recording_sessions`);
|
|
78
|
+
await queryRunner.query(`DROP TYPE IF EXISTS recording_status_enum`);
|
|
79
|
+
await queryRunner.query(`DROP TYPE IF EXISTS recording_kind_enum`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
exports.CreateRecordingSessionsAndChunks1713000000054 = CreateRecordingSessionsAndChunks1713000000054;
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CreateAgentJobsTable1713000055 = void 0;
|
|
4
|
+
const typeorm_1 = require("typeorm");
|
|
5
|
+
class CreateAgentJobsTable1713000055 {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.name = 'CreateAgentJobsTable1713000055';
|
|
8
|
+
}
|
|
9
|
+
async up(queryRunner) {
|
|
10
|
+
await queryRunner.createTable(new typeorm_1.Table({
|
|
11
|
+
name: 'agent_jobs',
|
|
12
|
+
columns: [
|
|
13
|
+
{
|
|
14
|
+
name: 'id',
|
|
15
|
+
type: 'uuid',
|
|
16
|
+
isPrimary: true,
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
name: 'user_id',
|
|
20
|
+
type: 'uuid',
|
|
21
|
+
isNullable: false,
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
name: 'agent_type',
|
|
25
|
+
type: 'varchar',
|
|
26
|
+
length: '50',
|
|
27
|
+
isNullable: false,
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: 'status',
|
|
31
|
+
type: 'enum',
|
|
32
|
+
enum: ['pending', 'analyzing', 'planning', 'generating', 'assembling', 'completed', 'failed', 'cancelled'],
|
|
33
|
+
default: "'pending'",
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
name: 'progress',
|
|
37
|
+
type: 'integer',
|
|
38
|
+
default: 0,
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
name: 'current_stage',
|
|
42
|
+
type: 'varchar',
|
|
43
|
+
length: '100',
|
|
44
|
+
isNullable: true,
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'prompt',
|
|
48
|
+
type: 'text',
|
|
49
|
+
isNullable: false,
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: 'input_images',
|
|
53
|
+
type: 'jsonb',
|
|
54
|
+
default: "'[]'",
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: 'input_videos',
|
|
58
|
+
type: 'jsonb',
|
|
59
|
+
default: "'[]'",
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
name: 'duration',
|
|
63
|
+
type: 'integer',
|
|
64
|
+
isNullable: false,
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
name: 'aspect_ratio',
|
|
68
|
+
type: 'varchar',
|
|
69
|
+
length: '10',
|
|
70
|
+
isNullable: false,
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
name: 'language',
|
|
74
|
+
type: 'varchar',
|
|
75
|
+
length: '10',
|
|
76
|
+
default: "'en'",
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
name: 'style',
|
|
80
|
+
type: 'varchar',
|
|
81
|
+
length: '50',
|
|
82
|
+
default: "'cinematic'",
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
name: 'voice_enabled',
|
|
86
|
+
type: 'boolean',
|
|
87
|
+
default: true,
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
name: 'voice_id',
|
|
91
|
+
type: 'varchar',
|
|
92
|
+
length: '100',
|
|
93
|
+
isNullable: true,
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
name: 'project_id',
|
|
97
|
+
type: 'varchar',
|
|
98
|
+
length: '255',
|
|
99
|
+
isNullable: true,
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
name: 'project_title',
|
|
103
|
+
type: 'varchar',
|
|
104
|
+
length: '255',
|
|
105
|
+
isNullable: true,
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
name: 'error_message',
|
|
109
|
+
type: 'text',
|
|
110
|
+
isNullable: true,
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
name: 'stage_log',
|
|
114
|
+
type: 'jsonb',
|
|
115
|
+
default: "'[]'",
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
name: 'created_at',
|
|
119
|
+
type: 'timestamp',
|
|
120
|
+
default: 'NOW()',
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
name: 'updated_at',
|
|
124
|
+
type: 'timestamp',
|
|
125
|
+
default: 'NOW()',
|
|
126
|
+
},
|
|
127
|
+
],
|
|
128
|
+
}), true);
|
|
129
|
+
await queryRunner.createIndex('agent_jobs', new typeorm_1.TableIndex({
|
|
130
|
+
name: 'IDX_agent_jobs_user_id',
|
|
131
|
+
columnNames: ['user_id'],
|
|
132
|
+
}));
|
|
133
|
+
await queryRunner.createIndex('agent_jobs', new typeorm_1.TableIndex({
|
|
134
|
+
name: 'IDX_agent_jobs_status',
|
|
135
|
+
columnNames: ['status'],
|
|
136
|
+
}));
|
|
137
|
+
await queryRunner.createIndex('agent_jobs', new typeorm_1.TableIndex({
|
|
138
|
+
name: 'IDX_agent_jobs_created_at',
|
|
139
|
+
columnNames: ['created_at'],
|
|
140
|
+
}));
|
|
141
|
+
}
|
|
142
|
+
async down(queryRunner) {
|
|
143
|
+
await queryRunner.dropIndex('agent_jobs', 'IDX_agent_jobs_created_at');
|
|
144
|
+
await queryRunner.dropIndex('agent_jobs', 'IDX_agent_jobs_status');
|
|
145
|
+
await queryRunner.dropIndex('agent_jobs', 'IDX_agent_jobs_user_id');
|
|
146
|
+
await queryRunner.dropTable('agent_jobs');
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
exports.CreateAgentJobsTable1713000055 = CreateAgentJobsTable1713000055;
|
package/dist/postgres.module.js
CHANGED
|
@@ -43,6 +43,8 @@ export { AssetCategoryRepository } from './asset-category.repository';
|
|
|
43
43
|
export { ProjectBrandOverrideRepository } from './project-brand-override.repository';
|
|
44
44
|
export { AiVideoJobRepository } from './ai-video-job.repository';
|
|
45
45
|
export { AiVideoSceneTaskRepository } from './ai-video-scene-task.repository';
|
|
46
|
+
export { RecordingSessionRepository } from './recording-session.repository';
|
|
47
|
+
export { RecordingChunkRepository } from './recording-chunk.repository';
|
|
46
48
|
export { SocialAccountRepository } from './social-account.repository';
|
|
47
49
|
export { PlatformConfigRepository } from './platform-config.repository';
|
|
48
50
|
export { SocialPostRepository } from './social-post.repository';
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.SocialPostRepository = exports.PlatformConfigRepository = exports.SocialAccountRepository = exports.RecordingChunkRepository = exports.RecordingSessionRepository = exports.AiVideoSceneTaskRepository = exports.AiVideoJobRepository = exports.ProjectBrandOverrideRepository = exports.AssetCategoryRepository = exports.BrandAssetRepository = exports.BrandKitRepository = exports.ProjectShareRepository = exports.RemotionRenderRepository = exports.ItemRepository = exports.SceneRepository = exports.ProjectSceneRepository = exports.MetadataActivityLogRepository = exports.AiEmbeddingRepository = exports.UserContextRepository = exports.ProjectMetadataRepository = exports.AssetMetadataRepository = exports.AudioWaveformRepository = exports.VideoFilmstripRepository = exports.VideoSubtitleRepository = exports.VideoRenderRepository = exports.VideoTranscodeRepository = exports.EffectRepository = exports.AssetRepository = exports.AiUsageRepository = exports.ReferralEventRepository = exports.RewardRuleRepository = exports.PlanCreditConfigurationRepository = exports.CreditTransactionRepository = exports.CreditAllocationRepository = exports.StripeWebhookRepository = exports.PaymentTransactionRepository = exports.SubscriptionUsageRepository = exports.UserSubscriptionRepository = exports.PlanRepository = exports.SubscriptionPlanRepository = exports.CommentRepository = exports.EditorProjectRepository = exports.InviteRepository = exports.WorkspaceMemberRepository = exports.WorkspaceRepository = exports.AuthSessionRepository = exports.UserOnboardingRepository = exports.UserProfileRepository = exports.UserRepository = exports.BaseRepository = void 0;
|
|
4
|
+
exports.AccountAnalyticsSummaryRepository = exports.PostAnalyticsSnapshotRepository = void 0;
|
|
4
5
|
var base_repository_1 = require("./base.repository");
|
|
5
6
|
Object.defineProperty(exports, "BaseRepository", { enumerable: true, get: function () { return base_repository_1.BaseRepository; } });
|
|
6
7
|
var user_repository_1 = require("./user.repository");
|
|
@@ -91,6 +92,10 @@ var ai_video_job_repository_1 = require("./ai-video-job.repository");
|
|
|
91
92
|
Object.defineProperty(exports, "AiVideoJobRepository", { enumerable: true, get: function () { return ai_video_job_repository_1.AiVideoJobRepository; } });
|
|
92
93
|
var ai_video_scene_task_repository_1 = require("./ai-video-scene-task.repository");
|
|
93
94
|
Object.defineProperty(exports, "AiVideoSceneTaskRepository", { enumerable: true, get: function () { return ai_video_scene_task_repository_1.AiVideoSceneTaskRepository; } });
|
|
95
|
+
var recording_session_repository_1 = require("./recording-session.repository");
|
|
96
|
+
Object.defineProperty(exports, "RecordingSessionRepository", { enumerable: true, get: function () { return recording_session_repository_1.RecordingSessionRepository; } });
|
|
97
|
+
var recording_chunk_repository_1 = require("./recording-chunk.repository");
|
|
98
|
+
Object.defineProperty(exports, "RecordingChunkRepository", { enumerable: true, get: function () { return recording_chunk_repository_1.RecordingChunkRepository; } });
|
|
94
99
|
var social_account_repository_1 = require("./social-account.repository");
|
|
95
100
|
Object.defineProperty(exports, "SocialAccountRepository", { enumerable: true, get: function () { return social_account_repository_1.SocialAccountRepository; } });
|
|
96
101
|
var platform_config_repository_1 = require("./platform-config.repository");
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Repository } from 'typeorm';
|
|
2
|
+
import { BaseRepository } from './base.repository';
|
|
3
|
+
import { RecordingChunk } from '../entities/recording-chunk.entity';
|
|
4
|
+
export declare class RecordingChunkRepository extends BaseRepository<RecordingChunk> {
|
|
5
|
+
private readonly chunkRepository;
|
|
6
|
+
constructor(chunkRepository: Repository<RecordingChunk>);
|
|
7
|
+
findBySession(sessionId: string): Promise<RecordingChunk[]>;
|
|
8
|
+
findBySeq(sessionId: string, seq: number): Promise<RecordingChunk | null>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
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
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.RecordingChunkRepository = void 0;
|
|
16
|
+
const typeorm_1 = require("typeorm");
|
|
17
|
+
const common_1 = require("@nestjs/common");
|
|
18
|
+
const typeorm_2 = require("@nestjs/typeorm");
|
|
19
|
+
const base_repository_1 = require("./base.repository");
|
|
20
|
+
const recording_chunk_entity_1 = require("../entities/recording-chunk.entity");
|
|
21
|
+
let RecordingChunkRepository = class RecordingChunkRepository extends base_repository_1.BaseRepository {
|
|
22
|
+
constructor(chunkRepository) {
|
|
23
|
+
super(chunkRepository);
|
|
24
|
+
this.chunkRepository = chunkRepository;
|
|
25
|
+
}
|
|
26
|
+
async findBySession(sessionId) {
|
|
27
|
+
return this.chunkRepository.find({
|
|
28
|
+
where: { sessionId },
|
|
29
|
+
order: { seq: 'ASC' },
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
async findBySeq(sessionId, seq) {
|
|
33
|
+
return this.chunkRepository.findOne({ where: { sessionId, seq } });
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
exports.RecordingChunkRepository = RecordingChunkRepository;
|
|
37
|
+
exports.RecordingChunkRepository = RecordingChunkRepository = __decorate([
|
|
38
|
+
(0, common_1.Injectable)(),
|
|
39
|
+
__param(0, (0, typeorm_2.InjectRepository)(recording_chunk_entity_1.RecordingChunk)),
|
|
40
|
+
__metadata("design:paramtypes", [typeorm_1.Repository])
|
|
41
|
+
], RecordingChunkRepository);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Repository } from 'typeorm';
|
|
2
|
+
import { BaseRepository } from './base.repository';
|
|
3
|
+
import { RecordingSession, RecordingStatus } from '../entities/recording-session.entity';
|
|
4
|
+
export declare class RecordingSessionRepository extends BaseRepository<RecordingSession> {
|
|
5
|
+
private readonly sessionRepository;
|
|
6
|
+
constructor(sessionRepository: Repository<RecordingSession>);
|
|
7
|
+
findByUser(userId: string, limit?: number, offset?: number): Promise<RecordingSession[]>;
|
|
8
|
+
findOwned(id: string, userId: string): Promise<RecordingSession | null>;
|
|
9
|
+
findByStatus(status: RecordingStatus): Promise<RecordingSession[]>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
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
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.RecordingSessionRepository = void 0;
|
|
16
|
+
const typeorm_1 = require("typeorm");
|
|
17
|
+
const common_1 = require("@nestjs/common");
|
|
18
|
+
const typeorm_2 = require("@nestjs/typeorm");
|
|
19
|
+
const base_repository_1 = require("./base.repository");
|
|
20
|
+
const recording_session_entity_1 = require("../entities/recording-session.entity");
|
|
21
|
+
let RecordingSessionRepository = class RecordingSessionRepository extends base_repository_1.BaseRepository {
|
|
22
|
+
constructor(sessionRepository) {
|
|
23
|
+
super(sessionRepository);
|
|
24
|
+
this.sessionRepository = sessionRepository;
|
|
25
|
+
}
|
|
26
|
+
async findByUser(userId, limit = 50, offset = 0) {
|
|
27
|
+
return this.sessionRepository.find({
|
|
28
|
+
where: { userId },
|
|
29
|
+
order: { createdAt: 'DESC' },
|
|
30
|
+
take: limit,
|
|
31
|
+
skip: offset,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
async findOwned(id, userId) {
|
|
35
|
+
return this.sessionRepository.findOne({ where: { id, userId } });
|
|
36
|
+
}
|
|
37
|
+
async findByStatus(status) {
|
|
38
|
+
return this.sessionRepository.find({ where: { status } });
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
exports.RecordingSessionRepository = RecordingSessionRepository;
|
|
42
|
+
exports.RecordingSessionRepository = RecordingSessionRepository = __decorate([
|
|
43
|
+
(0, common_1.Injectable)(),
|
|
44
|
+
__param(0, (0, typeorm_2.InjectRepository)(recording_session_entity_1.RecordingSession)),
|
|
45
|
+
__metadata("design:paramtypes", [typeorm_1.Repository])
|
|
46
|
+
], RecordingSessionRepository);
|
|
@@ -66,6 +66,8 @@ const repositories = [
|
|
|
66
66
|
_1.SocialPostRepository,
|
|
67
67
|
_1.PostAnalyticsSnapshotRepository,
|
|
68
68
|
_1.AccountAnalyticsSummaryRepository,
|
|
69
|
+
_1.RecordingSessionRepository,
|
|
70
|
+
_1.RecordingChunkRepository,
|
|
69
71
|
];
|
|
70
72
|
const entities = [
|
|
71
73
|
entities_1.User,
|
|
@@ -119,6 +121,8 @@ const entities = [
|
|
|
119
121
|
entities_1.SocialPost,
|
|
120
122
|
entities_1.PostAnalyticsSnapshot,
|
|
121
123
|
entities_1.AccountAnalyticsSummary,
|
|
124
|
+
entities_1.RecordingSession,
|
|
125
|
+
entities_1.RecordingChunk,
|
|
122
126
|
];
|
|
123
127
|
let RepositoryModule = class RepositoryModule {
|
|
124
128
|
};
|