@opendatalabs/personal-server-ts-core 0.2.0 → 1.1.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.
Files changed (340) hide show
  1. package/dist/api/index.d.ts +160 -0
  2. package/dist/api/index.d.ts.map +1 -0
  3. package/dist/api/index.js +774 -0
  4. package/dist/api/index.js.map +1 -0
  5. package/dist/auth/index.d.ts +2 -0
  6. package/dist/auth/index.d.ts.map +1 -0
  7. package/dist/auth/index.js +2 -0
  8. package/dist/auth/index.js.map +1 -0
  9. package/dist/auth/request.d.ts +28 -0
  10. package/dist/auth/request.d.ts.map +1 -0
  11. package/dist/auth/request.js +106 -0
  12. package/dist/auth/request.js.map +1 -0
  13. package/dist/client.d.ts +233 -0
  14. package/dist/client.d.ts.map +1 -0
  15. package/dist/client.js +243 -0
  16. package/dist/client.js.map +1 -0
  17. package/dist/config/defaults.d.ts +5 -5
  18. package/dist/config/defaults.d.ts.map +1 -1
  19. package/dist/config/defaults.js +3 -5
  20. package/dist/config/defaults.js.map +1 -1
  21. package/dist/config/index.d.ts +0 -1
  22. package/dist/config/index.d.ts.map +1 -1
  23. package/dist/config/index.js +0 -1
  24. package/dist/config/index.js.map +1 -1
  25. package/dist/config/paths.d.ts.map +1 -1
  26. package/dist/config/paths.js +1 -9
  27. package/dist/config/paths.js.map +1 -1
  28. package/dist/contracts/access-logs.d.ts +8 -0
  29. package/dist/contracts/access-logs.d.ts.map +1 -0
  30. package/dist/contracts/access-logs.js +7 -0
  31. package/dist/contracts/access-logs.js.map +1 -0
  32. package/dist/contracts/auth-device.d.ts +70 -0
  33. package/dist/contracts/auth-device.d.ts.map +1 -0
  34. package/dist/contracts/auth-device.js +163 -0
  35. package/dist/contracts/auth-device.js.map +1 -0
  36. package/dist/contracts/binary.d.ts +54 -0
  37. package/dist/contracts/binary.d.ts.map +1 -0
  38. package/dist/contracts/binary.js +92 -0
  39. package/dist/contracts/binary.js.map +1 -0
  40. package/dist/contracts/config.d.ts +5 -0
  41. package/dist/contracts/config.d.ts.map +1 -0
  42. package/dist/contracts/config.js +30 -0
  43. package/dist/contracts/config.js.map +1 -0
  44. package/dist/contracts/data.d.ts +115 -0
  45. package/dist/contracts/data.d.ts.map +1 -0
  46. package/dist/contracts/data.js +237 -0
  47. package/dist/contracts/data.js.map +1 -0
  48. package/dist/contracts/grants.d.ts +45 -0
  49. package/dist/contracts/grants.d.ts.map +1 -0
  50. package/dist/contracts/grants.js +177 -0
  51. package/dist/contracts/grants.js.map +1 -0
  52. package/dist/contracts/http.d.ts +21 -0
  53. package/dist/contracts/http.d.ts.map +1 -0
  54. package/dist/contracts/http.js +49 -0
  55. package/dist/contracts/http.js.map +1 -0
  56. package/dist/contracts/index.d.ts +16 -0
  57. package/dist/contracts/index.d.ts.map +1 -0
  58. package/dist/contracts/index.js +10 -0
  59. package/dist/contracts/index.js.map +1 -0
  60. package/dist/contracts/oauth.d.ts +38 -0
  61. package/dist/contracts/oauth.d.ts.map +1 -0
  62. package/dist/contracts/oauth.js +130 -0
  63. package/dist/contracts/oauth.js.map +1 -0
  64. package/dist/contracts/sync.d.ts +10 -0
  65. package/dist/contracts/sync.d.ts.map +1 -0
  66. package/dist/contracts/sync.js +34 -0
  67. package/dist/contracts/sync.js.map +1 -0
  68. package/dist/errors/catalog.d.ts +9 -0
  69. package/dist/errors/catalog.d.ts.map +1 -1
  70. package/dist/errors/catalog.js +15 -0
  71. package/dist/errors/catalog.js.map +1 -1
  72. package/dist/grants/index.d.ts +2 -4
  73. package/dist/grants/index.d.ts.map +1 -1
  74. package/dist/grants/index.js +1 -2
  75. package/dist/grants/index.js.map +1 -1
  76. package/dist/keys/index.d.ts +1 -2
  77. package/dist/keys/index.d.ts.map +1 -1
  78. package/dist/keys/index.js +1 -2
  79. package/dist/keys/index.js.map +1 -1
  80. package/dist/keys/server-account.d.ts +5 -9
  81. package/dist/keys/server-account.d.ts.map +1 -1
  82. package/dist/keys/server-account.js +1 -47
  83. package/dist/keys/server-account.js.map +1 -1
  84. package/dist/logger/index.d.ts +6 -2
  85. package/dist/logger/index.d.ts.map +1 -1
  86. package/dist/logger/index.js +2 -6
  87. package/dist/logger/index.js.map +1 -1
  88. package/dist/logging/access-log.d.ts +0 -1
  89. package/dist/logging/access-log.d.ts.map +1 -1
  90. package/dist/logging/access-log.js +1 -24
  91. package/dist/logging/access-log.js.map +1 -1
  92. package/dist/logging/access-reader.d.ts +0 -5
  93. package/dist/logging/access-reader.d.ts.map +1 -1
  94. package/dist/logging/access-reader.js +1 -49
  95. package/dist/logging/access-reader.js.map +1 -1
  96. package/dist/mcp/activity.d.ts +68 -0
  97. package/dist/mcp/activity.d.ts.map +1 -0
  98. package/dist/mcp/activity.js +111 -0
  99. package/dist/mcp/activity.js.map +1 -0
  100. package/dist/mcp/builder-registration.d.ts +24 -0
  101. package/dist/mcp/builder-registration.d.ts.map +1 -0
  102. package/dist/mcp/builder-registration.js +89 -0
  103. package/dist/mcp/builder-registration.js.map +1 -0
  104. package/dist/mcp/connection-api.d.ts +170 -0
  105. package/dist/mcp/connection-api.d.ts.map +1 -0
  106. package/dist/mcp/connection-api.js +379 -0
  107. package/dist/mcp/connection-api.js.map +1 -0
  108. package/dist/mcp/grantee.d.ts +52 -0
  109. package/dist/mcp/grantee.d.ts.map +1 -0
  110. package/dist/mcp/grantee.js +91 -0
  111. package/dist/mcp/grantee.js.map +1 -0
  112. package/dist/mcp/index.d.ts +10 -0
  113. package/dist/mcp/index.d.ts.map +1 -0
  114. package/dist/mcp/index.js +10 -0
  115. package/dist/mcp/index.js.map +1 -0
  116. package/dist/mcp/read-client.d.ts +136 -0
  117. package/dist/mcp/read-client.d.ts.map +1 -0
  118. package/dist/mcp/read-client.js +306 -0
  119. package/dist/mcp/read-client.js.map +1 -0
  120. package/dist/mcp/resources.d.ts +37 -0
  121. package/dist/mcp/resources.d.ts.map +1 -0
  122. package/dist/mcp/resources.js +114 -0
  123. package/dist/mcp/resources.js.map +1 -0
  124. package/dist/mcp/search/index.d.ts +34 -0
  125. package/dist/mcp/search/index.d.ts.map +1 -0
  126. package/dist/mcp/search/index.js +69 -0
  127. package/dist/mcp/search/index.js.map +1 -0
  128. package/dist/mcp/server.d.ts +53 -0
  129. package/dist/mcp/server.d.ts.map +1 -0
  130. package/dist/mcp/server.js +308 -0
  131. package/dist/mcp/server.js.map +1 -0
  132. package/dist/mcp/store.d.ts +13 -0
  133. package/dist/mcp/store.d.ts.map +1 -0
  134. package/dist/mcp/store.js +98 -0
  135. package/dist/mcp/store.js.map +1 -0
  136. package/dist/mcp/tools.d.ts +60 -0
  137. package/dist/mcp/tools.d.ts.map +1 -0
  138. package/dist/mcp/tools.js +1058 -0
  139. package/dist/mcp/tools.js.map +1 -0
  140. package/dist/mcp/types.d.ts +97 -0
  141. package/dist/mcp/types.d.ts.map +1 -0
  142. package/dist/mcp/types.js +24 -0
  143. package/dist/mcp/types.js.map +1 -0
  144. package/dist/payment/index.d.ts +2 -0
  145. package/dist/payment/index.d.ts.map +1 -0
  146. package/dist/payment/index.js +2 -0
  147. package/dist/payment/index.js.map +1 -0
  148. package/dist/payment/x402.d.ts +155 -0
  149. package/dist/payment/x402.d.ts.map +1 -0
  150. package/dist/payment/x402.js +402 -0
  151. package/dist/payment/x402.js.map +1 -0
  152. package/dist/policy/data-read.d.ts +15 -0
  153. package/dist/policy/data-read.d.ts.map +1 -0
  154. package/dist/policy/data-read.js +84 -0
  155. package/dist/policy/data-read.js.map +1 -0
  156. package/dist/policy/index.d.ts +2 -0
  157. package/dist/policy/index.d.ts.map +1 -0
  158. package/dist/policy/index.js +2 -0
  159. package/dist/policy/index.js.map +1 -0
  160. package/dist/ports/index.d.ts +95 -0
  161. package/dist/ports/index.d.ts.map +1 -0
  162. package/dist/ports/index.js +7 -0
  163. package/dist/ports/index.js.map +1 -0
  164. package/dist/schemas/server-config.d.ts +12 -0
  165. package/dist/schemas/server-config.d.ts.map +1 -1
  166. package/dist/schemas/server-config.js +34 -4
  167. package/dist/schemas/server-config.js.map +1 -1
  168. package/dist/signing/index.d.ts +0 -1
  169. package/dist/signing/index.d.ts.map +1 -1
  170. package/dist/signing/index.js +0 -1
  171. package/dist/signing/index.js.map +1 -1
  172. package/dist/signing/request-signer.d.ts +8 -2
  173. package/dist/signing/request-signer.d.ts.map +1 -1
  174. package/dist/signing/request-signer.js +5 -31
  175. package/dist/signing/request-signer.js.map +1 -1
  176. package/dist/signing/signer.d.ts +20 -2
  177. package/dist/signing/signer.d.ts.map +1 -1
  178. package/dist/signing/signer.js +23 -13
  179. package/dist/signing/signer.js.map +1 -1
  180. package/dist/storage/adapters/index.d.ts +2 -1
  181. package/dist/storage/adapters/index.d.ts.map +1 -1
  182. package/dist/storage/adapters/index.js +2 -1
  183. package/dist/storage/adapters/index.js.map +1 -1
  184. package/dist/storage/adapters/interface.d.ts +10 -0
  185. package/dist/storage/adapters/interface.d.ts.map +1 -1
  186. package/dist/storage/adapters/sdk.d.ts +23 -0
  187. package/dist/storage/adapters/sdk.d.ts.map +1 -0
  188. package/dist/storage/adapters/sdk.js +73 -0
  189. package/dist/storage/adapters/sdk.js.map +1 -0
  190. package/dist/storage/adapters/vana.d.ts +7 -30
  191. package/dist/storage/adapters/vana.d.ts.map +1 -1
  192. package/dist/storage/adapters/vana.js +37 -92
  193. package/dist/storage/adapters/vana.js.map +1 -1
  194. package/dist/storage/blocks/build.d.ts +20 -0
  195. package/dist/storage/blocks/build.d.ts.map +1 -0
  196. package/dist/storage/blocks/build.js +378 -0
  197. package/dist/storage/blocks/build.js.map +1 -0
  198. package/dist/storage/blocks/cursor.d.ts +33 -0
  199. package/dist/storage/blocks/cursor.d.ts.map +1 -0
  200. package/dist/storage/blocks/cursor.js +142 -0
  201. package/dist/storage/blocks/cursor.js.map +1 -0
  202. package/dist/storage/blocks/errors.d.ts +6 -0
  203. package/dist/storage/blocks/errors.d.ts.map +1 -0
  204. package/dist/storage/blocks/errors.js +9 -0
  205. package/dist/storage/blocks/errors.js.map +1 -0
  206. package/dist/storage/blocks/index.d.ts +5 -0
  207. package/dist/storage/blocks/index.d.ts.map +1 -0
  208. package/dist/storage/blocks/index.js +4 -0
  209. package/dist/storage/blocks/index.js.map +1 -0
  210. package/dist/storage/blocks/types.d.ts +49 -0
  211. package/dist/storage/blocks/types.d.ts.map +1 -0
  212. package/dist/storage/blocks/types.js +2 -0
  213. package/dist/{grants → storage/blocks}/types.js.map +1 -1
  214. package/dist/storage/hierarchy/index.d.ts +0 -1
  215. package/dist/storage/hierarchy/index.d.ts.map +1 -1
  216. package/dist/storage/hierarchy/index.js +0 -1
  217. package/dist/storage/hierarchy/index.js.map +1 -1
  218. package/dist/storage/hierarchy/manager.d.ts +0 -14
  219. package/dist/storage/hierarchy/manager.d.ts.map +1 -1
  220. package/dist/storage/hierarchy/manager.js +1 -59
  221. package/dist/storage/hierarchy/manager.js.map +1 -1
  222. package/dist/storage/hierarchy/paths.d.ts.map +1 -1
  223. package/dist/storage/hierarchy/paths.js +11 -4
  224. package/dist/storage/hierarchy/paths.js.map +1 -1
  225. package/dist/storage/index/index.d.ts +2 -3
  226. package/dist/storage/index/index.d.ts.map +1 -1
  227. package/dist/storage/index/index.js +1 -2
  228. package/dist/storage/index/index.js.map +1 -1
  229. package/dist/storage/index/manager.d.ts +26 -6
  230. package/dist/storage/index/manager.d.ts.map +1 -1
  231. package/dist/storage/index/manager.js +1 -131
  232. package/dist/storage/index/manager.js.map +1 -1
  233. package/dist/storage/index/schema.d.ts +1 -3
  234. package/dist/storage/index/schema.d.ts.map +1 -1
  235. package/dist/storage/index/schema.js +1 -26
  236. package/dist/storage/index/schema.js.map +1 -1
  237. package/dist/storage/index/types.d.ts +16 -0
  238. package/dist/storage/index/types.d.ts.map +1 -1
  239. package/dist/storage/preview.d.ts +12 -0
  240. package/dist/storage/preview.d.ts.map +1 -0
  241. package/dist/storage/preview.js +239 -0
  242. package/dist/storage/preview.js.map +1 -0
  243. package/dist/sync/cursor.d.ts +5 -7
  244. package/dist/sync/cursor.d.ts.map +1 -1
  245. package/dist/sync/cursor.js +1 -18
  246. package/dist/sync/cursor.js.map +1 -1
  247. package/dist/sync/engine/sync-manager.d.ts +17 -0
  248. package/dist/sync/engine/sync-manager.d.ts.map +1 -1
  249. package/dist/sync/engine/sync-manager.js +104 -43
  250. package/dist/sync/engine/sync-manager.js.map +1 -1
  251. package/dist/sync/index.d.ts +4 -2
  252. package/dist/sync/index.d.ts.map +1 -1
  253. package/dist/sync/index.js +1 -1
  254. package/dist/sync/index.js.map +1 -1
  255. package/dist/sync/issues.d.ts +55 -0
  256. package/dist/sync/issues.d.ts.map +1 -0
  257. package/dist/sync/issues.js +168 -0
  258. package/dist/sync/issues.js.map +1 -0
  259. package/dist/sync/retry-memory.d.ts +33 -0
  260. package/dist/sync/retry-memory.d.ts.map +1 -0
  261. package/dist/sync/retry-memory.js +68 -0
  262. package/dist/sync/retry-memory.js.map +1 -0
  263. package/dist/sync/types.d.ts +9 -24
  264. package/dist/sync/types.d.ts.map +1 -1
  265. package/dist/sync/workers/delete.d.ts +42 -0
  266. package/dist/sync/workers/delete.d.ts.map +1 -0
  267. package/dist/sync/workers/delete.js +40 -0
  268. package/dist/sync/workers/delete.js.map +1 -0
  269. package/dist/sync/workers/download.d.ts +64 -18
  270. package/dist/sync/workers/download.d.ts.map +1 -1
  271. package/dist/sync/workers/download.js +396 -54
  272. package/dist/sync/workers/download.js.map +1 -1
  273. package/dist/sync/workers/upload.d.ts +29 -18
  274. package/dist/sync/workers/upload.d.ts.map +1 -1
  275. package/dist/sync/workers/upload.js +163 -46
  276. package/dist/sync/workers/upload.js.map +1 -1
  277. package/dist/test-utils/wallet.d.ts +1 -0
  278. package/dist/test-utils/wallet.d.ts.map +1 -1
  279. package/dist/test-utils/wallet.js +9 -31
  280. package/dist/test-utils/wallet.js.map +1 -1
  281. package/package.json +51 -27
  282. package/dist/auth/web3-signed.d.ts +0 -48
  283. package/dist/auth/web3-signed.d.ts.map +0 -1
  284. package/dist/auth/web3-signed.js +0 -110
  285. package/dist/auth/web3-signed.js.map +0 -1
  286. package/dist/config/loader.d.ts +0 -8
  287. package/dist/config/loader.d.ts.map +0 -1
  288. package/dist/config/loader.js +0 -38
  289. package/dist/config/loader.js.map +0 -1
  290. package/dist/gateway/client.d.ts +0 -98
  291. package/dist/gateway/client.d.ts.map +0 -1
  292. package/dist/gateway/client.js +0 -171
  293. package/dist/gateway/client.js.map +0 -1
  294. package/dist/grants/eip712.d.ts +0 -28
  295. package/dist/grants/eip712.d.ts.map +0 -1
  296. package/dist/grants/eip712.js +0 -30
  297. package/dist/grants/eip712.js.map +0 -1
  298. package/dist/grants/types.d.ts +0 -29
  299. package/dist/grants/types.d.ts.map +0 -1
  300. package/dist/grants/types.js +0 -6
  301. package/dist/grants/verify.d.ts +0 -24
  302. package/dist/grants/verify.d.ts.map +0 -1
  303. package/dist/grants/verify.js +0 -71
  304. package/dist/grants/verify.js.map +0 -1
  305. package/dist/keys/derive.d.ts +0 -18
  306. package/dist/keys/derive.d.ts.map +0 -1
  307. package/dist/keys/derive.js +0 -43
  308. package/dist/keys/derive.js.map +0 -1
  309. package/dist/schemas/data-file.d.ts +0 -20
  310. package/dist/schemas/data-file.d.ts.map +0 -1
  311. package/dist/schemas/data-file.js +0 -23
  312. package/dist/schemas/data-file.js.map +0 -1
  313. package/dist/scopes/index.d.ts +0 -3
  314. package/dist/scopes/index.d.ts.map +0 -1
  315. package/dist/scopes/index.js +0 -3
  316. package/dist/scopes/index.js.map +0 -1
  317. package/dist/scopes/match.d.ts +0 -13
  318. package/dist/scopes/match.d.ts.map +0 -1
  319. package/dist/scopes/match.js +0 -23
  320. package/dist/scopes/match.js.map +0 -1
  321. package/dist/scopes/parse.d.ts +0 -12
  322. package/dist/scopes/parse.d.ts.map +0 -1
  323. package/dist/scopes/parse.js +0 -29
  324. package/dist/scopes/parse.js.map +0 -1
  325. package/dist/signing/eip712.d.ts +0 -69
  326. package/dist/signing/eip712.d.ts.map +0 -1
  327. package/dist/signing/eip712.js +0 -68
  328. package/dist/signing/eip712.js.map +0 -1
  329. package/dist/storage/encryption/decrypt.d.ts +0 -10
  330. package/dist/storage/encryption/decrypt.d.ts.map +0 -1
  331. package/dist/storage/encryption/decrypt.js +0 -19
  332. package/dist/storage/encryption/decrypt.js.map +0 -1
  333. package/dist/storage/encryption/encrypt.d.ts +0 -10
  334. package/dist/storage/encryption/encrypt.d.ts.map +0 -1
  335. package/dist/storage/encryption/encrypt.js +0 -19
  336. package/dist/storage/encryption/encrypt.js.map +0 -1
  337. package/dist/storage/encryption/index.d.ts +0 -3
  338. package/dist/storage/encryption/index.d.ts.map +0 -1
  339. package/dist/storage/encryption/index.js +0 -3
  340. package/dist/storage/encryption/index.js.map +0 -1
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Per-connection MCP grantee key generation + Web3Signed request signing.
3
+ *
4
+ * Each MCP connection gets a fresh secp256k1 keypair. The PS route uses this
5
+ * keypair to sign every read it performs on behalf of the connection so:
6
+ *
7
+ * 1. The data read flows through `authorizeBuilderRead` exactly like any
8
+ * external builder request.
9
+ * 2. The access log records the per-connection grantee address, not the
10
+ * owner.
11
+ * 3. Disconnecting one MCP client cannot affect another or the owner.
12
+ *
13
+ * This module does NOT do encryption-at-rest. The caller chooses the storage
14
+ * representation (`McpEncryptedPrivateKey`) — for Node the `plaintext` variant
15
+ * is fine (same trust boundary as the on-disk server key); for Web PS Lite the
16
+ * caller should wrap with the owner-derived master key.
17
+ */
18
+ import { generatePrivateKey, privateKeyToAccount } from "viem/accounts";
19
+ import { buildWeb3SignedHeader } from "@opendatalabs/vana-sdk/browser";
20
+ /**
21
+ * Generate a new MCP grantee keypair and return both the persisted
22
+ * (plaintext-wrapped) form and a ready-to-sign `ServerAccount`.
23
+ */
24
+ export function generateMcpGrantee() {
25
+ const privateKey = generatePrivateKey();
26
+ const account = privateKeyToAccount(privateKey);
27
+ const serverAccount = {
28
+ address: account.address,
29
+ publicKey: account.publicKey,
30
+ async signTypedData(params) {
31
+ return account.signTypedData({
32
+ domain: params.domain,
33
+ types: params.types,
34
+ primaryType: params.primaryType,
35
+ message: params.message,
36
+ });
37
+ },
38
+ async signMessage(message) {
39
+ return account.signMessage({ message });
40
+ },
41
+ };
42
+ return {
43
+ key: {
44
+ address: account.address,
45
+ publicKey: account.publicKey,
46
+ encryptedPrivateKey: { kind: "plaintext", privateKey },
47
+ },
48
+ account: serverAccount,
49
+ };
50
+ }
51
+ /**
52
+ * Reconstruct a `ServerAccount` from a persisted MCP grantee record.
53
+ * Only `plaintext` is supported here; Web PS Lite must decrypt to plaintext
54
+ * before calling.
55
+ */
56
+ export function loadMcpGranteeAccount(key) {
57
+ if (key.encryptedPrivateKey.kind !== "plaintext") {
58
+ throw new Error("loadMcpGranteeAccount: only plaintext keys are supported here; decrypt first");
59
+ }
60
+ const account = privateKeyToAccount(key.encryptedPrivateKey.privateKey);
61
+ return {
62
+ address: account.address,
63
+ publicKey: account.publicKey,
64
+ async signTypedData(params) {
65
+ return account.signTypedData({
66
+ domain: params.domain,
67
+ types: params.types,
68
+ primaryType: params.primaryType,
69
+ message: params.message,
70
+ });
71
+ },
72
+ async signMessage(message) {
73
+ return account.signMessage({ message });
74
+ },
75
+ };
76
+ }
77
+ /**
78
+ * Build a Web3Signed Authorization header that authenticates the bearer as the
79
+ * MCP connection's grantee for a given grant id and request URL.
80
+ */
81
+ export async function signMcpGranteeRequest(params) {
82
+ return buildWeb3SignedHeader({
83
+ signMessage: (message) => params.account.signMessage(message),
84
+ aud: params.aud,
85
+ method: params.method,
86
+ uri: params.uri,
87
+ body: params.body,
88
+ grantId: params.grantId,
89
+ });
90
+ }
91
+ //# sourceMappingURL=grantee.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grantee.js","sourceRoot":"","sources":["../../src/mcp/grantee.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAevE;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,UAAU,GAAG,kBAAkB,EAAE,CAAC;IACxC,MAAM,OAAO,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,aAAa,GAAkB;QACnC,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,KAAK,CAAC,aAAa,CAAC,MAAM;YACxB,OAAO,OAAO,CAAC,aAAa,CAAC;gBAC3B,MAAM,EAAE,MAAM,CAAC,MAED;gBACd,KAAK,EAAE,MAAM,CAAC,KAED;gBACb,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,WAAW,CAAC,OAAO;YACvB,OAAO,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1C,CAAC;KACF,CAAC;IACF,OAAO;QACL,GAAG,EAAE;YACH,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,mBAAmB,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE;SACvD;QACD,OAAO,EAAE,aAAa;KACvB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAkB;IACtD,IAAI,GAAG,CAAC,mBAAmB,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CACb,8EAA8E,CAC/E,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;IACxE,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,KAAK,CAAC,aAAa,CAAC,MAAM;YACxB,OAAO,OAAO,CAAC,aAAa,CAAC;gBAC3B,MAAM,EAAE,MAAM,CAAC,MAED;gBACd,KAAK,EAAE,MAAM,CAAC,KAED;gBACb,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,WAAW,CAAC,OAAO;YACvB,OAAO,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1C,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,MAO3C;IACC,OAAO,qBAAqB,CAAC;QAC3B,WAAW,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;QACrE,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,10 @@
1
+ export * from "./types.js";
2
+ export * from "./store.js";
3
+ export * from "./grantee.js";
4
+ export * from "./builder-registration.js";
5
+ export * from "./read-client.js";
6
+ export * from "./tools.js";
7
+ export * from "./server.js";
8
+ export * from "./connection-api.js";
9
+ export * from "./activity.js";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC"}
@@ -0,0 +1,10 @@
1
+ export * from "./types.js";
2
+ export * from "./store.js";
3
+ export * from "./grantee.js";
4
+ export * from "./builder-registration.js";
5
+ export * from "./read-client.js";
6
+ export * from "./tools.js";
7
+ export * from "./server.js";
8
+ export * from "./connection-api.js";
9
+ export * from "./activity.js";
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * In-process MCP read client.
3
+ *
4
+ * The MCP route accepts a tool call from an MCP client, then needs to read scoped data
5
+ * from the user's Personal Server *as the per-connection grantee*. We do NOT
6
+ * round-trip through the public HTTP origin for this — the relay/tunnel is only
7
+ * for inbound MCP traffic. Instead we:
8
+ *
9
+ * 1. Build a Web Request signed by the connection's grantee, with the
10
+ * existing grantId in the Web3Signed payload.
11
+ * 2. Use the same auth and access-log ports as `/v1/data`, then read bounded
12
+ * block sidecars from storage. MCP tools must not fall back to full envelope
13
+ * reads when sidecars are unavailable.
14
+ *
15
+ * This guarantees parity: the MCP read goes through the same policy check
16
+ * (`verifyDataReadPolicy`) and access-log path as an external builder read.
17
+ * No special owner-mode code path; no shared global grantee; logs record the
18
+ * per-connection grantee address.
19
+ */
20
+ import type { ServerAccount } from "../keys/server-account.js";
21
+ import type { ScopeSummary } from "../storage/index/types.js";
22
+ import type { ReadScopeBlocksResponse } from "../storage/blocks/types.js";
23
+ import type { SearchHit } from "./search/index.js";
24
+ import { type PersonalServerDataApiDeps } from "../api/index.js";
25
+ export interface McpScopeMetadata {
26
+ scope: string;
27
+ collectedAt: string;
28
+ sizeBytes: number;
29
+ /** True when the bounded block read path is available for this scope. */
30
+ hasBlocks: boolean;
31
+ }
32
+ export interface McpDataReadClient {
33
+ /**
34
+ * Perform `GET /v1/data?scopePrefix=…` as the connection grantee. This is
35
+ * used only for discovery/expanding wildcard grants before a grant-gated
36
+ * read; it does not return scope contents.
37
+ */
38
+ listScopes(params?: {
39
+ scopePrefix?: string;
40
+ limit?: number;
41
+ offset?: number;
42
+ }): Promise<McpDataListResult>;
43
+ /**
44
+ * Return lightweight planning metadata for a scope using the storage index
45
+ * only — no network call, no block read, no auth. Used by list_granted_scopes
46
+ * to populate sizeBytes/sizeClass/recommendedAccess without reading data.
47
+ * Returns null when the scope has no local index entry.
48
+ */
49
+ getScopeMetadata(scope: string): Promise<McpScopeMetadata | null>;
50
+ /**
51
+ * Perform a grant-gated bounded block read for MCP. This is the path used by
52
+ * MCP tools that need pagination and must not fall back to full envelope
53
+ * reads when the bounded storage path is unavailable.
54
+ */
55
+ readScopeBlocks(params: {
56
+ scope: string;
57
+ grantId: string;
58
+ cursor?: string;
59
+ maxBytes?: number;
60
+ }): Promise<McpDataReadBlocksResult>;
61
+ /**
62
+ * Perform a grant-gated raw binary read for an approved binary scope. This
63
+ * reuses `/v1/data/{scope}?content=raw` so policy checks and access logs stay
64
+ * identical to normal builder reads.
65
+ */
66
+ readRawScopeFile(params: {
67
+ scope: string;
68
+ grantId: string;
69
+ at?: string;
70
+ fileId?: string;
71
+ }): Promise<McpDataReadRawFileResult>;
72
+ /**
73
+ * Optional indexed search path. Implementations may return `missing` while
74
+ * an index is absent/stale; callers must keep the bounded block read path as
75
+ * fallback so full data remains accessible.
76
+ */
77
+ searchScopeIndex?(params: {
78
+ scope: string;
79
+ grantId: string;
80
+ query: string;
81
+ maxResults: number;
82
+ }): Promise<{
83
+ status: "hit";
84
+ hits: SearchHit[];
85
+ } | {
86
+ status: "missing";
87
+ }>;
88
+ }
89
+ export interface McpDataListResult {
90
+ status: number;
91
+ scopes: ScopeSummary[];
92
+ total: number;
93
+ limit: number;
94
+ offset: number;
95
+ }
96
+ export interface McpDataReadBlocksResult extends ReadScopeBlocksResponse {
97
+ status: number;
98
+ }
99
+ export interface McpDataReadRawFileResult {
100
+ status: number;
101
+ scope: string;
102
+ collectedAt?: string;
103
+ fileId?: string;
104
+ mimeType: string;
105
+ filename?: string;
106
+ sizeBytes: number;
107
+ contentBase64: string;
108
+ metadata?: unknown;
109
+ }
110
+ export declare class McpDataReadError extends Error {
111
+ status: number;
112
+ body: unknown;
113
+ constructor(status: number, body: unknown);
114
+ }
115
+ export interface CreateMcpDataReadClientOptions {
116
+ /**
117
+ * Origin the Web3Signed payload's `aud` claim is bound to. This MUST match
118
+ * the `serverOrigin` configured on the data API auth port — otherwise the
119
+ * signature audience check will fail.
120
+ */
121
+ serverOrigin: string;
122
+ granteeAccount: ServerAccount;
123
+ /**
124
+ * The data API deps used to mount `/v1/data` for external traffic. We reuse
125
+ * the exact same handler + ports so policy and access-logging are identical.
126
+ */
127
+ dataApiDeps: PersonalServerDataApiDeps;
128
+ /**
129
+ * Base path the data API was mounted under externally — required so the
130
+ * Web3Signed signature URI matches what `handlePersonalServerDataRequest`
131
+ * expects after strip-base-path. Defaults to `/v1/data`.
132
+ */
133
+ basePath?: string;
134
+ }
135
+ export declare function createMcpDataReadClient(options: CreateMcpDataReadClientOptions): McpDataReadClient;
136
+ //# sourceMappingURL=read-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-client.d.ts","sourceRoot":"","sources":["../../src/mcp/read-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,306 @@
1
+ /**
2
+ * In-process MCP read client.
3
+ *
4
+ * The MCP route accepts a tool call from an MCP client, then needs to read scoped data
5
+ * from the user's Personal Server *as the per-connection grantee*. We do NOT
6
+ * round-trip through the public HTTP origin for this — the relay/tunnel is only
7
+ * for inbound MCP traffic. Instead we:
8
+ *
9
+ * 1. Build a Web Request signed by the connection's grantee, with the
10
+ * existing grantId in the Web3Signed payload.
11
+ * 2. Use the same auth and access-log ports as `/v1/data`, then read bounded
12
+ * block sidecars from storage. MCP tools must not fall back to full envelope
13
+ * reads when sidecars are unavailable.
14
+ *
15
+ * This guarantees parity: the MCP read goes through the same policy check
16
+ * (`verifyDataReadPolicy`) and access-log path as an external builder read.
17
+ * No special owner-mode code path; no shared global grantee; logs record the
18
+ * per-connection grantee address.
19
+ */
20
+ import { decodeDataBlockCursor } from "../storage/blocks/index.js";
21
+ import { bytesToBase64, parseMetadataHeader } from "../contracts/binary.js";
22
+ import { signMcpGranteeRequest } from "./grantee.js";
23
+ import { handlePersonalServerDataRequest, reportPersonalServerReadFulfillment, } from "../api/index.js";
24
+ import { ProtocolError } from "../errors/catalog.js";
25
+ export class McpDataReadError extends Error {
26
+ status;
27
+ body;
28
+ constructor(status, body) {
29
+ super(typeof body === "object" && body !== null && "error" in body
30
+ ? String(body.error?.message ??
31
+ `mcp data read failed (status ${status})`)
32
+ : `mcp data read failed (status ${status})`);
33
+ this.status = status;
34
+ this.body = body;
35
+ }
36
+ }
37
+ export function createMcpDataReadClient(options) {
38
+ const basePath = options.basePath ?? "/v1/data";
39
+ return {
40
+ async listScopes({ scopePrefix, limit, offset } = {}) {
41
+ const params = new URLSearchParams();
42
+ if (scopePrefix)
43
+ params.set("scopePrefix", scopePrefix);
44
+ if (limit !== undefined)
45
+ params.set("limit", String(limit));
46
+ if (offset !== undefined)
47
+ params.set("offset", String(offset));
48
+ const query = params.toString();
49
+ const pathWithQuery = query ? `${basePath}?${query}` : basePath;
50
+ const authorization = await signMcpGranteeRequest({
51
+ account: options.granteeAccount,
52
+ aud: options.serverOrigin,
53
+ method: "GET",
54
+ uri: basePath,
55
+ grantId: "mcp-list",
56
+ });
57
+ const url = new URL(pathWithQuery, options.serverOrigin).toString();
58
+ const request = new Request(url, {
59
+ method: "GET",
60
+ headers: { Authorization: authorization },
61
+ });
62
+ const response = await handlePersonalServerDataRequest(request, options.dataApiDeps, { basePath });
63
+ const body = await parseJsonOrText(response);
64
+ if (!response.ok) {
65
+ throw new McpDataReadError(response.status, body);
66
+ }
67
+ return { status: response.status, ...normalizeListScopesPayload(body) };
68
+ },
69
+ async getScopeMetadata(scope) {
70
+ const storage = options.dataApiDeps.storage;
71
+ const entry = storage.findEntry({ scope });
72
+ if (!entry)
73
+ return null;
74
+ const hasBlocks = typeof storage.hasScopeBlocks === "function"
75
+ ? await storage.hasScopeBlocks(scope, entry.collectedAt)
76
+ : false;
77
+ return {
78
+ scope,
79
+ collectedAt: entry.collectedAt,
80
+ sizeBytes: entry.sizeBytes,
81
+ hasBlocks,
82
+ };
83
+ },
84
+ async readScopeBlocks({ scope, grantId, cursor, maxBytes }) {
85
+ const storage = options.dataApiDeps.storage;
86
+ if (!storage.readScopeBlocks) {
87
+ throw new McpDataReadError(503, {
88
+ error: "BOUNDED_DATA_UNAVAILABLE",
89
+ message: "Bounded scope data is unavailable while the storage sidecar is missing or still indexing.",
90
+ scope,
91
+ });
92
+ }
93
+ const pinnedCollectedAt = collectedAtFromCursor(scope, cursor);
94
+ const selectedEntry = storage.findEntry({
95
+ scope,
96
+ ...(pinnedCollectedAt ? { at: pinnedCollectedAt } : {}),
97
+ });
98
+ if (!selectedEntry) {
99
+ throw new McpDataReadError(404, {
100
+ error: "NOT_FOUND",
101
+ message: `No data found for scope "${scope}"`,
102
+ });
103
+ }
104
+ const safeScope = encodeURIComponent(scope);
105
+ const signingUri = `${basePath}/${safeScope}`;
106
+ const authorization = await signMcpGranteeRequest({
107
+ account: options.granteeAccount,
108
+ aud: options.serverOrigin,
109
+ method: "GET",
110
+ uri: signingUri,
111
+ grantId,
112
+ });
113
+ const url = new URL(signingUri, options.serverOrigin).toString();
114
+ const request = new Request(url, {
115
+ method: "GET",
116
+ headers: { Authorization: authorization },
117
+ });
118
+ let authResult;
119
+ try {
120
+ authResult = await options.dataApiDeps.auth.authorizeBuilderRead({
121
+ request,
122
+ scope,
123
+ grantId,
124
+ fileId: selectedEntry.fileId ?? undefined,
125
+ });
126
+ }
127
+ catch (err) {
128
+ if (err instanceof ProtocolError) {
129
+ throw new McpDataReadError(err.code, err.toJSON());
130
+ }
131
+ throw err;
132
+ }
133
+ try {
134
+ const result = await storage.readScopeBlocks(scope, selectedEntry.collectedAt, {
135
+ cursor,
136
+ maxBytes: maxBytes ?? 16_384,
137
+ });
138
+ const logId = options.dataApiDeps.createLogId?.() ?? crypto.randomUUID();
139
+ const timestamp = (options.dataApiDeps.now ?? (() => new Date()))().toISOString();
140
+ const ipAddress = request.headers.get("x-forwarded-for") ??
141
+ request.headers.get("x-real-ip") ??
142
+ "unknown";
143
+ const userAgent = request.headers.get("user-agent") ?? "unknown";
144
+ await options.dataApiDeps.accessLogWriter.write({
145
+ logId,
146
+ grantId: authResult?.grantId ?? grantId,
147
+ builder: authResult?.builder ?? options.granteeAccount.address,
148
+ action: "read",
149
+ scope,
150
+ timestamp,
151
+ ipAddress,
152
+ userAgent,
153
+ });
154
+ if (authResult?.grantId &&
155
+ authResult.builder &&
156
+ !cursor &&
157
+ !result.nextCursor) {
158
+ reportPersonalServerReadFulfillment(options.dataApiDeps, {
159
+ builder: authResult.builder,
160
+ fileId: selectedEntry.fileId ?? undefined,
161
+ grantId: authResult.grantId,
162
+ ipAddress,
163
+ logId,
164
+ scope,
165
+ servedAt: timestamp,
166
+ userAgent,
167
+ });
168
+ }
169
+ return { status: 200, ...result };
170
+ }
171
+ catch (err) {
172
+ if (err instanceof ProtocolError) {
173
+ throw new McpDataReadError(err.code, err.toJSON());
174
+ }
175
+ if (err instanceof Error) {
176
+ const code = dataBlockStorageErrorCode(err);
177
+ const status = code === "cursor_invalid" ? 400 : 503;
178
+ throw new McpDataReadError(status, {
179
+ error: code === "cursor_invalid"
180
+ ? "INVALID_CURSOR"
181
+ : "BOUNDED_DATA_UNAVAILABLE",
182
+ message: code === "cursor_invalid"
183
+ ? "The bounded read cursor is invalid for this scope."
184
+ : "Bounded scope data is unavailable while the storage sidecar is missing or still indexing.",
185
+ scope,
186
+ ...(code ? { reason: code } : {}),
187
+ });
188
+ }
189
+ throw err;
190
+ }
191
+ },
192
+ async readRawScopeFile({ scope, grantId, at, fileId }) {
193
+ const storage = options.dataApiDeps.storage;
194
+ const selectedEntry = storage.findEntry({
195
+ scope,
196
+ ...(fileId ? { fileId } : {}),
197
+ ...(at ? { at } : {}),
198
+ });
199
+ if (!selectedEntry) {
200
+ throw new McpDataReadError(404, {
201
+ error: "NOT_FOUND",
202
+ message: `No data found for scope "${scope}"`,
203
+ });
204
+ }
205
+ const safeScope = encodeURIComponent(scope);
206
+ const signingUri = `${basePath}/${safeScope}`;
207
+ const query = new URLSearchParams({ content: "raw" });
208
+ if (fileId)
209
+ query.set("fileId", fileId);
210
+ if (at)
211
+ query.set("at", at);
212
+ query.set("grantId", grantId);
213
+ const authorization = await signMcpGranteeRequest({
214
+ account: options.granteeAccount,
215
+ aud: options.serverOrigin,
216
+ method: "GET",
217
+ uri: signingUri,
218
+ grantId,
219
+ });
220
+ const url = new URL(`${signingUri}?${query.toString()}`, options.serverOrigin).toString();
221
+ const request = new Request(url, {
222
+ method: "GET",
223
+ headers: { Authorization: authorization },
224
+ });
225
+ const response = await handlePersonalServerDataRequest(request, options.dataApiDeps, { basePath });
226
+ if (!response.ok) {
227
+ throw new McpDataReadError(response.status, await parseJsonOrText(response));
228
+ }
229
+ const mimeType = response.headers.get("content-type") ?? "application/octet-stream";
230
+ if (mimeType.includes("application/json")) {
231
+ throw new McpDataReadError(400, {
232
+ error: "NOT_BINARY_SCOPE",
233
+ message: `Scope "${scope}" does not expose raw binary content.`,
234
+ });
235
+ }
236
+ const bytes = new Uint8Array(await response.arrayBuffer());
237
+ const contentDisposition = response.headers.get("content-disposition");
238
+ const metadataHeader = response.headers.get("x-vana-metadata");
239
+ return {
240
+ status: response.status,
241
+ scope,
242
+ collectedAt: selectedEntry.collectedAt,
243
+ fileId: selectedEntry.fileId ?? undefined,
244
+ mimeType,
245
+ filename: filenameFromContentDisposition(contentDisposition),
246
+ sizeBytes: bytes.byteLength,
247
+ contentBase64: bytesToBase64(bytes),
248
+ metadata: parseMetadataHeader(metadataHeader),
249
+ };
250
+ },
251
+ };
252
+ }
253
+ async function parseJsonOrText(response) {
254
+ const text = await response.text();
255
+ try {
256
+ return text ? JSON.parse(text) : null;
257
+ }
258
+ catch {
259
+ return text;
260
+ }
261
+ }
262
+ function filenameFromContentDisposition(value) {
263
+ if (!value)
264
+ return undefined;
265
+ const match = /filename="([^"]+)"/i.exec(value) ?? /filename=([^;]+)/i.exec(value);
266
+ return match?.[1]?.trim();
267
+ }
268
+ function collectedAtFromCursor(scope, cursor) {
269
+ if (!cursor)
270
+ return undefined;
271
+ const decoded = decodeDataBlockCursor(cursor);
272
+ if (!decoded.ok || decoded.cursor.scope !== scope)
273
+ return undefined;
274
+ return decoded.cursor.collectedAt;
275
+ }
276
+ function dataBlockStorageErrorCode(err) {
277
+ if (!("code" in err))
278
+ return undefined;
279
+ const code = err.code;
280
+ return typeof code === "string" ? code : undefined;
281
+ }
282
+ function normalizeListScopesPayload(body) {
283
+ if (typeof body !== "object" || body === null) {
284
+ return { scopes: [], total: 0, limit: 0, offset: 0 };
285
+ }
286
+ const payload = body;
287
+ const scopes = Array.isArray(payload.scopes)
288
+ ? payload.scopes.filter(isScopeSummary)
289
+ : [];
290
+ return {
291
+ scopes,
292
+ total: typeof payload.total === "number" ? payload.total : scopes.length,
293
+ limit: typeof payload.limit === "number" ? payload.limit : scopes.length,
294
+ offset: typeof payload.offset === "number" ? payload.offset : 0,
295
+ };
296
+ }
297
+ function isScopeSummary(value) {
298
+ if (typeof value !== "object" || value === null) {
299
+ return false;
300
+ }
301
+ const summary = value;
302
+ return (typeof summary.scope === "string" &&
303
+ typeof summary.latestCollectedAt === "string" &&
304
+ typeof summary.versionCount === "number");
305
+ }
306
+ //# sourceMappingURL=read-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-client.js","sourceRoot":"","sources":["../../src/mcp/read-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAMH,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EACL,+BAA+B,EAC/B,mCAAmC,GAEpC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAmGrD,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAEhC;IACA;IAFT,YACS,MAAc,EACd,IAAa;QAEpB,KAAK,CACH,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,IAAI;YAC1D,CAAC,CAAC,MAAM,CACH,IAAyC,CAAC,KAAK,EAAE,OAAO;gBACvD,gCAAgC,MAAM,GAAG,CAC5C;YACH,CAAC,CAAC,gCAAgC,MAAM,GAAG,CAC9C,CAAC;QAVK,WAAM,GAAN,MAAM,CAAQ;QACd,SAAI,GAAJ,IAAI,CAAS;IAUtB,CAAC;CACF;AAuBD,MAAM,UAAU,uBAAuB,CACrC,OAAuC;IAEvC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,UAAU,CAAC;IAEhD,OAAO;QACL,KAAK,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE;YAClD,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;YACrC,IAAI,WAAW;gBAAE,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;YACxD,IAAI,KAAK,KAAK,SAAS;gBAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC5D,IAAI,MAAM,KAAK,SAAS;gBAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YAC/D,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;YAChC,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;YAEhE,MAAM,aAAa,GAAG,MAAM,qBAAqB,CAAC;gBAChD,OAAO,EAAE,OAAO,CAAC,cAAc;gBAC/B,GAAG,EAAE,OAAO,CAAC,YAAY;gBACzB,MAAM,EAAE,KAAK;gBACb,GAAG,EAAE,QAAQ;gBACb,OAAO,EAAE,UAAU;aACpB,CAAC,CAAC;YAEH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;YACpE,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;gBAC/B,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,EAAE,aAAa,EAAE,aAAa,EAAE;aAC1C,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,MAAM,+BAA+B,CACpD,OAAO,EACP,OAAO,CAAC,WAAW,EACnB,EAAE,QAAQ,EAAE,CACb,CAAC;YAEF,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAC;YAE7C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,gBAAgB,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACpD,CAAC;YAED,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,GAAG,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1E,CAAC;QAED,KAAK,CAAC,gBAAgB,CAAC,KAAa;YAClC,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;YAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YAC3C,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC;YACxB,MAAM,SAAS,GACb,OAAO,OAAO,CAAC,cAAc,KAAK,UAAU;gBAC1C,CAAC,CAAC,MAAM,OAAO,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC;gBACxD,CAAC,CAAC,KAAK,CAAC;YACZ,OAAO;gBACL,KAAK;gBACL,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,SAAS;aACV,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE;YACxD,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;YAC5C,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;gBAC7B,MAAM,IAAI,gBAAgB,CAAC,GAAG,EAAE;oBAC9B,KAAK,EAAE,0BAA0B;oBACjC,OAAO,EACL,2FAA2F;oBAC7F,KAAK;iBACN,CAAC,CAAC;YACL,CAAC;YAED,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAC/D,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC;gBACtC,KAAK;gBACL,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACxD,CAAC,CAAC;YACH,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,IAAI,gBAAgB,CAAC,GAAG,EAAE;oBAC9B,KAAK,EAAE,WAAW;oBAClB,OAAO,EAAE,4BAA4B,KAAK,GAAG;iBAC9C,CAAC,CAAC;YACL,CAAC;YAED,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC5C,MAAM,UAAU,GAAG,GAAG,QAAQ,IAAI,SAAS,EAAE,CAAC;YAC9C,MAAM,aAAa,GAAG,MAAM,qBAAqB,CAAC;gBAChD,OAAO,EAAE,OAAO,CAAC,cAAc;gBAC/B,GAAG,EAAE,OAAO,CAAC,YAAY;gBACzB,MAAM,EAAE,KAAK;gBACb,GAAG,EAAE,UAAU;gBACf,OAAO;aACR,CAAC,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;YACjE,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;gBAC/B,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,EAAE,aAAa,EAAE,aAAa,EAAE;aAC1C,CAAC,CAAC;YAEH,IAAI,UAMS,CAAC;YACd,IAAI,CAAC;gBACH,UAAU,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,oBAAoB,CAAC;oBAC/D,OAAO;oBACP,KAAK;oBACL,OAAO;oBACP,MAAM,EAAE,aAAa,CAAC,MAAM,IAAI,SAAS;iBAC1C,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;oBACjC,MAAM,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;gBACrD,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,eAAe,CAC1C,KAAK,EACL,aAAa,CAAC,WAAW,EACzB;oBACE,MAAM;oBACN,QAAQ,EAAE,QAAQ,IAAI,MAAM;iBAC7B,CACF,CAAC;gBACF,MAAM,KAAK,GACT,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBAC7D,MAAM,SAAS,GAAG,CAChB,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAC9C,EAAE,CAAC,WAAW,EAAE,CAAC;gBAClB,MAAM,SAAS,GACb,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;oBACtC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;oBAChC,SAAS,CAAC;gBACZ,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC;gBACjE,MAAM,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC;oBAC9C,KAAK;oBACL,OAAO,EAAE,UAAU,EAAE,OAAO,IAAI,OAAO;oBACvC,OAAO,EAAE,UAAU,EAAE,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC,OAAO;oBAC9D,MAAM,EAAE,MAAM;oBACd,KAAK;oBACL,SAAS;oBACT,SAAS;oBACT,SAAS;iBACV,CAAC,CAAC;gBACH,IACE,UAAU,EAAE,OAAO;oBACnB,UAAU,CAAC,OAAO;oBAClB,CAAC,MAAM;oBACP,CAAC,MAAM,CAAC,UAAU,EAClB,CAAC;oBACD,mCAAmC,CAAC,OAAO,CAAC,WAAW,EAAE;wBACvD,OAAO,EAAE,UAAU,CAAC,OAAO;wBAC3B,MAAM,EAAE,aAAa,CAAC,MAAM,IAAI,SAAS;wBACzC,OAAO,EAAE,UAAU,CAAC,OAAO;wBAC3B,SAAS;wBACT,KAAK;wBACL,KAAK;wBACL,QAAQ,EAAE,SAAS;wBACnB,SAAS;qBACV,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;YACpC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;oBACjC,MAAM,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;gBACrD,CAAC;gBACD,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;oBACzB,MAAM,IAAI,GAAG,yBAAyB,CAAC,GAAG,CAAC,CAAC;oBAC5C,MAAM,MAAM,GAAG,IAAI,KAAK,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;oBACrD,MAAM,IAAI,gBAAgB,CAAC,MAAM,EAAE;wBACjC,KAAK,EACH,IAAI,KAAK,gBAAgB;4BACvB,CAAC,CAAC,gBAAgB;4BAClB,CAAC,CAAC,0BAA0B;wBAChC,OAAO,EACL,IAAI,KAAK,gBAAgB;4BACvB,CAAC,CAAC,oDAAoD;4BACtD,CAAC,CAAC,2FAA2F;wBACjG,KAAK;wBACL,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAClC,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;QAED,KAAK,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE;YACnD,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;YAC5C,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC;gBACtC,KAAK;gBACL,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7B,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACtB,CAAC,CAAC;YACH,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,IAAI,gBAAgB,CAAC,GAAG,EAAE;oBAC9B,KAAK,EAAE,WAAW;oBAClB,OAAO,EAAE,4BAA4B,KAAK,GAAG;iBAC9C,CAAC,CAAC;YACL,CAAC;YAED,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC5C,MAAM,UAAU,GAAG,GAAG,QAAQ,IAAI,SAAS,EAAE,CAAC;YAC9C,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YACtD,IAAI,MAAM;gBAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACxC,IAAI,EAAE;gBAAE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC5B,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAE9B,MAAM,aAAa,GAAG,MAAM,qBAAqB,CAAC;gBAChD,OAAO,EAAE,OAAO,CAAC,cAAc;gBAC/B,GAAG,EAAE,OAAO,CAAC,YAAY;gBACzB,MAAM,EAAE,KAAK;gBACb,GAAG,EAAE,UAAU;gBACf,OAAO;aACR,CAAC,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,GAAG,CACjB,GAAG,UAAU,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,EACnC,OAAO,CAAC,YAAY,CACrB,CAAC,QAAQ,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;gBAC/B,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,EAAE,aAAa,EAAE,aAAa,EAAE;aAC1C,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,MAAM,+BAA+B,CACpD,OAAO,EACP,OAAO,CAAC,WAAW,EACnB,EAAE,QAAQ,EAAE,CACb,CAAC;YACF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,gBAAgB,CACxB,QAAQ,CAAC,MAAM,EACf,MAAM,eAAe,CAAC,QAAQ,CAAC,CAChC,CAAC;YACJ,CAAC;YAED,MAAM,QAAQ,GACZ,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,0BAA0B,CAAC;YACrE,IAAI,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBAC1C,MAAM,IAAI,gBAAgB,CAAC,GAAG,EAAE;oBAC9B,KAAK,EAAE,kBAAkB;oBACzB,OAAO,EAAE,UAAU,KAAK,uCAAuC;iBAChE,CAAC,CAAC;YACL,CAAC;YAED,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;YAC3D,MAAM,kBAAkB,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;YACvE,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;YAC/D,OAAO;gBACL,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,KAAK;gBACL,WAAW,EAAE,aAAa,CAAC,WAAW;gBACtC,MAAM,EAAE,aAAa,CAAC,MAAM,IAAI,SAAS;gBACzC,QAAQ;gBACR,QAAQ,EAAE,8BAA8B,CAAC,kBAAkB,CAAC;gBAC5D,SAAS,EAAE,KAAK,CAAC,UAAU;gBAC3B,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC;gBACnC,QAAQ,EAAE,mBAAmB,CAAC,cAAc,CAAC;aAC9C,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,QAAkB;IAC/C,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,8BAA8B,CACrC,KAAoB;IAEpB,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,KAAK,GACT,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;AAC5B,CAAC;AAED,SAAS,qBAAqB,CAC5B,KAAa,EACb,MAA0B;IAE1B,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,MAAM,OAAO,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9C,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK;QAAE,OAAO,SAAS,CAAC;IACpE,OAAO,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC;AACpC,CAAC;AAED,SAAS,yBAAyB,CAAC,GAAU;IAC3C,IAAI,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IACvC,MAAM,IAAI,GAAI,GAA0B,CAAC,IAAI,CAAC;IAC9C,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACrD,CAAC;AAED,SAAS,0BAA0B,CACjC,IAAa;IAEb,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAC9C,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;IACD,MAAM,OAAO,GAAG,IAKf,CAAC;IACF,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;QAC1C,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;QACvC,CAAC,CAAC,EAAE,CAAC;IACP,OAAO;QACL,MAAM;QACN,KAAK,EAAE,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM;QACxE,KAAK,EAAE,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM;QACxE,MAAM,EAAE,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;KAChE,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,OAAO,GAAG,KAIf,CAAC;IACF,OAAO,CACL,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ;QACjC,OAAO,OAAO,CAAC,iBAAiB,KAAK,QAAQ;QAC7C,OAAO,OAAO,CAAC,YAAY,KAAK,QAAQ,CACzC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,37 @@
1
+ import type { ReadResourceResult } from "@modelcontextprotocol/sdk/types.js";
2
+ import { z } from "zod";
3
+ import { type McpDataReadClient } from "./read-client.js";
4
+ import type { McpConnectionRecord } from "./types.js";
5
+ export declare const RAW_SCOPE_RESOURCE_TEMPLATES: readonly ["vana://scope/{scope}/raw", "vana://scope/{scope}/raw/at/{at}", "vana://scope/{scope}/raw/file/{fileId}"];
6
+ export interface RawScopeResourceParams {
7
+ scope: string;
8
+ at?: string;
9
+ fileId?: string;
10
+ }
11
+ export interface RawScopeResourceContext {
12
+ connection: McpConnectionRecord;
13
+ readClient: McpDataReadClient;
14
+ }
15
+ export declare function rawScopeResourceUri(params: RawScopeResourceParams): string;
16
+ export declare function parseRawScopeResourceUri(uri: URL): RawScopeResourceParams;
17
+ export declare function resolveGrantForRawScopeResource(connection: McpConnectionRecord, scope: string): {
18
+ grantId: string;
19
+ } | null;
20
+ export declare function readRawScopeResource(uri: URL, ctx: RawScopeResourceContext): Promise<ReadResourceResult>;
21
+ export declare function rawScopeMetadata(raw: {
22
+ scope: string;
23
+ collectedAt?: string;
24
+ fileId?: string;
25
+ filename?: string;
26
+ mimeType: string;
27
+ sizeBytes: number;
28
+ metadata?: unknown;
29
+ }): Record<string, unknown>;
30
+ export declare const rawScopeFileInputSchema: {
31
+ scope: z.ZodString;
32
+ at: z.ZodOptional<z.ZodString>;
33
+ fileId: z.ZodOptional<z.ZodString>;
34
+ includeContent: z.ZodOptional<z.ZodBoolean>;
35
+ maxBytes: z.ZodOptional<z.ZodNumber>;
36
+ };
37
+ //# sourceMappingURL=resources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../src/mcp/resources.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,eAAO,MAAM,4BAA4B,qHAI/B,CAAC;AAEX,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,mBAAmB,CAAC;IAChC,UAAU,EAAE,iBAAiB,CAAC;CAC/B;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAS1E;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,GAAG,GAAG,sBAAsB,CA0BzE;AAED,wBAAgB,+BAA+B,CAC7C,UAAU,EAAE,mBAAmB,EAC/B,KAAK,EAAE,MAAM,GACZ;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAe5B;AAED,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,uBAAuB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CA2B7B;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAU1B;AAED,eAAO,MAAM,uBAAuB;;;;;;CAiBnC,CAAC"}