@dbos-inc/dbos-cloud 0.9.15-preview.g32137f5fa0 → 0.9.16-preview
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/applications/get-app-info.ts +47 -0
- package/applications/list-apps.ts +2 -1
- package/applications/types.ts +2 -1
- package/cli.ts +31 -26
- package/cloudutils.ts +24 -2
- package/dist/packages/dbos-cloud/applications/get-app-info.d.ts +2 -0
- package/dist/packages/dbos-cloud/applications/get-app-info.d.ts.map +1 -0
- package/dist/packages/dbos-cloud/applications/get-app-info.js +54 -0
- package/dist/packages/dbos-cloud/applications/get-app-info.js.map +1 -0
- package/dist/packages/dbos-cloud/applications/list-apps.d.ts.map +1 -1
- package/dist/packages/dbos-cloud/applications/list-apps.js +2 -1
- package/dist/packages/dbos-cloud/applications/list-apps.js.map +1 -1
- package/dist/packages/dbos-cloud/applications/types.d.ts +2 -1
- package/dist/packages/dbos-cloud/applications/types.d.ts.map +1 -1
- package/dist/packages/dbos-cloud/cli.js +29 -25
- package/dist/packages/dbos-cloud/cli.js.map +1 -1
- package/dist/packages/dbos-cloud/cloudutils.d.ts +6 -1
- package/dist/packages/dbos-cloud/cloudutils.d.ts.map +1 -1
- package/dist/packages/dbos-cloud/cloudutils.js +23 -5
- package/dist/packages/dbos-cloud/cloudutils.js.map +1 -1
- package/dist/packages/dbos-cloud/login.d.ts +0 -7
- package/dist/packages/dbos-cloud/login.d.ts.map +1 -1
- package/dist/packages/dbos-cloud/login.js +14 -12
- package/dist/packages/dbos-cloud/login.js.map +1 -1
- package/dist/packages/dbos-cloud/userdb.d.ts +6 -4
- package/dist/packages/dbos-cloud/userdb.d.ts.map +1 -1
- package/dist/packages/dbos-cloud/userdb.js +42 -4
- package/dist/packages/dbos-cloud/userdb.js.map +1 -1
- package/login.ts +9 -12
- package/package.json +2 -2
- package/userdb.ts +43 -4
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import axios , { AxiosError } from "axios";
|
|
2
|
+
import { handleAPIErrors, getCloudCredentials, getLogger, isCloudAPIErrorResponse } from "../cloudutils";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { Application } from "./types";
|
|
5
|
+
|
|
6
|
+
export async function getAppInfo(host: string, json: boolean): Promise<number> {
|
|
7
|
+
const logger = getLogger();
|
|
8
|
+
const userCredentials = getCloudCredentials();
|
|
9
|
+
const bearerToken = "Bearer " + userCredentials.token;
|
|
10
|
+
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
12
|
+
const packageJson = require(path.join(process.cwd(), 'package.json')) as { name: string };
|
|
13
|
+
const appName = packageJson.name;
|
|
14
|
+
if (!json) {
|
|
15
|
+
logger.info(`Retrieving info for application: ${appName}`)
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
try {
|
|
19
|
+
const res = await axios.get(`https://${host}/${userCredentials.userName}/application/${appName}`, {
|
|
20
|
+
headers: {
|
|
21
|
+
"Content-Type": "application/json",
|
|
22
|
+
Authorization: bearerToken,
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
const app = res.data as Application
|
|
26
|
+
if (json) {
|
|
27
|
+
console.log(JSON.stringify(app));
|
|
28
|
+
} else {
|
|
29
|
+
console.log(`Application Name: ${app.Name}`);
|
|
30
|
+
console.log(`ID: ${app.ID}`);
|
|
31
|
+
console.log(`Postgres Instance Name: ${app.PostgresInstanceName}`);
|
|
32
|
+
console.log(`Application Database Name: ${app.ApplicationDatabaseName}`);
|
|
33
|
+
console.log(`Status: ${app.Status}`);
|
|
34
|
+
console.log(`Version: ${app.Version}`);
|
|
35
|
+
}
|
|
36
|
+
return 0;
|
|
37
|
+
} catch (e) {
|
|
38
|
+
const errorLabel = `Failed to retrieve info for application ${appName}`;
|
|
39
|
+
const axiosError = e as AxiosError;
|
|
40
|
+
if (isCloudAPIErrorResponse(axiosError.response?.data)) {
|
|
41
|
+
handleAPIErrors(errorLabel, axiosError);
|
|
42
|
+
} else {
|
|
43
|
+
logger.error(`${errorLabel}: ${(e as Error).message}`);
|
|
44
|
+
}
|
|
45
|
+
return 1;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -28,7 +28,8 @@ export async function listApps(host: string, json: boolean): Promise<number> {
|
|
|
28
28
|
applications.forEach(app => {
|
|
29
29
|
console.log(`Application Name: ${app.Name}`);
|
|
30
30
|
console.log(`ID: ${app.ID}`);
|
|
31
|
-
console.log(`
|
|
31
|
+
console.log(`Postgres Instance Name: ${app.ApplicationDatabaseName}`);
|
|
32
|
+
console.log(`Application Database Name: ${app.ApplicationDatabaseName}`);
|
|
32
33
|
console.log(`Status: ${app.Status}`);
|
|
33
34
|
console.log(`Version: ${app.Version}`);
|
|
34
35
|
console.log('-------------------------');
|
package/applications/types.ts
CHANGED
package/cli.ts
CHANGED
|
@@ -11,12 +11,12 @@ import {
|
|
|
11
11
|
import { Command } from 'commander';
|
|
12
12
|
import { login } from "./login";
|
|
13
13
|
import { registerUser } from "./register";
|
|
14
|
-
import { createUserDb, getUserDb, deleteUserDb } from "./userdb";
|
|
14
|
+
import { createUserDb, getUserDb, deleteUserDb, listUserDB } from "./userdb";
|
|
15
|
+
import { DBOSCloudHost } from "./cloudutils";
|
|
16
|
+
import { getAppInfo } from "./applications/get-app-info";
|
|
15
17
|
|
|
16
18
|
const program = new Command();
|
|
17
19
|
|
|
18
|
-
const DEFAULT_HOST = process.env.DBOS_DOMAIN; // TODO: Once we have a "production" cluster, hardcode its domain name here
|
|
19
|
-
|
|
20
20
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
21
21
|
const packageJson = require('../../../package.json') as { version: string };
|
|
22
22
|
program.
|
|
@@ -39,9 +39,8 @@ program
|
|
|
39
39
|
.command('register')
|
|
40
40
|
.description('Register a user and log in to DBOS cloud')
|
|
41
41
|
.requiredOption('-u, --username <string>', 'Username')
|
|
42
|
-
.
|
|
43
|
-
|
|
44
|
-
const exitCode = await registerUser(options.username, options.host);
|
|
42
|
+
.action(async (options: { username: string}) => {
|
|
43
|
+
const exitCode = await registerUser(options.username, DBOSCloudHost);
|
|
45
44
|
process.exit(exitCode);
|
|
46
45
|
});
|
|
47
46
|
|
|
@@ -52,15 +51,13 @@ program
|
|
|
52
51
|
const applicationCommands = program
|
|
53
52
|
.command('applications')
|
|
54
53
|
.description('Manage your DBOS applications')
|
|
55
|
-
.option('-h, --host <string>', 'Specify the host', DEFAULT_HOST)
|
|
56
54
|
|
|
57
55
|
applicationCommands
|
|
58
56
|
.command('register')
|
|
59
57
|
.description('Register a new application')
|
|
60
58
|
.requiredOption('-d, --database <string>', 'Specify the app database name')
|
|
61
59
|
.action(async (options: { database: string }) => {
|
|
62
|
-
const
|
|
63
|
-
const exitCode = await registerApp(options.database, host);
|
|
60
|
+
const exitCode = await registerApp(options.database, DBOSCloudHost);
|
|
64
61
|
process.exit(exitCode);
|
|
65
62
|
});
|
|
66
63
|
|
|
@@ -68,8 +65,7 @@ applicationCommands
|
|
|
68
65
|
.command('update')
|
|
69
66
|
.description('Update an application')
|
|
70
67
|
.action(async () => {
|
|
71
|
-
const
|
|
72
|
-
const exitCode = await updateApp(host);
|
|
68
|
+
const exitCode = await updateApp(DBOSCloudHost);
|
|
73
69
|
process.exit(exitCode);
|
|
74
70
|
});
|
|
75
71
|
|
|
@@ -78,8 +74,7 @@ applicationCommands
|
|
|
78
74
|
.description('Deploy an application code to the cloud')
|
|
79
75
|
.option('--no-docker', 'Build the code locally without using Docker')
|
|
80
76
|
.action(async (options: { docker: boolean }) => {
|
|
81
|
-
const
|
|
82
|
-
const exitCode = await deployAppCode(host, options.docker);
|
|
77
|
+
const exitCode = await deployAppCode(DBOSCloudHost, options.docker);
|
|
83
78
|
process.exit(exitCode);
|
|
84
79
|
});
|
|
85
80
|
|
|
@@ -87,8 +82,7 @@ applicationCommands
|
|
|
87
82
|
.command('delete')
|
|
88
83
|
.description('Delete a previously deployed application')
|
|
89
84
|
.action(async () => {
|
|
90
|
-
const
|
|
91
|
-
const exitCode = await deleteApp(host);
|
|
85
|
+
const exitCode = await deleteApp(DBOSCloudHost);
|
|
92
86
|
process.exit(exitCode);
|
|
93
87
|
});
|
|
94
88
|
|
|
@@ -97,8 +91,16 @@ applicationCommands
|
|
|
97
91
|
.description('List all deployed applications')
|
|
98
92
|
.option('--json', 'Emit JSON output')
|
|
99
93
|
.action(async (options: { json: boolean }) => {
|
|
100
|
-
const
|
|
101
|
-
|
|
94
|
+
const exitCode = await listApps(DBOSCloudHost, options.json);
|
|
95
|
+
process.exit(exitCode);
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
applicationCommands
|
|
99
|
+
.command('get')
|
|
100
|
+
.description('Get application info')
|
|
101
|
+
.option('--json', 'Emit JSON output')
|
|
102
|
+
.action(async (options: { json: boolean }) => {
|
|
103
|
+
const exitCode = await getAppInfo(DBOSCloudHost, options.json);
|
|
102
104
|
process.exit(exitCode);
|
|
103
105
|
});
|
|
104
106
|
|
|
@@ -107,8 +109,7 @@ applicationCommands
|
|
|
107
109
|
.description('Print the microVM logs of a deployed application')
|
|
108
110
|
.option('-l, --last <integer>', 'How far back to query, in seconds from current time. By default, we retrieve all data', parseInt)
|
|
109
111
|
.action(async (options: { last: number}) => {
|
|
110
|
-
const
|
|
111
|
-
const exitCode = await getAppLogs(host, options.last);
|
|
112
|
+
const exitCode = await getAppLogs(DBOSCloudHost, options.last);
|
|
112
113
|
process.exit(exitCode);
|
|
113
114
|
});
|
|
114
115
|
|
|
@@ -119,7 +120,6 @@ applicationCommands
|
|
|
119
120
|
const userdbCommands = program
|
|
120
121
|
.command('userdb')
|
|
121
122
|
.description('Manage your databases')
|
|
122
|
-
.option('-h, --host <string>', 'Specify the host', DEFAULT_HOST)
|
|
123
123
|
|
|
124
124
|
userdbCommands
|
|
125
125
|
.command('create')
|
|
@@ -128,8 +128,7 @@ userdbCommands
|
|
|
128
128
|
.requiredOption('-W, --password <string>', 'Specify the admin password')
|
|
129
129
|
.option('-s, --sync', 'make synchronous call', true)
|
|
130
130
|
.action((async (dbname: string, options: { admin: string, password: string, sync: boolean }) => {
|
|
131
|
-
const
|
|
132
|
-
const exitCode = await createUserDb(host, dbname, options.admin, options.password, options.sync)
|
|
131
|
+
const exitCode = await createUserDb(DBOSCloudHost, dbname, options.admin, options.password, options.sync)
|
|
133
132
|
process.exit(exitCode);
|
|
134
133
|
}))
|
|
135
134
|
|
|
@@ -138,8 +137,15 @@ userdbCommands
|
|
|
138
137
|
.argument('<string>', 'database name')
|
|
139
138
|
.option('--json', 'Emit JSON output')
|
|
140
139
|
.action((async (dbname: string, options: { json: boolean}) => {
|
|
141
|
-
const
|
|
142
|
-
|
|
140
|
+
const exitCode = await getUserDb(DBOSCloudHost, dbname, options.json)
|
|
141
|
+
process.exit(exitCode);
|
|
142
|
+
}))
|
|
143
|
+
|
|
144
|
+
userdbCommands
|
|
145
|
+
.command('list')
|
|
146
|
+
.option('--json', 'Emit JSON output')
|
|
147
|
+
.action((async (options: { json: boolean}) => {
|
|
148
|
+
const exitCode = await listUserDB(DBOSCloudHost, options.json)
|
|
143
149
|
process.exit(exitCode);
|
|
144
150
|
}))
|
|
145
151
|
|
|
@@ -147,8 +153,7 @@ userdbCommands
|
|
|
147
153
|
.command('delete')
|
|
148
154
|
.argument('<string>', 'database name')
|
|
149
155
|
.action((async (dbname: string) => {
|
|
150
|
-
const
|
|
151
|
-
const exitCode = await deleteUserDb(host, dbname)
|
|
156
|
+
const exitCode = await deleteUserDb(DBOSCloudHost, dbname)
|
|
152
157
|
process.exit(exitCode);
|
|
153
158
|
}))
|
|
154
159
|
|
package/cloudutils.ts
CHANGED
|
@@ -1,11 +1,18 @@
|
|
|
1
|
-
import { DBOSCloudCredentials, dbosEnvPath } from "./login";
|
|
2
1
|
import TransportStream = require("winston-transport");
|
|
3
2
|
import { spawn, StdioOptions } from 'child_process';
|
|
4
3
|
import { transports, createLogger, format, Logger } from "winston";
|
|
5
4
|
import fs from "fs";
|
|
6
5
|
import { AxiosError } from "axios";
|
|
6
|
+
import jwt from 'jsonwebtoken';
|
|
7
|
+
|
|
8
|
+
export interface DBOSCloudCredentials {
|
|
9
|
+
token: string;
|
|
10
|
+
userName: string;
|
|
11
|
+
}
|
|
7
12
|
|
|
8
13
|
export const dbosConfigFilePath = "dbos-config.yaml";
|
|
14
|
+
export const DBOSCloudHost = process.env.DBOS_DOMAIN || "cloud.dbos.dev";
|
|
15
|
+
export const dbosEnvPath = ".dbos";
|
|
9
16
|
|
|
10
17
|
// FIXME: we should have a global instance of the logger created in cli.ts
|
|
11
18
|
export function getLogger(): Logger {
|
|
@@ -38,6 +45,16 @@ const consoleFormat = format.combine(
|
|
|
38
45
|
})
|
|
39
46
|
);
|
|
40
47
|
|
|
48
|
+
function isTokenExpired(token: string): boolean {
|
|
49
|
+
try {
|
|
50
|
+
const { exp } = jwt.decode(token) as jwt.JwtPayload;
|
|
51
|
+
if (!exp) return false;
|
|
52
|
+
return Date.now() >= exp * 1000;
|
|
53
|
+
} catch (error) {
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
41
58
|
export function getCloudCredentials(): DBOSCloudCredentials {
|
|
42
59
|
const logger = getLogger();
|
|
43
60
|
if (!credentialsExist()) {
|
|
@@ -45,10 +62,15 @@ export function getCloudCredentials(): DBOSCloudCredentials {
|
|
|
45
62
|
process.exit(1)
|
|
46
63
|
}
|
|
47
64
|
const userCredentials = JSON.parse(fs.readFileSync(`./${dbosEnvPath}/credentials`).toString("utf-8")) as DBOSCloudCredentials;
|
|
48
|
-
|
|
65
|
+
const credentials = {
|
|
49
66
|
userName: userCredentials.userName,
|
|
50
67
|
token: userCredentials.token.replace(/\r|\n/g, ""), // Trim the trailing /r /n.
|
|
51
68
|
};
|
|
69
|
+
if (isTokenExpired(credentials.token)) {
|
|
70
|
+
logger.error("Error: Login expired. Please log in again with 'npx dbos-cloud login -u <username>'")
|
|
71
|
+
process.exit(1)
|
|
72
|
+
}
|
|
73
|
+
return credentials
|
|
52
74
|
}
|
|
53
75
|
|
|
54
76
|
export function credentialsExist(): boolean {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-app-info.d.ts","sourceRoot":"","sources":["../../../../applications/get-app-info.ts"],"names":[],"mappings":"AAKA,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAyC7E"}
|
|
@@ -0,0 +1,54 @@
|
|
|
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.getAppInfo = void 0;
|
|
7
|
+
const axios_1 = __importDefault(require("axios"));
|
|
8
|
+
const cloudutils_1 = require("../cloudutils");
|
|
9
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
10
|
+
async function getAppInfo(host, json) {
|
|
11
|
+
const logger = (0, cloudutils_1.getLogger)();
|
|
12
|
+
const userCredentials = (0, cloudutils_1.getCloudCredentials)();
|
|
13
|
+
const bearerToken = "Bearer " + userCredentials.token;
|
|
14
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
15
|
+
const packageJson = require(node_path_1.default.join(process.cwd(), 'package.json'));
|
|
16
|
+
const appName = packageJson.name;
|
|
17
|
+
if (!json) {
|
|
18
|
+
logger.info(`Retrieving info for application: ${appName}`);
|
|
19
|
+
}
|
|
20
|
+
try {
|
|
21
|
+
const res = await axios_1.default.get(`https://${host}/${userCredentials.userName}/application/${appName}`, {
|
|
22
|
+
headers: {
|
|
23
|
+
"Content-Type": "application/json",
|
|
24
|
+
Authorization: bearerToken,
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
const app = res.data;
|
|
28
|
+
if (json) {
|
|
29
|
+
console.log(JSON.stringify(app));
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
console.log(`Application Name: ${app.Name}`);
|
|
33
|
+
console.log(`ID: ${app.ID}`);
|
|
34
|
+
console.log(`Postgres Instance Name: ${app.PostgresInstanceName}`);
|
|
35
|
+
console.log(`Application Database Name: ${app.ApplicationDatabaseName}`);
|
|
36
|
+
console.log(`Status: ${app.Status}`);
|
|
37
|
+
console.log(`Version: ${app.Version}`);
|
|
38
|
+
}
|
|
39
|
+
return 0;
|
|
40
|
+
}
|
|
41
|
+
catch (e) {
|
|
42
|
+
const errorLabel = `Failed to retrieve info for application ${appName}`;
|
|
43
|
+
const axiosError = e;
|
|
44
|
+
if ((0, cloudutils_1.isCloudAPIErrorResponse)(axiosError.response?.data)) {
|
|
45
|
+
(0, cloudutils_1.handleAPIErrors)(errorLabel, axiosError);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
logger.error(`${errorLabel}: ${e.message}`);
|
|
49
|
+
}
|
|
50
|
+
return 1;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.getAppInfo = getAppInfo;
|
|
54
|
+
//# sourceMappingURL=get-app-info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-app-info.js","sourceRoot":"","sources":["../../../../applications/get-app-info.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA2C;AAC3C,8CAAyG;AACzG,0DAA6B;AAGtB,KAAK,UAAU,UAAU,CAAC,IAAY,EAAE,IAAa;IAC1D,MAAM,MAAM,GAAG,IAAA,sBAAS,GAAE,CAAC;IAC3B,MAAM,eAAe,GAAG,IAAA,gCAAmB,GAAE,CAAC;IAC9C,MAAM,WAAW,GAAG,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC;IAEtD,8DAA8D;IAC9D,MAAM,WAAW,GAAG,OAAO,CAAC,mBAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAqB,CAAC;IAC1F,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC;IACjC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,CAAC,IAAI,CAAC,oCAAoC,OAAO,EAAE,CAAC,CAAA;IAC5D,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,eAAK,CAAC,GAAG,CAAC,WAAW,IAAI,IAAI,eAAe,CAAC,QAAQ,gBAAgB,OAAO,EAAE,EAAE;YAChG,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,WAAW;aAC3B;SACF,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,GAAG,CAAC,IAAmB,CAAA;QACnC,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,2BAA2B,GAAG,CAAC,oBAAoB,EAAE,CAAC,CAAC;YACnE,OAAO,CAAC,GAAG,CAAC,8BAA8B,GAAG,CAAC,uBAAuB,EAAE,CAAC,CAAC;YACzE,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,UAAU,GAAG,2CAA2C,OAAO,EAAE,CAAC;QACxE,MAAM,UAAU,GAAG,CAAe,CAAC;QACnC,IAAI,IAAA,oCAAuB,EAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC;YACvD,IAAA,4BAAe,EAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,KAAM,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAzCD,gCAyCC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-apps.d.ts","sourceRoot":"","sources":["../../../../applications/list-apps.ts"],"names":[],"mappings":"AAIA,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"list-apps.d.ts","sourceRoot":"","sources":["../../../../applications/list-apps.ts"],"names":[],"mappings":"AAIA,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CA4C3E"}
|
|
@@ -29,7 +29,8 @@ async function listApps(host, json) {
|
|
|
29
29
|
applications.forEach(app => {
|
|
30
30
|
console.log(`Application Name: ${app.Name}`);
|
|
31
31
|
console.log(`ID: ${app.ID}`);
|
|
32
|
-
console.log(`
|
|
32
|
+
console.log(`Postgres Instance Name: ${app.ApplicationDatabaseName}`);
|
|
33
|
+
console.log(`Application Database Name: ${app.ApplicationDatabaseName}`);
|
|
33
34
|
console.log(`Status: ${app.Status}`);
|
|
34
35
|
console.log(`Version: ${app.Version}`);
|
|
35
36
|
console.log('-------------------------');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-apps.js","sourceRoot":"","sources":["../../../../applications/list-apps.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0C;AAC1C,8CAAyG;AAGlG,KAAK,UAAU,QAAQ,CAAC,IAAY,EAAE,IAAa;IACxD,MAAM,MAAM,GAAG,IAAA,sBAAS,GAAE,CAAC;IAC3B,MAAM,eAAe,GAAG,IAAA,gCAAmB,GAAE,CAAC;IAC9C,MAAM,WAAW,GAAG,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC;IAEtD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,eAAK,CAAC,GAAG,CAC1B,WAAW,IAAI,IAAI,eAAe,CAAC,QAAQ,cAAc,EACzD;YACE,OAAO,EAAE;gBACP,aAAa,EAAE,WAAW;aAC3B;SACF,CACF,CAAC;QACF,MAAM,YAAY,GAAkB,IAAI,CAAC,IAAqB,CAAC;QAC/D,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACrC,OAAO,CAAC,CAAC;QACX,CAAC;QACD,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,4BAA4B,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAA;YACnE,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBACzB,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC7C,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"list-apps.js","sourceRoot":"","sources":["../../../../applications/list-apps.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0C;AAC1C,8CAAyG;AAGlG,KAAK,UAAU,QAAQ,CAAC,IAAY,EAAE,IAAa;IACxD,MAAM,MAAM,GAAG,IAAA,sBAAS,GAAE,CAAC;IAC3B,MAAM,eAAe,GAAG,IAAA,gCAAmB,GAAE,CAAC;IAC9C,MAAM,WAAW,GAAG,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC;IAEtD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,eAAK,CAAC,GAAG,CAC1B,WAAW,IAAI,IAAI,eAAe,CAAC,QAAQ,cAAc,EACzD;YACE,OAAO,EAAE;gBACP,aAAa,EAAE,WAAW;aAC3B;SACF,CACF,CAAC;QACF,MAAM,YAAY,GAAkB,IAAI,CAAC,IAAqB,CAAC;QAC/D,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACrC,OAAO,CAAC,CAAC;QACX,CAAC;QACD,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,4BAA4B,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAA;YACnE,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBACzB,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC7C,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,2BAA2B,GAAG,CAAC,uBAAuB,EAAE,CAAC,CAAC;gBACtE,OAAO,CAAC,GAAG,CAAC,8BAA8B,GAAG,CAAC,uBAAuB,EAAE,CAAC,CAAC;gBACzE,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;gBACrC,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBACvC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;YAC3C,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,UAAU,GAAG,6BAA6B,CAAC;QACjD,MAAM,UAAU,GAAG,CAAe,CAAC;QACnC,IAAI,IAAA,oCAAuB,EAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC;YACvD,IAAA,4BAAe,EAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,KAAM,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AA5CD,4BA4CC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../applications/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../applications/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,oBAAoB,EAAE,MAAM,CAAC;IAC7B,uBAAuB,EAAE,MAAM,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC"}
|
|
@@ -6,8 +6,9 @@ const commander_1 = require("commander");
|
|
|
6
6
|
const login_1 = require("./login");
|
|
7
7
|
const register_1 = require("./register");
|
|
8
8
|
const userdb_1 = require("./userdb");
|
|
9
|
+
const cloudutils_1 = require("./cloudutils");
|
|
10
|
+
const get_app_info_1 = require("./applications/get-app-info");
|
|
9
11
|
const program = new commander_1.Command();
|
|
10
|
-
const DEFAULT_HOST = process.env.DBOS_DOMAIN; // TODO: Once we have a "production" cluster, hardcode its domain name here
|
|
11
12
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
12
13
|
const packageJson = require('../../../package.json');
|
|
13
14
|
program.
|
|
@@ -27,9 +28,8 @@ program
|
|
|
27
28
|
.command('register')
|
|
28
29
|
.description('Register a user and log in to DBOS cloud')
|
|
29
30
|
.requiredOption('-u, --username <string>', 'Username')
|
|
30
|
-
.option('-h, --host <string>', 'Specify the host', DEFAULT_HOST)
|
|
31
31
|
.action(async (options) => {
|
|
32
|
-
const exitCode = await (0, register_1.registerUser)(options.username,
|
|
32
|
+
const exitCode = await (0, register_1.registerUser)(options.username, cloudutils_1.DBOSCloudHost);
|
|
33
33
|
process.exit(exitCode);
|
|
34
34
|
});
|
|
35
35
|
/////////////////////////////
|
|
@@ -37,23 +37,20 @@ program
|
|
|
37
37
|
/////////////////////////////
|
|
38
38
|
const applicationCommands = program
|
|
39
39
|
.command('applications')
|
|
40
|
-
.description('Manage your DBOS applications')
|
|
41
|
-
.option('-h, --host <string>', 'Specify the host', DEFAULT_HOST);
|
|
40
|
+
.description('Manage your DBOS applications');
|
|
42
41
|
applicationCommands
|
|
43
42
|
.command('register')
|
|
44
43
|
.description('Register a new application')
|
|
45
44
|
.requiredOption('-d, --database <string>', 'Specify the app database name')
|
|
46
45
|
.action(async (options) => {
|
|
47
|
-
const
|
|
48
|
-
const exitCode = await (0, applications_1.registerApp)(options.database, host);
|
|
46
|
+
const exitCode = await (0, applications_1.registerApp)(options.database, cloudutils_1.DBOSCloudHost);
|
|
49
47
|
process.exit(exitCode);
|
|
50
48
|
});
|
|
51
49
|
applicationCommands
|
|
52
50
|
.command('update')
|
|
53
51
|
.description('Update an application')
|
|
54
52
|
.action(async () => {
|
|
55
|
-
const
|
|
56
|
-
const exitCode = await (0, applications_1.updateApp)(host);
|
|
53
|
+
const exitCode = await (0, applications_1.updateApp)(cloudutils_1.DBOSCloudHost);
|
|
57
54
|
process.exit(exitCode);
|
|
58
55
|
});
|
|
59
56
|
applicationCommands
|
|
@@ -61,16 +58,14 @@ applicationCommands
|
|
|
61
58
|
.description('Deploy an application code to the cloud')
|
|
62
59
|
.option('--no-docker', 'Build the code locally without using Docker')
|
|
63
60
|
.action(async (options) => {
|
|
64
|
-
const
|
|
65
|
-
const exitCode = await (0, applications_1.deployAppCode)(host, options.docker);
|
|
61
|
+
const exitCode = await (0, applications_1.deployAppCode)(cloudutils_1.DBOSCloudHost, options.docker);
|
|
66
62
|
process.exit(exitCode);
|
|
67
63
|
});
|
|
68
64
|
applicationCommands
|
|
69
65
|
.command('delete')
|
|
70
66
|
.description('Delete a previously deployed application')
|
|
71
67
|
.action(async () => {
|
|
72
|
-
const
|
|
73
|
-
const exitCode = await (0, applications_1.deleteApp)(host);
|
|
68
|
+
const exitCode = await (0, applications_1.deleteApp)(cloudutils_1.DBOSCloudHost);
|
|
74
69
|
process.exit(exitCode);
|
|
75
70
|
});
|
|
76
71
|
applicationCommands
|
|
@@ -78,8 +73,15 @@ applicationCommands
|
|
|
78
73
|
.description('List all deployed applications')
|
|
79
74
|
.option('--json', 'Emit JSON output')
|
|
80
75
|
.action(async (options) => {
|
|
81
|
-
const
|
|
82
|
-
|
|
76
|
+
const exitCode = await (0, applications_1.listApps)(cloudutils_1.DBOSCloudHost, options.json);
|
|
77
|
+
process.exit(exitCode);
|
|
78
|
+
});
|
|
79
|
+
applicationCommands
|
|
80
|
+
.command('get')
|
|
81
|
+
.description('Get application info')
|
|
82
|
+
.option('--json', 'Emit JSON output')
|
|
83
|
+
.action(async (options) => {
|
|
84
|
+
const exitCode = await (0, get_app_info_1.getAppInfo)(cloudutils_1.DBOSCloudHost, options.json);
|
|
83
85
|
process.exit(exitCode);
|
|
84
86
|
});
|
|
85
87
|
applicationCommands
|
|
@@ -87,8 +89,7 @@ applicationCommands
|
|
|
87
89
|
.description('Print the microVM logs of a deployed application')
|
|
88
90
|
.option('-l, --last <integer>', 'How far back to query, in seconds from current time. By default, we retrieve all data', parseInt)
|
|
89
91
|
.action(async (options) => {
|
|
90
|
-
const
|
|
91
|
-
const exitCode = await (0, applications_1.getAppLogs)(host, options.last);
|
|
92
|
+
const exitCode = await (0, applications_1.getAppLogs)(cloudutils_1.DBOSCloudHost, options.last);
|
|
92
93
|
process.exit(exitCode);
|
|
93
94
|
});
|
|
94
95
|
//////////////////////////////
|
|
@@ -96,8 +97,7 @@ applicationCommands
|
|
|
96
97
|
//////////////////////////////
|
|
97
98
|
const userdbCommands = program
|
|
98
99
|
.command('userdb')
|
|
99
|
-
.description('Manage your databases')
|
|
100
|
-
.option('-h, --host <string>', 'Specify the host', DEFAULT_HOST);
|
|
100
|
+
.description('Manage your databases');
|
|
101
101
|
userdbCommands
|
|
102
102
|
.command('create')
|
|
103
103
|
.argument('<string>', 'database name')
|
|
@@ -105,8 +105,7 @@ userdbCommands
|
|
|
105
105
|
.requiredOption('-W, --password <string>', 'Specify the admin password')
|
|
106
106
|
.option('-s, --sync', 'make synchronous call', true)
|
|
107
107
|
.action((async (dbname, options) => {
|
|
108
|
-
const
|
|
109
|
-
const exitCode = await (0, userdb_1.createUserDb)(host, dbname, options.admin, options.password, options.sync);
|
|
108
|
+
const exitCode = await (0, userdb_1.createUserDb)(cloudutils_1.DBOSCloudHost, dbname, options.admin, options.password, options.sync);
|
|
110
109
|
process.exit(exitCode);
|
|
111
110
|
}));
|
|
112
111
|
userdbCommands
|
|
@@ -114,16 +113,21 @@ userdbCommands
|
|
|
114
113
|
.argument('<string>', 'database name')
|
|
115
114
|
.option('--json', 'Emit JSON output')
|
|
116
115
|
.action((async (dbname, options) => {
|
|
117
|
-
const
|
|
118
|
-
|
|
116
|
+
const exitCode = await (0, userdb_1.getUserDb)(cloudutils_1.DBOSCloudHost, dbname, options.json);
|
|
117
|
+
process.exit(exitCode);
|
|
118
|
+
}));
|
|
119
|
+
userdbCommands
|
|
120
|
+
.command('list')
|
|
121
|
+
.option('--json', 'Emit JSON output')
|
|
122
|
+
.action((async (options) => {
|
|
123
|
+
const exitCode = await (0, userdb_1.listUserDB)(cloudutils_1.DBOSCloudHost, options.json);
|
|
119
124
|
process.exit(exitCode);
|
|
120
125
|
}));
|
|
121
126
|
userdbCommands
|
|
122
127
|
.command('delete')
|
|
123
128
|
.argument('<string>', 'database name')
|
|
124
129
|
.action((async (dbname) => {
|
|
125
|
-
const
|
|
126
|
-
const exitCode = await (0, userdb_1.deleteUserDb)(host, dbname);
|
|
130
|
+
const exitCode = await (0, userdb_1.deleteUserDb)(cloudutils_1.DBOSCloudHost, dbname);
|
|
127
131
|
process.exit(exitCode);
|
|
128
132
|
}));
|
|
129
133
|
program.parse(process.argv);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../cli.ts"],"names":[],"mappings":";;;AAEA,iDAOwB;AACxB,yCAAoC;AACpC,mCAAgC;AAChC,yCAA0C;AAC1C,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
import { DBOSCloudCredentials } from "./login";
|
|
3
2
|
import { Logger } from "winston";
|
|
4
3
|
import { AxiosError } from "axios";
|
|
4
|
+
export interface DBOSCloudCredentials {
|
|
5
|
+
token: string;
|
|
6
|
+
userName: string;
|
|
7
|
+
}
|
|
5
8
|
export declare const dbosConfigFilePath = "dbos-config.yaml";
|
|
9
|
+
export declare const DBOSCloudHost: string;
|
|
10
|
+
export declare const dbosEnvPath = ".dbos";
|
|
6
11
|
export declare function getLogger(): Logger;
|
|
7
12
|
export declare function getCloudCredentials(): DBOSCloudCredentials;
|
|
8
13
|
export declare function credentialsExist(): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloudutils.d.ts","sourceRoot":"","sources":["../../../cloudutils.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"cloudutils.d.ts","sourceRoot":"","sources":["../../../cloudutils.ts"],"names":[],"mappings":";AAEA,OAAO,EAAoC,MAAM,EAAE,MAAM,SAAS,CAAC;AAEnE,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAGnC,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,kBAAkB,qBAAqB,CAAC;AACrD,eAAO,MAAM,aAAa,QAA8C,CAAC;AACzE,eAAO,MAAM,WAAW,UAAU,CAAC;AAGnC,wBAAgB,SAAS,IAAI,MAAM,CASlC;AA+BD,wBAAgB,mBAAmB,IAAI,oBAAoB,CAgB1D;AAED,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAGD,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAkBhF;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAE,cAAuB,GAAG,MAAM,GAAG,MAAM,CAa7F;AAED,eAAO,MAAM,KAAK,OAAQ,MAAM,qBAA0C,CAAC;AAE3E,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAGrC,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEhE;AAED,UAAU,qBAAqB;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,qBAAqB,CAKlF;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,QAI3D"}
|
|
@@ -3,12 +3,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.handleAPIErrors = exports.isCloudAPIErrorResponse = exports.createDirectory = exports.sleep = exports.readFileSync = exports.runCommand = exports.credentialsExist = exports.getCloudCredentials = exports.getLogger = exports.dbosConfigFilePath = void 0;
|
|
7
|
-
const login_1 = require("./login");
|
|
6
|
+
exports.handleAPIErrors = exports.isCloudAPIErrorResponse = exports.createDirectory = exports.sleep = exports.readFileSync = exports.runCommand = exports.credentialsExist = exports.getCloudCredentials = exports.getLogger = exports.dbosEnvPath = exports.DBOSCloudHost = exports.dbosConfigFilePath = void 0;
|
|
8
7
|
const child_process_1 = require("child_process");
|
|
9
8
|
const winston_1 = require("winston");
|
|
10
9
|
const fs_1 = __importDefault(require("fs"));
|
|
10
|
+
const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
|
|
11
11
|
exports.dbosConfigFilePath = "dbos-config.yaml";
|
|
12
|
+
exports.DBOSCloudHost = process.env.DBOS_DOMAIN || "cloud.dbos.dev";
|
|
13
|
+
exports.dbosEnvPath = ".dbos";
|
|
12
14
|
// FIXME: we should have a global instance of the logger created in cli.ts
|
|
13
15
|
function getLogger() {
|
|
14
16
|
const winstonTransports = [];
|
|
@@ -30,21 +32,37 @@ const consoleFormat = winston_1.format.combine(winston_1.format.errors({ stack:
|
|
|
30
32
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
31
33
|
return `${ts} [${level}]: ${messageString} ${stack ? "\n" + formattedStack : ""}`;
|
|
32
34
|
}));
|
|
35
|
+
function isTokenExpired(token) {
|
|
36
|
+
try {
|
|
37
|
+
const { exp } = jsonwebtoken_1.default.decode(token);
|
|
38
|
+
if (!exp)
|
|
39
|
+
return false;
|
|
40
|
+
return Date.now() >= exp * 1000;
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
33
46
|
function getCloudCredentials() {
|
|
34
47
|
const logger = getLogger();
|
|
35
48
|
if (!credentialsExist()) {
|
|
36
49
|
logger.error("Error: not logged in");
|
|
37
50
|
process.exit(1);
|
|
38
51
|
}
|
|
39
|
-
const userCredentials = JSON.parse(fs_1.default.readFileSync(`./${
|
|
40
|
-
|
|
52
|
+
const userCredentials = JSON.parse(fs_1.default.readFileSync(`./${exports.dbosEnvPath}/credentials`).toString("utf-8"));
|
|
53
|
+
const credentials = {
|
|
41
54
|
userName: userCredentials.userName,
|
|
42
55
|
token: userCredentials.token.replace(/\r|\n/g, ""), // Trim the trailing /r /n.
|
|
43
56
|
};
|
|
57
|
+
if (isTokenExpired(credentials.token)) {
|
|
58
|
+
logger.error("Error: Login expired. Please log in again with 'npx dbos-cloud login -u <username>'");
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
return credentials;
|
|
44
62
|
}
|
|
45
63
|
exports.getCloudCredentials = getCloudCredentials;
|
|
46
64
|
function credentialsExist() {
|
|
47
|
-
return fs_1.default.existsSync(`./${
|
|
65
|
+
return fs_1.default.existsSync(`./${exports.dbosEnvPath}/credentials`);
|
|
48
66
|
}
|
|
49
67
|
exports.credentialsExist = credentialsExist;
|
|
50
68
|
// Run a command, streaming its output to stdout
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloudutils.js","sourceRoot":"","sources":["../../../cloudutils.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"cloudutils.js","sourceRoot":"","sources":["../../../cloudutils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,2 @@
|
|
|
1
|
-
export declare const dbosEnvPath = ".dbos";
|
|
2
|
-
export declare const DBOSClientID = "G38fLmVErczEo9ioCFjVIHea6yd0qMZu";
|
|
3
|
-
export declare const DBOSCloudIdentifier = "dbos-cloud-api";
|
|
4
|
-
export interface DBOSCloudCredentials {
|
|
5
|
-
token: string;
|
|
6
|
-
userName: string;
|
|
7
|
-
}
|
|
8
1
|
export declare function login(username: string): Promise<number>;
|
|
9
2
|
//# sourceMappingURL=login.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../login.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../login.ts"],"names":[],"mappings":"AAyDA,wBAAsB,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA4D7D"}
|
|
@@ -3,18 +3,20 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.login =
|
|
6
|
+
exports.login = void 0;
|
|
7
7
|
const axios_1 = __importDefault(require("axios"));
|
|
8
8
|
const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
|
|
9
9
|
const jwks_rsa_1 = __importDefault(require("jwks-rsa"));
|
|
10
10
|
const child_process_1 = require("child_process");
|
|
11
11
|
const fs_1 = __importDefault(require("fs"));
|
|
12
12
|
const cloudutils_1 = require("./cloudutils");
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
const DBOSCloudHost = process.env.DBOS_DOMAIN || "cloud.dbos.dev";
|
|
14
|
+
const productionEnvironment = DBOSCloudHost === "cloud.dbos.dev";
|
|
15
|
+
const Auth0Domain = productionEnvironment ? 'login.dbos.dev' : 'dbos-inc.us.auth0.com';
|
|
16
|
+
const DBOSClientID = productionEnvironment ? '6p7Sjxf13cyLMkdwn14MxlH7JdhILled' : 'G38fLmVErczEo9ioCFjVIHea6yd0qMZu';
|
|
17
|
+
const DBOSCloudIdentifier = 'dbos-cloud-api';
|
|
16
18
|
const client = (0, jwks_rsa_1.default)({
|
|
17
|
-
jwksUri:
|
|
19
|
+
jwksUri: `https://${Auth0Domain}/.well-known/jwks.json`
|
|
18
20
|
});
|
|
19
21
|
async function getSigningKey(kid) {
|
|
20
22
|
const key = await client.getSigningKey(kid);
|
|
@@ -42,9 +44,9 @@ async function login(username) {
|
|
|
42
44
|
logger.info(`Please authenticate with DBOS Cloud!`);
|
|
43
45
|
const deviceCodeRequest = {
|
|
44
46
|
method: 'POST',
|
|
45
|
-
url:
|
|
47
|
+
url: `https://${Auth0Domain}/oauth/device/code`,
|
|
46
48
|
headers: { 'content-type': 'application/x-www-form-urlencoded' },
|
|
47
|
-
data: { client_id:
|
|
49
|
+
data: { client_id: DBOSClientID, scope: 'sub', audience: DBOSCloudIdentifier }
|
|
48
50
|
};
|
|
49
51
|
let deviceCodeResponse;
|
|
50
52
|
try {
|
|
@@ -61,12 +63,12 @@ async function login(username) {
|
|
|
61
63
|
console.log(`Login URL: ${deviceCodeResponse.verification_uri_complete}`);
|
|
62
64
|
const tokenRequest = {
|
|
63
65
|
method: 'POST',
|
|
64
|
-
url:
|
|
66
|
+
url: `https://${Auth0Domain}/oauth/token`,
|
|
65
67
|
headers: { 'content-type': 'application/x-www-form-urlencoded' },
|
|
66
68
|
data: new URLSearchParams({
|
|
67
69
|
grant_type: 'urn:ietf:params:oauth:grant-type:device_code',
|
|
68
70
|
device_code: deviceCodeResponse.device_code,
|
|
69
|
-
client_id:
|
|
71
|
+
client_id: DBOSClientID
|
|
70
72
|
})
|
|
71
73
|
};
|
|
72
74
|
let tokenResponse;
|
|
@@ -91,10 +93,10 @@ async function login(username) {
|
|
|
91
93
|
token: tokenResponse.access_token,
|
|
92
94
|
userName: username,
|
|
93
95
|
};
|
|
94
|
-
(0, child_process_1.execSync)(`mkdir -p ${
|
|
95
|
-
fs_1.default.writeFileSync(`${
|
|
96
|
+
(0, child_process_1.execSync)(`mkdir -p ${cloudutils_1.dbosEnvPath}`);
|
|
97
|
+
fs_1.default.writeFileSync(`${cloudutils_1.dbosEnvPath}/credentials`, JSON.stringify(credentials), "utf-8");
|
|
96
98
|
logger.info(`Successfully logged in as user: ${credentials.userName}`);
|
|
97
|
-
logger.info(`You can view your credentials in: ./${
|
|
99
|
+
logger.info(`You can view your credentials in: ./${cloudutils_1.dbosEnvPath}/credentials`);
|
|
98
100
|
return 0;
|
|
99
101
|
}
|
|
100
102
|
exports.login = login;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../login.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,gEAA+C;AAC/C,wDAAkC;AAClC,iDAAyC;AACzC,4CAAoB;AACpB,
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../login.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
export interface UserDBInstance {
|
|
2
|
-
readonly
|
|
2
|
+
readonly PostgresInstanceName: string;
|
|
3
3
|
readonly Status: string;
|
|
4
4
|
readonly HostName: string;
|
|
5
5
|
readonly Port: number;
|
|
6
|
+
readonly AdminUsername: string;
|
|
6
7
|
}
|
|
7
|
-
export declare function createUserDb(host: string, dbName: string, adminName: string, adminPassword: string, sync: boolean): Promise<
|
|
8
|
-
export declare function deleteUserDb(host: string, dbName: string): Promise<
|
|
9
|
-
export declare function getUserDb(host: string, dbName: string, json: boolean): Promise<
|
|
8
|
+
export declare function createUserDb(host: string, dbName: string, adminName: string, adminPassword: string, sync: boolean): Promise<0 | 1>;
|
|
9
|
+
export declare function deleteUserDb(host: string, dbName: string): Promise<0 | 1>;
|
|
10
|
+
export declare function getUserDb(host: string, dbName: string, json: boolean): Promise<0 | 1>;
|
|
11
|
+
export declare function listUserDB(host: string, json: boolean): Promise<0 | 1>;
|
|
10
12
|
export declare function getUserDBInfo(host: string, dbName: string): Promise<UserDBInstance>;
|
|
11
13
|
//# sourceMappingURL=userdb.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"userdb.d.ts","sourceRoot":"","sources":["../../../userdb.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"userdb.d.ts","sourceRoot":"","sources":["../../../userdb.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,kBAuCvH;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAwB9D;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,kBAyB1E;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,kBAqC3D;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAYzF"}
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.getUserDBInfo = exports.getUserDb = exports.deleteUserDb = exports.createUserDb = void 0;
|
|
6
|
+
exports.getUserDBInfo = exports.listUserDB = exports.getUserDb = exports.deleteUserDb = exports.createUserDb = void 0;
|
|
7
7
|
const axios_1 = __importDefault(require("axios"));
|
|
8
8
|
const cloudutils_1 = require("./cloudutils");
|
|
9
9
|
const utils_1 = require("../../src/utils");
|
|
@@ -78,11 +78,11 @@ async function getUserDb(host, dbName, json) {
|
|
|
78
78
|
console.log(JSON.stringify(userDBInfo));
|
|
79
79
|
}
|
|
80
80
|
else {
|
|
81
|
-
|
|
82
|
-
console.log(`DB Name: ${userDBInfo.DBName}`);
|
|
81
|
+
console.log(`Postgres Instance Name: ${userDBInfo.PostgresInstanceName}`);
|
|
83
82
|
console.log(`Status: ${userDBInfo.Status}`);
|
|
84
83
|
console.log(`Host Name: ${userDBInfo.HostName}`);
|
|
85
84
|
console.log(`Port: ${userDBInfo.Port}`);
|
|
85
|
+
console.log(`Admin Username: ${userDBInfo.AdminUsername}`);
|
|
86
86
|
}
|
|
87
87
|
return 0;
|
|
88
88
|
}
|
|
@@ -99,6 +99,45 @@ async function getUserDb(host, dbName, json) {
|
|
|
99
99
|
}
|
|
100
100
|
}
|
|
101
101
|
exports.getUserDb = getUserDb;
|
|
102
|
+
async function listUserDB(host, json) {
|
|
103
|
+
const logger = (0, cloudutils_1.getLogger)();
|
|
104
|
+
try {
|
|
105
|
+
const userCredentials = (0, cloudutils_1.getCloudCredentials)();
|
|
106
|
+
const bearerToken = "Bearer " + userCredentials.token;
|
|
107
|
+
const res = await axios_1.default.get(`https://${host}/${userCredentials.userName}/databases`, {
|
|
108
|
+
headers: {
|
|
109
|
+
"Content-Type": "application/json",
|
|
110
|
+
Authorization: bearerToken,
|
|
111
|
+
},
|
|
112
|
+
});
|
|
113
|
+
const userDBs = res.data;
|
|
114
|
+
if (json) {
|
|
115
|
+
console.log(JSON.stringify(userDBs));
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
userDBs.forEach(userDBInfo => {
|
|
119
|
+
console.log(`Postgres Instance Name: ${userDBInfo.PostgresInstanceName}`);
|
|
120
|
+
console.log(`Status: ${userDBInfo.Status}`);
|
|
121
|
+
console.log(`Host Name: ${userDBInfo.HostName}`);
|
|
122
|
+
console.log(`Port: ${userDBInfo.Port}`);
|
|
123
|
+
console.log(`Admin Username: ${userDBInfo.AdminUsername}`);
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
return 0;
|
|
127
|
+
}
|
|
128
|
+
catch (e) {
|
|
129
|
+
const errorLabel = `Failed to retrieve info`;
|
|
130
|
+
const axiosError = e;
|
|
131
|
+
if ((0, cloudutils_1.isCloudAPIErrorResponse)(axiosError.response?.data)) {
|
|
132
|
+
(0, cloudutils_1.handleAPIErrors)(errorLabel, axiosError);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
logger.error(`${errorLabel}: ${e.message}`);
|
|
136
|
+
}
|
|
137
|
+
return 1;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
exports.listUserDB = listUserDB;
|
|
102
141
|
async function getUserDBInfo(host, dbName) {
|
|
103
142
|
const userCredentials = (0, cloudutils_1.getCloudCredentials)();
|
|
104
143
|
const bearerToken = "Bearer " + userCredentials.token;
|
|
@@ -108,7 +147,6 @@ async function getUserDBInfo(host, dbName) {
|
|
|
108
147
|
Authorization: bearerToken,
|
|
109
148
|
},
|
|
110
149
|
});
|
|
111
|
-
// TODO: this needs a type guard
|
|
112
150
|
return res.data;
|
|
113
151
|
}
|
|
114
152
|
exports.getUserDBInfo = getUserDBInfo;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"userdb.js","sourceRoot":"","sources":["../../../userdb.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0C;AAC1C,6CAAwG;AACxG,2CAAwC;
|
|
1
|
+
{"version":3,"file":"userdb.js","sourceRoot":"","sources":["../../../userdb.ts"],"names":[],"mappings":"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"}
|
package/login.ts
CHANGED
|
@@ -3,16 +3,13 @@ import jwt, { JwtPayload } from 'jsonwebtoken';
|
|
|
3
3
|
import jwksClient from 'jwks-rsa';
|
|
4
4
|
import { execSync } from "child_process";
|
|
5
5
|
import fs from "fs";
|
|
6
|
-
import { getLogger, sleep } from "./cloudutils";
|
|
6
|
+
import { DBOSCloudCredentials, dbosEnvPath, getLogger, sleep } from "./cloudutils";
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
token: string;
|
|
14
|
-
userName: string;
|
|
15
|
-
}
|
|
8
|
+
const DBOSCloudHost = process.env.DBOS_DOMAIN || "cloud.dbos.dev";
|
|
9
|
+
const productionEnvironment = DBOSCloudHost === "cloud.dbos.dev";
|
|
10
|
+
const Auth0Domain = productionEnvironment ? 'login.dbos.dev' : 'dbos-inc.us.auth0.com';
|
|
11
|
+
const DBOSClientID = productionEnvironment ? '6p7Sjxf13cyLMkdwn14MxlH7JdhILled' : 'G38fLmVErczEo9ioCFjVIHea6yd0qMZu';
|
|
12
|
+
const DBOSCloudIdentifier = 'dbos-cloud-api';
|
|
16
13
|
|
|
17
14
|
interface DeviceCodeResponse {
|
|
18
15
|
device_code: string;
|
|
@@ -30,7 +27,7 @@ interface TokenResponse {
|
|
|
30
27
|
}
|
|
31
28
|
|
|
32
29
|
const client = jwksClient({
|
|
33
|
-
jwksUri:
|
|
30
|
+
jwksUri: `https://${Auth0Domain}/.well-known/jwks.json`
|
|
34
31
|
});
|
|
35
32
|
|
|
36
33
|
async function getSigningKey(kid: string): Promise<string> {
|
|
@@ -64,7 +61,7 @@ export async function login(username: string): Promise<number> {
|
|
|
64
61
|
|
|
65
62
|
const deviceCodeRequest = {
|
|
66
63
|
method: 'POST',
|
|
67
|
-
url:
|
|
64
|
+
url: `https://${Auth0Domain}/oauth/device/code`,
|
|
68
65
|
headers: { 'content-type': 'application/x-www-form-urlencoded' },
|
|
69
66
|
data: { client_id: DBOSClientID, scope: 'sub', audience: DBOSCloudIdentifier }
|
|
70
67
|
};
|
|
@@ -83,7 +80,7 @@ export async function login(username: string): Promise<number> {
|
|
|
83
80
|
|
|
84
81
|
const tokenRequest = {
|
|
85
82
|
method: 'POST',
|
|
86
|
-
url:
|
|
83
|
+
url: `https://${Auth0Domain}/oauth/token`,
|
|
87
84
|
headers: { 'content-type': 'application/x-www-form-urlencoded' },
|
|
88
85
|
data: new URLSearchParams({
|
|
89
86
|
grant_type: 'urn:ietf:params:oauth:grant-type:device_code',
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dbos-inc/dbos-cloud",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.16-preview",
|
|
4
4
|
"description": "Tool for performing application deployment to DBOS cloud",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"main": "cli.ts",
|
|
12
12
|
"homepage": "https://docs.dbos.dev/",
|
|
13
13
|
"scripts": {
|
|
14
|
-
"build": "tsc --project tsconfig.json
|
|
14
|
+
"build": "tsc --project tsconfig.json",
|
|
15
15
|
"test": "echo \"No tests\"",
|
|
16
16
|
"setversion": "grunt setversion"
|
|
17
17
|
},
|
package/userdb.ts
CHANGED
|
@@ -3,10 +3,11 @@ import { isCloudAPIErrorResponse, handleAPIErrors, getCloudCredentials, getLogge
|
|
|
3
3
|
import { sleep } from "../../src/utils";
|
|
4
4
|
|
|
5
5
|
export interface UserDBInstance {
|
|
6
|
-
readonly
|
|
6
|
+
readonly PostgresInstanceName: string;
|
|
7
7
|
readonly Status: string;
|
|
8
8
|
readonly HostName: string;
|
|
9
9
|
readonly Port: number;
|
|
10
|
+
readonly AdminUsername: string;
|
|
10
11
|
}
|
|
11
12
|
|
|
12
13
|
export async function createUserDb(host: string, dbName: string, adminName: string, adminPassword: string, sync: boolean) {
|
|
@@ -84,11 +85,11 @@ export async function getUserDb(host: string, dbName: string, json: boolean) {
|
|
|
84
85
|
if (json) {
|
|
85
86
|
console.log(JSON.stringify(userDBInfo));
|
|
86
87
|
} else {
|
|
87
|
-
|
|
88
|
-
console.log(`DB Name: ${userDBInfo.DBName}`);
|
|
88
|
+
console.log(`Postgres Instance Name: ${userDBInfo.PostgresInstanceName}`);
|
|
89
89
|
console.log(`Status: ${userDBInfo.Status}`);
|
|
90
90
|
console.log(`Host Name: ${userDBInfo.HostName}`);
|
|
91
91
|
console.log(`Port: ${userDBInfo.Port}`);
|
|
92
|
+
console.log(`Admin Username: ${userDBInfo.AdminUsername}`);
|
|
92
93
|
}
|
|
93
94
|
return 0;
|
|
94
95
|
} catch (e) {
|
|
@@ -103,6 +104,45 @@ export async function getUserDb(host: string, dbName: string, json: boolean) {
|
|
|
103
104
|
}
|
|
104
105
|
}
|
|
105
106
|
|
|
107
|
+
export async function listUserDB(host: string, json: boolean) {
|
|
108
|
+
const logger = getLogger();
|
|
109
|
+
|
|
110
|
+
try {
|
|
111
|
+
const userCredentials = getCloudCredentials();
|
|
112
|
+
const bearerToken = "Bearer " + userCredentials.token;
|
|
113
|
+
|
|
114
|
+
const res = await axios.get(`https://${host}/${userCredentials.userName}/databases`, {
|
|
115
|
+
headers: {
|
|
116
|
+
"Content-Type": "application/json",
|
|
117
|
+
Authorization: bearerToken,
|
|
118
|
+
},
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
const userDBs = res.data as UserDBInstance[];
|
|
122
|
+
if (json) {
|
|
123
|
+
console.log(JSON.stringify(userDBs));
|
|
124
|
+
} else {
|
|
125
|
+
userDBs.forEach(userDBInfo => {
|
|
126
|
+
console.log(`Postgres Instance Name: ${userDBInfo.PostgresInstanceName}`);
|
|
127
|
+
console.log(`Status: ${userDBInfo.Status}`);
|
|
128
|
+
console.log(`Host Name: ${userDBInfo.HostName}`);
|
|
129
|
+
console.log(`Port: ${userDBInfo.Port}`);
|
|
130
|
+
console.log(`Admin Username: ${userDBInfo.AdminUsername}`);
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
return 0;
|
|
134
|
+
} catch (e) {
|
|
135
|
+
const errorLabel = `Failed to retrieve info`;
|
|
136
|
+
const axiosError = e as AxiosError;
|
|
137
|
+
if (isCloudAPIErrorResponse(axiosError.response?.data)) {
|
|
138
|
+
handleAPIErrors(errorLabel, axiosError);
|
|
139
|
+
} else {
|
|
140
|
+
logger.error(`${errorLabel}: ${(e as Error).message}`);
|
|
141
|
+
}
|
|
142
|
+
return 1;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
106
146
|
export async function getUserDBInfo(host: string, dbName: string): Promise<UserDBInstance> {
|
|
107
147
|
const userCredentials = getCloudCredentials();
|
|
108
148
|
const bearerToken = "Bearer " + userCredentials.token;
|
|
@@ -114,6 +154,5 @@ export async function getUserDBInfo(host: string, dbName: string): Promise<UserD
|
|
|
114
154
|
},
|
|
115
155
|
});
|
|
116
156
|
|
|
117
|
-
// TODO: this needs a type guard
|
|
118
157
|
return res.data as UserDBInstance;
|
|
119
158
|
}
|