@sentio/cli 1.37.2 → 1.37.3

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.
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.runLogin = void 0;
30
+ const command_line_args_1 = __importDefault(require("command-line-args"));
31
+ const command_line_usage_1 = __importDefault(require("command-line-usage"));
32
+ const config_1 = require("../config");
33
+ const login_server_1 = require("./login-server");
34
+ const url_1 = __importStar(require("url"));
35
+ const crypto = __importStar(require("crypto"));
36
+ const chalk_1 = __importDefault(require("chalk"));
37
+ const key_1 = require("../key");
38
+ const node_fetch_1 = __importDefault(require("node-fetch"));
39
+ const open_1 = __importDefault(require("open"));
40
+ const port = 20000;
41
+ function runLogin(argv) {
42
+ const optionDefinitions = [
43
+ {
44
+ name: 'help',
45
+ alias: 'h',
46
+ type: Boolean,
47
+ description: 'Display this usage guide.',
48
+ },
49
+ {
50
+ name: 'host',
51
+ description: '(Optional) Override Sentio Host name',
52
+ type: String,
53
+ },
54
+ {
55
+ name: 'api-key',
56
+ type: String,
57
+ description: '(Optional) Your API key',
58
+ },
59
+ ];
60
+ const options = (0, command_line_args_1.default)(optionDefinitions, { argv });
61
+ const host = (0, config_1.getFinalizedHost)(options.host);
62
+ if (options.help) {
63
+ const usage = (0, command_line_usage_1.default)([
64
+ {
65
+ header: 'Login to Sentio',
66
+ content: 'sentio login',
67
+ },
68
+ {
69
+ header: 'Options',
70
+ optionList: optionDefinitions,
71
+ },
72
+ ]);
73
+ console.log(usage);
74
+ }
75
+ else if (options['api-key']) {
76
+ console.log(chalk_1.default.blue('login to ' + host));
77
+ const apiKey = options['api-key'];
78
+ checkKey(host, apiKey).then((res) => {
79
+ if (res.status == 200) {
80
+ (0, key_1.WriteKey)(host, apiKey);
81
+ console.log(chalk_1.default.green('login success'));
82
+ }
83
+ else {
84
+ console.error(chalk_1.default.red('login failed, code:', res.status, res.statusText));
85
+ }
86
+ });
87
+ }
88
+ else {
89
+ // https://auth0.com/docs/get-started/authentication-and-authorization-flow/call-your-api-using-the-authorization-code-flow-with-pkce
90
+ const verifier = base64URLEncode(crypto.randomBytes(32));
91
+ const challenge = base64URLEncode(sha256(verifier));
92
+ const conf = (0, config_1.getAuthConfig)(host);
93
+ if (conf.domain === '') {
94
+ console.error(chalk_1.default.red('invalid host, try login with an API key if it is a dev env'));
95
+ return;
96
+ }
97
+ const authURL = new url_1.URL(conf.domain + `/authorize?`);
98
+ const params = new url_1.default.URLSearchParams({
99
+ response_type: 'code',
100
+ code_challenge: challenge,
101
+ code_challenge_method: 'S256',
102
+ client_id: conf.clientId,
103
+ redirect_uri: `http://localhost:${port}/callback`,
104
+ audience: conf.audience,
105
+ prompt: 'login',
106
+ });
107
+ authURL.search = params.toString();
108
+ console.log('Continue your authorization in the browser');
109
+ (0, open_1.default)(authURL.toString()).catch((reason) => {
110
+ console.error(chalk_1.default.red('Unable to open browser: ' + reason));
111
+ console.error(chalk_1.default.red('Open this url in your browser: ' + authURL.toString()));
112
+ });
113
+ (0, login_server_1.startServer)({
114
+ serverPort: port,
115
+ sentioHost: options.host,
116
+ codeVerifier: verifier,
117
+ });
118
+ }
119
+ }
120
+ exports.runLogin = runLogin;
121
+ function base64URLEncode(str) {
122
+ return str.toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');
123
+ }
124
+ function sha256(str) {
125
+ return crypto.createHash('sha256').update(str).digest();
126
+ }
127
+ async function checkKey(host, apiKey) {
128
+ const checkApiKeyUrl = new url_1.URL('/api/v1/processors/check_key', host);
129
+ return (0, node_fetch_1.default)(checkApiKeyUrl, {
130
+ method: 'GET',
131
+ headers: {
132
+ 'api-key': apiKey,
133
+ },
134
+ });
135
+ }
136
+ //# sourceMappingURL=run-login.js.map
@@ -0,0 +1 @@
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'\nimport { startServer } from './login-server'\nimport url, { URL } from 'url'\nimport * as crypto from 'crypto'\nimport chalk from 'chalk'\nimport { WriteKey } from '../key'\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, {\n method: 'GET',\n headers: {\n 'api-key': apiKey,\n },\n })\n}\n"]}
@@ -0,0 +1 @@
1
+ export declare function runVersion(argv: string[]): void;
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.runVersion = void 0;
30
+ const command_line_args_1 = __importDefault(require("command-line-args"));
31
+ const command_line_usage_1 = __importDefault(require("command-line-usage"));
32
+ const utils_1 = require("../utils");
33
+ const console = __importStar(require("console"));
34
+ function runVersion(argv) {
35
+ const optionDefinitions = [
36
+ {
37
+ name: 'help',
38
+ alias: 'h',
39
+ type: Boolean,
40
+ description: 'Display this usage guide.',
41
+ },
42
+ ];
43
+ const options = (0, command_line_args_1.default)(optionDefinitions, { argv });
44
+ if (options.help) {
45
+ const usage = (0, command_line_usage_1.default)([
46
+ {
47
+ header: 'Show current version',
48
+ content: 'sentio version',
49
+ },
50
+ {
51
+ header: 'Options',
52
+ optionList: optionDefinitions,
53
+ },
54
+ ]);
55
+ console.log(usage);
56
+ }
57
+ else {
58
+ console.log('CLI Version: ', (0, utils_1.getCliVersion)());
59
+ const sdkVersion = (0, utils_1.getSdkVersion)();
60
+ if (sdkVersion) {
61
+ console.log('SDK Version: ', sdkVersion);
62
+ }
63
+ else {
64
+ console.log('SDK Not installed for this project');
65
+ }
66
+ }
67
+ }
68
+ exports.runVersion = runVersion;
69
+ //# sourceMappingURL=run-version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-version.js","sourceRoot":"","sources":["../../src/commands/run-version.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0EAA+C;AAC/C,4EAAiD;AACjD,oCAAuD;AACvD,iDAAkC;AAElC,SAAgB,UAAU,CAAC,IAAc;IACvC,MAAM,iBAAiB,GAAG;QACxB;YACE,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,GAAG;YACV,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,2BAA2B;SACzC;KACF,CAAA;IACD,MAAM,OAAO,GAAG,IAAA,2BAAe,EAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;IAE5D,IAAI,OAAO,CAAC,IAAI,EAAE;QAChB,MAAM,KAAK,GAAG,IAAA,4BAAgB,EAAC;YAC7B;gBACE,MAAM,EAAE,sBAAsB;gBAC9B,OAAO,EAAE,gBAAgB;aAC1B;YACD;gBACE,MAAM,EAAE,SAAS;gBACjB,UAAU,EAAE,iBAAiB;aAC9B;SACF,CAAC,CAAA;QACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;KACnB;SAAM;QACL,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAA,qBAAa,GAAE,CAAC,CAAA;QAC7C,MAAM,UAAU,GAAG,IAAA,qBAAa,GAAE,CAAA;QAClC,IAAI,UAAU,EAAE;YACd,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,CAAC,CAAA;SACzC;aAAM;YACL,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAA;SAClD;KACF;AACH,CAAC;AAhCD,gCAgCC","sourcesContent":["import commandLineArgs from 'command-line-args'\nimport commandLineUsage from 'command-line-usage'\nimport { getCliVersion, getSdkVersion } from '../utils'\nimport * as console from 'console'\n\nexport function runVersion(argv: string[]) {\n const optionDefinitions = [\n {\n name: 'help',\n alias: 'h',\n type: Boolean,\n description: 'Display this usage guide.',\n },\n ]\n const options = commandLineArgs(optionDefinitions, { argv })\n\n if (options.help) {\n const usage = commandLineUsage([\n {\n header: 'Show current version',\n content: 'sentio version',\n },\n {\n header: 'Options',\n optionList: optionDefinitions,\n },\n ])\n console.log(usage)\n } else {\n console.log('CLI Version: ', getCliVersion())\n const sdkVersion = getSdkVersion()\n if (sdkVersion) {\n console.log('SDK Version: ', sdkVersion)\n } else {\n console.log('SDK Not installed for this project')\n }\n }\n}\n"]}
@@ -0,0 +1,14 @@
1
+ export interface SentioProjectConfig {
2
+ project: string;
3
+ host: string;
4
+ build: boolean;
5
+ debug: boolean;
6
+ }
7
+ export declare function getFinalizedHost(host: string): string;
8
+ export declare function getAuthConfig(host: string): {
9
+ domain: string;
10
+ clientId: string;
11
+ audience: string;
12
+ };
13
+ export declare function finalizeHost(config: SentioProjectConfig): void;
14
+ export declare function FinalizeProjectName(config: SentioProjectConfig, owner: string | undefined): void;
package/lib/config.js ADDED
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FinalizeProjectName = exports.finalizeHost = exports.getAuthConfig = exports.getFinalizedHost = void 0;
4
+ const HostMap = {
5
+ local: 'http://localhost:10000',
6
+ test: 'https://test.sentio.xyz',
7
+ staging: 'https://staging.sentio.xyz',
8
+ prod: 'https://app.sentio.xyz',
9
+ };
10
+ function getFinalizedHost(host) {
11
+ if (host === undefined || host === '') {
12
+ host = 'prod';
13
+ }
14
+ return HostMap[host] ?? host;
15
+ }
16
+ exports.getFinalizedHost = getFinalizedHost;
17
+ function getAuthConfig(host) {
18
+ let domain = '', clientId = '', audience = '';
19
+ switch (host) {
20
+ case HostMap['local']:
21
+ domain = 'https://sentio-dev.us.auth0.com';
22
+ clientId = 'qGDisObqQbcPeRA8k02POPZ2Df4KVCna';
23
+ audience = 'http://localhost:8080/v1';
24
+ break;
25
+ case HostMap['prod']:
26
+ domain = 'https://auth.sentio.xyz';
27
+ clientId = 'xd80PeuvuZVHpBFh7yEdlSZdtE5mTpGe';
28
+ audience = 'https://app.sentio.xyz/api/v1';
29
+ break;
30
+ case HostMap['test']:
31
+ case HostMap['staging']:
32
+ domain = 'https://auth.test.sentio.xyz';
33
+ clientId = 'qXVvovHaOE37SndxTZJxCKgZjw1axPax';
34
+ audience = 'https://test.sentio.xyz/api/v1';
35
+ break;
36
+ default:
37
+ break;
38
+ }
39
+ return { domain, clientId, audience };
40
+ }
41
+ exports.getAuthConfig = getAuthConfig;
42
+ function finalizeHost(config) {
43
+ config.host = getFinalizedHost(config.host);
44
+ }
45
+ exports.finalizeHost = finalizeHost;
46
+ function FinalizeProjectName(config, owner) {
47
+ if (owner) {
48
+ let name = config.project;
49
+ if (name.includes('/')) {
50
+ name = config.project.split('/')[1];
51
+ }
52
+ config.project = [owner, name].join('/');
53
+ }
54
+ }
55
+ exports.FinalizeProjectName = FinalizeProjectName;
56
+ // export interface Target {
57
+ // chain: string
58
+ // abisDir?: string
59
+ // }
60
+ //
61
+ // // Supported target chain, lower case
62
+ // export const EVM = 'evm'
63
+ // export const SOLANA = 'solana'
64
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;AAAA,MAAM,OAAO,GAA+B;IAC1C,KAAK,EAAE,wBAAwB;IAC/B,IAAI,EAAE,yBAAyB;IAC/B,OAAO,EAAE,4BAA4B;IACrC,IAAI,EAAE,wBAAwB;CAC/B,CAAA;AAWD,SAAgB,gBAAgB,CAAC,IAAY;IAC3C,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,EAAE;QACrC,IAAI,GAAG,MAAM,CAAA;KACd;IACD,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAA;AAC9B,CAAC;AALD,4CAKC;AAED,SAAgB,aAAa,CAAC,IAAY;IACxC,IAAI,MAAM,GAAG,EAAE,EACb,QAAQ,GAAG,EAAE,EACb,QAAQ,GAAG,EAAE,CAAA;IACf,QAAQ,IAAI,EAAE;QACZ,KAAK,OAAO,CAAC,OAAO,CAAC;YACnB,MAAM,GAAG,iCAAiC,CAAA;YAC1C,QAAQ,GAAG,kCAAkC,CAAA;YAC7C,QAAQ,GAAG,0BAA0B,CAAA;YACrC,MAAK;QACP,KAAK,OAAO,CAAC,MAAM,CAAC;YAClB,MAAM,GAAG,yBAAyB,CAAA;YAClC,QAAQ,GAAG,kCAAkC,CAAA;YAC7C,QAAQ,GAAG,+BAA+B,CAAA;YAC1C,MAAK;QACP,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;QACrB,KAAK,OAAO,CAAC,SAAS,CAAC;YACrB,MAAM,GAAG,8BAA8B,CAAA;YACvC,QAAQ,GAAG,kCAAkC,CAAA;YAC7C,QAAQ,GAAG,gCAAgC,CAAA;YAC3C,MAAK;QACP;YACE,MAAK;KACR;IACD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAA;AACvC,CAAC;AAzBD,sCAyBC;AAED,SAAgB,YAAY,CAAC,MAA2B;IACtD,MAAM,CAAC,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;AAC7C,CAAC;AAFD,oCAEC;AAED,SAAgB,mBAAmB,CAAC,MAA2B,EAAE,KAAyB;IACxF,IAAI,KAAK,EAAE;QACT,IAAI,IAAI,GAAG,MAAM,CAAC,OAAO,CAAA;QACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACtB,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;SACpC;QACD,MAAM,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;KACzC;AACH,CAAC;AARD,kDAQC;AAED,4BAA4B;AAC5B,kBAAkB;AAClB,qBAAqB;AACrB,IAAI;AACJ,EAAE;AACF,wCAAwC;AACxC,2BAA2B;AAC3B,iCAAiC","sourcesContent":["const HostMap: { [host: string]: string } = {\n local: 'http://localhost:10000',\n test: 'https://test.sentio.xyz',\n staging: 'https://staging.sentio.xyz',\n prod: 'https://app.sentio.xyz',\n}\n\nexport interface SentioProjectConfig {\n project: string\n host: string\n // source: string\n build: boolean\n // targets: Target[]\n debug: boolean\n}\n\nexport function getFinalizedHost(host: string): string {\n if (host === undefined || host === '') {\n host = 'prod'\n }\n return HostMap[host] ?? host\n}\n\nexport function getAuthConfig(host: string): { domain: string; clientId: string; audience: string } {\n let domain = '',\n clientId = '',\n audience = ''\n switch (host) {\n case HostMap['local']:\n domain = 'https://sentio-dev.us.auth0.com'\n clientId = 'qGDisObqQbcPeRA8k02POPZ2Df4KVCna'\n audience = 'http://localhost:8080/v1'\n break\n case HostMap['prod']:\n domain = 'https://auth.sentio.xyz'\n clientId = 'xd80PeuvuZVHpBFh7yEdlSZdtE5mTpGe'\n audience = 'https://app.sentio.xyz/api/v1'\n break\n case HostMap['test']:\n case HostMap['staging']:\n domain = 'https://auth.test.sentio.xyz'\n clientId = 'qXVvovHaOE37SndxTZJxCKgZjw1axPax'\n audience = 'https://test.sentio.xyz/api/v1'\n break\n default:\n break\n }\n return { domain, clientId, audience }\n}\n\nexport function finalizeHost(config: SentioProjectConfig) {\n config.host = getFinalizedHost(config.host)\n}\n\nexport function FinalizeProjectName(config: SentioProjectConfig, owner: string | undefined) {\n if (owner) {\n let name = config.project\n if (name.includes('/')) {\n name = config.project.split('/')[1]\n }\n config.project = [owner, name].join('/')\n }\n}\n\n// export interface Target {\n// chain: string\n// abisDir?: string\n// }\n//\n// // Supported target chain, lower case\n// export const EVM = 'evm'\n// export const SOLANA = 'solana'\n"]}
package/lib/key.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export declare function WriteKey(host: string, api_key: string): void;
2
+ export declare function ReadKey(host: string): string | undefined;
package/lib/key.js ADDED
@@ -0,0 +1,44 @@
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.ReadKey = exports.WriteKey = void 0;
7
+ const path_1 = __importDefault(require("path"));
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const os_1 = __importDefault(require("os"));
10
+ const homeDir = os_1.default.homedir();
11
+ const sentioDir = path_1.default.join(homeDir, '.sentio');
12
+ const configFile = path_1.default.join(sentioDir, 'config.json');
13
+ function WriteKey(host, api_key) {
14
+ const sentioDir = path_1.default.join(homeDir, '.sentio');
15
+ if (!fs_1.default.existsSync(sentioDir)) {
16
+ fs_1.default.mkdirSync(sentioDir, { recursive: true });
17
+ }
18
+ let config = {};
19
+ if (fs_1.default.existsSync(configFile)) {
20
+ const content = fs_1.default.readFileSync(configFile, 'utf8');
21
+ config = JSON.parse(content);
22
+ }
23
+ const hostConfig = config[host] || { api_keys: {} };
24
+ hostConfig.api_keys = api_key;
25
+ config[host] = hostConfig;
26
+ fs_1.default.writeFileSync(configFile, JSON.stringify(config, null, 2));
27
+ }
28
+ exports.WriteKey = WriteKey;
29
+ function ReadKey(host) {
30
+ if (!fs_1.default.existsSync(sentioDir)) {
31
+ return undefined;
32
+ }
33
+ const configFile = path_1.default.join(sentioDir, 'config.json');
34
+ if (fs_1.default.existsSync(configFile)) {
35
+ const content = fs_1.default.readFileSync(configFile, 'utf8');
36
+ const config = JSON.parse(content);
37
+ return config[host]?.api_keys;
38
+ }
39
+ else {
40
+ return undefined;
41
+ }
42
+ }
43
+ exports.ReadKey = ReadKey;
44
+ //# sourceMappingURL=key.js.map
package/lib/key.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key.js","sourceRoot":"","sources":["../src/key.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAuB;AACvB,4CAAmB;AACnB,4CAAmB;AAEnB,MAAM,OAAO,GAAG,YAAE,CAAC,OAAO,EAAE,CAAA;AAC5B,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;AAC/C,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;AAQtD,SAAgB,QAAQ,CAAC,IAAY,EAAE,OAAe;IACpD,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;IAC/C,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;QAC7B,YAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;KAC7C;IACD,IAAI,MAAM,GAAoB,EAAE,CAAA;IAChC,IAAI,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;QAC7B,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;QACnD,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;KAC7B;IACD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAA;IACnD,UAAU,CAAC,QAAQ,GAAG,OAAO,CAAA;IAC7B,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAA;IACzB,YAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;AAC/D,CAAC;AAdD,4BAcC;AAED,SAAgB,OAAO,CAAC,IAAY;IAClC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;QAC7B,OAAO,SAAS,CAAA;KACjB;IACD,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IACtD,IAAI,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;QAC7B,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAClC,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAA;KAC9B;SAAM;QACL,OAAO,SAAS,CAAA;KACjB;AACH,CAAC;AAZD,0BAYC","sourcesContent":["import path from 'path'\nimport fs from 'fs'\nimport os from 'os'\n\nconst homeDir = os.homedir()\nconst sentioDir = path.join(homeDir, '.sentio')\nconst configFile = path.join(sentioDir, 'config.json')\n\ninterface SentioKeyConfig {\n [key: string]: {\n api_keys: string\n }\n}\n\nexport function WriteKey(host: string, api_key: string) {\n const sentioDir = path.join(homeDir, '.sentio')\n if (!fs.existsSync(sentioDir)) {\n fs.mkdirSync(sentioDir, { recursive: true })\n }\n let config: SentioKeyConfig = {}\n if (fs.existsSync(configFile)) {\n const content = fs.readFileSync(configFile, 'utf8')\n config = JSON.parse(content)\n }\n const hostConfig = config[host] || { api_keys: {} }\n hostConfig.api_keys = api_key\n config[host] = hostConfig\n fs.writeFileSync(configFile, JSON.stringify(config, null, 2))\n}\n\nexport function ReadKey(host: string): string | undefined {\n if (!fs.existsSync(sentioDir)) {\n return undefined\n }\n const configFile = path.join(sentioDir, 'config.json')\n if (fs.existsSync(configFile)) {\n const content = fs.readFileSync(configFile, 'utf8')\n const config = JSON.parse(content)\n return config[host]?.api_keys\n } else {\n return undefined\n }\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import { SentioProjectConfig } from './config';
2
+ export declare function uploadFile(options: SentioProjectConfig, apiKeyOverride: string): Promise<void>;
package/lib/upload.js ADDED
@@ -0,0 +1,189 @@
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.uploadFile = void 0;
7
+ const child_process_1 = require("child_process");
8
+ const crypto_1 = require("crypto");
9
+ const fs_1 = __importDefault(require("fs"));
10
+ const readline_1 = __importDefault(require("readline"));
11
+ const key_1 = require("./key");
12
+ const path_1 = __importDefault(require("path"));
13
+ const chalk_1 = __importDefault(require("chalk"));
14
+ const build_1 = require("./build");
15
+ const node_fetch_1 = __importDefault(require("node-fetch"));
16
+ const utils_1 = require("./utils");
17
+ const url_1 = require("url");
18
+ async function createProject(options, apiKey) {
19
+ const url = new url_1.URL('/api/v1/projects', options.host);
20
+ const [ownerName, slug] = options.project.includes('/') ? options.project.split('/') : [undefined, options.project];
21
+ return (0, node_fetch_1.default)(url, {
22
+ method: 'POST',
23
+ headers: {
24
+ 'api-key': apiKey,
25
+ },
26
+ body: JSON.stringify({ slug, ownerName, visibility: 'PRIVATE' }),
27
+ });
28
+ }
29
+ async function uploadFile(options, apiKeyOverride) {
30
+ if (options.build) {
31
+ await (0, build_1.buildProcessor)(false);
32
+ }
33
+ console.log(chalk_1.default.blue('Prepare to upload'));
34
+ const PROCESSOR_FILE = path_1.default.join(process.cwd(), 'dist/lib.js');
35
+ const apiKey = apiKeyOverride || (0, key_1.ReadKey)(options.host);
36
+ const isProd = options.host === 'https://app.sentio.xyz';
37
+ if (!apiKey) {
38
+ const cmd = isProd ? 'sentio login' : 'sentio login --host=' + options.host;
39
+ console.error(chalk_1.default.red('No Credential found for', options.host, '. Please run `' + cmd + '`.'));
40
+ process.exit(1);
41
+ }
42
+ if (!fs_1.default.existsSync(PROCESSOR_FILE)) {
43
+ console.error(chalk_1.default.red('File not existed ', PROCESSOR_FILE, "don't use --nobuild"));
44
+ process.exit(1);
45
+ }
46
+ const stat = fs_1.default.statSync(PROCESSOR_FILE);
47
+ console.log('Packed processor file size', Math.floor(stat.size / 1024) + 'K, last modified', stat.mtime);
48
+ const content = fs_1.default.readFileSync(PROCESSOR_FILE);
49
+ const hash = (0, crypto_1.createHash)('sha256');
50
+ hash.update(content);
51
+ const digest = hash.digest('hex');
52
+ let triedCount = 0;
53
+ const upload = async () => {
54
+ let commitSha = '';
55
+ let gitUrl = '';
56
+ const sha256 = digest;
57
+ try {
58
+ commitSha = (0, child_process_1.execSync)('git rev-parse HEAD').toString().trim();
59
+ }
60
+ catch (e) {
61
+ chalk_1.default.yellow(e);
62
+ }
63
+ try {
64
+ gitUrl = (0, child_process_1.execSync)('git remote get-url origin').toString().trim();
65
+ }
66
+ catch (e) {
67
+ // skip errors
68
+ }
69
+ console.log(chalk_1.default.blue(triedCount > 1 ? 'Retry uploading' : 'Uploading'));
70
+ // get gcs upload url
71
+ const initUploadResRaw = await initUpload(options.host, apiKey, options.project, (0, utils_1.getSdkVersion)());
72
+ if (!initUploadResRaw.ok) {
73
+ console.error(chalk_1.default.red('Failed to get upload url'));
74
+ console.error(chalk_1.default.red((await initUploadResRaw.json()).message));
75
+ if (initUploadResRaw.status === 404) {
76
+ // create project if not exist
77
+ const rl = readline_1.default.createInterface({
78
+ input: process.stdin,
79
+ output: process.stdout,
80
+ });
81
+ const prompt = async () => {
82
+ const answer = await new Promise((resolve) => rl.question(`Do you want to create it and continue the uploading process? (yes/no) `, resolve));
83
+ if (['y', 'yes'].includes(answer.toLowerCase())) {
84
+ rl.close();
85
+ const res = await createProject(options, apiKey);
86
+ if (!res.ok) {
87
+ console.error(chalk_1.default.red('Create Project Failed'));
88
+ console.error(chalk_1.default.red((await res.json()).message));
89
+ return;
90
+ }
91
+ console.log(chalk_1.default.green('Project created'));
92
+ await upload();
93
+ }
94
+ else if (['n', 'no'].includes(answer.toLowerCase())) {
95
+ rl.close();
96
+ }
97
+ else {
98
+ await prompt();
99
+ }
100
+ };
101
+ await prompt();
102
+ }
103
+ return;
104
+ }
105
+ const initUploadRes = await initUploadResRaw.json();
106
+ const uploadUrl = initUploadRes['url'];
107
+ // do actual uploading
108
+ const file = fs_1.default.createReadStream(PROCESSOR_FILE);
109
+ const uploadResRaw = await (0, node_fetch_1.default)(uploadUrl, {
110
+ method: 'PUT',
111
+ headers: {
112
+ 'Content-Type': 'application/octet-stream',
113
+ },
114
+ body: file,
115
+ });
116
+ if (!uploadResRaw.ok) {
117
+ console.error(chalk_1.default.red('Failed to upload'));
118
+ console.error(chalk_1.default.red(await uploadResRaw.text()));
119
+ return;
120
+ }
121
+ // finish uploading
122
+ const finishUploadResRaw = await finishUpload(options.host, apiKey, options.project, (0, utils_1.getSdkVersion)(), sha256, commitSha, gitUrl, options.debug);
123
+ if (!finishUploadResRaw.ok) {
124
+ console.error(chalk_1.default.red('Failed to finish uploading'));
125
+ console.error(chalk_1.default.red(await finishUploadResRaw.text()));
126
+ return;
127
+ }
128
+ console.log(chalk_1.default.green('Upload success: '));
129
+ console.log('\t', chalk_1.default.blue('sha256:'), digest);
130
+ if (commitSha) {
131
+ console.log('\t', chalk_1.default.blue('Git commit SHA:'), commitSha);
132
+ }
133
+ const { projectFullSlug } = await finishUploadResRaw.json();
134
+ console.log('\t', chalk_1.default.blue('Check status:'), `${options.host}/${projectFullSlug}/datasource`);
135
+ };
136
+ let error;
137
+ const tryUploading = async () => {
138
+ if (triedCount++ >= 5) {
139
+ console.error(error);
140
+ return;
141
+ }
142
+ try {
143
+ await upload();
144
+ }
145
+ catch (e) {
146
+ if (e.constructor.name === 'FetchError' && e.type === 'system' && e.code === 'EPIPE') {
147
+ error = e;
148
+ await new Promise((resolve) => setTimeout(resolve, 1000));
149
+ await tryUploading();
150
+ }
151
+ else {
152
+ console.error(e);
153
+ }
154
+ }
155
+ };
156
+ await tryUploading();
157
+ }
158
+ exports.uploadFile = uploadFile;
159
+ async function initUpload(host, apiKey, projectSlug, sdkVersion) {
160
+ const initUploadUrl = new url_1.URL(`/api/v1/processors/init_upload`, host);
161
+ return (0, node_fetch_1.default)(initUploadUrl, {
162
+ method: 'POST',
163
+ headers: {
164
+ 'api-key': apiKey,
165
+ },
166
+ body: JSON.stringify({
167
+ project_slug: projectSlug,
168
+ sdk_version: sdkVersion,
169
+ }),
170
+ });
171
+ }
172
+ async function finishUpload(host, apiKey, projectSlug, sdkVersion, sha256, commitSha, gitUrl, debug) {
173
+ const finishUploadUrl = new url_1.URL(`/api/v1/processors/finish_upload`, host);
174
+ return (0, node_fetch_1.default)(finishUploadUrl, {
175
+ method: 'POST',
176
+ headers: {
177
+ 'api-key': apiKey,
178
+ },
179
+ body: JSON.stringify({
180
+ project_slug: projectSlug,
181
+ sdk_version: sdkVersion,
182
+ sha256: sha256,
183
+ commit_sha: commitSha,
184
+ git_url: gitUrl,
185
+ debug: debug,
186
+ }),
187
+ });
188
+ }
189
+ //# sourceMappingURL=upload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload.js","sourceRoot":"","sources":["../src/upload.ts"],"names":[],"mappings":"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","sourcesContent":["import { execSync } from 'child_process'\nimport { createHash } from 'crypto'\nimport fs from 'fs'\nimport readline from 'readline'\nimport { SentioProjectConfig } from './config'\nimport { ReadKey } from './key'\nimport path from 'path'\nimport chalk from 'chalk'\nimport { buildProcessor } from './build'\nimport fetch from 'node-fetch'\nimport { getSdkVersion } from './utils'\nimport { URL } from 'url'\n\nasync function createProject(options: SentioProjectConfig, apiKey: string) {\n const url = new URL('/api/v1/projects', options.host)\n const [ownerName, slug] = options.project.includes('/') ? options.project.split('/') : [undefined, options.project]\n return fetch(url, {\n method: 'POST',\n headers: {\n 'api-key': apiKey,\n },\n body: JSON.stringify({ slug, ownerName, visibility: 'PRIVATE' }),\n })\n}\n\nexport async function uploadFile(options: SentioProjectConfig, apiKeyOverride: string) {\n if (options.build) {\n await buildProcessor(false)\n }\n\n console.log(chalk.blue('Prepare to upload'))\n\n const PROCESSOR_FILE = path.join(process.cwd(), 'dist/lib.js')\n\n const apiKey = apiKeyOverride || ReadKey(options.host)\n\n const isProd = options.host === 'https://app.sentio.xyz'\n if (!apiKey) {\n const cmd = isProd ? 'sentio login' : 'sentio login --host=' + options.host\n console.error(chalk.red('No Credential found for', options.host, '. Please run `' + cmd + '`.'))\n process.exit(1)\n }\n\n if (!fs.existsSync(PROCESSOR_FILE)) {\n console.error(chalk.red('File not existed ', PROCESSOR_FILE, \"don't use --nobuild\"))\n process.exit(1)\n }\n\n const stat = fs.statSync(PROCESSOR_FILE)\n console.log('Packed processor file size', Math.floor(stat.size / 1024) + 'K, last modified', stat.mtime)\n const content = fs.readFileSync(PROCESSOR_FILE)\n const hash = createHash('sha256')\n hash.update(content)\n const digest = hash.digest('hex')\n\n let triedCount = 0\n const upload = async () => {\n let commitSha = ''\n let gitUrl = ''\n const sha256 = digest\n try {\n commitSha = execSync('git rev-parse HEAD').toString().trim()\n } catch (e) {\n chalk.yellow(e)\n }\n try {\n gitUrl = execSync('git remote get-url origin').toString().trim()\n } catch (e) {\n // skip errors\n }\n console.log(chalk.blue(triedCount > 1 ? 'Retry uploading' : 'Uploading'))\n\n // get gcs upload url\n const initUploadResRaw = await initUpload(options.host, apiKey, options.project, getSdkVersion())\n if (!initUploadResRaw.ok) {\n console.error(chalk.red('Failed to get upload url'))\n console.error(chalk.red((await initUploadResRaw.json()).message))\n\n if (initUploadResRaw.status === 404) {\n // create project if not exist\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n })\n const prompt = async () => {\n const answer: string = await new Promise((resolve) =>\n rl.question(`Do you want to create it and continue the uploading process? (yes/no) `, resolve)\n )\n if (['y', 'yes'].includes(answer.toLowerCase())) {\n rl.close()\n const res = await createProject(options, apiKey)\n if (!res.ok) {\n console.error(chalk.red('Create Project Failed'))\n console.error(chalk.red((await res.json()).message))\n return\n }\n console.log(chalk.green('Project created'))\n await upload()\n } else if (['n', 'no'].includes(answer.toLowerCase())) {\n rl.close()\n } else {\n await prompt()\n }\n }\n await prompt()\n }\n return\n }\n const initUploadRes = await initUploadResRaw.json()\n const uploadUrl = initUploadRes['url'] as string\n\n // do actual uploading\n const file = fs.createReadStream(PROCESSOR_FILE)\n const uploadResRaw = await fetch(uploadUrl, {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/octet-stream',\n },\n body: file,\n })\n if (!uploadResRaw.ok) {\n console.error(chalk.red('Failed to upload'))\n console.error(chalk.red(await uploadResRaw.text()))\n return\n }\n\n // finish uploading\n const finishUploadResRaw = await finishUpload(\n options.host,\n apiKey,\n options.project,\n getSdkVersion(),\n sha256,\n commitSha,\n gitUrl,\n options.debug\n )\n if (!finishUploadResRaw.ok) {\n console.error(chalk.red('Failed to finish uploading'))\n console.error(chalk.red(await finishUploadResRaw.text()))\n return\n }\n\n console.log(chalk.green('Upload success: '))\n console.log('\\t', chalk.blue('sha256:'), digest)\n if (commitSha) {\n console.log('\\t', chalk.blue('Git commit SHA:'), commitSha)\n }\n const { projectFullSlug } = await finishUploadResRaw.json()\n console.log('\\t', chalk.blue('Check status:'), `${options.host}/${projectFullSlug}/datasource`)\n }\n\n let error: Error\n const tryUploading = async () => {\n if (triedCount++ >= 5) {\n console.error(error)\n return\n }\n try {\n await upload()\n } catch (e) {\n if (e.constructor.name === 'FetchError' && e.type === 'system' && e.code === 'EPIPE') {\n error = e\n await new Promise((resolve) => setTimeout(resolve, 1000))\n await tryUploading()\n } else {\n console.error(e)\n }\n }\n }\n\n await tryUploading()\n}\n\nasync function initUpload(host: string, apiKey: string, projectSlug: string, sdkVersion: string) {\n const initUploadUrl = new URL(`/api/v1/processors/init_upload`, host)\n return fetch(initUploadUrl, {\n method: 'POST',\n headers: {\n 'api-key': apiKey,\n },\n body: JSON.stringify({\n project_slug: projectSlug,\n sdk_version: sdkVersion,\n }),\n })\n}\n\nasync function finishUpload(\n host: string,\n apiKey: string,\n projectSlug: string,\n sdkVersion: string,\n sha256: string,\n commitSha: string,\n gitUrl: string,\n debug: boolean\n) {\n const finishUploadUrl = new URL(`/api/v1/processors/finish_upload`, host)\n return fetch(finishUploadUrl, {\n method: 'POST',\n headers: {\n 'api-key': apiKey,\n },\n body: JSON.stringify({\n project_slug: projectSlug,\n sdk_version: sdkVersion,\n sha256: sha256,\n commit_sha: commitSha,\n git_url: gitUrl,\n debug: debug,\n }),\n })\n}\n"]}
package/lib/utils.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export declare function getCliVersion(): any;
2
+ export declare function getSdkVersion(): any;
package/lib/utils.js ADDED
@@ -0,0 +1,28 @@
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.getSdkVersion = exports.getCliVersion = void 0;
7
+ const fs_extra_1 = __importDefault(require("fs-extra"));
8
+ const path_1 = __importDefault(require("path"));
9
+ function getCliVersion() {
10
+ const packageJsonPath = path_1.default.resolve(__dirname, '../package.json');
11
+ const packageJsonContent = fs_extra_1.default.readFileSync(packageJsonPath, 'utf-8');
12
+ const packageJson = JSON.parse(packageJsonContent);
13
+ return packageJson.version;
14
+ }
15
+ exports.getCliVersion = getCliVersion;
16
+ function getSdkVersion() {
17
+ try {
18
+ const packageJsonPath = require.resolve('@sentio/sdk/package.json');
19
+ const packageJsonContent = fs_extra_1.default.readFileSync(packageJsonPath, 'utf-8');
20
+ const packageJson = JSON.parse(packageJsonContent);
21
+ return packageJson.version;
22
+ }
23
+ catch (e) {
24
+ return undefined;
25
+ }
26
+ }
27
+ exports.getSdkVersion = getSdkVersion;
28
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;;;;AAAA,wDAAyB;AACzB,gDAAuB;AAEvB,SAAgB,aAAa;IAC3B,MAAM,eAAe,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAA;IAClE,MAAM,kBAAkB,GAAG,kBAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAA;IACpE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAA;IAElD,OAAO,WAAW,CAAC,OAAO,CAAA;AAC5B,CAAC;AAND,sCAMC;AAED,SAAgB,aAAa;IAC3B,IAAI;QACF,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAA;QACnE,MAAM,kBAAkB,GAAG,kBAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAA;QACpE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAA;QAClD,OAAO,WAAW,CAAC,OAAO,CAAA;KAC3B;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,SAAS,CAAA;KACjB;AACH,CAAC;AATD,sCASC","sourcesContent":["import fs from 'fs-extra'\nimport path from 'path'\n\nexport function getCliVersion() {\n const packageJsonPath = path.resolve(__dirname, '../package.json')\n const packageJsonContent = fs.readFileSync(packageJsonPath, 'utf-8')\n const packageJson = JSON.parse(packageJsonContent)\n\n return packageJson.version\n}\n\nexport function getSdkVersion() {\n try {\n const packageJsonPath = require.resolve('@sentio/sdk/package.json')\n const packageJsonContent = fs.readFileSync(packageJsonPath, 'utf-8')\n const packageJson = JSON.parse(packageJsonContent)\n return packageJson.version\n } catch (e) {\n return undefined\n }\n}\n"]}