@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 @@
1
+ {"version":3,"file":"detect-package-manager.d.ts","sourceRoot":"","sources":["../../../src/scaffolding/utils/detect-package-manager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAIlD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,cAAc,CAE5E;AAsCD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,cAAc,CAmBtE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,cAAc,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAEvF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAKxE"}
@@ -0,0 +1,57 @@
1
+ import { existsSync } from "node:fs";
2
+ import path from "node:path";
3
+ const VALID_PACKAGE_MANAGERS = /* @__PURE__ */ new Set(["npm", "yarn", "pnpm", "bun"]);
4
+ function isValidPackageManager(value) {
5
+ return VALID_PACKAGE_MANAGERS.has(value);
6
+ }
7
+ function detectFromUserAgent() {
8
+ const userAgent = process.env.npm_config_user_agent;
9
+ if (!userAgent) return void 0;
10
+ if (userAgent.startsWith("yarn/")) return "yarn";
11
+ if (userAgent.startsWith("pnpm/")) return "pnpm";
12
+ if (userAgent.startsWith("bun/")) return "bun";
13
+ if (userAgent.startsWith("npm/")) return "npm";
14
+ return void 0;
15
+ }
16
+ function detectFromLockfile(cwd) {
17
+ const lockfiles = [
18
+ ["yarn.lock", "yarn"],
19
+ ["package-lock.json", "npm"],
20
+ ["pnpm-lock.yaml", "pnpm"],
21
+ ["bun.lockb", "bun"]
22
+ ];
23
+ for (const [filename, pm] of lockfiles) {
24
+ if (existsSync(path.join(cwd, filename))) {
25
+ return pm;
26
+ }
27
+ }
28
+ return void 0;
29
+ }
30
+ function detectPackageManager(explicit) {
31
+ if (explicit) {
32
+ if (!isValidPackageManager(explicit)) {
33
+ throw new Error(`Invalid package manager "${explicit}". Valid values: npm, yarn, pnpm, bun`);
34
+ }
35
+ return explicit;
36
+ }
37
+ const fromAgent = detectFromUserAgent();
38
+ if (fromAgent) return fromAgent;
39
+ const fromLockfile = detectFromLockfile(process.cwd());
40
+ if (fromLockfile) return fromLockfile;
41
+ return "npm";
42
+ }
43
+ function getInstallCommand(pm) {
44
+ return [pm, ["install"]];
45
+ }
46
+ function getRunCommand(pm, script) {
47
+ if (pm === "npm") {
48
+ return `npm run ${script}`;
49
+ }
50
+ return `${pm} ${script}`;
51
+ }
52
+ export {
53
+ detectPackageManager,
54
+ getInstallCommand,
55
+ getRunCommand,
56
+ isValidPackageManager
57
+ };
@@ -0,0 +1,11 @@
1
+ export declare function ensureDir(dirPath: string): Promise<void>;
2
+ export declare function writeFile(filePath: string, content: string): Promise<void>;
3
+ export declare function copyFile(src: string, dest: string): Promise<void>;
4
+ export declare function readFile(filePath: string): Promise<string>;
5
+ export declare function pathExists(targetPath: string): Promise<boolean>;
6
+ export declare function readDir(dirPath: string): Promise<{
7
+ name: string;
8
+ isDirectory: boolean;
9
+ }[]>;
10
+ export declare function removeDir(dirPath: string): Promise<void>;
11
+ //# sourceMappingURL=fs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../../src/scaffolding/utils/fs.ts"],"names":[],"mappings":"AAGA,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9D;AAED,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIhF;AAED,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIvE;AAED,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEhE;AAED,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOrE;AAED,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,EAAE,CAAC,CAMhG;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9D"}
@@ -0,0 +1,45 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ async function ensureDir(dirPath) {
4
+ await fs.mkdir(dirPath, { recursive: true });
5
+ }
6
+ async function writeFile(filePath, content) {
7
+ const dir = path.dirname(filePath);
8
+ await ensureDir(dir);
9
+ await fs.writeFile(filePath, content, "utf-8");
10
+ }
11
+ async function copyFile(src, dest) {
12
+ const dir = path.dirname(dest);
13
+ await ensureDir(dir);
14
+ await fs.copyFile(src, dest);
15
+ }
16
+ async function readFile(filePath) {
17
+ return fs.readFile(filePath, "utf-8");
18
+ }
19
+ async function pathExists(targetPath) {
20
+ try {
21
+ await fs.access(targetPath);
22
+ return true;
23
+ } catch {
24
+ return false;
25
+ }
26
+ }
27
+ async function readDir(dirPath) {
28
+ const entries = await fs.readdir(dirPath, { withFileTypes: true });
29
+ return entries.map((entry) => ({
30
+ name: entry.name,
31
+ isDirectory: entry.isDirectory()
32
+ }));
33
+ }
34
+ async function removeDir(dirPath) {
35
+ await fs.rm(dirPath, { recursive: true, force: true });
36
+ }
37
+ export {
38
+ copyFile,
39
+ ensureDir,
40
+ pathExists,
41
+ readDir,
42
+ readFile,
43
+ removeDir,
44
+ writeFile
45
+ };
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Fetches the latest published version of @getpara/react-sdk from the npm registry.
3
+ * All @getpara packages release at the same version so this applies to all of them.
4
+ * Falls back to a hardcoded version if the registry is unreachable.
5
+ */
6
+ export declare function resolveParaVersion(): Promise<string>;
7
+ //# sourceMappingURL=resolve-para-version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-para-version.d.ts","sourceRoot":"","sources":["../../../src/scaffolding/utils/resolve-para-version.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAiB1D"}
@@ -0,0 +1,21 @@
1
+ const REGISTRY_URL = "https://registry.npmjs.org/@getpara/react-sdk/latest";
2
+ const FALLBACK_VERSION = "2.13.0";
3
+ async function resolveParaVersion() {
4
+ try {
5
+ const controller = new AbortController();
6
+ const timeout = setTimeout(() => controller.abort(), 5e3);
7
+ const response = await fetch(REGISTRY_URL, {
8
+ headers: { Accept: "application/json" },
9
+ signal: controller.signal
10
+ });
11
+ clearTimeout(timeout);
12
+ if (!response.ok) return FALLBACK_VERSION;
13
+ const data = await response.json();
14
+ return data.version || FALLBACK_VERSION;
15
+ } catch {
16
+ return FALLBACK_VERSION;
17
+ }
18
+ }
19
+ export {
20
+ resolveParaVersion
21
+ };
@@ -0,0 +1,14 @@
1
+ import { AuthMethod } from '../api/types.js';
2
+ /** Auth methods displayed to users (excludes BASIC_LOGIN). */
3
+ export declare const AUTH_METHOD_DISPLAY_VALUES: readonly [AuthMethod.PASSWORD, AuthMethod.PASSKEY, AuthMethod.PIN];
4
+ /**
5
+ * Validates an array of auth method strings.
6
+ * Returns error message or undefined if valid.
7
+ *
8
+ * Constraints:
9
+ * - At least one method required
10
+ * - PIN and PASSWORD cannot coexist
11
+ * - All values must be valid auth methods
12
+ */
13
+ export declare function validateAuthMethods(methods: string[]): string | undefined;
14
+ //# sourceMappingURL=auth-methods.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-methods.d.ts","sourceRoot":"","sources":["../../src/validation/auth-methods.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,8DAA8D;AAC9D,eAAO,MAAM,0BAA0B,oEAAqE,CAAC;AAE7G;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAmBzE"}
@@ -0,0 +1,23 @@
1
+ import { AuthMethod } from "../api/types.js";
2
+ const AUTH_METHOD_DISPLAY_VALUES = [AuthMethod.PASSWORD, AuthMethod.PASSKEY, AuthMethod.PIN];
3
+ function validateAuthMethods(methods) {
4
+ if (methods.length === 0) {
5
+ return "At least one authentication method is required.";
6
+ }
7
+ const displayValues = AUTH_METHOD_DISPLAY_VALUES;
8
+ for (const method of methods) {
9
+ if (!displayValues.includes(method)) {
10
+ return `Invalid authentication method: "${method}". Valid options: ${displayValues.join(", ")}`;
11
+ }
12
+ }
13
+ const hasPin = methods.includes(AuthMethod.PIN);
14
+ const hasPassword = methods.includes(AuthMethod.PASSWORD);
15
+ if (hasPin && hasPassword) {
16
+ return "PIN and PASSWORD cannot be enabled at the same time.";
17
+ }
18
+ return void 0;
19
+ }
20
+ export {
21
+ AUTH_METHOD_DISPLAY_VALUES,
22
+ validateAuthMethods
23
+ };
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Validates a single CIDR notation string.
3
+ * Returns error message or undefined if valid.
4
+ */
5
+ export declare function validateCidr(value: string): string | undefined;
6
+ /**
7
+ * Validates an array of CIDR notation strings.
8
+ * Returns error message or undefined if all valid.
9
+ */
10
+ export declare function validateCidrList(values: string[]): string | undefined;
11
+ //# sourceMappingURL=cidr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cidr.d.ts","sourceRoot":"","sources":["../../src/validation/cidr.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAuB9D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAQrE"}
@@ -0,0 +1,35 @@
1
+ const CIDR_REGEX = /^(\d{1,3}\.){3}\d{1,3}\/\d{1,2}$/;
2
+ function validateCidr(value) {
3
+ if (!CIDR_REGEX.test(value)) {
4
+ return `Invalid CIDR format: "${value}". Use IPv4 CIDR notation (e.g., 192.168.1.0/24).`;
5
+ }
6
+ const [ip, prefix] = value.split("/");
7
+ const prefixNum = parseInt(prefix, 10);
8
+ if (prefixNum < 0 || prefixNum > 32) {
9
+ return `Invalid CIDR prefix: /${prefix}. Must be between 0 and 32.`;
10
+ }
11
+ const octets = ip.split(".");
12
+ for (const octet of octets) {
13
+ if (octet.length > 1 && octet.startsWith("0")) {
14
+ return `Invalid IP octet: ${octet}. Leading zeros are not allowed (ambiguous octal interpretation).`;
15
+ }
16
+ const num = parseInt(octet, 10);
17
+ if (num < 0 || num > 255) {
18
+ return `Invalid IP octet: ${octet}. Must be between 0 and 255.`;
19
+ }
20
+ }
21
+ return void 0;
22
+ }
23
+ function validateCidrList(values) {
24
+ for (const value of values) {
25
+ const error = validateCidr(value);
26
+ if (error) {
27
+ return error;
28
+ }
29
+ }
30
+ return void 0;
31
+ }
32
+ export {
33
+ validateCidr,
34
+ validateCidrList
35
+ };
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Validates a hex color string.
3
+ * Supports #RGB, #RGBA, #RRGGBB, #RRGGBBAA.
4
+ * Returns error message or undefined if valid.
5
+ */
6
+ export declare function validateHexColor(value: string): string | undefined;
7
+ //# sourceMappingURL=hex-color.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hex-color.d.ts","sourceRoot":"","sources":["../../src/validation/hex-color.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKlE"}
@@ -0,0 +1,10 @@
1
+ const HEX_COLOR_REGEX = /^#([a-fA-F0-9]{3}|[a-fA-F0-9]{4}|[a-fA-F0-9]{6}|[a-fA-F0-9]{8})$/;
2
+ function validateHexColor(value) {
3
+ if (!HEX_COLOR_REGEX.test(value)) {
4
+ return "Invalid hex color. Use format: #RGB, #RGBA, #RRGGBB, or #RRGGBBAA.";
5
+ }
6
+ return void 0;
7
+ }
8
+ export {
9
+ validateHexColor
10
+ };
@@ -0,0 +1,9 @@
1
+ export { validateHexColor } from './hex-color.js';
2
+ export { validateHttpsUrl, validateTwitterUrl, validateLinkedinUrl, validateGithubUrl, validateOriginUrl } from './url.js';
3
+ export { validateCidr, validateCidrList } from './cidr.js';
4
+ export { validateAuthMethods, AUTH_METHOD_DISPLAY_VALUES } from './auth-methods.js';
5
+ export { validateWalletTypes, WALLET_TYPE_VALUES } from './wallet-types.js';
6
+ export { validateCosmosPrefix, validateTeamId, validateBundleIdentifier, validateAndroidPackageName, validateAndroidFingerprint, } from './native-passkey.js';
7
+ export { validateSessionLength, minutesToMs, msToMinutes, MIN_SESSION_MINUTES, MAX_SESSION_MINUTES, SESSION_PRESETS, } from './session-length.js';
8
+ export { validateWebhookUrl, validateWebhookEvents, WEBHOOK_EVENT_VALUES } from './webhook.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC3H,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,wBAAwB,EACxB,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,qBAAqB,EACrB,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,49 @@
1
+ import { validateHexColor } from "./hex-color.js";
2
+ import { validateHttpsUrl, validateTwitterUrl, validateLinkedinUrl, validateGithubUrl, validateOriginUrl } from "./url.js";
3
+ import { validateCidr, validateCidrList } from "./cidr.js";
4
+ import { validateAuthMethods, AUTH_METHOD_DISPLAY_VALUES } from "./auth-methods.js";
5
+ import { validateWalletTypes, WALLET_TYPE_VALUES } from "./wallet-types.js";
6
+ import {
7
+ validateCosmosPrefix,
8
+ validateTeamId,
9
+ validateBundleIdentifier,
10
+ validateAndroidPackageName,
11
+ validateAndroidFingerprint
12
+ } from "./native-passkey.js";
13
+ import {
14
+ validateSessionLength,
15
+ minutesToMs,
16
+ msToMinutes,
17
+ MIN_SESSION_MINUTES,
18
+ MAX_SESSION_MINUTES,
19
+ SESSION_PRESETS
20
+ } from "./session-length.js";
21
+ import { validateWebhookUrl, validateWebhookEvents, WEBHOOK_EVENT_VALUES } from "./webhook.js";
22
+ export {
23
+ AUTH_METHOD_DISPLAY_VALUES,
24
+ MAX_SESSION_MINUTES,
25
+ MIN_SESSION_MINUTES,
26
+ SESSION_PRESETS,
27
+ WALLET_TYPE_VALUES,
28
+ WEBHOOK_EVENT_VALUES,
29
+ minutesToMs,
30
+ msToMinutes,
31
+ validateAndroidFingerprint,
32
+ validateAndroidPackageName,
33
+ validateAuthMethods,
34
+ validateBundleIdentifier,
35
+ validateCidr,
36
+ validateCidrList,
37
+ validateCosmosPrefix,
38
+ validateGithubUrl,
39
+ validateHexColor,
40
+ validateHttpsUrl,
41
+ validateLinkedinUrl,
42
+ validateOriginUrl,
43
+ validateSessionLength,
44
+ validateTeamId,
45
+ validateTwitterUrl,
46
+ validateWalletTypes,
47
+ validateWebhookEvents,
48
+ validateWebhookUrl
49
+ };
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Validates an Apple Team ID.
3
+ * Must be empty or exactly 10 characters.
4
+ * Returns error message or undefined if valid.
5
+ */
6
+ /**
7
+ * Validates a Cosmos address prefix (Bech32 HRP).
8
+ * Must be 1-83 lowercase letters.
9
+ * Returns error message or undefined if valid.
10
+ */
11
+ export declare function validateCosmosPrefix(value: string): string | undefined;
12
+ export declare function validateTeamId(value: string): string | undefined;
13
+ /**
14
+ * Validates an Apple bundle identifier.
15
+ * Must be in reverse DNS format (e.g., com.example.app).
16
+ * Returns error message or undefined if valid.
17
+ */
18
+ export declare function validateBundleIdentifier(value: string): string | undefined;
19
+ /**
20
+ * Validates an Android package name.
21
+ * Must be in Java package format (e.g., com.example.app).
22
+ * Returns error message or undefined if valid.
23
+ */
24
+ export declare function validateAndroidPackageName(value: string): string | undefined;
25
+ /**
26
+ * Validates an Android SHA-256 certificate fingerprint.
27
+ * Must be colon-separated hex pairs (e.g., AA:BB:CC:...).
28
+ * Returns error message or undefined if valid.
29
+ */
30
+ export declare function validateAndroidFingerprint(value: string): string | undefined;
31
+ //# sourceMappingURL=native-passkey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-passkey.d.ts","sourceRoot":"","sources":["../../src/validation/native-passkey.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKtE;AAID,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQhE;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAK1E;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAK5E;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAK5E"}
@@ -0,0 +1,45 @@
1
+ const COSMOS_PREFIX_REGEX = /^[a-z]{1,83}$/;
2
+ const BUNDLE_ID_REGEX = /^[a-zA-Z][a-zA-Z0-9]*(\.[a-zA-Z][a-zA-Z0-9]*)+$/;
3
+ const ANDROID_PACKAGE_REGEX = /^[a-zA-Z][a-zA-Z0-9_]*(\.[a-zA-Z][a-zA-Z0-9_]*)+$/;
4
+ const ANDROID_FINGERPRINT_REGEX = /^([0-9A-Fa-f]{2}:){31}[0-9A-Fa-f]{2}$/;
5
+ function validateCosmosPrefix(value) {
6
+ if (!COSMOS_PREFIX_REGEX.test(value)) {
7
+ return "Cosmos prefix must be 1-83 lowercase letters (a-z).";
8
+ }
9
+ return void 0;
10
+ }
11
+ const TEAM_ID_REGEX = /^[A-Z0-9]{10}$/;
12
+ function validateTeamId(value) {
13
+ if (value.length === 0) {
14
+ return void 0;
15
+ }
16
+ if (!TEAM_ID_REGEX.test(value)) {
17
+ return "Team ID must be exactly 10 alphanumeric characters (A-Z, 0-9).";
18
+ }
19
+ return void 0;
20
+ }
21
+ function validateBundleIdentifier(value) {
22
+ if (!BUNDLE_ID_REGEX.test(value)) {
23
+ return "Invalid bundle identifier. Use reverse DNS format: com.example.app";
24
+ }
25
+ return void 0;
26
+ }
27
+ function validateAndroidPackageName(value) {
28
+ if (!ANDROID_PACKAGE_REGEX.test(value)) {
29
+ return "Invalid Android package name. Use Java package format: com.example.app";
30
+ }
31
+ return void 0;
32
+ }
33
+ function validateAndroidFingerprint(value) {
34
+ if (!ANDROID_FINGERPRINT_REGEX.test(value)) {
35
+ return "Invalid SHA-256 fingerprint. Use format: AA:BB:CC:DD:... (32 colon-separated hex pairs).";
36
+ }
37
+ return void 0;
38
+ }
39
+ export {
40
+ validateAndroidFingerprint,
41
+ validateAndroidPackageName,
42
+ validateBundleIdentifier,
43
+ validateCosmosPrefix,
44
+ validateTeamId
45
+ };
@@ -0,0 +1,18 @@
1
+ export declare const MIN_SESSION_MINUTES = 5;
2
+ export declare const MAX_SESSION_MINUTES = 43200;
3
+ /** Common session length presets in minutes. */
4
+ export declare const SESSION_PRESETS: readonly [120, 1440, 10080, 43200];
5
+ /**
6
+ * Validates a session length in minutes.
7
+ * Returns error message or undefined if valid.
8
+ */
9
+ export declare function validateSessionLength(minutes: number): string | undefined;
10
+ /**
11
+ * Converts minutes to a millisecond string for the API.
12
+ */
13
+ export declare function minutesToMs(minutes: number): string;
14
+ /**
15
+ * Converts a millisecond value (string or number) to minutes for display.
16
+ */
17
+ export declare function msToMinutes(ms: string | number): number;
18
+ //# sourceMappingURL=session-length.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-length.d.ts","sourceRoot":"","sources":["../../src/validation/session-length.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,eAAO,MAAM,mBAAmB,QAAQ,CAAC;AAEzC,gDAAgD;AAChD,eAAO,MAAM,eAAe,oCAAqC,CAAC;AAElE;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAWzE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAGvD"}
@@ -0,0 +1,30 @@
1
+ const MIN_SESSION_MINUTES = 5;
2
+ const MAX_SESSION_MINUTES = 43200;
3
+ const SESSION_PRESETS = [120, 1440, 10080, 43200];
4
+ function validateSessionLength(minutes) {
5
+ if (!Number.isFinite(minutes) || !Number.isInteger(minutes)) {
6
+ return "Session length must be a whole number of minutes.";
7
+ }
8
+ if (minutes < MIN_SESSION_MINUTES) {
9
+ return `Session length must be at least ${MIN_SESSION_MINUTES} minutes.`;
10
+ }
11
+ if (minutes > MAX_SESSION_MINUTES) {
12
+ return `Session length must be at most ${MAX_SESSION_MINUTES} minutes (30 days).`;
13
+ }
14
+ return void 0;
15
+ }
16
+ function minutesToMs(minutes) {
17
+ return String(minutes * 60 * 1e3);
18
+ }
19
+ function msToMinutes(ms) {
20
+ const msNum = typeof ms === "string" ? parseInt(ms, 10) : ms;
21
+ return Math.round(msNum / (60 * 1e3));
22
+ }
23
+ export {
24
+ MAX_SESSION_MINUTES,
25
+ MIN_SESSION_MINUTES,
26
+ SESSION_PRESETS,
27
+ minutesToMs,
28
+ msToMinutes,
29
+ validateSessionLength
30
+ };
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Validates that a URL uses HTTPS.
3
+ * Returns error message or undefined if valid.
4
+ */
5
+ export declare function validateHttpsUrl(value: string): string | undefined;
6
+ /**
7
+ * Validates a Twitter/X profile URL.
8
+ * Returns error message or undefined if valid.
9
+ */
10
+ export declare function validateTwitterUrl(value: string): string | undefined;
11
+ /**
12
+ * Validates a LinkedIn company URL.
13
+ * Returns error message or undefined if valid.
14
+ */
15
+ export declare function validateLinkedinUrl(value: string): string | undefined;
16
+ /**
17
+ * Validates a GitHub URL.
18
+ * Returns error message or undefined if valid.
19
+ */
20
+ export declare function validateGithubUrl(value: string): string | undefined;
21
+ /**
22
+ * Validates an origin URL (standard URL validation).
23
+ * Returns error message or undefined if valid.
24
+ */
25
+ export declare function validateOriginUrl(value: string): string | undefined;
26
+ //# sourceMappingURL=url.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/validation/url.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAUlE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKpE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKrE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKnE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAUnE"}
@@ -0,0 +1,50 @@
1
+ const TWITTER_URL_REGEX = /^https:\/\/(www\.)?(twitter|x)\.com\/.+/i;
2
+ const LINKEDIN_URL_REGEX = /^https:\/\/(www\.)?linkedin\.com\/company\/.+/i;
3
+ const GITHUB_URL_REGEX = /^https:\/\/(www\.)?github\.com\/.+/i;
4
+ function validateHttpsUrl(value) {
5
+ try {
6
+ const url = new URL(value);
7
+ if (url.protocol !== "https:") {
8
+ return "URL must use HTTPS.";
9
+ }
10
+ return void 0;
11
+ } catch {
12
+ return "Invalid URL format.";
13
+ }
14
+ }
15
+ function validateTwitterUrl(value) {
16
+ if (!TWITTER_URL_REGEX.test(value)) {
17
+ return "Invalid Twitter/X URL. Use format: https://twitter.com/username or https://x.com/username";
18
+ }
19
+ return void 0;
20
+ }
21
+ function validateLinkedinUrl(value) {
22
+ if (!LINKEDIN_URL_REGEX.test(value)) {
23
+ return "Invalid LinkedIn URL. Use format: https://linkedin.com/company/name";
24
+ }
25
+ return void 0;
26
+ }
27
+ function validateGithubUrl(value) {
28
+ if (!GITHUB_URL_REGEX.test(value)) {
29
+ return "Invalid GitHub URL. Use format: https://github.com/org-or-user";
30
+ }
31
+ return void 0;
32
+ }
33
+ function validateOriginUrl(value) {
34
+ try {
35
+ const url = new URL(value);
36
+ if (!["http:", "https:"].includes(url.protocol)) {
37
+ return "Origin must use HTTP or HTTPS.";
38
+ }
39
+ return void 0;
40
+ } catch {
41
+ return "Invalid URL format.";
42
+ }
43
+ }
44
+ export {
45
+ validateGithubUrl,
46
+ validateHttpsUrl,
47
+ validateLinkedinUrl,
48
+ validateOriginUrl,
49
+ validateTwitterUrl
50
+ };
@@ -0,0 +1,14 @@
1
+ import { WalletType, type WalletTypeConfig } from '../api/types.js';
2
+ /** Array of valid wallet type values. */
3
+ export declare const WALLET_TYPE_VALUES: WalletType[];
4
+ /**
5
+ * Validates an array of wallet type configurations.
6
+ * Returns error message or undefined if valid.
7
+ *
8
+ * Constraints:
9
+ * - At least one wallet type required
10
+ * - At least one must be required (not optional)
11
+ * - All type values must be valid
12
+ */
13
+ export declare function validateWalletTypes(types: WalletTypeConfig[]): string | undefined;
14
+ //# sourceMappingURL=wallet-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet-types.d.ts","sourceRoot":"","sources":["../../src/validation/wallet-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEpE,yCAAyC;AACzC,eAAO,MAAM,kBAAkB,cAA4B,CAAC;AAE5D;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,EAAE,GAAG,MAAM,GAAG,SAAS,CAkBjF"}
@@ -0,0 +1,22 @@
1
+ import { WalletType } from "../api/types.js";
2
+ const WALLET_TYPE_VALUES = Object.values(WalletType);
3
+ function validateWalletTypes(types) {
4
+ if (types.length === 0) {
5
+ return "At least one wallet type is required.";
6
+ }
7
+ const validValues = Object.values(WalletType);
8
+ for (const config of types) {
9
+ if (!validValues.includes(config.type)) {
10
+ return `Invalid wallet type: "${config.type}". Valid options: ${validValues.join(", ")}`;
11
+ }
12
+ }
13
+ const hasRequired = types.some((t) => !t.optional);
14
+ if (!hasRequired) {
15
+ return "At least one wallet type must be required (not optional).";
16
+ }
17
+ return void 0;
18
+ }
19
+ export {
20
+ WALLET_TYPE_VALUES,
21
+ validateWalletTypes
22
+ };
@@ -0,0 +1,4 @@
1
+ export declare const WEBHOOK_EVENT_VALUES: import("../api/types.js").WebhookEventType[];
2
+ export declare function validateWebhookUrl(value: string): string | undefined;
3
+ export declare function validateWebhookEvents(events: string[]): string | undefined;
4
+ //# sourceMappingURL=webhook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../src/validation/webhook.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,oBAAoB,8CAA8B,CAAC;AAEhE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAapE;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAW1E"}
@@ -0,0 +1,33 @@
1
+ import { SUBSCRIBABLE_WEBHOOK_EVENTS } from "../api/types.js";
2
+ const WEBHOOK_EVENT_VALUES = SUBSCRIBABLE_WEBHOOK_EVENTS;
3
+ function validateWebhookUrl(value) {
4
+ try {
5
+ const url = new URL(value);
6
+ if (url.protocol !== "https:") {
7
+ return "Webhook URL must use HTTPS.";
8
+ }
9
+ if (!url.hostname || url.hostname.length === 0) {
10
+ return "Webhook URL must have a valid hostname.";
11
+ }
12
+ return void 0;
13
+ } catch {
14
+ return "Invalid URL format.";
15
+ }
16
+ }
17
+ function validateWebhookEvents(events) {
18
+ const valid = SUBSCRIBABLE_WEBHOOK_EVENTS;
19
+ for (const event of events) {
20
+ if (!valid.includes(event)) {
21
+ return `Invalid event type: "${event}". Valid types: ${valid.join(", ")}`;
22
+ }
23
+ }
24
+ if (events.length === 0) {
25
+ return "At least one event type is required.";
26
+ }
27
+ return void 0;
28
+ }
29
+ export {
30
+ WEBHOOK_EVENT_VALUES,
31
+ validateWebhookEvents,
32
+ validateWebhookUrl
33
+ };