bkper 4.31.3 → 5.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.
Files changed (148) hide show
  1. package/README.md +12 -5
  2. package/lib/agent/startup-maintenance.d.ts +7 -4
  3. package/lib/agent/startup-maintenance.d.ts.map +1 -1
  4. package/lib/agent/startup-maintenance.js +13 -29
  5. package/lib/agent/startup-maintenance.js.map +1 -1
  6. package/lib/cli.js +8 -4
  7. package/lib/cli.js.map +1 -1
  8. package/lib/commands/accounts/batch-create.d.ts +1 -1
  9. package/lib/commands/accounts/batch-create.d.ts.map +1 -1
  10. package/lib/commands/accounts/batch-create.js +3 -3
  11. package/lib/commands/accounts/batch-create.js.map +1 -1
  12. package/lib/commands/accounts/list.d.ts +2 -3
  13. package/lib/commands/accounts/list.d.ts.map +1 -1
  14. package/lib/commands/accounts/list.js +2 -12
  15. package/lib/commands/accounts/list.js.map +1 -1
  16. package/lib/commands/accounts/register.js +13 -13
  17. package/lib/commands/accounts/register.js.map +1 -1
  18. package/lib/commands/action.d.ts +2 -3
  19. package/lib/commands/action.d.ts.map +1 -1
  20. package/lib/commands/action.js +2 -3
  21. package/lib/commands/action.js.map +1 -1
  22. package/lib/commands/apps/list.d.ts +2 -3
  23. package/lib/commands/apps/list.d.ts.map +1 -1
  24. package/lib/commands/apps/list.js +2 -14
  25. package/lib/commands/apps/list.js.map +1 -1
  26. package/lib/commands/apps/register.js +10 -10
  27. package/lib/commands/apps/register.js.map +1 -1
  28. package/lib/commands/balances/list.d.ts +0 -2
  29. package/lib/commands/balances/list.d.ts.map +1 -1
  30. package/lib/commands/balances/list.js +9 -17
  31. package/lib/commands/balances/list.js.map +1 -1
  32. package/lib/commands/balances/register.d.ts.map +1 -1
  33. package/lib/commands/balances/register.js +3 -4
  34. package/lib/commands/balances/register.js.map +1 -1
  35. package/lib/commands/books/list.d.ts +2 -4
  36. package/lib/commands/books/list.d.ts.map +1 -1
  37. package/lib/commands/books/list.js +2 -30
  38. package/lib/commands/books/list.js.map +1 -1
  39. package/lib/commands/books/register.js +12 -12
  40. package/lib/commands/books/register.js.map +1 -1
  41. package/lib/commands/cli-helpers.d.ts +9 -4
  42. package/lib/commands/cli-helpers.d.ts.map +1 -1
  43. package/lib/commands/cli-helpers.js +18 -12
  44. package/lib/commands/cli-helpers.js.map +1 -1
  45. package/lib/commands/collections/list.d.ts +2 -3
  46. package/lib/commands/collections/list.d.ts.map +1 -1
  47. package/lib/commands/collections/list.js +2 -14
  48. package/lib/commands/collections/list.js.map +1 -1
  49. package/lib/commands/collections/register.d.ts.map +1 -1
  50. package/lib/commands/collections/register.js +15 -25
  51. package/lib/commands/collections/register.js.map +1 -1
  52. package/lib/commands/events/event-json.d.ts +13 -0
  53. package/lib/commands/events/event-json.d.ts.map +1 -0
  54. package/lib/commands/events/event-json.js +33 -0
  55. package/lib/commands/events/event-json.js.map +1 -0
  56. package/lib/commands/events/list.d.ts +4 -3
  57. package/lib/commands/events/list.d.ts.map +1 -1
  58. package/lib/commands/events/list.js +15 -66
  59. package/lib/commands/events/list.js.map +1 -1
  60. package/lib/commands/events/register.d.ts.map +1 -1
  61. package/lib/commands/events/register.js +7 -6
  62. package/lib/commands/events/register.js.map +1 -1
  63. package/lib/commands/files/list.d.ts +3 -2
  64. package/lib/commands/files/list.d.ts.map +1 -1
  65. package/lib/commands/files/list.js +13 -42
  66. package/lib/commands/files/list.js.map +1 -1
  67. package/lib/commands/files/register.d.ts.map +1 -1
  68. package/lib/commands/files/register.js +13 -10
  69. package/lib/commands/files/register.js.map +1 -1
  70. package/lib/commands/groups/list.d.ts +2 -3
  71. package/lib/commands/groups/list.d.ts.map +1 -1
  72. package/lib/commands/groups/list.js +2 -12
  73. package/lib/commands/groups/list.js.map +1 -1
  74. package/lib/commands/groups/register.js +12 -12
  75. package/lib/commands/groups/register.js.map +1 -1
  76. package/lib/commands/transactions/batch-create.d.ts +1 -1
  77. package/lib/commands/transactions/batch-create.d.ts.map +1 -1
  78. package/lib/commands/transactions/batch-create.js +4 -3
  79. package/lib/commands/transactions/batch-create.js.map +1 -1
  80. package/lib/commands/transactions/batch-update.d.ts +1 -1
  81. package/lib/commands/transactions/batch-update.d.ts.map +1 -1
  82. package/lib/commands/transactions/batch-update.js +4 -3
  83. package/lib/commands/transactions/batch-update.js.map +1 -1
  84. package/lib/commands/transactions/list.d.ts +4 -7
  85. package/lib/commands/transactions/list.d.ts.map +1 -1
  86. package/lib/commands/transactions/list.js +15 -32
  87. package/lib/commands/transactions/list.js.map +1 -1
  88. package/lib/commands/transactions/register.d.ts +1 -1
  89. package/lib/commands/transactions/register.d.ts.map +1 -1
  90. package/lib/commands/transactions/register.js +27 -26
  91. package/lib/commands/transactions/register.js.map +1 -1
  92. package/lib/commands/transactions/transaction-json.d.ts +23 -0
  93. package/lib/commands/transactions/transaction-json.d.ts.map +1 -0
  94. package/lib/commands/transactions/transaction-json.js +56 -0
  95. package/lib/commands/transactions/transaction-json.js.map +1 -0
  96. package/lib/commands/upgrade.d.ts.map +1 -1
  97. package/lib/commands/upgrade.js +2 -3
  98. package/lib/commands/upgrade.js.map +1 -1
  99. package/lib/docs/apps/ai.md +2 -2
  100. package/lib/docs/apps/event-handlers.md +12 -0
  101. package/lib/docs/cli/app-management.md +1 -1
  102. package/lib/docs/cli/data-management.md +56 -54
  103. package/lib/docs/index.md +1 -1
  104. package/lib/docs/sdk/bkper-api-types.md +4 -2
  105. package/lib/docs/sdk/bkper-js.md +1 -0
  106. package/lib/docs-compliance/live-readme.d.ts.map +1 -1
  107. package/lib/docs-compliance/live-readme.js +0 -3
  108. package/lib/docs-compliance/live-readme.js.map +1 -1
  109. package/lib/docs-compliance/rules.d.ts.map +1 -1
  110. package/lib/docs-compliance/rules.js +9 -0
  111. package/lib/docs-compliance/rules.js.map +1 -1
  112. package/lib/render/index.d.ts +2 -4
  113. package/lib/render/index.d.ts.map +1 -1
  114. package/lib/render/index.js +1 -3
  115. package/lib/render/index.js.map +1 -1
  116. package/lib/render/output.d.ts +42 -22
  117. package/lib/render/output.d.ts.map +1 -1
  118. package/lib/render/output.js +62 -42
  119. package/lib/render/output.js.map +1 -1
  120. package/lib/upgrade/index.d.ts +5 -4
  121. package/lib/upgrade/index.d.ts.map +1 -1
  122. package/lib/upgrade/index.js +3 -2
  123. package/lib/upgrade/index.js.map +1 -1
  124. package/lib/upgrade/installation.d.ts +54 -20
  125. package/lib/upgrade/installation.d.ts.map +1 -1
  126. package/lib/upgrade/installation.js +222 -122
  127. package/lib/upgrade/installation.js.map +1 -1
  128. package/lib/upgrade/update-check.d.ts +69 -0
  129. package/lib/upgrade/update-check.d.ts.map +1 -0
  130. package/lib/upgrade/update-check.js +253 -0
  131. package/lib/upgrade/update-check.js.map +1 -0
  132. package/lib/upgrade/update-worker.d.ts +2 -0
  133. package/lib/upgrade/update-worker.d.ts.map +1 -0
  134. package/lib/upgrade/update-worker.js +6 -0
  135. package/lib/upgrade/update-worker.js.map +1 -0
  136. package/lib/upgrade/upgrade.d.ts +11 -28
  137. package/lib/upgrade/upgrade.d.ts.map +1 -1
  138. package/lib/upgrade/upgrade.js +49 -96
  139. package/lib/upgrade/upgrade.js.map +1 -1
  140. package/package.json +1 -1
  141. package/lib/render/csv-formatter.d.ts +0 -15
  142. package/lib/render/csv-formatter.d.ts.map +0 -1
  143. package/lib/render/csv-formatter.js +0 -37
  144. package/lib/render/csv-formatter.js.map +0 -1
  145. package/lib/render/table-formatter.d.ts +0 -34
  146. package/lib/render/table-formatter.d.ts.map +0 -1
  147. package/lib/render/table-formatter.js +0 -239
  148. package/lib/render/table-formatter.js.map +0 -1
