@uapkg/cli 1.1.10 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/dist/app/CompositionRoot.d.ts +6 -0
  2. package/dist/app/CompositionRoot.d.ts.map +1 -1
  3. package/dist/app/CompositionRoot.js +16 -0
  4. package/dist/app/CompositionRoot.js.map +1 -1
  5. package/dist/app/UAPKGApplication.d.ts.map +1 -1
  6. package/dist/app/UAPKGApplication.js +62 -2
  7. package/dist/app/UAPKGApplication.js.map +1 -1
  8. package/dist/build/BuildMetadata.d.ts +12 -0
  9. package/dist/build/BuildMetadata.d.ts.map +1 -0
  10. package/dist/build/BuildMetadata.js +6 -0
  11. package/dist/cli/UAPKGCommandLine.d.ts +98 -3
  12. package/dist/cli/UAPKGCommandLine.d.ts.map +1 -1
  13. package/dist/cli/UAPKGCommandLine.js +69 -0
  14. package/dist/cli/UAPKGCommandLine.js.map +1 -1
  15. package/dist/cli/parsing/UAPKGCommandLineParser.d.ts.map +1 -1
  16. package/dist/cli/parsing/UAPKGCommandLineParser.js +8 -1
  17. package/dist/cli/parsing/UAPKGCommandLineParser.js.map +1 -1
  18. package/dist/cli/parsing/UAPKGParserRegistry.d.ts.map +1 -1
  19. package/dist/cli/parsing/UAPKGParserRegistry.js +12 -0
  20. package/dist/cli/parsing/UAPKGParserRegistry.js.map +1 -1
  21. package/dist/cli/parsing/modules/LifecycleCommandModule.d.ts +11 -0
  22. package/dist/cli/parsing/modules/LifecycleCommandModule.d.ts.map +1 -0
  23. package/dist/cli/parsing/modules/LifecycleCommandModule.js +56 -0
  24. package/dist/cli/parsing/modules/LifecycleCommandModule.js.map +1 -0
  25. package/dist/cli/parsing/modules/LoginCommandModule.d.ts +7 -0
  26. package/dist/cli/parsing/modules/LoginCommandModule.d.ts.map +1 -0
  27. package/dist/cli/parsing/modules/LoginCommandModule.js +34 -0
  28. package/dist/cli/parsing/modules/LoginCommandModule.js.map +1 -0
  29. package/dist/cli/parsing/modules/LogoutCommandModule.d.ts +7 -0
  30. package/dist/cli/parsing/modules/LogoutCommandModule.d.ts.map +1 -0
  31. package/dist/cli/parsing/modules/LogoutCommandModule.js +29 -0
  32. package/dist/cli/parsing/modules/LogoutCommandModule.js.map +1 -0
  33. package/dist/cli/parsing/modules/PublishCommandModule.d.ts +7 -0
  34. package/dist/cli/parsing/modules/PublishCommandModule.d.ts.map +1 -0
  35. package/dist/cli/parsing/modules/PublishCommandModule.js +50 -0
  36. package/dist/cli/parsing/modules/PublishCommandModule.js.map +1 -0
  37. package/dist/cli/parsing/modules/RegistryCommandModule.d.ts.map +1 -1
  38. package/dist/cli/parsing/modules/RegistryCommandModule.js +31 -2
  39. package/dist/cli/parsing/modules/RegistryCommandModule.js.map +1 -1
  40. package/dist/cli/parsing/modules/RequestsCommandModule.d.ts +7 -0
  41. package/dist/cli/parsing/modules/RequestsCommandModule.d.ts.map +1 -0
  42. package/dist/cli/parsing/modules/RequestsCommandModule.js +63 -0
  43. package/dist/cli/parsing/modules/RequestsCommandModule.js.map +1 -0
  44. package/dist/cli/parsing/modules/WhoamiCommandModule.d.ts +7 -0
  45. package/dist/cli/parsing/modules/WhoamiCommandModule.d.ts.map +1 -0
  46. package/dist/cli/parsing/modules/WhoamiCommandModule.js +29 -0
  47. package/dist/cli/parsing/modules/WhoamiCommandModule.js.map +1 -0
  48. package/dist/cli-bootstrap.d.ts +2 -0
  49. package/dist/cli-bootstrap.d.ts.map +1 -0
  50. package/dist/cli-bootstrap.js +17 -0
  51. package/dist/cli-bootstrap.js.map +1 -0
  52. package/dist/cli.js +24 -17
  53. package/dist/commands/InstallCommand.d.ts.map +1 -1
  54. package/dist/commands/InstallCommand.js +21 -6
  55. package/dist/commands/InstallCommand.js.map +1 -1
  56. package/dist/commands/LoginCommand.d.ts +17 -0
  57. package/dist/commands/LoginCommand.d.ts.map +1 -0
  58. package/dist/commands/LoginCommand.js +73 -0
  59. package/dist/commands/LoginCommand.js.map +1 -0
  60. package/dist/commands/LogoutCommand.d.ts +15 -0
  61. package/dist/commands/LogoutCommand.d.ts.map +1 -0
  62. package/dist/commands/LogoutCommand.js +38 -0
  63. package/dist/commands/LogoutCommand.js.map +1 -0
  64. package/dist/commands/PackageLifecycleCommand.d.ts +28 -0
  65. package/dist/commands/PackageLifecycleCommand.d.ts.map +1 -0
  66. package/dist/commands/PackageLifecycleCommand.js +143 -0
  67. package/dist/commands/PackageLifecycleCommand.js.map +1 -0
  68. package/dist/commands/PostinstallCandidateBuilder.d.ts +1 -1
  69. package/dist/commands/PostinstallCandidateBuilder.d.ts.map +1 -1
  70. package/dist/commands/PostinstallCandidateBuilder.js +4 -1
  71. package/dist/commands/PostinstallCandidateBuilder.js.map +1 -1
  72. package/dist/commands/PublishCommand.d.ts +32 -0
  73. package/dist/commands/PublishCommand.d.ts.map +1 -0
  74. package/dist/commands/PublishCommand.js +270 -0
  75. package/dist/commands/PublishCommand.js.map +1 -0
  76. package/dist/commands/RegistryCommand.d.ts +13 -3
  77. package/dist/commands/RegistryCommand.d.ts.map +1 -1
  78. package/dist/commands/RegistryCommand.js +115 -11
  79. package/dist/commands/RegistryCommand.js.map +1 -1
  80. package/dist/commands/RequestsCommand.d.ts +21 -0
  81. package/dist/commands/RequestsCommand.d.ts.map +1 -0
  82. package/dist/commands/RequestsCommand.js +98 -0
  83. package/dist/commands/RequestsCommand.js.map +1 -0
  84. package/dist/commands/WhoamiCommand.d.ts +32 -0
  85. package/dist/commands/WhoamiCommand.d.ts.map +1 -0
  86. package/dist/commands/WhoamiCommand.js +75 -0
  87. package/dist/commands/WhoamiCommand.js.map +1 -0
  88. package/dist/commands/add/DependencyAddResolver.d.ts.map +1 -1
  89. package/dist/commands/add/DependencyAddResolver.js +4 -2
  90. package/dist/commands/add/DependencyAddResolver.js.map +1 -1
  91. package/dist/control-plane/AccountManager.d.ts +110 -0
  92. package/dist/control-plane/AccountManager.d.ts.map +1 -0
  93. package/dist/control-plane/AccountManager.js +1014 -0
  94. package/dist/control-plane/AccountManager.js.map +1 -0
  95. package/dist/control-plane/ArtifactObserver.d.ts +24 -0
  96. package/dist/control-plane/ArtifactObserver.d.ts.map +1 -0
  97. package/dist/control-plane/ArtifactObserver.js +63 -0
  98. package/dist/control-plane/ArtifactObserver.js.map +1 -0
  99. package/dist/control-plane/AuthMetadataStore.d.ts +15 -0
  100. package/dist/control-plane/AuthMetadataStore.d.ts.map +1 -0
  101. package/dist/control-plane/AuthMetadataStore.js +116 -0
  102. package/dist/control-plane/AuthMetadataStore.js.map +1 -0
  103. package/dist/control-plane/AuthStoragePaths.d.ts +11 -0
  104. package/dist/control-plane/AuthStoragePaths.d.ts.map +1 -0
  105. package/dist/control-plane/AuthStoragePaths.js +17 -0
  106. package/dist/control-plane/AuthStoragePaths.js.map +1 -0
  107. package/dist/control-plane/AuthenticationSelector.d.ts +21 -0
  108. package/dist/control-plane/AuthenticationSelector.d.ts.map +1 -0
  109. package/dist/control-plane/AuthenticationSelector.js +64 -0
  110. package/dist/control-plane/AuthenticationSelector.js.map +1 -0
  111. package/dist/control-plane/ControlPlaneClient.d.ts +32 -0
  112. package/dist/control-plane/ControlPlaneClient.d.ts.map +1 -0
  113. package/dist/control-plane/ControlPlaneClient.js +280 -0
  114. package/dist/control-plane/ControlPlaneClient.js.map +1 -0
  115. package/dist/control-plane/ControlPlaneEndpoints.d.ts +13 -0
  116. package/dist/control-plane/ControlPlaneEndpoints.d.ts.map +1 -0
  117. package/dist/control-plane/ControlPlaneEndpoints.js +19 -0
  118. package/dist/control-plane/ControlPlaneEndpoints.js.map +1 -0
  119. package/dist/control-plane/ControlPlaneTypes.d.ts +168 -0
  120. package/dist/control-plane/ControlPlaneTypes.d.ts.map +1 -0
  121. package/dist/control-plane/ControlPlaneTypes.js +93 -0
  122. package/dist/control-plane/ControlPlaneTypes.js.map +1 -0
  123. package/dist/control-plane/CredentialStore.d.ts +28 -0
  124. package/dist/control-plane/CredentialStore.d.ts.map +1 -0
  125. package/dist/control-plane/CredentialStore.js +87 -0
  126. package/dist/control-plane/CredentialStore.js.map +1 -0
  127. package/dist/control-plane/DPoPKeyStore.d.ts +11 -0
  128. package/dist/control-plane/DPoPKeyStore.d.ts.map +1 -0
  129. package/dist/control-plane/DPoPKeyStore.js +54 -0
  130. package/dist/control-plane/DPoPKeyStore.js.map +1 -0
  131. package/dist/control-plane/GitHubActionsOidcCredentialProvider.d.ts +6 -0
  132. package/dist/control-plane/GitHubActionsOidcCredentialProvider.d.ts.map +1 -0
  133. package/dist/control-plane/GitHubActionsOidcCredentialProvider.js +67 -0
  134. package/dist/control-plane/GitHubActionsOidcCredentialProvider.js.map +1 -0
  135. package/dist/control-plane/PublishIdempotencyStore.d.ts +18 -0
  136. package/dist/control-plane/PublishIdempotencyStore.d.ts.map +1 -0
  137. package/dist/control-plane/PublishIdempotencyStore.js +71 -0
  138. package/dist/control-plane/PublishIdempotencyStore.js.map +1 -0
  139. package/dist/control-plane/RegistryGrantLock.d.ts +35 -0
  140. package/dist/control-plane/RegistryGrantLock.d.ts.map +1 -0
  141. package/dist/control-plane/RegistryGrantLock.js +199 -0
  142. package/dist/control-plane/RegistryGrantLock.js.map +1 -0
  143. package/dist/control-plane/RegistryTrustResolver.d.ts +17 -0
  144. package/dist/control-plane/RegistryTrustResolver.d.ts.map +1 -0
  145. package/dist/control-plane/RegistryTrustResolver.js +140 -0
  146. package/dist/control-plane/RegistryTrustResolver.js.map +1 -0
  147. package/dist/index.d.ts +16 -3
  148. package/dist/index.d.ts.map +1 -1
  149. package/dist/index.js +16 -2
  150. package/dist/index.js.map +1 -1
  151. package/dist/postinstall/markers/MarkerIntegrityValidator.d.ts +1 -1
  152. package/dist/prompts/InkPromptService.d.ts +1 -0
  153. package/dist/prompts/InkPromptService.d.ts.map +1 -1
  154. package/dist/prompts/InkPromptService.js +20 -0
  155. package/dist/prompts/InkPromptService.js.map +1 -1
  156. package/dist/prompts/PromptService.d.ts +2 -0
  157. package/dist/prompts/PromptService.d.ts.map +1 -1
  158. package/dist/reporting/JsonReporter.d.ts +2 -0
  159. package/dist/reporting/JsonReporter.d.ts.map +1 -1
  160. package/dist/reporting/JsonReporter.js +6 -0
  161. package/dist/reporting/JsonReporter.js.map +1 -1
  162. package/package.json +21 -15
  163. package/dist/cli.d.ts +0 -3
  164. package/dist/cli.d.ts.map +0 -1
  165. package/dist/cli.js.map +0 -1
