deepline 0.3.329 → 0.3.330
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundling-sources/sdk/src/billing-idempotency.ts +24 -0
- package/dist/bundling-sources/sdk/src/client.ts +22 -22
- package/dist/bundling-sources/sdk/src/release.ts +1 -1
- package/dist/cli/{auth-MFFVOITR.mjs → auth-A4XQ3KMW.mjs} +4 -4
- package/dist/cli/auth-XJJYQESF.js +31 -0
- package/dist/cli/{billing-LRBHWLIQ.mjs → billing-634WZLKG.mjs} +36 -14
- package/dist/cli/{billing-V4Y4OVQ7.js → billing-WLHXYC5Z.js} +101 -79
- package/dist/cli/{chunk-MO2XSC5I.mjs → chunk-3QZ22IZO.mjs} +4 -4
- package/dist/cli/{chunk-4FLEXYUC.js → chunk-46IVSO6O.js} +8 -8
- package/dist/cli/{chunk-HI7TAWFS.mjs → chunk-56RM5AQF.mjs} +5 -5
- package/dist/cli/{chunk-ERU2OR6F.mjs → chunk-5W636CDP.mjs} +2 -2
- package/dist/cli/{chunk-U4CTHVN7.js → chunk-63W4744F.js} +533 -532
- package/dist/cli/{chunk-YNSCELIJ.mjs → chunk-6VBXS43D.mjs} +2 -2
- package/dist/cli/{chunk-EROOAI5G.mjs → chunk-7DGZCMXQ.mjs} +1 -1
- package/dist/cli/{chunk-OUTIWGKY.js → chunk-7FWHOKNS.js} +26 -26
- package/dist/cli/{chunk-VLDLJZ75.js → chunk-FLIABSY6.js} +48 -48
- package/dist/cli/{chunk-VDIHLKGG.js → chunk-GHHLLEZK.js} +4 -4
- package/dist/cli/{chunk-J2E5R2VH.js → chunk-GKZZ32EV.js} +60 -60
- package/dist/cli/{chunk-75ZOTF3K.js → chunk-GS7GA7PI.js} +15 -15
- package/dist/cli/{chunk-OZGU7P2S.mjs → chunk-GTBS6LQH.mjs} +38 -22
- package/dist/cli/{chunk-XRYKLK56.js → chunk-LNDGT7NV.js} +45 -45
- package/dist/cli/{chunk-MFQQINUY.mjs → chunk-LQ5DD2UF.mjs} +2 -2
- package/dist/cli/{chunk-FK7PW6BP.mjs → chunk-MBI3BVSQ.mjs} +1 -1
- package/dist/cli/{chunk-KHZQFFOQ.js → chunk-O2L46S3I.js} +2 -2
- package/dist/cli/{chunk-SJV5MTOJ.mjs → chunk-PH2N6GC7.mjs} +1 -1
- package/dist/cli/{chunk-7T6DX5RK.mjs → chunk-SDSS4OTO.mjs} +62 -61
- package/dist/cli/{chunk-GCNER3HV.mjs → chunk-SZCUJ4AL.mjs} +1 -1
- package/dist/cli/{chunk-3RZJ3GEG.mjs → chunk-VFC6CZLF.mjs} +3 -3
- package/dist/cli/{chunk-U2N4CYT7.js → chunk-WHKTRZ3J.js} +6 -6
- package/dist/cli/{chunk-AD23W4S5.js → chunk-XUNMVZOW.js} +1 -1
- package/dist/cli/{chunk-ZXGUYTIT.js → chunk-YFP4UH2Y.js} +6 -6
- package/dist/cli/{chunk-GY2EEO2Y.js → chunk-YGFQ7YSM.js} +51 -35
- package/dist/cli/{chunk-HVPRQGF4.mjs → chunk-ZYPFCBW5.mjs} +1 -1
- package/dist/cli/client-3CREIHGC.js +20 -0
- package/dist/cli/{client-BNLD775D.mjs → client-WYFGEJOX.mjs} +3 -3
- package/dist/cli/{csv-7MVQECWG.mjs → csv-BDZSDXLU.mjs} +3 -3
- package/dist/cli/{csv-ZT6ZRQ3Z.js → csv-THMQDXCJ.js} +12 -12
- package/dist/cli/{db-C4BMZXJK.js → db-5BQJOZG7.js} +29 -29
- package/dist/cli/{db-ABLWLMX5.mjs → db-R2LTNLFM.mjs} +4 -4
- package/dist/cli/{describe-YALVN4WH.js → describe-F4G5H3SC.js} +15 -15
- package/dist/cli/{describe-XWOWAR32.mjs → describe-WECII7FS.mjs} +8 -8
- package/dist/cli/{executions-U4TNRP26.js → executions-HJRVD4M6.js} +6 -6
- package/dist/cli/{executions-7IZVKQ3O.mjs → executions-HPRIRB73.mjs} +4 -4
- package/dist/cli/{feedback-GO5XPEKY.mjs → feedback-5VVW5WW7.mjs} +3 -3
- package/dist/cli/{feedback-NWMRT5W4.js → feedback-GHGDH43D.js} +6 -6
- package/dist/cli/{git-R53WS4WA.mjs → git-BBXML2UJ.mjs} +4 -4
- package/dist/cli/git-NNEBLRVP.js +23 -0
- package/dist/cli/index.js +79 -79
- package/dist/cli/index.mjs +31 -31
- package/dist/cli/{legacy-noops-6QAZW7WJ.mjs → legacy-noops-IALOUAGL.mjs} +4 -4
- package/dist/cli/{legacy-noops-NJWM53DE.js → legacy-noops-VNZZ3VVT.js} +7 -7
- package/dist/cli/{monitors-2I2MYAPS.js → monitors-MLP6IA2R.js} +85 -85
- package/dist/cli/{monitors-2N4BRU5M.mjs → monitors-VDEB2FKS.mjs} +4 -4
- package/dist/cli/{org-XVNAE2JV.js → org-N6ADDGEV.js} +60 -60
- package/dist/cli/{org-D3RHK2Q7.mjs → org-SDSSKY42.mjs} +4 -4
- package/dist/cli/play-UTIPBVDQ.js +153 -0
- package/dist/cli/{play-L7MYJZ65.mjs → play-VSTVY6PM.mjs} +7 -7
- package/dist/cli/{providers-5BTDAZHN.js → providers-TJ42O6NN.js} +7 -7
- package/dist/cli/{providers-YM4E7WZD.mjs → providers-UKC7KD3W.mjs} +4 -4
- package/dist/cli/{quickstart-5A3FHAH3.js → quickstart-7S7NMCMX.js} +5 -5
- package/dist/cli/{quickstart-ARPLJOLH.mjs → quickstart-WSKATNHJ.mjs} +3 -3
- package/dist/cli/{search-KKJEVV27.mjs → search-6OS6VVCJ.mjs} +5 -5
- package/dist/cli/search-Y6UGKL5C.js +26 -0
- package/dist/cli/{secrets-DVPVCSZD.js → secrets-GWLYB2KD.js} +13 -13
- package/dist/cli/{secrets-DGRJ4DO5.mjs → secrets-QTTR5R5M.mjs} +4 -4
- package/dist/cli/{sessions-56EHXLZD.mjs → sessions-Q7MY5YYI.mjs} +4 -4
- package/dist/cli/{sessions-VG4ATQ5Y.js → sessions-SUURWTVX.js} +5 -5
- package/dist/cli/{settings-4U5XG7QI.mjs → settings-3D5YDD2B.mjs} +7 -7
- package/dist/cli/{settings-BLOTIW2G.js → settings-W4DYMYFA.js} +74 -74
- package/dist/cli/{setup-RHJAHPOR.mjs → setup-5F5OGYKW.mjs} +6 -6
- package/dist/cli/{setup-L7AMAXCH.js → setup-NIUADTDP.js} +41 -41
- package/dist/cli/skills-SHUL5UT7.js +28 -0
- package/dist/cli/{skills-VU55YFCI.mjs → skills-TV3ORUIG.mjs} +4 -4
- package/dist/cli/tools-GNIVV4OF.js +40 -0
- package/dist/cli/{tools-JS3YIDOH.mjs → tools-YSZWAFKO.mjs} +6 -6
- package/dist/cli/{update-EHI5QUXM.mjs → update-FJAMLGLT.mjs} +6 -6
- package/dist/cli/update-U3XGY6IT.js +28 -0
- package/dist/cli/{workflow-NE4SYRAT.js → workflow-C6ZCM5S4.js} +15 -15
- package/dist/cli/{workflow-BITLTLRF.mjs → workflow-HDHBYC7S.mjs} +5 -5
- package/dist/index.js +6 -6
- package/dist/index.mjs +3 -3
- package/dist/install-integrity.json +75 -74
- package/dist/release.d.mts +1 -1
- package/dist/release.d.ts +1 -1
- package/dist/release.js +2 -2
- package/dist/release.mjs +1 -1
- package/package.json +1 -1
- package/dist/cli/auth-W2MQM6GQ.js +0 -31
- package/dist/cli/client-5AIFBLKQ.js +0 -20
- package/dist/cli/git-YWRLAOBY.js +0 -23
- package/dist/cli/play-OYRHI7G3.js +0 -153
- package/dist/cli/search-VE3O3ZEM.js +0 -26
- package/dist/cli/skills-QB4OQGGP.js +0 -28
- package/dist/cli/tools-2CPFYNK7.js +0 -40
- package/dist/cli/update-WXP24GU5.js +0 -28
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { DeeplineError } from './errors.js';
|
|
2
|
+
|
|
3
|
+
export function requireBillingIdempotencyKey(value: string): string {
|
|
4
|
+
const normalized = value.trim();
|
|
5
|
+
let valid =
|
|
6
|
+
normalized.length > 0 && normalized.length <= 200 && normalized === value;
|
|
7
|
+
if (valid) {
|
|
8
|
+
try {
|
|
9
|
+
valid =
|
|
10
|
+
new Headers({ 'Idempotency-Key': value }).get('Idempotency-Key') ===
|
|
11
|
+
value;
|
|
12
|
+
} catch {
|
|
13
|
+
valid = false;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
if (!valid) {
|
|
17
|
+
throw new DeeplineError(
|
|
18
|
+
'Billing idempotencyKey must contain 1–200 characters with no leading or trailing whitespace and be valid HTTP header text.',
|
|
19
|
+
undefined,
|
|
20
|
+
'INVALID_BILLING_IDEMPOTENCY_KEY',
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
return value;
|
|
24
|
+
}
|
|
@@ -51,6 +51,7 @@ import { playInputExampleArgs } from './plays/input-example.js';
|
|
|
51
51
|
*/
|
|
52
52
|
import { resolveConfig } from './config.js';
|
|
53
53
|
import { DeeplineError } from './errors.js';
|
|
54
|
+
import { requireBillingIdempotencyKey as requireTargetBillingIdempotencyKey } from './billing-idempotency.js';
|
|
54
55
|
import {
|
|
55
56
|
planCustomerDbQuery,
|
|
56
57
|
queryCustomerDatabase,
|
|
@@ -2560,22 +2561,6 @@ export type BillingNamespace = {
|
|
|
2560
2561
|
}) => Promise<{ url: string }>;
|
|
2561
2562
|
};
|
|
2562
2563
|
|
|
2563
|
-
function requireTargetBillingIdempotencyKey(value: string): string {
|
|
2564
|
-
const normalized = value.trim();
|
|
2565
|
-
if (
|
|
2566
|
-
normalized.length === 0 ||
|
|
2567
|
-
normalized.length > 200 ||
|
|
2568
|
-
normalized !== value
|
|
2569
|
-
) {
|
|
2570
|
-
throw new DeeplineError(
|
|
2571
|
-
'Billing idempotencyKey must contain 1–200 characters with no leading or trailing whitespace.',
|
|
2572
|
-
undefined,
|
|
2573
|
-
'INVALID_BILLING_IDEMPOTENCY_KEY',
|
|
2574
|
-
);
|
|
2575
|
-
}
|
|
2576
|
-
return normalized;
|
|
2577
|
-
}
|
|
2578
|
-
|
|
2579
2564
|
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
2580
2565
|
return Boolean(value && typeof value === 'object' && !Array.isArray(value));
|
|
2581
2566
|
}
|
|
@@ -6275,15 +6260,21 @@ export class DeeplineClient {
|
|
|
6275
6260
|
credits: number;
|
|
6276
6261
|
idempotencyKey?: string;
|
|
6277
6262
|
}): Promise<BillingTopUpResult> {
|
|
6263
|
+
const idempotencyKey =
|
|
6264
|
+
options.idempotencyKey === undefined
|
|
6265
|
+
? undefined
|
|
6266
|
+
: requireTargetBillingIdempotencyKey(options.idempotencyKey);
|
|
6278
6267
|
return this.http.post<BillingTopUpResult>(
|
|
6279
6268
|
'/api/v2/billing/top-up',
|
|
6280
6269
|
{
|
|
6281
6270
|
credits: options.credits,
|
|
6282
|
-
...(
|
|
6283
|
-
? { idempotency_key:
|
|
6271
|
+
...(idempotencyKey !== undefined
|
|
6272
|
+
? { idempotency_key: idempotencyKey }
|
|
6284
6273
|
: {}),
|
|
6285
6274
|
},
|
|
6286
|
-
undefined
|
|
6275
|
+
idempotencyKey === undefined
|
|
6276
|
+
? undefined
|
|
6277
|
+
: { 'Idempotency-Key': idempotencyKey },
|
|
6287
6278
|
// The idempotency key makes a retry at the product layer safe, but the
|
|
6288
6279
|
// CLI should not hide ambiguous local delivery failures behind implicit
|
|
6289
6280
|
// transport retries for a payment mutation.
|
|
@@ -6300,15 +6291,24 @@ export class DeeplineClient {
|
|
|
6300
6291
|
credits: number;
|
|
6301
6292
|
idempotencyKey?: string;
|
|
6302
6293
|
}): Promise<BillingTopUpReceipt> {
|
|
6294
|
+
const idempotencyKey =
|
|
6295
|
+
options.idempotencyKey === undefined
|
|
6296
|
+
? undefined
|
|
6297
|
+
: requireTargetBillingIdempotencyKey(options.idempotencyKey);
|
|
6303
6298
|
return this.http.post<BillingTopUpReceipt>(
|
|
6304
6299
|
'/api/v2/billing/top-up',
|
|
6305
6300
|
{
|
|
6306
6301
|
credits: options.credits,
|
|
6307
|
-
...(
|
|
6308
|
-
? { idempotency_key:
|
|
6302
|
+
...(idempotencyKey !== undefined
|
|
6303
|
+
? { idempotency_key: idempotencyKey }
|
|
6304
|
+
: {}),
|
|
6305
|
+
},
|
|
6306
|
+
{
|
|
6307
|
+
'x-deepline-top-up-receipt': 'operation-v1',
|
|
6308
|
+
...(idempotencyKey !== undefined
|
|
6309
|
+
? { 'Idempotency-Key': idempotencyKey }
|
|
6309
6310
|
: {}),
|
|
6310
6311
|
},
|
|
6311
|
-
{ 'x-deepline-top-up-receipt': 'operation-v1' },
|
|
6312
6312
|
{ maxRetries: 0, exactUrlOnly: true },
|
|
6313
6313
|
);
|
|
6314
6314
|
}
|
|
@@ -200,7 +200,7 @@ export const SDK_RELEASE = {
|
|
|
200
200
|
// getters keep their established compatibility behavior.
|
|
201
201
|
// 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
|
|
202
202
|
// 0.3.90 is the first deliberately versioned SDK release for API v3.
|
|
203
|
-
version: '0.3.
|
|
203
|
+
version: '0.3.330',
|
|
204
204
|
updateSummary:
|
|
205
205
|
'Play grep now returns concise results with the matched fields and terms. Automatic CLI updates are enabled by default; use `deepline settings autoupdate off` to opt out, `deepline settings autoupdate on` to re-enable updates, or `deepline settings autoupdate pin <version>` to hold an exact release.',
|
|
206
206
|
packageCapabilities: {
|
|
@@ -9,11 +9,11 @@ import {
|
|
|
9
9
|
registerAuthCommands,
|
|
10
10
|
reportSetupCompleted,
|
|
11
11
|
resolvePendingAuthClaimForResume
|
|
12
|
-
} from "./chunk-
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
12
|
+
} from "./chunk-LQ5DD2UF.mjs";
|
|
13
|
+
import "./chunk-7DGZCMXQ.mjs";
|
|
14
|
+
import "./chunk-MBI3BVSQ.mjs";
|
|
15
15
|
import "./chunk-DLIRSHV6.mjs";
|
|
16
|
-
import "./chunk-
|
|
16
|
+
import "./chunk-SZCUJ4AL.mjs";
|
|
17
17
|
import "./chunk-NXGCO4JB.mjs";
|
|
18
18
|
import "./chunk-WZYKRD7T.mjs";
|
|
19
19
|
import "./chunk-KRD6H754.mjs";
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
var _chunkFLIABSY6js = require('./chunk-FLIABSY6.js');
|
|
13
|
+
require('./chunk-WHKTRZ3J.js');
|
|
14
|
+
require('./chunk-GHHLLEZK.js');
|
|
15
|
+
require('./chunk-XNYIZMNQ.js');
|
|
16
|
+
require('./chunk-XUNMVZOW.js');
|
|
17
|
+
require('./chunk-7P5AA3SN.js');
|
|
18
|
+
require('./chunk-OG64RBAC.js');
|
|
19
|
+
require('./chunk-COGTRVWW.js');
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
exports.EXIT_WORKSPACE_MISMATCH = _chunkFLIABSY6js.EXIT_WORKSPACE_MISMATCH; exports.clearPendingClaim = _chunkFLIABSY6js.clearPendingClaim; exports.clearSatisfiedPendingClaim = _chunkFLIABSY6js.clearSatisfiedPendingClaim; exports.handleRegister = _chunkFLIABSY6js.handleRegister; exports.handleStatus = _chunkFLIABSY6js.handleStatus; exports.handleWait = _chunkFLIABSY6js.handleWait; exports.readPendingAuthClaim = _chunkFLIABSY6js.readPendingAuthClaim; exports.registerAuthCommands = _chunkFLIABSY6js.registerAuthCommands; exports.reportSetupCompleted = _chunkFLIABSY6js.reportSetupCompleted; exports.resolvePendingAuthClaimForResume = _chunkFLIABSY6js.resolvePendingAuthClaimForResume;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
DeeplineClient,
|
|
3
|
-
iterateCursorPages
|
|
4
|
-
|
|
3
|
+
iterateCursorPages,
|
|
4
|
+
requireBillingIdempotencyKey
|
|
5
|
+
} from "./chunk-GTBS6LQH.mjs";
|
|
5
6
|
import "./chunk-CBVIJSHF.mjs";
|
|
6
7
|
import {
|
|
7
8
|
createTimestampedName,
|
|
@@ -9,13 +10,13 @@ import {
|
|
|
9
10
|
openInBrowser,
|
|
10
11
|
printCommandEnvelope,
|
|
11
12
|
shouldEmitJson
|
|
12
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-7DGZCMXQ.mjs";
|
|
13
14
|
import {
|
|
14
15
|
AuthError,
|
|
15
16
|
ConfigError
|
|
16
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-MBI3BVSQ.mjs";
|
|
17
18
|
import "./chunk-DLIRSHV6.mjs";
|
|
18
|
-
import "./chunk-
|
|
19
|
+
import "./chunk-SZCUJ4AL.mjs";
|
|
19
20
|
import "./chunk-6IKARAYD.mjs";
|
|
20
21
|
import {
|
|
21
22
|
DeeplineError
|
|
@@ -89,11 +90,7 @@ function parseTopUpCredits(raw) {
|
|
|
89
90
|
return parsed;
|
|
90
91
|
}
|
|
91
92
|
function topUpIdempotencyKey(raw) {
|
|
92
|
-
|
|
93
|
-
const trimmed = raw.trim();
|
|
94
|
-
if (trimmed) return trimmed.slice(0, 120);
|
|
95
|
-
}
|
|
96
|
-
return `cli_topup:${Date.now()}:${randomUUID()}`;
|
|
93
|
+
return raw === void 0 ? `cli_topup:${Date.now()}:${randomUUID()}` : requireBillingIdempotencyKey(raw);
|
|
97
94
|
}
|
|
98
95
|
function targetBillingIdempotencyKey(raw) {
|
|
99
96
|
return typeof raw === "string" ? raw : `cli_target_billing:${Date.now()}:${randomUUID()}`;
|
|
@@ -362,14 +359,21 @@ async function handleBalance(options) {
|
|
|
362
359
|
lines.push(`If the user approves, run: ${recovery.top_up_command}`);
|
|
363
360
|
lines.push(`If checkout is required, run: ${recovery.checkout_command}`);
|
|
364
361
|
}
|
|
365
|
-
const text = [
|
|
362
|
+
const text = [
|
|
363
|
+
lines[0],
|
|
364
|
+
...options.verbose ? detail : [],
|
|
365
|
+
...lines.slice(1)
|
|
366
|
+
];
|
|
366
367
|
printCommandEnvelope(
|
|
367
368
|
{
|
|
368
369
|
...payload,
|
|
369
370
|
...recovery ? { recovery } : {},
|
|
370
371
|
render: {
|
|
371
372
|
sections: [
|
|
372
|
-
{
|
|
373
|
+
{
|
|
374
|
+
title: "billing balance",
|
|
375
|
+
lines: [lines[0], ...detail, ...lines.slice(1)]
|
|
376
|
+
}
|
|
373
377
|
]
|
|
374
378
|
}
|
|
375
379
|
},
|
|
@@ -961,7 +965,21 @@ async function handleTopUp(creditsRaw, options) {
|
|
|
961
965
|
);
|
|
962
966
|
return;
|
|
963
967
|
}
|
|
964
|
-
|
|
968
|
+
let idempotencyKey;
|
|
969
|
+
try {
|
|
970
|
+
idempotencyKey = topUpIdempotencyKey(options.idempotencyKey);
|
|
971
|
+
} catch (error) {
|
|
972
|
+
if (!(error instanceof DeeplineError)) throw error;
|
|
973
|
+
reportBillingFailure(
|
|
974
|
+
{
|
|
975
|
+
exitCode: 2,
|
|
976
|
+
code: "INVALID_BILLING_IDEMPOTENCY_KEY",
|
|
977
|
+
message: "--idempotency-key must contain 1\u2013200 characters with no leading or trailing whitespace and be valid HTTP header text."
|
|
978
|
+
},
|
|
979
|
+
options
|
|
980
|
+
);
|
|
981
|
+
return;
|
|
982
|
+
}
|
|
965
983
|
if (options.dryRun) {
|
|
966
984
|
printCommandEnvelope(
|
|
967
985
|
{
|
|
@@ -972,6 +990,7 @@ async function handleTopUp(creditsRaw, options) {
|
|
|
972
990
|
planned_request: {
|
|
973
991
|
method: "POST",
|
|
974
992
|
path: BILLING_TOP_UP_PATH,
|
|
993
|
+
headers: { "Idempotency-Key": idempotencyKey },
|
|
975
994
|
body: { credits, idempotency_key: idempotencyKey }
|
|
976
995
|
},
|
|
977
996
|
render: {
|
|
@@ -1567,6 +1586,9 @@ Notes:
|
|
|
1567
1586
|
workspace, then adding purchased Deepline credits. If no saved payment method
|
|
1568
1587
|
is available, use the checkout command printed in the error response.
|
|
1569
1588
|
--dry-run prints the planned request and idempotency key without charging.
|
|
1589
|
+
Earlier CLI versions truncated supplied keys over 120 characters. To recover
|
|
1590
|
+
an earlier attempt, reuse the effective key printed in its original output
|
|
1591
|
+
or retry command.
|
|
1570
1592
|
|
|
1571
1593
|
Examples:
|
|
1572
1594
|
deepline billing top-up 1000
|
|
@@ -1576,7 +1598,7 @@ Examples:
|
|
|
1576
1598
|
`
|
|
1577
1599
|
).argument("<credits>", "Positive integer Deepline credit amount").option(
|
|
1578
1600
|
"--idempotency-key <key>",
|
|
1579
|
-
"Stable retry key for the same intended top-up"
|
|
1601
|
+
"Stable retry key for the same intended top-up (1\u2013200 characters, no padding, valid HTTP header text)"
|
|
1580
1602
|
).option("--dry-run", "Print the planned top-up without charging").option("--compact", "Keep only high-signal fields in JSON output").option("--json", "Emit JSON output. Also automatic when stdout is piped").action(handleTopUp);
|
|
1581
1603
|
billing.command("buy").description("Buy credits through the target billing contract.").argument("<credits>", "Positive integer Deepline credit amount").option("--idempotency-key <key>", "Stable retry key").option("--json", "Emit JSON output").action(handleBuyCredits);
|
|
1582
1604
|
billing.command("top-up-recover").description(
|