@whooshbang/sdk 4.0.0 → 4.0.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/dist/cli/config.d.ts +2 -0
- package/dist/cli/config.js +31 -10
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/oauth.d.ts +1 -0
- package/dist/cli/oauth.js +5 -0
- package/dist/cli/oauth.js.map +1 -1
- package/dist/cli/session-lock.d.ts +12 -0
- package/dist/cli/session-lock.js +138 -0
- package/dist/cli/session-lock.js.map +1 -0
- package/dist/cli/session.js +40 -29
- package/dist/cli/session.js.map +1 -1
- package/package.json +1 -1
package/dist/cli/config.d.ts
CHANGED
|
@@ -81,6 +81,8 @@ export declare function readCredentials(file?: string): Promise<StoredCredential
|
|
|
81
81
|
*/
|
|
82
82
|
export declare function writeCredentials(credentials: StoredCredentials, file?: string): Promise<void>;
|
|
83
83
|
export declare function storeSession(origin: string, authority: StoredAuthority, file?: string): Promise<void>;
|
|
84
|
+
/** Re-read under the process-shared lock before spending any refresh token. */
|
|
85
|
+
export declare function updateSession(origin: string, update: (current: StoredAuthority | null) => Promise<StoredAuthority>, file?: string): Promise<StoredAuthority>;
|
|
84
86
|
export declare function forgetSession(origin: string, file?: string): Promise<StoredAuthority | null>;
|
|
85
87
|
export declare function loadSession(origin: string, file?: string): Promise<StoredAuthority | null>;
|
|
86
88
|
/**
|
package/dist/cli/config.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { withCredentialsLock } from "./session-lock.js";
|
|
3
|
+
import { chmod, mkdir, readFile, rename, rm, writeFile, } from "node:fs/promises";
|
|
2
4
|
import os from "node:os";
|
|
3
5
|
import path from "node:path";
|
|
4
6
|
export function credentialsDirectory(environment = process.env) {
|
|
@@ -51,19 +53,38 @@ function storedOrigins(read) {
|
|
|
51
53
|
export async function writeCredentials(credentials, file = credentialsPath()) {
|
|
52
54
|
await mkdir(path.dirname(file), { mode: 0o700, recursive: true });
|
|
53
55
|
await chmod(path.dirname(file), 0o700).catch(() => undefined);
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
56
|
+
const temporary = `${file}.${randomUUID()}.tmp`;
|
|
57
|
+
try {
|
|
58
|
+
await writeFile(temporary, `${JSON.stringify(credentials, null, 2)}\n`, {
|
|
59
|
+
mode: 0o600,
|
|
60
|
+
flag: "wx",
|
|
61
|
+
});
|
|
62
|
+
await chmod(temporary, 0o600);
|
|
63
|
+
await rename(temporary, file);
|
|
64
|
+
}
|
|
65
|
+
finally {
|
|
66
|
+
await rm(temporary, { force: true });
|
|
67
|
+
}
|
|
58
68
|
}
|
|
59
69
|
export async function storeSession(origin, authority, file = credentialsPath()) {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
70
|
+
await updateSession(origin, () => Promise.resolve(authority), file);
|
|
71
|
+
}
|
|
72
|
+
/** Re-read under the process-shared lock before spending any refresh token. */
|
|
73
|
+
export function updateSession(origin, update, file = credentialsPath()) {
|
|
74
|
+
return withCredentialsLock(file, async () => {
|
|
75
|
+
const read = await readCredentials(file);
|
|
76
|
+
const origins = storedOrigins(read);
|
|
77
|
+
const current = origins[origin] ?? null;
|
|
78
|
+
const next = await update(current);
|
|
79
|
+
if (next !== current)
|
|
80
|
+
await writeCredentials({ origins: { ...origins, [origin]: next }, version: 2 }, file);
|
|
81
|
+
return next;
|
|
82
|
+
});
|
|
65
83
|
}
|
|
66
84
|
export async function forgetSession(origin, file = credentialsPath()) {
|
|
85
|
+
return withCredentialsLock(file, () => forgetSessionUnlocked(origin, file));
|
|
86
|
+
}
|
|
87
|
+
async function forgetSessionUnlocked(origin, file) {
|
|
67
88
|
const current = await readCredentials(file);
|
|
68
89
|
if (current.state === "unreadable") {
|
|
69
90
|
// A file this build cannot read is still a file holding a live credential.
|
package/dist/cli/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/oauth.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ export interface AuthorizationServer {
|
|
|
12
12
|
readonly issuer: string;
|
|
13
13
|
readonly authorizationEndpoint: string;
|
|
14
14
|
readonly tokenEndpoint: string;
|
|
15
|
+
readonly revocationEndpoint?: string;
|
|
15
16
|
readonly registrationEndpoint: string;
|
|
16
17
|
readonly scopesSupported: readonly string[];
|
|
17
18
|
}
|
package/dist/cli/oauth.js
CHANGED
|
@@ -51,6 +51,7 @@ export async function discover(origin, fetchImpl = fetch) {
|
|
|
51
51
|
const url = new URL("/.well-known/oauth-authorization-server", origin);
|
|
52
52
|
const response = await fetchImpl(url, {
|
|
53
53
|
headers: { accept: "application/json" },
|
|
54
|
+
signal: AbortSignal.timeout(10_000),
|
|
54
55
|
});
|
|
55
56
|
if (!response.ok) {
|
|
56
57
|
throw new OAuthError(`${origin} does not publish authorization server metadata`, `HTTP ${response.status}`);
|
|
@@ -79,6 +80,9 @@ export async function discover(origin, fetchImpl = fetch) {
|
|
|
79
80
|
? payload["scopes_supported"]
|
|
80
81
|
: [],
|
|
81
82
|
tokenEndpoint: payload["token_endpoint"],
|
|
83
|
+
...(typeof payload["revocation_endpoint"] === "string"
|
|
84
|
+
? { revocationEndpoint: payload["revocation_endpoint"] }
|
|
85
|
+
: {}),
|
|
82
86
|
};
|
|
83
87
|
}
|
|
84
88
|
export async function registerClient(server, redirectUri, fetchImpl = fetch) {
|
|
@@ -192,6 +196,7 @@ async function postToken(server, body, fetchImpl, what) {
|
|
|
192
196
|
body,
|
|
193
197
|
headers: { "content-type": "application/x-www-form-urlencoded" },
|
|
194
198
|
method: "POST",
|
|
199
|
+
signal: AbortSignal.timeout(10_000),
|
|
195
200
|
});
|
|
196
201
|
const payload = (await response.json().catch(() => null));
|
|
197
202
|
if (!response.ok || !payload) {
|
package/dist/cli/oauth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/cli/oauth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/cli/oauth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AA8BzC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,eAAe;IACf,gBAAgB;IAChB,kBAAkB;IAClB,mBAAmB;IACnB,oBAAoB;IACpB,qBAAqB;IACrB,eAAe;IACf,gBAAgB;IAChB,mBAAmB;CACX,CAAC;AAEX,MAAM,OAAO,UAAW,SAAQ,KAAK;IAGxB;IAFX,YACE,OAAe,EACN,MAAe;QAExB,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAFzC,WAAM,GAAN,MAAM,CAAS;QAGxB,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;AAED,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5E,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AACjC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,QAAgB;IAC7D,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACxC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACxC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,MAAc,EACd,YAA0B,KAAK;IAE/B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,yCAAyC,EAAE,MAAM,CAAC,CAAC;IACvE,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE;QACpC,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;QACvC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;KACpC,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,UAAU,CAClB,GAAG,MAAM,iDAAiD,EAC1D,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAC1B,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA4B,CAAC;IACnE,MAAM,QAAQ,GAAG;QACf,QAAQ;QACR,wBAAwB;QACxB,gBAAgB;QAChB,uBAAuB;KACf,CAAC;IACX,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE,CAAC;YACrC,MAAM,IAAI,UAAU,CAAC,qCAAqC,GAAG,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GAAG,OAAO,CAAC,kCAAkC,CAAC,CAAC;IAC5D,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,UAAU,CAClB,4GAA4G,CAC7G,CAAC;IACJ,CAAC;IACD,OAAO;QACL,qBAAqB,EAAE,OAAO,CAAC,wBAAwB,CAAW;QAClE,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAW;QACnC,oBAAoB,EAAE,OAAO,CAAC,uBAAuB,CAAW;QAChE,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;YACzD,CAAC,CAAE,OAAO,CAAC,kBAAkB,CAAc;YAC3C,CAAC,CAAC,EAAE;QACN,aAAa,EAAE,OAAO,CAAC,gBAAgB,CAAW;QAClD,GAAG,CAAC,OAAO,OAAO,CAAC,qBAAqB,CAAC,KAAK,QAAQ;YACpD,CAAC,CAAC,EAAE,kBAAkB,EAAE,OAAO,CAAC,qBAAqB,CAAC,EAAE;YACxD,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAA2B,EAC3B,WAAmB,EACnB,YAA0B,KAAK;IAE/B,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,oBAAoB,EAAE;QAC5D,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,gBAAgB,EAAE,QAAQ;YAC1B,WAAW,EAAE,gBAAgB;YAC7B,WAAW,EAAE,CAAC,oBAAoB,EAAE,eAAe,CAAC;YACpD,aAAa,EAAE,CAAC,WAAW,CAAC;YAC5B,cAAc,EAAE,CAAC,MAAM,CAAC;YACxB,0BAA0B,EAAE,MAAM;SACnC,CAAC;QACF,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,MAAM,EAAE,MAAM;KACf,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAIhD,CAAC;IACT,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,OAAO,OAAO,EAAE,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC3D,MAAM,IAAI,UAAU,CAClB,gCAAgC,EAChC,OAAO,OAAO,EAAE,iBAAiB,KAAK,QAAQ;YAC5C,CAAC,CAAC,OAAO,CAAC,iBAAiB;YAC3B,CAAC,CAAC,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAC9B,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC,SAAS,CAAC;AAC3B,CAAC;AAgBD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAGvC;IACC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,aAAa,GAAG,WAAW,CAAC;IAElC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC9D,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE;YACzC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,EAAE,kBAAkB,CAAC,CAAC;YAC5D,IAAI,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;gBACnC,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,CAAC;gBAC1D,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;gBAC5B,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GAAmB;gBAC7B,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;oBAC9B,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAW,EAAE;oBAClD,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC;oBAC/B,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAW,EAAE;oBACpD,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC;oBAC/B,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAW,EAAE;oBACpD,CAAC,CAAC,EAAE,CAAC;aACR,CAAC;YACF,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE;gBACtB,cAAc,EAAE,0BAA0B;gBAC1C,mEAAmE;gBACnE,uCAAuC;gBACvC,eAAe,EAAE,UAAU;gBAC3B,cAAc,EAAE,mBAAmB;aACpC,CAAC,CAAC;YACH,QAAQ,CAAC,GAAG,CACV,gEAAgE;gBAC9D,qEAAqE;gBACrE,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,gBAAgB,OAAO;gBAClE,MACE,MAAM,CAAC,IAAI;oBACT,CAAC,CAAC,6CAA6C;oBAC/C,CAAC,CAAC,0DACN,MAAM,CACT,CAAC;YACF,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3B,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YAC7C,MAAM,CAAC,IAAI,UAAU,CAAC,uBAAuB,CAAC,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAClC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,OAAO,EAAiB,CAAC;IACjD,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,OAAO,CAAC,oBAAoB,IAAI,GAAG,aAAa,EAAE,CAAC,CAAC;QAClE,OAAO,MAAM,OAAO,CAAC;IACvB,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,mBAAmB,EAAE,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAQhC;IACC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAC1D,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IAC9C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1D,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACxD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAC1D,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC;IACtD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC;AAED,SAAS,YAAY,CAAC,OAAgC;IACpD,IAAI,OAAO,OAAO,CAAC,cAAc,CAAC,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,IAAI,UAAU,CAAC,4CAA4C,CAAC,CAAC;IACrE,CAAC;IACD,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACxC,OAAO;QACL,WAAW,EAAE,OAAO,CAAC,cAAc,CAAC;QACpC,GAAG,CAAC,OAAO,SAAS,KAAK,QAAQ;YAC/B,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,IAAI,EAAE;YAC9C,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,OAAO,OAAO,CAAC,eAAe,CAAC,KAAK,QAAQ;YAC9C,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,eAAe,CAAC,EAAE;YAC5C,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,EACJ,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,QAAQ;YAClC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YACjE,CAAC,CAAC,EAAE;KACT,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,SAAS,CACtB,MAA2B,EAC3B,IAAqB,EACrB,SAAuB,EACvB,IAAY;IAEZ,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE;QACrD,IAAI;QACJ,OAAO,EAAE,EAAE,cAAc,EAAE,mCAAmC,EAAE;QAChE,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;KACpC,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAGhD,CAAC;IACT,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QAC7B,MAAM,IAAI,UAAU,CAClB,IAAI,EACJ,OAAO,OAAO,EAAE,CAAC,mBAAmB,CAAC,KAAK,QAAQ;YAChD,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC;YAC9B,CAAC,CAAC,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAC9B,CAAC;IACJ,CAAC;IACD,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAQlC;IACC,OAAO,SAAS,CACd,OAAO,CAAC,MAAM,EACd,IAAI,eAAe,CAAC;QAClB,SAAS,EAAE,OAAO,CAAC,QAAQ;QAC3B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,aAAa,EAAE,OAAO,CAAC,QAAQ;QAC/B,UAAU,EAAE,oBAAoB;QAChC,YAAY,EAAE,OAAO,CAAC,WAAW;QACjC,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC,EACF,OAAO,CAAC,SAAS,IAAI,KAAK,EAC1B,2CAA2C,CAC5C,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAM7B;IACC,OAAO,SAAS,CACd,OAAO,CAAC,MAAM,EACd,IAAI,eAAe,CAAC;QAClB,SAAS,EAAE,OAAO,CAAC,QAAQ;QAC3B,UAAU,EAAE,eAAe;QAC3B,aAAa,EAAE,OAAO,CAAC,YAAY;QACnC,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC,EACF,OAAO,CAAC,SAAS,IAAI,KAAK,EAC1B,+BAA+B,CAChC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Serialize refresh and credential-file mutations across wb processes.
|
|
2
|
+
*
|
|
3
|
+
* A claim has its own PID/nonce directory inside the atomic lock directory.
|
|
4
|
+
* A stale contender may remove ONLY a dead process's marker, then rmdir the
|
|
5
|
+
* empty outer directory. It cannot unlink a new holder's marker. An acquirer
|
|
6
|
+
* verifies its marker is the sole entry before proceeding, so even removal
|
|
7
|
+
* of an empty directory during acquisition cannot admit two holders. A crash
|
|
8
|
+
* recovers on the next command without a lease expiring during a slow refresh.
|
|
9
|
+
* Lock names contain no credential material. One lock per credentials file
|
|
10
|
+
* also prevents concurrent origins from overwriting each other's records.
|
|
11
|
+
*/
|
|
12
|
+
export declare function withCredentialsLock<T>(file: string, operation: () => Promise<T>): Promise<T>;
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
2
|
+
import { execFile } from "node:child_process";
|
|
3
|
+
import { promisify } from "node:util";
|
|
4
|
+
import { chmod, mkdir, readFile, readdir, realpath, rmdir, } from "node:fs/promises";
|
|
5
|
+
import path from "node:path";
|
|
6
|
+
function code(error) {
|
|
7
|
+
return error instanceof Error && "code" in error
|
|
8
|
+
? String(error.code)
|
|
9
|
+
: undefined;
|
|
10
|
+
}
|
|
11
|
+
async function removeDirectory(directory) {
|
|
12
|
+
try {
|
|
13
|
+
await rmdir(directory);
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
if (!["ENOENT", "ENOTEMPTY", "EEXIST"].includes(code(error) ?? ""))
|
|
17
|
+
throw error;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function alive(pid) {
|
|
21
|
+
try {
|
|
22
|
+
process.kill(pid, 0);
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
return code(error) !== "ESRCH";
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
const execute = promisify(execFile);
|
|
30
|
+
/** Process start distinguishes a live owner from a recycled PID. If OS
|
|
31
|
+
* inspection is unavailable, keep the lock rather than risk a replay. */
|
|
32
|
+
async function processStart(pid) {
|
|
33
|
+
try {
|
|
34
|
+
let started;
|
|
35
|
+
if (process.platform === "linux") {
|
|
36
|
+
const status = await readFile("/proc/" + String(pid) + "/stat", "utf8");
|
|
37
|
+
started = status.slice(status.lastIndexOf(")") + 2).split(" ")[19] ?? "";
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
const windows = process.platform === "win32";
|
|
41
|
+
const args = windows
|
|
42
|
+
? [
|
|
43
|
+
"-NoProfile",
|
|
44
|
+
"-NonInteractive",
|
|
45
|
+
"-Command",
|
|
46
|
+
"(Get-Process -Id " +
|
|
47
|
+
String(pid) +
|
|
48
|
+
").StartTime.ToUniversalTime().Ticks",
|
|
49
|
+
]
|
|
50
|
+
: ["-p", String(pid), "-o", "lstart="];
|
|
51
|
+
started = (await execute(windows ? "powershell.exe" : "/bin/ps", args, {
|
|
52
|
+
encoding: "utf8",
|
|
53
|
+
timeout: 2000,
|
|
54
|
+
env: { ...process.env, LC_ALL: "C" },
|
|
55
|
+
})).stdout.trim();
|
|
56
|
+
}
|
|
57
|
+
return started
|
|
58
|
+
? createHash("sha256").update(started).digest("hex").slice(0, 16)
|
|
59
|
+
: null;
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
let ownStart;
|
|
66
|
+
/** Serialize refresh and credential-file mutations across wb processes.
|
|
67
|
+
*
|
|
68
|
+
* A claim has its own PID/nonce directory inside the atomic lock directory.
|
|
69
|
+
* A stale contender may remove ONLY a dead process's marker, then rmdir the
|
|
70
|
+
* empty outer directory. It cannot unlink a new holder's marker. An acquirer
|
|
71
|
+
* verifies its marker is the sole entry before proceeding, so even removal
|
|
72
|
+
* of an empty directory during acquisition cannot admit two holders. A crash
|
|
73
|
+
* recovers on the next command without a lease expiring during a slow refresh.
|
|
74
|
+
* Lock names contain no credential material. One lock per credentials file
|
|
75
|
+
* also prevents concurrent origins from overwriting each other's records.
|
|
76
|
+
*/
|
|
77
|
+
export async function withCredentialsLock(file, operation) {
|
|
78
|
+
await mkdir(path.dirname(file), { recursive: true, mode: 0o700 });
|
|
79
|
+
await chmod(path.dirname(file), 0o700).catch(() => undefined);
|
|
80
|
+
const directory = path.join(await realpath(path.dirname(file)), `${path.basename(file)}.lock`);
|
|
81
|
+
const identity = await (ownStart ??= processStart(process.pid));
|
|
82
|
+
const deadline = Date.now() + 30_000;
|
|
83
|
+
for (;;) {
|
|
84
|
+
const marker = String(process.pid) + "-" + (identity ?? "unknown") + "-" + randomUUID();
|
|
85
|
+
const claim = path.join(directory, marker);
|
|
86
|
+
let created = false;
|
|
87
|
+
let acquired = false;
|
|
88
|
+
try {
|
|
89
|
+
await mkdir(directory, { mode: 0o700 });
|
|
90
|
+
created = true;
|
|
91
|
+
await chmod(directory, 0o700);
|
|
92
|
+
await mkdir(claim, { mode: 0o700 });
|
|
93
|
+
const owners = await readdir(directory);
|
|
94
|
+
acquired = owners.length === 1 && owners[0] === marker;
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
// On macOS a reclaimed parent can surface as EINVAL while creating
|
|
98
|
+
// its marker. The path was valid when mkdir(directory) succeeded.
|
|
99
|
+
if (!["EEXIST", "ENOENT"].includes(code(error) ?? "") &&
|
|
100
|
+
!(created && code(error) === "EINVAL"))
|
|
101
|
+
throw error;
|
|
102
|
+
if (created)
|
|
103
|
+
await removeDirectory(claim);
|
|
104
|
+
}
|
|
105
|
+
if (acquired) {
|
|
106
|
+
try {
|
|
107
|
+
return await operation();
|
|
108
|
+
}
|
|
109
|
+
finally {
|
|
110
|
+
await removeDirectory(claim);
|
|
111
|
+
await removeDirectory(directory);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (created)
|
|
115
|
+
await removeDirectory(claim);
|
|
116
|
+
try {
|
|
117
|
+
for (const owner of await readdir(directory)) {
|
|
118
|
+
const match = /^(\d+)-([\da-f]{16}|unknown)-[\da-f-]{36}$/u.exec(owner);
|
|
119
|
+
if (!match?.[1])
|
|
120
|
+
continue;
|
|
121
|
+
const pid = Number(match[1]);
|
|
122
|
+
const current = alive(pid) ? await processStart(pid) : null;
|
|
123
|
+
if (!alive(pid) ||
|
|
124
|
+
(current && match[2] !== "unknown" && current !== match[2]))
|
|
125
|
+
await removeDirectory(path.join(directory, owner));
|
|
126
|
+
}
|
|
127
|
+
await removeDirectory(directory);
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
if (code(error) !== "ENOENT")
|
|
131
|
+
throw error;
|
|
132
|
+
}
|
|
133
|
+
if (Date.now() >= deadline)
|
|
134
|
+
throw new Error("Another wb command is updating the stored login. Retry when it finishes.");
|
|
135
|
+
await new Promise((resolve) => setTimeout(resolve, 20));
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=session-lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-lock.js","sourceRoot":"","sources":["../../src/cli/session-lock.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/session.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { readFile } from "node:fs/promises";
|
|
2
2
|
import { WhooshBangClient } from "../client.js";
|
|
3
3
|
import { UsageError } from "./arguments.js";
|
|
4
|
-
import { forgetSession, loadSession, storeSession, } from "./config.js";
|
|
4
|
+
import { forgetSession, loadSession, storeSession, updateSession, } from "./config.js";
|
|
5
5
|
import { authorizationUrl, createPkcePair, discover, DEFAULT_SCOPES, exchangeCode, listenForRedirect, OAuthError, randomState, refresh, registerClient, stateMatches, } from "./oauth.js";
|
|
6
6
|
export const PRODUCTION_ORIGIN = "https://api.whooshbang.com";
|
|
7
7
|
/** How long before expiry a token is refreshed rather than used. */
|
|
@@ -124,7 +124,8 @@ export async function signOut(origin, credentialsFile) {
|
|
|
124
124
|
// not leave a person believing they are still signed in.
|
|
125
125
|
try {
|
|
126
126
|
const server = await discover(origin);
|
|
127
|
-
await fetch(server.
|
|
127
|
+
await fetch(server.revocationEndpoint ??
|
|
128
|
+
new URL("/oauth/revoke", server.issuer).toString(), {
|
|
128
129
|
body: new URLSearchParams({
|
|
129
130
|
client_id: session.clientId,
|
|
130
131
|
token: session.refreshToken ?? session.accessToken,
|
|
@@ -279,42 +280,52 @@ async function authorizedBearer(options) {
|
|
|
279
280
|
const expiring = session.expiresAt !== undefined &&
|
|
280
281
|
session.expiresAt - Date.now() < REFRESH_MARGIN_MS;
|
|
281
282
|
if (expiring && session.refreshToken) {
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
:
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
:
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
283
|
+
active = await updateSession(options.origin, async (current) => {
|
|
284
|
+
if (!current)
|
|
285
|
+
throw new NotSignedInError(options.origin);
|
|
286
|
+
if (current.kind === "key")
|
|
287
|
+
return current;
|
|
288
|
+
if (current.expiresAt === undefined ||
|
|
289
|
+
current.expiresAt - Date.now() >= REFRESH_MARGIN_MS)
|
|
290
|
+
return current;
|
|
291
|
+
if (!current.refreshToken)
|
|
292
|
+
throw new NotSignedInError(options.origin);
|
|
293
|
+
const server = await discover(options.origin);
|
|
294
|
+
const tokens = await refresh({
|
|
295
|
+
clientId: current.clientId,
|
|
296
|
+
refreshToken: current.refreshToken,
|
|
297
|
+
resource: options.origin,
|
|
298
|
+
server,
|
|
299
|
+
});
|
|
300
|
+
return {
|
|
301
|
+
accessToken: tokens.accessToken,
|
|
302
|
+
clientId: current.clientId,
|
|
303
|
+
kind: "oauth",
|
|
304
|
+
...(tokens.expiresAt === undefined
|
|
305
|
+
? {}
|
|
306
|
+
: { expiresAt: tokens.expiresAt }),
|
|
307
|
+
...(tokens.refreshToken === undefined
|
|
308
|
+
? {
|
|
309
|
+
...(current.refreshToken
|
|
310
|
+
? { refreshToken: current.refreshToken }
|
|
311
|
+
: {}),
|
|
312
|
+
}
|
|
313
|
+
: { refreshToken: tokens.refreshToken }),
|
|
314
|
+
scopes: tokens.scopes.length > 0 ? tokens.scopes : current.scopes,
|
|
315
|
+
};
|
|
316
|
+
}, options.credentialsFile);
|
|
306
317
|
}
|
|
307
318
|
else if (expiring) {
|
|
308
319
|
throw new NotSignedInError(options.origin);
|
|
309
320
|
}
|
|
310
321
|
return {
|
|
311
|
-
bearer: active.accessToken,
|
|
322
|
+
bearer: active.kind === "key" ? active.secret : active.accessToken,
|
|
312
323
|
client: new WhooshBangClient({
|
|
313
324
|
baseUrl: options.origin,
|
|
314
|
-
credential: active.accessToken,
|
|
325
|
+
credential: active.kind === "key" ? active.secret : active.accessToken,
|
|
315
326
|
fetch,
|
|
316
327
|
}),
|
|
317
|
-
kind:
|
|
328
|
+
kind: active.kind,
|
|
318
329
|
};
|
|
319
330
|
}
|
|
320
331
|
//# sourceMappingURL=session.js.map
|
package/dist/cli/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/cli/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EACL,aAAa,EACb,WAAW,EACX,YAAY,
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/cli/session.ts"],"names":[],"mappings":"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"}
|