@padua/cli 1.13.1 → 2.0.1

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.
Files changed (265) hide show
  1. package/README.md +121 -6
  2. package/dist/commands/doctor/index.d.ts.map +1 -1
  3. package/dist/commands/doctor/index.js +85 -0
  4. package/dist/commands/doctor/index.js.map +1 -1
  5. package/dist/commands/doctor/mcp-checks.d.ts +36 -0
  6. package/dist/commands/doctor/mcp-checks.d.ts.map +1 -0
  7. package/dist/commands/doctor/mcp-checks.js +235 -0
  8. package/dist/commands/doctor/mcp-checks.js.map +1 -0
  9. package/dist/commands/doctor/mcp-service-checks.d.ts +35 -0
  10. package/dist/commands/doctor/mcp-service-checks.d.ts.map +1 -0
  11. package/dist/commands/doctor/mcp-service-checks.js +146 -0
  12. package/dist/commands/doctor/mcp-service-checks.js.map +1 -0
  13. package/dist/commands/doctor/types.d.ts +4 -1
  14. package/dist/commands/doctor/types.d.ts.map +1 -1
  15. package/dist/commands/doctor/types.js +1 -0
  16. package/dist/commands/doctor/types.js.map +1 -1
  17. package/dist/commands/login/index.d.ts +1 -1
  18. package/dist/commands/login/index.d.ts.map +1 -1
  19. package/dist/commands/login/index.js +44 -185
  20. package/dist/commands/login/index.js.map +1 -1
  21. package/dist/commands/login/mcp-steps.d.ts +38 -0
  22. package/dist/commands/login/mcp-steps.d.ts.map +1 -0
  23. package/dist/commands/login/mcp-steps.js +176 -0
  24. package/dist/commands/login/mcp-steps.js.map +1 -0
  25. package/dist/commands/login/orchestrator.d.ts +9 -0
  26. package/dist/commands/login/orchestrator.d.ts.map +1 -0
  27. package/dist/commands/login/orchestrator.js +251 -0
  28. package/dist/commands/login/orchestrator.js.map +1 -0
  29. package/dist/commands/login/types.d.ts +11 -0
  30. package/dist/commands/login/types.d.ts.map +1 -1
  31. package/dist/commands/login/types.js.map +1 -1
  32. package/dist/commands/status/aws-checks.d.ts +14 -0
  33. package/dist/commands/status/aws-checks.d.ts.map +1 -0
  34. package/dist/commands/status/aws-checks.js +145 -0
  35. package/dist/commands/status/aws-checks.js.map +1 -0
  36. package/dist/commands/status/checks.d.ts +9 -25
  37. package/dist/commands/status/checks.d.ts.map +1 -1
  38. package/dist/commands/status/checks.js +52 -254
  39. package/dist/commands/status/checks.js.map +1 -1
  40. package/dist/commands/status/index.d.ts.map +1 -1
  41. package/dist/commands/status/index.js +53 -1
  42. package/dist/commands/status/index.js.map +1 -1
  43. package/dist/commands/status/mcp-checks.d.ts +35 -0
  44. package/dist/commands/status/mcp-checks.d.ts.map +1 -0
  45. package/dist/commands/status/mcp-checks.js +175 -0
  46. package/dist/commands/status/mcp-checks.js.map +1 -0
  47. package/dist/commands/status/types.d.ts +34 -0
  48. package/dist/commands/status/types.d.ts.map +1 -1
  49. package/dist/mcp/config/index.d.ts +4 -0
  50. package/dist/mcp/config/index.d.ts.map +1 -0
  51. package/dist/mcp/config/index.js +14 -0
  52. package/dist/mcp/config/index.js.map +1 -0
  53. package/dist/mcp/config/loaders.d.ts +45 -0
  54. package/dist/mcp/config/loaders.d.ts.map +1 -0
  55. package/dist/mcp/config/loaders.js +149 -0
  56. package/dist/mcp/config/loaders.js.map +1 -0
  57. package/dist/mcp/config/types.d.ts +234 -0
  58. package/dist/mcp/config/types.d.ts.map +1 -0
  59. package/dist/mcp/config/types.js +45 -0
  60. package/dist/mcp/config/types.js.map +1 -0
  61. package/dist/mcp/daemon/entry-logic.d.ts +28 -0
  62. package/dist/mcp/daemon/entry-logic.d.ts.map +1 -0
  63. package/dist/mcp/daemon/entry-logic.js +82 -0
  64. package/dist/mcp/daemon/entry-logic.js.map +1 -0
  65. package/dist/mcp/daemon/entry.d.ts +8 -0
  66. package/dist/mcp/daemon/entry.d.ts.map +1 -0
  67. package/dist/mcp/daemon/entry.js +34 -0
  68. package/dist/mcp/daemon/entry.js.map +1 -0
  69. package/dist/mcp/daemon/fork.d.ts +21 -0
  70. package/dist/mcp/daemon/fork.d.ts.map +1 -0
  71. package/dist/mcp/daemon/fork.js +188 -0
  72. package/dist/mcp/daemon/fork.js.map +1 -0
  73. package/dist/mcp/daemon/health.d.ts +8 -0
  74. package/dist/mcp/daemon/health.d.ts.map +1 -0
  75. package/dist/mcp/daemon/health.js +50 -0
  76. package/dist/mcp/daemon/health.js.map +1 -0
  77. package/dist/mcp/daemon/index.d.ts +6 -0
  78. package/dist/mcp/daemon/index.d.ts.map +1 -0
  79. package/dist/mcp/daemon/index.js +22 -0
  80. package/dist/mcp/daemon/index.js.map +1 -0
  81. package/dist/mcp/daemon/types.d.ts +63 -0
  82. package/dist/mcp/daemon/types.d.ts.map +1 -0
  83. package/dist/mcp/daemon/types.js +18 -0
  84. package/dist/mcp/daemon/types.js.map +1 -0
  85. package/dist/mcp/errors/index.d.ts +3 -0
  86. package/dist/mcp/errors/index.d.ts.map +1 -0
  87. package/dist/mcp/errors/index.js +13 -0
  88. package/dist/mcp/errors/index.js.map +1 -0
  89. package/dist/mcp/errors/types.d.ts +83 -0
  90. package/dist/mcp/errors/types.d.ts.map +1 -0
  91. package/dist/mcp/errors/types.js +148 -0
  92. package/dist/mcp/errors/types.js.map +1 -0
  93. package/dist/mcp/providers/atlassian/auth.d.ts +34 -0
  94. package/dist/mcp/providers/atlassian/auth.d.ts.map +1 -0
  95. package/dist/mcp/providers/atlassian/auth.js +107 -0
  96. package/dist/mcp/providers/atlassian/auth.js.map +1 -0
  97. package/dist/mcp/providers/atlassian/client.d.ts +15 -0
  98. package/dist/mcp/providers/atlassian/client.d.ts.map +1 -0
  99. package/dist/mcp/providers/atlassian/client.js +38 -0
  100. package/dist/mcp/providers/atlassian/client.js.map +1 -0
  101. package/dist/mcp/providers/atlassian/index.d.ts +6 -0
  102. package/dist/mcp/providers/atlassian/index.d.ts.map +1 -0
  103. package/dist/mcp/providers/atlassian/index.js +11 -0
  104. package/dist/mcp/providers/atlassian/index.js.map +1 -0
  105. package/dist/mcp/providers/atlassian/markdown-to-adf/index.d.ts +17 -0
  106. package/dist/mcp/providers/atlassian/markdown-to-adf/index.d.ts.map +1 -0
  107. package/dist/mcp/providers/atlassian/markdown-to-adf/index.js +29 -0
  108. package/dist/mcp/providers/atlassian/markdown-to-adf/index.js.map +1 -0
  109. package/dist/mcp/providers/atlassian/markdown-to-adf/nodes.d.ts +43 -0
  110. package/dist/mcp/providers/atlassian/markdown-to-adf/nodes.d.ts.map +1 -0
  111. package/dist/mcp/providers/atlassian/markdown-to-adf/nodes.js +101 -0
  112. package/dist/mcp/providers/atlassian/markdown-to-adf/nodes.js.map +1 -0
  113. package/dist/mcp/providers/atlassian/markdown-to-adf/parser.d.ts +14 -0
  114. package/dist/mcp/providers/atlassian/markdown-to-adf/parser.d.ts.map +1 -0
  115. package/dist/mcp/providers/atlassian/markdown-to-adf/parser.js +250 -0
  116. package/dist/mcp/providers/atlassian/markdown-to-adf/parser.js.map +1 -0
  117. package/dist/mcp/providers/atlassian/provider.d.ts +38 -0
  118. package/dist/mcp/providers/atlassian/provider.d.ts.map +1 -0
  119. package/dist/mcp/providers/atlassian/provider.js +101 -0
  120. package/dist/mcp/providers/atlassian/provider.js.map +1 -0
  121. package/dist/mcp/providers/atlassian/resources.d.ts +4 -0
  122. package/dist/mcp/providers/atlassian/resources.d.ts.map +1 -0
  123. package/dist/mcp/providers/atlassian/resources.js +67 -0
  124. package/dist/mcp/providers/atlassian/resources.js.map +1 -0
  125. package/dist/mcp/providers/atlassian/tools/confluence.d.ts +4 -0
  126. package/dist/mcp/providers/atlassian/tools/confluence.d.ts.map +1 -0
  127. package/dist/mcp/providers/atlassian/tools/confluence.js +169 -0
  128. package/dist/mcp/providers/atlassian/tools/confluence.js.map +1 -0
  129. package/dist/mcp/providers/atlassian/tools/jira.d.ts +4 -0
  130. package/dist/mcp/providers/atlassian/tools/jira.d.ts.map +1 -0
  131. package/dist/mcp/providers/atlassian/tools/jira.js +274 -0
  132. package/dist/mcp/providers/atlassian/tools/jira.js.map +1 -0
  133. package/dist/mcp/providers/gitlab/auth.d.ts +10 -0
  134. package/dist/mcp/providers/gitlab/auth.d.ts.map +1 -0
  135. package/dist/mcp/providers/gitlab/auth.js +23 -0
  136. package/dist/mcp/providers/gitlab/auth.js.map +1 -0
  137. package/dist/mcp/providers/gitlab/client.d.ts +23 -0
  138. package/dist/mcp/providers/gitlab/client.d.ts.map +1 -0
  139. package/dist/mcp/providers/gitlab/client.js +17 -0
  140. package/dist/mcp/providers/gitlab/client.js.map +1 -0
  141. package/dist/mcp/providers/gitlab/index.d.ts +5 -0
  142. package/dist/mcp/providers/gitlab/index.d.ts.map +1 -0
  143. package/dist/mcp/providers/gitlab/index.js +10 -0
  144. package/dist/mcp/providers/gitlab/index.js.map +1 -0
  145. package/dist/mcp/providers/gitlab/provider.d.ts +25 -0
  146. package/dist/mcp/providers/gitlab/provider.d.ts.map +1 -0
  147. package/dist/mcp/providers/gitlab/provider.js +48 -0
  148. package/dist/mcp/providers/gitlab/provider.js.map +1 -0
  149. package/dist/mcp/providers/gitlab/resources.d.ts +11 -0
  150. package/dist/mcp/providers/gitlab/resources.d.ts.map +1 -0
  151. package/dist/mcp/providers/gitlab/resources.js +54 -0
  152. package/dist/mcp/providers/gitlab/resources.js.map +1 -0
  153. package/dist/mcp/providers/gitlab/tools/issues.d.ts +4 -0
  154. package/dist/mcp/providers/gitlab/tools/issues.d.ts.map +1 -0
  155. package/dist/mcp/providers/gitlab/tools/issues.js +120 -0
  156. package/dist/mcp/providers/gitlab/tools/issues.js.map +1 -0
  157. package/dist/mcp/providers/gitlab/tools/merge-requests.d.ts +11 -0
  158. package/dist/mcp/providers/gitlab/tools/merge-requests.d.ts.map +1 -0
  159. package/dist/mcp/providers/gitlab/tools/merge-requests.js +282 -0
  160. package/dist/mcp/providers/gitlab/tools/merge-requests.js.map +1 -0
  161. package/dist/mcp/providers/gitlab/tools/pipelines.d.ts +10 -0
  162. package/dist/mcp/providers/gitlab/tools/pipelines.d.ts.map +1 -0
  163. package/dist/mcp/providers/gitlab/tools/pipelines.js +173 -0
  164. package/dist/mcp/providers/gitlab/tools/pipelines.js.map +1 -0
  165. package/dist/mcp/providers/gitlab/tools/repository.d.ts +4 -0
  166. package/dist/mcp/providers/gitlab/tools/repository.d.ts.map +1 -0
  167. package/dist/mcp/providers/gitlab/tools/repository.js +191 -0
  168. package/dist/mcp/providers/gitlab/tools/repository.js.map +1 -0
  169. package/dist/mcp/providers/index.d.ts +4 -0
  170. package/dist/mcp/providers/index.d.ts.map +1 -0
  171. package/dist/mcp/providers/index.js +6 -0
  172. package/dist/mcp/providers/index.js.map +1 -0
  173. package/dist/mcp/providers/registry.d.ts +90 -0
  174. package/dist/mcp/providers/registry.d.ts.map +1 -0
  175. package/dist/mcp/providers/registry.js +128 -0
  176. package/dist/mcp/providers/registry.js.map +1 -0
  177. package/dist/mcp/providers/tool-helpers.d.ts +14 -0
  178. package/dist/mcp/providers/tool-helpers.d.ts.map +1 -0
  179. package/dist/mcp/providers/tool-helpers.js +12 -0
  180. package/dist/mcp/providers/tool-helpers.js.map +1 -0
  181. package/dist/mcp/providers/types.d.ts +80 -0
  182. package/dist/mcp/providers/types.d.ts.map +1 -0
  183. package/dist/mcp/providers/types.js +13 -0
  184. package/dist/mcp/providers/types.js.map +1 -0
  185. package/dist/mcp/server/auth.d.ts +8 -0
  186. package/dist/mcp/server/auth.d.ts.map +1 -0
  187. package/dist/mcp/server/auth.js +36 -0
  188. package/dist/mcp/server/auth.js.map +1 -0
  189. package/dist/mcp/server/health.d.ts +24 -0
  190. package/dist/mcp/server/health.d.ts.map +1 -0
  191. package/dist/mcp/server/health.js +37 -0
  192. package/dist/mcp/server/health.js.map +1 -0
  193. package/dist/mcp/server/index.d.ts +11 -0
  194. package/dist/mcp/server/index.d.ts.map +1 -0
  195. package/dist/mcp/server/index.js +27 -0
  196. package/dist/mcp/server/index.js.map +1 -0
  197. package/dist/mcp/server/logging.d.ts +46 -0
  198. package/dist/mcp/server/logging.d.ts.map +1 -0
  199. package/dist/mcp/server/logging.js +109 -0
  200. package/dist/mcp/server/logging.js.map +1 -0
  201. package/dist/mcp/server/ratelimit.d.ts +3 -0
  202. package/dist/mcp/server/ratelimit.d.ts.map +1 -0
  203. package/dist/mcp/server/ratelimit.js +70 -0
  204. package/dist/mcp/server/ratelimit.js.map +1 -0
  205. package/dist/mcp/server/routes.d.ts +3 -0
  206. package/dist/mcp/server/routes.d.ts.map +1 -0
  207. package/dist/mcp/server/routes.js +8 -0
  208. package/dist/mcp/server/routes.js.map +1 -0
  209. package/dist/mcp/server/server.d.ts +21 -0
  210. package/dist/mcp/server/server.d.ts.map +1 -0
  211. package/dist/mcp/server/server.js +114 -0
  212. package/dist/mcp/server/server.js.map +1 -0
  213. package/dist/mcp/server/validation.d.ts +22 -0
  214. package/dist/mcp/server/validation.d.ts.map +1 -0
  215. package/dist/mcp/server/validation.js +32 -0
  216. package/dist/mcp/server/validation.js.map +1 -0
  217. package/dist/mcp/store/encrypt.d.ts +22 -0
  218. package/dist/mcp/store/encrypt.d.ts.map +1 -0
  219. package/dist/mcp/store/encrypt.js +66 -0
  220. package/dist/mcp/store/encrypt.js.map +1 -0
  221. package/dist/mcp/store/index.d.ts +12 -0
  222. package/dist/mcp/store/index.d.ts.map +1 -0
  223. package/dist/mcp/store/index.js +16 -0
  224. package/dist/mcp/store/index.js.map +1 -0
  225. package/dist/mcp/store/migrate.d.ts +70 -0
  226. package/dist/mcp/store/migrate.d.ts.map +1 -0
  227. package/dist/mcp/store/migrate.js +211 -0
  228. package/dist/mcp/store/migrate.js.map +1 -0
  229. package/dist/mcp/store/null-token-store.d.ts +22 -0
  230. package/dist/mcp/store/null-token-store.d.ts.map +1 -0
  231. package/dist/mcp/store/null-token-store.js +40 -0
  232. package/dist/mcp/store/null-token-store.js.map +1 -0
  233. package/dist/mcp/store/sqlite.d.ts +27 -0
  234. package/dist/mcp/store/sqlite.d.ts.map +1 -0
  235. package/dist/mcp/store/sqlite.js +100 -0
  236. package/dist/mcp/store/sqlite.js.map +1 -0
  237. package/dist/mcp/store/types.d.ts +183 -0
  238. package/dist/mcp/store/types.d.ts.map +1 -0
  239. package/dist/mcp/store/types.js +13 -0
  240. package/dist/mcp/store/types.js.map +1 -0
  241. package/dist/mcp/token/http-client.d.ts +3 -0
  242. package/dist/mcp/token/http-client.d.ts.map +1 -0
  243. package/dist/mcp/token/http-client.js +186 -0
  244. package/dist/mcp/token/http-client.js.map +1 -0
  245. package/dist/mcp/token/index.d.ts +5 -0
  246. package/dist/mcp/token/index.d.ts.map +1 -0
  247. package/dist/mcp/token/index.js +15 -0
  248. package/dist/mcp/token/index.js.map +1 -0
  249. package/dist/mcp/token/manager.d.ts +54 -0
  250. package/dist/mcp/token/manager.d.ts.map +1 -0
  251. package/dist/mcp/token/manager.js +194 -0
  252. package/dist/mcp/token/manager.js.map +1 -0
  253. package/dist/mcp/token/null-token-manager.d.ts +19 -0
  254. package/dist/mcp/token/null-token-manager.d.ts.map +1 -0
  255. package/dist/mcp/token/null-token-manager.js +50 -0
  256. package/dist/mcp/token/null-token-manager.js.map +1 -0
  257. package/dist/mcp/token/oauth.d.ts +44 -0
  258. package/dist/mcp/token/oauth.d.ts.map +1 -0
  259. package/dist/mcp/token/oauth.js +257 -0
  260. package/dist/mcp/token/oauth.js.map +1 -0
  261. package/dist/mcp/token/types.d.ts +81 -0
  262. package/dist/mcp/token/types.d.ts.map +1 -0
  263. package/dist/mcp/token/types.js +6 -0
  264. package/dist/mcp/token/types.js.map +1 -0
  265. package/package.json +10 -3
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NullTokenStore = void 0;
4
+ /**
5
+ * In-memory TokenStore implementation used for testing and as a null-object
6
+ * fallback when no persistent store is configured.
7
+ *
8
+ * All operations are synchronous and operate on a plain Map. No I/O, no
9
+ * encryption, no external dependencies. Returned tokens are shallow-copied
10
+ * so callers cannot mutate internal store state through a returned reference.
11
+ */
12
+ class NullTokenStore {
13
+ store = new Map();
14
+ static create() {
15
+ return new NullTokenStore();
16
+ }
17
+ get(service) {
18
+ const entry = this.store.get(service);
19
+ return entry ? { ...entry.token } : null;
20
+ }
21
+ upsert(service, token) {
22
+ this.store.set(service, {
23
+ token: { ...token },
24
+ updatedAt: new Date().toISOString(),
25
+ });
26
+ }
27
+ delete(service) {
28
+ this.store.delete(service);
29
+ }
30
+ list() {
31
+ return Array.from(this.store.entries())
32
+ .map(([service, entry]) => ({ service, updatedAt: entry.updatedAt }))
33
+ .sort((a, b) => a.service.localeCompare(b.service));
34
+ }
35
+ close() {
36
+ this.store.clear();
37
+ }
38
+ }
39
+ exports.NullTokenStore = NullTokenStore;
40
+ //# sourceMappingURL=null-token-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"null-token-store.js","sourceRoot":"","sources":["../../../src/mcp/store/null-token-store.ts"],"names":[],"mappings":";;;AAEA;;;;;;;GAOG;AACH,MAAa,cAAc;IACR,KAAK,GAAG,IAAI,GAAG,EAAqD,CAAC;IAEtF,MAAM,CAAC,MAAM;QACX,OAAO,IAAI,cAAc,EAAE,CAAC;IAC9B,CAAC;IAED,GAAG,CAAC,OAAe;QACjB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACtC,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3C,CAAC;IAED,MAAM,CAAC,OAAe,EAAE,KAAkB;QACxC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE;YACtB,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE;YACnB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,OAAe;QACpB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;aACpC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;aACpE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF;AAhCD,wCAgCC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * SQLite-backed encrypted token store for the MCP server integration.
3
+ *
4
+ * All token data is serialised to JSON, encrypted with AES-256-GCM, then
5
+ * written to the `tokens` table as a BLOB. The Encryptor interface decouples
6
+ * the encryption algorithm from the store so tests can inject deterministic
7
+ * doubles without touching real crypto.
8
+ *
9
+ * Wire format for the `data` column:
10
+ * nonce (12 bytes) || ciphertext (N bytes) || auth tag (16 bytes)
11
+ */
12
+ import type { TokenStore, StoredToken, Encryptor } from './types';
13
+ export declare class SqliteTokenStore implements TokenStore {
14
+ private readonly db;
15
+ private readonly encryptor;
16
+ private constructor();
17
+ static create(dbPath: string, encryptor: Encryptor): SqliteTokenStore;
18
+ get(service: string): StoredToken | null;
19
+ upsert(service: string, token: StoredToken): void;
20
+ delete(service: string): void;
21
+ list(): Array<{
22
+ service: string;
23
+ updatedAt: string;
24
+ }>;
25
+ close(): void;
26
+ }
27
+ //# sourceMappingURL=sqlite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../../src/mcp/store/sqlite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAOlE,qBAAa,gBAAiB,YAAW,UAAU;IACjD,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAoB;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IAEtC,OAAO;IA2BP,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,gBAAgB;IAIrE,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAqBxC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI;IAkBjD,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM7B,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAUrD,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ /**
3
+ * SQLite-backed encrypted token store for the MCP server integration.
4
+ *
5
+ * All token data is serialised to JSON, encrypted with AES-256-GCM, then
6
+ * written to the `tokens` table as a BLOB. The Encryptor interface decouples
7
+ * the encryption algorithm from the store so tests can inject deterministic
8
+ * doubles without touching real crypto.
9
+ *
10
+ * Wire format for the `data` column:
11
+ * nonce (12 bytes) || ciphertext (N bytes) || auth tag (16 bytes)
12
+ */
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.SqliteTokenStore = void 0;
18
+ const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
19
+ const node_fs_1 = require("node:fs");
20
+ const node_path_1 = require("node:path");
21
+ const errors_1 = require("../errors");
22
+ const migrate_1 = require("./migrate");
23
+ // ---------------------------------------------------------------------------
24
+ // SqliteTokenStore
25
+ // ---------------------------------------------------------------------------
26
+ class SqliteTokenStore {
27
+ db;
28
+ encryptor;
29
+ constructor(dbPath, encryptor) {
30
+ try {
31
+ (0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(dbPath), { recursive: true });
32
+ this.db = new better_sqlite3_1.default(dbPath);
33
+ this.db.pragma('journal_mode=WAL');
34
+ this.db.pragma('synchronous=NORMAL');
35
+ this.db.pragma('foreign_keys=ON');
36
+ this.db.pragma('busy_timeout=5000');
37
+ (0, migrate_1.runMigrations)(this.db);
38
+ if (dbPath !== ':memory:' && (0, node_fs_1.existsSync)(dbPath)) {
39
+ (0, node_fs_1.chmodSync)(dbPath, 0o600);
40
+ }
41
+ this.encryptor = encryptor;
42
+ }
43
+ catch (err) {
44
+ if (err instanceof errors_1.StoreError)
45
+ throw err;
46
+ throw new errors_1.StoreError(`Failed to open database at ${dbPath}: ${err instanceof Error ? err.message : String(err)}`, errors_1.ErrorCodes.DB_OPEN_FAILED);
47
+ }
48
+ }
49
+ static create(dbPath, encryptor) {
50
+ return new SqliteTokenStore(dbPath, encryptor);
51
+ }
52
+ get(service) {
53
+ const row = this.db
54
+ .prepare(`SELECT data FROM tokens WHERE service = ?`)
55
+ .get(service);
56
+ if (!row)
57
+ return null;
58
+ try {
59
+ const plaintext = this.encryptor.decrypt(Buffer.from(row.data));
60
+ return JSON.parse(plaintext.toString('utf-8'));
61
+ }
62
+ catch (err) {
63
+ if (err instanceof errors_1.StoreError)
64
+ throw err;
65
+ throw new errors_1.StoreError(`Failed to decrypt token for service '${service}'. ` +
66
+ `Check that the encryption key matches the one used when the token was stored. ` +
67
+ `Error: ${err instanceof Error ? err.message : String(err)}`, errors_1.ErrorCodes.TOKEN_DECRYPTION_FAILED);
68
+ }
69
+ }
70
+ upsert(service, token) {
71
+ try {
72
+ const serialized = Buffer.from(JSON.stringify(token), 'utf-8');
73
+ const encrypted = this.encryptor.encrypt(serialized);
74
+ this.db
75
+ .prepare(`INSERT OR REPLACE INTO tokens (service, data) VALUES (?, ?)`)
76
+ .run(service, encrypted);
77
+ }
78
+ catch (err) {
79
+ if (err instanceof errors_1.StoreError)
80
+ throw err;
81
+ throw new errors_1.StoreError(`Failed to write token for service '${service}': ${err instanceof Error ? err.message : String(err)}`, errors_1.ErrorCodes.DB_WRITE_FAILED);
82
+ }
83
+ }
84
+ delete(service) {
85
+ this.db
86
+ .prepare(`DELETE FROM tokens WHERE service = ?`)
87
+ .run(service);
88
+ }
89
+ list() {
90
+ const rows = this.db
91
+ .prepare(`SELECT service, updated_at FROM tokens ORDER BY service`)
92
+ .all();
93
+ return rows.map((row) => ({ service: row.service, updatedAt: row.updated_at }));
94
+ }
95
+ close() {
96
+ this.db.close();
97
+ }
98
+ }
99
+ exports.SqliteTokenStore = SqliteTokenStore;
100
+ //# sourceMappingURL=sqlite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../../src/mcp/store/sqlite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,183 @@
1
+ /**
2
+ * Token store type definitions for the MCP server integration.
3
+ *
4
+ * Defines the core interfaces that the AES-256-GCM encryption module and
5
+ * the SQLite-backed token store implement. No implementation details, no
6
+ * external dependencies — pure TypeScript interfaces.
7
+ *
8
+ * Wire format for AES-256-GCM (Go-compatible):
9
+ * [ nonce (12 bytes) ][ ciphertext (N bytes) ][ auth tag (16 bytes) ]
10
+ */
11
+ /**
12
+ * Strict union of supported OAuth service identifiers.
13
+ *
14
+ * Maps directly to the PRIMARY KEY values in the `tokens` SQLite table.
15
+ * Extend this union when adding a new provider in Phase 5/6.
16
+ */
17
+ export type ServiceName = 'gitlab' | 'atlassian';
18
+ /**
19
+ * Decrypted token data persisted per service in the `tokens` table.
20
+ *
21
+ * Serialised to JSON and encrypted with AES-256-GCM before being written to
22
+ * the `data` BLOB column. The shape must remain byte-compatible with the Go
23
+ * implementation in `padua-mcp/internal/store/sqlite.go`.
24
+ *
25
+ * `cloudId` and `cloudUrl` are Atlassian-specific and are omitted for GitLab
26
+ * tokens. They are present when the Atlassian OAuth flow completes and the
27
+ * cloud site resource ID has been resolved.
28
+ */
29
+ export interface StoredToken {
30
+ /** OAuth2 access token. Passed as Bearer in Authorization headers. */
31
+ accessToken: string;
32
+ /** OAuth2 refresh token. Used to obtain a new access token on expiry. */
33
+ refreshToken: string;
34
+ /**
35
+ * Token type returned by the provider's token endpoint.
36
+ * Always "Bearer" in practice for both GitLab and Atlassian.
37
+ */
38
+ tokenType: string;
39
+ /**
40
+ * Absolute expiry time as a Unix timestamp in seconds.
41
+ * Compare against `Math.floor(Date.now() / 1000)` to detect expiry.
42
+ */
43
+ expiresAt: number;
44
+ /** OAuth2 scopes granted for this token. */
45
+ scopes: string[];
46
+ /**
47
+ * Atlassian cloud site resource ID.
48
+ * Required for Atlassian API calls; undefined for GitLab tokens.
49
+ */
50
+ cloudId?: string;
51
+ /**
52
+ * Base URL of the Atlassian cloud site (e.g. https://myorg.atlassian.net).
53
+ * Stored alongside cloudId for human-readable diagnostics.
54
+ * Undefined for GitLab tokens.
55
+ */
56
+ cloudUrl?: string;
57
+ }
58
+ /**
59
+ * Port interface for the encrypted SQLite token store.
60
+ *
61
+ * Implemented by `SqliteTokenStore` in `sqlite.ts`. The synchronous method
62
+ * signatures are intentional — `better-sqlite3` is synchronous by design,
63
+ * which avoids async overhead for short-lived in-process operations and
64
+ * keeps the caller-side code free of unnecessary `await` chains.
65
+ *
66
+ * Callers that require an async-compatible abstraction should wrap this
67
+ * interface in a thin async adapter rather than changing the signatures here.
68
+ */
69
+ export interface TokenStore {
70
+ /**
71
+ * Retrieve the decrypted token for a service.
72
+ *
73
+ * @param service - Service identifier (e.g. 'gitlab', 'atlassian')
74
+ * @returns The decrypted StoredToken, or null if no token is stored.
75
+ * @throws StoreError(TOKEN_DECRYPTION_FAILED) when the stored ciphertext
76
+ * fails GCM authentication — indicates key mismatch or data tampering.
77
+ */
78
+ get(service: string): StoredToken | null;
79
+ /**
80
+ * Insert or update the token for a service (upsert semantics).
81
+ *
82
+ * Serialises the token to JSON, encrypts it, then writes to the `tokens`
83
+ * table using INSERT OR REPLACE. The `updated_at` column is refreshed
84
+ * automatically by the SQL default expression.
85
+ *
86
+ * @param service - Service identifier
87
+ * @param token - Token data to persist
88
+ * @throws StoreError(DB_WRITE_FAILED) on SQLite write failure.
89
+ */
90
+ upsert(service: string, token: StoredToken): void;
91
+ /**
92
+ * Remove the token for a service.
93
+ *
94
+ * No-op when no token exists for the given service.
95
+ *
96
+ * @param service - Service identifier to remove
97
+ */
98
+ delete(service: string): void;
99
+ /**
100
+ * List all services that have a stored token.
101
+ *
102
+ * Does not decrypt any token data — reads only the `service` and
103
+ * `updated_at` columns from the `tokens` table.
104
+ *
105
+ * @returns Array of entries, each with the service name and last-updated
106
+ * timestamp as an ISO 8601 string.
107
+ */
108
+ list(): Array<{
109
+ service: string;
110
+ updatedAt: string;
111
+ }>;
112
+ /**
113
+ * Close the underlying database connection.
114
+ *
115
+ * Must be called when the token store is no longer needed (e.g. on daemon
116
+ * shutdown) to release the file lock and flush WAL frames. After calling
117
+ * `close()`, any subsequent call to `get`, `upsert`, `delete`, or `list`
118
+ * is undefined behaviour.
119
+ */
120
+ close(): void;
121
+ }
122
+ /**
123
+ * Port interface for AES-256-GCM encryption.
124
+ *
125
+ * Implemented by `createEncryptor` in `encrypt.ts`. The Buffer-in / Buffer-out
126
+ * contract keeps the interface free of Node.js crypto internals so test doubles
127
+ * can implement it without the full crypto pipeline.
128
+ *
129
+ * Wire format: `nonce (12 bytes) || ciphertext (N bytes) || auth tag (16 bytes)`.
130
+ * This layout is byte-compatible with the Go implementation in
131
+ * `padua-mcp/internal/store/encrypt.go`.
132
+ */
133
+ export interface Encryptor {
134
+ /**
135
+ * Encrypt plaintext using AES-256-GCM.
136
+ *
137
+ * Generates a fresh 12-byte random nonce per call (nonce reuse is a
138
+ * catastrophic failure for GCM — never pass a nonce as an argument).
139
+ *
140
+ * @param plaintext - Raw bytes to encrypt
141
+ * @returns Combined buffer: nonce (12) || ciphertext (N) || auth tag (16)
142
+ */
143
+ encrypt(plaintext: Buffer): Buffer;
144
+ /**
145
+ * Decrypt a combined AES-256-GCM buffer produced by `encrypt`.
146
+ *
147
+ * Slices the nonce from bytes 0–11, the auth tag from the final 16 bytes,
148
+ * and the ciphertext from everything in between. Calls `setAuthTag` before
149
+ * `final()` so Node.js crypto verifies the GCM authentication tag.
150
+ *
151
+ * @param ciphertext - Combined buffer: nonce (12) || ciphertext (N) || tag (16)
152
+ * @returns Decrypted plaintext bytes
153
+ * @throws StoreError(TOKEN_DECRYPTION_FAILED) — never a generic Error —
154
+ * when the GCM authentication tag check fails. Indicates either a
155
+ * wrong encryption key or data tampering.
156
+ */
157
+ decrypt(ciphertext: Buffer): Buffer;
158
+ }
159
+ /**
160
+ * Result returned by store migration utilities.
161
+ *
162
+ * Used by `runMigrations` in `migrate.ts` and by any future migration helper
163
+ * that moves tokens from a legacy format (e.g. plain-text JSON files) to the
164
+ * encrypted SQLite store.
165
+ */
166
+ export interface MigrationResult {
167
+ /**
168
+ * Whether a migration was actually performed.
169
+ * `true` when schema changes were applied; `false` when already up to date.
170
+ */
171
+ migrated: boolean;
172
+ /**
173
+ * Human-readable explanation of why migration was skipped or what happened.
174
+ * Present when `migrated` is false and a non-trivial skip condition exists.
175
+ */
176
+ reason?: string;
177
+ /**
178
+ * Number of token rows affected or created during the migration.
179
+ * Populated when a data migration (not just schema migration) was performed.
180
+ */
181
+ tokensCount?: number;
182
+ }
183
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/mcp/store/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;AAMjD;;;;;;;;;;GAUG;AACH,MAAM,WAAW,WAAW;IAC1B,sEAAsE;IACtE,WAAW,EAAE,MAAM,CAAC;IAEpB,yEAAyE;IACzE,YAAY,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB,4CAA4C;IAC5C,MAAM,EAAE,MAAM,EAAE,CAAC;IAEjB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAMD;;;;;;;;;;GAUG;AACH,MAAM,WAAW,UAAU;IACzB;;;;;;;OAOG;IACH,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC;IAEzC;;;;;;;;;;OAUG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IAElD;;;;;;OAMG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAE9B;;;;;;;;OAQG;IACH,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAEtD;;;;;;;OAOG;IACH,KAAK,IAAI,IAAI,CAAC;CACf;AAMD;;;;;;;;;;GAUG;AACH,MAAM,WAAW,SAAS;IACxB;;;;;;;;OAQG;IACH,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IAEnC;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;CACrC;AAMD;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,QAAQ,EAAE,OAAO,CAAC;IAElB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ /**
3
+ * Token store type definitions for the MCP server integration.
4
+ *
5
+ * Defines the core interfaces that the AES-256-GCM encryption module and
6
+ * the SQLite-backed token store implement. No implementation details, no
7
+ * external dependencies — pure TypeScript interfaces.
8
+ *
9
+ * Wire format for AES-256-GCM (Go-compatible):
10
+ * [ nonce (12 bytes) ][ ciphertext (N bytes) ][ auth tag (16 bytes) ]
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/mcp/store/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG"}
@@ -0,0 +1,3 @@
1
+ import type { TokenManager, ApiClient, ApiClientOptions } from './types';
2
+ export declare function createApiClient(options: ApiClientOptions, tokenManager: TokenManager): ApiClient;
3
+ //# sourceMappingURL=http-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../../src/mcp/token/http-client.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAe,MAAM,SAAS,CAAC;AAiLtF,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,GAAG,SAAS,CAgEhG"}
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createApiClient = createApiClient;
4
+ const node_https_1 = require("node:https");
5
+ const node_http_1 = require("node:http");
6
+ const node_url_1 = require("node:url");
7
+ const errors_1 = require("../errors");
8
+ const DEFAULT_TIMEOUT_MS = 30_000;
9
+ const MAX_PAGES = 100;
10
+ const PROVIDER = 'http-client';
11
+ // ---------------------------------------------------------------------------
12
+ // Low-level request
13
+ // ---------------------------------------------------------------------------
14
+ function buildUrl(baseUrl, path, params) {
15
+ const url = new node_url_1.URL(path, baseUrl);
16
+ if (params) {
17
+ for (const [key, value] of Object.entries(params)) {
18
+ url.searchParams.set(key, value);
19
+ }
20
+ }
21
+ return url.toString();
22
+ }
23
+ function collectBody(chunks) {
24
+ return Buffer.concat(chunks).toString('utf8');
25
+ }
26
+ function parseJsonBody(raw) {
27
+ if (!raw)
28
+ return null;
29
+ try {
30
+ return JSON.parse(raw);
31
+ }
32
+ catch {
33
+ return raw;
34
+ }
35
+ }
36
+ function handleErrorStatus(status, body, headers) {
37
+ if (status === 401) {
38
+ throw new errors_1.ProviderError('API request unauthorized (401)', errors_1.ErrorCodes.API_UNAUTHORIZED, PROVIDER);
39
+ }
40
+ if (status === 429) {
41
+ const retryAfter = headers['retry-after'];
42
+ const suffix = retryAfter ? ` Retry-After: ${retryAfter}` : '';
43
+ throw new errors_1.ProviderError(`API rate limited (429).${suffix}`, errors_1.ErrorCodes.API_RATE_LIMITED, PROVIDER);
44
+ }
45
+ throw new errors_1.ProviderError(`API request failed with status ${status}: ${body}`, `HTTP_${status}`, PROVIDER);
46
+ }
47
+ async function makeRequest(options, tokenManager, method, url, body) {
48
+ const token = await tokenManager.getAccessToken();
49
+ const parsed = new node_url_1.URL(url);
50
+ const isHttps = parsed.protocol === 'https:';
51
+ const requestFn = isHttps ? node_https_1.request : node_http_1.request;
52
+ const timeoutMs = options.timeout ?? DEFAULT_TIMEOUT_MS;
53
+ const bodyStr = body !== undefined ? JSON.stringify(body) : undefined;
54
+ const reqOptions = {
55
+ hostname: parsed.hostname,
56
+ port: parsed.port || (isHttps ? 443 : 80),
57
+ path: parsed.pathname + parsed.search,
58
+ method,
59
+ headers: {
60
+ Authorization: `Bearer ${token}`,
61
+ Accept: 'application/json',
62
+ 'User-Agent': 'padua-cli',
63
+ ...(bodyStr !== undefined
64
+ ? { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(bodyStr) }
65
+ : {}),
66
+ },
67
+ };
68
+ return new Promise((resolve, reject) => {
69
+ const req = requestFn(reqOptions, (res) => {
70
+ const chunks = [];
71
+ res.on('data', (chunk) => chunks.push(chunk));
72
+ res.on('end', () => {
73
+ const rawBody = collectBody(chunks);
74
+ const status = res.statusCode ?? 0;
75
+ const headers = {};
76
+ for (const [key, value] of Object.entries(res.headers)) {
77
+ if (value !== undefined) {
78
+ headers[key.toLowerCase()] = Array.isArray(value) ? value.join(', ') : value;
79
+ }
80
+ }
81
+ if (status < 200 || status > 299) {
82
+ try {
83
+ handleErrorStatus(status, rawBody, headers);
84
+ }
85
+ catch (err) {
86
+ reject(err);
87
+ }
88
+ return;
89
+ }
90
+ resolve({ status, headers, body: parseJsonBody(rawBody) });
91
+ });
92
+ });
93
+ const timer = setTimeout(() => {
94
+ req.destroy();
95
+ reject(new errors_1.ProviderError(`API request timed out after ${timeoutMs}ms`, errors_1.ErrorCodes.API_TIMEOUT, PROVIDER));
96
+ }, timeoutMs);
97
+ req.on('error', (err) => {
98
+ clearTimeout(timer);
99
+ // destroy fires an error event too — avoid double-reject after timeout
100
+ if (err.code === 'ECONNRESET') {
101
+ // already rejected by timeout handler
102
+ return;
103
+ }
104
+ reject(new errors_1.ProviderError(`Request error: ${err.message}`, errors_1.ErrorCodes.API_TIMEOUT, PROVIDER));
105
+ });
106
+ req.on('close', () => clearTimeout(timer));
107
+ if (bodyStr !== undefined) {
108
+ req.write(bodyStr);
109
+ }
110
+ req.end();
111
+ });
112
+ }
113
+ // ---------------------------------------------------------------------------
114
+ // Pagination helpers
115
+ // ---------------------------------------------------------------------------
116
+ function gitlabNextPage(headers) {
117
+ const next = headers['x-next-page'];
118
+ return next && next.trim() ? next.trim() : null;
119
+ }
120
+ function atlassianNextUrl(body) {
121
+ if (body && typeof body === 'object') {
122
+ const page = body;
123
+ const next = page._links?.next;
124
+ return next && typeof next === 'string' ? next : null;
125
+ }
126
+ return null;
127
+ }
128
+ // ---------------------------------------------------------------------------
129
+ // Public factory
130
+ // ---------------------------------------------------------------------------
131
+ function createApiClient(options, tokenManager) {
132
+ async function get(path, params) {
133
+ const url = buildUrl(options.baseUrl, path, params);
134
+ return makeRequest(options, tokenManager, 'GET', url);
135
+ }
136
+ async function post(path, body) {
137
+ const url = buildUrl(options.baseUrl, path);
138
+ return makeRequest(options, tokenManager, 'POST', url, body);
139
+ }
140
+ async function put(path, body) {
141
+ const url = buildUrl(options.baseUrl, path);
142
+ return makeRequest(options, tokenManager, 'PUT', url, body);
143
+ }
144
+ async function del(path) {
145
+ const url = buildUrl(options.baseUrl, path);
146
+ return makeRequest(options, tokenManager, 'DELETE', url);
147
+ }
148
+ async function getAllPages(path, params) {
149
+ const accumulated = [];
150
+ let pageNum = 1;
151
+ let nextUrl = null;
152
+ for (let i = 0; i < MAX_PAGES; i++) {
153
+ let response;
154
+ if (nextUrl) {
155
+ response = await makeRequest(options, tokenManager, 'GET', nextUrl);
156
+ }
157
+ else {
158
+ const pageParams = pageNum === 1 ? params : { ...params, page: String(pageNum) };
159
+ response = await get(path, pageParams);
160
+ }
161
+ if (Array.isArray(response.body)) {
162
+ accumulated.push(...response.body);
163
+ }
164
+ else {
165
+ accumulated.push(response.body);
166
+ }
167
+ // GitLab pagination takes priority
168
+ const gitlabNext = gitlabNextPage(response.headers);
169
+ if (gitlabNext) {
170
+ pageNum = parseInt(gitlabNext, 10);
171
+ nextUrl = null;
172
+ continue;
173
+ }
174
+ // Atlassian pagination
175
+ const atlassianNext = atlassianNextUrl(response.body);
176
+ if (atlassianNext) {
177
+ nextUrl = atlassianNext;
178
+ continue;
179
+ }
180
+ break;
181
+ }
182
+ return accumulated;
183
+ }
184
+ return { get, post, put, delete: del, getAllPages };
185
+ }
186
+ //# sourceMappingURL=http-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-client.js","sourceRoot":"","sources":["../../../src/mcp/token/http-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export type { OAuthConfig, TokenResult, TokenManager, TokenStatus, ApiClient, ApiClientOptions, ApiResponse, PKCEPair, } from './types';
2
+ export { NullTokenManager } from './null-token-manager';
3
+ export { OAuthTokenManager } from './manager';
4
+ export { generatePKCE, buildAuthUrl, exchangeCode, refreshToken, startCallbackServer, openBrowser } from './oauth';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp/token/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,WAAW,EACX,WAAW,EACX,YAAY,EACZ,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,WAAW,EACX,QAAQ,GACT,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.openBrowser = exports.startCallbackServer = exports.refreshToken = exports.exchangeCode = exports.buildAuthUrl = exports.generatePKCE = exports.OAuthTokenManager = exports.NullTokenManager = void 0;
4
+ var null_token_manager_1 = require("./null-token-manager");
5
+ Object.defineProperty(exports, "NullTokenManager", { enumerable: true, get: function () { return null_token_manager_1.NullTokenManager; } });
6
+ var manager_1 = require("./manager");
7
+ Object.defineProperty(exports, "OAuthTokenManager", { enumerable: true, get: function () { return manager_1.OAuthTokenManager; } });
8
+ var oauth_1 = require("./oauth");
9
+ Object.defineProperty(exports, "generatePKCE", { enumerable: true, get: function () { return oauth_1.generatePKCE; } });
10
+ Object.defineProperty(exports, "buildAuthUrl", { enumerable: true, get: function () { return oauth_1.buildAuthUrl; } });
11
+ Object.defineProperty(exports, "exchangeCode", { enumerable: true, get: function () { return oauth_1.exchangeCode; } });
12
+ Object.defineProperty(exports, "refreshToken", { enumerable: true, get: function () { return oauth_1.refreshToken; } });
13
+ Object.defineProperty(exports, "startCallbackServer", { enumerable: true, get: function () { return oauth_1.startCallbackServer; } });
14
+ Object.defineProperty(exports, "openBrowser", { enumerable: true, get: function () { return oauth_1.openBrowser; } });
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp/token/index.ts"],"names":[],"mappings":";;;AAUA,2DAAwD;AAA/C,sHAAA,gBAAgB,OAAA;AACzB,qCAA8C;AAArC,4GAAA,iBAAiB,OAAA;AAC1B,iCAAmH;AAA1G,qGAAA,YAAY,OAAA;AAAE,qGAAA,YAAY,OAAA;AAAE,qGAAA,YAAY,OAAA;AAAE,qGAAA,YAAY,OAAA;AAAE,4GAAA,mBAAmB,OAAA;AAAE,oGAAA,WAAW,OAAA"}