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/commands/status.js
CHANGED
|
@@ -1,40 +1,44 @@
|
|
|
1
|
+
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
1
2
|
import { fillSingleProject } from "../utils/enrichers.js";
|
|
2
3
|
import { status } from "./config.js";
|
|
4
|
+
//#region src/commands/status.ts
|
|
5
|
+
var status_exports = /* @__PURE__ */ __exportAll({
|
|
6
|
+
builder: () => builder,
|
|
7
|
+
command: () => command,
|
|
8
|
+
describe: () => describe,
|
|
9
|
+
handler: () => handler
|
|
10
|
+
});
|
|
3
11
|
/**
|
|
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
|
-
|
|
37
|
-
},
|
|
38
|
-
})
|
|
39
|
-
.middleware(fillSingleProject);
|
|
40
|
-
export const handler = (args) => status(args);
|
|
12
|
+
* `neon status` is a top-level alias for `neon config status` — the most-reached-for
|
|
13
|
+
* config subcommand. It mirrors that command's options (including `--current-branch`,
|
|
14
|
+
* the offline branch probe) and delegates to the same `status` handler.
|
|
15
|
+
*
|
|
16
|
+
* Because it has a handler but no subcommands, `status` must also be listed in
|
|
17
|
+
* `NO_SUBCOMMANDS_VERBS` (see index.ts) so the help-fallback middleware doesn't
|
|
18
|
+
* intercept a bare `neon status`.
|
|
19
|
+
*/
|
|
20
|
+
const command = "status";
|
|
21
|
+
const describe = "Show the branch's live Neon state (alias of `config status`)";
|
|
22
|
+
const builder = (argv) => argv.usage("$0 status [options]").options({
|
|
23
|
+
"project-id": {
|
|
24
|
+
describe: "Project ID",
|
|
25
|
+
type: "string"
|
|
26
|
+
},
|
|
27
|
+
branch: {
|
|
28
|
+
describe: "Branch ID or name",
|
|
29
|
+
type: "string"
|
|
30
|
+
},
|
|
31
|
+
"config-json": {
|
|
32
|
+
describe: "Print only the branch's live config as neon.ts-shaped JSON (services + branch tuning + preview), to stdout. Useful for scripting or copying into a neon.ts.",
|
|
33
|
+
type: "boolean",
|
|
34
|
+
default: false
|
|
35
|
+
},
|
|
36
|
+
"current-branch": {
|
|
37
|
+
describe: "Print only the linked branch name from the local .neon file (no network). Exits non-zero when no branch is pinned.",
|
|
38
|
+
type: "boolean",
|
|
39
|
+
default: false
|
|
40
|
+
}
|
|
41
|
+
}).middleware(fillSingleProject);
|
|
42
|
+
const handler = (args) => status(args);
|
|
43
|
+
//#endregion
|
|
44
|
+
export { builder, command, describe, handler, status_exports };
|
package/dist/commands/user.js
CHANGED
|
@@ -1,15 +1,26 @@
|
|
|
1
|
+
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
1
2
|
import { writer } from "../writer.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
//#region src/commands/user.ts
|
|
4
|
+
var user_exports = /* @__PURE__ */ __exportAll({
|
|
5
|
+
builder: () => builder,
|
|
6
|
+
command: () => "me",
|
|
7
|
+
describe: () => describe,
|
|
8
|
+
handler: () => handler
|
|
6
9
|
});
|
|
7
|
-
|
|
8
|
-
|
|
10
|
+
const command = "me";
|
|
11
|
+
const describe = "Show current user";
|
|
12
|
+
const builder = (yargs) => yargs.option("context-file", { hidden: true });
|
|
13
|
+
const handler = async (args) => {
|
|
14
|
+
await me(args);
|
|
9
15
|
};
|
|
10
16
|
const me = async (props) => {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
17
|
+
const { data } = await props.apiClient.getCurrentUserInfo();
|
|
18
|
+
writer(props).end(data, { fields: [
|
|
19
|
+
"login",
|
|
20
|
+
"email",
|
|
21
|
+
"name",
|
|
22
|
+
"projects_limit"
|
|
23
|
+
] });
|
|
15
24
|
};
|
|
25
|
+
//#endregion
|
|
26
|
+
export { builder, command, describe, handler, user_exports };
|
|
@@ -1,134 +1,106 @@
|
|
|
1
|
+
import { __exportAll } from "../_virtual/_rolldown/runtime.js";
|
|
1
2
|
import { log } from "../log.js";
|
|
2
|
-
import { fillSingleOrg, fillSingleProject } from "../utils/enrichers.js";
|
|
3
3
|
import { writer } from "../writer.js";
|
|
4
|
+
import { fillSingleOrg, fillSingleProject } from "../utils/enrichers.js";
|
|
4
5
|
import { REGIONS } from "./projects.js";
|
|
6
|
+
//#region src/commands/vpc_endpoints.ts
|
|
7
|
+
var vpc_endpoints_exports = /* @__PURE__ */ __exportAll({
|
|
8
|
+
builder: () => builder,
|
|
9
|
+
command: () => "vpc",
|
|
10
|
+
describe: () => describe
|
|
11
|
+
});
|
|
5
12
|
const VPC_ENDPOINT_FIELDS = ["vpc_endpoint_id", "label"];
|
|
6
13
|
const VPC_ENDPOINT_DETAILS_FIELDS = [
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
14
|
+
"vpc_endpoint_id",
|
|
15
|
+
"label",
|
|
16
|
+
"state",
|
|
17
|
+
"num_restricted_projects",
|
|
18
|
+
"example_restricted_projects"
|
|
12
19
|
];
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
"project-id": {
|
|
67
|
-
describe: "Project ID",
|
|
68
|
-
type: "string",
|
|
69
|
-
},
|
|
70
|
-
})
|
|
71
|
-
.middleware(fillSingleProject)
|
|
72
|
-
.command("list", "List VPC endpoint restrictions for this project.", (yargs) => yargs, async (args) => {
|
|
73
|
-
await listProject(args);
|
|
74
|
-
})
|
|
75
|
-
.command({
|
|
76
|
-
command: "restrict <id>",
|
|
77
|
-
aliases: ["update <id>"],
|
|
78
|
-
describe: "Configure or update a VPC endpoint restriction for this project.",
|
|
79
|
-
builder: (yargs) => yargs.options({
|
|
80
|
-
label: {
|
|
81
|
-
describe: "An optional descriptive label for the VPC endpoint restriction",
|
|
82
|
-
type: "string",
|
|
83
|
-
},
|
|
84
|
-
}),
|
|
85
|
-
handler: async (args) => {
|
|
86
|
-
await assignProject(args);
|
|
87
|
-
},
|
|
88
|
-
})
|
|
89
|
-
.command("remove <id>", "Remove a VPC endpoint restriction from this project.", (yargs) => yargs, async (args) => {
|
|
90
|
-
await removeProject(args);
|
|
91
|
-
});
|
|
92
|
-
});
|
|
20
|
+
const command = "vpc";
|
|
21
|
+
const describe = "Manage VPC endpoints and project VPC restrictions";
|
|
22
|
+
const builder = (argv) => {
|
|
23
|
+
return argv.usage("$0 vpc <sub-command> [options]").command("endpoint", "Manage VPC endpoints.\nSee: https://neon.tech/docs/guides/neon-private-networking\nAfter adding an endpoint to an organization, client connections will be accepted\nfrom the corresponding VPC for all projects in the organization, unless overridden\nby a project-level VPC endpoint restriction.", (yargs) => {
|
|
24
|
+
return yargs.options({
|
|
25
|
+
"org-id": {
|
|
26
|
+
describe: "Organization ID",
|
|
27
|
+
type: "string"
|
|
28
|
+
},
|
|
29
|
+
"region-id": {
|
|
30
|
+
describe: `The region ID. Possible values: ${REGIONS.join(", ")}`,
|
|
31
|
+
type: "string",
|
|
32
|
+
demandOption: true
|
|
33
|
+
}
|
|
34
|
+
}).middleware(fillSingleOrg).command("list", "List configured VPC endpoints for this organization.", (yargs) => yargs, async (args) => {
|
|
35
|
+
await listOrg(args);
|
|
36
|
+
}).command({
|
|
37
|
+
command: "assign <id>",
|
|
38
|
+
aliases: ["update <id>", "add <id>"],
|
|
39
|
+
describe: "Add or update a VPC endpoint for this organization.\nNote: Azure regions are not yet supported.",
|
|
40
|
+
builder: (yargs) => yargs.options({ label: {
|
|
41
|
+
describe: "An optional descriptive label for the VPC endpoint",
|
|
42
|
+
type: "string"
|
|
43
|
+
} }),
|
|
44
|
+
handler: async (args) => {
|
|
45
|
+
await assignOrg(args);
|
|
46
|
+
}
|
|
47
|
+
}).command("remove <id>", "Remove a VPC endpoint from this organization.", (yargs) => yargs, async (args) => {
|
|
48
|
+
await removeOrg(args);
|
|
49
|
+
}).command("status <id>", "Get the status of a VPC endpoint for this organization.", (yargs) => yargs, async (args) => {
|
|
50
|
+
await statusOrg(args);
|
|
51
|
+
});
|
|
52
|
+
}).command("project", "Manage project-level VPC endpoint restrictions.\nBy default, connections are accepted from any VPC configured at the organization level.\nA project-level VPC endpoint restriction can be used to restrict connections to a specific VPC.", (yargs) => {
|
|
53
|
+
return yargs.options({ "project-id": {
|
|
54
|
+
describe: "Project ID",
|
|
55
|
+
type: "string"
|
|
56
|
+
} }).middleware(fillSingleProject).command("list", "List VPC endpoint restrictions for this project.", (yargs) => yargs, async (args) => {
|
|
57
|
+
await listProject(args);
|
|
58
|
+
}).command({
|
|
59
|
+
command: "restrict <id>",
|
|
60
|
+
aliases: ["update <id>"],
|
|
61
|
+
describe: "Configure or update a VPC endpoint restriction for this project.",
|
|
62
|
+
builder: (yargs) => yargs.options({ label: {
|
|
63
|
+
describe: "An optional descriptive label for the VPC endpoint restriction",
|
|
64
|
+
type: "string"
|
|
65
|
+
} }),
|
|
66
|
+
handler: async (args) => {
|
|
67
|
+
await assignProject(args);
|
|
68
|
+
}
|
|
69
|
+
}).command("remove <id>", "Remove a VPC endpoint restriction from this project.", (yargs) => yargs, async (args) => {
|
|
70
|
+
await removeProject(args);
|
|
71
|
+
});
|
|
72
|
+
});
|
|
93
73
|
};
|
|
94
74
|
const listOrg = async (props) => {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
fields: VPC_ENDPOINT_FIELDS,
|
|
98
|
-
});
|
|
75
|
+
const { data } = await props.apiClient.listOrganizationVpcEndpoints(props.orgId, props.regionId);
|
|
76
|
+
writer(props).end(data.endpoints, { fields: VPC_ENDPOINT_FIELDS });
|
|
99
77
|
};
|
|
100
78
|
const assignOrg = async (props) => {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
writer(props).end(data, { fields: [] });
|
|
106
|
-
if (props.regionId.startsWith("azure")) {
|
|
107
|
-
log.info("VPC endpoint configuration is not supported for Azure regions");
|
|
108
|
-
}
|
|
79
|
+
const vpcEndpointAssignment = { label: props.label || "" };
|
|
80
|
+
const { data } = await props.apiClient.assignOrganizationVpcEndpoint(props.orgId, props.regionId, props.id, vpcEndpointAssignment);
|
|
81
|
+
writer(props).end(data, { fields: [] });
|
|
82
|
+
if (props.regionId.startsWith("azure")) log.info("VPC endpoint configuration is not supported for Azure regions");
|
|
109
83
|
};
|
|
110
84
|
const removeOrg = async (props) => {
|
|
111
|
-
|
|
112
|
-
|
|
85
|
+
const { data } = await props.apiClient.deleteOrganizationVpcEndpoint(props.orgId, props.regionId, props.id);
|
|
86
|
+
writer(props).end(data, { fields: [] });
|
|
113
87
|
};
|
|
114
88
|
const statusOrg = async (props) => {
|
|
115
|
-
|
|
116
|
-
|
|
89
|
+
const { data } = await props.apiClient.getOrganizationVpcEndpointDetails(props.orgId, props.regionId, props.id);
|
|
90
|
+
writer(props).end(data, { fields: VPC_ENDPOINT_DETAILS_FIELDS });
|
|
117
91
|
};
|
|
118
92
|
const listProject = async (props) => {
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
fields: VPC_ENDPOINT_FIELDS,
|
|
122
|
-
});
|
|
93
|
+
const { data } = await props.apiClient.listProjectVpcEndpoints(props.projectId);
|
|
94
|
+
writer(props).end(data.endpoints, { fields: VPC_ENDPOINT_FIELDS });
|
|
123
95
|
};
|
|
124
96
|
const assignProject = async (props) => {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
const { data } = await props.apiClient.assignProjectVpcEndpoint(props.projectId, props.id, vpcEndpointAssignment);
|
|
129
|
-
writer(props).end(data, { fields: [] });
|
|
97
|
+
const vpcEndpointAssignment = { label: props.label || "" };
|
|
98
|
+
const { data } = await props.apiClient.assignProjectVpcEndpoint(props.projectId, props.id, vpcEndpointAssignment);
|
|
99
|
+
writer(props).end(data, { fields: [] });
|
|
130
100
|
};
|
|
131
101
|
const removeProject = async (props) => {
|
|
132
|
-
|
|
133
|
-
|
|
102
|
+
const { data } = await props.apiClient.deleteProjectVpcEndpoint(props.projectId, props.id);
|
|
103
|
+
writer(props).end(data, { fields: [] });
|
|
134
104
|
};
|
|
105
|
+
//#endregion
|
|
106
|
+
export { builder, command, describe, vpc_endpoints_exports };
|
package/dist/config.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { existsSync, mkdirSync } from "node:fs";
|
|
2
1
|
import { isCi } from "./env.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
import { CREDENTIALS_FILE, credentialsPath, defaultDir, isInsideConfigDir, isOwnedCredentialPath } from "./_shared/paths.js";
|
|
3
|
+
import { existsSync, mkdirSync } from "node:fs";
|
|
4
|
+
//#region src/config.ts
|
|
5
|
+
const ensureConfigDir = ({ "config-dir": configDirArg, "force-auth": forceAuth }) => {
|
|
6
|
+
if (!existsSync(configDirArg) && (!isCi() || forceAuth)) mkdirSync(configDirArg, { recursive: true });
|
|
8
7
|
};
|
|
8
|
+
//#endregion
|
|
9
|
+
export { CREDENTIALS_FILE, credentialsPath, defaultDir, ensureConfigDir, isInsideConfigDir, isOwnedCredentialPath };
|
package/dist/config_format.js
CHANGED
|
@@ -1,72 +1,56 @@
|
|
|
1
|
+
//#region src/config_format.ts
|
|
1
2
|
/**
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
if (totalSeconds % perUnit === 0)
|
|
16
|
-
return `${totalSeconds / perUnit}${unit}`;
|
|
17
|
-
}
|
|
18
|
-
return `${totalSeconds}s`;
|
|
3
|
+
* Render a TTL in whole seconds back to the canonical `neon.ts` duration string (e.g.
|
|
4
|
+
* `604800` -> `"7d"`), falling back to seconds when no clean unit boundary matches. Mirrors
|
|
5
|
+
* the formatter `@neon/config` uses when it emits a TTL, so `config status` shows
|
|
6
|
+
* the same value a user would write in `neon.ts`.
|
|
7
|
+
*/
|
|
8
|
+
const formatDurationSeconds = (totalSeconds) => {
|
|
9
|
+
for (const [unit, perUnit] of [
|
|
10
|
+
["w", 604800],
|
|
11
|
+
["d", 86400],
|
|
12
|
+
["h", 3600],
|
|
13
|
+
["m", 60]
|
|
14
|
+
]) if (totalSeconds % perUnit === 0) return `${totalSeconds / perUnit}${unit}`;
|
|
15
|
+
return `${totalSeconds}s`;
|
|
19
16
|
};
|
|
20
17
|
/**
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
branch.ttl = formatDurationSeconds(resolved.ttlSeconds);
|
|
45
|
-
if (resolved.protected !== undefined)
|
|
46
|
-
branch.protected = resolved.protected;
|
|
47
|
-
if (resolved.postgres?.computeSettings)
|
|
48
|
-
branch.postgres = resolved.postgres;
|
|
49
|
-
if (Object.keys(branch).length > 0)
|
|
50
|
-
view.branch = branch;
|
|
51
|
-
return view;
|
|
18
|
+
* Project a resolved branch config (plus the separately-pulled preview state, since
|
|
19
|
+
* functions/buckets don't live on the closure) into a {@link NeonConfigView}.
|
|
20
|
+
*
|
|
21
|
+
* - Service toggles are surfaced as `true` only when enabled (disabled is the absence of
|
|
22
|
+
* the key, exactly as in `neon.ts`).
|
|
23
|
+
* - `ttlSeconds` is rendered back to a duration string (`7d`).
|
|
24
|
+
* - The `branch` section is the JSON-able part of what would otherwise be the `branch`
|
|
25
|
+
* closure: `parent` / `ttl` / `protected` / `postgres.computeSettings`.
|
|
26
|
+
* - `branch` and `preview` are omitted entirely when they would be empty.
|
|
27
|
+
*/
|
|
28
|
+
const toNeonConfigView = (resolved, preview) => {
|
|
29
|
+
const view = {};
|
|
30
|
+
if (resolved.authEnabled) view.auth = true;
|
|
31
|
+
if (resolved.dataApiEnabled) view.dataApi = true;
|
|
32
|
+
const previewView = toPreviewView(preview);
|
|
33
|
+
if (previewView) view.preview = previewView;
|
|
34
|
+
const branch = {};
|
|
35
|
+
if (resolved.parent !== void 0) branch.parent = resolved.parent;
|
|
36
|
+
if (resolved.ttlSeconds !== void 0) branch.ttl = formatDurationSeconds(resolved.ttlSeconds);
|
|
37
|
+
if (resolved.protected !== void 0) branch.protected = resolved.protected;
|
|
38
|
+
if (resolved.postgres?.computeSettings) branch.postgres = resolved.postgres;
|
|
39
|
+
if (Object.keys(branch).length > 0) view.branch = branch;
|
|
40
|
+
return view;
|
|
52
41
|
};
|
|
53
42
|
const toPreviewView = (preview) => {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
id: c.tokenIdShort,
|
|
66
|
-
...(c.name ? { name: c.name } : {}),
|
|
67
|
-
scopes: c.scopes,
|
|
68
|
-
...(c.lastUsedAt ? { lastUsedAt: c.lastUsedAt } : {}),
|
|
69
|
-
}));
|
|
70
|
-
}
|
|
71
|
-
return Object.keys(out).length > 0 ? out : undefined;
|
|
43
|
+
if (!preview) return void 0;
|
|
44
|
+
const out = {};
|
|
45
|
+
if (preview.functions.length > 0) out.functions = Object.fromEntries(preview.functions.map((fn) => [fn.slug, { name: fn.name }]));
|
|
46
|
+
if (preview.buckets.length > 0) out.buckets = Object.fromEntries(preview.buckets.map((b) => [b.name, { access: b.access }]));
|
|
47
|
+
if (preview.credentials.length > 0) out.credentials = preview.credentials.map((c) => ({
|
|
48
|
+
id: c.tokenIdShort,
|
|
49
|
+
...c.name ? { name: c.name } : {},
|
|
50
|
+
scopes: c.scopes,
|
|
51
|
+
...c.lastUsedAt ? { lastUsedAt: c.lastUsedAt } : {}
|
|
52
|
+
}));
|
|
53
|
+
return Object.keys(out).length > 0 ? out : void 0;
|
|
72
54
|
};
|
|
55
|
+
//#endregion
|
|
56
|
+
export { formatDurationSeconds, toNeonConfigView };
|