@osaas/cli 4.4.0 → 4.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"cmd.d.ts","sourceRoot":"","sources":["../../src/web/cmd.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,wBAAgB,MAAM,YAgCrB"}
1
+ {"version":3,"file":"cmd.d.ts","sourceRoot":"","sources":["../../src/web/cmd.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,wBAAgB,MAAM,YA6DrB"}
package/dist/web/cmd.js CHANGED
@@ -29,6 +29,36 @@ function cmdWeb() {
29
29
  console.log(err.message);
30
30
  }
31
31
  });
32
+ web
33
+ .command('cdn-create')
34
+ .description('Create a CDN distribution for a service instance')
35
+ .argument('<serviceId>', 'Service Id')
36
+ .argument('<instanceName>', 'Instance name')
37
+ .option('--provider <provider>', 'CDN provider (default: cloudfront)')
38
+ .option('--origin-path <originPath>', 'Origin path (default: /)')
39
+ .action(async (serviceId, instanceName, options, command) => {
40
+ try {
41
+ const globalOpts = command.optsWithGlobals();
42
+ const environment = globalOpts?.env || 'prod';
43
+ const ctx = new client_core_1.Context({ environment });
44
+ if (!options.provider) {
45
+ options.provider = 'cloudfront';
46
+ }
47
+ if (options.provider === 'cloudfront') {
48
+ console.log('Creating CloudFront distribution...');
49
+ await (0, client_web_1.createCloudfrontDistribution)(serviceId, instanceName, ctx, {
50
+ originPath: options.originPath
51
+ });
52
+ console.log('CloudFront distribution created');
53
+ }
54
+ else {
55
+ console.log('CDN provider not supported (available: cloudfront)');
56
+ }
57
+ }
58
+ catch (err) {
59
+ console.log(err.message);
60
+ }
61
+ });
32
62
  return web;
33
63
  }
34
64
  exports.cmdWeb = cmdWeb;
