@into-cps-association/libms 0.3.1 → 0.4.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.
Files changed (65) hide show
  1. package/.env +0 -3
  2. package/DEVELOPER.md +24 -7
  3. package/README.md +42 -43
  4. package/config/.env.default +6 -0
  5. package/config/http.json +30 -0
  6. package/dist/src/bootstrap.d.ts +1 -0
  7. package/dist/src/bootstrap.js +4 -0
  8. package/dist/src/bootstrap.js.map +1 -1
  9. package/dist/src/cloudcmd/cloudcmd.d.ts +3 -0
  10. package/dist/src/cloudcmd/cloudcmd.js +22 -0
  11. package/dist/src/cloudcmd/cloudcmd.js.map +1 -0
  12. package/dist/src/files/files.module.js +1 -7
  13. package/dist/src/files/files.module.js.map +1 -1
  14. package/dist/src/files/services/files-service.factory.d.ts +1 -3
  15. package/dist/src/files/services/files-service.factory.js +2 -10
  16. package/dist/src/files/services/files-service.factory.js.map +1 -1
  17. package/dist/src/files/services/local-files.service.js +2 -2
  18. package/dist/src/main.js +8 -8
  19. package/dist/src/main.js.map +1 -1
  20. package/dist/test/cloudcmd/cloudcmd.spec.js +35 -0
  21. package/dist/test/cloudcmd/cloudcmd.spec.js.map +1 -0
  22. package/dist/test/e2e/app.e2e.spec.js +27 -10
  23. package/dist/test/e2e/app.e2e.spec.js.map +1 -1
  24. package/dist/test/integration/files.service.integration.spec.js +1 -3
  25. package/dist/test/integration/files.service.integration.spec.js.map +1 -1
  26. package/dist/test/testUtil.js +1 -10
  27. package/dist/test/testUtil.js.map +1 -1
  28. package/dist/test/unit/files-service.factory.unit.spec.js +0 -8
  29. package/dist/test/unit/files-service.factory.unit.spec.js.map +1 -1
  30. package/dist/tsconfig.tsbuildinfo +1 -1
  31. package/package.json +37 -27
  32. package/pm2.config.js +10 -0
  33. package/src/bootstrap.ts +8 -0
  34. package/src/cloudcmd/cloudcmd.ts +32 -0
  35. package/src/files/files.module.ts +1 -7
  36. package/src/files/services/files-service.factory.ts +0 -5
  37. package/src/files/services/local-files.service.ts +2 -2
  38. package/src/main.ts +12 -7
  39. package/test/cloudcmd/cloudcmd.spec.ts +52 -0
  40. package/test/coverage/clover.xml +14 -19
  41. package/test/coverage/coverage-final.json +1 -1
  42. package/test/coverage/lcov-report/base.css +261 -123
  43. package/test/coverage/lcov-report/index.html +13 -13
  44. package/test/coverage/lcov-report/prettify.css +101 -1
  45. package/test/coverage/lcov-report/testUtil.ts.html +8 -35
  46. package/test/coverage/lcov.info +10 -19
  47. package/test/e2e/app.e2e.spec.ts +42 -42
  48. package/test/integration/files.service.integration.spec.ts +1 -3
  49. package/test/testUtil.ts +1 -10
  50. package/test/unit/files-service.factory.unit.spec.ts +0 -9
  51. package/tsconfig.json +1 -1
  52. package/dist/src/files/queries.d.ts +0 -2
  53. package/dist/src/files/queries.js +0 -47
  54. package/dist/src/files/queries.js.map +0 -1
  55. package/dist/src/files/services/gitlab-files.service.d.ts +0 -12
  56. package/dist/src/files/services/gitlab-files.service.js +0 -65
  57. package/dist/src/files/services/gitlab-files.service.js.map +0 -1
  58. package/dist/test/unit/gitlab-files.service.unit.spec.js +0 -37
  59. package/dist/test/unit/gitlab-files.service.unit.spec.js.map +0 -1
  60. package/src/files/queries.ts +0 -42
  61. package/src/files/services/gitlab-files.service.ts +0 -65
  62. package/test/starttraefik.bash +0 -11
  63. package/test/stoptraefik.bash +0 -9
  64. package/test/unit/gitlab-files.service.unit.spec.ts +0 -46
  65. /package/dist/test/{unit/gitlab-files.service.unit.spec.d.ts → cloudcmd/cloudcmd.spec.d.ts} +0 -0
package/.env CHANGED
@@ -1,9 +1,6 @@
1
1
  PORT='4001'
2
2
  MODE='local'
3
3
  LOCAL_PATH ='/home/prasad/git/prasadtalasila/DTaaS/files'
4
- GITLAB_GROUP ='dtaas'
5
- GITLAB_URL='https://gitlab.foo.com/api/graphql'
6
- TOKEN='glpat-xFagGa33EW7bWpsM5q-Z'
7
4
  LOG_LEVEL='debug'
8
5
  APOLLO_PATH='/lib'
9
6
  GRAPHQL_PLAYGROUND='true'
package/DEVELOPER.md CHANGED
@@ -10,32 +10,49 @@ file. Please see [README](./README.md) for this information.
10
10
  ```bash
11
11
  yarn install # Install dependencies for the microservice
12
12
  yarn syntax # Analyze code for errors and style issues
13
+ yarn format #format .ts[x] and .js[x] files with prettier
13
14
  yarn graph # Generate dependency graphs in the code
14
15
  yarn build # Compile ES6 to ES5 and copy JS files to build/ directory
15
- yarn test:unit # Run all tests
16
- yarn test:e2e # Run end-to-end tests
16
+ yarn test:unit # Run unit tests
17
17
  yarn test:int # Run integration tests
18
- yarn test:all # Run unit tests
18
+ yarn test:e2e # Run end-to-end tests
19
+ yarn test:http # Run tests for HTTP file service provided by cloudcmd
20
+ yarn test:all # Run all tests except http tests
19
21
  yarn start -h # List of all the CLI commands
20
22
  yarn start # Start the application
23
+ yarn start:pm2 # Start the application with process manager 2
24
+ yarn stop:pm2 # Stop the application managed by process manager 2
21
25
  yarn clean # Deletes "build", "coverage", "dist" and other temp files
22
26
  ```
