redmine-devrelay-client 0.2.0 → 0.2.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 ADDED
@@ -0,0 +1,18 @@
1
+ # redmine-devrelay-client
2
+
3
+ [redmine-devrelay](https://www.npmjs.com/package/redmine-devrelay) MCP 서버가 사용하는 Redmine REST 클라이언트입니다.
4
+
5
+ - **GitHub:** https://github.com/HuijungYoon/devrelay
6
+ - **MCP 서버:** [redmine-devrelay](https://www.npmjs.com/package/redmine-devrelay)
7
+
8
+ 보통은 MCP 패키지를 쓰면 이 클라이언트가 함께 설치됩니다. 직접 쓰려면:
9
+
10
+ ```bash
11
+ npm install redmine-devrelay-client
12
+ ```
13
+
14
+ 설정·TLS·사설망 HTTP 허용 규칙은 저장소 문서를 참고하세요.
15
+
16
+ ## License
17
+
18
+ MIT
package/dist/config.js CHANGED
@@ -70,7 +70,9 @@ export function loadConfig(env = process.env) {
70
70
  ?.split(",")
71
71
  .map((h) => h.trim().toLowerCase())
72
72
  .filter(Boolean);
73
- if (allowedHosts?.length && !allowedHosts.includes(host)) {
73
+ if (allowedHosts?.length &&
74
+ !allowedHosts.includes(host) &&
75
+ !isPrivateIpv4(host)) {
74
76
  throw new RedmineError({
75
77
  code: "REDMINE_VALIDATION_ERROR",
76
78
  message: `Host ${host} is not in REDMINE_ALLOWED_HOSTS`,
@@ -78,15 +80,16 @@ export function loadConfig(env = process.env) {
78
80
  });
79
81
  }
80
82
  const isInsecureHttpAllowed = parsed.protocol === "http:" &&
81
- !!allowedHosts?.includes(host) &&
82
- (LOCAL_HTTP_HOSTS.has(host) || isPrivateIpv4(host));
83
+ (isPrivateIpv4(host) ||
84
+ (LOCAL_HTTP_HOSTS.has(host) && !!allowedHosts?.includes(host)));
83
85
  if (parsed.protocol !== "https:" && !isInsecureHttpAllowed) {
84
86
  throw new RedmineError({
85
87
  code: "REDMINE_VALIDATION_ERROR",
86
- message: "REDMINE_URL must use https (http only for allowlisted local/private hosts)",
88
+ message: "REDMINE_URL must use https (http only for private IPs or allowlisted local hosts)",
87
89
  check: [
88
90
  "Use https://...",
89
- "Or allowlist localhost/redmine/RFC1918 hosts for local Redmine",
91
+ "Or use an RFC1918 private IP over http",
92
+ "Or allowlist localhost/redmine for Docker tests",
90
93
  ],
91
94
  });
92
95
  }
@@ -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":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAe3C,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,iBAAiB,EAAE,0BAA0B,CAAC,CAAC,CAAC;AAEjF,sEAAsE;AACtE,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;AAExE,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,CAAC,GAAG,8CAA8C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpE,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACrB,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9C,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC;IACtB,IAAI,CAAC,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACxC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,IAAI,CAAC;IACjD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAClB,GAAsB,EACtB,IAAY,EACZ,QAAgB;IAEhB,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;IACtB,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,QAAQ,CAAC;IACrD,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,YAAY,CAAC;YACrB,IAAI,EAAE,0BAA0B;YAChC,OAAO,EAAE,WAAW,IAAI,KAAK,GAAG,EAAE;YAClC,KAAK,EAAE,CAAC,OAAO,IAAI,uBAAuB,CAAC;SAC5C,CAAC,CAAC;IACL,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC7D,MAAM,MAAM,GAAG,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;IACvC,MAAM,MAAM,GAAG,GAAG,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC;IAC3C,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,MAAM,IAAI,YAAY,CAAC;YACrB,IAAI,EAAE,0BAA0B;YAChC,OAAO,EAAE,8CAA8C;YACvD,KAAK,EAAE,CAAC,oBAAoB,EAAE,wBAAwB,CAAC;SACxD,CAAC,CAAC;IACL,CAAC;IAED,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,YAAY,CAAC;YACrB,IAAI,EAAE,0BAA0B;YAChC,OAAO,EAAE,wBAAwB,MAAM,EAAE;YACzC,KAAK,EAAE,CAAC,sDAAsD,CAAC;SAChE,CAAC,CAAC;IACL,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;QAC9D,MAAM,IAAI,YAAY,CAAC;YACrB,IAAI,EAAE,0BAA0B;YAChC,OAAO,EAAE,2BAA2B,MAAM,CAAC,QAAQ,EAAE;SACtD,CAAC,CAAC;IACL,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IAC3C,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,YAAY,CAAC;YACrB,IAAI,EAAE,0BAA0B;YAChC,OAAO,EAAE,oCAAoC;SAC9C,CAAC,CAAC;IACL,CAAC;IAED,MAAM,YAAY,GAAG,GAAG,CAAC,qBAAqB;QAC5C,EAAE,KAAK,CAAC,GAAG,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;SAClC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEnB,IACE,YAAY,EAAE,MAAM;QACpB,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC5B,CAAC,aAAa,CAAC,IAAI,CAAC,EACpB,CAAC;QACD,MAAM,IAAI,YAAY,CAAC;YACrB,IAAI,EAAE,0BAA0B;YAChC,OAAO,EAAE,QAAQ,IAAI,kCAAkC;YACvD,KAAK,EAAE,CAAC,mDAAmD,CAAC;SAC7D,CAAC,CAAC;IACL,CAAC;IAED,MAAM,qBAAqB,GACzB,MAAM,CAAC,QAAQ,KAAK,OAAO;QAC3B,CAAC,aAAa,CAAC,IAAI,CAAC;YAClB,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEpE,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC3D,MAAM,IAAI,YAAY,CAAC;YACrB,IAAI,EAAE,0BAA0B;YAChC,OAAO,EACL,mFAAmF;YACrF,KAAK,EAAE;gBACL,iBAAiB;gBACjB,wCAAwC;gBACxC,iDAAiD;aAClD;SACF,CAAC,CAAC;IACL,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAE1C,OAAO;QACL,OAAO;QACP,MAAM;QACN,gBAAgB,EAAE,WAAW,CAAC,GAAG,EAAE,4BAA4B,EAAE,IAAI,CAAC;QACtE,gBAAgB,EAAE,WAAW,CAAC,GAAG,EAAE,4BAA4B,EAAE,KAAK,CAAC;QACvE,cAAc,EAAE,WAAW,CAAC,GAAG,EAAE,0BAA0B,EAAE,GAAG,CAAC;QACjE,QAAQ,EAAE,GAAG,CAAC,iBAAiB,IAAI,MAAM;QACzC,UAAU,EAAE,GAAG,CAAC,oBAAoB,IAAI,SAAS;QACjD,YAAY;QACZ,gBAAgB,EAAE,GAAG,CAAC,0BAA0B;YAC9C,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC;YACxC,CAAC,CAAC,SAAS;QACb,SAAS,EAAE,mBAAmB;KAC/B,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "redmine-devrelay-client",
3
- "version": "0.2.0",
4
- "description": "Redmine REST client used by redmine-devrelay MCP",
3
+ "version": "0.2.2",
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",
7
7
  "types": "./dist/index.d.ts",
@@ -12,12 +12,29 @@
12
12
  }
13
13
  },
14
14
  "files": [
15
- "dist"
15
+ "dist",
16
+ "README.md"
16
17
  ],
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "git+https://github.com/HuijungYoon/devrelay.git",
21
+ "directory": "packages/redmine-client"
22
+ },
23
+ "homepage": "https://github.com/HuijungYoon/devrelay#readme",
24
+ "bugs": {
25
+ "url": "https://github.com/HuijungYoon/devrelay/issues"
26
+ },
17
27
  "license": "MIT",
18
28
  "engines": {
19
29
  "node": ">=20"
20
30
  },
31
+ "keywords": [
32
+ "redmine",
33
+ "rest",
34
+ "api",
35
+ "devrelay",
36
+ "mcp"
37
+ ],
21
38
  "devDependencies": {
22
39
  "@types/node": "22.13.10",
23
40
  "typescript": "5.8.2",