@hailer/cli 1.1.7 → 1.1.9

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 (52) hide show
  1. package/.claude/settings.local.json +11 -0
  2. package/CLAUDE.md +85 -0
  3. package/README.md +33 -44
  4. package/assets/help.md +2 -0
  5. package/bin/hailer-cli +1 -1
  6. package/dist/cli/argument-parser.d.ts +25 -0
  7. package/dist/cli/argument-parser.js +27 -0
  8. package/dist/cli/argument-parser.js.map +1 -0
  9. package/dist/cli/logger.d.ts +4 -0
  10. package/dist/cli/logger.js +27 -0
  11. package/dist/cli/logger.js.map +1 -0
  12. package/dist/cli/repl-setup.d.ts +5 -0
  13. package/dist/cli/repl-setup.js +122 -0
  14. package/dist/cli/repl-setup.js.map +1 -0
  15. package/dist/cli/signal-handlers.d.ts +3 -0
  16. package/dist/cli/signal-handlers.js +62 -0
  17. package/dist/cli/signal-handlers.js.map +1 -0
  18. package/dist/{src/client.d.ts → client.d.ts} +3 -2
  19. package/dist/{src/client.js → client.js} +3 -1
  20. package/dist/client.js.map +1 -0
  21. package/dist/{src/commands → commands}/display-help.js +1 -1
  22. package/dist/commands/display-help.js.map +1 -0
  23. package/dist/{src/commands → commands}/file-upload.d.ts +0 -1
  24. package/dist/{src/commands → commands}/file-upload.js +2 -3
  25. package/dist/commands/file-upload.js.map +1 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/main.js +81 -0
  28. package/dist/main.js.map +1 -0
  29. package/dist/types.d.ts +80 -0
  30. package/dist/types.js +3 -0
  31. package/dist/types.js.map +1 -0
  32. package/dist/{src/util.d.ts → util.d.ts} +0 -1
  33. package/dist/{src/util.js → util.js} +2 -2
  34. package/dist/util.js.map +1 -0
  35. package/doc/example/getting-started/README.md +17 -0
  36. package/doc/example/getting-started/package-lock.json +3489 -0
  37. package/doc/example/getting-started/package.json +22 -0
  38. package/doc/example/getting-started/src/bot.ts +68 -0
  39. package/doc/example/getting-started/src/upload.ts +82 -0
  40. package/package.json +11 -12
  41. package/test-baseline.js +36 -0
  42. package/dist/run.js +0 -213
  43. package/dist/run.js.map +0 -1
  44. package/dist/src/client.js.map +0 -1
  45. package/dist/src/commands/display-help.js.map +0 -1
  46. package/dist/src/commands/file-upload.js.map +0 -1
  47. package/dist/src/index.js.map +0 -1
  48. package/dist/src/util.js.map +0 -1
  49. /package/dist/{src/commands → commands}/display-help.d.ts +0 -0
  50. /package/dist/{src/index.d.ts → index.d.ts} +0 -0
  51. /package/dist/{src/index.js → index.js} +0 -0
  52. /package/dist/{run.d.ts → main.d.ts} +0 -0
