poe-code 3.0.88 → 3.0.89
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/commands/login.js +8 -77
- package/dist/cli/commands/login.js.map +1 -1
- package/dist/cli/container.js +4 -1
- package/dist/cli/container.js.map +1 -1
- package/dist/cli/oauth-login.d.ts +1 -0
- package/dist/cli/oauth-login.js +49 -0
- package/dist/cli/oauth-login.js.map +1 -0
- package/dist/cli/options.d.ts +1 -0
- package/dist/cli/options.js +8 -0
- package/dist/cli/options.js.map +1 -1
- package/dist/index.js +71 -73
- package/dist/index.js.map +4 -4
- package/dist/providers/poe-agent.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,11 +1,6 @@
|
|
|
1
|
-
import { exec } from "node:child_process";
|
|
2
|
-
import readline from "node:readline";
|
|
3
1
|
import { buildProviderContext, createExecutionResources, resolveCommandFlags, applyIsolatedConfiguration } from "./shared.js";
|
|
4
2
|
import { loadConfiguredServices } from "../../services/config.js";
|
|
5
|
-
import { ValidationError } from "../errors.js";
|
|
6
3
|
import { combineMutationObservers, createMutationReporter } from "../../services/mutation-events.js";
|
|
7
|
-
import { createOAuthClient } from "@poe-code/auth";
|
|
8
|
-
import { text, log } from "@poe-code/design-system";
|
|
9
4
|
export function registerLoginCommand(program, container) {
|
|
10
5
|
program
|
|
11
6
|
.command("login")
|
|
@@ -20,19 +15,21 @@ export async function executeLogin(program, container, options) {
|
|
|
20
15
|
const resources = createExecutionResources(container, flags, "login");
|
|
21
16
|
resources.logger.intro("login");
|
|
22
17
|
try {
|
|
23
|
-
const
|
|
24
|
-
|
|
18
|
+
const apiKey = await container.options.resolveApiKey({
|
|
19
|
+
value: options.apiKey,
|
|
20
|
+
envValue: container.env.getVariable("POE_API_KEY"),
|
|
21
|
+
dryRun: flags.dryRun,
|
|
22
|
+
assumeYes: flags.assumeYes,
|
|
23
|
+
allowStored: false
|
|
24
|
+
});
|
|
25
25
|
const configuredServices = await loadConfiguredServices({
|
|
26
26
|
fs: container.fs,
|
|
27
27
|
filePath: container.env.configPath
|
|
28
28
|
});
|
|
29
|
-
if (!flags.dryRun) {
|
|
30
|
-
await container.writeApiKey(normalized);
|
|
31
|
-
}
|
|
32
29
|
await reconfigureServices({
|
|
33
30
|
program,
|
|
34
31
|
container,
|
|
35
|
-
apiKey
|
|
32
|
+
apiKey,
|
|
36
33
|
configuredServices
|
|
37
34
|
});
|
|
38
35
|
resources.context.complete({
|
|
@@ -51,72 +48,6 @@ export async function executeLogin(program, container, options) {
|
|
|
51
48
|
throw error;
|
|
52
49
|
}
|
|
53
50
|
}
|
|
54
|
-
async function resolveApiKeyInput(container, options) {
|
|
55
|
-
if (options.apiKey) {
|
|
56
|
-
return options.apiKey;
|
|
57
|
-
}
|
|
58
|
-
const envKey = container.env.getVariable("POE_API_KEY");
|
|
59
|
-
if (envKey && envKey.trim().length > 0) {
|
|
60
|
-
return envKey;
|
|
61
|
-
}
|
|
62
|
-
if (container.env.getVariable("POE_CODE_OAUTH_LOGIN") === "1") {
|
|
63
|
-
return resolveApiKeyViaOAuth();
|
|
64
|
-
}
|
|
65
|
-
const descriptor = container.promptLibrary.loginApiKey();
|
|
66
|
-
const response = await container.prompts(descriptor);
|
|
67
|
-
const value = response[descriptor.name];
|
|
68
|
-
if (typeof value !== "string" || value.trim() === "") {
|
|
69
|
-
throw new ValidationError("POE API key is required.", {
|
|
70
|
-
operation: "login",
|
|
71
|
-
field: "apiKey"
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
return value;
|
|
75
|
-
}
|
|
76
|
-
async function resolveApiKeyViaOAuth() {
|
|
77
|
-
const rl = readline.createInterface({
|
|
78
|
-
input: process.stdin
|
|
79
|
-
});
|
|
80
|
-
try {
|
|
81
|
-
const client = createOAuthClient({
|
|
82
|
-
clientId: "client_f520ee4d8ca84a13ba876a8731d264d0",
|
|
83
|
-
authorizationEndpoint: "https://poe.com/oauth/authorize",
|
|
84
|
-
tokenEndpoint: "https://api.poe.com/token",
|
|
85
|
-
openBrowser: (url) => openInBrowser(url).catch(() => {
|
|
86
|
-
log.warn("Could not open browser automatically.");
|
|
87
|
-
}),
|
|
88
|
-
readLine: () => new Promise((resolve) => {
|
|
89
|
-
rl.once("line", (line) => resolve(line));
|
|
90
|
-
})
|
|
91
|
-
});
|
|
92
|
-
const authorization = await client.authorize();
|
|
93
|
-
log.message(`${text.muted("Authorize at")} ${text.link(authorization.authorizationUrl)}`);
|
|
94
|
-
log.message(text.muted("Waiting for authorization. You can also paste the redirect URL here:"));
|
|
95
|
-
const result = await authorization.waitForResult();
|
|
96
|
-
return result.apiKey;
|
|
97
|
-
}
|
|
98
|
-
finally {
|
|
99
|
-
rl.close();
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
function openInBrowser(url) {
|
|
103
|
-
return new Promise((resolve, reject) => {
|
|
104
|
-
const platform = process.platform;
|
|
105
|
-
const command = platform === "darwin"
|
|
106
|
-
? `open "${url}"`
|
|
107
|
-
: platform === "win32"
|
|
108
|
-
? `start "" "${url}"`
|
|
109
|
-
: `xdg-open "${url}"`;
|
|
110
|
-
exec(command, (error) => {
|
|
111
|
-
if (error) {
|
|
112
|
-
reject(error);
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
resolve();
|
|
116
|
-
}
|
|
117
|
-
});
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
51
|
async function reconfigureServices(input) {
|
|
121
52
|
const { program, container, apiKey, configuredServices } = input;
|
|
122
53
|
const serviceNames = Object.keys(configuredServices);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/container.js
CHANGED
|
@@ -12,6 +12,7 @@ import { text, symbols, confirm as dsConfirm, isCancel, cancel as dsCancel } fro
|
|
|
12
12
|
import { getDefaultProviders } from "../providers/index.js";
|
|
13
13
|
import { createPoeCodeCommandRunner } from "./poe-code-command-runner.js";
|
|
14
14
|
import { OperationCancelledError } from "./errors.js";
|
|
15
|
+
import { resolveApiKeyViaOAuth } from "./oauth-login.js";
|
|
15
16
|
export function createCliContainer(dependencies) {
|
|
16
17
|
const environment = createCliEnvironment({
|
|
17
18
|
cwd: dependencies.env.cwd,
|
|
@@ -73,6 +74,7 @@ export function createCliContainer(dependencies) {
|
|
|
73
74
|
});
|
|
74
75
|
const readApiKey = authStore.getApiKey.bind(authStore);
|
|
75
76
|
const writeApiKey = authStore.setApiKey.bind(authStore);
|
|
77
|
+
const oauthEnabled = (dependencies.env.variables ?? process.env).POE_CODE_OAUTH_LOGIN === "1";
|
|
76
78
|
const options = createOptionResolvers({
|
|
77
79
|
prompts: dependencies.prompts,
|
|
78
80
|
promptLibrary,
|
|
@@ -87,7 +89,8 @@ export function createCliContainer(dependencies) {
|
|
|
87
89
|
throw new OperationCancelledError();
|
|
88
90
|
}
|
|
89
91
|
return result === true;
|
|
90
|
-
}
|
|
92
|
+
},
|
|
93
|
+
loginViaOAuth: oauthEnabled ? resolveApiKeyViaOAuth : undefined
|
|
91
94
|
});
|
|
92
95
|
const registry = createServiceRegistry();
|
|
93
96
|
const providers = getDefaultProviders().filter((adapter) => !adapter.disabled);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/cli/container.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,SAAS,CAAC;AAEtC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EACL,qBAAqB,EAEtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,2BAA2B,EAE5B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EACL,qBAAqB,EAEtB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,mBAAmB,EAEpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EACL,IAAI,EACJ,OAAO,EACP,OAAO,IAAI,SAAS,EACpB,QAAQ,EACR,MAAM,IAAI,QAAQ,EACnB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/cli/container.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function resolveApiKeyViaOAuth(): Promise<string>;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { exec } from "node:child_process";
|
|
2
|
+
import readline from "node:readline";
|
|
3
|
+
import { createOAuthClient } from "@poe-code/auth";
|
|
4
|
+
import { text, log } from "@poe-code/design-system";
|
|
5
|
+
export async function resolveApiKeyViaOAuth() {
|
|
6
|
+
const rl = readline.createInterface({
|
|
7
|
+
input: process.stdin
|
|
8
|
+
});
|
|
9
|
+
try {
|
|
10
|
+
const client = createOAuthClient({
|
|
11
|
+
clientId: "client_f520ee4d8ca84a13ba876a8731d264d0",
|
|
12
|
+
authorizationEndpoint: "https://poe.com/oauth/authorize",
|
|
13
|
+
tokenEndpoint: "https://api.poe.com/token",
|
|
14
|
+
openBrowser: (url) => openInBrowser(url).catch(() => {
|
|
15
|
+
log.warn("Could not open browser automatically.");
|
|
16
|
+
}),
|
|
17
|
+
readLine: () => new Promise((resolve) => {
|
|
18
|
+
rl.once("line", (line) => resolve(line));
|
|
19
|
+
})
|
|
20
|
+
});
|
|
21
|
+
const authorization = await client.authorize();
|
|
22
|
+
log.message(`${text.muted("Authorize at")} ${text.link(authorization.authorizationUrl)}`);
|
|
23
|
+
log.message(text.muted("Waiting for authorization. You can also paste the redirect URL here:"));
|
|
24
|
+
const result = await authorization.waitForResult();
|
|
25
|
+
return result.apiKey;
|
|
26
|
+
}
|
|
27
|
+
finally {
|
|
28
|
+
rl.close();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function openInBrowser(url) {
|
|
32
|
+
return new Promise((resolve, reject) => {
|
|
33
|
+
const platform = process.platform;
|
|
34
|
+
const command = platform === "darwin"
|
|
35
|
+
? `open "${url}"`
|
|
36
|
+
: platform === "win32"
|
|
37
|
+
? `start "" "${url}"`
|
|
38
|
+
: `xdg-open "${url}"`;
|
|
39
|
+
exec(command, (error) => {
|
|
40
|
+
if (error) {
|
|
41
|
+
reject(error);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
resolve();
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=oauth-login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-login.js","sourceRoot":"","sources":["../../src/cli/oauth-login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EACL,IAAI,EACJ,GAAG,EACJ,MAAM,yBAAyB,CAAC;AAEjC,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,iBAAiB,CAAC;YAC/B,QAAQ,EAAE,yCAAyC;YACnD,qBAAqB,EAAE,iCAAiC;YACxD,aAAa,EAAE,2BAA2B;YAC1C,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CACnB,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBAC5B,GAAG,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;YACpD,CAAC,CAAC;YACJ,QAAQ,EAAE,GAAG,EAAE,CACb,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;gBAC9B,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3C,CAAC,CAAC;SACL,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;QAE/C,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAC1F,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC,CAAC;QAEhG,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,aAAa,EAAE,CAAC;QAEnD,OAAO,MAAM,CAAC,MAAM,CAAC;IACvB,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,GAAW;IAChC,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAClC,MAAM,OAAO,GACX,QAAQ,KAAK,QAAQ;YACnB,CAAC,CAAC,SAAS,GAAG,GAAG;YACjB,CAAC,CAAC,QAAQ,KAAK,OAAO;gBACpB,CAAC,CAAC,aAAa,GAAG,GAAG;gBACrB,CAAC,CAAC,aAAa,GAAG,GAAG,CAAC;QAE5B,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACtB,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACN,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/cli/options.d.ts
CHANGED
|
@@ -45,6 +45,7 @@ export interface OptionResolverInit {
|
|
|
45
45
|
promptLibrary: PromptLibrary;
|
|
46
46
|
apiKeyStore: ApiKeyStore;
|
|
47
47
|
confirm: (message: string) => Promise<boolean>;
|
|
48
|
+
loginViaOAuth?: () => Promise<string>;
|
|
48
49
|
}
|
|
49
50
|
export declare function isValidApiKeyFormat(key: string): boolean;
|
|
50
51
|
export declare function createOptionResolvers(init: OptionResolverInit): OptionResolvers;
|
package/dist/cli/options.js
CHANGED
|
@@ -123,6 +123,14 @@ export function createOptionResolvers(init) {
|
|
|
123
123
|
return normalizeApiKey(stored);
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
|
+
if (init.loginViaOAuth) {
|
|
127
|
+
const apiKey = await init.loginViaOAuth();
|
|
128
|
+
const normalized = normalizeApiKey(apiKey);
|
|
129
|
+
if (!input.dryRun) {
|
|
130
|
+
await init.apiKeyStore.write(normalized);
|
|
131
|
+
}
|
|
132
|
+
return normalized;
|
|
133
|
+
}
|
|
126
134
|
while (true) {
|
|
127
135
|
const descriptor = init.promptLibrary.loginApiKey();
|
|
128
136
|
const response = await init.prompts(descriptor);
|
package/dist/cli/options.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/cli/options.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,SAAS,mBAAmB,CAAC,KAAa;IACxC,OAAO,KAAK;SACT,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;SAC1B,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;SAC1B,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC;SACjC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;SACzB,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AAC9B,CAAC;
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/cli/options.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -504,6 +504,7 @@ async function startAuthorization(config2, fetchFn) {
|
|
|
504
504
|
fetchFn
|
|
505
505
|
});
|
|
506
506
|
} finally {
|
|
507
|
+
server.closeAllConnections?.();
|
|
507
508
|
server.close();
|
|
508
509
|
}
|
|
509
510
|
};
|
|
@@ -5146,6 +5147,14 @@ function createOptionResolvers(init) {
|
|
|
5146
5147
|
return normalizeApiKey(stored);
|
|
5147
5148
|
}
|
|
5148
5149
|
}
|
|
5150
|
+
if (init.loginViaOAuth) {
|
|
5151
|
+
const apiKey = await init.loginViaOAuth();
|
|
5152
|
+
const normalized = normalizeApiKey(apiKey);
|
|
5153
|
+
if (!input.dryRun) {
|
|
5154
|
+
await init.apiKeyStore.write(normalized);
|
|
5155
|
+
}
|
|
5156
|
+
return normalized;
|
|
5157
|
+
}
|
|
5149
5158
|
while (true) {
|
|
5150
5159
|
const descriptor = init.promptLibrary.loginApiKey();
|
|
5151
5160
|
const response = await init.prompts(descriptor);
|
|
@@ -10600,6 +10609,55 @@ var init_client_instance = __esm({
|
|
|
10600
10609
|
}
|
|
10601
10610
|
});
|
|
10602
10611
|
|
|
10612
|
+
// src/cli/oauth-login.ts
|
|
10613
|
+
import { exec as exec2 } from "node:child_process";
|
|
10614
|
+
import readline from "node:readline";
|
|
10615
|
+
async function resolveApiKeyViaOAuth() {
|
|
10616
|
+
const rl = readline.createInterface({
|
|
10617
|
+
input: process.stdin
|
|
10618
|
+
});
|
|
10619
|
+
try {
|
|
10620
|
+
const client = createOAuthClient({
|
|
10621
|
+
clientId: "client_f520ee4d8ca84a13ba876a8731d264d0",
|
|
10622
|
+
authorizationEndpoint: "https://poe.com/oauth/authorize",
|
|
10623
|
+
tokenEndpoint: "https://api.poe.com/token",
|
|
10624
|
+
openBrowser: (url2) => openInBrowser(url2).catch(() => {
|
|
10625
|
+
log2.warn("Could not open browser automatically.");
|
|
10626
|
+
}),
|
|
10627
|
+
readLine: () => new Promise((resolve) => {
|
|
10628
|
+
rl.once("line", (line) => resolve(line));
|
|
10629
|
+
})
|
|
10630
|
+
});
|
|
10631
|
+
const authorization = await client.authorize();
|
|
10632
|
+
log2.message(`${text.muted("Authorize at")} ${text.link(authorization.authorizationUrl)}`);
|
|
10633
|
+
log2.message(text.muted("Waiting for authorization. You can also paste the redirect URL here:"));
|
|
10634
|
+
const result = await authorization.waitForResult();
|
|
10635
|
+
return result.apiKey;
|
|
10636
|
+
} finally {
|
|
10637
|
+
rl.close();
|
|
10638
|
+
}
|
|
10639
|
+
}
|
|
10640
|
+
function openInBrowser(url2) {
|
|
10641
|
+
return new Promise((resolve, reject) => {
|
|
10642
|
+
const platform = process.platform;
|
|
10643
|
+
const command = platform === "darwin" ? `open "${url2}"` : platform === "win32" ? `start "" "${url2}"` : `xdg-open "${url2}"`;
|
|
10644
|
+
exec2(command, (error2) => {
|
|
10645
|
+
if (error2) {
|
|
10646
|
+
reject(error2);
|
|
10647
|
+
} else {
|
|
10648
|
+
resolve();
|
|
10649
|
+
}
|
|
10650
|
+
});
|
|
10651
|
+
});
|
|
10652
|
+
}
|
|
10653
|
+
var init_oauth_login = __esm({
|
|
10654
|
+
"src/cli/oauth-login.ts"() {
|
|
10655
|
+
"use strict";
|
|
10656
|
+
init_src();
|
|
10657
|
+
init_src4();
|
|
10658
|
+
}
|
|
10659
|
+
});
|
|
10660
|
+
|
|
10603
10661
|
// src/cli/container.ts
|
|
10604
10662
|
import * as nodeFsSync2 from "node:fs";
|
|
10605
10663
|
function createCliContainer(dependencies) {
|
|
@@ -10656,6 +10714,7 @@ function createCliContainer(dependencies) {
|
|
|
10656
10714
|
});
|
|
10657
10715
|
const readApiKey = authStore.getApiKey.bind(authStore);
|
|
10658
10716
|
const writeApiKey = authStore.setApiKey.bind(authStore);
|
|
10717
|
+
const oauthEnabled = (dependencies.env.variables ?? process.env).POE_CODE_OAUTH_LOGIN === "1";
|
|
10659
10718
|
const options = createOptionResolvers({
|
|
10660
10719
|
prompts: dependencies.prompts,
|
|
10661
10720
|
promptLibrary,
|
|
@@ -10670,7 +10729,8 @@ function createCliContainer(dependencies) {
|
|
|
10670
10729
|
throw new OperationCancelledError();
|
|
10671
10730
|
}
|
|
10672
10731
|
return result === true;
|
|
10673
|
-
}
|
|
10732
|
+
},
|
|
10733
|
+
loginViaOAuth: oauthEnabled ? resolveApiKeyViaOAuth : void 0
|
|
10674
10734
|
});
|
|
10675
10735
|
const registry2 = createServiceRegistry();
|
|
10676
10736
|
const providers = getDefaultProviders().filter(
|
|
@@ -10719,6 +10779,7 @@ var init_container2 = __esm({
|
|
|
10719
10779
|
await init_providers();
|
|
10720
10780
|
init_poe_code_command_runner();
|
|
10721
10781
|
init_errors();
|
|
10782
|
+
init_oauth_login();
|
|
10722
10783
|
}
|
|
10723
10784
|
});
|
|
10724
10785
|
|
|
@@ -12073,8 +12134,6 @@ var init_wrap = __esm({
|
|
|
12073
12134
|
});
|
|
12074
12135
|
|
|
12075
12136
|
// src/cli/commands/login.ts
|
|
12076
|
-
import { exec as exec2 } from "node:child_process";
|
|
12077
|
-
import readline from "node:readline";
|
|
12078
12137
|
function registerLoginCommand(program, container) {
|
|
12079
12138
|
program.command("login").description("Store a Poe API key for reuse across commands.").option("--api-key <key>", "Poe API key").action(async (options) => {
|
|
12080
12139
|
await executeLogin(program, container, options);
|
|
@@ -12089,19 +12148,21 @@ async function executeLogin(program, container, options) {
|
|
|
12089
12148
|
);
|
|
12090
12149
|
resources.logger.intro("login");
|
|
12091
12150
|
try {
|
|
12092
|
-
const
|
|
12093
|
-
|
|
12151
|
+
const apiKey = await container.options.resolveApiKey({
|
|
12152
|
+
value: options.apiKey,
|
|
12153
|
+
envValue: container.env.getVariable("POE_API_KEY"),
|
|
12154
|
+
dryRun: flags.dryRun,
|
|
12155
|
+
assumeYes: flags.assumeYes,
|
|
12156
|
+
allowStored: false
|
|
12157
|
+
});
|
|
12094
12158
|
const configuredServices = await loadConfiguredServices({
|
|
12095
12159
|
fs: container.fs,
|
|
12096
12160
|
filePath: container.env.configPath
|
|
12097
12161
|
});
|
|
12098
|
-
if (!flags.dryRun) {
|
|
12099
|
-
await container.writeApiKey(normalized);
|
|
12100
|
-
}
|
|
12101
12162
|
await reconfigureServices({
|
|
12102
12163
|
program,
|
|
12103
12164
|
container,
|
|
12104
|
-
apiKey
|
|
12165
|
+
apiKey,
|
|
12105
12166
|
configuredServices
|
|
12106
12167
|
});
|
|
12107
12168
|
resources.context.complete({
|
|
@@ -12119,66 +12180,6 @@ async function executeLogin(program, container, options) {
|
|
|
12119
12180
|
throw error2;
|
|
12120
12181
|
}
|
|
12121
12182
|
}
|
|
12122
|
-
async function resolveApiKeyInput(container, options) {
|
|
12123
|
-
if (options.apiKey) {
|
|
12124
|
-
return options.apiKey;
|
|
12125
|
-
}
|
|
12126
|
-
const envKey = container.env.getVariable("POE_API_KEY");
|
|
12127
|
-
if (envKey && envKey.trim().length > 0) {
|
|
12128
|
-
return envKey;
|
|
12129
|
-
}
|
|
12130
|
-
if (container.env.getVariable("POE_CODE_OAUTH_LOGIN") === "1") {
|
|
12131
|
-
return resolveApiKeyViaOAuth();
|
|
12132
|
-
}
|
|
12133
|
-
const descriptor = container.promptLibrary.loginApiKey();
|
|
12134
|
-
const response = await container.prompts(descriptor);
|
|
12135
|
-
const value = response[descriptor.name];
|
|
12136
|
-
if (typeof value !== "string" || value.trim() === "") {
|
|
12137
|
-
throw new ValidationError("POE API key is required.", {
|
|
12138
|
-
operation: "login",
|
|
12139
|
-
field: "apiKey"
|
|
12140
|
-
});
|
|
12141
|
-
}
|
|
12142
|
-
return value;
|
|
12143
|
-
}
|
|
12144
|
-
async function resolveApiKeyViaOAuth() {
|
|
12145
|
-
const rl = readline.createInterface({
|
|
12146
|
-
input: process.stdin
|
|
12147
|
-
});
|
|
12148
|
-
try {
|
|
12149
|
-
const client = createOAuthClient({
|
|
12150
|
-
clientId: "client_f520ee4d8ca84a13ba876a8731d264d0",
|
|
12151
|
-
authorizationEndpoint: "https://poe.com/oauth/authorize",
|
|
12152
|
-
tokenEndpoint: "https://api.poe.com/token",
|
|
12153
|
-
openBrowser: (url2) => openInBrowser(url2).catch(() => {
|
|
12154
|
-
log2.warn("Could not open browser automatically.");
|
|
12155
|
-
}),
|
|
12156
|
-
readLine: () => new Promise((resolve) => {
|
|
12157
|
-
rl.once("line", (line) => resolve(line));
|
|
12158
|
-
})
|
|
12159
|
-
});
|
|
12160
|
-
const authorization = await client.authorize();
|
|
12161
|
-
log2.message(`${text.muted("Authorize at")} ${text.link(authorization.authorizationUrl)}`);
|
|
12162
|
-
log2.message(text.muted("Waiting for authorization. You can also paste the redirect URL here:"));
|
|
12163
|
-
const result = await authorization.waitForResult();
|
|
12164
|
-
return result.apiKey;
|
|
12165
|
-
} finally {
|
|
12166
|
-
rl.close();
|
|
12167
|
-
}
|
|
12168
|
-
}
|
|
12169
|
-
function openInBrowser(url2) {
|
|
12170
|
-
return new Promise((resolve, reject) => {
|
|
12171
|
-
const platform = process.platform;
|
|
12172
|
-
const command = platform === "darwin" ? `open "${url2}"` : platform === "win32" ? `start "" "${url2}"` : `xdg-open "${url2}"`;
|
|
12173
|
-
exec2(command, (error2) => {
|
|
12174
|
-
if (error2) {
|
|
12175
|
-
reject(error2);
|
|
12176
|
-
} else {
|
|
12177
|
-
resolve();
|
|
12178
|
-
}
|
|
12179
|
-
});
|
|
12180
|
-
});
|
|
12181
|
-
}
|
|
12182
12183
|
async function reconfigureServices(input) {
|
|
12183
12184
|
const { program, container, apiKey, configuredServices } = input;
|
|
12184
12185
|
const serviceNames = Object.keys(configuredServices);
|
|
@@ -12232,10 +12233,7 @@ var init_login = __esm({
|
|
|
12232
12233
|
"use strict";
|
|
12233
12234
|
init_shared();
|
|
12234
12235
|
init_config();
|
|
12235
|
-
init_errors();
|
|
12236
12236
|
init_mutation_events();
|
|
12237
|
-
init_src();
|
|
12238
|
-
init_src4();
|
|
12239
12237
|
}
|
|
12240
12238
|
});
|
|
12241
12239
|
|
|
@@ -38596,7 +38594,7 @@ var init_package = __esm({
|
|
|
38596
38594
|
"package.json"() {
|
|
38597
38595
|
package_default = {
|
|
38598
38596
|
name: "poe-code",
|
|
38599
|
-
version: "3.0.
|
|
38597
|
+
version: "3.0.89",
|
|
38600
38598
|
description: "CLI tool to configure Poe API for developer workflows.",
|
|
38601
38599
|
type: "module",
|
|
38602
38600
|
main: "./dist/index.js",
|