alpic 0.0.0-dev.f1a6945 → 0.0.0-dev.f1f9e99

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 (179) hide show
  1. package/README.md +40 -0
  2. package/bin/run.js +5 -0
  3. package/dist/__tests__/audit.e2e.test.d.ts +1 -0
  4. package/dist/__tests__/audit.e2e.test.js +562 -0
  5. package/dist/__tests__/audit.e2e.test.js.map +1 -0
  6. package/dist/__tests__/auth.e2e.test.js +38 -18
  7. package/dist/__tests__/auth.e2e.test.js.map +1 -1
  8. package/dist/__tests__/deploy-flags.e2e.test.d.ts +1 -0
  9. package/dist/__tests__/deploy-flags.e2e.test.js +228 -0
  10. package/dist/__tests__/deploy-flags.e2e.test.js.map +1 -0
  11. package/dist/__tests__/deploy.e2e.test.js +34 -66
  12. package/dist/__tests__/deploy.e2e.test.js.map +1 -1
  13. package/dist/__tests__/deployment-inspect.e2e.test.d.ts +1 -0
  14. package/dist/__tests__/deployment-inspect.e2e.test.js +119 -0
  15. package/dist/__tests__/deployment-inspect.e2e.test.js.map +1 -0
  16. package/dist/__tests__/deployment-list.e2e.test.d.ts +1 -0
  17. package/dist/__tests__/deployment-list.e2e.test.js +121 -0
  18. package/dist/__tests__/deployment-list.e2e.test.js.map +1 -0
  19. package/dist/__tests__/deployment-logs.e2e.test.d.ts +1 -0
  20. package/dist/__tests__/deployment-logs.e2e.test.js +260 -0
  21. package/dist/__tests__/deployment-logs.e2e.test.js.map +1 -0
  22. package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.d.ts +1 -0
  23. package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.js +264 -0
  24. package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.js.map +1 -0
  25. package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.d.ts +1 -0
  26. package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.js +144 -0
  27. package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.js.map +1 -0
  28. package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.d.ts +1 -0
  29. package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.js +155 -0
  30. package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.js.map +1 -0
  31. package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.d.ts +1 -0
  32. package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.js +347 -0
  33. package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.js.map +1 -0
  34. package/dist/__tests__/environment-variable/environment-variable-validation.test.d.ts +1 -0
  35. package/dist/__tests__/environment-variable/environment-variable-validation.test.js +20 -0
  36. package/dist/__tests__/environment-variable/environment-variable-validation.test.js.map +1 -0
  37. package/dist/__tests__/fixtures/demo-project/index.js +1 -1
  38. package/dist/__tests__/fixtures/demo-project/index.js.map +1 -1
  39. package/dist/__tests__/git-flags.e2e.test.d.ts +1 -0
  40. package/dist/__tests__/git-flags.e2e.test.js +129 -0
  41. package/dist/__tests__/git-flags.e2e.test.js.map +1 -0
  42. package/dist/__tests__/git.e2e.test.js +25 -17
  43. package/dist/__tests__/git.e2e.test.js.map +1 -1
  44. package/dist/__tests__/link.e2e.test.d.ts +1 -0
  45. package/dist/__tests__/link.e2e.test.js +284 -0
  46. package/dist/__tests__/link.e2e.test.js.map +1 -0
  47. package/dist/__tests__/logs.e2e.test.d.ts +1 -0
  48. package/dist/__tests__/logs.e2e.test.js +231 -0
  49. package/dist/__tests__/logs.e2e.test.js.map +1 -0
  50. package/dist/__tests__/mock-server.d.ts +23 -0
  51. package/dist/__tests__/mock-server.js +330 -21
  52. package/dist/__tests__/mock-server.js.map +1 -1
  53. package/dist/__tests__/publish.e2e.test.d.ts +1 -0
  54. package/dist/__tests__/publish.e2e.test.js +510 -0
  55. package/dist/__tests__/publish.e2e.test.js.map +1 -0
  56. package/dist/__tests__/tunnel.e2e.test.d.ts +1 -0
  57. package/dist/__tests__/tunnel.e2e.test.js +66 -0
  58. package/dist/__tests__/tunnel.e2e.test.js.map +1 -0
  59. package/dist/__tests__/utils.d.ts +17 -5
  60. package/dist/__tests__/utils.js +118 -24
  61. package/dist/__tests__/utils.js.map +1 -1
  62. package/dist/api.d.ts +1 -1
  63. package/dist/api.js +10 -3
  64. package/dist/api.js.map +1 -1
  65. package/dist/commands/audit.d.ts +14 -0
  66. package/dist/commands/audit.js +49 -0
  67. package/dist/commands/audit.js.map +1 -0
  68. package/dist/commands/deploy.d.ts +8 -2
  69. package/dist/commands/deploy.js +64 -25
  70. package/dist/commands/deploy.js.map +1 -1
  71. package/dist/commands/deployment/inspect.d.ts +11 -0
  72. package/dist/commands/deployment/inspect.js +91 -0
  73. package/dist/commands/deployment/inspect.js.map +1 -0
  74. package/dist/commands/deployment/list.d.ts +11 -0
  75. package/dist/commands/deployment/list.js +97 -0
  76. package/dist/commands/deployment/list.js.map +1 -0
  77. package/dist/commands/deployment/logs.d.ts +12 -0
  78. package/dist/commands/deployment/logs.js +50 -0
  79. package/dist/commands/deployment/logs.js.map +1 -0
  80. package/dist/commands/environment-variable/add.d.ts +14 -0
  81. package/dist/commands/environment-variable/add.js +47 -0
  82. package/dist/commands/environment-variable/add.js.map +1 -0
  83. package/dist/commands/environment-variable/list.d.ts +9 -0
  84. package/dist/commands/environment-variable/list.js +45 -0
  85. package/dist/commands/environment-variable/list.js.map +1 -0
  86. package/dist/commands/environment-variable/remove.d.ts +11 -0
  87. package/dist/commands/environment-variable/remove.js +33 -0
  88. package/dist/commands/environment-variable/remove.js.map +1 -0
  89. package/dist/commands/environment-variable/update.d.ts +13 -0
  90. package/dist/commands/environment-variable/update.js +41 -0
  91. package/dist/commands/environment-variable/update.js.map +1 -0
  92. package/dist/commands/git/connect.d.ts +3 -2
  93. package/dist/commands/git/connect.js +29 -28
  94. package/dist/commands/git/connect.js.map +1 -1
  95. package/dist/commands/git/disconnect.d.ts +2 -2
  96. package/dist/commands/git/disconnect.js +20 -26
  97. package/dist/commands/git/disconnect.js.map +1 -1
  98. package/dist/commands/git.js +2 -2
  99. package/dist/commands/git.js.map +1 -1
  100. package/dist/commands/link.d.ts +17 -0
  101. package/dist/commands/link.js +101 -0
  102. package/dist/commands/link.js.map +1 -0
  103. package/dist/commands/login.js +4 -22
  104. package/dist/commands/login.js.map +1 -1
  105. package/dist/commands/logs.d.ts +16 -0
  106. package/dist/commands/logs.js +96 -0
  107. package/dist/commands/logs.js.map +1 -0
  108. package/dist/commands/publish.d.ts +15 -0
  109. package/dist/commands/publish.js +51 -0
  110. package/dist/commands/publish.js.map +1 -0
  111. package/dist/commands/tunnel.d.ts +10 -0
  112. package/dist/commands/tunnel.js +132 -0
  113. package/dist/commands/tunnel.js.map +1 -0
  114. package/dist/commands/whoami.js +2 -14
  115. package/dist/commands/whoami.js.map +1 -1
  116. package/dist/lib/alpic-command.d.ts +2 -0
  117. package/dist/lib/alpic-command.js +13 -5
  118. package/dist/lib/alpic-command.js.map +1 -1
  119. package/dist/lib/archive.d.ts +3 -3
  120. package/dist/lib/archive.js +21 -19
  121. package/dist/lib/archive.js.map +1 -1
  122. package/dist/lib/audit.d.ts +16 -0
  123. package/dist/lib/audit.js +245 -0
  124. package/dist/lib/audit.js.map +1 -0
  125. package/dist/lib/auth/auth.d.ts +3 -0
  126. package/dist/lib/auth/auth.js +23 -0
  127. package/dist/lib/auth/auth.js.map +1 -1
  128. package/dist/lib/auth/oauth/server/index.d.ts +2 -1
  129. package/dist/lib/auth/oauth/server/index.js +33 -7
  130. package/dist/lib/auth/oauth/server/index.js.map +1 -1
  131. package/dist/lib/auth/whoami.d.ts +1 -28
  132. package/dist/lib/auth/whoami.js +27 -17
  133. package/dist/lib/auth/whoami.js.map +1 -1
  134. package/dist/lib/base-workflow.d.ts +10 -0
  135. package/dist/lib/base-workflow.js +22 -0
  136. package/dist/lib/base-workflow.js.map +1 -0
  137. package/dist/lib/config.d.ts +3 -2
  138. package/dist/lib/config.js +8 -7
  139. package/dist/lib/config.js.map +1 -1
  140. package/dist/lib/deployment.d.ts +69 -1
  141. package/dist/lib/deployment.js +113 -5
  142. package/dist/lib/deployment.js.map +1 -1
  143. package/dist/lib/environment-variable.d.ts +37 -0
  144. package/dist/lib/environment-variable.js +299 -0
  145. package/dist/lib/environment-variable.js.map +1 -0
  146. package/dist/lib/git.d.ts +12 -4
  147. package/dist/lib/git.js +52 -26
  148. package/dist/lib/git.js.map +1 -1
  149. package/dist/lib/global-store.d.ts +1 -1
  150. package/dist/lib/global-store.js +4 -3
  151. package/dist/lib/global-store.js.map +1 -1
  152. package/dist/lib/link.d.ts +83 -0
  153. package/dist/lib/link.js +387 -0
  154. package/dist/lib/link.js.map +1 -0
  155. package/dist/lib/logs.d.ts +20 -0
  156. package/dist/lib/logs.js +87 -0
  157. package/dist/lib/logs.js.map +1 -0
  158. package/dist/lib/publish.d.ts +22 -0
  159. package/dist/lib/publish.js +185 -0
  160. package/dist/lib/publish.js.map +1 -0
  161. package/dist/lib/resolve.d.ts +6 -0
  162. package/dist/lib/resolve.js +26 -0
  163. package/dist/lib/resolve.js.map +1 -0
  164. package/dist/lib/table.d.ts +8 -0
  165. package/dist/lib/table.js +27 -0
  166. package/dist/lib/table.js.map +1 -0
  167. package/dist/lib/telemetry.js +1 -1
  168. package/dist/lib/telemetry.js.map +1 -1
  169. package/dist/lib/utils.d.ts +5 -0
  170. package/dist/lib/utils.js +53 -0
  171. package/dist/lib/utils.js.map +1 -0
  172. package/dist/lib/utils.test.d.ts +1 -0
  173. package/dist/lib/utils.test.js +27 -0
  174. package/dist/lib/utils.test.js.map +1 -0
  175. package/dist/types.d.ts +1 -0
  176. package/package.json +27 -20
  177. package/dist/lib/project.d.ts +0 -67
  178. package/dist/lib/project.js +0 -285
  179. package/dist/lib/project.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/lib/auth/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,MAAM,WAAW,CAAC,mBAAmB,EAAE,CAAC,EAAE,YAAY,CAAC;IAEnG,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,wBAAwB,GAAG,SAAS,EAAE,CAAC;IAC7C,IAAI,wBAAwB;QAAE,OAAO,IAAI,CAAC;IAC1C,MAAM,uBAAuB,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAC5D,IAAI,uBAAuB;QAAE,OAAO,IAAI,CAAC;IAEzC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC;AACjD,CAAC;AAED,KAAK,UAAU,mBAAmB;IAChC,OAAO,CAAC,MAAM,WAAW,CAAC,mBAAmB,EAAE,CAAC,KAAK,IAAI,CAAC;AAC5D,CAAC"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/lib/auth/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEjF,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,MAAM,WAAW,CAAC,mBAAmB,EAAE,CAAC,EAAE,YAAY,CAAC;IAEnG,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,wBAAwB,GAAG,SAAS,EAAE,CAAC;IAC7C,IAAI,wBAAwB;QAAE,OAAO,IAAI,CAAC;IAC1C,MAAM,uBAAuB,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAC5D,IAAI,uBAAuB;QAAE,OAAO,IAAI,CAAC;IAEzC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC;AACjD,CAAC;AAED,KAAK,UAAU,mBAAmB;IAChC,OAAO,CAAC,MAAM,WAAW,CAAC,mBAAmB,EAAE,CAAC,KAAK,IAAI,CAAC;AAC5D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAA4B;IAC3D,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,WAAW,CAAC,kBAAkB,EAAE,CAAC;IAE5F,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAC;IACnC,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,8BAA8B,QAAQ,EAAE,CAAC,CAAC;IACxD,CAAC;SAAM,CAAC;QACN,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,8EAA8E,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACtH,CAAC;IACD,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;IAErB,MAAM,WAAW,GAAG,MAAM,qBAAqB,CAAC;QAC9C,KAAK;QACL,KAAK;QACL,YAAY;QACZ,YAAY,EAAE,YAAY,CAAC,QAAQ,EAAE;KACtC,CAAC,CAAC;IAEH,WAAW,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;AAC3C,CAAC"}
