@rockcarver/frodo-lib 2.0.0-13 → 2.0.0-15

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 (403) hide show
  1. package/build.zip +0 -0
  2. package/cjs/api/AgentApi.js.map +1 -1
  3. package/cjs/api/AuthenticateApi.js.map +1 -1
  4. package/cjs/api/BaseApi.js +1 -1
  5. package/cjs/api/BaseApi.js.map +1 -1
  6. package/cjs/api/CirclesOfTrustApi.js.map +1 -1
  7. package/cjs/api/IdmConfigApi.js.map +1 -1
  8. package/cjs/api/IdmSystemApi.js.map +1 -1
  9. package/cjs/api/ManagedObjectApi.js.map +1 -1
  10. package/cjs/api/NodeApi.js.map +1 -1
  11. package/cjs/api/OAuth2ClientApi.js.map +1 -1
  12. package/cjs/api/OAuth2OIDCApi.js.map +1 -1
  13. package/cjs/api/OAuth2OIDCApi.test.js +2 -2
  14. package/cjs/api/OAuth2OIDCApi.test.js.map +1 -1
  15. package/cjs/api/OAuth2ProviderApi.js.map +1 -1
  16. package/cjs/api/PoliciesApi.js.map +1 -1
  17. package/cjs/api/PolicySetApi.js.map +1 -1
  18. package/cjs/api/RealmApi.js.map +1 -1
  19. package/cjs/api/ResourceTypesApi.js.map +1 -1
  20. package/cjs/api/Saml2Api.js.map +1 -1
  21. package/cjs/api/ScriptApi.js.map +1 -1
  22. package/cjs/api/ServerInfoApi.js.map +1 -1
  23. package/cjs/api/ServiceApi.js.map +1 -1
  24. package/cjs/api/SocialIdentityProvidersApi.js.map +1 -1
  25. package/cjs/api/TreeApi.js.map +1 -1
  26. package/cjs/api/cloud/AdminFederationProvidersApi.js.map +1 -1
  27. package/cjs/api/cloud/EnvInfoApi.js.map +1 -1
  28. package/cjs/api/cloud/FeatureApi.js.map +1 -1
  29. package/cjs/api/cloud/LogApi.js.map +1 -1
  30. package/cjs/api/cloud/SecretsApi.js.map +1 -1
  31. package/cjs/api/cloud/StartupApi.js.map +1 -1
  32. package/cjs/api/cloud/VariablesApi.js.map +1 -1
  33. package/cjs/api/utils/ApiUtils.js.map +1 -1
  34. package/cjs/api/utils/Base64.js +4 -4
  35. package/cjs/api/utils/Base64.js.map +1 -1
  36. package/cjs/index.js +12 -10
  37. package/cjs/index.js.map +1 -1
  38. package/cjs/lib/FrodoLib.js +181 -22
  39. package/cjs/lib/FrodoLib.js.map +1 -1
  40. package/cjs/lib/FrodoLib.test.js +9 -9
  41. package/cjs/lib/FrodoLib.test.js.map +1 -1
  42. package/cjs/ops/AdminOps.js.map +1 -1
  43. package/cjs/ops/AgentOps.js +35 -35
  44. package/cjs/ops/AgentOps.js.map +1 -1
  45. package/cjs/ops/AuthenticateOps.js +10 -12
  46. package/cjs/ops/AuthenticateOps.js.map +1 -1
  47. package/cjs/ops/CirclesOfTrustOps.js +14 -14
  48. package/cjs/ops/CirclesOfTrustOps.js.map +1 -1
  49. package/cjs/ops/ConnectionProfileOps.js +2 -2
  50. package/cjs/ops/ConnectionProfileOps.js.map +1 -1
  51. package/cjs/ops/ConnectionProfileOps.test.js +5 -5
  52. package/cjs/ops/ConnectionProfileOps.test.js.map +1 -1
  53. package/cjs/ops/EmailTemplateOps.js.map +1 -1
  54. package/cjs/ops/IdmOps.js.map +1 -1
  55. package/cjs/ops/IdpOps.js.map +1 -1
  56. package/cjs/ops/InfoOps.js +3 -4
  57. package/cjs/ops/InfoOps.js.map +1 -1
  58. package/cjs/ops/JoseOps.js +30 -0
  59. package/cjs/ops/JoseOps.js.map +1 -1
  60. package/cjs/ops/JourneyOps.js +41 -43
  61. package/cjs/ops/JourneyOps.js.map +1 -1
  62. package/cjs/ops/JourneyOps.test.js +3 -2
  63. package/cjs/ops/JourneyOps.test.js.map +1 -1
  64. package/cjs/ops/ManagedObjectOps.js.map +1 -1
  65. package/cjs/ops/NodeOps.js.map +1 -1
  66. package/cjs/ops/OAuth2ClientOps.js +19 -19
  67. package/cjs/ops/OAuth2ClientOps.js.map +1 -1
  68. package/cjs/ops/OAuth2OidcOps.js.map +1 -1
  69. package/cjs/ops/OAuth2ProviderOps.js.map +1 -1
  70. package/cjs/ops/OpsTypes.js.map +1 -1
  71. package/cjs/ops/OrganizationOps.js.map +1 -1
  72. package/cjs/ops/PolicyOps.js +29 -29
  73. package/cjs/ops/PolicyOps.js.map +1 -1
  74. package/cjs/ops/PolicySetOps.js +27 -27
  75. package/cjs/ops/PolicySetOps.js.map +1 -1
  76. package/cjs/ops/RealmOps.js.map +1 -1
  77. package/cjs/ops/ResourceTypeOps.js +23 -23
  78. package/cjs/ops/ResourceTypeOps.js.map +1 -1
  79. package/cjs/ops/Saml2Ops.js +11 -11
  80. package/cjs/ops/Saml2Ops.js.map +1 -1
  81. package/cjs/ops/Saml2Ops.test.js +3 -2
  82. package/cjs/ops/Saml2Ops.test.js.map +1 -1
  83. package/cjs/ops/ScriptOps.js +3 -3
  84. package/cjs/ops/ScriptOps.js.map +1 -1
  85. package/cjs/ops/ServiceOps.js.map +1 -1
  86. package/cjs/ops/ThemeOps.js.map +1 -1
  87. package/cjs/ops/cloud/AdminFederationOps.js.map +1 -1
  88. package/cjs/ops/cloud/FeatureOps.js.map +1 -1
  89. package/cjs/ops/cloud/LogOps.js.map +1 -1
  90. package/cjs/ops/cloud/SecretsOps.js.map +1 -1
  91. package/cjs/ops/cloud/ServiceAccountOps.js +1 -1
  92. package/cjs/ops/cloud/ServiceAccountOps.js.map +1 -1
  93. package/cjs/ops/cloud/StartupOps.js.map +1 -1
  94. package/cjs/ops/cloud/VariablesOps.js.map +1 -1
  95. package/cjs/ops/utils/Console.js.map +1 -1
  96. package/cjs/ops/utils/DataProtection.js +3 -3
  97. package/cjs/ops/utils/DataProtection.js.map +1 -1
  98. package/cjs/ops/utils/DataProtection.test.js +1 -1
  99. package/cjs/ops/utils/DataProtection.test.js.map +1 -1
  100. package/cjs/ops/utils/ExportImportUtils.js +2 -2
  101. package/cjs/ops/utils/ExportImportUtils.js.map +1 -1
  102. package/cjs/ops/utils/OpsUtils.js +105 -25
  103. package/cjs/ops/utils/OpsUtils.js.map +1 -1
  104. package/cjs/ops/utils/OpsUtils.test.js +6 -5
  105. package/cjs/ops/utils/OpsUtils.test.js.map +1 -1
  106. package/cjs/ops/utils/ScriptValidationUtils.js +33 -2
  107. package/cjs/ops/utils/ScriptValidationUtils.js.map +1 -1
  108. package/cjs/ops/utils/ScriptValidationUtils.test.js +1 -1
  109. package/cjs/ops/utils/ScriptValidationUtils.test.js.map +1 -1
  110. package/cjs/ops/utils/{Version.js → VersionUtils.js} +1 -1
  111. package/cjs/ops/utils/VersionUtils.js.map +1 -0
  112. package/cjs/ops/utils/{Version.test.js → VersionUtils.test.js} +3 -3
  113. package/cjs/ops/utils/VersionUtils.test.js.map +1 -0
  114. package/cjs/shared/Constants.js +34 -0
  115. package/cjs/shared/Constants.js.map +1 -0
  116. package/cjs/shared/State.js +477 -220
  117. package/cjs/shared/State.js.map +1 -1
  118. package/cjs/utils/SetupPollyForFrodoLib.js.map +1 -1
  119. package/esm/api/AgentApi.js.map +1 -1
  120. package/esm/api/AuthenticateApi.js.map +1 -1
  121. package/esm/api/BaseApi.js +2 -2
  122. package/esm/api/BaseApi.js.map +1 -1
  123. package/esm/api/CirclesOfTrustApi.js.map +1 -1
  124. package/esm/api/IdmConfigApi.js.map +1 -1
  125. package/esm/api/IdmSystemApi.js.map +1 -1
  126. package/esm/api/ManagedObjectApi.js.map +1 -1
  127. package/esm/api/NodeApi.js.map +1 -1
  128. package/esm/api/OAuth2ClientApi.js.map +1 -1
  129. package/esm/api/OAuth2OIDCApi.js.map +1 -1
  130. package/esm/api/OAuth2OIDCApi.test.js +2 -2
  131. package/esm/api/OAuth2OIDCApi.test.js.map +1 -1
  132. package/esm/api/OAuth2ProviderApi.js.map +1 -1
  133. package/esm/api/PoliciesApi.js.map +1 -1
  134. package/esm/api/PolicySetApi.js.map +1 -1
  135. package/esm/api/RealmApi.js.map +1 -1
  136. package/esm/api/ResourceTypesApi.js.map +1 -1
  137. package/esm/api/Saml2Api.js.map +1 -1
  138. package/esm/api/ScriptApi.js.map +1 -1
  139. package/esm/api/ServerInfoApi.js.map +1 -1
  140. package/esm/api/ServiceApi.js.map +1 -1
  141. package/esm/api/SocialIdentityProvidersApi.js.map +1 -1
  142. package/esm/api/TreeApi.js.map +1 -1
  143. package/esm/api/cloud/AdminFederationProvidersApi.js.map +1 -1
  144. package/esm/api/cloud/EnvInfoApi.js.map +1 -1
  145. package/esm/api/cloud/FeatureApi.js.map +1 -1
  146. package/esm/api/cloud/LogApi.js.map +1 -1
  147. package/esm/api/cloud/SecretsApi.js.map +1 -1
  148. package/esm/api/cloud/StartupApi.js.map +1 -1
  149. package/esm/api/cloud/VariablesApi.js.map +1 -1
  150. package/esm/api/utils/ApiUtils.js.map +1 -1
  151. package/esm/api/utils/Base64.js +4 -4
  152. package/esm/api/utils/Base64.js.map +1 -1
  153. package/esm/index.js +2 -1
  154. package/esm/index.js.map +1 -1
  155. package/esm/lib/FrodoLib.js +164 -19
  156. package/esm/lib/FrodoLib.js.map +1 -1
  157. package/esm/lib/FrodoLib.test.js +10 -10
  158. package/esm/lib/FrodoLib.test.js.map +1 -1
  159. package/esm/ops/AdminOps.js.map +1 -1
  160. package/esm/ops/AgentOps.js.map +1 -1
  161. package/esm/ops/AuthenticateOps.js +10 -10
  162. package/esm/ops/AuthenticateOps.js.map +1 -1
  163. package/esm/ops/CirclesOfTrustOps.js.map +1 -1
  164. package/esm/ops/ConnectionProfileOps.js +2 -2
  165. package/esm/ops/ConnectionProfileOps.js.map +1 -1
  166. package/esm/ops/ConnectionProfileOps.test.js +5 -5
  167. package/esm/ops/ConnectionProfileOps.test.js.map +1 -1
  168. package/esm/ops/EmailTemplateOps.js.map +1 -1
  169. package/esm/ops/IdmOps.js.map +1 -1
  170. package/esm/ops/IdpOps.js.map +1 -1
  171. package/esm/ops/InfoOps.js +2 -2
  172. package/esm/ops/InfoOps.js.map +1 -1
  173. package/esm/ops/JoseOps.js +20 -0
  174. package/esm/ops/JoseOps.js.map +1 -1
  175. package/esm/ops/JourneyOps.js +10 -11
  176. package/esm/ops/JourneyOps.js.map +1 -1
  177. package/esm/ops/JourneyOps.test.js +2 -2
  178. package/esm/ops/JourneyOps.test.js.map +1 -1
  179. package/esm/ops/ManagedObjectOps.js.map +1 -1
  180. package/esm/ops/NodeOps.js.map +1 -1
  181. package/esm/ops/OAuth2ClientOps.js.map +1 -1
  182. package/esm/ops/OAuth2OidcOps.js.map +1 -1
  183. package/esm/ops/OAuth2ProviderOps.js.map +1 -1
  184. package/esm/ops/OpsTypes.js.map +1 -1
  185. package/esm/ops/OrganizationOps.js.map +1 -1
  186. package/esm/ops/PolicyOps.js.map +1 -1
  187. package/esm/ops/PolicySetOps.js.map +1 -1
  188. package/esm/ops/RealmOps.js.map +1 -1
  189. package/esm/ops/ResourceTypeOps.js.map +1 -1
  190. package/esm/ops/Saml2Ops.js.map +1 -1
  191. package/esm/ops/Saml2Ops.test.js +2 -2
  192. package/esm/ops/Saml2Ops.test.js.map +1 -1
  193. package/esm/ops/ScriptOps.js.map +1 -1
  194. package/esm/ops/ServiceOps.js.map +1 -1
  195. package/esm/ops/ThemeOps.js.map +1 -1
  196. package/esm/ops/cloud/AdminFederationOps.js.map +1 -1
  197. package/esm/ops/cloud/FeatureOps.js.map +1 -1
  198. package/esm/ops/cloud/LogOps.js.map +1 -1
  199. package/esm/ops/cloud/SecretsOps.js.map +1 -1
  200. package/esm/ops/cloud/ServiceAccountOps.js +1 -1
  201. package/esm/ops/cloud/ServiceAccountOps.js.map +1 -1
  202. package/esm/ops/cloud/StartupOps.js.map +1 -1
  203. package/esm/ops/cloud/VariablesOps.js.map +1 -1
  204. package/esm/ops/utils/Console.js.map +1 -1
  205. package/esm/ops/utils/DataProtection.js +3 -3
  206. package/esm/ops/utils/DataProtection.js.map +1 -1
  207. package/esm/ops/utils/DataProtection.test.js +2 -2
  208. package/esm/ops/utils/DataProtection.test.js.map +1 -1
  209. package/esm/ops/utils/ExportImportUtils.js +2 -2
  210. package/esm/ops/utils/ExportImportUtils.js.map +1 -1
  211. package/esm/ops/utils/OpsUtils.js +96 -22
  212. package/esm/ops/utils/OpsUtils.js.map +1 -1
  213. package/esm/ops/utils/OpsUtils.test.js +5 -5
  214. package/esm/ops/utils/OpsUtils.test.js.map +1 -1
  215. package/esm/ops/utils/ScriptValidationUtils.js +28 -0
  216. package/esm/ops/utils/ScriptValidationUtils.js.map +1 -1
  217. package/esm/ops/utils/ScriptValidationUtils.test.js +2 -2
  218. package/esm/ops/utils/ScriptValidationUtils.test.js.map +1 -1
  219. package/esm/ops/utils/{Version.js → VersionUtils.js} +1 -1
  220. package/esm/ops/utils/VersionUtils.js.map +1 -0
  221. package/esm/ops/utils/{Version.test.js → VersionUtils.test.js} +2 -2
  222. package/esm/ops/utils/VersionUtils.test.js.map +1 -0
  223. package/esm/shared/Constants.js +27 -0
  224. package/esm/shared/Constants.js.map +1 -0
  225. package/esm/shared/State.js +481 -226
  226. package/esm/shared/State.js.map +1 -1
  227. package/esm/utils/SetupPollyForFrodoLib.js.map +1 -1
  228. package/package.json +5 -2
  229. package/types/api/AgentApi.d.ts +1 -1
  230. package/types/api/AgentApi.d.ts.map +1 -1
  231. package/types/api/AuthenticateApi.d.ts +1 -1
  232. package/types/api/AuthenticateApi.d.ts.map +1 -1
  233. package/types/api/BaseApi.d.ts +1 -1
  234. package/types/api/BaseApi.d.ts.map +1 -1
  235. package/types/api/CirclesOfTrustApi.d.ts +1 -1
  236. package/types/api/CirclesOfTrustApi.d.ts.map +1 -1
  237. package/types/api/IdmConfigApi.d.ts +1 -1
  238. package/types/api/IdmConfigApi.d.ts.map +1 -1
  239. package/types/api/IdmSystemApi.d.ts +1 -1
  240. package/types/api/IdmSystemApi.d.ts.map +1 -1
  241. package/types/api/ManagedObjectApi.d.ts +1 -1
  242. package/types/api/ManagedObjectApi.d.ts.map +1 -1
  243. package/types/api/NodeApi.d.ts +1 -1
  244. package/types/api/NodeApi.d.ts.map +1 -1
  245. package/types/api/OAuth2ClientApi.d.ts +1 -1
  246. package/types/api/OAuth2ClientApi.d.ts.map +1 -1
  247. package/types/api/OAuth2OIDCApi.d.ts +1 -1
  248. package/types/api/OAuth2OIDCApi.d.ts.map +1 -1
  249. package/types/api/OAuth2ProviderApi.d.ts +1 -1
  250. package/types/api/OAuth2ProviderApi.d.ts.map +1 -1
  251. package/types/api/PoliciesApi.d.ts +1 -1
  252. package/types/api/PoliciesApi.d.ts.map +1 -1
  253. package/types/api/PolicySetApi.d.ts +1 -1
  254. package/types/api/PolicySetApi.d.ts.map +1 -1
  255. package/types/api/RealmApi.d.ts +1 -1
  256. package/types/api/RealmApi.d.ts.map +1 -1
  257. package/types/api/ResourceTypesApi.d.ts +1 -1
  258. package/types/api/ResourceTypesApi.d.ts.map +1 -1
  259. package/types/api/Saml2Api.d.ts +1 -1
  260. package/types/api/Saml2Api.d.ts.map +1 -1
  261. package/types/api/ScriptApi.d.ts +1 -1
  262. package/types/api/ScriptApi.d.ts.map +1 -1
  263. package/types/api/ServerInfoApi.d.ts +1 -1
  264. package/types/api/ServerInfoApi.d.ts.map +1 -1
  265. package/types/api/ServiceApi.d.ts +1 -1
  266. package/types/api/ServiceApi.d.ts.map +1 -1
  267. package/types/api/SocialIdentityProvidersApi.d.ts +1 -1
  268. package/types/api/SocialIdentityProvidersApi.d.ts.map +1 -1
  269. package/types/api/TreeApi.d.ts +1 -1
  270. package/types/api/TreeApi.d.ts.map +1 -1
  271. package/types/api/cloud/AdminFederationProvidersApi.d.ts +1 -1
  272. package/types/api/cloud/AdminFederationProvidersApi.d.ts.map +1 -1
  273. package/types/api/cloud/EnvInfoApi.d.ts +1 -1
  274. package/types/api/cloud/EnvInfoApi.d.ts.map +1 -1
  275. package/types/api/cloud/FeatureApi.d.ts +1 -1
  276. package/types/api/cloud/FeatureApi.d.ts.map +1 -1
  277. package/types/api/cloud/LogApi.d.ts +1 -1
  278. package/types/api/cloud/LogApi.d.ts.map +1 -1
  279. package/types/api/cloud/SecretsApi.d.ts +1 -1
  280. package/types/api/cloud/SecretsApi.d.ts.map +1 -1
  281. package/types/api/cloud/StartupApi.d.ts +1 -1
  282. package/types/api/cloud/StartupApi.d.ts.map +1 -1
  283. package/types/api/cloud/VariablesApi.d.ts +1 -1
  284. package/types/api/cloud/VariablesApi.d.ts.map +1 -1
  285. package/types/api/utils/ApiUtils.d.ts +1 -1
  286. package/types/api/utils/ApiUtils.d.ts.map +1 -1
  287. package/types/api/utils/Base64.d.ts +6 -6
  288. package/types/api/utils/Base64.d.ts.map +1 -1
  289. package/types/index.d.ts +2 -1
  290. package/types/index.d.ts.map +1 -1
  291. package/types/lib/FrodoLib.d.ts +224 -370
  292. package/types/lib/FrodoLib.d.ts.map +1 -1
  293. package/types/ops/AdminOps.d.ts +3 -2
  294. package/types/ops/AdminOps.d.ts.map +1 -1
  295. package/types/ops/AgentOps.d.ts +3 -2
  296. package/types/ops/AgentOps.d.ts.map +1 -1
  297. package/types/ops/AuthenticateOps.d.ts +3 -2
  298. package/types/ops/AuthenticateOps.d.ts.map +1 -1
  299. package/types/ops/CirclesOfTrustOps.d.ts +3 -2
  300. package/types/ops/CirclesOfTrustOps.d.ts.map +1 -1
  301. package/types/ops/ConnectionProfileOps.d.ts +3 -2
  302. package/types/ops/ConnectionProfileOps.d.ts.map +1 -1
  303. package/types/ops/EmailTemplateOps.d.ts +3 -2
  304. package/types/ops/EmailTemplateOps.d.ts.map +1 -1
  305. package/types/ops/IdmOps.d.ts +3 -2
  306. package/types/ops/IdmOps.d.ts.map +1 -1
  307. package/types/ops/IdpOps.d.ts +3 -2
  308. package/types/ops/IdpOps.d.ts.map +1 -1
  309. package/types/ops/InfoOps.d.ts +3 -2
  310. package/types/ops/InfoOps.d.ts.map +1 -1
  311. package/types/ops/JoseOps.d.ts +17 -1
  312. package/types/ops/JoseOps.d.ts.map +1 -1
  313. package/types/ops/JourneyOps.d.ts +16 -10
  314. package/types/ops/JourneyOps.d.ts.map +1 -1
  315. package/types/ops/ManagedObjectOps.d.ts +3 -2
  316. package/types/ops/ManagedObjectOps.d.ts.map +1 -1
  317. package/types/ops/NodeOps.d.ts +3 -2
  318. package/types/ops/NodeOps.d.ts.map +1 -1
  319. package/types/ops/OAuth2ClientOps.d.ts +3 -2
  320. package/types/ops/OAuth2ClientOps.d.ts.map +1 -1
  321. package/types/ops/OAuth2OidcOps.d.ts +6 -5
  322. package/types/ops/OAuth2OidcOps.d.ts.map +1 -1
  323. package/types/ops/OAuth2ProviderOps.d.ts +3 -2
  324. package/types/ops/OAuth2ProviderOps.d.ts.map +1 -1
  325. package/types/ops/OpsTypes.d.ts +1 -1
  326. package/types/ops/OpsTypes.d.ts.map +1 -1
  327. package/types/ops/OrganizationOps.d.ts +3 -2
  328. package/types/ops/OrganizationOps.d.ts.map +1 -1
  329. package/types/ops/PolicyOps.d.ts +3 -2
  330. package/types/ops/PolicyOps.d.ts.map +1 -1
  331. package/types/ops/PolicySetOps.d.ts +3 -2
  332. package/types/ops/PolicySetOps.d.ts.map +1 -1
  333. package/types/ops/RealmOps.d.ts +3 -2
  334. package/types/ops/RealmOps.d.ts.map +1 -1
  335. package/types/ops/ResourceTypeOps.d.ts +3 -2
  336. package/types/ops/ResourceTypeOps.d.ts.map +1 -1
  337. package/types/ops/Saml2Ops.d.ts +3 -2
  338. package/types/ops/Saml2Ops.d.ts.map +1 -1
  339. package/types/ops/ScriptOps.d.ts +3 -2
  340. package/types/ops/ScriptOps.d.ts.map +1 -1
  341. package/types/ops/ServiceOps.d.ts +4 -3
  342. package/types/ops/ServiceOps.d.ts.map +1 -1
  343. package/types/ops/ThemeOps.d.ts +3 -2
  344. package/types/ops/ThemeOps.d.ts.map +1 -1
  345. package/types/ops/cloud/AdminFederationOps.d.ts +3 -2
  346. package/types/ops/cloud/AdminFederationOps.d.ts.map +1 -1
  347. package/types/ops/cloud/FeatureOps.d.ts +3 -2
  348. package/types/ops/cloud/FeatureOps.d.ts.map +1 -1
  349. package/types/ops/cloud/LogOps.d.ts +3 -2
  350. package/types/ops/cloud/LogOps.d.ts.map +1 -1
  351. package/types/ops/cloud/SecretsOps.d.ts +3 -2
  352. package/types/ops/cloud/SecretsOps.d.ts.map +1 -1
  353. package/types/ops/cloud/ServiceAccountOps.d.ts +7 -6
  354. package/types/ops/cloud/ServiceAccountOps.d.ts.map +1 -1
  355. package/types/ops/cloud/StartupOps.d.ts +3 -2
  356. package/types/ops/cloud/StartupOps.d.ts.map +1 -1
  357. package/types/ops/cloud/VariablesOps.d.ts +3 -2
  358. package/types/ops/cloud/VariablesOps.d.ts.map +1 -1
  359. package/types/ops/utils/Console.d.ts +1 -1
  360. package/types/ops/utils/Console.d.ts.map +1 -1
  361. package/types/ops/utils/DataProtection.d.ts +1 -1
  362. package/types/ops/utils/DataProtection.d.ts.map +1 -1
  363. package/types/ops/utils/ExportImportUtils.d.ts +3 -2
  364. package/types/ops/utils/ExportImportUtils.d.ts.map +1 -1
  365. package/types/ops/utils/OpsUtils.d.ts +73 -17
  366. package/types/ops/utils/OpsUtils.d.ts.map +1 -1
  367. package/types/ops/utils/ScriptValidationUtils.d.ts +20 -1
  368. package/types/ops/utils/ScriptValidationUtils.d.ts.map +1 -1
  369. package/types/ops/utils/{Version.d.ts → VersionUtils.d.ts} +4 -4
  370. package/types/ops/utils/VersionUtils.d.ts.map +1 -0
  371. package/types/shared/Constants.d.ts +34 -0
  372. package/types/shared/Constants.d.ts.map +1 -0
  373. package/types/shared/State.d.ts +38 -38
  374. package/types/shared/State.d.ts.map +1 -1
  375. package/types/utils/SetupPollyForFrodoLib.d.ts +1 -1
  376. package/types/utils/SetupPollyForFrodoLib.d.ts.map +1 -1
  377. package/cjs/lib/Frodo.js +0 -85
  378. package/cjs/lib/Frodo.js.map +0 -1
  379. package/cjs/ops/utils/Version.js.map +0 -1
  380. package/cjs/ops/utils/Version.test.js.map +0 -1
  381. package/cjs/ops/utils/Wordwrap.js +0 -12
  382. package/cjs/ops/utils/Wordwrap.js.map +0 -1
  383. package/cjs/ops/utils/Wordwrap.test.js +0 -22
  384. package/cjs/ops/utils/Wordwrap.test.js.map +0 -1
  385. package/cjs/storage/StaticStorage.js +0 -31
  386. package/cjs/storage/StaticStorage.js.map +0 -1
  387. package/esm/lib/Frodo.js +0 -59
  388. package/esm/lib/Frodo.js.map +0 -1
  389. package/esm/ops/utils/Version.js.map +0 -1
  390. package/esm/ops/utils/Version.test.js.map +0 -1
  391. package/esm/ops/utils/Wordwrap.js +0 -5
  392. package/esm/ops/utils/Wordwrap.js.map +0 -1
  393. package/esm/ops/utils/Wordwrap.test.js +0 -19
  394. package/esm/ops/utils/Wordwrap.test.js.map +0 -1
  395. package/esm/storage/StaticStorage.js +0 -15
  396. package/esm/storage/StaticStorage.js.map +0 -1
  397. package/types/lib/Frodo.d.ts +0 -1159
  398. package/types/lib/Frodo.d.ts.map +0 -1
  399. package/types/ops/utils/Version.d.ts.map +0 -1
  400. package/types/ops/utils/Wordwrap.d.ts +0 -2
  401. package/types/ops/utils/Wordwrap.d.ts.map +0 -1
  402. package/types/storage/StaticStorage.d.ts +0 -15
  403. package/types/storage/StaticStorage.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"AuthenticateOps.js","names":["url","createHash","randomBytes","readlineSync","encodeBase64Url","globalConfig","getServerInfo","getServerVersionInfo","step","accessToken","authorize","getConnectionProfile","v4","parseUrl","createSignedJwtToken","getServiceAccount","isValidUrl","debugMessage","printMessage","verboseMessage","state","getAccessTokenForServiceAccount","saId","undefined","saJwk","getTokens","forceLoginAsUser","adminClientPassword","redirectUrlTemplate","cloudIdmAdminScopes","forgeopsIdmAdminScopes","serviceAccountScopes","adminClientId","determineCookieName","data","message","cookieName","checkAndHandle2FA","payload","callback","callbacks","type","localAuth","value","output","provider","input","includes","nextStep","need2fa","factor","supported","code","question","getUsername","getPassword","determineDefaultRealm","getRealm","DEFAULT_REALM_KEY","setRealm","DEPLOYMENT_TYPE_REALM_MAP","getDeploymentType","determineDeploymentType","cookieValue","getCookieValue","getUseBearerTokenForAmApis","CLOUD_DEPLOYMENT_TYPE_KEY","fidcClientId","forgeopsClientId","verifier","challenge","update","digest","challengeMethod","redirectURL","resolve","getHost","config","maxRedirects","headers","getCookieName","bodyFormData","deploymentType","CLASSIC_DEPLOYMENT_TYPE_KEY","amBaseUrl","e","_e$response","_e$response$headers","_e$response$headers$l","response","status","location","indexOf","ex","_ex$response","_ex$response$headers","_ex$response$headers$","FORGEOPS_DEPLOYMENT_TYPE_KEY","getSemanticVersion","versionInfo","versionString","version","rx","match","Error","authenticate","body","skip2FA","steps","maxSteps","getAuthCode","codeChallenge","codeChallengeMethod","_response$headers","error","redirectLocationURL","queryObject","parse","query","_error$response","stack","getAccessTokenForUser","authCode","auth","username","password","access_token","_error$response2","createPayload","serviceAccountId","host","u","aud","origin","port","protocol","pathname","exp","Math","floor","Date","getTime","jti","iss","sub","getServiceAccountId","getServiceAccountJwk","jwt","determineDeploymentTypeAndDefaultRealmAndVersion","setDeploymentType","fullVersion","setAmVersion","getLoggedInSubject","subjectString","name","conn","setHost","tenant","setUsername","setPassword","setAuthenticationService","authenticationService","setAuthenticationHeaderOverrides","authenticationHeaderOverrides","setServiceAccountId","svcacctId","setServiceAccountJwk","svcacctJwk","setCookieName","token","setBearerToken","setUseBearerTokenForAmApis","saErr","_saErr$response","_saErr$response2","_saErr$response2$data","_saErr$response3","_saErr$response3$data","error_description","setCookieValue","getBearerToken","_error$response3","_error$response3$data","_error$response4","_error$response4$data","_error$response5"],"sources":["../../src/ops/AuthenticateOps.ts"],"sourcesContent":["import url from 'url';\nimport { createHash, randomBytes } from 'crypto';\nimport readlineSync from 'readline-sync';\nimport { encodeBase64Url } from '../api/utils/Base64';\nimport State from '../shared/State';\nimport * as globalConfig from '../storage/StaticStorage';\nimport { getServerInfo, getServerVersionInfo } from '../api/ServerInfoApi';\nimport { step } from '../api/AuthenticateApi';\nimport { accessToken, authorize } from '../api/OAuth2OIDCApi';\nimport { getConnectionProfile } from './ConnectionProfileOps';\nimport { v4 } from 'uuid';\nimport { parseUrl } from '../api/utils/ApiUtils';\nimport { JwkRsa, createSignedJwtToken } from './JoseOps';\nimport { getServiceAccount } from './cloud/ServiceAccountOps';\nimport { isValidUrl } from './utils/OpsUtils';\nimport { debugMessage, printMessage, verboseMessage } from './utils/Console';\n\nexport default (state: State) => {\n return {\n /**\n * Get access token for service account\n * @returns {string | null} Access token or null\n */\n async getAccessTokenForServiceAccount(\n saId: string = undefined,\n saJwk: JwkRsa = undefined\n ): Promise<string | null> {\n return getAccessTokenForServiceAccount({ saId, saJwk, state });\n },\n\n /**\n * Get tokens\n * @param {boolean} forceLoginAsUser true to force login as user even if a service account is available (default: false)\n * @returns {Promise<boolean>} true if tokens were successfully obtained, false otherwise\n */\n getTokens(forceLoginAsUser = false) {\n return getTokens({ forceLoginAsUser, state });\n },\n };\n};\n\nconst adminClientPassword = 'doesnotmatter';\nconst redirectUrlTemplate = '/platform/appAuthHelperRedirect.html';\n\nconst cloudIdmAdminScopes = 'openid fr:idm:* fr:idc:esv:*';\nconst forgeopsIdmAdminScopes = 'openid fr:idm:*';\nconst serviceAccountScopes = 'fr:am:* fr:idm:* fr:idc:esv:*';\n\nlet adminClientId = 'idmAdminClient';\n\n/**\n * Helper function to get cookie name\n * @param {State} state library state\n * @returns {string} cookie name\n */\nasync function determineCookieName(state: State) {\n const data = await getServerInfo({ state });\n debugMessage({\n message: `AuthenticateOps.determineCookieName: cookieName=${data.cookieName}`,\n state,\n });\n return data.cookieName;\n}\n\n/**\n * Helper function to determine if this is a setup mfa prompt in the ID Cloud tenant admin login journey\n * @param {Object} payload response from the previous authentication journey step\n * @param {State} state library state\n * @returns {Object} an object indicating if 2fa is required and the original payload\n */\nfunction checkAndHandle2FA(payload, state: State) {\n debugMessage({ message: `AuthenticateOps.checkAndHandle2FA: start`, state });\n // let skippable = false;\n if ('callbacks' in payload) {\n for (const callback of payload.callbacks) {\n // select localAuthentication if Admin Federation is enabled\n if (callback.type === 'SelectIdPCallback') {\n debugMessage({\n message: `AuthenticateOps.checkAndHandle2FA: Admin federation enabled. Allowed providers:`,\n state,\n });\n let localAuth = false;\n for (const value of callback.output[0].value) {\n debugMessage({ message: `${value.provider}`, state });\n if (value.provider === 'localAuthentication') {\n localAuth = true;\n }\n }\n if (localAuth) {\n debugMessage({ message: `local auth allowed`, state });\n callback.input[0].value = 'localAuthentication';\n } else {\n debugMessage({ message: `local auth NOT allowed`, state });\n }\n }\n if (callback.type === 'HiddenValueCallback') {\n if (callback.input[0].value.includes('skip')) {\n // skippable = true;\n callback.input[0].value = 'Skip';\n // debugMessage(\n // `AuthenticateOps.checkAndHandle2FA: end [need2fa=true, skippable=true]`\n // );\n // return {\n // nextStep: true,\n // need2fa: true,\n // factor: 'None',\n // supported: true,\n // payload,\n // };\n }\n if (callback.input[0].value.includes('webAuthnOutcome')) {\n // webauthn!!!\n debugMessage({\n message: `AuthenticateOps.checkAndHandle2FA: end [need2fa=true, unsupported factor: webauthn]`,\n state,\n });\n return {\n nextStep: false,\n need2fa: true,\n factor: 'WebAuthN',\n supported: false,\n payload,\n };\n }\n }\n if (callback.type === 'NameCallback') {\n if (callback.output[0].value.includes('code')) {\n // skippable = false;\n debugMessage({\n message: `AuthenticateOps.checkAndHandle2FA: need2fa=true, skippable=false`,\n state,\n });\n printMessage({\n message: '2FA is enabled and required for this user...',\n state,\n });\n const code = readlineSync.question(`${callback.output[0].value}: `);\n callback.input[0].value = code;\n debugMessage({\n message: `AuthenticateOps.checkAndHandle2FA: end [need2fa=true, skippable=false, factor=Code]`,\n state,\n });\n return {\n nextStep: true,\n need2fa: true,\n factor: 'Code',\n supported: true,\n payload,\n };\n } else {\n // answer callback\n callback.input[0].value = state.getUsername();\n }\n }\n if (callback.type === 'PasswordCallback') {\n // answer callback\n callback.input[0].value = state.getPassword();\n }\n }\n debugMessage({\n message: `AuthenticateOps.checkAndHandle2FA: end [need2fa=false]`,\n state,\n });\n // debugMessage(payload);\n return {\n nextStep: true,\n need2fa: false,\n factor: 'None',\n supported: true,\n payload,\n };\n }\n debugMessage({\n message: `AuthenticateOps.checkAndHandle2FA: end [need2fa=false]`,\n state,\n });\n // debugMessage(payload);\n return {\n nextStep: false,\n need2fa: false,\n factor: 'None',\n supported: true,\n payload,\n };\n}\n\n/**\n * Helper function to set the default realm by deployment type\n * @param {State} state library state\n */\nfunction determineDefaultRealm(state: State) {\n if (\n !state.getRealm() ||\n state.getRealm() === globalConfig.DEFAULT_REALM_KEY\n ) {\n state.setRealm(\n globalConfig.DEPLOYMENT_TYPE_REALM_MAP[state.getDeploymentType()]\n );\n }\n}\n\n/**\n * Helper function to determine the deployment type\n * @param {State} state library state\n * @returns {Promise<string>} deployment type\n */\nasync function determineDeploymentType(state: State): Promise<string> {\n const cookieValue = state.getCookieValue();\n\n // if we are using a service account, we know it's cloud\n if (state.getUseBearerTokenForAmApis())\n return globalConfig.CLOUD_DEPLOYMENT_TYPE_KEY;\n\n const fidcClientId = 'idmAdminClient';\n const forgeopsClientId = 'idm-admin-ui';\n\n const verifier = encodeBase64Url(randomBytes(32));\n const challenge = encodeBase64Url(\n createHash('sha256').update(verifier).digest()\n );\n const challengeMethod = 'S256';\n const redirectURL = url.resolve(state.getHost(), redirectUrlTemplate);\n\n const config = {\n maxRedirects: 0,\n headers: {\n [state.getCookieName()]: state.getCookieValue(),\n },\n };\n let bodyFormData = `redirect_uri=${redirectURL}&scope=${cloudIdmAdminScopes}&response_type=code&client_id=${fidcClientId}&csrf=${cookieValue}&decision=allow&code_challenge=${challenge}&code_challenge_method=${challengeMethod}`;\n\n let deploymentType = globalConfig.CLASSIC_DEPLOYMENT_TYPE_KEY;\n try {\n await authorize({\n amBaseUrl: state.getHost(),\n data: bodyFormData,\n config,\n state,\n });\n } catch (e) {\n // debugMessage(e.response);\n if (\n e.response?.status === 302 &&\n e.response.headers?.location?.indexOf('code=') > -1\n ) {\n verboseMessage({\n message: `ForgeRock Identity Cloud`['brightCyan'] + ` detected.`,\n state,\n });\n deploymentType = globalConfig.CLOUD_DEPLOYMENT_TYPE_KEY;\n } else {\n try {\n bodyFormData = `redirect_uri=${redirectURL}&scope=${forgeopsIdmAdminScopes}&response_type=code&client_id=${forgeopsClientId}&csrf=${state.getCookieValue()}&decision=allow&code_challenge=${challenge}&code_challenge_method=${challengeMethod}`;\n await authorize({\n amBaseUrl: state.getHost(),\n data: bodyFormData,\n config,\n state,\n });\n } catch (ex) {\n if (\n ex.response?.status === 302 &&\n ex.response.headers?.location?.indexOf('code=') > -1\n ) {\n adminClientId = forgeopsClientId;\n verboseMessage({\n message: `ForgeOps deployment`['brightCyan'] + ` detected.`,\n state,\n });\n deploymentType = globalConfig.FORGEOPS_DEPLOYMENT_TYPE_KEY;\n } else {\n verboseMessage({\n message: `Classic deployment`['brightCyan'] + ` detected.`,\n state,\n });\n }\n }\n }\n }\n return deploymentType;\n}\n\n/**\n * Helper function to extract the semantic version string from a version info object\n * @param {Object} versionInfo version info object\n * @returns {String} semantic version\n */\nfunction getSemanticVersion(versionInfo) {\n if ('version' in versionInfo) {\n const versionString = versionInfo.version;\n const rx = /([\\d]\\.[\\d]\\.[\\d](\\.[\\d])*)/g;\n const version = versionString.match(rx);\n return version[0];\n }\n throw new Error('Cannot extract semantic version from version info object.');\n}\n\n/**\n * Helper function to authenticate and obtain and store session cookie\n * @param {State} state library state\n * @returns {string} Session token or null\n */\nasync function authenticate(state: State): Promise<string> {\n debugMessage({ message: `AuthenticateOps.authenticate: start`, state });\n const config = {\n headers: {\n 'X-OpenAM-Username': state.getUsername(),\n 'X-OpenAM-Password': state.getPassword(),\n },\n };\n let response = await step({ body: {}, config, state });\n\n let skip2FA = null;\n let steps = 0;\n const maxSteps = 3;\n do {\n skip2FA = checkAndHandle2FA(response, state);\n\n // throw exception if 2fa required but factor not supported by frodo (e.g. WebAuthN)\n if (!skip2FA.supported) {\n throw new Error(`Unsupported 2FA factor: ${skip2FA.factor}`);\n }\n\n if (skip2FA.nextStep) {\n steps++;\n response = await step({ body: skip2FA.payload, state });\n }\n\n if ('tokenId' in response) {\n debugMessage({\n message: `AuthenticateOps.authenticate: end [tokenId=${response['tokenId']}]`,\n state,\n });\n return response['tokenId'] as string;\n }\n } while (skip2FA.nextStep && steps < maxSteps);\n debugMessage({\n message: `AuthenticateOps.authenticate: end [no session]`,\n state,\n });\n return null;\n}\n\n/**\n * Helper function to obtain an oauth2 authorization code\n * @param {string} redirectURL oauth2 redirect uri\n * @param {string} codeChallenge PKCE code challenge\n * @param {string} codeChallengeMethod PKCE code challenge method\n * @param {State} state library state\n * @returns {string} oauth2 authorization code or null\n */\nasync function getAuthCode(\n redirectURL: string,\n codeChallenge: string,\n codeChallengeMethod: string,\n state: State\n) {\n try {\n const bodyFormData = `redirect_uri=${redirectURL}&scope=${\n state.getDeploymentType() === globalConfig.CLOUD_DEPLOYMENT_TYPE_KEY\n ? cloudIdmAdminScopes\n : forgeopsIdmAdminScopes\n }&response_type=code&client_id=${adminClientId}&csrf=${state.getCookieValue()}&decision=allow&code_challenge=${codeChallenge}&code_challenge_method=${codeChallengeMethod}`;\n const config = {\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n maxRedirects: 0,\n };\n let response = undefined;\n try {\n response = await authorize({\n amBaseUrl: state.getHost(),\n data: bodyFormData,\n config,\n state,\n });\n } catch (error) {\n response = error.response;\n }\n if (response.status < 200 || response.status > 399) {\n printMessage({\n message: 'error getting auth code',\n type: 'error',\n state,\n });\n printMessage({\n message: 'likely cause: mismatched parameters with OAuth client config',\n type: 'error',\n state,\n });\n return null;\n }\n const redirectLocationURL = response.headers?.location;\n const queryObject = url.parse(redirectLocationURL, true).query;\n if ('code' in queryObject) {\n return queryObject.code;\n }\n printMessage({ message: 'auth code not found', type: 'error', state });\n return null;\n } catch (error) {\n printMessage({\n message: `error getting auth code - ${error.message}`,\n type: 'error',\n state,\n });\n printMessage({ message: error.response?.data, type: 'error', state });\n debugMessage({ message: error.stack, state });\n return null;\n }\n}\n\n/**\n * Helper function to obtain oauth2 access token\n * @param {State} state library state\n * @returns {Promise<string | null>} access token or null\n */\nasync function getAccessTokenForUser(state: State): Promise<string | null> {\n debugMessage({\n message: `AuthenticateOps.getAccessTokenForUser: start`,\n state,\n });\n try {\n const verifier = encodeBase64Url(randomBytes(32));\n const challenge = encodeBase64Url(\n createHash('sha256').update(verifier).digest()\n );\n const challengeMethod = 'S256';\n const redirectURL = url.resolve(state.getHost(), redirectUrlTemplate);\n const authCode = await getAuthCode(\n redirectURL,\n challenge,\n challengeMethod,\n state\n );\n if (authCode == null) {\n printMessage({\n message: 'error getting auth code',\n type: 'error',\n state,\n });\n return null;\n }\n let response = null;\n if (state.getDeploymentType() === globalConfig.CLOUD_DEPLOYMENT_TYPE_KEY) {\n const config = {\n auth: {\n username: adminClientId,\n password: adminClientPassword,\n },\n };\n const bodyFormData = `redirect_uri=${redirectURL}&grant_type=authorization_code&code=${authCode}&code_verifier=${verifier}`;\n response = await accessToken({\n amBaseUrl: state.getHost(),\n data: bodyFormData,\n config,\n state,\n });\n } else {\n const bodyFormData = `client_id=${adminClientId}&redirect_uri=${redirectURL}&grant_type=authorization_code&code=${authCode}&code_verifier=${verifier}`;\n response = await accessToken({\n amBaseUrl: state.getHost(),\n data: bodyFormData,\n config: {},\n state,\n });\n }\n if ('access_token' in response.data) {\n debugMessage({\n message: `AuthenticateOps.getAccessTokenForUser: end with token`,\n state,\n });\n return response.data.access_token;\n }\n printMessage({\n message: 'No access token in response.',\n type: 'error',\n state,\n });\n } catch (error) {\n debugMessage({\n message: `Error getting access token for user: ${error}`,\n state,\n });\n debugMessage({ message: error.response?.data, state });\n }\n debugMessage({\n message: `AuthenticateOps.getAccessTokenForUser: end without token`,\n state,\n });\n return null;\n}\n\nfunction createPayload(serviceAccountId: string, host: string) {\n const u = parseUrl(host);\n const aud = `${u.origin}:${\n u.port ? u.port : u.protocol === 'https' ? '443' : '80'\n }${u.pathname}/oauth2/access_token`;\n\n // Cross platform way of setting JWT expiry time 3 minutes in the future, expressed as number of seconds since EPOCH\n const exp = Math.floor(new Date().getTime() / 1000 + 180);\n\n // A unique ID for the JWT which is required when requesting the openid scope\n const jti = v4();\n\n const iss = serviceAccountId;\n const sub = serviceAccountId;\n\n // Create the payload for our bearer token\n const payload = { iss, sub, aud, exp, jti };\n\n return payload;\n}\n\n/**\n * Get access token for service account\n * @param {State} state library state\n * @returns {string | null} Access token or null\n */\nexport async function getAccessTokenForServiceAccount({\n saId = undefined,\n saJwk = undefined,\n state,\n}: {\n saId?: string;\n saJwk?: JwkRsa;\n state: State;\n}): Promise<string | null> {\n saId = saId ? saId : state.getServiceAccountId();\n saJwk = saJwk ? saJwk : state.getServiceAccountJwk();\n debugMessage({\n message: `AuthenticateOps.getAccessTokenForServiceAccount: start`,\n state,\n });\n const payload = createPayload(saId, state.getHost());\n debugMessage({\n message: `AuthenticateOps.getAccessTokenForServiceAccount: payload:`,\n state,\n });\n debugMessage({ message: payload, state });\n const jwt = await createSignedJwtToken(payload, saJwk);\n debugMessage({\n message: `AuthenticateOps.getAccessTokenForServiceAccount: jwt:`,\n state,\n });\n debugMessage({ message: jwt, state });\n const bodyFormData = `assertion=${jwt}&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=${serviceAccountScopes}`;\n const response = await accessToken({\n amBaseUrl: state.getHost(),\n data: bodyFormData,\n config: {},\n state,\n });\n if ('access_token' in response.data) {\n debugMessage({\n message: `AuthenticateOps.getAccessTokenForServiceAccount: token:`,\n state,\n });\n debugMessage({ message: response.data.access_token, state });\n debugMessage({\n message: `AuthenticateOps.getAccessTokenForServiceAccount: end`,\n state,\n });\n return response.data.access_token;\n }\n debugMessage({\n message: `AuthenticateOps.getAccessTokenForServiceAccount: No access token in response.`,\n state,\n });\n debugMessage({\n message: `AuthenticateOps.getAccessTokenForServiceAccount: end`,\n state,\n });\n return null;\n}\n\n/**\n * Helper function to determine deployment type, default realm, and version and update library state\n * @param state library state\n */\nasync function determineDeploymentTypeAndDefaultRealmAndVersion(\n state: State\n): Promise<void> {\n debugMessage({\n message: `AuthenticateOps.determineDeploymentTypeAndDefaultRealmAndVersion: start`,\n state,\n });\n if (!state.getDeploymentType()) {\n state.setDeploymentType(await determineDeploymentType(state));\n }\n determineDefaultRealm(state);\n debugMessage({\n message: `AuthenticateOps.determineDeploymentTypeAndDefaultRealmAndVersion: realm=${state.getRealm()}, type=${state.getDeploymentType()}`,\n state,\n });\n\n const versionInfo = await getServerVersionInfo({ state });\n\n // https://github.com/rockcarver/frodo-cli/issues/109\n debugMessage({ message: `Full version: ${versionInfo.fullVersion}`, state });\n\n const version = await getSemanticVersion(versionInfo);\n state.setAmVersion(version);\n debugMessage({\n message: `AuthenticateOps.determineDeploymentTypeAndDefaultRealmAndVersion: end`,\n state,\n });\n}\n\n/**\n * Get logged-in subject\n * @param {State} state library state\n * @returns {string} a string identifying subject type and id\n */\nasync function getLoggedInSubject(state: State): Promise<string> {\n let subjectString = `user ${state.getUsername()}`;\n if (state.getUseBearerTokenForAmApis()) {\n try {\n const name = (\n await getServiceAccount({\n serviceAccountId: state.getServiceAccountId(),\n state,\n })\n ).name;\n subjectString = `service account ${name} [${state.getServiceAccountId()}]`;\n } catch (error) {\n subjectString = `service account ${state.getServiceAccountId()}`;\n }\n }\n return subjectString;\n}\n\n/**\n * Get tokens\n * @param {boolean} forceLoginAsUser true to force login as user even if a service account is available (default: false)\n * @param {State} state library state\n * @returns {Promise<boolean>} true if tokens were successfully obtained, false otherwise\n */\nexport async function getTokens({\n forceLoginAsUser = false,\n state,\n}: {\n forceLoginAsUser?: boolean;\n state: State;\n}): Promise<boolean> {\n debugMessage({ message: `AuthenticateOps.getTokens: start`, state });\n if (!state.getHost()) {\n printMessage({\n message: `No host specified and FRODO_HOST env variable not set!`,\n type: 'error',\n state,\n });\n return false;\n }\n try {\n // if username/password on cli are empty, try to read from connections.json\n if (\n state.getUsername() == null &&\n state.getPassword() == null &&\n !state.getServiceAccountId() &&\n !state.getServiceAccountJwk()\n ) {\n const conn = await getConnectionProfile({ state });\n if (conn) {\n state.setHost(conn.tenant);\n state.setUsername(conn.username);\n state.setPassword(conn.password);\n state.setAuthenticationService(conn.authenticationService);\n state.setAuthenticationHeaderOverrides(\n conn.authenticationHeaderOverrides\n );\n state.setServiceAccountId(conn.svcacctId);\n state.setServiceAccountJwk(conn.svcacctJwk);\n } else {\n return false;\n }\n }\n\n // if host is not a valid URL, try to locate a valid URL from connections.json\n if (!isValidUrl(state.getHost())) {\n const conn = await getConnectionProfile({ state });\n if (conn) {\n state.setHost(conn.tenant);\n } else {\n return false;\n }\n }\n\n // now that we have the full tenant URL we can lookup the cookie name\n state.setCookieName(await determineCookieName(state));\n\n // use service account to login?\n if (\n !forceLoginAsUser &&\n state.getServiceAccountId() &&\n state.getServiceAccountJwk()\n ) {\n debugMessage({\n message: `AuthenticateOps.getTokens: Authenticating with service account ${state.getServiceAccountId()}`,\n state,\n });\n try {\n const token = await getAccessTokenForServiceAccount({ state });\n state.setBearerToken(token);\n state.setUseBearerTokenForAmApis(true);\n await determineDeploymentTypeAndDefaultRealmAndVersion(state);\n } catch (saErr) {\n debugMessage({ message: saErr.response?.data || saErr, state });\n debugMessage({ message: state, state });\n throw new Error(\n `Service account login error: ${\n saErr.response?.data?.error_description ||\n saErr.response?.data?.message ||\n saErr\n }`\n );\n }\n }\n // use user account to login\n else if (state.getUsername() && state.getPassword()) {\n debugMessage({\n message: `AuthenticateOps.getTokens: Authenticating with user account ${state.getUsername()}`,\n state,\n });\n const token = await authenticate(state);\n if (token) state.setCookieValue(token);\n await determineDeploymentTypeAndDefaultRealmAndVersion(state);\n if (\n state.getCookieValue() &&\n !state.getBearerToken() &&\n (state.getDeploymentType() === globalConfig.CLOUD_DEPLOYMENT_TYPE_KEY ||\n state.getDeploymentType() ===\n globalConfig.FORGEOPS_DEPLOYMENT_TYPE_KEY)\n ) {\n const accessToken = await getAccessTokenForUser(state);\n if (accessToken) state.setBearerToken(accessToken);\n }\n }\n // incomplete or no credentials\n else {\n printMessage({\n message: `Incomplete or no credentials!`,\n type: 'error',\n state,\n });\n return false;\n }\n if (\n state.getCookieValue() ||\n (state.getUseBearerTokenForAmApis() && state.getBearerToken())\n ) {\n // https://github.com/rockcarver/frodo-cli/issues/102\n printMessage({\n message: `Connected to ${state.getHost()} [${\n state.getRealm() ? state.getRealm() : 'root'\n }] as ${await getLoggedInSubject(state)}`,\n type: 'info',\n state,\n });\n debugMessage({\n message: `AuthenticateOps.getTokens: end with tokens`,\n state,\n });\n return true;\n }\n } catch (error) {\n // regular error\n printMessage({ message: error.message, type: 'error', state });\n // axios error am api\n printMessage({\n message: error.response?.data?.message,\n type: 'error',\n state,\n });\n // axios error am oauth2 api\n printMessage({\n message: error.response?.data?.error_description,\n type: 'error',\n state,\n });\n // axios error data\n debugMessage({ message: error.response?.data, state });\n // stack trace\n debugMessage({ message: error.stack || new Error().stack, state });\n }\n debugMessage({\n message: `AuthenticateOps.getTokens: end without tokens`,\n state,\n });\n return false;\n}\n"],"mappings":"AAAA,OAAOA,GAAG,MAAM,KAAK;AACrB,SAASC,UAAU,EAAEC,WAAW,QAAQ,QAAQ;AAChD,OAAOC,YAAY,MAAM,eAAe;AAAC,SAChCC,eAAe;AAAA,OAEjB,KAAKC,YAAY;AAAA,SACfC,aAAa,EAAEC,oBAAoB;AAAA,SACnCC,IAAI;AAAA,SACJC,WAAW,EAAEC,SAAS;AAAA,SACtBC,oBAAoB;AAC7B,SAASC,EAAE,QAAQ,MAAM;AAAC,SACjBC,QAAQ;AAAA,SACAC,oBAAoB;AAAA,SAC5BC,iBAAiB;AAAA,SACjBC,UAAU;AAAA,SACVC,YAAY,EAAEC,YAAY,EAAEC,cAAc;AAEnD,gBAAgBC,KAAY,IAAK;EAC/B,OAAO;IACL;AACJ;AACA;AACA;IACI,MAAMC,+BAA+BA,CACnCC,IAAY,GAAGC,SAAS,EACxBC,KAAa,GAAGD,SAAS,EACD;MACxB,OAAOF,+BAA+B,CAAC;QAAEC,IAAI;QAAEE,KAAK;QAAEJ;MAAM,CAAC,CAAC;IAChE,CAAC;IAED;AACJ;AACA;AACA;AACA;IACIK,SAASA,CAACC,gBAAgB,GAAG,KAAK,EAAE;MAClC,OAAOD,SAAS,CAAC;QAAEC,gBAAgB;QAAEN;MAAM,CAAC,CAAC;IAC/C;EACF,CAAC;AACH,CAAC;AAED,MAAMO,mBAAmB,GAAG,eAAe;AAC3C,MAAMC,mBAAmB,GAAG,sCAAsC;AAElE,MAAMC,mBAAmB,GAAG,8BAA8B;AAC1D,MAAMC,sBAAsB,GAAG,iBAAiB;AAChD,MAAMC,oBAAoB,GAAG,+BAA+B;AAE5D,IAAIC,aAAa,GAAG,gBAAgB;;AAEpC;AACA;AACA;AACA;AACA;AACA,eAAeC,mBAAmBA,CAACb,KAAY,EAAE;EAC/C,MAAMc,IAAI,GAAG,MAAM5B,aAAa,CAAC;IAAEc;EAAM,CAAC,CAAC;EAC3CH,YAAY,CAAC;IACXkB,OAAO,EAAG,mDAAkDD,IAAI,CAACE,UAAW,EAAC;IAC7EhB;EACF,CAAC,CAAC;EACF,OAAOc,IAAI,CAACE,UAAU;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,iBAAiBA,CAACC,OAAO,EAAElB,KAAY,EAAE;EAChDH,YAAY,CAAC;IAAEkB,OAAO,EAAG,0CAAyC;IAAEf;EAAM,CAAC,CAAC;EAC5E;EACA,IAAI,WAAW,IAAIkB,OAAO,EAAE;IAC1B,KAAK,MAAMC,QAAQ,IAAID,OAAO,CAACE,SAAS,EAAE;MACxC;MACA,IAAID,QAAQ,CAACE,IAAI,KAAK,mBAAmB,EAAE;QACzCxB,YAAY,CAAC;UACXkB,OAAO,EAAG,iFAAgF;UAC1Ff;QACF,CAAC,CAAC;QACF,IAAIsB,SAAS,GAAG,KAAK;QACrB,KAAK,MAAMC,KAAK,IAAIJ,QAAQ,CAACK,MAAM,CAAC,CAAC,CAAC,CAACD,KAAK,EAAE;UAC5C1B,YAAY,CAAC;YAAEkB,OAAO,EAAG,GAAEQ,KAAK,CAACE,QAAS,EAAC;YAAEzB;UAAM,CAAC,CAAC;UACrD,IAAIuB,KAAK,CAACE,QAAQ,KAAK,qBAAqB,EAAE;YAC5CH,SAAS,GAAG,IAAI;UAClB;QACF;QACA,IAAIA,SAAS,EAAE;UACbzB,YAAY,CAAC;YAAEkB,OAAO,EAAG,oBAAmB;YAAEf;UAAM,CAAC,CAAC;UACtDmB,QAAQ,CAACO,KAAK,CAAC,CAAC,CAAC,CAACH,KAAK,GAAG,qBAAqB;QACjD,CAAC,MAAM;UACL1B,YAAY,CAAC;YAAEkB,OAAO,EAAG,wBAAuB;YAAEf;UAAM,CAAC,CAAC;QAC5D;MACF;MACA,IAAImB,QAAQ,CAACE,IAAI,KAAK,qBAAqB,EAAE;QAC3C,IAAIF,QAAQ,CAACO,KAAK,CAAC,CAAC,CAAC,CAACH,KAAK,CAACI,QAAQ,CAAC,MAAM,CAAC,EAAE;UAC5C;UACAR,QAAQ,CAACO,KAAK,CAAC,CAAC,CAAC,CAACH,KAAK,GAAG,MAAM;UAChC;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;QACF;;QACA,IAAIJ,QAAQ,CAACO,KAAK,CAAC,CAAC,CAAC,CAACH,KAAK,CAACI,QAAQ,CAAC,iBAAiB,CAAC,EAAE;UACvD;UACA9B,YAAY,CAAC;YACXkB,OAAO,EAAG,qFAAoF;YAC9Ff;UACF,CAAC,CAAC;UACF,OAAO;YACL4B,QAAQ,EAAE,KAAK;YACfC,OAAO,EAAE,IAAI;YACbC,MAAM,EAAE,UAAU;YAClBC,SAAS,EAAE,KAAK;YAChBb;UACF,CAAC;QACH;MACF;MACA,IAAIC,QAAQ,CAACE,IAAI,KAAK,cAAc,EAAE;QACpC,IAAIF,QAAQ,CAACK,MAAM,CAAC,CAAC,CAAC,CAACD,KAAK,CAACI,QAAQ,CAAC,MAAM,CAAC,EAAE;UAC7C;UACA9B,YAAY,CAAC;YACXkB,OAAO,EAAG,kEAAiE;YAC3Ef;UACF,CAAC,CAAC;UACFF,YAAY,CAAC;YACXiB,OAAO,EAAE,8CAA8C;YACvDf;UACF,CAAC,CAAC;UACF,MAAMgC,IAAI,GAAGjD,YAAY,CAACkD,QAAQ,CAAE,GAAEd,QAAQ,CAACK,MAAM,CAAC,CAAC,CAAC,CAACD,KAAM,IAAG,CAAC;UACnEJ,QAAQ,CAACO,KAAK,CAAC,CAAC,CAAC,CAACH,KAAK,GAAGS,IAAI;UAC9BnC,YAAY,CAAC;YACXkB,OAAO,EAAG,qFAAoF;YAC9Ff;UACF,CAAC,CAAC;UACF,OAAO;YACL4B,QAAQ,EAAE,IAAI;YACdC,OAAO,EAAE,IAAI;YACbC,MAAM,EAAE,MAAM;YACdC,SAAS,EAAE,IAAI;YACfb;UACF,CAAC;QACH,CAAC,MAAM;UACL;UACAC,QAAQ,CAACO,KAAK,CAAC,CAAC,CAAC,CAACH,KAAK,GAAGvB,KAAK,CAACkC,WAAW,CAAC,CAAC;QAC/C;MACF;MACA,IAAIf,QAAQ,CAACE,IAAI,KAAK,kBAAkB,EAAE;QACxC;QACAF,QAAQ,CAACO,KAAK,CAAC,CAAC,CAAC,CAACH,KAAK,GAAGvB,KAAK,CAACmC,WAAW,CAAC,CAAC;MAC/C;IACF;IACAtC,YAAY,CAAC;MACXkB,OAAO,EAAG,wDAAuD;MACjEf;IACF,CAAC,CAAC;IACF;IACA,OAAO;MACL4B,QAAQ,EAAE,IAAI;MACdC,OAAO,EAAE,KAAK;MACdC,MAAM,EAAE,MAAM;MACdC,SAAS,EAAE,IAAI;MACfb;IACF,CAAC;EACH;EACArB,YAAY,CAAC;IACXkB,OAAO,EAAG,wDAAuD;IACjEf;EACF,CAAC,CAAC;EACF;EACA,OAAO;IACL4B,QAAQ,EAAE,KAAK;IACfC,OAAO,EAAE,KAAK;IACdC,MAAM,EAAE,MAAM;IACdC,SAAS,EAAE,IAAI;IACfb;EACF,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA,SAASkB,qBAAqBA,CAACpC,KAAY,EAAE;EAC3C,IACE,CAACA,KAAK,CAACqC,QAAQ,CAAC,CAAC,IACjBrC,KAAK,CAACqC,QAAQ,CAAC,CAAC,KAAKpD,YAAY,CAACqD,iBAAiB,EACnD;IACAtC,KAAK,CAACuC,QAAQ,CACZtD,YAAY,CAACuD,yBAAyB,CAACxC,KAAK,CAACyC,iBAAiB,CAAC,CAAC,CAClE,CAAC;EACH;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAeC,uBAAuBA,CAAC1C,KAAY,EAAmB;EACpE,MAAM2C,WAAW,GAAG3C,KAAK,CAAC4C,cAAc,CAAC,CAAC;;EAE1C;EACA,IAAI5C,KAAK,CAAC6C,0BAA0B,CAAC,CAAC,EACpC,OAAO5D,YAAY,CAAC6D,yBAAyB;EAE/C,MAAMC,YAAY,GAAG,gBAAgB;EACrC,MAAMC,gBAAgB,GAAG,cAAc;EAEvC,MAAMC,QAAQ,GAAGjE,eAAe,CAACF,WAAW,CAAC,EAAE,CAAC,CAAC;EACjD,MAAMoE,SAAS,GAAGlE,eAAe,CAC/BH,UAAU,CAAC,QAAQ,CAAC,CAACsE,MAAM,CAACF,QAAQ,CAAC,CAACG,MAAM,CAAC,CAC/C,CAAC;EACD,MAAMC,eAAe,GAAG,MAAM;EAC9B,MAAMC,WAAW,GAAG1E,GAAG,CAAC2E,OAAO,CAACvD,KAAK,CAACwD,OAAO,CAAC,CAAC,EAAEhD,mBAAmB,CAAC;EAErE,MAAMiD,MAAM,GAAG;IACbC,YAAY,EAAE,CAAC;IACfC,OAAO,EAAE;MACP,CAAC3D,KAAK,CAAC4D,aAAa,CAAC,CAAC,GAAG5D,KAAK,CAAC4C,cAAc,CAAC;IAChD;EACF,CAAC;EACD,IAAIiB,YAAY,GAAI,gBAAeP,WAAY,UAAS7C,mBAAoB,iCAAgCsC,YAAa,SAAQJ,WAAY,kCAAiCO,SAAU,0BAAyBG,eAAgB,EAAC;EAElO,IAAIS,cAAc,GAAG7E,YAAY,CAAC8E,2BAA2B;EAC7D,IAAI;IACF,MAAMzE,SAAS,CAAC;MACd0E,SAAS,EAAEhE,KAAK,CAACwD,OAAO,CAAC,CAAC;MAC1B1C,IAAI,EAAE+C,YAAY;MAClBJ,MAAM;MACNzD;IACF,CAAC,CAAC;EACJ,CAAC,CAAC,OAAOiE,CAAC,EAAE;IAAA,IAAAC,WAAA,EAAAC,mBAAA,EAAAC,qBAAA;IACV;IACA,IACE,EAAAF,WAAA,GAAAD,CAAC,CAACI,QAAQ,cAAAH,WAAA,uBAAVA,WAAA,CAAYI,MAAM,MAAK,GAAG,IAC1B,EAAAH,mBAAA,GAAAF,CAAC,CAACI,QAAQ,CAACV,OAAO,cAAAQ,mBAAA,wBAAAC,qBAAA,GAAlBD,mBAAA,CAAoBI,QAAQ,cAAAH,qBAAA,uBAA5BA,qBAAA,CAA8BI,OAAO,CAAC,OAAO,CAAC,IAAG,CAAC,CAAC,EACnD;MACAzE,cAAc,CAAC;QACbgB,OAAO,EAAG,0BAAyB,CAAC,YAAY,CAAC,GAAI,YAAW;QAChEf;MACF,CAAC,CAAC;MACF8D,cAAc,GAAG7E,YAAY,CAAC6D,yBAAyB;IACzD,CAAC,MAAM;MACL,IAAI;QACFe,YAAY,GAAI,gBAAeP,WAAY,UAAS5C,sBAAuB,iCAAgCsC,gBAAiB,SAAQhD,KAAK,CAAC4C,cAAc,CAAC,CAAE,kCAAiCM,SAAU,0BAAyBG,eAAgB,EAAC;QAChP,MAAM/D,SAAS,CAAC;UACd0E,SAAS,EAAEhE,KAAK,CAACwD,OAAO,CAAC,CAAC;UAC1B1C,IAAI,EAAE+C,YAAY;UAClBJ,MAAM;UACNzD;QACF,CAAC,CAAC;MACJ,CAAC,CAAC,OAAOyE,EAAE,EAAE;QAAA,IAAAC,YAAA,EAAAC,oBAAA,EAAAC,qBAAA;QACX,IACE,EAAAF,YAAA,GAAAD,EAAE,CAACJ,QAAQ,cAAAK,YAAA,uBAAXA,YAAA,CAAaJ,MAAM,MAAK,GAAG,IAC3B,EAAAK,oBAAA,GAAAF,EAAE,CAACJ,QAAQ,CAACV,OAAO,cAAAgB,oBAAA,wBAAAC,qBAAA,GAAnBD,oBAAA,CAAqBJ,QAAQ,cAAAK,qBAAA,uBAA7BA,qBAAA,CAA+BJ,OAAO,CAAC,OAAO,CAAC,IAAG,CAAC,CAAC,EACpD;UACA5D,aAAa,GAAGoC,gBAAgB;UAChCjD,cAAc,CAAC;YACbgB,OAAO,EAAG,qBAAoB,CAAC,YAAY,CAAC,GAAI,YAAW;YAC3Df;UACF,CAAC,CAAC;UACF8D,cAAc,GAAG7E,YAAY,CAAC4F,4BAA4B;QAC5D,CAAC,MAAM;UACL9E,cAAc,CAAC;YACbgB,OAAO,EAAG,oBAAmB,CAAC,YAAY,CAAC,GAAI,YAAW;YAC1Df;UACF,CAAC,CAAC;QACJ;MACF;IACF;EACF;EACA,OAAO8D,cAAc;AACvB;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASgB,kBAAkBA,CAACC,WAAW,EAAE;EACvC,IAAI,SAAS,IAAIA,WAAW,EAAE;IAC5B,MAAMC,aAAa,GAAGD,WAAW,CAACE,OAAO;IACzC,MAAMC,EAAE,GAAG,8BAA8B;IACzC,MAAMD,OAAO,GAAGD,aAAa,CAACG,KAAK,CAACD,EAAE,CAAC;IACvC,OAAOD,OAAO,CAAC,CAAC,CAAC;EACnB;EACA,MAAM,IAAIG,KAAK,CAAC,2DAA2D,CAAC;AAC9E;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAeC,YAAYA,CAACrF,KAAY,EAAmB;EACzDH,YAAY,CAAC;IAAEkB,OAAO,EAAG,qCAAoC;IAAEf;EAAM,CAAC,CAAC;EACvE,MAAMyD,MAAM,GAAG;IACbE,OAAO,EAAE;MACP,mBAAmB,EAAE3D,KAAK,CAACkC,WAAW,CAAC,CAAC;MACxC,mBAAmB,EAAElC,KAAK,CAACmC,WAAW,CAAC;IACzC;EACF,CAAC;EACD,IAAIkC,QAAQ,GAAG,MAAMjF,IAAI,CAAC;IAAEkG,IAAI,EAAE,CAAC,CAAC;IAAE7B,MAAM;IAAEzD;EAAM,CAAC,CAAC;EAEtD,IAAIuF,OAAO,GAAG,IAAI;EAClB,IAAIC,KAAK,GAAG,CAAC;EACb,MAAMC,QAAQ,GAAG,CAAC;EAClB,GAAG;IACDF,OAAO,GAAGtE,iBAAiB,CAACoD,QAAQ,EAAErE,KAAK,CAAC;;IAE5C;IACA,IAAI,CAACuF,OAAO,CAACxD,SAAS,EAAE;MACtB,MAAM,IAAIqD,KAAK,CAAE,2BAA0BG,OAAO,CAACzD,MAAO,EAAC,CAAC;IAC9D;IAEA,IAAIyD,OAAO,CAAC3D,QAAQ,EAAE;MACpB4D,KAAK,EAAE;MACPnB,QAAQ,GAAG,MAAMjF,IAAI,CAAC;QAAEkG,IAAI,EAAEC,OAAO,CAACrE,OAAO;QAAElB;MAAM,CAAC,CAAC;IACzD;IAEA,IAAI,SAAS,IAAIqE,QAAQ,EAAE;MACzBxE,YAAY,CAAC;QACXkB,OAAO,EAAG,8CAA6CsD,QAAQ,CAAC,SAAS,CAAE,GAAE;QAC7ErE;MACF,CAAC,CAAC;MACF,OAAOqE,QAAQ,CAAC,SAAS,CAAC;IAC5B;EACF,CAAC,QAAQkB,OAAO,CAAC3D,QAAQ,IAAI4D,KAAK,GAAGC,QAAQ;EAC7C5F,YAAY,CAAC;IACXkB,OAAO,EAAG,gDAA+C;IACzDf;EACF,CAAC,CAAC;EACF,OAAO,IAAI;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe0F,WAAWA,CACxBpC,WAAmB,EACnBqC,aAAqB,EACrBC,mBAA2B,EAC3B5F,KAAY,EACZ;EACA,IAAI;IAAA,IAAA6F,iBAAA;IACF,MAAMhC,YAAY,GAAI,gBAAeP,WAAY,UAC/CtD,KAAK,CAACyC,iBAAiB,CAAC,CAAC,KAAKxD,YAAY,CAAC6D,yBAAyB,GAChErC,mBAAmB,GACnBC,sBACL,iCAAgCE,aAAc,SAAQZ,KAAK,CAAC4C,cAAc,CAAC,CAAE,kCAAiC+C,aAAc,0BAAyBC,mBAAoB,EAAC;IAC3K,MAAMnC,MAAM,GAAG;MACbE,OAAO,EAAE;QACP,cAAc,EAAE;MAClB,CAAC;MACDD,YAAY,EAAE;IAChB,CAAC;IACD,IAAIW,QAAQ,GAAGlE,SAAS;IACxB,IAAI;MACFkE,QAAQ,GAAG,MAAM/E,SAAS,CAAC;QACzB0E,SAAS,EAAEhE,KAAK,CAACwD,OAAO,CAAC,CAAC;QAC1B1C,IAAI,EAAE+C,YAAY;QAClBJ,MAAM;QACNzD;MACF,CAAC,CAAC;IACJ,CAAC,CAAC,OAAO8F,KAAK,EAAE;MACdzB,QAAQ,GAAGyB,KAAK,CAACzB,QAAQ;IAC3B;IACA,IAAIA,QAAQ,CAACC,MAAM,GAAG,GAAG,IAAID,QAAQ,CAACC,MAAM,GAAG,GAAG,EAAE;MAClDxE,YAAY,CAAC;QACXiB,OAAO,EAAE,yBAAyB;QAClCM,IAAI,EAAE,OAAO;QACbrB;MACF,CAAC,CAAC;MACFF,YAAY,CAAC;QACXiB,OAAO,EAAE,8DAA8D;QACvEM,IAAI,EAAE,OAAO;QACbrB;MACF,CAAC,CAAC;MACF,OAAO,IAAI;IACb;IACA,MAAM+F,mBAAmB,IAAAF,iBAAA,GAAGxB,QAAQ,CAACV,OAAO,cAAAkC,iBAAA,uBAAhBA,iBAAA,CAAkBtB,QAAQ;IACtD,MAAMyB,WAAW,GAAGpH,GAAG,CAACqH,KAAK,CAACF,mBAAmB,EAAE,IAAI,CAAC,CAACG,KAAK;IAC9D,IAAI,MAAM,IAAIF,WAAW,EAAE;MACzB,OAAOA,WAAW,CAAChE,IAAI;IACzB;IACAlC,YAAY,CAAC;MAAEiB,OAAO,EAAE,qBAAqB;MAAEM,IAAI,EAAE,OAAO;MAAErB;IAAM,CAAC,CAAC;IACtE,OAAO,IAAI;EACb,CAAC,CAAC,OAAO8F,KAAK,EAAE;IAAA,IAAAK,eAAA;IACdrG,YAAY,CAAC;MACXiB,OAAO,EAAG,6BAA4B+E,KAAK,CAAC/E,OAAQ,EAAC;MACrDM,IAAI,EAAE,OAAO;MACbrB;IACF,CAAC,CAAC;IACFF,YAAY,CAAC;MAAEiB,OAAO,GAAAoF,eAAA,GAAEL,KAAK,CAACzB,QAAQ,cAAA8B,eAAA,uBAAdA,eAAA,CAAgBrF,IAAI;MAAEO,IAAI,EAAE,OAAO;MAAErB;IAAM,CAAC,CAAC;IACrEH,YAAY,CAAC;MAAEkB,OAAO,EAAE+E,KAAK,CAACM,KAAK;MAAEpG;IAAM,CAAC,CAAC;IAC7C,OAAO,IAAI;EACb;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAeqG,qBAAqBA,CAACrG,KAAY,EAA0B;EACzEH,YAAY,CAAC;IACXkB,OAAO,EAAG,8CAA6C;IACvDf;EACF,CAAC,CAAC;EACF,IAAI;IACF,MAAMiD,QAAQ,GAAGjE,eAAe,CAACF,WAAW,CAAC,EAAE,CAAC,CAAC;IACjD,MAAMoE,SAAS,GAAGlE,eAAe,CAC/BH,UAAU,CAAC,QAAQ,CAAC,CAACsE,MAAM,CAACF,QAAQ,CAAC,CAACG,MAAM,CAAC,CAC/C,CAAC;IACD,MAAMC,eAAe,GAAG,MAAM;IAC9B,MAAMC,WAAW,GAAG1E,GAAG,CAAC2E,OAAO,CAACvD,KAAK,CAACwD,OAAO,CAAC,CAAC,EAAEhD,mBAAmB,CAAC;IACrE,MAAM8F,QAAQ,GAAG,MAAMZ,WAAW,CAChCpC,WAAW,EACXJ,SAAS,EACTG,eAAe,EACfrD,KACF,CAAC;IACD,IAAIsG,QAAQ,IAAI,IAAI,EAAE;MACpBxG,YAAY,CAAC;QACXiB,OAAO,EAAE,yBAAyB;QAClCM,IAAI,EAAE,OAAO;QACbrB;MACF,CAAC,CAAC;MACF,OAAO,IAAI;IACb;IACA,IAAIqE,QAAQ,GAAG,IAAI;IACnB,IAAIrE,KAAK,CAACyC,iBAAiB,CAAC,CAAC,KAAKxD,YAAY,CAAC6D,yBAAyB,EAAE;MACxE,MAAMW,MAAM,GAAG;QACb8C,IAAI,EAAE;UACJC,QAAQ,EAAE5F,aAAa;UACvB6F,QAAQ,EAAElG;QACZ;MACF,CAAC;MACD,MAAMsD,YAAY,GAAI,gBAAeP,WAAY,uCAAsCgD,QAAS,kBAAiBrD,QAAS,EAAC;MAC3HoB,QAAQ,GAAG,MAAMhF,WAAW,CAAC;QAC3B2E,SAAS,EAAEhE,KAAK,CAACwD,OAAO,CAAC,CAAC;QAC1B1C,IAAI,EAAE+C,YAAY;QAClBJ,MAAM;QACNzD;MACF,CAAC,CAAC;IACJ,CAAC,MAAM;MACL,MAAM6D,YAAY,GAAI,aAAYjD,aAAc,iBAAgB0C,WAAY,uCAAsCgD,QAAS,kBAAiBrD,QAAS,EAAC;MACtJoB,QAAQ,GAAG,MAAMhF,WAAW,CAAC;QAC3B2E,SAAS,EAAEhE,KAAK,CAACwD,OAAO,CAAC,CAAC;QAC1B1C,IAAI,EAAE+C,YAAY;QAClBJ,MAAM,EAAE,CAAC,CAAC;QACVzD;MACF,CAAC,CAAC;IACJ;IACA,IAAI,cAAc,IAAIqE,QAAQ,CAACvD,IAAI,EAAE;MACnCjB,YAAY,CAAC;QACXkB,OAAO,EAAG,uDAAsD;QAChEf;MACF,CAAC,CAAC;MACF,OAAOqE,QAAQ,CAACvD,IAAI,CAAC4F,YAAY;IACnC;IACA5G,YAAY,CAAC;MACXiB,OAAO,EAAE,8BAA8B;MACvCM,IAAI,EAAE,OAAO;MACbrB;IACF,CAAC,CAAC;EACJ,CAAC,CAAC,OAAO8F,KAAK,EAAE;IAAA,IAAAa,gBAAA;IACd9G,YAAY,CAAC;MACXkB,OAAO,EAAG,wCAAuC+E,KAAM,EAAC;MACxD9F;IACF,CAAC,CAAC;IACFH,YAAY,CAAC;MAAEkB,OAAO,GAAA4F,gBAAA,GAAEb,KAAK,CAACzB,QAAQ,cAAAsC,gBAAA,uBAAdA,gBAAA,CAAgB7F,IAAI;MAAEd;IAAM,CAAC,CAAC;EACxD;EACAH,YAAY,CAAC;IACXkB,OAAO,EAAG,0DAAyD;IACnEf;EACF,CAAC,CAAC;EACF,OAAO,IAAI;AACb;AAEA,SAAS4G,aAAaA,CAACC,gBAAwB,EAAEC,IAAY,EAAE;EAC7D,MAAMC,CAAC,GAAGtH,QAAQ,CAACqH,IAAI,CAAC;EACxB,MAAME,GAAG,GAAI,GAAED,CAAC,CAACE,MAAO,IACtBF,CAAC,CAACG,IAAI,GAAGH,CAAC,CAACG,IAAI,GAAGH,CAAC,CAACI,QAAQ,KAAK,OAAO,GAAG,KAAK,GAAG,IACpD,GAAEJ,CAAC,CAACK,QAAS,sBAAqB;;EAEnC;EACA,MAAMC,GAAG,GAAGC,IAAI,CAACC,KAAK,CAAC,IAAIC,IAAI,CAAC,CAAC,CAACC,OAAO,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC;;EAEzD;EACA,MAAMC,GAAG,GAAGlI,EAAE,CAAC,CAAC;EAEhB,MAAMmI,GAAG,GAAGd,gBAAgB;EAC5B,MAAMe,GAAG,GAAGf,gBAAgB;;EAE5B;EACA,MAAM3F,OAAO,GAAG;IAAEyG,GAAG;IAAEC,GAAG;IAAEZ,GAAG;IAAEK,GAAG;IAAEK;EAAI,CAAC;EAE3C,OAAOxG,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAejB,+BAA+BA,CAAC;EACpDC,IAAI,GAAGC,SAAS;EAChBC,KAAK,GAAGD,SAAS;EACjBH;AAKF,CAAC,EAA0B;EACzBE,IAAI,GAAGA,IAAI,GAAGA,IAAI,GAAGF,KAAK,CAAC6H,mBAAmB,CAAC,CAAC;EAChDzH,KAAK,GAAGA,KAAK,GAAGA,KAAK,GAAGJ,KAAK,CAAC8H,oBAAoB,CAAC,CAAC;EACpDjI,YAAY,CAAC;IACXkB,OAAO,EAAG,wDAAuD;IACjEf;EACF,CAAC,CAAC;EACF,MAAMkB,OAAO,GAAG0F,aAAa,CAAC1G,IAAI,EAAEF,KAAK,CAACwD,OAAO,CAAC,CAAC,CAAC;EACpD3D,YAAY,CAAC;IACXkB,OAAO,EAAG,2DAA0D;IACpEf;EACF,CAAC,CAAC;EACFH,YAAY,CAAC;IAAEkB,OAAO,EAAEG,OAAO;IAAElB;EAAM,CAAC,CAAC;EACzC,MAAM+H,GAAG,GAAG,MAAMrI,oBAAoB,CAACwB,OAAO,EAAEd,KAAK,CAAC;EACtDP,YAAY,CAAC;IACXkB,OAAO,EAAG,uDAAsD;IAChEf;EACF,CAAC,CAAC;EACFH,YAAY,CAAC;IAAEkB,OAAO,EAAEgH,GAAG;IAAE/H;EAAM,CAAC,CAAC;EACrC,MAAM6D,YAAY,GAAI,aAAYkE,GAAI,2FAA0FpH,oBAAqB,EAAC;EACtJ,MAAM0D,QAAQ,GAAG,MAAMhF,WAAW,CAAC;IACjC2E,SAAS,EAAEhE,KAAK,CAACwD,OAAO,CAAC,CAAC;IAC1B1C,IAAI,EAAE+C,YAAY;IAClBJ,MAAM,EAAE,CAAC,CAAC;IACVzD;EACF,CAAC,CAAC;EACF,IAAI,cAAc,IAAIqE,QAAQ,CAACvD,IAAI,EAAE;IACnCjB,YAAY,CAAC;MACXkB,OAAO,EAAG,yDAAwD;MAClEf;IACF,CAAC,CAAC;IACFH,YAAY,CAAC;MAAEkB,OAAO,EAAEsD,QAAQ,CAACvD,IAAI,CAAC4F,YAAY;MAAE1G;IAAM,CAAC,CAAC;IAC5DH,YAAY,CAAC;MACXkB,OAAO,EAAG,sDAAqD;MAC/Df;IACF,CAAC,CAAC;IACF,OAAOqE,QAAQ,CAACvD,IAAI,CAAC4F,YAAY;EACnC;EACA7G,YAAY,CAAC;IACXkB,OAAO,EAAG,+EAA8E;IACxFf;EACF,CAAC,CAAC;EACFH,YAAY,CAAC;IACXkB,OAAO,EAAG,sDAAqD;IAC/Df;EACF,CAAC,CAAC;EACF,OAAO,IAAI;AACb;;AAEA;AACA;AACA;AACA;AACA,eAAegI,gDAAgDA,CAC7DhI,KAAY,EACG;EACfH,YAAY,CAAC;IACXkB,OAAO,EAAG,yEAAwE;IAClFf;EACF,CAAC,CAAC;EACF,IAAI,CAACA,KAAK,CAACyC,iBAAiB,CAAC,CAAC,EAAE;IAC9BzC,KAAK,CAACiI,iBAAiB,CAAC,MAAMvF,uBAAuB,CAAC1C,KAAK,CAAC,CAAC;EAC/D;EACAoC,qBAAqB,CAACpC,KAAK,CAAC;EAC5BH,YAAY,CAAC;IACXkB,OAAO,EAAG,2EAA0Ef,KAAK,CAACqC,QAAQ,CAAC,CAAE,UAASrC,KAAK,CAACyC,iBAAiB,CAAC,CAAE,EAAC;IACzIzC;EACF,CAAC,CAAC;EAEF,MAAM+E,WAAW,GAAG,MAAM5F,oBAAoB,CAAC;IAAEa;EAAM,CAAC,CAAC;;EAEzD;EACAH,YAAY,CAAC;IAAEkB,OAAO,EAAG,iBAAgBgE,WAAW,CAACmD,WAAY,EAAC;IAAElI;EAAM,CAAC,CAAC;EAE5E,MAAMiF,OAAO,GAAG,MAAMH,kBAAkB,CAACC,WAAW,CAAC;EACrD/E,KAAK,CAACmI,YAAY,CAAClD,OAAO,CAAC;EAC3BpF,YAAY,CAAC;IACXkB,OAAO,EAAG,uEAAsE;IAChFf;EACF,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAeoI,kBAAkBA,CAACpI,KAAY,EAAmB;EAC/D,IAAIqI,aAAa,GAAI,QAAOrI,KAAK,CAACkC,WAAW,CAAC,CAAE,EAAC;EACjD,IAAIlC,KAAK,CAAC6C,0BAA0B,CAAC,CAAC,EAAE;IACtC,IAAI;MACF,MAAMyF,IAAI,GAAG,CACX,MAAM3I,iBAAiB,CAAC;QACtBkH,gBAAgB,EAAE7G,KAAK,CAAC6H,mBAAmB,CAAC,CAAC;QAC7C7H;MACF,CAAC,CAAC,EACFsI,IAAI;MACND,aAAa,GAAI,mBAAkBC,IAAK,KAAItI,KAAK,CAAC6H,mBAAmB,CAAC,CAAE,GAAE;IAC5E,CAAC,CAAC,OAAO/B,KAAK,EAAE;MACduC,aAAa,GAAI,mBAAkBrI,KAAK,CAAC6H,mBAAmB,CAAC,CAAE,EAAC;IAClE;EACF;EACA,OAAOQ,aAAa;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAehI,SAASA,CAAC;EAC9BC,gBAAgB,GAAG,KAAK;EACxBN;AAIF,CAAC,EAAoB;EACnBH,YAAY,CAAC;IAAEkB,OAAO,EAAG,kCAAiC;IAAEf;EAAM,CAAC,CAAC;EACpE,IAAI,CAACA,KAAK,CAACwD,OAAO,CAAC,CAAC,EAAE;IACpB1D,YAAY,CAAC;MACXiB,OAAO,EAAG,wDAAuD;MACjEM,IAAI,EAAE,OAAO;MACbrB;IACF,CAAC,CAAC;IACF,OAAO,KAAK;EACd;EACA,IAAI;IACF;IACA,IACEA,KAAK,CAACkC,WAAW,CAAC,CAAC,IAAI,IAAI,IAC3BlC,KAAK,CAACmC,WAAW,CAAC,CAAC,IAAI,IAAI,IAC3B,CAACnC,KAAK,CAAC6H,mBAAmB,CAAC,CAAC,IAC5B,CAAC7H,KAAK,CAAC8H,oBAAoB,CAAC,CAAC,EAC7B;MACA,MAAMS,IAAI,GAAG,MAAMhJ,oBAAoB,CAAC;QAAES;MAAM,CAAC,CAAC;MAClD,IAAIuI,IAAI,EAAE;QACRvI,KAAK,CAACwI,OAAO,CAACD,IAAI,CAACE,MAAM,CAAC;QAC1BzI,KAAK,CAAC0I,WAAW,CAACH,IAAI,CAAC/B,QAAQ,CAAC;QAChCxG,KAAK,CAAC2I,WAAW,CAACJ,IAAI,CAAC9B,QAAQ,CAAC;QAChCzG,KAAK,CAAC4I,wBAAwB,CAACL,IAAI,CAACM,qBAAqB,CAAC;QAC1D7I,KAAK,CAAC8I,gCAAgC,CACpCP,IAAI,CAACQ,6BACP,CAAC;QACD/I,KAAK,CAACgJ,mBAAmB,CAACT,IAAI,CAACU,SAAS,CAAC;QACzCjJ,KAAK,CAACkJ,oBAAoB,CAACX,IAAI,CAACY,UAAU,CAAC;MAC7C,CAAC,MAAM;QACL,OAAO,KAAK;MACd;IACF;;IAEA;IACA,IAAI,CAACvJ,UAAU,CAACI,KAAK,CAACwD,OAAO,CAAC,CAAC,CAAC,EAAE;MAChC,MAAM+E,IAAI,GAAG,MAAMhJ,oBAAoB,CAAC;QAAES;MAAM,CAAC,CAAC;MAClD,IAAIuI,IAAI,EAAE;QACRvI,KAAK,CAACwI,OAAO,CAACD,IAAI,CAACE,MAAM,CAAC;MAC5B,CAAC,MAAM;QACL,OAAO,KAAK;MACd;IACF;;IAEA;IACAzI,KAAK,CAACoJ,aAAa,CAAC,MAAMvI,mBAAmB,CAACb,KAAK,CAAC,CAAC;;IAErD;IACA,IACE,CAACM,gBAAgB,IACjBN,KAAK,CAAC6H,mBAAmB,CAAC,CAAC,IAC3B7H,KAAK,CAAC8H,oBAAoB,CAAC,CAAC,EAC5B;MACAjI,YAAY,CAAC;QACXkB,OAAO,EAAG,kEAAiEf,KAAK,CAAC6H,mBAAmB,CAAC,CAAE,EAAC;QACxG7H;MACF,CAAC,CAAC;MACF,IAAI;QACF,MAAMqJ,KAAK,GAAG,MAAMpJ,+BAA+B,CAAC;UAAED;QAAM,CAAC,CAAC;QAC9DA,KAAK,CAACsJ,cAAc,CAACD,KAAK,CAAC;QAC3BrJ,KAAK,CAACuJ,0BAA0B,CAAC,IAAI,CAAC;QACtC,MAAMvB,gDAAgD,CAAChI,KAAK,CAAC;MAC/D,CAAC,CAAC,OAAOwJ,KAAK,EAAE;QAAA,IAAAC,eAAA,EAAAC,gBAAA,EAAAC,qBAAA,EAAAC,gBAAA,EAAAC,qBAAA;QACdhK,YAAY,CAAC;UAAEkB,OAAO,EAAE,EAAA0I,eAAA,GAAAD,KAAK,CAACnF,QAAQ,cAAAoF,eAAA,uBAAdA,eAAA,CAAgB3I,IAAI,KAAI0I,KAAK;UAAExJ;QAAM,CAAC,CAAC;QAC/DH,YAAY,CAAC;UAAEkB,OAAO,EAAEf,KAAK;UAAEA;QAAM,CAAC,CAAC;QACvC,MAAM,IAAIoF,KAAK,CACZ,gCACC,EAAAsE,gBAAA,GAAAF,KAAK,CAACnF,QAAQ,cAAAqF,gBAAA,wBAAAC,qBAAA,GAAdD,gBAAA,CAAgB5I,IAAI,cAAA6I,qBAAA,uBAApBA,qBAAA,CAAsBG,iBAAiB,OAAAF,gBAAA,GACvCJ,KAAK,CAACnF,QAAQ,cAAAuF,gBAAA,wBAAAC,qBAAA,GAAdD,gBAAA,CAAgB9I,IAAI,cAAA+I,qBAAA,uBAApBA,qBAAA,CAAsB9I,OAAO,KAC7ByI,KACD,EACH,CAAC;MACH;IACF;IACA;IAAA,KACK,IAAIxJ,KAAK,CAACkC,WAAW,CAAC,CAAC,IAAIlC,KAAK,CAACmC,WAAW,CAAC,CAAC,EAAE;MACnDtC,YAAY,CAAC;QACXkB,OAAO,EAAG,+DAA8Df,KAAK,CAACkC,WAAW,CAAC,CAAE,EAAC;QAC7FlC;MACF,CAAC,CAAC;MACF,MAAMqJ,KAAK,GAAG,MAAMhE,YAAY,CAACrF,KAAK,CAAC;MACvC,IAAIqJ,KAAK,EAAErJ,KAAK,CAAC+J,cAAc,CAACV,KAAK,CAAC;MACtC,MAAMrB,gDAAgD,CAAChI,KAAK,CAAC;MAC7D,IACEA,KAAK,CAAC4C,cAAc,CAAC,CAAC,IACtB,CAAC5C,KAAK,CAACgK,cAAc,CAAC,CAAC,KACtBhK,KAAK,CAACyC,iBAAiB,CAAC,CAAC,KAAKxD,YAAY,CAAC6D,yBAAyB,IACnE9C,KAAK,CAACyC,iBAAiB,CAAC,CAAC,KACvBxD,YAAY,CAAC4F,4BAA4B,CAAC,EAC9C;QACA,MAAMxF,WAAW,GAAG,MAAMgH,qBAAqB,CAACrG,KAAK,CAAC;QACtD,IAAIX,WAAW,EAAEW,KAAK,CAACsJ,cAAc,CAACjK,WAAW,CAAC;MACpD;IACF;IACA;IAAA,KACK;MACHS,YAAY,CAAC;QACXiB,OAAO,EAAG,+BAA8B;QACxCM,IAAI,EAAE,OAAO;QACbrB;MACF,CAAC,CAAC;MACF,OAAO,KAAK;IACd;IACA,IACEA,KAAK,CAAC4C,cAAc,CAAC,CAAC,IACrB5C,KAAK,CAAC6C,0BAA0B,CAAC,CAAC,IAAI7C,KAAK,CAACgK,cAAc,CAAC,CAAE,EAC9D;MACA;MACAlK,YAAY,CAAC;QACXiB,OAAO,EAAG,gBAAef,KAAK,CAACwD,OAAO,CAAC,CAAE,KACvCxD,KAAK,CAACqC,QAAQ,CAAC,CAAC,GAAGrC,KAAK,CAACqC,QAAQ,CAAC,CAAC,GAAG,MACvC,QAAO,MAAM+F,kBAAkB,CAACpI,KAAK,CAAE,EAAC;QACzCqB,IAAI,EAAE,MAAM;QACZrB;MACF,CAAC,CAAC;MACFH,YAAY,CAAC;QACXkB,OAAO,EAAG,4CAA2C;QACrDf;MACF,CAAC,CAAC;MACF,OAAO,IAAI;IACb;EACF,CAAC,CAAC,OAAO8F,KAAK,EAAE;IAAA,IAAAmE,gBAAA,EAAAC,qBAAA,EAAAC,gBAAA,EAAAC,qBAAA,EAAAC,gBAAA;IACd;IACAvK,YAAY,CAAC;MAAEiB,OAAO,EAAE+E,KAAK,CAAC/E,OAAO;MAAEM,IAAI,EAAE,OAAO;MAAErB;IAAM,CAAC,CAAC;IAC9D;IACAF,YAAY,CAAC;MACXiB,OAAO,GAAAkJ,gBAAA,GAAEnE,KAAK,CAACzB,QAAQ,cAAA4F,gBAAA,wBAAAC,qBAAA,GAAdD,gBAAA,CAAgBnJ,IAAI,cAAAoJ,qBAAA,uBAApBA,qBAAA,CAAsBnJ,OAAO;MACtCM,IAAI,EAAE,OAAO;MACbrB;IACF,CAAC,CAAC;IACF;IACAF,YAAY,CAAC;MACXiB,OAAO,GAAAoJ,gBAAA,GAAErE,KAAK,CAACzB,QAAQ,cAAA8F,gBAAA,wBAAAC,qBAAA,GAAdD,gBAAA,CAAgBrJ,IAAI,cAAAsJ,qBAAA,uBAApBA,qBAAA,CAAsBN,iBAAiB;MAChDzI,IAAI,EAAE,OAAO;MACbrB;IACF,CAAC,CAAC;IACF;IACAH,YAAY,CAAC;MAAEkB,OAAO,GAAAsJ,gBAAA,GAAEvE,KAAK,CAACzB,QAAQ,cAAAgG,gBAAA,uBAAdA,gBAAA,CAAgBvJ,IAAI;MAAEd;IAAM,CAAC,CAAC;IACtD;IACAH,YAAY,CAAC;MAAEkB,OAAO,EAAE+E,KAAK,CAACM,KAAK,IAAI,IAAIhB,KAAK,CAAC,CAAC,CAACgB,KAAK;MAAEpG;IAAM,CAAC,CAAC;EACpE;EACAH,YAAY,CAAC;IACXkB,OAAO,EAAG,+CAA8C;IACxDf;EACF,CAAC,CAAC;EACF,OAAO,KAAK;AACd"}
