@knpkv/jira-cli 1.3.1 → 1.4.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 (74) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +5 -5
  3. package/dist/JiraAuth.d.ts +23 -8
  4. package/dist/JiraAuth.d.ts.map +1 -1
  5. package/dist/JiraAuth.js +8 -303
  6. package/dist/JiraAuth.js.map +1 -1
  7. package/dist/bin.js +1 -1
  8. package/dist/bin.js.map +1 -1
  9. package/dist/commands/auth.d.ts +2 -2
  10. package/dist/commands/auth.d.ts.map +1 -1
  11. package/dist/commands/auth.js +8 -8
  12. package/dist/commands/auth.js.map +1 -1
  13. package/dist/commands/edit.d.ts +10 -1
  14. package/dist/commands/edit.d.ts.map +1 -1
  15. package/dist/commands/edit.js +9 -9
  16. package/dist/commands/edit.js.map +1 -1
  17. package/dist/commands/get.d.ts +6 -1
  18. package/dist/commands/get.d.ts.map +1 -1
  19. package/dist/commands/get.js +3 -3
  20. package/dist/commands/get.js.map +1 -1
  21. package/dist/commands/issue.d.ts +1 -1
  22. package/dist/commands/issue.d.ts.map +1 -1
  23. package/dist/commands/issue.js +1 -1
  24. package/dist/commands/issue.js.map +1 -1
  25. package/dist/commands/issueAttachment.d.ts +1 -1
  26. package/dist/commands/issueAttachment.d.ts.map +1 -1
  27. package/dist/commands/issueAttachment.js +13 -11
  28. package/dist/commands/issueAttachment.js.map +1 -1
  29. package/dist/commands/layers.d.ts +2 -2
  30. package/dist/commands/layers.d.ts.map +1 -1
  31. package/dist/commands/search.d.ts +6 -1
  32. package/dist/commands/search.d.ts.map +1 -1
  33. package/dist/commands/search.js +7 -7
  34. package/dist/commands/search.js.map +1 -1
  35. package/dist/commands/version.d.ts +9 -1
  36. package/dist/commands/version.d.ts.map +1 -1
  37. package/dist/commands/version.js +23 -23
  38. package/dist/commands/version.js.map +1 -1
  39. package/package.json +10 -10
  40. package/skills/jira/SKILL.md +4 -4
  41. package/src/JiraAuth.ts +24 -477
  42. package/src/bin.ts +1 -1
  43. package/src/commands/auth.ts +8 -8
  44. package/src/commands/edit.ts +9 -9
  45. package/src/commands/get.ts +3 -3
  46. package/src/commands/issue.ts +1 -1
  47. package/src/commands/issueAttachment.ts +21 -20
  48. package/src/commands/search.ts +7 -7
  49. package/src/commands/version.ts +26 -29
  50. package/test/IssueService.test.ts +2 -2
  51. package/test/JiraAuth.test.ts +79 -0
  52. package/test/VersionService.test.ts +2 -2
  53. package/test/commandTree.test.ts +1 -1
  54. package/test/integration.test.ts +7 -7
  55. package/test/remoteWrites.test.ts +3 -3
  56. package/vitest.config.integration.ts +4 -1
  57. package/vitest.config.ts +4 -1
  58. package/dist/internal/NodeLayers.d.ts +0 -7
  59. package/dist/internal/NodeLayers.d.ts.map +0 -1
  60. package/dist/internal/NodeLayers.js +0 -15
  61. package/dist/internal/NodeLayers.js.map +0 -1
  62. package/dist/internal/oauthServer.d.ts +0 -72
  63. package/dist/internal/oauthServer.d.ts.map +0 -1
  64. package/dist/internal/oauthServer.js +0 -96
  65. package/dist/internal/oauthServer.js.map +0 -1
  66. package/dist/internal/openBrowser.d.ts +0 -10
  67. package/dist/internal/openBrowser.d.ts.map +0 -1
  68. package/dist/internal/openBrowser.js +0 -17
  69. package/dist/internal/openBrowser.js.map +0 -1
  70. package/src/internal/NodeLayers.ts +0 -17
  71. package/src/internal/oauthServer.ts +0 -186
  72. package/src/internal/openBrowser.ts +0 -31
  73. package/test/JiraAuthRefresh.test.ts +0 -269
  74. package/test/oauthServer.test.ts +0 -171
package/CHANGELOG.md CHANGED
@@ -1,5 +1,36 @@
1
1
  # @knpkv/jira-cli
2
2
 
