workos 0.0.24 → 0.1.0

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 (305) hide show
  1. package/.claude-plugin/plugin.json +13 -0
  2. package/LICENSE +47 -0
  3. package/README.md +154 -1
  4. package/dist/bin.d.ts +2 -0
  5. package/dist/bin.js +163 -0
  6. package/dist/bin.js.map +1 -0
  7. package/dist/cli.config.d.ts +52 -0
  8. package/dist/cli.config.js +70 -0
  9. package/dist/cli.config.js.map +1 -0
  10. package/dist/package.json +87 -0
  11. package/dist/src/commands/install-skill.d.ts +20 -0
  12. package/dist/src/commands/install-skill.js +130 -0
  13. package/dist/src/commands/install-skill.js.map +1 -0
  14. package/dist/src/commands/install.d.ts +22 -0
  15. package/dist/src/commands/install.js +57 -0
  16. package/dist/src/commands/install.js.map +1 -0
  17. package/dist/src/commands/login.d.ts +1 -0
  18. package/dist/src/commands/login.js +141 -0
  19. package/dist/src/commands/login.js.map +1 -0
  20. package/dist/src/commands/logout.d.ts +1 -0
  21. package/dist/src/commands/logout.js +17 -0
  22. package/dist/src/commands/logout.js.map +1 -0
  23. package/dist/src/dashboard/components/AnimatedLogo.d.ts +8 -0
  24. package/dist/src/dashboard/components/AnimatedLogo.js +16 -0
  25. package/dist/src/dashboard/components/AnimatedLogo.js.map +1 -0
  26. package/dist/src/dashboard/components/CompletionView.d.ts +13 -0
  27. package/dist/src/dashboard/components/CompletionView.js +21 -0
  28. package/dist/src/dashboard/components/CompletionView.js.map +1 -0
  29. package/dist/src/dashboard/components/ConfirmPrompt.d.ts +9 -0
  30. package/dist/src/dashboard/components/ConfirmPrompt.js +25 -0
  31. package/dist/src/dashboard/components/ConfirmPrompt.js.map +1 -0
  32. package/dist/src/dashboard/components/CredentialsForm.d.ts +10 -0
  33. package/dist/src/dashboard/components/CredentialsForm.js +47 -0
  34. package/dist/src/dashboard/components/CredentialsForm.js.map +1 -0
  35. package/dist/src/dashboard/components/Dashboard.d.ts +3 -0
  36. package/dist/src/dashboard/components/Dashboard.js +100 -0
  37. package/dist/src/dashboard/components/Dashboard.js.map +1 -0
  38. package/dist/src/dashboard/components/DashboardLayout.d.ts +24 -0
  39. package/dist/src/dashboard/components/DashboardLayout.js +25 -0
  40. package/dist/src/dashboard/components/DashboardLayout.js.map +1 -0
  41. package/dist/src/dashboard/components/DiffPanel.d.ts +9 -0
  42. package/dist/src/dashboard/components/DiffPanel.js +136 -0
  43. package/dist/src/dashboard/components/DiffPanel.js.map +1 -0
  44. package/dist/src/dashboard/components/InlinePrompt.d.ts +8 -0
  45. package/dist/src/dashboard/components/InlinePrompt.js +19 -0
  46. package/dist/src/dashboard/components/InlinePrompt.js.map +1 -0
  47. package/dist/src/dashboard/components/OutputPanel.d.ts +10 -0
  48. package/dist/src/dashboard/components/OutputPanel.js +100 -0
  49. package/dist/src/dashboard/components/OutputPanel.js.map +1 -0
  50. package/dist/src/dashboard/components/Panel.d.ts +12 -0
  51. package/dist/src/dashboard/components/Panel.js +6 -0
  52. package/dist/src/dashboard/components/Panel.js.map +1 -0
  53. package/dist/src/dashboard/components/TextInput.d.ts +13 -0
  54. package/dist/src/dashboard/components/TextInput.js +57 -0
  55. package/dist/src/dashboard/components/TextInput.js.map +1 -0
  56. package/dist/src/dashboard/components/WelcomeArt.d.ts +2 -0
  57. package/dist/src/dashboard/components/WelcomeArt.js +9 -0
  58. package/dist/src/dashboard/components/WelcomeArt.js.map +1 -0
  59. package/dist/src/dashboard/hooks/useAnimation.d.ts +7 -0
  60. package/dist/src/dashboard/hooks/useAnimation.js +24 -0
  61. package/dist/src/dashboard/hooks/useAnimation.js.map +1 -0
  62. package/dist/src/dashboard/hooks/useKeyboard.d.ts +8 -0
  63. package/dist/src/dashboard/hooks/useKeyboard.js +18 -0
  64. package/dist/src/dashboard/hooks/useKeyboard.js.map +1 -0
  65. package/dist/src/dashboard/hooks/useTerminalSize.d.ts +8 -0
  66. package/dist/src/dashboard/hooks/useTerminalSize.js +23 -0
  67. package/dist/src/dashboard/hooks/useTerminalSize.js.map +1 -0
  68. package/dist/src/dashboard/index.d.ts +6 -0
  69. package/dist/src/dashboard/index.js +36 -0
  70. package/dist/src/dashboard/index.js.map +1 -0
  71. package/dist/src/dashboard/lib/diff-utils.d.ts +21 -0
  72. package/dist/src/dashboard/lib/diff-utils.js +271 -0
  73. package/dist/src/dashboard/lib/diff-utils.js.map +1 -0
  74. package/dist/src/dashboard/lib/logo-frames.d.ts +20 -0
  75. package/dist/src/dashboard/lib/logo-frames.js +109 -0
  76. package/dist/src/dashboard/lib/logo-frames.js.map +1 -0
  77. package/dist/src/dashboard/lib/welcome-art.d.ts +1 -0
  78. package/dist/src/dashboard/lib/welcome-art.js +5 -0
  79. package/dist/src/dashboard/lib/welcome-art.js.map +1 -0
  80. package/dist/src/dashboard/types.d.ts +5 -0
  81. package/dist/src/dashboard/types.js +2 -0
  82. package/dist/src/dashboard/types.js.map +1 -0
  83. package/dist/src/lib/__tests__/test-utils.d.ts +40 -0
  84. package/dist/src/lib/__tests__/test-utils.js +108 -0
  85. package/dist/src/lib/__tests__/test-utils.js.map +1 -0
  86. package/dist/src/lib/adapters/cli-adapter.d.ts +56 -0
  87. package/dist/src/lib/adapters/cli-adapter.js +318 -0
  88. package/dist/src/lib/adapters/cli-adapter.js.map +1 -0
  89. package/dist/src/lib/adapters/dashboard-adapter.d.ts +30 -0
  90. package/dist/src/lib/adapters/dashboard-adapter.js +97 -0
  91. package/dist/src/lib/adapters/dashboard-adapter.js.map +1 -0
  92. package/dist/src/lib/adapters/index.d.ts +3 -0
  93. package/dist/src/lib/adapters/index.js +3 -0
  94. package/dist/src/lib/adapters/index.js.map +1 -0
  95. package/dist/src/lib/adapters/types.d.ts +41 -0
  96. package/dist/src/lib/adapters/types.js +2 -0
  97. package/dist/src/lib/adapters/types.js.map +1 -0
  98. package/dist/src/lib/agent-interface.d.ts +75 -0
  99. package/dist/src/lib/agent-interface.js +563 -0
  100. package/dist/src/lib/agent-interface.js.map +1 -0
  101. package/dist/src/lib/agent-runner.d.ts +9 -0
  102. package/dist/src/lib/agent-runner.js +213 -0
  103. package/dist/src/lib/agent-runner.js.map +1 -0
  104. package/dist/src/lib/api.d.ts +25 -0
  105. package/dist/src/lib/api.js +120 -0
  106. package/dist/src/lib/api.js.map +1 -0
  107. package/dist/src/lib/config.d.ts +60 -0
  108. package/dist/src/lib/config.js +88 -0
  109. package/dist/src/lib/config.js.map +1 -0
  110. package/dist/src/lib/constants.d.ts +32 -0
  111. package/dist/src/lib/constants.js +53 -0
  112. package/dist/src/lib/constants.js.map +1 -0
  113. package/dist/src/lib/credentials.d.ts +19 -0
  114. package/dist/src/lib/credentials.js +55 -0
  115. package/dist/src/lib/credentials.js.map +1 -0
  116. package/dist/src/lib/env-writer.d.ts +14 -0
  117. package/dist/src/lib/env-writer.js +39 -0
  118. package/dist/src/lib/env-writer.js.map +1 -0
  119. package/dist/src/lib/events.d.ts +114 -0
  120. package/dist/src/lib/events.js +19 -0
  121. package/dist/src/lib/events.js.map +1 -0
  122. package/dist/src/lib/framework-config.d.ts +108 -0
  123. package/dist/src/lib/framework-config.js +11 -0
  124. package/dist/src/lib/framework-config.js.map +1 -0
  125. package/dist/src/lib/helper-functions.d.ts +1 -0
  126. package/dist/src/lib/helper-functions.js +2 -0
  127. package/dist/src/lib/helper-functions.js.map +1 -0
  128. package/dist/src/lib/port-detection.d.ts +7 -0
  129. package/dist/src/lib/port-detection.js +112 -0
  130. package/dist/src/lib/port-detection.js.map +1 -0
  131. package/dist/src/lib/progress-tracker.d.ts +22 -0
  132. package/dist/src/lib/progress-tracker.js +47 -0
  133. package/dist/src/lib/progress-tracker.js.map +1 -0
  134. package/dist/src/lib/run-with-core.d.ts +2 -0
  135. package/dist/src/lib/run-with-core.js +266 -0
  136. package/dist/src/lib/run-with-core.js.map +1 -0
  137. package/dist/src/lib/safe-tools.d.ts +2 -0
  138. package/dist/src/lib/safe-tools.js +212 -0
  139. package/dist/src/lib/safe-tools.js.map +1 -0
  140. package/dist/src/lib/settings.d.ts +59 -0
  141. package/dist/src/lib/settings.js +36 -0
  142. package/dist/src/lib/settings.js.map +1 -0
  143. package/dist/src/lib/token-refresh.d.ts +12 -0
  144. package/dist/src/lib/token-refresh.js +26 -0
  145. package/dist/src/lib/token-refresh.js.map +1 -0
  146. package/dist/src/lib/validation/build-validator.d.ts +9 -0
  147. package/dist/src/lib/validation/build-validator.js +118 -0
  148. package/dist/src/lib/validation/build-validator.js.map +1 -0
  149. package/dist/src/lib/validation/index.d.ts +3 -0
  150. package/dist/src/lib/validation/index.js +3 -0
  151. package/dist/src/lib/validation/index.js.map +1 -0
  152. package/dist/src/lib/validation/types.d.ts +41 -0
  153. package/dist/src/lib/validation/types.js +2 -0
  154. package/dist/src/lib/validation/types.js.map +1 -0
  155. package/dist/src/lib/validation/validator.d.ts +6 -0
  156. package/dist/src/lib/validation/validator.js +647 -0
  157. package/dist/src/lib/validation/validator.js.map +1 -0
  158. package/dist/src/lib/wizard-core.d.ts +200 -0
  159. package/dist/src/lib/wizard-core.js +392 -0
  160. package/dist/src/lib/wizard-core.js.map +1 -0
  161. package/dist/src/lib/wizard-core.types.d.ts +73 -0
  162. package/dist/src/lib/wizard-core.types.js +2 -0
  163. package/dist/src/lib/wizard-core.types.js.map +1 -0
  164. package/dist/src/lib/workos-management.d.ts +32 -0
  165. package/dist/src/lib/workos-management.js +142 -0
  166. package/dist/src/lib/workos-management.js.map +1 -0
  167. package/dist/src/nextjs/nextjs-wizard-agent.d.ts +6 -0
  168. package/dist/src/nextjs/nextjs-wizard-agent.js +97 -0
  169. package/dist/src/nextjs/nextjs-wizard-agent.js.map +1 -0
  170. package/dist/src/nextjs/utils.d.ts +8 -0
  171. package/dist/src/nextjs/utils.js +53 -0
  172. package/dist/src/nextjs/utils.js.map +1 -0
  173. package/dist/src/react/react-wizard-agent.d.ts +2 -0
  174. package/dist/src/react/react-wizard-agent.js +47 -0
  175. package/dist/src/react/react-wizard-agent.js.map +1 -0
  176. package/dist/src/react-router/react-router-wizard-agent.d.ts +6 -0
  177. package/dist/src/react-router/react-router-wizard-agent.js +103 -0
  178. package/dist/src/react-router/react-router-wizard-agent.js.map +1 -0
  179. package/dist/src/react-router/utils.d.ts +19 -0
  180. package/dist/src/react-router/utils.js +210 -0
  181. package/dist/src/react-router/utils.js.map +1 -0
  182. package/dist/src/run.d.ts +24 -0
  183. package/dist/src/run.js +48 -0
  184. package/dist/src/run.js.map +1 -0
  185. package/dist/src/steps/add-or-update-environment-variables.d.ts +10 -0
  186. package/dist/src/steps/add-or-update-environment-variables.js +155 -0
  187. package/dist/src/steps/add-or-update-environment-variables.js.map +1 -0
  188. package/dist/src/steps/index.d.ts +3 -0
  189. package/dist/src/steps/index.js +4 -0
  190. package/dist/src/steps/index.js.map +1 -0
  191. package/dist/src/steps/run-prettier.d.ts +5 -0
  192. package/dist/src/steps/run-prettier.js +54 -0
  193. package/dist/src/steps/run-prettier.js.map +1 -0
  194. package/dist/src/steps/upload-environment-variables/EnvironmentProvider.d.ts +8 -0
  195. package/dist/src/steps/upload-environment-variables/EnvironmentProvider.js +7 -0
  196. package/dist/src/steps/upload-environment-variables/EnvironmentProvider.js.map +1 -0
  197. package/dist/src/steps/upload-environment-variables/index.d.ts +6 -0
  198. package/dist/src/steps/upload-environment-variables/index.js +57 -0
  199. package/dist/src/steps/upload-environment-variables/index.js.map +1 -0
  200. package/dist/src/steps/upload-environment-variables/providers/vercel.d.ts +14 -0
  201. package/dist/src/steps/upload-environment-variables/providers/vercel.js +104 -0
  202. package/dist/src/steps/upload-environment-variables/providers/vercel.js.map +1 -0
  203. package/dist/src/tanstack-start/tanstack-start-wizard-agent.d.ts +2 -0
  204. package/dist/src/tanstack-start/tanstack-start-wizard-agent.js +49 -0
  205. package/dist/src/tanstack-start/tanstack-start-wizard-agent.js.map +1 -0
  206. package/dist/src/telemetry.d.ts +2 -0
  207. package/dist/src/telemetry.js +29 -0
  208. package/dist/src/telemetry.js.map +1 -0
  209. package/dist/src/utils/analytics.d.ts +24 -0
  210. package/dist/src/utils/analytics.js +139 -0
  211. package/dist/src/utils/analytics.js.map +1 -0
  212. package/dist/src/utils/bash.d.ts +2 -0
  213. package/dist/src/utils/bash.js +17 -0
  214. package/dist/src/utils/bash.js.map +1 -0
  215. package/dist/src/utils/clack-utils.d.ts +93 -0
  216. package/dist/src/utils/clack-utils.js +397 -0
  217. package/dist/src/utils/clack-utils.js.map +1 -0
  218. package/dist/src/utils/clack.d.ts +5 -0
  219. package/dist/src/utils/clack.js +34 -0
  220. package/dist/src/utils/clack.js.map +1 -0
  221. package/dist/src/utils/cli-symbols.d.ts +32 -0
  222. package/dist/src/utils/cli-symbols.js +46 -0
  223. package/dist/src/utils/cli-symbols.js.map +1 -0
  224. package/dist/src/utils/debug.d.ts +7 -0
  225. package/dist/src/utils/debug.js +88 -0
  226. package/dist/src/utils/debug.js.map +1 -0
  227. package/dist/src/utils/env-parser.d.ts +5 -0
  228. package/dist/src/utils/env-parser.js +18 -0
  229. package/dist/src/utils/env-parser.js.map +1 -0
  230. package/dist/src/utils/environment.d.ts +4 -0
  231. package/dist/src/utils/environment.js +69 -0
  232. package/dist/src/utils/environment.js.map +1 -0
  233. package/dist/src/utils/errors.d.ts +3 -0
  234. package/dist/src/utils/errors.js +7 -0
  235. package/dist/src/utils/errors.js.map +1 -0
  236. package/dist/src/utils/logging.d.ts +9 -0
  237. package/dist/src/utils/logging.js +36 -0
  238. package/dist/src/utils/logging.js.map +1 -0
  239. package/dist/src/utils/package-json.d.ts +25 -0
  240. package/dist/src/utils/package-json.js +21 -0
  241. package/dist/src/utils/package-json.js.map +1 -0
  242. package/dist/src/utils/package-manager.d.ts +21 -0
  243. package/dist/src/utils/package-manager.js +167 -0
  244. package/dist/src/utils/package-manager.js.map +1 -0
  245. package/dist/src/utils/redact.d.ts +5 -0
  246. package/dist/src/utils/redact.js +29 -0
  247. package/dist/src/utils/redact.js.map +1 -0
  248. package/dist/src/utils/semver.d.ts +10 -0
  249. package/dist/src/utils/semver.js +43 -0
  250. package/dist/src/utils/semver.js.map +1 -0
  251. package/dist/src/utils/string.d.ts +1 -0
  252. package/dist/src/utils/string.js +6 -0
  253. package/dist/src/utils/string.js.map +1 -0
  254. package/dist/src/utils/telemetry-client.d.ts +15 -0
  255. package/dist/src/utils/telemetry-client.js +57 -0
  256. package/dist/src/utils/telemetry-client.js.map +1 -0
  257. package/dist/src/utils/telemetry-types.d.ts +51 -0
  258. package/dist/src/utils/telemetry-types.js +6 -0
  259. package/dist/src/utils/telemetry-types.js.map +1 -0
  260. package/dist/src/utils/types.d.ts +80 -0
  261. package/dist/src/utils/types.js +2 -0
  262. package/dist/src/utils/types.js.map +1 -0
  263. package/dist/src/utils/urls.d.ts +7 -0
  264. package/dist/src/utils/urls.js +8 -0
  265. package/dist/src/utils/urls.js.map +1 -0
  266. package/dist/src/utils/vendor/is-unicorn-supported.d.ts +1 -0
  267. package/dist/src/utils/vendor/is-unicorn-supported.js +21 -0
  268. package/dist/src/utils/vendor/is-unicorn-supported.js.map +1 -0
  269. package/dist/src/vanilla-js/vanilla-js-wizard-agent.d.ts +2 -0
  270. package/dist/src/vanilla-js/vanilla-js-wizard-agent.js +47 -0
  271. package/dist/src/vanilla-js/vanilla-js-wizard-agent.js.map +1 -0
  272. package/package.json +76 -84
  273. package/skills/workos-authkit-base/SKILL.md +113 -0
  274. package/skills/workos-authkit-nextjs/SKILL.md +115 -0
  275. package/skills/workos-authkit-react/SKILL.md +91 -0
  276. package/skills/workos-authkit-react-router/SKILL.md +106 -0
  277. package/skills/workos-authkit-tanstack-start/SKILL.md +104 -0
  278. package/skills/workos-authkit-vanilla-js/SKILL.md +81 -0
  279. package/build/apps/index.js +0 -50
  280. package/build/apps/slack.js +0 -151
  281. package/build/cli.js +0 -42
  282. package/build/config.js +0 -34
  283. package/build/dev.js +0 -5
  284. package/build/enable-api-access.png +0 -0
  285. package/build/groups.js +0 -480
  286. package/build/index.js +0 -3
  287. package/build/info.js +0 -69
  288. package/build/login.js +0 -161
  289. package/build/main.js +0 -214
  290. package/build/users.js +0 -402
  291. package/build/util.js +0 -157
  292. package/coverage/clover.xml +0 -66
  293. package/coverage/coverage-final.json +0 -4
  294. package/coverage/lcov-report/base.css +0 -212
  295. package/coverage/lcov-report/cli.ts.html +0 -329
  296. package/coverage/lcov-report/config.ts.html +0 -152
  297. package/coverage/lcov-report/index.html +0 -119
  298. package/coverage/lcov-report/prettify.css +0 -1
  299. package/coverage/lcov-report/prettify.js +0 -1
  300. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  301. package/coverage/lcov-report/sorter.js +0 -158
  302. package/coverage/lcov-report/util.ts.html +0 -350
  303. package/coverage/lcov.info +0 -121
  304. package/package-lock.json +0 -7617
  305. package/tests/util.test.ts +0 -35
