@sentio/cli 2.0.0-rc.1 → 2.0.0-rc.11
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/lib/build.d.ts +0 -1
- package/lib/build.js +62 -50
- package/lib/build.js.map +1 -1
- package/lib/cli.js +30 -28
- package/lib/cli.js.map +1 -1
- package/lib/commands/login-server.js +31 -36
- package/lib/commands/login-server.js.map +1 -1
- package/lib/commands/run-create.js +23 -39
- package/lib/commands/run-create.js.map +1 -1
- package/lib/commands/run-login.js +28 -33
- package/lib/commands/run-login.js.map +1 -1
- package/lib/commands/run-test.d.ts +1 -0
- package/lib/commands/run-test.js +10 -0
- package/lib/commands/run-test.js.map +1 -0
- package/lib/commands/run-upload.d.ts +1 -1
- package/lib/commands/run-upload.js +62 -68
- package/lib/commands/run-upload.js.map +1 -1
- package/lib/commands/run-version.js +9 -14
- package/lib/commands/run-version.js.map +1 -1
- package/lib/config.js +4 -11
- package/lib/config.js.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -0
- package/lib/key.js +18 -24
- package/lib/key.js.map +1 -1
- package/lib/utils.d.ts +1 -0
- package/lib/utils.js +20 -14
- package/lib/utils.js.map +1 -1
- package/package.json +18 -13
- package/src/build.ts +56 -45
- package/src/cli.ts +14 -10
- package/src/commands/login-server.ts +12 -12
- package/src/commands/run-create.ts +0 -12
- package/src/commands/run-login.ts +4 -4
- package/src/commands/run-test.ts +10 -0
- package/src/commands/run-upload.ts +16 -13
- package/src/commands/run-version.ts +1 -1
- package/src/index.ts +1 -0
- package/src/utils.ts +18 -3
- package/templates/aptos/jest.config.ts +8 -0
- package/templates/aptos/package.json +3 -6
- package/templates/aptos/src/processor.ts +3 -3
- package/templates/aptos/tsconfig.json +4 -3
- package/templates/evm/jest.config.ts +8 -0
- package/templates/evm/package.json +2 -4
- package/templates/evm/src/processor.ts +4 -5
- package/templates/evm/tsconfig.json +4 -3
- package/templates/raw/jest.config.ts +8 -0
- package/templates/raw/package.json +2 -4
- package/templates/raw/tsconfig.json +4 -3
- package/templates/solana/jest.config.ts +8 -0
- package/templates/solana/package.json +3 -6
- package/templates/solana/src/processor.ts +3 -3
- package/templates/solana/tsconfig.json +4 -3
- package/lib/webpack.config.js +0 -50
- package/src/webpack.config.js +0 -50
- package/templates/aptos/jest.config.js +0 -7
- package/templates/evm/jest.config.js +0 -7
- package/templates/raw/jest.config.js +0 -7
- package/templates/raw/yarn.lock +0 -4095
- package/templates/solana/jest.config.js +0 -7
- package/templates/solana/yarn.lock +0 -4918
|
@@ -1,14 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
|
|
9
|
-
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
10
|
-
const latest_version_1 = tslib_1.__importDefault(require("latest-version"));
|
|
11
|
-
async function runCreate(argv) {
|
|
1
|
+
import commandLineArgs from 'command-line-args';
|
|
2
|
+
import commandLineUsage from 'command-line-usage';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import fs from 'fs-extra';
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
import latestVersion from 'latest-version';
|
|
7
|
+
export async function runCreate(argv) {
|
|
12
8
|
const optionDefinitions = [
|
|
13
9
|
{
|
|
14
10
|
name: 'help',
|
|
@@ -43,8 +39,8 @@ async function runCreate(argv) {
|
|
|
43
39
|
defaultValue: 'evm',
|
|
44
40
|
},
|
|
45
41
|
];
|
|
46
|
-
const options = (
|
|
47
|
-
const usage = (
|
|
42
|
+
const options = commandLineArgs(optionDefinitions, { argv });
|
|
43
|
+
const usage = commandLineUsage([
|
|
48
44
|
{
|
|
49
45
|
header: 'Create a template project',
|
|
50
46
|
content: 'sentio create <name>',
|
|
@@ -69,19 +65,19 @@ async function runCreate(argv) {
|
|
|
69
65
|
case 'solana':
|
|
70
66
|
break;
|
|
71
67
|
default:
|
|
72
|
-
console.error(
|
|
68
|
+
console.error(chalk.red('non supported chain-type for template creation, use --help for more information.'));
|
|
73
69
|
console.log(usage);
|
|
74
70
|
process.exit(1);
|
|
75
71
|
}
|
|
76
|
-
const templateFolder =
|
|
72
|
+
const templateFolder = path.resolve(__dirname, '../../templates', chainType);
|
|
77
73
|
const projectName = options.name || 'default';
|
|
78
74
|
const rootDir = options.directory || process.cwd();
|
|
79
|
-
const dstFolder =
|
|
80
|
-
if (
|
|
81
|
-
console.error(
|
|
75
|
+
const dstFolder = path.resolve(rootDir, projectName);
|
|
76
|
+
if (fs.existsSync(dstFolder)) {
|
|
77
|
+
console.error(chalk.red("can't create project '" + projectName + "', directory already existed"));
|
|
82
78
|
process.exit(1);
|
|
83
79
|
}
|
|
84
|
-
|
|
80
|
+
fs.copySync(templateFolder, dstFolder, {
|
|
85
81
|
filter: (src, _) => {
|
|
86
82
|
// TODO read from .gitignore to be more reliable
|
|
87
83
|
if (src.endsWith('types') ||
|
|
@@ -96,36 +92,24 @@ async function runCreate(argv) {
|
|
|
96
92
|
overwrite: false,
|
|
97
93
|
});
|
|
98
94
|
if (options.name) {
|
|
99
|
-
const sentioYamlPath =
|
|
100
|
-
|
|
101
|
-
const packageJsonPath =
|
|
102
|
-
const packageJson = JSON.parse(
|
|
103
|
-
const sdkVersion = '^' + (await (
|
|
95
|
+
const sentioYamlPath = path.resolve(dstFolder, 'sentio.yaml');
|
|
96
|
+
fs.writeFileSync(sentioYamlPath, 'project: ' + projectName + '\n', { flag: 'w+' });
|
|
97
|
+
const packageJsonPath = path.resolve(dstFolder, 'package.json');
|
|
98
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
|
|
99
|
+
const sdkVersion = '^' + (await latestVersion('@sentio/sdk'));
|
|
104
100
|
packageJson.dependencies['@sentio/sdk'] = sdkVersion;
|
|
105
|
-
|
|
106
|
-
case 'aptos':
|
|
107
|
-
packageJson.dependencies['@sentio/sdk-aptos'] = sdkVersion;
|
|
108
|
-
break;
|
|
109
|
-
case 'solana':
|
|
110
|
-
packageJson.dependencies['@sentio/sdk-solana'] = sdkVersion;
|
|
111
|
-
break;
|
|
112
|
-
default:
|
|
113
|
-
}
|
|
114
|
-
const cliVersion = '^' + (await (0, latest_version_1.default)('@sentio/cli'));
|
|
101
|
+
const cliVersion = '^' + (await latestVersion('@sentio/cli'));
|
|
115
102
|
packageJson.devDependencies['@sentio/cli'] = cliVersion;
|
|
116
103
|
packageJson.name = projectName;
|
|
117
104
|
if (options.subproject) {
|
|
118
105
|
delete packageJson.dependencies['@sentio/sdk'];
|
|
119
106
|
delete packageJson.devDependencies['@sentio/cli'];
|
|
120
|
-
delete packageJson.dependencies['@sentio/sdk-aptos'];
|
|
121
|
-
delete packageJson.dependencies['@sentio/sdk-solana'];
|
|
122
107
|
}
|
|
123
108
|
// Don't add directly to avoid deps issue
|
|
124
109
|
packageJson.scripts.postinstall = 'sentio gen';
|
|
125
|
-
|
|
110
|
+
fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
|
|
126
111
|
}
|
|
127
|
-
console.log(
|
|
112
|
+
console.log(chalk.green("successfully create project '" + projectName + "'"));
|
|
128
113
|
}
|
|
129
114
|
}
|
|
130
|
-
exports.runCreate = runCreate;
|
|
131
115
|
//# sourceMappingURL=run-create.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-create.js","sourceRoot":"","sources":["../../src/commands/run-create.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"run-create.js","sourceRoot":"","sources":["../../src/commands/run-create.ts"],"names":[],"mappings":"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","sourcesContent":["import commandLineArgs from 'command-line-args'\nimport commandLineUsage from 'command-line-usage'\nimport path from 'path'\nimport fs from 'fs-extra'\nimport chalk from 'chalk'\nimport latestVersion from 'latest-version'\n\nexport async function runCreate(argv: string[]) {\n const optionDefinitions = [\n {\n name: 'help',\n alias: 'h',\n type: Boolean,\n description: 'Display this usage guide.',\n },\n {\n name: 'name',\n alias: 'n',\n defaultOption: true,\n type: String,\n description: 'Project name',\n },\n {\n name: 'subproject',\n alias: 'p',\n type: Boolean,\n description:\n 'If this is a subproject in mono-repo setup, in this case sdk version is controlled in parent package.json.',\n },\n {\n name: 'directory',\n alias: 'd',\n description: '(Optional) The root direct new project will be created, default current working dir',\n type: String,\n },\n {\n name: 'chain-type',\n alias: 'c',\n description:\n 'The type of project you want to create, can be evm, aptos, solana, raw (if you want to start from scratch and support multiple types of chains)',\n type: String,\n defaultValue: 'evm',\n },\n ]\n\n const options = commandLineArgs(optionDefinitions, { argv })\n const usage = commandLineUsage([\n {\n header: 'Create a template project',\n content: 'sentio create <name>',\n },\n {\n header: 'Options',\n optionList: optionDefinitions,\n },\n ])\n\n if (options.help || !options.name) {\n console.log(usage)\n } else {\n const chainType: string = options['chain-type'].toLowerCase()\n switch (chainType) {\n case 'evm':\n break\n case 'aptos':\n break\n case 'raw':\n break\n case 'solana':\n break\n default:\n console.error(chalk.red('non supported chain-type for template creation, use --help for more information.'))\n console.log(usage)\n process.exit(1)\n }\n const templateFolder = path.resolve(__dirname, '../../templates', chainType)\n const projectName = options.name || 'default'\n\n const rootDir = options.directory || process.cwd()\n const dstFolder = path.resolve(rootDir, projectName)\n if (fs.existsSync(dstFolder)) {\n console.error(chalk.red(\"can't create project '\" + projectName + \"', directory already existed\"))\n process.exit(1)\n }\n\n fs.copySync(templateFolder, dstFolder, {\n filter: (src, _) => {\n // TODO read from .gitignore to be more reliable\n if (\n src.endsWith('types') ||\n src.endsWith('dist') ||\n src.endsWith('node_modules') ||\n src.endsWith('.lock') ||\n src.endsWith('dist')\n ) {\n return false\n }\n return true\n },\n overwrite: false,\n })\n if (options.name) {\n const sentioYamlPath = path.resolve(dstFolder, 'sentio.yaml')\n fs.writeFileSync(sentioYamlPath, 'project: ' + projectName + '\\n', { flag: 'w+' })\n\n const packageJsonPath = path.resolve(dstFolder, 'package.json')\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'))\n\n const sdkVersion = '^' + (await latestVersion('@sentio/sdk'))\n packageJson.dependencies['@sentio/sdk'] = sdkVersion\n\n const cliVersion = '^' + (await latestVersion('@sentio/cli'))\n packageJson.devDependencies['@sentio/cli'] = cliVersion\n packageJson.name = projectName\n\n if (options.subproject) {\n delete packageJson.dependencies['@sentio/sdk']\n delete packageJson.devDependencies['@sentio/cli']\n }\n\n // Don't add directly to avoid deps issue\n packageJson.scripts.postinstall = 'sentio gen'\n\n fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2))\n }\n console.log(chalk.green(\"successfully create project '\" + projectName + \"'\"))\n }\n}\n"]}
|
|
@@ -1,19 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
12
|
-
const key_1 = require("../key");
|
|
13
|
-
const node_fetch_1 = tslib_1.__importDefault(require("node-fetch"));
|
|
14
|
-
const open_1 = tslib_1.__importDefault(require("open"));
|
|
1
|
+
import commandLineArgs from 'command-line-args';
|
|
2
|
+
import commandLineUsage from 'command-line-usage';
|
|
3
|
+
import { getAuthConfig, getFinalizedHost } from '../config.js';
|
|
4
|
+
import { startServer } from './login-server.js';
|
|
5
|
+
import url, { URL } from 'url';
|
|
6
|
+
import * as crypto from 'crypto';
|
|
7
|
+
import chalk from 'chalk';
|
|
8
|
+
import { WriteKey } from '../key.js';
|
|
9
|
+
import fetch from 'node-fetch';
|
|
10
|
+
import open from 'open';
|
|
15
11
|
const port = 20000;
|
|
16
|
-
function runLogin(argv) {
|
|
12
|
+
export function runLogin(argv) {
|
|
17
13
|
const optionDefinitions = [
|
|
18
14
|
{
|
|
19
15
|
name: 'help',
|
|
@@ -32,10 +28,10 @@ function runLogin(argv) {
|
|
|
32
28
|
description: '(Optional) Your API key',
|
|
33
29
|
},
|
|
34
30
|
];
|
|
35
|
-
const options = (
|
|
36
|
-
const host =
|
|
31
|
+
const options = commandLineArgs(optionDefinitions, { argv });
|
|
32
|
+
const host = getFinalizedHost(options.host);
|
|
37
33
|
if (options.help) {
|
|
38
|
-
const usage = (
|
|
34
|
+
const usage = commandLineUsage([
|
|
39
35
|
{
|
|
40
36
|
header: 'Login to Sentio',
|
|
41
37
|
content: 'sentio login',
|
|
@@ -48,15 +44,15 @@ function runLogin(argv) {
|
|
|
48
44
|
console.log(usage);
|
|
49
45
|
}
|
|
50
46
|
else if (options['api-key']) {
|
|
51
|
-
console.log(
|
|
47
|
+
console.log(chalk.blue('login to ' + host));
|
|
52
48
|
const apiKey = options['api-key'];
|
|
53
49
|
checkKey(host, apiKey).then((res) => {
|
|
54
50
|
if (res.status == 200) {
|
|
55
|
-
|
|
56
|
-
console.log(
|
|
51
|
+
WriteKey(host, apiKey);
|
|
52
|
+
console.log(chalk.green('login success'));
|
|
57
53
|
}
|
|
58
54
|
else {
|
|
59
|
-
console.error(
|
|
55
|
+
console.error(chalk.red('login failed, code:', res.status, res.statusText));
|
|
60
56
|
}
|
|
61
57
|
});
|
|
62
58
|
}
|
|
@@ -64,13 +60,13 @@ function runLogin(argv) {
|
|
|
64
60
|
// https://auth0.com/docs/get-started/authentication-and-authorization-flow/call-your-api-using-the-authorization-code-flow-with-pkce
|
|
65
61
|
const verifier = base64URLEncode(crypto.randomBytes(32));
|
|
66
62
|
const challenge = base64URLEncode(sha256(verifier));
|
|
67
|
-
const conf =
|
|
63
|
+
const conf = getAuthConfig(host);
|
|
68
64
|
if (conf.domain === '') {
|
|
69
|
-
console.error(
|
|
65
|
+
console.error(chalk.red('invalid host, try login with an API key if it is a dev env'));
|
|
70
66
|
return;
|
|
71
67
|
}
|
|
72
|
-
const authURL = new
|
|
73
|
-
const params = new
|
|
68
|
+
const authURL = new URL(conf.domain + `/authorize?`);
|
|
69
|
+
const params = new url.URLSearchParams({
|
|
74
70
|
response_type: 'code',
|
|
75
71
|
code_challenge: challenge,
|
|
76
72
|
code_challenge_method: 'S256',
|
|
@@ -81,18 +77,17 @@ function runLogin(argv) {
|
|
|
81
77
|
});
|
|
82
78
|
authURL.search = params.toString();
|
|
83
79
|
console.log('Continue your authorization in the browser');
|
|
84
|
-
(
|
|
85
|
-
console.error(
|
|
86
|
-
console.error(
|
|
80
|
+
open(authURL.toString()).catch((reason) => {
|
|
81
|
+
console.error(chalk.red('Unable to open browser: ' + reason));
|
|
82
|
+
console.error(chalk.red('Open this url in your browser: ' + authURL.toString()));
|
|
87
83
|
});
|
|
88
|
-
|
|
84
|
+
startServer({
|
|
89
85
|
serverPort: port,
|
|
90
86
|
sentioHost: options.host,
|
|
91
87
|
codeVerifier: verifier,
|
|
92
88
|
});
|
|
93
89
|
}
|
|
94
90
|
}
|
|
95
|
-
exports.runLogin = runLogin;
|
|
96
91
|
function base64URLEncode(str) {
|
|
97
92
|
return str.toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');
|
|
98
93
|
}
|
|
@@ -100,8 +95,8 @@ function sha256(str) {
|
|
|
100
95
|
return crypto.createHash('sha256').update(str).digest();
|
|
101
96
|
}
|
|
102
97
|
async function checkKey(host, apiKey) {
|
|
103
|
-
const checkApiKeyUrl = new
|
|
104
|
-
return (
|
|
98
|
+
const checkApiKeyUrl = new URL('/api/v1/processors/check_key', host);
|
|
99
|
+
return fetch(checkApiKeyUrl.href, {
|
|
105
100
|
method: 'GET',
|
|
106
101
|
headers: {
|
|
107
102
|
'api-key': apiKey,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-login.js","sourceRoot":"","sources":["../../src/commands/run-login.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"run-login.js","sourceRoot":"","sources":["../../src/commands/run-login.ts"],"names":[],"mappings":"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","sourcesContent":["import commandLineArgs from 'command-line-args'\nimport commandLineUsage from 'command-line-usage'\nimport { getAuthConfig, getFinalizedHost } from '../config.js'\nimport { startServer } from './login-server.js'\nimport url, { URL } from 'url'\nimport * as crypto from 'crypto'\nimport chalk from 'chalk'\nimport { WriteKey } from '../key.js'\nimport fetch from 'node-fetch'\nimport open from 'open'\n\nconst port = 20000\n\nexport function runLogin(argv: string[]) {\n const optionDefinitions = [\n {\n name: 'help',\n alias: 'h',\n type: Boolean,\n description: 'Display this usage guide.',\n },\n {\n name: 'host',\n description: '(Optional) Override Sentio Host name',\n type: String,\n },\n {\n name: 'api-key',\n type: String,\n description: '(Optional) Your API key',\n },\n ]\n const options = commandLineArgs(optionDefinitions, { argv })\n\n const host = getFinalizedHost(options.host)\n if (options.help) {\n const usage = commandLineUsage([\n {\n header: 'Login to Sentio',\n content: 'sentio login',\n },\n {\n header: 'Options',\n optionList: optionDefinitions,\n },\n ])\n console.log(usage)\n } else if (options['api-key']) {\n console.log(chalk.blue('login to ' + host))\n const apiKey = options['api-key']\n checkKey(host, apiKey).then((res) => {\n if (res.status == 200) {\n WriteKey(host, apiKey)\n console.log(chalk.green('login success'))\n } else {\n console.error(chalk.red('login failed, code:', res.status, res.statusText))\n }\n })\n } else {\n // https://auth0.com/docs/get-started/authentication-and-authorization-flow/call-your-api-using-the-authorization-code-flow-with-pkce\n const verifier = base64URLEncode(crypto.randomBytes(32))\n const challenge = base64URLEncode(sha256(verifier))\n\n const conf = getAuthConfig(host)\n if (conf.domain === '') {\n console.error(chalk.red('invalid host, try login with an API key if it is a dev env'))\n return\n }\n const authURL = new URL(conf.domain + `/authorize?`)\n const params = new url.URLSearchParams({\n response_type: 'code',\n code_challenge: challenge,\n code_challenge_method: 'S256',\n client_id: conf.clientId,\n redirect_uri: `http://localhost:${port}/callback`,\n audience: conf.audience,\n prompt: 'login',\n })\n authURL.search = params.toString()\n\n console.log('Continue your authorization in the browser')\n open(authURL.toString()).catch((reason) => {\n console.error(chalk.red('Unable to open browser: ' + reason))\n console.error(chalk.red('Open this url in your browser: ' + authURL.toString()))\n })\n\n startServer({\n serverPort: port,\n sentioHost: options.host,\n codeVerifier: verifier,\n })\n }\n}\n\nfunction base64URLEncode(str: Buffer) {\n return str.toString('base64').replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '')\n}\n\nfunction sha256(str: string) {\n return crypto.createHash('sha256').update(str).digest()\n}\n\nasync function checkKey(host: string, apiKey: string) {\n const checkApiKeyUrl = new URL('/api/v1/processors/check_key', host)\n return fetch(checkApiKeyUrl.href, {\n method: 'GET',\n headers: {\n 'api-key': apiKey,\n },\n })\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function runTest(argv: string[]): void;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { execSync } from 'child_process';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { getPackageRoot } from '../utils.js';
|
|
4
|
+
export function runTest(argv) {
|
|
5
|
+
const defaultJestConfig = path.resolve(getPackageRoot('@sentio/sdk'), 'lib', 'jest.config.js');
|
|
6
|
+
// if config not existed copy that
|
|
7
|
+
const jest = path.resolve(getPackageRoot('jest'), 'bin', 'jest');
|
|
8
|
+
execSync(`NODE_OPTIONS=--experimental-vm-modules node ${jest} ${argv.join(' ')}`, { stdio: 'inherit' });
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=run-test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-test.js","sourceRoot":"","sources":["../../src/commands/run-test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,MAAM,UAAU,OAAO,CAAC,IAAc;IACpC,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAA;IAC9F,kCAAkC;IAClC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;IAChE,QAAQ,CAAC,+CAA+C,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;AACzG,CAAC","sourcesContent":["import { execSync } from 'child_process'\nimport path from 'path'\nimport { getPackageRoot } from '../utils.js'\n\nexport function runTest(argv: string[]) {\n const defaultJestConfig = path.resolve(getPackageRoot('@sentio/sdk'), 'lib', 'jest.config.js')\n // if config not existed copy that\n const jest = path.resolve(getPackageRoot('jest'), 'bin', 'jest')\n execSync(`NODE_OPTIONS=--experimental-vm-modules node ${jest} ${argv.join(' ')}`, { stdio: 'inherit' })\n}\n"]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { SentioProjectConfig } from '../config';
|
|
1
|
+
import { SentioProjectConfig } from '../config.js';
|
|
2
2
|
export declare function runUpload(processorConfig: SentioProjectConfig, argv: string[]): Promise<void>;
|
|
3
3
|
export declare function uploadFile(options: SentioProjectConfig, apiKeyOverride: string): Promise<void>;
|
|
@@ -1,22 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
const child_process_1 = require("child_process");
|
|
17
|
-
const utils_1 = require("../utils");
|
|
18
|
-
const readline_1 = tslib_1.__importDefault(require("readline"));
|
|
19
|
-
async function runUpload(processorConfig, argv) {
|
|
1
|
+
import commandLineArgs from 'command-line-args';
|
|
2
|
+
import commandLineUsage from 'command-line-usage';
|
|
3
|
+
import { finalizeHost, FinalizeProjectName } from '../config.js';
|
|
4
|
+
import { URL } from 'url';
|
|
5
|
+
import fetch from 'node-fetch';
|
|
6
|
+
import { buildProcessor } from '../build.js';
|
|
7
|
+
import chalk from 'chalk';
|
|
8
|
+
import path from 'path';
|
|
9
|
+
import { ReadKey } from '../key.js';
|
|
10
|
+
import fs from 'fs';
|
|
11
|
+
import { createHash } from 'crypto';
|
|
12
|
+
import { execSync } from 'child_process';
|
|
13
|
+
import { getSdkVersion } from '../utils.js';
|
|
14
|
+
import readline from 'readline';
|
|
15
|
+
export async function runUpload(processorConfig, argv) {
|
|
20
16
|
const optionDefinitions = [
|
|
21
17
|
{
|
|
22
18
|
name: 'help',
|
|
@@ -50,9 +46,9 @@ async function runUpload(processorConfig, argv) {
|
|
|
50
46
|
type: Boolean,
|
|
51
47
|
},
|
|
52
48
|
];
|
|
53
|
-
const options = (
|
|
49
|
+
const options = commandLineArgs(optionDefinitions, { argv });
|
|
54
50
|
if (options.help) {
|
|
55
|
-
const usage = (
|
|
51
|
+
const usage = commandLineUsage([
|
|
56
52
|
{
|
|
57
53
|
header: 'Sentio upload',
|
|
58
54
|
content: 'sentio upload',
|
|
@@ -74,8 +70,8 @@ async function runUpload(processorConfig, argv) {
|
|
|
74
70
|
if (options.debug) {
|
|
75
71
|
processorConfig.debug = true;
|
|
76
72
|
}
|
|
77
|
-
|
|
78
|
-
|
|
73
|
+
finalizeHost(processorConfig);
|
|
74
|
+
FinalizeProjectName(processorConfig, options.owner);
|
|
79
75
|
console.log(processorConfig);
|
|
80
76
|
let apiOverride = undefined;
|
|
81
77
|
if (options['api-key']) {
|
|
@@ -84,11 +80,10 @@ async function runUpload(processorConfig, argv) {
|
|
|
84
80
|
return uploadFile(processorConfig, apiOverride);
|
|
85
81
|
}
|
|
86
82
|
}
|
|
87
|
-
exports.runUpload = runUpload;
|
|
88
83
|
async function createProject(options, apiKey) {
|
|
89
|
-
const url = new
|
|
84
|
+
const url = new URL('/api/v1/projects', options.host);
|
|
90
85
|
const [ownerName, slug] = options.project.includes('/') ? options.project.split('/') : [undefined, options.project];
|
|
91
|
-
return (
|
|
86
|
+
return fetch(url.href, {
|
|
92
87
|
method: 'POST',
|
|
93
88
|
headers: {
|
|
94
89
|
'api-key': apiKey,
|
|
@@ -96,27 +91,27 @@ async function createProject(options, apiKey) {
|
|
|
96
91
|
body: JSON.stringify({ slug, ownerName, visibility: 'PRIVATE' }),
|
|
97
92
|
});
|
|
98
93
|
}
|
|
99
|
-
async function uploadFile(options, apiKeyOverride) {
|
|
94
|
+
export async function uploadFile(options, apiKeyOverride) {
|
|
100
95
|
if (options.build) {
|
|
101
|
-
await
|
|
96
|
+
await buildProcessor(false);
|
|
102
97
|
}
|
|
103
|
-
console.log(
|
|
104
|
-
const PROCESSOR_FILE =
|
|
105
|
-
const apiKey = apiKeyOverride ||
|
|
98
|
+
console.log(chalk.blue('Prepare to upload'));
|
|
99
|
+
const PROCESSOR_FILE = path.join(process.cwd(), 'dist/lib.js');
|
|
100
|
+
const apiKey = apiKeyOverride || ReadKey(options.host);
|
|
106
101
|
const isProd = options.host === 'https://app.sentio.xyz';
|
|
107
102
|
if (!apiKey) {
|
|
108
103
|
const cmd = isProd ? 'sentio login' : 'sentio login --host=' + options.host;
|
|
109
|
-
console.error(
|
|
104
|
+
console.error(chalk.red('No Credential found for', options.host, '. Please run `' + cmd + '`.'));
|
|
110
105
|
process.exit(1);
|
|
111
106
|
}
|
|
112
|
-
if (!
|
|
113
|
-
console.error(
|
|
107
|
+
if (!fs.existsSync(PROCESSOR_FILE)) {
|
|
108
|
+
console.error(chalk.red('File not existed ', PROCESSOR_FILE, "don't use --nobuild"));
|
|
114
109
|
process.exit(1);
|
|
115
110
|
}
|
|
116
|
-
const stat =
|
|
111
|
+
const stat = fs.statSync(PROCESSOR_FILE);
|
|
117
112
|
console.log('Packed processor file size', Math.floor(stat.size / 1024) + 'K, last modified', stat.mtime);
|
|
118
|
-
const content =
|
|
119
|
-
const hash =
|
|
113
|
+
const content = fs.readFileSync(PROCESSOR_FILE);
|
|
114
|
+
const hash = createHash('sha256');
|
|
120
115
|
hash.update(content);
|
|
121
116
|
const digest = hash.digest('hex');
|
|
122
117
|
let triedCount = 0;
|
|
@@ -125,26 +120,26 @@ async function uploadFile(options, apiKeyOverride) {
|
|
|
125
120
|
let gitUrl = '';
|
|
126
121
|
const sha256 = digest;
|
|
127
122
|
try {
|
|
128
|
-
commitSha =
|
|
123
|
+
commitSha = execSync('git rev-parse HEAD').toString().trim();
|
|
129
124
|
}
|
|
130
125
|
catch (e) {
|
|
131
|
-
|
|
126
|
+
chalk.yellow(e);
|
|
132
127
|
}
|
|
133
128
|
try {
|
|
134
|
-
gitUrl =
|
|
129
|
+
gitUrl = execSync('git remote get-url origin').toString().trim();
|
|
135
130
|
}
|
|
136
131
|
catch (e) {
|
|
137
132
|
// skip errors
|
|
138
133
|
}
|
|
139
|
-
console.log(
|
|
134
|
+
console.log(chalk.blue(triedCount > 1 ? 'Retry uploading' : 'Uploading'));
|
|
140
135
|
// get gcs upload url
|
|
141
|
-
const initUploadResRaw = await initUpload(options.host, apiKey, options.project,
|
|
136
|
+
const initUploadResRaw = await initUpload(options.host, apiKey, options.project, getSdkVersion());
|
|
142
137
|
if (!initUploadResRaw.ok) {
|
|
143
|
-
console.error(
|
|
144
|
-
console.error(
|
|
138
|
+
// console.error(chalk.red('Failed to get upload url'))
|
|
139
|
+
console.error(chalk.red((await initUploadResRaw.json()).message));
|
|
145
140
|
if (initUploadResRaw.status === 404) {
|
|
146
141
|
// create project if not exist
|
|
147
|
-
const rl =
|
|
142
|
+
const rl = readline.createInterface({
|
|
148
143
|
input: process.stdin,
|
|
149
144
|
output: process.stdout,
|
|
150
145
|
});
|
|
@@ -154,11 +149,11 @@ async function uploadFile(options, apiKeyOverride) {
|
|
|
154
149
|
rl.close();
|
|
155
150
|
const res = await createProject(options, apiKey);
|
|
156
151
|
if (!res.ok) {
|
|
157
|
-
console.error(
|
|
158
|
-
console.error(
|
|
152
|
+
console.error(chalk.red('Create Project Failed'));
|
|
153
|
+
console.error(chalk.red((await res.json()).message));
|
|
159
154
|
return;
|
|
160
155
|
}
|
|
161
|
-
console.log(
|
|
156
|
+
console.log(chalk.green('Project created'));
|
|
162
157
|
await upload();
|
|
163
158
|
}
|
|
164
159
|
else if (['n', 'no'].includes(answer.toLowerCase())) {
|
|
@@ -172,11 +167,11 @@ async function uploadFile(options, apiKeyOverride) {
|
|
|
172
167
|
}
|
|
173
168
|
return;
|
|
174
169
|
}
|
|
175
|
-
const initUploadRes = await initUploadResRaw.json();
|
|
176
|
-
const uploadUrl = initUploadRes
|
|
170
|
+
const initUploadRes = (await initUploadResRaw.json());
|
|
171
|
+
const uploadUrl = initUploadRes.url;
|
|
177
172
|
// do actual uploading
|
|
178
|
-
const file =
|
|
179
|
-
const uploadResRaw = await (
|
|
173
|
+
const file = fs.createReadStream(PROCESSOR_FILE);
|
|
174
|
+
const uploadResRaw = await fetch(uploadUrl, {
|
|
180
175
|
method: 'PUT',
|
|
181
176
|
headers: {
|
|
182
177
|
'Content-Type': 'application/octet-stream',
|
|
@@ -184,25 +179,25 @@ async function uploadFile(options, apiKeyOverride) {
|
|
|
184
179
|
body: file,
|
|
185
180
|
});
|
|
186
181
|
if (!uploadResRaw.ok) {
|
|
187
|
-
console.error(
|
|
188
|
-
console.error(
|
|
182
|
+
console.error(chalk.red('Failed to upload'));
|
|
183
|
+
console.error(chalk.red(await uploadResRaw.text()));
|
|
189
184
|
return;
|
|
190
185
|
}
|
|
191
186
|
// finish uploading
|
|
192
|
-
const finishUploadResRaw = await finishUpload(options.host, apiKey, options.project,
|
|
187
|
+
const finishUploadResRaw = await finishUpload(options.host, apiKey, options.project, getSdkVersion(), sha256, commitSha, gitUrl, options.debug);
|
|
193
188
|
if (!finishUploadResRaw.ok) {
|
|
194
|
-
console.error(
|
|
195
|
-
console.error(
|
|
189
|
+
console.error(chalk.red('Failed to finish uploading'));
|
|
190
|
+
console.error(chalk.red(await finishUploadResRaw.text()));
|
|
196
191
|
return;
|
|
197
192
|
}
|
|
198
|
-
console.log(
|
|
199
|
-
console.log('\t',
|
|
193
|
+
console.log(chalk.green('Upload success: '));
|
|
194
|
+
console.log('\t', chalk.blue('sha256:'), digest);
|
|
200
195
|
if (commitSha) {
|
|
201
|
-
console.log('\t',
|
|
196
|
+
console.log('\t', chalk.blue('Git commit SHA:'), commitSha);
|
|
202
197
|
}
|
|
203
|
-
const { projectFullSlug, version } = await finishUploadResRaw.json();
|
|
204
|
-
console.log('\t',
|
|
205
|
-
console.log('\t',
|
|
198
|
+
const { projectFullSlug, version } = (await finishUploadResRaw.json());
|
|
199
|
+
console.log('\t', chalk.blue('Check status:'), `${options.host}/${projectFullSlug}/datasource`);
|
|
200
|
+
console.log('\t', chalk.blue('Version:'), version);
|
|
206
201
|
};
|
|
207
202
|
let error;
|
|
208
203
|
const tryUploading = async () => {
|
|
@@ -226,10 +221,9 @@ async function uploadFile(options, apiKeyOverride) {
|
|
|
226
221
|
};
|
|
227
222
|
await tryUploading();
|
|
228
223
|
}
|
|
229
|
-
exports.uploadFile = uploadFile;
|
|
230
224
|
async function initUpload(host, apiKey, projectSlug, sdkVersion) {
|
|
231
|
-
const initUploadUrl = new
|
|
232
|
-
return (
|
|
225
|
+
const initUploadUrl = new URL(`/api/v1/processors/init_upload`, host);
|
|
226
|
+
return fetch(initUploadUrl.href, {
|
|
233
227
|
method: 'POST',
|
|
234
228
|
headers: {
|
|
235
229
|
'api-key': apiKey,
|
|
@@ -241,8 +235,8 @@ async function initUpload(host, apiKey, projectSlug, sdkVersion) {
|
|
|
241
235
|
});
|
|
242
236
|
}
|
|
243
237
|
async function finishUpload(host, apiKey, projectSlug, sdkVersion, sha256, commitSha, gitUrl, debug) {
|
|
244
|
-
const finishUploadUrl = new
|
|
245
|
-
return (
|
|
238
|
+
const finishUploadUrl = new URL(`/api/v1/processors/finish_upload`, host);
|
|
239
|
+
return fetch(finishUploadUrl.href, {
|
|
246
240
|
method: 'POST',
|
|
247
241
|
headers: {
|
|
248
242
|
'api-key': apiKey,
|