@@ -1 +1 @@
1
- {"version":3,"file":"cmd.js","sourceRoot":"","sources":["../../src/web/cmd.ts"],"names":[],"mappings":";;;AAAA,oDAA6C;AAC7C,kDAA4C;AAC5C,yCAAoC;AAEpC,SAAgB,MAAM;IACpB,MAAM,GAAG,GAAG,IAAI,mBAAO,CAAC,KAAK,CAAC,CAAC;IAE/B,GAAG;SACA,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,mBAAmB,CAAC;SAChC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;SACrC,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAC;SACzC,MAAM,CAAC,YAAY,EAAE,wBAAwB,CAAC;SAC9C,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;QAC5C,IAAI;YACF,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;YAC7C,MAAM,WAAW,GAAG,UAAU,EAAE,GAAG,IAAI,MAAM,CAAC;YAC9C,MAAM,GAAG,GAAG,IAAI,qBAAO,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;YAEzC,MAAM,OAAO,GAAG,MAAM,IAAA,oBAAO,EAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YACtE,OAAO,CAAC,GAAG,CAAC,yBAAyB,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YACvE,OAAO,CAAC,GAAG,CACT,6BACE,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,QACnC,GAAG,CACJ,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,mBAAmB,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;SACnD;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO,CAAC,GAAG,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;SACrC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,GAAG,CAAC;AACb,CAAC;AAhCD,wBAgCC"}
1
+ {"version":3,"file":"cmd.js","sourceRoot":"","sources":["../../src/web/cmd.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@osaas/cli",
3
- "version": "4.4.0",
3
+ "version": "4.6.0",
4
4
  "description": "Open Source Cloud CLI",
5
5
  "author": "Eyevinn Open Source Cloud <osc@eyevinn.se>",
6
6
  "homepage": "https://www.osaas.io",
@@ -24,10 +24,10 @@
24
24
  "dependencies": {
25
25
  "@osaas/client-ai": "^0.4.2",
26
26
  "@osaas/client-core": "^0.15.0",
27
- "@osaas/client-db": "^0.4.1",
27
+ "@osaas/client-db": "^0.4.2",
28
28
  "@osaas/client-intercom": "^0.2.2",
29
- "@osaas/client-transcode": "^0.13.3",
30
- "@osaas/client-web": "^0.2.0",
29
+ "@osaas/client-transcode": "^0.13.4",
30
+ "@osaas/client-web": "^0.3.1",
31
31
  "@types/promptly": "^3.0.5",
32
32
  "chalk": "4.1.2",
33
33
  "commander": "^12.1.0",
@@ -38,5 +38,5 @@
38
38
  "publishConfig": {
39
39
  "access": "public"
40
40
  },
41
- "gitHead": "64eb9dfb6763ccf84b34a36f7ae3adf7963a58de"
41
+ "gitHead": "f4d80dc7b9e7a0e65b3faef07422b33aaafa9b23"
42
42
  }
package/readme.md CHANGED
@@ -20,80 +20,125 @@ npm install -g @osaas/cli
20
20
  Usage: osc [options] [command]
21
21
 
22
22
  Options:
23
- -v, --version Output the current version
24
- --env <environment> Environment to use
25
- -h, --help display help for command
23
+ -v, --version Output the current version
24
+ --env <environment> Environment to use
25
+ -h, --help display help for command
26
26
 
27
27
  Commands:
28
28
  admin
29
- list <serviceId> List all my service instances
30
- create [options] <serviceId> <name> Create a service instance
31
- describe <serviceId> <name> Get details for a service instance
32
- remove <serviceId> <name> Remove a service instance
33
- logs <serviceId> <name> Get logs for a service instance
34
- transcode [options] <source> <dest> [packageDestination] Transcode file to ABR fileset and store on S3
35
- bucket
36
- encore
37
- pipeline
38
- packager [options] <source> <dest> Create streaming package from ABR bundle on S3
39
- and store on another S3 bucket
29
+ list <serviceId> List all my service instances
30
+ create [options] <serviceId> <name> Create a service instance
31
+ describe <serviceId> <name> Get details for a service instance
32
+ remove <serviceId> <name> Remove a service instance
33
+ logs <serviceId> <name> Get logs for a service instance
34
+ packager [options] <source> <dest> Create streaming package from ABR bundle on S3
35
+ and store on another S3 bucket
40
36
  compare
41
37
  live
42
38
  intercom
43
- transcribe [options] <source> Generate subtitles from video or audio using Open
44
- AI Whisper
39
+ transcribe [options] <source> Generate subtitles from video or audio using Open
40
+ AI Whisper
45
41
  db
46
42
  architect
47
- help [command] display help for command
43
+ vod
44
+ web
45
+ help [command] display help for command
48
46
  ```
49
47
 
50
48
  ## Examples
51
49
 
52
- ### List all my channel-engine instances
50
+ First set the environment variable `OSC_ACCESS_TOKEN` with your personal access token. Obtain the personal access token in the Eyevinn Open Source Cloud web console.
53
51
 
54
52
  ```
55
- % export OSC_ACCESS_TOKEN=<pat>
56
- % osc list channel-engine
53
+ % export OSC_ACCESS_TOKEN=<personal-access-token>
57
54
  ```
58
55
 
59
- ### Create a channel from a VOD on loop and insert ad breaks
56
+ ### Create a MinIO storage service and bucket
60
57
 
58
+ Create a MinIO storage server instance called `mystore` with the given credentials.
59
+
60
+ ```
61
+ % osc create minio-minio mystore -o RootUser=admin -o RootPassword=abC12345678
62
+ Instance created:
63
+ {
64
+ name: 'mystore',
65
+ url: 'https://eyevinnlab-mystore.minio-minio.auto.prod.osaas.io',
66
+ resources: {
67
+ license: { url: 'https://api-minio-minio.auto.prod.osaas.io/license' },
68
+ app: {
69
+ url: 'https://eyevinnlab-mystore.minio-minio.auto.prod.osaas.io/'
70
+ }
71
+ },
72
+ RootUser: 'admin',
73
+ RootPassword: 'abC12345678'
74
+ }
75
+ ```
76
+
77
+ Install the MinIO client to create a bucket on this server. If you already have MinIO client installed you can skip this step.
78
+
79
+ ```
80
+ % brew install minio/stable/mc
61
81
  ```
62
- % osc create channel-engine cli -o \
63
- type=Loop \
64
- url=https://lab.cdn.eyevinn.technology/stswetvplus-promo-2023-5GBm231Mkz.mov/manifest.m3u8 \
65
- opts.useDemuxedAudio=false \
66
- opts.useVttSubtitles=false \
67
- opts.preroll.url=http://maitv-vod.lab.eyevinn.technology/VINN.mp4/master.m3u8 \
68
- opts.preroll.duration=10500
82
+
83
+ Setup an alias to your server. Replace the URL below with the instance URL returned when created the store.
84
+
85
+ ```
86
+ % mc alias set mystore https://eyevinnlab-mystore.minio-minio.auto.prod.osaas.io admin abC12345678
69
87
  ```
70
88
 
71
- ### Remove a channel-engine instance with name `clidemo`
89
+ Create a bucket called `mybucket`
72
90
 
73
91
  ```
74
- % osc remove channel-engine clidemo
92
+ % mc mb mystore/mybucket
93
+ Bucket created successfully `mystore/mybucket`.
75
94
  ```
76
95
 
77
- ### Create ABR files for VOD using SVT Encore
96
+ To access the bucket using the AWS S3 client:
78
97
 
79
98
  ```
80
- osc encore create test s3://lab-testcontent-store/birme/
81
- osc encore transcode https://testcontent.eyevinn.technology/mp4/stswe-tvplus-promo.mp4
99
+ % AWS_ACCESS_KEY_ID=admin AWS_SECRET_ACCESS_KEY=abC12345678 \
100
+ aws s3 --endpoint=https://eyevinnlab-mystore.minio-minio.auto.prod.osaas.io \
101
+ cp images.jpeg s3://mybucket/
102
+ upload: images.jpeg to s3://mybucket/images.jpeg
103
+ % AWS_ACCESS_KEY_ID=admin AWS_SECRET_ACCESS_KEY=abC12345678 \
104
+ aws s3 --endpoint=https://eyevinnlab-mystore.minio-minio.auto.prod.osaas.io \
105
+ ls s3://mybucket/
106
+ 2025-01-21 10:35:11 12533 images.jpeg
82
107
  ```
83
108
 
84
- ### Transcode and create streaming package using SVT Encore and Shaka Packager
109
+ ### List all my MinIO storage services
85
110
 
86
111
  ```
87
- osc pipeline create s3://lab-testcontent-store/birme/output/
88
- osc pipeline transcode https://testcontent.eyevinn.technology/mp4/stswe-tvplus-promo.mp4
112
+ % osc list minio-minio
89
113
  ```
90
114
 
91
- ### Compare two video files using VMAF
115
+ ### Enable CDN for access to MinIO bucket
116
+
117
+ Allow public read access to bucket.
118
+
119
+ ```
120
+ % mc anonymous set download mystore/mybucket
121
+ ```
122
+
123
+ Setup CDN property in AWS Cloudfront
124
+
125
+ ```
126
+ % osc web cdn-create --provider=cloudfront --origin-path=/mybucket minio-minio mystore
127
+ ```
128
+
129
+ ### Remove a MinIO storage bucket
130
+
131
+ ```
132
+ % osc remove minio-minio mystore
133
+ Are you sure you want to remove mystore? (yes/no) yes
134
+ ```
135
+
136
+ ### Create ABR file for VOD using SVT Encore
137
+
138
+ Create a VOD file for streaming from using a pipeline named `demo`. Follow the steps in the [Eyevinn Open Source Cloud documentation](https://docs.osaas.io/osaas.wiki/Solution%3A-VOD-Transcoding.html#vod-transcoding-and-packaging) on how to setup a pipeline.
92
139
 
93
140
  ```
94
- % osc compare vmaf s3://lab-testcontent-store/birme/snaxax_x264_3100.mp4 \
95
- s3://lab-testcontent-store/birme/snaxax_x264_324.mp4 \
96
- s3://lab-testcontent-store/birme/
141
+ % osc vod create demo https://testcontent.eyevinn.technology/mp4/VINN.mp4
97
142
  ```
98
143
 
99
144
  ### List all channel-engine instance for tenant `eyevinn` as an OSC super admin
package/src/web/cmd.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Context } from '@osaas/client-core';
2
- import { publish } from '@osaas/client-web';
2
+ import { createCloudfrontDistribution, publish } from '@osaas/client-web';
3
3
  import { Command } from 'commander';
4
4
 
5
5
  export function cmdWeb() {
@@ -33,5 +33,34 @@ export function cmdWeb() {
33
33
  }
34
34
  });
35
35
 
36
+ web
37
+ .command('cdn-create')
38
+ .description('Create a CDN distribution for a service instance')
39
+ .argument('<serviceId>', 'Service Id')
40
+ .argument('<instanceName>', 'Instance name')
41
+ .option('--provider <provider>', 'CDN provider (default: cloudfront)')
42
+ .option('--origin-path <originPath>', 'Origin path (default: /)')
43
+ .action(async (serviceId, instanceName, options, command) => {
44
+ try {
45
+ const globalOpts = command.optsWithGlobals();
46
+ const environment = globalOpts?.env || 'prod';
47
+ const ctx = new Context({ environment });
48
+
49
+ if (!options.provider) {
50
+ options.provider = 'cloudfront';
51
+ }
52
+ if (options.provider === 'cloudfront') {
53
+ console.log('Creating CloudFront distribution...');
54
+ await createCloudfrontDistribution(serviceId, instanceName, ctx, {
55
+ originPath: options.originPath
56
+ });
57
+ console.log('CloudFront distribution created');
58
+ } else {
59
+ console.log('CDN provider not supported (available: cloudfront)');
60
+ }
61
+ } catch (err) {
62
+ console.log((err as Error).message);
63
+ }
64
+ });
36
65
  return web;
37
66
  }