@tmcayden/youtrack-axi 0.1.0 → 0.1.2
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 +46 -18
- package/dist/cli.js +7 -10
- package/dist/cli.js.map +1 -1
- package/dist/commands/admin.js +1 -3
- package/dist/commands/admin.js.map +1 -1
- package/dist/commands/issues.js +2 -4
- package/dist/commands/issues.js.map +1 -1
- package/dist/commands/mutate.js +8 -12
- package/dist/commands/mutate.js.map +1 -1
- package/dist/commands/setup.js +19 -16
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/work.js +3 -4
- package/dist/commands/work.js.map +1 -1
- package/dist/config.d.ts +13 -6
- package/dist/config.js +114 -37
- package/dist/config.js.map +1 -1
- package/dist/dotenv.d.ts +8 -0
- package/dist/dotenv.js +61 -0
- package/dist/dotenv.js.map +1 -0
- package/dist/flags.d.ts +11 -0
- package/dist/flags.js +33 -5
- package/dist/flags.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/youtrack.d.ts +9 -2
- package/dist/youtrack.js +13 -3
- package/dist/youtrack.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -35,41 +35,69 @@ npm install -g /path/to/youtrack-axi
|
|
|
35
35
|
|
|
36
36
|
## Configuration
|
|
37
37
|
|
|
38
|
-
Credentials are
|
|
38
|
+
Credentials are two values, `YOUTRACK_URL` and `YOUTRACK_TOKEN`. A config file
|
|
39
|
+
is simply a way to set them, so the file and the environment share one set of
|
|
40
|
+
names. Each value is resolved independently, in this order:
|
|
39
41
|
|
|
40
|
-
1. `YOUTRACK_URL` / `YOUTRACK_TOKEN` environment
|
|
41
|
-
2.
|
|
42
|
-
3.
|
|
42
|
+
1. `YOUTRACK_URL` / `YOUTRACK_TOKEN` in the environment
|
|
43
|
+
2. the file named by `--config <path>`
|
|
44
|
+
3. the file named by `YOUTRACK_AXI_CONFIG`
|
|
45
|
+
4. `~/.config/youtrack-axi/.env` (honours `XDG_CONFIG_HOME`)
|
|
43
46
|
|
|
44
|
-
|
|
45
|
-
|
|
47
|
+
Environment values sit on top so `YOUTRACK_TOKEN` reliably overrides a stored one
|
|
48
|
+
- useful in CI, and when rotating a token. `--config` selects *which file* is
|
|
49
|
+
consulted rather than supplying a value, so the two never compete.
|
|
50
|
+
|
|
51
|
+
A config file is an env file:
|
|
52
|
+
|
|
53
|
+
```sh
|
|
54
|
+
YOUTRACK_URL="https://example.youtrack.cloud"
|
|
55
|
+
YOUTRACK_TOKEN="perm:..."
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
`export` prefixes, `#` comments, and single or double quoting all work, so the
|
|
59
|
+
same file can be sourced by a shell. Files are written with mode `0600`, and
|
|
60
|
+
`setup --verify` warns if the one it read is readable by other accounts.
|
|
61
|
+
|
|
62
|
+
A file whose first character is `{` is parsed as JSON instead, accepting `url` /
|
|
63
|
+
`token` or `youtrack_url` / `youtrack_token`. That is there so a file already
|
|
64
|
+
holding other tooling's settings can be named with `--config` without being
|
|
65
|
+
reshaped; new files should use the env format.
|
|
46
66
|
|
|
47
67
|
```sh
|
|
48
68
|
youtrack-axi setup --url "https://example.youtrack.cloud" --token "<permanent-token>"
|
|
69
|
+
youtrack-axi setup --config ~/.config/work.env --url "https://..." --token "..."
|
|
49
70
|
youtrack-axi setup --verify
|
|
50
71
|
```
|
|
51
72
|
|
|
52
|
-
|
|
53
|
-
|
|
73
|
+
`setup` rewrites only its own two keys, so comments, ordering, and unrelated
|
|
74
|
+
variables in an existing file survive. The token is never written to stdout, a
|
|
75
|
+
log, or a commit; `setup --verify` confirms it works by naming the authenticated
|
|
76
|
+
login instead.
|
|
77
|
+
|
|
78
|
+
A path passed to `--config` or `YOUTRACK_AXI_CONFIG` must exist - a missing file
|
|
79
|
+
is an error, never a silent fallthrough to another source. There is deliberately
|
|
80
|
+
no automatic project-local config file, since a credential file inside a
|
|
81
|
+
repository is easy to commit by accident.
|
|
54
82
|
|
|
55
83
|
## Commands
|
|
56
84
|
|
|
57
85
|
```sh
|
|
58
86
|
youtrack-axi # your open issues
|
|
59
|
-
youtrack-axi issues "project:
|
|
87
|
+
youtrack-axi issues "project: PROJ #Unresolved" --limit 20
|
|
60
88
|
youtrack-axi issues --assignee me --fields Priority,Type
|
|
61
|
-
youtrack-axi view
|
|
62
|
-
youtrack-axi create --project
|
|
63
|
-
youtrack-axi comment
|
|
64
|
-
youtrack-axi cmd
|
|
65
|
-
youtrack-axi work
|
|
66
|
-
youtrack-axi work
|
|
89
|
+
youtrack-axi view PROJ-123 [--full]
|
|
90
|
+
youtrack-axi create --project PROJ --summary "..." [--description "..."]
|
|
91
|
+
youtrack-axi comment PROJ-123 "..."
|
|
92
|
+
youtrack-axi cmd PROJ-123 --command "in progress"
|
|
93
|
+
youtrack-axi work PROJ-123 # read logged time
|
|
94
|
+
youtrack-axi work PROJ-123 --log 1h30m --date 2026-09-05 --type Development --text "..."
|
|
67
95
|
youtrack-axi projects
|
|
68
|
-
youtrack-axi fields
|
|
96
|
+
youtrack-axi fields PROJ [--full]
|
|
69
97
|
```
|
|
70
98
|
|
|
71
|
-
|
|
72
|
-
1 for errors, 2 for usage errors.
|
|
99
|
+
`--help` and `--config` are accepted on every command. Exit codes are 0 for
|
|
100
|
+
success including no-ops, 1 for errors, 2 for usage errors.
|
|
73
101
|
|
|
74
102
|
`cmd` is idempotent: applying a state an issue is already in reports a no-op and
|
|
75
103
|
exits 0, and any real change is reported as a field-level diff.
|
package/dist/cli.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { runAxiCli } from "axi-sdk-js";
|
|
2
2
|
import { renderError, renderOutput } from "./render.js";
|
|
3
3
|
import { resolveConfig } from "./config.js";
|
|
4
|
-
import { renderCommandHelp } from "./flags.js";
|
|
4
|
+
import { configPathFromArgs, renderCommandHelp } from "./flags.js";
|
|
5
5
|
import { ISSUE_LIST_FIELDS, YouTrackClient } from "./youtrack.js";
|
|
6
6
|
import { VERSION } from "./version.js";
|
|
7
7
|
import { DEFAULT_QUERY, issueListBody, issuesSpec, runIssues, runView, viewSpec } from "./commands/issues.js";
|
|
@@ -44,8 +44,9 @@ function topLevelHelp() {
|
|
|
44
44
|
version: VERSION,
|
|
45
45
|
commands: SPECS.map((spec) => ({ command: spec.name, usage: spec.usage, description: spec.description })),
|
|
46
46
|
config: [
|
|
47
|
-
"
|
|
48
|
-
"
|
|
47
|
+
"YOUTRACK_URL and YOUTRACK_TOKEN win when set",
|
|
48
|
+
"Otherwise: --config <path>, then $YOUTRACK_AXI_CONFIG, then ~/.config/youtrack-axi/config.json",
|
|
49
|
+
"Config files are env files: YOUTRACK_URL=... and YOUTRACK_TOKEN=...",
|
|
49
50
|
],
|
|
50
51
|
help: [
|
|
51
52
|
"Run `youtrack-axi` with no arguments to see your open issues",
|
|
@@ -75,13 +76,9 @@ export async function main() {
|
|
|
75
76
|
const spec = SPECS.find((candidate) => candidate.name === command);
|
|
76
77
|
return spec ? `${renderOutput(renderCommandHelp(spec))}\n` : null;
|
|
77
78
|
},
|
|
78
|
-
//
|
|
79
|
-
//
|
|
80
|
-
resolveContext: ({
|
|
81
|
-
if (command === "setup" || args.includes("--help"))
|
|
82
|
-
return undefined;
|
|
83
|
-
return new YouTrackClient(resolveConfig());
|
|
84
|
-
},
|
|
79
|
+
// The client resolves credentials lazily, so `setup` can run before any
|
|
80
|
+
// exist and argument validation always reports before a config error would.
|
|
81
|
+
resolveContext: ({ args }) => new YouTrackClient(() => resolveConfig({ configPath: configPathFromArgs(args) })),
|
|
85
82
|
renderUnknownCommand: (command) => `${renderError(`Unknown command: ${command}`, "VALIDATION_ERROR", [
|
|
86
83
|
`Valid commands: ${SPECS.map((spec) => spec.name).join(", ")}`,
|
|
87
84
|
"Run `youtrack-axi` with no arguments to see your open issues",
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAyB,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAoB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/admin.js
CHANGED
|
@@ -7,7 +7,6 @@ export const projectsSpec = {
|
|
|
7
7
|
usage: "projects [--limit <n>]",
|
|
8
8
|
description: "List the projects this account can see",
|
|
9
9
|
flags: {
|
|
10
|
-
"--help": { kind: "boolean", description: "Show this help" },
|
|
11
10
|
"--limit": { kind: "string", description: "Maximum projects to return", default: String(DEFAULT_LIMIT) },
|
|
12
11
|
},
|
|
13
12
|
examples: ["youtrack-axi projects"],
|
|
@@ -41,10 +40,9 @@ export const fieldsSpec = {
|
|
|
41
40
|
usage: "fields <SHORT> [--full]",
|
|
42
41
|
description: "List a project's custom fields and their allowed values",
|
|
43
42
|
flags: {
|
|
44
|
-
"--help": { kind: "boolean", description: "Show this help" },
|
|
45
43
|
"--full": { kind: "boolean", description: "List every allowed value instead of the first few" },
|
|
46
44
|
},
|
|
47
|
-
examples: ["youtrack-axi fields
|
|
45
|
+
examples: ["youtrack-axi fields PROJ", "youtrack-axi fields PROJ --full"],
|
|
48
46
|
};
|
|
49
47
|
export async function runFields(args, client) {
|
|
50
48
|
const parsed = parseArgs(fieldsSpec, args);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/commands/admin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EACL,QAAQ,EACR,SAAS,EACT,WAAW,EACX,sBAAsB,EACtB,iBAAiB,GAElB,MAAM,aAAa,CAAC;AAGrB,MAAM,aAAa,GAAG,GAAG,CAAC;AAC1B,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAE9B,MAAM,CAAC,MAAM,YAAY,GAAgB;IACvC,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,wBAAwB;IAC/B,WAAW,EAAE,wCAAwC;IACrD,KAAK,EAAE;QACL,
|
|
1
|
+
{"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/commands/admin.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/issues.js
CHANGED
|
@@ -8,7 +8,6 @@ export const issuesSpec = {
|
|
|
8
8
|
usage: 'issues ["<query>"] [--project <SHORT>] [--state <state>] [--assignee <login>] [--fields <a,b>] [--limit <n>]',
|
|
9
9
|
description: "List issues matching a YouTrack query",
|
|
10
10
|
flags: {
|
|
11
|
-
"--help": { kind: "boolean", description: "Show this help" },
|
|
12
11
|
"--project": { kind: "string", description: "Restrict to a project short name" },
|
|
13
12
|
"--state": { kind: "string", description: "Restrict to a State value" },
|
|
14
13
|
"--assignee": { kind: "string", description: "Restrict to an assignee login, or `me`" },
|
|
@@ -17,7 +16,7 @@ export const issuesSpec = {
|
|
|
17
16
|
},
|
|
18
17
|
examples: [
|
|
19
18
|
"youtrack-axi issues",
|
|
20
|
-
'youtrack-axi issues "project:
|
|
19
|
+
'youtrack-axi issues "project: PROJ #Unresolved" --limit 20',
|
|
21
20
|
"youtrack-axi issues --assignee me --state Open --fields Priority,Type",
|
|
22
21
|
],
|
|
23
22
|
};
|
|
@@ -79,10 +78,9 @@ export const viewSpec = {
|
|
|
79
78
|
usage: "view <ID> [--full]",
|
|
80
79
|
description: "Show one issue in full detail",
|
|
81
80
|
flags: {
|
|
82
|
-
"--help": { kind: "boolean", description: "Show this help" },
|
|
83
81
|
"--full": { kind: "boolean", description: "Print the complete description instead of a preview" },
|
|
84
82
|
},
|
|
85
|
-
examples: ["youtrack-axi view
|
|
83
|
+
examples: ["youtrack-axi view PROJ-123", "youtrack-axi view PROJ-123 --full"],
|
|
86
84
|
};
|
|
87
85
|
export async function runView(args, client) {
|
|
88
86
|
const parsed = parseArgs(viewSpec, args);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"issues.js","sourceRoot":"","sources":["../../src/commands/issues.ts"],"names":[],"mappings":"AACA,OAAO,EACL,QAAQ,EACR,cAAc,EACd,SAAS,EACT,WAAW,EACX,sBAAsB,EACtB,iBAAiB,GAElB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,yBAAyB,EACzB,mBAAmB,EACnB,UAAU,EACV,QAAQ,EACR,kBAAkB,EAClB,cAAc,EACd,QAAQ,GACT,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAA8B,MAAM,gBAAgB,CAAC;AAEpG,MAAM,CAAC,MAAM,aAAa,GAAG,oBAAoB,CAAC;AAClD,MAAM,aAAa,GAAG,EAAE,CAAC;AAEzB,MAAM,CAAC,MAAM,UAAU,GAAgB;IACrC,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,8GAA8G;IACrH,WAAW,EAAE,uCAAuC;IACpD,KAAK,EAAE;QACL,
|
|
1
|
+
{"version":3,"file":"issues.js","sourceRoot":"","sources":["../../src/commands/issues.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/mutate.js
CHANGED
|
@@ -5,14 +5,13 @@ export const createSpec = {
|
|
|
5
5
|
usage: 'create --project <SHORT> --summary "<text>" [--description "<text>"]',
|
|
6
6
|
description: "Create a new issue in a project",
|
|
7
7
|
flags: {
|
|
8
|
-
"--
|
|
9
|
-
"--project": { kind: "string", description: "Project short name, e.g. GSE" },
|
|
8
|
+
"--project": { kind: "string", description: "Project short name, e.g. PROJ" },
|
|
10
9
|
"--summary": { kind: "string", description: "Issue summary line" },
|
|
11
10
|
"--description": { kind: "string", description: "Issue description body" },
|
|
12
11
|
},
|
|
13
12
|
examples: [
|
|
14
|
-
'youtrack-axi create --project
|
|
15
|
-
'youtrack-axi create --project
|
|
13
|
+
'youtrack-axi create --project PROJ --summary "Fix map zoom regression"',
|
|
14
|
+
'youtrack-axi create --project PROJ --summary "Add audit log" --description "Track who changed what."',
|
|
16
15
|
],
|
|
17
16
|
};
|
|
18
17
|
export async function runCreate(args, client) {
|
|
@@ -40,11 +39,9 @@ export const commentSpec = {
|
|
|
40
39
|
name: "comment",
|
|
41
40
|
usage: 'comment <ID> "<text>"',
|
|
42
41
|
description: "Add a comment to an issue",
|
|
43
|
-
flags: {
|
|
44
|
-
"--help": { kind: "boolean", description: "Show this help" },
|
|
45
|
-
},
|
|
42
|
+
flags: {},
|
|
46
43
|
examples: [
|
|
47
|
-
'youtrack-axi comment
|
|
44
|
+
'youtrack-axi comment PROJ-123 "Deployed to staging, ready for QA."',
|
|
48
45
|
],
|
|
49
46
|
};
|
|
50
47
|
export async function runComment(args, client) {
|
|
@@ -67,14 +64,13 @@ export const cmdSpec = {
|
|
|
67
64
|
usage: 'cmd <ID> --command "<youtrack command>"',
|
|
68
65
|
description: "Apply a YouTrack command to an issue, such as a state or assignee change",
|
|
69
66
|
flags: {
|
|
70
|
-
"--help": { kind: "boolean", description: "Show this help" },
|
|
71
67
|
"--command": { kind: "string", description: "YouTrack command string" },
|
|
72
68
|
"--comment": { kind: "string", description: "Comment to add alongside the command" },
|
|
73
69
|
},
|
|
74
70
|
examples: [
|
|
75
|
-
'youtrack-axi cmd
|
|
76
|
-
'youtrack-axi cmd
|
|
77
|
-
'youtrack-axi cmd
|
|
71
|
+
'youtrack-axi cmd PROJ-123 --command "in progress"',
|
|
72
|
+
'youtrack-axi cmd PROJ-123 --command "for me"',
|
|
73
|
+
'youtrack-axi cmd PROJ-123 --command "State Fixed" --comment "Shipped in 2.4.1"',
|
|
78
74
|
],
|
|
79
75
|
};
|
|
80
76
|
const CMD_STATE_FIELDS = "customFields(name,value(name,login))";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mutate.js","sourceRoot":"","sources":["../../src/commands/mutate.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EACd,SAAS,EACT,sBAAsB,EACtB,iBAAiB,EACjB,aAAa,GAEd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAG7D,MAAM,CAAC,MAAM,UAAU,GAAgB;IACrC,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,sEAAsE;IAC7E,WAAW,EAAE,iCAAiC;IAC9C,KAAK,EAAE;QACL,
|
|
1
|
+
{"version":3,"file":"mutate.js","sourceRoot":"","sources":["../../src/commands/mutate.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EACd,SAAS,EACT,sBAAsB,EACtB,iBAAiB,EACjB,aAAa,GAEd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAG7D,MAAM,CAAC,MAAM,UAAU,GAAgB;IACrC,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,sEAAsE;IAC7E,WAAW,EAAE,iCAAiC;IAC9C,KAAK,EAAE;QACL,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+BAA+B,EAAE;QAC7E,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oBAAoB,EAAE;QAClE,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wBAAwB,EAAE;KAC3E;IACD,QAAQ,EAAE;QACR,wEAAwE;QACxE,sGAAsG;KACvG;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAc,EAAE,MAAsB;IACpE,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC3C,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IAC/D,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAE5D,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,CAC/B,QAAQ,EACR,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EACrF,EAAE,MAAM,EAAE,uCAAuC,EAAE,CACpD,CAAC;IAEF,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;IACpC,OAAO;QACL,OAAO,EAAE;YACP,EAAE;YACF,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,OAAO;YACnC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,SAAS,IAAI,OAAO;YAC9C,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,UAAU,EAAE,EAAE;SACrC;QACD,IAAI,EAAE;YACJ,0BAA0B,EAAE,mDAAmD;YAC/E,2BAA2B,EAAE,4CAA4C;SAC1E;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAgB;IACtC,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,uBAAuB;IAC9B,WAAW,EAAE,2BAA2B;IACxC,KAAK,EAAE,EAAE;IACT,QAAQ,EAAE;QACR,oEAAoE;KACrE;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAc,EAAE,MAAsB;IACrE,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAC5C,MAAM,EAAE,GAAG,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC;IACvE,sBAAsB,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;IAE/C,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,CAC/B,UAAU,kBAAkB,CAAC,EAAE,CAAC,WAAW,EAC3C,EAAE,IAAI,EAAE,EACR,EAAE,MAAM,EAAE,IAAI,EAAE,CACjB,CAAC;IAEF,OAAO;QACL,SAAS,EAAE;YACT,KAAK,EAAE,EAAE;YACT,EAAE,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE;YACpB,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI;SAClC;QACD,IAAI,EAAE,CAAC,2BAA2B,EAAE,qCAAqC,CAAC;KAC3E,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAgB;IAClC,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,yCAAyC;IAChD,WAAW,EAAE,0EAA0E;IACvF,KAAK,EAAE;QACL,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yBAAyB,EAAE;QACvE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sCAAsC,EAAE;KACrF;IACD,QAAQ,EAAE;QACR,mDAAmD;QACnD,8CAA8C;QAC9C,gFAAgF;KACjF;CACF,CAAC;AAEF,MAAM,gBAAgB,GAAG,sCAAsC,CAAC;AAEhE,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAc,EAAE,MAAsB;IACjE,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACxC,MAAM,EAAE,GAAG,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IACzD,sBAAsB,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAEpD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC5C,MAAM,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE;QAC5B,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;QAC5B,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChC,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAE3C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;SACjD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;SAC9D,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IAErF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO;YACL,OAAO,EAAE;gBACP,KAAK,EAAE,EAAE;gBACT,OAAO;gBACP,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,oCAAoC;aAC1F;SACF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE;QAC/B,OAAO;KACR,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,MAAsB,EAAE,EAAU;IAC1D,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,GAAG,CAAQ,UAAU,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;IACxG,OAAO,mBAAmB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;AACjD,CAAC"}
|
package/dist/commands/setup.js
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
import { AxiError, installSessionStartHooks, sessionStartHookStatus } from "axi-sdk-js";
|
|
2
2
|
import { collapseHome } from "../render.js";
|
|
3
|
-
import { boolFlag, parseArgs, rejectExtraPositionals, requireString } from "../flags.js";
|
|
4
|
-
import { resolveConfig,
|
|
3
|
+
import { boolFlag, optionalString, parseArgs, rejectExtraPositionals, requireString, } from "../flags.js";
|
|
4
|
+
import { CONFIG_PATH_ENV, permissionWarning, resolveConfig, writeConfig } from "../config.js";
|
|
5
5
|
import { YouTrackClient } from "../youtrack.js";
|
|
6
6
|
const HOOK_MARKER = "youtrack-axi";
|
|
7
7
|
export const setupSpec = {
|
|
8
8
|
name: "setup",
|
|
9
|
-
usage: 'setup [--url "https://<host>" --token "<permanent-token>"] [--hooks]',
|
|
9
|
+
usage: 'setup [--url "https://<host>" --token "<permanent-token>"] [--config <path>] [--hooks]',
|
|
10
10
|
description: "Store YouTrack credentials and optionally register the session-start home view",
|
|
11
11
|
flags: {
|
|
12
|
-
"--help": { kind: "boolean", description: "Show this help" },
|
|
13
12
|
"--url": { kind: "string", description: "YouTrack base URL" },
|
|
14
13
|
"--token": { kind: "string", description: "YouTrack permanent token" },
|
|
15
14
|
"--hooks": { kind: "boolean", description: "Register a SessionStart hook for Claude Code, Codex, and OpenCode" },
|
|
@@ -17,8 +16,8 @@ export const setupSpec = {
|
|
|
17
16
|
},
|
|
18
17
|
examples: [
|
|
19
18
|
'youtrack-axi setup --url "https://example.youtrack.cloud" --token "perm:..."',
|
|
19
|
+
'youtrack-axi setup --config ~/.config/work.env --url "https://example.youtrack.cloud" --token "perm:..."',
|
|
20
20
|
"youtrack-axi setup --verify",
|
|
21
|
-
"youtrack-axi setup --hooks",
|
|
22
21
|
],
|
|
23
22
|
};
|
|
24
23
|
export async function runSetup(args) {
|
|
@@ -26,6 +25,7 @@ export async function runSetup(args) {
|
|
|
26
25
|
rejectExtraPositionals(parsed, setupSpec, 0);
|
|
27
26
|
const wantsHooks = boolFlag(parsed, "--hooks");
|
|
28
27
|
const wantsVerify = boolFlag(parsed, "--verify");
|
|
28
|
+
const configPath = optionalString(parsed, "--config");
|
|
29
29
|
const hasUrl = parsed.flags["--url"] !== undefined;
|
|
30
30
|
const hasToken = parsed.flags["--token"] !== undefined;
|
|
31
31
|
if (!hasUrl && !hasToken && !wantsHooks && !wantsVerify) {
|
|
@@ -38,26 +38,27 @@ export async function runSetup(args) {
|
|
|
38
38
|
if (hasUrl || hasToken) {
|
|
39
39
|
const url = requireString(parsed, setupSpec, "--url");
|
|
40
40
|
const token = requireString(parsed, setupSpec, "--token");
|
|
41
|
-
const result =
|
|
42
|
-
output["config"] =
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
}
|
|
48
|
-
: { written: "yes", path: collapseHome(result.path), mode: "0600" };
|
|
41
|
+
const result = writeConfig(url, token, configPath);
|
|
42
|
+
output["config"] = {
|
|
43
|
+
path: collapseHome(result.path),
|
|
44
|
+
action: result.created ? "created" : "updated",
|
|
45
|
+
mode: "0600",
|
|
46
|
+
};
|
|
49
47
|
}
|
|
50
48
|
if (wantsHooks) {
|
|
51
49
|
output["hooks"] = installHooks();
|
|
52
50
|
}
|
|
53
51
|
if (wantsVerify || hasUrl || hasToken) {
|
|
54
|
-
output["verify"] = await verify();
|
|
52
|
+
output["verify"] = await verify(configPath);
|
|
55
53
|
}
|
|
56
54
|
return {
|
|
57
55
|
...output,
|
|
58
56
|
help: [
|
|
59
57
|
"Run `youtrack-axi` to see your open issues",
|
|
60
58
|
...(wantsHooks ? [] : ["Run `youtrack-axi setup --hooks` to show that home view at every session start"]),
|
|
59
|
+
...(configPath && !process.env[CONFIG_PATH_ENV]
|
|
60
|
+
? [`Set ${CONFIG_PATH_ENV}=${configPath} so this file is found without passing --config`]
|
|
61
|
+
: []),
|
|
61
62
|
],
|
|
62
63
|
};
|
|
63
64
|
}
|
|
@@ -87,15 +88,17 @@ function describe(state) {
|
|
|
87
88
|
return { installed: state.installed ? "yes" : "no", path: collapseHome(state.path) };
|
|
88
89
|
}
|
|
89
90
|
/** Confirms the credentials work without ever printing the token itself. */
|
|
90
|
-
async function verify() {
|
|
91
|
-
const config = resolveConfig();
|
|
91
|
+
async function verify(configPath) {
|
|
92
|
+
const config = resolveConfig({ configPath });
|
|
92
93
|
const client = new YouTrackClient(config);
|
|
93
94
|
const me = await client.get("users/me", { fields: "login,name" });
|
|
95
|
+
const warning = permissionWarning(config.source);
|
|
94
96
|
return {
|
|
95
97
|
url: config.url,
|
|
96
98
|
source: collapseHome(config.source),
|
|
97
99
|
authenticated_as: me.login ?? "",
|
|
98
100
|
token: "stored, not shown",
|
|
101
|
+
...(warning ? { warning: collapseHome(warning) } : {}),
|
|
99
102
|
};
|
|
100
103
|
}
|
|
101
104
|
//# sourceMappingURL=setup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACxF,OAAO,EAAE,YAAY,EAAyB,MAAM,cAAc,CAAC;AACnE,OAAO,
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/work.js
CHANGED
|
@@ -8,7 +8,6 @@ export const workSpec = {
|
|
|
8
8
|
usage: 'work <ID> [--log <duration> [--date YYYY-MM-DD] [--text "<note>"] [--type <name>]] [--limit <n>]',
|
|
9
9
|
description: "List logged work on an issue, or log new work against it",
|
|
10
10
|
flags: {
|
|
11
|
-
"--help": { kind: "boolean", description: "Show this help" },
|
|
12
11
|
"--log": { kind: "string", description: "Duration to log, e.g. 30m, 1h, 1h 30m, 2d, or bare minutes" },
|
|
13
12
|
"--date": { kind: "string", description: "Work date as YYYY-MM-DD", default: "today" },
|
|
14
13
|
"--text": { kind: "string", description: "Note describing the work" },
|
|
@@ -16,9 +15,9 @@ export const workSpec = {
|
|
|
16
15
|
"--limit": { kind: "string", description: "Maximum work items to list", default: String(DEFAULT_LIMIT) },
|
|
17
16
|
},
|
|
18
17
|
examples: [
|
|
19
|
-
"youtrack-axi work
|
|
20
|
-
'youtrack-axi work
|
|
21
|
-
"youtrack-axi work
|
|
18
|
+
"youtrack-axi work PROJ-123",
|
|
19
|
+
'youtrack-axi work PROJ-123 --log 1h30m --text "Traced the zoom regression"',
|
|
20
|
+
"youtrack-axi work PROJ-123 --log 2h --date 2026-09-05 --type Development",
|
|
22
21
|
],
|
|
23
22
|
};
|
|
24
23
|
export async function runWork(args, client) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"work.js","sourceRoot":"","sources":["../../src/commands/work.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EACL,cAAc,EACd,SAAS,EACT,WAAW,EACX,sBAAsB,EACtB,iBAAiB,GAElB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC9G,OAAO,EAAE,gBAAgB,EAAiC,MAAM,gBAAgB,CAAC;AAEjF,MAAM,aAAa,GAAG,EAAE,CAAC;AAEzB,MAAM,CAAC,MAAM,QAAQ,GAAgB;IACnC,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,kGAAkG;IACzG,WAAW,EAAE,0DAA0D;IACvE,KAAK,EAAE;QACL,
|
|
1
|
+
{"version":3,"file":"work.js","sourceRoot":"","sources":["../../src/commands/work.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -3,12 +3,19 @@ export interface Config {
|
|
|
3
3
|
token: string;
|
|
4
4
|
source: string;
|
|
5
5
|
}
|
|
6
|
-
export declare
|
|
7
|
-
export declare
|
|
8
|
-
export declare
|
|
6
|
+
export declare const CONFIG_PATH_ENV = "YOUTRACK_AXI_CONFIG";
|
|
7
|
+
export declare const URL_KEY = "YOUTRACK_URL";
|
|
8
|
+
export declare const TOKEN_KEY = "YOUTRACK_TOKEN";
|
|
9
|
+
export declare function userConfigPath(): string;
|
|
10
|
+
export interface ResolveConfigOptions {
|
|
11
|
+
configPath?: string | undefined;
|
|
12
|
+
}
|
|
13
|
+
export declare function resolveConfig(options?: ResolveConfigOptions): Config;
|
|
9
14
|
export interface WriteConfigResult {
|
|
10
15
|
path: string;
|
|
11
|
-
|
|
12
|
-
reason?: string;
|
|
16
|
+
created: boolean;
|
|
13
17
|
}
|
|
14
|
-
|
|
18
|
+
/** Merges into an existing file so comments and unrelated keys survive. */
|
|
19
|
+
export declare function writeConfig(url: string, token: string, configPath?: string): WriteConfigResult;
|
|
20
|
+
/** A token in a file readable by other accounts is worth saying out loud. */
|
|
21
|
+
export declare function permissionWarning(path: string): string | undefined;
|
package/dist/config.js
CHANGED
|
@@ -1,59 +1,136 @@
|
|
|
1
|
-
import { readFileSync, writeFileSync, mkdirSync, existsSync } from "node:fs";
|
|
1
|
+
import { readFileSync, writeFileSync, mkdirSync, existsSync, statSync } from "node:fs";
|
|
2
2
|
import { homedir } from "node:os";
|
|
3
3
|
import { dirname, join } from "node:path";
|
|
4
4
|
import { AxiError } from "axi-sdk-js";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
import { parseEnvFile, updateEnvFile } from "./dotenv.js";
|
|
6
|
+
export const CONFIG_PATH_ENV = "YOUTRACK_AXI_CONFIG";
|
|
7
|
+
export const URL_KEY = "YOUTRACK_URL";
|
|
8
|
+
export const TOKEN_KEY = "YOUTRACK_TOKEN";
|
|
9
|
+
function configDir() {
|
|
10
|
+
return join(process.env["XDG_CONFIG_HOME"] ?? join(homedir(), ".config"), "youtrack-axi");
|
|
8
11
|
}
|
|
9
|
-
export function
|
|
10
|
-
return join(
|
|
12
|
+
export function userConfigPath() {
|
|
13
|
+
return join(configDir(), ".env");
|
|
11
14
|
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
+
/** Read when present so a config written by an earlier version keeps working. */
|
|
16
|
+
function legacyUserConfigPath() {
|
|
17
|
+
return join(configDir(), "config.json");
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* A credentials file sets the same two variables the environment does. JSON is
|
|
21
|
+
* detected by shape rather than by extension, so a file holding other tooling's
|
|
22
|
+
* settings can still be named with --config.
|
|
23
|
+
*/
|
|
24
|
+
function parseConfigFile(path) {
|
|
25
|
+
let raw;
|
|
15
26
|
try {
|
|
16
|
-
|
|
17
|
-
return typeof parsed === "object" && parsed !== null ? parsed : undefined;
|
|
27
|
+
raw = readFileSync(path, "utf8");
|
|
18
28
|
}
|
|
19
29
|
catch {
|
|
20
|
-
throw new AxiError(`
|
|
21
|
-
|
|
30
|
+
throw new AxiError(`Cannot read the config file at ${path}`, "VALIDATION_ERROR", [
|
|
31
|
+
"Check the path and that the file is readable",
|
|
22
32
|
]);
|
|
23
33
|
}
|
|
34
|
+
if (raw.trimStart().startsWith("{")) {
|
|
35
|
+
let parsed;
|
|
36
|
+
try {
|
|
37
|
+
parsed = JSON.parse(raw);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
throw new AxiError(`Config file at ${path} is not valid JSON`, "VALIDATION_ERROR", [
|
|
41
|
+
`Or write it as an env file: ${URL_KEY}=https://<host>`,
|
|
42
|
+
]);
|
|
43
|
+
}
|
|
44
|
+
const record = parsed;
|
|
45
|
+
const values = {};
|
|
46
|
+
const take = (target, ...keys) => {
|
|
47
|
+
for (const key of keys) {
|
|
48
|
+
const value = record[key];
|
|
49
|
+
if (typeof value === "string" && value.length > 0) {
|
|
50
|
+
values[target] = value;
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
take(URL_KEY, URL_KEY, "url", "youtrack_url");
|
|
56
|
+
take(TOKEN_KEY, TOKEN_KEY, "token", "youtrack_token");
|
|
57
|
+
return values;
|
|
58
|
+
}
|
|
59
|
+
return parseEnvFile(raw);
|
|
24
60
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
61
|
+
/** An explicitly named file must exist; an implicit one is allowed to be absent. */
|
|
62
|
+
function readSource(path, explicit) {
|
|
63
|
+
if (!path)
|
|
64
|
+
return undefined;
|
|
65
|
+
if (!existsSync(path)) {
|
|
66
|
+
if (!explicit)
|
|
67
|
+
return undefined;
|
|
68
|
+
throw new AxiError(`No config file at ${path}`, "VALIDATION_ERROR", [
|
|
69
|
+
`Run \`youtrack-axi setup --config "${path}" --url "https://<host>" --token "<permanent-token>"\` to create it`,
|
|
70
|
+
]);
|
|
71
|
+
}
|
|
72
|
+
return { values: parseConfigFile(path), source: path };
|
|
73
|
+
}
|
|
74
|
+
export function resolveConfig(options = {}) {
|
|
75
|
+
const fileSources = [
|
|
76
|
+
readSource(options.configPath, true),
|
|
77
|
+
readSource(process.env[CONFIG_PATH_ENV], true),
|
|
78
|
+
readSource(userConfigPath(), false),
|
|
79
|
+
readSource(legacyUserConfigPath(), false),
|
|
80
|
+
].filter((source) => source !== undefined);
|
|
81
|
+
const fromFiles = (key) => {
|
|
82
|
+
for (const { values, source } of fileSources) {
|
|
83
|
+
const value = values[key];
|
|
84
|
+
if (typeof value === "string" && value.length > 0)
|
|
85
|
+
return { value, source };
|
|
86
|
+
}
|
|
87
|
+
return undefined;
|
|
88
|
+
};
|
|
89
|
+
const urlFile = fromFiles(URL_KEY);
|
|
90
|
+
const tokenFile = fromFiles(TOKEN_KEY);
|
|
91
|
+
const url = process.env[URL_KEY] || urlFile?.value;
|
|
92
|
+
const token = process.env[TOKEN_KEY] || tokenFile?.value;
|
|
34
93
|
if (!url || !token) {
|
|
35
94
|
const missing = [!url ? "URL" : undefined, !token ? "token" : undefined].filter(Boolean).join(" and ");
|
|
36
95
|
throw new AxiError(`YouTrack ${missing} not configured`, "CONFIG_ERROR", [
|
|
37
|
-
`Run \`youtrack-axi setup --url "https
|
|
38
|
-
|
|
96
|
+
`Run \`youtrack-axi setup --url "https://<host>" --token "<permanent-token>"\``,
|
|
97
|
+
`Or set ${URL_KEY} and ${TOKEN_KEY}, or point --config or ${CONFIG_PATH_ENV} at an env file setting them`,
|
|
39
98
|
]);
|
|
40
99
|
}
|
|
41
|
-
const source = process.env
|
|
100
|
+
const source = process.env[URL_KEY] && process.env[TOKEN_KEY]
|
|
101
|
+
? "environment"
|
|
102
|
+
: (tokenFile?.source ?? urlFile?.source ?? "environment");
|
|
42
103
|
return { url: url.replace(/\/+$/, ""), token, source };
|
|
43
104
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
105
|
+
/** Merges into an existing file so comments and unrelated keys survive. */
|
|
106
|
+
export function writeConfig(url, token, configPath) {
|
|
107
|
+
const path = configPath ?? userConfigPath();
|
|
108
|
+
const created = !existsSync(path);
|
|
109
|
+
const existing = created ? "" : readFileSync(path, "utf8");
|
|
110
|
+
if (!created && existing.trimStart().startsWith("{")) {
|
|
111
|
+
throw new AxiError(`Refusing to overwrite the JSON config at ${path}`, "VALIDATION_ERROR", [
|
|
112
|
+
`Edit it by hand, or pass --config with a path ending in .env`,
|
|
113
|
+
`Credentials files are env files: ${URL_KEY}=... and ${TOKEN_KEY}=...`,
|
|
114
|
+
]);
|
|
52
115
|
}
|
|
53
|
-
const path = dedicatedConfigPath();
|
|
54
116
|
mkdirSync(dirname(path), { recursive: true });
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
117
|
+
writeFileSync(path, updateEnvFile(existing, { [URL_KEY]: url.replace(/\/+$/, ""), [TOKEN_KEY]: token }), {
|
|
118
|
+
mode: 0o600,
|
|
119
|
+
});
|
|
120
|
+
return { path, created };
|
|
121
|
+
}
|
|
122
|
+
/** A token in a file readable by other accounts is worth saying out loud. */
|
|
123
|
+
export function permissionWarning(path) {
|
|
124
|
+
if (path === "environment")
|
|
125
|
+
return undefined;
|
|
126
|
+
try {
|
|
127
|
+
const mode = statSync(path).mode & 0o077;
|
|
128
|
+
if (mode === 0)
|
|
129
|
+
return undefined;
|
|
130
|
+
return `${path} is readable by other accounts - run \`chmod 600 ${path}\``;
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
return undefined;
|
|
134
|
+
}
|
|
58
135
|
}
|
|
59
136
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/dotenv.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A minimal `.env` reader and writer. Only what a credentials file needs:
|
|
3
|
+
* `KEY=value`, optional `export`, `#` comments, and single or double quoting.
|
|
4
|
+
* Writing is line-wise so hand-written comments and ordering survive an update.
|
|
5
|
+
*/
|
|
6
|
+
export declare function parseEnvFile(contents: string): Record<string, string>;
|
|
7
|
+
/** Rewrites the given keys in place, appending any that are not already present. */
|
|
8
|
+
export declare function updateEnvFile(contents: string, updates: Record<string, string>): string;
|
package/dist/dotenv.js
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A minimal `.env` reader and writer. Only what a credentials file needs:
|
|
3
|
+
* `KEY=value`, optional `export`, `#` comments, and single or double quoting.
|
|
4
|
+
* Writing is line-wise so hand-written comments and ordering survive an update.
|
|
5
|
+
*/
|
|
6
|
+
const LINE = /^\s*(?:export\s+)?([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(.*?)\s*$/;
|
|
7
|
+
export function parseEnvFile(contents) {
|
|
8
|
+
const values = {};
|
|
9
|
+
for (const line of contents.split(/\r?\n/)) {
|
|
10
|
+
if (line.trim().length === 0 || line.trimStart().startsWith("#"))
|
|
11
|
+
continue;
|
|
12
|
+
const match = LINE.exec(line);
|
|
13
|
+
if (!match)
|
|
14
|
+
continue;
|
|
15
|
+
const [, key, rawValue] = match;
|
|
16
|
+
values[key] = unquote(rawValue);
|
|
17
|
+
}
|
|
18
|
+
return values;
|
|
19
|
+
}
|
|
20
|
+
function unquote(raw) {
|
|
21
|
+
if (raw.startsWith('"') && raw.endsWith('"') && raw.length >= 2) {
|
|
22
|
+
return raw
|
|
23
|
+
.slice(1, -1)
|
|
24
|
+
.replace(/\\n/g, "\n")
|
|
25
|
+
.replace(/\\r/g, "\r")
|
|
26
|
+
.replace(/\\t/g, "\t")
|
|
27
|
+
.replace(/\\(["\\])/g, "$1");
|
|
28
|
+
}
|
|
29
|
+
if (raw.startsWith("'") && raw.endsWith("'") && raw.length >= 2) {
|
|
30
|
+
return raw.slice(1, -1);
|
|
31
|
+
}
|
|
32
|
+
// An unquoted value ends at an inline comment, which must be preceded by space.
|
|
33
|
+
return raw.replace(/\s+#.*$/, "").trim();
|
|
34
|
+
}
|
|
35
|
+
function quote(value) {
|
|
36
|
+
return `"${value.replace(/([\\"])/g, "\\$1")}"`;
|
|
37
|
+
}
|
|
38
|
+
/** Rewrites the given keys in place, appending any that are not already present. */
|
|
39
|
+
export function updateEnvFile(contents, updates) {
|
|
40
|
+
const remaining = new Map(Object.entries(updates));
|
|
41
|
+
const lines = contents.length === 0 ? [] : contents.split(/\r?\n/);
|
|
42
|
+
const rewritten = lines.map((line) => {
|
|
43
|
+
const match = LINE.exec(line);
|
|
44
|
+
if (!match)
|
|
45
|
+
return line;
|
|
46
|
+
const key = match[1];
|
|
47
|
+
if (!remaining.has(key))
|
|
48
|
+
return line;
|
|
49
|
+
const value = remaining.get(key);
|
|
50
|
+
remaining.delete(key);
|
|
51
|
+
return `${line.trimStart().startsWith("export ") ? "export " : ""}${key}=${quote(value)}`;
|
|
52
|
+
});
|
|
53
|
+
while (rewritten.length > 0 && rewritten[rewritten.length - 1].trim().length === 0) {
|
|
54
|
+
rewritten.pop();
|
|
55
|
+
}
|
|
56
|
+
for (const [key, value] of remaining) {
|
|
57
|
+
rewritten.push(`${key}=${quote(value)}`);
|
|
58
|
+
}
|
|
59
|
+
return `${rewritten.join("\n")}\n`;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=dotenv.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dotenv.js","sourceRoot":"","sources":["../src/dotenv.ts"],"names":[],"mappings":"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"}
|
package/dist/flags.d.ts
CHANGED
|
@@ -11,11 +11,22 @@ export interface CommandSpec {
|
|
|
11
11
|
flags: Record<string, FlagSpec>;
|
|
12
12
|
examples: string[];
|
|
13
13
|
}
|
|
14
|
+
/**
|
|
15
|
+
* Flags accepted by every command. Per AXI, `--help` is universal and a CLI may
|
|
16
|
+
* standardize additional globals; `--config` selects the credential file, which
|
|
17
|
+
* is orthogonal to what any single command does.
|
|
18
|
+
*/
|
|
19
|
+
export declare const GLOBAL_FLAGS: Record<string, FlagSpec>;
|
|
14
20
|
export interface ParsedArgs {
|
|
15
21
|
positionals: string[];
|
|
16
22
|
flags: Record<string, string | true>;
|
|
17
23
|
}
|
|
18
24
|
export declare function parseArgs(spec: CommandSpec, args: string[]): ParsedArgs;
|
|
25
|
+
/**
|
|
26
|
+
* Read before command dispatch, so credential resolution can happen outside any
|
|
27
|
+
* single command's argument parsing.
|
|
28
|
+
*/
|
|
29
|
+
export declare function configPathFromArgs(args: string[]): string | undefined;
|
|
19
30
|
export declare function requireString(parsed: ParsedArgs, spec: CommandSpec, name: string): string;
|
|
20
31
|
export declare function optionalString(parsed: ParsedArgs, name: string): string | undefined;
|
|
21
32
|
export declare function boolFlag(parsed: ParsedArgs, name: string): boolean;
|
package/dist/flags.js
CHANGED
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
import { AxiError } from "axi-sdk-js";
|
|
2
|
+
/**
|
|
3
|
+
* Flags accepted by every command. Per AXI, `--help` is universal and a CLI may
|
|
4
|
+
* standardize additional globals; `--config` selects the credential file, which
|
|
5
|
+
* is orthogonal to what any single command does.
|
|
6
|
+
*/
|
|
7
|
+
export const GLOBAL_FLAGS = {
|
|
8
|
+
"--help": { kind: "boolean", description: "Show this help" },
|
|
9
|
+
"--config": { kind: "string", description: "Path to an env file setting YOUTRACK_URL and YOUTRACK_TOKEN" },
|
|
10
|
+
};
|
|
2
11
|
/** Flags an agent is likely to guess from other trackers, pointed at the real name. */
|
|
3
12
|
const RENAMED_FLAGS = {
|
|
4
13
|
"--title": "--summary",
|
|
@@ -24,7 +33,7 @@ export function parseArgs(spec, args) {
|
|
|
24
33
|
const eq = arg.indexOf("=");
|
|
25
34
|
const name = eq === -1 ? arg : arg.slice(0, eq);
|
|
26
35
|
const inlineValue = eq === -1 ? undefined : arg.slice(eq + 1);
|
|
27
|
-
const flag = spec.flags[name];
|
|
36
|
+
const flag = spec.flags[name] ?? GLOBAL_FLAGS[name];
|
|
28
37
|
if (!flag) {
|
|
29
38
|
throw unknownFlag(spec, name);
|
|
30
39
|
}
|
|
@@ -49,12 +58,32 @@ export function parseArgs(spec, args) {
|
|
|
49
58
|
}
|
|
50
59
|
function unknownFlag(spec, name) {
|
|
51
60
|
const renamed = RENAMED_FLAGS[name];
|
|
52
|
-
const
|
|
61
|
+
const globals = Object.keys(GLOBAL_FLAGS).join(" and ");
|
|
62
|
+
const valid = Object.keys(spec.flags).join(", ");
|
|
53
63
|
const suggestions = renamed && spec.flags[renamed]
|
|
54
64
|
? [`${name} is not a flag here; use ${renamed} instead`, `Run \`youtrack-axi ${spec.usage}\``]
|
|
55
|
-
: [
|
|
65
|
+
: [
|
|
66
|
+
valid.length > 0
|
|
67
|
+
? `valid flags for \`${spec.name}\`: ${valid} (${globals} always allowed)`
|
|
68
|
+
: `\`${spec.name}\` takes no flags of its own (${globals} always allowed)`,
|
|
69
|
+
`Run \`youtrack-axi ${spec.usage}\``,
|
|
70
|
+
];
|
|
56
71
|
return new AxiError(`Unknown flag ${name} for \`${spec.name}\``, "VALIDATION_ERROR", suggestions);
|
|
57
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* Read before command dispatch, so credential resolution can happen outside any
|
|
75
|
+
* single command's argument parsing.
|
|
76
|
+
*/
|
|
77
|
+
export function configPathFromArgs(args) {
|
|
78
|
+
for (let i = 0; i < args.length; i++) {
|
|
79
|
+
const arg = args[i];
|
|
80
|
+
if (arg === "--config")
|
|
81
|
+
return args[i + 1];
|
|
82
|
+
if (arg.startsWith("--config="))
|
|
83
|
+
return arg.slice("--config=".length);
|
|
84
|
+
}
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
58
87
|
export function requireString(parsed, spec, name) {
|
|
59
88
|
const value = parsed.flags[name];
|
|
60
89
|
if (typeof value !== "string" || value.length === 0) {
|
|
@@ -108,8 +137,6 @@ export function rejectExtraPositionals(parsed, spec, allowed) {
|
|
|
108
137
|
export function renderCommandHelp(spec) {
|
|
109
138
|
const flags = {};
|
|
110
139
|
for (const [name, flag] of Object.entries(spec.flags)) {
|
|
111
|
-
if (name === "--help")
|
|
112
|
-
continue;
|
|
113
140
|
flags[name] = flag.default ? `${flag.description} (default: ${flag.default})` : flag.description;
|
|
114
141
|
}
|
|
115
142
|
return {
|
|
@@ -117,6 +144,7 @@ export function renderCommandHelp(spec) {
|
|
|
117
144
|
description: spec.description,
|
|
118
145
|
usage: `youtrack-axi ${spec.usage}`,
|
|
119
146
|
...(Object.keys(flags).length > 0 ? { flags } : {}),
|
|
147
|
+
globals: Object.fromEntries(Object.entries(GLOBAL_FLAGS).map(([name, flag]) => [name, flag.description])),
|
|
120
148
|
examples: spec.examples,
|
|
121
149
|
};
|
|
122
150
|
}
|
package/dist/flags.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flags.js","sourceRoot":"","sources":["../src/flags.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAkBtC,uFAAuF;AACvF,MAAM,aAAa,GAA2B;IAC5C,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,eAAe;IACzB,UAAU,EAAE,SAAS;IACrB,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,SAAS;IACpB,WAAW,EAAE,QAAQ;IACrB,WAAW,EAAE,QAAQ;IACrB,YAAY,EAAE,OAAO;IACrB,QAAQ,EAAE,OAAO;IACjB,SAAS,EAAE,UAAU;CACtB,CAAC;AAOF,MAAM,UAAU,SAAS,CAAC,IAAiB,EAAE,IAAc;IACzD,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,KAAK,GAAkC,EAAE,CAAC;IAEhD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAW,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC1C,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACtB,SAAS;QACX,CAAC;QACD,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAChD,MAAM,WAAW,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"flags.js","sourceRoot":"","sources":["../src/flags.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAkBtC;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAA6B;IACpD,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE;IAC5D,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6DAA6D,EAAE;CAC3G,CAAC;AAEF,uFAAuF;AACvF,MAAM,aAAa,GAA2B;IAC5C,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,eAAe;IACzB,UAAU,EAAE,SAAS;IACrB,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,SAAS;IACpB,WAAW,EAAE,QAAQ;IACrB,WAAW,EAAE,QAAQ;IACrB,YAAY,EAAE,OAAO;IACrB,QAAQ,EAAE,OAAO;IACjB,SAAS,EAAE,UAAU;CACtB,CAAC;AAOF,MAAM,UAAU,SAAS,CAAC,IAAiB,EAAE,IAAc;IACzD,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,KAAK,GAAkC,EAAE,CAAC;IAEhD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAW,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC1C,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACtB,SAAS;QACX,CAAC;QACD,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAChD,MAAM,WAAW,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;QAEpD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5B,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;gBAC9B,MAAM,IAAI,QAAQ,CAAC,QAAQ,IAAI,UAAU,IAAI,CAAC,IAAI,0BAA0B,EAAE,kBAAkB,EAAE;oBAChG,sBAAsB,IAAI,CAAC,KAAK,IAAI;iBACrC,CAAC,CAAC;YACL,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YACnB,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,WAAW,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACvC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,IAAI,QAAQ,CAAC,QAAQ,IAAI,UAAU,IAAI,CAAC,IAAI,qBAAqB,EAAE,kBAAkB,EAAE;gBAC3F,sBAAsB,IAAI,CAAC,KAAK,IAAI;aACrC,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IACtB,CAAC;IAED,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AAChC,CAAC;AAED,SAAS,WAAW,CAAC,IAAiB,EAAE,IAAY;IAClD,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;QAChD,CAAC,CAAC,CAAC,GAAG,IAAI,4BAA4B,OAAO,UAAU,EAAE,sBAAsB,IAAI,CAAC,KAAK,IAAI,CAAC;QAC9F,CAAC,CAAC;YACE,KAAK,CAAC,MAAM,GAAG,CAAC;gBACd,CAAC,CAAC,qBAAqB,IAAI,CAAC,IAAI,OAAO,KAAK,KAAK,OAAO,kBAAkB;gBAC1E,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,iCAAiC,OAAO,kBAAkB;YAC5E,sBAAsB,IAAI,CAAC,KAAK,IAAI;SACrC,CAAC;IACN,OAAO,IAAI,QAAQ,CAAC,gBAAgB,IAAI,UAAU,IAAI,CAAC,IAAI,IAAI,EAAE,kBAAkB,EAAE,WAAW,CAAC,CAAC;AACpG,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAc;IAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAW,CAAC;QAC9B,IAAI,GAAG,KAAK,UAAU;YAAE,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3C,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC;YAAE,OAAO,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAkB,EAAE,IAAiB,EAAE,IAAY;IAC/E,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,QAAQ,CAAC,GAAG,IAAI,sBAAsB,IAAI,CAAC,IAAI,IAAI,EAAE,kBAAkB,EAAE;YACjF,sBAAsB,IAAI,CAAC,KAAK,IAAI;YACpC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;SACzD,CAAC,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAkB,EAAE,IAAY;IAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,MAAkB,EAAE,IAAY;IACvD,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAkB,EAAE,IAAiB,EAAE,IAAY,EAAE,QAAgB;IAC/F,MAAM,GAAG,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACzC,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACvC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,QAAQ,CAAC,GAAG,IAAI,qCAAqC,GAAG,GAAG,EAAE,kBAAkB,EAAE;YACzF,sBAAsB,IAAI,CAAC,KAAK,IAAI;SACrC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAkB,EAAE,IAAiB,EAAE,KAAa,EAAE,KAAa;IACnG,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,QAAQ,CAAC,GAAG,KAAK,sBAAsB,IAAI,CAAC,IAAI,IAAI,EAAE,kBAAkB,EAAE;YAClF,sBAAsB,IAAI,CAAC,KAAK,IAAI;YACpC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;SACzD,CAAC,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAkB,EAAE,IAAiB,EAAE,OAAe;IAC3F,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,OAAO,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1D,MAAM,IAAI,QAAQ,CAAC,wBAAwB,KAAK,WAAW,IAAI,CAAC,IAAI,IAAI,EAAE,kBAAkB,EAAE;YAC5F,sBAAsB,IAAI,CAAC,KAAK,IAAI;YACpC,OAAO,KAAK,CAAC;gBACX,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,kCAAkC;gBAClD,CAAC,CAAC,yCAAyC,IAAI,CAAC,KAAK,EAAE;SAC1D,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAiB;IACjD,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACtD,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,cAAc,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;IACnG,CAAC;IACD,OAAO;QACL,OAAO,EAAE,IAAI,CAAC,IAAI;QAClB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,KAAK,EAAE,gBAAgB,IAAI,CAAC,KAAK,EAAE;QACnC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,OAAO,EAAE,MAAM,CAAC,WAAW,CACzB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAC7E;QACD,QAAQ,EAAE,IAAI,CAAC,QAAQ;KACxB,CAAC;AACJ,CAAC"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const VERSION = "0.1.
|
|
1
|
+
export declare const VERSION = "0.1.2";
|
package/dist/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const VERSION = "0.1.
|
|
1
|
+
export const VERSION = "0.1.2";
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
package/dist/youtrack.d.ts
CHANGED
|
@@ -37,8 +37,15 @@ export interface WorkItem {
|
|
|
37
37
|
} | null;
|
|
38
38
|
}
|
|
39
39
|
export declare class YouTrackClient {
|
|
40
|
-
private
|
|
41
|
-
|
|
40
|
+
#private;
|
|
41
|
+
private readonly configSource;
|
|
42
|
+
/**
|
|
43
|
+
* Accepts a thunk so credentials are resolved on first use rather than at
|
|
44
|
+
* construction. Argument validation therefore always runs first, and an
|
|
45
|
+
* unknown flag reports itself instead of a missing-config error.
|
|
46
|
+
*/
|
|
47
|
+
constructor(configSource: Config | (() => Config));
|
|
48
|
+
private get config();
|
|
42
49
|
get baseUrl(): string;
|
|
43
50
|
get<T>(path: string, params?: Record<string, string | number | undefined>): Promise<T>;
|
|
44
51
|
post<T>(path: string, body: unknown, params?: Record<string, string | number | undefined>): Promise<T>;
|
package/dist/youtrack.js
CHANGED
|
@@ -1,9 +1,19 @@
|
|
|
1
1
|
import { AxiError } from "axi-sdk-js";
|
|
2
2
|
const REQUEST_TIMEOUT_MS = 30_000;
|
|
3
3
|
export class YouTrackClient {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
configSource;
|
|
5
|
+
#resolved;
|
|
6
|
+
/**
|
|
7
|
+
* Accepts a thunk so credentials are resolved on first use rather than at
|
|
8
|
+
* construction. Argument validation therefore always runs first, and an
|
|
9
|
+
* unknown flag reports itself instead of a missing-config error.
|
|
10
|
+
*/
|
|
11
|
+
constructor(configSource) {
|
|
12
|
+
this.configSource = configSource;
|
|
13
|
+
}
|
|
14
|
+
get config() {
|
|
15
|
+
this.#resolved ??= typeof this.configSource === "function" ? this.configSource() : this.configSource;
|
|
16
|
+
return this.#resolved;
|
|
7
17
|
}
|
|
8
18
|
get baseUrl() {
|
|
9
19
|
return this.config.url;
|
package/dist/youtrack.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"youtrack.js","sourceRoot":"","sources":["../src/youtrack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAoCtC,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAElC,MAAM,OAAO,cAAc;
|
|
1
|
+
{"version":3,"file":"youtrack.js","sourceRoot":"","sources":["../src/youtrack.ts"],"names":[],"mappings":"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"}
|