@@ -0,0 +1,17 @@
1
+ import type { CompositionRoot } from '../app/CompositionRoot.js';
2
+ import type { UAPKGOutputFormat } from '../cli/UAPKGCommandLine.js';
3
+ import type { Command } from './Command.js';
4
+ export interface LoginCommandOptions {
5
+ readonly registry?: string;
6
+ readonly deviceName?: string;
7
+ readonly reauthorize: boolean;
8
+ readonly outputFormat: UAPKGOutputFormat;
9
+ }
10
+ export declare class LoginCommand implements Command {
11
+ private readonly root;
12
+ private readonly options;
13
+ constructor(root: CompositionRoot, options: LoginCommandOptions);
14
+ execute(): Promise<number>;
15
+ private reportProgress;
16
+ }
17
+ //# sourceMappingURL=LoginCommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoginCommand.d.ts","sourceRoot":"","sources":["../../src/commands/LoginCommand.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;CAC1C;AAED,qBAAa,YAAa,YAAW,OAAO;IAExC,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBADP,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,mBAAmB;IAGlC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAoCvC,OAAO,CAAC,cAAc;CA6BvB"}
@@ -0,0 +1,73 @@
1
+ import { loginDiagnosticForError } from '../control-plane/AccountManager.js';
2
+ export class LoginCommand {
3
+ root;
4
+ options;
5
+ constructor(root, options) {
6
+ this.root = root;
7
+ this.options = options;
8
+ }
9
+ async execute() {
10
+ try {
11
+ const trust = await this.root.registryTrustResolver.resolve(this.options.registry);
12
+ const result = await this.root.accountManager.login(trust, {
13
+ deviceName: this.options.deviceName,
14
+ reauthorize: this.options.reauthorize,
15
+ onProgress: (event) => this.reportProgress(event),
16
+ });
17
+ if (this.options.outputFormat === 'json') {
18
+ this.root.json.emitSuccess('login', {
19
+ registry: { alias: trust.alias, id: trust.registryId, name: trust.registryName },
20
+ account: result.grant.account,
21
+ deviceName: result.grant.deviceName,
22
+ expiresAt: result.grant.expiresAt,
23
+ warnings: result.warnings,
24
+ });
25
+ }
26
+ else {
27
+ process.stdout.write(`Logged in to "${trust.alias}" as ${result.grant.account.username} on ${result.grant.deviceName}.\n`);
28
+ }
29
+ for (const warning of result.warnings) {
30
+ process.stderr.write(`Warning: ${warning}\n`);
31
+ }
32
+ return 0;
33
+ }
34
+ catch (error) {
35
+ const diagnostic = loginDiagnosticForError(error);
36
+ if (this.options.outputFormat === 'json') {
37
+ this.root.json.emitError('login', [diagnostic]);
38
+ }
39
+ else {
40
+ process.stderr.write(`${diagnostic.message}\n`);
41
+ }
42
+ return 1;
43
+ }
44
+ }
45
+ reportProgress(event) {
46
+ switch (event.type) {
47
+ case 'preparing':
48
+ process.stderr.write(`Preparing browser authorization for "${event.registryAlias}"…\n`);
49
+ break;
50
+ case 'opening-browser':
51
+ process.stderr.write('Opening the UAPKG account page…\n');
52
+ break;
53
+ case 'browser-open-failed':
54
+ process.stderr.write(`Unable to open the browser automatically. Open this one-time URL to continue:\n${event.authorizationUrl}\n`);
55
+ break;
56
+ case 'waiting-for-decision':
57
+ process.stderr.write('Waiting for you to approve or deny access in the browser…\n');
58
+ break;
59
+ case 'approval-received':
60
+ process.stderr.write('Approval received. Verifying the account…\n');
61
+ break;
62
+ case 'saving-local-credentials':
63
+ process.stderr.write("Saving credentials in this device's protected credential store…\n");
64
+ break;
65
+ case 'confirming-with-service':
66
+ process.stderr.write('Local credentials saved. Confirming the login with UAPKG…\n');
67
+ break;
68
+ default:
69
+ event;
70
+ }
71
+ }
72
+ }
73
+ //# sourceMappingURL=LoginCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoginCommand.js","sourceRoot":"","sources":["../../src/commands/LoginCommand.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { CompositionRoot } from '../app/CompositionRoot.js';
2
+ import type { UAPKGOutputFormat } from '../cli/UAPKGCommandLine.js';
3
+ import type { Command } from './Command.js';
4
+ export interface LogoutCommandOptions {
5
+ readonly registry?: string;
6
+ readonly localOnly: boolean;
7
+ readonly outputFormat: UAPKGOutputFormat;
8
+ }
9
+ export declare class LogoutCommand implements Command {
10
+ private readonly root;
11
+ private readonly options;
12
+ constructor(root: CompositionRoot, options: LogoutCommandOptions);
13
+ execute(): Promise<number>;
14
+ }
15
+ //# sourceMappingURL=LogoutCommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LogoutCommand.d.ts","sourceRoot":"","sources":["../../src/commands/LogoutCommand.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;CAC1C;AAED,qBAAa,aAAc,YAAW,OAAO;IAEzC,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBADP,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,oBAAoB;IAGnC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;CA4BxC"}
@@ -0,0 +1,38 @@
1
+ import { describeControlPlaneError } from '../control-plane/AccountManager.js';
2
+ export class LogoutCommand {
3
+ root;
4
+ options;
5
+ constructor(root, options) {
6
+ this.root = root;
7
+ this.options = options;
8
+ }
9
+ async execute() {
10
+ try {
11
+ const trust = await this.root.registryTrustResolver.resolve(this.options.registry);
12
+ const result = await this.root.accountManager.logout(trust, this.options.localOnly);
13
+ if (this.options.outputFormat === 'json') {
14
+ process.stdout.write(`${JSON.stringify({
15
+ ok: true,
16
+ registry: { alias: trust.alias, id: trust.registryId },
17
+ removed: result === 'removed',
18
+ serverRevoked: result === 'removed' && !this.options.localOnly,
19
+ })}\n`);
20
+ }
21
+ else if (result === 'not-logged-in') {
22
+ process.stdout.write(`No saved login exists for "${trust.alias}".\n`);
23
+ }
24
+ else if (this.options.localOnly) {
25
+ process.stdout.write(`Removed the local login for "${trust.alias}". The remote grant may remain active; revoke it from the account website.\n`);
26
+ }
27
+ else {
28
+ process.stdout.write(`Revoked and removed the saved login for "${trust.alias}".\n`);
29
+ }
30
+ return 0;
31
+ }
32
+ catch (error) {
33
+ process.stderr.write(`${describeControlPlaneError(error)}\n`);
34
+ return 1;
35
+ }
36
+ }
37
+ }
38
+ //# sourceMappingURL=LogoutCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LogoutCommand.js","sourceRoot":"","sources":["../../src/commands/LogoutCommand.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAS/E,MAAM,OAAO,aAAa;IAEL;IACA;IAFnB,YACmB,IAAqB,EACrB,OAA6B;QAD7B,SAAI,GAAJ,IAAI,CAAiB;QACrB,YAAO,GAAP,OAAO,CAAsB;IAC7C,CAAC;IAEG,KAAK,CAAC,OAAO;QAClB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACnF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACpF,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,KAAK,MAAM,EAAE,CAAC;gBACzC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,IAAI,CAAC,SAAS,CAAC;oBAChB,EAAE,EAAE,IAAI;oBACR,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,KAAK,CAAC,UAAU,EAAE;oBACtD,OAAO,EAAE,MAAM,KAAK,SAAS;oBAC7B,aAAa,EAAE,MAAM,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS;iBAC/D,CAAC,IAAI,CACP,CAAC;YACJ,CAAC;iBAAM,IAAI,MAAM,KAAK,eAAe,EAAE,CAAC;gBACtC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,KAAK,CAAC,KAAK,MAAM,CAAC,CAAC;YACxE,CAAC;iBAAM,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;gBAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,gCAAgC,KAAK,CAAC,KAAK,8EAA8E,CAC1H,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4CAA4C,KAAK,CAAC,KAAK,MAAM,CAAC,CAAC;YACtF,CAAC;YACD,OAAO,CAAC,CAAC;QACX,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,yBAAyB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9D,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,28 @@
1
+ import type { CompositionRoot } from '../app/CompositionRoot.js';
2
+ import type { UAPKGLifecycleCommandName, UAPKGOutputFormat } from '../cli/UAPKGCommandLine.js';
3
+ import { type ControlPlaneAuthMode } from '../control-plane/ControlPlaneTypes.js';
4
+ import type { Command } from './Command.js';
5
+ export interface PackageLifecycleCommandOptions {
6
+ readonly operation: UAPKGLifecycleCommandName;
7
+ readonly packageName: string;
8
+ readonly packageVersion: string;
9
+ readonly reason?: string;
10
+ readonly registry?: string;
11
+ readonly auth: ControlPlaneAuthMode;
12
+ readonly detach: boolean;
13
+ readonly outputFormat: UAPKGOutputFormat;
14
+ }
15
+ /**
16
+ * Shared implementation of the five route-derived package lifecycle
17
+ * operations (`uapkg yank|unyank|unpublish|deprecate|undeprecate`). Each
18
+ * command posts to its dedicated submission route and watches the request
19
+ * to readiness unless detached.
20
+ */
21
+ export declare class PackageLifecycleCommand implements Command {
22
+ private readonly root;
23
+ private readonly options;
24
+ constructor(root: CompositionRoot, options: PackageLifecycleCommandOptions);
25
+ execute(): Promise<number>;
26
+ private print;
27
+ }
28
+ //# sourceMappingURL=PackageLifecycleCommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PackageLifecycleCommand.d.ts","sourceRoot":"","sources":["../../src/commands/PackageLifecycleCommand.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAI/F,OAAO,EACL,KAAK,oBAAoB,EAI1B,MAAM,uCAAuC,CAAC;AAG/C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAY5C,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,SAAS,EAAE,yBAAyB,CAAC;IAC9C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;CAC1C;AAED;;;;;GAKG;AACH,qBAAa,uBAAwB,YAAW,OAAO;IAEnD,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBADP,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,8BAA8B;IAG7C,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAmGvC,OAAO,CAAC,KAAK;CA0Bd"}
@@ -0,0 +1,143 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { describeControlPlaneError } from '../control-plane/AccountManager.js';
3
+ import { AuthenticationSelector } from '../control-plane/AuthenticationSelector.js';
4
+ import { ControlPlaneClient } from '../control-plane/ControlPlaneClient.js';
5
+ import { ControlPlaneError, } from '../control-plane/ControlPlaneTypes.js';
6
+ import { PublishIdempotencyStore } from '../control-plane/PublishIdempotencyStore.js';
7
+ import { InkPromptService } from '../prompts/InkPromptService.js';
8
+ const TERMINAL_STATUSES = new Set([
9
+ 'ready',
10
+ 'ready_superseded',
11
+ 'rejected',
12
+ 'operationally_failed',
13
+ ]);
14
+ const SUCCESS_STATUSES = new Set(['ready', 'ready_superseded']);
15
+ const WATCH_TIMEOUT_MS = 30 * 60 * 1000;
16
+ const REASON_REQUIRED = new Set(['yank', 'unyank', 'unpublish', 'deprecate']);
17
+ /**
18
+ * Shared implementation of the five route-derived package lifecycle
19
+ * operations (`uapkg yank|unyank|unpublish|deprecate|undeprecate`). Each
20
+ * command posts to its dedicated submission route and watches the request
21
+ * to readiness unless detached.
22
+ */
23
+ export class PackageLifecycleCommand {
24
+ root;
25
+ options;
26
+ constructor(root, options) {
27
+ this.root = root;
28
+ this.options = options;
29
+ }
30
+ async execute() {
31
+ try {
32
+ const { operation, packageName, packageVersion } = this.options;
33
+ if (!packageName.trim() || !packageVersion.trim()) {
34
+ throw new Error(`uapkg ${operation} requires a package name and an exact version.`);
35
+ }
36
+ const reason = this.options.reason?.trim();
37
+ if (REASON_REQUIRED.has(operation) && !reason) {
38
+ throw new Error(`uapkg ${operation} requires --reason describing why the version is changing state.`);
39
+ }
40
+ const trust = await this.root.registryTrustResolver.resolve(this.options.registry);
41
+ const selector = new AuthenticationSelector(this.root.accountManager, new InkPromptService());
42
+ const requestedScopes = this.options.detach
43
+ ? ['publishing.request.create']
44
+ : ['publishing.request.create', 'publishing.request.read.self'];
45
+ let authentication = await selector.select(this.options.auth, trust, requestedScopes, true);
46
+ let requestOtp = authentication.otp;
47
+ authentication = { kind: authentication.kind, credential: authentication.credential };
48
+ const submission = {
49
+ registryId: trust.registryId,
50
+ payload: {
51
+ packageName: packageName.trim(),
52
+ packageVersion: packageVersion.trim(),
53
+ ...(reason ? { reason } : {}),
54
+ },
55
+ };
56
+ const idempotencyStore = new PublishIdempotencyStore();
57
+ const submissionDigest = PublishIdempotencyStore.submissionDigest(operation, submission);
58
+ const idempotencyKey = idempotencyStore.getOrCreate(submissionDigest, () => randomUUID());
59
+ const client = new ControlPlaneClient(trust.apiBaseUrl);
60
+ let created;
61
+ try {
62
+ created = await client.submitRegistryRequest(authentication.credential, operation, submission, {
63
+ idempotencyKey,
64
+ otp: requestOtp,
65
+ });
66
+ }
67
+ finally {
68
+ // Do not retain the request-bound code during status reads or watch.
69
+ requestOtp = undefined;
70
+ }
71
+ if (this.options.detach) {
72
+ this.print(created.requestId, created.status, trust.alias, undefined);
73
+ return 0;
74
+ }
75
+ let request = await client.getRegistryRequest(authentication.credential, created.requestId);
76
+ let previousStatus = '';
77
+ const deadline = Date.now() + WATCH_TIMEOUT_MS;
78
+ while (!TERMINAL_STATUSES.has(request.status)) {
79
+ if (Date.now() >= deadline) {
80
+ throw new Error(`Timed out waiting for request ${request.id}. Check it with \`uapkg requests status ${request.id}\`.`);
81
+ }
82
+ if (this.options.outputFormat === 'text' && request.status !== previousStatus) {
83
+ process.stdout.write(`${request.id}: ${request.status}${request.currentStep ? ` (${request.currentStep})` : ''}\n`);
84
+ previousStatus = request.status;
85
+ }
86
+ await delay(2_000);
87
+ try {
88
+ request = await client.getRegistryRequest(authentication.credential, created.requestId);
89
+ }
90
+ catch (error) {
91
+ if (!(error instanceof ControlPlaneError) || error.status !== 401)
92
+ throw error;
93
+ if (authentication.kind === 'gat')
94
+ throw error;
95
+ if (authentication.kind === 'login') {
96
+ this.root.accountManager.invalidateAccessCredentials(trust);
97
+ }
98
+ authentication = await selector.select(authentication.kind, trust, ['publishing.request.read.self'], false);
99
+ request = await client.getRegistryRequest(authentication.credential, created.requestId);
100
+ }
101
+ }
102
+ idempotencyStore.clear(submissionDigest);
103
+ if (SUCCESS_STATUSES.has(request.status)) {
104
+ let refreshWarning;
105
+ try {
106
+ await this.root.registryTrustResolver.forceRefresh(trust);
107
+ }
108
+ catch (error) {
109
+ refreshWarning = error instanceof Error ? error.message : String(error);
110
+ }
111
+ this.print(request.id, request.status, trust.alias, refreshWarning);
112
+ return 0;
113
+ }
114
+ this.print(request.id, request.status, trust.alias, undefined);
115
+ return 1;
116
+ }
117
+ catch (error) {
118
+ process.stderr.write(`${describeControlPlaneError(error)}\n`);
119
+ return 1;
120
+ }
121
+ }
122
+ print(requestId, status, registryAlias, refreshWarning) {
123
+ if (this.options.outputFormat === 'json') {
124
+ process.stdout.write(`${JSON.stringify({
125
+ ok: this.options.detach || SUCCESS_STATUSES.has(status),
126
+ operation: this.options.operation,
127
+ registry: registryAlias,
128
+ requestId,
129
+ status,
130
+ ...(refreshWarning ? { registryRefreshWarning: refreshWarning } : {}),
131
+ })}\n`);
132
+ return;
133
+ }
134
+ process.stdout.write(`${this.options.operation} request ${requestId} for ${this.options.packageName}@${this.options.packageVersion}: ${status}.\n`);
135
+ if (refreshWarning) {
136
+ process.stderr.write(`The operation succeeded, but the local registry refresh failed: ${refreshWarning}\n`);
137
+ }
138
+ }
139
+ }
140
+ function delay(milliseconds) {
141
+ return new Promise((resolve) => setTimeout(resolve, milliseconds));
142
+ }
143
+ //# sourceMappingURL=PackageLifecycleCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PackageLifecycleCommand.js","sourceRoot":"","sources":["../../src/commands/PackageLifecycleCommand.ts"],"names":[],"mappings":"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"}
@@ -18,7 +18,7 @@ import type { PostinstallCandidate } from '../postinstall/runner/PostinstallOrch
18
18
  * to keep the postinstall subsystem independent of `@uapkg/installer`.
