@sentio/sdk 1.35.1-rc.1 → 1.36.0-rc.1
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/aptos-codegen/codegen.d.ts +1 -0
- package/lib/aptos-codegen/codegen.js +9 -1
- package/lib/aptos-codegen/codegen.js.map +1 -1
- package/lib/core/base-processor-template.d.ts +8 -1
- package/lib/core/base-processor-template.js +13 -4
- package/lib/core/base-processor-template.js.map +1 -1
- package/lib/service.d.ts +1 -3
- package/lib/service.js +9 -41
- package/lib/service.js.map +1 -1
- package/lib/solana-codegen/codegen.d.ts +1 -0
- package/lib/{cli/build.js → solana-codegen/codegen.js} +3 -92
- package/lib/solana-codegen/codegen.js.map +1 -0
- package/lib/state/processor-state.d.ts +0 -5
- package/lib/state/processor-state.js +0 -5
- package/lib/state/processor-state.js.map +1 -1
- package/lib/test-abi-code-gen.js +4 -3
- package/lib/test-abi-code-gen.js.map +1 -1
- package/lib/testing/test-processor-server.d.ts +0 -2
- package/lib/testing/test-processor-server.js +7 -17
- package/lib/testing/test-processor-server.js.map +1 -1
- package/package.json +3 -11
- package/src/aptos-codegen/codegen.ts +8 -0
- package/src/core/base-processor-template.ts +14 -4
- package/src/service.ts +9 -57
- package/src/{cli/build.ts → solana-codegen/codegen.ts} +1 -113
- package/src/state/processor-state.ts +0 -11
- package/src/test-abi-code-gen.ts +2 -1
- package/src/testing/test-processor-server.ts +7 -19
- package/lib/cli/build.d.ts +0 -4
- package/lib/cli/build.js.map +0 -1
- package/lib/cli/cli.d.ts +0 -2
- package/lib/cli/cli.js +0 -186
- package/lib/cli/cli.js.map +0 -1
- package/lib/cli/commands/login-server.d.ts +0 -7
- package/lib/cli/commands/login-server.js +0 -133
- package/lib/cli/commands/login-server.js.map +0 -1
- package/lib/cli/commands/run-create.d.ts +0 -1
- package/lib/cli/commands/run-create.js +0 -111
- package/lib/cli/commands/run-create.js.map +0 -1
- package/lib/cli/commands/run-login.d.ts +0 -1
- package/lib/cli/commands/run-login.js +0 -136
- package/lib/cli/commands/run-login.js.map +0 -1
- package/lib/cli/commands/run-version.d.ts +0 -1
- package/lib/cli/commands/run-version.js +0 -39
- package/lib/cli/commands/run-version.js.map +0 -1
- package/lib/cli/config.d.ts +0 -14
- package/lib/cli/config.js +0 -64
- package/lib/cli/config.js.map +0 -1
- package/lib/cli/key.d.ts +0 -2
- package/lib/cli/key.js +0 -44
- package/lib/cli/key.js.map +0 -1
- package/lib/cli/upload.d.ts +0 -2
- package/lib/cli/upload.js +0 -189
- package/lib/cli/upload.js.map +0 -1
- package/lib/cli/utils.d.ts +0 -1
- package/lib/cli/utils.js +0 -16
- package/lib/cli/utils.js.map +0 -1
- package/lib/cli/webpack.config.js +0 -47
- package/src/cli/cli.ts +0 -184
- package/src/cli/commands/login-server.ts +0 -119
- package/src/cli/commands/run-create.ts +0 -115
- package/src/cli/commands/run-login.ts +0 -111
- package/src/cli/commands/run-version.ts +0 -32
- package/src/cli/config.ts +0 -72
- package/src/cli/key.ts +0 -43
- package/src/cli/upload.ts +0 -214
- package/src/cli/utils.ts +0 -10
- package/src/cli/webpack.config.js +0 -47
- package/templates/aptos/abis/aptos/souffle.json +0 -389
- package/templates/aptos/jest.config.js +0 -7
- package/templates/aptos/package.json +0 -20
- package/templates/aptos/sentio.yaml +0 -1
- package/templates/aptos/src/processor.ts +0 -13
- package/templates/aptos/tsconfig.json +0 -20
- package/templates/evm/abis/evm/x2y2.json +0 -296
- package/templates/evm/jest.config.js +0 -7
- package/templates/evm/package.json +0 -20
- package/templates/evm/sentio.yaml +0 -3
- package/templates/evm/src/processor.ts +0 -29
- package/templates/evm/tsconfig.json +0 -20
- package/templates/raw/jest.config.js +0 -7
- package/templates/raw/package.json +0 -20
- package/templates/raw/sentio.yaml +0 -3
- package/templates/raw/src/processor.ts +0 -0
- package/templates/raw/tsconfig.json +0 -20
- package/templates/raw/yarn.lock +0 -4095
|
@@ -1,115 +0,0 @@
|
|
|
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 { getCliVersion } from '../utils'
|
|
7
|
-
|
|
8
|
-
export function runCreate(argv: string[]) {
|
|
9
|
-
const optionDefinitions = [
|
|
10
|
-
{
|
|
11
|
-
name: 'help',
|
|
12
|
-
alias: 'h',
|
|
13
|
-
type: Boolean,
|
|
14
|
-
description: 'Display this usage guide.',
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
name: 'name',
|
|
18
|
-
alias: 'n',
|
|
19
|
-
defaultOption: true,
|
|
20
|
-
type: String,
|
|
21
|
-
description: 'Project name',
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
name: 'directory',
|
|
25
|
-
alias: 'd',
|
|
26
|
-
description: '(Optional) The root direct new project will be created, default current working dir',
|
|
27
|
-
type: String,
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
name: 'chain-type',
|
|
31
|
-
alias: 'c',
|
|
32
|
-
description:
|
|
33
|
-
'The type of project you want to create, can be evm, aptos, raw (if you want to start from scratch and support multiple types of chains)',
|
|
34
|
-
type: String,
|
|
35
|
-
defaultValue: 'evm',
|
|
36
|
-
},
|
|
37
|
-
]
|
|
38
|
-
|
|
39
|
-
const options = commandLineArgs(optionDefinitions, { argv })
|
|
40
|
-
const usage = commandLineUsage([
|
|
41
|
-
{
|
|
42
|
-
header: 'Create a template project',
|
|
43
|
-
content: 'sentio create <name>',
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
header: 'Options',
|
|
47
|
-
optionList: optionDefinitions,
|
|
48
|
-
},
|
|
49
|
-
])
|
|
50
|
-
|
|
51
|
-
if (options.help || !options.name) {
|
|
52
|
-
console.log(usage)
|
|
53
|
-
} else {
|
|
54
|
-
const chainType: string = options['chain-type'].toLowerCase()
|
|
55
|
-
switch (chainType) {
|
|
56
|
-
case 'evm':
|
|
57
|
-
break
|
|
58
|
-
case 'aptos':
|
|
59
|
-
break
|
|
60
|
-
case 'raw':
|
|
61
|
-
break
|
|
62
|
-
default:
|
|
63
|
-
console.error(chalk.red('non supported chain-type for template creation, use --help for more information.'))
|
|
64
|
-
console.log(usage)
|
|
65
|
-
process.exit(1)
|
|
66
|
-
}
|
|
67
|
-
const templateFolder = path.resolve(__dirname, '../../../templates', chainType)
|
|
68
|
-
const projectName = options.name || 'default'
|
|
69
|
-
|
|
70
|
-
const rootDir = options.directory || process.cwd()
|
|
71
|
-
const dstFolder = path.resolve(rootDir, projectName)
|
|
72
|
-
if (fs.existsSync(dstFolder)) {
|
|
73
|
-
console.error(chalk.red("can't create project '" + projectName + "', directory already existed"))
|
|
74
|
-
process.exit(1)
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
fs.copySync(templateFolder, dstFolder, {
|
|
78
|
-
filter: (src, _) => {
|
|
79
|
-
// TODO read from .gitignore to be more reliable
|
|
80
|
-
if (
|
|
81
|
-
src.endsWith('types') ||
|
|
82
|
-
src.endsWith('dist') ||
|
|
83
|
-
src.endsWith('node_modules') ||
|
|
84
|
-
src.endsWith('.lock') ||
|
|
85
|
-
src.endsWith('dist')
|
|
86
|
-
) {
|
|
87
|
-
return false
|
|
88
|
-
}
|
|
89
|
-
return true
|
|
90
|
-
},
|
|
91
|
-
overwrite: false,
|
|
92
|
-
})
|
|
93
|
-
if (options.name) {
|
|
94
|
-
const sentioYamlPath = path.resolve(dstFolder, 'sentio.yaml')
|
|
95
|
-
fs.writeFileSync(sentioYamlPath, 'project: ' + projectName + '\n', { flag: 'w+' })
|
|
96
|
-
|
|
97
|
-
const packageJsonPath = path.resolve(dstFolder, 'package.json')
|
|
98
|
-
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'))
|
|
99
|
-
|
|
100
|
-
let cliVersion = getCliVersion()
|
|
101
|
-
if (!cliVersion.startsWith('^')) {
|
|
102
|
-
cliVersion = '^' + cliVersion
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
packageJson.dependencies['@sentio/sdk'] = cliVersion
|
|
106
|
-
packageJson.name = projectName
|
|
107
|
-
|
|
108
|
-
// Don't add directly to avoid deps issue
|
|
109
|
-
packageJson.scripts.postinstall = 'sentio gen'
|
|
110
|
-
|
|
111
|
-
fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2))
|
|
112
|
-
}
|
|
113
|
-
console.log(chalk.green("successfully create project '" + projectName + "'"))
|
|
114
|
-
}
|
|
115
|
-
}
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
import commandLineArgs from 'command-line-args'
|
|
2
|
-
import commandLineUsage from 'command-line-usage'
|
|
3
|
-
import { getAuthConfig, getFinalizedHost } from '../config'
|
|
4
|
-
import { startServer } from './login-server'
|
|
5
|
-
import url, { URL } from 'url'
|
|
6
|
-
import * as crypto from 'crypto'
|
|
7
|
-
import chalk from 'chalk'
|
|
8
|
-
import { WriteKey } from '../key'
|
|
9
|
-
import fetch from 'node-fetch'
|
|
10
|
-
import open from 'open'
|
|
11
|
-
|
|
12
|
-
const port = 20000
|
|
13
|
-
|
|
14
|
-
export function runLogin(argv: string[]) {
|
|
15
|
-
const optionDefinitions = [
|
|
16
|
-
{
|
|
17
|
-
name: 'help',
|
|
18
|
-
alias: 'h',
|
|
19
|
-
type: Boolean,
|
|
20
|
-
description: 'Display this usage guide.',
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
name: 'host',
|
|
24
|
-
description: '(Optional) Override Sentio Host name',
|
|
25
|
-
type: String,
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
name: 'api-key',
|
|
29
|
-
type: String,
|
|
30
|
-
description: '(Optional) Your API key',
|
|
31
|
-
},
|
|
32
|
-
]
|
|
33
|
-
const options = commandLineArgs(optionDefinitions, { argv })
|
|
34
|
-
|
|
35
|
-
const host = getFinalizedHost(options.host)
|
|
36
|
-
if (options.help) {
|
|
37
|
-
const usage = commandLineUsage([
|
|
38
|
-
{
|
|
39
|
-
header: 'Login to Sentio',
|
|
40
|
-
content: 'sentio login',
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
header: 'Options',
|
|
44
|
-
optionList: optionDefinitions,
|
|
45
|
-
},
|
|
46
|
-
])
|
|
47
|
-
console.log(usage)
|
|
48
|
-
} else if (options['api-key']) {
|
|
49
|
-
console.log(chalk.blue('login to ' + host))
|
|
50
|
-
const apiKey = options['api-key']
|
|
51
|
-
checkKey(host, apiKey).then((res) => {
|
|
52
|
-
if (res.status == 200) {
|
|
53
|
-
WriteKey(host, apiKey)
|
|
54
|
-
console.log(chalk.green('login success'))
|
|
55
|
-
} else {
|
|
56
|
-
console.error(chalk.red('login failed, code:', res.status, res.statusText))
|
|
57
|
-
}
|
|
58
|
-
})
|
|
59
|
-
} else {
|
|
60
|
-
// https://auth0.com/docs/get-started/authentication-and-authorization-flow/call-your-api-using-the-authorization-code-flow-with-pkce
|
|
61
|
-
const verifier = base64URLEncode(crypto.randomBytes(32))
|
|
62
|
-
const challenge = base64URLEncode(sha256(verifier))
|
|
63
|
-
|
|
64
|
-
const conf = getAuthConfig(host)
|
|
65
|
-
if (conf.domain === '') {
|
|
66
|
-
console.error(chalk.red('invalid host, try login with an API key if it is a dev env'))
|
|
67
|
-
return
|
|
68
|
-
}
|
|
69
|
-
const authURL = new URL(conf.domain + `/authorize?`)
|
|
70
|
-
const params = new url.URLSearchParams({
|
|
71
|
-
response_type: 'code',
|
|
72
|
-
code_challenge: challenge,
|
|
73
|
-
code_challenge_method: 'S256',
|
|
74
|
-
client_id: conf.clientId,
|
|
75
|
-
redirect_uri: `http://localhost:${port}/callback`,
|
|
76
|
-
audience: conf.audience,
|
|
77
|
-
prompt: 'login',
|
|
78
|
-
})
|
|
79
|
-
authURL.search = params.toString()
|
|
80
|
-
|
|
81
|
-
console.log('Continue your authorization in the browser')
|
|
82
|
-
open(authURL.toString()).catch((reason) => {
|
|
83
|
-
console.error(chalk.red('Unable to open browser: ' + reason))
|
|
84
|
-
console.error(chalk.red('Open this url in your browser: ' + authURL.toString()))
|
|
85
|
-
})
|
|
86
|
-
|
|
87
|
-
startServer({
|
|
88
|
-
serverPort: port,
|
|
89
|
-
sentioHost: options.host,
|
|
90
|
-
codeVerifier: verifier,
|
|
91
|
-
})
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
function base64URLEncode(str: Buffer) {
|
|
96
|
-
return str.toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '')
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
function sha256(str: string) {
|
|
100
|
-
return crypto.createHash('sha256').update(str).digest()
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
async function checkKey(host: string, apiKey: string) {
|
|
104
|
-
const checkApiKeyUrl = new URL('/api/v1/processors/check_key', host)
|
|
105
|
-
return fetch(checkApiKeyUrl, {
|
|
106
|
-
method: 'GET',
|
|
107
|
-
headers: {
|
|
108
|
-
'api-key': apiKey,
|
|
109
|
-
},
|
|
110
|
-
})
|
|
111
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import commandLineArgs from 'command-line-args'
|
|
2
|
-
import commandLineUsage from 'command-line-usage'
|
|
3
|
-
import { getCliVersion } from '../utils'
|
|
4
|
-
|
|
5
|
-
export function runVersion(argv: string[]) {
|
|
6
|
-
const optionDefinitions = [
|
|
7
|
-
{
|
|
8
|
-
name: 'help',
|
|
9
|
-
alias: 'h',
|
|
10
|
-
type: Boolean,
|
|
11
|
-
description: 'Display this usage guide.',
|
|
12
|
-
},
|
|
13
|
-
]
|
|
14
|
-
const options = commandLineArgs(optionDefinitions, { argv })
|
|
15
|
-
|
|
16
|
-
if (options.help) {
|
|
17
|
-
const usage = commandLineUsage([
|
|
18
|
-
{
|
|
19
|
-
header: 'Show current version',
|
|
20
|
-
content: 'sentio version',
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
header: 'Options',
|
|
24
|
-
optionList: optionDefinitions,
|
|
25
|
-
},
|
|
26
|
-
])
|
|
27
|
-
console.log(usage)
|
|
28
|
-
} else {
|
|
29
|
-
console.log('CLI Version: ', getCliVersion())
|
|
30
|
-
// TODO show SDK version for current package
|
|
31
|
-
}
|
|
32
|
-
}
|
package/src/cli/config.ts
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
const HostMap: { [host: string]: string } = {
|
|
2
|
-
local: 'http://localhost:10000',
|
|
3
|
-
test: 'https://test.sentio.xyz',
|
|
4
|
-
staging: 'https://staging.sentio.xyz',
|
|
5
|
-
prod: 'https://app.sentio.xyz',
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
export interface SentioProjectConfig {
|
|
9
|
-
project: string
|
|
10
|
-
host: string
|
|
11
|
-
// source: string
|
|
12
|
-
build: boolean
|
|
13
|
-
// targets: Target[]
|
|
14
|
-
debug: boolean
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export function getFinalizedHost(host: string): string {
|
|
18
|
-
if (host === undefined || host === '') {
|
|
19
|
-
host = 'prod'
|
|
20
|
-
}
|
|
21
|
-
return HostMap[host] ?? host
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export function getAuthConfig(host: string): { domain: string; clientId: string; audience: string } {
|
|
25
|
-
let domain = '',
|
|
26
|
-
clientId = '',
|
|
27
|
-
audience = ''
|
|
28
|
-
switch (host) {
|
|
29
|
-
case HostMap['local']:
|
|
30
|
-
domain = 'https://sentio-dev.us.auth0.com'
|
|
31
|
-
clientId = 'qGDisObqQbcPeRA8k02POPZ2Df4KVCna'
|
|
32
|
-
audience = 'http://localhost:8080/v1'
|
|
33
|
-
break
|
|
34
|
-
case HostMap['prod']:
|
|
35
|
-
domain = 'https://auth.sentio.xyz'
|
|
36
|
-
clientId = 'xd80PeuvuZVHpBFh7yEdlSZdtE5mTpGe'
|
|
37
|
-
audience = 'https://app.sentio.xyz/api/v1'
|
|
38
|
-
break
|
|
39
|
-
case HostMap['test']:
|
|
40
|
-
case HostMap['staging']:
|
|
41
|
-
domain = 'https://auth.test.sentio.xyz'
|
|
42
|
-
clientId = 'qXVvovHaOE37SndxTZJxCKgZjw1axPax'
|
|
43
|
-
audience = 'https://test.sentio.xyz/api/v1'
|
|
44
|
-
break
|
|
45
|
-
default:
|
|
46
|
-
break
|
|
47
|
-
}
|
|
48
|
-
return { domain, clientId, audience }
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
export function finalizeHost(config: SentioProjectConfig) {
|
|
52
|
-
config.host = getFinalizedHost(config.host)
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
export function FinalizeProjectName(config: SentioProjectConfig, owner: string | undefined) {
|
|
56
|
-
if (owner) {
|
|
57
|
-
let name = config.project
|
|
58
|
-
if (name.includes('/')) {
|
|
59
|
-
name = config.project.split('/')[1]
|
|
60
|
-
}
|
|
61
|
-
config.project = [owner, name].join('/')
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
// export interface Target {
|
|
66
|
-
// chain: string
|
|
67
|
-
// abisDir?: string
|
|
68
|
-
// }
|
|
69
|
-
//
|
|
70
|
-
// // Supported target chain, lower case
|
|
71
|
-
// export const EVM = 'evm'
|
|
72
|
-
// export const SOLANA = 'solana'
|
package/src/cli/key.ts
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import path from 'path'
|
|
2
|
-
import fs from 'fs'
|
|
3
|
-
import os from 'os'
|
|
4
|
-
|
|
5
|
-
const homeDir = os.homedir()
|
|
6
|
-
const sentioDir = path.join(homeDir, '.sentio')
|
|
7
|
-
const configFile = path.join(sentioDir, 'config.json')
|
|
8
|
-
|
|
9
|
-
interface SentioKeyConfig {
|
|
10
|
-
[key: string]: {
|
|
11
|
-
api_keys: string
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export function WriteKey(host: string, api_key: string) {
|
|
16
|
-
const sentioDir = path.join(homeDir, '.sentio')
|
|
17
|
-
if (!fs.existsSync(sentioDir)) {
|
|
18
|
-
fs.mkdirSync(sentioDir, { recursive: true })
|
|
19
|
-
}
|
|
20
|
-
let config: SentioKeyConfig = {}
|
|
21
|
-
if (fs.existsSync(configFile)) {
|
|
22
|
-
const content = fs.readFileSync(configFile, 'utf8')
|
|
23
|
-
config = JSON.parse(content)
|
|
24
|
-
}
|
|
25
|
-
const hostConfig = config[host] || { api_keys: {} }
|
|
26
|
-
hostConfig.api_keys = api_key
|
|
27
|
-
config[host] = hostConfig
|
|
28
|
-
fs.writeFileSync(configFile, JSON.stringify(config, null, 2))
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export function ReadKey(host: string): string | undefined {
|
|
32
|
-
if (!fs.existsSync(sentioDir)) {
|
|
33
|
-
return undefined
|
|
34
|
-
}
|
|
35
|
-
const configFile = path.join(sentioDir, 'config.json')
|
|
36
|
-
if (fs.existsSync(configFile)) {
|
|
37
|
-
const content = fs.readFileSync(configFile, 'utf8')
|
|
38
|
-
const config = JSON.parse(content)
|
|
39
|
-
return config[host]?.api_keys
|
|
40
|
-
} else {
|
|
41
|
-
return undefined
|
|
42
|
-
}
|
|
43
|
-
}
|
package/src/cli/upload.ts
DELETED
|
@@ -1,214 +0,0 @@
|
|
|
1
|
-
import { execSync } from 'child_process'
|
|
2
|
-
import { createHash } from 'crypto'
|
|
3
|
-
import fs from 'fs'
|
|
4
|
-
import readline from 'readline'
|
|
5
|
-
import { SentioProjectConfig } from './config'
|
|
6
|
-
import { ReadKey } from './key'
|
|
7
|
-
import path from 'path'
|
|
8
|
-
import chalk from 'chalk'
|
|
9
|
-
import { buildProcessor } from './build'
|
|
10
|
-
import fetch from 'node-fetch'
|
|
11
|
-
import { getCliVersion } from './utils'
|
|
12
|
-
import { URL } from 'url'
|
|
13
|
-
|
|
14
|
-
async function createProject(options: SentioProjectConfig, apiKey: string) {
|
|
15
|
-
const url = new URL('/api/v1/projects', options.host)
|
|
16
|
-
const [ownerName, slug] = options.project.includes('/') ? options.project.split('/') : [undefined, options.project]
|
|
17
|
-
return fetch(url, {
|
|
18
|
-
method: 'POST',
|
|
19
|
-
headers: {
|
|
20
|
-
'api-key': apiKey,
|
|
21
|
-
},
|
|
22
|
-
body: JSON.stringify({ slug, ownerName, visibility: 'PRIVATE' }),
|
|
23
|
-
})
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export async function uploadFile(options: SentioProjectConfig, apiKeyOverride: string) {
|
|
27
|
-
if (options.build) {
|
|
28
|
-
await buildProcessor(false)
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
console.log(chalk.blue('Prepare to upload'))
|
|
32
|
-
|
|
33
|
-
const PROCESSOR_FILE = path.join(process.cwd(), 'dist/lib.js')
|
|
34
|
-
|
|
35
|
-
const apiKey = apiKeyOverride || ReadKey(options.host)
|
|
36
|
-
|
|
37
|
-
const isProd = options.host === 'https://app.sentio.xyz'
|
|
38
|
-
if (!apiKey) {
|
|
39
|
-
const cmd = isProd ? 'sentio login' : 'sentio login --host=' + options.host
|
|
40
|
-
console.error(chalk.red('No Credential found for', options.host, '. Please run `' + cmd + '`.'))
|
|
41
|
-
process.exit(1)
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
if (!fs.existsSync(PROCESSOR_FILE)) {
|
|
45
|
-
console.error(chalk.red('File not existed ', PROCESSOR_FILE, "don't use --nobuild"))
|
|
46
|
-
process.exit(1)
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
const stat = fs.statSync(PROCESSOR_FILE)
|
|
50
|
-
console.log('Packed processor file size', Math.floor(stat.size / 1024) + 'K, last modified', stat.mtime)
|
|
51
|
-
const content = fs.readFileSync(PROCESSOR_FILE)
|
|
52
|
-
const hash = createHash('sha256')
|
|
53
|
-
hash.update(content)
|
|
54
|
-
const digest = hash.digest('hex')
|
|
55
|
-
|
|
56
|
-
let triedCount = 0
|
|
57
|
-
const upload = async () => {
|
|
58
|
-
let commitSha = ''
|
|
59
|
-
let gitUrl = ''
|
|
60
|
-
const sha256 = digest
|
|
61
|
-
try {
|
|
62
|
-
commitSha = execSync('git rev-parse HEAD').toString().trim()
|
|
63
|
-
} catch (e) {
|
|
64
|
-
chalk.yellow(e)
|
|
65
|
-
}
|
|
66
|
-
try {
|
|
67
|
-
gitUrl = execSync('git remote get-url origin').toString().trim()
|
|
68
|
-
} catch (e) {
|
|
69
|
-
// skip errors
|
|
70
|
-
}
|
|
71
|
-
console.log(chalk.blue(triedCount > 1 ? 'Retry uploading' : 'Uploading'))
|
|
72
|
-
|
|
73
|
-
// get gcs upload url
|
|
74
|
-
const initUploadResRaw = await initUpload(options.host, apiKey, options.project, getCliVersion())
|
|
75
|
-
if (!initUploadResRaw.ok) {
|
|
76
|
-
console.error(chalk.red('Failed to get upload url'))
|
|
77
|
-
console.error(chalk.red((await initUploadResRaw.json()).message))
|
|
78
|
-
|
|
79
|
-
if (initUploadResRaw.status === 404) {
|
|
80
|
-
// create project if not exist
|
|
81
|
-
const rl = readline.createInterface({
|
|
82
|
-
input: process.stdin,
|
|
83
|
-
output: process.stdout,
|
|
84
|
-
})
|
|
85
|
-
const prompt = async () => {
|
|
86
|
-
const answer: string = await new Promise((resolve) =>
|
|
87
|
-
rl.question(`Do you want to create it and continue the uploading process? (yes/no) `, resolve)
|
|
88
|
-
)
|
|
89
|
-
if (['y', 'yes'].includes(answer.toLowerCase())) {
|
|
90
|
-
rl.close()
|
|
91
|
-
const res = await createProject(options, apiKey)
|
|
92
|
-
if (!res.ok) {
|
|
93
|
-
console.error(chalk.red('Create Project Failed'))
|
|
94
|
-
console.error(chalk.red((await res.json()).message))
|
|
95
|
-
return
|
|
96
|
-
}
|
|
97
|
-
console.log(chalk.green('Project created'))
|
|
98
|
-
await upload()
|
|
99
|
-
} else if (['n', 'no'].includes(answer.toLowerCase())) {
|
|
100
|
-
rl.close()
|
|
101
|
-
} else {
|
|
102
|
-
await prompt()
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
await prompt()
|
|
106
|
-
}
|
|
107
|
-
return
|
|
108
|
-
}
|
|
109
|
-
const initUploadRes = await initUploadResRaw.json()
|
|
110
|
-
const uploadUrl = initUploadRes['url'] as string
|
|
111
|
-
|
|
112
|
-
// do actual uploading
|
|
113
|
-
const file = fs.createReadStream(PROCESSOR_FILE)
|
|
114
|
-
const uploadResRaw = await fetch(uploadUrl, {
|
|
115
|
-
method: 'PUT',
|
|
116
|
-
headers: {
|
|
117
|
-
'Content-Type': 'application/octet-stream',
|
|
118
|
-
},
|
|
119
|
-
body: file,
|
|
120
|
-
})
|
|
121
|
-
if (!uploadResRaw.ok) {
|
|
122
|
-
console.error(chalk.red('Failed to upload'))
|
|
123
|
-
console.error(chalk.red(await uploadResRaw.text()))
|
|
124
|
-
return
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
// finish uploading
|
|
128
|
-
const finishUploadResRaw = await finishUpload(
|
|
129
|
-
options.host,
|
|
130
|
-
apiKey,
|
|
131
|
-
options.project,
|
|
132
|
-
getCliVersion(),
|
|
133
|
-
sha256,
|
|
134
|
-
commitSha,
|
|
135
|
-
gitUrl,
|
|
136
|
-
options.debug
|
|
137
|
-
)
|
|
138
|
-
if (!finishUploadResRaw.ok) {
|
|
139
|
-
console.error(chalk.red('Failed to finish uploading'))
|
|
140
|
-
console.error(chalk.red(await finishUploadResRaw.text()))
|
|
141
|
-
return
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
console.log(chalk.green('Upload success: '))
|
|
145
|
-
console.log('\t', chalk.blue('sha256:'), digest)
|
|
146
|
-
if (commitSha) {
|
|
147
|
-
console.log('\t', chalk.blue('Git commit SHA:'), commitSha)
|
|
148
|
-
}
|
|
149
|
-
const { projectFullSlug } = await finishUploadResRaw.json()
|
|
150
|
-
console.log('\t', chalk.blue('Check status:'), `${options.host}/${projectFullSlug}/datasource`)
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
let error: Error
|
|
154
|
-
const tryUploading = async () => {
|
|
155
|
-
if (triedCount++ >= 5) {
|
|
156
|
-
console.error(error)
|
|
157
|
-
return
|
|
158
|
-
}
|
|
159
|
-
try {
|
|
160
|
-
await upload()
|
|
161
|
-
} catch (e) {
|
|
162
|
-
if (e.constructor.name === 'FetchError' && e.type === 'system' && e.code === 'EPIPE') {
|
|
163
|
-
error = e
|
|
164
|
-
await new Promise((resolve) => setTimeout(resolve, 1000))
|
|
165
|
-
await tryUploading()
|
|
166
|
-
} else {
|
|
167
|
-
console.error(e)
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
await tryUploading()
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
async function initUpload(host: string, apiKey: string, projectSlug: string, sdkVersion: string) {
|
|
176
|
-
const initUploadUrl = new URL(`/api/v1/processors/init_upload`, host)
|
|
177
|
-
return fetch(initUploadUrl, {
|
|
178
|
-
method: 'POST',
|
|
179
|
-
headers: {
|
|
180
|
-
'api-key': apiKey,
|
|
181
|
-
},
|
|
182
|
-
body: JSON.stringify({
|
|
183
|
-
project_slug: projectSlug,
|
|
184
|
-
sdk_version: sdkVersion,
|
|
185
|
-
}),
|
|
186
|
-
})
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
async function finishUpload(
|
|
190
|
-
host: string,
|
|
191
|
-
apiKey: string,
|
|
192
|
-
projectSlug: string,
|
|
193
|
-
sdkVersion: string,
|
|
194
|
-
sha256: string,
|
|
195
|
-
commitSha: string,
|
|
196
|
-
gitUrl: string,
|
|
197
|
-
debug: boolean
|
|
198
|
-
) {
|
|
199
|
-
const finishUploadUrl = new URL(`/api/v1/processors/finish_upload`, host)
|
|
200
|
-
return fetch(finishUploadUrl, {
|
|
201
|
-
method: 'POST',
|
|
202
|
-
headers: {
|
|
203
|
-
'api-key': apiKey,
|
|
204
|
-
},
|
|
205
|
-
body: JSON.stringify({
|
|
206
|
-
project_slug: projectSlug,
|
|
207
|
-
sdk_version: sdkVersion,
|
|
208
|
-
sha256: sha256,
|
|
209
|
-
commit_sha: commitSha,
|
|
210
|
-
git_url: gitUrl,
|
|
211
|
-
debug: debug,
|
|
212
|
-
}),
|
|
213
|
-
})
|
|
214
|
-
}
|
package/src/cli/utils.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import fs from 'fs-extra'
|
|
2
|
-
import path from 'path'
|
|
3
|
-
|
|
4
|
-
export function getCliVersion() {
|
|
5
|
-
const packageJsonPath = path.resolve(__dirname, '../../package.json')
|
|
6
|
-
const packageJsonContent = fs.readFileSync(packageJsonPath, 'utf-8')
|
|
7
|
-
const packageJson = JSON.parse(packageJsonContent)
|
|
8
|
-
|
|
9
|
-
return packageJson.version
|
|
10
|
-
}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
/* eslint-disable */
|
|
2
|
-
const path = require('path')
|
|
3
|
-
|
|
4
|
-
module.exports = {
|
|
5
|
-
entry: {
|
|
6
|
-
lib: './src/processor.ts',
|
|
7
|
-
},
|
|
8
|
-
devtool: 'inline-source-map',
|
|
9
|
-
module: {
|
|
10
|
-
rules: [
|
|
11
|
-
{
|
|
12
|
-
test: /\.tsx?$/,
|
|
13
|
-
use: 'ts-loader',
|
|
14
|
-
exclude: /node_modules/,
|
|
15
|
-
},
|
|
16
|
-
],
|
|
17
|
-
},
|
|
18
|
-
resolve: {
|
|
19
|
-
extensions: ['.ts', '.js'],
|
|
20
|
-
},
|
|
21
|
-
output: {
|
|
22
|
-
filename: '[name].js',
|
|
23
|
-
path: path.resolve(process.cwd(), 'dist'),
|
|
24
|
-
},
|
|
25
|
-
target: 'node',
|
|
26
|
-
mode: 'production',
|
|
27
|
-
externals: [
|
|
28
|
-
{
|
|
29
|
-
protobufjs: 'commonjs2 protobufjs',
|
|
30
|
-
aptos: 'commonjs2 aptos-sdk',
|
|
31
|
-
ethers: 'commonjs2 ethers',
|
|
32
|
-
bs58: 'commonjs2 bs58',
|
|
33
|
-
"bignumber.js": 'commonjs2 bignumber.js',
|
|
34
|
-
'bn.js': 'commonjs2 bn.js',
|
|
35
|
-
'csv-parse': 'commonjs2 csv-parse',
|
|
36
|
-
},
|
|
37
|
-
function ({ context, request }, callback) {
|
|
38
|
-
if (/^@(ethersproject|solana|project-serum|nice-grpc).*$/.test(request)) {
|
|
39
|
-
return callback(null, 'commonjs ' + request)
|
|
40
|
-
}
|
|
41
|
-
if (request.startsWith("@sentio/sdk")) {
|
|
42
|
-
return callback(null, 'commonjs2 ' + request)
|
|
43
|
-
}
|
|
44
|
-
callback()
|
|
45
|
-
},
|
|
46
|
-
],
|
|
47
|
-
}
|