neon 3.0.0 → 3.1.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/README.md +54 -0
- package/dist/_shared/auth_selection.js +76 -79
- package/dist/_shared/credentials.js +166 -187
- package/dist/_shared/env-core/env.js +354 -517
- package/dist/_shared/env-core/reuse-secrets.js +159 -203
- package/dist/_shared/paths.js +129 -126
- package/dist/_shared/profiles.js +192 -242
- package/dist/_shared/secure_file.js +36 -38
- package/dist/_virtual/_rolldown/runtime.js +13 -0
- package/dist/analytics.js +163 -207
- package/dist/api.js +815 -758
- package/dist/auth.js +121 -141
- package/dist/auth_context.js +39 -53
- package/dist/cli.js +4 -7
- package/dist/commands/api.js +220 -250
- package/dist/commands/api_keys.js +251 -314
- package/dist/commands/auth.js +283 -328
- package/dist/commands/bootstrap.js +372 -437
- package/dist/commands/branches.js +304 -455
- package/dist/commands/bucket.js +374 -514
- package/dist/commands/checkout.js +213 -298
- package/dist/commands/config.js +573 -690
- package/dist/commands/connection_string.js +137 -165
- package/dist/commands/data_api.js +238 -260
- package/dist/commands/databases.js +67 -76
- package/dist/commands/deploy.js +31 -25
- package/dist/commands/dev.js +639 -719
- package/dist/commands/diff.js +156 -200
- package/dist/commands/env.js +243 -303
- package/dist/commands/functions.js +275 -355
- package/dist/commands/index.js +70 -65
- package/dist/commands/init.js +84 -119
- package/dist/commands/inspect.js +55 -55
- package/dist/commands/ip_allow.js +88 -120
- package/dist/commands/link.js +874 -1019
- package/dist/commands/logs.js +291 -0
- package/dist/commands/neon_auth.js +725 -933
- package/dist/commands/operations.js +34 -25
- package/dist/commands/orgs.js +28 -18
- package/dist/commands/profile.js +614 -845
- package/dist/commands/projects.js +313 -373
- package/dist/commands/psql.js +60 -58
- package/dist/commands/roles.js +55 -58
- package/dist/commands/schema_diff.js +87 -131
- package/dist/commands/set_context.js +34 -26
- package/dist/commands/snapshots.js +288 -413
- package/dist/commands/status.js +41 -37
- package/dist/commands/user.js +21 -10
- package/dist/commands/vpc_endpoints.js +85 -113
- package/dist/config.js +7 -6
- package/dist/config_format.js +50 -66
- package/dist/config_template.js +128 -157
- package/dist/context.js +183 -235
- package/dist/current_branch_fast_path.js +40 -49
- package/dist/dev/env.js +313 -394
- package/dist/dev/functions.js +54 -68
- package/dist/dev/inputs.js +46 -58
- package/dist/dev/runtime.js +135 -164
- package/dist/dev/websocket.js +766 -959
- package/dist/env.js +27 -33
- package/dist/env_file.js +118 -132
- package/dist/env_services.js +36 -38
- package/dist/errors.js +57 -68
- package/dist/functions_api.js +45 -43
- package/dist/help.js +189 -140
- package/dist/index.js +182 -257
- package/dist/init/agents.js +137 -118
- package/dist/init/auth.js +58 -68
- package/dist/init/bootstrap.js +325 -396
- package/dist/init/build_config.js +4 -2
- package/dist/init/detect_agent.js +56 -101
- package/dist/init/editors.js +35 -52
- package/dist/init/enrich_output.js +51 -66
- package/dist/init/extension.js +134 -171
- package/dist/init/inspect.js +179 -266
- package/dist/init/interactive.js +510 -622
- package/dist/init/neonctl.js +117 -168
- package/dist/init/orchestrate.js +157 -173
- package/dist/init/phases/auth.js +188 -202
- package/dist/init/phases/cleanup.js +23 -23
- package/dist/init/phases/db.js +251 -277
- package/dist/init/phases/getting_started.js +213 -223
- package/dist/init/phases/mcp.js +174 -224
- package/dist/init/phases/migrations.js +247 -248
- package/dist/init/phases/neon_auth.js +114 -133
- package/dist/init/phases/setup.js +546 -703
- package/dist/init/phases/skills.js +75 -86
- package/dist/init/phases/status.js +72 -67
- package/dist/init/resolve_context.js +102 -99
- package/dist/init/route_command.js +91 -98
- package/dist/init/skills.js +174 -218
- package/dist/init/vsix.js +77 -99
- package/dist/log.js +17 -16
- package/dist/neon_services.js +104 -129
- package/dist/parameters.gen.js +481 -471
- package/dist/pkg.js +17 -19
- package/dist/profile_keys.js +44 -47
- package/dist/psql/cli.js +44 -47
- package/dist/psql/command/cmd_cond.js +231 -406
- package/dist/psql/command/cmd_connect.js +557 -764
- package/dist/psql/command/cmd_copy.js +727 -983
- package/dist/psql/command/cmd_describe.js +1499 -1688
- package/dist/psql/command/cmd_format.js +733 -905
- package/dist/psql/command/cmd_io.js +1293 -2082
- package/dist/psql/command/cmd_lo.js +297 -359
- package/dist/psql/command/cmd_meta.js +727 -878
- package/dist/psql/command/cmd_misc.js +138 -172
- package/dist/psql/command/cmd_pipeline.js +547 -1099
- package/dist/psql/command/cmd_restrict.js +119 -155
- package/dist/psql/command/cmd_show.js +529 -688
- package/dist/psql/command/dispatch.js +261 -325
- package/dist/psql/command/inputQueue.js +35 -33
- package/dist/psql/command/shared.js +49 -63
- package/dist/psql/complete/filenames.js +90 -133
- package/dist/psql/complete/index.js +59 -97
- package/dist/psql/complete/matcher.js +236 -300
- package/dist/psql/complete/psqlVars.js +218 -223
- package/dist/psql/complete/queries.js +159 -177
- package/dist/psql/complete/rules.js +1493 -2299
- package/dist/psql/core/common.js +762 -1180
- package/dist/psql/core/help.js +456 -546
- package/dist/psql/core/mainloop.js +692 -1302
- package/dist/psql/core/prompt.js +391 -408
- package/dist/psql/core/settings.js +429 -644
- package/dist/psql/core/sqlHelp.js +480 -554
- package/dist/psql/core/startup.js +626 -815
- package/dist/psql/core/syncVars.js +67 -110
- package/dist/psql/core/variables.js +156 -278
- package/dist/psql/describe/formatters.js +884 -1285
- package/dist/psql/describe/processNamePattern.js +173 -260
- package/dist/psql/describe/queries.js +1368 -2403
- package/dist/psql/describe/versionGate.js +32 -41
- package/dist/psql/index.js +1414 -1927
- package/dist/psql/io/history.js +232 -271
- package/dist/psql/io/input.js +103 -108
- package/dist/psql/io/lineEditor/buffer.js +238 -319
- package/dist/psql/io/lineEditor/complete.js +135 -213
- package/dist/psql/io/lineEditor/filename.js +139 -148
- package/dist/psql/io/lineEditor/index.js +653 -870
- package/dist/psql/io/lineEditor/keymap.js +544 -702
- package/dist/psql/io/lineEditor/vt100.js +294 -341
- package/dist/psql/io/pgpass.js +158 -187
- package/dist/psql/io/pgservice.js +146 -183
- package/dist/psql/io/psqlrc.js +328 -403
- package/dist/psql/print/aligned.js +1020 -1683
- package/dist/psql/print/asciidoc.js +180 -214
- package/dist/psql/print/crosstab.js +281 -442
- package/dist/psql/print/csv.js +48 -70
- package/dist/psql/print/html.js +195 -226
- package/dist/psql/print/json.js +75 -88
- package/dist/psql/print/latex.js +291 -364
- package/dist/psql/print/pager.js +171 -242
- package/dist/psql/print/troff.js +194 -226
- package/dist/psql/print/unaligned.js +69 -95
- package/dist/psql/print/units.js +167 -169
- package/dist/psql/scanner/slash.js +428 -483
- package/dist/psql/scanner/sql.js +445 -889
- package/dist/psql/scanner/stringutils.js +309 -379
- package/dist/psql/types/index.js +2 -7
- package/dist/psql/types/scanner.js +25 -22
- package/dist/psql/wire/connection.js +2042 -2803
- package/dist/psql/wire/copy.js +84 -100
- package/dist/psql/wire/notify.js +39 -59
- package/dist/psql/wire/pipeline.js +305 -518
- package/dist/psql/wire/protocol.js +349 -417
- package/dist/psql/wire/sasl.js +180 -265
- package/dist/psql/wire/tls.js +400 -561
- package/dist/storage_api.js +115 -129
- package/dist/test_utils/fixtures.js +94 -113
- package/dist/test_utils/oauth_server.js +10 -7
- package/dist/test_utils/project_dir.js +33 -0
- package/dist/utils/ai_gateway_notice.js +131 -162
- package/dist/utils/api_enums.js +21 -28
- package/dist/utils/auth.js +10 -4
- package/dist/utils/branch_notice.js +20 -19
- package/dist/utils/branch_picker.js +83 -89
- package/dist/utils/cli_name.js +15 -12
- package/dist/utils/compute_units.js +20 -27
- package/dist/utils/config_diff.js +127 -158
- package/dist/utils/enrichers.js +95 -148
- package/dist/utils/esbuild.js +130 -189
- package/dist/utils/flags.js +35 -47
- package/dist/utils/formats.js +8 -15
- package/dist/utils/git_diff.js +69 -80
- package/dist/utils/inspect_db.js +101 -143
- package/dist/utils/inspect_queries.js +179 -142
- package/dist/utils/middlewares.js +37 -44
- package/dist/utils/openapi.js +87 -99
- package/dist/utils/package_manager.js +312 -110
- package/dist/utils/point_in_time.js +49 -53
- package/dist/utils/psql.js +89 -106
- package/dist/utils/service_picker.js +55 -58
- package/dist/utils/string.js +5 -5
- package/dist/utils/ui.js +38 -55
- package/dist/utils/write_sync.js +26 -35
- package/dist/utils/zip.js +4 -3
- package/dist/writer.js +67 -87
- package/package.json +7 -5
package/dist/init/agents.js
CHANGED
|
@@ -1,127 +1,146 @@
|
|
|
1
|
+
//#region src/init/agents.ts
|
|
1
2
|
/**
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
3
|
+
* All agents that can be configured via neon-init.
|
|
4
|
+
* Aligns with add-mcp's supported agents table.
|
|
5
|
+
* https://github.com/neondatabase/add-mcp#supported-agents
|
|
6
|
+
*/
|
|
7
|
+
const ALL_CONFIGURABLE_AGENTS = [
|
|
8
|
+
{
|
|
9
|
+
editor: "Cursor",
|
|
10
|
+
addMcpId: "cursor",
|
|
11
|
+
hint: "Neon Local Connect extension"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
editor: "VS Code",
|
|
15
|
+
addMcpId: "vscode",
|
|
16
|
+
hint: "Neon Local Connect extension"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
editor: "Claude CLI",
|
|
20
|
+
addMcpId: "claude-code",
|
|
21
|
+
hint: "MCP Server"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
editor: "Claude Desktop",
|
|
25
|
+
addMcpId: "claude-desktop",
|
|
26
|
+
hint: "MCP Server"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
editor: "Codex",
|
|
30
|
+
addMcpId: "codex",
|
|
31
|
+
hint: "MCP Server"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
editor: "OpenCode",
|
|
35
|
+
addMcpId: "opencode",
|
|
36
|
+
hint: "MCP Server"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
editor: "Antigravity",
|
|
40
|
+
addMcpId: "antigravity",
|
|
41
|
+
hint: "MCP Server"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
editor: "Cline",
|
|
45
|
+
addMcpId: "cline",
|
|
46
|
+
hint: "MCP Server"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
editor: "Cline CLI",
|
|
50
|
+
addMcpId: "cline-cli",
|
|
51
|
+
hint: "MCP Server"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
editor: "Gemini CLI",
|
|
55
|
+
addMcpId: "gemini-cli",
|
|
56
|
+
hint: "MCP Server"
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
editor: "GitHub Copilot CLI",
|
|
60
|
+
addMcpId: "github-copilot-cli",
|
|
61
|
+
hint: "MCP Server"
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
editor: "Goose",
|
|
65
|
+
addMcpId: "goose",
|
|
66
|
+
hint: "MCP Server"
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
editor: "MCPorter",
|
|
70
|
+
addMcpId: "mcporter",
|
|
71
|
+
hint: "MCP Server"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
editor: "Zed",
|
|
75
|
+
addMcpId: "zed",
|
|
76
|
+
hint: "MCP Server"
|
|
77
|
+
}
|
|
37
78
|
];
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
}
|
|
43
|
-
return agent.addMcpId;
|
|
79
|
+
function getAddMcpAgentId(editor) {
|
|
80
|
+
const agent = ALL_CONFIGURABLE_AGENTS.find((a) => a.editor === editor);
|
|
81
|
+
if (!agent) throw new Error(`No add-mcp agent ID found for editor: ${editor}`);
|
|
82
|
+
return agent.addMcpId;
|
|
44
83
|
}
|
|
45
84
|
/**
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
85
|
+
* Maps a raw agent identifier (as reported by agents or passed via --agent)
|
|
86
|
+
* to the add-mcp compatible agent ID.
|
|
87
|
+
*
|
|
88
|
+
* This handles aliases like "copilot" → "vscode", "claude" → "claude-code", etc.
|
|
89
|
+
*/
|
|
51
90
|
const AGENT_ALIAS_TO_MCP_ID = {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
91
|
+
cursor: "cursor",
|
|
92
|
+
copilot: "vscode",
|
|
93
|
+
"github-copilot": "vscode",
|
|
94
|
+
"vs-code": "vscode",
|
|
95
|
+
vscode: "vscode",
|
|
96
|
+
claude: "claude-code",
|
|
97
|
+
"claude-code": "claude-code",
|
|
98
|
+
"claude-desktop": "claude-desktop",
|
|
99
|
+
codex: "codex",
|
|
100
|
+
opencode: "opencode",
|
|
101
|
+
antigravity: "antigravity",
|
|
102
|
+
cline: "cline",
|
|
103
|
+
"cline-cli": "cline-cli",
|
|
104
|
+
"gemini-cli": "gemini-cli",
|
|
105
|
+
gemini: "gemini-cli",
|
|
106
|
+
goose: "goose",
|
|
107
|
+
windsurf: "windsurf",
|
|
108
|
+
"github-copilot-cli": "github-copilot-cli",
|
|
109
|
+
mcporter: "mcporter",
|
|
110
|
+
zed: "zed"
|
|
72
111
|
};
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
}
|
|
78
|
-
return resolved;
|
|
112
|
+
function resolveAddMcpAgentId(rawAgent) {
|
|
113
|
+
const resolved = AGENT_ALIAS_TO_MCP_ID[rawAgent.toLowerCase()];
|
|
114
|
+
if (!resolved) throw new Error(`Unknown agent: "${rawAgent}". Supported agents: ${Object.keys(AGENT_ALIAS_TO_MCP_ID).join(", ")}`);
|
|
115
|
+
return resolved;
|
|
79
116
|
}
|
|
80
117
|
/**
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
case "claude-desktop":
|
|
108
|
-
return "claude-code";
|
|
109
|
-
case "cline-cli":
|
|
110
|
-
return "cline";
|
|
111
|
-
case "gemini":
|
|
112
|
-
return "gemini-cli";
|
|
113
|
-
case "windsurf":
|
|
114
|
-
return "windsurf";
|
|
115
|
-
case "github-copilot-cli":
|
|
116
|
-
return "github-copilot";
|
|
117
|
-
case "mcporter":
|
|
118
|
-
return "mcporter";
|
|
119
|
-
case "zed":
|
|
120
|
-
return "zed";
|
|
121
|
-
default:
|
|
122
|
-
// Fall back to "cursor" as a safe default — skills CLI uses the
|
|
123
|
-
// agent name to pick the output directory (.agents/skills, .cursor/skills, etc.)
|
|
124
|
-
// and "cursor" uses .agents/skills which works for all agents.
|
|
125
|
-
return "cursor";
|
|
126
|
-
}
|
|
118
|
+
* Maps a raw agent identifier to the skills CLI agent name.
|
|
119
|
+
*/
|
|
120
|
+
function getSkillsAgentName(agent) {
|
|
121
|
+
switch (agent.toLowerCase()) {
|
|
122
|
+
case "cursor": return "cursor";
|
|
123
|
+
case "copilot":
|
|
124
|
+
case "vscode":
|
|
125
|
+
case "vs-code":
|
|
126
|
+
case "github-copilot": return "github-copilot";
|
|
127
|
+
case "claude":
|
|
128
|
+
case "claude-code": return "claude-code";
|
|
129
|
+
case "codex": return "codex";
|
|
130
|
+
case "opencode": return "opencode";
|
|
131
|
+
case "antigravity": return "antigravity";
|
|
132
|
+
case "cline": return "cline";
|
|
133
|
+
case "gemini-cli": return "gemini-cli";
|
|
134
|
+
case "goose": return "goose";
|
|
135
|
+
case "claude-desktop": return "claude-code";
|
|
136
|
+
case "cline-cli": return "cline";
|
|
137
|
+
case "gemini": return "gemini-cli";
|
|
138
|
+
case "windsurf": return "windsurf";
|
|
139
|
+
case "github-copilot-cli": return "github-copilot";
|
|
140
|
+
case "mcporter": return "mcporter";
|
|
141
|
+
case "zed": return "zed";
|
|
142
|
+
default: return "cursor";
|
|
143
|
+
}
|
|
127
144
|
}
|
|
145
|
+
//#endregion
|
|
146
|
+
export { ALL_CONFIGURABLE_AGENTS, getAddMcpAgentId, getSkillsAgentName, resolveAddMcpAgentId };
|
package/dist/init/auth.js
CHANGED
|
@@ -1,77 +1,67 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { execa } from "execa";
|
|
3
|
-
import { inspectCredentials, interpretCredentials, } from "../_shared/credentials.js";
|
|
1
|
+
import { inspectCredentials, interpretCredentials } from "../_shared/credentials.js";
|
|
4
2
|
import { resolveConfigFile } from "../_shared/paths.js";
|
|
5
3
|
import { DEFAULT_PROFILE } from "../_shared/profiles.js";
|
|
4
|
+
import { log } from "@clack/prompts";
|
|
5
|
+
import { execa } from "execa";
|
|
6
|
+
//#region src/init/auth.ts
|
|
6
7
|
/**
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
else {
|
|
33
|
-
log.error(`Authentication failed: ${msg}`);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
return false;
|
|
37
|
-
}
|
|
8
|
+
* Ensures neonctl is authenticated by running a command that triggers auth if needed
|
|
9
|
+
* This will automatically start the OAuth flow if the user isn't already authenticated
|
|
10
|
+
*/
|
|
11
|
+
async function ensureNeonctlAuth(options) {
|
|
12
|
+
const quiet = options?.json === true;
|
|
13
|
+
if (await getNeonctlAccessToken()) return true;
|
|
14
|
+
try {
|
|
15
|
+
await execa("npx", [
|
|
16
|
+
"-y",
|
|
17
|
+
"neonctl",
|
|
18
|
+
"me"
|
|
19
|
+
], {
|
|
20
|
+
stdio: "inherit",
|
|
21
|
+
env: {
|
|
22
|
+
...process.env,
|
|
23
|
+
CI: void 0
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
return true;
|
|
27
|
+
} catch (error) {
|
|
28
|
+
const msg = error instanceof Error ? error.message : "Unknown error";
|
|
29
|
+
if (!quiet) if (msg.includes("interactive auth") || msg.includes("CI")) log.error("Auth requires an interactive terminal. Run neon init in your system terminal (outside the chat) to sign in.");
|
|
30
|
+
else log.error(`Authentication failed: ${msg}`);
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
38
33
|
}
|
|
39
34
|
/**
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
return token !== null;
|
|
35
|
+
* Checks whether neonctl has stored OAuth credentials.
|
|
36
|
+
*/
|
|
37
|
+
async function isAuthenticated() {
|
|
38
|
+
return await getNeonctlAccessToken() !== null;
|
|
45
39
|
}
|
|
46
40
|
/**
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
41
|
+
* The credential the Neon CLI has stored, or `null` when there is none.
|
|
42
|
+
*
|
|
43
|
+
* Shares the reader with `neon` and `@neon/env` rather than keeping a copy — the inline path
|
|
44
|
+
* resolution this replaced was the third implementation of "where is the config directory", and
|
|
45
|
+
* it also looked only for `access_token`, so an account signed in with an API key read as not
|
|
46
|
+
* authenticated and got sent to a browser. See `shared/cli-core/README.md`.
|
|
47
|
+
*
|
|
48
|
+
* `null` means *absent*, and only absent. A file that exists and cannot be read throws: this
|
|
49
|
+
* value decides whether to start a browser sign-in, and a sign-in overwrites the file it could
|
|
50
|
+
* not read — as a different account, if a different one is chosen. Catching every error here
|
|
51
|
+
* made a damaged credential indistinguishable from a fresh machine.
|
|
52
|
+
*/
|
|
59
53
|
async function getNeonctlAccessToken() {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
profile: DEFAULT_PROFILE,
|
|
72
|
-
});
|
|
73
|
-
if (credential.kind === "api_key")
|
|
74
|
-
return credential.apiKey;
|
|
75
|
-
const token = read.credentials.access_token;
|
|
76
|
-
return typeof token === "string" && token.trim() !== "" ? token : null;
|
|
54
|
+
const { path } = resolveConfigFile("credentials.json");
|
|
55
|
+
const read = inspectCredentials(path);
|
|
56
|
+
if (read.kind === "absent") return null;
|
|
57
|
+
if (read.kind === "unusable") throw new Error(`${read.reason}. Replace it deliberately with \`neon profile create ${DEFAULT_PROFILE} --force\`, or delete the file.`);
|
|
58
|
+
const credential = interpretCredentials(read.credentials, {
|
|
59
|
+
path,
|
|
60
|
+
profile: DEFAULT_PROFILE
|
|
61
|
+
});
|
|
62
|
+
if (credential.kind === "api_key") return credential.apiKey;
|
|
63
|
+
const token = read.credentials.access_token;
|
|
64
|
+
return typeof token === "string" && token.trim() !== "" ? token : null;
|
|
77
65
|
}
|
|
66
|
+
//#endregion
|
|
67
|
+
export { ensureNeonctlAuth, isAuthenticated };
|