@datarails-ai/dr-cli 1.6.131 → 1.6.132
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/cli.js +61 -16
- package/dist/scopes-map.json +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -8,7 +8,7 @@ import { fileURLToPath as fileURLToPath3 } from "url";
|
|
|
8
8
|
// package.json
|
|
9
9
|
var package_default = {
|
|
10
10
|
name: "@datarails-ai/dr-cli",
|
|
11
|
-
version: "1.6.
|
|
11
|
+
version: "1.6.132",
|
|
12
12
|
description: "Datarails CLI",
|
|
13
13
|
type: "module",
|
|
14
14
|
engines: {
|
|
@@ -69,7 +69,7 @@ var package_default = {
|
|
|
69
69
|
};
|
|
70
70
|
|
|
71
71
|
// src/buildInfo.ts
|
|
72
|
-
var BUILD_TIME = "2026-10-
|
|
72
|
+
var BUILD_TIME = "2026-10-14T19:31:40.601Z";
|
|
73
73
|
function formatBuildTime(iso) {
|
|
74
74
|
if (iso === "") return "";
|
|
75
75
|
const d = new Date(iso);
|
|
@@ -3895,7 +3895,27 @@ var PROD_GATE_TIER_B = /* @__PURE__ */ new Set([
|
|
|
3895
3895
|
"org-export|delete",
|
|
3896
3896
|
// connectors poll item skip (dr connectors poll skip). The item is never landed,
|
|
3897
3897
|
// but `dr connectors poll retry` queues it again, so the token alone is enough.
|
|
3898
|
-
"connector-poll-item|skip"
|
|
3898
|
+
"connector-poll-item|skip",
|
|
3899
|
+
// connectors poll seeding (dr connectors poll seed, and a `poll set` whose answers seed
|
|
3900
|
+
// and land nothing: `--on-policy-change seed`, with or without `--widen seed`). DR-55448.
|
|
3901
|
+
// A seed marks items already in the source as seen, so a cut-over does not land them a
|
|
3902
|
+
// second time beside the versions the old feed (Workato) already landed. It lands
|
|
3903
|
+
// nothing, deletes nothing and touches no version in the filebox. It is a routine step of
|
|
3904
|
+
// every cut-over (bind, seed --until <cut-over>, enable, pause the old feed), run once per
|
|
3905
|
+
// filebox, often by an agent over hundreds of fileboxes, and the word dialog stalled every
|
|
3906
|
+
// one of them. The token still binds the filebox, server, account, control-plane URL and
|
|
3907
|
+
// the exact --until / settings, and the control-plane audits each call
|
|
3908
|
+
// (`poll.seed` / `poll.put`: user, org, query).
|
|
3909
|
+
// Judged, not free: a seeded item is not undone by `poll retry` (that covers failed,
|
|
3910
|
+
// waiting and skipped items), so a cutoff set too late leaves files unlanded until a
|
|
3911
|
+
// Tier-A land path (`set --on-policy-change land`, `resume --source land`) or an upload
|
|
3912
|
+
// brings them in. Accepted because those files stay in the source and nothing in the
|
|
3913
|
+
// filebox changes; the plan shows the filebox and the cutoff before the token is
|
|
3914
|
+
// redeemed, and a separate `seed --dry-run` counts the already-discovered items it would
|
|
3915
|
+
// mark (the plan does not). If a seed ever lands, deletes or rewrites a version,
|
|
3916
|
+
// these keys move back to Tier A.
|
|
3917
|
+
"connector-poll|seed",
|
|
3918
|
+
"connector-poll|set-seed"
|
|
3899
3919
|
]);
|
|
3900
3920
|
var PROD_GATE_TIER_A = /* @__PURE__ */ new Set([
|
|
3901
3921
|
// workflow / mec — soft-delete + cascade deletes. `archive` also covers the
|
|
@@ -4031,13 +4051,13 @@ var PROD_GATE_TIER_A = /* @__PURE__ */ new Set([
|
|
|
4031
4051
|
// deletes whole organizations via the org-delete chord. The single most
|
|
4032
4052
|
// destructive verb in the CLI; the word gate stays on prod unconditionally.
|
|
4033
4053
|
"org-import|delete-orgs",
|
|
4034
|
-
// connectors polled ingestion (dr connectors poll
|
|
4035
|
-
//
|
|
4036
|
-
//
|
|
4037
|
-
// `resume --source land` lands everything a changed source holds. Versions
|
|
4038
|
-
// a customer filebox
|
|
4039
|
-
|
|
4040
|
-
"connector-poll|set-land
|
|
4054
|
+
// connectors polled ingestion writes that LAND files (dr connectors poll set / resume
|
|
4055
|
+
// --source land). `set-land` is a `poll set` with any answer that lands: a wider window
|
|
4056
|
+
// with `--widen land`, or `--on-policy-change land` (a seed alongside a land is still
|
|
4057
|
+
// `set-land`). `resume --source land` lands everything a changed source holds. Versions
|
|
4058
|
+
// landed in a customer filebox cannot be taken back from the CLI. Seeding is Tier B
|
|
4059
|
+
// (`connector-poll|seed` / `|set-seed`, DR-55448).
|
|
4060
|
+
"connector-poll|set-land",
|
|
4041
4061
|
"connector-poll|resume-land"
|
|
4042
4062
|
]);
|
|
4043
4063
|
function classifyTier(action) {
|
|
@@ -44119,6 +44139,9 @@ async function ask(cfg, message, choices, defaultChoice) {
|
|
|
44119
44139
|
}
|
|
44120
44140
|
var WIDEN_HELP = "seed = mark the newly exposed items as already landed, land = land them all";
|
|
44121
44141
|
var POLICY_HELP = "rekey = re-key the ledger from a fresh listing (nothing lands again), seed = mark everything in the window as landed, land = land everything in the window";
|
|
44142
|
+
function pollSetConfirmVerb(widen, onPolicyChange) {
|
|
44143
|
+
return widen === "land" || onPolicyChange === "land" ? "set-land" : "set-seed";
|
|
44144
|
+
}
|
|
44122
44145
|
async function runPollSet(cfg) {
|
|
44123
44146
|
if (Object.keys(cfg.changes).length === 0) {
|
|
44124
44147
|
throw new Error(
|
|
@@ -44175,7 +44198,12 @@ async function runPollSet(cfg) {
|
|
|
44175
44198
|
cfg.deadline?.pause();
|
|
44176
44199
|
await twoStepConfirm({
|
|
44177
44200
|
out: cfg.out,
|
|
44178
|
-
action: pollConfirmAction(
|
|
44201
|
+
action: pollConfirmAction(
|
|
44202
|
+
cfg.filebox,
|
|
44203
|
+
pollSetConfirmVerb(body.widen, body.on_policy_change),
|
|
44204
|
+
cfg.scope,
|
|
44205
|
+
{ ...body }
|
|
44206
|
+
),
|
|
44179
44207
|
token: cfg.token,
|
|
44180
44208
|
server: cfg.scope.serverKey,
|
|
44181
44209
|
confirmCmd: `dr connectors poll set ${cfg.filebox}${cfg.settingsArgs}${flags}${cfg.targetArgs}`,
|
|
@@ -44526,8 +44554,21 @@ function ttyChoicePrompt(message, choices, defaultChoice, io = { input: process.
|
|
|
44526
44554
|
askOnce();
|
|
44527
44555
|
});
|
|
44528
44556
|
}
|
|
44557
|
+
var POLL_CONFIRM_HELP = [
|
|
44558
|
+
"Confirmation:",
|
|
44559
|
+
" seed, skip and set --on-policy-change seed print a plan and a --confirm-token;",
|
|
44560
|
+
" re-run the printed command, token included, to apply it.",
|
|
44561
|
+
" No dialog opens on production, so an agent or script can run a cut-over unattended:",
|
|
44562
|
+
" dr connectors poll seed <filebox> --until <cut-over> --server <prod>",
|
|
44563
|
+
" dr connectors poll seed <filebox> --until <cut-over> --server <prod> --confirm-token <token>",
|
|
44564
|
+
" (seed --dry-run counts the already-discovered items a seed would mark.)",
|
|
44565
|
+
" A write with any answer that lands files (set --widen land, set --on-policy-change land,",
|
|
44566
|
+
" resume --source land) also asks a person to type a word in a dialog on production,",
|
|
44567
|
+
" even when the same set also seeds (--on-policy-change seed --widen land)."
|
|
44568
|
+
].join("\n");
|
|
44529
44569
|
function registerConnectorsPoll(connectors) {
|
|
44530
|
-
const poll2 = connectors.command("poll").description("Polled file ingestion: the control-plane lands each new file as one version")
|
|
44570
|
+
const poll2 = connectors.command("poll").description("Polled file ingestion: the control-plane lands each new file as one version").addHelpText("after", `
|
|
44571
|
+
${POLL_CONFIRM_HELP}`);
|
|
44531
44572
|
const enableCmd = addSettingsFlags(
|
|
44532
44573
|
poll2.command("enable").description("Poll a filebox's binding (dated with the filebox's DATE tag)").argument("<filebox>", "filebox id or uuid")
|
|
44533
44574
|
).action(async (filebox, opts) => {
|
|
@@ -44553,14 +44594,15 @@ function registerConnectorsPoll(connectors) {
|
|
|
44553
44594
|
).option(
|
|
44554
44595
|
"--widen <seed|land>",
|
|
44555
44596
|
"a wider window: seed (mark exposed items landed) or land them"
|
|
44556
|
-
).option("--on-policy-change <rekey|seed|land>", "a --same-name switch: rekey, seed or land")
|
|
44597
|
+
).option("--on-policy-change <rekey|seed|land>", "a --same-name switch: rekey, seed or land").addHelpText("after", `
|
|
44598
|
+
${POLL_CONFIRM_HELP}`)
|
|
44557
44599
|
).action(
|
|
44558
44600
|
async (filebox, opts) => {
|
|
44559
44601
|
const changes = parseSettings(opts);
|
|
44560
44602
|
const widen = opts.widen === void 0 ? void 0 : parseChoice(opts.widen, "--widen", WIDEN_CHOICES);
|
|
44561
44603
|
const onPolicyChange = opts.onPolicyChange === void 0 ? void 0 : parseChoice(opts.onPolicyChange, "--on-policy-change", POLICY_CHOICES);
|
|
44562
44604
|
await preflightConfirmToken(
|
|
44563
|
-
pollConfirmAction(filebox,
|
|
44605
|
+
pollConfirmAction(filebox, pollSetConfirmVerb(widen, onPolicyChange), scopeOf(opts), {
|
|
44564
44606
|
...changes,
|
|
44565
44607
|
...widen !== void 0 ? { widen } : {},
|
|
44566
44608
|
...onPolicyChange !== void 0 ? { on_policy_change: onPolicyChange } : {}
|
|
@@ -44735,14 +44777,17 @@ function registerConnectorsPoll(connectors) {
|
|
|
44735
44777
|
});
|
|
44736
44778
|
addCommonFlags(skipCmd, "Output the item as JSON");
|
|
44737
44779
|
const seedCmd = addConfirmTokenFlag(
|
|
44738
|
-
poll2.command("seed").description(
|
|
44780
|
+
poll2.command("seed").description(
|
|
44781
|
+
"Mark items modified at or before --until as already landed (cut-over; token, no dialog)"
|
|
44782
|
+
).argument("<filebox>", "filebox id or uuid").requiredOption(
|
|
44739
44783
|
"--until <timestamp>",
|
|
44740
44784
|
"date or timestamp with a zone, e.g. 2026-10-08T17:30:00Z"
|
|
44741
44785
|
).option(
|
|
44742
44786
|
"--dry-run",
|
|
44743
44787
|
"count the already-discovered items it would mark, without changing anything",
|
|
44744
44788
|
false
|
|
44745
|
-
)
|
|
44789
|
+
).addHelpText("after", `
|
|
44790
|
+
${POLL_CONFIRM_HELP}`)
|
|
44746
44791
|
).action(
|
|
44747
44792
|
async (filebox, opts) => {
|
|
44748
44793
|
const until = parseTimestampFlag(opts.until, "--until");
|
package/dist/scopes-map.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 1,
|
|
3
|
-
"cliVersion": "1.6.
|
|
3
|
+
"cliVersion": "1.6.132",
|
|
4
4
|
"_contract": "Resolve a command path through `aliases` (canonical prefix + alias segment -> canonical path) before any lookup. A path listed in `pendingCommands`, or whose first segment is a key of `pending`, is UNDECIDED, not unrestricted: fail closed or skip it, and never read a path's absence from `commands` as 'no requirement'. An entry carrying `denied` is UNAVAILABLE to any AGENT-SCOPED credential — one whose `scopes` claim carries at least one `resource:action` entry; a claim that is absent, empty, capability-only or wholly unparseable is UNRESTRICTED, and this mark does not apply to it — whatever else that entry says: it is not a ceiling and it is not always-available, its `denied.reason` says why and `denied.until` names the ticket that lifts it, and the absence of `requires` on it must NEVER be read as 'no requirement'. Only an entry in `commands` with an empty `requires` means always-available.",
|
|
5
5
|
"commands": {
|
|
6
6
|
"login": {
|