@hed-hog/studio 0.0.285

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.
Files changed (68) hide show
  1. package/dist/index.d.ts +4 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +20 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/studio.controller.d.ts +79 -0
  6. package/dist/studio.controller.d.ts.map +1 -0
  7. package/dist/studio.controller.js +186 -0
  8. package/dist/studio.controller.js.map +1 -0
  9. package/dist/studio.module.d.ts +3 -0
  10. package/dist/studio.module.d.ts.map +1 -0
  11. package/dist/studio.module.js +33 -0
  12. package/dist/studio.module.js.map +1 -0
  13. package/dist/studio.service.d.ts +76 -0
  14. package/dist/studio.service.d.ts.map +1 -0
  15. package/dist/studio.service.js +98 -0
  16. package/dist/studio.service.js.map +1 -0
  17. package/hedhog/data/menu.yaml +114 -0
  18. package/hedhog/data/role.yaml +7 -0
  19. package/hedhog/data/route.yaml +152 -0
  20. package/hedhog/data/setting_group.yaml +8 -0
  21. package/hedhog/frontend/app/_components/studio-status-badge.tsx.ejs +14 -0
  22. package/hedhog/frontend/app/_lib/mocks.ts.ejs +209 -0
  23. package/hedhog/frontend/app/_lib/status.ts.ejs +38 -0
  24. package/hedhog/frontend/app/_lib/types.ts.ejs +148 -0
  25. package/hedhog/frontend/app/assets/page.tsx.ejs +117 -0
  26. package/hedhog/frontend/app/editing/page.tsx.ejs +55 -0
  27. package/hedhog/frontend/app/incidents/page.tsx.ejs +59 -0
  28. package/hedhog/frontend/app/page.tsx.ejs +207 -0
  29. package/hedhog/frontend/app/projects/[id]/page.tsx.ejs +323 -0
  30. package/hedhog/frontend/app/projects/form/page.tsx.ejs +129 -0
  31. package/hedhog/frontend/app/projects/page.tsx.ejs +169 -0
  32. package/hedhog/frontend/app/publication/page.tsx.ejs +62 -0
  33. package/hedhog/frontend/app/scenes/form/page.tsx.ejs +110 -0
  34. package/hedhog/frontend/app/sessions/[id]/page.tsx.ejs +118 -0
  35. package/hedhog/frontend/app/sessions/form/page.tsx.ejs +103 -0
  36. package/hedhog/frontend/app/sessions/page.tsx.ejs +80 -0
  37. package/hedhog/frontend/app/storage-profiles/form/page.tsx.ejs +100 -0
  38. package/hedhog/frontend/app/storage-profiles/page.tsx.ejs +80 -0
  39. package/hedhog/frontend/app/takes/[id]/page.tsx.ejs +143 -0
  40. package/hedhog/frontend/app/takes/page.tsx.ejs +74 -0
  41. package/hedhog/table/capture_agent.yaml +48 -0
  42. package/hedhog/table/edit_composition.yaml +67 -0
  43. package/hedhog/table/edit_pipeline.yaml +46 -0
  44. package/hedhog/table/edit_stage_execution.yaml +46 -0
  45. package/hedhog/table/editor_delivery_package.yaml +63 -0
  46. package/hedhog/table/ingestion_job.yaml +74 -0
  47. package/hedhog/table/media_asset.yaml +130 -0
  48. package/hedhog/table/participant_command_ack.yaml +32 -0
  49. package/hedhog/table/participant_recording.yaml +67 -0
  50. package/hedhog/table/production_binding.yaml +34 -0
  51. package/hedhog/table/production_project.yaml +104 -0
  52. package/hedhog/table/publication_target.yaml +44 -0
  53. package/hedhog/table/recorded_file.yaml +74 -0
  54. package/hedhog/table/recording_command.yaml +72 -0
  55. package/hedhog/table/recording_incident.yaml +65 -0
  56. package/hedhog/table/recording_session.yaml +86 -0
  57. package/hedhog/table/scene.yaml +64 -0
  58. package/hedhog/table/scene_take.yaml +83 -0
  59. package/hedhog/table/session_participant.yaml +55 -0
  60. package/hedhog/table/storage_profile.yaml +75 -0
  61. package/hedhog/table/sync_marker.yaml +44 -0
  62. package/package.json +38 -0
  63. package/src/index.ts +4 -0
  64. package/src/language/en.json +8 -0
  65. package/src/language/pt.json +8 -0
  66. package/src/studio.controller.ts +94 -0
  67. package/src/studio.module.ts +20 -0
  68. package/src/studio.service.ts +102 -0