23
27
 
28
+ **NOTE:** The integration, end-to-end and http tests require a valid
29
+ `.env` file. Here is a sample file.
30
+
31
+ ```ini
32
+ PORT='4001'
33
+ MODE='local'
34
+ LOCAL_PATH ='/Users/<Username>/DTaaS/files'
35
+ LOG_LEVEL='debug'
36
+ APOLLO_PATH='/lib'
37
+ GRAPHQL_PLAYGROUND='true'
38
+ ```
39
+
24
40
  ## :package: :ship: NPM package
25
41
 
26
42
  ### Github Package Registry
27
43
 
28
44
  The Github actions workflow of
29
- [lib microservice](../../.github/workflows/lib-ms.yml) publishes the __libms__
30
- into [public packages](https://github.com/orgs/INTO-CPS-Association/packages).
45
+ [lib microservice](../../.github/workflows/lib-ms.yml) publishes the **libms**
46
+ into
47
+ [packages](https://github.com/orgs/INTO-CPS-Association/packages?repo_name=DTaaS).
31
48
 
32
49
  ### Verdaccio - Local Package Registry
33
50
 
34
51
  Use the instructions in
35
52
  [publish npm package](../../docs/developer/npm-packages.md) for help
36
- with publishing __libms npm package__ in local computer.
53
+ with publishing **libms npm package** in local computer.
37
54
 
38
- Application of the advice given on that page for __libms__ will require
55
+ Application of the advice given on that page for **libms** will require
39
56
  running the following commands.
40
57
 
41
58
  ### Publish
package/README.md CHANGED
@@ -1,28 +1,10 @@
1
1
  # Overview
2
2
 
3
3
  The **lib microservice** is a simplified file manager providing graphQL API.
4
- It has three features:
4
+ It has two features:
5
5
 
6
6
  * provide a listing of directory contents.
7
7
  * transfer a file to user.
8
- * Source files can either come from local file system or from a gitlab instance.
9
-
10
- ## Gitlab setup
11
-
12
- For this microserivce to be functional,
13
- a certain directory or gitlab project structure is expected.
14
- The microservice expects that the gitlab consisting of one group, dtaas (by convention),
15
- and within that group, all of the projects be located,
16
- **user1**, **user2**, ... , as well as a **commons** projects.
17
- Each project corresponds to files of one user.
18
- A sample file structure can be seen in [gitlab dtaas group](https://gitlab.com/dtaas).
19
- You can visit the gitlab documentation on
20
- [groups](https://docs.gitlab.com/ee/user/group/)
21
- for help on the management of gitlab groups.
22
-
23
- You can clone the git repositories from
24
- the [gitlab dtaas](https://gitlab.com/dtaas) group
25
- to get a sample file system structure for the lib microservice.
26
8
 
27
9
  ## :arrow_down: Install
28
10
 
@@ -51,9 +33,6 @@ The template configuration file is:
51
33
  PORT='4001'
52
34
  MODE='local' or 'gitlab'
53
35
  LOCAL_PATH ='/Users/<Username>/DTaaS/files'
54
- GITLAB_GROUP ='dtaas'
55
- GITLAB_URL='https://gitlab.com/api/graphql'
56
- TOKEN='123-sample-token'
57
36
  LOG_LEVEL='debug'
58
37
  APOLLO_PATH='/lib' or ''
59
38
  GRAPHQL_PLAYGROUND='false' or 'true'
@@ -61,34 +40,34 @@ GRAPHQL_PLAYGROUND='false' or 'true'
61
40
 
62
41
  The `LOCAL_PATH` variable is the absolute filepath to the
63
42
  location of the local directory which will be served to users
64
- by the Library microservice.
65
-
66
- The `GITLAB_URL`, `GITLAB_GROUP` and `TOKEN` are only relevant for `gitlab` mode.
67
- The `TOKEN` should be set to your GitLab Group access API token.
68
- For more information on how to create and use your access token,
69
- [gitlab page](https://docs.gitlab.com/ee/user/group/settings/group_access_tokens.html).
70
-
71
- Once you've generated a token, copy it and replace
72
- the value of `TOKEN` with your token for the gitlab group,
43
+ by the Library microservice. This
44
+ [sample configuration file](./config/.env.default) can be used.
73
45
 
74
46
  Replace the default values the appropriate values for your setup.
75
47
 
76
- **NOTE**:
77
-
78
- 1. When \__MODE=local_, only _LOCAL_PATH_ is used.
79
- Other environment variables are unused.
80
- 1. When _MODE=gitlab_, _GITLAB_URL, TOKEN_,
81
- and _GITLAB_GROUP_ are used; _LOCAL_PATH_ is unused.
82
-
83
48
  ## :rocket: Use
84
49
 
85
50
  Display help.
86
51
 
87
52
  ```bash
88
- libms -h
53
+ $libms -h
54
+ Usage: libms [options]
55
+
56
+ The lib microservice is a file server. It supports file transfer
57
+ over GraphQL and HTTP protocols.
58
+
59
+ Options:
60
+ -c, --config <file> provide the config file (default .env)
61
+ -H, --http <file> enable the HTTP server with the specified config
62
+ -h, --help display help for libms
89
63
  ```
90
64
 
91
- The config is saved `.env` file by convention. The **libms** looks for
65
+ Both the options are not mandatory.
66
+
67
+ ### Configuration file
68
+
69
+ The config is saved `.env` file by convention. If `-c` is not specified
70
+ The **libms** looks for
92
71
  `.env` file in the working directory from which it is run.
93
72
  If you want to run **libms** without explicitly specifying the configuration
94
73
  file, run
@@ -105,15 +84,35 @@ libms --config FILE-PATH
105
84
  ```
106
85
 
107
86
  If the environment file is named something other than `.env`,
108
- for example as `.env.development`, you can run
87
+ for example as `config/.env.default`, you can run
109
88
 
110
89
  ```sh
111
- libms -c ".env.development"
90
+ libms -c "config/.env.default"
112
91
  ```
113
92
 
114
93
  You can press `Ctl+C` to halt the application.
115
94
 
116
- The microservice is available at: 'localhost:PORT/lib'
95
+ ### Protocol Support
96
+
97
+ The **libms** supports GraphQL protocol by default.
98
+ It is possible to enable the HTTP protocol by setting
99
+ the `-H` option.
100
+
101
+ To run **libms** with a custom config for HTTP protocol, use
102
+
103
+ ```bash
104
+ libms -H FILE-PATH
105
+ libms --http FILE-PATH
106
+ ```
107
+
108
+ A sample configuration is [available](./config/http.json).
109
+
110
+ ### Accessible URLs
111
+
112
+ The microservice is available at:
113
+
114
+ **GraphQL protocol**: 'localhost:PORT/lib'
115
+ **HTTP protocol**: 'localhost:PORT/lib/files'
117
116
 
118
117
  <!-- markdownlint-disable-next-line MD013 -->
119
118
  The [API](https://into-cps-association.github.io/DTaaS/development/user/servers/lib/LIB-MS.html) page shows sample queries and responses.
@@ -0,0 +1,6 @@
1
+ PORT='4001'
2
+ MODE='local' or 'gitlab'
3
+ LOCAL_PATH ='/Users/<Username>/DTaaS/files'
4
+ LOG_LEVEL='debug'
5
+ APOLLO_PATH='/lib' or ''
6
+ GRAPHQL_PLAYGROUND='false' or 'true'
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "DTaaS Fileserver",
3
+ "auth": false,
4
+ "editor": "edward",
5
+ "packer": "zip",
6
+ "diff": true,
7
+ "zip": true,
8
+ "buffer": true,
9
+ "dirStorage": true,
10
+ "online": false,
11
+ "open": false,
12
+ "oneFilePanel": true,
13
+ "keysPanel": false,
14
+ "prefix": "/lib/files",
15
+ "confirmCopy": true,
16
+ "confirmMove": true,
17
+ "showConfig": false,
18
+ "showFileName": true,
19
+ "contact": false,
20
+ "configDialog": false,
21
+ "console": false,
22
+ "terminal": false,
23
+ "vim": false,
24
+ "columns": "name-size-date-owner-mode",
25
+ "export": false,
26
+ "import": false,
27
+ "dropbox": false,
28
+ "dropboxToken": "",
29
+ "log": true
30
+ }
@@ -1,5 +1,6 @@
1
1
  type BootstrapOptions = {
2
2
  config?: string;
3
+ httpServer?: string;
3
4
  runHelp?: CallableFunction;
4
5
  };
5
6
  export default function bootstrap(options?: BootstrapOptions): Promise<void>;
@@ -4,6 +4,7 @@ const core_1 = require("@nestjs/core");
4
4
  const config_1 = require("@nestjs/config");
5
5
  const dotenv = require("dotenv");
6
6
  const app_module_1 = require("./app.module");
7
+ const cloudcmd_1 = require("./cloudcmd/cloudcmd");
7
8
  async function bootstrap(options) {
8
9
  const configFile = dotenv.config({
9
10
  path: options?.config ?? '.env',
@@ -21,6 +22,9 @@ async function bootstrap(options) {
21
22
  const app = await core_1.NestFactory.create(app_module_1.default);
22
23
  const configService = app.get(config_1.ConfigService);
23
24
  const port = configService.get('PORT');
25
+ if (options.httpServer) {
26
+ (0, cloudcmd_1.default)(app, options.httpServer, configService.get('LOCAL_PATH'));
27
+ }
24
28
  await app.listen(port);
25
29
  }
26
30
  exports.default = bootstrap;
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/bootstrap.ts"],"names":[],"mappings":";;AAAA,uCAA2C;AAC3C,2CAA+C;AAC/C,iCAAiC;AACjC,6CAAqC;AAOtB,KAAK,UAAU,SAAS,CAAC,OAA0B;IAChE,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;QAC/B,IAAI,EAAE,OAAO,EAAE,MAAM,IAAI,MAAM;QAC/B,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;IACH,IAAI,UAAU,CAAC,KAAK,EAAE;QAEpB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,OAAO,CAAC,OAAO,EAAE;YACnB,OAAO,CAAC,OAAO,EAAE,CAAC;SACnB;aAAM;YACL,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACjB;KACF;IACD,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,MAAM,CAAC,oBAAS,CAAC,CAAC;IAChD,MAAM,aAAa,GAAG,GAAG,CAAC,GAAG,CAAC,sBAAa,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAS,MAAM,CAAC,CAAC;IAC/C,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAlBD,4BAkBC"}
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/bootstrap.ts"],"names":[],"mappings":";;AAAA,uCAA2C;AAC3C,2CAA+C;AAC/C,iCAAiC;AACjC,6CAAqC;AACrC,kDAA2C;AAQ5B,KAAK,UAAU,SAAS,CAAC,OAA0B;IAChE,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;QAC/B,IAAI,EAAE,OAAO,EAAE,MAAM,IAAI,MAAM;QAC/B,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;IACH,IAAI,UAAU,CAAC,KAAK,EAAE;QAEpB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,OAAO,CAAC,OAAO,EAAE;YACnB,OAAO,CAAC,OAAO,EAAE,CAAC;SACnB;aAAM;YACL,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACjB;KACF;IAED,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,MAAM,CAAC,oBAAS,CAAC,CAAC;IAChD,MAAM,aAAa,GAAG,GAAG,CAAC,GAAG,CAAC,sBAAa,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAS,MAAM,CAAC,CAAC;IAE/C,IAAI,OAAO,CAAC,UAAU,EAAE;QACtB,IAAA,kBAAQ,EAAC,GAAG,EAAE,OAAO,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,CAAS,YAAY,CAAC,CAAC,CAAC;KAC5E;IAED,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAxBD,4BAwBC"}
@@ -0,0 +1,3 @@
1
+ import { INestApplication } from '@nestjs/common';
2
+ declare const runCloudCMD: (app: INestApplication, optionsPath: string, filesPath: string) => void;
3
+ export default runCloudCMD;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const socket_io_1 = require("socket.io");
4
+ const cloudcmd = require("cloudcmd");
5
+ const path_1 = require("path");
6
+ const runCloudCMD = (app, optionsPath, filesPath) => {
7
+ const { createConfigManager } = cloudcmd;
8
+ const configManager = createConfigManager({
9
+ configPath: (0, path_1.join)(process.cwd(), optionsPath),
10
+ });
11
+ configManager('root', filesPath);
12
+ const server = app.getHttpServer();
13
+ const socket = new socket_io_1.Server(server, {
14
+ path: `${configManager('prefix')}/socket.io`,
15
+ });
16
+ app.use(configManager('prefix'), cloudcmd({
17
+ configManager,
18
+ socket,
19
+ }));
20
+ };
21
+ exports.default = runCloudCMD;
22
+ //# sourceMappingURL=cloudcmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudcmd.js","sourceRoot":"","sources":["../../../src/cloudcmd/cloudcmd.ts"],"names":[],"mappings":";;AACA,yCAAmC;AACnC,qCAAqC;AACrC,+BAA4B;AAE5B,MAAM,WAAW,GAAG,CAClB,GAAqB,EACrB,WAAmB,EACnB,SAAiB,EACjB,EAAE;IACF,MAAM,EAAE,mBAAmB,EAAE,GAAG,QAAQ,CAAC;IACzC,MAAM,aAAa,GAAG,mBAAmB,CAAC;QACxC,UAAU,EAAE,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC;KAC7C,CAAC,CAAC;IAEH,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAEjC,MAAM,MAAM,GAAG,GAAG,CAAC,aAAa,EAAE,CAAC;IAEnC,MAAM,MAAM,GAAG,IAAI,kBAAM,CAAC,MAAM,EAAE;QAChC,IAAI,EAAE,GAAG,aAAa,CAAC,QAAQ,CAAC,YAAY;KAC7C,CAAC,CAAC;IACH,GAAG,CAAC,GAAG,CACL,aAAa,CAAC,QAAQ,CAAC,EACvB,QAAQ,CAAC;QACP,aAAa;QACb,MAAM;KACP,CAAC,CACH,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,WAAW,CAAC"}
@@ -8,19 +8,13 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  const common_1 = require("@nestjs/common");
10
10
  const files_resolver_1 = require("./resolvers/files.resolver");
11
- const gitlab_files_service_1 = require("./services/gitlab-files.service");
12
11
  const files_service_factory_1 = require("./services/files-service.factory");
13
12
  const local_files_service_1 = require("./services/local-files.service");
14
13
  let FilesModule = class FilesModule {
15
14
  };
16
15
  FilesModule = __decorate([
17
16
  (0, common_1.Module)({
18
- providers: [
19
- files_resolver_1.default,
20
- local_files_service_1.default,
21
- gitlab_files_service_1.default,
22
- files_service_factory_1.default,
23
- ],
17
+ providers: [files_resolver_1.default, local_files_service_1.default, files_service_factory_1.default],
24
18
  })
25
19
  ], FilesModule);
26
20
  exports.default = FilesModule;
@@ -1 +1 @@
1
- {"version":3,"file":"files.module.js","sourceRoot":"","sources":["../../../src/files/files.module.ts"],"names":[],"mappings":";;;;;;;;AAAA,2CAAwC;AACxC,+DAAuD;AACvD,0EAAiE;AACjE,4EAAmE;AACnE,wEAA+D;AAUhD,IAAM,WAAW,GAAjB,MAAM,WAAW;CAAG,CAAA;AAAd,WAAW;IAR/B,IAAA,eAAM,EAAC;QACN,SAAS,EAAE;YACT,wBAAa;YACb,6BAAiB;YACjB,8BAAkB;YAClB,+BAAmB;SACpB;KACF,CAAC;GACmB,WAAW,CAAG;kBAAd,WAAW"}
1
+ {"version":3,"file":"files.module.js","sourceRoot":"","sources":["../../../src/files/files.module.ts"],"names":[],"mappings":";;;;;;;;AAAA,2CAAwC;AACxC,+DAAuD;AACvD,4EAAmE;AACnE,wEAA+D;AAKhD,IAAM,WAAW,GAAjB,MAAM,WAAW;CAAG,CAAA;AAAd,WAAW;IAH/B,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,wBAAa,EAAE,6BAAiB,EAAE,+BAAmB,CAAC;KACnE,CAAC;GACmB,WAAW,CAAG;kBAAd,WAAW"}
@@ -1,11 +1,9 @@
1
1
  import { ConfigService } from '@nestjs/config';
2
2
  import { IFilesService } from '../interfaces/files.service.interface';
3
- import GitlabFilesService from './gitlab-files.service';
4
3
  import LocalFilesService from './local-files.service';
5
4
  export default class FilesServiceFactory {
6
5
  private configService;
7
- private gitlabFilesService;
8
6
  private localFilesService;
9
- constructor(configService: ConfigService, gitlabFilesService: GitlabFilesService, localFilesService: LocalFilesService);
7
+ constructor(configService: ConfigService, localFilesService: LocalFilesService);
10
8
  create(): IFilesService;
11
9
  }
@@ -14,15 +14,12 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  const common_1 = require("@nestjs/common");
16
16
  const config_1 = require("@nestjs/config");
17
- const gitlab_files_service_1 = require("./gitlab-files.service");
18
17
  const local_files_service_1 = require("./local-files.service");
19
18
  let FilesServiceFactory = class FilesServiceFactory {
20
19
  configService;
21
- gitlabFilesService;
22
20
  localFilesService;
23
- constructor(configService, gitlabFilesService, localFilesService) {
21
+ constructor(configService, localFilesService) {
24
22
  this.configService = configService;
25
- this.gitlabFilesService = gitlabFilesService;
26
23
  this.localFilesService = localFilesService;
27
24
  }
28
25
  create() {
@@ -30,18 +27,13 @@ let FilesServiceFactory = class FilesServiceFactory {
30
27
  if (mode === 'local') {
31
28
  return this.localFilesService;
32
29
  }
33
- if (mode === 'gitlab') {
34
- return this.gitlabFilesService;
35
- }
36
30
  throw new Error(`Invalid MODE: ${mode}`);
37
31
  }
38
32
  };
39
33
  FilesServiceFactory = __decorate([
40
34
  (0, common_1.Injectable)(),
41
- __param(1, (0, common_1.Inject)(gitlab_files_service_1.default)),
42
- __param(2, (0, common_1.Inject)(local_files_service_1.default)),
35
+ __param(1, (0, common_1.Inject)(local_files_service_1.default)),
43
36
  __metadata("design:paramtypes", [config_1.ConfigService,
44
- gitlab_files_service_1.default,
45
37
  local_files_service_1.default])
46
38
  ], FilesServiceFactory);
47
39
  exports.default = FilesServiceFactory;
@@ -1 +1 @@
1
- {"version":3,"file":"files-service.factory.js","sourceRoot":"","sources":["../../../../src/files/services/files-service.factory.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,2CAAoD;AACpD,2CAA+C;AAE/C,iEAAwD;AACxD,+DAAsD;AAGvC,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAG5B;IAC4B;IACD;IAHrC,YACU,aAA4B,EACA,kBAAsC,EACvC,iBAAoC;QAF/D,kBAAa,GAAb,aAAa,CAAe;QACA,uBAAkB,GAAlB,kBAAkB,CAAoB;QACvC,sBAAiB,GAAjB,iBAAiB,CAAmB;IACtE,CAAC;IAGJ,MAAM;QACJ,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,MAAM,CAAC,CAAC;QACpD,IAAI,IAAI,KAAK,OAAO,EAAE;YACpB,OAAO,IAAI,CAAC,iBAAiB,CAAC;SAC/B;QACD,IAAI,IAAI,KAAK,QAAQ,EAAE;YACrB,OAAO,IAAI,CAAC,kBAAkB,CAAC;SAChC;QACD,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;CACF,CAAA;AAnBoB,mBAAmB;IADvC,IAAA,mBAAU,GAAE;IAKR,WAAA,IAAA,eAAM,EAAC,8BAAkB,CAAC,CAAA;IAC1B,WAAA,IAAA,eAAM,EAAC,6BAAiB,CAAC,CAAA;qCAFH,sBAAa;QACoB,8BAAkB;QACpB,6BAAiB;GALtD,mBAAmB,CAmBvC;kBAnBoB,mBAAmB"}
1
+ {"version":3,"file":"files-service.factory.js","sourceRoot":"","sources":["../../../../src/files/services/files-service.factory.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,2CAAoD;AACpD,2CAA+C;AAE/C,+DAAsD;AAGvC,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAG5B;IAC2B;IAFrC,YACU,aAA4B,EACD,iBAAoC;QAD/D,kBAAa,GAAb,aAAa,CAAe;QACD,sBAAiB,GAAjB,iBAAiB,CAAmB;IACtE,CAAC;IAGJ,MAAM;QACJ,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,MAAM,CAAC,CAAC;QACpD,IAAI,IAAI,KAAK,OAAO,EAAE;YACpB,OAAO,IAAI,CAAC,iBAAiB,CAAC;SAC/B;QACD,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;CACF,CAAA;AAfoB,mBAAmB;IADvC,IAAA,mBAAU,GAAE;IAKR,WAAA,IAAA,eAAM,EAAC,6BAAiB,CAAC,CAAA;qCADH,sBAAa;QACkB,6BAAiB;GAJtD,mBAAmB,CAevC;kBAfoB,mBAAmB"}
@@ -36,9 +36,9 @@ let LocalFilesService = LocalFilesService_1 = class LocalFilesService {
36
36
  }
37
37
  async readFile(path) {
38
38
  const dataPath = this.configService.get('LOCAL_PATH');
39
- const fullpath = (0, path_1.join)(dataPath, path);
39
+ const fullPath = (0, path_1.join)(dataPath, path);
40
40
  try {
41
- const content = await (await fs.promises.readFile(fullpath, 'utf8')).trim();
41
+ const content = await (await fs.promises.readFile(fullPath, 'utf8')).trim();
42
42
  const name = path.split('/').pop();
43
43
  return LocalFilesService_1.formatResponse(name, content);
44
44
  }
package/dist/src/main.js CHANGED
@@ -5,16 +5,16 @@ const commander_1 = require("commander");
5
5
  const bootstrap_1 = require("./bootstrap");
6
6
  const program = new commander_1.Command();
7
7
  program
8
- .description('The lib microservice is responsible for handling and serving the contents of library assets of the DTaaS platform. It provides API endpoints for clients to query, and fetch these assets.')
9
- .option('-c, --config <path>', 'set the config path (default .env)')
8
+ .description('The lib microservice is a file server. It supports file transfer over GraphQL and HTTP protocols.')
9
+ .option('-c, --config <file>', 'provide the config file (default .env)')
10
+ .option('-H, --http <file>', 'enable the HTTP server with the specified config')
10
11
  .helpOption('-h, --help', 'display help for libms')
11
12
  .showHelpAfterError();
12
13
  program.parse(process.argv);
13
14
  const options = program.opts();
14
- if (options.config) {
15
- (0, bootstrap_1.default)({ config: options.config, runHelp: () => program.help() });
16
- }
17
- else {
18
- (0, bootstrap_1.default)({ runHelp: () => program.help() });
19
- }
15
+ (0, bootstrap_1.default)({
16
+ config: options.config,
17
+ httpServer: options.http,
18
+ runHelp: () => program.help(),
19
+ });
20
20
  //# sourceMappingURL=main.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":";;;AACA,yCAAoC;AACpC,2CAAoC;AAMpC,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,WAAW,CACV,4LAA4L,CAC7L;KACA,MAAM,CAAC,qBAAqB,EAAE,oCAAoC,CAAC;KACnE,UAAU,CAAC,YAAY,EAAE,wBAAwB,CAAC;KAClD,kBAAkB,EAAE,CAAC;AAExB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,MAAM,OAAO,GAAmB,OAAO,CAAC,IAAI,EAAE,CAAC;AAE/C,IAAI,OAAO,CAAC,MAAM,EAAE;IAClB,IAAA,mBAAS,EAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;CACtE;KAAM;IACL,IAAA,mBAAS,EAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;CAC9C"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":";;;AACA,yCAAoC;AACpC,2CAAoC;AAOpC,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,WAAW,CACV,mGAAmG,CACpG;KACA,MAAM,CAAC,qBAAqB,EAAE,wCAAwC,CAAC;KACvE,MAAM,CACL,mBAAmB,EACnB,kDAAkD,CACnD;KACA,UAAU,CAAC,YAAY,EAAE,wBAAwB,CAAC;KAClD,kBAAkB,EAAE,CAAC;AAExB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,MAAM,OAAO,GAAmB,OAAO,CAAC,IAAI,EAAE,CAAC;AAE/C,IAAA,mBAAS,EAAC;IACR,MAAM,EAAE,OAAO,CAAC,MAAM;IACtB,UAAU,EAAE,OAAO,CAAC,IAAI;IACxB,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE;CAC9B,CAAC,CAAC"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const axios_1 = require("axios");
4
+ const promises_1 = require("fs/promises");
5
+ const dotenv_1 = require("dotenv");
6
+ describe('cloudcmd test for the application', () => {
7
+ beforeAll(async () => {
8
+ (0, dotenv_1.config)();
9
+ await (0, promises_1.writeFile)(`${process.env.LOCAL_PATH}/test.txt`, 'content12345');
10
+ await new Promise((resolve) => setTimeout(resolve, 8000));
11
+ }, 10000);
12
+ afterAll(async () => {
13
+ await (0, promises_1.unlink)(`${process.env.LOCAL_PATH}/test.txt`);
14
+ await (0, promises_1.unlink)(`${process.env.LOCAL_PATH}/uploadTest.txt`);
15
+ }, 10000);
16
+ it('should return the correct directory that is set as root', async () => {
17
+ const response = await axios_1.default.get(`http://localhost:${process.env.PORT}${process.env.APOLLO_PATH}/files/api/v1/fs`, {
18
+ responseType: 'json',
19
+ });
20
+ console.log(response.data);
21
+ expect(response.data.path).toEqual('/');
22
+ expect(response.data.files[0].name).toEqual('common');
23
+ expect(response.data.files[1].name).toEqual('user1');
24
+ expect(response.data.files[2].name).toEqual('user2');
25
+ }, 10000);
26
+ it('should return the content of a file that is uplaoded to cloudcmd ', async () => {
27
+ const response = await axios_1.default.get(`http://localhost:${process.env.PORT}${process.env.APOLLO_PATH}/files/api/v1/fs/test.txt`);
28
+ expect(response.data).toEqual('content12345');
29
+ }, 10000);
30
+ it('should upload a file to cloudcmd', async () => {
31
+ const response = await axios_1.default.put(`http://localhost:${process.env.PORT}${process.env.APOLLO_PATH}/files/api/v1/fs/uploadTest.txt`, 'some content', { responseType: 'text' });
32
+ expect(response.data).toEqual('save: ok("uploadTest.txt")');
33
+ }, 10000);
34
+ });
35
+ //# sourceMappingURL=cloudcmd.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudcmd.spec.js","sourceRoot":"","sources":["../../../test/cloudcmd/cloudcmd.spec.ts"],"names":[],"mappings":";;AAAA,iCAA0B;AAC1B,0CAAgD;AAChD,mCAAgC;AAEhC,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;IACjD,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,IAAA,eAAM,GAAE,CAAC;QAET,MAAM,IAAA,oBAAS,EAAC,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,WAAW,EAAE,cAAc,CAAC,CAAC;QAEtE,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAC5D,CAAC,EAAE,KAAK,CAAC,CAAC;IAEV,QAAQ,CAAC,KAAK,IAAI,EAAE;QAClB,MAAM,IAAA,iBAAM,EAAC,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,WAAW,CAAC,CAAC;QACnD,MAAM,IAAA,iBAAM,EAAC,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,iBAAiB,CAAC,CAAC;IAC3D,CAAC,EAAE,KAAK,CAAC,CAAC;IAEV,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,GAAG,CAC9B,oBAAoB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,kBAAkB,EAChF;YACE,YAAY,EAAE,MAAM;SACrB,CACF,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAE3B,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACvD,CAAC,EAAE,KAAK,CAAC,CAAC;IAEV,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACjF,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,GAAG,CAC9B,oBAAoB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,2BAA2B,CAC1F,CAAC;QAEF,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAChD,CAAC,EAAE,KAAK,CAAC,CAAC;IAEV,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,GAAG,CAC9B,oBAAoB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,iCAAiC,EAC/F,cAAc,EACd,EAAE,YAAY,EAAE,MAAM,EAAE,CACzB,CAAC;QAEF,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;IAC9D,CAAC,EAAE,KAAK,CAAC,CAAC;AACZ,CAAC,CAAC,CAAC"}
@@ -2,8 +2,17 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const testing_1 = require("@nestjs/testing");
4
4
  const request = require("supertest");
