neonctl 2.37.1 → 2.38.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.
Files changed (159) hide show
  1. package/README.md +15 -700
  2. package/bin/cli.js +3 -0
  3. package/package.json +8 -75
  4. package/dist/analytics.js +0 -168
  5. package/dist/api.js +0 -720
  6. package/dist/auth.js +0 -125
  7. package/dist/callback.html +0 -60
  8. package/dist/cli.js +0 -9
  9. package/dist/commands/api.js +0 -278
  10. package/dist/commands/auth.js +0 -214
  11. package/dist/commands/bootstrap.js +0 -481
  12. package/dist/commands/branches.js +0 -488
  13. package/dist/commands/bucket.js +0 -549
  14. package/dist/commands/checkout.js +0 -321
  15. package/dist/commands/config.js +0 -626
  16. package/dist/commands/connection_string.js +0 -172
  17. package/dist/commands/data_api.js +0 -284
  18. package/dist/commands/databases.js +0 -82
  19. package/dist/commands/deploy.js +0 -26
  20. package/dist/commands/dev.js +0 -698
  21. package/dist/commands/diff.js +0 -222
  22. package/dist/commands/env.js +0 -189
  23. package/dist/commands/functions.js +0 -373
  24. package/dist/commands/index.js +0 -62
  25. package/dist/commands/init.js +0 -73
  26. package/dist/commands/inspect.js +0 -65
  27. package/dist/commands/ip_allow.js +0 -137
  28. package/dist/commands/link.js +0 -1121
  29. package/dist/commands/neon_auth.js +0 -1028
  30. package/dist/commands/operations.js +0 -28
  31. package/dist/commands/orgs.js +0 -24
  32. package/dist/commands/projects.js +0 -413
  33. package/dist/commands/psql.js +0 -62
  34. package/dist/commands/roles.js +0 -65
  35. package/dist/commands/schema_diff.js +0 -151
  36. package/dist/commands/set_context.js +0 -29
  37. package/dist/commands/snapshots.js +0 -455
  38. package/dist/commands/status.js +0 -40
  39. package/dist/commands/user.js +0 -15
  40. package/dist/commands/vpc_endpoints.js +0 -134
  41. package/dist/config.js +0 -11
  42. package/dist/config_format.js +0 -72
  43. package/dist/context.js +0 -231
  44. package/dist/current_branch_fast_path.js +0 -55
  45. package/dist/dev/env.js +0 -244
  46. package/dist/dev/functions.js +0 -70
  47. package/dist/dev/inputs.js +0 -63
  48. package/dist/dev/runtime.js +0 -146
  49. package/dist/env.js +0 -36
  50. package/dist/env_file.js +0 -159
  51. package/dist/errors.js +0 -80
  52. package/dist/functions_api.js +0 -48
  53. package/dist/help.js +0 -146
  54. package/dist/index.js +0 -240
  55. package/dist/log.js +0 -18
  56. package/dist/parameters.gen.js +0 -480
  57. package/dist/pkg.js +0 -25
  58. package/dist/psql/cli.js +0 -53
  59. package/dist/psql/command/cmd_cond.js +0 -437
  60. package/dist/psql/command/cmd_connect.js +0 -820
  61. package/dist/psql/command/cmd_copy.js +0 -1035
  62. package/dist/psql/command/cmd_describe.js +0 -1815
  63. package/dist/psql/command/cmd_format.js +0 -948
  64. package/dist/psql/command/cmd_io.js +0 -2193
  65. package/dist/psql/command/cmd_lo.js +0 -393
  66. package/dist/psql/command/cmd_meta.js +0 -969
  67. package/dist/psql/command/cmd_misc.js +0 -187
  68. package/dist/psql/command/cmd_pipeline.js +0 -1148
  69. package/dist/psql/command/cmd_restrict.js +0 -171
  70. package/dist/psql/command/cmd_show.js +0 -766
  71. package/dist/psql/command/dispatch.js +0 -343
  72. package/dist/psql/command/inputQueue.js +0 -42
  73. package/dist/psql/command/shared.js +0 -71
  74. package/dist/psql/complete/filenames.js +0 -139
  75. package/dist/psql/complete/index.js +0 -104
  76. package/dist/psql/complete/matcher.js +0 -315
  77. package/dist/psql/complete/psqlVars.js +0 -249
  78. package/dist/psql/complete/queries.js +0 -493
  79. package/dist/psql/complete/rules.js +0 -2424
  80. package/dist/psql/core/common.js +0 -1253
  81. package/dist/psql/core/help.js +0 -576
  82. package/dist/psql/core/mainloop.js +0 -1360
  83. package/dist/psql/core/prompt.js +0 -439
  84. package/dist/psql/core/settings.js +0 -686
  85. package/dist/psql/core/sqlHelp.js +0 -1066
  86. package/dist/psql/core/startup.js +0 -846
  87. package/dist/psql/core/syncVars.js +0 -116
  88. package/dist/psql/core/variables.js +0 -287
  89. package/dist/psql/describe/formatters.js +0 -1330
  90. package/dist/psql/describe/processNamePattern.js +0 -270
  91. package/dist/psql/describe/queries.js +0 -2452
  92. package/dist/psql/describe/versionGate.js +0 -44
  93. package/dist/psql/index.js +0 -2030
  94. package/dist/psql/io/history.js +0 -299
  95. package/dist/psql/io/input.js +0 -120
  96. package/dist/psql/io/lineEditor/buffer.js +0 -325
  97. package/dist/psql/io/lineEditor/complete.js +0 -227
  98. package/dist/psql/io/lineEditor/filename.js +0 -159
  99. package/dist/psql/io/lineEditor/index.js +0 -893
  100. package/dist/psql/io/lineEditor/keymap.js +0 -745
  101. package/dist/psql/io/lineEditor/vt100.js +0 -363
  102. package/dist/psql/io/pgpass.js +0 -202
  103. package/dist/psql/io/pgservice.js +0 -194
  104. package/dist/psql/io/psqlrc.js +0 -422
  105. package/dist/psql/print/aligned.js +0 -1748
  106. package/dist/psql/print/asciidoc.js +0 -230
  107. package/dist/psql/print/crosstab.js +0 -463
  108. package/dist/psql/print/csv.js +0 -76
  109. package/dist/psql/print/html.js +0 -240
  110. package/dist/psql/print/json.js +0 -96
  111. package/dist/psql/print/latex.js +0 -379
  112. package/dist/psql/print/pager.js +0 -267
  113. package/dist/psql/print/troff.js +0 -240
  114. package/dist/psql/print/unaligned.js +0 -99
  115. package/dist/psql/print/units.js +0 -188
  116. package/dist/psql/scanner/slash.js +0 -515
  117. package/dist/psql/scanner/sql.js +0 -914
  118. package/dist/psql/scanner/stringutils.js +0 -394
  119. package/dist/psql/types/backslash.js +0 -1
  120. package/dist/psql/types/connection.js +0 -1
  121. package/dist/psql/types/index.js +0 -7
  122. package/dist/psql/types/printer.js +0 -1
  123. package/dist/psql/types/repl.js +0 -1
  124. package/dist/psql/types/scanner.js +0 -24
  125. package/dist/psql/types/settings.js +0 -1
  126. package/dist/psql/types/variables.js +0 -1
  127. package/dist/psql/wire/connection.js +0 -2857
  128. package/dist/psql/wire/copy.js +0 -108
  129. package/dist/psql/wire/notify.js +0 -59
  130. package/dist/psql/wire/pipeline.js +0 -521
  131. package/dist/psql/wire/protocol.js +0 -466
  132. package/dist/psql/wire/sasl.js +0 -294
  133. package/dist/psql/wire/tls.js +0 -602
  134. package/dist/storage_api.js +0 -147
  135. package/dist/test_utils/fixtures.js +0 -121
  136. package/dist/test_utils/oauth_server.js +0 -9
  137. package/dist/types.js +0 -1
  138. package/dist/utils/ai_gateway_notice.js +0 -180
  139. package/dist/utils/api_enums.js +0 -33
  140. package/dist/utils/auth.js +0 -5
  141. package/dist/utils/branch_notice.js +0 -22
  142. package/dist/utils/branch_picker.js +0 -103
  143. package/dist/utils/compute_units.js +0 -28
  144. package/dist/utils/config_diff.js +0 -185
  145. package/dist/utils/enrichers.js +0 -161
  146. package/dist/utils/esbuild.js +0 -158
  147. package/dist/utils/formats.js +0 -18
  148. package/dist/utils/git_diff.js +0 -90
  149. package/dist/utils/inspect_db.js +0 -153
  150. package/dist/utils/inspect_queries.js +0 -372
  151. package/dist/utils/middlewares.js +0 -20
  152. package/dist/utils/openapi.js +0 -114
  153. package/dist/utils/package_manager.js +0 -68
  154. package/dist/utils/point_in_time.js +0 -56
  155. package/dist/utils/psql.js +0 -120
  156. package/dist/utils/string.js +0 -5
  157. package/dist/utils/ui.js +0 -59
  158. package/dist/utils/zip.js +0 -4
  159. package/dist/writer.js +0 -97