@@ -0,0 +1,65 @@
1
+ columns:
2
+ - type: pk
3
+ - name: recording_session_id
4
+ type: fk
5
+ isNullable: true
6
+ references:
7
+ table: recording_session
8
+ column: id
9
+ onDelete: SET NULL
10
+ onUpdate: CASCADE
11
+ - name: scene_take_id
12
+ type: fk
13
+ isNullable: true
14
+ references:
15
+ table: scene_take
16
+ column: id
17
+ onDelete: SET NULL
18
+ onUpdate: CASCADE
19
+ - name: participant_recording_id
20
+ type: fk
21
+ isNullable: true
22
+ references:
23
+ table: participant_recording
24
+ column: id
25
+ onDelete: SET NULL
26
+ onUpdate: CASCADE
27
+ - name: session_participant_id
28
+ type: fk
29
+ isNullable: true
30
+ references:
31
+ table: session_participant
32
+ column: id
33
+ onDelete: SET NULL
34
+ onUpdate: CASCADE
35
+ - name: incident_type
36
+ type: enum
37
+ values: [no_audio, no_video, no_screen, corrupted_file, upload_failed, participant_disconnected, delayed_start, delayed_stop, partial_take, sync_issue, other]
38
+ default: other
39
+ - name: severity
40
+ type: enum
41
+ values: [low, medium, high, critical]
42
+ default: medium
43
+ - name: description
44
+ type: text
45
+ - name: detected_at
46
+ type: datetime
47
+ - name: resolved_at
48
+ type: datetime
49
+ isNullable: true
50
+ - name: resolution_notes
51
+ type: text
52
+ isNullable: true
53
+ - name: metadata_json
54
+ type: json
55
+ isNullable: true
56
+ - type: created_at
57
+ - type: updated_at
58
+
59
+ indices:
60
+ - columns: [recording_session_id]
61
+ - columns: [scene_take_id]
62
+ - columns: [participant_recording_id]
63
+ - columns: [severity]
64
+ - columns: [incident_type]
65
+ - columns: [resolved_at]
@@ -0,0 +1,86 @@
1
+ columns:
2
+ - type: pk
3
+ - name: production_project_id
4
+ type: fk
5
+ references:
6
+ table: production_project
7
+ column: id
8
+ onDelete: CASCADE
9
+ onUpdate: CASCADE
10
+ - name: active_scene_id
11
+ type: fk
12
+ isNullable: true
13
+ references:
14
+ table: scene
15
+ column: id
16
+ onDelete: SET NULL
17
+ onUpdate: CASCADE
18
+ - name: title
19
+ - name: description
20
+ type: text
21
+ isNullable: true
22
+ - name: session_type
23
+ type: enum
24
+ values: [local, remote_collaborative, hybrid]
25
+ default: local
26
+ - name: status
27
+ type: enum
28
+ values: [idle, arming, ready, start_requested, recording, stop_requested, processing, finished, cancelled]
29
+ default: idle
30
+ - name: room_key
31
+ type: varchar
32
+ length: 120
33
+ isNullable: true
34
+ - name: server_clock_reference
35
+ type: varchar
36
+ length: 120
37
+ isNullable: true
38
+ - name: sync_mode
39
+ type: enum
40
+ values: [server_authoritative, host_assisted, local_only]
41
+ default: server_authoritative
42
+ - name: host_user_id
43
+ type: fk
44
+ isNullable: true
45
+ references:
46
+ table: user
47
+ column: id
48
+ onDelete: SET NULL
49
+ onUpdate: CASCADE
50
+ - name: started_at
51
+ type: datetime
52
+ isNullable: true
53
+ - name: ended_at
54
+ type: datetime
55
+ isNullable: true
56
+ - name: metadata_json
57
+ type: json
58
+ isNullable: true
59
+ - name: created_by_user_id
60
+ type: fk
61
+ isNullable: true
62
+ references:
63
+ table: user
64
+ column: id
65
+ onDelete: SET NULL
66
+ onUpdate: CASCADE
67
+ - name: updated_by_user_id
68
+ type: fk
69
+ isNullable: true
70
+ references:
71
+ table: user
72
+ column: id
73
+ onDelete: SET NULL
74
+ onUpdate: CASCADE
75
+ - name: deleted_at
76
+ type: datetime
77
+ isNullable: true
78
+ - type: created_at
79
+ - type: updated_at
80
+
81
+ indices:
82
+ - columns: [production_project_id, status]
83
+ - columns: [room_key]
84
+ - columns: [host_user_id]
85
+ - columns: [active_scene_id]
86
+ - columns: [deleted_at]
@@ -0,0 +1,64 @@
1
+ columns:
2
+ - type: pk
3
+ - name: production_project_id
4
+ type: fk
5
+ references:
6
+ table: production_project
7
+ column: id
8
+ onDelete: CASCADE
9
+ onUpdate: CASCADE
10
+ - name: name
11
+ - type: slug
12
+ - name: description
13
+ type: text
14
+ isNullable: true
15
+ - name: script_excerpt
16
+ type: text
17
+ isNullable: true
18
+ - name: sequence_order
19
+ type: int
20
+ default: 1
21
+ - name: estimated_duration_seconds
22
+ type: int
23
+ isNullable: true
24
+ - name: expected_output_type
25
+ type: enum
26
+ values: [talking_head, screen_demo, interview, presentation, outro, intro, other]
27
+ default: talking_head
28
+ - name: status
29
+ type: enum
30
+ values: [pending, ready_to_record, recording, recorded, approved_for_edit, edited, archived]
31
+ default: pending
32
+ - name: notes
33
+ type: text
34
+ isNullable: true
35
+ - name: metadata_json
36
+ type: json
37
+ isNullable: true
38
+ - name: created_by_user_id
39
+ type: fk
40
+ isNullable: true
41
+ references:
42
+ table: user
43
+ column: id
44
+ onDelete: SET NULL
45
+ onUpdate: CASCADE
46
+ - name: updated_by_user_id
47
+ type: fk
48
+ isNullable: true
49
+ references:
50
+ table: user
51
+ column: id
52
+ onDelete: SET NULL
53
+ onUpdate: CASCADE
54
+ - name: deleted_at
55
+ type: datetime
56
+ isNullable: true
57
+ - type: created_at
58
+ - type: updated_at
59
+
60
+ indices:
61
+ - columns: [production_project_id, sequence_order]
62
+ - columns: [production_project_id, status]
63
+ - columns: [slug]
64
+ - columns: [deleted_at]
@@ -0,0 +1,83 @@
1
+ columns:
2
+ - type: pk
3
+ - name: production_project_id
4
+ type: fk
5
+ references:
6
+ table: production_project
7
+ column: id
8
+ onDelete: CASCADE
9
+ onUpdate: CASCADE
10
+ - name: scene_id
11
+ type: fk
12
+ references:
13
+ table: scene
14
+ column: id
15
+ onDelete: CASCADE
16
+ onUpdate: CASCADE
17
+ - name: recording_session_id
18
+ type: fk
19
+ references:
20
+ table: recording_session
21
+ column: id
22
+ onDelete: CASCADE
23
+ onUpdate: CASCADE
24
+ - name: take_number
25
+ type: int
26
+ - name: take_label
27
+ type: varchar
28
+ length: 120
29
+ isNullable: true
30
+ - name: status
31
+ type: enum
32
+ values: [pending, armed, recording, stopped, uploaded, validated, partial, approved, discarded, selected]
33
+ default: pending
34
+ - name: is_selected
35
+ type: boolean
36
+ default: false
37
+ - name: sync_timecode_base
38
+ type: varchar
39
+ length: 120
40
+ isNullable: true
41
+ - name: started_at
42
+ type: datetime
43
+ isNullable: true
44
+ - name: ended_at
45
+ type: datetime
46
+ isNullable: true
47
+ - name: duration_ms
48
+ type: int
49
+ isNullable: true
50
+ - name: notes
51
+ type: text
52
+ isNullable: true
53
+ - name: metadata_json
54
+ type: json
55
+ isNullable: true
56
+ - name: created_by_user_id
57
+ type: fk
58
+ isNullable: true
59
+ references:
60
+ table: user
61
+ column: id
62
+ onDelete: SET NULL
63
+ onUpdate: CASCADE
64
+ - name: updated_by_user_id
65
+ type: fk
66
+ isNullable: true
67
+ references:
68
+ table: user
69
+ column: id
70
+ onDelete: SET NULL
71
+ onUpdate: CASCADE
72
+ - name: deleted_at
73
+ type: datetime
74
+ isNullable: true
75
+ - type: created_at
76
+ - type: updated_at
77
+
78
+ indices:
79
+ - columns: [scene_id, take_number]
80
+ isUnique: true
81
+ - columns: [recording_session_id, status]
82
+ - columns: [is_selected]
83
+ - columns: [deleted_at]
@@ -0,0 +1,55 @@
1
+ columns:
2
+ - type: pk
3
+ - name: recording_session_id
4
+ type: fk
5
+ references:
6
+ table: recording_session
7
+ column: id
8
+ onDelete: CASCADE
9
+ onUpdate: CASCADE
10
+ - name: user_id
11
+ type: fk
12
+ isNullable: true
13
+ references:
14
+ table: user
15
+ column: id
16
+ onDelete: SET NULL
17
+ onUpdate: CASCADE
18
+ - name: external_name
19
+ type: varchar
20
+ length: 120
21
+ isNullable: true
22
+ - name: external_email
23
+ type: varchar
24
+ length: 180
25
+ isNullable: true
26
+ - name: role_in_session
27
+ type: enum
28
+ values: [host, guest, producer, observer]
29
+ default: guest
30
+ - name: connection_status
31
+ type: enum
32
+ values: [invited, connected, ready, disconnected, left, failed]
33
+ default: invited
34
+ - name: joined_at
35
+ type: datetime
36
+ isNullable: true
37
+ - name: left_at
38
+ type: datetime
39
+ isNullable: true
40
+ - name: device_metadata_json
41
+ type: json
42
+ isNullable: true
43
+ - name: capture_preferences_json
44
+ type: json
45
+ isNullable: true
46
+ - name: notes
47
+ type: text
48
+ isNullable: true
49
+ - type: created_at
50
+ - type: updated_at
51
+
52
+ indices:
53
+ - columns: [recording_session_id, role_in_session]
54
+ - columns: [recording_session_id, connection_status]
55
+ - columns: [user_id]
@@ -0,0 +1,75 @@
1
+ columns:
2
+ - type: pk
3
+ - name: name
4
+ - name: provider_type
5
+ type: enum
6
+ values: [s3, minio, r2, compatible_s3]
7
+ default: compatible_s3
8
+ - name: bucket_name
9
+ - name: region
10
+ type: varchar
11
+ length: 80
12
+ isNullable: true
13
+ - name: endpoint_url
14
+ type: varchar
15
+ length: 250
16
+ isNullable: true
17
+ - name: base_path
18
+ type: varchar
19
+ length: 250
20
+ isNullable: true
21
+ - name: path_template
22
+ type: varchar
23
+ length: 250
24
+ isNullable: true
25
+ - name: access_key_encrypted
26
+ type: text
27
+ isNullable: true
28
+ - name: secret_key_encrypted
29
+ type: text
30
+ isNullable: true
31
+ - name: force_path_style
32
+ type: boolean
33
+ default: false
34
+ - name: is_default
35
+ type: boolean
36
+ default: false
37
+ - name: is_active
38
+ type: boolean
39
+ default: true
40
+ - name: test_status
41
+ type: enum
42
+ values: [unknown, success, failed]
43
+ default: unknown
44
+ - name: last_tested_at
45
+ type: datetime
46
+ isNullable: true
47
+ - name: created_by_user_id
48
+ type: fk
49
+ isNullable: true
50
+ references:
51
+ table: user
52
+ column: id
53
+ onDelete: SET NULL
54
+ onUpdate: CASCADE
55
+ - name: updated_by_user_id
56
+ type: fk
57
+ isNullable: true
58
+ references:
59
+ table: user
60
+ column: id
61
+ onDelete: SET NULL
62
+ onUpdate: CASCADE
63
+ - name: deleted_at
64
+ type: datetime
65
+ isNullable: true
66
+ - type: created_at
67
+ - type: updated_at
68
+
69
+ indices:
70
+ - columns: [name]
71
+ isUnique: true
72
+ - columns: [provider_type]
73
+ - columns: [is_default]
74
+ - columns: [is_active]
75
+ - columns: [deleted_at]
@@ -0,0 +1,44 @@
1
+ columns:
2
+ - type: pk
3
+ - name: recording_session_id
4
+ type: fk
5
+ references:
6
+ table: recording_session
7
+ column: id
8
+ onDelete: CASCADE
9
+ onUpdate: CASCADE
10
+ - name: scene_take_id
11
+ type: fk
12
+ isNullable: true
13
+ references:
14
+ table: scene_take
15
+ column: id
16
+ onDelete: SET NULL
17
+ onUpdate: CASCADE
18
+ - name: marker_type
19
+ type: enum
20
+ values: [manual, clap, flash, system_event, take_start, take_stop]
21
+ default: manual
22
+ - name: server_timestamp
23
+ type: datetime
24
+ - name: participant_timestamps_json
25
+ type: json
26
+ isNullable: true
27
+ - name: notes
28
+ type: text
29
+ isNullable: true
30
+ - name: created_by_user_id
31
+ type: fk
32
+ isNullable: true
33
+ references:
34
+ table: user
35
+ column: id
36
+ onDelete: SET NULL
37
+ onUpdate: CASCADE
38
+ - type: created_at
39
+ - type: updated_at
40
+
41
+ indices:
42
+ - columns: [recording_session_id, marker_type]
43
+ - columns: [scene_take_id]
44
+ - columns: [server_timestamp]
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "@hed-hog/studio",
3
+ "version": "0.0.285",
4
+ "main": "dist/index.js",
5
+ "types": "dist/index.d.ts",
6
+ "dependencies": {
7
+ "@nestjs/common": "*",
8
+ "@nestjs/config": "^4.0.2",
9
+ "@nestjs/core": "^11",
10
+ "@nestjs/jwt": "^11",
11
+ "@nestjs/mapped-types": "*",
12
+ "@hed-hog/api-pagination": "0.0.6",
13
+ "@hed-hog/api-prisma": "0.0.5",
14
+ "@hed-hog/api": "0.0.4",
15
+ "@hed-hog/api-locale": "0.0.13",
16
+ "@hed-hog/api-types": "0.0.1",
17
+ "@hed-hog/core": "0.0.285"
18
+ },
19
+ "exports": {
20
+ ".": {
21
+ "import": "./dist/index.js",
22
+ "require": "./dist/index.js"
23
+ },
24
+ "./package.json": "./package.json"
25
+ },
26
+ "files": [
27
+ "dist",
28
+ "src",
29
+ "hedhog"
30
+ ],
31
+ "scripts": {
32
+ "lint": "eslint \"{src,apps,libs,test}/**/*.ts\"",
33
+ "prebuild": "npx ts-node ../../scripts/build-dependencies.ts libraries/studio",
34
+ "build": "tsc --project tsconfig.production.json",
35
+ "patch": "npx ts-node ../../scripts/patch.ts libraries/studio",
36
+ "prod": "pnpm run patch && pnpm run build && pnpm publish --access public --no-git-checks"
37
+ }
38
+ }
package/src/index.ts ADDED
@@ -0,0 +1,4 @@
1
+ export * from './studio.controller';
2
+ export * from './studio.module';
3
+ export * from './studio.service';
4
+
@@ -0,0 +1,8 @@
1
+ {
2
+ "HomePage": {
3
+ "title": "Studio",
4
+ "description": "Manage your studio.",
5
+ "breadcrumbHome": "Home",
6
+ "breadcrumbCurrent": "Studio"
7
+ }
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "HomePage": {
3
+ "title": "Studio",
4
+ "description": "Gerencie seu estúdio.",
5
+ "breadcrumbHome": "Início",
6
+ "breadcrumbCurrent": "Studio"
7
+ }
8
+ }
@@ -0,0 +1,94 @@
1
+ import { Role } from '@hed-hog/api';
2
+ import { Controller, Get, Param, ParseIntPipe } from '@nestjs/common';
3
+ import { StudioService } from './studio.service';
4
+
5
+ @Role()
6
+ @Controller('studio')
7
+ export class StudioController {
8
+ constructor(private readonly studioService: StudioService) {}
9
+
10
+ @Get('data')
11
+ getData() {
12
+ return this.studioService.getData();
13
+ }
14
+
15
+ @Get('projects')
16
+ listProjects() {
17
+ return this.studioService.listProjects();
18
+ }
19
+
20
+ @Get('projects/:id')
21
+ getProject(@Param('id', ParseIntPipe) id: number) {
22
+ return this.studioService.getProject(id);
23
+ }
24
+
25
+ @Get('projects/form')
26
+ getProjectFormSchema() {
27
+ return this.studioService.getProjectFormSchema();
28
+ }
29
+
30
+ @Get('scenes')
31
+ listScenes() {
32
+ return this.studioService.listScenes();
33
+ }
34
+
35
+ @Get('scenes/form')
36
+ getSceneFormSchema() {
37
+ return this.studioService.getSceneFormSchema();
38
+ }
39
+
40
+ @Get('sessions')
41
+ listSessions() {
42
+ return this.studioService.listSessions();
43
+ }
44
+
45
+ @Get('sessions/:id')
46
+ getSession(@Param('id', ParseIntPipe) id: number) {
47
+ return this.studioService.getSession(id);
48
+ }
49
+
50
+ @Get('sessions/form')
51
+ getSessionFormSchema() {
52
+ return this.studioService.getSessionFormSchema();
53
+ }
54
+
55
+ @Get('takes')
56
+ listTakes() {
57
+ return this.studioService.listTakes();
58
+ }
59
+
60
+ @Get('takes/:id')
61
+ getTake(@Param('id', ParseIntPipe) id: number) {
62
+ return this.studioService.getTake(id);
63
+ }
64
+
65
+ @Get('assets')
66
+ listAssets() {
67
+ return this.studioService.listAssets();
68
+ }
69
+
70
+ @Get('storage-profiles')
71
+ listStorageProfiles() {
72
+ return this.studioService.listStorageProfiles();
73
+ }
74
+
75
+ @Get('storage-profiles/form')
76
+ getStorageProfileFormSchema() {
77
+ return this.studioService.getStorageProfileFormSchema();
78
+ }
79
+
80
+ @Get('incidents')
81
+ listIncidents() {
82
+ return this.studioService.listIncidents();
83
+ }
84
+
85
+ @Get('editing')
86
+ getEditing() {
87
+ return this.studioService.getEditing();
88
+ }
89
+
90
+ @Get('publication')
91
+ getPublication() {
92
+ return this.studioService.getPublication();
93
+ }
94
+ }
@@ -0,0 +1,20 @@
1
+ import { LocaleModule } from '@hed-hog/api-locale';
2
+ import { PaginationModule } from '@hed-hog/api-pagination';
3
+ import { PrismaModule } from '@hed-hog/api-prisma';
4
+ import { forwardRef, Module } from '@nestjs/common';
5
+ import { ConfigModule } from '@nestjs/config';
6
+ import { StudioController } from './studio.controller';
7
+ import { StudioService } from './studio.service';
8
+
9
+ @Module({
10
+ imports: [
11
+ ConfigModule.forRoot(),
12
+ forwardRef(() => PaginationModule),
13
+ forwardRef(() => PrismaModule),
14
+ forwardRef(() => LocaleModule)
15
+ ],
16
+ controllers: [StudioController],
17
+ providers: [StudioService],
18
+ exports: [StudioService]
19
+ })
20
+ export class StudioModule {}