@@ -0,0 +1,57 @@
1
+ import { traceStep } from '../../telemetry.js';
2
+ import { analytics } from '../../utils/analytics.js';
3
+ import clack from '../../utils/clack.js';
4
+ import { abortIfCancelled } from '../../utils/clack-utils.js';
5
+ import { VercelEnvironmentProvider } from './providers/vercel.js';
6
+ export const uploadEnvironmentVariablesStep = async (envVars, { integration, options, }) => {
7
+ const providers = [new VercelEnvironmentProvider(options)];
8
+ let provider = null;
9
+ for (const p of providers) {
10
+ if (await p.detect()) {
11
+ provider = p;
12
+ break;
13
+ }
14
+ }
15
+ if (!provider) {
16
+ analytics.capture('wizard interaction', {
17
+ action: 'not uploading environment variables',
18
+ reason: 'no environment provider found',
19
+ integration,
20
+ });
21
+ return [];
22
+ }
23
+ const upload = await abortIfCancelled(clack.select({
24
+ message: `It looks like you are using ${provider.name}. Would you like to upload the environment variables?`,
25
+ options: [
26
+ {
27
+ value: true,
28
+ label: 'Yes',
29
+ hint: `Upload the environment variables to ${provider.name}`,
30
+ },
31
+ {
32
+ value: false,
33
+ label: 'No',
34
+ hint: `Skip uploading environment variables to ${provider.name} - you can do this later`,
35
+ },
36
+ ],
37
+ }), integration);
38
+ if (!upload) {
39
+ analytics.capture('wizard interaction', {
40
+ action: 'not uploading environment variables',
41
+ reason: 'user declined to upload',
42
+ provider: provider.name,
43
+ integration,
44
+ });
45
+ return [];
46
+ }
47
+ const results = await traceStep('uploading environment variables', async () => {
48
+ return await provider.uploadEnvVars(envVars);
49
+ });
50
+ analytics.capture('wizard interaction', {
51
+ action: 'uploaded environment variables',
52
+ provider: provider.name,
53
+ integration,
54
+ });
55
+ return Object.keys(results).filter((key) => results[key]);
56
+ };
57
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/steps/upload-environment-variables/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,KAAK,MAAM,sBAAsB,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAG9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAElE,MAAM,CAAC,MAAM,8BAA8B,GAAG,KAAK,EACjD,OAA+B,EAC/B,EACE,WAAW,EACX,OAAO,GAIR,EACkB,EAAE;IACrB,MAAM,SAAS,GAA0B,CAAC,IAAI,yBAAyB,CAAC,OAAO,CAAC,CAAC,CAAC;IAElF,IAAI,QAAQ,GAA+B,IAAI,CAAC;IAEhD,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,IAAI,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;YACrB,QAAQ,GAAG,CAAC,CAAC;YACb,MAAM;QACR,CAAC;IACH,CAAC;IAED,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,SAAS,CAAC,OAAO,CAAC,oBAAoB,EAAE;YACtC,MAAM,EAAE,qCAAqC;YAC7C,MAAM,EAAE,+BAA+B;YACvC,WAAW;SACZ,CAAC,CAAC;QACH,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,MAAM,GAAY,MAAM,gBAAgB,CAC5C,KAAK,CAAC,MAAM,CAAC;QACX,OAAO,EAAE,+BAA+B,QAAQ,CAAC,IAAI,uDAAuD;QAC5G,OAAO,EAAE;YACP;gBACE,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,KAAK;gBACZ,IAAI,EAAE,uCAAuC,QAAQ,CAAC,IAAI,EAAE;aAC7D;YACD;gBACE,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,IAAI;gBACX,IAAI,EAAE,2CAA2C,QAAQ,CAAC,IAAI,0BAA0B;aACzF;SACF;KACF,CAAC,EACF,WAAW,CACZ,CAAC;IAEF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,SAAS,CAAC,OAAO,CAAC,oBAAoB,EAAE;YACtC,MAAM,EAAE,qCAAqC;YAC7C,MAAM,EAAE,yBAAyB;YACjC,QAAQ,EAAE,QAAQ,CAAC,IAAI;YACvB,WAAW;SACZ,CAAC,CAAC;QACH,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC5E,OAAO,MAAM,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,OAAO,CAAC,oBAAoB,EAAE;QACtC,MAAM,EAAE,gCAAgC;QACxC,QAAQ,EAAE,QAAQ,CAAC,IAAI;QACvB,WAAW;KACZ,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5D,CAAC,CAAC","sourcesContent":["import type { Integration } from '../../lib/constants.js';\nimport { traceStep } from '../../telemetry.js';\nimport { analytics } from '../../utils/analytics.js';\nimport clack from '../../utils/clack.js';\nimport { abortIfCancelled } from '../../utils/clack-utils.js';\nimport type { WizardOptions } from '../../utils/types.js';\nimport { EnvironmentProvider } from './EnvironmentProvider.js';\nimport { VercelEnvironmentProvider } from './providers/vercel.js';\n\nexport const uploadEnvironmentVariablesStep = async (\n envVars: Record<string, string>,\n {\n integration,\n options,\n }: {\n integration: Integration;\n options: WizardOptions;\n },\n): Promise<string[]> => {\n const providers: EnvironmentProvider[] = [new VercelEnvironmentProvider(options)];\n\n let provider: EnvironmentProvider | null = null;\n\n for (const p of providers) {\n if (await p.detect()) {\n provider = p;\n break;\n }\n }\n\n if (!provider) {\n analytics.capture('wizard interaction', {\n action: 'not uploading environment variables',\n reason: 'no environment provider found',\n integration,\n });\n return [];\n }\n\n const upload: boolean = await abortIfCancelled(\n clack.select({\n message: `It looks like you are using ${provider.name}. Would you like to upload the environment variables?`,\n options: [\n {\n value: true,\n label: 'Yes',\n hint: `Upload the environment variables to ${provider.name}`,\n },\n {\n value: false,\n label: 'No',\n hint: `Skip uploading environment variables to ${provider.name} - you can do this later`,\n },\n ],\n }),\n integration,\n );\n\n if (!upload) {\n analytics.capture('wizard interaction', {\n action: 'not uploading environment variables',\n reason: 'user declined to upload',\n provider: provider.name,\n integration,\n });\n return [];\n }\n\n const results = await traceStep('uploading environment variables', async () => {\n return await provider.uploadEnvVars(envVars);\n });\n\n analytics.capture('wizard interaction', {\n action: 'uploaded environment variables',\n provider: provider.name,\n integration,\n });\n\n return Object.keys(results).filter((key) => results[key]);\n};\n"]}
@@ -0,0 +1,14 @@
1
+ import { EnvironmentProvider } from '../EnvironmentProvider.js';
2
+ import type { WizardOptions } from '../../../utils/types.js';
3
+ export declare class VercelEnvironmentProvider extends EnvironmentProvider {
4
+ name: string;
5
+ environments: string[];
6
+ constructor(options: WizardOptions);
7
+ detect(): Promise<boolean>;
8
+ hasDotVercelDir(): boolean;
9
+ hasVercelCli(): boolean;
10
+ isProjectLinked(): boolean;
11
+ isAuthenticated(): boolean;
12
+ uploadEnvironmentVariable(key: string, value: string, environment: string): Promise<void>;
13
+ uploadEnvVars(vars: Record<string, string>): Promise<Record<string, boolean>>;
14
+ }
@@ -0,0 +1,104 @@
1
+ import { execSync, spawn, spawnSync } from 'child_process';
2
+ import { EnvironmentProvider } from '../EnvironmentProvider.js';
3
+ import * as fs from 'fs';
4
+ import * as path from 'path';
5
+ import clack from '../../../utils/clack.js';
6
+ import chalk from 'chalk';
7
+ import { analytics } from '../../../utils/analytics.js';
8
+ export class VercelEnvironmentProvider extends EnvironmentProvider {
9
+ name = 'Vercel';
10
+ environments = ['production', 'preview', 'development'];
11
+ constructor(options) {
12
+ super(options);
13
+ }
14
+ // eslint-disable-next-line @typescript-eslint/require-await
15
+ async detect() {
16
+ const vercelDetected = this.hasVercelCli() && this.isProjectLinked() && this.isAuthenticated();
17
+ analytics.setTag('vercel-detected', vercelDetected);
18
+ return vercelDetected;
19
+ }
20
+ hasDotVercelDir() {
21
+ const dotVercelDir = path.join(this.options.installDir, '.vercel');
22
+ return fs.existsSync(dotVercelDir);
23
+ }
24
+ hasVercelCli() {
25
+ try {
26
+ execSync('vercel --version', { stdio: 'ignore' });
27
+ analytics.setTag('vercel-cli-installed', true);
28
+ return true;
29
+ }
30
+ catch {
31
+ analytics.setTag('vercel-cli-installed', false);
32
+ return false;
33
+ }
34
+ }
35
+ isProjectLinked() {
36
+ const isProjectLinked = fs.existsSync(path.join(this.options.installDir, '.vercel', 'project.json'));
37
+ analytics.setTag('vercel-project-linked', isProjectLinked);
38
+ return isProjectLinked;
39
+ }
40
+ isAuthenticated() {
41
+ const result = spawnSync('vercel', ['whoami'], {
42
+ encoding: 'utf-8',
43
+ stdio: ['pipe', 'pipe', 'pipe'], // suppress prompts
44
+ env: {
45
+ ...process.env,
46
+ FORCE_COLOR: '0', // avoid ANSI formatting
47
+ CI: '1', // hint to CLI that it's a non-interactive env
48
+ },
49
+ });
50
+ const output = (String(result.stdout) + String(result.stderr)).toLowerCase();
51
+ if (output.includes('log in to vercel') || output.includes('vercel login') || result.status !== 0) {
52
+ analytics.setTag('vercel-authenticated', false);
53
+ return false;
54
+ }
55
+ analytics.setTag('vercel-authenticated', true);
56
+ return true;
57
+ }
58
+ async uploadEnvironmentVariable(key, value, environment) {
59
+ await new Promise((resolve, reject) => {
60
+ const proc = spawn('vercel', ['env', 'add', key, environment], {
61
+ stdio: ['pipe', 'pipe', 'pipe'],
62
+ });
63
+ let stderr = '';
64
+ proc.stderr.on('data', (data) => {
65
+ stderr += data.toString();
66
+ });
67
+ proc.stdin.write(value);
68
+ proc.stdin.end();
69
+ proc.on('close', (code) => {
70
+ if (stderr.includes('already exists') ||
71
+ stderr.includes('already been added') ||
72
+ stderr.includes('vercel env rm')) {
73
+ reject(new Error(`❌ Environment variable ${chalk.cyan(key)} already exists in ${this.name}. Please upload it manually.`));
74
+ }
75
+ else if (code === 0) {
76
+ resolve();
77
+ }
78
+ else {
79
+ reject(new Error(`❌ Failed to upload environment variable ${chalk.cyan(key)} to ${this.name}. Please upload it manually.`));
80
+ }
81
+ });
82
+ });
83
+ }
84
+ async uploadEnvVars(vars) {
85
+ const results = {};
86
+ for (const [key, value] of Object.entries(vars)) {
87
+ const spinner = clack.spinner();
88
+ spinner.start(`Uploading ${chalk.cyan(key)} to ${this.name}...`);
89
+ await Promise.all(this.environments.map((environment) => this.uploadEnvironmentVariable(key, value, environment)))
90
+ .then(() => {
91
+ spinner.stop(`✅ Uploaded ${chalk.cyan(key)} to ${this.name}`);
92
+ results[key] = true;
93
+ })
94
+ .catch((err) => {
95
+ spinner.stop(err instanceof Error
96
+ ? err.message
97
+ : `❌ Failed to upload environment variables to ${this.name}. Please upload it manually.`);
98
+ results[key] = false;
99
+ });
100
+ }
101
+ return results;
102
+ }
103
+ }
104
+ //# sourceMappingURL=vercel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel.js","sourceRoot":"","sources":["../../../../../src/steps/upload-environment-variables/providers/vercel.ts"],"names":[],"mappings":"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","sourcesContent":["import { execSync, spawn, spawnSync } from 'child_process';\nimport { EnvironmentProvider } from '../EnvironmentProvider.js';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport type { WizardOptions } from '../../../utils/types.js';\nimport clack from '../../../utils/clack.js';\nimport chalk from 'chalk';\nimport { analytics } from '../../../utils/analytics.js';\n\nexport class VercelEnvironmentProvider extends EnvironmentProvider {\n name = 'Vercel';\n environments = ['production', 'preview', 'development'];\n\n constructor(options: WizardOptions) {\n super(options);\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async detect(): Promise<boolean> {\n const vercelDetected = this.hasVercelCli() && this.isProjectLinked() && this.isAuthenticated();\n\n analytics.setTag('vercel-detected', vercelDetected);\n\n return vercelDetected;\n }\n\n hasDotVercelDir(): boolean {\n const dotVercelDir = path.join(this.options.installDir, '.vercel');\n return fs.existsSync(dotVercelDir);\n }\n\n hasVercelCli(): boolean {\n try {\n execSync('vercel --version', { stdio: 'ignore' });\n analytics.setTag('vercel-cli-installed', true);\n return true;\n } catch {\n analytics.setTag('vercel-cli-installed', false);\n return false;\n }\n }\n\n isProjectLinked(): boolean {\n const isProjectLinked = fs.existsSync(path.join(this.options.installDir, '.vercel', 'project.json'));\n\n analytics.setTag('vercel-project-linked', isProjectLinked);\n\n return isProjectLinked;\n }\n\n isAuthenticated(): boolean {\n const result = spawnSync('vercel', ['whoami'], {\n encoding: 'utf-8',\n stdio: ['pipe', 'pipe', 'pipe'], // suppress prompts\n env: {\n ...process.env,\n FORCE_COLOR: '0', // avoid ANSI formatting\n CI: '1', // hint to CLI that it's a non-interactive env\n },\n });\n\n const output = (String(result.stdout) + String(result.stderr)).toLowerCase();\n\n if (output.includes('log in to vercel') || output.includes('vercel login') || result.status !== 0) {\n analytics.setTag('vercel-authenticated', false);\n return false;\n }\n\n analytics.setTag('vercel-authenticated', true);\n\n return true;\n }\n\n async uploadEnvironmentVariable(key: string, value: string, environment: string): Promise<void> {\n await new Promise<void>((resolve, reject) => {\n const proc = spawn('vercel', ['env', 'add', key, environment], {\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n\n let stderr = '';\n proc.stderr.on('data', (data) => {\n stderr += data.toString();\n });\n\n proc.stdin.write(value);\n proc.stdin.end();\n\n proc.on('close', (code) => {\n if (\n stderr.includes('already exists') ||\n stderr.includes('already been added') ||\n stderr.includes('vercel env rm')\n ) {\n reject(\n new Error(\n `❌ Environment variable ${chalk.cyan(key)} already exists in ${this.name}. Please upload it manually.`,\n ),\n );\n } else if (code === 0) {\n resolve();\n } else {\n reject(\n new Error(\n `❌ Failed to upload environment variable ${chalk.cyan(key)} to ${this.name}. Please upload it manually.`,\n ),\n );\n }\n });\n });\n }\n\n async uploadEnvVars(vars: Record<string, string>): Promise<Record<string, boolean>> {\n const results: Record<string, boolean> = {};\n\n for (const [key, value] of Object.entries(vars)) {\n const spinner = clack.spinner();\n\n spinner.start(`Uploading ${chalk.cyan(key)} to ${this.name}...`);\n await Promise.all(this.environments.map((environment) => this.uploadEnvironmentVariable(key, value, environment)))\n .then(() => {\n spinner.stop(`✅ Uploaded ${chalk.cyan(key)} to ${this.name}`);\n results[key] = true;\n })\n .catch((err) => {\n spinner.stop(\n err instanceof Error\n ? err.message\n : `❌ Failed to upload environment variables to ${this.name}. Please upload it manually.`,\n );\n results[key] = false;\n });\n }\n\n return results;\n }\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import type { WizardOptions } from '../utils/types.js';
2
+ export declare function runTanstackStartWizardAgent(options: WizardOptions): Promise<string>;
@@ -0,0 +1,49 @@
1
+ import { enableDebugLogs } from '../utils/debug.js';
2
+ import { runAgentWizard } from '../lib/agent-runner.js';
3
+ import { Integration } from '../lib/constants.js';
4
+ import { getPackageVersion } from '../utils/package-json.js';
5
+ const TANSTACK_START_AGENT_CONFIG = {
6
+ metadata: {
7
+ name: 'TanStack Start',
8
+ integration: Integration.tanstackStart,
9
+ docsUrl: 'https://workos.com/docs/user-management/authkit/tanstack-start',
10
+ unsupportedVersionDocsUrl: 'https://workos.com/docs/user-management/authkit/tanstack-start',
11
+ skillName: 'workos-authkit-tanstack-start',
12
+ },
13
+ detection: {
14
+ packageName: '@tanstack/react-start',
15
+ packageDisplayName: 'TanStack Start',
16
+ getVersion: (packageJson) => getPackageVersion('@tanstack/react-start', packageJson),
17
+ },
18
+ environment: {
19
+ uploadToHosting: false,
20
+ requiresApiKey: true, // Server-side framework
21
+ getEnvVars: (apiKey, clientId) => ({
22
+ WORKOS_API_KEY: apiKey,
23
+ WORKOS_CLIENT_ID: clientId,
24
+ }),
25
+ },
26
+ analytics: {
27
+ getTags: () => ({}),
28
+ },
29
+ prompts: {},
30
+ ui: {
31
+ successMessage: 'WorkOS AuthKit integration complete',
32
+ getOutroChanges: () => [
33
+ 'Analyzed your TanStack Start project structure',
34
+ 'Created and configured WorkOS AuthKit',
35
+ 'Integrated authentication into your application',
36
+ ],
37
+ getOutroNextSteps: () => [
38
+ 'Start your development server to test authentication',
39
+ 'Visit the WorkOS Dashboard to manage users and settings',
40
+ ],
41
+ },
42
+ };
43
+ export async function runTanstackStartWizardAgent(options) {
44
+ if (options.debug) {
45
+ enableDebugLogs();
46
+ }
47
+ return runAgentWizard(TANSTACK_START_AGENT_CONFIG, options);
48
+ }
49
+ //# sourceMappingURL=tanstack-start-wizard-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tanstack-start-wizard-agent.js","sourceRoot":"","sources":["../../../src/tanstack-start/tanstack-start-wizard-agent.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,MAAM,2BAA2B,GAAoB;IACnD,QAAQ,EAAE;QACR,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,WAAW,CAAC,aAAa;QACtC,OAAO,EAAE,gEAAgE;QACzE,yBAAyB,EAAE,gEAAgE;QAC3F,SAAS,EAAE,+BAA+B;KAC3C;IAED,SAAS,EAAE;QACT,WAAW,EAAE,uBAAuB;QACpC,kBAAkB,EAAE,gBAAgB;QACpC,UAAU,EAAE,CAAC,WAAgB,EAAE,EAAE,CAAC,iBAAiB,CAAC,uBAAuB,EAAE,WAAW,CAAC;KAC1F;IAED,WAAW,EAAE;QACX,eAAe,EAAE,KAAK;QACtB,cAAc,EAAE,IAAI,EAAE,wBAAwB;QAC9C,UAAU,EAAE,CAAC,MAAc,EAAE,QAAgB,EAAE,EAAE,CAAC,CAAC;YACjD,cAAc,EAAE,MAAM;YACtB,gBAAgB,EAAE,QAAQ;SAC3B,CAAC;KACH;IAED,SAAS,EAAE;QACT,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;KACpB;IAED,OAAO,EAAE,EAAE;IAEX,EAAE,EAAE;QACF,cAAc,EAAE,qCAAqC;QACrD,eAAe,EAAE,GAAG,EAAE,CAAC;YACrB,gDAAgD;YAChD,uCAAuC;YACvC,iDAAiD;SAClD;QACD,iBAAiB,EAAE,GAAG,EAAE,CAAC;YACvB,sDAAsD;YACtD,yDAAyD;SAC1D;KACF;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,OAAsB;IACtE,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,eAAe,EAAE,CAAC;IACpB,CAAC;IAED,OAAO,cAAc,CAAC,2BAA2B,EAAE,OAAO,CAAC,CAAC;AAC9D,CAAC","sourcesContent":["/* TanStack Start wizard using Claude Agent SDK */\nimport type { WizardOptions } from '../utils/types.js';\nimport type { FrameworkConfig } from '../lib/framework-config.js';\nimport { enableDebugLogs } from '../utils/debug.js';\nimport { runAgentWizard } from '../lib/agent-runner.js';\nimport { Integration } from '../lib/constants.js';\nimport { getPackageVersion } from '../utils/package-json.js';\n\nconst TANSTACK_START_AGENT_CONFIG: FrameworkConfig = {\n metadata: {\n name: 'TanStack Start',\n integration: Integration.tanstackStart,\n docsUrl: 'https://workos.com/docs/user-management/authkit/tanstack-start',\n unsupportedVersionDocsUrl: 'https://workos.com/docs/user-management/authkit/tanstack-start',\n skillName: 'workos-authkit-tanstack-start',\n },\n\n detection: {\n packageName: '@tanstack/react-start',\n packageDisplayName: 'TanStack Start',\n getVersion: (packageJson: any) => getPackageVersion('@tanstack/react-start', packageJson),\n },\n\n environment: {\n uploadToHosting: false,\n requiresApiKey: true, // Server-side framework\n getEnvVars: (apiKey: string, clientId: string) => ({\n WORKOS_API_KEY: apiKey,\n WORKOS_CLIENT_ID: clientId,\n }),\n },\n\n analytics: {\n getTags: () => ({}),\n },\n\n prompts: {},\n\n ui: {\n successMessage: 'WorkOS AuthKit integration complete',\n getOutroChanges: () => [\n 'Analyzed your TanStack Start project structure',\n 'Created and configured WorkOS AuthKit',\n 'Integrated authentication into your application',\n ],\n getOutroNextSteps: () => [\n 'Start your development server to test authentication',\n 'Visit the WorkOS Dashboard to manage users and settings',\n ],\n },\n};\n\nexport async function runTanstackStartWizardAgent(options: WizardOptions): Promise<string> {\n if (options.debug) {\n enableDebugLogs();\n }\n\n return runAgentWizard(TANSTACK_START_AGENT_CONFIG, options);\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export declare function traceStep<T>(step: string, callback: () => T): T;
2
+ export declare function updateProgress(step: string): void;
@@ -0,0 +1,29 @@
1
+ import { analytics } from './utils/analytics.js';
2
+ export function traceStep(step, callback) {
3
+ const startTime = Date.now();
4
+ updateProgress(step);
5
+ try {
6
+ const result = callback();
7
+ if (result instanceof Promise) {
8
+ return result
9
+ .then((value) => {
10
+ analytics.stepCompleted(step, Date.now() - startTime, true);
11
+ return value;
12
+ })
13
+ .catch((error) => {
14
+ analytics.stepCompleted(step, Date.now() - startTime, false, error);
15
+ throw error;
16
+ });
17
+ }
18
+ analytics.stepCompleted(step, Date.now() - startTime, true);
19
+ return result;
20
+ }
21
+ catch (error) {
22
+ analytics.stepCompleted(step, Date.now() - startTime, false, error);
23
+ throw error;
24
+ }
25
+ }
26
+ export function updateProgress(step) {
27
+ analytics.setTag('progress', step);
28
+ }
29
+ //# sourceMappingURL=telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,UAAU,SAAS,CAAI,IAAY,EAAE,QAAiB;IAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,cAAc,CAAC,IAAI,CAAC,CAAC;IAErB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAC;QAE1B,IAAI,MAAM,YAAY,OAAO,EAAE,CAAC;YAC9B,OAAO,MAAM;iBACV,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;gBACd,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,IAAI,CAAC,CAAC;gBAC5D,OAAO,KAAK,CAAC;YACf,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACf,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;gBACpE,MAAM,KAAK,CAAC;YACd,CAAC,CAAM,CAAC;QACZ,CAAC;QAED,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,IAAI,CAAC,CAAC;QAC5D,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,KAAK,EAAE,KAAc,CAAC,CAAC;QAC7E,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC","sourcesContent":["import { analytics } from './utils/analytics.js';\n\nexport function traceStep<T>(step: string, callback: () => T): T {\n const startTime = Date.now();\n updateProgress(step);\n\n try {\n const result = callback();\n\n if (result instanceof Promise) {\n return result\n .then((value) => {\n analytics.stepCompleted(step, Date.now() - startTime, true);\n return value;\n })\n .catch((error) => {\n analytics.stepCompleted(step, Date.now() - startTime, false, error);\n throw error;\n }) as T;\n }\n\n analytics.stepCompleted(step, Date.now() - startTime, true);\n return result;\n } catch (error) {\n analytics.stepCompleted(step, Date.now() - startTime, false, error as Error);\n throw error;\n }\n}\n\nexport function updateProgress(step: string) {\n analytics.setTag('progress', step);\n}\n"]}
@@ -0,0 +1,24 @@
1
+ export declare class Analytics {
2
+ private tags;
3
+ private sessionId;
4
+ private sessionStartTime;
5
+ private distinctId?;
6
+ private totalInputTokens;
7
+ private totalOutputTokens;
8
+ private agentIterations;
9
+ constructor();
10
+ setDistinctId(distinctId: string): void;
11
+ setAccessToken(token: string): void;
12
+ setGatewayUrl(url: string): void;
13
+ setTag(key: string, value: string | boolean | number | null | undefined): void;
14
+ capture(eventName: string, properties?: Record<string, unknown>): void;
15
+ captureException(error: Error, properties?: Record<string, unknown>): void;
16
+ getFeatureFlag(_flagKey: string): Promise<string | boolean | undefined>;
17
+ sessionStart(mode: 'cli' | 'tui', version: string): void;
18
+ stepCompleted(name: string, durationMs: number, success: boolean, error?: Error): void;
19
+ toolCalled(toolName: string, durationMs: number, success: boolean): void;
20
+ llmRequest(model: string, inputTokens: number, outputTokens: number): void;
21
+ incrementAgentIterations(): void;
22
+ shutdown(status: 'success' | 'error' | 'cancelled'): Promise<void>;
23
+ }
24
+ export declare const analytics: Analytics;
@@ -0,0 +1,139 @@
1
+ import { v4 as uuidv4 } from 'uuid';
2
+ import { debug } from './debug.js';
3
+ import { telemetryClient } from './telemetry-client.js';
4
+ import { WORKOS_TELEMETRY_ENABLED } from '../lib/constants.js';
5
+ export class Analytics {
6
+ tags = {};
7
+ sessionId;
8
+ sessionStartTime;
9
+ distinctId;
10
+ // Agent metrics tracking
11
+ totalInputTokens = 0;
12
+ totalOutputTokens = 0;
13
+ agentIterations = 0;
14
+ constructor() {
15
+ this.sessionId = uuidv4();
16
+ this.sessionStartTime = new Date();
17
+ this.tags = { $app_name: 'authkit-wizard' };
18
+ }
19
+ setDistinctId(distinctId) {
20
+ this.distinctId = distinctId;
21
+ }
22
+ setAccessToken(token) {
23
+ telemetryClient.setAccessToken(token);
24
+ }
25
+ setGatewayUrl(url) {
26
+ telemetryClient.setGatewayUrl(url);
27
+ }
28
+ setTag(key, value) {
29
+ this.tags[key] = value;
30
+ }
31
+ capture(eventName, properties) {
32
+ if (!WORKOS_TELEMETRY_ENABLED)
33
+ return;
34
+ debug(`[Analytics] capture: ${eventName}`, properties);
35
+ // Accumulate primitive values as tags for the session.end event
36
+ if (properties) {
37
+ for (const [key, value] of Object.entries(properties)) {
38
+ if (['string', 'number', 'boolean'].includes(typeof value)) {
39
+ this.tags[key] = value;
40
+ }
41
+ }
42
+ }
43
+ }
44
+ captureException(error, properties = {}) {
45
+ if (!WORKOS_TELEMETRY_ENABLED)
46
+ return;
47
+ debug('[Analytics] captureException:', error.message, properties);
48
+ this.tags['error.type'] = error.name;
49
+ this.tags['error.message'] = error.message;
50
+ }
51
+ async getFeatureFlag(_flagKey) {
52
+ // Feature flags not implemented yet
53
+ return undefined;
54
+ }
55
+ sessionStart(mode, version) {
56
+ if (!WORKOS_TELEMETRY_ENABLED)
57
+ return;
58
+ const event = {
59
+ type: 'session.start',
60
+ sessionId: this.sessionId,
61
+ timestamp: this.sessionStartTime.toISOString(),
62
+ attributes: {
63
+ 'wizard.version': version,
64
+ 'wizard.mode': mode,
65
+ 'workos.user_id': this.distinctId,
66
+ },
67
+ };
68
+ telemetryClient.queueEvent(event);
69
+ }
70
+ stepCompleted(name, durationMs, success, error) {
71
+ if (!WORKOS_TELEMETRY_ENABLED)
72
+ return;
73
+ const event = {
74
+ type: 'step',
75
+ sessionId: this.sessionId,
76
+ timestamp: new Date().toISOString(),
77
+ name,
78
+ durationMs,
79
+ success,
80
+ error: error ? { type: error.name, message: error.message } : undefined,
81
+ };
82
+ telemetryClient.queueEvent(event);
83
+ }
84
+ toolCalled(toolName, durationMs, success) {
85
+ if (!WORKOS_TELEMETRY_ENABLED)
86
+ return;
87
+ const event = {
88
+ type: 'agent.tool',
89
+ sessionId: this.sessionId,
90
+ timestamp: new Date().toISOString(),
91
+ toolName,
92
+ durationMs,
93
+ success,
94
+ };
95
+ telemetryClient.queueEvent(event);
96
+ }
97
+ llmRequest(model, inputTokens, outputTokens) {
98
+ if (!WORKOS_TELEMETRY_ENABLED)
99
+ return;
100
+ this.totalInputTokens += inputTokens;
101
+ this.totalOutputTokens += outputTokens;
102
+ const event = {
103
+ type: 'agent.llm',
104
+ sessionId: this.sessionId,
105
+ timestamp: new Date().toISOString(),
106
+ model,
107
+ inputTokens,
108
+ outputTokens,
109
+ };
110
+ telemetryClient.queueEvent(event);
111
+ }
112
+ incrementAgentIterations() {
113
+ this.agentIterations++;
114
+ }
115
+ async shutdown(status) {
116
+ if (!WORKOS_TELEMETRY_ENABLED)
117
+ return;
118
+ const duration = Date.now() - this.sessionStartTime.getTime();
119
+ // Filter out null/undefined tags
120
+ const extraAttributes = Object.fromEntries(Object.entries(this.tags).filter(([, v]) => v != null));
121
+ const event = {
122
+ type: 'session.end',
123
+ sessionId: this.sessionId,
124
+ timestamp: new Date().toISOString(),
125
+ attributes: {
126
+ 'wizard.outcome': status,
127
+ 'wizard.duration_ms': duration,
128
+ 'wizard.agent.iterations': this.agentIterations,
129
+ 'wizard.agent.tokens.input': this.totalInputTokens,
130
+ 'wizard.agent.tokens.output': this.totalOutputTokens,
131
+ ...extraAttributes,
132
+ },
133
+ };
134
+ telemetryClient.queueEvent(event);
135
+ await telemetryClient.flush();
136
+ }
137
+ }
138
+ export const analytics = new Analytics();
139
+ //# sourceMappingURL=analytics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../../src/utils/analytics.ts"],"names":[],"mappings":"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","sourcesContent":["import { v4 as uuidv4 } from 'uuid';\nimport { debug } from './debug.js';\nimport { telemetryClient } from './telemetry-client.js';\nimport type {\n SessionStartEvent,\n SessionEndEvent,\n StepEvent,\n AgentToolEvent,\n AgentLLMEvent,\n} from './telemetry-types.js';\nimport { WORKOS_TELEMETRY_ENABLED } from '../lib/constants.js';\n\nexport class Analytics {\n private tags: Record<string, string | boolean | number | null | undefined> = {};\n private sessionId: string;\n private sessionStartTime: Date;\n private distinctId?: string;\n\n // Agent metrics tracking\n private totalInputTokens = 0;\n private totalOutputTokens = 0;\n private agentIterations = 0;\n\n constructor() {\n this.sessionId = uuidv4();\n this.sessionStartTime = new Date();\n this.tags = { $app_name: 'authkit-wizard' };\n }\n\n setDistinctId(distinctId: string) {\n this.distinctId = distinctId;\n }\n\n setAccessToken(token: string) {\n telemetryClient.setAccessToken(token);\n }\n\n setGatewayUrl(url: string) {\n telemetryClient.setGatewayUrl(url);\n }\n\n setTag(key: string, value: string | boolean | number | null | undefined) {\n this.tags[key] = value;\n }\n\n capture(eventName: string, properties?: Record<string, unknown>) {\n if (!WORKOS_TELEMETRY_ENABLED) return;\n\n debug(`[Analytics] capture: ${eventName}`, properties);\n\n // Accumulate primitive values as tags for the session.end event\n if (properties) {\n for (const [key, value] of Object.entries(properties)) {\n if (['string', 'number', 'boolean'].includes(typeof value)) {\n this.tags[key] = value as string | number | boolean;\n }\n }\n }\n }\n\n captureException(error: Error, properties: Record<string, unknown> = {}) {\n if (!WORKOS_TELEMETRY_ENABLED) return;\n\n debug('[Analytics] captureException:', error.message, properties);\n this.tags['error.type'] = error.name;\n this.tags['error.message'] = error.message;\n }\n\n async getFeatureFlag(_flagKey: string): Promise<string | boolean | undefined> {\n // Feature flags not implemented yet\n return undefined;\n }\n\n sessionStart(mode: 'cli' | 'tui', version: string) {\n if (!WORKOS_TELEMETRY_ENABLED) return;\n\n const event: SessionStartEvent = {\n type: 'session.start',\n sessionId: this.sessionId,\n timestamp: this.sessionStartTime.toISOString(),\n attributes: {\n 'wizard.version': version,\n 'wizard.mode': mode,\n 'workos.user_id': this.distinctId,\n },\n };\n\n telemetryClient.queueEvent(event);\n }\n\n stepCompleted(name: string, durationMs: number, success: boolean, error?: Error) {\n if (!WORKOS_TELEMETRY_ENABLED) return;\n\n const event: StepEvent = {\n type: 'step',\n sessionId: this.sessionId,\n timestamp: new Date().toISOString(),\n name,\n durationMs,\n success,\n error: error ? { type: error.name, message: error.message } : undefined,\n };\n\n telemetryClient.queueEvent(event);\n }\n\n toolCalled(toolName: string, durationMs: number, success: boolean) {\n if (!WORKOS_TELEMETRY_ENABLED) return;\n\n const event: AgentToolEvent = {\n type: 'agent.tool',\n sessionId: this.sessionId,\n timestamp: new Date().toISOString(),\n toolName,\n durationMs,\n success,\n };\n\n telemetryClient.queueEvent(event);\n }\n\n llmRequest(model: string, inputTokens: number, outputTokens: number) {\n if (!WORKOS_TELEMETRY_ENABLED) return;\n\n this.totalInputTokens += inputTokens;\n this.totalOutputTokens += outputTokens;\n\n const event: AgentLLMEvent = {\n type: 'agent.llm',\n sessionId: this.sessionId,\n timestamp: new Date().toISOString(),\n model,\n inputTokens,\n outputTokens,\n };\n\n telemetryClient.queueEvent(event);\n }\n\n incrementAgentIterations() {\n this.agentIterations++;\n }\n\n async shutdown(status: 'success' | 'error' | 'cancelled') {\n if (!WORKOS_TELEMETRY_ENABLED) return;\n\n const duration = Date.now() - this.sessionStartTime.getTime();\n\n // Filter out null/undefined tags\n const extraAttributes = Object.fromEntries(Object.entries(this.tags).filter(([, v]) => v != null)) as Record<\n string,\n string | number | boolean\n >;\n\n const event: SessionEndEvent = {\n type: 'session.end',\n sessionId: this.sessionId,\n timestamp: new Date().toISOString(),\n attributes: {\n 'wizard.outcome': status,\n 'wizard.duration_ms': duration,\n 'wizard.agent.iterations': this.agentIterations,\n 'wizard.agent.tokens.input': this.totalInputTokens,\n 'wizard.agent.tokens.output': this.totalOutputTokens,\n ...extraAttributes,\n },\n };\n\n telemetryClient.queueEvent(event);\n await telemetryClient.flush();\n }\n}\n\nexport const analytics = new Analytics();\n"]}
@@ -0,0 +1,2 @@
1
+ export declare function executeSync(command: string): string;
2
+ export declare function execute(command: string): Promise<string>;
@@ -0,0 +1,17 @@
1
+ import * as child_process from 'child_process';
2
+ export function executeSync(command) {
3
+ const output = child_process.execSync(command);
4
+ return output.toString();
5
+ }
6
+ export function execute(command) {
7
+ return new Promise((resolve, reject) => {
8
+ child_process.exec(command, (error, stdout, _) => {
9
+ if (error) {
10
+ reject(error);
11
+ return;
12
+ }
13
+ resolve(stdout);
14
+ });
15
+ });
16
+ }
17
+ //# sourceMappingURL=bash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bash.js","sourceRoot":"","sources":["../../../src/utils/bash.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,eAAe,CAAC;AAE/C,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC/C,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAe;IACrC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE;YAC/C,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,KAAK,CAAC,CAAC;gBACd,OAAO;YACT,CAAC;YAED,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import * as child_process from 'child_process';\n\nexport function executeSync(command: string): string {\n const output = child_process.execSync(command);\n return output.toString();\n}\n\nexport function execute(command: string): Promise<string> {\n return new Promise((resolve, reject) => {\n child_process.exec(command, (error, stdout, _) => {\n if (error) {\n reject(error);\n return;\n }\n\n resolve(stdout);\n });\n });\n}\n"]}
@@ -0,0 +1,93 @@
1
+ import { type PackageDotJson } from './package-json.js';
2
+ import { type PackageManager } from './package-manager.js';
3
+ import type { WizardOptions } from './types.js';
4
+ import { type Integration } from '../lib/constants.js';
5
+ export interface CliSetupConfig {
6
+ filename: string;
7
+ name: string;
8
+ gitignore: boolean;
9
+ likelyAlreadyHasAuthToken(contents: string): boolean;
10
+ tokenContent(authToken: string): string;
11
+ likelyAlreadyHasOrgAndProject(contents: string): boolean;
12
+ orgAndProjContent(org: string, project: string): string;
13
+ likelyAlreadyHasUrl?(contents: string): boolean;
14
+ urlContent?(url: string): string;
15
+ }
16
+ export interface CliSetupConfigContent {
17
+ authToken: string;
18
+ org?: string;
19
+ project?: string;
20
+ url?: string;
21
+ }
22
+ export declare function abort(message?: string, status?: number): Promise<never>;
23
+ export declare function abortIfCancelled<T>(input: T | Promise<T>, integration?: Integration): Promise<Exclude<T, symbol>>;
24
+ export declare function printWelcome(options: {
25
+ wizardName: string;
26
+ message?: string;
27
+ }): void;
28
+ export declare function confirmContinueIfNoOrDirtyGitRepo(options: Pick<WizardOptions, 'ci'>): Promise<void>;
29
+ export declare function isInGitRepo(): boolean;
30
+ export declare function getUncommittedOrUntrackedFiles(): string[];
31
+ export declare function askForItemSelection(items: string[], message: string): Promise<{
32
+ value: string;
33
+ index: number;
34
+ }>;
35
+ export declare function confirmContinueIfPackageVersionNotSupported({ packageId, packageName, packageVersion, acceptableVersions, note, }: {
36
+ packageId: string;
37
+ packageName: string;
38
+ packageVersion: string;
39
+ acceptableVersions: string;
40
+ note?: string;
41
+ }): Promise<void>;
42
+ export declare function isReact19Installed({ installDir }: Pick<WizardOptions, 'installDir'>): Promise<boolean>;
43
+ /**
44
+ * Installs or updates a package with the user's package manager.
45
+ *
46
+ * IMPORTANT: This function modifies the `package.json`! Be sure to re-read
47
+ * it if you make additional modifications to it after calling this function!
48
+ */
49
+ export declare function installPackage({ packageName, alreadyInstalled, askBeforeUpdating, packageNameDisplayLabel, packageManager, forceInstall, integration, installDir, }: {
50
+ /** The string that is passed to the package manager CLI as identifier to install (e.g. `@workos-inc/authkit-nextjs`, or `@workos-inc/authkit-nextjs@^2.0.0`) */
51
+ packageName: string;
52
+ alreadyInstalled: boolean;
53
+ askBeforeUpdating?: boolean;
54
+ /** Overrides what is shown in the installation logs in place of the `packageName` option. Useful if the `packageName` is ugly */
55
+ packageNameDisplayLabel?: string;
56
+ packageManager?: PackageManager;
57
+ /** Add force install flag to command to skip install precondition fails */
58
+ forceInstall?: boolean;
59
+ /** The integration that is being used */
60
+ integration?: string;
61
+ /** The directory to install the package in */
62
+ installDir: string;
63
+ }): Promise<{
64
+ packageManager?: PackageManager;
65
+ }>;
66
+ /**
67
+ * Checks if @param packageId is listed as a dependency in @param packageJson.
68
+ * If not, it will ask users if they want to continue without the package.
69
+ *
70
+ * Use this function to check if e.g. a the framework of the SDK is installed
71
+ *
72
+ * @param packageJson the package.json object
73
+ * @param packageId the npm name of the package
74
+ * @param packageName a human readable name of the package
75
+ */
76
+ export declare function ensurePackageIsInstalled(packageJson: PackageDotJson, packageId: string, packageName: string, options?: Pick<WizardOptions, 'dashboard'>): Promise<void>;
77
+ export declare function getPackageDotJson({ installDir }: Pick<WizardOptions, 'installDir'>): Promise<PackageDotJson>;
78
+ export declare function updatePackageDotJson(packageDotJson: PackageDotJson, { installDir }: Pick<WizardOptions, 'installDir'>): Promise<void>;
79
+ export declare function getPackageManager(options: Pick<WizardOptions, 'installDir'> & {
80
+ ci?: boolean;
81
+ }): Promise<PackageManager>;
82
+ export declare function isUsingTypeScript({ installDir }: Pick<WizardOptions, 'installDir'>): boolean;
83
+ /**
84
+ * Get WorkOS credentials (API Key and Client ID) from user or CLI options
85
+ * @param requireApiKey - Whether API key is needed (false for client-only SDKs like React, Vanilla JS)
86
+ */
87
+ export declare function getOrAskForWorkOSCredentials(_options: Pick<WizardOptions, 'ci' | 'apiKey' | 'clientId' | 'installDir' | 'dashboard'>, requireApiKey?: boolean): Promise<{
88
+ apiKey: string;
89
+ clientId: string;
90
+ }>;
91
+ /**
92
+ * Fetch project data using a personal API key (for CI mode)
93
+ */