@alwaysmeticulous/client 2.307.0 → 2.311.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/__tests__/agent.api.spec.js +89 -2
- package/dist/api/__tests__/agent.api.spec.js.map +1 -1
- package/dist/api/agent.api.d.ts +112 -2
- package/dist/api/agent.api.d.ts.map +1 -1
- package/dist/api/agent.api.js +76 -7
- package/dist/api/agent.api.js.map +1 -1
- package/dist/api/agentic-session-generation.api.d.ts +222 -0
- package/dist/api/agentic-session-generation.api.d.ts.map +1 -0
- package/dist/api/agentic-session-generation.api.js +109 -0
- package/dist/api/agentic-session-generation.api.js.map +1 -0
- package/dist/api/project-deployments.api.d.ts +21 -0
- package/dist/api/project-deployments.api.d.ts.map +1 -1
- package/dist/api/project-deployments.api.js +15 -14
- package/dist/api/project-deployments.api.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -4
- package/dist/index.js.map +1 -1
- package/dist/oauth/__tests__/oauth-device-login.spec.d.ts +2 -0
- package/dist/oauth/__tests__/oauth-device-login.spec.d.ts.map +1 -0
- package/dist/oauth/__tests__/oauth-device-login.spec.js +310 -0
- package/dist/oauth/__tests__/oauth-device-login.spec.js.map +1 -0
- package/dist/oauth/oauth-constants.d.ts +1 -0
- package/dist/oauth/oauth-constants.d.ts.map +1 -1
- package/dist/oauth/oauth-constants.js +23 -9
- package/dist/oauth/oauth-constants.js.map +1 -1
- package/dist/oauth/oauth-device-login.d.ts +3 -0
- package/dist/oauth/oauth-device-login.d.ts.map +1 -0
- package/dist/oauth/oauth-device-login.js +169 -0
- package/dist/oauth/oauth-device-login.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="c23e572f-3089-543e-a18d-04649f6856ee")}catch(e){}}();
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.performDeviceLogin = void 0;
|
|
6
|
+
const common_1 = require("@alwaysmeticulous/common");
|
|
7
|
+
const oauth_constants_1 = require("./oauth-constants");
|
|
8
|
+
const oauth_pkce_1 = require("./oauth-pkce");
|
|
9
|
+
const oauth_token_store_1 = require("./oauth-token-store");
|
|
10
|
+
const DEFAULT_POLL_INTERVAL_SECONDS = 5;
|
|
11
|
+
const SLOW_DOWN_INCREMENT_SECONDS = 5;
|
|
12
|
+
const performDeviceLogin = async () => {
|
|
13
|
+
const logger = (0, common_1.initLogger)();
|
|
14
|
+
// PKCE binds the token poll to this process: Keycloak enforces the client's
|
|
15
|
+
// PKCE policy on the device authorization endpoint too.
|
|
16
|
+
const codeVerifier = (0, oauth_pkce_1.generateCodeVerifier)();
|
|
17
|
+
const authorization = await requestDeviceAuthorization({
|
|
18
|
+
codeChallenge: (0, oauth_pkce_1.generateCodeChallenge)(codeVerifier),
|
|
19
|
+
});
|
|
20
|
+
const webappBaseUrl = (0, oauth_constants_1.getWebappBaseUrl)();
|
|
21
|
+
const cliLoginParams = new URLSearchParams({
|
|
22
|
+
user_code: authorization.user_code,
|
|
23
|
+
issuer: oauth_constants_1.KEYCLOAK_ISSUER_URL,
|
|
24
|
+
});
|
|
25
|
+
logger.info(`On any device, open: ${webappBaseUrl}/cli-device-login?${cliLoginParams.toString()} ` +
|
|
26
|
+
`and confirm the code: ${authorization.user_code}`);
|
|
27
|
+
logger.info(authorization.verification_uri_complete
|
|
28
|
+
? `If that doesn't work, open ${authorization.verification_uri_complete}`
|
|
29
|
+
: `If that doesn't work, open ${authorization.verification_uri} and enter the code manually: ${authorization.user_code}`);
|
|
30
|
+
const tokens = await pollForTokens({ authorization, codeVerifier });
|
|
31
|
+
(0, oauth_token_store_1.storeOAuthTokens)(tokens);
|
|
32
|
+
logger.info("Authentication successful.");
|
|
33
|
+
return tokens;
|
|
34
|
+
};
|
|
35
|
+
exports.performDeviceLogin = performDeviceLogin;
|
|
36
|
+
const requestDeviceAuthorization = async ({ codeChallenge, }) => {
|
|
37
|
+
const deviceAuthorizationEndpoint = await (0, oauth_constants_1.getDeviceAuthorizationEndpoint)();
|
|
38
|
+
const body = new URLSearchParams({
|
|
39
|
+
client_id: oauth_constants_1.CLI_CLIENT_ID,
|
|
40
|
+
scope: oauth_constants_1.OAUTH_SCOPES,
|
|
41
|
+
code_challenge: codeChallenge,
|
|
42
|
+
code_challenge_method: "S256",
|
|
43
|
+
});
|
|
44
|
+
const response = await fetch(deviceAuthorizationEndpoint, {
|
|
45
|
+
method: "POST",
|
|
46
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
47
|
+
body: body.toString(),
|
|
48
|
+
});
|
|
49
|
+
const bodyText = await response.text();
|
|
50
|
+
if (!response.ok) {
|
|
51
|
+
// Discovery advertises `device_authorization_endpoint` at the realm level
|
|
52
|
+
// regardless of whether the grant is enabled on this specific client, so
|
|
53
|
+
// disabling it only on `meticulous-cli` isn't caught by
|
|
54
|
+
// `getDeviceAuthorizationEndpoint()`. Keycloak instead rejects the request
|
|
55
|
+
// itself with `unauthorized_client` — catch that here for the same clear
|
|
56
|
+
// message.
|
|
57
|
+
if (parseOAuthErrorCode(bodyText) === "unauthorized_client") {
|
|
58
|
+
throw new Error("The OAuth 2.0 Device Authorization Grant is not enabled for the " +
|
|
59
|
+
`meticulous-cli client on this realm (${oauth_constants_1.KEYCLOAK_ISSUER_URL}).`);
|
|
60
|
+
}
|
|
61
|
+
throw new Error(`Device authorization request failed: ${response.status} ${bodyText}`);
|
|
62
|
+
}
|
|
63
|
+
return parseDeviceAuthorizationResponse(bodyText);
|
|
64
|
+
};
|
|
65
|
+
const REQUIRED_DEVICE_AUTHORIZATION_STRING_FIELDS = [
|
|
66
|
+
"device_code",
|
|
67
|
+
"user_code",
|
|
68
|
+
"verification_uri",
|
|
69
|
+
];
|
|
70
|
+
const parseDeviceAuthorizationResponse = (bodyText) => {
|
|
71
|
+
const data = JSON.parse(bodyText);
|
|
72
|
+
for (const field of REQUIRED_DEVICE_AUTHORIZATION_STRING_FIELDS) {
|
|
73
|
+
if (typeof data[field] !== "string" || data[field].length === 0) {
|
|
74
|
+
throw new Error(`Device authorization response missing required field "${field}".`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (typeof data.expires_in !== "number" ||
|
|
78
|
+
!Number.isFinite(data.expires_in)) {
|
|
79
|
+
throw new Error('Device authorization response missing a valid "expires_in".');
|
|
80
|
+
}
|
|
81
|
+
return data;
|
|
82
|
+
};
|
|
83
|
+
const pollForTokens = async ({ authorization, codeVerifier, }) => {
|
|
84
|
+
const tokenEndpoint = await (0, oauth_constants_1.getTokenEndpoint)();
|
|
85
|
+
const deadline = Date.now() + authorization.expires_in * 1000;
|
|
86
|
+
let intervalSeconds = authorization.interval ?? DEFAULT_POLL_INTERVAL_SECONDS;
|
|
87
|
+
for (;;) {
|
|
88
|
+
const remainingMs = deadline - Date.now();
|
|
89
|
+
if (remainingMs <= 0) {
|
|
90
|
+
throw new Error("Device code expired, run login again.");
|
|
91
|
+
}
|
|
92
|
+
// Cap the sleep to the remaining lifetime so a final token request still
|
|
93
|
+
// fires before the local deadline, instead of giving up one interval early.
|
|
94
|
+
await sleep(Math.min(intervalSeconds * 1000, remainingMs));
|
|
95
|
+
const result = await requestDeviceToken({
|
|
96
|
+
tokenEndpoint,
|
|
97
|
+
deviceCode: authorization.device_code,
|
|
98
|
+
codeVerifier,
|
|
99
|
+
});
|
|
100
|
+
if (result.kind === "success") {
|
|
101
|
+
return result.tokens;
|
|
102
|
+
}
|
|
103
|
+
if (result.kind === "slow_down") {
|
|
104
|
+
intervalSeconds += SLOW_DOWN_INCREMENT_SECONDS;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
const requestDeviceToken = async ({ tokenEndpoint, deviceCode, codeVerifier, }) => {
|
|
109
|
+
const body = new URLSearchParams({
|
|
110
|
+
grant_type: "urn:ietf:params:oauth:grant-type:device_code",
|
|
111
|
+
device_code: deviceCode,
|
|
112
|
+
client_id: oauth_constants_1.CLI_CLIENT_ID,
|
|
113
|
+
code_verifier: codeVerifier,
|
|
114
|
+
});
|
|
115
|
+
let response;
|
|
116
|
+
let bodyText;
|
|
117
|
+
try {
|
|
118
|
+
response = await fetch(tokenEndpoint, {
|
|
119
|
+
method: "POST",
|
|
120
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
121
|
+
body: body.toString(),
|
|
122
|
+
});
|
|
123
|
+
bodyText = await response.text();
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
// Transient network blip: keep polling until the local deadline instead
|
|
127
|
+
// of aborting an otherwise-valid, in-progress login.
|
|
128
|
+
return { kind: "pending" };
|
|
129
|
+
}
|
|
130
|
+
if (response.ok) {
|
|
131
|
+
const data = JSON.parse(bodyText);
|
|
132
|
+
return { kind: "success", tokens: mapTokenResponse(data) };
|
|
133
|
+
}
|
|
134
|
+
if (response.status >= 500) {
|
|
135
|
+
// Transient server error (5xx): same reasoning as the network-error case.
|
|
136
|
+
return { kind: "pending" };
|
|
137
|
+
}
|
|
138
|
+
const errorCode = parseOAuthErrorCode(bodyText);
|
|
139
|
+
if (errorCode === "authorization_pending") {
|
|
140
|
+
return { kind: "pending" };
|
|
141
|
+
}
|
|
142
|
+
if (errorCode === "slow_down") {
|
|
143
|
+
return { kind: "slow_down" };
|
|
144
|
+
}
|
|
145
|
+
if (errorCode === "access_denied") {
|
|
146
|
+
throw new Error("Login was denied.");
|
|
147
|
+
}
|
|
148
|
+
if (errorCode === "expired_token") {
|
|
149
|
+
throw new Error("Device code expired, run login again.");
|
|
150
|
+
}
|
|
151
|
+
throw new Error(`Device token request failed: ${response.status} ${bodyText}`);
|
|
152
|
+
};
|
|
153
|
+
const parseOAuthErrorCode = (bodyText) => {
|
|
154
|
+
try {
|
|
155
|
+
return JSON.parse(bodyText).error;
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
return undefined;
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
const mapTokenResponse = (data) => ({
|
|
162
|
+
accessToken: data.access_token,
|
|
163
|
+
refreshToken: data.refresh_token,
|
|
164
|
+
expiresAt: Math.floor(Date.now() / 1000) + data.expires_in,
|
|
165
|
+
idToken: data.id_token,
|
|
166
|
+
});
|
|
167
|
+
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
168
|
+
//# sourceMappingURL=oauth-device-login.js.map
|
|
169
|
+
//# debugId=c23e572f-3089-543e-a18d-04649f6856ee
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-device-login.js","sources":["../../src/oauth/oauth-device-login.ts"],"sourceRoot":"","names":[],"mappings":"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","debugId":"c23e572f-3089-543e-a18d-04649f6856ee"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "2.
|
|
1
|
+
export declare const VERSION = "2.311.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
|
@@ -5,6 +5,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
5
5
|
exports.VERSION = void 0;
|
|
6
6
|
// AUTO-GENERATED by scripts/generate-version.mjs — do not edit by hand.
|
|
7
7
|
// Regenerated from package.json on every build.
|
|
8
|
-
exports.VERSION = "2.
|
|
8
|
+
exports.VERSION = "2.311.0";
|
|
9
9
|
//# sourceMappingURL=version.js.map
|
|
10
10
|
//# debugId=ac10f4cc-7a38-5615-8b9d-956b50ad79da
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alwaysmeticulous/client",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.311.0",
|
|
4
4
|
"description": "Helper methods for using the Meticulous backend API",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
"loglevel": "^1.8.0",
|
|
13
13
|
"proxy-agent": "^6.4.0",
|
|
14
14
|
"undici": "^6.24.1",
|
|
15
|
-
"@alwaysmeticulous/
|
|
16
|
-
"@alwaysmeticulous/
|
|
15
|
+
"@alwaysmeticulous/common": "2.310.0",
|
|
16
|
+
"@alwaysmeticulous/api": "2.310.0"
|
|
17
17
|
},
|
|
18
18
|
"author": {
|
|
19
19
|
"name": "The Meticulous Team",
|