@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.
- package/.claude/settings.local.json +11 -0
- package/CLAUDE.md +85 -0
- package/README.md +33 -44
- package/assets/help.md +2 -0
- package/bin/hailer-cli +1 -1
- package/dist/cli/argument-parser.d.ts +25 -0
- package/dist/cli/argument-parser.js +27 -0
- package/dist/cli/argument-parser.js.map +1 -0
- package/dist/cli/logger.d.ts +4 -0
- package/dist/cli/logger.js +27 -0
- package/dist/cli/logger.js.map +1 -0
- package/dist/cli/repl-setup.d.ts +5 -0
- package/dist/cli/repl-setup.js +122 -0
- package/dist/cli/repl-setup.js.map +1 -0
- package/dist/cli/signal-handlers.d.ts +3 -0
- package/dist/cli/signal-handlers.js +62 -0
- package/dist/cli/signal-handlers.js.map +1 -0
- package/dist/{src/client.d.ts → client.d.ts} +3 -2
- package/dist/{src/client.js → client.js} +3 -1
- package/dist/client.js.map +1 -0
- package/dist/{src/commands → commands}/display-help.js +1 -1
- package/dist/commands/display-help.js.map +1 -0
- package/dist/{src/commands → commands}/file-upload.d.ts +0 -1
- package/dist/{src/commands → commands}/file-upload.js +2 -3
- package/dist/commands/file-upload.js.map +1 -0
- package/dist/index.js.map +1 -0
- package/dist/main.js +81 -0
- package/dist/main.js.map +1 -0
- package/dist/types.d.ts +80 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/{src/util.d.ts → util.d.ts} +0 -1
- package/dist/{src/util.js → util.js} +2 -2
- package/dist/util.js.map +1 -0
- package/doc/example/getting-started/README.md +17 -0
- package/doc/example/getting-started/package-lock.json +3489 -0
- package/doc/example/getting-started/package.json +22 -0
- package/doc/example/getting-started/src/bot.ts +68 -0
- package/doc/example/getting-started/src/upload.ts +82 -0
- package/package.json +11 -12
- package/test-baseline.js +36 -0
- package/dist/run.js +0 -213
- package/dist/run.js.map +0 -1
- package/dist/src/client.js.map +0 -1
- package/dist/src/commands/display-help.js.map +0 -1
- package/dist/src/commands/file-upload.js.map +0 -1
- package/dist/src/index.js.map +0 -1
- package/dist/src/util.js.map +0 -1
- /package/dist/{src/commands → commands}/display-help.d.ts +0 -0
- /package/dist/{src/index.d.ts → index.d.ts} +0 -0
- /package/dist/{src/index.js → index.js} +0 -0
- /package/dist/{run.d.ts → main.d.ts} +0 -0
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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
|
-
|
|
123
|
-
|
|
124
|
-
};
|
|
118
|
+
client.disconnect();
|
|
119
|
+
```
|
|
125
120
|
|
|
126
|
-
|
|
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
|
-
|
|
131
|
-
client.disconnect();
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
```
|
|
123
|
+
To find out what you can do with the Hailer API, visit:
|
|
135
124
|
|
|
136
|
-
|
|
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/
|
|
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":"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"}
|
|
@@ -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(
|
|
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"}
|