@knpkv/jira-cli 1.4.0 → 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.
- package/CHANGELOG.md +11 -0
- package/dist/JiraAuth.d.ts +23 -8
- package/dist/JiraAuth.d.ts.map +1 -1
- package/dist/JiraAuth.js +8 -303
- package/dist/JiraAuth.js.map +1 -1
- package/dist/commands/auth.d.ts +0 -10
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +1 -1
- package/dist/commands/auth.js.map +1 -1
- package/package.json +3 -3
- package/src/JiraAuth.ts +24 -469
- package/src/commands/auth.ts +1 -1
- package/test/JiraAuth.test.ts +79 -0
- package/vitest.config.integration.ts +4 -1
- package/vitest.config.ts +4 -1
- package/dist/internal/NodeLayers.d.ts +0 -7
- package/dist/internal/NodeLayers.d.ts.map +0 -1
- package/dist/internal/NodeLayers.js +0 -15
- package/dist/internal/NodeLayers.js.map +0 -1
- package/dist/internal/oauthServer.d.ts +0 -72
- package/dist/internal/oauthServer.d.ts.map +0 -1
- package/dist/internal/oauthServer.js +0 -97
- package/dist/internal/oauthServer.js.map +0 -1
- package/dist/internal/openBrowser.d.ts +0 -10
- package/dist/internal/openBrowser.d.ts.map +0 -1
- package/dist/internal/openBrowser.js +0 -17
- package/dist/internal/openBrowser.js.map +0 -1
- package/src/internal/NodeLayers.ts +0 -17
- package/src/internal/oauthServer.ts +0 -187
- package/src/internal/openBrowser.ts +0 -31
- package/test/JiraAuthRefresh.test.ts +0 -269
- package/test/oauthServer.test.ts +0 -172
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
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
|
+
|
|
3
14
|
## 1.4.0
|
|
4
15
|
|
|
5
16
|
### Minor Changes
|
package/dist/JiraAuth.d.ts
CHANGED
|
@@ -1,13 +1,28 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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
|
|
5
|
-
import * as Effect from "effect/Effect";
|
|
6
|
-
import * as HttpClient from "effect/http/HttpClient";
|
|
22
|
+
import type * as Effect from "effect/Effect";
|
|
7
23
|
import * as Layer from "effect/Layer";
|
|
8
24
|
import type * as PlatformError from "effect/PlatformError";
|
|
9
|
-
import
|
|
10
|
-
import * as Redacted from "effect/Redacted";
|
|
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
|
package/dist/JiraAuth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JiraAuth.d.ts","sourceRoot":"","sources":["../src/JiraAuth.ts"],"names":[],"mappings":"
|
|
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
|
-
import * as HttpClient from "effect/http/HttpClient";
|
|
33
3
|
import * as Layer from "effect/Layer";
|
|
34
|
-
import * as Option from "effect/Option";
|
|
35
|
-
import { ChildProcessSpawner } from "effect/process";
|
|
36
|
-
import * as Redacted from "effect/Redacted";
|
|
37
|
-
import * as Ref from "effect/Ref";
|
|
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* 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* 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* 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* 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* 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* 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* 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,
|
|
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
|
package/dist/JiraAuth.js.map
CHANGED
|
@@ -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/commands/auth.d.ts
CHANGED
|
@@ -1,13 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Auth subcommands: create, configure, login, logout, status.
|
|
3
|
-
*
|
|
4
|
-
* **Mental model**
|
|
5
|
-
*
|
|
6
|
-
* - Each command is a standalone `Command.make` that yields into `JiraAuth` service methods.
|
|
7
|
-
* - `create` opens the Atlassian Developer Console; `configure` prompts for client ID/secret.
|
|
8
|
-
*
|
|
9
|
-
* @internal
|
|
10
|
-
*/
|
|
11
1
|
import { Command, Prompt } from "effect/cli";
|
|
12
2
|
import { JiraAuth } from "../JiraAuth.js";
|
|
13
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>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"
|
|
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"}
|
package/dist/commands/auth.js
CHANGED
|
@@ -8,11 +8,11 @@
|
|
|
8
8
|
*
|
|
9
9
|
* @internal
|
|
10
10
|
*/
|
|
11
|
+
import { openBrowser } from "@knpkv/atlassian-common/cli-auth";
|
|
11
12
|
import { Argument as Args, Command, Flag as Options, Prompt } from "effect/cli";
|
|
12
13
|
import * as Console from "effect/Console";
|
|
13
14
|
import * as Effect from "effect/Effect";
|
|
14
15
|
import * as Option from "effect/Option";
|
|
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* () {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,QAAQ,IAAI,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAC/E,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@knpkv/jira-cli",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.1",
|
|
4
4
|
"description": "CLI tool to fetch Jira tickets and export to markdown",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "knpkv",
|
|
@@ -61,8 +61,8 @@
|
|
|
61
61
|
"gray-matter": "^4.0.3",
|
|
62
62
|
"js-yaml": "5.4.2",
|
|
63
63
|
"@knpkv/agent-skills": "^0.3.2",
|
|
64
|
-
"@knpkv/
|
|
65
|
-
"@knpkv/
|
|
64
|
+
"@knpkv/atlassian-common": "1.6.0",
|
|
65
|
+
"@knpkv/jira-api-client": "2.0.0"
|
|
66
66
|
},
|
|
67
67
|
"devDependencies": {
|
|
68
68
|
"@effect/vitest": "4.0.0",
|