@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.
Files changed (121) hide show
  1. package/dist/applications/delete-app.d.ts.map +1 -0
  2. package/dist/applications/delete-app.js +34 -0
  3. package/dist/applications/delete-app.js.map +1 -0
  4. package/dist/applications/deploy-app-code.d.ts.map +1 -0
  5. package/dist/{packages/dbos-cloud/applications → applications}/deploy-app-code.js +23 -30
  6. package/dist/applications/deploy-app-code.js.map +1 -0
  7. package/dist/applications/get-app-info.d.ts.map +1 -0
  8. package/dist/applications/get-app-info.js +43 -0
  9. package/dist/applications/get-app-info.js.map +1 -0
  10. package/dist/applications/get-app-logs.d.ts.map +1 -0
  11. package/dist/{packages/dbos-cloud/applications → applications}/get-app-logs.js +9 -16
  12. package/dist/applications/get-app-logs.js.map +1 -0
  13. package/dist/applications/index.d.ts +7 -0
  14. package/dist/applications/index.d.ts.map +1 -0
  15. package/dist/applications/index.js +7 -0
  16. package/dist/applications/index.js.map +1 -0
  17. package/dist/applications/list-apps.d.ts.map +1 -0
  18. package/dist/applications/list-apps.js +41 -0
  19. package/dist/applications/list-apps.js.map +1 -0
  20. package/dist/applications/register-app.d.ts.map +1 -0
  21. package/dist/applications/register-app.js +39 -0
  22. package/dist/applications/register-app.js.map +1 -0
  23. package/dist/applications/types.d.ts.map +1 -0
  24. package/dist/{packages/dbos-cloud/applications → applications}/types.js +1 -5
  25. package/dist/applications/types.js.map +1 -0
  26. package/dist/applications/update-app.d.ts.map +1 -0
  27. package/dist/applications/update-app.js +38 -0
  28. package/dist/applications/update-app.js.map +1 -0
  29. package/dist/cli.d.ts.map +1 -0
  30. package/dist/{packages/dbos-cloud/cli.js → cli.js} +58 -35
  31. package/dist/cli.js.map +1 -0
  32. package/dist/{packages/dbos-cloud/cloudutils.d.ts → cloudutils.d.ts} +1 -1
  33. package/dist/cloudutils.d.ts.map +1 -0
  34. package/dist/cloudutils.js +126 -0
  35. package/dist/cloudutils.js.map +1 -0
  36. package/dist/dashboards.d.ts.map +1 -0
  37. package/{dashboards.ts → dist/dashboards.js} +24 -24
  38. package/dist/dashboards.js.map +1 -0
  39. package/dist/login.d.ts.map +1 -0
  40. package/dist/{packages/dbos-cloud/login.js → login.js} +25 -26
  41. package/dist/login.js.map +1 -0
  42. package/dist/register.d.ts.map +1 -0
  43. package/dist/register.js +86 -0
  44. package/dist/register.js.map +1 -0
  45. package/dist/userdb.d.ts.map +1 -0
  46. package/dist/{packages/dbos-cloud/userdb.js → userdb.js} +34 -47
  47. package/dist/userdb.js.map +1 -0
  48. package/package.json +7 -3
  49. package/Gruntfile.js +0 -9
  50. package/applications/delete-app.ts +0 -35
  51. package/applications/deploy-app-code.ts +0 -126
  52. package/applications/get-app-info.ts +0 -42
  53. package/applications/get-app-logs.ts +0 -45
  54. package/applications/index.ts +0 -7
  55. package/applications/list-apps.ts +0 -42
  56. package/applications/register-app.ts +0 -43
  57. package/applications/types.ts +0 -19
  58. package/applications/update-app.ts +0 -43
  59. package/cli.ts +0 -225
  60. package/cloudutils.ts +0 -166
  61. package/dist/packages/dbos-cloud/applications/delete-app.d.ts.map +0 -1
  62. package/dist/packages/dbos-cloud/applications/delete-app.js +0 -41
  63. package/dist/packages/dbos-cloud/applications/delete-app.js.map +0 -1
  64. package/dist/packages/dbos-cloud/applications/deploy-app-code.d.ts.map +0 -1
  65. package/dist/packages/dbos-cloud/applications/deploy-app-code.js.map +0 -1
  66. package/dist/packages/dbos-cloud/applications/get-app-info.d.ts.map +0 -1
  67. package/dist/packages/dbos-cloud/applications/get-app-info.js +0 -50
  68. package/dist/packages/dbos-cloud/applications/get-app-info.js.map +0 -1
  69. package/dist/packages/dbos-cloud/applications/get-app-logs.d.ts.map +0 -1
  70. package/dist/packages/dbos-cloud/applications/get-app-logs.js.map +0 -1
  71. package/dist/packages/dbos-cloud/applications/index.d.ts +0 -7
  72. package/dist/packages/dbos-cloud/applications/index.d.ts.map +0 -1
  73. package/dist/packages/dbos-cloud/applications/index.js +0 -16
  74. package/dist/packages/dbos-cloud/applications/index.js.map +0 -1
  75. package/dist/packages/dbos-cloud/applications/list-apps.d.ts.map +0 -1
  76. package/dist/packages/dbos-cloud/applications/list-apps.js +0 -48
  77. package/dist/packages/dbos-cloud/applications/list-apps.js.map +0 -1
  78. package/dist/packages/dbos-cloud/applications/register-app.d.ts.map +0 -1
  79. package/dist/packages/dbos-cloud/applications/register-app.js +0 -46
  80. package/dist/packages/dbos-cloud/applications/register-app.js.map +0 -1
  81. package/dist/packages/dbos-cloud/applications/types.d.ts.map +0 -1
  82. package/dist/packages/dbos-cloud/applications/types.js.map +0 -1
  83. package/dist/packages/dbos-cloud/applications/update-app.d.ts.map +0 -1
  84. package/dist/packages/dbos-cloud/applications/update-app.js +0 -45
  85. package/dist/packages/dbos-cloud/applications/update-app.js.map +0 -1
  86. package/dist/packages/dbos-cloud/cli.d.ts.map +0 -1
  87. package/dist/packages/dbos-cloud/cli.js.map +0 -1
  88. package/dist/packages/dbos-cloud/cloudutils.d.ts.map +0 -1
  89. package/dist/packages/dbos-cloud/cloudutils.js +0 -145
  90. package/dist/packages/dbos-cloud/cloudutils.js.map +0 -1
  91. package/dist/packages/dbos-cloud/dashboards.d.ts.map +0 -1
  92. package/dist/packages/dbos-cloud/dashboards.js +0 -63
  93. package/dist/packages/dbos-cloud/dashboards.js.map +0 -1
  94. package/dist/packages/dbos-cloud/login.d.ts.map +0 -1
  95. package/dist/packages/dbos-cloud/login.js.map +0 -1
  96. package/dist/packages/dbos-cloud/register.d.ts.map +0 -1
  97. package/dist/packages/dbos-cloud/register.js +0 -116
  98. package/dist/packages/dbos-cloud/register.js.map +0 -1
  99. package/dist/packages/dbos-cloud/userdb.d.ts.map +0 -1
  100. package/dist/packages/dbos-cloud/userdb.js.map +0 -1
  101. package/dist/src/utils.d.ts +0 -6
  102. package/dist/src/utils.d.ts.map +0 -1
  103. package/dist/src/utils.js +0 -51
  104. package/dist/src/utils.js.map +0 -1
  105. package/login.ts +0 -146
  106. package/register.ts +0 -89
  107. package/tsconfig.json +0 -22
  108. package/userdb.ts +0 -191
  109. /package/dist/{packages/dbos-cloud/applications → applications}/delete-app.d.ts +0 -0
  110. /package/dist/{packages/dbos-cloud/applications → applications}/deploy-app-code.d.ts +0 -0
  111. /package/dist/{packages/dbos-cloud/applications → applications}/get-app-info.d.ts +0 -0
  112. /package/dist/{packages/dbos-cloud/applications → applications}/get-app-logs.d.ts +0 -0
  113. /package/dist/{packages/dbos-cloud/applications → applications}/list-apps.d.ts +0 -0
  114. /package/dist/{packages/dbos-cloud/applications → applications}/register-app.d.ts +0 -0
  115. /package/dist/{packages/dbos-cloud/applications → applications}/types.d.ts +0 -0
  116. /package/dist/{packages/dbos-cloud/applications → applications}/update-app.d.ts +0 -0
  117. /package/dist/{packages/dbos-cloud/cli.d.ts → cli.d.ts} +0 -0
  118. /package/dist/{packages/dbos-cloud/dashboards.d.ts → dashboards.d.ts} +0 -0
  119. /package/dist/{packages/dbos-cloud/login.d.ts → login.d.ts} +0 -0
  120. /package/dist/{packages/dbos-cloud/register.d.ts → register.d.ts} +0 -0
  121. /package/dist/{packages/dbos-cloud/userdb.d.ts → userdb.d.ts} +0 -0