package/bin/cli.js ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+
3
+ await import("neon/cli");
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "neonctl",
3
- "version": "2.37.1",
4
- "description": "CLI tool for Neon Serverless Postgres",
3
+ "version": "2.38.1",
4
+ "description": "Compatibility command for the Neon CLI",
5
5
  "keywords": [
6
6
  "neon",
7
7
  "neonctl",
@@ -20,99 +20,32 @@
20
20
  "url": "https://neon.com"
21
21
  },
22
22
  "type": "module",
23
- "main": "dist/index.js",
24
23
  "bin": {
25
- "neonctl": "dist/cli.js",
26
- "neon": "dist/cli.js"
24
+ "neonctl": "bin/cli.js",
25
+ "neon": "bin/cli.js"
27
26
  },
28
27
  "files": [
29
28
  "README.md",
30
- "dist/",
29
+ "bin/",
31
30
  "package.json"
32
31
  ],
33
32
  "engines": {
34
33
  "node": ">=20.19.0"
35
34
  },
36
35
  "dependencies": {
37
- "@hono/node-server": "2.0.4",
38
- "@segment/analytics-node": "1.3.0",
39
- "chalk": "5.3.0",
40
- "chokidar": "5.0.0",
41
- "cli-table": "0.3.11",
42
- "cliui": "8.0.1",
43
- "diff": "5.2.0",
44
- "fflate": "^0.8.3",
45
- "neon-init": "0.20.2",
46
- "open": "^10.2.0",
47
- "openid-client": "6.8.1",
48
- "pg-protocol": "^1.14.0",
49
- "prompts": "2.4.2",
50
- "undici": "^7.28.0",
51
- "which": "3.0.1",
52
- "yaml": "^2.9.0",
53
- "yargs": "17.7.2",
54
- "@neon/sdk": "1.3.0",
55
- "@neon/config-runtime": "0.10.0",
56
- "@neon/config": "0.10.0",
57
- "@neon/env": "0.11.8"
58
- },
59
- "optionalDependencies": {
60
- "esbuild": "0.28.1"
36
+ "neon": "2.38.1"
61
37
  },