19
19
  */
20
20
  export declare class PostinstallCandidateBuilder {
21
- build(root: CompositionRoot, plan: InstallPlan, lockfile: Lockfile): PostinstallCandidate[];
21
+ build(root: CompositionRoot, plan: InstallPlan, lockfile: Lockfile, installedNames?: ReadonlySet<string>): PostinstallCandidate[];
22
22
  /** Convenience: returns `'project' | 'plugin'` for the orchestrator's input. */
23
23
  resolveManifestType(manifest: Manifest): 'project' | 'plugin';
24
24
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PostinstallCandidateBuilder.d.ts","sourceRoot":"","sources":["../../src/commands/PostinstallCandidateBuilder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kDAAkD,CAAC;AAE7F;;;;;;;;;;;;;;GAcG;AACH,qBAAa,2BAA2B;IAC/B,KAAK,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,GAAG,oBAAoB,EAAE;IAiBlG,gFAAgF;IACzE,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ;CAGrE"}
1
+ {"version":3,"file":"PostinstallCandidateBuilder.d.ts","sourceRoot":"","sources":["../../src/commands/PostinstallCandidateBuilder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kDAAkD,CAAC;AAE7F;;;;;;;;;;;;;;GAcG;AACH,qBAAa,2BAA2B;IAC/B,KAAK,CACV,IAAI,EAAE,eAAe,EACrB,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,QAAQ,EAClB,cAAc,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GACnC,oBAAoB,EAAE;IAmBzB,gFAAgF;IACzE,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ;CAGrE"}
@@ -15,12 +15,15 @@ import * as path from 'node:path';
15
15
  * to keep the postinstall subsystem independent of `@uapkg/installer`.
16
16
  */
17
17
  export class PostinstallCandidateBuilder {
18
- build(root, plan, lockfile) {
18
+ build(root, plan, lockfile, installedNames) {
19
19
  const lockPackages = lockfile.packages;
20
20
  const candidates = [];
21
21
  for (const action of plan.actions) {
22
22
  if (action.type !== 'add' && action.type !== 'update')
23
23
  continue;
24
+ // Failed/skipped branches never run postinstall.
25
+ if (installedNames && !installedNames.has(action.packageName))
26
+ continue;
24
27
  const locked = lockPackages[action.packageName];
25
28
  const registry = locked?.registry ?? action.registry;
26
29
  if (!registry)
@@ -1 +1 @@
1
- {"version":3,"file":"PostinstallCandidateBuilder.js","sourceRoot":"","sources":["../../src/commands/PostinstallCandidateBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAMlC;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,2BAA2B;IAC/B,KAAK,CAAC,IAAqB,EAAE,IAAiB,EAAE,QAAkB;QACvE,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAgD,CAAC;QAC/E,MAAM,UAAU,GAA2B,EAAE,CAAC;QAC9C,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ;gBAAE,SAAS;YAChE,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAChD,MAAM,QAAQ,GAAG,MAAM,EAAE,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC;YACrD,IAAI,CAAC,QAAQ;gBAAE,SAAS;YACxB,UAAU,CAAC,IAAI,CAAC;gBACd,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,QAAQ,EAAE,QAAkB;gBAC5B,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC;aAC7C,CAAC,CAAC;QACL,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,gFAAgF;IACzE,mBAAmB,CAAC,QAAkB;QAC3C,OAAO,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC5D,CAAC;CACF"}
1
+ {"version":3,"file":"PostinstallCandidateBuilder.js","sourceRoot":"","sources":["../../src/commands/PostinstallCandidateBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAMlC;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,2BAA2B;IAC/B,KAAK,CACV,IAAqB,EACrB,IAAiB,EACjB,QAAkB,EAClB,cAAoC;QAEpC,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAgD,CAAC;QAC/E,MAAM,UAAU,GAA2B,EAAE,CAAC;QAC9C,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ;gBAAE,SAAS;YAChE,iDAAiD;YACjD,IAAI,cAAc,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC;gBAAE,SAAS;YACxE,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAChD,MAAM,QAAQ,GAAG,MAAM,EAAE,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC;YACrD,IAAI,CAAC,QAAQ;gBAAE,SAAS;YACxB,UAAU,CAAC,IAAI,CAAC;gBACd,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,QAAQ,EAAE,QAAkB;gBAC5B,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC;aAC7C,CAAC,CAAC;QACL,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,gFAAgF;IACzE,mBAAmB,CAAC,QAAkB;QAC3C,OAAO,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC5D,CAAC;CACF"}
@@ -0,0 +1,32 @@
1
+ import type { CompositionRoot } from '../app/CompositionRoot.js';
2
+ import type { UAPKGOutputFormat } from '../cli/UAPKGCommandLine.js';
3
+ import { type ControlPlaneAuthMode } from '../control-plane/ControlPlaneTypes.js';
4
+ import type { Command } from './Command.js';
5
+ export interface PublishCommandOptions {
6
+ readonly registry?: string;
7
+ readonly owner?: string;
8
+ readonly repository?: string;
9
+ readonly tag?: string;
10
+ readonly asset?: string;
11
+ readonly assetPath?: string;
12
+ readonly auth: ControlPlaneAuthMode;
13
+ readonly detach: boolean;
14
+ readonly outputFormat: UAPKGOutputFormat;
15
+ }
16
+ /**
17
+ * Artifact-first publish (PS-REQ-002): the CLI observes the exact release
18
+ * artifact (download or `--asset-path`), reads packaged claims from it, and
19
+ * submits the route-derived publish operation. The packaged archive — never
20
+ * the working tree — is what gets published.
21
+ */
22
+ export declare class PublishCommand implements Command {
23
+ private readonly root;
24
+ private readonly options;
25
+ constructor(root: CompositionRoot, options: PublishCommandOptions);
26
+ execute(): Promise<number>;
27
+ private resolveSource;
28
+ private gitOrigin;
29
+ private printCreated;
30
+ private printTerminal;
31
+ }
32
+ //# sourceMappingURL=PublishCommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PublishCommand.d.ts","sourceRoot":"","sources":["../../src/commands/PublishCommand.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAKpE,OAAO,EACL,KAAK,oBAAoB,EAI1B,MAAM,uCAAuC,CAAC;AAG/C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAY5C,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;CAC1C;AAED;;;;;GAKG;AACH,qBAAa,cAAe,YAAW,OAAO;IAE1C,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBADP,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,qBAAqB;IAGpC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;YAgJzB,aAAa;YA0Bb,SAAS;IAevB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,aAAa;CAwBtB"}