@@ -0,0 +1,253 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { spawn } from 'child_process';
11
+ import { createHash } from 'crypto';
12
+ import { closeSync, mkdirSync, openSync, readFileSync, renameSync, statSync, unlinkSync, writeFileSync, } from 'fs';
13
+ import path from 'path';
14
+ import { fileURLToPath } from 'url';
15
+ import { BKPER_CONFIG_DIR } from '../dev/cloudflared/constants.js';
16
+ import { PACKAGE_DIR, VERSION, fetchLatestVersion, getSelfUpdatePlan, readInstalledVersion, runInstallCommand, } from './installation.js';
17
+ import { isNewerVersion } from './upgrade.js';
18
+ /** At most one npm check (and install attempt) per installed copy per day. */
19
+ export const CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000;
20
+ const REGISTRY_TIMEOUT_MS = 3000;
21
+ const STALE_LOCK_MS = 5000;
22
+ /**
23
+ * Cache file for one installed copy. Copies (e.g. npm and bun) keep separate
24
+ * state so each one only ever updates itself.
25
+ */
26
+ export function getUpdateCachePath(packageDir = PACKAGE_DIR, configDir = BKPER_CONFIG_DIR) {
27
+ const key = createHash('sha256').update(packageDir).digest('hex').slice(0, 16);
28
+ return path.join(configDir, 'update-check', `${key}.json`);
29
+ }
30
+ export function isUpdateCheckDisabled(env = process.env) {
31
+ var _a;
32
+ if (env.BKPER_DISABLE_AUTOUPDATE) {
33
+ return true;
34
+ }
35
+ const ci = (_a = env.CI) === null || _a === void 0 ? void 0 : _a.trim().toLowerCase();
36
+ return !!ci && ci !== '0' && ci !== 'false';
37
+ }
38
+ export function readUpdateState(cachePath = getUpdateCachePath()) {
39
+ try {
40
+ const data = JSON.parse(readFileSync(cachePath, 'utf8'));
41
+ if (typeof data !== 'object' || data === null || Array.isArray(data)) {
42
+ return {};
43
+ }
44
+ const record = data;
45
+ const state = {};
46
+ if (typeof record.lastAttemptedAt === 'number') {
47
+ state.lastAttemptedAt = record.lastAttemptedAt;
48
+ }
49
+ if (typeof record.latestVersion === 'string') {
50
+ state.latestVersion = record.latestVersion;
51
+ }
52
+ const install = record.install;
53
+ if (install &&
54
+ typeof install.version === 'string' &&
55
+ (install.status === 'installed' ||
56
+ install.status === 'manual' ||
57
+ install.status === 'failed')) {
58
+ state.install = { version: install.version, status: install.status };
59
+ if (typeof install.instruction === 'string') {
60
+ state.install.instruction = install.instruction;
61
+ }
62
+ }
63
+ return state;
64
+ }
65
+ catch (_a) {
66
+ return {};
67
+ }
68
+ }
69
+ /** Writes the state atomically (temp file + rename). */
70
+ export function writeUpdateState(state, cachePath = getUpdateCachePath()) {
71
+ const tempPath = `${cachePath}.${process.pid}.tmp`;
72
+ try {
73
+ mkdirSync(path.dirname(cachePath), { recursive: true });
74
+ writeFileSync(tempPath, `${JSON.stringify(state)}\n`, { encoding: 'utf8', mode: 0o600 });
75
+ renameSync(tempPath, cachePath);
76
+ return true;
77
+ }
78
+ catch (_a) {
79
+ try {
80
+ unlinkSync(tempPath);
81
+ }
82
+ catch (_b) {
83
+ // Nothing to clean up
84
+ }
85
+ return false;
86
+ }
87
+ }
88
+ function withLock(cachePath, fn) {
89
+ const lockPath = `${cachePath}.lock`;
90
+ let fd;
91
+ try {
92
+ mkdirSync(path.dirname(cachePath), { recursive: true });
93
+ try {
94
+ fd = openSync(lockPath, 'wx', 0o600);
95
+ }
96
+ catch (_a) {
97
+ if (Date.now() - statSync(lockPath).mtimeMs <= STALE_LOCK_MS) {
98
+ return undefined;
99
+ }
100
+ unlinkSync(lockPath);
101
+ fd = openSync(lockPath, 'wx', 0o600);
102
+ }
103
+ return fn();
104
+ }
105
+ catch (_b) {
106
+ return undefined;
107
+ }
108
+ finally {
109
+ if (fd !== undefined) {
110
+ try {
111
+ closeSync(fd);
112
+ unlinkSync(lockPath);
113
+ }
114
+ catch (_c) {
115
+ // Lock goes stale on its own
116
+ }
117
+ }
118
+ }
119
+ }
120
+ function spawnUpdateWorker() {
121
+ const isTypeScript = import.meta.url.endsWith('.ts');
122
+ const workerPath = fileURLToPath(new URL(isTypeScript ? './update-worker.ts' : './update-worker.js', import.meta.url));
123
+ const args = isTypeScript ? [...process.execArgv, workerPath] : [workerPath];
124
+ spawn(process.execPath, args, { detached: true, stdio: 'ignore', windowsHide: true }).unref();
125
+ }
126
+ /**
127
+ * Starts the detached update worker when the last attempt is older than a day.
128
+ * Never blocks the running command and never installs in this process.
129
+ */
130
+ export function maybeStartUpdateCheck(options = {}) {
131
+ var _a, _b, _c, _d;
132
+ const cachePath = (_a = options.cachePath) !== null && _a !== void 0 ? _a : getUpdateCachePath();
133
+ const now = (_b = options.now) !== null && _b !== void 0 ? _b : Date.now();
134
+ if (isUpdateCheckDisabled((_c = options.env) !== null && _c !== void 0 ? _c : process.env)) {
135
+ return false;
136
+ }
137
+ const claimed = withLock(cachePath, () => {
138
+ const state = readUpdateState(cachePath);
139
+ if (state.lastAttemptedAt !== undefined && now - state.lastAttemptedAt < CHECK_INTERVAL_MS) {
140
+ return false;
141
+ }
142
+ return writeUpdateState(Object.assign(Object.assign({}, state), { lastAttemptedAt: now }), cachePath);
143
+ });
144
+ if (!claimed) {
145
+ return false;
146
+ }
147
+ try {
148
+ ((_d = options.spawnWorker) !== null && _d !== void 0 ? _d : spawnUpdateWorker)();
149
+ return true;
150
+ }
151
+ catch (_e) {
152
+ return false;
153
+ }
154
+ }
155
+ function createDefaultWorkerDependencies() {
156
+ return {
157
+ cachePath: getUpdateCachePath(),
158
+ version: VERSION,
159
+ fetchLatestVersion,
160
+ getSelfUpdatePlan: version => getSelfUpdatePlan(version),
161
+ runInstall: runInstallCommand,
162
+ readInstalledVersion,
163
+ };
164
+ }
165
+ function decideInstall(latest, deps) {
166
+ const plan = deps.getSelfUpdatePlan(latest);
167
+ if (plan.kind === 'manual') {
168
+ return { version: latest, status: 'manual', instruction: plan.instruction };
169
+ }
170
+ if (deps.readInstalledVersion(plan.packageJsonPath) === latest) {
171
+ return { version: latest, status: 'installed' };
172
+ }
173
+ try {
174
+ deps.runInstall(plan.command);
175
+ }
176
+ catch (_a) {
177
+ return { version: latest, status: 'failed' };
178
+ }
179
+ const installed = deps.readInstalledVersion(plan.packageJsonPath);
180
+ return { version: latest, status: installed === latest ? 'installed' : 'failed' };
181
+ }
182
+ /**
183
+ * Detached worker: checks npm and installs a newer version into the running
184
+ * copy only when that copy is a verified, writable global install.
185
+ */
186
+ export function runUpdateWorker() {
187
+ return __awaiter(this, arguments, void 0, function* (deps = createDefaultWorkerDependencies()) {
188
+ try {
189
+ const latest = yield deps.fetchLatestVersion(REGISTRY_TIMEOUT_MS);
190
+ if (!latest) {
191
+ return;
192
+ }
193
+ writeUpdateState(Object.assign(Object.assign({}, readUpdateState(deps.cachePath)), { latestVersion: latest }), deps.cachePath);
194
+ if (!isNewerVersion(deps.version, latest)) {
195
+ return;
196
+ }
197
+ const install = decideInstall(latest, deps);
198
+ writeUpdateState(Object.assign(Object.assign({}, readUpdateState(deps.cachePath)), { install }), deps.cachePath);
199
+ }
200
+ catch (_a) {
201
+ // Never surface worker errors
202
+ }
203
+ });
204
+ }
205
+ /**
206
+ * Reads what the running copy should tell the user, based on the cache only.
207
+ */
208
+ export function getUpdateNotice(state, currentVersion = VERSION) {
209
+ var _a;
210
+ const latest = state.latestVersion;
211
+ if (!latest || !isNewerVersion(currentVersion, latest)) {
212
+ return undefined;
213
+ }
214
+ const install = state.install;
215
+ if (!install || install.version !== latest) {
216
+ return undefined;
217
+ }
218
+ if (install.status === 'installed') {
219
+ return { kind: 'installed', current: currentVersion, latest };
220
+ }
221
+ return {
222
+ kind: 'manual',
223
+ current: currentVersion,
224
+ latest,
225
+ instruction: (_a = install.instruction) !== null && _a !== void 0 ? _a : 'Run: bkper upgrade',
226
+ };
227
+ }
228
+ export function formatUpdateNotice(notice) {
229
+ if (notice.kind === 'installed') {
230
+ return `bkper ${notice.latest} installed (current ${notice.current}). Restart to use it.`;
231
+ }
232
+ return `bkper ${notice.latest} available (current ${notice.current}). ${notice.instruction}`;
233
+ }
234
+ /**
235
+ * Plain-command hook: prints the fallback warning when the copy cannot
236
+ * update itself, then starts the daily background check.
237
+ */
238
+ export function runCommandUpdateCheck(writeStderr = message => process.stderr.write(message)) {
239
+ try {
240
+ if (isUpdateCheckDisabled()) {
241
+ return;
242
+ }
243
+ const notice = getUpdateNotice(readUpdateState());
244
+ if ((notice === null || notice === void 0 ? void 0 : notice.kind) === 'manual') {
245
+ writeStderr(`${formatUpdateNotice(notice)}\n`);
246
+ }
247
+ maybeStartUpdateCheck();
248
+ }
249
+ catch (_a) {
250
+ // Never break the user's command
251
+ }
252
+ }
253
+ //# sourceMappingURL=update-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-check.js","sourceRoot":"","sources":["../../src/upgrade/update-check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=update-worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-worker.d.ts","sourceRoot":"","sources":["../../src/upgrade/update-worker.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import { runUpdateWorker } from './update-check.js';
2
+ // Detached entry point started by maybeStartUpdateCheck().
3
+ runUpdateWorker().catch(() => {
4
+ // Never surface worker errors
5
+ });
6
+ //# sourceMappingURL=update-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-worker.js","sourceRoot":"","sources":["../../src/upgrade/update-worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,2DAA2D;AAC3D,eAAe,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;IACzB,8BAA8B;AAClC,CAAC,CAAC,CAAC"}
@@ -1,43 +1,26 @@
1
- import type { InstallMethod } from './installation.js';
1
+ import type { SelfUpdatePlan } from './installation.js';
2
2
  /**
3
3
  * Compares two semver version strings.
4
4
  * Returns true if `latest` is newer than `current`.
5
5
  */