62
38
  "devDependencies": {
63
- "@apidevtools/swagger-parser": "12.1.0",
64
- "@rollup/plugin-commonjs": "25.0.8",
65
- "@rollup/plugin-json": "6.1.0",
66
- "@rollup/plugin-node-resolve": "15.2.3",
67
- "@testcontainers/postgresql": "^11.14.0",
68
- "@types/cli-table": "0.3.4",
69
- "@types/diff": "5.2.1",
70
- "@types/express": "4.17.21",
71
39
  "@types/node": "^20.19.0",
72
- "@types/prompts": "2.4.9",
73
- "@types/which": "3.0.4",
74
- "@types/yargs": "^17.0.35",
75
40
  "@vitest/coverage-v8": "^3.0.9",
76
- "@yao-pkg/pkg": "6.10.0",
77
- "emocks": "3.0.4",
78
- "express": "4.19.2",
79
- "node-pty": "1.1.0",
80
- "oauth2-mock-server": "8.1.0",
81
- "openapi-types": "12.1.3",
82
- "rollup": "3.29.4",
83
- "strip-ansi": "7.1.0",
84
- "tsx": "4.22.3",
85
- "typescript": "^5.9.0",
86
41
  "vitest": "^3.0.9"
87
42
  },
88
43
  "publishConfig": {
89
44
  "access": "public",
90
45
  "provenance": false
91
46
  },
