@uapkg/cli 1.2.0 → 1.3.1

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 (412) hide show
  1. package/dist/app/CompositionRoot.d.ts +36 -33
  2. package/dist/app/CompositionRoot.d.ts.map +1 -1
  3. package/dist/app/CompositionRoot.js +91 -109
  4. package/dist/app/CompositionRoot.js.map +1 -1
  5. package/dist/app/UAPKGApplication.d.ts +6 -3
  6. package/dist/app/UAPKGApplication.d.ts.map +1 -1
  7. package/dist/app/UAPKGApplication.js +155 -169
  8. package/dist/app/UAPKGApplication.js.map +1 -1
  9. package/dist/build/BuildMetadata.d.ts +9 -6
  10. package/dist/build/BuildMetadata.d.ts.map +1 -1
  11. package/dist/build/BuildMetadata.js +2 -2
  12. package/dist/cli/UAPKGCommandLine.d.ts +259 -257
  13. package/dist/cli/UAPKGCommandLine.d.ts.map +1 -1
  14. package/dist/cli/UAPKGCommandLine.js +248 -239
  15. package/dist/cli/UAPKGCommandLine.js.map +1 -1
  16. package/dist/cli/parseCommandLine.d.ts +5 -1
  17. package/dist/cli/parseCommandLine.d.ts.map +1 -1
  18. package/dist/cli/parseCommandLine.js +8 -3
  19. package/dist/cli/parseCommandLine.js.map +1 -1
  20. package/dist/cli/parsing/UAPKGCommandLineParser.d.ts +9 -6
  21. package/dist/cli/parsing/UAPKGCommandLineParser.d.ts.map +1 -1
  22. package/dist/cli/parsing/UAPKGCommandLineParser.js +23 -31
  23. package/dist/cli/parsing/UAPKGCommandLineParser.js.map +1 -1
  24. package/dist/cli/parsing/UAPKGParserRegistry.d.ts +12 -9
  25. package/dist/cli/parsing/UAPKGParserRegistry.d.ts.map +1 -1
  26. package/dist/cli/parsing/UAPKGParserRegistry.js +53 -50
  27. package/dist/cli/parsing/UAPKGParserRegistry.js.map +1 -1
  28. package/dist/cli/parsing/contracts/UAPKGCommandModule.d.ts +9 -6
  29. package/dist/cli/parsing/contracts/UAPKGCommandModule.d.ts.map +1 -1
  30. package/dist/cli/parsing/contracts/UAPKGCommandModule.js +1 -2
  31. package/dist/cli/parsing/modules/AddCommandModule.d.ts +8 -5
  32. package/dist/cli/parsing/modules/AddCommandModule.d.ts.map +1 -1
  33. package/dist/cli/parsing/modules/AddCommandModule.js +49 -36
  34. package/dist/cli/parsing/modules/AddCommandModule.js.map +1 -1
  35. package/dist/cli/parsing/modules/ConfigCommandModule.d.ts +8 -5
  36. package/dist/cli/parsing/modules/ConfigCommandModule.d.ts.map +1 -1
  37. package/dist/cli/parsing/modules/ConfigCommandModule.js +87 -83
  38. package/dist/cli/parsing/modules/ConfigCommandModule.js.map +1 -1
  39. package/dist/cli/parsing/modules/InitCommandModule.d.ts +8 -5
  40. package/dist/cli/parsing/modules/InitCommandModule.d.ts.map +1 -1
  41. package/dist/cli/parsing/modules/InitCommandModule.js +25 -22
  42. package/dist/cli/parsing/modules/InitCommandModule.js.map +1 -1
  43. package/dist/cli/parsing/modules/InstallCommandModule.d.ts +8 -5
  44. package/dist/cli/parsing/modules/InstallCommandModule.d.ts.map +1 -1
  45. package/dist/cli/parsing/modules/InstallCommandModule.js +36 -28
  46. package/dist/cli/parsing/modules/InstallCommandModule.js.map +1 -1
  47. package/dist/cli/parsing/modules/LifecycleCommandModule.d.ts +8 -5
  48. package/dist/cli/parsing/modules/LifecycleCommandModule.d.ts.map +1 -1
  49. package/dist/cli/parsing/modules/LifecycleCommandModule.js +78 -50
  50. package/dist/cli/parsing/modules/LifecycleCommandModule.js.map +1 -1
  51. package/dist/cli/parsing/modules/ListCommandModule.d.ts +8 -5
  52. package/dist/cli/parsing/modules/ListCommandModule.d.ts.map +1 -1
  53. package/dist/cli/parsing/modules/ListCommandModule.js +26 -15
  54. package/dist/cli/parsing/modules/ListCommandModule.js.map +1 -1
  55. package/dist/cli/parsing/modules/LoginCommandModule.d.ts +8 -5
  56. package/dist/cli/parsing/modules/LoginCommandModule.d.ts.map +1 -1
  57. package/dist/cli/parsing/modules/LoginCommandModule.js +34 -33
  58. package/dist/cli/parsing/modules/LoginCommandModule.js.map +1 -1
  59. package/dist/cli/parsing/modules/LogoutCommandModule.d.ts +8 -5
  60. package/dist/cli/parsing/modules/LogoutCommandModule.d.ts.map +1 -1
  61. package/dist/cli/parsing/modules/LogoutCommandModule.js +30 -28
  62. package/dist/cli/parsing/modules/LogoutCommandModule.js.map +1 -1
  63. package/dist/cli/parsing/modules/OutdatedCommandModule.d.ts +8 -5
  64. package/dist/cli/parsing/modules/OutdatedCommandModule.d.ts.map +1 -1
  65. package/dist/cli/parsing/modules/OutdatedCommandModule.js +21 -16
  66. package/dist/cli/parsing/modules/OutdatedCommandModule.js.map +1 -1
  67. package/dist/cli/parsing/modules/PackCommandModule.d.ts +8 -5
  68. package/dist/cli/parsing/modules/PackCommandModule.d.ts.map +1 -1
  69. package/dist/cli/parsing/modules/PackCommandModule.js +30 -28
  70. package/dist/cli/parsing/modules/PackCommandModule.js.map +1 -1
  71. package/dist/cli/parsing/modules/ProjectGetNameCommandModule.d.ts +8 -5
  72. package/dist/cli/parsing/modules/ProjectGetNameCommandModule.d.ts.map +1 -1
  73. package/dist/cli/parsing/modules/ProjectGetNameCommandModule.js +14 -11
  74. package/dist/cli/parsing/modules/ProjectGetNameCommandModule.js.map +1 -1
  75. package/dist/cli/parsing/modules/PublishCommandModule.d.ts +8 -5
  76. package/dist/cli/parsing/modules/PublishCommandModule.d.ts.map +1 -1
  77. package/dist/cli/parsing/modules/PublishCommandModule.js +63 -47
  78. package/dist/cli/parsing/modules/PublishCommandModule.js.map +1 -1
  79. package/dist/cli/parsing/modules/RegistryCommandModule.d.ts +8 -5
  80. package/dist/cli/parsing/modules/RegistryCommandModule.d.ts.map +1 -1
  81. package/dist/cli/parsing/modules/RegistryCommandModule.js +117 -120
  82. package/dist/cli/parsing/modules/RegistryCommandModule.js.map +1 -1
  83. package/dist/cli/parsing/modules/RemoveCommandModule.d.ts +8 -5
  84. package/dist/cli/parsing/modules/RemoveCommandModule.d.ts.map +1 -1
  85. package/dist/cli/parsing/modules/RemoveCommandModule.js +25 -14
  86. package/dist/cli/parsing/modules/RemoveCommandModule.js.map +1 -1
  87. package/dist/cli/parsing/modules/RequestsCommandModule.d.ts +8 -5
  88. package/dist/cli/parsing/modules/RequestsCommandModule.d.ts.map +1 -1
  89. package/dist/cli/parsing/modules/RequestsCommandModule.js +56 -60
  90. package/dist/cli/parsing/modules/RequestsCommandModule.js.map +1 -1
  91. package/dist/cli/parsing/modules/UpdateCommandModule.d.ts +8 -5
  92. package/dist/cli/parsing/modules/UpdateCommandModule.d.ts.map +1 -1
  93. package/dist/cli/parsing/modules/UpdateCommandModule.js +38 -25
  94. package/dist/cli/parsing/modules/UpdateCommandModule.js.map +1 -1
  95. package/dist/cli/parsing/modules/WhoamiCommandModule.d.ts +8 -5
  96. package/dist/cli/parsing/modules/WhoamiCommandModule.d.ts.map +1 -1
  97. package/dist/cli/parsing/modules/WhoamiCommandModule.js +30 -28
  98. package/dist/cli/parsing/modules/WhoamiCommandModule.js.map +1 -1
  99. package/dist/cli/parsing/modules/WhyCommandModule.d.ts +8 -5
  100. package/dist/cli/parsing/modules/WhyCommandModule.d.ts.map +1 -1
  101. package/dist/cli/parsing/modules/WhyCommandModule.js +25 -14
  102. package/dist/cli/parsing/modules/WhyCommandModule.js.map +1 -1
  103. package/dist/cli/parsing/modules/sharedOptions.d.ts +8 -5
  104. package/dist/cli/parsing/modules/sharedOptions.d.ts.map +1 -1
  105. package/dist/cli/parsing/modules/sharedOptions.js +18 -23
  106. package/dist/cli/parsing/modules/sharedOptions.js.map +1 -1
  107. package/dist/cli/runUAPKGCLI.d.ts +4 -1
  108. package/dist/cli/runUAPKGCLI.d.ts.map +1 -1
  109. package/dist/cli/runUAPKGCLI.js +10 -5
  110. package/dist/cli/runUAPKGCLI.js.map +1 -1
  111. package/dist/cli-bootstrap.d.ts +1 -2
  112. package/dist/cli-bootstrap.js +15 -12
  113. package/dist/cli-bootstrap.js.map +1 -1
  114. package/dist/commands/AddCommand.d.ts +19 -16
  115. package/dist/commands/AddCommand.d.ts.map +1 -1
  116. package/dist/commands/AddCommand.js +49 -53
  117. package/dist/commands/AddCommand.js.map +1 -1
  118. package/dist/commands/Command.d.ts +5 -2
  119. package/dist/commands/Command.d.ts.map +1 -1
  120. package/dist/commands/Command.js +1 -2
  121. package/dist/commands/ConfigCommand.d.ts +28 -25
  122. package/dist/commands/ConfigCommand.d.ts.map +1 -1
  123. package/dist/commands/ConfigCommand.js +165 -186
  124. package/dist/commands/ConfigCommand.js.map +1 -1
  125. package/dist/commands/InitCommand.d.ts +19 -16
  126. package/dist/commands/InitCommand.d.ts.map +1 -1
  127. package/dist/commands/InitCommand.js +65 -60
  128. package/dist/commands/InitCommand.js.map +1 -1
  129. package/dist/commands/InstallCommand.d.ts +16 -13
  130. package/dist/commands/InstallCommand.d.ts.map +1 -1
  131. package/dist/commands/InstallCommand.js +118 -110
  132. package/dist/commands/InstallCommand.js.map +1 -1
  133. package/dist/commands/ListCommand.d.ts +13 -10
  134. package/dist/commands/ListCommand.d.ts.map +1 -1
  135. package/dist/commands/ListCommand.js +76 -81
  136. package/dist/commands/ListCommand.js.map +1 -1
  137. package/dist/commands/LoginCommand.d.ts +17 -14
  138. package/dist/commands/LoginCommand.d.ts.map +1 -1
  139. package/dist/commands/LoginCommand.js +66 -72
  140. package/dist/commands/LoginCommand.js.map +1 -1
  141. package/dist/commands/LogoutCommand.d.ts +15 -12
  142. package/dist/commands/LogoutCommand.d.ts.map +1 -1
  143. package/dist/commands/LogoutCommand.js +36 -37
  144. package/dist/commands/LogoutCommand.js.map +1 -1
  145. package/dist/commands/OutdatedCommand.d.ts +12 -9
  146. package/dist/commands/OutdatedCommand.d.ts.map +1 -1
  147. package/dist/commands/OutdatedCommand.js +41 -40
  148. package/dist/commands/OutdatedCommand.js.map +1 -1
  149. package/dist/commands/PackCommand.d.ts +13 -10
  150. package/dist/commands/PackCommand.d.ts.map +1 -1
  151. package/dist/commands/PackCommand.js +26 -21
  152. package/dist/commands/PackCommand.js.map +1 -1
  153. package/dist/commands/PackageLifecycleCommand.d.ts +23 -19
  154. package/dist/commands/PackageLifecycleCommand.d.ts.map +1 -1
  155. package/dist/commands/PackageLifecycleCommand.js +144 -129
  156. package/dist/commands/PackageLifecycleCommand.js.map +1 -1
  157. package/dist/commands/PostinstallCandidateBuilder.d.ts +11 -8
  158. package/dist/commands/PostinstallCandidateBuilder.d.ts.map +1 -1
  159. package/dist/commands/PostinstallCandidateBuilder.js +42 -42
  160. package/dist/commands/PostinstallCandidateBuilder.js.map +1 -1
  161. package/dist/commands/ProjectGetNameCommand.d.ts +10 -7
  162. package/dist/commands/ProjectGetNameCommand.d.ts.map +1 -1
  163. package/dist/commands/ProjectGetNameCommand.js +25 -25
  164. package/dist/commands/ProjectGetNameCommand.js.map +1 -1
  165. package/dist/commands/PublishCommand.d.ts +29 -23
  166. package/dist/commands/PublishCommand.d.ts.map +1 -1
  167. package/dist/commands/PublishCommand.js +243 -244
  168. package/dist/commands/PublishCommand.js.map +1 -1
  169. package/dist/commands/RegistryCommand.d.ts +38 -35
  170. package/dist/commands/RegistryCommand.d.ts.map +1 -1
  171. package/dist/commands/RegistryCommand.js +195 -223
  172. package/dist/commands/RegistryCommand.js.map +1 -1
  173. package/dist/commands/RemoveCommand.d.ts +14 -11
  174. package/dist/commands/RemoveCommand.d.ts.map +1 -1
  175. package/dist/commands/RemoveCommand.js +47 -54
  176. package/dist/commands/RemoveCommand.js.map +1 -1
  177. package/dist/commands/RequestsCommand.d.ts +21 -18
  178. package/dist/commands/RequestsCommand.d.ts.map +1 -1
  179. package/dist/commands/RequestsCommand.js +82 -95
  180. package/dist/commands/RequestsCommand.js.map +1 -1
  181. package/dist/commands/UpdateCommand.d.ts +29 -26
  182. package/dist/commands/UpdateCommand.d.ts.map +1 -1
  183. package/dist/commands/UpdateCommand.js +111 -111
  184. package/dist/commands/UpdateCommand.js.map +1 -1
  185. package/dist/commands/WhoamiCommand.d.ts +30 -27
  186. package/dist/commands/WhoamiCommand.d.ts.map +1 -1
  187. package/dist/commands/WhoamiCommand.js +63 -72
  188. package/dist/commands/WhoamiCommand.js.map +1 -1
  189. package/dist/commands/WhyCommand.d.ts +13 -10
  190. package/dist/commands/WhyCommand.d.ts.map +1 -1
  191. package/dist/commands/WhyCommand.js +45 -44
  192. package/dist/commands/WhyCommand.js.map +1 -1
  193. package/dist/commands/add/DependencyAddResolver.d.ts +14 -11
  194. package/dist/commands/add/DependencyAddResolver.d.ts.map +1 -1
  195. package/dist/commands/add/DependencyAddResolver.js +36 -36
  196. package/dist/commands/add/DependencyAddResolver.js.map +1 -1
  197. package/dist/control-plane/AccountManager.d.ts +96 -94
  198. package/dist/control-plane/AccountManager.d.ts.map +1 -1
  199. package/dist/control-plane/AccountManager.js +775 -967
  200. package/dist/control-plane/AccountManager.js.map +1 -1
  201. package/dist/control-plane/ArtifactObserver.d.ts +19 -16
  202. package/dist/control-plane/ArtifactObserver.d.ts.map +1 -1
  203. package/dist/control-plane/ArtifactObserver.js +73 -59
  204. package/dist/control-plane/ArtifactObserver.js.map +1 -1
  205. package/dist/control-plane/AuthMetadataStore.d.ts +16 -13
  206. package/dist/control-plane/AuthMetadataStore.d.ts.map +1 -1
  207. package/dist/control-plane/AuthMetadataStore.js +111 -113
  208. package/dist/control-plane/AuthMetadataStore.js.map +1 -1
  209. package/dist/control-plane/AuthStoragePaths.d.ts +7 -4
  210. package/dist/control-plane/AuthStoragePaths.d.ts.map +1 -1
  211. package/dist/control-plane/AuthStoragePaths.js +19 -14
  212. package/dist/control-plane/AuthStoragePaths.js.map +1 -1
  213. package/dist/control-plane/AuthenticationSelector.d.ts +21 -18
  214. package/dist/control-plane/AuthenticationSelector.d.ts.map +1 -1
  215. package/dist/control-plane/AuthenticationSelector.js +69 -63
  216. package/dist/control-plane/AuthenticationSelector.js.map +1 -1
  217. package/dist/control-plane/ControlPlaneClient.d.ts +37 -28
  218. package/dist/control-plane/ControlPlaneClient.d.ts.map +1 -1
  219. package/dist/control-plane/ControlPlaneClient.js +265 -254
  220. package/dist/control-plane/ControlPlaneClient.js.map +1 -1
  221. package/dist/control-plane/ControlPlaneEndpoints.d.ts +9 -6
  222. package/dist/control-plane/ControlPlaneEndpoints.d.ts.map +1 -1
  223. package/dist/control-plane/ControlPlaneEndpoints.js +17 -12
  224. package/dist/control-plane/ControlPlaneEndpoints.js.map +1 -1
  225. package/dist/control-plane/ControlPlaneTypes.d.ts +176 -152
  226. package/dist/control-plane/ControlPlaneTypes.d.ts.map +1 -1
  227. package/dist/control-plane/ControlPlaneTypes.js +88 -81
  228. package/dist/control-plane/ControlPlaneTypes.js.map +1 -1
  229. package/dist/control-plane/CredentialStore.d.ts +20 -18
  230. package/dist/control-plane/CredentialStore.d.ts.map +1 -1
  231. package/dist/control-plane/CredentialStore.js +66 -83
  232. package/dist/control-plane/CredentialStore.js.map +1 -1
  233. package/dist/control-plane/DPoPKeyStore.d.ts +12 -9
  234. package/dist/control-plane/DPoPKeyStore.d.ts.map +1 -1
  235. package/dist/control-plane/DPoPKeyStore.js +57 -53
  236. package/dist/control-plane/DPoPKeyStore.js.map +1 -1
  237. package/dist/control-plane/GitHubActionsOidcCredentialProvider.d.ts +37 -4
  238. package/dist/control-plane/GitHubActionsOidcCredentialProvider.d.ts.map +1 -1
  239. package/dist/control-plane/GitHubActionsOidcCredentialProvider.js +197 -63
  240. package/dist/control-plane/GitHubActionsOidcCredentialProvider.js.map +1 -1
  241. package/dist/control-plane/PublishIdempotencyStore.d.ts +25 -9
  242. package/dist/control-plane/PublishIdempotencyStore.d.ts.map +1 -1
  243. package/dist/control-plane/PublishIdempotencyStore.js +97 -68
  244. package/dist/control-plane/PublishIdempotencyStore.js.map +1 -1
  245. package/dist/control-plane/PublishRequestErrorMapper.d.ts +155 -0
  246. package/dist/control-plane/PublishRequestErrorMapper.d.ts.map +1 -0
  247. package/dist/control-plane/PublishRequestErrorMapper.js +597 -0
  248. package/dist/control-plane/PublishRequestErrorMapper.js.map +1 -0
  249. package/dist/control-plane/RegistryGrantLock.d.ts +29 -26
  250. package/dist/control-plane/RegistryGrantLock.d.ts.map +1 -1
  251. package/dist/control-plane/RegistryGrantLock.js +149 -185
  252. package/dist/control-plane/RegistryGrantLock.js.map +1 -1
  253. package/dist/control-plane/RegistryTrustResolver.d.ts +13 -10
  254. package/dist/control-plane/RegistryTrustResolver.d.ts.map +1 -1
  255. package/dist/control-plane/RegistryTrustResolver.js +97 -132
  256. package/dist/control-plane/RegistryTrustResolver.js.map +1 -1
  257. package/dist/index.d.ts +62 -39
  258. package/dist/index.js +60 -53
  259. package/dist/postinstall/api/PostinstallDsl.d.ts +24 -21
  260. package/dist/postinstall/api/PostinstallDsl.d.ts.map +1 -1
  261. package/dist/postinstall/api/PostinstallDsl.js +32 -35
  262. package/dist/postinstall/api/PostinstallDsl.js.map +1 -1
  263. package/dist/postinstall/api/definePostinstall.d.ts +5 -2
  264. package/dist/postinstall/api/definePostinstall.d.ts.map +1 -1
  265. package/dist/postinstall/api/definePostinstall.js +20 -16
  266. package/dist/postinstall/api/definePostinstall.js.map +1 -1
  267. package/dist/postinstall/index.d.ts +25 -26
  268. package/dist/postinstall/index.js +25 -37
  269. package/dist/postinstall/loader/EntryResolver.d.ts +11 -9
  270. package/dist/postinstall/loader/EntryResolver.d.ts.map +1 -1
  271. package/dist/postinstall/loader/EntryResolver.js +36 -32
  272. package/dist/postinstall/loader/EntryResolver.js.map +1 -1
  273. package/dist/postinstall/loader/EsbuildTranspiler.d.ts +6 -3
  274. package/dist/postinstall/loader/EsbuildTranspiler.d.ts.map +1 -1
  275. package/dist/postinstall/loader/EsbuildTranspiler.js +52 -56
  276. package/dist/postinstall/loader/EsbuildTranspiler.js.map +1 -1
  277. package/dist/postinstall/loader/ExportValidator.d.ts +8 -5
  278. package/dist/postinstall/loader/ExportValidator.d.ts.map +1 -1
  279. package/dist/postinstall/loader/ExportValidator.js +36 -32
  280. package/dist/postinstall/loader/ExportValidator.js.map +1 -1
  281. package/dist/postinstall/loader/ModuleImporter.d.ts +17 -14
  282. package/dist/postinstall/loader/ModuleImporter.d.ts.map +1 -1
  283. package/dist/postinstall/loader/ModuleImporter.js +50 -58
  284. package/dist/postinstall/loader/ModuleImporter.js.map +1 -1
  285. package/dist/postinstall/loader/PostinstallLoader.d.ts +22 -19
  286. package/dist/postinstall/loader/PostinstallLoader.d.ts.map +1 -1
  287. package/dist/postinstall/loader/PostinstallLoader.js +62 -58
  288. package/dist/postinstall/loader/PostinstallLoader.js.map +1 -1
  289. package/dist/postinstall/markers/MarkerBlockEditor.d.ts +19 -16
  290. package/dist/postinstall/markers/MarkerBlockEditor.d.ts.map +1 -1
  291. package/dist/postinstall/markers/MarkerBlockEditor.js +48 -44
  292. package/dist/postinstall/markers/MarkerBlockEditor.js.map +1 -1
  293. package/dist/postinstall/markers/MarkerBlockService.d.ts +10 -7
  294. package/dist/postinstall/markers/MarkerBlockService.d.ts.map +1 -1
  295. package/dist/postinstall/markers/MarkerBlockService.js +44 -44
  296. package/dist/postinstall/markers/MarkerBlockService.js.map +1 -1
  297. package/dist/postinstall/markers/MarkerIntegrityValidator.d.ts +12 -9
  298. package/dist/postinstall/markers/MarkerIntegrityValidator.d.ts.map +1 -1
  299. package/dist/postinstall/markers/MarkerIntegrityValidator.js +47 -52
  300. package/dist/postinstall/markers/MarkerIntegrityValidator.js.map +1 -1
  301. package/dist/postinstall/policy/PostinstallPolicyGate.d.ts +25 -23
  302. package/dist/postinstall/policy/PostinstallPolicyGate.d.ts.map +1 -1
  303. package/dist/postinstall/policy/PostinstallPolicyGate.js +63 -52
  304. package/dist/postinstall/policy/PostinstallPolicyGate.js.map +1 -1
  305. package/dist/postinstall/runner/PostinstallOrchestrator.d.ts +48 -45
  306. package/dist/postinstall/runner/PostinstallOrchestrator.d.ts.map +1 -1
  307. package/dist/postinstall/runner/PostinstallOrchestrator.js +172 -170
  308. package/dist/postinstall/runner/PostinstallOrchestrator.js.map +1 -1
  309. package/dist/postinstall/unreal/BuildCsInjector.d.ts +16 -13
  310. package/dist/postinstall/unreal/BuildCsInjector.d.ts.map +1 -1
  311. package/dist/postinstall/unreal/BuildCsInjector.js +58 -53
  312. package/dist/postinstall/unreal/BuildCsInjector.js.map +1 -1
  313. package/dist/postinstall/unreal/CSharpInjectionEngine.d.ts +13 -10
  314. package/dist/postinstall/unreal/CSharpInjectionEngine.d.ts.map +1 -1
  315. package/dist/postinstall/unreal/CSharpInjectionEngine.js +56 -59
  316. package/dist/postinstall/unreal/CSharpInjectionEngine.js.map +1 -1
  317. package/dist/postinstall/unreal/CSharpStructureAnalyzer.d.ts +11 -8
  318. package/dist/postinstall/unreal/CSharpStructureAnalyzer.d.ts.map +1 -1
  319. package/dist/postinstall/unreal/CSharpStructureAnalyzer.js +123 -127
  320. package/dist/postinstall/unreal/CSharpStructureAnalyzer.js.map +1 -1
  321. package/dist/postinstall/unreal/CSharpStructures.d.ts +18 -15
  322. package/dist/postinstall/unreal/CSharpStructures.d.ts.map +1 -1
  323. package/dist/postinstall/unreal/CSharpStructures.js +1 -2
  324. package/dist/postinstall/unreal/CSharpWrapperFactory.d.ts +7 -4
  325. package/dist/postinstall/unreal/CSharpWrapperFactory.d.ts.map +1 -1
  326. package/dist/postinstall/unreal/CSharpWrapperFactory.js +54 -58
  327. package/dist/postinstall/unreal/CSharpWrapperFactory.js.map +1 -1
  328. package/dist/postinstall/unreal/PluginHash.d.ts +5 -2
  329. package/dist/postinstall/unreal/PluginHash.d.ts.map +1 -1
  330. package/dist/postinstall/unreal/PluginHash.js +13 -8
  331. package/dist/postinstall/unreal/PluginHash.js.map +1 -1
  332. package/dist/postinstall/unreal/PrettyParseError.d.ts +8 -5
  333. package/dist/postinstall/unreal/PrettyParseError.d.ts.map +1 -1
  334. package/dist/postinstall/unreal/PrettyParseError.js +37 -37
  335. package/dist/postinstall/unreal/PrettyParseError.js.map +1 -1
  336. package/dist/postinstall/unreal/ProjectFileLocator.d.ts +12 -9
  337. package/dist/postinstall/unreal/ProjectFileLocator.d.ts.map +1 -1
  338. package/dist/postinstall/unreal/ProjectFileLocator.js +49 -51
  339. package/dist/postinstall/unreal/ProjectFileLocator.js.map +1 -1
  340. package/dist/postinstall/unreal/TargetCsInjector.d.ts +16 -13
  341. package/dist/postinstall/unreal/TargetCsInjector.d.ts.map +1 -1
  342. package/dist/postinstall/unreal/TargetCsInjector.js +58 -53
  343. package/dist/postinstall/unreal/TargetCsInjector.js.map +1 -1
  344. package/dist/postinstall/unreal/UProjectInjector.d.ts +6 -3
  345. package/dist/postinstall/unreal/UProjectInjector.d.ts.map +1 -1
  346. package/dist/postinstall/unreal/UProjectInjector.js +56 -52
  347. package/dist/postinstall/unreal/UProjectInjector.js.map +1 -1
  348. package/dist/postinstall/unreal/UProjectMetadataReader.d.ts +5 -2
  349. package/dist/postinstall/unreal/UProjectMetadataReader.d.ts.map +1 -1
  350. package/dist/postinstall/unreal/UProjectMetadataReader.js +22 -18
  351. package/dist/postinstall/unreal/UProjectMetadataReader.js.map +1 -1
  352. package/dist/postinstall/unreal/UnrealSourceCatalog.d.ts +17 -14
  353. package/dist/postinstall/unreal/UnrealSourceCatalog.d.ts.map +1 -1
  354. package/dist/postinstall/unreal/UnrealSourceCatalog.js +50 -50
  355. package/dist/postinstall/unreal/UnrealSourceCatalog.js.map +1 -1
  356. package/dist/prompts/InkPromptService.d.ts +10 -7
  357. package/dist/prompts/InkPromptService.d.ts.map +1 -1
  358. package/dist/prompts/InkPromptService.js +100 -71
  359. package/dist/prompts/InkPromptService.js.map +1 -1
  360. package/dist/prompts/ProjectContextDetector.d.ts +10 -7
  361. package/dist/prompts/ProjectContextDetector.d.ts.map +1 -1
  362. package/dist/prompts/ProjectContextDetector.js +32 -26
  363. package/dist/prompts/ProjectContextDetector.js.map +1 -1
  364. package/dist/prompts/PromptService.d.ts +11 -8
  365. package/dist/prompts/PromptService.d.ts.map +1 -1
  366. package/dist/prompts/PromptService.js +1 -8
  367. package/dist/reporting/DiagnosticDeduplicator.d.ts +8 -5
  368. package/dist/reporting/DiagnosticDeduplicator.d.ts.map +1 -1
  369. package/dist/reporting/DiagnosticDeduplicator.js +36 -35
  370. package/dist/reporting/DiagnosticDeduplicator.js.map +1 -1
  371. package/dist/reporting/DiagnosticRenderer.d.ts +11 -8
  372. package/dist/reporting/DiagnosticRenderer.d.ts.map +1 -1
  373. package/dist/reporting/DiagnosticRenderer.js +1 -2
  374. package/dist/reporting/DiagnosticReporter.d.ts +12 -9
  375. package/dist/reporting/DiagnosticReporter.d.ts.map +1 -1
  376. package/dist/reporting/DiagnosticReporter.js +40 -39
  377. package/dist/reporting/DiagnosticReporter.js.map +1 -1
  378. package/dist/reporting/InkDiagnosticRenderer.d.ts +12 -9
  379. package/dist/reporting/InkDiagnosticRenderer.d.ts.map +1 -1
  380. package/dist/reporting/InkDiagnosticRenderer.js +50 -42
  381. package/dist/reporting/InkDiagnosticRenderer.js.map +1 -1
  382. package/dist/reporting/InstallProgressReporter.d.ts +23 -20
  383. package/dist/reporting/InstallProgressReporter.d.ts.map +1 -1
  384. package/dist/reporting/InstallProgressReporter.js +48 -47
  385. package/dist/reporting/InstallProgressReporter.js.map +1 -1
  386. package/dist/reporting/JsonReporter.d.ts +16 -13
  387. package/dist/reporting/JsonReporter.d.ts.map +1 -1
  388. package/dist/reporting/JsonReporter.js +34 -20
  389. package/dist/reporting/JsonReporter.js.map +1 -1
  390. package/dist/reporting/RegistryRequestTerminalFormatter.d.ts +36 -0
  391. package/dist/reporting/RegistryRequestTerminalFormatter.d.ts.map +1 -0
  392. package/dist/reporting/RegistryRequestTerminalFormatter.js +90 -0
  393. package/dist/reporting/RegistryRequestTerminalFormatter.js.map +1 -0
  394. package/dist/reporting/TextDiagnosticRenderer.d.ts +11 -8
  395. package/dist/reporting/TextDiagnosticRenderer.d.ts.map +1 -1
  396. package/dist/reporting/TextDiagnosticRenderer.js +36 -28
  397. package/dist/reporting/TextDiagnosticRenderer.js.map +1 -1
  398. package/dist/reporting/TextSink.d.ts +14 -11
  399. package/dist/reporting/TextSink.d.ts.map +1 -1
  400. package/dist/reporting/TextSink.js +24 -20
  401. package/dist/reporting/TextSink.js.map +1 -1
  402. package/package.json +31 -32
  403. package/dist/cli/parsing/contracts/UAPKGCommandModule.js.map +0 -1
  404. package/dist/cli-bootstrap.d.ts.map +0 -1
  405. package/dist/commands/Command.js.map +0 -1
  406. package/dist/index.d.ts.map +0 -1
  407. package/dist/index.js.map +0 -1
  408. package/dist/postinstall/index.d.ts.map +0 -1
  409. package/dist/postinstall/index.js.map +0 -1
  410. package/dist/postinstall/unreal/CSharpStructures.js.map +0 -1
  411. package/dist/prompts/PromptService.js.map +0 -1
  412. package/dist/reporting/DiagnosticRenderer.js.map +0 -1