@@ -0,0 +1,11 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(npm run build:*)",
5
+ "Bash(npm run lint)",
6
+ "Bash(npm install:*)",
7
+ "Bash(mkdir:*)"
8
+ ],
9
+ "deny": []
10
+ }
11
+ }
package/CLAUDE.md ADDED
@@ -0,0 +1,85 @@
1
+ # CLAUDE.md
2
+
3
+ This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
+
5
+ ## Build and Development Commands
6
+
7
+ - **Build**: `npm run build` - Compiles TypeScript to JavaScript in `dist/` directory
8
+ - **Start**: `npm run start` - Builds and runs the CLI with asset copying
9
+ - **Lint**: `npm run lint` - Runs ESLint on TypeScript files
10
+ - **Local CLI**: `node bin/hailer-cli` (after building) or use `npm run start`
11
+
12
+ ## Architecture Overview
13
+
14
+ This is a Node.js CLI tool and programmatic client for the Hailer API. The project has two main use cases:
15
+
16
+ 1. **CLI Tool**: Interactive REPL for executing Hailer API commands
17
+ 2. **NPM Package**: Programmatic client library exported as `@hailer/cli`
18
+
19
+ ### Core Components
20
+
21
+ - **`src/client.ts`**: Main `Client` class that handles Socket.IO connections to Hailer API
22
+ - **`src/main.ts`**: CLI entry point that orchestrates the REPL environment
23
+ - **`src/index.ts`**: Package export point for programmatic usage
24
+ - **`bin/hailer-cli`**: Executable script that loads the compiled CLI
25
+ - **`src/types.ts`**: Comprehensive TypeScript interfaces with inline documentation
26
+
27
+ ### Modular CLI Architecture
28
+
29
+ The CLI is organized into focused modules:
30
+
31
+ - **`src/cli/argument-parser.ts`**: CLI argument parsing and connection options
32
+ - **`src/cli/logger.ts`**: Console logging utilities with timestamps
33
+ - **`src/cli/repl-setup.ts`**: REPL initialization and API method tree building
34
+ - **`src/cli/signal-handlers.ts`**: Hailer real-time signal/event handling
35
+
36
+ ### Client Architecture
37
+
38
+ The `Client` class extends `EventEmitter` and provides:
39
+ - Socket.IO connection management to Hailer backend
40
+ - Authentication with username/password and SSL certificate options
41
+ - Request/response handling for API calls
42
+ - Signal/event streaming from Hailer
43
+ - File upload capabilities
44
+
45
+ ### REPL Environment
46
+
47
+ The CLI creates a REPL environment where:
48
+ - `api` object provides access to all Hailer API endpoints (e.g., `api.v3.activity.createMany`)
49
+ - `result` variable stores the last command result
50
+ - `history` array tracks all previous results
51
+ - `help` function shows available API methods
52
+ - Tab completion is available for API methods
53
+
54
+ ## Dependencies
55
+
56
+ Modern, up-to-date dependencies with no security vulnerabilities:
57
+ - **TypeScript 5.8**: Latest TypeScript with improved type inference
58
+ - **ESLint 9**: Modern linting with TypeScript support
59
+ - **socket.io-client 4.8**: Real-time communication with built-in TypeScript support
60
+ - **marked 15.0**: Markdown parsing for help documentation
61
+
62
+ ## TypeScript Configuration
63
+
64
+ - Target ES2015 with CommonJS modules
65
+ - Strict mode enabled with comprehensive type checking
66
+ - Declaration files generated for library usage
67
+ - Source maps enabled for debugging
68
+ - Base URL set to "src" for clean imports
69
+ - Inline type comments for better IDE experience
70
+
71
+ ## Testing
72
+
73
+ - **Local Testing**: Use `test-baseline.js` to verify functionality against local Hailer setup
74
+ - **Test Credentials**: `el@hailero.es` / `el@hailero.es` on `api.hailer.local.gd`
75
+ - **Key Test**: `client.request('v2.core.init', [['network']])` should return timestamp and network data
76
+
77
+ ## ESLint Configuration
78
+
79
+ - Uses TypeScript ESLint 8.x parser
80
+ - Enforces consistent type definitions and naming conventions
81
+ - 4-space indentation required
82
+ - Semicolons required
83
+ - Strict camelCase for properties
84
+ - Console usage allowed (for CLI tool nature)
85
+ - Ignores dist and example directories
package/README.md CHANGED
@@ -10,30 +10,16 @@ Tab completion is available.
10
10
 
11
11
  The result of each command is stored in the `result` variable.
12
12
 
13
- Usage:
14
-
15
- ```sh
16
- npx @hailer/cli
17
- ```
18
-
19
- ### Install
13
+ ## Install
20
14
 
21
15
  ```sh
22
16
  npm install -g @hailer/cli
23
17
  ```
24
18
 
25
- ### Run on Linux or OSX
26
-
27
- ```sh
28
- USER=my@email.com HOST=api.hailer.biz hailer-cli
29
- ```
30
-
31
- ### Run on Windows
19
+ Usage:
32
20
 
33
21
  ```sh
34
- set USER=my@email.com
35
- set HOST=api.hailer.biz
36
- hailer-cli
22
+ hailer-cli --user my.email@hailer.com
37
23
  ```
38
24
 
39
25
  ### Example usage
@@ -63,22 +49,33 @@ npm init
63
49
  npm install @hailer/cli
64
50
  ```
65
51
 
66
- Create a new file `run.js` and paste the following code:
52
+ Create a new file `run.js` and paste the following code (and works with typescript using the import line):
67
53
 
68
54
  ```javascript
55
+ // import { Client } from '@hailer/cli'; // Use with typescript
69
56
  const { Client } = require('@hailer/cli');
70
57
 
71
58
  const options = {
72
- host: 'https://api.hailer.biz',
59
+ host: 'https://api.hailer.com',
73
60
  username: 'set-this',
74
61
  password: 'set-this',
75
62
  };
76
63
 