92
- "pkg": {
93
- "assets": [
94
- "callback.html"
95
- ],
96
- "scripts": [
97
- "bundle/*.js"
98
- ],
99
- "targets": [
100
- "node22-linux-x64",
101
- "node22-macos-x64",
102
- "node22-win-x64",
103
- "node22-linux-arm64"
104
- ]
105
- },
106
47
  "scripts": {
107
- "generateParams": "tsx generateOptionsFromSpec.ts",
108
- "clean": "rm -rf dist",
109
- "build": "pnpm generateParams && pnpm clean && tsc -p tsconfig.build.json && cp src/*.html ./dist",
110
- "bundle": "node pkg.js",
111
- "typecheck": "tsc --noEmit",
112
- "lint": "pnpm typecheck && biome check src",
113
- "lint:fix": "pnpm typecheck && biome check src --write",
114
- "test": "pnpm --filter neonctl... build && vitest run",
115
- "test:ci": "pnpm build && vitest run",
116
- "test:conformance": "vitest run --config tests/psql-conformance/vitest.config.ts"
48
+ "test": "vitest",
49
+ "test:ci": "vitest run"
117
50
  }
118
51
  }
package/dist/analytics.js DELETED
@@ -1,168 +0,0 @@
1
- import { readFileSync } from "node:fs";
2
- import { join } from "node:path";
3
- import { Analytics } from "@segment/analytics-node";
4
- import { getApiClient, isNeonApiError } from "./api.js";
5
- import { CREDENTIALS_FILE } from "./config.js";
6
- import { isCurrentBranchProbe } from "./context.js";
7
- import { getGithubEnvVars, isCi } from "./env.js";
8
- import { log } from "./log.js";
9
- import pkg from "./pkg.js";
10
- const WRITE_KEY = "3SQXn5ejjXWLEJ8xU2PRYhAotLtTaeeV";
11
- /**
12
- * Raw-argv fallback for the offline `--current-branch` probe. The init
13
- * middleware runs before validation, where the parsed `currentBranch` flag may
14
- * not be populated yet, so we also scan `process.argv` directly to be safe.
15
- */
16
- const hasCurrentBranchArgv = () => process.argv.includes("--current-branch");
17
- let client;
18
- let clientInitialized = false;
19
- let userId = "";
20
- let errorEventContext;
21
- /**
22
- * Phase 1: Run before validation so the Segment client exists if any
23
- * middleware (e.g. auth) fails. Enables sendError() in the fail handler.
24
- * Does not resolve user id or send CLI Started.
25
- */
26
- export const initAnalyticsClientMiddleware = (args) => {
27
- if (!args.analytics || clientInitialized) {
28
- return;
29
- }
30
- // The offline `--current-branch` probe must make zero network calls. This
31
- // middleware runs before validation, so guard on the raw argv too (in case
32
- // the parsed `currentBranch` flag isn't populated this early): never create
33
- // the Segment client, which keeps trackEvent/closeAnalytics no-ops downstream.
34
- if (isCurrentBranchProbe(args) || hasCurrentBranchArgv()) {
35
- return;
36
- }
37
- clientInitialized = true;
38
- errorEventContext = getErrorAnalyticsEventContext(args);
39
- client = new Analytics({
40
- writeKey: WRITE_KEY,
41
- host: "https://track.neon.tech",
42
- });
43
- log.debug("Initialized CLI analytics client");
44
- client.identify({
45
- userId: "anonymous",
46
- });
47
- };
48
- /**
49
- * Phase 2: Run after auth. Resolves user id from credentials,
50
- * identifies the user, and sends CLI Started.
51
- */
52
- export const analyticsMiddleware = async (args) => {
53
- if (!client || !args.analytics) {
54
- return;
55
- }
56
- if (isCurrentBranchProbe(args)) {
57
- return;
58
- }
59
- try {
60
- const credentialsPath = join(args.configDir, CREDENTIALS_FILE);
61
- const credentials = readFileSync(credentialsPath, {
62
- encoding: "utf-8",
63
- });
64
- userId = JSON.parse(credentials).user_id;
65
- }
66
- catch (err) {
67
- log.debug("Failed to read credentials file", err);
68
- }
69
- try {
70
- if (args.apiKey) {
71
- const apiClient = getApiClient({
72
- apiKey: args.apiKey,
73
- apiHost: args.apiHost,
74
- });
75
- // Populating api key details for analytics
76
- const authDetailsResponse = await apiClient.getAuthDetails();
77
- const authDetails = authDetailsResponse.data;
78
- args.accountId = authDetails.account_id;
79
- args.authMethod = authDetails.auth_method;
80
- args.authData = authDetails.auth_data;
81
- // Get user id if not org api key
82
- if (!userId && authDetails.auth_method !== "api_key_org") {
83
- const resp = await apiClient?.getCurrentUserInfo?.();
84
- userId = resp?.data?.id;
85
- }
86
- }
87
- else {
88
- args.accountId = userId;
89
- args.authMethod = "oauth";
90
- }
91
- }
92
- catch (err) {
93
- log.debug("Failed to get user id from api", err);
94
- }
95
- client.identify({
96
- userId: userId?.toString() ?? "anonymous",
97
- });
98
- client.track({
99
- userId: userId || "anonymous",
100
- event: "CLI Started",
101
- properties: getAnalyticsEventProperties(args),
102
- context: {
103
- direct: true,
104
- },
105
- });
106
- };
107
- export const closeAnalytics = async (opts) => {
108
- if (client) {
109
- log.debug("Flushing CLI analytics");
110
- // `timeout` bounds how long we wait for in-flight events to flush so a
111
- // slow / unreachable track.neon.tech can't hang a short-lived command
112
- // (e.g. the psql launch path, which flushes here before process.exit).
113
- await client.closeAndFlush(opts);
114
- log.debug("Flushed CLI analytics");
115
- }
116
- };
117
- export const getErrorAnalyticsEventProperties = (err, errCode, context) => {
118
- const apiError = isNeonApiError(err) ? err : undefined;
119
- const requestId = apiError?.headers?.["x-neon-ret-request-id"];
120
- return {
121
- ...context,
122
- message: err.message,
123
- stack: err.stack,
124
- errCode,
125
- statusCode: apiError?.status,
126
- requestId,
127
- };
128
- };
129
- export const sendError = (err, errCode) => {
130
- if (!client) {
131
- return;
132
- }
133
- const apiError = isNeonApiError(err) ? err : undefined;
134
- const requestId = apiError?.headers?.["x-neon-ret-request-id"];
135
- if (requestId) {
136
- log.debug("Failed request ID: %s", requestId);
137
- }
138
- client.track({
139
- event: "CLI Error",
140
- userId: userId || "anonymous",
141
- properties: getErrorAnalyticsEventProperties(err, errCode, errorEventContext),
142
- });
143
- log.debug("Sent CLI error event: %s", errCode);
144
- };
145
- export const trackEvent = (event, properties) => {
146
- if (!client) {
147
- return;
148
- }
149
- client.track({
150
- event,
151
- userId: userId || "anonymous",
152
- properties,
153
- });
154
- log.debug("Sent CLI event: %s", event);
155
- };
156
- const getErrorAnalyticsEventContext = (_args) => ({
157
- version: pkg.version,
158
- ci: isCi(),
159
- });
160
- export const getAnalyticsEventProperties = (args) => ({
161
- version: pkg.version,
162
- command: args._.join(" "),
163
- flags: {
164
- output: args.output,
165
- },
166
- ci: isCi(),
167
- githubEnvVars: getGithubEnvVars(process.env),
168
- });