@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
package/README.md ADDED
@@ -0,0 +1,97 @@
1
+ # @getpara/cli
2
+
3
+ The official CLI for [Para](https://getpara.com). Authenticate, manage projects and API keys, scaffold new apps, and diagnose SDK issues — all from the terminal.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install -g @getpara/cli
9
+ ```
10
+
11
+ Or run directly with npx:
12
+
13
+ ```bash
14
+ npx @getpara/cli <command>
15
+ ```
16
+
17
+ ## Quick Start
18
+
19
+ ```bash
20
+ para login # Sign in via the developer portal
21
+ para orgs switch # Pick your organization
22
+ para projects switch # Pick your project
23
+ para keys list # View your API keys
24
+ ```
25
+
26
+ ## Commands
27
+
28
+ ### Auth
29
+
30
+ | Command | Description |
31
+ |---------|-------------|
32
+ | `para login` | Sign in via the Para developer portal |
33
+ | `para logout` | Clear stored credentials |
34
+ | `para whoami` | Show current user, org, and project context |
35
+
36
+ ### Resources
37
+
38
+ | Command | Description |
39
+ |---------|-------------|
40
+ | `para orgs list` | List your organizations |
41
+ | `para orgs switch` | Set the active organization |
42
+ | `para projects list` | List projects in your organization |
43
+ | `para projects create` | Create a new project |
44
+ | `para projects switch` | Set the active project |
45
+ | `para keys list` | List API keys for a project |
46
+ | `para keys get <id>` | Get details for a specific key |
47
+ | `para keys create` | Create a new API key |
48
+ | `para keys rotate <id>` | Rotate an API key |
49
+
50
+ ### Setup
51
+
52
+ | Command | Description |
53
+ |---------|-------------|
54
+ | `para create [name]` | Scaffold a new Para-powered app (Next.js or Expo) |
55
+ | `para init` | Save current org/project/env to a `.pararc` file |
56
+ | `para config get [key]` | View configuration values |
57
+ | `para config set <key> <value>` | Set a configuration value |
58
+ | `para config unset <key>` | Remove a configuration value |
59
+ | `para doctor [path]` | Check a project for common SDK issues |
60
+
61
+ ## Global Options
62
+
63
+ ```
64
+ -e, --environment <env> Target environment (DEV, SANDBOX, BETA, PROD)
65
+ --json Output as JSON
66
+ --org <id> Organization ID override
67
+ --project <id> Project ID override
68
+ -q, --quiet Suppress non-essential output
69
+ --no-input Disable interactive prompts (auto-detected in CI)
70
+ ```
71
+
72
+ ## Authentication
73
+
74
+ The CLI supports three authentication methods:
75
+
76
+ 1. **Browser login** (default) — `para login` opens the developer portal for OAuth
77
+ 2. **Environment variable** — set `PARA_TOKEN` for scripts and CI
78
+ 3. **Token file** — set `PARA_TOKEN_FILE` to read a token from disk
79
+
80
+ Credentials are stored in `~/.config/para/credentials.json`.
81
+
82
+ ## Configuration
83
+
84
+ Settings are resolved in order (first match wins):
85
+
86
+ 1. CLI flags (`--org`, `--project`, `-e`)
87
+ 2. Environment variables (`PARA_ENVIRONMENT`, `PARA_ORG_ID`, `PARA_PROJECT_ID`)
88
+ 3. Project config (`.pararc` in project root)
89
+ 4. Global config (`~/.config/para/config.json`)
90
+ 5. Defaults
91
+
92
+ ## More
93
+
94
+ - [Para Documentation](https://docs.getpara.com)
95
+ - [Developer Portal](https://developer.getpara.com)
96
+
97
+ Run `para <command> --help` for detailed usage on any command.
@@ -0,0 +1,49 @@
1
+ import { type Environment } from '../core/constants.js';
2
+ import type { Organization, Project, ApiKey, ApiKeyConfig, AuthStatus, WebhookConfig, WebhookConfigWithSecretResponse, WebhookTestResponse, WebhookRotateSecretResponse, UpdateWebhookBody } from './types.js';
3
+ interface ClientConfig {
4
+ environment: Environment;
5
+ sessionId: string;
6
+ }
7
+ export declare class ParaApiClient {
8
+ private readonly config;
9
+ private readonly baseUrl;
10
+ private readonly sessionId;
11
+ constructor(config: ClientConfig);
12
+ private request;
13
+ getAuthStatus(): Promise<AuthStatus>;
14
+ logout(): Promise<void>;
15
+ getOrganizations(userId: string): Promise<Organization[]>;
16
+ getProjects(orgId: string): Promise<Project[]>;
17
+ createProject(orgId: string, data: {
18
+ name: string;
19
+ description?: string;
20
+ framework?: string;
21
+ }): Promise<Project>;
22
+ getApiKeys(orgId: string, projectId: string, environment: string): Promise<ApiKey[]>;
23
+ getApiKey(orgId: string, projectId: string, environment: string, keyId: string): Promise<ApiKey>;
24
+ createApiKey(orgId: string, projectId: string, environment: string, data: {
25
+ name: string;
26
+ displayName?: string;
27
+ }): Promise<ApiKey>;
28
+ rotateApiKey(orgId: string, projectId: string, environment: string, keyId: string): Promise<{
29
+ newKey: string;
30
+ }>;
31
+ rotateSecretApiKey(orgId: string, projectId: string, environment: string, keyId: string): Promise<{
32
+ newKey: string;
33
+ }>;
34
+ updateProject(orgId: string, projectId: string, data: Partial<Pick<Project, 'name' | 'description' | 'framework' | 'packageManager'>>): Promise<void>;
35
+ deleteProject(orgId: string, projectId: string): Promise<void>;
36
+ restoreProject(orgId: string, projectId: string): Promise<void>;
37
+ updateApiKey(orgId: string, projectId: string, environment: string, keyId: string, data: ApiKeyConfig): Promise<void>;
38
+ deleteApiKey(orgId: string, projectId: string, environment: string, keyId: string): Promise<void>;
39
+ getIpAllowlist(orgId: string, projectId: string, environment: string, keyId: string): Promise<string[]>;
40
+ updateIpAllowlist(orgId: string, projectId: string, environment: string, keyId: string, cidrs: string[]): Promise<string[]>;
41
+ private webhookBasePath;
42
+ getWebhookConfig(orgId: string, projectId: string, environment: string, keyId: string): Promise<WebhookConfig | null>;
43
+ updateWebhookConfig(orgId: string, projectId: string, environment: string, keyId: string, data: UpdateWebhookBody): Promise<WebhookConfigWithSecretResponse>;
44
+ deleteWebhookConfig(orgId: string, projectId: string, environment: string, keyId: string): Promise<void>;
45
+ testWebhook(orgId: string, projectId: string, environment: string, keyId: string): Promise<WebhookTestResponse>;
46
+ rotateWebhookSecret(orgId: string, projectId: string, environment: string, keyId: string): Promise<WebhookRotateSecretResponse>;
47
+ }
48
+ export {};
49
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,247 @@
1
+ import { CLI_VERSION, USER_AGENT, BASE_URLS, DEV_PORTAL_API_KEY } from "../core/constants.js";
2
+ import { NetworkError } from "../core/error-handler.js";
3
+ import { classifyApiError } from "./errors.js";
4
+ const SAFE_PATH_SEGMENT = /^[a-zA-Z0-9_-]+$/;
5
+ function validatePathSegment(value, name) {
6
+ if (!SAFE_PATH_SEGMENT.test(value)) {
7
+ throw new Error(`Invalid ${name}: "${value}". Only alphanumeric characters, hyphens, and underscores are allowed.`);
8
+ }
9
+ }
10
+ const MAX_RETRIES = 2;
11
+ const RETRY_BACKOFF_MS = 1e3;
12
+ const REQUEST_TIMEOUT_MS = 3e4;
13
+ class ParaApiClient {
14
+ constructor(config) {
15
+ this.config = config;
16
+ this.baseUrl = BASE_URLS[config.environment];
17
+ this.sessionId = config.sessionId;
18
+ }
19
+ baseUrl;
20
+ sessionId;
21
+ async request(method, path, body) {
22
+ const url = `${this.baseUrl}${path}`;
23
+ const headers = {
24
+ "Content-Type": "application/json",
25
+ "x-capsule-sid": this.sessionId,
26
+ "X-External-API-Key": DEV_PORTAL_API_KEY,
27
+ "x-para-client-type": "cli",
28
+ "x-para-client-version": CLI_VERSION,
29
+ "User-Agent": USER_AGENT
30
+ };
31
+ let lastError = null;
32
+ for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {
33
+ try {
34
+ const controller = new AbortController();
35
+ const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);
36
+ const response = await fetch(url, {
37
+ method,
38
+ headers,
39
+ body: body ? JSON.stringify(body) : void 0,
40
+ signal: controller.signal
41
+ });
42
+ clearTimeout(timeout);
43
+ if (response.ok) {
44
+ if (response.status === 204) return void 0;
45
+ return await response.json();
46
+ }
47
+ let errorBody = {};
48
+ try {
49
+ errorBody = await response.json();
50
+ } catch {
51
+ errorBody = { message: response.statusText };
52
+ }
53
+ if ((response.status === 429 || response.status >= 500) && attempt < MAX_RETRIES) {
54
+ const retryAfter = response.headers.get("Retry-After");
55
+ const parsedRetry = retryAfter ? parseInt(retryAfter, 10) : NaN;
56
+ const delay = !isNaN(parsedRetry) ? Math.min(parsedRetry, 60) * 1e3 : RETRY_BACKOFF_MS * Math.pow(2, attempt);
57
+ await new Promise((resolve) => setTimeout(resolve, delay));
58
+ lastError = classifyApiError(response.status, errorBody);
59
+ continue;
60
+ }
61
+ throw classifyApiError(response.status, errorBody);
62
+ } catch (error) {
63
+ if (error instanceof Error && error.name === "AbortError") {
64
+ if (attempt < MAX_RETRIES) {
65
+ await new Promise((resolve) => setTimeout(resolve, RETRY_BACKOFF_MS * Math.pow(2, attempt)));
66
+ lastError = new NetworkError(`Request to ${this.baseUrl} timed out after ${REQUEST_TIMEOUT_MS / 1e3}s.`);
67
+ continue;
68
+ }
69
+ throw new NetworkError(`Request to ${this.baseUrl} timed out after ${REQUEST_TIMEOUT_MS / 1e3}s.`);
70
+ }
71
+ if (error instanceof TypeError && error.message.includes("fetch")) {
72
+ if (attempt < MAX_RETRIES) {
73
+ await new Promise((resolve) => setTimeout(resolve, RETRY_BACKOFF_MS * Math.pow(2, attempt)));
74
+ lastError = new NetworkError(`Failed to connect to ${this.baseUrl}. Check your network connection.`);
75
+ continue;
76
+ }
77
+ throw new NetworkError(`Failed to connect to ${this.baseUrl}. Check your network connection.`);
78
+ }
79
+ throw error;
80
+ }
81
+ }
82
+ throw lastError || new NetworkError("Request failed after retries.");
83
+ }
84
+ // Auth
85
+ async getAuthStatus() {
86
+ return this.request("GET", "/cli/auth/status");
87
+ }
88
+ async logout() {
89
+ return this.request("POST", "/cli/auth/logout");
90
+ }
91
+ // Organizations
92
+ async getOrganizations(userId) {
93
+ validatePathSegment(userId, "userId");
94
+ const res = await this.request("GET", `/users/${userId}/organizations`);
95
+ return res.organizations;
96
+ }
97
+ // Projects
98
+ async getProjects(orgId) {
99
+ validatePathSegment(orgId, "orgId");
100
+ const res = await this.request("GET", `/organizations/${orgId}/projects`);
101
+ return res.projects;
102
+ }
103
+ async createProject(orgId, data) {
104
+ validatePathSegment(orgId, "orgId");
105
+ const res = await this.request("POST", `/organizations/${orgId}/projects`, data);
106
+ return res.project;
107
+ }
108
+ // API Keys
109
+ async getApiKeys(orgId, projectId, environment) {
110
+ validatePathSegment(orgId, "orgId");
111
+ validatePathSegment(projectId, "projectId");
112
+ validatePathSegment(environment.toLowerCase(), "environment");
113
+ const res = await this.request(
114
+ "GET",
115
+ `/organizations/${orgId}/projects/${projectId}/${environment.toLowerCase()}/keys`
116
+ );
117
+ return res.keys;
118
+ }
119
+ async getApiKey(orgId, projectId, environment, keyId) {
120
+ validatePathSegment(orgId, "orgId");
121
+ validatePathSegment(projectId, "projectId");
122
+ validatePathSegment(environment.toLowerCase(), "environment");
123
+ validatePathSegment(keyId, "keyId");
124
+ const res = await this.request(
125
+ "GET",
126
+ `/organizations/${orgId}/projects/${projectId}/${environment.toLowerCase()}/keys/${keyId}`
127
+ );
128
+ return res.key;
129
+ }
130
+ async createApiKey(orgId, projectId, environment, data) {
131
+ validatePathSegment(orgId, "orgId");
132
+ validatePathSegment(projectId, "projectId");
133
+ validatePathSegment(environment.toLowerCase(), "environment");
134
+ const res = await this.request(
135
+ "POST",
136
+ `/organizations/${orgId}/projects/${projectId}/${environment.toLowerCase()}/keys`,
137
+ data
138
+ );
139
+ return res.key;
140
+ }
141
+ async rotateApiKey(orgId, projectId, environment, keyId) {
142
+ validatePathSegment(orgId, "orgId");
143
+ validatePathSegment(projectId, "projectId");
144
+ validatePathSegment(environment.toLowerCase(), "environment");
145
+ validatePathSegment(keyId, "keyId");
146
+ return this.request(
147
+ "POST",
148
+ `/organizations/${orgId}/projects/${projectId}/${environment.toLowerCase()}/keys/${keyId}/rotate`
149
+ );
150
+ }
151
+ async rotateSecretApiKey(orgId, projectId, environment, keyId) {
152
+ validatePathSegment(orgId, "orgId");
153
+ validatePathSegment(projectId, "projectId");
154
+ validatePathSegment(environment.toLowerCase(), "environment");
155
+ validatePathSegment(keyId, "keyId");
156
+ return this.request(
157
+ "POST",
158
+ `/organizations/${orgId}/projects/${projectId}/${environment.toLowerCase()}/keys/${keyId}/rotate-secret-key`
159
+ );
160
+ }
161
+ // Project management
162
+ async updateProject(orgId, projectId, data) {
163
+ validatePathSegment(orgId, "orgId");
164
+ validatePathSegment(projectId, "projectId");
165
+ await this.request("PATCH", `/organizations/${orgId}/projects/${projectId}`, data);
166
+ }
167
+ async deleteProject(orgId, projectId) {
168
+ validatePathSegment(orgId, "orgId");
169
+ validatePathSegment(projectId, "projectId");
170
+ await this.request("DELETE", `/organizations/${orgId}/projects/${projectId}`);
171
+ }
172
+ async restoreProject(orgId, projectId) {
173
+ validatePathSegment(orgId, "orgId");
174
+ validatePathSegment(projectId, "projectId");
175
+ await this.request("PATCH", `/organizations/${orgId}/projects/${projectId}/restore`);
176
+ }
177
+ // API Key management
178
+ async updateApiKey(orgId, projectId, environment, keyId, data) {
179
+ validatePathSegment(orgId, "orgId");
180
+ validatePathSegment(projectId, "projectId");
181
+ validatePathSegment(environment.toLowerCase(), "environment");
182
+ validatePathSegment(keyId, "keyId");
183
+ await this.request(
184
+ "PATCH",
185
+ `/organizations/${orgId}/projects/${projectId}/${environment.toLowerCase()}/keys/${keyId}`,
186
+ data
187
+ );
188
+ }
189
+ async deleteApiKey(orgId, projectId, environment, keyId) {
190
+ validatePathSegment(orgId, "orgId");
191
+ validatePathSegment(projectId, "projectId");
192
+ validatePathSegment(environment.toLowerCase(), "environment");
193
+ validatePathSegment(keyId, "keyId");
194
+ await this.request("DELETE", `/organizations/${orgId}/projects/${projectId}/${environment.toLowerCase()}/keys/${keyId}`);
195
+ }
196
+ // IP Allowlist
197
+ async getIpAllowlist(orgId, projectId, environment, keyId) {
198
+ validatePathSegment(orgId, "orgId");
199
+ validatePathSegment(projectId, "projectId");
200
+ validatePathSegment(environment.toLowerCase(), "environment");
201
+ validatePathSegment(keyId, "keyId");
202
+ const res = await this.request(
203
+ "GET",
204
+ `/organizations/${orgId}/projects/${projectId}/${environment.toLowerCase()}/keys/${keyId}/ip-allowlist`
205
+ );
206
+ return res.allowlistCidrs;
207
+ }
208
+ async updateIpAllowlist(orgId, projectId, environment, keyId, cidrs) {
209
+ validatePathSegment(orgId, "orgId");
210
+ validatePathSegment(projectId, "projectId");
211
+ validatePathSegment(environment.toLowerCase(), "environment");
212
+ validatePathSegment(keyId, "keyId");
213
+ const res = await this.request(
214
+ "PUT",
215
+ `/organizations/${orgId}/projects/${projectId}/${environment.toLowerCase()}/keys/${keyId}/ip-allowlist`,
216
+ { allowlistCidrs: cidrs }
217
+ );
218
+ return res.allowlistCidrs;
219
+ }
220
+ // Webhooks
221
+ webhookBasePath(orgId, projectId, environment, keyId) {
222
+ validatePathSegment(orgId, "orgId");
223
+ validatePathSegment(projectId, "projectId");
224
+ validatePathSegment(environment.toLowerCase(), "environment");
225
+ validatePathSegment(keyId, "keyId");
226
+ return `/organizations/${orgId}/projects/${projectId}/${environment.toLowerCase()}/keys/${keyId}/webhook`;
227
+ }
228
+ async getWebhookConfig(orgId, projectId, environment, keyId) {
229
+ const res = await this.request("GET", this.webhookBasePath(orgId, projectId, environment, keyId));
230
+ return res.webhook;
231
+ }
232
+ async updateWebhookConfig(orgId, projectId, environment, keyId, data) {
233
+ return this.request("PUT", this.webhookBasePath(orgId, projectId, environment, keyId), data);
234
+ }
235
+ async deleteWebhookConfig(orgId, projectId, environment, keyId) {
236
+ await this.request("DELETE", this.webhookBasePath(orgId, projectId, environment, keyId));
237
+ }
238
+ async testWebhook(orgId, projectId, environment, keyId) {
239
+ return this.request("POST", `${this.webhookBasePath(orgId, projectId, environment, keyId)}/test`);
240
+ }
241
+ async rotateWebhookSecret(orgId, projectId, environment, keyId) {
242
+ return this.request("POST", `${this.webhookBasePath(orgId, projectId, environment, keyId)}/rotate-secret`);
243
+ }
244
+ }
245
+ export {
246
+ ParaApiClient
247
+ };
@@ -0,0 +1,9 @@
1
+ import { CliError, AuthError, ForbiddenError, NetworkError, RateLimitError, NotFoundError } from '../core/error-handler.js';
2
+ export { CliError, AuthError, ForbiddenError, NetworkError, RateLimitError, NotFoundError };
3
+ export interface ApiErrorResponse {
4
+ message?: string;
5
+ error?: string;
6
+ statusCode?: number;
7
+ }
8
+ export declare function classifyApiError(status: number, body: ApiErrorResponse): CliError;
9
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/api/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAG5H,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC;AAE5F,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,QAAQ,CAmBjF"}
@@ -0,0 +1,29 @@
1
+ import { CliError, AuthError, ForbiddenError, NetworkError, RateLimitError, NotFoundError } from "../core/error-handler.js";
2
+ function classifyApiError(status, body) {
3
+ const message = body.message || body.error || `API error (${status})`;
4
+ switch (status) {
5
+ case 401:
6
+ return new AuthError(message);
7
+ case 403:
8
+ return new ForbiddenError(message);
9
+ case 404:
10
+ return new NotFoundError(message);
11
+ case 429: {
12
+ return new RateLimitError(message);
13
+ }
14
+ default:
15
+ if (status >= 500) {
16
+ return new NetworkError(`Server error: ${message}`);
17
+ }
18
+ return new CliError(message);
19
+ }
20
+ }
21
+ export {
22
+ AuthError,
23
+ CliError,
24
+ ForbiddenError,
25
+ NetworkError,
26
+ NotFoundError,
27
+ RateLimitError,
28
+ classifyApiError
29
+ };
@@ -0,0 +1,155 @@
1
+ import { WalletType, AuthMethod, ThemeMode, OnRampProvider, WebhookEventType, SUBSCRIBABLE_WEBHOOK_EVENT_TYPES as SUBSCRIBABLE_WEBHOOK_EVENTS } from '@getpara/shared';
2
+ export { WalletType, AuthMethod, ThemeMode, OnRampProvider, WebhookEventType, SUBSCRIBABLE_WEBHOOK_EVENTS };
3
+ export declare enum Font {
4
+ ARIAL = "Arial",
5
+ COURIER_NEW = "Courier New",
6
+ GEORGIA = "Georgia",
7
+ HELVETICA = "Helvetica",
8
+ LUCIDA_SANS = "Lucida Sans",
9
+ TAHOMA = "Tahoma",
10
+ TIMES_NEW_ROMAN = "Times New Roman",
11
+ TREBUCHET_MS = "Trebuchet MS"
12
+ }
13
+ export declare enum Framework {
14
+ REACT = "REACT",
15
+ NEXT = "NEXT",
16
+ VITE = "VITE",
17
+ VUE = "VUE",
18
+ SVELTE = "SVELTE",
19
+ NODE = "NODE",
20
+ REACT_NATIVE = "REACT_NATIVE",
21
+ EXPO = "EXPO",
22
+ FLUTTER = "FLUTTER",
23
+ SWIFT = "SWIFT",
24
+ DENO = "DENO",
25
+ BUN = "BUN"
26
+ }
27
+ export declare enum PackageManager {
28
+ NPM = "NPM",
29
+ YARN = "YARN",
30
+ PNPM = "PNPM"
31
+ }
32
+ export interface WalletTypeConfig {
33
+ type: WalletType;
34
+ optional?: boolean;
35
+ }
36
+ export interface Organization {
37
+ id: string;
38
+ name: string;
39
+ activePlanSlug?: string;
40
+ hasDevPortalAccess?: boolean;
41
+ logoUrl?: string;
42
+ archived?: boolean;
43
+ suspended?: boolean;
44
+ }
45
+ export interface OrganizationMember {
46
+ id: string;
47
+ userId: string;
48
+ organizationId: string;
49
+ role: MemberRole;
50
+ email?: string;
51
+ name?: string;
52
+ }
53
+ export declare enum MemberRole {
54
+ ORG_OWNER = "ORG_OWNER",
55
+ ORG_MEMBER = "ORG_MEMBER",
56
+ PROJECT_MEMBER = "PROJECT_MEMBER"
57
+ }
58
+ export interface Project {
59
+ id: string;
60
+ name: string;
61
+ description?: string;
62
+ iconUrl?: string;
63
+ framework?: string;
64
+ packageManager?: string;
65
+ archived?: boolean;
66
+ organizationId: string;
67
+ }
68
+ export interface ApiKey {
69
+ id: string;
70
+ projectId: string;
71
+ organizationId: string;
72
+ apiKey: string;
73
+ secretApiKey?: string;
74
+ name: string;
75
+ displayName?: string;
76
+ environment: string;
77
+ archived?: boolean;
78
+ origins?: string[];
79
+ supportedAuthMethods?: string[];
80
+ supportedWalletTypes?: WalletTypeConfig[];
81
+ sessionMaxAge?: string | null;
82
+ forceTransactionPopups?: boolean;
83
+ transactionPopupsEnabled?: boolean;
84
+ ipAllowlistCidrs?: string[] | null;
85
+ logoUrl?: string | null;
86
+ iconUrl?: string | null;
87
+ backgroundColor?: string | null;
88
+ foregroundColor?: string | null;
89
+ accentColor?: string | null;
90
+ themeMode?: ThemeMode | null;
91
+ font?: string | null;
92
+ verifyUrl?: string | null;
93
+ portalUrl?: string | null;
94
+ emailImageUrl?: string | null;
95
+ emailImageLink?: string | null;
96
+ emailWelcome?: boolean;
97
+ emailBackupKit?: boolean;
98
+ homepageUrl?: string | null;
99
+ twitterUrl?: string | null;
100
+ linkedinUrl?: string | null;
101
+ githubUrl?: string | null;
102
+ cosmosPrefix?: string;
103
+ teamId?: string | null;
104
+ bundleIdentifier?: string | null;
105
+ androidPackageName?: string | null;
106
+ androidSha256CertFingerprints?: string[] | null;
107
+ hasSecretKey?: boolean;
108
+ isBuyEnabled?: boolean;
109
+ isReceiveEnabled?: boolean;
110
+ isWithdrawEnabled?: boolean;
111
+ onRampProviders?: string[];
112
+ rampApiKey?: string;
113
+ defaultBuyAmount?: string;
114
+ defaultOnRampAsset?: string;
115
+ defaultOnRampNetwork?: string;
116
+ }
117
+ export type ApiKeyConfig = Partial<Omit<ApiKey, 'id' | 'apiKey' | 'secretApiKey' | 'organizationId' | 'projectId' | 'archived' | 'environment' | 'hasSecretKey'>>;
118
+ export interface WebhookConfig {
119
+ url: string;
120
+ enabled: boolean;
121
+ events: WebhookEventType[];
122
+ createdAt: string;
123
+ updatedAt: string;
124
+ }
125
+ export interface WebhookConfigResponse {
126
+ webhook: WebhookConfig | null;
127
+ }
128
+ export interface WebhookConfigWithSecretResponse {
129
+ webhook: WebhookConfig;
130
+ secret?: string;
131
+ }
132
+ export interface WebhookTestResponse {
133
+ success: boolean;
134
+ timestamp: string;
135
+ }
136
+ export interface WebhookRotateSecretResponse {
137
+ secret: string;
138
+ }
139
+ export interface UpdateWebhookBody {
140
+ url: string;
141
+ events: WebhookEventType[];
142
+ enabled: boolean;
143
+ }
144
+ export interface AuthStatus {
145
+ authenticated: boolean;
146
+ userId?: string;
147
+ email?: string;
148
+ sessionExpiresAt?: number;
149
+ organizations?: Array<{
150
+ id: string;
151
+ name: string;
152
+ role: string;
153
+ }>;
154
+ }
155
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import {
2
+ WalletType,
3
+ AuthMethod,
4
+ ThemeMode,
5
+ OnRampProvider,
6
+ WebhookEventType,
7
+ SUBSCRIBABLE_WEBHOOK_EVENT_TYPES as SUBSCRIBABLE_WEBHOOK_EVENTS
8
+ } from "@getpara/shared";
9
+ var Font = /* @__PURE__ */ ((Font2) => {
10
+ Font2["ARIAL"] = "Arial";
11
+ Font2["COURIER_NEW"] = "Courier New";
12
+ Font2["GEORGIA"] = "Georgia";
13
+ Font2["HELVETICA"] = "Helvetica";
14
+ Font2["LUCIDA_SANS"] = "Lucida Sans";
15
+ Font2["TAHOMA"] = "Tahoma";
16
+ Font2["TIMES_NEW_ROMAN"] = "Times New Roman";
17
+ Font2["TREBUCHET_MS"] = "Trebuchet MS";
18
+ return Font2;
19
+ })(Font || {});
20
+ var Framework = /* @__PURE__ */ ((Framework2) => {
21
+ Framework2["REACT"] = "REACT";
22
+ Framework2["NEXT"] = "NEXT";
23
+ Framework2["VITE"] = "VITE";
24
+ Framework2["VUE"] = "VUE";
25
+ Framework2["SVELTE"] = "SVELTE";
26
+ Framework2["NODE"] = "NODE";
27
+ Framework2["REACT_NATIVE"] = "REACT_NATIVE";
28
+ Framework2["EXPO"] = "EXPO";
29
+ Framework2["FLUTTER"] = "FLUTTER";
30
+ Framework2["SWIFT"] = "SWIFT";
31
+ Framework2["DENO"] = "DENO";
32
+ Framework2["BUN"] = "BUN";
33
+ return Framework2;
34
+ })(Framework || {});
35
+ var PackageManager = /* @__PURE__ */ ((PackageManager2) => {
36
+ PackageManager2["NPM"] = "NPM";
37
+ PackageManager2["YARN"] = "YARN";
38
+ PackageManager2["PNPM"] = "PNPM";
39
+ return PackageManager2;
40
+ })(PackageManager || {});
41
+ var MemberRole = /* @__PURE__ */ ((MemberRole2) => {
42
+ MemberRole2["ORG_OWNER"] = "ORG_OWNER";
43
+ MemberRole2["ORG_MEMBER"] = "ORG_MEMBER";
44
+ MemberRole2["PROJECT_MEMBER"] = "PROJECT_MEMBER";
45
+ return MemberRole2;
46
+ })(MemberRole || {});
47
+ export {
48
+ AuthMethod,
49
+ Font,
50
+ Framework,
51
+ MemberRole,
52
+ OnRampProvider,
53
+ PackageManager,
54
+ SUBSCRIBABLE_WEBHOOK_EVENTS,
55
+ ThemeMode,
56
+ WalletType,
57
+ WebhookEventType
58
+ };
@@ -0,0 +1,7 @@
1
+ import { type Environment } from '../core/constants.js';
2
+ import type { SessionInfo } from '../core/types.js';
3
+ export interface PollingLoginOptions {
4
+ openBrowser?: boolean;
5
+ }
6
+ export declare function startPollingLogin(environment: Environment, opts?: PollingLoginOptions): Promise<SessionInfo>;
7
+ //# sourceMappingURL=polling-flow.d.ts.map