77
64
  Client.create(options).then(async (client) => {
65
+ // Listen to signals from Hailer
66
+ client.on('signals', ([name, meta]) => {
67
+ // print all signals
68
+ console.log('Signal:', name, meta);
69
+ });
70
+
71
+ // Make API request to create a new feed (wall) post.
78
72
  const post = await client.request('wall2.new_post', [{ subject: 'This is a wall post.', text: 'The content of my post' }]);
79
73
 
80
74
  console.log('Post created:', post);
81
- client.disconnect();
75
+ // client.disconnect();
76
+ }).catch(error => {
77
+ console.log('Error:', error);
78
+ process.exit(1);
82
79
  });
83
80
  ```
84
81
 
@@ -92,45 +89,37 @@ Start the program:
92
89
  node run.js
93
90
  ```
94
91
 
95
- Have fun!
96
-
97
92
  ### Inside async function
98
93
 
99
94
  ```javascript
95
+ // import { Client } from '@hailer/cli';
100
96
  const { Client } = require('@hailer/cli');
101
97
 
98
+ // ...
99
+
102
100
  const options = {
103
- host: 'https://api.hailer.biz',
101
+ host: 'https://api.hailer.com',
104
102
  username: 'set-this',
105
103
  password: 'set-this',
106
104
  };
107
105
 
108
- const client = await Client.create(options);
106
+ const client = await Client.create(options).catch(error => { console.log('Error:', error); process.exit(1); });
107
+
108
+ // Listen to signals from Hailer
109
+ client.on('signals', ([name, meta]) => {
110
+ // print all signals
111
+ console.log('Signal:', name, meta);
112
+ });
109
113
 
110
114
  const post = await client.request('wall2.new_post', [{ subject: 'This is a wall post.', text: 'The content of my post' }]);
111
115
 
112
116
  console.log('Post created:', post);
113
- ```
114
-
115
- ### Login using existing Hailer session key
116
-
117
- Re-using a Hailer `sessionKey` instead of logging in using username and password.
118
-
119
- ```javascript
120
- const { Client } = require('@hailer/cli');
121
117
 
122
- const options = {
123
- host: 'https://api.hailer.biz',
124
- };
118
+ client.disconnect();
119
+ ```
125
120
 
126
- Client.create(options).then(async (client) => {
127
- await client.resume(sessionKey);
128
- const post = await client.request('wall2.new_post', [{ subject: 'This is a wall post.', text: 'The content of my post' }]);
121
+ ## Hailer API documentation
129
122
 
130
- console.log('Post created:', post);
131
- client.disconnect();
132
- });
133
-
134
- ```
123
+ To find out what you can do with the Hailer API, visit:
135
124
 
136
- Set the `sessionKey` parameter which you have acquired by some other means.
125
+ https://api.hailer.com/apidocs
package/assets/help.md CHANGED
@@ -30,6 +30,8 @@ To learn more about how to use Hailer CLI programmatically type `hailer-cli --he
30
30
 
31
31
  *--host*: Which hailer backend server to use, defaults to *api.hailer.com*
32
32
 
33
+ *--insecure*: Skip SSL certificate verification (not recommended for production)
34
+
33
35
  ## Environment variables:
34
36
 
35
37
  *HOST*: which Hailer backend to use, defaults to *api.hailer.com*