6
6
  export declare function isNewerVersion(current: string, latest: string): boolean;
7
- export interface AvailableUpgrade {
8
- current: string;
9
- latest: string;
10
- method: InstallMethod;
11
- }
12
- export interface AvailableUpgradeDependencies {
7
+ export interface UpgradeDependencies {
13
8
  version: string;
14
9
  fetchLatestVersion: () => Promise<string | null>;
15
- detectMethod: () => Promise<InstallMethod>;
16
- }
17
- export interface AutoUpgradeDependencies extends AvailableUpgradeDependencies {
18
- startUpgrade: (method: InstallMethod, version: string) => void;
19
- writeStderr: (message: string) => void;
10
+ getSelfUpdatePlan: (version: string) => SelfUpdatePlan;
11
+ runInstall: (command: string) => void;
12
+ readInstalledVersion: (packageJsonPath: string) => string | undefined;
13
+ log: (message: string) => void;
14
+ error: (message: string) => void;
20
15
  }
21
16
  /**
22
- * Checks whether a newer version is available and returns the target version
23
- * plus the detected install method.
24
- */
25
- export declare function getAvailableUpgrade(dependencies?: AvailableUpgradeDependencies): Promise<AvailableUpgrade | null>;
26
- /**
27
- * Runs the silent auto-upgrade check in the background.
28
- *
29
- * This function:
30
- * 1. Fetches the latest version from npm
31
- * 2. Compares with the current installed version
32
- * 3. If newer, starts a detached background upgrade using the detected install method
33
- * 4. Prints a brief message to stderr on fallback or when running non-interactively
34
- *
35
- * All errors are swallowed silently to never disrupt the user's command.
17
+ * Upgrades the running copy of bkper and returns the process exit code.
18
+ * Refuses to touch anything that is not a verified, writable global install.
36
19
  */
37
- export declare function autoUpgrade(dependencies?: AutoUpgradeDependencies): Promise<void>;
20
+ export declare function runUpgrade(targetVersion: string | undefined, deps?: UpgradeDependencies): Promise<number>;
38
21
  /**
39
22
  * Runs an explicit foreground upgrade with user-facing output.
40
23
  * Used by the `bkper upgrade` command.
41
24
  */
42
- export declare function foregroundUpgrade(targetVersion?: string, methodOverride?: string): Promise<void>;
25
+ export declare function foregroundUpgrade(targetVersion?: string): Promise<void>;
43
26
  //# sourceMappingURL=upgrade.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../src/upgrade/upgrade.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAQvE;AAED,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,aAAa,CAAC;CACzB;AAED,MAAM,WAAW,4BAA4B;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACjD,YAAY,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,uBAAwB,SAAQ,4BAA4B;IACzE,YAAY,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/D,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C;AAgCD;;;GAGG;AACH,wBAAsB,mBAAmB,CACrC,YAAY,GAAE,4BAA0E,GACzF,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAWlC;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAC7B,YAAY,GAAE,uBAAgE,GAC/E,OAAO,CAAC,IAAI,CAAC,CA2Bf;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACnC,aAAa,CAAC,EAAE,MAAM,EACtB,cAAc,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,IAAI,CAAC,CAsCf"}
1
+ {"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../src/upgrade/upgrade.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAQvE;AAED,MAAM,WAAW,mBAAmB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACjD,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,cAAc,CAAC;IACvD,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,oBAAoB,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IACtE,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAcD;;;GAGG;AACH,wBAAsB,UAAU,CAC5B,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,IAAI,GAAE,mBAAwD,GAC/D,OAAO,CAAC,MAAM,CAAC,CA8CjB;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAK7E"}
@@ -7,7 +7,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
- import { VERSION, fetchLatestVersion, detectMethod, detectMethodAsync, executeUpgrade, getUpgradeCommand, startDetachedUpgrade, } from './installation.js';
10
+ import { VERSION, fetchLatestVersion, getSelfUpdatePlan, readInstalledVersion, runInstallCommand, } from './installation.js';
11
11
  /**
12
12
  * Compares two semver version strings.
13
13
  * Returns true if `latest` is newer than `current`.
@@ -22,118 +22,71 @@ export function isNewerVersion(current, latest) {
22
22
  return lMinor > cMinor;
23
23
  return lPatch > cPatch;
24
24
  }
25
- function writeAutoUpgradeMessage(message) {
26
- if (process.stdout.isTTY === true && process.stderr.isTTY === true) {
27
- return;
28
- }
29
- process.stderr.write(message);
30
- }
31
- function createDefaultAvailableUpgradeDependencies() {
25
+ function createDefaultUpgradeDependencies() {
32
26
  return {
33
27
  version: VERSION,
34
- fetchLatestVersion,
35
- detectMethod: detectMethodAsync,
28
+ fetchLatestVersion: () => fetchLatestVersion(),
29
+ getSelfUpdatePlan: version => getSelfUpdatePlan(version),
30
+ runInstall: runInstallCommand,
31
+ readInstalledVersion,
32
+ log: message => console.log(message),
33
+ error: message => console.error(message),
36
34
  };
37
35
  }
38
- function createDefaultAutoUpgradeDependencies() {
39
- return Object.assign(Object.assign({}, createDefaultAvailableUpgradeDependencies()), { startUpgrade: startDetachedUpgrade, writeStderr: writeAutoUpgradeMessage });
40
- }
41
- function getManualUpgradeMessage(current, latest) {
42
- return (`\nbkper ${latest} available (current: ${current}). ` +
43
- `Upgrade manually: npm install -g bkper@${latest}\n`);
44
- }
45
36
  /**
46
- * Checks whether a newer version is available and returns the target version
47
- * plus the detected install method.
37
+ * Upgrades the running copy of bkper and returns the process exit code.
38
+ * Refuses to touch anything that is not a verified, writable global install.
48
39
  */
49
- export function getAvailableUpgrade() {
50
- return __awaiter(this, arguments, void 0, function* (dependencies = createDefaultAvailableUpgradeDependencies()) {
51
- const latest = yield dependencies.fetchLatestVersion();
52
- if (!latest)
53
- return null;
54
- if (!isNewerVersion(dependencies.version, latest))
55
- return null;
56
- const method = yield dependencies.detectMethod();
57
- return {
58
- current: dependencies.version,
59
- latest,
60
- method,
61
- };
62
- });
63
- }
64
- /**
65
- * Runs the silent auto-upgrade check in the background.
66
- *
67
- * This function:
68
- * 1. Fetches the latest version from npm
69
- * 2. Compares with the current installed version
70
- * 3. If newer, starts a detached background upgrade using the detected install method
71
- * 4. Prints a brief message to stderr on fallback or when running non-interactively
72
- *
73
- * All errors are swallowed silently to never disrupt the user's command.
74
- */
75
- export function autoUpgrade() {
76
- return __awaiter(this, arguments, void 0, function* (dependencies = createDefaultAutoUpgradeDependencies()) {
40
+ export function runUpgrade(targetVersion_1) {
41
+ return __awaiter(this, arguments, void 0, function* (targetVersion, deps = createDefaultUpgradeDependencies()) {
42
+ const latest = targetVersion !== null && targetVersion !== void 0 ? targetVersion : (yield deps.fetchLatestVersion());
43
+ if (!latest) {
44
+ deps.error('Could not determine the latest version. Check your network connection.');
45
+ return 1;
46
+ }
47
+ if (!targetVersion && !isNewerVersion(deps.version, latest)) {
48
+ deps.log(`Already on the latest version (${deps.version}).`);
49
+ return 0;
50
+ }
51
+ const plan = deps.getSelfUpdatePlan(latest);
52
+ if (plan.kind === 'manual') {
53
+ deps.error(`Cannot upgrade this bkper automatically.\n` +
54
+ `Running bkper: ${plan.packageDir}\n` +
55
+ `Detected method: ${plan.method}\n` +
56
+ plan.instruction);
57
+ return 1;
58
+ }
59
+ deps.log(`Upgrading bkper: ${deps.version} \u2192 ${latest}`);
60
+ deps.log(`Running: ${plan.command}`);
77
61
  try {
78
- const availableUpgrade = yield getAvailableUpgrade(dependencies);
79
- if (!availableUpgrade)
80
- return;
81
- if (availableUpgrade.method === 'unknown') {
82
- dependencies.writeStderr(getManualUpgradeMessage(availableUpgrade.current, availableUpgrade.latest));
83
- return;
84
- }
85
- try {
86
- dependencies.startUpgrade(availableUpgrade.method, availableUpgrade.latest);
87
- dependencies.writeStderr(`\nbkper update started in background: ` +
88
- `${availableUpgrade.current} \u2192 ${availableUpgrade.latest} ` +
89
- `(restart later to use)\n`);
90
- }
91
- catch (_a) {
92
- dependencies.writeStderr(getManualUpgradeMessage(availableUpgrade.current, availableUpgrade.latest));
93
- }
62
+ deps.runInstall(plan.command);
94
63
  }
95
- catch (_b) {
96
- // Silent failure — never break the user's command
64
+ catch (err) {
65
+ deps.error(`Upgrade failed: ${err instanceof Error ? err.message : String(err)}`);
66
+ deps.error(`Try upgrading manually: ${plan.command}`);
67
+ return 1;
68
+ }
69
+ const installed = deps.readInstalledVersion(plan.packageJsonPath);
70
+ if (installed !== latest) {
71
+ deps.error(`bkper@${latest} was installed elsewhere; the running bkper at ${plan.packageDir} ` +
72
+ `is still ${installed !== null && installed !== void 0 ? installed : 'unknown'}.\n` +
73
+ `Update it with the package manager that provides it.`);
74
+ return 1;
97
75
  }
76
+ deps.log(`Successfully upgraded to bkper@${latest}. Restart your terminal to use the new version.`);
77
+ return 0;
98
78
  });
99
79
  }
100
80
  /**
101
81
  * Runs an explicit foreground upgrade with user-facing output.
102
82
  * Used by the `bkper upgrade` command.
103
83
  */
104
- export function foregroundUpgrade(targetVersion, methodOverride) {
84
+ export function foregroundUpgrade(targetVersion) {
105
85
  return __awaiter(this, void 0, void 0, function* () {
106
- const latest = targetVersion !== null && targetVersion !== void 0 ? targetVersion : (yield fetchLatestVersion());
107
- if (!latest) {
108
- console.error('Could not determine the latest version. Check your network connection.');
109
- process.exit(1);
110
- }
111
- if (!isNewerVersion(VERSION, latest) && !targetVersion) {
112
- console.log(`Already on the latest version (${VERSION}).`);
113
- return;
114
- }
115
- const method = methodOverride && isValidMethod(methodOverride) ? methodOverride : detectMethod();
116
- if (method === 'unknown') {
117
- console.error(`Could not detect how bkper was installed.\n` +
118
- `Please upgrade manually: npm install -g bkper@${latest}\n` +
119
- `Or specify the method: bkper upgrade --method npm`);
120
- process.exit(1);
121
- }
122
- const command = getUpgradeCommand(method, latest);
123
- console.log(`Upgrading bkper: ${VERSION} \u2192 ${latest}`);
124
- console.log(`Running: ${command}`);
125
- try {
126
- executeUpgrade(method, latest);
127
- console.log(`Successfully upgraded to bkper@${latest}. Restart your terminal to use the new version.`);
128
- }
129
- catch (err) {
130
- console.error(`Upgrade failed:`, err);
131
- console.error(`\nTry upgrading manually: ${command}`);
132
- process.exit(1);
86
+ const exitCode = yield runUpgrade(targetVersion);
87
+ if (exitCode !== 0) {
88
+ process.exit(exitCode);
133
89
  }
134
90
  });
135
91
  }
136
- function isValidMethod(method) {
137
- return ['npm', 'bun', 'yarn'].includes(method);
138
- }
139
92
  //# sourceMappingURL=upgrade.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/upgrade/upgrade.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/upgrade/upgrade.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bkper",
3
- "version": "4.31.3",
3
+ "version": "5.1.0",
4
4
  "description": "Official Bkper CLI for accounting data, automation, apps, and AI agents",
5
5
  "bin": {
6
6
  "bkper": "./lib/cli.js"
@@ -1,15 +0,0 @@
1
- /**
2
- * Formats a 2D matrix into an RFC 4180 compliant CSV string.
3
- *
4
- * - Row 0 is treated as headers, rows 1+ as data (all rendered identically)
5
- * - Uses CRLF line endings per RFC 4180
6
- * - Fields containing commas, double quotes, or newlines are quoted
7
- * - Double quotes are escaped by doubling them ("")
8
- * - null/undefined cells are rendered as empty strings
9
- * - No truncation is applied to any field
10
- *
11
- * @param matrix - 2D array where row 0 is headers and rows 1+ are data
12
- * @returns RFC 4180 CSV string
13
- */
14
- export declare function formatCsv(matrix: unknown[][]): string;
15
- //# sourceMappingURL=csv-formatter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"csv-formatter.d.ts","sourceRoot":"","sources":["../../src/render/csv-formatter.ts"],"names":[],"mappings":"AAqBA;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,GAAG,MAAM,CAMrD"}
@@ -1,37 +0,0 @@
1
- /**
2
- * Formats a field value according to RFC 4180 rules.
3
- *
4
- * - null/undefined become empty string
5
- * - Fields containing commas, double quotes, or newlines are wrapped in double quotes
6
- * - Double quotes within a field are escaped by doubling them ("")
7
- */
8
- function formatField(value) {
9
- if (value == null) {
10
- return '';
11
- }
12
- const str = String(value);
13
- if (str.includes('"') || str.includes(',') || str.includes('\n') || str.includes('\r')) {
14
- return '"' + str.replace(/"/g, '""') + '"';
15
- }
16
- return str;
17
- }
18
- /**
19
- * Formats a 2D matrix into an RFC 4180 compliant CSV string.
20
- *
21
- * - Row 0 is treated as headers, rows 1+ as data (all rendered identically)
22
- * - Uses CRLF line endings per RFC 4180
23
- * - Fields containing commas, double quotes, or newlines are quoted
24
- * - Double quotes are escaped by doubling them ("")
25
- * - null/undefined cells are rendered as empty strings
26
- * - No truncation is applied to any field
27
- *
28
- * @param matrix - 2D array where row 0 is headers and rows 1+ are data
29
- * @returns RFC 4180 CSV string
30
- */
31
- export function formatCsv(matrix) {
32
- if (!matrix || matrix.length === 0) {
33
- return '';
34
- }
35
- return matrix.map(row => row.map(formatField).join(',')).join('\r\n');
36
- }
37
- //# sourceMappingURL=csv-formatter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"csv-formatter.js","sourceRoot":"","sources":["../../src/render/csv-formatter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,SAAS,WAAW,CAAC,KAAc;IAC/B,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAChB,OAAO,EAAE,CAAC;IACd,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAE1B,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACrF,OAAO,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC;IAC/C,CAAC;IAED,OAAO,GAAG,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,SAAS,CAAC,MAAmB;IACzC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,CAAC;IACd,CAAC;IAED,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1E,CAAC"}