@@ -1,8 +1,9 @@
1
1
  import type { Credentials } from "../../../global-store.js";
2
2
  export declare const getLoginPageUrl: () => string;
3
- export declare const listenToOAuthCallback: ({ state, nonce, codeVerifier, authorizeUrl, }: {
3
+ export declare const listenToOAuthCallback: ({ state, nonce, codeVerifier, authorizeUrl, isPlain, }: {
4
4
  state: string;
5
5
  nonce: string;
6
6
  codeVerifier: string;
7
7
  authorizeUrl?: string;
8
+ isPlain?: boolean;
8
9
  }) => Promise<Credentials>;
@@ -1,13 +1,13 @@
1
- import * as p from "@clack/prompts";
2
1
  import { readFile } from "node:fs/promises";
3
2
  import { createServer } from "node:http";
4
3
  import path from "node:path";
5
4
  import { fileURLToPath } from "node:url";
5
+ import * as p from "@clack/prompts";
6
6
  import { oAuthClient } from "../client.js";
7
7
  import { LOOPBACK_HOST, LOOPBACK_PORT } from "../constants.js";
8
8
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
9
9
  const ASSETS_DIR = path.join(__dirname, "assets");
10
- const createCallbackServer = ({ state, nonce, codeVerifier, authorizeUrl, onSuccess, onError, }) => createServer(async (req, res) => {
10
+ const createCallbackServer = ({ state, nonce, codeVerifier, authorizeUrl, onSuccess, onError, isPlain, }) => createServer(async (req, res) => {
11
11
  const url = req.url ?? "/";
12
12
  const pathname = url.split("?")[0] ?? "/";
13
13
  if (pathname === "/login") {
@@ -17,12 +17,16 @@ const createCallbackServer = ({ state, nonce, codeVerifier, authorizeUrl, onSucc
17
17
  if (authorizeUrl) {
18
18
  html = html.replace(/%AUTH_BASE_URL%/g, authorizeUrl);
19
19
  }
20
- res.writeHead(200, { "Content-Type": "text/html", Connection: "close" });
20
+ res.writeHead(200, {
21
+ "Content-Type": "text/html",
22
+ Connection: "close",
23
+ });
21
24
  res.end(html);
22
25
  return;
23
26
  }
24
27
  catch (e) {
25
- p.log.error(e instanceof Error ? e.message : String(e));
28
+ const msg = e instanceof Error ? e.message : String(e);
29
+ isPlain ? console.error(msg) : p.log.error(msg);
26
30
  res.writeHead(500).end();
27
31
  return;
28
32
  }
@@ -55,7 +59,8 @@ const createCallbackServer = ({ state, nonce, codeVerifier, authorizeUrl, onSucc
55
59
  expires_at: oAuthClient.getExpiresAt(tokens.expires_in ?? 0),
56
60
  sub,
57
61
  };
58
- p.log.success("Authentication successful");
62
+ const msg = "Authentication successful";
63
+ isPlain ? console.log(msg) : p.log.success(`✅ ${msg}`);
59
64
  const successHtmlPath = path.join(ASSETS_DIR, "callback.html");
60
65
  let html = await readFile(successHtmlPath, "utf-8");
61
66
  html = html
@@ -67,7 +72,8 @@ const createCallbackServer = ({ state, nonce, codeVerifier, authorizeUrl, onSucc
67
72
  onSuccess(stored);
68
73
  }
69
74
  catch (e) {
70
- p.log.error(e instanceof Error ? e.message : String(e));
75
+ const msg = e instanceof Error ? e.message : String(e);
76
+ isPlain ? console.error(msg) : p.log.error(msg);
71
77
  const callbackHtmlPath = path.join(ASSETS_DIR, "callback.html");
72
78
  let html = await readFile(callbackHtmlPath, "utf-8");
73
79
  html = html
@@ -80,22 +86,42 @@ const createCallbackServer = ({ state, nonce, codeVerifier, authorizeUrl, onSucc
80
86
  }
81
87
  });
82
88
  export const getLoginPageUrl = () => `http://${LOOPBACK_HOST}:${LOOPBACK_PORT}/login`;
83
- export const listenToOAuthCallback = ({ state, nonce, codeVerifier, authorizeUrl, }) => {
89
+ const LOGIN_TIMEOUT_MS = 5 * 60 * 1000;
90
+ export const listenToOAuthCallback = ({ state, nonce, codeVerifier, authorizeUrl, isPlain, }) => {
84
91
  return new Promise((resolve, reject) => {
92
+ let timeoutHandle;
85
93
  const callbackServer = createCallbackServer({
86
94
  state,
87
95
  nonce,
88
96
  codeVerifier,
89
97
  authorizeUrl,
98
+ isPlain,
90
99
  onSuccess: (storedToken) => {
100
+ clearTimeout(timeoutHandle);
91
101
  callbackServer.close();
92
102
  resolve(storedToken);
93
103
  },
94
104
  onError: (err) => {
105
+ clearTimeout(timeoutHandle);
95
106
  callbackServer.close();
96
107
  reject(err);
97
108
  },
98
109
  });
110
+ callbackServer.on("error", (err) => {
111
+ clearTimeout(timeoutHandle);
112
+ callbackServer.close();
113
+ if (err.code === "EADDRINUSE") {
114
+ reject(new Error(`Port ${LOOPBACK_PORT} is already in use. Another login may be in progress. Please try again.`));
115
+ }
116
+ else {
117
+ reject(err);
118
+ }
119
+ });
120
+ timeoutHandle = setTimeout(() => {
121
+ callbackServer.close();
122
+ reject(new Error("Login timed out after 5 minutes. Please try again."));
123
+ }, LOGIN_TIMEOUT_MS);
124
+ timeoutHandle.unref();
99
125
  callbackServer.listen(LOOPBACK_PORT, LOOPBACK_HOST);
100
126
  });
101
127
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/lib/auth/oauth/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAA6C,YAAY,EAAE,MAAM,WAAW,CAAC;AACpF,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAE/D,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAElD,MAAM,oBAAoB,GAAG,CAAC,EAC5B,KAAK,EACL,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,OAAO,GAQR,EAAE,EAAE,CACH,YAAY,CAAC,KAAK,EAAE,GAAoB,EAAE,GAAmB,EAAE,EAAE;IAC/D,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC;IAC3B,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;IAE1C,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;YACzD,IAAI,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC7C,IAAI,YAAY,EAAE,CAAC;gBACjB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC;YACxD,CAAC;YACD,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;YACzE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACd,OAAO;QACT,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACxD,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,KAAK,4BAA4B,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;QACzE,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjB,OAAO;IACT,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QACjC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QACzB,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,yBAAyB,CAAC;YACzD,GAAG,EAAE,IAAI,GAAG,CAAC,GAAG,EAAE,UAAU,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAC/C,YAAY;YACZ,KAAK;YACL,KAAK;SACN,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC;QACjC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;QACD,MAAM,MAAM,GAAgB;YAC1B,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,UAAU,EAAE,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;YAC5D,GAAG;SACJ,CAAC;QACF,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;QAC7C,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QAC/D,IAAI,IAAI,GAAG,MAAM,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QACpD,IAAI,GAAG,IAAI;aACR,OAAO,CAAC,sBAAsB,EAAE,SAAS,CAAC;aAC1C,OAAO,CAAC,qBAAqB,EAAE,mBAAmB,CAAC;aACnD,OAAO,CAAC,mBAAmB,EAAE,0BAA0B,CAAC,CAAC;QAC5D,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;QACzE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACd,SAAS,CAAC,MAAM,CAAC,CAAC;IACpB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QAChE,IAAI,IAAI,GAAG,MAAM,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QACrD,IAAI,GAAG,IAAI;aACR,OAAO,CAAC,sBAAsB,EAAE,OAAO,CAAC;aACxC,OAAO,CAAC,qBAAqB,EAAE,6CAA6C,CAAC;aAC7E,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;QACpC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;QACzE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACd,OAAO,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,EAAE,CAAC,UAAU,aAAa,IAAI,aAAa,QAAQ,CAAC;AAEtF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,EACpC,KAAK,EACL,KAAK,EACL,YAAY,EACZ,YAAY,GAMb,EAAE,EAAE;IACH,OAAO,IAAI,OAAO,CAAc,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAClD,MAAM,cAAc,GAAG,oBAAoB,CAAC;YAC1C,KAAK;YACL,KAAK;YACL,YAAY;YACZ,YAAY;YACZ,SAAS,EAAE,CAAC,WAAW,EAAE,EAAE;gBACzB,cAAc,CAAC,KAAK,EAAE,CAAC;gBACvB,OAAO,CAAC,WAAW,CAAC,CAAC;YACvB,CAAC;YACD,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACf,cAAc,CAAC,KAAK,EAAE,CAAC;gBACvB,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC;SACF,CAAC,CAAC;QACH,cAAc,CAAC,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/lib/auth/oauth/server/index.ts"],"names":[],"mappings":"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"}
@@ -1,28 +1 @@
1
- export type WhoamiInfo = {
2
- method: "api_key";
3
- team: {
4
- id: string;
5
- name: string;
6
- };
7
- } | {
8
- method: "oauth";
9
- email: string;
10
- name: string;
11
- } | null;
12
- export declare function getWhoamiInfo(): Promise<{
13
- method: string;
14
- team: {
15
- id: string;
16
- name: string;
17
- createdAt: Date;
18
- hasStripeAccount: boolean;
19
- hasActiveSubscription: boolean;
20
- } | undefined;
21
- email?: undefined;
22
- name?: undefined;
23
- } | {
24
- method: string;
25
- email: string | undefined;
26
- name: string | undefined;
27
- team?: undefined;
28
- } | null>;
1
+ export declare function getWhoamiInfoMessage(): Promise<string>;
@@ -1,33 +1,43 @@
1
+ import chalk from "chalk";
1
2
  import { api } from "../../api.js";
2
3
  import { oAuthClient } from "./oauth/client.js";
3
- export async function getWhoamiInfo() {
4
- if (process.env.ALPIC_API_KEY !== undefined) {
5
- const team = await getApiKeyTeam();
6
- return {
7
- method: "api_key",
8
- team,
9
- };
4
+ export async function getWhoamiInfoMessage() {
5
+ const info = (await getWhoamiInfoFromApiKey()) ?? (await getWhoamiInfoFromOAuth());
6
+ if (info === null) {
7
+ return "Not logged in. Run `alpic login` or set ALPIC_API_KEY.";
10
8
  }
9
+ if (info.method === "api_key") {
10
+ return `Authenticated via API key — Team: ${chalk.green(info.team?.name ?? "unknown")}`;
11
+ }
12
+ let label = chalk.cyan(info.email);
13
+ if (info.name) {
14
+ label = `${chalk.green(info.name)} (${label})`;
15
+ }
16
+ return `Authenticated as ${label}`;
17
+ }
18
+ async function getWhoamiInfoFromApiKey() {
19
+ if (process.env.ALPIC_API_KEY === undefined) {
20
+ return null;
21
+ }
22
+ const team = await getApiKeyTeam();
23
+ return {
24
+ method: "api_key",
25
+ team,
26
+ };
27
+ }
28
+ async function getWhoamiInfoFromOAuth() {
11
29
  const token = await oAuthClient.getValidAccessToken();
12
30
  if (!token)
13
31
  return null;
14
- const userInfo = await fetchOAuthUserInfo(token);
32
+ const userInfo = await oAuthClient.fetchUserInfo(token);
15
33
  if (!userInfo)
16
34
  return null;
17
35
  return {
18
36
  method: "oauth",
19
- email: userInfo.email,
37
+ email: userInfo.email ?? "unknown",
20
38
  name: userInfo.name,
21
39
  };
22
40
  }
23
- async function fetchOAuthUserInfo(credentials) {
24
- try {
25
- return await oAuthClient.fetchUserInfo(credentials);
26
- }
27
- catch {
28
- return null;
29
- }
30
- }
31
41
  async function getApiKeyTeam() {
32
42
  const teams = await api.teams.list.v1();
33
43
  return teams[0];
@@ -1 +1 @@
1
- {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../../src/lib/auth/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAEnC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAOhD,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,MAAM,aAAa,EAAE,CAAC;QACnC,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,IAAI;SACL,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,mBAAmB,EAAE,CAAC;IACtD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACjD,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,OAAO;QACL,MAAM,EAAE,OAAO;QACf,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,IAAI,EAAE,QAAQ,CAAC,IAAI;KACpB,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,WAAwB;IACxD,IAAI,CAAC;QACH,OAAO,MAAM,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa;IAC1B,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;IACxC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../../src/lib/auth/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAahD,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,MAAM,IAAI,GAAG,CAAC,MAAM,uBAAuB,EAAE,CAAC,IAAI,CAAC,MAAM,sBAAsB,EAAE,CAAC,CAAC;IAEnF,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO,wDAAwD,CAAC;IAClE,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,qCAAqC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,SAAS,CAAC,EAAE,CAAC;IAC1F,CAAC;IAED,IAAI,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,KAAK,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,GAAG,CAAC;IACjD,CAAC;IAED,OAAO,oBAAoB,KAAK,EAAE,CAAC;AACrC,CAAC;AAED,KAAK,UAAU,uBAAuB;IACpC,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,aAAa,EAAE,CAAC;IACnC,OAAO;QACL,MAAM,EAAE,SAAS;QACjB,IAAI;KACL,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,sBAAsB;IACnC,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,mBAAmB,EAAE,CAAC;IACtD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACxD,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,OAAO;QACL,MAAM,EAAE,OAAO;QACf,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,SAAS;QAClC,IAAI,EAAE,QAAQ,CAAC,IAAI;KACpB,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,aAAa;IAC1B,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;IACxC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import * as p from "@clack/prompts";
2
+ export type Flags = {
3
+ "non-interactive"?: boolean;
4
+ };
5
+ export declare abstract class BaseWorkflow<F extends Flags = Flags> {
6
+ readonly flags: F;
7
+ constructor(flags: F);
8
+ protected confirm(options: p.ConfirmOptions, defaultValue?: boolean): Promise<boolean | symbol>;
9
+ protected isNonInteractive(): boolean;
10
+ }
@@ -0,0 +1,22 @@
1
+ import * as p from "@clack/prompts";
2
+ import * as ci from "ci-info";
3
+ export class BaseWorkflow {
4
+ flags;
5
+ constructor(flags) {
6
+ this.flags = flags;
7
+ }
8
+ confirm(options, defaultValue = true) {
9
+ if (this.isNonInteractive()) {
10
+ return Promise.resolve(defaultValue);
11
+ }
12
+ return p.confirm(options);
13
+ }
14
+ isNonInteractive() {
15
+ if (this.flags["non-interactive"])
16
+ return true;
17
+ if (process.env.VITEST)
18
+ return false;
19
+ return ci.isCI ?? false;
20
+ }
21
+ }
22
+ //# sourceMappingURL=base-workflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-workflow.js","sourceRoot":"","sources":["../../src/lib/base-workflow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAM9B,MAAM,OAAgB,YAAY;IACJ;IAA5B,YAA4B,KAAQ;QAAR,UAAK,GAAL,KAAK,CAAG;IAAG,CAAC;IAE9B,OAAO,CAAC,OAAyB,EAAE,eAAwB,IAAI;QACvE,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;YAC5B,OAAO,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAES,gBAAgB;QACxB,IAAI,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;YAAE,OAAO,IAAI,CAAC;QAC/C,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAErC,OAAO,EAAE,CAAC,IAAI,IAAI,KAAK,CAAC;IAC1B,CAAC;CACF"}
@@ -1,11 +1,12 @@
1
1
  import type { ProjectConfig } from "../types.js";
2
2
  export declare const config: {
3
- load: (deployDir: string) => {
3
+ load: () => {
4
4
  projectId: string;
5
5
  teamId: string;
6
+ teamName: string | undefined;
6
7
  projectName: string;
7
8
  environmentId: string | undefined;
8
9
  environmentName: string | undefined;
9
10
  } | null;
10
- save: (config: ProjectConfig, deployDir: string) => void;
11
+ save: (projectConfig: ProjectConfig) => void;
11
12
  };
@@ -1,9 +1,9 @@
1
1
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
2
  import { join } from "node:path";
3
- const getProjectJsonPath = (deployDir) => join(deployDir, ".alpic", "project.json");
3
+ const getProjectJsonPath = () => join(process.cwd(), ".alpic", "project.json");
4
4
  export const config = {
5
- load: (deployDir) => {
6
- const path = getProjectJsonPath(deployDir);
5
+ load: () => {
6
+ const path = getProjectJsonPath();
7
7
  if (!existsSync(path)) {
8
8
  return null;
9
9
  }
@@ -17,15 +17,16 @@ export const config = {
17
17
  return {
18
18
  projectId: raw.projectId,
19
19
  teamId: raw.teamId,
20
+ teamName: raw.teamName,
20
21
  projectName: raw.projectName ?? raw.projectId,
21
22
  environmentId: raw.environmentId,
22
23
  environmentName: raw.environmentName,
23
24
  };
24
25
  },
25
- save: (config, deployDir) => {
26
- const path = getProjectJsonPath(deployDir);
27
- mkdirSync(join(deployDir, ".alpic"), { recursive: true });
28
- writeFileSync(path, JSON.stringify(config, null, 2));
26
+ save: (projectConfig) => {
27
+ const path = getProjectJsonPath();
28
+ mkdirSync(join(process.cwd(), ".alpic"), { recursive: true });
29
+ writeFileSync(path, JSON.stringify(projectConfig, null, 2));
29
30
  },
30
31
  };
31
32
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAIjC,MAAM,kBAAkB,GAAG,CAAC,SAAiB,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;AAE5F,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,EAAE,CAAC,SAAiB,EAAE,EAAE;QAC1B,MAAM,IAAI,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,GAAmE,CAAC;QACxE,IAAI,CAAC;YACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAG1C,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,kCAAmC,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAChF,CAAC;QACD,OAAO;YACL,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,SAAS;YAC7C,aAAa,EAAE,GAAG,CAAC,aAAa;YAChC,eAAe,EAAE,GAAG,CAAC,eAAe;SACrC,CAAC;IACJ,CAAC;IACD,IAAI,EAAE,CAAC,MAAqB,EAAE,SAAiB,EAAE,EAAE;QACjD,MAAM,IAAI,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC3C,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACvD,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAIjC,MAAM,kBAAkB,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;AAE/E,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,EAAE,GAAG,EAAE;QACT,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;QAClC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,GAAmE,CAAC;QACxE,IAAI,CAAC;YACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAG1C,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,kCAAmC,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAChF,CAAC;QACD,OAAO;YACL,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,SAAS;YAC7C,aAAa,EAAE,GAAG,CAAC,aAAa;YAChC,eAAe,EAAE,GAAG,CAAC,eAAe;SACrC,CAAC;IACJ,CAAC;IACD,IAAI,EAAE,CAAC,aAA4B,EAAE,EAAE;QACrC,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;QAClC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9D,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;CACF,CAAC"}
@@ -1,12 +1,76 @@
1
1
  import type { RouterOutput } from "@alpic-ai/api";
2
+ export declare const colorizeDeploymentStatus: (text: string) => import("chalk").ChalkInstance | ((value: string) => string);
2
3
  export declare function formatElapsed(ms: number): string;
4
+ export declare function calculateDeploymentDuration(deployment: {
5
+ startedAt?: Date | null;
6
+ completedAt?: Date | null;
7
+ }): number | null;
8
+ export declare function fetchDeployment(deploymentId: string): Promise<{
9
+ id: string;
10
+ status: "failed" | "ongoing" | "deployed" | "canceled";
11
+ sourceRef: string | null;
12
+ sourceCommitId: string | null;
13
+ sourceCommitMessage: string | null;
14
+ authorUsername: string | null;
15
+ authorAvatarUrl: string | null;
16
+ startedAt: Date | null;
17
+ completedAt: Date | null;
18
+ environmentId: string;
19
+ environmentName: string;
20
+ isCurrent: boolean;
21
+ deploymentPageUrl: string | null;
22
+ }>;
23
+ export declare function fetchLatestDeploymentForEnvironment(environmentId: string): Promise<{
24
+ id: string;
25
+ status: "failed" | "ongoing" | "deployed" | "canceled";
26
+ sourceRef: string | null;
27
+ sourceCommitId: string | null;
28
+ sourceCommitMessage: string | null;
29
+ authorUsername: string | null;
30
+ authorAvatarUrl: string | null;
31
+ startedAt: Date | null;
32
+ completedAt: Date | null;
33
+ environmentId: string;
34
+ environmentName: string;
35
+ isCurrent: boolean;
36
+ deploymentPageUrl: string | null;
37
+ }>;
38
+ export declare function resolveDeploymentId(flags: {
39
+ "deployment-id"?: string;
40
+ "environment-id"?: string;
41
+ }): Promise<string>;
42
+ export declare function waitForDeployment(deployment: RouterOutput["deployments"]["get"]["v1"]): Promise<{
43
+ id: string;
44
+ status: "failed" | "ongoing" | "deployed" | "canceled";
45
+ sourceRef: string | null;
46
+ sourceCommitId: string | null;
47
+ sourceCommitMessage: string | null;
48
+ authorUsername: string | null;
49
+ authorAvatarUrl: string | null;
50
+ startedAt: Date | null;
51
+ completedAt: Date | null;
52
+ environmentId: string;
53
+ environmentName: string;
54
+ isCurrent: boolean;
55
+ deploymentPageUrl: string | null;
56
+ }>;
57
+ type DeploymentLogEntry = {
58
+ timestamp?: Date;
59
+ content?: string;
60
+ };
61
+ export declare function printDeploymentLog(log: DeploymentLogEntry, { noColor }?: {
62
+ noColor?: boolean;
63
+ }): void;
64
+ export declare function followDeploymentLogs(deploymentId: string, initialLogs: DeploymentLogEntry[], { noColor }?: {
65
+ noColor?: boolean;
66
+ }): Promise<void>;
3
67
  export declare function deployAndWait({ initial, startedAt, }: {
4
68
  initial: RouterOutput["deployments"]["get"]["v1"];
5
69
  startedAt: number;
6
70
  }): Promise<{
7
71
  deployment: {
8
72
  id: string;
9
- status: "ongoing" | "deployed" | "failed" | "canceled";
73
+ status: "failed" | "ongoing" | "deployed" | "canceled";
10
74
  sourceRef: string | null;
11
75
  sourceCommitId: string | null;
12
76
  sourceCommitMessage: string | null;
@@ -14,7 +78,11 @@ export declare function deployAndWait({ initial, startedAt, }: {
14
78
  authorAvatarUrl: string | null;
15
79
  startedAt: Date | null;
16
80
  completedAt: Date | null;
81
+ environmentId: string;
82
+ environmentName: string;
83
+ isCurrent: boolean;
17
84
  deploymentPageUrl: string | null;
18
85
  };
19
86
  elapsedMs: number;
20
87
  }>;
88
+ export {};
@@ -1,22 +1,128 @@
1
+ import { stripVTControlCharacters } from "node:util";
1
2
  import * as p from "@clack/prompts";
2
3
  import chalk from "chalk";
3
4
  import { api } from "../api.js";
4
- import { env } from "../env.js";
5
+ import { formatLogTimestamp } from "./logs.js";
6
+ import { resolveEnvironmentId } from "./resolve.js";
7
+ import { pollIntervalMs } from "./utils.js";
8
+ export const colorizeDeploymentStatus = (text) => {
9
+ switch (text) {
10
+ case "deployed":
11
+ return chalk.green;
12
+ case "ongoing":
13
+ return chalk.yellow;
14
+ case "failed":
15
+ return chalk.red;
16
+ case "canceled":
17
+ return chalk.gray;
18
+ default:
19
+ return (value) => value;
20
+ }
21
+ };
22
+ const FINAL_STATUSES = new Set(["deployed", "failed", "canceled"]);
23
+ const FIFTEEN_MINUTES_IN_MS = 15 * 60 * 1000;
5
24
  export function formatElapsed(ms) {
6
25
  const totalSeconds = Math.floor(ms / 1000);
7
26
  const minutes = Math.floor(totalSeconds / 60);
8
27
  const seconds = totalSeconds % 60;
9
28
  return minutes > 0 ? `${minutes}m ${seconds}s` : `${seconds}s`;
10
29
  }
30
+ export function calculateDeploymentDuration(deployment) {
31
+ if (!deployment.startedAt || !deployment.completedAt) {
32
+ return null;
33
+ }
34
+ return deployment.completedAt.getTime() - deployment.startedAt.getTime();
35
+ }
36
+ export async function fetchDeployment(deploymentId) {
37
+ const spinner = p.spinner();
38
+ spinner.start("Fetching deployment...");
39
+ const deployment = await api.deployments.get.v1({ deploymentId });
40
+ spinner.stop("Deployment found");
41
+ return deployment;
42
+ }
43
+ export async function fetchLatestDeploymentForEnvironment(environmentId) {
44
+ const spinner = p.spinner();
45
+ spinner.start("Fetching latest deployment...");
46
+ const environment = await api.environments.get.v1({ environmentId });
47
+ const deployments = await api.deployments.list.v1({
48
+ projectId: environment.projectId,
49
+ environmentId,
50
+ });
51
+ const latest = deployments[0];
52
+ if (!latest) {
53
+ spinner.stop("No deployments found");
54
+ throw new Error(`No deployments found for environment ${environmentId}.`);
55
+ }
56
+ spinner.stop("Deployment found");
57
+ return latest;
58
+ }
59
+ export async function resolveDeploymentId(flags) {
60
+ if (flags["deployment-id"]) {
61
+ return flags["deployment-id"];
62
+ }
63
+ const environmentId = resolveEnvironmentId(flags);
64
+ const deployment = await fetchLatestDeploymentForEnvironment(environmentId);
65
+ return deployment.id;
66
+ }
67
+ export async function waitForDeployment(deployment) {
68
+ if (FINAL_STATUSES.has(deployment.status)) {
69
+ return deployment;
70
+ }
71
+ const startedAt = deployment.startedAt?.getTime() ?? Date.now();
72
+ const waitStartedAt = Date.now();
73
+ let current = deployment;
74
+ const spinner = p.spinner();
75
+ spinner.start("Waiting for deployment to complete");
76
+ const elapsedInterval = setInterval(() => {
77
+ spinner.message(`Waiting for deployment to complete — ${formatElapsed(Date.now() - startedAt)}`);
78
+ }, 1000);
79
+ try {
80
+ while (!FINAL_STATUSES.has(current.status)) {
81
+ if (Date.now() - waitStartedAt >= FIFTEEN_MINUTES_IN_MS) {
82
+ throw new Error("Deployment did not reach a final state within 15 minutes.");
83
+ }
84
+ current = await api.deployments.get.v1({ deploymentId: current.id });
85
+ if (!FINAL_STATUSES.has(current.status)) {
86
+ await new Promise((resolve) => setTimeout(resolve, pollIntervalMs(3_000)));
87
+ }
88
+ }
89
+ spinner.stop(`Deployment is ${colorizeDeploymentStatus(current.status)(current.status)}`);
90
+ return current;
91
+ }
92
+ finally {
93
+ clearInterval(elapsedInterval);
94
+ }
95
+ }
96
+ const DEPLOYMENT_LOG_POLL_INTERVAL_MS = pollIntervalMs(5_000);
97
+ export function printDeploymentLog(log, { noColor = false } = {}) {
98
+ const ts = formatLogTimestamp(log.timestamp, noColor);
99
+ const rawContent = (log.content ?? "").trimEnd();
100
+ const content = noColor ? stripVTControlCharacters(rawContent) : rawContent;
101
+ process.stdout.write(`${ts} ${content}\n`);
102
+ }
103
+ export async function followDeploymentLogs(deploymentId, initialLogs, { noColor = false } = {}) {
104
+ let printedCount = initialLogs.length;
105
+ while (true) {
106
+ await new Promise((resolve) => setTimeout(resolve, DEPLOYMENT_LOG_POLL_INTERVAL_MS));
107
+ const result = await api.deployments.getLogs.v1({ deploymentId });
108
+ for (const log of result.logs.slice(printedCount)) {
109
+ printDeploymentLog(log, { noColor });
110
+ }
111
+ printedCount = result.logs.length;
112
+ if (!result.hasMoreLogs)
113
+ break;
114
+ }
115
+ }
11
116
  export async function deployAndWait({ initial, startedAt, }) {
12
117
  const spinner = p.spinner();
13
118
  let deployment = initial;
14
119
  const deploymentPageUrl = deployment.deploymentPageUrl;
15
120
  if (deploymentPageUrl) {
16
- p.note(`🔗 ${deploymentPageUrl}`, "View deployment details:", { format: (line) => line });
121
+ p.note(`🔗 ${deploymentPageUrl}`, "View deployment details:", {
122
+ format: (line) => line,
123
+ });
17
124
  }
18
125
  spinner.start("Deployment in progress");
19
- const FIFTEEN_MINUTES_IN_MS = 15 * 60 * 1000; // 15 minutes
20
126
  const elapsedInterval = setInterval(() => {
21
127
  const elapsed = formatElapsed(Date.now() - startedAt);
22
128
  spinner.message(`Deployment in progress — ${elapsed}`);
@@ -27,9 +133,11 @@ export async function deployAndWait({ initial, startedAt, }) {
27
133
  if (elapsedMs >= FIFTEEN_MINUTES_IN_MS) {
28
134
  throw new Error(`Deployment aborted after 15 minutes. View status: ${deploymentPageUrl}`);
29
135
  }
30
- deployment = await api.deployments.get.v1({ deploymentId: deployment.id });
136
+ deployment = await api.deployments.get.v1({
137
+ deploymentId: deployment.id,
138
+ });
31
139
  if (deployment.status === "ongoing") {
32
- await new Promise((resolve) => setTimeout(resolve, 10_000));
140
+ await new Promise((resolve) => setTimeout(resolve, pollIntervalMs(10_000)));
33
141
  }
34
142
  }
35
143
  return { deployment, elapsedMs: Date.now() - startedAt };
@@ -1 +1 @@
1
- {"version":3,"file":"deployment.js","sourceRoot":"","sources":["../../src/lib/deployment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAEhC,MAAM,UAAU,aAAa,CAAC,EAAU;IACtC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,YAAY,GAAG,EAAE,CAAC;IAClC,OAAO,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,EAClC,OAAO,EACP,SAAS,GAIV;IACC,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;IAE5B,IAAI,UAAU,GAAG,OAAO,CAAC;IACzB,MAAM,iBAAiB,GAAG,UAAU,CAAC,iBAAiB,CAAC;IACvD,IAAI,iBAAiB,EAAE,CAAC;QACtB,CAAC,CAAC,IAAI,CAAC,MAAM,iBAAiB,EAAE,EAAE,0BAA0B,EAAE,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACxC,MAAM,qBAAqB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;IAC3D,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;QACvC,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC;QACtD,OAAO,CAAC,OAAO,CAAC,4BAA4B,OAAO,EAAE,CAAC,CAAC;IACzD,CAAC,EAAE,IAAI,CAAC,CAAC;IACT,IAAI,CAAC;QACH,OAAO,UAAU,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACvC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YACzC,IAAI,SAAS,IAAI,qBAAqB,EAAE,CAAC;gBACvC,MAAM,IAAI,KAAK,CAAC,qDAAqD,iBAAiB,EAAE,CAAC,CAAC;YAC5F,CAAC;YACD,UAAU,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3E,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACpC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QACD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC;IAC3D,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,GACX,UAAU,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QAC1G,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtB,aAAa,CAAC,eAAe,CAAC,CAAC;IACjC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"deployment.js","sourceRoot":"","sources":["../../src/lib/deployment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import { BaseWorkflow } from "./base-workflow.js";
2
+ export type EnvVar = {
3
+ key: string;
4
+ value: string;
5
+ isSecret: boolean;
6
+ };
7
+ export type EnvironmentVariableWorkflowFlags = {
8
+ "non-interactive"?: boolean;
9
+ key?: string;
10
+ value?: string;
11
+ secret?: boolean;
12
+ "env-file"?: string;
13
+ };
14
+ export declare function isValidEnvironmentVariableKey(key: string): boolean;
15
+ export declare function fetchEnvironmentVariables(environmentId: string): Promise<{
16
+ id: string;
17
+ key: string;
18
+ value: string;
19
+ isSecret: boolean;
20
+ createdAt: Date;
21
+ }[]>;
22
+ export declare class EnvironmentVariableWorkflow extends BaseWorkflow<EnvironmentVariableWorkflowFlags> {
23
+ protected isNonInteractive(): boolean;
24
+ add(environmentId: string): Promise<void>;
25
+ update(environmentId: string): Promise<void>;
26
+ remove(environmentId: string): Promise<void>;
27
+ private resolveEnvironmentVariablesForAdd;
28
+ private resolveAddKey;
29
+ private resolveAddValue;
30
+ private resolveAddSecret;
31
+ private resolveUpdateInput;
32
+ private resolveUpdateKey;
33
+ private resolveUpdateValue;
34
+ private resolveUpdateSecret;
35
+ private resolveRemoveKey;
36
+ private promptRemoveKey;
37
+ }