@getpara/cli 2.15.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 (331) hide show
  1. package/README.md +97 -0
  2. package/dist/api/client.d.ts +49 -0
  3. package/dist/api/client.d.ts.map +1 -0
  4. package/dist/api/client.js +247 -0
  5. package/dist/api/errors.d.ts +9 -0
  6. package/dist/api/errors.d.ts.map +1 -0
  7. package/dist/api/errors.js +29 -0
  8. package/dist/api/types.d.ts +155 -0
  9. package/dist/api/types.d.ts.map +1 -0
  10. package/dist/api/types.js +58 -0
  11. package/dist/auth/polling-flow.d.ts +7 -0
  12. package/dist/auth/polling-flow.d.ts.map +1 -0
  13. package/dist/auth/polling-flow.js +94 -0
  14. package/dist/auth/session-manager.d.ts +7 -0
  15. package/dist/auth/session-manager.d.ts.map +1 -0
  16. package/dist/auth/session-manager.js +42 -0
  17. package/dist/cli.d.ts +16 -0
  18. package/dist/cli.d.ts.map +1 -0
  19. package/dist/cli.js +151 -0
  20. package/dist/commands/auth/index.d.ts +3 -0
  21. package/dist/commands/auth/index.d.ts.map +1 -0
  22. package/dist/commands/auth/index.js +18 -0
  23. package/dist/commands/auth/login.d.ts +3 -0
  24. package/dist/commands/auth/login.d.ts.map +1 -0
  25. package/dist/commands/auth/login.js +70 -0
  26. package/dist/commands/auth/logout.d.ts +3 -0
  27. package/dist/commands/auth/logout.d.ts.map +1 -0
  28. package/dist/commands/auth/logout.js +45 -0
  29. package/dist/commands/auth/status.d.ts +3 -0
  30. package/dist/commands/auth/status.d.ts.map +1 -0
  31. package/dist/commands/auth/status.js +54 -0
  32. package/dist/commands/config.d.ts +3 -0
  33. package/dist/commands/config.d.ts.map +1 -0
  34. package/dist/commands/config.js +122 -0
  35. package/dist/commands/create.d.ts +3 -0
  36. package/dist/commands/create.d.ts.map +1 -0
  37. package/dist/commands/create.js +587 -0
  38. package/dist/commands/doctor.d.ts +3 -0
  39. package/dist/commands/doctor.d.ts.map +1 -0
  40. package/dist/commands/doctor.js +67 -0
  41. package/dist/commands/init.d.ts +3 -0
  42. package/dist/commands/init.d.ts.map +1 -0
  43. package/dist/commands/init.js +45 -0
  44. package/dist/commands/keys/archive.d.ts +3 -0
  45. package/dist/commands/keys/archive.d.ts.map +1 -0
  46. package/dist/commands/keys/archive.js +49 -0
  47. package/dist/commands/keys/config/branding.d.ts +23 -0
  48. package/dist/commands/keys/config/branding.d.ts.map +1 -0
  49. package/dist/commands/keys/config/branding.js +246 -0
  50. package/dist/commands/keys/config/categories.d.ts +15 -0
  51. package/dist/commands/keys/config/categories.d.ts.map +1 -0
  52. package/dist/commands/keys/config/categories.js +67 -0
  53. package/dist/commands/keys/config/index.d.ts +3 -0
  54. package/dist/commands/keys/config/index.d.ts.map +1 -0
  55. package/dist/commands/keys/config/index.js +56 -0
  56. package/dist/commands/keys/config/ramps.d.ts +18 -0
  57. package/dist/commands/keys/config/ramps.d.ts.map +1 -0
  58. package/dist/commands/keys/config/ramps.js +185 -0
  59. package/dist/commands/keys/config/security.d.ts +15 -0
  60. package/dist/commands/keys/config/security.d.ts.map +1 -0
  61. package/dist/commands/keys/config/security.js +212 -0
  62. package/dist/commands/keys/config/setup.d.ts +16 -0
  63. package/dist/commands/keys/config/setup.d.ts.map +1 -0
  64. package/dist/commands/keys/config/setup.js +235 -0
  65. package/dist/commands/keys/config/webhooks.d.ts +18 -0
  66. package/dist/commands/keys/config/webhooks.d.ts.map +1 -0
  67. package/dist/commands/keys/config/webhooks.js +279 -0
  68. package/dist/commands/keys/create.d.ts +3 -0
  69. package/dist/commands/keys/create.d.ts.map +1 -0
  70. package/dist/commands/keys/create.js +64 -0
  71. package/dist/commands/keys/get.d.ts +3 -0
  72. package/dist/commands/keys/get.d.ts.map +1 -0
  73. package/dist/commands/keys/get.js +91 -0
  74. package/dist/commands/keys/index.d.ts +3 -0
  75. package/dist/commands/keys/index.d.ts.map +1 -0
  76. package/dist/commands/keys/index.js +22 -0
  77. package/dist/commands/keys/list.d.ts +3 -0
  78. package/dist/commands/keys/list.d.ts.map +1 -0
  79. package/dist/commands/keys/list.js +66 -0
  80. package/dist/commands/keys/rotate.d.ts +3 -0
  81. package/dist/commands/keys/rotate.d.ts.map +1 -0
  82. package/dist/commands/keys/rotate.js +59 -0
  83. package/dist/commands/orgs/index.d.ts +3 -0
  84. package/dist/commands/orgs/index.d.ts.map +1 -0
  85. package/dist/commands/orgs/index.js +15 -0
  86. package/dist/commands/orgs/list.d.ts +3 -0
  87. package/dist/commands/orgs/list.d.ts.map +1 -0
  88. package/dist/commands/orgs/list.js +53 -0
  89. package/dist/commands/orgs/switch.d.ts +3 -0
  90. package/dist/commands/orgs/switch.d.ts.map +1 -0
  91. package/dist/commands/orgs/switch.js +61 -0
  92. package/dist/commands/projects/archive.d.ts +3 -0
  93. package/dist/commands/projects/archive.d.ts.map +1 -0
  94. package/dist/commands/projects/archive.js +51 -0
  95. package/dist/commands/projects/create.d.ts +3 -0
  96. package/dist/commands/projects/create.d.ts.map +1 -0
  97. package/dist/commands/projects/create.js +48 -0
  98. package/dist/commands/projects/index.d.ts +3 -0
  99. package/dist/commands/projects/index.d.ts.map +1 -0
  100. package/dist/commands/projects/index.js +25 -0
  101. package/dist/commands/projects/list.d.ts +3 -0
  102. package/dist/commands/projects/list.d.ts.map +1 -0
  103. package/dist/commands/projects/list.js +52 -0
  104. package/dist/commands/projects/restore.d.ts +3 -0
  105. package/dist/commands/projects/restore.d.ts.map +1 -0
  106. package/dist/commands/projects/restore.js +36 -0
  107. package/dist/commands/projects/switch.d.ts +3 -0
  108. package/dist/commands/projects/switch.d.ts.map +1 -0
  109. package/dist/commands/projects/switch.js +57 -0
  110. package/dist/commands/projects/update.d.ts +3 -0
  111. package/dist/commands/projects/update.d.ts.map +1 -0
  112. package/dist/commands/projects/update.js +67 -0
  113. package/dist/commands/whoami.d.ts +3 -0
  114. package/dist/commands/whoami.d.ts.map +1 -0
  115. package/dist/commands/whoami.js +61 -0
  116. package/dist/config/config-manager.d.ts +3 -0
  117. package/dist/config/config-manager.d.ts.map +1 -0
  118. package/dist/config/config-manager.js +32 -0
  119. package/dist/config/config-store.d.ts +10 -0
  120. package/dist/config/config-store.d.ts.map +1 -0
  121. package/dist/config/config-store.js +37 -0
  122. package/dist/config/credential-store.d.ts +12 -0
  123. package/dist/config/credential-store.d.ts.map +1 -0
  124. package/dist/config/credential-store.js +94 -0
  125. package/dist/config/paths.d.ts +5 -0
  126. package/dist/config/paths.d.ts.map +1 -0
  127. package/dist/config/paths.js +29 -0
  128. package/dist/config/project-config.d.ts +8 -0
  129. package/dist/config/project-config.d.ts.map +1 -0
  130. package/dist/config/project-config.js +41 -0
  131. package/dist/core/constants.d.ts +27 -0
  132. package/dist/core/constants.d.ts.map +1 -0
  133. package/dist/core/constants.js +60 -0
  134. package/dist/core/error-handler.d.ts +24 -0
  135. package/dist/core/error-handler.d.ts.map +1 -0
  136. package/dist/core/error-handler.js +83 -0
  137. package/dist/core/types.d.ts +21 -0
  138. package/dist/core/types.d.ts.map +1 -0
  139. package/dist/core/types.js +0 -0
  140. package/dist/core/update-check.d.ts +6 -0
  141. package/dist/core/update-check.d.ts.map +1 -0
  142. package/dist/core/update-check.js +78 -0
  143. package/dist/diagnostics/checks/chain-dependencies.d.ts +2 -0
  144. package/dist/diagnostics/checks/chain-dependencies.d.ts.map +1 -0
  145. package/dist/diagnostics/checks/chain-dependencies.js +130 -0
  146. package/dist/diagnostics/checks/css-import.d.ts +2 -0
  147. package/dist/diagnostics/checks/css-import.d.ts.map +1 -0
  148. package/dist/diagnostics/checks/css-import.js +57 -0
  149. package/dist/diagnostics/checks/deprecated-packages.d.ts +2 -0
  150. package/dist/diagnostics/checks/deprecated-packages.d.ts.map +1 -0
  151. package/dist/diagnostics/checks/deprecated-packages.js +93 -0
  152. package/dist/diagnostics/checks/env-api-key.d.ts +2 -0
  153. package/dist/diagnostics/checks/env-api-key.d.ts.map +1 -0
  154. package/dist/diagnostics/checks/env-api-key.js +75 -0
  155. package/dist/diagnostics/checks/env-var-prefix.d.ts +2 -0
  156. package/dist/diagnostics/checks/env-var-prefix.d.ts.map +1 -0
  157. package/dist/diagnostics/checks/env-var-prefix.js +52 -0
  158. package/dist/diagnostics/checks/index.d.ts +13 -0
  159. package/dist/diagnostics/checks/index.d.ts.map +1 -0
  160. package/dist/diagnostics/checks/index.js +32 -0
  161. package/dist/diagnostics/checks/para-provider.d.ts +2 -0
  162. package/dist/diagnostics/checks/para-provider.d.ts.map +1 -0
  163. package/dist/diagnostics/checks/para-provider.js +42 -0
  164. package/dist/diagnostics/checks/query-client.d.ts +2 -0
  165. package/dist/diagnostics/checks/query-client.d.ts.map +1 -0
  166. package/dist/diagnostics/checks/query-client.js +58 -0
  167. package/dist/diagnostics/checks/use-client-directive.d.ts +2 -0
  168. package/dist/diagnostics/checks/use-client-directive.d.ts.map +1 -0
  169. package/dist/diagnostics/checks/use-client-directive.js +81 -0
  170. package/dist/diagnostics/checks/version-consistency.d.ts +2 -0
  171. package/dist/diagnostics/checks/version-consistency.d.ts.map +1 -0
  172. package/dist/diagnostics/checks/version-consistency.js +93 -0
  173. package/dist/diagnostics/context.d.ts +3 -0
  174. package/dist/diagnostics/context.d.ts.map +1 -0
  175. package/dist/diagnostics/context.js +56 -0
  176. package/dist/diagnostics/detectors/framework.d.ts +5 -0
  177. package/dist/diagnostics/detectors/framework.d.ts.map +1 -0
  178. package/dist/diagnostics/detectors/framework.js +73 -0
  179. package/dist/diagnostics/detectors/package-manager.d.ts +3 -0
  180. package/dist/diagnostics/detectors/package-manager.d.ts.map +1 -0
  181. package/dist/diagnostics/detectors/package-manager.js +17 -0
  182. package/dist/diagnostics/detectors/sdk.d.ts +7 -0
  183. package/dist/diagnostics/detectors/sdk.d.ts.map +1 -0
  184. package/dist/diagnostics/detectors/sdk.js +48 -0
  185. package/dist/diagnostics/runner.d.ts +3 -0
  186. package/dist/diagnostics/runner.d.ts.map +1 -0
  187. package/dist/diagnostics/runner.js +44 -0
  188. package/dist/diagnostics/types.d.ts +70 -0
  189. package/dist/diagnostics/types.d.ts.map +1 -0
  190. package/dist/diagnostics/types.js +14 -0
  191. package/dist/diagnostics/utils/code-search.d.ts +10 -0
  192. package/dist/diagnostics/utils/code-search.d.ts.map +1 -0
  193. package/dist/diagnostics/utils/code-search.js +98 -0
  194. package/dist/diagnostics/utils/file-system.d.ts +7 -0
  195. package/dist/diagnostics/utils/file-system.d.ts.map +1 -0
  196. package/dist/diagnostics/utils/file-system.js +72 -0
  197. package/dist/diagnostics/utils/package-json.d.ts +12 -0
  198. package/dist/diagnostics/utils/package-json.d.ts.map +1 -0
  199. package/dist/diagnostics/utils/package-json.js +51 -0
  200. package/dist/index.d.ts +2 -0
  201. package/dist/index.d.ts.map +1 -0
  202. package/dist/index.js +20 -0
  203. package/dist/output/formatter.d.ts +25 -0
  204. package/dist/output/formatter.d.ts.map +1 -0
  205. package/dist/output/formatter.js +76 -0
  206. package/dist/output/mask.d.ts +2 -0
  207. package/dist/output/mask.d.ts.map +1 -0
  208. package/dist/output/mask.js +15 -0
  209. package/dist/output/prompts.d.ts +25 -0
  210. package/dist/output/prompts.d.ts.map +1 -0
  211. package/dist/output/prompts.js +86 -0
  212. package/dist/output/spinner.d.ts +6 -0
  213. package/dist/output/spinner.d.ts.map +1 -0
  214. package/dist/output/spinner.js +7 -0
  215. package/dist/output/table.d.ts +9 -0
  216. package/dist/output/table.d.ts.map +1 -0
  217. package/dist/output/table.js +21 -0
  218. package/dist/scaffolding/scaffolder.d.ts +3 -0
  219. package/dist/scaffolding/scaffolder.d.ts.map +1 -0
  220. package/dist/scaffolding/scaffolder.js +78 -0
  221. package/dist/scaffolding/strategies/expo-template.d.ts +16 -0
  222. package/dist/scaffolding/strategies/expo-template.d.ts.map +1 -0
  223. package/dist/scaffolding/strategies/expo-template.js +160 -0
  224. package/dist/scaffolding/strategies/index.d.ts +5 -0
  225. package/dist/scaffolding/strategies/index.d.ts.map +1 -0
  226. package/dist/scaffolding/strategies/index.js +25 -0
  227. package/dist/scaffolding/strategies/nextjs-template.d.ts +12 -0
  228. package/dist/scaffolding/strategies/nextjs-template.d.ts.map +1 -0
  229. package/dist/scaffolding/strategies/nextjs-template.js +122 -0
  230. package/dist/scaffolding/template-renderer.d.ts +11 -0
  231. package/dist/scaffolding/template-renderer.d.ts.map +1 -0
  232. package/dist/scaffolding/template-renderer.js +99 -0
  233. package/dist/scaffolding/types.d.ts +69 -0
  234. package/dist/scaffolding/types.d.ts.map +1 -0
  235. package/dist/scaffolding/types.js +21 -0
  236. package/dist/scaffolding/utils/detect-package-manager.d.ts +23 -0
  237. package/dist/scaffolding/utils/detect-package-manager.d.ts.map +1 -0
  238. package/dist/scaffolding/utils/detect-package-manager.js +57 -0
  239. package/dist/scaffolding/utils/fs.d.ts +11 -0
  240. package/dist/scaffolding/utils/fs.d.ts.map +1 -0
  241. package/dist/scaffolding/utils/fs.js +45 -0
  242. package/dist/scaffolding/utils/resolve-para-version.d.ts +7 -0
  243. package/dist/scaffolding/utils/resolve-para-version.d.ts.map +1 -0
  244. package/dist/scaffolding/utils/resolve-para-version.js +21 -0
  245. package/dist/validation/auth-methods.d.ts +14 -0
  246. package/dist/validation/auth-methods.d.ts.map +1 -0
  247. package/dist/validation/auth-methods.js +23 -0
  248. package/dist/validation/cidr.d.ts +11 -0
  249. package/dist/validation/cidr.d.ts.map +1 -0
  250. package/dist/validation/cidr.js +35 -0
  251. package/dist/validation/hex-color.d.ts +7 -0
  252. package/dist/validation/hex-color.d.ts.map +1 -0
  253. package/dist/validation/hex-color.js +10 -0
  254. package/dist/validation/index.d.ts +9 -0
  255. package/dist/validation/index.d.ts.map +1 -0
  256. package/dist/validation/index.js +49 -0
  257. package/dist/validation/native-passkey.d.ts +31 -0
  258. package/dist/validation/native-passkey.d.ts.map +1 -0
  259. package/dist/validation/native-passkey.js +45 -0
  260. package/dist/validation/session-length.d.ts +18 -0
  261. package/dist/validation/session-length.d.ts.map +1 -0
  262. package/dist/validation/session-length.js +30 -0
  263. package/dist/validation/url.d.ts +26 -0
  264. package/dist/validation/url.d.ts.map +1 -0
  265. package/dist/validation/url.js +50 -0
  266. package/dist/validation/wallet-types.d.ts +14 -0
  267. package/dist/validation/wallet-types.d.ts.map +1 -0
  268. package/dist/validation/wallet-types.js +22 -0
  269. package/dist/validation/webhook.d.ts +4 -0
  270. package/dist/validation/webhook.d.ts.map +1 -0
  271. package/dist/validation/webhook.js +33 -0
  272. package/package.json +60 -0
  273. package/templates/expo/_env.example +3 -0
  274. package/templates/expo/_gitignore +48 -0
  275. package/templates/expo/_yarnrc.yml +1 -0
  276. package/templates/expo/app/(auth)/_layout.tsx +12 -0
  277. package/templates/expo/app/(auth)/index.tsx.template +86 -0
  278. package/templates/expo/app/(tabs)/_layout.tsx +16 -0
  279. package/templates/expo/app/(tabs)/index.tsx +112 -0
  280. package/templates/expo/app/(tabs)/send.tsx +111 -0
  281. package/templates/expo/app/_layout.tsx +17 -0
  282. package/templates/expo/app/index.tsx +22 -0
  283. package/templates/expo/app.json.template +32 -0
  284. package/templates/expo/assets/adaptive-icon.png +0 -0
  285. package/templates/expo/assets/favicon.png +0 -0
  286. package/templates/expo/assets/icon.png +0 -0
  287. package/templates/expo/assets/splash.png +0 -0
  288. package/templates/expo/babel.config.cjs +12 -0
  289. package/templates/expo/components/features/AuthForm.tsx.template +138 -0
  290. package/templates/expo/components/features/OAuthButtons.tsx.template +27 -0
  291. package/templates/expo/components/features/index.ts.template +4 -0
  292. package/templates/expo/components/ui/Button.tsx +58 -0
  293. package/templates/expo/components/ui/Card.tsx +11 -0
  294. package/templates/expo/components/ui/Divider.tsx +19 -0
  295. package/templates/expo/components/ui/Input.tsx +23 -0
  296. package/templates/expo/components/ui/WalletCard.tsx +44 -0
  297. package/templates/expo/components/ui/index.ts +5 -0
  298. package/templates/expo/eslint.config.cjs +15 -0
  299. package/templates/expo/global.css +3 -0
  300. package/templates/expo/hooks/useOneClickLogin.ts.template +161 -0
  301. package/templates/expo/hooks/useViemClient.ts +118 -0
  302. package/templates/expo/hooks/useWallets.ts +52 -0
  303. package/templates/expo/index.js +2 -0
  304. package/templates/expo/lib/auth.ts +54 -0
  305. package/templates/expo/lib/constants.ts.template +2 -0
  306. package/templates/expo/lib/para.ts +14 -0
  307. package/templates/expo/metro.config.cjs +14 -0
  308. package/templates/expo/nativewind-env.d.ts +2 -0
  309. package/templates/expo/prettier.config.cjs +10 -0
  310. package/templates/expo/providers/ParaProvider.tsx +140 -0
  311. package/templates/expo/tailwind.config.cjs +23 -0
  312. package/templates/expo/tsconfig.json +11 -0
  313. package/templates/expo/types/index.ts +28 -0
  314. package/templates/nextjs/README.md +69 -0
  315. package/templates/nextjs/_env.example +8 -0
  316. package/templates/nextjs/_gitignore +36 -0
  317. package/templates/nextjs/_yarnrc.yml +1 -0
  318. package/templates/nextjs/eslint.config.mjs +10 -0
  319. package/templates/nextjs/next.config.ts +5 -0
  320. package/templates/nextjs/postcss.config.mjs +7 -0
  321. package/templates/nextjs/public/para.svg +3 -0
  322. package/templates/nextjs/src/app/layout.tsx +30 -0
  323. package/templates/nextjs/src/app/page.tsx +40 -0
  324. package/templates/nextjs/src/components/ParaProvider.tsx +116 -0
  325. package/templates/nextjs/src/components/layout/Header.tsx +44 -0
  326. package/templates/nextjs/src/components/ui/ConnectCard.tsx +24 -0
  327. package/templates/nextjs/src/components/ui/SignMessage.tsx +53 -0
  328. package/templates/nextjs/src/components/ui/WalletInfo.tsx +22 -0
  329. package/templates/nextjs/src/hooks/useSignHelloWorld.ts +23 -0
  330. package/templates/nextjs/src/styles/globals.css +1 -0
  331. package/templates/nextjs/tsconfig.json +27 -0