@@ -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
- "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.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 axios_1.default.post(`https://${host}/v1alpha1/${userCredentials.userName}/databases/userdb`, { Name: dbName, AdminName: appDBUsername, AdminPassword: appDBPassword }, {
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 (0, utils_1.sleep)(30000);
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 ((0, cloudutils_1.isCloudAPIErrorResponse)(axiosError.response?.data)) {
38
- (0, cloudutils_1.handleAPIErrors)(errorLabel, axiosError);
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
- exports.createUserDb = createUserDb;
47
- async function deleteUserDb(host, dbName) {
48
- const logger = (0, cloudutils_1.getLogger)();
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 axios_1.default.delete(`https://${host}/v1alpha1/${userCredentials.userName}/databases/userdb/${dbName}`, {
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 ((0, cloudutils_1.isCloudAPIErrorResponse)(axiosError.response?.data)) {
65
- (0, cloudutils_1.handleAPIErrors)(errorLabel, axiosError);
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
- exports.deleteUserDb = deleteUserDb;
74
- async function getUserDb(host, dbName, json) {
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 ((0, cloudutils_1.isCloudAPIErrorResponse)(axiosError.response?.data)) {
94
- (0, cloudutils_1.handleAPIErrors)(errorLabel, axiosError);
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
- exports.getUserDb = getUserDb;
103
- async function listUserDB(host, json) {
104
- const logger = (0, cloudutils_1.getLogger)();
93
+ export async function listUserDB(host, json) {
94
+ const logger = getLogger();
105
95
  try {
106
- const userCredentials = (0, cloudutils_1.getCloudCredentials)();
96
+ const userCredentials = getCloudCredentials();
107
97
  const bearerToken = "Bearer " + userCredentials.token;
108
- const res = await axios_1.default.get(`https://${host}/v1alpha1/${userCredentials.userName}/databases`, {
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 ((0, cloudutils_1.isCloudAPIErrorResponse)(axiosError.response?.data)) {
136
- (0, cloudutils_1.handleAPIErrors)(errorLabel, axiosError);
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
- exports.listUserDB = listUserDB;
145
- async function getUserDBInfo(host, dbName) {
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 axios_1.default.get(`https://${host}/v1alpha1/${userCredentials.userName}/databases/userdb/info/${dbName}`, {
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
- exports.getUserDBInfo = getUserDBInfo;
157
- async function resetDBCredentials(host, dbName, appDBPassword) {
158
- const logger = (0, cloudutils_1.getLogger)();
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 axios_1.default.post(`https://${host}/v1alpha1/${userCredentials.userName}/databases/userdb/${dbName}/credentials`, { Name: dbName, Password: appDBPassword }, {
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 ((0, cloudutils_1.isCloudAPIErrorResponse)(axiosError.response?.data)) {
175
- (0, cloudutils_1.handleAPIErrors)(errorLabel, axiosError);
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.0.2",
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/packages/dbos-cloud/cli.js"
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
- }
@@ -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
- }