3
+ ## 1.4.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [#462](https://github.com/knpkv/npm/pull/462) [`a5490aa`](https://github.com/knpkv/npm/commit/a5490aad738507f2a3a7d7cb4babf3545d287087) Thanks [@konopkov](https://github.com/konopkov)! - `@knpkv/atlassian-common/cli-auth` now holds the browser login and rotating refresh-token flow that `jira` and `confluence` each carried a copy of; both CLIs bind it with `makeAtlassianCliAuth`. Login no longer gives up when no browser opens — it says so on stderr and keeps waiting, since the URL is already printed (`jira` used to treat a launcher that ran but failed as success; `confluence` aborted the login). `jira` login also reports the provider's error code when its description is empty, and reports callback-server failures as `OAuthError`.
8
+
9
+ Jira Clockify's timeout documentation now points to the shared refresh implementation.
10
+
11
+ - Updated dependencies [[`a5490aa`](https://github.com/knpkv/npm/commit/a5490aad738507f2a3a7d7cb4babf3545d287087)]:
12
+ - @knpkv/atlassian-common@1.6.0
13
+
14
+ ## 1.4.0
15
+
16
+ ### Minor Changes
17
+
18
+ - [#452](https://github.com/knpkv/npm/pull/452) [`755eafa`](https://github.com/knpkv/npm/commit/755eafab8c0bc3e82b00e2dd27c68d669a1de87e) Thanks [@konopkov](https://github.com/konopkov)! - Upgrade to Effect 4.0.0 stable. `effect` and every `@effect/*` dependency or peer dependency now require `4.0.0`; imports move from the removed `effect/unstable/*` paths to `effect/*`.
19
+
20
+ ### Patch Changes
21
+
22
+ - [#452](https://github.com/knpkv/npm/pull/452) [`755eafa`](https://github.com/knpkv/npm/commit/755eafab8c0bc3e82b00e2dd27c68d669a1de87e) Thanks [@konopkov](https://github.com/konopkov)! - Keep boolean flags such as `--dry-run`, `--json`, and `--force` optional. Effect 4.0.0 made omitted boolean flags required, so each now defaults to `false`.
23
+
24
+ - [#438](https://github.com/knpkv/npm/pull/438) [`acb8b25`](https://github.com/knpkv/npm/commit/acb8b25772cc188a0cc1299a1b591903240cfc7c) Thanks [@github-actions](https://github.com/apps/github-actions)! - Update the generated Schema-backed Jira API client.
25
+
26
+ Breaking: these exported types now include `null`, so code that reads them must handle it: `ApprovalConfiguration`, `BoardFeaturesPayload`, `BoardsPayload`, `ConditionGroupConfiguration`, `ConditionGroupUpdate`, `CustomFieldPayload`, `FieldCapabilityPayload`, `FieldLayoutPayload`, `FieldLayoutSchemePayload`, `FieldSchemePayload`, `IssueLayoutPayload`, `IssueTypeHierarchyPayload`, `IssueTypePayload`, `IssueTypeProjectCreatePayload`, `IssueTypeScreenSchemePayload`, `NotificationSchemePayload`, `PermissionPayloadDTO`, `PreviewConditionGroupConfiguration`, `PreviewRuleConfiguration`, `ProjectId`, `RolesCapabilityPayload`, `ScopePayload`, `ScreenPayload`, `ScreenSchemePayload`, `SecuritySchemePayload`, `TargetClassification`, `TargetMandatoryFields`, `TargetStatus`, `WorkflowCapabilityPayload`, `WorkflowLayout`, `WorkflowProjectIdScope`, `WorkflowRuleConfiguration`, `WorkflowStatusLayout`, and `WorkflowTransitionLinks`. `ProjectId` and `WorkflowLayout` also appear in responses. No exports are removed; 129 are added.
27
+
28
+ - [#376](https://github.com/knpkv/npm/pull/376) [`379b029`](https://github.com/knpkv/npm/commit/379b02947180d50d4a40cf4b7723851aa68fc183) Thanks [@konopkov](https://github.com/konopkov)! - Depend on the patched `js-yaml` 5.4.2 directly, matching the workspace security override, so installs and packed consumers resolve the version the manifest names.
29
+ - Updated dependencies [[`755eafa`](https://github.com/knpkv/npm/commit/755eafab8c0bc3e82b00e2dd27c68d669a1de87e), [`379b029`](https://github.com/knpkv/npm/commit/379b02947180d50d4a40cf4b7723851aa68fc183), [`acb8b25`](https://github.com/knpkv/npm/commit/acb8b25772cc188a0cc1299a1b591903240cfc7c), [`755eafa`](https://github.com/knpkv/npm/commit/755eafab8c0bc3e82b00e2dd27c68d669a1de87e)]:
30
+ - @knpkv/atlassian-common@1.5.0
31
+ - @knpkv/jira-api-client@2.0.0
32
+ - @knpkv/agent-skills@0.3.2
33
+
3
34
  ## 1.3.1
4
35
 
5
36
  ### Patch Changes
package/README.md CHANGED
@@ -123,8 +123,8 @@ The command uploads the file, replaces exactly one matching placeholder with the
123
123
  Edit an issue's list-valued fields (fix versions and labels).
124
124
 
125
125
  ```bash
126
- jira issue edit PROJ-123 --add-fix-version "OOB 100" --add-label release-notes
127
- jira issue edit PROJ-123 --remove-fix-version "OOB 99" --json
126
+ jira issue edit PROJ-123 --add-fix-version "REL 100" --add-label release-notes
127
+ jira issue edit PROJ-123 --remove-fix-version "REL 99" --json
128
128
  ```
129
129
 
130
130
  | Option | Description | Default |
@@ -195,8 +195,8 @@ The version id is the **numeric** id (e.g. `10042`); use `version list` to find
195
195
  ### Create a version
196
196
 
197
197
  ```bash
198
- jira version create --project PROJ --name "OOB 100"
199
- jira version create --project PROJ --name "OOB 100" \
198
+ jira version create --project PROJ --name "REL 100"
199
+ jira version create --project PROJ --name "REL 100" \
200
200
  --description "Q3 release" \
201
201
  --start-date 2026-01-05 \
202
202
  --release-date 2026-01-19 \
@@ -206,7 +206,7 @@ jira version create --project PROJ --name "OOB 100" \
206
206
  | Option | Alias | Description | Default |
207
207
  | ---------------- | ----- | ------------------------------------- | ------- |
208
208
  | `--project` | `-p` | Jira project key (e.g. `PROJ`) | - |
209
- | `--name` | | Version name (e.g. `"OOB 100"`) | - |
209
+ | `--name` | | Version name (e.g. `"REL 100"`) | - |
210
210
  | `--description` | `-d` | Version description | - |
211
211
  | `--start-date` | | Start date, ISO 8601 (`yyyy-mm-dd`) | - |
212
212
  | `--release-date` | | Release date, ISO 8601 (`yyyy-mm-dd`) | - |
@@ -1,13 +1,28 @@
1
- import { OAuthError } from "@knpkv/atlassian-common/auth";
2
- import { type AuthProfile, type FileSystemError, type HomeDirectoryError, type OAuthConfig, type OAuthUser } from "@knpkv/atlassian-common/config";
1
+ /**
2
+ * OAuth2 authentication service for Jira CLI with token refresh and concurrency locking.
3
+ *
4
+ * **Mental model**
5
+ *
6
+ * - **Service pattern**: {@link JiraAuth} is a `Context.Tag` whose layer requires `HttpClient`,
7
+ * `ChildProcessSpawner` and `Crypto`. The flow — refresh lock, rotating-token persistence,
8
+ * browser login, profiles — is `@knpkv/atlassian-common/cli-auth`'s, bound to the
9
+ * `"jira-cli"` storage namespace, Jira's scopes and Jira's names.
10
+ *
11
+ * **Common tasks**
12
+ *
13
+ * - Get a valid access token: `auth.getAccessToken()` (auto-refreshes if expired)
14
+ * - Full login flow: `auth.login()`
15
+ * - Check auth state: `auth.isLoggedIn()`
16
+ *
17
+ * @module
18
+ */
19
+ import type { OAuthError } from "@knpkv/atlassian-common/auth";
20
+ import type { AuthProfile, FileSystemError, HomeDirectoryError, OAuthConfig, OAuthUser } from "@knpkv/atlassian-common/config";
3
21
  import * as Context from "effect/Context";
4
- import * as Crypto from "effect/Crypto";
5
- import * as Effect from "effect/Effect";
22
+ import type * as Effect from "effect/Effect";
6
23
  import * as Layer from "effect/Layer";
7
24
  import type * as PlatformError from "effect/PlatformError";
8
- import * as Redacted from "effect/Redacted";
9
- import * as HttpClient from "effect/unstable/http/HttpClient";
10
- import { ChildProcessSpawner } from "effect/unstable/process";
25
+ import type * as Redacted from "effect/Redacted";
11
26
  import type { AuthMissingError } from "./JiraCliError.js";
12
27
  /**
13
28
  * Options for the login method.
@@ -88,6 +103,6 @@ export declare class JiraAuth extends JiraAuth_base {
88
103
  *
89
104
  * @category Layers
90
105
  */
91
- export declare const layer: Layer.Layer<JiraAuth, never, ChildProcessSpawner.ChildProcessSpawner | Crypto.Crypto | HttpClient.HttpClient>;
106
+ export declare const layer: Layer.Layer<JiraAuth, never, import("effect/process/ChildProcessSpawner").ChildProcessSpawner | import("effect/Crypto").Crypto | import("effect/http/HttpClient").HttpClient>;
92
107
  export {};
93
108
  //# sourceMappingURL=JiraAuth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"JiraAuth.d.ts","sourceRoot":"","sources":["../src/JiraAuth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"JiraAuth.d.ts","sourceRoot":"","sources":["../src/JiraAuth.ts"],"names":[],"mappings":"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"}
package/dist/JiraAuth.js CHANGED
@@ -1,43 +1,6 @@
1
- /**
2
- * OAuth2 authentication service for Jira CLI with token refresh and concurrency locking.
3
- *
4
- * **Mental model**
5
- *
6
- * - **Service pattern**: {@link JiraAuth} is a `Context.Tag` whose layer requires `HttpClient`
7
- * and `ChildProcessSpawner`. All token storage operations are pre-bound to
8
- * `@knpkv/atlassian-common/config` with a `"jira-cli"` tool name.
9
- * - **Refresh lock**: A `Ref<Option<Deferred>>` prevents concurrent token refreshes — the
10
- * first caller refreshes, others await the same Deferred.
11
- * - **Browser-based login**: {@link JiraAuthService.login} starts a local callback server,
12
- * opens the browser, and awaits the OAuth code with a 5-minute timeout.
13
- *
14
- * **Common tasks**
15
- *
16
- * - Get a valid access token: `auth.getAccessToken()` (auto-refreshes if expired)
17
- * - Full login flow: `auth.login()`
18
- * - Check auth state: `auth.isLoggedIn()`
19
- *
20
- * @module
21
- */
22
- import * as NodeFileSystem from "@effect/platform-node/NodeFileSystem";
23
- import * as NodePath from "@effect/platform-node/NodePath";
24
- import { buildAuthUrl, buildOAuthTokenAt, computeCodeChallenge, exchangeCodeForTokens, generateCodeVerifier, generateUUID, getAccessibleResources, getUserInfo, OAuthError, refreshToken, revokeToken } from "@knpkv/atlassian-common/auth";
25
- import { deleteActiveProfile, deleteProfileBySelector, HomeDirectoryLive, isTokenExpiredAt, loadActiveProfile, loadActiveProfileToken, loadOAuthConfig, loadProfiles, saveOAuthConfig, saveProfileToken, setActiveProfileBySelector } from "@knpkv/atlassian-common/config";
26
- import * as Clock from "effect/Clock";
27
- import * as Console from "effect/Console";
1
+ import { makeAtlassianCliAuth, NodeCliAuthLive } from "@knpkv/atlassian-common/cli-auth";
28
2
  import * as Context from "effect/Context";
29
- import * as Crypto from "effect/Crypto";
30
- import * as Deferred from "effect/Deferred";
31
- import * as Effect from "effect/Effect";
32
3
  import * as Layer from "effect/Layer";
33
- import * as Option from "effect/Option";
34
- import * as Redacted from "effect/Redacted";
35
- import * as Ref from "effect/Ref";
36
- import * as HttpClient from "effect/unstable/http/HttpClient";
37
- import { ChildProcessSpawner } from "effect/unstable/process";
38
- import { HttpServerFactoryLive } from "./internal/NodeLayers.js";
39
- import { callbackUrl, startCallbackServer } from "./internal/oauthServer.js";
40
- import { openBrowser } from "./internal/openBrowser.js";
41
4
  import { authMissing } from "./JiraCliError.js";
42
5
  /** OAuth scopes for the Jira CLI. Granular scopes must also be enabled on the app in the developer console. */
43
6
  const JIRA_CLI_SCOPES = [
@@ -56,19 +19,6 @@ const JIRA_CLI_SCOPES = [
56
19
  // Issue a refresh token so the CLI stays logged in across runs.
57
20
  "offline_access"
58
21
  ];
59
- const TOOL_NAME = "jira-cli";
60
- // Layer for token storage operations (FileSystem + Path + HomeDirectory)
61
- const TokenStorageLive = Layer.mergeAll(NodeFileSystem.layer, NodePath.layer, HomeDirectoryLive);
62
- // Wrap token storage operations with their required layers
63
- const loadTokenOp = () => loadActiveProfileToken(TOOL_NAME).pipe(Effect.provide(TokenStorageLive));
64
- const saveTokenOp = (token) => saveProfileToken(TOOL_NAME, token).pipe(Effect.provide(TokenStorageLive));
65
- const deleteTokenOp = () => deleteActiveProfile(TOOL_NAME).pipe(Effect.provide(TokenStorageLive));
66
- const listProfilesOp = () => loadProfiles(TOOL_NAME).pipe(Effect.map((store) => store.profiles), Effect.provide(TokenStorageLive));
67
- const loadActiveProfileOp = () => loadActiveProfile(TOOL_NAME).pipe(Effect.provide(TokenStorageLive));
68
- const switchProfileOp = (selector) => setActiveProfileBySelector(TOOL_NAME, selector).pipe(Effect.provide(TokenStorageLive));
69
- const removeProfileOp = (selector) => deleteProfileBySelector(TOOL_NAME, selector).pipe(Effect.provide(TokenStorageLive));
70
- const loadOAuthConfigOp = () => loadOAuthConfig(TOOL_NAME).pipe(Effect.provide(TokenStorageLive));
71
- const saveOAuthConfigOp = (config) => saveOAuthConfig(TOOL_NAME, config).pipe(Effect.provide(TokenStorageLive));
72
22
  /**
73
23
  * JiraAuth service tag.
74
24
  *
@@ -90,261 +40,16 @@ const saveOAuthConfigOp = (config) => saveOAuthConfig(TOOL_NAME, config).pipe(Ef
90
40
  */
91
41
  export class JiraAuth extends Context.Service()("@knpkv/jira-cli/JiraAuth") {
92
42
  }
93
- const make = Effect.gen(function* () {
94
- const httpClient = yield* HttpClient.HttpClient;
95
- const childProcessSpawner = yield* ChildProcessSpawner.ChildProcessSpawner;
96
- const cryptoService = yield* Crypto.Crypto;
97
- // Ref to track ongoing refresh operation to prevent concurrent refreshes
98
- const refreshLock = yield* Ref.make(Option.none());
99
- const openBrowserImpl = (url) => openBrowser(url).pipe(Effect.provideService(ChildProcessSpawner.ChildProcessSpawner, childProcessSpawner), Effect.mapError((cause) => new OAuthError({ step: "authorize", cause })));
100
- const getConfig = () => Effect.gen(function* () {
101
- const config = yield* loadOAuthConfigOp();
102
- if (config === null) {
103
- return yield* Effect.fail(new OAuthError({
104
- step: "authorize",
105
- cause: "OAuth not configured. Run 'jira auth configure' first."
106
- }));
107
- }
108
- return config;
109
- });
110
- // Atlassian rotates refresh tokens: the response carries a replacement and
111
- // the one we sent is consumed server-side. Interrupting between the
112
- // round-trip and `saveTokenOp` therefore destroys the credential — the next
113
- // refresh fails and `getAccessToken` below reacts by deleting the token file,
114
- // so the user is silently logged out and has to run `jira auth login` again.
115
- //
116
- // Interruption is routine here, not hypothetical: this runs during layer
117
- // construction on every CLI invocation, and jcf's nvim statusline kills the
118
- // process on `VimLeave`. So the grant and the persist are atomic.
119
- //
120
- // The region carries its own deadline rather than relying on a caller's.
121
- // `Effect.timeout` is a race, and racing an uninterruptible loser means
122
- // waiting for it — an outer bound would go inert and, worse, an
123
- // uninterruptible region with no deadline of its own absorbs SIGINT/SIGTERM
124
- // entirely (`NodeRuntime.runMain`'s signal handlers only interrupt the main
125
- // fiber), leaving a process that ignores Ctrl-C. The deadline forked inside
126
- // the region is itself interruptible, so it does bound this.
127
- //
128
- // Abandoning the round-trip cannot prove the grant did not land: Atlassian
129
- // may consume the refresh token and rotate it after we have stopped
130
- // listening, and no client-side deadline changes that. So the deadline is
131
- // paired with the rule in `getAccessToken` below — a refresh that fails
132
- // without a 4xx never deletes the stored token. The credential survives to be
133
- // retried, and only a real rejection ends the session.
134
- const REFRESH_TIMEOUT = "30 seconds";
135
- const refreshTokenImpl = (token, config) => Effect.uninterruptible(Effect.gen(function* () {
136
- const updated = yield* refreshToken(token, config).pipe(Effect.provide(Layer.succeed(HttpClient.HttpClient, httpClient)), Effect.timeout(REFRESH_TIMEOUT), Effect.catchTag("TimeoutError", () => Effect.fail(new OAuthError({ step: "refresh", cause: `no response within ${REFRESH_TIMEOUT}` }))));
137
- yield* saveTokenOp(updated);
138
- return updated;
139
- }));
140
- const revokeTokenImpl = (token, config) => revokeToken(token, config).pipe(Effect.provide(Layer.succeed(HttpClient.HttpClient, httpClient)));
141
- const configure = (config) => saveOAuthConfigOp(config);
142
- const isConfigured = () => Effect.gen(function* () {
143
- const config = yield* loadOAuthConfigOp();
144
- return config !== null;
145
- });
146
- const login = (options) => Effect.gen(function* () {
147
- const config = yield* getConfig();
148
- const state = yield* generateUUID().pipe(Effect.provideService(Crypto.Crypto, cryptoService));
149
- const codeVerifier = yield* generateCodeVerifier().pipe(Effect.provideService(Crypto.Crypto, cryptoService));
150
- const codeChallenge = yield* computeCodeChallenge(codeVerifier).pipe(Effect.provideService(Crypto.Crypto, cryptoService));
151
- const { code, port } = yield* Effect.scoped(Effect.gen(function* () {
152
- const { codePromise, port } = yield* startCallbackServer(state).pipe(Effect.provide(HttpServerFactoryLive));
153
- const authUrl = buildAuthUrl({
154
- clientId: config.clientId,
155
- state,
156
- port,
157
- redirectUri: callbackUrl(port),
158
- scopes: JIRA_CLI_SCOPES,
159
- codeChallenge
160
- });
161
- yield* Console.log(`Opening browser for Atlassian login (callback on port ${port})...`);
162
- yield* Console.log(`If browser doesn't open, visit: ${authUrl}`);
163
- yield* openBrowserImpl(authUrl);
164
- yield* Console.log("Waiting for authorization (press Ctrl+C to cancel)...");
165
- const code = yield* codePromise.pipe(Effect.timeout("5 minutes"), Effect.catchTag("TimeoutError", () => Effect.fail(new OAuthError({ step: "authorize", cause: "Authorization timed out" }))));
166
- return { code, port };
167
- }));
168
- yield* Console.log("Exchanging code for tokens...");
169
- const tokens = yield* exchangeCodeForTokens(code, config, {
170
- port,
171
- redirectUri: callbackUrl(port),
172
- codeVerifier
173
- }).pipe(Effect.provide(Layer.succeed(HttpClient.HttpClient, httpClient)));
174
- yield* Console.log("Fetching accessible sites...");
175
- const sites = yield* getAccessibleResources(tokens.access_token).pipe(Effect.provide(Layer.succeed(HttpClient.HttpClient, httpClient)));
176
- if (sites.length === 0) {
177
- return yield* Effect.fail(new OAuthError({
178
- step: "authorize",
179
- cause: "No Jira sites found for this account"
180
- }));
181
- }
182
- let site;
183
- if (sites.length > 1) {
184
- if (options?.siteUrl) {
185
- const matched = sites.find((s) => s.url === options.siteUrl);
186
- if (!matched) {
187
- const available = sites.map((s) => ` - ${s.name}: ${s.url}`).join("\n");
188
- return yield* Effect.fail(new OAuthError({
189
- step: "authorize",
190
- cause: `Site '${options.siteUrl}' not found. Available sites:\n${available}`
191
- }));
192
- }
193
- site = matched;
194
- }
195
- else {
196
- yield* Console.log("Multiple Jira sites found. Please select one:");
197
- for (const s of sites) {
198
- yield* Console.log(` - ${s.name}: ${s.url}`);
199
- }
200
- yield* Console.log("\nRun 'jira auth login --site <url>' to select a site");
201
- return sites.map((s) => ({ id: s.id, name: s.name, url: s.url }));
202
- }
203
- }
204
- else {
205
- site = sites[0];
206
- }
207
- yield* Console.log("Fetching user info...");
208
- const user = yield* getUserInfo(tokens.access_token).pipe(Effect.provide(Layer.succeed(HttpClient.HttpClient, httpClient)));
209
- const nowMs = yield* Clock.currentTimeMillis;
210
- const tokenData = buildOAuthTokenAt(tokens, site, user, nowMs);
211
- yield* saveTokenOp(tokenData);
212
- yield* Console.log(`Logged in as ${user.name} (${user.email})`);
213
- return undefined;
214
- });
215
- const logout = () => Effect.gen(function* () {
216
- const token = yield* loadTokenOp();
217
- if (token === null) {
218
- yield* Console.log("Not logged in");
219
- return;
220
- }
221
- const config = yield* loadOAuthConfigOp();
222
- if (config !== null) {
223
- yield* revokeTokenImpl(token, config).pipe(Effect.tap(() => Effect.log("Token revoked with Atlassian")), Effect.catch((error) => Effect.log(`Warning: Failed to revoke token: ${error.message}`)));
224
- }
225
- yield* deleteTokenOp();
226
- });
227
- const getAccessToken = () => Effect.gen(function* () {
228
- const token = yield* loadTokenOp();
229
- if (token === null) {
230
- return yield* Effect.fail(authMissing());
231
- }
232
- const nowMs = yield* Clock.currentTimeMillis;
233
- if (!isTokenExpiredAt(token, nowMs)) {
234
- return Redacted.make(token.access_token);
235
- }
236
- // Atomically check-then-set refresh lock to avoid TOCTOU race
237
- const deferred = yield* Deferred.make();
238
- const existing = yield* Ref.modify(refreshLock, (current) => Option.isSome(current)
239
- ? [current.value, current]
240
- : [deferred, Option.some(deferred)]);
241
- // Another fiber is already refreshing — just await its result
242
- if (existing !== deferred) {
243
- const refreshed = yield* Deferred.await(existing);
244
- return Redacted.make(refreshed.access_token);
245
- }
246
- const refresh = Effect.gen(function* () {
247
- const config = yield* getConfig();
248
- // stderr, not stdout: this fires from inside layer construction, so it
249
- // lands ahead of whatever the command prints. On `--json` that used to
250
- // put a line of prose in front of the document, and the release
251
- // automation parsing it failed *after* the remote writes had happened.
252
- yield* Console.error("Token expired, refreshing...");
253
- return yield* refreshTokenImpl(token, config);
254
- }).pipe(Effect.catchTag("OAuthError", (error) => {
255
- // Discard the stored credential only when Atlassian actually rejected
256
- // it. A refresh can fail without saying anything about the token —
257
- // transport error, timeout, interruption — and in those cases the
258
- // grant may even have been consumed server-side, so the one thing we
259
- // must not do is delete the replacement's only trail. Deleting on any
260
- // `step === "refresh"` failure turned a flaky network into a silent
261
- // logout, which is worse than retrying and is unrecoverable. On a 4xx
262
- // the token is genuinely dead and re-login is the only way forward.
263
- // Not every failure is a verdict on the token, and not even every
264
- // 4xx is. `429` is the one this most needs to survive — several
265
- // `jira`/`jcf` processes on an expired token hit the endpoint
266
- // together, one wins the rotation and the rest are rate-limited —
267
- // while `408`/`425` restate the timeout case and `407` and other
268
- // middlebox replies never came from Atlassian at all.
269
- //
270
- // Status alone is still too coarse. `refreshToken` sends the client
271
- // credentials in the body, so a wrong or rotated `clientSecret` comes
272
- // back as `400 invalid_client`; deleting the token there destroys a
273
- // working credential over a config problem, and the re-login it forces
274
- // would fail the same way until `jira auth configure` is run. Only
275
- // `invalid_grant` means the stored token itself is spent, and that is
276
- // the only thing that ends the session — on a `403` too, since a bare
277
- // 403 is just as likely to come from a proxy or WAF as from Atlassian
278
- // revoking anything. An unparseable body leaves `errorCode` absent and
279
- // the token in place.
280
- const { errorCode, status } = error;
281
- const rejected = errorCode === "invalid_grant" && (status === 400 || status === 403);
282
- if (error.step === "refresh" && rejected) {
283
- return Effect.gen(function* () {
284
- yield* deleteTokenOp();
285
- return yield* Effect.fail(new OAuthError({
286
- step: "refresh",
287
- cause: "Refresh token expired. Please run 'jira auth login' to re-authenticate.",
288
- status,
289
- errorCode
290
- }));
291
- });
292
- }
293
- return Effect.fail(error);
294
- }));
295
- // This fiber owns the refresh. Complete the shared Deferred with the final
296
- // transformed exit so waiters observe the same success or failure.
297
- const exit = yield* refresh.pipe(Effect.exit, Effect.ensuring(Ref.set(refreshLock, Option.none())));
298
- yield* Deferred.done(deferred, exit);
299
- const result = yield* Deferred.await(deferred);
300
- return Redacted.make(result.access_token);
301
- });
302
- const getCloudId = () => Effect.gen(function* () {
303
- const token = yield* loadTokenOp();
304
- if (token === null) {
305
- return yield* Effect.fail(authMissing());
306
- }
307
- return token.cloud_id;
308
- });
309
- const getSiteUrl = () => Effect.gen(function* () {
310
- const token = yield* loadTokenOp();
311
- if (token === null) {
312
- return yield* Effect.fail(authMissing());
313
- }
314
- return token.site_url;
315
- });
316
- const getCurrentUser = () => Effect.gen(function* () {
317
- const token = yield* loadTokenOp();
318
- return token?.user ?? null;
319
- });
320
- const getActiveProfile = () => loadActiveProfileOp();
321
- const listProfiles = () => listProfilesOp();
322
- const switchProfile = (selector) => switchProfileOp(selector);
323
- const removeProfile = (selector) => removeProfileOp(selector);
324
- const isLoggedIn = () => Effect.gen(function* () {
325
- const token = yield* loadTokenOp();
326
- return token !== null;
327
- });
328
- return JiraAuth.of({
329
- configure,
330
- isConfigured,
331
- login,
332
- logout,
333
- getAccessToken,
334
- getCloudId,
335
- getSiteUrl,
336
- getCurrentUser,
337
- getActiveProfile,
338
- listProfiles,
339
- switchProfile,
340
- removeProfile,
341
- isLoggedIn
342
- });
343
- });
344
43
  /**
345
44
  * Layer for JiraAuth service.
346
45
  *
347
46
  * @category Layers
348
47
  */
349
- export const layer = Layer.effect(JiraAuth, make);
48
+ export const layer = Layer.effect(JiraAuth, makeAtlassianCliAuth({
49
+ toolName: "jira-cli",
50
+ commandName: "jira",
51
+ productName: "Jira",
52
+ scopes: JIRA_CLI_SCOPES,
53
+ authMissing
54
+ })).pipe(Layer.provide(NodeCliAuthLive));
350
55
  //# sourceMappingURL=JiraAuth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"JiraAuth.js","sourceRoot":"","sources":["../src/JiraAuth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"JiraAuth.js","sourceRoot":"","sources":["../src/JiraAuth.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAQxF,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AAEzC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAIrC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C,+GAA+G;AAC/G,MAAM,eAAe,GAAG;IACtB,0CAA0C;IAC1C,gBAAgB;IAChB,kCAAkC;IAClC,iBAAiB;IACjB,oEAAoE;IACpE,sEAAsE;IACtE,iEAAiE;IACjE,qBAAqB;IACrB,0EAA0E;IAC1E,gBAAgB;IAChB,oEAAoE;IACpE,SAAS;IACT,gEAAgE;IAChE,gBAAgB;CACjB,CAAA;AA4FD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAO,QAAS,SAAQ,OAAO,CAAC,OAAO,EAG1C,CAAC,0BAA0B,CAAC;CAAG;AAElC;;;;GAIG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAC/B,QAAQ,EACR,oBAAoB,CAAC;IACnB,QAAQ,EAAE,UAAU;IACpB,WAAW,EAAE,MAAM;IACnB,WAAW,EAAE,MAAM;IACnB,MAAM,EAAE,eAAe;IACvB,WAAW;CACZ,CAAC,CACH,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAA"}
package/dist/bin.js CHANGED
@@ -8,10 +8,10 @@
8
8
  */
9
9
  import { NodeRuntime, NodeStdio } from "@effect/platform-node";
10
10
  import { makeInstallCommand } from "@knpkv/agent-skills";
11
+ import { Command } from "effect/cli";
11
12
  import * as Console from "effect/Console";
12
13
  import * as Effect from "effect/Effect";
13
14
  import * as Stdio from "effect/Stdio";
14
- import { Command } from "effect/unstable/cli";
15
15
  import pkg from "../package.json" with { type: "json" };
16
16
  import { AppLayer, authCommand, AuthOnlyLayer, getLayerType, handleError, issueCommand, MinimalLayer, versionCommand } from "./commands/index.js";
17
17
  const skillsInstall = makeInstallCommand({
package/dist/bin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA;;;;;;GAMG;AACH,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AACvD,OAAO,EACL,QAAQ,EACR,WAAW,EACX,aAAa,EACb,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,cAAc,EACf,MAAM,qBAAqB,CAAA;AAE5B,MAAM,aAAa,GAAG,kBAAkB,CAAC;IACvC,WAAW,EAAE,8BAA8B;IAC3C,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,CAAC,MAAM,CAAC;CACjB,CAAC,CAAA;AAEF,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC,IAAI,CACpG,OAAO,CAAC,eAAe,CAAC,kCAAkC,CAAC,EAC3D,OAAO,CAAC,eAAe,CAAC,CAAC,aAAa,CAAC,CAAC,CACzC,CAAA;AAED,uBAAuB;AACvB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CACpC,OAAO,CAAC,eAAe,CAAC,mBAAmB,CAAC,EAC5C,OAAO,CAAC,eAAe,CAAC;IACtB,WAAW;IACX,YAAY;IACZ,aAAa;IACb,cAAc;CACf,CAAC,CACH,CAAA;AAED,kBAAkB;AAClB,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE;IAChC,OAAO,EAAE,GAAG,CAAC,OAAO;CACrB,CAAC,CAAA;AAEF,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAA;IAChC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAA;IAC9B,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;IACpC,MAAM,KAAK,GAAG,SAAS,KAAK,MAAM;QAChC,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,SAAS,KAAK,MAAM;YACtB,CAAC,CAAC,aAAa;YACf,CAAC,CAAC,YAAY,CAAA;IAEhB,OAAO,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAC1B,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CACtB,CAAA;AACH,CAAC,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,EAC/B,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAC/F,CAAA;AAED,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAAC,CAAA"}
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA;;;;;;GAMG;AACH,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AACvD,OAAO,EACL,QAAQ,EACR,WAAW,EACX,aAAa,EACb,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,cAAc,EACf,MAAM,qBAAqB,CAAA;AAE5B,MAAM,aAAa,GAAG,kBAAkB,CAAC;IACvC,WAAW,EAAE,8BAA8B;IAC3C,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,CAAC,MAAM,CAAC;CACjB,CAAC,CAAA;AAEF,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC,IAAI,CACpG,OAAO,CAAC,eAAe,CAAC,kCAAkC,CAAC,EAC3D,OAAO,CAAC,eAAe,CAAC,CAAC,aAAa,CAAC,CAAC,CACzC,CAAA;AAED,uBAAuB;AACvB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CACpC,OAAO,CAAC,eAAe,CAAC,mBAAmB,CAAC,EAC5C,OAAO,CAAC,eAAe,CAAC;IACtB,WAAW;IACX,YAAY;IACZ,aAAa;IACb,cAAc;CACf,CAAC,CACH,CAAA;AAED,kBAAkB;AAClB,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE;IAChC,OAAO,EAAE,GAAG,CAAC,OAAO;CACrB,CAAC,CAAA;AAEF,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAA;IAChC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAA;IAC9B,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;IACpC,MAAM,KAAK,GAAG,SAAS,KAAK,MAAM;QAChC,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,SAAS,KAAK,MAAM;YACtB,CAAC,CAAC,aAAa;YACf,CAAC,CAAC,YAAY,CAAA;IAEhB,OAAO,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAC1B,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CACtB,CAAA;AACH,CAAC,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,EAC/B,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAC/F,CAAA;AAED,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAAC,CAAA"}
@@ -1,4 +1,4 @@
1
- import { Command, Prompt } from "effect/unstable/cli";
1
+ import { Command, Prompt } from "effect/cli";
2
2
  import { JiraAuth } from "../JiraAuth.js";
3
- export declare const authCommand: Command.Command<"auth", {}, {}, import("@knpkv/atlassian-common/config").FileSystemError | import("@knpkv/atlassian-common/config").HomeDirectoryError | import("@knpkv/atlassian-common/auth").OAuthError | import("effect/PlatformError").PlatformError | import("effect/Terminal").QuitError, import("effect/unstable/process/ChildProcessSpawner").ChildProcessSpawner | JiraAuth | Prompt.Environment>;
3
+ export declare const authCommand: Command.Command<"auth", {}, {}, import("@knpkv/atlassian-common/config").FileSystemError | import("@knpkv/atlassian-common/config").HomeDirectoryError | import("@knpkv/atlassian-common/auth").OAuthError | import("effect/PlatformError").PlatformError | import("effect/Terminal").QuitError, import("effect/process/ChildProcessSpawner").ChildProcessSpawner | JiraAuth | Prompt.Environment>;
4
4
  //# sourceMappingURL=auth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAaA,OAAO,EAAoB,OAAO,EAAmB,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAExF,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAgJzC,eAAO,MAAM,WAAW,6YAYvB,CAAA"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAWA,OAAO,EAAoB,OAAO,EAAmB,MAAM,EAAE,MAAM,YAAY,CAAA;AAI/E,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAgJzC,eAAO,MAAM,WAAW,oYAYvB,CAAA"}
@@ -8,11 +8,11 @@
8
8
  *
9
9
  * @internal
10
10
  */
11
+ import { openBrowser } from "@knpkv/atlassian-common/cli-auth";
12
+ import { Argument as Args, Command, Flag as Options, Prompt } from "effect/cli";
11
13
  import * as Console from "effect/Console";
12
14
  import * as Effect from "effect/Effect";
13
15
  import * as Option from "effect/Option";
14
- import { Argument as Args, Command, Flag as Options, Prompt } from "effect/unstable/cli";
15
- import { openBrowser } from "../internal/openBrowser.js";
16
16
  import { JiraAuth } from "../JiraAuth.js";
17
17
  // === Auth create command ===
18
18
  const createCommand = Command.make("create", {}, () => Effect.gen(function* () {
@@ -39,21 +39,21 @@ Creating OAuth app in Atlassian Developer Console...
39
39
  yield* openBrowser(url).pipe(Effect.catch(() => Effect.void));
40
40
  })).pipe(Command.withDescription("Create OAuth app in Atlassian Developer Console"));
41
41
  // === Auth configure command ===
42
- const clientIdOption = Options.string("client-id").pipe(Options.withDescription("OAuth client ID from Atlassian Developer Console"), Options.optional);
43
- const clientSecretOption = Options.string("client-secret").pipe(Options.withDescription("OAuth client secret"), Options.optional);
42
+ const clientIdOption = Options.String("client-id").pipe(Options.withDescription("OAuth client ID from Atlassian Developer Console"), Options.optional);
43
+ const clientSecretOption = Options.String("client-secret").pipe(Options.withDescription("OAuth client secret"), Options.optional);
44
44
  const configureCommand = Command.make("configure", { clientId: clientIdOption, clientSecret: clientSecretOption }, ({ clientId, clientSecret }) => Effect.gen(function* () {
45
45
  const auth = yield* JiraAuth;
46
46
  const rawClientId = Option.isSome(clientId)
47
47
  ? clientId.value
48
- : yield* Prompt.text({ message: "Enter OAuth client ID:" });
48
+ : yield* Prompt.String({ message: "Enter OAuth client ID:" });
49
49
  const rawClientSecret = Option.isSome(clientSecret)
50
50
  ? clientSecret.value
51
- : yield* Prompt.text({ message: "Enter OAuth client secret:" });
51
+ : yield* Prompt.String({ message: "Enter OAuth client secret:" });
52
52
  yield* auth.configure({ clientId: rawClientId, clientSecret: rawClientSecret });
53
53
  yield* Console.log("OAuth configured. Run 'jira auth login' to authenticate.");
54
54
  })).pipe(Command.withDescription("Configure OAuth client credentials"));
55
55
  // === Auth login command ===
56
- const siteOption = Options.string("site").pipe(Options.withDescription("Jira site URL to use (for accounts with multiple sites)"), Options.optional);
56
+ const siteOption = Options.String("site").pipe(Options.withDescription("Jira site URL to use (for accounts with multiple sites)"), Options.optional);
57
57
  const loginCommand = Command.make("login", { site: siteOption }, ({ site }) => Effect.gen(function* () {
58
58
  const auth = yield* JiraAuth;
59
59
  const result = yield* auth.login(Option.isSome(site) ? { siteUrl: site.value } : undefined);
@@ -98,7 +98,7 @@ const profilesCommand = Command.make("profiles", {}, () => Effect.gen(function*
98
98
  yield* Console.log(` ${profile.token.site_url}`);
99
99
  }
100
100
  })).pipe(Command.withDescription("List stored auth profiles"));
101
- const profileArg = Args.string("profile").pipe(Args.withDescription("Profile ID, name, site URL, cloud ID, or account ID"));
101
+ const profileArg = Args.String("profile").pipe(Args.withDescription("Profile ID, name, site URL, cloud ID, or account ID"));
102
102
  // === Auth use command ===
103
103
  const useCommand = Command.make("use", { profile: profileArg }, ({ profile }) => Effect.gen(function* () {
104
104
  const auth = yield* JiraAuth;
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}