5
+ const cross_fetch_1 = require("cross-fetch");
6
+ const client_1 = require("@apollo/client");
5
7
  const app_module_1 = require("../../src/app.module");
6
8
  const testUtil_1 = require("../testUtil");
9
+ const client = new client_1.ApolloClient({
10
+ link: new client_1.HttpLink({
11
+ uri: `http://localhost:${process.env.PORT}${process.env.APOLLO_PATH}`,
12
+ fetch: cross_fetch_1.default,
13
+ }),
14
+ cache: new client_1.InMemoryCache({ addTypename: false }),
15
+ });
7
16
  describe('End to End test for the application', () => {
8
17
  let app;
9
18
  beforeAll(async () => {
@@ -18,19 +27,27 @@ describe('End to End test for the application', () => {
18
27
  afterAll(async () => {
19
28
  await app.close();
20
29
  }, 10000);
21
- it('should return the filename corresponding to the directory given in the query', async () => {
22
- const query = testUtil_1.e2elistDirectory;
23
- const response = await request('http://localhost:4001')
30
+ async function HTTPQuery(query, expectedResponse) {
31
+ const response = await request(`http://localhost:${process.env.PORT}`)
24
32
  .post(process.env.APOLLO_PATH)
25
33
  .send({ query });
26
- expect(response.body).toEqual(testUtil_1.expectedListDirectoryResponse);
34
+ expect(response.body).toEqual(expectedResponse);
35
+ }
36
+ async function GraphQLQuery(query, expectedResponse) {
37
+ const { data } = await client.query({ query });
38
+ expect({ data }).toEqual(expectedResponse);
39
+ }
40
+ it('should return the directory contents requested with HTTP POST query', async () => {
41
+ await HTTPQuery(testUtil_1.e2elistDirectory, testUtil_1.expectedListDirectoryResponse);
27
42
  }, 10000);
28
- it('should return the content of a file given in the query ', async () => {
29
- const query = testUtil_1.e2eReadFile;
30
- const response = await request('http://localhost:4001')
31
- .post(process.env.APOLLO_PATH)
32
- .send({ query });
33
- expect(response.body).toEqual(testUtil_1.expectedFileContentResponse);
43
+ it('should return the file content requested with HTTP POST query', async () => {
44
+ await HTTPQuery(testUtil_1.e2eReadFile, testUtil_1.expectedFileContentResponse);
45
+ }, 10000);
46
+ it('should return the directory contents requested with GraphQL query', async () => {
47
+ await GraphQLQuery((0, client_1.gql)(testUtil_1.e2elistDirectory), testUtil_1.expectedListDirectoryResponse);
48
+ }, 10000);
49
+ it('should return the file content requested with GraphQL query', async () => {
50
+ await GraphQLQuery((0, client_1.gql)(testUtil_1.e2eReadFile), testUtil_1.expectedFileContentResponse);
34
51
  }, 10000);
35
52
  });
36
53
  //# sourceMappingURL=app.e2e.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"app.e2e.spec.js","sourceRoot":"","sources":["../../../test/e2e/app.e2e.spec.ts"],"names":[],"mappings":";;AAAA,6CAAsD;AAEtD,qCAAqC;AAErC,qDAA6C;AAC7C,0CAKqB;AAErB,QAAQ,CAAC,qCAAqC,EAAE,GAAG,EAAE;IACnD,IAAI,GAAqB,CAAC;IAE1B,SAAS,CAAC,KAAK,IAAI,EAAE;QAGnB,MAAM,aAAa,GAAkB,MAAM,cAAI,CAAC,mBAAmB,CAAC;YAClE,OAAO,EAAE,CAAC,oBAAS,CAAC;SACrB,CAAC,CAAC,OAAO,EAAE,CAAC;QACb,GAAG,GAAG,aAAa,CAAC,qBAAqB,EAAE,CAAC;QAC5C,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAGnC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAC5D,CAAC,EAAE,KAAK,CAAC,CAAC;IAEV,QAAQ,CAAC,KAAK,IAAI,EAAE;QAElB,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC,EAAE,KAAK,CAAC,CAAC;IAEV,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;QAC5F,MAAM,KAAK,GAAG,2BAAgB,CAAC;QAE/B,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,uBAAuB,CAAC;aACpD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;aAC7B,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACnB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,wCAA6B,CAAC,CAAC;IAC/D,CAAC,EAAE,KAAK,CAAC,CAAC;IAEV,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,KAAK,GAAG,sBAAW,CAAC;QAE1B,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,uBAAuB,CAAC;aACpD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;aAC7B,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACnB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,sCAA2B,CAAC,CAAC;IAC7D,CAAC,EAAE,KAAK,CAAC,CAAC;AACZ,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"app.e2e.spec.js","sourceRoot":"","sources":["../../../test/e2e/app.e2e.spec.ts"],"names":[],"mappings":";;AAAA,6CAAsD;AAEtD,qCAAqC;AACrC,6CAAgC;AAChC,2CAMwB;AACxB,qDAA6C;AAC7C,0CAKqB;AAErB,MAAM,MAAM,GAAG,IAAI,qBAAY,CAAC;IAC9B,IAAI,EAAE,IAAI,iBAAQ,CAAC;QACjB,GAAG,EAAE,oBAAoB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE;QACrE,KAAK,EAAL,qBAAK;KACN,CAAC;IACF,KAAK,EAAE,IAAI,sBAAa,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;CACjD,CAAC,CAAC;AAEH,QAAQ,CAAC,qCAAqC,EAAE,GAAG,EAAE;IACnD,IAAI,GAAqB,CAAC;IAE1B,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,aAAa,GAAkB,MAAM,cAAI,CAAC,mBAAmB,CAAC;YAClE,OAAO,EAAE,CAAC,oBAAS,CAAC;SACrB,CAAC,CAAC,OAAO,EAAE,CAAC;QACb,GAAG,GAAG,aAAa,CAAC,qBAAqB,EAAE,CAAC;QAC5C,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAGnC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAC5D,CAAC,EAAE,KAAK,CAAC,CAAC;IAEV,QAAQ,CAAC,KAAK,IAAI,EAAE;QAClB,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC,EAAE,KAAK,CAAC,CAAC;IAEV,KAAK,UAAU,SAAS,CACtB,KAAa,EACb,gBAAyB;QAEzB,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,oBAAoB,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;aACnE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;aAC7B,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACnB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,UAAU,YAAY,CACzB,KAAmB,EACnB,gBAAyB;QAEzB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/C,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC7C,CAAC;IACD,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACnF,MAAM,SAAS,CAAC,2BAAgB,EAAE,wCAA6B,CAAC,CAAC;IACnE,CAAC,EAAE,KAAK,CAAC,CAAC;IAEV,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,SAAS,CAAC,sBAAW,EAAE,sCAA2B,CAAC,CAAC;IAC5D,CAAC,EAAE,KAAK,CAAC,CAAC;IAEV,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACjF,MAAM,YAAY,CAAC,IAAA,YAAG,EAAC,2BAAgB,CAAC,EAAE,wCAA6B,CAAC,CAAC;IAC3E,CAAC,EAAE,KAAK,CAAC,CAAC;IAEV,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,MAAM,YAAY,CAAC,IAAA,YAAG,EAAC,sBAAW,CAAC,EAAE,sCAA2B,CAAC,CAAC;IACpE,CAAC,EAAE,KAAK,CAAC,CAAC;AACZ,CAAC,CAAC,CAAC"}
@@ -5,7 +5,6 @@ const config_1 = require("@nestjs/config");
5
5
  const files_resolver_1 = require("../../src/files/resolvers/files.resolver");
6
6
  const files_service_factory_1 = require("../../src/files/services/files-service.factory");
7
7
  const local_files_service_1 = require("../../src/files/services/local-files.service");
8
- const gitlab_files_service_1 = require("../../src/files/services/gitlab-files.service");
9
8
  const testUtil_1 = require("../testUtil");
10
9
  describe('Integration tests for FilesResolver', () => {
11
10
  let filesResolver;
@@ -17,7 +16,6 @@ describe('Integration tests for FilesResolver', () => {
17
16
  files_resolver_1.default,
18
17
  files_service_factory_1.default,
19
18
  local_files_service_1.default,
20
- gitlab_files_service_1.default,
21
19
  { provide: config_1.ConfigService, useClass: testUtil_1.MockConfigService },
22
20
  ],
23
21
  }).compile();
@@ -26,7 +24,7 @@ describe('Integration tests for FilesResolver', () => {
26
24
  afterEach(() => {
27
25
  jest.clearAllMocks();
28
26
  });
29
- const modes = ['local', 'gitlab'];
27
+ const modes = ['local'];
30
28
  for (const mode of modes) {
31
29
  describe(`when MODE is ${mode}`, () => {
32
30
  beforeEach(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"files.service.integration.spec.js","sourceRoot":"","sources":["../../../test/integration/files.service.integration.spec.ts"],"names":[],"mappings":";;AAAA,6CAAsD;AACtD,2CAA+C;AAC/C,6EAAqE;AACrE,0FAAiF;AACjF,sFAA6E;AAC7E,wFAA+E;AAC/E,0CAMqB;AAErB,QAAQ,CAAC,qCAAqC,EAAE,GAAG,EAAE;IACnD,IAAI,aAA4B,CAAC;IACjC,IAAI,iBAAoC,CAAC;IAEzC,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,iBAAiB,GAAG,IAAI,4BAAiB,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAkB,MAAM,cAAI,CAAC,mBAAmB,CAAC;YAC3D,SAAS,EAAE;gBACT,wBAAa;gBACb,+BAAmB;gBACnB,6BAAiB;gBACjB,8BAAkB;gBAClB,EAAE,OAAO,EAAE,sBAAa,EAAE,QAAQ,EAAE,4BAAiB,EAAE;aACxD;SACF,CAAC,CAAC,OAAO,EAAE,CAAC;QAEb,aAAa,GAAG,MAAM,CAAC,GAAG,CAAgB,wBAAa,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAGlC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QAExB,QAAQ,CAAC,gBAAgB,IAAI,EAAE,EAAE,GAAG,EAAE;YACpC,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAC7D,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;gBAC3B,MAAM,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,CAAC;YACtC,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;gBAC7B,EAAE,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;oBACjC,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,aAAa,CAAC,8BAAmB,CAAC,CAAC;oBACrE,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,wBAAa,CAAC,CAAC;gBACvC,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;gBACxB,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;oBAChC,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,gCAAqB,CAAC,CAAC;oBACpE,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,0BAAe,CAAC,CAAC;gBAC3C,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;KACJ;AACH,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"files.service.integration.spec.js","sourceRoot":"","sources":["../../../test/integration/files.service.integration.spec.ts"],"names":[],"mappings":";;AAAA,6CAAsD;AACtD,2CAA+C;AAC/C,6EAAqE;AACrE,0FAAiF;AACjF,sFAA6E;AAC7E,0CAMqB;AAErB,QAAQ,CAAC,qCAAqC,EAAE,GAAG,EAAE;IACnD,IAAI,aAA4B,CAAC;IACjC,IAAI,iBAAoC,CAAC;IAEzC,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,iBAAiB,GAAG,IAAI,4BAAiB,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAkB,MAAM,cAAI,CAAC,mBAAmB,CAAC;YAC3D,SAAS,EAAE;gBACT,wBAAa;gBACb,+BAAmB;gBACnB,6BAAiB;gBACjB,EAAE,OAAO,EAAE,sBAAa,EAAE,QAAQ,EAAE,4BAAiB,EAAE;aACxD;SACF,CAAC,CAAC,OAAO,EAAE,CAAC;QAEb,aAAa,GAAG,MAAM,CAAC,GAAG,CAAgB,wBAAa,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC;IAGxB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QAExB,QAAQ,CAAC,gBAAgB,IAAI,EAAE,EAAE,GAAG,EAAE;YACpC,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAC7D,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;gBAC3B,MAAM,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,CAAC;YACtC,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;gBAC7B,EAAE,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;oBACjC,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,aAAa,CAAC,8BAAmB,CAAC,CAAC;oBACrE,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,wBAAa,CAAC,CAAC;gBACvC,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;gBACxB,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;oBAChC,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,gCAAqB,CAAC,CAAC;oBACpE,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,0BAAe,CAAC,CAAC;gBAC3C,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;KACJ;AACH,CAAC,CAAC,CAAC"}
@@ -53,18 +53,9 @@ exports.sleep = sleep;
53
53
  class MockConfigService {
54
54
  get(key) {
55
55
  switch (key) {
56
- case 'TOKEN':
57
- return process.env.TOKEN;
58
56
  case 'LOCAL_PATH':
59
- return process.env.TEST_PATH;
60
- case 'GITLAB_URL':
61
- return process.env.GITLAB_URL;
62
- case 'GITLAB_GROUP':
63
- return 'dtaas';
57
+ return process.env.LOCAL_PATH;
64
58
  case 'MODE':
65
- if (process.env.MODE === 'gitlab') {
66
- return 'gitlab';
67
- }
68
59
  if (process.env.MODE === 'local') {
69
60
  return 'local';
70
61
  }
@@ -1 +1 @@
1
- {"version":3,"file":"testUtil.js","sourceRoot":"","sources":["../../test/testUtil.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"testUtil.js","sourceRoot":"","sources":["../../test/testUtil.ts"],"names":[],"mappings":"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"}