package/bin/hailer-cli CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- require('../dist/run.js');
2
+ require('../dist/main.js');
@@ -0,0 +1,25 @@
1
+ export interface ParsedArgs {
2
+ /** Username for Hailer login */
3
+ user?: string;
4
+ /** Password for Hailer login */
5
+ password?: string;
6
+ /** Hailer host to connect to */
7
+ host?: string;
8
+ /** Run in quiet mode */
9
+ quiet?: boolean;
10
+ /** Skip SSL certificate verification */
11
+ insecure?: boolean;
12
+ /** Display help */
13
+ help?: boolean;
14
+ /** Display help (short form) */
15
+ h?: boolean;
16
+ }
17
+ export declare function parseArguments(): ParsedArgs;
18
+ export declare function resolveConnectionOptions(args: ParsedArgs): {
19
+ username: string | undefined;
20
+ password: string | undefined;
21
+ host: string;
22
+ quiet: boolean;
23
+ insecure: boolean;
24
+ rejectUnauthorized: boolean;
25
+ };
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.parseArguments = parseArguments;
7
+ exports.resolveConnectionOptions = resolveConnectionOptions;
8
+ const minimist_1 = __importDefault(require("minimist"));
9
+ function parseArguments() {
10
+ return (0, minimist_1.default)(process.argv.slice(2));
11
+ }
12
+ function resolveConnectionOptions(args) {
13
+ let username = args.user;
14
+ let password = args.password;
15
+ let host = args.host || process.env.HOST || 'https://api.hailer.com';
16
+ const quiet = !!args.quiet;
17
+ const insecure = !!args.insecure;
18
+ return {
19
+ username,
20
+ password,
21
+ host,
22
+ quiet,
23
+ insecure,
24
+ rejectUnauthorized: !insecure
25
+ };
26
+ }
27
+ //# sourceMappingURL=argument-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"argument-parser.js","sourceRoot":"","sources":["../../src/cli/argument-parser.ts"],"names":[],"mappings":";;;;;AAmBA,wCAEC;AAED,4DAeC;AAtCD,wDAAgC;AAmBhC,SAAgB,cAAc;IAC1B,OAAO,IAAA,kBAAQ,EAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAe,CAAC;AACzD,CAAC;AAED,SAAgB,wBAAwB,CAAC,IAAgB;IACrD,IAAI,QAAQ,GAAuB,IAAI,CAAC,IAAI,CAAC;IAC7C,IAAI,QAAQ,GAAuB,IAAI,CAAC,QAAQ,CAAC;IACjD,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,wBAAwB,CAAC;IACrE,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IAC3B,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;IAEjC,OAAO;QACH,QAAQ;QACR,QAAQ;QACR,IAAI;QACJ,KAAK;QACL,QAAQ;QACR,kBAAkB,EAAE,CAAC,QAAQ;KAChC,CAAC;AACN,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { REPLServer } from 'repl';
2
+ /** Write to console without messing up the user input */
3
+ export declare function createLogger(repl?: REPLServer): (...args: any[]) => void;
4
+ export declare function createEventLogger(log: (...args: any[]) => void): (event: string, meta?: any) => void;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createLogger = createLogger;
7
+ exports.createEventLogger = createEventLogger;
8
+ const colors_1 = __importDefault(require("colors"));
9
+ const util_1 = require("../util");
10
+ /** Write to console without messing up the user input */
11
+ function createLogger(repl) {
12
+ return (...args) => {
13
+ // clear line
14
+ process.stdout.write('\x1B[2K\r');
15
+ const timeHHMM = colors_1.default.blue('[' + (0, util_1.toISOStringWithTimezone)(new Date()).slice(11, 16) + ']');
16
+ console.log(timeHHMM, ...args
17
+ .map(arg => typeof arg !== 'string' && arg !== undefined ? (0, util_1.inspect)(arg) : arg)
18
+ .filter(arg => arg !== undefined));
19
+ repl === null || repl === void 0 ? void 0 : repl.displayPrompt(true);
20
+ };
21
+ }
22
+ function createEventLogger(log) {
23
+ return (event, meta) => {
24
+ log(colors_1.default.green('๏'), colors_1.default.white(event), meta ? colors_1.default.gray(meta) : undefined);
25
+ };
26
+ }
27
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/cli/logger.ts"],"names":[],"mappings":";;;;;AAKA,oCAgBC;AAED,8CAIC;AA3BD,oDAA4B;AAE5B,kCAA2D;AAE3D,yDAAyD;AACzD,SAAgB,YAAY,CAAC,IAAiB;IAC1C,OAAO,CAAC,GAAG,IAAW,EAAE,EAAE;QACtB,aAAa;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAElC,MAAM,QAAQ,GAAG,gBAAM,CAAC,IAAI,CAAC,GAAG,GAAG,IAAA,8BAAuB,EAAC,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;QAE5F,OAAO,CAAC,GAAG,CACP,QAAQ,EACR,GAAG,IAAI;aACF,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAA,cAAO,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;aAC7E,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,SAAS,CAAC,CACxC,CAAC;QAEF,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,aAAa,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC,CAAC;AACN,CAAC;AAED,SAAgB,iBAAiB,CAAC,GAA6B;IAC3D,OAAO,CAAC,KAAa,EAAE,IAAU,EAAE,EAAE;QACjC,GAAG,CAAC,gBAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,gBAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,gBAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACtF,CAAC,CAAC;AACN,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { REPLServer } from 'repl';
2
+ import { Client } from '../client';
3
+ import { RootObject, HailerApiMethods } from '../types';
4
+ export declare function createApiMethods(client: Client, _methods: HailerApiMethods, getReplInstance?: () => REPLServer | null): RootObject;
5
+ export declare function startRepl(client: Client, methods: RootObject): Promise<REPLServer>;
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.createApiMethods = createApiMethods;
16
+ exports.startRepl = startRepl;
17
+ const repl_1 = require("repl");
18
+ const fs_1 = require("fs");
19
+ const path_1 = require("path");
20
+ const marked_1 = require("marked");
21
+ const colors_1 = __importDefault(require("colors"));
22
+ const util_1 = require("../util");
23
+ function createApiMethods(client, _methods, getReplInstance) {
24
+ const root = {
25
+ api: {},
26
+ result: undefined,
27
+ history: [],
28
+ error: undefined,
29
+ };
30
+ for (const i in _methods) {
31
+ const path = i.split('.');
32
+ let node = root.api;
33
+ while (path.length > 1) {
34
+ if (!node[path[0]]) {
35
+ node[path[0]] = {};
36
+ }
37
+ node = node[path[0]];
38
+ path.shift();
39
+ }
40
+ const methodFunction = ((methodName) => {
41
+ const fn = (...args) => __awaiter(this, void 0, void 0, function* () {
42
+ try {
43
+ root.result = yield client.request(methodName, args);
44
+ root.history.unshift(root.result);
45
+ // manually patch the repl context for result to work properly
46
+ const repl = getReplInstance === null || getReplInstance === void 0 ? void 0 : getReplInstance();
47
+ if (repl) {
48
+ repl.context.result = root.result;
49
+ }
50
+ }
51
+ catch (error) {
52
+ root.error = error;
53
+ throw error;
54
+ }
55
+ return root.result;
56
+ });
57
+ return fn;
58
+ })(i);
59
+ node[path[0]] = methodFunction;
60
+ // Init help hints
61
+ Object.defineProperty(node[path[0]], "cmd", { value: i });
62
+ Object.defineProperty(node[path[0]], "doc", { value: _methods[i].doc });
63
+ Object.defineProperty(node[path[0]], "args", { value: _methods[i].args });
64
+ }
65
+ return root;
66
+ }
67
+ function startRepl(client, methods) {
68
+ return __awaiter(this, void 0, void 0, function* () {
69
+ // Complete all async setup FIRST, before starting the REPL
70
+ let contextData = {};
71
+ if (client.sessionKey) {
72
+ contextData = yield client.request('v2.core.init', []);
73
+ }
74
+ // NOW create the REPL after all async operations are done
75
+ const repl = (0, repl_1.start)({
76
+ prompt: 'hailer> ',
77
+ input: process.stdin,
78
+ output: process.stdout,
79
+ terminal: true,
80
+ ignoreUndefined: true,
81
+ writer: (obj) => {
82
+ if (obj === null || obj === void 0 ? void 0 : obj.args) {
83
+ console.log(colors_1.default.yellow(obj.cmd) + '(' + colors_1.default.blue(obj.args || '') + ')', colors_1.default.white(obj.doc || ''));
84
+ return '';
85
+ }
86
+ return (0, util_1.inspect)(obj, { depth: 20, colors: true });
87
+ }
88
+ });
89
+ repl.on('exit', function () {
90
+ console.log("Bye!");
91
+ process.exit(0);
92
+ });
93
+ // Set up all context immediately after REPL creation
94
+ if (client.sessionKey) {
95
+ Object.assign(repl.context, contextData);
96
+ repl.context.upload = client.uploadFileByName.bind(client);
97
+ }
98
+ // Set the main objects in context
99
+ repl.context.api = methods.api;
100
+ repl.context.result = methods.result;
101
+ repl.context.history = methods.history;
102
+ repl.context.error = methods.error;
103
+ repl.context.cli = client;
104
+ repl.context.help = () => {
105
+ console.log(marked_1.marked.parse((0, fs_1.readFileSync)((0, path_1.resolve)(process.cwd(), 'assets/usage.md')).toString()));
106
+ function enumerate(node, depth) {
107
+ for (const i in node) {
108
+ if (typeof node[i] === 'object' && !('cmd' in node[i])) {
109
+ console.log(' '.repeat(depth) + colors_1.default.yellow(i));
110
+ enumerate(node[i], depth + 1);
111
+ continue;
112
+ }
113
+ const method = node[i];
114
+ console.log(' '.repeat(depth) + colors_1.default.yellow(i) + '(' + colors_1.default.blue((method === null || method === void 0 ? void 0 : method.args) || '') + ')', colors_1.default.white((method === null || method === void 0 ? void 0 : method.doc) || ''));
115
+ }
116
+ }
117
+ enumerate(methods.api, 1);
118
+ };
119
+ return repl;
120
+ });
121
+ }
122
+ //# sourceMappingURL=repl-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repl-setup.js","sourceRoot":"","sources":["../../src/cli/repl-setup.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAeA,4CAmDC;AAED,8BAgEC;AApID,+BAAyC;AACzC,2BAAkC;AAClC,+BAA+B;AAC/B,mCAAgC;AAChC,oDAA4B;AAE5B,kCAAkC;AASlC,SAAgB,gBAAgB,CAAC,MAAc,EAAE,QAA0B,EAAE,eAAyC;IAClH,MAAM,IAAI,GAAe;QACrB,GAAG,EAAE,EAAE;QACP,MAAM,EAAE,SAAS;QACjB,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,SAAS;KACnB,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,IAAI,GAAQ,IAAI,CAAC,GAAG,CAAC;QAEzB,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;YACvB,CAAC;YACD,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACrB,IAAI,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;QAED,MAAM,cAAc,GAAG,CAAC,CAAC,UAAkB,EAAE,EAAE;YAC3C,MAAM,EAAE,GAAG,CAAO,GAAG,IAAW,EAAE,EAAE;gBAChC,IAAI,CAAC;oBACD,IAAI,CAAC,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;oBACrD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAElC,8DAA8D;oBAC9D,MAAM,IAAI,GAAG,eAAe,aAAf,eAAe,uBAAf,eAAe,EAAI,CAAC;oBACjC,IAAI,IAAI,EAAE,CAAC;wBACP,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;oBACtC,CAAC;gBACL,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACb,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;oBACnB,MAAM,KAAK,CAAC;gBAChB,CAAC;gBAED,OAAO,IAAI,CAAC,MAAM,CAAC;YACvB,CAAC,CAAA,CAAC;YAEF,OAAO,EAAuB,CAAC;QACnC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEN,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC;QAE/B,kBAAkB;QAClB,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAC1D,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACxE,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAsB,SAAS,CAAC,MAAc,EAAE,OAAmB;;QAC/D,2DAA2D;QAC3D,IAAI,WAAW,GAAsB,EAAE,CAAC;QAExC,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACpB,WAAW,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,0DAA0D;QAC1D,MAAM,IAAI,GAAG,IAAA,YAAK,EAAC;YACf,MAAM,EAAE,UAAU;YAClB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,IAAI;YACd,eAAe,EAAE,IAAI;YACrB,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE;gBACZ,IAAI,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,IAAI,EAAE,CAAC;oBACZ,OAAO,CAAC,GAAG,CAAC,gBAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,gBAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,GAAG,EAAE,gBAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;oBAC3G,OAAO,EAAE,CAAC;gBACd,CAAC;gBAED,OAAO,IAAA,cAAO,EAAC,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YACrD,CAAC;SACJ,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE;YACZ,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;QAEH,qDAAqD;QACrD,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YACzC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/D,CAAC;QAED,kCAAkC;QAClC,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QACrC,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QACvC,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAEnC,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC;QAE1B,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,GAAG,EAAE;YACrB,OAAO,CAAC,GAAG,CAAC,eAAM,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,IAAA,cAAO,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YAE9F,SAAS,SAAS,CAAC,IAAe,EAAE,KAAa;gBAC7C,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;oBACnB,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;wBACrD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,gBAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;wBACnD,SAAS,CAAC,IAAI,CAAC,CAAC,CAAc,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;wBAC3C,SAAS;oBACb,CAAC;oBAED,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAsB,CAAC;oBAC5C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,gBAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,gBAAM,CAAC,IAAI,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,KAAI,EAAE,CAAC,GAAG,GAAG,EAAE,gBAAM,CAAC,KAAK,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,GAAG,KAAI,EAAE,CAAC,CAAC,CAAC;gBACtI,CAAC;YACL,CAAC;YAED,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC9B,CAAC,CAAC;QAEF,OAAO,IAAI,CAAC;IAChB,CAAC;CAAA"}
@@ -0,0 +1,3 @@
1
+ import { Client } from '../client';
2
+ import { HailerContextData } from '../types';
3
+ export declare function setupSignalHandlers(client: Client, event: (event: string, meta?: any) => void, log: (...args: any[]) => void, replContext: HailerContextData): void;
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.setupSignalHandlers = setupSignalHandlers;
16
+ const colors_1 = __importDefault(require("colors"));
17
+ function setupSignalHandlers(client, event, log, replContext) {
18
+ client.on('disconnect', (reason) => {
19
+ log('disconnected (attempt reconnect automatically)');
20
+ });
21
+ client.on('reconnect', (reason) => {
22
+ log('reconnected');
23
+ });
24
+ client.on('signals', (_a) => __awaiter(this, [_a], void 0, function* ([signal, meta]) {
25
+ var _b, _c, _d, _e, _f, _g, _h, _j;
26
+ const info = replContext;
27
+ switch (signal) {
28
+ case 'wall2.new_post':
29
+ const data = yield client.request('wall2.load_posts', [meta.post_id]);
30
+ if (!data) {
31
+ // no permission to load post, in wrong workspace or permissions missing
32
+ return;
33
+ }
34
+ event('New wallpost (' + colors_1.default.white(((_c = (_b = info.users) === null || _b === void 0 ? void 0 : _b[data.uid]) === null || _c === void 0 ? void 0 : _c.firstname) + ' ' + ((_e = (_d = info.users) === null || _d === void 0 ? void 0 : _d[data.uid]) === null || _e === void 0 ? void 0 : _e.lastname)) + '/' + colors_1.default.yellow(((_g = (_f = info.networks) === null || _f === void 0 ? void 0 : _f[data.cid]) === null || _g === void 0 ? void 0 : _g.name) || 'Unknown') + '):');
35
+ log(' ', colors_1.default.blue(data.initMessage.subject));
36
+ log(' ', colors_1.default.green(data.initMessage.text));
37
+ break;
38
+ case 'wall2.delete_post':
39
+ event('Removed wallpost:', meta.post_id);
40
+ break;
41
+ case 'wall2.new_comment':
42
+ event('New comment.', meta.post_id);
43
+ break;
44
+ case 'wall2.delete_comment':
45
+ event('Removed comment.', meta.post_id);
46
+ break;
47
+ case 'wall2.edited_comment':
48
+ event('Edited comment.', meta.post_id);
49
+ break;
50
+ case 'activities.created':
51
+ event('New activity', (_j = (_h = info.processes) === null || _h === void 0 ? void 0 : _h.find((process) => process._id === meta.processId)) === null || _j === void 0 ? void 0 : _j.name);
52
+ break;
53
+ case 'discussion.sync':
54
+ event('Discussion Sync');
55
+ break;
56
+ default:
57
+ event(signal, meta);
58
+ break;
59
+ }
60
+ }));
61
+ }
62
+ //# sourceMappingURL=signal-handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal-handlers.js","sourceRoot":"","sources":["../../src/cli/signal-handlers.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAIA,kDAoDC;AAxDD,oDAA4B;AAI5B,SAAgB,mBAAmB,CAC/B,MAAc,EACd,KAA0C,EAC1C,GAA6B,EAC7B,WAA8B;IAE9B,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE;QAC/B,GAAG,CAAC,gDAAgD,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,EAAE;QAC9B,GAAG,CAAC,aAAa,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,KAAuB,EAAE,0CAAlB,CAAC,MAAM,EAAE,IAAI,CAAC;;QACtC,MAAM,IAAI,GAAG,WAAW,CAAC;QACzB,QAAQ,MAAM,EAAE,CAAC;YACb,KAAK,gBAAgB;gBACjB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;gBAEtE,IAAI,CAAC,IAAI,EAAE,CAAC;oBACR,wEAAwE;oBACxE,OAAO;gBACX,CAAC;gBAED,KAAK,CAAC,gBAAgB,GAAG,gBAAM,CAAC,KAAK,CAAC,CAAA,MAAA,MAAA,IAAI,CAAC,KAAK,0CAAG,IAAI,CAAC,GAAG,CAAC,0CAAE,SAAS,IAAG,GAAG,IAAG,MAAA,MAAA,IAAI,CAAC,KAAK,0CAAG,IAAI,CAAC,GAAG,CAAC,0CAAE,QAAQ,CAAA,CAAC,GAAG,GAAG,GAAG,gBAAM,CAAC,MAAM,CAAC,CAAA,MAAA,MAAA,IAAI,CAAC,QAAQ,0CAAG,IAAI,CAAC,GAAG,CAAC,0CAAE,IAAI,KAAI,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;gBAC9L,GAAG,CAAC,IAAI,EAAE,gBAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;gBACjD,GAAG,CAAC,IAAI,EAAE,gBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC/C,MAAM;YACV,KAAK,mBAAmB;gBACpB,KAAK,CAAC,mBAAmB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBACzC,MAAM;YACV,KAAK,mBAAmB;gBACpB,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBACpC,MAAM;YACV,KAAK,sBAAsB;gBACvB,KAAK,CAAC,kBAAkB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBACxC,MAAM;YACV,KAAK,sBAAsB;gBACvB,KAAK,CAAC,iBAAiB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvC,MAAM;YACV,KAAK,oBAAoB;gBACrB,KAAK,CAAC,cAAc,EAAE,MAAA,MAAA,IAAI,CAAC,SAAS,0CAAE,IAAI,CAAC,CAAC,OAAY,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,KAAK,IAAI,CAAC,SAAS,CAAC,0CAAE,IAAI,CAAC,CAAC;gBACpG,MAAM;YACV,KAAK,iBAAiB;gBAClB,KAAK,CAAC,iBAAiB,CAAC,CAAC;gBACzB,MAAM;YACV;gBACI,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACpB,MAAM;QACd,CAAC;IACL,CAAC,CAAA,CAAC,CAAC;AACP,CAAC"}
@@ -1,5 +1,3 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
1
  import EventEmitter from 'events';