@@ -0,0 +1,32 @@
1
+ import { DEFAULT_ENVIRONMENT, parseEnvironment } from "../core/constants.js";
2
+ import { readGlobalConfig } from "./config-store.js";
3
+ import { readProjectConfig } from "./project-config.js";
4
+ async function resolveConfig(opts, projectRoot) {
5
+ const globalConfig = await readGlobalConfig();
6
+ const projectConfig = projectRoot ? await readProjectConfig(projectRoot) : {};
7
+ const environment = resolveEnvironment(opts, projectConfig, globalConfig);
8
+ const organizationId = resolveOrgId(opts, projectConfig, globalConfig);
9
+ const projectId = resolveProjectId(opts, projectConfig, globalConfig);
10
+ return { environment, organizationId, projectId };
11
+ }
12
+ function resolveEnvironment(opts, projectConfig, globalConfig) {
13
+ if (opts.environment) return opts.environment;
14
+ const envVar = process.env["PARA_ENVIRONMENT"];
15
+ if (envVar) return parseEnvironment(envVar);
16
+ if (projectConfig.environment) {
17
+ return parseEnvironment(projectConfig.environment);
18
+ }
19
+ if (globalConfig.defaultEnvironment) {
20
+ return parseEnvironment(globalConfig.defaultEnvironment);
21
+ }
22
+ return DEFAULT_ENVIRONMENT;
23
+ }
24
+ function resolveOrgId(opts, projectConfig, globalConfig) {
25
+ return opts.org || process.env["PARA_ORG_ID"] || projectConfig.organizationId || globalConfig.defaultOrganizationId;
26
+ }
27
+ function resolveProjectId(opts, projectConfig, globalConfig) {
28
+ return opts.project || process.env["PARA_PROJECT_ID"] || projectConfig.projectId || globalConfig.defaultProjectId;
29
+ }
30
+ export {
31
+ resolveConfig
32
+ };
@@ -0,0 +1,10 @@
1
+ export interface GlobalConfig {
2
+ defaultOrganizationId?: string;
3
+ defaultProjectId?: string;
4
+ defaultEnvironment?: string;
5
+ }
6
+ export declare function readGlobalConfig(): Promise<GlobalConfig>;
7
+ export declare function writeGlobalConfig(config: GlobalConfig): Promise<void>;
8
+ export declare function updateGlobalConfig(updates: Partial<GlobalConfig>): Promise<GlobalConfig>;
9
+ export declare function removeGlobalConfigKey(key: keyof GlobalConfig): Promise<void>;
10
+ //# sourceMappingURL=config-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-store.d.ts","sourceRoot":"","sources":["../../src/config/config-store.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,YAAY;IAC3B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAID,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,YAAY,CAAC,CAO9D;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAM3E;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,CAK9F;AAED,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAIlF"}
@@ -0,0 +1,37 @@
1
+ import { readFile, writeFile, mkdir, rename } from "node:fs/promises";
2
+ import { dirname, join } from "node:path";
3
+ import { randomBytes } from "node:crypto";
4
+ import { getGlobalConfigPath } from "./paths.js";
5
+ const DEFAULT_CONFIG = {};
6
+ async function readGlobalConfig() {
7
+ try {
8
+ const raw = await readFile(getGlobalConfigPath(), "utf-8");
9
+ return { ...DEFAULT_CONFIG, ...JSON.parse(raw) };
10
+ } catch {
11
+ return { ...DEFAULT_CONFIG };
12
+ }
13
+ }
14
+ async function writeGlobalConfig(config) {
15
+ const configPath = getGlobalConfigPath();
16
+ await mkdir(dirname(configPath), { recursive: true, mode: 448 });
17
+ const tmpPath = join(dirname(configPath), `.config.${randomBytes(4).toString("hex")}.tmp`);
18
+ await writeFile(tmpPath, JSON.stringify(config, null, 2) + "\n", { encoding: "utf-8", mode: 384 });
19
+ await rename(tmpPath, configPath);
20
+ }
21
+ async function updateGlobalConfig(updates) {
22
+ const config = await readGlobalConfig();
23
+ const merged = { ...config, ...updates };
24
+ await writeGlobalConfig(merged);
25
+ return merged;
26
+ }
27
+ async function removeGlobalConfigKey(key) {
28
+ const config = await readGlobalConfig();
29
+ delete config[key];
30
+ await writeGlobalConfig(config);
31
+ }
32
+ export {
33
+ readGlobalConfig,
34
+ removeGlobalConfigKey,
35
+ updateGlobalConfig,
36
+ writeGlobalConfig
37
+ };
@@ -0,0 +1,12 @@
1
+ import { Environment } from '../core/constants.js';
2
+ import type { SessionInfo } from '../core/types.js';
3
+ interface CredentialsFile {
4
+ sessions: Partial<Record<string, SessionInfo>>;
5
+ }
6
+ export declare function readCredentials(): Promise<CredentialsFile>;
7
+ export declare function getSession(environment: Environment): Promise<SessionInfo | null>;
8
+ export declare function storeSession(environment: Environment, session: SessionInfo): Promise<void>;
9
+ export declare function clearSession(environment: Environment): Promise<void>;
10
+ export declare function clearAllSessions(): Promise<void>;
11
+ export {};
12
+ //# sourceMappingURL=credential-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential-store.d.ts","sourceRoot":"","sources":["../../src/config/credential-store.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,UAAU,eAAe;IACvB,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;CAChD;AA+CD,wBAAsB,eAAe,IAAI,OAAO,CAAC,eAAe,CAAC,CAUhE;AAsBD,wBAAsB,UAAU,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAYtF;AAED,wBAAsB,YAAY,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAIhG;AAED,wBAAsB,YAAY,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAI1E;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAEtD"}
@@ -0,0 +1,94 @@
1
+ import { readFile, writeFile, mkdir, chmod, stat, rename } from "node:fs/promises";
2
+ import { execFile } from "node:child_process";
3
+ import { dirname, join } from "node:path";
4
+ import { randomBytes } from "node:crypto";
5
+ import { getCredentialsPath, getParaConfigDir } from "./paths.js";
6
+ import { Environment } from "../core/constants.js";
7
+ function sessionKey(environment) {
8
+ return environment === Environment.BETA ? Environment.PROD : environment;
9
+ }
10
+ const EMPTY_CREDENTIALS = { sessions: {} };
11
+ async function ensureConfigDir() {
12
+ const dir = getParaConfigDir();
13
+ await mkdir(dir, { recursive: true, mode: 448 });
14
+ if (process.platform === "darwin") {
15
+ try {
16
+ await new Promise((resolve, reject) => {
17
+ execFile(
18
+ "xattr",
19
+ ["-w", "com.apple.metadata:com_apple_backup_excludeItem", "com.apple.backupd", dir],
20
+ (err) => err ? reject(err) : resolve()
21
+ );
22
+ });
23
+ } catch {
24
+ }
25
+ }
26
+ }
27
+ async function checkPermissions() {
28
+ if (process.platform === "win32") return;
29
+ const credPath = getCredentialsPath();
30
+ try {
31
+ const stats = await stat(credPath);
32
+ const mode = stats.mode & 511;
33
+ if (mode & 63) {
34
+ console.warn(
35
+ `Warning: ${credPath} has overly permissive permissions (${mode.toString(8)}). Run: chmod 600 ` + credPath
36
+ );
37
+ }
38
+ } catch {
39
+ }
40
+ }
41
+ async function readCredentials() {
42
+ await checkPermissions();
43
+ try {
44
+ const raw = await readFile(getCredentialsPath(), "utf-8");
45
+ const parsed = JSON.parse(raw);
46
+ if (!parsed.sessions) return { sessions: {} };
47
+ return parsed;
48
+ } catch {
49
+ return { ...EMPTY_CREDENTIALS };
50
+ }
51
+ }
52
+ async function writeCredentialsAtomic(data) {
53
+ await ensureConfigDir();
54
+ const credPath = getCredentialsPath();
55
+ const tmpPath = join(dirname(credPath), `.credentials.${randomBytes(4).toString("hex")}.tmp`);
56
+ await writeFile(tmpPath, JSON.stringify(data, null, 2) + "\n", {
57
+ encoding: "utf-8",
58
+ mode: 384
59
+ });
60
+ if (process.platform !== "win32") {
61
+ await chmod(tmpPath, 384);
62
+ }
63
+ await rename(tmpPath, credPath);
64
+ }
65
+ async function getSession(environment) {
66
+ const creds = await readCredentials();
67
+ const session = creds.sessions[sessionKey(environment)];
68
+ if (!session) return null;
69
+ if (session.expiresAt && Date.now() > session.expiresAt) {
70
+ await clearSession(environment);
71
+ return null;
72
+ }
73
+ return session;
74
+ }
75
+ async function storeSession(environment, session) {
76
+ const creds = await readCredentials();
77
+ creds.sessions[sessionKey(environment)] = session;
78
+ await writeCredentialsAtomic(creds);
79
+ }
80
+ async function clearSession(environment) {
81
+ const creds = await readCredentials();
82
+ delete creds.sessions[sessionKey(environment)];
83
+ await writeCredentialsAtomic(creds);
84
+ }
85
+ async function clearAllSessions() {
86
+ await writeCredentialsAtomic(EMPTY_CREDENTIALS);
87
+ }
88
+ export {
89
+ clearAllSessions,
90
+ clearSession,
91
+ getSession,
92
+ readCredentials,
93
+ storeSession
94
+ };
@@ -0,0 +1,5 @@
1
+ export declare function getParaConfigDir(): string;
2
+ export declare function getGlobalConfigPath(): string;
3
+ export declare function getCredentialsPath(): string;
4
+ export declare function getProjectConfigPath(projectRoot: string): string;
5
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/config/paths.ts"],"names":[],"mappings":"AAcA,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEhE"}
@@ -0,0 +1,29 @@
1
+ import { homedir } from "node:os";
2
+ import { join } from "node:path";
3
+ function getConfigHome() {
4
+ if (process.env["XDG_CONFIG_HOME"]) {
5
+ return process.env["XDG_CONFIG_HOME"];
6
+ }
7
+ if (process.platform === "win32" && process.env["APPDATA"]) {
8
+ return process.env["APPDATA"];
9
+ }
10
+ return join(homedir(), ".config");
11
+ }
12
+ function getParaConfigDir() {
13
+ return join(getConfigHome(), "para");
14
+ }
15
+ function getGlobalConfigPath() {
16
+ return join(getParaConfigDir(), "config.json");
17
+ }
18
+ function getCredentialsPath() {
19
+ return join(getParaConfigDir(), "credentials.json");
20
+ }
21
+ function getProjectConfigPath(projectRoot) {
22
+ return join(projectRoot, ".pararc");
23
+ }
24
+ export {
25
+ getCredentialsPath,
26
+ getGlobalConfigPath,
27
+ getParaConfigDir,
28
+ getProjectConfigPath
29
+ };
@@ -0,0 +1,8 @@
1
+ export interface ProjectConfig {
2
+ organizationId?: string;
3
+ projectId?: string;
4
+ environment?: string;
5
+ }
6
+ export declare function readProjectConfig(projectRoot: string): Promise<ProjectConfig>;
7
+ export declare function writeProjectConfig(projectRoot: string, config: ProjectConfig): Promise<void>;
8
+ //# sourceMappingURL=project-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-config.d.ts","sourceRoot":"","sources":["../../src/config/project-config.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAkBD,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAYnF;AAED,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAMlG"}
@@ -0,0 +1,41 @@
1
+ import { readFile, writeFile, rename } from "node:fs/promises";
2
+ import { dirname, join } from "node:path";
3
+ import { randomBytes } from "node:crypto";
4
+ import { getProjectConfigPath } from "./paths.js";
5
+ const FORBIDDEN_KEYS = ["session", "token", "secret", "credential", "password", "apikey", "api_key"];
6
+ function validateNoSecrets(config) {
7
+ for (const key of Object.keys(config)) {
8
+ const lower = key.toLowerCase();
9
+ for (const forbidden of FORBIDDEN_KEYS) {
10
+ if (lower.includes(forbidden)) {
11
+ throw new Error(
12
+ `.pararc must not contain secret values. Key "${key}" looks like a secret. Store secrets in environment variables or ~/.config/para/credentials.json instead.`
13
+ );
14
+ }
15
+ }
16
+ }
17
+ }
18
+ async function readProjectConfig(projectRoot) {
19
+ try {
20
+ const raw = await readFile(getProjectConfigPath(projectRoot), "utf-8");
21
+ const parsed = JSON.parse(raw);
22
+ validateNoSecrets(parsed);
23
+ return parsed;
24
+ } catch (err) {
25
+ if (err.code === "ENOENT") {
26
+ return {};
27
+ }
28
+ throw err;
29
+ }
30
+ }
31
+ async function writeProjectConfig(projectRoot, config) {
32
+ validateNoSecrets(config);
33
+ const configPath = getProjectConfigPath(projectRoot);
34
+ const tmpPath = join(dirname(configPath), `.pararc.${randomBytes(4).toString("hex")}.tmp`);
35
+ await writeFile(tmpPath, JSON.stringify(config, null, 2) + "\n", "utf-8");
36
+ await rename(tmpPath, configPath);
37
+ }
38
+ export {
39
+ readProjectConfig,
40
+ writeProjectConfig
41
+ };
@@ -0,0 +1,27 @@
1
+ export declare const CLI_VERSION: string;
2
+ export declare const CLI_NAME = "para";
3
+ export declare const USER_AGENT: string;
4
+ export declare enum Environment {
5
+ DEV = "DEV",
6
+ SANDBOX = "SANDBOX",
7
+ BETA = "BETA",
8
+ PROD = "PROD"
9
+ }
10
+ export declare const DEFAULT_ENVIRONMENT = Environment.BETA;
11
+ export declare const BASE_URLS: Record<Environment, string>;
12
+ export declare const PORTAL_URLS: Record<Environment, string>;
13
+ export declare function parseEnvironment(value: string): Environment;
14
+ export declare const DEV_PORTAL_API_KEY = "d0b61c2c8865aaa2fb12886651627271";
15
+ export declare enum ExitCode {
16
+ SUCCESS = 0,
17
+ GENERAL_ERROR = 1,
18
+ USAGE_ERROR = 2,
19
+ AUTH_REQUIRED = 3,
20
+ AUTH_EXPIRED = 4,
21
+ FORBIDDEN = 5,
22
+ NOT_FOUND = 6,
23
+ RATE_LIMITED = 7,
24
+ NETWORK_ERROR = 8,
25
+ INTERRUPTED = 130
26
+ }
27
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/core/constants.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,WAAW,QAAc,CAAC;AACvC,eAAO,MAAM,QAAQ,SAAS,CAAC;AAC/B,eAAO,MAAM,UAAU,QAAgC,CAAC;AAExD,oBAAY,WAAW;IACrB,GAAG,QAAQ;IACX,OAAO,YAAY;IACnB,IAAI,SAAS;IACb,IAAI,SAAS;CACd;AAED,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AAEpD,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAKjD,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAKnD,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAO3D;AAGD,eAAO,MAAM,kBAAkB,qCAAqC,CAAC;AAErE,oBAAY,QAAQ;IAClB,OAAO,IAAI;IACX,aAAa,IAAI;IACjB,WAAW,IAAI;IACf,aAAa,IAAI;IACjB,YAAY,IAAI;IAChB,SAAS,IAAI;IACb,SAAS,IAAI;IACb,YAAY,IAAI;IAChB,aAAa,IAAI;IACjB,WAAW,MAAM;CAClB"}
@@ -0,0 +1,60 @@
1
+ import { createRequire } from "node:module";
2
+ const require2 = createRequire(import.meta.url);
3
+ const pkg = require2("../../package.json");
4
+ const CLI_VERSION = pkg.version;
5
+ const CLI_NAME = "para";
6
+ const USER_AGENT = `@getpara/cli/${CLI_VERSION}`;
7
+ var Environment = /* @__PURE__ */ ((Environment2) => {
8
+ Environment2["DEV"] = "DEV";
9
+ Environment2["SANDBOX"] = "SANDBOX";
10
+ Environment2["BETA"] = "BETA";
11
+ Environment2["PROD"] = "PROD";
12
+ return Environment2;
13
+ })(Environment || {});
14
+ const DEFAULT_ENVIRONMENT = "BETA" /* BETA */;
15
+ const BASE_URLS = {
16
+ ["DEV" /* DEV */]: "http://localhost:8080",
17
+ ["SANDBOX" /* SANDBOX */]: "https://api.sandbox.getpara.com",
18
+ ["BETA" /* BETA */]: "https://api.beta.getpara.com",
19
+ ["PROD" /* PROD */]: "https://api.getpara.com"
20
+ };
21
+ const PORTAL_URLS = {
22
+ ["DEV" /* DEV */]: "http://localhost:5173",
23
+ ["SANDBOX" /* SANDBOX */]: "https://developer.sandbox.usecapsule.com",
24
+ ["BETA" /* BETA */]: "https://developer.getpara.com",
25
+ ["PROD" /* PROD */]: "https://developer.getpara.com"
26
+ };
27
+ function parseEnvironment(value) {
28
+ const upper = value.toUpperCase();
29
+ if (upper in Environment) {
30
+ return Environment[upper];
31
+ }
32
+ const valid = Object.keys(Environment).join(", ");
33
+ throw new Error(`Invalid environment "${value}". Valid values: ${valid}`);
34
+ }
35
+ const DEV_PORTAL_API_KEY = "d0b61c2c8865aaa2fb12886651627271";
36
+ var ExitCode = /* @__PURE__ */ ((ExitCode2) => {
37
+ ExitCode2[ExitCode2["SUCCESS"] = 0] = "SUCCESS";
38
+ ExitCode2[ExitCode2["GENERAL_ERROR"] = 1] = "GENERAL_ERROR";
39
+ ExitCode2[ExitCode2["USAGE_ERROR"] = 2] = "USAGE_ERROR";
40
+ ExitCode2[ExitCode2["AUTH_REQUIRED"] = 3] = "AUTH_REQUIRED";
41
+ ExitCode2[ExitCode2["AUTH_EXPIRED"] = 4] = "AUTH_EXPIRED";
42
+ ExitCode2[ExitCode2["FORBIDDEN"] = 5] = "FORBIDDEN";
43
+ ExitCode2[ExitCode2["NOT_FOUND"] = 6] = "NOT_FOUND";
44
+ ExitCode2[ExitCode2["RATE_LIMITED"] = 7] = "RATE_LIMITED";
45
+ ExitCode2[ExitCode2["NETWORK_ERROR"] = 8] = "NETWORK_ERROR";
46
+ ExitCode2[ExitCode2["INTERRUPTED"] = 130] = "INTERRUPTED";
47
+ return ExitCode2;
48
+ })(ExitCode || {});
49
+ export {
50
+ BASE_URLS,
51
+ CLI_NAME,
52
+ CLI_VERSION,
53
+ DEFAULT_ENVIRONMENT,
54
+ DEV_PORTAL_API_KEY,
55
+ Environment,
56
+ ExitCode,
57
+ PORTAL_URLS,
58
+ USER_AGENT,
59
+ parseEnvironment
60
+ };
@@ -0,0 +1,24 @@
1
+ import { ExitCode } from './constants.js';
2
+ export declare function setJsonMode(enabled: boolean): void;
3
+ export declare class CliError extends Error {
4
+ readonly exitCode: ExitCode;
5
+ constructor(message: string, exitCode?: ExitCode);
6
+ }
7
+ export declare class AuthError extends CliError {
8
+ constructor(message: string, expired?: boolean);
9
+ }
10
+ export declare class NetworkError extends CliError {
11
+ constructor(message: string);
12
+ }
13
+ export declare class RateLimitError extends CliError {
14
+ readonly retryAfter?: number | undefined;
15
+ constructor(message: string, retryAfter?: number | undefined);
16
+ }
17
+ export declare class ForbiddenError extends CliError {
18
+ constructor(message: string);
19
+ }
20
+ export declare class NotFoundError extends CliError {
21
+ constructor(message: string);
22
+ }
23
+ export declare function handleError(error: unknown): never;
24
+ //# sourceMappingURL=error-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../src/core/error-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI1C,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAElD;AAED,qBAAa,QAAS,SAAQ,KAAK;aAGf,QAAQ,EAAE,QAAQ;gBADlC,OAAO,EAAE,MAAM,EACC,QAAQ,GAAE,QAAiC;CAK9D;AAED,qBAAa,SAAU,SAAQ,QAAQ;gBACzB,OAAO,EAAE,MAAM,EAAE,OAAO,UAAQ;CAI7C;AAED,qBAAa,YAAa,SAAQ,QAAQ;gBAC5B,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,cAAe,SAAQ,QAAQ;aAGxB,UAAU,CAAC,EAAE,MAAM;gBADnC,OAAO,EAAE,MAAM,EACC,UAAU,CAAC,EAAE,MAAM,YAAA;CAKtC;AAED,qBAAa,cAAe,SAAQ,QAAQ;gBAC9B,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,aAAc,SAAQ,QAAQ;gBAC7B,OAAO,EAAE,MAAM;CAI5B;AAOD,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CA+BjD"}
@@ -0,0 +1,83 @@
1
+ import { ExitCode } from "./constants.js";
2
+ let _jsonMode = false;
3
+ function setJsonMode(enabled) {
4
+ _jsonMode = enabled;
5
+ }
6
+ class CliError extends Error {
7
+ constructor(message, exitCode = ExitCode.GENERAL_ERROR) {
8
+ super(message);
9
+ this.exitCode = exitCode;
10
+ this.name = "CliError";
11
+ }
12
+ }
13
+ class AuthError extends CliError {
14
+ constructor(message, expired = false) {
15
+ super(message, expired ? ExitCode.AUTH_EXPIRED : ExitCode.AUTH_REQUIRED);
16
+ this.name = "AuthError";
17
+ }
18
+ }
19
+ class NetworkError extends CliError {
20
+ constructor(message) {
21
+ super(message, ExitCode.NETWORK_ERROR);
22
+ this.name = "NetworkError";
23
+ }
24
+ }
25
+ class RateLimitError extends CliError {
26
+ constructor(message, retryAfter) {
27
+ super(message, ExitCode.RATE_LIMITED);
28
+ this.retryAfter = retryAfter;
29
+ this.name = "RateLimitError";
30
+ }
31
+ }
32
+ class ForbiddenError extends CliError {
33
+ constructor(message) {
34
+ super(message, ExitCode.FORBIDDEN);
35
+ this.name = "ForbiddenError";
36
+ }
37
+ }
38
+ class NotFoundError extends CliError {
39
+ constructor(message) {
40
+ super(message, ExitCode.NOT_FOUND);
41
+ this.name = "NotFoundError";
42
+ }
43
+ }
44
+ function emitJsonError(type, code, message) {
45
+ if (!_jsonMode) return;
46
+ console.log(JSON.stringify({ error: { type, code, message } }));
47
+ }
48
+ function handleError(error) {
49
+ if (error instanceof CliError) {
50
+ emitJsonError(error.name, error.exitCode, error.message);
51
+ console.error(`Error: ${error.message}`);
52
+ if (error instanceof RateLimitError && error.retryAfter) {
53
+ console.error(`Rate limited. Retry after ${error.retryAfter} seconds.`);
54
+ }
55
+ process.exit(error.exitCode);
56
+ }
57
+ if (error instanceof Error && "exitCode" in error) {
58
+ const exitCode = error.exitCode;
59
+ if (exitCode === 0) {
60
+ process.exit(ExitCode.SUCCESS);
61
+ }
62
+ emitJsonError("UsageError", ExitCode.USAGE_ERROR, error.message);
63
+ console.error(error.message);
64
+ process.exit(ExitCode.USAGE_ERROR);
65
+ }
66
+ if (error instanceof Error && error.message.includes("cancelled")) {
67
+ process.exit(ExitCode.INTERRUPTED);
68
+ }
69
+ const message = error instanceof Error ? error.message : "An unexpected error occurred.";
70
+ emitJsonError("Error", ExitCode.GENERAL_ERROR, message);
71
+ console.error(`Error: ${message}`);
72
+ process.exit(ExitCode.GENERAL_ERROR);
73
+ }
74
+ export {
75
+ AuthError,
76
+ CliError,
77
+ ForbiddenError,
78
+ NetworkError,
79
+ NotFoundError,
80
+ RateLimitError,
81
+ handleError,
82
+ setJsonMode
83
+ };
@@ -0,0 +1,21 @@
1
+ import type { Environment } from './constants.js';
2
+ export interface GlobalOptions {
3
+ json: boolean;
4
+ environment: Environment;
5
+ org?: string;
6
+ project?: string;
7
+ quiet: boolean;
8
+ noInput: boolean;
9
+ }
10
+ export interface ResolvedConfig {
11
+ environment: Environment;
12
+ organizationId?: string;
13
+ projectId?: string;
14
+ }
15
+ export interface SessionInfo {
16
+ sessionId: string;
17
+ userId: string;
18
+ email: string;
19
+ expiresAt: number;
20
+ }
21
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,EAAE,WAAW,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB"}
File without changes
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Starts a non-blocking update check. Returns a function that, when called,
3
+ * prints the update notice if a newer version is available.
4
+ */
5
+ export declare function startUpdateCheck(): () => Promise<void>;
6
+ //# sourceMappingURL=update-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-check.d.ts","sourceRoot":"","sources":["../../src/core/update-check.ts"],"names":[],"mappings":"AAwDA;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,OAAO,CAAC,IAAI,CAAC,CAgBtD"}
@@ -0,0 +1,78 @@
1
+ import { readFile, writeFile, mkdir } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import pc from "picocolors";
4
+ import { getParaConfigDir } from "../config/paths.js";
5
+ import { CLI_VERSION } from "./constants.js";
6
+ const PACKAGE_NAME = "@getpara/cli";
7
+ const CHECK_INTERVAL_MS = 24 * 60 * 60 * 1e3;
8
+ function getCachePath() {
9
+ return join(getParaConfigDir(), "update-check.json");
10
+ }
11
+ async function readCache() {
12
+ try {
13
+ const raw = await readFile(getCachePath(), "utf-8");
14
+ return JSON.parse(raw);
15
+ } catch {
16
+ return null;
17
+ }
18
+ }
19
+ async function writeCache(cache) {
20
+ const dir = getParaConfigDir();
21
+ await mkdir(dir, { recursive: true });
22
+ await writeFile(getCachePath(), JSON.stringify(cache), "utf-8");
23
+ }
24
+ async function fetchLatestVersion() {
25
+ try {
26
+ const controller = new AbortController();
27
+ const timeout = setTimeout(() => controller.abort(), 5e3);
28
+ const res = await fetch(`https://registry.npmjs.org/${PACKAGE_NAME}/latest`, { signal: controller.signal });
29
+ clearTimeout(timeout);
30
+ if (!res.ok) return null;
31
+ const data = await res.json();
32
+ return data.version ?? null;
33
+ } catch {
34
+ return null;
35
+ }
36
+ }
37
+ function isNewer(latest, current) {
38
+ const parse = (v) => v.replace(/^v/, "").split(".").map(Number);
39
+ const [lMajor, lMinor, lPatch] = parse(latest);
40
+ const [cMajor, cMinor, cPatch] = parse(current);
41
+ if (lMajor !== cMajor) return lMajor > cMajor;
42
+ if (lMinor !== cMinor) return lMinor > cMinor;
43
+ return lPatch > cPatch;
44
+ }
45
+ function startUpdateCheck() {
46
+ const promise = checkForUpdate();
47
+ return async () => {
48
+ const result = await promise;
49
+ if (result) {
50
+ console.error("");
51
+ console.error(pc.yellow(` Update available: ${pc.dim(CLI_VERSION)} \u2192 ${pc.green(result)}`));
52
+ console.error(
53
+ pc.yellow(
54
+ ` Update: ${pc.cyan(`npm i -g ${PACKAGE_NAME}`)} or ${pc.cyan(`yarn global add ${PACKAGE_NAME}`)} or ${pc.cyan(`pnpm add -g ${PACKAGE_NAME}`)}`
55
+ )
56
+ );
57
+ console.error("");
58
+ }
59
+ };
60
+ }
61
+ async function checkForUpdate() {
62
+ try {
63
+ const cache = await readCache();
64
+ if (cache && Date.now() - cache.lastCheck < CHECK_INTERVAL_MS) {
65
+ return isNewer(cache.latestVersion, CLI_VERSION) ? cache.latestVersion : null;
66
+ }
67
+ const latest = await fetchLatestVersion();
68
+ if (!latest) return null;
69
+ await writeCache({ lastCheck: Date.now(), latestVersion: latest }).catch(() => {
70
+ });
71
+ return isNewer(latest, CLI_VERSION) ? latest : null;
72
+ } catch {
73
+ return null;
74
+ }
75
+ }
76
+ export {
77
+ startUpdateCheck
78
+ };
@@ -0,0 +1,2 @@
1
+ export declare const chainDependenciesCheck: import("../types.js").Check;
2
+ //# sourceMappingURL=chain-dependencies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain-dependencies.d.ts","sourceRoot":"","sources":["../../../src/diagnostics/checks/chain-dependencies.ts"],"names":[],"mappings":"AAiBA,eAAO,MAAM,sBAAsB,6BA6BjC,CAAC"}