@dbos-inc/dbos-cloud 1.0.2 → 1.1.5-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/dist/applications/delete-app.d.ts.map +1 -0
- package/dist/applications/delete-app.js +34 -0
- package/dist/applications/delete-app.js.map +1 -0
- package/dist/applications/deploy-app-code.d.ts.map +1 -0
- package/dist/{packages/dbos-cloud/applications → applications}/deploy-app-code.js +23 -30
- package/dist/applications/deploy-app-code.js.map +1 -0
- package/dist/applications/get-app-info.d.ts.map +1 -0
- package/dist/applications/get-app-info.js +43 -0
- package/dist/applications/get-app-info.js.map +1 -0
- package/dist/applications/get-app-logs.d.ts.map +1 -0
- package/dist/{packages/dbos-cloud/applications → applications}/get-app-logs.js +9 -16
- package/dist/applications/get-app-logs.js.map +1 -0
- package/dist/applications/index.d.ts +7 -0
- package/dist/applications/index.d.ts.map +1 -0
- package/dist/applications/index.js +7 -0
- package/dist/applications/index.js.map +1 -0
- package/dist/applications/list-apps.d.ts.map +1 -0
- package/dist/applications/list-apps.js +41 -0
- package/dist/applications/list-apps.js.map +1 -0
- package/dist/applications/register-app.d.ts.map +1 -0
- package/dist/applications/register-app.js +39 -0
- package/dist/applications/register-app.js.map +1 -0
- package/dist/applications/types.d.ts.map +1 -0
- package/dist/{packages/dbos-cloud/applications → applications}/types.js +1 -5
- package/dist/applications/types.js.map +1 -0
- package/dist/applications/update-app.d.ts.map +1 -0
- package/dist/applications/update-app.js +38 -0
- package/dist/applications/update-app.js.map +1 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/{packages/dbos-cloud/cli.js → cli.js} +58 -35
- package/dist/cli.js.map +1 -0
- package/dist/{packages/dbos-cloud/cloudutils.d.ts → cloudutils.d.ts} +1 -1
- package/dist/cloudutils.d.ts.map +1 -0
- package/dist/cloudutils.js +126 -0
- package/dist/cloudutils.js.map +1 -0
- package/dist/dashboards.d.ts.map +1 -0
- package/{dashboards.ts → dist/dashboards.js} +24 -24
- package/dist/dashboards.js.map +1 -0
- package/dist/login.d.ts.map +1 -0
- package/dist/{packages/dbos-cloud/login.js → login.js} +25 -26
- package/dist/login.js.map +1 -0
- package/dist/register.d.ts.map +1 -0
- package/dist/register.js +86 -0
- package/dist/register.js.map +1 -0
- package/dist/userdb.d.ts.map +1 -0
- package/dist/{packages/dbos-cloud/userdb.js → userdb.js} +34 -47
- package/dist/userdb.js.map +1 -0
- package/package.json +7 -3
- package/Gruntfile.js +0 -9
- package/applications/delete-app.ts +0 -35
- package/applications/deploy-app-code.ts +0 -126
- package/applications/get-app-info.ts +0 -42
- package/applications/get-app-logs.ts +0 -45
- package/applications/index.ts +0 -7
- package/applications/list-apps.ts +0 -42
- package/applications/register-app.ts +0 -43
- package/applications/types.ts +0 -19
- package/applications/update-app.ts +0 -43
- package/cli.ts +0 -225
- package/cloudutils.ts +0 -166
- package/dist/packages/dbos-cloud/applications/delete-app.d.ts.map +0 -1
- package/dist/packages/dbos-cloud/applications/delete-app.js +0 -41
- package/dist/packages/dbos-cloud/applications/delete-app.js.map +0 -1
- package/dist/packages/dbos-cloud/applications/deploy-app-code.d.ts.map +0 -1
- package/dist/packages/dbos-cloud/applications/deploy-app-code.js.map +0 -1
- package/dist/packages/dbos-cloud/applications/get-app-info.d.ts.map +0 -1
- package/dist/packages/dbos-cloud/applications/get-app-info.js +0 -50
- package/dist/packages/dbos-cloud/applications/get-app-info.js.map +0 -1
- package/dist/packages/dbos-cloud/applications/get-app-logs.d.ts.map +0 -1
- package/dist/packages/dbos-cloud/applications/get-app-logs.js.map +0 -1
- package/dist/packages/dbos-cloud/applications/index.d.ts +0 -7
- package/dist/packages/dbos-cloud/applications/index.d.ts.map +0 -1
- package/dist/packages/dbos-cloud/applications/index.js +0 -16
- package/dist/packages/dbos-cloud/applications/index.js.map +0 -1
- package/dist/packages/dbos-cloud/applications/list-apps.d.ts.map +0 -1
- package/dist/packages/dbos-cloud/applications/list-apps.js +0 -48
- package/dist/packages/dbos-cloud/applications/list-apps.js.map +0 -1
- package/dist/packages/dbos-cloud/applications/register-app.d.ts.map +0 -1
- package/dist/packages/dbos-cloud/applications/register-app.js +0 -46
- package/dist/packages/dbos-cloud/applications/register-app.js.map +0 -1
- package/dist/packages/dbos-cloud/applications/types.d.ts.map +0 -1
- package/dist/packages/dbos-cloud/applications/types.js.map +0 -1
- package/dist/packages/dbos-cloud/applications/update-app.d.ts.map +0 -1
- package/dist/packages/dbos-cloud/applications/update-app.js +0 -45
- package/dist/packages/dbos-cloud/applications/update-app.js.map +0 -1
- package/dist/packages/dbos-cloud/cli.d.ts.map +0 -1
- package/dist/packages/dbos-cloud/cli.js.map +0 -1
- package/dist/packages/dbos-cloud/cloudutils.d.ts.map +0 -1
- package/dist/packages/dbos-cloud/cloudutils.js +0 -145
- package/dist/packages/dbos-cloud/cloudutils.js.map +0 -1
- package/dist/packages/dbos-cloud/dashboards.d.ts.map +0 -1
- package/dist/packages/dbos-cloud/dashboards.js +0 -63
- package/dist/packages/dbos-cloud/dashboards.js.map +0 -1
- package/dist/packages/dbos-cloud/login.d.ts.map +0 -1
- package/dist/packages/dbos-cloud/login.js.map +0 -1
- package/dist/packages/dbos-cloud/register.d.ts.map +0 -1
- package/dist/packages/dbos-cloud/register.js +0 -116
- package/dist/packages/dbos-cloud/register.js.map +0 -1
- package/dist/packages/dbos-cloud/userdb.d.ts.map +0 -1
- package/dist/packages/dbos-cloud/userdb.js.map +0 -1
- package/dist/src/utils.d.ts +0 -6
- package/dist/src/utils.d.ts.map +0 -1
- package/dist/src/utils.js +0 -51
- package/dist/src/utils.js.map +0 -1
- package/login.ts +0 -146
- package/register.ts +0 -89
- package/tsconfig.json +0 -22
- package/userdb.ts +0 -191
- /package/dist/{packages/dbos-cloud/applications → applications}/delete-app.d.ts +0 -0
- /package/dist/{packages/dbos-cloud/applications → applications}/deploy-app-code.d.ts +0 -0
- /package/dist/{packages/dbos-cloud/applications → applications}/get-app-info.d.ts +0 -0
- /package/dist/{packages/dbos-cloud/applications → applications}/get-app-logs.d.ts +0 -0
- /package/dist/{packages/dbos-cloud/applications → applications}/list-apps.d.ts +0 -0
- /package/dist/{packages/dbos-cloud/applications → applications}/register-app.d.ts +0 -0
- /package/dist/{packages/dbos-cloud/applications → applications}/types.d.ts +0 -0
- /package/dist/{packages/dbos-cloud/applications → applications}/update-app.d.ts +0 -0
- /package/dist/{packages/dbos-cloud/cli.d.ts → cli.d.ts} +0 -0
- /package/dist/{packages/dbos-cloud/dashboards.d.ts → dashboards.d.ts} +0 -0
- /package/dist/{packages/dbos-cloud/login.d.ts → login.d.ts} +0 -0
- /package/dist/{packages/dbos-cloud/register.d.ts → register.d.ts} +0 -0
- /package/dist/{packages/dbos-cloud/userdb.d.ts → userdb.d.ts} +0 -0
package/dist/register.js
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import axios from "axios";
|
|
2
|
+
import { handleAPIErrors, getCloudCredentials, getLogger, isCloudAPIErrorResponse, credentialsExist, writeCredentials, deleteCredentials } from "./cloudutils.js";
|
|
3
|
+
import readline from 'readline';
|
|
4
|
+
import { authenticate } from "./login.js";
|
|
5
|
+
import * as validator from 'validator';
|
|
6
|
+
const rl = readline.createInterface({
|
|
7
|
+
input: process.stdin,
|
|
8
|
+
output: process.stdout
|
|
9
|
+
});
|
|
10
|
+
function isValidUsername(username) {
|
|
11
|
+
if (username.length < 3 || username.length > 30) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
return validator.matches(username, "^[a-z0-9_]+$");
|
|
15
|
+
}
|
|
16
|
+
export async function registerUser(username, host) {
|
|
17
|
+
const logger = getLogger();
|
|
18
|
+
let givenName = "";
|
|
19
|
+
let familyName = "";
|
|
20
|
+
let company = "";
|
|
21
|
+
if (!isValidUsername(username)) {
|
|
22
|
+
logger.error("Invalid username. Usernames must be between 3 and 30 characters long and contain only lowercase letters, underscores, and numbers.");
|
|
23
|
+
return 1;
|
|
24
|
+
}
|
|
25
|
+
if (!credentialsExist()) {
|
|
26
|
+
logger.info("Welcome to DBOS Cloud!");
|
|
27
|
+
logger.info("Before creating an account, please tell us a bit about yourself!");
|
|
28
|
+
const prompt = (query) => new Promise((resolve) => rl.question(query, resolve));
|
|
29
|
+
givenName = await prompt("Enter First/Given Name: ");
|
|
30
|
+
familyName = await prompt("Enter Last/Family Name: ");
|
|
31
|
+
company = await prompt("Enter Company: ");
|
|
32
|
+
const bearerToken = await authenticate(logger);
|
|
33
|
+
if (bearerToken === null) {
|
|
34
|
+
return 1;
|
|
35
|
+
}
|
|
36
|
+
const credentials = {
|
|
37
|
+
token: bearerToken,
|
|
38
|
+
userName: username,
|
|
39
|
+
};
|
|
40
|
+
writeCredentials(credentials);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
const userCredentials = getCloudCredentials();
|
|
44
|
+
if (userCredentials.userName !== username) {
|
|
45
|
+
logger.error(`You are trying to register ${username}, but are currently authenticated as ${userCredentials.userName}. Please run "npx dbos-cloud logout".`);
|
|
46
|
+
return 1;
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
logger.info(`You are currently authenticated as ${userCredentials.userName}. Registering ${userCredentials.userName} with DBOS Cloud...`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const userCredentials = getCloudCredentials();
|
|
53
|
+
const bearerToken = "Bearer " + userCredentials.token;
|
|
54
|
+
const loginName = userCredentials.userName;
|
|
55
|
+
try {
|
|
56
|
+
// Register the user in DBOS Cloud
|
|
57
|
+
await axios.put(`https://${host}/v1alpha1/user`, {
|
|
58
|
+
name: loginName,
|
|
59
|
+
given_name: givenName,
|
|
60
|
+
family_name: familyName,
|
|
61
|
+
company: company,
|
|
62
|
+
}, {
|
|
63
|
+
headers: {
|
|
64
|
+
"Content-Type": "application/json",
|
|
65
|
+
Authorization: bearerToken,
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
logger.info(`${username} successfully registered!`);
|
|
69
|
+
}
|
|
70
|
+
catch (e) {
|
|
71
|
+
const errorLabel = `Failed to register user ${loginName}`;
|
|
72
|
+
const axiosError = e;
|
|
73
|
+
if (isCloudAPIErrorResponse(axiosError.response?.data)) {
|
|
74
|
+
handleAPIErrors(errorLabel, axiosError);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
logger.error(`${errorLabel}: ${e.message}`);
|
|
78
|
+
}
|
|
79
|
+
if (credentialsExist()) {
|
|
80
|
+
deleteCredentials();
|
|
81
|
+
}
|
|
82
|
+
return 1;
|
|
83
|
+
}
|
|
84
|
+
return 0;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=register.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../register.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"userdb.d.ts","sourceRoot":"","sources":["../userdb.ts"],"names":[],"mappings":"AAGA,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;IAC/B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,kBAwC3H;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,kBAwC3D;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAYzF;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,kBA0B3F"}
|
|
@@ -1,18 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
exports.resetDBCredentials = exports.getUserDBInfo = exports.listUserDB = exports.getUserDb = exports.deleteUserDb = exports.createUserDb = void 0;
|
|
7
|
-
const axios_1 = __importDefault(require("axios"));
|
|
8
|
-
const cloudutils_1 = require("./cloudutils");
|
|
9
|
-
const utils_1 = require("../../src/utils");
|
|
10
|
-
async function createUserDb(host, dbName, appDBUsername, appDBPassword, sync) {
|
|
11
|
-
const logger = (0, cloudutils_1.getLogger)();
|
|
12
|
-
const userCredentials = (0, cloudutils_1.getCloudCredentials)();
|
|
1
|
+
import axios from "axios";
|
|
2
|
+
import { isCloudAPIErrorResponse, handleAPIErrors, getCloudCredentials, getLogger, sleep } from "./cloudutils.js";
|
|
3
|
+
export async function createUserDb(host, dbName, appDBUsername, appDBPassword, sync) {
|
|
4
|
+
const logger = getLogger();
|
|
5
|
+
const userCredentials = getCloudCredentials();
|
|
13
6
|
const bearerToken = "Bearer " + userCredentials.token;
|
|
14
7
|
try {
|
|
15
|
-
await
|
|
8
|
+
await axios.post(`https://${host}/v1alpha1/${userCredentials.userName}/databases/userdb`, { Name: dbName, AdminName: appDBUsername, AdminPassword: appDBPassword }, {
|
|
16
9
|
headers: {
|
|
17
10
|
"Content-Type": "application/json",
|
|
18
11
|
Authorization: bearerToken,
|
|
@@ -22,7 +15,7 @@ async function createUserDb(host, dbName, appDBUsername, appDBPassword, sync) {
|
|
|
22
15
|
if (sync) {
|
|
23
16
|
let status = "";
|
|
24
17
|
while (status != "available" && status != "backing-up") {
|
|
25
|
-
await
|
|
18
|
+
await sleep(30000);
|
|
26
19
|
const userDBInfo = await getUserDBInfo(host, dbName);
|
|
27
20
|
logger.info(userDBInfo);
|
|
28
21
|
status = userDBInfo.Status;
|
|
@@ -34,8 +27,8 @@ async function createUserDb(host, dbName, appDBUsername, appDBPassword, sync) {
|
|
|
34
27
|
catch (e) {
|
|
35
28
|
const errorLabel = `Failed to create database ${dbName}`;
|
|
36
29
|
const axiosError = e;
|
|
37
|
-
if (
|
|
38
|
-
|
|
30
|
+
if (isCloudAPIErrorResponse(axiosError.response?.data)) {
|
|
31
|
+
handleAPIErrors(errorLabel, axiosError);
|
|
39
32
|
}
|
|
40
33
|
else {
|
|
41
34
|
logger.error(`${errorLabel}: ${e.message}`);
|
|
@@ -43,13 +36,12 @@ async function createUserDb(host, dbName, appDBUsername, appDBPassword, sync) {
|
|
|
43
36
|
return 1;
|
|
44
37
|
}
|
|
45
38
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
const
|
|
49
|
-
const userCredentials = (0, cloudutils_1.getCloudCredentials)();
|
|
39
|
+
export async function deleteUserDb(host, dbName) {
|
|
40
|
+
const logger = getLogger();
|
|
41
|
+
const userCredentials = getCloudCredentials();
|
|
50
42
|
const bearerToken = "Bearer " + userCredentials.token;
|
|
51
43
|
try {
|
|
52
|
-
await
|
|
44
|
+
await axios.delete(`https://${host}/v1alpha1/${userCredentials.userName}/databases/userdb/${dbName}`, {
|
|
53
45
|
headers: {
|
|
54
46
|
"Content-Type": "application/json",
|
|
55
47
|
Authorization: bearerToken,
|
|
@@ -61,8 +53,8 @@ async function deleteUserDb(host, dbName) {
|
|
|
61
53
|
catch (e) {
|
|
62
54
|
const errorLabel = `Failed to delete database ${dbName}`;
|
|
63
55
|
const axiosError = e;
|
|
64
|
-
if (
|
|
65
|
-
|
|
56
|
+
if (isCloudAPIErrorResponse(axiosError.response?.data)) {
|
|
57
|
+
handleAPIErrors(errorLabel, axiosError);
|
|
66
58
|
}
|
|
67
59
|
else {
|
|
68
60
|
logger.error(`${errorLabel}: ${e.message}`);
|
|
@@ -70,9 +62,8 @@ async function deleteUserDb(host, dbName) {
|
|
|
70
62
|
return 1;
|
|
71
63
|
}
|
|
72
64
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
const logger = (0, cloudutils_1.getLogger)();
|
|
65
|
+
export async function getUserDb(host, dbName, json) {
|
|
66
|
+
const logger = getLogger();
|
|
76
67
|
try {
|
|
77
68
|
const userDBInfo = await getUserDBInfo(host, dbName);
|
|
78
69
|
if (json) {
|
|
@@ -90,8 +81,8 @@ async function getUserDb(host, dbName, json) {
|
|
|
90
81
|
catch (e) {
|
|
91
82
|
const errorLabel = `Failed to retrieve database record ${dbName}`;
|
|
92
83
|
const axiosError = e;
|
|
93
|
-
if (
|
|
94
|
-
|
|
84
|
+
if (isCloudAPIErrorResponse(axiosError.response?.data)) {
|
|
85
|
+
handleAPIErrors(errorLabel, axiosError);
|
|
95
86
|
}
|
|
96
87
|
else {
|
|
97
88
|
logger.error(`${errorLabel}: ${e.message}`);
|
|
@@ -99,13 +90,12 @@ async function getUserDb(host, dbName, json) {
|
|
|
99
90
|
return 1;
|
|
100
91
|
}
|
|
101
92
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
const logger = (0, cloudutils_1.getLogger)();
|
|
93
|
+
export async function listUserDB(host, json) {
|
|
94
|
+
const logger = getLogger();
|
|
105
95
|
try {
|
|
106
|
-
const userCredentials =
|
|
96
|
+
const userCredentials = getCloudCredentials();
|
|
107
97
|
const bearerToken = "Bearer " + userCredentials.token;
|
|
108
|
-
const res = await
|
|
98
|
+
const res = await axios.get(`https://${host}/v1alpha1/${userCredentials.userName}/databases`, {
|
|
109
99
|
headers: {
|
|
110
100
|
"Content-Type": "application/json",
|
|
111
101
|
Authorization: bearerToken,
|
|
@@ -132,8 +122,8 @@ async function listUserDB(host, json) {
|
|
|
132
122
|
catch (e) {
|
|
133
123
|
const errorLabel = `Failed to retrieve info`;
|
|
134
124
|
const axiosError = e;
|
|
135
|
-
if (
|
|
136
|
-
|
|
125
|
+
if (isCloudAPIErrorResponse(axiosError.response?.data)) {
|
|
126
|
+
handleAPIErrors(errorLabel, axiosError);
|
|
137
127
|
}
|
|
138
128
|
else {
|
|
139
129
|
logger.error(`${errorLabel}: ${e.message}`);
|
|
@@ -141,11 +131,10 @@ async function listUserDB(host, json) {
|
|
|
141
131
|
return 1;
|
|
142
132
|
}
|
|
143
133
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
const userCredentials = (0, cloudutils_1.getCloudCredentials)();
|
|
134
|
+
export async function getUserDBInfo(host, dbName) {
|
|
135
|
+
const userCredentials = getCloudCredentials();
|
|
147
136
|
const bearerToken = "Bearer " + userCredentials.token;
|
|
148
|
-
const res = await
|
|
137
|
+
const res = await axios.get(`https://${host}/v1alpha1/${userCredentials.userName}/databases/userdb/info/${dbName}`, {
|
|
149
138
|
headers: {
|
|
150
139
|
"Content-Type": "application/json",
|
|
151
140
|
Authorization: bearerToken,
|
|
@@ -153,13 +142,12 @@ async function getUserDBInfo(host, dbName) {
|
|
|
153
142
|
});
|
|
154
143
|
return res.data;
|
|
155
144
|
}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
const
|
|
159
|
-
const userCredentials = (0, cloudutils_1.getCloudCredentials)();
|
|
145
|
+
export async function resetDBCredentials(host, dbName, appDBPassword) {
|
|
146
|
+
const logger = getLogger();
|
|
147
|
+
const userCredentials = getCloudCredentials();
|
|
160
148
|
const bearerToken = "Bearer " + userCredentials.token;
|
|
161
149
|
try {
|
|
162
|
-
await
|
|
150
|
+
await axios.post(`https://${host}/v1alpha1/${userCredentials.userName}/databases/userdb/${dbName}/credentials`, { Name: dbName, Password: appDBPassword }, {
|
|
163
151
|
headers: {
|
|
164
152
|
"Content-Type": "application/json",
|
|
165
153
|
Authorization: bearerToken,
|
|
@@ -171,8 +159,8 @@ async function resetDBCredentials(host, dbName, appDBPassword) {
|
|
|
171
159
|
catch (e) {
|
|
172
160
|
const errorLabel = `Failed to reset user password for database ${dbName}`;
|
|
173
161
|
const axiosError = e;
|
|
174
|
-
if (
|
|
175
|
-
|
|
162
|
+
if (isCloudAPIErrorResponse(axiosError.response?.data)) {
|
|
163
|
+
handleAPIErrors(errorLabel, axiosError);
|
|
176
164
|
}
|
|
177
165
|
else {
|
|
178
166
|
logger.error(`${errorLabel}: ${e.message}`);
|
|
@@ -180,5 +168,4 @@ async function resetDBCredentials(host, dbName, appDBPassword) {
|
|
|
180
168
|
return 1;
|
|
181
169
|
}
|
|
182
170
|
}
|
|
183
|
-
exports.resetDBCredentials = resetDBCredentials;
|
|
184
171
|
//# sourceMappingURL=userdb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"userdb.js","sourceRoot":"","sources":["../userdb.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dbos-inc/dbos-cloud",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.5-preview",
|
|
4
4
|
"description": "Tool for performing application deployment to DBOS cloud",
|
|
5
5
|
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
6
7
|
"repository": {
|
|
7
8
|
"type": "git",
|
|
8
9
|
"url": "https://github.com/dbos-inc/dbos-ts",
|
|
9
10
|
"directory": "packages/dbos-cloud"
|
|
10
11
|
},
|
|
11
|
-
"main": "cli.ts",
|
|
12
12
|
"homepage": "https://docs.dbos.dev/",
|
|
13
13
|
"scripts": {
|
|
14
14
|
"build": "tsc --project tsconfig.json",
|
|
@@ -16,11 +16,12 @@
|
|
|
16
16
|
"setversion": "grunt setversion"
|
|
17
17
|
},
|
|
18
18
|
"bin": {
|
|
19
|
-
"dbos-cloud": "./dist/
|
|
19
|
+
"dbos-cloud": "./dist/cli.js"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"@types/node": "^20.6.3",
|
|
23
23
|
"@types/prompt-sync": "^4.2.3",
|
|
24
|
+
"@types/update-notifier": "^6.0.8",
|
|
24
25
|
"@types/validator": "^13.11.9",
|
|
25
26
|
"grunt": "^1.6.1",
|
|
26
27
|
"nerdbank-gitversioning": "^3.6.133",
|
|
@@ -28,12 +29,15 @@
|
|
|
28
29
|
},
|
|
29
30
|
"dependencies": {
|
|
30
31
|
"axios": "^1.6.7",
|
|
32
|
+
"chalk": "4.1.2",
|
|
31
33
|
"commander": "^12.0.0",
|
|
32
34
|
"fast-glob": "^3.3.2",
|
|
33
35
|
"jsonwebtoken": "^9.0.2",
|
|
34
36
|
"jszip": "^3.10.1",
|
|
35
37
|
"jwks-rsa": "^3.1.0",
|
|
38
|
+
"open": "^10.1.0",
|
|
36
39
|
"prompt-sync": "^4.2.0",
|
|
40
|
+
"update-notifier": "^7.0.0",
|
|
37
41
|
"validator": "^13.11.0",
|
|
38
42
|
"winston": "^3.12.0",
|
|
39
43
|
"winston-transport": "^4.7.0"
|
package/Gruntfile.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
2
|
-
var nbgv = require('nerdbank-gitversioning')
|
|
3
|
-
|
|
4
|
-
module.exports = function (grunt) {
|
|
5
|
-
grunt.registerTask('setversion', function () {
|
|
6
|
-
var done = this.async();
|
|
7
|
-
nbgv.setPackageVersion().then(() => done());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import axios, { AxiosError } from "axios";
|
|
2
|
-
import { isCloudAPIErrorResponse, handleAPIErrors, getCloudCredentials, getLogger, retrieveApplicationName } from "../cloudutils";
|
|
3
|
-
|
|
4
|
-
export async function deleteApp(host: string, appName?: string): Promise<number> {
|
|
5
|
-
const logger = getLogger()
|
|
6
|
-
const userCredentials = getCloudCredentials();
|
|
7
|
-
const bearerToken = "Bearer " + userCredentials.token;
|
|
8
|
-
|
|
9
|
-
appName = appName ?? retrieveApplicationName(logger);
|
|
10
|
-
if (!appName) {
|
|
11
|
-
return 1;
|
|
12
|
-
}
|
|
13
|
-
logger.info(`Deleting application: ${appName}`)
|
|
14
|
-
|
|
15
|
-
try {
|
|
16
|
-
await axios.delete(`https://${host}/v1alpha1/${userCredentials.userName}/applications/${appName}`, {
|
|
17
|
-
headers: {
|
|
18
|
-
"Content-Type": "application/json",
|
|
19
|
-
Authorization: bearerToken,
|
|
20
|
-
},
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
logger.info(`Successfully deleted application: ${appName}`);
|
|
24
|
-
return 0;
|
|
25
|
-
} catch (e) {
|
|
26
|
-
const errorLabel = `Failed to delete application ${appName}`;
|
|
27
|
-
const axiosError = e as AxiosError;
|
|
28
|
-
if (isCloudAPIErrorResponse(axiosError.response?.data)) {
|
|
29
|
-
handleAPIErrors(errorLabel, axiosError);
|
|
30
|
-
} else {
|
|
31
|
-
logger.error(`${errorLabel}: ${(e as Error).message}`);
|
|
32
|
-
}
|
|
33
|
-
return 1;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
import axios, { AxiosError } from "axios";
|
|
2
|
-
import { existsSync, readFileSync } from 'fs';
|
|
3
|
-
import { handleAPIErrors, dbosConfigFilePath, getCloudCredentials, getLogger, checkReadFile, sleep, isCloudAPIErrorResponse, retrieveApplicationName, dbosEnvPath } from "../cloudutils";
|
|
4
|
-
import path from "path";
|
|
5
|
-
import { Application } from "./types";
|
|
6
|
-
import JSZip from "jszip";
|
|
7
|
-
import fg from 'fast-glob';
|
|
8
|
-
|
|
9
|
-
type DeployOutput = {
|
|
10
|
-
ApplicationName: string;
|
|
11
|
-
ApplicationVersion: string;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
async function createZipData(): Promise<string> {
|
|
15
|
-
const zip = new JSZip();
|
|
16
|
-
|
|
17
|
-
const files = await fg(`${process.cwd()}/**/*`, { dot: true, onlyFiles: true, ignore: [`**/${dbosEnvPath}/**`, '**/node_modules/**', '**/dist/**', `**/${dbosConfigFilePath}`] });
|
|
18
|
-
|
|
19
|
-
files.forEach(file => {
|
|
20
|
-
const relativePath = file.replace(`${process.cwd()}/`, '');
|
|
21
|
-
const fileData = readFileSync(file);
|
|
22
|
-
zip.file(relativePath, fileData, { binary: true });
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
// Add the interpolated config file at package root
|
|
26
|
-
const interpolatedConfig = readInterpolatedConfig(dbosConfigFilePath)
|
|
27
|
-
zip.file(dbosConfigFilePath, interpolatedConfig, { binary: true });
|
|
28
|
-
|
|
29
|
-
// Generate ZIP file as a Buffer
|
|
30
|
-
const buffer = await zip.generateAsync({ type: 'nodebuffer' });
|
|
31
|
-
return buffer.toString('base64');
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
export async function deployAppCode(host: string): Promise<number> {
|
|
36
|
-
const logger = getLogger()
|
|
37
|
-
const userCredentials = getCloudCredentials();
|
|
38
|
-
const bearerToken = "Bearer " + userCredentials.token;
|
|
39
|
-
|
|
40
|
-
const appName = retrieveApplicationName(logger);
|
|
41
|
-
if (!appName) {
|
|
42
|
-
return 1;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
// Verify that package-lock.json exists
|
|
46
|
-
if (!existsSync(path.join(process.cwd(), 'package-lock.json'))) {
|
|
47
|
-
logger.error("package-lock.json not found. Please run 'npm install' before deploying.")
|
|
48
|
-
return 1;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
try {
|
|
52
|
-
const zipData = await createZipData();
|
|
53
|
-
|
|
54
|
-
// Submit the deploy request
|
|
55
|
-
logger.info(`Submitting deploy request for ${appName}`)
|
|
56
|
-
const response = await axios.post(
|
|
57
|
-
`https://${host}/v1alpha1/${userCredentials.userName}/applications/${appName}`,
|
|
58
|
-
{
|
|
59
|
-
application_archive: zipData,
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
headers: {
|
|
63
|
-
"Content-Type": "application/json",
|
|
64
|
-
Authorization: bearerToken,
|
|
65
|
-
},
|
|
66
|
-
}
|
|
67
|
-
);
|
|
68
|
-
const deployOutput = response.data as DeployOutput;
|
|
69
|
-
logger.info(`Submitted deploy request for ${appName}. Assigned version: ${deployOutput.ApplicationVersion}`);
|
|
70
|
-
|
|
71
|
-
// Wait for the application to become available
|
|
72
|
-
let count = 0
|
|
73
|
-
let applicationAvailable = false
|
|
74
|
-
while (!applicationAvailable) {
|
|
75
|
-
count += 1
|
|
76
|
-
if (count % 5 === 0) {
|
|
77
|
-
logger.info(`Waiting for ${appName} with version ${deployOutput.ApplicationVersion} to be available`);
|
|
78
|
-
if (count > 20) {
|
|
79
|
-
logger.info(`If ${appName} takes too long to become available, check its logs with 'npx dbos-cloud applications logs'`);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
if (count > 180) {
|
|
83
|
-
logger.error("Application taking too long to become available")
|
|
84
|
-
return 1;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
// Retrieve the application status, check if it is "AVAILABLE"
|
|
88
|
-
const list = await axios.get(
|
|
89
|
-
`https://${host}/v1alpha1/${userCredentials.userName}/applications`,
|
|
90
|
-
{
|
|
91
|
-
headers: {
|
|
92
|
-
Authorization: bearerToken,
|
|
93
|
-
},
|
|
94
|
-
}
|
|
95
|
-
);
|
|
96
|
-
const applications: Application[] = list.data as Application[];
|
|
97
|
-
for (const application of applications) {
|
|
98
|
-
if (application.Name === appName && application.Status === "AVAILABLE") {
|
|
99
|
-
applicationAvailable = true
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
await sleep(1000);
|
|
103
|
-
}
|
|
104
|
-
await sleep(5000); // Leave time for route cache updates
|
|
105
|
-
logger.info(`Successfully deployed ${appName}!`)
|
|
106
|
-
logger.info(`Access your application at https://${userCredentials.userName}-${appName}.${host}/`)
|
|
107
|
-
return 0;
|
|
108
|
-
} catch (e) {
|
|
109
|
-
const errorLabel = `Failed to deploy application ${appName}`;
|
|
110
|
-
const axiosError = e as AxiosError;
|
|
111
|
-
if (isCloudAPIErrorResponse(axiosError.response?.data)) {
|
|
112
|
-
handleAPIErrors(errorLabel, axiosError);
|
|
113
|
-
} else {
|
|
114
|
-
logger.error(`${errorLabel}: ${(e as Error).message}`);
|
|
115
|
-
}
|
|
116
|
-
return 1;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
function readInterpolatedConfig(configFilePath: string): string {
|
|
121
|
-
const configFileContent = checkReadFile(configFilePath) as string;
|
|
122
|
-
const regex = /\${([^}]+)}/g; // Regex to match ${VAR_NAME} style placeholders
|
|
123
|
-
return configFileContent.replace(regex, (_, g1: string) => {
|
|
124
|
-
return process.env[g1] || ""; // If the env variable is not set, return an empty string.
|
|
125
|
-
});
|
|
126
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import axios , { AxiosError } from "axios";
|
|
2
|
-
import { handleAPIErrors, getCloudCredentials, getLogger, isCloudAPIErrorResponse, retrieveApplicationName } from "../cloudutils";
|
|
3
|
-
import { Application, prettyPrintApplication } from "./types";
|
|
4
|
-
|
|
5
|
-
export async function getAppInfo(host: string, json: boolean, appName?: string): Promise<number> {
|
|
6
|
-
const logger = getLogger();
|
|
7
|
-
const userCredentials = getCloudCredentials();
|
|
8
|
-
const bearerToken = "Bearer " + userCredentials.token;
|
|
9
|
-
|
|
10
|
-
appName = appName ?? retrieveApplicationName(logger, json);
|
|
11
|
-
if (!appName) {
|
|
12
|
-
return 1;
|
|
13
|
-
}
|
|
14
|
-
if (!json) {
|
|
15
|
-
logger.info(`Retrieving info for application: ${appName}`)
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
try {
|
|
19
|
-
const res = await axios.get(`https://${host}/v1alpha1/${userCredentials.userName}/applications/${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
|
-
prettyPrintApplication(app);
|
|
30
|
-
}
|
|
31
|
-
return 0;
|
|
32
|
-
} catch (e) {
|
|
33
|
-
const errorLabel = `Failed to retrieve info for application ${appName}`;
|
|
34
|
-
const axiosError = e as AxiosError;
|
|
35
|
-
if (isCloudAPIErrorResponse(axiosError.response?.data)) {
|
|
36
|
-
handleAPIErrors(errorLabel, axiosError);
|
|
37
|
-
} else {
|
|
38
|
-
logger.error(`${errorLabel}: ${(e as Error).message}`);
|
|
39
|
-
}
|
|
40
|
-
return 1;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import axios , { AxiosError } from "axios";
|
|
2
|
-
import { handleAPIErrors, getCloudCredentials, getLogger, isCloudAPIErrorResponse, retrieveApplicationName } from "../cloudutils";
|
|
3
|
-
|
|
4
|
-
export async function getAppLogs(host: string, last: number): Promise<number> {
|
|
5
|
-
if (last != undefined && (isNaN(last) || last <= 0)) {
|
|
6
|
-
throw new Error('The --last parmameter must be an integer greater than 0');
|
|
7
|
-
}
|
|
8
|
-
if (last == undefined) {
|
|
9
|
-
last = 0 //internally, 0 means "get all the logs." This is the default.
|
|
10
|
-
}
|
|
11
|
-
const logger = getLogger();
|
|
12
|
-
const userCredentials = getCloudCredentials();
|
|
13
|
-
const bearerToken = "Bearer " + userCredentials.token;
|
|
14
|
-
|
|
15
|
-
const appName = retrieveApplicationName(logger);
|
|
16
|
-
if (!appName) {
|
|
17
|
-
return 1;
|
|
18
|
-
}
|
|
19
|
-
logger.info(`Retrieving logs for application: ${appName}`)
|
|
20
|
-
|
|
21
|
-
try {
|
|
22
|
-
const res = await axios.get(`https://${host}/v1alpha1/${userCredentials.userName}/logs/applications/${appName}?last=${last}`, {
|
|
23
|
-
headers: {
|
|
24
|
-
"Content-Type": "application/json",
|
|
25
|
-
Authorization: bearerToken,
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
if (res.data == "") {
|
|
29
|
-
logger.info(`No logs found for the specified parameters`);
|
|
30
|
-
} else {
|
|
31
|
-
logger.info(`Successfully retrieved logs of application: ${appName}`);
|
|
32
|
-
logger.info(res.data)
|
|
33
|
-
}
|
|
34
|
-
return 0;
|
|
35
|
-
} catch (e) {
|
|
36
|
-
const errorLabel = `Failed to retrieve logs of application ${appName}`;
|
|
37
|
-
const axiosError = e as AxiosError;
|
|
38
|
-
if (isCloudAPIErrorResponse(axiosError.response?.data)) {
|
|
39
|
-
handleAPIErrors(errorLabel, axiosError);
|
|
40
|
-
} else {
|
|
41
|
-
logger.error(`${errorLabel}: ${(e as Error).message}`);
|
|
42
|
-
}
|
|
43
|
-
return 1;
|
|
44
|
-
}
|
|
45
|
-
}
|
package/applications/index.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export { registerApp } from './register-app';
|
|
2
|
-
export { listApps } from './list-apps';
|
|
3
|
-
export { deleteApp } from './delete-app';
|
|
4
|
-
export { deployAppCode } from './deploy-app-code';
|
|
5
|
-
export { getAppLogs } from './get-app-logs';
|
|
6
|
-
export { updateApp } from './update-app';
|
|
7
|
-
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import axios, { AxiosError } from "axios";
|
|
2
|
-
import { handleAPIErrors, getCloudCredentials, getLogger, isCloudAPIErrorResponse } from "../cloudutils";
|
|
3
|
-
import { Application, prettyPrintApplication } from "./types";
|
|
4
|
-
|
|
5
|
-
export async function listApps(host: string, json: boolean): Promise<number> {
|
|
6
|
-
const logger = getLogger();
|
|
7
|
-
const userCredentials = getCloudCredentials();
|
|
8
|
-
const bearerToken = "Bearer " + userCredentials.token;
|
|
9
|
-
|
|
10
|
-
try {
|
|
11
|
-
const list = await axios.get(
|
|
12
|
-
`https://${host}/v1alpha1/${userCredentials.userName}/applications`,
|
|
13
|
-
{
|
|
14
|
-
headers: {
|
|
15
|
-
Authorization: bearerToken,
|
|
16
|
-
},
|
|
17
|
-
}
|
|
18
|
-
);
|
|
19
|
-
const applications: Application[] = list.data as Application[];
|
|
20
|
-
if (json) {
|
|
21
|
-
console.log(JSON.stringify(applications));
|
|
22
|
-
} else {
|
|
23
|
-
if (applications.length === 0) {
|
|
24
|
-
logger.info("No applications found");
|
|
25
|
-
}
|
|
26
|
-
applications.forEach(app => {
|
|
27
|
-
prettyPrintApplication(app);
|
|
28
|
-
console.log('-------------------------');
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
return 0;
|
|
32
|
-
} catch (e) {
|
|
33
|
-
const errorLabel = 'Failed to list applications';
|
|
34
|
-
const axiosError = e as AxiosError;
|
|
35
|
-
if (isCloudAPIErrorResponse(axiosError.response?.data)) {
|
|
36
|
-
handleAPIErrors(errorLabel, axiosError);
|
|
37
|
-
} else {
|
|
38
|
-
logger.error(`${errorLabel}: ${(e as Error).message}`);
|
|
39
|
-
}
|
|
40
|
-
return 1;
|
|
41
|
-
}
|
|
42
|
-
}
|