4
2
  import { Readable } from 'stream';
5
3
  export interface ClientOptions {
@@ -9,6 +7,8 @@ export interface ClientOptions {
9
7
  password?: string;
10
8
  /** Defaults to api.hailer.com */
11
9
  host?: string;
10
+ /** Whether to reject unauthorized SSL certificates. Defaults to true for security */
11
+ rejectUnauthorized?: boolean;
12
12
  }
13
13
  /**
14
14
  * # Hailer Client
@@ -41,6 +41,7 @@ export declare class Client extends EventEmitter {
41
41
  host: string;
42
42
  username?: string;
43
43
  password?: string;
44
+ rejectUnauthorized: boolean;
44
45
  private requestId;
45
46
  private callbacks;
46
47
  private socket?;
@@ -47,6 +47,7 @@ class Client extends events_1.default {
47
47
  super();
48
48
  this.quiet = false;
49
49
  this.host = 'api.hailer.com';
50
+ this.rejectUnauthorized = true;
50
51
  this.requestId = 0;
51
52
  this.callbacks = {};
52
53
  }
@@ -55,6 +56,7 @@ class Client extends events_1.default {
55
56
  return __awaiter(this, void 0, void 0, function* () {
56
57
  const instance = new Client();
57
58
  instance.host = options.host || 'api.hailer.com';
59
+ instance.rejectUnauthorized = options.rejectUnauthorized !== undefined ? options.rejectUnauthorized : true;
58
60
  yield instance.connect(instance.host);
59
61
  if (options.username && options.password) {
60
62
  // automatically connect if username and password is given
@@ -113,7 +115,7 @@ class Client extends events_1.default {
113
115
  if (!hostname) {
114
116
  hostname = this.host;
115
117
  }
116
- const options = { transports: ['websocket'] };
118
+ const options = { transports: ['websocket'], rejectUnauthorized: this.rejectUnauthorized };
117
119
  if (!hostname.startsWith('http://') &&
118
120
  !hostname.startsWith('https://')) {
119
121
  hostname = 'https://' + hostname;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -12,7 +12,7 @@ catch (error) {
12
12
  pkg = require('../../../package.json');
13
13
  }
14
14
  const displayHelpAndExit = () => {
15
- console.log((0, marked_1.marked)('# Hailer CLI ' + pkg.version + '\n\n' + (0, fs_1.readFileSync)((0, path_1.resolve)(process.cwd(), 'assets/help.md')).toString()));
15
+ console.log(marked_1.marked.parse('# Hailer CLI ' + pkg.version + '\n\n' + (0, fs_1.readFileSync)((0, path_1.resolve)(process.cwd(), 'assets/help.md')).toString()));
16
16
  process.exit(0);
17
17
  };
18
18
  exports.displayHelpAndExit = displayHelpAndExit;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"display-help.js","sourceRoot":"","sources":["../../src/commands/display-help.ts"],"names":[],"mappings":";;;AAAA,2BAAkC;AAClC,mCAAgC;AAChC,+BAA+B;AAE/B,IAAI,GAAG,GAAG,EAAS,CAAC;AAEpB,IAAI,CAAC;IACD,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AACxC,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACb,GAAG,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;AAC3C,CAAC;AAEM,MAAM,kBAAkB,GAAG,GAAG,EAAE;IACnC,OAAO,CAAC,GAAG,CAAC,eAAM,CAAC,KAAK,CAAC,eAAe,GAAG,GAAG,CAAC,OAAO,GAAG,MAAM,GAAG,IAAA,iBAAY,EAAC,IAAA,cAAO,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACtI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC;AAHW,QAAA,kBAAkB,sBAG7B"}
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import { Readable } from 'stream';
3
2
  interface UploadOptions {
4
3
  sessionKey?: string;