@@ -1,93 +1,100 @@
1
- import { UAPKG_CONTROL_PLANE_ENDPOINTS } from './ControlPlaneEndpoints.js';
2
- export const UAPKG_AUTHORIZATION_ISSUER = UAPKG_CONTROL_PLANE_ENDPOINTS.issuer;
3
- export const UAPKG_CONTROL_PLANE_API = UAPKG_CONTROL_PLANE_ENDPOINTS.apiBaseUrl;
4
- export const UAPKG_CLI_CLIENT_ID = 'uapkg-cli';
5
- export const UAPKG_GITHUB_OIDC_AUDIENCE = 'uapkg';
6
- export const UAPKG_CLI_SCOPES = [
7
- 'identity.self.read',
8
- 'publishing.request.create',
9
- 'publishing.request.read.self',
10
- 'registry_grant.revoke.self',
1
+ import { UAPKG_CONTROL_PLANE_ENDPOINTS } from "./ControlPlaneEndpoints.js";
2
+
3
+ //#region src/control-plane/ControlPlaneTypes.ts
4
+ const UAPKG_AUTHORIZATION_ISSUER = UAPKG_CONTROL_PLANE_ENDPOINTS.issuer;
5
+ const UAPKG_CONTROL_PLANE_API = UAPKG_CONTROL_PLANE_ENDPOINTS.apiBaseUrl;
6
+ const UAPKG_CLI_CLIENT_ID = "uapkg-cli";
7
+ const UAPKG_GITHUB_OIDC_AUDIENCE = "uapkg";
8
+ const UAPKG_CLI_SCOPES = [
9
+ "identity.self.read",
10
+ "publishing.request.create",
11
+ "publishing.request.read.self",
12
+ "registry_grant.revoke.self"
11
13
  ];
12
14
  const UAPKG_CLI_SCOPE_SET = new Set(UAPKG_CLI_SCOPES);
13
15
  const OAUTH_SCOPE_TOKEN_PATTERN = /^[\x21\x23-\x5b\x5d-\x7e]+$/;
14
- export function knownUAPKGCliScopes(value) {
15
- if (!Array.isArray(value))
16
- return [];
17
- const candidates = new Set(value.filter((scope) => typeof scope === 'string'));
18
- return UAPKG_CLI_SCOPES.filter((scope) => candidates.has(scope));
16
+ function knownUAPKGCliScopes(value) {
17
+ if (!Array.isArray(value)) return [];
18
+ const candidates = new Set(value.filter((scope) => typeof scope === "string"));
19
+ return UAPKG_CLI_SCOPES.filter((scope) => candidates.has(scope));
19
20
  }
20
- export function parseUAPKGCliScopeString(value) {
21
- return knownUAPKGCliScopes(parseOAuthScopeTokens(value));
21
+ function parseUAPKGCliScopeString(value) {
22
+ return knownUAPKGCliScopes(parseOAuthScopeTokens(value));
22
23
  }
23
- export function parseOAuthScopeTokens(value) {
24
- if (typeof value !== 'string' || value.length === 0 || value.trim() !== value)
25
- return [];
26
- const scopes = value.split(' ');
27
- if (scopes.some((scope) => !isOAuthScopeToken(scope)))
28
- return [];
29
- return [...new Set(scopes)];
24
+ function parseOAuthScopeTokens(value) {
25
+ if (typeof value !== "string" || value.length === 0 || value.trim() !== value) return [];
26
+ const scopes = value.split(" ");
27
+ if (scopes.some((scope) => !isOAuthScopeToken(scope))) return [];
28
+ return [...new Set(scopes)];
30
29
  }
31
- export function isOAuthScopeToken(value) {
32
- return typeof value === 'string' && OAUTH_SCOPE_TOKEN_PATTERN.test(value);
30
+ function isOAuthScopeToken(value) {
31
+ return typeof value === "string" && OAUTH_SCOPE_TOKEN_PATTERN.test(value);
33
32
  }
34
- export function isUAPKGCliScope(value) {
35
- return typeof value === 'string' && UAPKG_CLI_SCOPE_SET.has(value);
36
- }
37
- export class ControlPlaneError extends Error {
38
- code;
39
- status;
40
- details;
41
- constructor(code, message, status, details, options) {
42
- super(message, options);
43
- this.code = code;
44
- this.status = status;
45
- this.details = details;
46
- this.name = 'ControlPlaneError';
47
- }
48
- }
49
- export class OAuthScopeInsufficientError extends ControlPlaneError {
50
- registryAlias;
51
- requestedScopes;
52
- requiredScopes;
53
- missingScopes;
54
- constructor(message, registryAlias, requestedScopes, requiredScopes, missingScopes, status = 403, options) {
55
- const requested = knownUAPKGCliScopes(requestedScopes);
56
- const required = knownUAPKGCliScopes(requiredScopes);
57
- const missing = knownUAPKGCliScopes(missingScopes).filter((scope) => requested.includes(scope) && required.includes(scope));
58
- super('OAUTH_SCOPE_INSUFFICIENT', message, status, { requestedScopes: requested, requiredScopes: required, missingScopes: missing }, options);
59
- this.registryAlias = registryAlias;
60
- this.name = 'OAuthScopeInsufficientError';
61
- this.requestedScopes = requested;
62
- this.requiredScopes = required;
63
- this.missingScopes = missing;
64
- }
65
- }
66
- export class OAuthScopeUnsupportedError extends ControlPlaneError {
67
- registryAlias;
68
- requestedScopes;
69
- unsupportedScopes;
70
- reason;
71
- constructor(registryAlias, requestedScopes, unsupportedScopes, options) {
72
- const requested = knownUAPKGCliScopes(requestedScopes);
73
- const unsupported = knownUAPKGCliScopes(unsupportedScopes).filter((scope) => requested.includes(scope));
74
- const reason = options?.reason ?? 'issuer-does-not-support-requested-scope';
75
- const message = reason === 'cli-update-required'
76
- ? `The authorization service for "${registryAlias}" requires an OAuth capability that this UAPKG CLI version does not recognize. Update UAPKG CLI and try again.`
77
- : unsupportedIssuerScopeMessage(registryAlias, unsupported);
78
- super('OAUTH_SCOPE_UNSUPPORTED', message, options?.status, { requestedScopes: requested, unsupportedScopes: unsupported, reason }, options);
79
- this.registryAlias = registryAlias;
80
- this.name = 'OAuthScopeUnsupportedError';
81
- this.requestedScopes = requested;
82
- this.unsupportedScopes = unsupported;
83
- this.reason = reason;
84
- }
33
+ function isUAPKGCliScope(value) {
34
+ return typeof value === "string" && UAPKG_CLI_SCOPE_SET.has(value);
85
35
  }
36
+ var ControlPlaneError = class extends Error {
37
+ code;
38
+ status;
39
+ details;
40
+ constructor(code, message, status, details, options) {
41
+ super(message, options);
42
+ this.code = code;
43
+ this.status = status;
44
+ this.details = details;
45
+ this.name = "ControlPlaneError";
46
+ }
47
+ };
48
+ var OAuthScopeInsufficientError = class extends ControlPlaneError {
49
+ registryAlias;
50
+ requestedScopes;
51
+ requiredScopes;
52
+ missingScopes;
53
+ constructor(message, registryAlias, requestedScopes, requiredScopes, missingScopes, status = 403, options) {
54
+ const requested = knownUAPKGCliScopes(requestedScopes);
55
+ const required = knownUAPKGCliScopes(requiredScopes);
56
+ const missing = knownUAPKGCliScopes(missingScopes).filter((scope) => requested.includes(scope) && required.includes(scope));
57
+ super("OAUTH_SCOPE_INSUFFICIENT", message, status, {
58
+ requestedScopes: requested,
59
+ requiredScopes: required,
60
+ missingScopes: missing
61
+ }, options);
62
+ this.registryAlias = registryAlias;
63
+ this.name = "OAuthScopeInsufficientError";
64
+ this.requestedScopes = requested;
65
+ this.requiredScopes = required;
66
+ this.missingScopes = missing;
67
+ }
68
+ };
69
+ var OAuthScopeUnsupportedError = class extends ControlPlaneError {
70
+ registryAlias;
71
+ requestedScopes;
72
+ unsupportedScopes;
73
+ reason;
74
+ constructor(registryAlias, requestedScopes, unsupportedScopes, options) {
75
+ const requested = knownUAPKGCliScopes(requestedScopes);
76
+ const unsupported = knownUAPKGCliScopes(unsupportedScopes).filter((scope) => requested.includes(scope));
77
+ const reason = options?.reason ?? "issuer-does-not-support-requested-scope";
78
+ const message = reason === "cli-update-required" ? `The authorization service for "${registryAlias}" requires an OAuth capability that this UAPKG CLI version does not recognize. Update UAPKG CLI and try again.` : unsupportedIssuerScopeMessage(registryAlias, unsupported);
79
+ super("OAUTH_SCOPE_UNSUPPORTED", message, options?.status, {
80
+ requestedScopes: requested,
81
+ unsupportedScopes: unsupported,
82
+ reason
83
+ }, options);
84
+ this.registryAlias = registryAlias;
85
+ this.name = "OAuthScopeUnsupportedError";
86
+ this.requestedScopes = requested;
87
+ this.unsupportedScopes = unsupported;
88
+ this.reason = reason;
89
+ }
90
+ };
86
91
  function unsupportedIssuerScopeMessage(registryAlias, unsupportedScopes) {
87
- const noun = unsupportedScopes.length === 1 ? 'scope' : 'scopes';
88
- return `The authorization service for "${registryAlias}" does not support the OAuth ${noun} required by this UAPKG CLI: ${unsupportedScopes.join(', ')}. Update UAPKG CLI and try again; if it is already current, the authorization service must be updated.`;
92
+ return `The authorization service for "${registryAlias}" does not support the OAuth ${unsupportedScopes.length === 1 ? "scope" : "scopes"} required by this UAPKG CLI: ${unsupportedScopes.join(", ")}. Update UAPKG CLI and try again; if it is already current, the authorization service must be updated.`;
89
93
  }
90
- export function registryAudience(registryId) {
91
- return `${UAPKG_CONTROL_PLANE_API}/v1/registries/${encodeURIComponent(registryId)}`;
94
+ function registryAudience(registryId) {
95
+ return `${UAPKG_CONTROL_PLANE_API}/v1/registries/${encodeURIComponent(registryId)}`;
92
96
  }
97
+
98
+ //#endregion
99
+ export { ControlPlaneError, OAuthScopeInsufficientError, OAuthScopeUnsupportedError, UAPKG_AUTHORIZATION_ISSUER, UAPKG_CLI_CLIENT_ID, UAPKG_CLI_SCOPES, UAPKG_CONTROL_PLANE_API, UAPKG_GITHUB_OIDC_AUDIENCE, isOAuthScopeToken, isUAPKGCliScope, knownUAPKGCliScopes, parseOAuthScopeTokens, parseUAPKGCliScopeString, registryAudience };
93
100
  //# sourceMappingURL=ControlPlaneTypes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ControlPlaneTypes.js","sourceRoot":"","sources":["../../src/control-plane/ControlPlaneTypes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ControlPlaneTypes.js","names":[],"sources":["../../src/control-plane/ControlPlaneTypes.ts"],"sourcesContent":["import { UAPKG_CONTROL_PLANE_ENDPOINTS } from './ControlPlaneEndpoints.js';\n\nexport const UAPKG_AUTHORIZATION_ISSUER = UAPKG_CONTROL_PLANE_ENDPOINTS.issuer;\nexport const UAPKG_CONTROL_PLANE_API = UAPKG_CONTROL_PLANE_ENDPOINTS.apiBaseUrl;\nexport const UAPKG_CLI_CLIENT_ID = 'uapkg-cli';\nexport const UAPKG_GITHUB_OIDC_AUDIENCE = 'uapkg';\n\nexport const UAPKG_CLI_SCOPES = [\n 'identity.self.read',\n 'publishing.request.create',\n 'publishing.request.read.self',\n 'registry_grant.revoke.self',\n] as const;\n\nexport type UAPKGCliScope = (typeof UAPKG_CLI_SCOPES)[number];\nconst UAPKG_CLI_SCOPE_SET = new Set<string>(UAPKG_CLI_SCOPES);\nconst OAUTH_SCOPE_TOKEN_PATTERN = /^[\\x21\\x23-\\x5b\\x5d-\\x7e]+$/;\n\nexport function knownUAPKGCliScopes(value: unknown): UAPKGCliScope[] {\n if (!Array.isArray(value)) return [];\n const candidates = new Set(value.filter((scope): scope is string => typeof scope === 'string'));\n return UAPKG_CLI_SCOPES.filter((scope) => candidates.has(scope));\n}\n\nexport function parseUAPKGCliScopeString(value: unknown): UAPKGCliScope[] {\n return knownUAPKGCliScopes(parseOAuthScopeTokens(value));\n}\n\nexport function parseOAuthScopeTokens(value: unknown): string[] {\n if (typeof value !== 'string' || value.length === 0 || value.trim() !== value) return [];\n const scopes = value.split(' ');\n if (scopes.some((scope) => !isOAuthScopeToken(scope))) return [];\n return [...new Set(scopes)];\n}\n\nexport function isOAuthScopeToken(value: unknown): value is string {\n return typeof value === 'string' && OAUTH_SCOPE_TOKEN_PATTERN.test(value);\n}\n\nexport function isUAPKGCliScope(value: unknown): value is UAPKGCliScope {\n return typeof value === 'string' && UAPKG_CLI_SCOPE_SET.has(value);\n}\n\nexport type ControlPlaneAuthMode = 'auto' | 'login' | 'gat' | 'oidc';\n\nexport interface RegistryTrust {\n readonly alias: string;\n readonly registryId: string;\n readonly registryName: string;\n readonly repositoryUrl: string;\n readonly repositoryFingerprint: string;\n readonly issuer: string;\n readonly apiBaseUrl: string;\n readonly resource: string;\n readonly cacheShortId: string;\n}\n\nexport interface AccountDisplayMetadata {\n readonly id: string;\n readonly username: string;\n readonly displayName: string;\n}\n\nexport interface AccountSelf {\n readonly account: AccountDisplayMetadata;\n readonly registry: {\n readonly id: string;\n };\n readonly grant: {\n readonly id: string;\n readonly deviceName: string;\n readonly idleExpiresAt: string;\n readonly absoluteExpiresAt: string;\n readonly scopes: readonly string[];\n };\n}\n\nexport interface CliLoginConfirmation extends AccountSelf {\n readonly grant: AccountSelf['grant'] & {\n readonly status: 'pending' | 'active';\n readonly activationExpiresAt: string;\n readonly replacesGrantId: string | null;\n };\n}\n\nexport interface ActivatedCliLoginGrant {\n readonly id: string;\n readonly status: 'active';\n readonly replacesGrantId: string | null;\n}\n\nexport interface RegistryGrantMetadata {\n readonly issuer: string;\n readonly registryId: string;\n readonly registryName: string;\n readonly grantId: string;\n readonly clientId: string;\n readonly keyReference: string;\n readonly refreshTokenReference: string;\n readonly publicKeyThumbprint: string;\n readonly deviceName: string;\n readonly repositoryFingerprint: string;\n readonly account: AccountDisplayMetadata;\n readonly createdAt: number;\n readonly idleExpiresAt: number;\n readonly expiresAt: number;\n}\n\nexport interface AuthMetadataFile {\n readonly schemaVersion: 1;\n readonly grants: Readonly<Record<string, RegistryGrantMetadata>>;\n}\n\nexport interface RegistryRequestSource {\n readonly type: 'github_release';\n readonly repository: string;\n readonly releaseTag: string;\n readonly assetName: string;\n}\n\n/** Artifact integrity observed by this client from the exact bytes it inspected. */\nexport interface ObservedArtifactIntegrity {\n /** Exactly `sha256:` + 64 lowercase hex characters. */\n readonly sha256: string;\n readonly sizeBytes: number;\n}\n\n/** Normalized packaged-manifest claims submitted with a publish request. */\nexport interface SubmittedPackageClaims {\n readonly name: string;\n readonly version: string;\n readonly private: boolean;\n readonly dependencies: Readonly<Record<string, { readonly version: string; readonly registry?: string }>>;\n readonly devDependencies: Readonly<Record<string, { readonly version: string; readonly registry?: string }>>;\n readonly peerDependencies: Readonly<Record<string, { readonly version: string; readonly registry?: string }>>;\n}\n\n/** The six route-derived registry operations (PS-REQ-001). */\nexport type RegistryOperation = 'publish' | 'unpublish' | 'yank' | 'unyank' | 'deprecate' | 'undeprecate';\n\n/**\n * Body for `POST /v1/registry-requests/{operation}`. The operation is\n * derived from the route; the body never carries a kind.\n */\nexport interface RegistryRequestSubmission {\n readonly registryId: string;\n readonly ownerOrganizationName?: string;\n readonly payload: {\n readonly packageName: string;\n readonly packageVersion: string;\n readonly source?: RegistryRequestSource;\n readonly observedIntegrity?: ObservedArtifactIntegrity;\n readonly claims?: SubmittedPackageClaims;\n readonly reason?: string;\n };\n}\n\nexport type RegistryRequestStatus =\n | 'queued'\n | 'checking'\n | 'accepted'\n | 'ready'\n | 'ready_superseded'\n | 'rejected'\n | 'operationally_failed';\n\nexport interface RegistryRequestSummary {\n readonly id: string;\n readonly registryId: string;\n readonly kind: string;\n readonly status: RegistryRequestStatus;\n readonly currentStep?: string;\n readonly createdAt?: number;\n readonly updatedAt?: number;\n readonly payload?: {\n readonly packageName?: string;\n readonly packageVersion?: string;\n };\n}\n\nexport type RegistryRequestCheckExecutionState =\n | 'pending'\n | 'running'\n | 'retrying'\n | 'blocked_by_dependency'\n | 'completed';\n\nexport type RegistryRequestCheckConclusion = 'success' | 'failure' | 'skipped';\n\n/** One bounded, caller-visible result from the request's sealed check plan. */\nexport interface RegistryRequestCheck {\n readonly checkId: string;\n readonly executionState: RegistryRequestCheckExecutionState;\n readonly conclusion?: RegistryRequestCheckConclusion;\n readonly reasonCode?: string;\n}\n\n/** Sanitized durable retry-exhaustion details for an operational failure. */\nexport interface RegistryRequestTerminalFailure {\n readonly reasonCode: string;\n readonly attempts?: number;\n readonly maxAttempts?: number;\n}\n\n/** Additive detail returned by the request-status endpoint. */\nexport interface RegistryRequestDetail {\n readonly request: RegistryRequestSummary;\n readonly checks?: readonly RegistryRequestCheck[];\n readonly terminalFailure?: RegistryRequestTerminalFailure;\n}\n\nexport interface ControlPlaneApiErrorBody {\n readonly ok: false;\n readonly error: {\n readonly code: string;\n readonly message: string;\n readonly details?: Readonly<Record<string, unknown>>;\n };\n}\n\nexport class ControlPlaneError extends Error {\n public constructor(\n public readonly code: string,\n message: string,\n public readonly status?: number,\n public readonly details?: Readonly<Record<string, unknown>>,\n options?: ErrorOptions,\n ) {\n super(message, options);\n this.name = 'ControlPlaneError';\n }\n}\n\nexport class OAuthScopeInsufficientError extends ControlPlaneError {\n public readonly requestedScopes: readonly UAPKGCliScope[];\n public readonly requiredScopes: readonly UAPKGCliScope[];\n public readonly missingScopes: readonly UAPKGCliScope[];\n\n public constructor(\n message: string,\n public readonly registryAlias: string,\n requestedScopes: readonly UAPKGCliScope[],\n requiredScopes: readonly UAPKGCliScope[],\n missingScopes: readonly UAPKGCliScope[],\n status = 403,\n options?: ErrorOptions,\n ) {\n const requested = knownUAPKGCliScopes(requestedScopes);\n const required = knownUAPKGCliScopes(requiredScopes);\n const missing = knownUAPKGCliScopes(missingScopes).filter(\n (scope) => requested.includes(scope) && required.includes(scope),\n );\n super(\n 'OAUTH_SCOPE_INSUFFICIENT',\n message,\n status,\n { requestedScopes: requested, requiredScopes: required, missingScopes: missing },\n options,\n );\n this.name = 'OAuthScopeInsufficientError';\n this.requestedScopes = requested;\n this.requiredScopes = required;\n this.missingScopes = missing;\n }\n}\n\nexport class OAuthScopeUnsupportedError extends ControlPlaneError {\n public readonly requestedScopes: readonly UAPKGCliScope[];\n public readonly unsupportedScopes: readonly UAPKGCliScope[];\n public readonly reason: 'issuer-does-not-support-requested-scope' | 'cli-update-required';\n\n public constructor(\n public readonly registryAlias: string,\n requestedScopes: readonly UAPKGCliScope[],\n unsupportedScopes: readonly UAPKGCliScope[],\n options?: ErrorOptions & {\n readonly reason?: 'issuer-does-not-support-requested-scope' | 'cli-update-required';\n readonly status?: number;\n },\n ) {\n const requested = knownUAPKGCliScopes(requestedScopes);\n const unsupported = knownUAPKGCliScopes(unsupportedScopes).filter((scope) => requested.includes(scope));\n const reason = options?.reason ?? 'issuer-does-not-support-requested-scope';\n const message =\n reason === 'cli-update-required'\n ? `The authorization service for \"${registryAlias}\" requires an OAuth capability that this UAPKG CLI version does not recognize. Update UAPKG CLI and try again.`\n : unsupportedIssuerScopeMessage(registryAlias, unsupported);\n super(\n 'OAUTH_SCOPE_UNSUPPORTED',\n message,\n options?.status,\n { requestedScopes: requested, unsupportedScopes: unsupported, reason },\n options,\n );\n this.name = 'OAuthScopeUnsupportedError';\n this.requestedScopes = requested;\n this.unsupportedScopes = unsupported;\n this.reason = reason;\n }\n}\n\nfunction unsupportedIssuerScopeMessage(registryAlias: string, unsupportedScopes: readonly UAPKGCliScope[]): string {\n const noun = unsupportedScopes.length === 1 ? 'scope' : 'scopes';\n return `The authorization service for \"${registryAlias}\" does not support the OAuth ${noun} required by this UAPKG CLI: ${unsupportedScopes.join(', ')}. Update UAPKG CLI and try again; if it is already current, the authorization service must be updated.`;\n}\n\nexport function registryAudience(registryId: string): string {\n return `${UAPKG_CONTROL_PLANE_API}/v1/registries/${encodeURIComponent(registryId)}`;\n}\n"],"mappings":"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"}
@@ -1,28 +1,30 @@
1
+ //#region src/control-plane/CredentialStore.d.ts
1
2
  interface KeyringEntry {
2
- setPassword(password: string): void;
3
- getPassword(): string | null;
4
- deleteCredential(): boolean;
3
+ setPassword(password: string): void;
4
+ getPassword(): string | null;
5
+ deleteCredential(): boolean;
5
6
  }
6
7
  interface KeyringModule {
7
- Entry: new (service: string, username: string) => KeyringEntry;
8
+ Entry: new (service: string, username: string) => KeyringEntry;
8
9
  }
9
- export type KeyringLoader = () => Promise<KeyringModule>;
10
+ type KeyringLoader = () => Promise<KeyringModule>;
10
11
  /**
11
12
  * Protected secret storage. The native module is imported only when a
12
13
  * control-plane command needs it, so install/search/update remain portable.
13
14
  */
14
- export declare class CredentialStore {
15
- private readonly loadKeyring;
16
- private readonly service;
17
- private module?;
18
- constructor(loadKeyring?: KeyringLoader, service?: string);
19
- assertAvailable(): Promise<void>;
20
- get(reference: string): Promise<string | undefined>;
21
- set(reference: string, value: string): Promise<void>;
22
- delete(reference: string): Promise<void>;
23
- createReference(kind: 'grant' | 'dpop-key', issuer: string, registryId: string, grantId: string): string;
24
- private entry;
25
- private ensureModule;
15
+ declare class CredentialStore {
16
+ private readonly loadKeyring;
17
+ private readonly service;
18
+ private module?;
19
+ constructor(loadKeyring?: KeyringLoader, service?: string);
20
+ assertAvailable(): Promise<void>;
21
+ get(reference: string): Promise<string | undefined>;
22
+ set(reference: string, value: string): Promise<void>;
23
+ delete(reference: string): Promise<void>;
24
+ createReference(kind: 'grant' | 'dpop-key', issuer: string, registryId: string, grantId: string): string;
25
+ private entry;
26
+ private ensureModule;
26
27
  }
27
- export {};
28
+ //#endregion
29
+ export { CredentialStore, KeyringLoader };
28
30
  //# sourceMappingURL=CredentialStore.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CredentialStore.d.ts","sourceRoot":"","sources":["../../src/control-plane/CredentialStore.ts"],"names":[],"mappings":"AAEA,UAAU,YAAY;IACpB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,WAAW,IAAI,MAAM,GAAG,IAAI,CAAC;IAC7B,gBAAgB,IAAI,OAAO,CAAC;CAC7B;AAED,UAAU,aAAa;IACrB,KAAK,EAAE,KAAK,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,YAAY,CAAC;CAChE;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;AAEzD;;;GAGG;AACH,qBAAa,eAAe;IAIxB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJ1B,OAAO,CAAC,MAAM,CAAC,CAAgB;gBAGZ,WAAW,GAAE,aAA+E,EAC5F,OAAO,SAAc;IAG3B,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBhC,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAYnD,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWpD,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAa9C,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAO/G,OAAO,CAAC,KAAK;YAOC,YAAY;CAG3B"}
1
+ {"version":3,"file":"CredentialStore.d.ts","names":[],"sources":["../../src/control-plane/CredentialStore.ts"],"mappings":";UAEU;EACR,YAAY;EACZ;EACA;;UAGQ;EACR,YAAY,iBAAiB,qBAAqB;;KAGxC,sBAAsB,QAAQ;;;;;cAM7B;mBAIQ;mBACA;UAJX;EAER,YACmB,cAAa,eACb;EAGN,mBAAmB;EAkBnB,IAAI,oBAAoB;EAYxB,IAAI,mBAAmB,gBAAgB;EAWvC,OAAO,oBAAoB;EAajC,gBAAgB,4BAA4B,gBAAgB,oBAAoB;UAO/E;UAOM"}
@@ -1,87 +1,70 @@
1
- import { createHash, randomUUID } from 'node:crypto';
1
+ import { createHash, randomUUID } from "node:crypto";
2
+
3
+ //#region src/control-plane/CredentialStore.ts
2
4
  /**
3
- * Protected secret storage. The native module is imported only when a
4
- * control-plane command needs it, so install/search/update remain portable.
5
- */
6
- export class CredentialStore {
7
- loadKeyring;
8
- service;
9
- module;
10
- constructor(loadKeyring = async () => (await import('@napi-rs/keyring')), service = 'uapkg.cli') {
11
- this.loadKeyring = loadKeyring;
12
- this.service = service;
13
- }
14
- async assertAvailable() {
15
- const reference = `availability:${randomUUID()}`;
16
- try {
17
- await this.set(reference, reference);
18
- const roundTrip = await this.get(reference);
19
- if (roundTrip !== reference) {
20
- throw new Error('The operating-system credential store failed a round-trip check.');
21
- }
22
- }
23
- catch (error) {
24
- throw new Error('Secure operating-system credential storage is unavailable. UAPKG will not save login secrets in plaintext.', { cause: error });
25
- }
26
- finally {
27
- await this.delete(reference).catch(() => undefined);
28
- }
29
- }
30
- async get(reference) {
31
- await this.ensureModule();
32
- try {
33
- return this.entry(reference).getPassword() ?? undefined;
34
- }
35
- catch (error) {
36
- if (isMissingCredentialError(error))
37
- return undefined;
38
- throw new Error('Unable to read a UAPKG credential from protected operating-system storage.', {
39
- cause: error,
40
- });
41
- }
42
- }
43
- async set(reference, value) {
44
- await this.ensureModule();
45
- try {
46
- this.entry(reference).setPassword(value);
47
- }
48
- catch (error) {
49
- throw new Error('Unable to save a UAPKG credential in protected operating-system storage.', {
50
- cause: error,
51
- });
52
- }
53
- }
54
- async delete(reference) {
55
- await this.ensureModule();
56
- try {
57
- this.entry(reference).deleteCredential();
58
- }
59
- catch (error) {
60
- if (!isMissingCredentialError(error)) {
61
- throw new Error('Unable to remove a UAPKG credential from protected operating-system storage.', {
62
- cause: error,
63
- });
64
- }
65
- }
66
- }
67
- createReference(kind, issuer, registryId, grantId) {
68
- const digest = createHash('sha256')
69
- .update(`${kind}\0${issuer.replace(/\/+$/, '')}\0${registryId.toLowerCase()}\0${grantId}`)
70
- .digest('hex');
71
- return `${kind}:${digest}`;
72
- }
73
- entry(reference) {
74
- if (!this.module) {
75
- throw new Error('CredentialStore has not loaded the native keyring yet.');
76
- }
77
- return new this.module.Entry(this.service, reference);
78
- }
79
- async ensureModule() {
80
- this.module ??= await this.loadKeyring();
81
- }
82
- }
5
+ * Protected secret storage. The native module is imported only when a
6
+ * control-plane command needs it, so install/search/update remain portable.
7
+ */
8
+ var CredentialStore = class {
9
+ loadKeyring;
10
+ service;
11
+ module;
12
+ constructor(loadKeyring = async () => await import("@napi-rs/keyring"), service = "uapkg.cli") {
13
+ this.loadKeyring = loadKeyring;
14
+ this.service = service;
15
+ }
16
+ async assertAvailable() {
17
+ const reference = `availability:${randomUUID()}`;
18
+ try {
19
+ await this.set(reference, reference);
20
+ if (await this.get(reference) !== reference) throw new Error("The operating-system credential store failed a round-trip check.");
21
+ } catch (error) {
22
+ throw new Error("Secure operating-system credential storage is unavailable. UAPKG will not save login secrets in plaintext.", { cause: error });
23
+ } finally {
24
+ await this.delete(reference).catch(() => void 0);
25
+ }
26
+ }
27
+ async get(reference) {
28
+ await this.ensureModule();
29
+ try {
30
+ return this.entry(reference).getPassword() ?? void 0;
31
+ } catch (error) {
32
+ if (isMissingCredentialError(error)) return void 0;
33
+ throw new Error("Unable to read a UAPKG credential from protected operating-system storage.", { cause: error });
34
+ }
35
+ }
36
+ async set(reference, value) {
37
+ await this.ensureModule();
38
+ try {
39
+ this.entry(reference).setPassword(value);
40
+ } catch (error) {
41
+ throw new Error("Unable to save a UAPKG credential in protected operating-system storage.", { cause: error });
42
+ }
43
+ }
44
+ async delete(reference) {
45
+ await this.ensureModule();
46
+ try {
47
+ this.entry(reference).deleteCredential();
48
+ } catch (error) {
49
+ if (!isMissingCredentialError(error)) throw new Error("Unable to remove a UAPKG credential from protected operating-system storage.", { cause: error });
50
+ }
51
+ }
52
+ createReference(kind, issuer, registryId, grantId) {
53
+ return `${kind}:${createHash("sha256").update(`${kind}\0${issuer.replace(/\/+$/, "")}\0${registryId.toLowerCase()}\0${grantId}`).digest("hex")}`;
54
+ }
55
+ entry(reference) {
56
+ if (!this.module) throw new Error("CredentialStore has not loaded the native keyring yet.");
57
+ return new this.module.Entry(this.service, reference);
58
+ }
59
+ async ensureModule() {
60
+ this.module ??= await this.loadKeyring();
61
+ }
62
+ };
83
63
  function isMissingCredentialError(error) {
84
- const message = error instanceof Error ? error.message : String(error);
85
- return /no\s*entry|not\s*found|missing/i.test(message);
64
+ const message = error instanceof Error ? error.message : String(error);
65
+ return /no\s*entry|not\s*found|missing/i.test(message);
86
66
  }
67
+
68
+ //#endregion
69
+ export { CredentialStore };
87
70
  //# sourceMappingURL=CredentialStore.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CredentialStore.js","sourceRoot":"","sources":["../../src/control-plane/CredentialStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CredentialStore.js","names":[],"sources":["../../src/control-plane/CredentialStore.ts"],"sourcesContent":["import { createHash, randomUUID } from 'node:crypto';\n\ninterface KeyringEntry {\n setPassword(password: string): void;\n getPassword(): string | null;\n deleteCredential(): boolean;\n}\n\ninterface KeyringModule {\n Entry: new (service: string, username: string) => KeyringEntry;\n}\n\nexport type KeyringLoader = () => Promise<KeyringModule>;\n\n/**\n * Protected secret storage. The native module is imported only when a\n * control-plane command needs it, so install/search/update remain portable.\n */\nexport class CredentialStore {\n private module?: KeyringModule;\n\n public constructor(\n private readonly loadKeyring: KeyringLoader = async () => (await import('@napi-rs/keyring')) as KeyringModule,\n private readonly service = 'uapkg.cli',\n ) {}\n\n public async assertAvailable(): Promise<void> {\n const reference = `availability:${randomUUID()}`;\n try {\n await this.set(reference, reference);\n const roundTrip = await this.get(reference);\n if (roundTrip !== reference) {\n throw new Error('The operating-system credential store failed a round-trip check.');\n }\n } catch (error) {\n throw new Error(\n 'Secure operating-system credential storage is unavailable. UAPKG will not save login secrets in plaintext.',\n { cause: error },\n );\n } finally {\n await this.delete(reference).catch(() => undefined);\n }\n }\n\n public async get(reference: string): Promise<string | undefined> {\n await this.ensureModule();\n try {\n return this.entry(reference).getPassword() ?? undefined;\n } catch (error) {\n if (isMissingCredentialError(error)) return undefined;\n throw new Error('Unable to read a UAPKG credential from protected operating-system storage.', {\n cause: error,\n });\n }\n }\n\n public async set(reference: string, value: string): Promise<void> {\n await this.ensureModule();\n try {\n this.entry(reference).setPassword(value);\n } catch (error) {\n throw new Error('Unable to save a UAPKG credential in protected operating-system storage.', {\n cause: error,\n });\n }\n }\n\n public async delete(reference: string): Promise<void> {\n await this.ensureModule();\n try {\n this.entry(reference).deleteCredential();\n } catch (error) {\n if (!isMissingCredentialError(error)) {\n throw new Error('Unable to remove a UAPKG credential from protected operating-system storage.', {\n cause: error,\n });\n }\n }\n }\n\n public createReference(kind: 'grant' | 'dpop-key', issuer: string, registryId: string, grantId: string): string {\n const digest = createHash('sha256')\n .update(`${kind}\\0${issuer.replace(/\\/+$/, '')}\\0${registryId.toLowerCase()}\\0${grantId}`)\n .digest('hex');\n return `${kind}:${digest}`;\n }\n\n private entry(reference: string): KeyringEntry {\n if (!this.module) {\n throw new Error('CredentialStore has not loaded the native keyring yet.');\n }\n return new this.module.Entry(this.service, reference);\n }\n\n private async ensureModule(): Promise<void> {\n this.module ??= await this.loadKeyring();\n }\n}\n\nfunction isMissingCredentialError(error: unknown): boolean {\n const message = error instanceof Error ? error.message : String(error);\n return /no\\s*entry|not\\s*found|missing/i.test(message);\n}\n"],"mappings":";;;;;;;AAkBA,IAAa,kBAAb,MAA6B;CAIR;CACA;CAJnB,AAAQ;CAER,AAAO,YACL,AAAiB,cAA6B,YAAa,MAAM,OAAO,qBACxE,AAAiB,UAAU,aAC3B;EAFiB;EACA;CAChB;CAEH,MAAa,kBAAiC;EAC5C,MAAM,YAAY,gBAAgB,WAAW;EAC7C,IAAI;GACF,MAAM,KAAK,IAAI,WAAW,SAAS;GAEnC,IAAI,MADoB,KAAK,IAAI,SAAS,MACxB,WAChB,MAAM,IAAI,MAAM,kEAAkE;EAEtF,SAAS,OAAO;GACd,MAAM,IAAI,MACR,8GACA,EAAE,OAAO,MAAM,CACjB;EACF,UAAU;GACR,MAAM,KAAK,OAAO,SAAS,CAAC,CAAC,YAAY,MAAS;EACpD;CACF;CAEA,MAAa,IAAI,WAAgD;EAC/D,MAAM,KAAK,aAAa;EACxB,IAAI;GACF,OAAO,KAAK,MAAM,SAAS,CAAC,CAAC,YAAY,KAAK;EAChD,SAAS,OAAO;GACd,IAAI,yBAAyB,KAAK,GAAG,OAAO;GAC5C,MAAM,IAAI,MAAM,8EAA8E,EAC5F,OAAO,MACT,CAAC;EACH;CACF;CAEA,MAAa,IAAI,WAAmB,OAA8B;EAChE,MAAM,KAAK,aAAa;EACxB,IAAI;GACF,KAAK,MAAM,SAAS,CAAC,CAAC,YAAY,KAAK;EACzC,SAAS,OAAO;GACd,MAAM,IAAI,MAAM,4EAA4E,EAC1F,OAAO,MACT,CAAC;EACH;CACF;CAEA,MAAa,OAAO,WAAkC;EACpD,MAAM,KAAK,aAAa;EACxB,IAAI;GACF,KAAK,MAAM,SAAS,CAAC,CAAC,iBAAiB;EACzC,SAAS,OAAO;GACd,IAAI,CAAC,yBAAyB,KAAK,GACjC,MAAM,IAAI,MAAM,gFAAgF,EAC9F,OAAO,MACT,CAAC;EAEL;CACF;CAEA,AAAO,gBAAgB,MAA4B,QAAgB,YAAoB,SAAyB;EAI9G,OAAO,GAAG,KAAK,GAHA,WAAW,QAAQ,CAAC,CAChC,OAAO,GAAG,KAAK,IAAI,OAAO,QAAQ,QAAQ,EAAE,EAAE,IAAI,WAAW,YAAY,EAAE,IAAI,SAAS,CAAC,CACzF,OAAO,KACa;CACzB;CAEA,AAAQ,MAAM,WAAiC;EAC7C,IAAI,CAAC,KAAK,QACR,MAAM,IAAI,MAAM,wDAAwD;EAE1E,OAAO,IAAI,KAAK,OAAO,MAAM,KAAK,SAAS,SAAS;CACtD;CAEA,MAAc,eAA8B;EAC1C,KAAK,WAAW,MAAM,KAAK,YAAY;CACzC;AACF;AAEA,SAAS,yBAAyB,OAAyB;CACzD,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;CACrE,OAAO,kCAAkC,KAAK,OAAO;AACvD"}
@@ -1,11 +1,14 @@
1
- import type * as oauth from 'oauth4webapi';
2
- import type { CredentialStore } from './CredentialStore.js';
3
- export declare class DPoPKeyStore {
4
- private readonly credentials;
5
- constructor(credentials: CredentialStore);
6
- generate(): Promise<oauth.CryptoKeyPair>;
7
- save(reference: string, pair: oauth.CryptoKeyPair): Promise<void>;
8
- load(reference: string): Promise<oauth.CryptoKeyPair | undefined>;
9
- delete(reference: string): Promise<void>;
1
+ import { CredentialStore } from "./CredentialStore.js";
2
+ import * as oauth from "oauth4webapi";
3
+ //#region src/control-plane/DPoPKeyStore.d.ts
4
+ declare class DPoPKeyStore {
5
+ private readonly credentials;
6
+ constructor(credentials: CredentialStore);
7
+ generate(): Promise<oauth.CryptoKeyPair>;
8
+ save(reference: string, pair: oauth.CryptoKeyPair): Promise<void>;
9
+ load(reference: string): Promise<oauth.CryptoKeyPair | undefined>;
10
+ delete(reference: string): Promise<void>;
10
11
  }
12
+ //#endregion
13
+ export { DPoPKeyStore };
11
14
  //# sourceMappingURL=DPoPKeyStore.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DPoPKeyStore.d.ts","sourceRoot":"","sources":["../../src/control-plane/DPoPKeyStore.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAQ5D,qBAAa,YAAY;IACJ,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAAX,WAAW,EAAE,eAAe;IAEnD,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC;IAKxC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAajE,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,GAAG,SAAS,CAAC;IA4BjE,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGtD"}
1
+ {"version":3,"file":"DPoPKeyStore.d.ts","names":[],"sources":["../../src/control-plane/DPoPKeyStore.ts"],"mappings":";;;cAUa;mBACyB;EAApC,YAAoC,aAAa;EAEpC,YAAY,QAAQ,MAAM;EAK1B,KAAK,mBAAmB,MAAM,MAAM,gBAAgB;EAapD,KAAK,oBAAoB,QAAQ,MAAM;EA4BvC,OAAO,oBAAoB"}
@@ -1,54 +1,58 @@
1
- import { webcrypto } from 'node:crypto';
2
- export class DPoPKeyStore {
3
- credentials;
4
- constructor(credentials) {
5
- this.credentials = credentials;
6
- }
7
- async generate() {
8
- const { generateKeyPair } = await import('oauth4webapi');
9
- return generateKeyPair('ES256', { extractable: true });
10
- }
11
- async save(reference, pair) {
12
- const [publicKey, privateKey] = await Promise.all([
13
- webcrypto.subtle.exportKey('jwk', pair.publicKey),
14
- webcrypto.subtle.exportKey('jwk', pair.privateKey),
15
- ]);
16
- const serialized = {
17
- algorithm: 'ES256',
18
- publicKey,
19
- privateKey,
20
- };
21
- await this.credentials.set(reference, JSON.stringify(serialized));
22
- }
23
- async load(reference) {
24
- const raw = await this.credentials.get(reference);
25
- if (!raw)
26
- return undefined;
27
- let saved;
28
- try {
29
- saved = JSON.parse(raw);
30
- }
31
- catch (error) {
32
- throw new Error('The saved UAPKG DPoP key is not valid JSON.', { cause: error });
33
- }
34
- if (saved.algorithm !== 'ES256' || !saved.publicKey || !saved.privateKey) {
35
- throw new Error('The saved UAPKG DPoP key has an unsupported format.');
36
- }
37
- const algorithm = { name: 'ECDSA', namedCurve: 'P-256' };
38
- const [publicKey, privateKey] = await Promise.all([
39
- webcrypto.subtle.importKey('jwk', saved.publicKey, algorithm, true, ['verify']),
40
- webcrypto.subtle.importKey('jwk', saved.privateKey, algorithm, true, ['sign']),
41
- ]);
42
- const challenge = webcrypto.getRandomValues(new Uint8Array(32));
43
- const signature = await webcrypto.subtle.sign({ name: 'ECDSA', hash: 'SHA-256' }, privateKey, challenge);
44
- const matches = await webcrypto.subtle.verify({ name: 'ECDSA', hash: 'SHA-256' }, publicKey, signature, challenge);
45
- if (!matches) {
46
- throw new Error('The saved UAPKG DPoP public and private keys do not match.');
47
- }
48
- return { publicKey, privateKey };
49
- }
50
- async delete(reference) {
51
- await this.credentials.delete(reference);
52
- }
53
- }
1
+ import { webcrypto } from "node:crypto";
2
+
3
+ //#region src/control-plane/DPoPKeyStore.ts
4
+ var DPoPKeyStore = class {
5
+ credentials;
6
+ constructor(credentials) {
7
+ this.credentials = credentials;
8
+ }
9
+ async generate() {
10
+ const { generateKeyPair } = await import("oauth4webapi");
11
+ return generateKeyPair("ES256", { extractable: true });
12
+ }
13
+ async save(reference, pair) {
14
+ const [publicKey, privateKey] = await Promise.all([webcrypto.subtle.exportKey("jwk", pair.publicKey), webcrypto.subtle.exportKey("jwk", pair.privateKey)]);
15
+ const serialized = {
16
+ algorithm: "ES256",
17
+ publicKey,
18
+ privateKey
19
+ };
20
+ await this.credentials.set(reference, JSON.stringify(serialized));
21
+ }
22
+ async load(reference) {
23
+ const raw = await this.credentials.get(reference);
24
+ if (!raw) return void 0;
25
+ let saved;
26
+ try {
27
+ saved = JSON.parse(raw);
28
+ } catch (error) {
29
+ throw new Error("The saved UAPKG DPoP key is not valid JSON.", { cause: error });
30
+ }
31
+ if (saved.algorithm !== "ES256" || !saved.publicKey || !saved.privateKey) throw new Error("The saved UAPKG DPoP key has an unsupported format.");
32
+ const algorithm = {
33
+ name: "ECDSA",
34
+ namedCurve: "P-256"
35
+ };
36
+ const [publicKey, privateKey] = await Promise.all([webcrypto.subtle.importKey("jwk", saved.publicKey, algorithm, true, ["verify"]), webcrypto.subtle.importKey("jwk", saved.privateKey, algorithm, true, ["sign"])]);
37
+ const challenge = webcrypto.getRandomValues(/* @__PURE__ */ new Uint8Array(32));
38
+ const signature = await webcrypto.subtle.sign({
39
+ name: "ECDSA",
40
+ hash: "SHA-256"
41
+ }, privateKey, challenge);
42
+ if (!await webcrypto.subtle.verify({
43
+ name: "ECDSA",
44
+ hash: "SHA-256"
45
+ }, publicKey, signature, challenge)) throw new Error("The saved UAPKG DPoP public and private keys do not match.");
46
+ return {
47
+ publicKey,
48
+ privateKey
49
+ };
50
+ }
51
+ async delete(reference) {
52
+ await this.credentials.delete(reference);
53
+ }
54
+ };
55
+
56
+ //#endregion
57
+ export { DPoPKeyStore };
54
58
  //# sourceMappingURL=DPoPKeyStore.js.map