1
+ {"version":3,"file":"AuthenticateOps.js","names":["url","createHash","randomBytes","readlineSync","encodeBase64Url","Constants","getServerInfo","getServerVersionInfo","step","accessToken","authorize","getConnectionProfile","v4","parseUrl","createSignedJwtToken","getServiceAccount","isValidUrl","debugMessage","printMessage","verboseMessage","state","getAccessTokenForServiceAccount","saId","undefined","saJwk","getTokens","forceLoginAsUser","adminClientPassword","redirectUrlTemplate","cloudIdmAdminScopes","forgeopsIdmAdminScopes","serviceAccountScopes","adminClientId","determineCookieName","data","message","cookieName","checkAndHandle2FA","payload","callback","callbacks","type","localAuth","value","output","provider","input","includes","nextStep","need2fa","factor","supported","code","question","getUsername","getPassword","determineDefaultRealm","getRealm","DEFAULT_REALM_KEY","setRealm","DEPLOYMENT_TYPE_REALM_MAP","getDeploymentType","determineDeploymentType","cookieValue","getCookieValue","getUseBearerTokenForAmApis","CLOUD_DEPLOYMENT_TYPE_KEY","fidcClientId","forgeopsClientId","verifier","challenge","update","digest","challengeMethod","redirectURL","resolve","getHost","config","maxRedirects","headers","getCookieName","bodyFormData","deploymentType","CLASSIC_DEPLOYMENT_TYPE_KEY","amBaseUrl","e","_e$response","_e$response$headers","_e$response$headers$l","response","status","location","indexOf","ex","_ex$response","_ex$response$headers","_ex$response$headers$","FORGEOPS_DEPLOYMENT_TYPE_KEY","getSemanticVersion","versionInfo","versionString","version","rx","match","Error","authenticate","body","skip2FA","steps","maxSteps","getAuthCode","codeChallenge","codeChallengeMethod","_response$headers","error","redirectLocationURL","queryObject","parse","query","_error$response","stack","getAccessTokenForUser","authCode","auth","username","password","access_token","_error$response2","createPayload","serviceAccountId","host","u","aud","origin","port","protocol","pathname","exp","Math","floor","Date","getTime","jti","iss","sub","getServiceAccountId","getServiceAccountJwk","jwt","determineDeploymentTypeAndDefaultRealmAndVersion","setDeploymentType","fullVersion","setAmVersion","getLoggedInSubject","subjectString","name","conn","setHost","tenant","setUsername","setPassword","setAuthenticationService","authenticationService","setAuthenticationHeaderOverrides","authenticationHeaderOverrides","setServiceAccountId","svcacctId","setServiceAccountJwk","svcacctJwk","setCookieName","token","setBearerToken","setUseBearerTokenForAmApis","saErr","_saErr$response","_saErr$response2","_saErr$response2$data","_saErr$response3","_saErr$response3$data","error_description","setCookieValue","getBearerToken","_error$response3","_error$response3$data","_error$response4","_error$response4$data","_error$response5"],"sources":["../../src/ops/AuthenticateOps.ts"],"sourcesContent":["import url from 'url';\nimport { createHash, randomBytes } from 'crypto';\nimport readlineSync from 'readline-sync';\nimport { encodeBase64Url } from '../api/utils/Base64';\nimport { State } from '../shared/State';\nimport Constants from '../shared/Constants';\nimport { getServerInfo, getServerVersionInfo } from '../api/ServerInfoApi';\nimport { step } from '../api/AuthenticateApi';\nimport { accessToken, authorize } from '../api/OAuth2OIDCApi';\nimport { getConnectionProfile } from './ConnectionProfileOps';\nimport { v4 } from 'uuid';\nimport { parseUrl } from '../api/utils/ApiUtils';\nimport { JwkRsa, createSignedJwtToken } from './JoseOps';\nimport { getServiceAccount } from './cloud/ServiceAccountOps';\nimport { isValidUrl } from './utils/OpsUtils';\nimport { debugMessage, printMessage, verboseMessage } from './utils/Console';\n\nexport type Authenticate = {\n /**\n * Get access token for service account\n * @returns {string | null} Access token or null\n */\n getAccessTokenForServiceAccount(\n saId?: string,\n saJwk?: JwkRsa\n ): Promise<string | null>;\n /**\n * Get tokens\n * @param {boolean} forceLoginAsUser true to force login as user even if a service account is available (default: false)\n * @returns {Promise<boolean>} true if tokens were successfully obtained, false otherwise\n */\n getTokens(forceLoginAsUser?: boolean): Promise<boolean>;\n};\n\nexport default (state: State): Authenticate => {\n return {\n /**\n * Get access token for service account\n * @returns {string | null} Access token or null\n */\n async getAccessTokenForServiceAccount(\n saId: string = undefined,\n saJwk: JwkRsa = undefined\n ): Promise<string | null> {\n return getAccessTokenForServiceAccount({ saId, saJwk, state });\n },\n\n /**\n * Get tokens\n * @param {boolean} forceLoginAsUser true to force login as user even if a service account is available (default: false)\n * @returns {Promise<boolean>} true if tokens were successfully obtained, false otherwise\n */\n getTokens(forceLoginAsUser = false) {\n return getTokens({ forceLoginAsUser, state });\n },\n };\n};\n\nconst adminClientPassword = 'doesnotmatter';\nconst redirectUrlTemplate = '/platform/appAuthHelperRedirect.html';\n\nconst cloudIdmAdminScopes = 'openid fr:idm:* fr:idc:esv:*';\nconst forgeopsIdmAdminScopes = 'openid fr:idm:*';\nconst serviceAccountScopes = 'fr:am:* fr:idm:* fr:idc:esv:*';\n\nlet adminClientId = 'idmAdminClient';\n\n/**\n * Helper function to get cookie name\n * @param {State} state library state\n * @returns {string} cookie name\n */\nasync function determineCookieName(state: State) {\n const data = await getServerInfo({ state });\n debugMessage({\n message: `AuthenticateOps.determineCookieName: cookieName=${data.cookieName}`,\n state,\n });\n return data.cookieName;\n}\n\n/**\n * Helper function to determine if this is a setup mfa prompt in the ID Cloud tenant admin login journey\n * @param {Object} payload response from the previous authentication journey step\n * @param {State} state library state\n * @returns {Object} an object indicating if 2fa is required and the original payload\n */\nfunction checkAndHandle2FA(payload, state: State) {\n debugMessage({ message: `AuthenticateOps.checkAndHandle2FA: start`, state });\n // let skippable = false;\n if ('callbacks' in payload) {\n for (const callback of payload.callbacks) {\n // select localAuthentication if Admin Federation is enabled\n if (callback.type === 'SelectIdPCallback') {\n debugMessage({\n message: `AuthenticateOps.checkAndHandle2FA: Admin federation enabled. Allowed providers:`,\n state,\n });\n let localAuth = false;\n for (const value of callback.output[0].value) {\n debugMessage({ message: `${value.provider}`, state });\n if (value.provider === 'localAuthentication') {\n localAuth = true;\n }\n }\n if (localAuth) {\n debugMessage({ message: `local auth allowed`, state });\n callback.input[0].value = 'localAuthentication';\n } else {\n debugMessage({ message: `local auth NOT allowed`, state });\n }\n }\n if (callback.type === 'HiddenValueCallback') {\n if (callback.input[0].value.includes('skip')) {\n // skippable = true;\n callback.input[0].value = 'Skip';\n // debugMessage(\n // `AuthenticateOps.checkAndHandle2FA: end [need2fa=true, skippable=true]`\n // );\n // return {\n // nextStep: true,\n // need2fa: true,\n // factor: 'None',\n // supported: true,\n // payload,\n // };\n }\n if (callback.input[0].value.includes('webAuthnOutcome')) {\n // webauthn!!!\n debugMessage({\n message: `AuthenticateOps.checkAndHandle2FA: end [need2fa=true, unsupported factor: webauthn]`,\n state,\n });\n return {\n nextStep: false,\n need2fa: true,\n factor: 'WebAuthN',\n supported: false,\n payload,\n };\n }\n }\n if (callback.type === 'NameCallback') {\n if (callback.output[0].value.includes('code')) {\n // skippable = false;\n debugMessage({\n message: `AuthenticateOps.checkAndHandle2FA: need2fa=true, skippable=false`,\n state,\n });\n printMessage({\n message: '2FA is enabled and required for this user...',\n state,\n });\n const code = readlineSync.question(`${callback.output[0].value}: `);\n callback.input[0].value = code;\n debugMessage({\n message: `AuthenticateOps.checkAndHandle2FA: end [need2fa=true, skippable=false, factor=Code]`,\n state,\n });\n return {\n nextStep: true,\n need2fa: true,\n factor: 'Code',\n supported: true,\n payload,\n };\n } else {\n // answer callback\n callback.input[0].value = state.getUsername();\n }\n }\n if (callback.type === 'PasswordCallback') {\n // answer callback\n callback.input[0].value = state.getPassword();\n }\n }\n debugMessage({\n message: `AuthenticateOps.checkAndHandle2FA: end [need2fa=false]`,\n state,\n });\n // debugMessage(payload);\n return {\n nextStep: true,\n need2fa: false,\n factor: 'None',\n supported: true,\n payload,\n };\n }\n debugMessage({\n message: `AuthenticateOps.checkAndHandle2FA: end [need2fa=false]`,\n state,\n });\n // debugMessage(payload);\n return {\n nextStep: false,\n need2fa: false,\n factor: 'None',\n supported: true,\n payload,\n };\n}\n\n/**\n * Helper function to set the default realm by deployment type\n * @param {State} state library state\n */\nfunction determineDefaultRealm(state: State) {\n if (!state.getRealm() || state.getRealm() === Constants.DEFAULT_REALM_KEY) {\n state.setRealm(\n Constants.DEPLOYMENT_TYPE_REALM_MAP[state.getDeploymentType()]\n );\n }\n}\n\n/**\n * Helper function to determine the deployment type\n * @param {State} state library state\n * @returns {Promise<string>} deployment type\n */\nasync function determineDeploymentType(state: State): Promise<string> {\n const cookieValue = state.getCookieValue();\n\n // if we are using a service account, we know it's cloud\n if (state.getUseBearerTokenForAmApis())\n return Constants.CLOUD_DEPLOYMENT_TYPE_KEY;\n\n const fidcClientId = 'idmAdminClient';\n const forgeopsClientId = 'idm-admin-ui';\n\n const verifier = encodeBase64Url(randomBytes(32));\n const challenge = encodeBase64Url(\n createHash('sha256').update(verifier).digest()\n );\n const challengeMethod = 'S256';\n const redirectURL = url.resolve(state.getHost(), redirectUrlTemplate);\n\n const config = {\n maxRedirects: 0,\n headers: {\n [state.getCookieName()]: state.getCookieValue(),\n },\n };\n let bodyFormData = `redirect_uri=${redirectURL}&scope=${cloudIdmAdminScopes}&response_type=code&client_id=${fidcClientId}&csrf=${cookieValue}&decision=allow&code_challenge=${challenge}&code_challenge_method=${challengeMethod}`;\n\n let deploymentType = Constants.CLASSIC_DEPLOYMENT_TYPE_KEY;\n try {\n await authorize({\n amBaseUrl: state.getHost(),\n data: bodyFormData,\n config,\n state,\n });\n } catch (e) {\n // debugMessage(e.response);\n if (\n e.response?.status === 302 &&\n e.response.headers?.location?.indexOf('code=') > -1\n ) {\n verboseMessage({\n message: `ForgeRock Identity Cloud`['brightCyan'] + ` detected.`,\n state,\n });\n deploymentType = Constants.CLOUD_DEPLOYMENT_TYPE_KEY;\n } else {\n try {\n bodyFormData = `redirect_uri=${redirectURL}&scope=${forgeopsIdmAdminScopes}&response_type=code&client_id=${forgeopsClientId}&csrf=${state.getCookieValue()}&decision=allow&code_challenge=${challenge}&code_challenge_method=${challengeMethod}`;\n await authorize({\n amBaseUrl: state.getHost(),\n data: bodyFormData,\n config,\n state,\n });\n } catch (ex) {\n if (\n ex.response?.status === 302 &&\n ex.response.headers?.location?.indexOf('code=') > -1\n ) {\n adminClientId = forgeopsClientId;\n verboseMessage({\n message: `ForgeOps deployment`['brightCyan'] + ` detected.`,\n state,\n });\n deploymentType = Constants.FORGEOPS_DEPLOYMENT_TYPE_KEY;\n } else {\n verboseMessage({\n message: `Classic deployment`['brightCyan'] + ` detected.`,\n state,\n });\n }\n }\n }\n }\n return deploymentType;\n}\n\n/**\n * Helper function to extract the semantic version string from a version info object\n * @param {Object} versionInfo version info object\n * @returns {String} semantic version\n */\nfunction getSemanticVersion(versionInfo) {\n if ('version' in versionInfo) {\n const versionString = versionInfo.version;\n const rx = /([\\d]\\.[\\d]\\.[\\d](\\.[\\d])*)/g;\n const version = versionString.match(rx);\n return version[0];\n }\n throw new Error('Cannot extract semantic version from version info object.');\n}\n\n/**\n * Helper function to authenticate and obtain and store session cookie\n * @param {State} state library state\n * @returns {string} Session token or null\n */\nasync function authenticate(state: State): Promise<string> {\n debugMessage({ message: `AuthenticateOps.authenticate: start`, state });\n const config = {\n headers: {\n 'X-OpenAM-Username': state.getUsername(),\n 'X-OpenAM-Password': state.getPassword(),\n },\n };\n let response = await step({ body: {}, config, state });\n\n let skip2FA = null;\n let steps = 0;\n const maxSteps = 3;\n do {\n skip2FA = checkAndHandle2FA(response, state);\n\n // throw exception if 2fa required but factor not supported by frodo (e.g. WebAuthN)\n if (!skip2FA.supported) {\n throw new Error(`Unsupported 2FA factor: ${skip2FA.factor}`);\n }\n\n if (skip2FA.nextStep) {\n steps++;\n response = await step({ body: skip2FA.payload, state });\n }\n\n if ('tokenId' in response) {\n debugMessage({\n message: `AuthenticateOps.authenticate: end [tokenId=${response['tokenId']}]`,\n state,\n });\n return response['tokenId'] as string;\n }\n } while (skip2FA.nextStep && steps < maxSteps);\n debugMessage({\n message: `AuthenticateOps.authenticate: end [no session]`,\n state,\n });\n return null;\n}\n\n/**\n * Helper function to obtain an oauth2 authorization code\n * @param {string} redirectURL oauth2 redirect uri\n * @param {string} codeChallenge PKCE code challenge\n * @param {string} codeChallengeMethod PKCE code challenge method\n * @param {State} state library state\n * @returns {string} oauth2 authorization code or null\n */\nasync function getAuthCode(\n redirectURL: string,\n codeChallenge: string,\n codeChallengeMethod: string,\n state: State\n) {\n try {\n const bodyFormData = `redirect_uri=${redirectURL}&scope=${\n state.getDeploymentType() === Constants.CLOUD_DEPLOYMENT_TYPE_KEY\n ? cloudIdmAdminScopes\n : forgeopsIdmAdminScopes\n }&response_type=code&client_id=${adminClientId}&csrf=${state.getCookieValue()}&decision=allow&code_challenge=${codeChallenge}&code_challenge_method=${codeChallengeMethod}`;\n const config = {\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n maxRedirects: 0,\n };\n let response = undefined;\n try {\n response = await authorize({\n amBaseUrl: state.getHost(),\n data: bodyFormData,\n config,\n state,\n });\n } catch (error) {\n response = error.response;\n }\n if (response.status < 200 || response.status > 399) {\n printMessage({\n message: 'error getting auth code',\n type: 'error',\n state,\n });\n printMessage({\n message: 'likely cause: mismatched parameters with OAuth client config',\n type: 'error',\n state,\n });\n return null;\n }\n const redirectLocationURL = response.headers?.location;\n const queryObject = url.parse(redirectLocationURL, true).query;\n if ('code' in queryObject) {\n return queryObject.code;\n }\n printMessage({ message: 'auth code not found', type: 'error', state });\n return null;\n } catch (error) {\n printMessage({\n message: `error getting auth code - ${error.message}`,\n type: 'error',\n state,\n });\n printMessage({ message: error.response?.data, type: 'error', state });\n debugMessage({ message: error.stack, state });\n return null;\n }\n}\n\n/**\n * Helper function to obtain oauth2 access token\n * @param {State} state library state\n * @returns {Promise<string | null>} access token or null\n */\nasync function getAccessTokenForUser(state: State): Promise<string | null> {\n debugMessage({\n message: `AuthenticateOps.getAccessTokenForUser: start`,\n state,\n });\n try {\n const verifier = encodeBase64Url(randomBytes(32));\n const challenge = encodeBase64Url(\n createHash('sha256').update(verifier).digest()\n );\n const challengeMethod = 'S256';\n const redirectURL = url.resolve(state.getHost(), redirectUrlTemplate);\n const authCode = await getAuthCode(\n redirectURL,\n challenge,\n challengeMethod,\n state\n );\n if (authCode == null) {\n printMessage({\n message: 'error getting auth code',\n type: 'error',\n state,\n });\n return null;\n }\n let response = null;\n if (state.getDeploymentType() === Constants.CLOUD_DEPLOYMENT_TYPE_KEY) {\n const config = {\n auth: {\n username: adminClientId,\n password: adminClientPassword,\n },\n };\n const bodyFormData = `redirect_uri=${redirectURL}&grant_type=authorization_code&code=${authCode}&code_verifier=${verifier}`;\n response = await accessToken({\n amBaseUrl: state.getHost(),\n data: bodyFormData,\n config,\n state,\n });\n } else {\n const bodyFormData = `client_id=${adminClientId}&redirect_uri=${redirectURL}&grant_type=authorization_code&code=${authCode}&code_verifier=${verifier}`;\n response = await accessToken({\n amBaseUrl: state.getHost(),\n data: bodyFormData,\n config: {},\n state,\n });\n }\n if ('access_token' in response.data) {\n debugMessage({\n message: `AuthenticateOps.getAccessTokenForUser: end with token`,\n state,\n });\n return response.data.access_token;\n }\n printMessage({\n message: 'No access token in response.',\n type: 'error',\n state,\n });\n } catch (error) {\n debugMessage({\n message: `Error getting access token for user: ${error}`,\n state,\n });\n debugMessage({ message: error.response?.data, state });\n }\n debugMessage({\n message: `AuthenticateOps.getAccessTokenForUser: end without token`,\n state,\n });\n return null;\n}\n\nfunction createPayload(serviceAccountId: string, host: string) {\n const u = parseUrl(host);\n const aud = `${u.origin}:${\n u.port ? u.port : u.protocol === 'https' ? '443' : '80'\n }${u.pathname}/oauth2/access_token`;\n\n // Cross platform way of setting JWT expiry time 3 minutes in the future, expressed as number of seconds since EPOCH\n const exp = Math.floor(new Date().getTime() / 1000 + 180);\n\n // A unique ID for the JWT which is required when requesting the openid scope\n const jti = v4();\n\n const iss = serviceAccountId;\n const sub = serviceAccountId;\n\n // Create the payload for our bearer token\n const payload = { iss, sub, aud, exp, jti };\n\n return payload;\n}\n\n/**\n * Get access token for service account\n * @param {State} state library state\n * @returns {string | null} Access token or null\n */\nexport async function getAccessTokenForServiceAccount({\n saId = undefined,\n saJwk = undefined,\n state,\n}: {\n saId?: string;\n saJwk?: JwkRsa;\n state: State;\n}): Promise<string | null> {\n saId = saId ? saId : state.getServiceAccountId();\n saJwk = saJwk ? saJwk : state.getServiceAccountJwk();\n debugMessage({\n message: `AuthenticateOps.getAccessTokenForServiceAccount: start`,\n state,\n });\n const payload = createPayload(saId, state.getHost());\n debugMessage({\n message: `AuthenticateOps.getAccessTokenForServiceAccount: payload:`,\n state,\n });\n debugMessage({ message: payload, state });\n const jwt = await createSignedJwtToken(payload, saJwk);\n debugMessage({\n message: `AuthenticateOps.getAccessTokenForServiceAccount: jwt:`,\n state,\n });\n debugMessage({ message: jwt, state });\n const bodyFormData = `assertion=${jwt}&client_id=service-account&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=${serviceAccountScopes}`;\n const response = await accessToken({\n amBaseUrl: state.getHost(),\n data: bodyFormData,\n config: {},\n state,\n });\n if ('access_token' in response.data) {\n debugMessage({\n message: `AuthenticateOps.getAccessTokenForServiceAccount: token:`,\n state,\n });\n debugMessage({ message: response.data.access_token, state });\n debugMessage({\n message: `AuthenticateOps.getAccessTokenForServiceAccount: end`,\n state,\n });\n return response.data.access_token;\n }\n debugMessage({\n message: `AuthenticateOps.getAccessTokenForServiceAccount: No access token in response.`,\n state,\n });\n debugMessage({\n message: `AuthenticateOps.getAccessTokenForServiceAccount: end`,\n state,\n });\n return null;\n}\n\n/**\n * Helper function to determine deployment type, default realm, and version and update library state\n * @param state library state\n */\nasync function determineDeploymentTypeAndDefaultRealmAndVersion(\n state: State\n): Promise<void> {\n debugMessage({\n message: `AuthenticateOps.determineDeploymentTypeAndDefaultRealmAndVersion: start`,\n state,\n });\n if (!state.getDeploymentType()) {\n state.setDeploymentType(await determineDeploymentType(state));\n }\n determineDefaultRealm(state);\n debugMessage({\n message: `AuthenticateOps.determineDeploymentTypeAndDefaultRealmAndVersion: realm=${state.getRealm()}, type=${state.getDeploymentType()}`,\n state,\n });\n\n const versionInfo = await getServerVersionInfo({ state });\n\n // https://github.com/rockcarver/frodo-cli/issues/109\n debugMessage({ message: `Full version: ${versionInfo.fullVersion}`, state });\n\n const version = await getSemanticVersion(versionInfo);\n state.setAmVersion(version);\n debugMessage({\n message: `AuthenticateOps.determineDeploymentTypeAndDefaultRealmAndVersion: end`,\n state,\n });\n}\n\n/**\n * Get logged-in subject\n * @param {State} state library state\n * @returns {string} a string identifying subject type and id\n */\nasync function getLoggedInSubject(state: State): Promise<string> {\n let subjectString = `user ${state.getUsername()}`;\n if (state.getUseBearerTokenForAmApis()) {\n try {\n const name = (\n await getServiceAccount({\n serviceAccountId: state.getServiceAccountId(),\n state,\n })\n ).name;\n subjectString = `service account ${name} [${state.getServiceAccountId()}]`;\n } catch (error) {\n subjectString = `service account ${state.getServiceAccountId()}`;\n }\n }\n return subjectString;\n}\n\n/**\n * Get tokens\n * @param {boolean} forceLoginAsUser true to force login as user even if a service account is available (default: false)\n * @param {State} state library state\n * @returns {Promise<boolean>} true if tokens were successfully obtained, false otherwise\n */\nexport async function getTokens({\n forceLoginAsUser = false,\n state,\n}: {\n forceLoginAsUser?: boolean;\n state: State;\n}): Promise<boolean> {\n debugMessage({ message: `AuthenticateOps.getTokens: start`, state });\n if (!state.getHost()) {\n printMessage({\n message: `No host specified and FRODO_HOST env variable not set!`,\n type: 'error',\n state,\n });\n return false;\n }\n try {\n // if username/password on cli are empty, try to read from connections.json\n if (\n state.getUsername() == null &&\n state.getPassword() == null &&\n !state.getServiceAccountId() &&\n !state.getServiceAccountJwk()\n ) {\n const conn = await getConnectionProfile({ state });\n if (conn) {\n state.setHost(conn.tenant);\n state.setUsername(conn.username);\n state.setPassword(conn.password);\n state.setAuthenticationService(conn.authenticationService);\n state.setAuthenticationHeaderOverrides(\n conn.authenticationHeaderOverrides\n );\n state.setServiceAccountId(conn.svcacctId);\n state.setServiceAccountJwk(conn.svcacctJwk);\n } else {\n return false;\n }\n }\n\n // if host is not a valid URL, try to locate a valid URL from connections.json\n if (!isValidUrl(state.getHost())) {\n const conn = await getConnectionProfile({ state });\n if (conn) {\n state.setHost(conn.tenant);\n } else {\n return false;\n }\n }\n\n // now that we have the full tenant URL we can lookup the cookie name\n state.setCookieName(await determineCookieName(state));\n\n // use service account to login?\n if (\n !forceLoginAsUser &&\n state.getServiceAccountId() &&\n state.getServiceAccountJwk()\n ) {\n debugMessage({\n message: `AuthenticateOps.getTokens: Authenticating with service account ${state.getServiceAccountId()}`,\n state,\n });\n try {\n const token = await getAccessTokenForServiceAccount({ state });\n state.setBearerToken(token);\n state.setUseBearerTokenForAmApis(true);\n await determineDeploymentTypeAndDefaultRealmAndVersion(state);\n } catch (saErr) {\n debugMessage({ message: saErr.response?.data || saErr, state });\n debugMessage({ message: state, state });\n throw new Error(\n `Service account login error: ${\n saErr.response?.data?.error_description ||\n saErr.response?.data?.message ||\n saErr\n }`\n );\n }\n }\n // use user account to login\n else if (state.getUsername() && state.getPassword()) {\n debugMessage({\n message: `AuthenticateOps.getTokens: Authenticating with user account ${state.getUsername()}`,\n state,\n });\n const token = await authenticate(state);\n if (token) state.setCookieValue(token);\n await determineDeploymentTypeAndDefaultRealmAndVersion(state);\n if (\n state.getCookieValue() &&\n !state.getBearerToken() &&\n (state.getDeploymentType() === Constants.CLOUD_DEPLOYMENT_TYPE_KEY ||\n state.getDeploymentType() === Constants.FORGEOPS_DEPLOYMENT_TYPE_KEY)\n ) {\n const accessToken = await getAccessTokenForUser(state);\n if (accessToken) state.setBearerToken(accessToken);\n }\n }\n // incomplete or no credentials\n else {\n printMessage({\n message: `Incomplete or no credentials!`,\n type: 'error',\n state,\n });\n return false;\n }\n if (\n state.getCookieValue() ||\n (state.getUseBearerTokenForAmApis() && state.getBearerToken())\n ) {\n // https://github.com/rockcarver/frodo-cli/issues/102\n printMessage({\n message: `Connected to ${state.getHost()} [${\n state.getRealm() ? state.getRealm() : 'root'\n }] as ${await getLoggedInSubject(state)}`,\n type: 'info',\n state,\n });\n debugMessage({\n message: `AuthenticateOps.getTokens: end with tokens`,\n state,\n });\n return true;\n }\n } catch (error) {\n // regular error\n printMessage({ message: error.message, type: 'error', state });\n // axios error am api\n printMessage({\n message: error.response?.data?.message,\n type: 'error',\n state,\n });\n // axios error am oauth2 api\n printMessage({\n message: error.response?.data?.error_description,\n type: 'error',\n state,\n });\n // axios error data\n debugMessage({ message: error.response?.data, state });\n // stack trace\n debugMessage({ message: error.stack || new Error().stack, state });\n }\n debugMessage({\n message: `AuthenticateOps.getTokens: end without tokens`,\n state,\n });\n return false;\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"CirclesOfTrustOps.js","names":["debugMessage","getCirclesOfTrust","_getCirclesOfTrust","getCircleOfTrust","createCircleOfTrust","updateCircleOfTrust","getMetadata","state","createCirclesOfTrustExportTemplate","cotId","cotData","exportCircleOfTrust","exportCirclesOfTrust","importCircleOfTrust","importData","importFirstCircleOfTrust","importCirclesOfTrust","meta","script","saml","hosted","remote","metadata","cot","result","message","exportData","errors","_id","error","push","length","errorMessages","map","_error$response","response","status","getRealm","_error$response2","_error$response2$data","data","join","Error","cots","imported","id","Object","keys","_rev","createError","_createError$response","_error$response3","_error$response3$data","_createError$response2","_error$response4","_error$response4$data","_createError$response3","_error$response5","_error$response5$data"],"sources":["../../src/ops/CirclesOfTrustOps.ts"],"sourcesContent":["import { debugMessage } from './utils/Console';\nimport {\n getCirclesOfTrust as _getCirclesOfTrust,\n getCircleOfTrust,\n createCircleOfTrust,\n updateCircleOfTrust,\n} from '../api/CirclesOfTrustApi';\nimport { getMetadata } from './utils/ExportImportUtils';\nimport State from '../shared/State';\nimport { CirclesOfTrustExportInterface } from './OpsTypes';\nimport { CircleOfTrustSkeleton } from '../api/ApiTypes';\n\nexport default (state: State) => {\n return {\n /**\n * Create an empty agent export template\n * @returns {CirclesOfTrustExportInterface} an empty agent export template\n */\n createCirclesOfTrustExportTemplate() {\n return createCirclesOfTrustExportTemplate({ state });\n },\n\n /**\n * Get SAML circle of trust\n * @param {String} cotId circle of trust id/name\n */\n async getCircleOfTrust(cotId: string) {\n return getCircleOfTrust({ cotId, state });\n },\n\n /**\n * Get SAML circles of trust\n */\n async getCirclesOfTrust() {\n return getCirclesOfTrust({ state });\n },\n\n async createCircleOfTrust(cotData: CircleOfTrustSkeleton) {\n return createCircleOfTrust({ cotData, state });\n },\n\n /**\n * Export SAML circle of trust\n * @param {String} cotId circle of trust id/name\n */\n async exportCircleOfTrust(cotId: string) {\n return exportCircleOfTrust({ cotId, state });\n },\n\n /**\n * Export all SAML circles of trust\n */\n async exportCirclesOfTrust() {\n return exportCirclesOfTrust({ state });\n },\n\n /**\n * Import a SAML circle of trust by id/name from file\n * @param {String} cotId Circle of trust id/name\n * @param {CirclesOfTrustExportInterface} importData Import data\n */\n async importCircleOfTrust(\n cotId: string,\n importData: CirclesOfTrustExportInterface\n ) {\n return importCircleOfTrust({ cotId, importData, state });\n },\n\n /**\n * Import first SAML circle of trust\n * @param {CirclesOfTrustExportInterface} importData Import data\n */\n async importFirstCircleOfTrust(importData: CirclesOfTrustExportInterface) {\n return importFirstCircleOfTrust({ importData, state });\n },\n\n /**\n * Import all SAML circles of trust\n * @param {CirclesOfTrustExportInterface} importData Import file name\n */\n async importCirclesOfTrust(importData: CirclesOfTrustExportInterface) {\n return importCirclesOfTrust({ importData, state });\n },\n };\n};\n\n/**\n * Create an empty agent export template\n * @returns {CirclesOfTrustExportInterface} an empty agent export template\n */\nexport function createCirclesOfTrustExportTemplate({\n state,\n}: {\n state: State;\n}) {\n return {\n meta: getMetadata({ state }),\n script: {},\n saml: {\n hosted: {},\n remote: {},\n metadata: {},\n cot: {},\n },\n } as CirclesOfTrustExportInterface;\n}\n\nexport { getCircleOfTrust, createCircleOfTrust };\n\n/**\n * Get circles of trust\n */\nexport async function getCirclesOfTrust({ state }: { state: State }) {\n const { result } = await _getCirclesOfTrust({ state });\n return result;\n}\n\n/**\n * Export circle of trust\n * @param {string} cotId circle of trust id/name\n * @returns {Promise<CirclesOfTrustExportInterface>} a promise that resolves to an CirclesOfTrustExportInterface object\n */\nexport async function exportCircleOfTrust({\n cotId,\n state,\n}: {\n cotId: string;\n state: State;\n}): Promise<CirclesOfTrustExportInterface> {\n debugMessage({\n message: `CirclesOfTrustOps.exportCircleOfTrust: start`,\n state,\n });\n const exportData = createCirclesOfTrustExportTemplate({ state });\n const errors = [];\n try {\n const cotData = await getCircleOfTrust({\n cotId,\n state,\n });\n exportData.saml.cot[cotData._id] = cotData;\n } catch (error) {\n errors.push(error);\n }\n if (errors.length) {\n const errorMessages = errors\n .map((error) => {\n if (error.response?.status === 404) {\n return `Circle of trust ${cotId} does not exist in realm ${state.getRealm()}`;\n } else {\n return error.response?.data?.message || error.message;\n }\n })\n .join('\\n');\n throw new Error(`Export error:\\n${errorMessages}`);\n }\n debugMessage({\n message: `CirclesOfTrustOps.exportCircleOfTrust: end`,\n state,\n });\n return exportData;\n}\n\n/**\n * Export circles of trust\n * @returns {Promise<CirclesOfTrustExportInterface>} a promise that resolves to an CirclesOfTrustExportInterface object\n */\nexport async function exportCirclesOfTrust({\n state,\n}: {\n state: State;\n}): Promise<CirclesOfTrustExportInterface> {\n debugMessage({\n message: `CirclesOfTrustOps.exportCirclesOfTrust: start`,\n state,\n });\n const exportData = createCirclesOfTrustExportTemplate({ state });\n const errors = [];\n try {\n const cots = await getCirclesOfTrust({ state });\n for (const cot of cots) {\n exportData.saml.cot[cot._id] = cot;\n }\n } catch (error) {\n errors.push(error);\n }\n if (errors.length) {\n const errorMessages = errors.map((error) => error.message).join('\\n');\n throw new Error(`Export error:\\n${errorMessages}`);\n }\n debugMessage({\n message: `CirclesOfTrustOps.exportCirclesOfTrust: end`,\n state,\n });\n return exportData;\n}\n\n/**\n * Import a SAML circle of trust by id/name from file\n * @param {String} cotId Circle of trust id/name\n * @param {CirclesOfTrustExportInterface} importData import data\n */\nexport async function importCircleOfTrust({\n cotId,\n importData,\n state,\n}: {\n cotId: string;\n importData: CirclesOfTrustExportInterface;\n state: State;\n}) {\n let response = null;\n const errors = [];\n const imported = [];\n for (const id of Object.keys(importData.saml.cot)) {\n if (id === cotId) {\n try {\n const cotData = importData.saml.cot[id];\n delete cotData._rev;\n try {\n response = await createCircleOfTrust({ cotData, state });\n } catch (createError) {\n if (createError.response?.status === 409)\n response = await updateCircleOfTrust({\n cotId: id,\n cotData,\n state,\n });\n else throw createError;\n }\n imported.push(id);\n } catch (error) {\n errors.push(error);\n }\n }\n }\n if (errors.length) {\n const errorMessages = errors\n .map((error) => error.response?.data?.message || error.message)\n .join('\\n');\n throw new Error(`Import error:\\n${errorMessages}`);\n }\n if (0 === imported.length) {\n throw new Error(`Import error:\\n${cotId} not found in import data!`);\n }\n return response;\n}\n\n/**\n * Import first SAML circle of trust\n * @param {CirclesOfTrustExportInterface} importData import data\n */\nexport async function importFirstCircleOfTrust({\n importData,\n state,\n}: {\n importData: CirclesOfTrustExportInterface;\n state: State;\n}) {\n let response = null;\n const errors = [];\n const imported = [];\n for (const id of Object.keys(importData.saml.cot)) {\n try {\n const cotData = importData.saml.cot[id];\n delete cotData._rev;\n try {\n response = await createCircleOfTrust({ cotData, state });\n } catch (createError) {\n if (createError.response?.status === 409)\n response = await updateCircleOfTrust({\n cotId: id,\n cotData,\n state,\n });\n else throw createError;\n }\n imported.push(id);\n } catch (error) {\n errors.push(error);\n }\n break;\n }\n if (errors.length) {\n const errorMessages = errors\n .map((error) => error.response?.data?.message || error.message)\n .join('\\n');\n throw new Error(`Import error:\\n${errorMessages}`);\n }\n if (0 === imported.length) {\n throw new Error(`Import error:\\nNo circles of trust found in import data!`);\n }\n return response;\n}\n\n/**\n * Import SAML circles of trust\n * @param {CirclesOfTrustExportInterface} importData import data\n */\nexport async function importCirclesOfTrust({\n importData,\n state,\n}: {\n importData: CirclesOfTrustExportInterface;\n state: State;\n}) {\n const response = [];\n const errors = [];\n const imported = [];\n for (const id of Object.keys(importData.saml.cot)) {\n try {\n const cotData = importData.saml.cot[id];\n delete cotData._rev;\n try {\n response.push(await createCircleOfTrust({ cotData, state }));\n } catch (createError) {\n if (createError.response?.status === 409)\n response.push(\n await updateCircleOfTrust({\n cotId: id,\n cotData,\n state,\n })\n );\n else throw createError;\n }\n imported.push(id);\n } catch (error) {\n errors.push(error);\n }\n }\n if (errors.length) {\n const errorMessages = errors\n .map((error) => error.response?.data?.message || error.message)\n .join('\\n');\n throw new Error(`Import error:\\n${errorMessages}`);\n }\n if (0 === imported.length) {\n throw new Error(`Import error:\\nNo circles of trust found in import data!`);\n }\n return response;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"CirclesOfTrustOps.js","names":["debugMessage","getCirclesOfTrust","_getCirclesOfTrust","getCircleOfTrust","createCircleOfTrust","updateCircleOfTrust","getMetadata","state","createCirclesOfTrustExportTemplate","cotId","cotData","exportCircleOfTrust","exportCirclesOfTrust","importCircleOfTrust","importData","importFirstCircleOfTrust","importCirclesOfTrust","meta","script","saml","hosted","remote","metadata","cot","result","message","exportData","errors","_id","error","push","length","errorMessages","map","_error$response","response","status","getRealm","_error$response2","_error$response2$data","data","join","Error","cots","imported","id","Object","keys","_rev","createError","_createError$response","_error$response3","_error$response3$data","_createError$response2","_error$response4","_error$response4$data","_createError$response3","_error$response5","_error$response5$data"],"sources":["../../src/ops/CirclesOfTrustOps.ts"],"sourcesContent":["import { debugMessage } from './utils/Console';\nimport {\n getCirclesOfTrust as _getCirclesOfTrust,\n getCircleOfTrust,\n createCircleOfTrust,\n updateCircleOfTrust,\n} from '../api/CirclesOfTrustApi';\nimport { getMetadata } from './utils/ExportImportUtils';\nimport { State } from '../shared/State';\nimport { CirclesOfTrustExportInterface } from './OpsTypes';\nimport { CircleOfTrustSkeleton } from '../api/ApiTypes';\n\nexport type CirclesOfTrust = {\n /**\n * Create an empty agent export template\n * @returns {CirclesOfTrustExportInterface} an empty agent export template\n */\n createCirclesOfTrustExportTemplate(): CirclesOfTrustExportInterface;\n /**\n * Get SAML circle of trust\n * @param {String} cotId circle of trust id/name\n */\n getCircleOfTrust(cotId: string): Promise<any>;\n /**\n * Get SAML circles of trust\n */\n getCirclesOfTrust(): Promise<any>;\n createCircleOfTrust(cotData: CircleOfTrustSkeleton): Promise<any>;\n /**\n * Export SAML circle of trust\n * @param {String} cotId circle of trust id/name\n */\n exportCircleOfTrust(cotId: string): Promise<CirclesOfTrustExportInterface>;\n /**\n * Export all SAML circles of trust\n */\n exportCirclesOfTrust(): Promise<CirclesOfTrustExportInterface>;\n /**\n * Import a SAML circle of trust by id/name from file\n * @param {String} cotId Circle of trust id/name\n * @param {CirclesOfTrustExportInterface} importData Import data\n */\n importCircleOfTrust(\n cotId: string,\n importData: CirclesOfTrustExportInterface\n ): Promise<any>;\n /**\n * Import first SAML circle of trust\n * @param {CirclesOfTrustExportInterface} importData Import data\n */\n importFirstCircleOfTrust(\n importData: CirclesOfTrustExportInterface\n ): Promise<any>;\n /**\n * Import all SAML circles of trust\n * @param {CirclesOfTrustExportInterface} importData Import file name\n */\n importCirclesOfTrust(\n importData: CirclesOfTrustExportInterface\n ): Promise<any[]>;\n};\n\nexport default (state: State): CirclesOfTrust => {\n return {\n /**\n * Create an empty agent export template\n * @returns {CirclesOfTrustExportInterface} an empty agent export template\n */\n createCirclesOfTrustExportTemplate() {\n return createCirclesOfTrustExportTemplate({ state });\n },\n\n /**\n * Get SAML circle of trust\n * @param {String} cotId circle of trust id/name\n */\n async getCircleOfTrust(cotId: string) {\n return getCircleOfTrust({ cotId, state });\n },\n\n /**\n * Get SAML circles of trust\n */\n async getCirclesOfTrust() {\n return getCirclesOfTrust({ state });\n },\n\n async createCircleOfTrust(cotData: CircleOfTrustSkeleton) {\n return createCircleOfTrust({ cotData, state });\n },\n\n /**\n * Export SAML circle of trust\n * @param {String} cotId circle of trust id/name\n */\n async exportCircleOfTrust(cotId: string) {\n return exportCircleOfTrust({ cotId, state });\n },\n\n /**\n * Export all SAML circles of trust\n */\n async exportCirclesOfTrust() {\n return exportCirclesOfTrust({ state });\n },\n\n /**\n * Import a SAML circle of trust by id/name from file\n * @param {String} cotId Circle of trust id/name\n * @param {CirclesOfTrustExportInterface} importData Import data\n */\n async importCircleOfTrust(\n cotId: string,\n importData: CirclesOfTrustExportInterface\n ) {\n return importCircleOfTrust({ cotId, importData, state });\n },\n\n /**\n * Import first SAML circle of trust\n * @param {CirclesOfTrustExportInterface} importData Import data\n */\n async importFirstCircleOfTrust(importData: CirclesOfTrustExportInterface) {\n return importFirstCircleOfTrust({ importData, state });\n },\n\n /**\n * Import all SAML circles of trust\n * @param {CirclesOfTrustExportInterface} importData Import file name\n */\n async importCirclesOfTrust(importData: CirclesOfTrustExportInterface) {\n return importCirclesOfTrust({ importData, state });\n },\n };\n};\n\n/**\n * Create an empty agent export template\n * @returns {CirclesOfTrustExportInterface} an empty agent export template\n */\nexport function createCirclesOfTrustExportTemplate({\n state,\n}: {\n state: State;\n}) {\n return {\n meta: getMetadata({ state }),\n script: {},\n saml: {\n hosted: {},\n remote: {},\n metadata: {},\n cot: {},\n },\n } as CirclesOfTrustExportInterface;\n}\n\nexport { getCircleOfTrust, createCircleOfTrust };\n\n/**\n * Get circles of trust\n */\nexport async function getCirclesOfTrust({ state }: { state: State }) {\n const { result } = await _getCirclesOfTrust({ state });\n return result;\n}\n\n/**\n * Export circle of trust\n * @param {string} cotId circle of trust id/name\n * @returns {Promise<CirclesOfTrustExportInterface>} a promise that resolves to an CirclesOfTrustExportInterface object\n */\nexport async function exportCircleOfTrust({\n cotId,\n state,\n}: {\n cotId: string;\n state: State;\n}): Promise<CirclesOfTrustExportInterface> {\n debugMessage({\n message: `CirclesOfTrustOps.exportCircleOfTrust: start`,\n state,\n });\n const exportData = createCirclesOfTrustExportTemplate({ state });\n const errors = [];\n try {\n const cotData = await getCircleOfTrust({\n cotId,\n state,\n });\n exportData.saml.cot[cotData._id] = cotData;\n } catch (error) {\n errors.push(error);\n }\n if (errors.length) {\n const errorMessages = errors\n .map((error) => {\n if (error.response?.status === 404) {\n return `Circle of trust ${cotId} does not exist in realm ${state.getRealm()}`;\n } else {\n return error.response?.data?.message || error.message;\n }\n })\n .join('\\n');\n throw new Error(`Export error:\\n${errorMessages}`);\n }\n debugMessage({\n message: `CirclesOfTrustOps.exportCircleOfTrust: end`,\n state,\n });\n return exportData;\n}\n\n/**\n * Export circles of trust\n * @returns {Promise<CirclesOfTrustExportInterface>} a promise that resolves to an CirclesOfTrustExportInterface object\n */\nexport async function exportCirclesOfTrust({\n state,\n}: {\n state: State;\n}): Promise<CirclesOfTrustExportInterface> {\n debugMessage({\n message: `CirclesOfTrustOps.exportCirclesOfTrust: start`,\n state,\n });\n const exportData = createCirclesOfTrustExportTemplate({ state });\n const errors = [];\n try {\n const cots = await getCirclesOfTrust({ state });\n for (const cot of cots) {\n exportData.saml.cot[cot._id] = cot;\n }\n } catch (error) {\n errors.push(error);\n }\n if (errors.length) {\n const errorMessages = errors.map((error) => error.message).join('\\n');\n throw new Error(`Export error:\\n${errorMessages}`);\n }\n debugMessage({\n message: `CirclesOfTrustOps.exportCirclesOfTrust: end`,\n state,\n });\n return exportData;\n}\n\n/**\n * Import a SAML circle of trust by id/name from file\n * @param {String} cotId Circle of trust id/name\n * @param {CirclesOfTrustExportInterface} importData import data\n */\nexport async function importCircleOfTrust({\n cotId,\n importData,\n state,\n}: {\n cotId: string;\n importData: CirclesOfTrustExportInterface;\n state: State;\n}) {\n let response = null;\n const errors = [];\n const imported = [];\n for (const id of Object.keys(importData.saml.cot)) {\n if (id === cotId) {\n try {\n const cotData = importData.saml.cot[id];\n delete cotData._rev;\n try {\n response = await createCircleOfTrust({ cotData, state });\n } catch (createError) {\n if (createError.response?.status === 409)\n response = await updateCircleOfTrust({\n cotId: id,\n cotData,\n state,\n });\n else throw createError;\n }\n imported.push(id);\n } catch (error) {\n errors.push(error);\n }\n }\n }\n if (errors.length) {\n const errorMessages = errors\n .map((error) => error.response?.data?.message || error.message)\n .join('\\n');\n throw new Error(`Import error:\\n${errorMessages}`);\n }\n if (0 === imported.length) {\n throw new Error(`Import error:\\n${cotId} not found in import data!`);\n }\n return response;\n}\n\n/**\n * Import first SAML circle of trust\n * @param {CirclesOfTrustExportInterface} importData import data\n */\nexport async function importFirstCircleOfTrust({\n importData,\n state,\n}: {\n importData: CirclesOfTrustExportInterface;\n state: State;\n}) {\n let response = null;\n const errors = [];\n const imported = [];\n for (const id of Object.keys(importData.saml.cot)) {\n try {\n const cotData = importData.saml.cot[id];\n delete cotData._rev;\n try {\n response = await createCircleOfTrust({ cotData, state });\n } catch (createError) {\n if (createError.response?.status === 409)\n response = await updateCircleOfTrust({\n cotId: id,\n cotData,\n state,\n });\n else throw createError;\n }\n imported.push(id);\n } catch (error) {\n errors.push(error);\n }\n break;\n }\n if (errors.length) {\n const errorMessages = errors\n .map((error) => error.response?.data?.message || error.message)\n .join('\\n');\n throw new Error(`Import error:\\n${errorMessages}`);\n }\n if (0 === imported.length) {\n throw new Error(`Import error:\\nNo circles of trust found in import data!`);\n }\n return response;\n}\n\n/**\n * Import SAML circles of trust\n * @param {CirclesOfTrustExportInterface} importData import data\n */\nexport async function importCirclesOfTrust({\n importData,\n state,\n}: {\n importData: CirclesOfTrustExportInterface;\n state: State;\n}) {\n const response = [];\n const errors = [];\n const imported = [];\n for (const id of Object.keys(importData.saml.cot)) {\n try {\n const cotData = importData.saml.cot[id];\n delete cotData._rev;\n try {\n response.push(await createCircleOfTrust({ cotData, state }));\n } catch (createError) {\n if (createError.response?.status === 409)\n response.push(\n await updateCircleOfTrust({\n cotId: id,\n cotData,\n state,\n })\n );\n else throw createError;\n }\n imported.push(id);\n } catch (error) {\n errors.push(error);\n }\n }\n if (errors.length) {\n const errorMessages = errors\n .map((error) => error.response?.data?.message || error.message)\n .join('\\n');\n throw new Error(`Import error:\\n${errorMessages}`);\n }\n if (0 === imported.length) {\n throw new Error(`Import error:\\nNo circles of trust found in import data!`);\n }\n return response;\n}\n"],"mappings":"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"}
@@ -3,7 +3,7 @@ import os from 'os';
3
3
  import path from 'path';
4
4
  import DataProtection from "./utils/DataProtection.js";
5
5
  import { debugMessage, printMessage, verboseMessage } from "./utils/Console.js";
6
- import { FRODO_CONNECTION_PROFILES_PATH_KEY } from "../storage/StaticStorage.js";
6
+ import Constants from "../shared/Constants.js";
7
7
  import { createJwkRsa, createJwks, getJwkRsaPublic } from "./JoseOps.js";
8
8
  import { createServiceAccount, getServiceAccount } from "./cloud/ServiceAccountOps.js";
9
9
  import { saveJsonToFile } from "./utils/ExportImportUtils.js";
@@ -109,7 +109,7 @@ const newProfileFilename = 'Connections.json';
109
109
  export function getConnectionProfilesPath({
110
110
  state
111
111
  }) {
112
- return state.getConnectionProfilesPath() || process.env[FRODO_CONNECTION_PROFILES_PATH_KEY] || `${os.homedir()}/.frodo/${newProfileFilename}`;
112
+ return state.getConnectionProfilesPath() || process.env[Constants.FRODO_CONNECTION_PROFILES_PATH_KEY] || `${os.homedir()}/.frodo/${newProfileFilename}`;
113
113
  }
114
114
 
115
115
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ConnectionProfileOps.js","names":["fs","os","path","DataProtection","debugMessage","printMessage","verboseMessage","FRODO_CONNECTION_PROFILES_PATH_KEY","createJwkRsa","createJwks","getJwkRsaPublic","createServiceAccount","getServiceAccount","saveJsonToFile","isValidUrl","state","getConnectionProfilesPath","findConnectionProfiles","connectionProfiles","host","initConnectionProfiles","getConnectionProfileByHost","getConnectionProfile","saveConnectionProfile","deleteConnectionProfile","addNewServiceAccount","fileOptions","indentation","legacyProfileFilename","newProfileFilename","process","env","homedir","profiles","tenant","message","includes","foundProfile","push","migrateFromLegacyProfile","legacyPath","newPath","existsSync","writeFileSync","JSON","stringify","copyFileSync","renameSync","dataProtection","pathToMasterKey","getMasterKeyPath","filename","folderName","dirname","mkdirSync","recursive","data","readFileSync","connectionsData","parse","convert","conn","Object","keys","encodedPassword","encrypt","encodedLogApiSecret","encodedSvcacctJwk","length","type","forEach","p","username","password","decrypt","logApiKey","logApiSecret","authenticationService","authenticationHeaderOverrides","svcacctName","svcacctId","svcacctJwk","e","getHost","profile","statSync","found","setHost","error","getUsername","getPassword","getLogApiKey","getLogApiSecret","getServiceAccountId","serviceAccountId","name","getServiceAccountJwk","getAuthenticationService","getAuthenticationHeaderOverrides","entries","orderedProfiles","sort","reduce","obj","key","includeMeta","stat","err","code","Date","getTime","description","scope","jwkPrivate","jwkPublic","jwks","sa","accountStatus","scopes","_id","setServiceAccountId","setServiceAccountJwk"],"sources":["../../src/ops/ConnectionProfileOps.ts"],"sourcesContent":["import fs from 'fs';\nimport os from 'os';\nimport path from 'path';\nimport DataProtection from './utils/DataProtection';\nimport { debugMessage, printMessage, verboseMessage } from './utils/Console';\nimport { FRODO_CONNECTION_PROFILES_PATH_KEY } from '../storage/StaticStorage';\nimport { createJwkRsa, createJwks, getJwkRsaPublic, JwkRsa } from './JoseOps';\nimport {\n createServiceAccount,\n getServiceAccount,\n} from './cloud/ServiceAccountOps';\nimport { IdObjectSkeletonInterface } from '../api/ApiTypes';\nimport { saveJsonToFile } from './utils/ExportImportUtils';\nimport { isValidUrl } from './utils/OpsUtils';\nimport State from '../shared/State';\n\nexport default (state: State) => {\n return {\n /**\n * Get connection profiles file name\n * @returns {string} connection profiles file name\n */\n getConnectionProfilesPath(): string {\n return getConnectionProfilesPath({ state });\n },\n\n /**\n * Find connection profiles\n * @param {ConnectionsFileInterface} connectionProfiles connection profile object\n * @param {string} host host url or unique substring\n * @returns {SecureConnectionProfileInterface[]} Array of connection profiles\n */\n findConnectionProfiles(\n connectionProfiles: ConnectionsFileInterface,\n host: string\n ): SecureConnectionProfileInterface[] {\n return findConnectionProfiles({\n connectionProfiles,\n host,\n state,\n });\n },\n\n /**\n * Initialize connection profiles\n *\n * This method is called from app.ts and runs before any of the message handlers are registered.\n * Therefore none of the Console message functions will produce any output.\n */\n async initConnectionProfiles() {\n initConnectionProfiles({ state });\n },\n\n /**\n * Get connection profile by host\n * @param {String} host host tenant host url or unique substring\n * @returns {Object} connection profile or null\n */\n async getConnectionProfileByHost(\n host: string\n ): Promise<ConnectionProfileInterface> {\n return getConnectionProfileByHost({ host, state });\n },\n\n /**\n * Get connection profile\n * @returns {Object} connection profile or null\n */\n async getConnectionProfile(): Promise<ConnectionProfileInterface> {\n return getConnectionProfile({ state });\n },\n\n /**\n * Save connection profile\n * @param {string} host host url for new profiles or unique substring for existing profiles\n * @returns {Promise<boolean>} true if the operation succeeded, false otherwise\n */\n async saveConnectionProfile(host: string): Promise<boolean> {\n return saveConnectionProfile({ host, state });\n },\n\n /**\n * Delete connection profile\n * @param {string} host host tenant host url or unique substring\n */\n deleteConnectionProfile(host: string): void {\n deleteConnectionProfile({ host, state });\n },\n\n /**\n * Create a new service account using auto-generated parameters\n * @returns {Promise<IdObjectSkeletonInterface>} A promise resolving to a service account object\n */\n async addNewServiceAccount(): Promise<IdObjectSkeletonInterface> {\n return addNewServiceAccount({ state });\n },\n };\n};\n\nconst fileOptions = {\n indentation: 4,\n};\n\nexport interface SecureConnectionProfileInterface {\n tenant: string;\n username?: string | null;\n encodedPassword?: string | null;\n logApiKey?: string | null;\n encodedLogApiSecret?: string | null;\n authenticationService?: string | null;\n authenticationHeaderOverrides?: Record<string, string>;\n svcacctId?: string | null;\n encodedSvcacctJwk?: string | null;\n svcacctName?: string | null;\n}\n\nexport interface ConnectionProfileInterface {\n tenant: string;\n username?: string | null;\n password?: string | null;\n logApiKey?: string | null;\n logApiSecret?: string | null;\n authenticationService?: string | null;\n authenticationHeaderOverrides?: Record<string, string>;\n svcacctId?: string | null;\n svcacctJwk?: JwkRsa;\n svcacctName?: string | null;\n}\n\nexport interface ConnectionsFileInterface {\n [key: string]: SecureConnectionProfileInterface;\n}\n\nconst legacyProfileFilename = '.frodorc';\nconst newProfileFilename = 'Connections.json';\n\n/**\n * Get connection profiles file name\n * @param {State} state library state\n * @returns {String} connection profiles file name\n */\nexport function getConnectionProfilesPath({ state }: { state: State }): string {\n return (\n state.getConnectionProfilesPath() ||\n process.env[FRODO_CONNECTION_PROFILES_PATH_KEY] ||\n `${os.homedir()}/.frodo/${newProfileFilename}`\n );\n}\n\n/**\n * Find connection profiles\n * @param {ConnectionsFileInterface} connectionProfiles connection profile object\n * @param {string} host host url or unique substring\n * @param {State} state library state\n * @returns {SecureConnectionProfileInterface[]} Array of connection profiles\n */\nfunction findConnectionProfiles({\n connectionProfiles,\n host,\n state,\n}: {\n connectionProfiles: ConnectionsFileInterface;\n host: string;\n state: State;\n}): SecureConnectionProfileInterface[] {\n const profiles: SecureConnectionProfileInterface[] = [];\n for (const tenant in connectionProfiles) {\n debugMessage({\n message: `ConnectionProfileOps.findConnectionProfiles: tenant=${tenant}`,\n state,\n });\n if (tenant.includes(host)) {\n debugMessage({\n message: `ConnectionProfileOps.findConnectionProfiles: '${host}' identifies '${tenant}', including in result set`,\n state,\n });\n const foundProfile = { ...connectionProfiles[tenant] };\n foundProfile.tenant = tenant;\n profiles.push(foundProfile);\n }\n }\n return profiles;\n}\n\n/**\n * Migrate from .frodorc to Connections.json\n */\nfunction migrateFromLegacyProfile() {\n const legacyPath = `${os.homedir()}/.frodo/${legacyProfileFilename}`;\n const newPath = `${os.homedir()}/.frodo/${newProfileFilename}`;\n if (!fs.existsSync(legacyPath) && !fs.existsSync(newPath)) {\n // no connections file (old or new), create empty new one\n fs.writeFileSync(\n newPath,\n JSON.stringify({}, null, fileOptions.indentation)\n );\n } else if (fs.existsSync(legacyPath) && !fs.existsSync(newPath)) {\n // old exists, new one does not - so copy old to new one\n fs.copyFileSync(legacyPath, newPath);\n // for now, just add a \"deprecated\" suffix. May delete the old file\n // in a future release\n fs.renameSync(legacyPath, `${legacyPath}.deprecated`);\n }\n // in other cases, where\n // (both old and new exist) OR (only new one exists) don't do anything\n}\n\n/**\n * Initialize connection profiles\n *\n * This method is called from app.ts and runs before any of the message handlers are registered.\n * Therefore none of the Console message functions will produce any output.\n * @param {State} state library state\n */\nexport async function initConnectionProfiles({ state }: { state: State }) {\n const dataProtection = new DataProtection({\n pathToMasterKey: state.getMasterKeyPath(),\n state,\n });\n // create connections.json file if it doesn't exist\n const filename = getConnectionProfilesPath({ state });\n const folderName = path.dirname(filename);\n if (!fs.existsSync(folderName)) {\n fs.mkdirSync(folderName, { recursive: true });\n if (!fs.existsSync(filename)) {\n fs.writeFileSync(\n filename,\n JSON.stringify({}, null, fileOptions.indentation)\n );\n }\n }\n // encrypt the password and logApiSecret from clear text to aes-256-GCM\n else {\n migrateFromLegacyProfile();\n const data = fs.readFileSync(filename, 'utf8');\n const connectionsData: ConnectionsFileInterface = JSON.parse(data);\n let convert = false;\n for (const conn of Object.keys(connectionsData)) {\n if (connectionsData[conn]['password']) {\n convert = true;\n connectionsData[conn].encodedPassword = await dataProtection.encrypt(\n connectionsData[conn]['password']\n );\n delete connectionsData[conn]['password'];\n }\n if (connectionsData[conn]['logApiSecret']) {\n convert = true;\n connectionsData[conn].encodedLogApiSecret =\n await dataProtection.encrypt(connectionsData[conn]['logApiSecret']);\n delete connectionsData[conn]['logApiSecret'];\n }\n if (connectionsData[conn]['svcacctJwk']) {\n convert = true;\n connectionsData[conn].encodedSvcacctJwk = await dataProtection.encrypt(\n connectionsData[conn]['svcacctJwk']\n );\n delete connectionsData[conn]['svcacctJwk'];\n }\n }\n if (convert) {\n fs.writeFileSync(\n filename,\n JSON.stringify(connectionsData, null, fileOptions.indentation)\n );\n }\n }\n}\n\n/**\n * Get connection profile by host\n * @param {String} host host tenant host url or unique substring\n * @param {State} state library state\n * @returns {Object} connection profile or null\n */\nexport async function getConnectionProfileByHost({\n host,\n state,\n}: {\n host: string;\n state: State;\n}): Promise<ConnectionProfileInterface> {\n try {\n const dataProtection = new DataProtection({\n pathToMasterKey: state.getMasterKeyPath(),\n state,\n });\n const filename = getConnectionProfilesPath({ state });\n const connectionsData = JSON.parse(fs.readFileSync(filename, 'utf8'));\n const profiles = findConnectionProfiles({\n connectionProfiles: connectionsData,\n host,\n state,\n });\n if (profiles.length == 0) {\n printMessage({\n message: `Profile for ${host} not found. Please specify credentials on command line`,\n type: 'error',\n state,\n });\n return null;\n }\n if (profiles.length > 1) {\n printMessage({\n message: `Multiple matching profiles found.`,\n type: 'error',\n state,\n });\n profiles.forEach((p) => {\n printMessage({ message: `- ${p.tenant}`, type: 'error', state });\n });\n printMessage({\n message: `Please specify a unique sub-string`,\n type: 'error',\n state,\n });\n return null;\n }\n return {\n tenant: profiles[0].tenant,\n username: profiles[0].username ? profiles[0].username : null,\n password: profiles[0].encodedPassword\n ? await dataProtection.decrypt(profiles[0].encodedPassword)\n : null,\n logApiKey: profiles[0].logApiKey ? profiles[0].logApiKey : null,\n logApiSecret: profiles[0].encodedLogApiSecret\n ? await dataProtection.decrypt(profiles[0].encodedLogApiSecret)\n : null,\n authenticationService: profiles[0].authenticationService\n ? profiles[0].authenticationService\n : null,\n authenticationHeaderOverrides: profiles[0].authenticationHeaderOverrides\n ? profiles[0].authenticationHeaderOverrides\n : {},\n svcacctName: profiles[0].svcacctName ? profiles[0].svcacctName : null,\n svcacctId: profiles[0].svcacctId ? profiles[0].svcacctId : null,\n svcacctJwk: profiles[0].encodedSvcacctJwk\n ? await dataProtection.decrypt(profiles[0].encodedSvcacctJwk)\n : null,\n };\n } catch (e) {\n printMessage({\n message: `Can not read saved connection info, please specify credentials on command line: ${e}`,\n type: 'error',\n state,\n });\n return null;\n }\n}\n\n/**\n * Get connection profile\n * @returns {Object} connection profile or null\n */\nexport async function getConnectionProfile({\n state,\n}: {\n state: State;\n}): Promise<ConnectionProfileInterface> {\n return getConnectionProfileByHost({ host: state.getHost(), state });\n}\n\n/**\n * Save connection profile\n * @param {string} host host url for new profiles or unique substring for existing profiles\n * @returns {Promise<boolean>} true if the operation succeeded, false otherwise\n */\nexport async function saveConnectionProfile({\n host,\n state,\n}: {\n host: string;\n state: State;\n}): Promise<boolean> {\n debugMessage({\n message: `ConnectionProfileOps.saveConnectionProfile: start`,\n state,\n });\n const dataProtection = new DataProtection({\n pathToMasterKey: state.getMasterKeyPath(),\n state,\n });\n const filename = getConnectionProfilesPath({ state });\n debugMessage({ message: `Saving connection profile in ${filename}`, state });\n let profiles: ConnectionsFileInterface = {};\n let profile: SecureConnectionProfileInterface = { tenant: '' };\n try {\n fs.statSync(filename);\n const data = fs.readFileSync(filename, 'utf8');\n profiles = JSON.parse(data);\n\n // find tenant\n const found = findConnectionProfiles({\n connectionProfiles: profiles,\n host,\n state,\n });\n\n // replace tenant in session with real tenant url if necessary\n if (found.length === 1) {\n profile = found[0];\n state.setHost(profile.tenant);\n verboseMessage({ message: `Existing profile: ${profile.tenant}`, state });\n debugMessage({ message: profile, state });\n }\n\n // connection profile not found, validate host is a real URL\n if (found.length === 0) {\n if (isValidUrl(host)) {\n state.setHost(host);\n debugMessage({ message: `New profile: ${host}`, state });\n } else {\n printMessage({\n message: `No existing profile found matching '${host}'. Provide a valid URL as the host argument to create a new profile.`,\n type: 'error',\n state,\n });\n debugMessage({\n message: `ConnectionProfileOps.saveConnectionProfile: end [false]`,\n state,\n });\n return false;\n }\n }\n } catch (error) {\n debugMessage({\n message: `New profiles file ${filename} with new profile ${host}`,\n state,\n });\n }\n\n // user account\n if (state.getUsername()) profile.username = state.getUsername();\n if (state.getPassword())\n profile.encodedPassword = await dataProtection.encrypt(state.getPassword());\n\n // log API\n if (state.getLogApiKey()) profile.logApiKey = state.getLogApiKey();\n if (state.getLogApiSecret())\n profile.encodedLogApiSecret = await dataProtection.encrypt(\n state.getLogApiSecret()\n );\n\n // service account\n if (state.getServiceAccountId()) {\n profile.svcacctId = state.getServiceAccountId();\n profile.svcacctName = (\n await getServiceAccount({\n serviceAccountId: state.getServiceAccountId(),\n state,\n })\n ).name;\n }\n if (state.getServiceAccountJwk())\n profile.encodedSvcacctJwk = await dataProtection.encrypt(\n state.getServiceAccountJwk()\n );\n // update existing service account profile\n if (profile.svcacctId && !profile.svcacctName) {\n profile.svcacctName = (\n await getServiceAccount({ serviceAccountId: profile.svcacctId, state })\n ).name;\n debugMessage({\n message: `ConnectionProfileOps.saveConnectionProfile: added missing service account name`,\n state,\n });\n }\n\n // advanced settings\n if (state.getAuthenticationService()) {\n profile.authenticationService = state.getAuthenticationService();\n printMessage({\n message:\n 'Advanced setting: Authentication Service: ' +\n state.getAuthenticationService(),\n type: 'info',\n state,\n });\n }\n if (\n state.getAuthenticationHeaderOverrides() &&\n Object.entries(state.getAuthenticationHeaderOverrides()).length\n ) {\n profile.authenticationHeaderOverrides =\n state.getAuthenticationHeaderOverrides();\n printMessage({\n message: 'Advanced setting: Authentication Header Overrides: ',\n type: 'info',\n state,\n });\n printMessage({\n message: state.getAuthenticationHeaderOverrides(),\n type: 'info',\n state,\n });\n }\n\n // remove the helper key 'tenant'\n delete profile.tenant;\n\n // update profiles\n profiles[state.getHost()] = profile;\n\n // sort profiles\n const orderedProfiles = Object.keys(profiles)\n .sort()\n .reduce((obj, key) => {\n obj[key] = profiles[key];\n return obj;\n }, {});\n\n // save profiles\n saveJsonToFile({\n data: orderedProfiles,\n filename,\n includeMeta: false,\n state,\n });\n verboseMessage({\n message: `Saved connection profile ${state.getHost()} in ${filename}`,\n state,\n });\n debugMessage({\n message: `ConnectionProfileOps.saveConnectionProfile: end [true]`,\n state,\n });\n return true;\n}\n\n/**\n * Delete connection profile\n * @param {String} host host tenant host url or unique substring\n */\nexport function deleteConnectionProfile({\n host,\n state,\n}: {\n host: string;\n state: State;\n}) {\n const filename = getConnectionProfilesPath({ state });\n let connectionsData: ConnectionsFileInterface = {};\n fs.stat(filename, (err) => {\n if (err == null) {\n const data = fs.readFileSync(filename, 'utf8');\n connectionsData = JSON.parse(data);\n const profiles = findConnectionProfiles({\n connectionProfiles: connectionsData,\n host,\n state,\n });\n if (profiles.length == 1) {\n delete connectionsData[profiles[0].tenant];\n fs.writeFileSync(filename, JSON.stringify(connectionsData, null, 2));\n printMessage({\n message: `Deleted connection profile ${profiles[0].tenant}`,\n state,\n });\n } else {\n if (profiles.length > 1) {\n printMessage({\n message: `Multiple matching profiles found.`,\n type: 'error',\n state,\n });\n profiles.forEach((p) => {\n printMessage({ message: `- ${p.tenant}`, type: 'error', state });\n });\n printMessage({\n message: `Please specify a unique sub-string`,\n type: 'error',\n state,\n });\n return null;\n } else {\n printMessage({\n message: `No connection profile ${host} found`,\n state,\n });\n }\n }\n } else if (err.code === 'ENOENT') {\n printMessage({\n message: `Connection profile file ${filename} not found`,\n state,\n });\n } else {\n printMessage({\n message: `Error in deleting connection profile: ${err.code}`,\n type: 'error',\n state,\n });\n }\n });\n}\n\n/**\n * Create a new service account using auto-generated parameters\n * @returns {Promise<IdObjectSkeletonInterface>} A promise resolving to a service account object\n */\nexport async function addNewServiceAccount({\n state,\n}: {\n state: State;\n}): Promise<IdObjectSkeletonInterface> {\n debugMessage({\n message: `ConnectionProfileOps.addNewServiceAccount: start`,\n state,\n });\n const name = `Frodo-SA-${new Date().getTime()}`;\n debugMessage({\n message: `ConnectionProfileOps.addNewServiceAccount: name=${name}...`,\n state,\n });\n const description = `${state.getUsername()}'s Frodo Service Account`;\n const scope = ['fr:am:*', 'fr:idm:*', 'fr:idc:esv:*'];\n const jwkPrivate = await createJwkRsa();\n const jwkPublic = await getJwkRsaPublic(jwkPrivate);\n const jwks = createJwks(jwkPublic);\n const sa = await createServiceAccount({\n name,\n description,\n accountStatus: 'Active',\n scopes: scope,\n jwks,\n state,\n });\n debugMessage({\n message: `ConnectionProfileOps.addNewServiceAccount: id=${sa._id}`,\n state,\n });\n state.setServiceAccountId(sa._id);\n state.setServiceAccountJwk(jwkPrivate);\n debugMessage({\n message: `ConnectionProfileOps.addNewServiceAccount: end`,\n state,\n });\n return sa;\n}\n"],"mappings":"AAAA,OAAOA,EAAE,MAAM,IAAI;AACnB,OAAOC,EAAE,MAAM,IAAI;AACnB,OAAOC,IAAI,MAAM,MAAM;AAAC,OACjBC,cAAc;AAAA,SACZC,YAAY,EAAEC,YAAY,EAAEC,cAAc;AAAA,SAC1CC,kCAAkC;AAAA,SAClCC,YAAY,EAAEC,UAAU,EAAEC,eAAe;AAAA,SAEhDC,oBAAoB,EACpBC,iBAAiB;AAAA,SAGVC,cAAc;AAAA,SACdC,UAAU;AAGnB,gBAAgBC,KAAY,IAAK;EAC/B,OAAO;IACL;AACJ;AACA;AACA;IACIC,yBAAyBA,CAAA,EAAW;MAClC,OAAOA,yBAAyB,CAAC;QAAED;MAAM,CAAC,CAAC;IAC7C,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;IACIE,sBAAsBA,CACpBC,kBAA4C,EAC5CC,IAAY,EACwB;MACpC,OAAOF,sBAAsB,CAAC;QAC5BC,kBAAkB;QAClBC,IAAI;QACJJ;MACF,CAAC,CAAC;IACJ,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;IACI,MAAMK,sBAAsBA,CAAA,EAAG;MAC7BA,sBAAsB,CAAC;QAAEL;MAAM,CAAC,CAAC;IACnC,CAAC;IAED;AACJ;AACA;AACA;AACA;IACI,MAAMM,0BAA0BA,CAC9BF,IAAY,EACyB;MACrC,OAAOE,0BAA0B,CAAC;QAAEF,IAAI;QAAEJ;MAAM,CAAC,CAAC;IACpD,CAAC;IAED;AACJ;AACA;AACA;IACI,MAAMO,oBAAoBA,CAAA,EAAwC;MAChE,OAAOA,oBAAoB,CAAC;QAAEP;MAAM,CAAC,CAAC;IACxC,CAAC;IAED;AACJ;AACA;AACA;AACA;IACI,MAAMQ,qBAAqBA,CAACJ,IAAY,EAAoB;MAC1D,OAAOI,qBAAqB,CAAC;QAAEJ,IAAI;QAAEJ;MAAM,CAAC,CAAC;IAC/C,CAAC;IAED;AACJ;AACA;AACA;IACIS,uBAAuBA,CAACL,IAAY,EAAQ;MAC1CK,uBAAuB,CAAC;QAAEL,IAAI;QAAEJ;MAAM,CAAC,CAAC;IAC1C,CAAC;IAED;AACJ;AACA;AACA;IACI,MAAMU,oBAAoBA,CAAA,EAAuC;MAC/D,OAAOA,oBAAoB,CAAC;QAAEV;MAAM,CAAC,CAAC;IACxC;EACF,CAAC;AACH,CAAC;AAED,MAAMW,WAAW,GAAG;EAClBC,WAAW,EAAE;AACf,CAAC;AAgCD,MAAMC,qBAAqB,GAAG,UAAU;AACxC,MAAMC,kBAAkB,GAAG,kBAAkB;;AAE7C;AACA;AACA;AACA;AACA;AACA,OAAO,SAASb,yBAAyBA,CAAC;EAAED;AAAwB,CAAC,EAAU;EAC7E,OACEA,KAAK,CAACC,yBAAyB,CAAC,CAAC,IACjCc,OAAO,CAACC,GAAG,CAACxB,kCAAkC,CAAC,IAC9C,GAAEN,EAAE,CAAC+B,OAAO,CAAC,CAAE,WAAUH,kBAAmB,EAAC;AAElD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASZ,sBAAsBA,CAAC;EAC9BC,kBAAkB;EAClBC,IAAI;EACJJ;AAKF,CAAC,EAAsC;EACrC,MAAMkB,QAA4C,GAAG,EAAE;EACvD,KAAK,MAAMC,MAAM,IAAIhB,kBAAkB,EAAE;IACvCd,YAAY,CAAC;MACX+B,OAAO,EAAG,uDAAsDD,MAAO,EAAC;MACxEnB;IACF,CAAC,CAAC;IACF,IAAImB,MAAM,CAACE,QAAQ,CAACjB,IAAI,CAAC,EAAE;MACzBf,YAAY,CAAC;QACX+B,OAAO,EAAG,iDAAgDhB,IAAK,iBAAgBe,MAAO,4BAA2B;QACjHnB;MACF,CAAC,CAAC;MACF,MAAMsB,YAAY,GAAG;QAAE,GAAGnB,kBAAkB,CAACgB,MAAM;MAAE,CAAC;MACtDG,YAAY,CAACH,MAAM,GAAGA,MAAM;MAC5BD,QAAQ,CAACK,IAAI,CAACD,YAAY,CAAC;IAC7B;EACF;EACA,OAAOJ,QAAQ;AACjB;;AAEA;AACA;AACA;AACA,SAASM,wBAAwBA,CAAA,EAAG;EAClC,MAAMC,UAAU,GAAI,GAAEvC,EAAE,CAAC+B,OAAO,CAAC,CAAE,WAAUJ,qBAAsB,EAAC;EACpE,MAAMa,OAAO,GAAI,GAAExC,EAAE,CAAC+B,OAAO,CAAC,CAAE,WAAUH,kBAAmB,EAAC;EAC9D,IAAI,CAAC7B,EAAE,CAAC0C,UAAU,CAACF,UAAU,CAAC,IAAI,CAACxC,EAAE,CAAC0C,UAAU,CAACD,OAAO,CAAC,EAAE;IACzD;IACAzC,EAAE,CAAC2C,aAAa,CACdF,OAAO,EACPG,IAAI,CAACC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAEnB,WAAW,CAACC,WAAW,CAClD,CAAC;EACH,CAAC,MAAM,IAAI3B,EAAE,CAAC0C,UAAU,CAACF,UAAU,CAAC,IAAI,CAACxC,EAAE,CAAC0C,UAAU,CAACD,OAAO,CAAC,EAAE;IAC/D;IACAzC,EAAE,CAAC8C,YAAY,CAACN,UAAU,EAAEC,OAAO,CAAC;IACpC;IACA;IACAzC,EAAE,CAAC+C,UAAU,CAACP,UAAU,EAAG,GAAEA,UAAW,aAAY,CAAC;EACvD;EACA;EACA;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAepB,sBAAsBA,CAAC;EAAEL;AAAwB,CAAC,EAAE;EACxE,MAAMiC,cAAc,GAAG,IAAI7C,cAAc,CAAC;IACxC8C,eAAe,EAAElC,KAAK,CAACmC,gBAAgB,CAAC,CAAC;IACzCnC;EACF,CAAC,CAAC;EACF;EACA,MAAMoC,QAAQ,GAAGnC,yBAAyB,CAAC;IAAED;EAAM,CAAC,CAAC;EACrD,MAAMqC,UAAU,GAAGlD,IAAI,CAACmD,OAAO,CAACF,QAAQ,CAAC;EACzC,IAAI,CAACnD,EAAE,CAAC0C,UAAU,CAACU,UAAU,CAAC,EAAE;IAC9BpD,EAAE,CAACsD,SAAS,CAACF,UAAU,EAAE;MAAEG,SAAS,EAAE;IAAK,CAAC,CAAC;IAC7C,IAAI,CAACvD,EAAE,CAAC0C,UAAU,CAACS,QAAQ,CAAC,EAAE;MAC5BnD,EAAE,CAAC2C,aAAa,CACdQ,QAAQ,EACRP,IAAI,CAACC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAEnB,WAAW,CAACC,WAAW,CAClD,CAAC;IACH;EACF;EACA;EAAA,KACK;IACHY,wBAAwB,CAAC,CAAC;IAC1B,MAAMiB,IAAI,GAAGxD,EAAE,CAACyD,YAAY,CAACN,QAAQ,EAAE,MAAM,CAAC;IAC9C,MAAMO,eAAyC,GAAGd,IAAI,CAACe,KAAK,CAACH,IAAI,CAAC;IAClE,IAAII,OAAO,GAAG,KAAK;IACnB,KAAK,MAAMC,IAAI,IAAIC,MAAM,CAACC,IAAI,CAACL,eAAe,CAAC,EAAE;MAC/C,IAAIA,eAAe,CAACG,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE;QACrCD,OAAO,GAAG,IAAI;QACdF,eAAe,CAACG,IAAI,CAAC,CAACG,eAAe,GAAG,MAAMhB,cAAc,CAACiB,OAAO,CAClEP,eAAe,CAACG,IAAI,CAAC,CAAC,UAAU,CAClC,CAAC;QACD,OAAOH,eAAe,CAACG,IAAI,CAAC,CAAC,UAAU,CAAC;MAC1C;MACA,IAAIH,eAAe,CAACG,IAAI,CAAC,CAAC,cAAc,CAAC,EAAE;QACzCD,OAAO,GAAG,IAAI;QACdF,eAAe,CAACG,IAAI,CAAC,CAACK,mBAAmB,GACvC,MAAMlB,cAAc,CAACiB,OAAO,CAACP,eAAe,CAACG,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC;QACrE,OAAOH,eAAe,CAACG,IAAI,CAAC,CAAC,cAAc,CAAC;MAC9C;MACA,IAAIH,eAAe,CAACG,IAAI,CAAC,CAAC,YAAY,CAAC,EAAE;QACvCD,OAAO,GAAG,IAAI;QACdF,eAAe,CAACG,IAAI,CAAC,CAACM,iBAAiB,GAAG,MAAMnB,cAAc,CAACiB,OAAO,CACpEP,eAAe,CAACG,IAAI,CAAC,CAAC,YAAY,CACpC,CAAC;QACD,OAAOH,eAAe,CAACG,IAAI,CAAC,CAAC,YAAY,CAAC;MAC5C;IACF;IACA,IAAID,OAAO,EAAE;MACX5D,EAAE,CAAC2C,aAAa,CACdQ,QAAQ,EACRP,IAAI,CAACC,SAAS,CAACa,eAAe,EAAE,IAAI,EAAEhC,WAAW,CAACC,WAAW,CAC/D,CAAC;IACH;EACF;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeN,0BAA0BA,CAAC;EAC/CF,IAAI;EACJJ;AAIF,CAAC,EAAuC;EACtC,IAAI;IACF,MAAMiC,cAAc,GAAG,IAAI7C,cAAc,CAAC;MACxC8C,eAAe,EAAElC,KAAK,CAACmC,gBAAgB,CAAC,CAAC;MACzCnC;IACF,CAAC,CAAC;IACF,MAAMoC,QAAQ,GAAGnC,yBAAyB,CAAC;MAAED;IAAM,CAAC,CAAC;IACrD,MAAM2C,eAAe,GAAGd,IAAI,CAACe,KAAK,CAAC3D,EAAE,CAACyD,YAAY,CAACN,QAAQ,EAAE,MAAM,CAAC,CAAC;IACrE,MAAMlB,QAAQ,GAAGhB,sBAAsB,CAAC;MACtCC,kBAAkB,EAAEwC,eAAe;MACnCvC,IAAI;MACJJ;IACF,CAAC,CAAC;IACF,IAAIkB,QAAQ,CAACmC,MAAM,IAAI,CAAC,EAAE;MACxB/D,YAAY,CAAC;QACX8B,OAAO,EAAG,eAAchB,IAAK,wDAAuD;QACpFkD,IAAI,EAAE,OAAO;QACbtD;MACF,CAAC,CAAC;MACF,OAAO,IAAI;IACb;IACA,IAAIkB,QAAQ,CAACmC,MAAM,GAAG,CAAC,EAAE;MACvB/D,YAAY,CAAC;QACX8B,OAAO,EAAG,mCAAkC;QAC5CkC,IAAI,EAAE,OAAO;QACbtD;MACF,CAAC,CAAC;MACFkB,QAAQ,CAACqC,OAAO,CAAEC,CAAC,IAAK;QACtBlE,YAAY,CAAC;UAAE8B,OAAO,EAAG,KAAIoC,CAAC,CAACrC,MAAO,EAAC;UAAEmC,IAAI,EAAE,OAAO;UAAEtD;QAAM,CAAC,CAAC;MAClE,CAAC,CAAC;MACFV,YAAY,CAAC;QACX8B,OAAO,EAAG,oCAAmC;QAC7CkC,IAAI,EAAE,OAAO;QACbtD;MACF,CAAC,CAAC;MACF,OAAO,IAAI;IACb;IACA,OAAO;MACLmB,MAAM,EAAED,QAAQ,CAAC,CAAC,CAAC,CAACC,MAAM;MAC1BsC,QAAQ,EAAEvC,QAAQ,CAAC,CAAC,CAAC,CAACuC,QAAQ,GAAGvC,QAAQ,CAAC,CAAC,CAAC,CAACuC,QAAQ,GAAG,IAAI;MAC5DC,QAAQ,EAAExC,QAAQ,CAAC,CAAC,CAAC,CAAC+B,eAAe,GACjC,MAAMhB,cAAc,CAAC0B,OAAO,CAACzC,QAAQ,CAAC,CAAC,CAAC,CAAC+B,eAAe,CAAC,GACzD,IAAI;MACRW,SAAS,EAAE1C,QAAQ,CAAC,CAAC,CAAC,CAAC0C,SAAS,GAAG1C,QAAQ,CAAC,CAAC,CAAC,CAAC0C,SAAS,GAAG,IAAI;MAC/DC,YAAY,EAAE3C,QAAQ,CAAC,CAAC,CAAC,CAACiC,mBAAmB,GACzC,MAAMlB,cAAc,CAAC0B,OAAO,CAACzC,QAAQ,CAAC,CAAC,CAAC,CAACiC,mBAAmB,CAAC,GAC7D,IAAI;MACRW,qBAAqB,EAAE5C,QAAQ,CAAC,CAAC,CAAC,CAAC4C,qBAAqB,GACpD5C,QAAQ,CAAC,CAAC,CAAC,CAAC4C,qBAAqB,GACjC,IAAI;MACRC,6BAA6B,EAAE7C,QAAQ,CAAC,CAAC,CAAC,CAAC6C,6BAA6B,GACpE7C,QAAQ,CAAC,CAAC,CAAC,CAAC6C,6BAA6B,GACzC,CAAC,CAAC;MACNC,WAAW,EAAE9C,QAAQ,CAAC,CAAC,CAAC,CAAC8C,WAAW,GAAG9C,QAAQ,CAAC,CAAC,CAAC,CAAC8C,WAAW,GAAG,IAAI;MACrEC,SAAS,EAAE/C,QAAQ,CAAC,CAAC,CAAC,CAAC+C,SAAS,GAAG/C,QAAQ,CAAC,CAAC,CAAC,CAAC+C,SAAS,GAAG,IAAI;MAC/DC,UAAU,EAAEhD,QAAQ,CAAC,CAAC,CAAC,CAACkC,iBAAiB,GACrC,MAAMnB,cAAc,CAAC0B,OAAO,CAACzC,QAAQ,CAAC,CAAC,CAAC,CAACkC,iBAAiB,CAAC,GAC3D;IACN,CAAC;EACH,CAAC,CAAC,OAAOe,CAAC,EAAE;IACV7E,YAAY,CAAC;MACX8B,OAAO,EAAG,mFAAkF+C,CAAE,EAAC;MAC/Fb,IAAI,EAAE,OAAO;MACbtD;IACF,CAAC,CAAC;IACF,OAAO,IAAI;EACb;AACF;;AAEA;AACA;AACA;AACA;AACA,OAAO,eAAeO,oBAAoBA,CAAC;EACzCP;AAGF,CAAC,EAAuC;EACtC,OAAOM,0BAA0B,CAAC;IAAEF,IAAI,EAAEJ,KAAK,CAACoE,OAAO,CAAC,CAAC;IAAEpE;EAAM,CAAC,CAAC;AACrE;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeQ,qBAAqBA,CAAC;EAC1CJ,IAAI;EACJJ;AAIF,CAAC,EAAoB;EACnBX,YAAY,CAAC;IACX+B,OAAO,EAAG,mDAAkD;IAC5DpB;EACF,CAAC,CAAC;EACF,MAAMiC,cAAc,GAAG,IAAI7C,cAAc,CAAC;IACxC8C,eAAe,EAAElC,KAAK,CAACmC,gBAAgB,CAAC,CAAC;IACzCnC;EACF,CAAC,CAAC;EACF,MAAMoC,QAAQ,GAAGnC,yBAAyB,CAAC;IAAED;EAAM,CAAC,CAAC;EACrDX,YAAY,CAAC;IAAE+B,OAAO,EAAG,gCAA+BgB,QAAS,EAAC;IAAEpC;EAAM,CAAC,CAAC;EAC5E,IAAIkB,QAAkC,GAAG,CAAC,CAAC;EAC3C,IAAImD,OAAyC,GAAG;IAAElD,MAAM,EAAE;EAAG,CAAC;EAC9D,IAAI;IACFlC,EAAE,CAACqF,QAAQ,CAAClC,QAAQ,CAAC;IACrB,MAAMK,IAAI,GAAGxD,EAAE,CAACyD,YAAY,CAACN,QAAQ,EAAE,MAAM,CAAC;IAC9ClB,QAAQ,GAAGW,IAAI,CAACe,KAAK,CAACH,IAAI,CAAC;;IAE3B;IACA,MAAM8B,KAAK,GAAGrE,sBAAsB,CAAC;MACnCC,kBAAkB,EAAEe,QAAQ;MAC5Bd,IAAI;MACJJ;IACF,CAAC,CAAC;;IAEF;IACA,IAAIuE,KAAK,CAAClB,MAAM,KAAK,CAAC,EAAE;MACtBgB,OAAO,GAAGE,KAAK,CAAC,CAAC,CAAC;MAClBvE,KAAK,CAACwE,OAAO,CAACH,OAAO,CAAClD,MAAM,CAAC;MAC7B5B,cAAc,CAAC;QAAE6B,OAAO,EAAG,qBAAoBiD,OAAO,CAAClD,MAAO,EAAC;QAAEnB;MAAM,CAAC,CAAC;MACzEX,YAAY,CAAC;QAAE+B,OAAO,EAAEiD,OAAO;QAAErE;MAAM,CAAC,CAAC;IAC3C;;IAEA;IACA,IAAIuE,KAAK,CAAClB,MAAM,KAAK,CAAC,EAAE;MACtB,IAAItD,UAAU,CAACK,IAAI,CAAC,EAAE;QACpBJ,KAAK,CAACwE,OAAO,CAACpE,IAAI,CAAC;QACnBf,YAAY,CAAC;UAAE+B,OAAO,EAAG,gBAAehB,IAAK,EAAC;UAAEJ;QAAM,CAAC,CAAC;MAC1D,CAAC,MAAM;QACLV,YAAY,CAAC;UACX8B,OAAO,EAAG,uCAAsChB,IAAK,sEAAqE;UAC1HkD,IAAI,EAAE,OAAO;UACbtD;QACF,CAAC,CAAC;QACFX,YAAY,CAAC;UACX+B,OAAO,EAAG,yDAAwD;UAClEpB;QACF,CAAC,CAAC;QACF,OAAO,KAAK;MACd;IACF;EACF,CAAC,CAAC,OAAOyE,KAAK,EAAE;IACdpF,YAAY,CAAC;MACX+B,OAAO,EAAG,qBAAoBgB,QAAS,qBAAoBhC,IAAK,EAAC;MACjEJ;IACF,CAAC,CAAC;EACJ;;EAEA;EACA,IAAIA,KAAK,CAAC0E,WAAW,CAAC,CAAC,EAAEL,OAAO,CAACZ,QAAQ,GAAGzD,KAAK,CAAC0E,WAAW,CAAC,CAAC;EAC/D,IAAI1E,KAAK,CAAC2E,WAAW,CAAC,CAAC,EACrBN,OAAO,CAACpB,eAAe,GAAG,MAAMhB,cAAc,CAACiB,OAAO,CAAClD,KAAK,CAAC2E,WAAW,CAAC,CAAC,CAAC;;EAE7E;EACA,IAAI3E,KAAK,CAAC4E,YAAY,CAAC,CAAC,EAAEP,OAAO,CAACT,SAAS,GAAG5D,KAAK,CAAC4E,YAAY,CAAC,CAAC;EAClE,IAAI5E,KAAK,CAAC6E,eAAe,CAAC,CAAC,EACzBR,OAAO,CAAClB,mBAAmB,GAAG,MAAMlB,cAAc,CAACiB,OAAO,CACxDlD,KAAK,CAAC6E,eAAe,CAAC,CACxB,CAAC;;EAEH;EACA,IAAI7E,KAAK,CAAC8E,mBAAmB,CAAC,CAAC,EAAE;IAC/BT,OAAO,CAACJ,SAAS,GAAGjE,KAAK,CAAC8E,mBAAmB,CAAC,CAAC;IAC/CT,OAAO,CAACL,WAAW,GAAG,CACpB,MAAMnE,iBAAiB,CAAC;MACtBkF,gBAAgB,EAAE/E,KAAK,CAAC8E,mBAAmB,CAAC,CAAC;MAC7C9E;IACF,CAAC,CAAC,EACFgF,IAAI;EACR;EACA,IAAIhF,KAAK,CAACiF,oBAAoB,CAAC,CAAC,EAC9BZ,OAAO,CAACjB,iBAAiB,GAAG,MAAMnB,cAAc,CAACiB,OAAO,CACtDlD,KAAK,CAACiF,oBAAoB,CAAC,CAC7B,CAAC;EACH;EACA,IAAIZ,OAAO,CAACJ,SAAS,IAAI,CAACI,OAAO,CAACL,WAAW,EAAE;IAC7CK,OAAO,CAACL,WAAW,GAAG,CACpB,MAAMnE,iBAAiB,CAAC;MAAEkF,gBAAgB,EAAEV,OAAO,CAACJ,SAAS;MAAEjE;IAAM,CAAC,CAAC,EACvEgF,IAAI;IACN3F,YAAY,CAAC;MACX+B,OAAO,EAAG,gFAA+E;MACzFpB;IACF,CAAC,CAAC;EACJ;;EAEA;EACA,IAAIA,KAAK,CAACkF,wBAAwB,CAAC,CAAC,EAAE;IACpCb,OAAO,CAACP,qBAAqB,GAAG9D,KAAK,CAACkF,wBAAwB,CAAC,CAAC;IAChE5F,YAAY,CAAC;MACX8B,OAAO,EACL,4CAA4C,GAC5CpB,KAAK,CAACkF,wBAAwB,CAAC,CAAC;MAClC5B,IAAI,EAAE,MAAM;MACZtD;IACF,CAAC,CAAC;EACJ;EACA,IACEA,KAAK,CAACmF,gCAAgC,CAAC,CAAC,IACxCpC,MAAM,CAACqC,OAAO,CAACpF,KAAK,CAACmF,gCAAgC,CAAC,CAAC,CAAC,CAAC9B,MAAM,EAC/D;IACAgB,OAAO,CAACN,6BAA6B,GACnC/D,KAAK,CAACmF,gCAAgC,CAAC,CAAC;IAC1C7F,YAAY,CAAC;MACX8B,OAAO,EAAE,qDAAqD;MAC9DkC,IAAI,EAAE,MAAM;MACZtD;IACF,CAAC,CAAC;IACFV,YAAY,CAAC;MACX8B,OAAO,EAAEpB,KAAK,CAACmF,gCAAgC,CAAC,CAAC;MACjD7B,IAAI,EAAE,MAAM;MACZtD;IACF,CAAC,CAAC;EACJ;;EAEA;EACA,OAAOqE,OAAO,CAAClD,MAAM;;EAErB;EACAD,QAAQ,CAAClB,KAAK,CAACoE,OAAO,CAAC,CAAC,CAAC,GAAGC,OAAO;;EAEnC;EACA,MAAMgB,eAAe,GAAGtC,MAAM,CAACC,IAAI,CAAC9B,QAAQ,CAAC,CAC1CoE,IAAI,CAAC,CAAC,CACNC,MAAM,CAAC,CAACC,GAAG,EAAEC,GAAG,KAAK;IACpBD,GAAG,CAACC,GAAG,CAAC,GAAGvE,QAAQ,CAACuE,GAAG,CAAC;IACxB,OAAOD,GAAG;EACZ,CAAC,EAAE,CAAC,CAAC,CAAC;;EAER;EACA1F,cAAc,CAAC;IACb2C,IAAI,EAAE4C,eAAe;IACrBjD,QAAQ;IACRsD,WAAW,EAAE,KAAK;IAClB1F;EACF,CAAC,CAAC;EACFT,cAAc,CAAC;IACb6B,OAAO,EAAG,4BAA2BpB,KAAK,CAACoE,OAAO,CAAC,CAAE,OAAMhC,QAAS,EAAC;IACrEpC;EACF,CAAC,CAAC;EACFX,YAAY,CAAC;IACX+B,OAAO,EAAG,wDAAuD;IACjEpB;EACF,CAAC,CAAC;EACF,OAAO,IAAI;AACb;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASS,uBAAuBA,CAAC;EACtCL,IAAI;EACJJ;AAIF,CAAC,EAAE;EACD,MAAMoC,QAAQ,GAAGnC,yBAAyB,CAAC;IAAED;EAAM,CAAC,CAAC;EACrD,IAAI2C,eAAyC,GAAG,CAAC,CAAC;EAClD1D,EAAE,CAAC0G,IAAI,CAACvD,QAAQ,EAAGwD,GAAG,IAAK;IACzB,IAAIA,GAAG,IAAI,IAAI,EAAE;MACf,MAAMnD,IAAI,GAAGxD,EAAE,CAACyD,YAAY,CAACN,QAAQ,EAAE,MAAM,CAAC;MAC9CO,eAAe,GAAGd,IAAI,CAACe,KAAK,CAACH,IAAI,CAAC;MAClC,MAAMvB,QAAQ,GAAGhB,sBAAsB,CAAC;QACtCC,kBAAkB,EAAEwC,eAAe;QACnCvC,IAAI;QACJJ;MACF,CAAC,CAAC;MACF,IAAIkB,QAAQ,CAACmC,MAAM,IAAI,CAAC,EAAE;QACxB,OAAOV,eAAe,CAACzB,QAAQ,CAAC,CAAC,CAAC,CAACC,MAAM,CAAC;QAC1ClC,EAAE,CAAC2C,aAAa,CAACQ,QAAQ,EAAEP,IAAI,CAACC,SAAS,CAACa,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACpErD,YAAY,CAAC;UACX8B,OAAO,EAAG,8BAA6BF,QAAQ,CAAC,CAAC,CAAC,CAACC,MAAO,EAAC;UAC3DnB;QACF,CAAC,CAAC;MACJ,CAAC,MAAM;QACL,IAAIkB,QAAQ,CAACmC,MAAM,GAAG,CAAC,EAAE;UACvB/D,YAAY,CAAC;YACX8B,OAAO,EAAG,mCAAkC;YAC5CkC,IAAI,EAAE,OAAO;YACbtD;UACF,CAAC,CAAC;UACFkB,QAAQ,CAACqC,OAAO,CAAEC,CAAC,IAAK;YACtBlE,YAAY,CAAC;cAAE8B,OAAO,EAAG,KAAIoC,CAAC,CAACrC,MAAO,EAAC;cAAEmC,IAAI,EAAE,OAAO;cAAEtD;YAAM,CAAC,CAAC;UAClE,CAAC,CAAC;UACFV,YAAY,CAAC;YACX8B,OAAO,EAAG,oCAAmC;YAC7CkC,IAAI,EAAE,OAAO;YACbtD;UACF,CAAC,CAAC;UACF,OAAO,IAAI;QACb,CAAC,MAAM;UACLV,YAAY,CAAC;YACX8B,OAAO,EAAG,yBAAwBhB,IAAK,QAAO;YAC9CJ;UACF,CAAC,CAAC;QACJ;MACF;IACF,CAAC,MAAM,IAAI4F,GAAG,CAACC,IAAI,KAAK,QAAQ,EAAE;MAChCvG,YAAY,CAAC;QACX8B,OAAO,EAAG,2BAA0BgB,QAAS,YAAW;QACxDpC;MACF,CAAC,CAAC;IACJ,CAAC,MAAM;MACLV,YAAY,CAAC;QACX8B,OAAO,EAAG,yCAAwCwE,GAAG,CAACC,IAAK,EAAC;QAC5DvC,IAAI,EAAE,OAAO;QACbtD;MACF,CAAC,CAAC;IACJ;EACF,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA,OAAO,eAAeU,oBAAoBA,CAAC;EACzCV;AAGF,CAAC,EAAsC;EACrCX,YAAY,CAAC;IACX+B,OAAO,EAAG,kDAAiD;IAC3DpB;EACF,CAAC,CAAC;EACF,MAAMgF,IAAI,GAAI,YAAW,IAAIc,IAAI,CAAC,CAAC,CAACC,OAAO,CAAC,CAAE,EAAC;EAC/C1G,YAAY,CAAC;IACX+B,OAAO,EAAG,mDAAkD4D,IAAK,KAAI;IACrEhF;EACF,CAAC,CAAC;EACF,MAAMgG,WAAW,GAAI,GAAEhG,KAAK,CAAC0E,WAAW,CAAC,CAAE,0BAAyB;EACpE,MAAMuB,KAAK,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,cAAc,CAAC;EACrD,MAAMC,UAAU,GAAG,MAAMzG,YAAY,CAAC,CAAC;EACvC,MAAM0G,SAAS,GAAG,MAAMxG,eAAe,CAACuG,UAAU,CAAC;EACnD,MAAME,IAAI,GAAG1G,UAAU,CAACyG,SAAS,CAAC;EAClC,MAAME,EAAE,GAAG,MAAMzG,oBAAoB,CAAC;IACpCoF,IAAI;IACJgB,WAAW;IACXM,aAAa,EAAE,QAAQ;IACvBC,MAAM,EAAEN,KAAK;IACbG,IAAI;IACJpG;EACF,CAAC,CAAC;EACFX,YAAY,CAAC;IACX+B,OAAO,EAAG,iDAAgDiF,EAAE,CAACG,GAAI,EAAC;IAClExG;EACF,CAAC,CAAC;EACFA,KAAK,CAACyG,mBAAmB,CAACJ,EAAE,CAACG,GAAG,CAAC;EACjCxG,KAAK,CAAC0G,oBAAoB,CAACR,UAAU,CAAC;EACtC7G,YAAY,CAAC;IACX+B,OAAO,EAAG,gDAA+C;IACzDpB;EACF,CAAC,CAAC;EACF,OAAOqG,EAAE;AACX"}
1
+ {"version":3,"file":"ConnectionProfileOps.js","names":["fs","os","path","DataProtection","debugMessage","printMessage","verboseMessage","Constants","createJwkRsa","createJwks","getJwkRsaPublic","createServiceAccount","getServiceAccount","saveJsonToFile","isValidUrl","state","getConnectionProfilesPath","findConnectionProfiles","connectionProfiles","host","initConnectionProfiles","getConnectionProfileByHost","getConnectionProfile","saveConnectionProfile","deleteConnectionProfile","addNewServiceAccount","fileOptions","indentation","legacyProfileFilename","newProfileFilename","process","env","FRODO_CONNECTION_PROFILES_PATH_KEY","homedir","profiles","tenant","message","includes","foundProfile","push","migrateFromLegacyProfile","legacyPath","newPath","existsSync","writeFileSync","JSON","stringify","copyFileSync","renameSync","dataProtection","pathToMasterKey","getMasterKeyPath","filename","folderName","dirname","mkdirSync","recursive","data","readFileSync","connectionsData","parse","convert","conn","Object","keys","encodedPassword","encrypt","encodedLogApiSecret","encodedSvcacctJwk","length","type","forEach","p","username","password","decrypt","logApiKey","logApiSecret","authenticationService","authenticationHeaderOverrides","svcacctName","svcacctId","svcacctJwk","e","getHost","profile","statSync","found","setHost","error","getUsername","getPassword","getLogApiKey","getLogApiSecret","getServiceAccountId","serviceAccountId","name","getServiceAccountJwk","getAuthenticationService","getAuthenticationHeaderOverrides","entries","orderedProfiles","sort","reduce","obj","key","includeMeta","stat","err","code","Date","getTime","description","scope","jwkPrivate","jwkPublic","jwks","sa","accountStatus","scopes","_id","setServiceAccountId","setServiceAccountJwk"],"sources":["../../src/ops/ConnectionProfileOps.ts"],"sourcesContent":["import fs from 'fs';\nimport os from 'os';\nimport path from 'path';\nimport DataProtection from './utils/DataProtection';\nimport { debugMessage, printMessage, verboseMessage } from './utils/Console';\nimport Constants from '../shared/Constants';\nimport { createJwkRsa, createJwks, getJwkRsaPublic, JwkRsa } from './JoseOps';\nimport {\n createServiceAccount,\n getServiceAccount,\n} from './cloud/ServiceAccountOps';\nimport { IdObjectSkeletonInterface } from '../api/ApiTypes';\nimport { saveJsonToFile } from './utils/ExportImportUtils';\nimport { isValidUrl } from './utils/OpsUtils';\nimport { State } from '../shared/State';\n\nexport type ConnectionProfile = {\n /**\n * Get connection profiles file name\n * @returns {string} connection profiles file name\n */\n getConnectionProfilesPath(): string;\n /**\n * Find connection profiles\n * @param {ConnectionsFileInterface} connectionProfiles connection profile object\n * @param {string} host host url or unique substring\n * @returns {SecureConnectionProfileInterface[]} Array of connection profiles\n */\n findConnectionProfiles(\n connectionProfiles: ConnectionsFileInterface,\n host: string\n ): SecureConnectionProfileInterface[];\n /**\n * Initialize connection profiles\n *\n * This method is called from app.ts and runs before any of the message handlers are registered.\n * Therefore none of the Console message functions will produce any output.\n */\n initConnectionProfiles(): Promise<void>;\n /**\n * Get connection profile by host\n * @param {String} host host tenant host url or unique substring\n * @returns {Object} connection profile or null\n */\n getConnectionProfileByHost(host: string): Promise<ConnectionProfileInterface>;\n /**\n * Get connection profile\n * @returns {Object} connection profile or null\n */\n getConnectionProfile(): Promise<ConnectionProfileInterface>;\n /**\n * Save connection profile\n * @param {string} host host url for new profiles or unique substring for existing profiles\n * @returns {Promise<boolean>} true if the operation succeeded, false otherwise\n */\n saveConnectionProfile(host: string): Promise<boolean>;\n /**\n * Delete connection profile\n * @param {string} host host tenant host url or unique substring\n */\n deleteConnectionProfile(host: string): void;\n /**\n * Create a new service account using auto-generated parameters\n * @returns {Promise<IdObjectSkeletonInterface>} A promise resolving to a service account object\n */\n addNewServiceAccount(): Promise<IdObjectSkeletonInterface>;\n};\n\nexport default (state: State): ConnectionProfile => {\n return {\n /**\n * Get connection profiles file name\n * @returns {string} connection profiles file name\n */\n getConnectionProfilesPath(): string {\n return getConnectionProfilesPath({ state });\n },\n\n /**\n * Find connection profiles\n * @param {ConnectionsFileInterface} connectionProfiles connection profile object\n * @param {string} host host url or unique substring\n * @returns {SecureConnectionProfileInterface[]} Array of connection profiles\n */\n findConnectionProfiles(\n connectionProfiles: ConnectionsFileInterface,\n host: string\n ): SecureConnectionProfileInterface[] {\n return findConnectionProfiles({\n connectionProfiles,\n host,\n state,\n });\n },\n\n /**\n * Initialize connection profiles\n *\n * This method is called from app.ts and runs before any of the message handlers are registered.\n * Therefore none of the Console message functions will produce any output.\n */\n async initConnectionProfiles() {\n initConnectionProfiles({ state });\n },\n\n /**\n * Get connection profile by host\n * @param {String} host host tenant host url or unique substring\n * @returns {Object} connection profile or null\n */\n async getConnectionProfileByHost(\n host: string\n ): Promise<ConnectionProfileInterface> {\n return getConnectionProfileByHost({ host, state });\n },\n\n /**\n * Get connection profile\n * @returns {Object} connection profile or null\n */\n async getConnectionProfile(): Promise<ConnectionProfileInterface> {\n return getConnectionProfile({ state });\n },\n\n /**\n * Save connection profile\n * @param {string} host host url for new profiles or unique substring for existing profiles\n * @returns {Promise<boolean>} true if the operation succeeded, false otherwise\n */\n async saveConnectionProfile(host: string): Promise<boolean> {\n return saveConnectionProfile({ host, state });\n },\n\n /**\n * Delete connection profile\n * @param {string} host host tenant host url or unique substring\n */\n deleteConnectionProfile(host: string): void {\n deleteConnectionProfile({ host, state });\n },\n\n /**\n * Create a new service account using auto-generated parameters\n * @returns {Promise<IdObjectSkeletonInterface>} A promise resolving to a service account object\n */\n async addNewServiceAccount(): Promise<IdObjectSkeletonInterface> {\n return addNewServiceAccount({ state });\n },\n };\n};\n\nconst fileOptions = {\n indentation: 4,\n};\n\nexport interface SecureConnectionProfileInterface {\n tenant: string;\n username?: string | null;\n encodedPassword?: string | null;\n logApiKey?: string | null;\n encodedLogApiSecret?: string | null;\n authenticationService?: string | null;\n authenticationHeaderOverrides?: Record<string, string>;\n svcacctId?: string | null;\n encodedSvcacctJwk?: string | null;\n svcacctName?: string | null;\n}\n\nexport interface ConnectionProfileInterface {\n tenant: string;\n username?: string | null;\n password?: string | null;\n logApiKey?: string | null;\n logApiSecret?: string | null;\n authenticationService?: string | null;\n authenticationHeaderOverrides?: Record<string, string>;\n svcacctId?: string | null;\n svcacctJwk?: JwkRsa;\n svcacctName?: string | null;\n}\n\nexport interface ConnectionsFileInterface {\n [key: string]: SecureConnectionProfileInterface;\n}\n\nconst legacyProfileFilename = '.frodorc';\nconst newProfileFilename = 'Connections.json';\n\n/**\n * Get connection profiles file name\n * @param {State} state library state\n * @returns {String} connection profiles file name\n */\nexport function getConnectionProfilesPath({ state }: { state: State }): string {\n return (\n state.getConnectionProfilesPath() ||\n process.env[Constants.FRODO_CONNECTION_PROFILES_PATH_KEY] ||\n `${os.homedir()}/.frodo/${newProfileFilename}`\n );\n}\n\n/**\n * Find connection profiles\n * @param {ConnectionsFileInterface} connectionProfiles connection profile object\n * @param {string} host host url or unique substring\n * @param {State} state library state\n * @returns {SecureConnectionProfileInterface[]} Array of connection profiles\n */\nfunction findConnectionProfiles({\n connectionProfiles,\n host,\n state,\n}: {\n connectionProfiles: ConnectionsFileInterface;\n host: string;\n state: State;\n}): SecureConnectionProfileInterface[] {\n const profiles: SecureConnectionProfileInterface[] = [];\n for (const tenant in connectionProfiles) {\n debugMessage({\n message: `ConnectionProfileOps.findConnectionProfiles: tenant=${tenant}`,\n state,\n });\n if (tenant.includes(host)) {\n debugMessage({\n message: `ConnectionProfileOps.findConnectionProfiles: '${host}' identifies '${tenant}', including in result set`,\n state,\n });\n const foundProfile = { ...connectionProfiles[tenant] };\n foundProfile.tenant = tenant;\n profiles.push(foundProfile);\n }\n }\n return profiles;\n}\n\n/**\n * Migrate from .frodorc to Connections.json\n */\nfunction migrateFromLegacyProfile() {\n const legacyPath = `${os.homedir()}/.frodo/${legacyProfileFilename}`;\n const newPath = `${os.homedir()}/.frodo/${newProfileFilename}`;\n if (!fs.existsSync(legacyPath) && !fs.existsSync(newPath)) {\n // no connections file (old or new), create empty new one\n fs.writeFileSync(\n newPath,\n JSON.stringify({}, null, fileOptions.indentation)\n );\n } else if (fs.existsSync(legacyPath) && !fs.existsSync(newPath)) {\n // old exists, new one does not - so copy old to new one\n fs.copyFileSync(legacyPath, newPath);\n // for now, just add a \"deprecated\" suffix. May delete the old file\n // in a future release\n fs.renameSync(legacyPath, `${legacyPath}.deprecated`);\n }\n // in other cases, where\n // (both old and new exist) OR (only new one exists) don't do anything\n}\n\n/**\n * Initialize connection profiles\n *\n * This method is called from app.ts and runs before any of the message handlers are registered.\n * Therefore none of the Console message functions will produce any output.\n * @param {State} state library state\n */\nexport async function initConnectionProfiles({ state }: { state: State }) {\n const dataProtection = new DataProtection({\n pathToMasterKey: state.getMasterKeyPath(),\n state,\n });\n // create connections.json file if it doesn't exist\n const filename = getConnectionProfilesPath({ state });\n const folderName = path.dirname(filename);\n if (!fs.existsSync(folderName)) {\n fs.mkdirSync(folderName, { recursive: true });\n if (!fs.existsSync(filename)) {\n fs.writeFileSync(\n filename,\n JSON.stringify({}, null, fileOptions.indentation)\n );\n }\n }\n // encrypt the password and logApiSecret from clear text to aes-256-GCM\n else {\n migrateFromLegacyProfile();\n const data = fs.readFileSync(filename, 'utf8');\n const connectionsData: ConnectionsFileInterface = JSON.parse(data);\n let convert = false;\n for (const conn of Object.keys(connectionsData)) {\n if (connectionsData[conn]['password']) {\n convert = true;\n connectionsData[conn].encodedPassword = await dataProtection.encrypt(\n connectionsData[conn]['password']\n );\n delete connectionsData[conn]['password'];\n }\n if (connectionsData[conn]['logApiSecret']) {\n convert = true;\n connectionsData[conn].encodedLogApiSecret =\n await dataProtection.encrypt(connectionsData[conn]['logApiSecret']);\n delete connectionsData[conn]['logApiSecret'];\n }\n if (connectionsData[conn]['svcacctJwk']) {\n convert = true;\n connectionsData[conn].encodedSvcacctJwk = await dataProtection.encrypt(\n connectionsData[conn]['svcacctJwk']\n );\n delete connectionsData[conn]['svcacctJwk'];\n }\n }\n if (convert) {\n fs.writeFileSync(\n filename,\n JSON.stringify(connectionsData, null, fileOptions.indentation)\n );\n }\n }\n}\n\n/**\n * Get connection profile by host\n * @param {String} host host tenant host url or unique substring\n * @param {State} state library state\n * @returns {Object} connection profile or null\n */\nexport async function getConnectionProfileByHost({\n host,\n state,\n}: {\n host: string;\n state: State;\n}): Promise<ConnectionProfileInterface> {\n try {\n const dataProtection = new DataProtection({\n pathToMasterKey: state.getMasterKeyPath(),\n state,\n });\n const filename = getConnectionProfilesPath({ state });\n const connectionsData = JSON.parse(fs.readFileSync(filename, 'utf8'));\n const profiles = findConnectionProfiles({\n connectionProfiles: connectionsData,\n host,\n state,\n });\n if (profiles.length == 0) {\n printMessage({\n message: `Profile for ${host} not found. Please specify credentials on command line`,\n type: 'error',\n state,\n });\n return null;\n }\n if (profiles.length > 1) {\n printMessage({\n message: `Multiple matching profiles found.`,\n type: 'error',\n state,\n });\n profiles.forEach((p) => {\n printMessage({ message: `- ${p.tenant}`, type: 'error', state });\n });\n printMessage({\n message: `Please specify a unique sub-string`,\n type: 'error',\n state,\n });\n return null;\n }\n return {\n tenant: profiles[0].tenant,\n username: profiles[0].username ? profiles[0].username : null,\n password: profiles[0].encodedPassword\n ? await dataProtection.decrypt(profiles[0].encodedPassword)\n : null,\n logApiKey: profiles[0].logApiKey ? profiles[0].logApiKey : null,\n logApiSecret: profiles[0].encodedLogApiSecret\n ? await dataProtection.decrypt(profiles[0].encodedLogApiSecret)\n : null,\n authenticationService: profiles[0].authenticationService\n ? profiles[0].authenticationService\n : null,\n authenticationHeaderOverrides: profiles[0].authenticationHeaderOverrides\n ? profiles[0].authenticationHeaderOverrides\n : {},\n svcacctName: profiles[0].svcacctName ? profiles[0].svcacctName : null,\n svcacctId: profiles[0].svcacctId ? profiles[0].svcacctId : null,\n svcacctJwk: profiles[0].encodedSvcacctJwk\n ? await dataProtection.decrypt(profiles[0].encodedSvcacctJwk)\n : null,\n };\n } catch (e) {\n printMessage({\n message: `Can not read saved connection info, please specify credentials on command line: ${e}`,\n type: 'error',\n state,\n });\n return null;\n }\n}\n\n/**\n * Get connection profile\n * @returns {Object} connection profile or null\n */\nexport async function getConnectionProfile({\n state,\n}: {\n state: State;\n}): Promise<ConnectionProfileInterface> {\n return getConnectionProfileByHost({ host: state.getHost(), state });\n}\n\n/**\n * Save connection profile\n * @param {string} host host url for new profiles or unique substring for existing profiles\n * @returns {Promise<boolean>} true if the operation succeeded, false otherwise\n */\nexport async function saveConnectionProfile({\n host,\n state,\n}: {\n host: string;\n state: State;\n}): Promise<boolean> {\n debugMessage({\n message: `ConnectionProfileOps.saveConnectionProfile: start`,\n state,\n });\n const dataProtection = new DataProtection({\n pathToMasterKey: state.getMasterKeyPath(),\n state,\n });\n const filename = getConnectionProfilesPath({ state });\n debugMessage({ message: `Saving connection profile in ${filename}`, state });\n let profiles: ConnectionsFileInterface = {};\n let profile: SecureConnectionProfileInterface = { tenant: '' };\n try {\n fs.statSync(filename);\n const data = fs.readFileSync(filename, 'utf8');\n profiles = JSON.parse(data);\n\n // find tenant\n const found = findConnectionProfiles({\n connectionProfiles: profiles,\n host,\n state,\n });\n\n // replace tenant in session with real tenant url if necessary\n if (found.length === 1) {\n profile = found[0];\n state.setHost(profile.tenant);\n verboseMessage({ message: `Existing profile: ${profile.tenant}`, state });\n debugMessage({ message: profile, state });\n }\n\n // connection profile not found, validate host is a real URL\n if (found.length === 0) {\n if (isValidUrl(host)) {\n state.setHost(host);\n debugMessage({ message: `New profile: ${host}`, state });\n } else {\n printMessage({\n message: `No existing profile found matching '${host}'. Provide a valid URL as the host argument to create a new profile.`,\n type: 'error',\n state,\n });\n debugMessage({\n message: `ConnectionProfileOps.saveConnectionProfile: end [false]`,\n state,\n });\n return false;\n }\n }\n } catch (error) {\n debugMessage({\n message: `New profiles file ${filename} with new profile ${host}`,\n state,\n });\n }\n\n // user account\n if (state.getUsername()) profile.username = state.getUsername();\n if (state.getPassword())\n profile.encodedPassword = await dataProtection.encrypt(state.getPassword());\n\n // log API\n if (state.getLogApiKey()) profile.logApiKey = state.getLogApiKey();\n if (state.getLogApiSecret())\n profile.encodedLogApiSecret = await dataProtection.encrypt(\n state.getLogApiSecret()\n );\n\n // service account\n if (state.getServiceAccountId()) {\n profile.svcacctId = state.getServiceAccountId();\n profile.svcacctName = (\n await getServiceAccount({\n serviceAccountId: state.getServiceAccountId(),\n state,\n })\n ).name;\n }\n if (state.getServiceAccountJwk())\n profile.encodedSvcacctJwk = await dataProtection.encrypt(\n state.getServiceAccountJwk()\n );\n // update existing service account profile\n if (profile.svcacctId && !profile.svcacctName) {\n profile.svcacctName = (\n await getServiceAccount({ serviceAccountId: profile.svcacctId, state })\n ).name;\n debugMessage({\n message: `ConnectionProfileOps.saveConnectionProfile: added missing service account name`,\n state,\n });\n }\n\n // advanced settings\n if (state.getAuthenticationService()) {\n profile.authenticationService = state.getAuthenticationService();\n printMessage({\n message:\n 'Advanced setting: Authentication Service: ' +\n state.getAuthenticationService(),\n type: 'info',\n state,\n });\n }\n if (\n state.getAuthenticationHeaderOverrides() &&\n Object.entries(state.getAuthenticationHeaderOverrides()).length\n ) {\n profile.authenticationHeaderOverrides =\n state.getAuthenticationHeaderOverrides();\n printMessage({\n message: 'Advanced setting: Authentication Header Overrides: ',\n type: 'info',\n state,\n });\n printMessage({\n message: state.getAuthenticationHeaderOverrides(),\n type: 'info',\n state,\n });\n }\n\n // remove the helper key 'tenant'\n delete profile.tenant;\n\n // update profiles\n profiles[state.getHost()] = profile;\n\n // sort profiles\n const orderedProfiles = Object.keys(profiles)\n .sort()\n .reduce((obj, key) => {\n obj[key] = profiles[key];\n return obj;\n }, {});\n\n // save profiles\n saveJsonToFile({\n data: orderedProfiles,\n filename,\n includeMeta: false,\n state,\n });\n verboseMessage({\n message: `Saved connection profile ${state.getHost()} in ${filename}`,\n state,\n });\n debugMessage({\n message: `ConnectionProfileOps.saveConnectionProfile: end [true]`,\n state,\n });\n return true;\n}\n\n/**\n * Delete connection profile\n * @param {String} host host tenant host url or unique substring\n */\nexport function deleteConnectionProfile({\n host,\n state,\n}: {\n host: string;\n state: State;\n}) {\n const filename = getConnectionProfilesPath({ state });\n let connectionsData: ConnectionsFileInterface = {};\n fs.stat(filename, (err) => {\n if (err == null) {\n const data = fs.readFileSync(filename, 'utf8');\n connectionsData = JSON.parse(data);\n const profiles = findConnectionProfiles({\n connectionProfiles: connectionsData,\n host,\n state,\n });\n if (profiles.length == 1) {\n delete connectionsData[profiles[0].tenant];\n fs.writeFileSync(filename, JSON.stringify(connectionsData, null, 2));\n printMessage({\n message: `Deleted connection profile ${profiles[0].tenant}`,\n state,\n });\n } else {\n if (profiles.length > 1) {\n printMessage({\n message: `Multiple matching profiles found.`,\n type: 'error',\n state,\n });\n profiles.forEach((p) => {\n printMessage({ message: `- ${p.tenant}`, type: 'error', state });\n });\n printMessage({\n message: `Please specify a unique sub-string`,\n type: 'error',\n state,\n });\n return null;\n } else {\n printMessage({\n message: `No connection profile ${host} found`,\n state,\n });\n }\n }\n } else if (err.code === 'ENOENT') {\n printMessage({\n message: `Connection profile file ${filename} not found`,\n state,\n });\n } else {\n printMessage({\n message: `Error in deleting connection profile: ${err.code}`,\n type: 'error',\n state,\n });\n }\n });\n}\n\n/**\n * Create a new service account using auto-generated parameters\n * @returns {Promise<IdObjectSkeletonInterface>} A promise resolving to a service account object\n */\nexport async function addNewServiceAccount({\n state,\n}: {\n state: State;\n}): Promise<IdObjectSkeletonInterface> {\n debugMessage({\n message: `ConnectionProfileOps.addNewServiceAccount: start`,\n state,\n });\n const name = `Frodo-SA-${new Date().getTime()}`;\n debugMessage({\n message: `ConnectionProfileOps.addNewServiceAccount: name=${name}...`,\n state,\n });\n const description = `${state.getUsername()}'s Frodo Service Account`;\n const scope = ['fr:am:*', 'fr:idm:*', 'fr:idc:esv:*'];\n const jwkPrivate = await createJwkRsa();\n const jwkPublic = await getJwkRsaPublic(jwkPrivate);\n const jwks = createJwks(jwkPublic);\n const sa = await createServiceAccount({\n name,\n description,\n accountStatus: 'Active',\n scopes: scope,\n jwks,\n state,\n });\n debugMessage({\n message: `ConnectionProfileOps.addNewServiceAccount: id=${sa._id}`,\n state,\n });\n state.setServiceAccountId(sa._id);\n state.setServiceAccountJwk(jwkPrivate);\n debugMessage({\n message: `ConnectionProfileOps.addNewServiceAccount: end`,\n state,\n });\n return sa;\n}\n"],"mappings":"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"}
@@ -10,7 +10,7 @@ import fs from 'fs';
10
10
  import { homedir } from 'os';
11
11
  import { state } from "../index.js";
12
12
  import * as ConnectionProfileOps from "./ConnectionProfileOps.js";
13
- import { FRODO_CONNECTION_PROFILES_PATH_KEY, FRODO_MASTER_KEY_PATH_KEY, FRODO_MASTER_KEY_KEY } from "../storage/StaticStorage.js";
13
+ import Constants from "../shared/Constants.js";
14
14
  describe('ConnectionProfileOps', () => {
15
15
  const connectionProfilePath1 = `${homedir()}/connections1.json`;
16
16
  const connectionProfilePath2 = `${homedir()}/connections2.json`;
@@ -73,12 +73,12 @@ describe('ConnectionProfileOps', () => {
73
73
  expect(connections[host].username).toEqual(user);
74
74
  expect(connections[host].encodedPassword).toBeTruthy();
75
75
  });
76
- test(`2: Create connection profiles in location from env ${FRODO_MASTER_KEY_PATH_KEY}`, async () => {
76
+ test(`2: Create connection profiles in location from env ${Constants.FRODO_MASTER_KEY_PATH_KEY}`, async () => {
77
77
  const host = 'https://openam-tenant-name.forgeblocks.com/am';
78
78
  const user = 'frodo.baggins@shire.me';
79
79
  const password = 'G@nd@lfTheW153';
80
80
  // set the hard-coded master key
81
- process.env[FRODO_CONNECTION_PROFILES_PATH_KEY] = connectionProfilePath2;
81
+ process.env[Constants.FRODO_CONNECTION_PROFILES_PATH_KEY] = connectionProfilePath2;
82
82
  state.setHost(host);
83
83
  state.setUsername(user);
84
84
  state.setPassword(password);
@@ -97,13 +97,13 @@ describe('ConnectionProfileOps', () => {
97
97
  expect(connections[host].username).toEqual(user);
98
98
  expect(connections[host].encodedPassword).toBeTruthy();
99
99
  });
100
- test(`3: Use Master Key from env ${FRODO_MASTER_KEY_KEY}`, async () => {
100
+ test(`3: Use Master Key from env ${Constants.FRODO_MASTER_KEY_KEY}`, async () => {
101
101
  const host = 'https://openam-tenant-name.forgeblocks.com/am';
102
102
  const user = 'frodo.baggins@shire.me';
103
103
  const password = 'G@nd@lfTheW153';
104
104
  const masterKey = 'bxnQlhcU5VfyDs+BBPhRhK09yHaNtdIIk85HUMKBnqg=';
105
105
  // set the hard-coded master key
106
- process.env[FRODO_MASTER_KEY_KEY] = masterKey;
106
+ process.env[Constants.FRODO_MASTER_KEY_KEY] = masterKey;
107
107
  state.setHost(host);
108
108
  state.setUsername(user);
109
109
  state.setPassword(password);