redmine-devrelay-client 0.5.2 → 0.6.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.
package/README.ko.md CHANGED
@@ -4,12 +4,12 @@
4
4
 
5
5
  [redmine-devrelay](https://www.npmjs.com/package/redmine-devrelay) MCP 서버가 사용하는 Redmine REST 클라이언트입니다.
6
6
 
7
- - **버전:** `0.5.2` (MCP 서버와 맞춤)
7
+ - **버전:** `0.6.0` (MCP 서버와 맞춤)
8
8
  - **GitHub:** https://github.com/HuijungYoon/devrelay
9
9
  - **MCP 서버:** [redmine-devrelay](https://www.npmjs.com/package/redmine-devrelay)
10
10
 
11
11
  ```bash
12
- npm install redmine-devrelay-client@0.5.2
12
+ npm install redmine-devrelay-client@0.6.0
13
13
  ```
14
14
 
15
15
  ## 지원 기능
package/README.md CHANGED
@@ -4,12 +4,12 @@
4
4
 
5
5
  Redmine REST client used by the [redmine-devrelay](https://www.npmjs.com/package/redmine-devrelay) MCP server.
6
6
 
7
- - **Version:** `0.5.2` (aligned with the MCP server)
7
+ - **Version:** `0.6.0` (aligned with the MCP server)
8
8
  - **GitHub:** https://github.com/HuijungYoon/devrelay
9
9
  - **MCP server:** [redmine-devrelay](https://www.npmjs.com/package/redmine-devrelay)
10
10
 
11
11
  ```bash
12
- npm install redmine-devrelay-client@0.5.2
12
+ npm install redmine-devrelay-client@0.6.0
13
13
  ```
14
14
 
15
15
  ## Features
package/dist/client.d.ts CHANGED
@@ -1,11 +1,12 @@
1
1
  import type { RedmineConfig } from "./config.js";
2
2
  import { RedmineHttp } from "./http.js";
3
- import type { AddCommentResult, AddIssueAttachmentsInput, AddIssueAttachmentsResult, AttachmentInput, AttachmentPreview, CreateIssueInput, CreateIssueResult, IssueInclude, ListProjectMembersResult, ListProjectsResult, NormalizedIssueDetail, RedmineUser, SearchIssuesInput, SearchIssuesResult, SearchUsersResult, UpdateIssueInput, UpdateIssueResult, UpdateStatusResult, UploadedAttachment } from "./types.js";
3
+ import type { AddCommentResult, AddIssueAttachmentsInput, AddIssueAttachmentsResult, AddIssueRelationInput, AttachmentInput, AttachmentPreview, CreateIssueInput, CreateIssueResult, IssueInclude, IssueRelation, ListIssueRelationsResult, ListProjectMembersResult, ListProjectsResult, NormalizedIssueDetail, RedmineUser, RemoveIssueRelationResult, ReplaceIssueRelationInput, ReplaceIssueRelationResult, SearchIssuesInput, SearchIssuesResult, SearchUsersResult, UpdateIssueInput, UpdateIssueResult, UpdateStatusResult, UploadedAttachment } from "./types.js";
4
4
  export declare class RedmineClient {
5
5
  readonly http: RedmineHttp;
6
6
  readonly config: RedmineConfig;
7
7
  constructor(http: RedmineHttp, config: RedmineConfig);
8
8
  static fromEnv(env?: NodeJS.ProcessEnv): RedmineClient;
9
+ static fromConfig(config: RedmineConfig): RedmineClient;
9
10
  getCurrentUser(): Promise<RedmineUser>;
10
11
  listProjects(opts?: {
11
12
  search?: string;
@@ -26,6 +27,13 @@ export declare class RedmineClient {
26
27
  }): Promise<NormalizedIssueDetail>;
27
28
  createIssue(input: CreateIssueInput): Promise<CreateIssueResult>;
28
29
  updateIssue(input: UpdateIssueInput): Promise<UpdateIssueResult>;
30
+ /** 연결된 일감 목록 (GET /issues/:id/relations.json) */
31
+ listIssueRelations(issueId: number): Promise<ListIssueRelationsResult>;
32
+ getIssueRelation(relationId: number): Promise<IssueRelation>;
33
+ addIssueRelation(input: AddIssueRelationInput): Promise<IssueRelation>;
34
+ removeIssueRelation(relationId: number): Promise<RemoveIssueRelationResult>;
35
+ /** Change a relation (delete + re-create; Redmine has no update endpoint) */
36
+ replaceIssueRelation(input: ReplaceIssueRelationInput): Promise<ReplaceIssueRelationResult>;
29
37
  inspectAttachments(inputs: AttachmentInput[]): AttachmentPreview[];
30
38
  uploadFile(input: AttachmentInput): Promise<UploadedAttachment>;
31
39
  uploadAttachments(inputs: AttachmentInput[]): Promise<UploadedAttachment[]>;
package/dist/client.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { loadConfig } from "./config.js";
2
2
  import { RedmineHttp } from "./http.js";
3
3
  import { getIssue, searchIssues } from "./issues.js";
4
+ import { addIssueRelation, getIssueRelation, listIssueRelations, removeIssueRelation, replaceIssueRelation, } from "./relations.js";
4
5
  import { listProjectMembers } from "./memberships.js";
5
6
  import { searchUsers } from "./users.js";
6
7
  import { inspectAttachments, uploadAttachments, uploadFile, } from "./attachments.js";
@@ -35,6 +36,9 @@ export class RedmineClient {
35
36
  const config = loadConfig(env);
36
37
  return new RedmineClient(new RedmineHttp(config), config);
37
38
  }
39
+ static fromConfig(config) {
40
+ return new RedmineClient(new RedmineHttp(config), config);
41
+ }
38
42
  async getCurrentUser() {
39
43
  const data = await this.http.getJson("/users/current.json");
40
44
  return normalizeUser(data.user);
@@ -85,6 +89,23 @@ export class RedmineClient {
85
89
  updateIssue(input) {
86
90
  return updateIssue(this.http, input);
87
91
  }
92
+ /** 연결된 일감 목록 (GET /issues/:id/relations.json) */
93
+ listIssueRelations(issueId) {
94
+ return listIssueRelations(this.http, issueId);
95
+ }
96
+ getIssueRelation(relationId) {
97
+ return getIssueRelation(this.http, relationId);
98
+ }
99
+ addIssueRelation(input) {
100
+ return addIssueRelation(this.http, input);
101
+ }
102
+ removeIssueRelation(relationId) {
103
+ return removeIssueRelation(this.http, relationId);
104
+ }
105
+ /** Change a relation (delete + re-create; Redmine has no update endpoint) */
106
+ replaceIssueRelation(input) {
107
+ return replaceIssueRelation(this.http, input);
108
+ }
88
109
  inspectAttachments(inputs) {
89
110
  return inspectAttachments(inputs);
90
111
  }
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -10,4 +10,14 @@ export type RedmineConfig = {
10
10
  defaultProjectId?: number;
11
11
  userAgent: string;
12
12
  };
13
+ export declare function configFromCredentials(input: {
14
+ baseUrl: string;
15
+ apiKey: string;
16
+ allowedHosts?: string[];
17
+ caCertPath?: string;
18
+ connectTimeoutMs?: number;
19
+ requestTimeoutMs?: number;
20
+ maxResultCount?: number;
21
+ logLevel?: string;
22
+ }): RedmineConfig;
13
23
  export declare function loadConfig(env?: NodeJS.ProcessEnv): RedmineConfig;
package/dist/config.js CHANGED
@@ -32,16 +32,7 @@ function parseIntEnv(env, name, fallback) {
32
32
  }
33
33
  return n;
34
34
  }
35
- export function loadConfig(env = process.env) {
36
- const urlRaw = env.REDMINE_URL?.trim();
37
- const apiKey = env.REDMINE_API_KEY?.trim();
38
- if (!urlRaw || !apiKey) {
39
- throw new RedmineError({
40
- code: "REDMINE_VALIDATION_ERROR",
41
- message: "REDMINE_URL and REDMINE_API_KEY are required",
42
- check: ["Export REDMINE_URL", "Export REDMINE_API_KEY"],
43
- });
44
- }
35
+ function validateBaseUrl(urlRaw, allowedHosts, urlName, allowedHostsName) {
45
36
  let parsed;
46
37
  try {
47
38
  parsed = new URL(urlRaw);
@@ -49,7 +40,7 @@ export function loadConfig(env = process.env) {
49
40
  catch {
50
41
  throw new RedmineError({
51
42
  code: "REDMINE_VALIDATION_ERROR",
52
- message: `Invalid REDMINE_URL: ${urlRaw}`,
43
+ message: `Invalid ${urlName}: ${urlRaw}`,
53
44
  check: ["Use an absolute URL like https://redmine.example.com"],
54
45
  });
55
46
  }
@@ -66,17 +57,13 @@ export function loadConfig(env = process.env) {
66
57
  message: "Forbidden link-local/metadata host",
67
58
  });
68
59
  }
69
- const allowedHosts = env.REDMINE_ALLOWED_HOSTS
70
- ?.split(",")
71
- .map((h) => h.trim().toLowerCase())
72
- .filter(Boolean);
73
60
  if (allowedHosts?.length &&
74
61
  !allowedHosts.includes(host) &&
75
62
  !isPrivateIpv4(host)) {
76
63
  throw new RedmineError({
77
64
  code: "REDMINE_VALIDATION_ERROR",
78
- message: `Host ${host} is not in REDMINE_ALLOWED_HOSTS`,
79
- check: ["Add the Redmine hostname to REDMINE_ALLOWED_HOSTS"],
65
+ message: `Host ${host} is not in ${allowedHostsName}`,
66
+ check: [`Add the Redmine hostname to ${allowedHostsName}`],
80
67
  });
81
68
  }
82
69
  const isInsecureHttpAllowed = parsed.protocol === "http:" &&
@@ -85,7 +72,8 @@ export function loadConfig(env = process.env) {
85
72
  if (parsed.protocol !== "https:" && !isInsecureHttpAllowed) {
86
73
  throw new RedmineError({
87
74
  code: "REDMINE_VALIDATION_ERROR",
88
- message: "REDMINE_URL must use https (http only for private IPs or allowlisted local hosts)",
75
+ message: `${urlName} must use https ` +
76
+ "(http only for private IPs or allowlisted local hosts)",
89
77
  check: [
90
78
  "Use https://...",
91
79
  "Or use an RFC1918 private IP over http",
@@ -93,7 +81,47 @@ export function loadConfig(env = process.env) {
93
81
  ],
94
82
  });
95
83
  }
96
- const baseUrl = urlRaw.replace(/\/$/, "");
84
+ return urlRaw.replace(/\/$/, "");
85
+ }
86
+ function normalizeAllowedHosts(hosts) {
87
+ return hosts?.map((host) => host.trim().toLowerCase()).filter(Boolean);
88
+ }
89
+ export function configFromCredentials(input) {
90
+ const urlRaw = input.baseUrl?.trim();
91
+ const apiKey = input.apiKey?.trim();
92
+ if (!urlRaw || !apiKey) {
93
+ throw new RedmineError({
94
+ code: "REDMINE_VALIDATION_ERROR",
95
+ message: "baseUrl and apiKey are required",
96
+ check: ["Provide Redmine URL", "Provide Redmine API key"],
97
+ });
98
+ }
99
+ const allowedHosts = normalizeAllowedHosts(input.allowedHosts);
100
+ const baseUrl = validateBaseUrl(urlRaw, allowedHosts, "baseUrl", "allowedHosts");
101
+ return {
102
+ baseUrl,
103
+ apiKey,
104
+ connectTimeoutMs: input.connectTimeoutMs ?? 5000,
105
+ requestTimeoutMs: input.requestTimeoutMs ?? 15000,
106
+ maxResultCount: input.maxResultCount ?? 100,
107
+ logLevel: input.logLevel ?? "info",
108
+ caCertPath: input.caCertPath || undefined,
109
+ allowedHosts,
110
+ userAgent: "redmine-mcp/0.1.0",
111
+ };
112
+ }
113
+ export function loadConfig(env = process.env) {
114
+ const urlRaw = env.REDMINE_URL?.trim();
115
+ const apiKey = env.REDMINE_API_KEY?.trim();
116
+ if (!urlRaw || !apiKey) {
117
+ throw new RedmineError({
118
+ code: "REDMINE_VALIDATION_ERROR",
119
+ message: "REDMINE_URL and REDMINE_API_KEY are required",
120
+ check: ["Export REDMINE_URL", "Export REDMINE_API_KEY"],
121
+ });
122
+ }
123
+ const allowedHosts = normalizeAllowedHosts(env.REDMINE_ALLOWED_HOSTS?.split(","));
124
+ const baseUrl = validateBaseUrl(urlRaw, allowedHosts, "REDMINE_URL", "REDMINE_ALLOWED_HOSTS");
97
125
  return {
98
126
  baseUrl,
99
127
  apiKey,
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/http.d.ts CHANGED
@@ -10,6 +10,7 @@ export declare class RedmineHttp {
10
10
  getJson<T>(path: string, query?: Record<string, string | number | undefined>): Promise<T>;
11
11
  postJson<T>(path: string, body: unknown): Promise<T | undefined>;
12
12
  putJson<T>(path: string, body: unknown): Promise<T | undefined>;
13
+ deleteJson<T>(path: string): Promise<T | undefined>;
13
14
  postBinary<T>(path: string, body: Buffer | Uint8Array, headers: Record<string, string>, query?: Record<string, string | number | undefined>): Promise<T>;
14
15
  private sendJson;
15
16
  private buildUrl;
package/dist/http.js CHANGED
@@ -55,6 +55,9 @@ export class RedmineHttp {
55
55
  async putJson(path, body) {
56
56
  return this.sendJson("PUT", path, body);
57
57
  }
58
+ async deleteJson(path) {
59
+ return this.sendJson("DELETE", path);
60
+ }
58
61
  async postBinary(path, body, headers, query) {
59
62
  const url = this.buildUrl(path, query);
60
63
  try {
@@ -78,7 +81,7 @@ export class RedmineHttp {
78
81
  async sendJson(method, path, body) {
79
82
  const url = this.buildUrl(path);
80
83
  try {
81
- const response = await this.request(url, method, JSON.stringify(body));
84
+ const response = await this.request(url, method, body === undefined ? undefined : JSON.stringify(body));
82
85
  const bodyText = await response.text();
83
86
  if (!response.ok) {
84
87
  this.mapStatus(response.status, bodyText, path);
package/dist/http.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,KAAK,EAAmB,MAAM,QAAQ,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAChD,MAAM,WAAW,GAAG,CAAC,CAAC;AAMtB,MAAM,OAAO,WAAW;IAIH;IACA;IAJF,UAAU,CAAc;IAEzC,YACmB,MAAqB,EACrB,OAA2B,EAAE;QAD7B,WAAM,GAAN,MAAM,CAAe;QACrB,SAAI,GAAJ,IAAI,CAAyB;QAE9C,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACtB,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC3C,IAAI,CAAC,UAAU,GAAG,IAAI,KAAK,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CACX,IAAY,EACZ,KAAmD;QAEnD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACvC,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,SAAkB,CAAC;QAEvB,OAAO,OAAO,IAAI,WAAW,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACzC,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,GAAG,WAAW,EAAE,CAAC;oBAC5D,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;oBAC1C,OAAO,IAAI,CAAC,CAAC;oBACb,SAAS;gBACX,CAAC;gBACD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACjB,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;oBACvC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBAC5C,CAAC;gBACD,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAM,CAAC;YACtC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,YAAY,EAAE,CAAC;oBAChC,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBAC5B,CAAC;gBACD,SAAS,GAAG,GAAG,CAAC;gBAChB,IAAI,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,OAAO,GAAG,WAAW,EAAE,CAAC;oBAC/D,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;oBAC1C,OAAO,IAAI,CAAC,CAAC;oBACb,SAAS;gBACX,CAAC;gBACD,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAED,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAI,IAAY,EAAE,IAAa;QAC3C,OAAO,IAAI,CAAC,QAAQ,CAAI,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,OAAO,CAAI,IAAY,EAAE,IAAa;QAC1C,OAAO,IAAI,CAAC,QAAQ,CAAI,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,UAAU,CACd,IAAY,EACZ,IAAyB,EACzB,OAA+B,EAC/B,KAAmD;QAEnD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;YAChE,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACvC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;YAClD,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;gBAChD,OAAO,SAAc,CAAC;YACxB,CAAC;YACD,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAM,CAAC;QACnC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,YAAY,EAAE,CAAC;gBAChC,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAC5B,CAAC;YACD,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,QAAQ,CACpB,MAAsB,EACtB,IAAY,EACZ,IAAa;QAEb,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CACjC,GAAG,EACH,MAAM,EACN,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CACrB,CAAC;YACF,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACvC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;YAClD,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;gBAChD,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAM,CAAC;QACnC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,YAAY,EAAE,CAAC;gBAChC,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAC5B,CAAC;YACD,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAEO,QAAQ,CACd,IAAY,EACZ,KAAmD;QAEnD,2DAA2D;QAC3D,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;QAC7D,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjD,IAAI,KAAK,KAAK,SAAS;oBAAE,SAAS;gBAClC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;IAEO,KAAK,CAAC,OAAO,CACnB,GAAW,EACX,MAAM,GAAG,KAAK,EACd,IAAe,EACf,YAAqC;QAErC,MAAM,OAAO,GAA2B;YACtC,MAAM,EAAE,kBAAkB;YAC1B,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;YACnC,mBAAmB,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;YACvC,GAAG,YAAY;SAChB,CAAC;QACF,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;YACnD,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;QAC/C,CAAC;QAED,MAAM,IAAI,GAA8C;YACtD,MAAM;YACN,OAAO;YACP,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;SAC1D,CAAC;QACF,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACnB,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACpC,CAAC;QAED,OAAO,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC1B,CAAC;IAEO,SAAS,CACf,MAAc,EACd,QAAgB,EAChB,IAAa;QAEb,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5D,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACnB,MAAM,IAAI,YAAY,CAAC;gBACrB,IAAI,EAAE,8BAA8B;gBACpC,OAAO,EAAE,+BAA+B;gBACxC,UAAU,EAAE,MAAM;gBAClB,KAAK,EAAE,CAAC,wBAAwB,CAAC;gBACjC,SAAS,EAAE,KAAK;aACjB,CAAC,CAAC;QACL,CAAC;QACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACnB,MAAM,IAAI,YAAY,CAAC;gBACrB,IAAI,EAAE,2BAA2B;gBACjC,OAAO,EAAE,2BAA2B;gBACpC,UAAU,EAAE,MAAM;gBAClB,KAAK,EAAE,CAAC,sDAAsD,CAAC;gBAC/D,SAAS,EAAE,KAAK;aACjB,CAAC,CAAC;QACL,CAAC;QACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACnB,MAAM,SAAS,GAAG,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;YAC7C,MAAM,IAAI,YAAY,CAAC;gBACrB,IAAI,EAAE,SAAS;oBACb,CAAC,CAAC,yBAAyB;oBAC3B,CAAC,CAAC,uBAAuB;gBAC3B,OAAO,EAAE,+BAA+B,UAAU,IAAI,MAAM,EAAE;gBAC9D,UAAU,EAAE,MAAM;gBAClB,SAAS,EAAE,KAAK;aACjB,CAAC,CAAC;QACL,CAAC;QACD,MAAM,IAAI,YAAY,CAAC;YACrB,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE,gBAAgB,MAAM,KAAK,UAAU,IAAI,gBAAgB,EAAE;YACpE,UAAU,EAAE,MAAM;YAClB,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;YAChC,KAAK,EAAE,CAAC,mDAAmD,CAAC;SAC7D,CAAC,CAAC;IACL,CAAC;IAEO,eAAe,CAAC,GAAY;QAClC,MAAM,OAAO,GAAG,UAAU,CACxB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAChD,IAAI,CAAC,MAAM,CAAC,MAAM,CACnB,CAAC;QACF,IACE,GAAG,YAAY,KAAK;YACpB,CAAC,GAAG,CAAC,IAAI,KAAK,cAAc,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,EAC1D,CAAC;YACD,OAAO,IAAI,YAAY,CAAC;gBACtB,IAAI,EAAE,iBAAiB;gBACvB,OAAO,EAAE,8BAA8B,OAAO,EAAE;gBAChD,SAAS,EAAE,IAAI;gBACf,KAAK,EAAE,CAAC,qCAAqC,EAAE,sBAAsB,CAAC;aACvE,CAAC,CAAC;QACL,CAAC;QACD,IAAI,2BAA2B,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9C,OAAO,IAAI,YAAY,CAAC;gBACtB,IAAI,EAAE,mBAAmB;gBACzB,OAAO,EAAE,sBAAsB,OAAO,EAAE;gBACxC,SAAS,EAAE,KAAK;gBAChB,KAAK,EAAE,CAAC,kDAAkD,CAAC;aAC5D,CAAC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,YAAY,CAAC;YACtB,IAAI,EAAE,0BAA0B;YAChC,OAAO,EAAE,yBAAyB,OAAO,EAAE;YAC3C,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,CAAC,oBAAoB,EAAE,kCAAkC,CAAC;SAClE,CAAC,CAAC;IACL,CAAC;IAEO,uBAAuB,CAAC,GAAY;QAC1C,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAC1C,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY;YAAE,OAAO,KAAK,CAAC;QAC3E,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,SAAS,CAAC,GAAiB;QACjC,OAAO,IAAI,YAAY,CAAC;YACtB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YACpD,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,KAAK,EAAE,GAAG,CAAC,KAAK;SACjB,CAAC,CAAC;IACL,CAAC;IAEO,SAAS,CAAC,OAAe;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,GAAG,CAAC;QAC7C,OAAO,IAAI,GAAG,CAAC,IAAI,OAAO,CAAC;IAC7B,CAAC;IAEO,KAAK,CAAC,EAAU;QACtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC;CACF"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,13 +1,14 @@
1
- export { loadConfig, type RedmineConfig } from "./config.js";
1
+ export { configFromCredentials, loadConfig, type RedmineConfig, } from "./config.js";
2
2
  export { RedmineError, type RedmineErrorCode } from "./errors.js";
3
3
  export { maskSecret } from "./mask.js";
4
4
  export { RedmineHttp, type RedmineHttpOptions } from "./http.js";
5
5
  export { RedmineClient } from "./client.js";
6
6
  export { buildIssueQuery } from "./issues.js";
7
7
  export { addComment, addIssueAttachments, createIssue, updateIssue, updateIssueStatus, } from "./writes.js";
8
+ export { addIssueRelation, getIssueRelation, listIssueRelations, removeIssueRelation, replaceIssueRelation, } from "./relations.js";
8
9
  export { searchUsers, normalizeListedUser } from "./users.js";
9
10
  export { listProjectMembers, matchMemberByName } from "./memberships.js";
10
11
  export { inspectAttachments, uploadAttachments, uploadFile, } from "./attachments.js";
11
- export { ATTACHMENT_MAX_BYTES, ATTACHMENT_MAX_FILES, } from "./types.js";
12
+ export { ATTACHMENT_MAX_BYTES, ATTACHMENT_MAX_FILES, DELAY_RELATION_TYPES, ISSUE_RELATION_TYPES, } from "./types.js";
12
13
  export { detectNotesMarkup, formatNotesForRedmine, formatDescriptionForRedmine, } from "./textile.js";
13
14
  export type * from "./types.js";
package/dist/index.js CHANGED
@@ -1,13 +1,14 @@
1
- export { loadConfig } from "./config.js";
1
+ export { configFromCredentials, loadConfig, } from "./config.js";
2
2
  export { RedmineError } from "./errors.js";
3
3
  export { maskSecret } from "./mask.js";
4
4
  export { RedmineHttp } from "./http.js";
5
5
  export { RedmineClient } from "./client.js";
6
6
  export { buildIssueQuery } from "./issues.js";
7
7
  export { addComment, addIssueAttachments, createIssue, updateIssue, updateIssueStatus, } from "./writes.js";
8
+ export { addIssueRelation, getIssueRelation, listIssueRelations, removeIssueRelation, replaceIssueRelation, } from "./relations.js";
8
9
  export { searchUsers, normalizeListedUser } from "./users.js";
9
10
  export { listProjectMembers, matchMemberByName } from "./memberships.js";
10
11
  export { inspectAttachments, uploadAttachments, uploadFile, } from "./attachments.js";
11
- export { ATTACHMENT_MAX_BYTES, ATTACHMENT_MAX_FILES, } from "./types.js";
12
+ export { ATTACHMENT_MAX_BYTES, ATTACHMENT_MAX_FILES, DELAY_RELATION_TYPES, ISSUE_RELATION_TYPES, } from "./types.js";
12
13
  export { detectNotesMarkup, formatNotesForRedmine, formatDescriptionForRedmine, } from "./textile.js";
13
14
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAyB,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,WAAW,EAA2B,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EACL,UAAU,EACV,mBAAmB,EACnB,WAAW,EACX,WAAW,EACX,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,GACX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,UAAU,GAEX,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAyB,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,WAAW,EAA2B,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EACL,UAAU,EACV,mBAAmB,EACnB,WAAW,EACX,WAAW,EACX,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,GACX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,cAAc,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { RedmineHttp } from "./http.js";
2
+ import type { AddIssueRelationInput, IssueRelation, ListIssueRelationsResult, RemoveIssueRelationResult, ReplaceIssueRelationInput, ReplaceIssueRelationResult } from "./types.js";
3
+ export declare function listIssueRelations(http: RedmineHttp, issueId: number): Promise<ListIssueRelationsResult>;
4
+ export declare function getIssueRelation(http: RedmineHttp, relationId: number): Promise<IssueRelation>;
5
+ export declare function addIssueRelation(http: RedmineHttp, input: AddIssueRelationInput): Promise<IssueRelation>;
6
+ export declare function removeIssueRelation(http: RedmineHttp, relationId: number): Promise<RemoveIssueRelationResult>;
7
+ /**
8
+ * Redmine has no relation update endpoint, so a change is delete + re-create.
9
+ * The original relation is read first so unchanged fields carry over.
10
+ */
11
+ export declare function replaceIssueRelation(http: RedmineHttp, input: ReplaceIssueRelationInput): Promise<ReplaceIssueRelationResult>;
@@ -0,0 +1,140 @@
1
+ import { RedmineError } from "./errors.js";
2
+ import { DELAY_RELATION_TYPES, ISSUE_RELATION_TYPES } from "./types.js";
3
+ function normalizeRelation(raw) {
4
+ return {
5
+ id: raw.id,
6
+ issueId: raw.issue_id,
7
+ issueToId: raw.issue_to_id,
8
+ relationType: raw.relation_type,
9
+ delay: raw.delay ?? null,
10
+ };
11
+ }
12
+ function assertRelationType(relationType) {
13
+ if (ISSUE_RELATION_TYPES.includes(relationType)) {
14
+ return;
15
+ }
16
+ throw new RedmineError({
17
+ code: "REDMINE_VALIDATION_ERROR",
18
+ message: `Unknown relationType "${relationType}"`,
19
+ check: [`Use one of: ${ISSUE_RELATION_TYPES.join(", ")}`],
20
+ });
21
+ }
22
+ function assertDelayAllowed(relationType, delay) {
23
+ if (delay === undefined || delay === null)
24
+ return;
25
+ if (DELAY_RELATION_TYPES.includes(relationType)) {
26
+ return;
27
+ }
28
+ throw new RedmineError({
29
+ code: "REDMINE_VALIDATION_ERROR",
30
+ message: `delay is only valid for ${DELAY_RELATION_TYPES.join("/")} relations, not "${relationType}"`,
31
+ check: [
32
+ "Drop delay for this relation type",
33
+ "Or use relationType precedes/follows",
34
+ ],
35
+ });
36
+ }
37
+ export async function listIssueRelations(http, issueId) {
38
+ try {
39
+ const data = await http.getJson(`/issues/${issueId}/relations.json`);
40
+ const relations = (data?.relations ?? []).map(normalizeRelation);
41
+ return {
42
+ issueId,
43
+ relations,
44
+ totalCount: data?.total_count ?? relations.length,
45
+ via: "relations",
46
+ };
47
+ }
48
+ catch (err) {
49
+ // Some projects deny the relations index yet still expose the same
50
+ // relations (ids included) on the issue itself.
51
+ if (err instanceof RedmineError &&
52
+ err.code === "REDMINE_PERMISSION_DENIED") {
53
+ const data = await http.getJson(`/issues/${issueId}.json`, { include: "relations" });
54
+ const relations = (data?.issue?.relations ?? []).map(normalizeRelation);
55
+ return {
56
+ issueId,
57
+ relations,
58
+ totalCount: relations.length,
59
+ via: "issue-include",
60
+ };
61
+ }
62
+ throw err;
63
+ }
64
+ }
65
+ export async function getIssueRelation(http, relationId) {
66
+ const data = await http.getJson(`/relations/${relationId}.json`);
67
+ if (!data?.relation) {
68
+ throw new RedmineError({
69
+ code: "REDMINE_ISSUE_NOT_FOUND",
70
+ message: `Relation #${relationId} was not found`,
71
+ check: [
72
+ "List relations with redmine_list_issue_relations to get a valid id",
73
+ ],
74
+ retrySafe: false,
75
+ });
76
+ }
77
+ return normalizeRelation(data.relation);
78
+ }
79
+ export async function addIssueRelation(http, input) {
80
+ assertRelationType(input.relationType);
81
+ assertDelayAllowed(input.relationType, input.delay);
82
+ if (input.issueId === input.issueToId) {
83
+ throw new RedmineError({
84
+ code: "REDMINE_VALIDATION_ERROR",
85
+ message: "An issue cannot be related to itself",
86
+ check: ["Pass a different issueToId"],
87
+ });
88
+ }
89
+ const relation = {
90
+ issue_to_id: input.issueToId,
91
+ relation_type: input.relationType,
92
+ };
93
+ if (input.delay !== undefined && input.delay !== null) {
94
+ relation.delay = input.delay;
95
+ }
96
+ const data = await http.postJson(`/issues/${input.issueId}/relations.json`, { relation });
97
+ if (!data?.relation) {
98
+ throw new Error("Redmine addIssueRelation returned empty body");
99
+ }
100
+ return normalizeRelation(data.relation);
101
+ }
102
+ export async function removeIssueRelation(http, relationId) {
103
+ await http.deleteJson(`/relations/${relationId}.json`);
104
+ return { relationId, removed: true };
105
+ }
106
+ /**
107
+ * Redmine has no relation update endpoint, so a change is delete + re-create.
108
+ * The original relation is read first so unchanged fields carry over.
109
+ */
110
+ export async function replaceIssueRelation(http, input) {
111
+ const existing = await getIssueRelation(http, input.relationId);
112
+ const relationType = input.relationType ?? existing.relationType;
113
+ assertRelationType(relationType);
114
+ const delay = input.delay !== undefined ? input.delay : existing.delay;
115
+ assertDelayAllowed(relationType, delay);
116
+ const next = {
117
+ issueId: existing.issueId,
118
+ issueToId: input.issueToId ?? existing.issueToId,
119
+ relationType: relationType,
120
+ delay,
121
+ };
122
+ await removeIssueRelation(http, input.relationId);
123
+ try {
124
+ const relation = await addIssueRelation(http, next);
125
+ return { removedRelationId: input.relationId, relation };
126
+ }
127
+ catch (err) {
128
+ const reason = err instanceof Error ? err.message : String(err);
129
+ throw new RedmineError({
130
+ code: "REDMINE_UNKNOWN_ERROR",
131
+ message: `Relation #${input.relationId} was removed but the replacement failed: ${reason}`,
132
+ check: [
133
+ `Re-add it with redmine_add_issue_relation: issueId=${next.issueId}, issueToId=${next.issueToId}, relationType=${next.relationType}`,
134
+ "Check the issue #" + next.issueId + " relations panel in Redmine",
135
+ ],
136
+ retrySafe: false,
137
+ });
138
+ }
139
+ }
140
+ //# sourceMappingURL=relations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relations.js","sourceRoot":"","sources":["../src/relations.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -136,10 +136,54 @@ export type IssueUploadToken = {
136
136
  };
137
137
  export declare const ATTACHMENT_MAX_FILES = 5;
138
138
  export declare const ATTACHMENT_MAX_BYTES: number;
139
+ /** Redmine relation_type values (연결된 일감 관계 종류) */
140
+ export declare const ISSUE_RELATION_TYPES: readonly ["relates", "duplicates", "duplicated", "blocks", "blocked", "precedes", "follows", "copied_to", "copied_from"];
141
+ export type IssueRelationType = (typeof ISSUE_RELATION_TYPES)[number];
142
+ /** Relation types that accept a delay (in days) */
143
+ export declare const DELAY_RELATION_TYPES: readonly ["precedes", "follows"];
144
+ export type IssueRelation = {
145
+ id: number;
146
+ issueId: number;
147
+ issueToId: number;
148
+ relationType: string;
149
+ delay: number | null;
150
+ };
151
+ export type ListIssueRelationsResult = {
152
+ issueId: number;
153
+ relations: IssueRelation[];
154
+ totalCount: number;
155
+ /**
156
+ * Which endpoint answered: the relations index, or the issue itself when
157
+ * the project denies that index (read works, writes will still 403).
158
+ */
159
+ via?: "relations" | "issue-include";
160
+ };
161
+ export type AddIssueRelationInput = {
162
+ issueId: number;
163
+ issueToId: number;
164
+ relationType: IssueRelationType;
165
+ delay?: number | null;
166
+ };
167
+ export type RemoveIssueRelationResult = {
168
+ relationId: number;
169
+ removed: true;
170
+ };
171
+ export type ReplaceIssueRelationInput = {
172
+ relationId: number;
173
+ issueToId?: number;
174
+ relationType?: IssueRelationType;
175
+ delay?: number | null;
176
+ };
177
+ export type ReplaceIssueRelationResult = {
178
+ removedRelationId: number;
179
+ relation: IssueRelation;
180
+ };
139
181
  export type CreateIssueInput = {
140
182
  projectId: number;
141
183
  subject: string;
142
184
  description?: string;
185
+ /** 상위 일감 (parent_issue_id) — creates this issue as a subtask */
186
+ parentIssueId?: number;
143
187
  trackerId?: number;
144
188
  statusId?: number;
145
189
  priorityId?: number;
@@ -166,6 +210,8 @@ export type UpdateIssueInput = {
166
210
  issueId: number;
167
211
  subject?: string;
168
212
  description?: string;
213
+ /** 상위 일감 — number attaches/moves, null detaches (하위일감 연결 해제) */
214
+ parentIssueId?: number | null;
169
215
  trackerId?: number;
170
216
  statusId?: number;
171
217
  priorityId?: number;
@@ -185,6 +231,7 @@ export type UpdateIssueResult = {
185
231
  id: number;
186
232
  name: string;
187
233
  } | null;
234
+ parentIssueId?: number | null;
188
235
  };
189
236
  export type SearchUsersResult = {
190
237
  users: RedmineUser[];
package/dist/types.js CHANGED
@@ -1,3 +1,17 @@
1
1
  export const ATTACHMENT_MAX_FILES = 5;
2
2
  export const ATTACHMENT_MAX_BYTES = 10 * 1024 * 1024;
3
+ /** Redmine relation_type values (연결된 일감 관계 종류) */
4
+ export const ISSUE_RELATION_TYPES = [
5
+ "relates",
6
+ "duplicates",
7
+ "duplicated",
8
+ "blocks",
9
+ "blocked",
10
+ "precedes",
11
+ "follows",
12
+ "copied_to",
13
+ "copied_from",
14
+ ];
15
+ /** Relation types that accept a delay (in days) */
16
+ export const DELAY_RELATION_TYPES = ["precedes", "follows"];
3
17
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAiHA,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AACtC,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAiHA,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AACtC,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAErD,kDAAkD;AAClD,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,SAAS;IACT,YAAY;IACZ,YAAY;IACZ,QAAQ;IACR,SAAS;IACT,UAAU;IACV,SAAS;IACT,WAAW;IACX,aAAa;CACL,CAAC;AAIX,mDAAmD;AACnD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,UAAU,EAAE,SAAS,CAAU,CAAC"}
package/dist/writes.js CHANGED
@@ -3,6 +3,10 @@ function applyOptionalIssueFields(issue, input, opts = {}) {
3
3
  if (input.description !== undefined) {
4
4
  issue.description = formatDescriptionForRedmine(input.description);
5
5
  }
6
+ if (input.parentIssueId !== undefined) {
7
+ issue.parent_issue_id =
8
+ input.parentIssueId === null ? "" : input.parentIssueId;
9
+ }
6
10
  if (input.trackerId !== undefined)
7
11
  issue.tracker_id = input.trackerId;
8
12
  if (input.statusId !== undefined)
@@ -64,6 +68,9 @@ export async function updateIssue(http, input) {
64
68
  issueId: input.issueId,
65
69
  subject: data?.issue?.subject ?? input.subject,
66
70
  status: data?.issue?.status ?? null,
71
+ ...(input.parentIssueId !== undefined
72
+ ? { parentIssueId: input.parentIssueId }
73
+ : {}),
67
74
  };
68
75
  }
69
76
  export async function addIssueAttachments(http, input) {
@@ -1 +1 @@
1
- {"version":3,"file":"writes.js","sourceRoot":"","sources":["../src/writes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"writes.js","sourceRoot":"","sources":["../src/writes.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "redmine-devrelay-client",
3
- "version": "0.5.2",
3
+ "version": "0.6.0",
4
4
  "description": "Redmine REST client for redmine-devrelay MCP ??auth, pagination, issue read/write helpers",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",