vana-cli 0.15.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 (223) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +320 -0
  3. package/dist/cli/auth.d.ts +119 -0
  4. package/dist/cli/auth.d.ts.map +1 -0
  5. package/dist/cli/auth.js +528 -0
  6. package/dist/cli/auth.js.map +1 -0
  7. package/dist/cli/bin.d.ts +3 -0
  8. package/dist/cli/bin.d.ts.map +1 -0
  9. package/dist/cli/bin.js +15 -0
  10. package/dist/cli/bin.js.map +1 -0
  11. package/dist/cli/index.d.ts +92 -0
  12. package/dist/cli/index.d.ts.map +1 -0
  13. package/dist/cli/index.js +4703 -0
  14. package/dist/cli/index.js.map +1 -0
  15. package/dist/cli/main.d.ts +2 -0
  16. package/dist/cli/main.d.ts.map +1 -0
  17. package/dist/cli/main.js +10 -0
  18. package/dist/cli/main.js.map +1 -0
  19. package/dist/cli/mcp-server.d.ts +15 -0
  20. package/dist/cli/mcp-server.d.ts.map +1 -0
  21. package/dist/cli/mcp-server.js +199 -0
  22. package/dist/cli/mcp-server.js.map +1 -0
  23. package/dist/cli/queries.d.ts +128 -0
  24. package/dist/cli/queries.d.ts.map +1 -0
  25. package/dist/cli/queries.js +422 -0
  26. package/dist/cli/queries.js.map +1 -0
  27. package/dist/cli/render/capabilities.d.ts +9 -0
  28. package/dist/cli/render/capabilities.d.ts.map +1 -0
  29. package/dist/cli/render/capabilities.js +24 -0
  30. package/dist/cli/render/capabilities.js.map +1 -0
  31. package/dist/cli/render/connect-renderer.d.ts +23 -0
  32. package/dist/cli/render/connect-renderer.d.ts.map +1 -0
  33. package/dist/cli/render/connect-renderer.js +259 -0
  34. package/dist/cli/render/connect-renderer.js.map +1 -0
  35. package/dist/cli/render/flow-theme.d.ts +17 -0
  36. package/dist/cli/render/flow-theme.d.ts.map +1 -0
  37. package/dist/cli/render/flow-theme.js +26 -0
  38. package/dist/cli/render/flow-theme.js.map +1 -0
  39. package/dist/cli/render/format.d.ts +27 -0
  40. package/dist/cli/render/format.d.ts.map +1 -0
  41. package/dist/cli/render/format.js +111 -0
  42. package/dist/cli/render/format.js.map +1 -0
  43. package/dist/cli/render/index.d.ts +8 -0
  44. package/dist/cli/render/index.d.ts.map +1 -0
  45. package/dist/cli/render/index.js +8 -0
  46. package/dist/cli/render/index.js.map +1 -0
  47. package/dist/cli/render/progress.d.ts +11 -0
  48. package/dist/cli/render/progress.d.ts.map +1 -0
  49. package/dist/cli/render/progress.js +56 -0
  50. package/dist/cli/render/progress.js.map +1 -0
  51. package/dist/cli/render/symbols.d.ts +11 -0
  52. package/dist/cli/render/symbols.d.ts.map +1 -0
  53. package/dist/cli/render/symbols.js +21 -0
  54. package/dist/cli/render/symbols.js.map +1 -0
  55. package/dist/cli/render/theme.d.ts +16 -0
  56. package/dist/cli/render/theme.d.ts.map +1 -0
  57. package/dist/cli/render/theme.js +57 -0
  58. package/dist/cli/render/theme.js.map +1 -0
  59. package/dist/cli/search-select.d.ts +17 -0
  60. package/dist/cli/search-select.d.ts.map +1 -0
  61. package/dist/cli/search-select.js +29 -0
  62. package/dist/cli/search-select.js.map +1 -0
  63. package/dist/cli/telemetry-contract.d.ts +146 -0
  64. package/dist/cli/telemetry-contract.d.ts.map +1 -0
  65. package/dist/cli/telemetry-contract.js +56 -0
  66. package/dist/cli/telemetry-contract.js.map +1 -0
  67. package/dist/cli/telemetry.d.ts +60 -0
  68. package/dist/cli/telemetry.d.ts.map +1 -0
  69. package/dist/cli/telemetry.js +621 -0
  70. package/dist/cli/telemetry.js.map +1 -0
  71. package/dist/cli/update-check.d.ts +21 -0
  72. package/dist/cli/update-check.d.ts.map +1 -0
  73. package/dist/cli/update-check.js +86 -0
  74. package/dist/cli/update-check.js.map +1 -0
  75. package/dist/connectors/index.d.ts +2 -0
  76. package/dist/connectors/index.d.ts.map +1 -0
  77. package/dist/connectors/index.js +2 -0
  78. package/dist/connectors/index.js.map +1 -0
  79. package/dist/connectors/registry.d.ts +55 -0
  80. package/dist/connectors/registry.d.ts.map +1 -0
  81. package/dist/connectors/registry.js +301 -0
  82. package/dist/connectors/registry.js.map +1 -0
  83. package/dist/core/cli-types.d.ts +722 -0
  84. package/dist/core/cli-types.d.ts.map +1 -0
  85. package/dist/core/cli-types.js +328 -0
  86. package/dist/core/cli-types.js.map +1 -0
  87. package/dist/core/constants.d.ts +33 -0
  88. package/dist/core/constants.d.ts.map +1 -0
  89. package/dist/core/constants.js +25 -0
  90. package/dist/core/constants.js.map +1 -0
  91. package/dist/core/errors.d.ts +47 -0
  92. package/dist/core/errors.d.ts.map +1 -0
  93. package/dist/core/errors.js +50 -0
  94. package/dist/core/errors.js.map +1 -0
  95. package/dist/core/grants.d.ts +19 -0
  96. package/dist/core/grants.d.ts.map +1 -0
  97. package/dist/core/grants.js +31 -0
  98. package/dist/core/grants.js.map +1 -0
  99. package/dist/core/index.d.ts +9 -0
  100. package/dist/core/index.d.ts.map +1 -0
  101. package/dist/core/index.js +7 -0
  102. package/dist/core/index.js.map +1 -0
  103. package/dist/core/paths.d.ts +30 -0
  104. package/dist/core/paths.d.ts.map +1 -0
  105. package/dist/core/paths.js +95 -0
  106. package/dist/core/paths.js.map +1 -0
  107. package/dist/core/state-store.d.ts +44 -0
  108. package/dist/core/state-store.d.ts.map +1 -0
  109. package/dist/core/state-store.js +101 -0
  110. package/dist/core/state-store.js.map +1 -0
  111. package/dist/core/types.d.ts +148 -0
  112. package/dist/core/types.d.ts.map +1 -0
  113. package/dist/core/types.js +2 -0
  114. package/dist/core/types.js.map +1 -0
  115. package/dist/index.d.ts +2 -0
  116. package/dist/index.d.ts.map +1 -0
  117. package/dist/index.js +2 -0
  118. package/dist/index.js.map +1 -0
  119. package/dist/personal-server/client.d.ts +34 -0
  120. package/dist/personal-server/client.d.ts.map +1 -0
  121. package/dist/personal-server/client.js +108 -0
  122. package/dist/personal-server/client.js.map +1 -0
  123. package/dist/personal-server/index.d.ts +28 -0
  124. package/dist/personal-server/index.d.ts.map +1 -0
  125. package/dist/personal-server/index.js +157 -0
  126. package/dist/personal-server/index.js.map +1 -0
  127. package/dist/personal-server/scope-resolver.d.ts +22 -0
  128. package/dist/personal-server/scope-resolver.d.ts.map +1 -0
  129. package/dist/personal-server/scope-resolver.js +80 -0
  130. package/dist/personal-server/scope-resolver.js.map +1 -0
  131. package/dist/react/ConnectButton.d.ts +27 -0
  132. package/dist/react/ConnectButton.d.ts.map +1 -0
  133. package/dist/react/ConnectButton.js +39 -0
  134. package/dist/react/ConnectButton.js.map +1 -0
  135. package/dist/react/index.d.ts +4 -0
  136. package/dist/react/index.d.ts.map +1 -0
  137. package/dist/react/index.js +4 -0
  138. package/dist/react/index.js.map +1 -0
  139. package/dist/react/useVanaConnect.d.ts +50 -0
  140. package/dist/react/useVanaConnect.d.ts.map +1 -0
  141. package/dist/react/useVanaConnect.js +114 -0
  142. package/dist/react/useVanaConnect.js.map +1 -0
  143. package/dist/react/useVanaData.d.ts +69 -0
  144. package/dist/react/useVanaData.d.ts.map +1 -0
  145. package/dist/react/useVanaData.js +144 -0
  146. package/dist/react/useVanaData.js.map +1 -0
  147. package/dist/runtime/core/contracts.d.ts +84 -0
  148. package/dist/runtime/core/contracts.d.ts.map +1 -0
  149. package/dist/runtime/core/contracts.js +2 -0
  150. package/dist/runtime/core/contracts.js.map +1 -0
  151. package/dist/runtime/core/index.d.ts +2 -0
  152. package/dist/runtime/core/index.d.ts.map +1 -0
  153. package/dist/runtime/core/index.js +2 -0
  154. package/dist/runtime/core/index.js.map +1 -0
  155. package/dist/runtime/index.d.ts +4 -0
  156. package/dist/runtime/index.d.ts.map +1 -0
  157. package/dist/runtime/index.js +3 -0
  158. package/dist/runtime/index.js.map +1 -0
  159. package/dist/runtime/managed-playwright.d.ts +42 -0
  160. package/dist/runtime/managed-playwright.d.ts.map +1 -0
  161. package/dist/runtime/managed-playwright.js +178 -0
  162. package/dist/runtime/managed-playwright.js.map +1 -0
  163. package/dist/runtime/playwright/browser.d.ts +12 -0
  164. package/dist/runtime/playwright/browser.d.ts.map +1 -0
  165. package/dist/runtime/playwright/browser.js +229 -0
  166. package/dist/runtime/playwright/browser.js.map +1 -0
  167. package/dist/runtime/playwright/in-process-run.d.ts +6 -0
  168. package/dist/runtime/playwright/in-process-run.d.ts.map +1 -0
  169. package/dist/runtime/playwright/in-process-run.js +625 -0
  170. package/dist/runtime/playwright/in-process-run.js.map +1 -0
  171. package/dist/runtime/playwright/index.d.ts +3 -0
  172. package/dist/runtime/playwright/index.d.ts.map +1 -0
  173. package/dist/runtime/playwright/index.js +3 -0
  174. package/dist/runtime/playwright/index.js.map +1 -0
  175. package/dist/runtime/repo-paths.d.ts +2 -0
  176. package/dist/runtime/repo-paths.d.ts.map +1 -0
  177. package/dist/runtime/repo-paths.js +36 -0
  178. package/dist/runtime/repo-paths.js.map +1 -0
  179. package/dist/server/config.d.ts +38 -0
  180. package/dist/server/config.d.ts.map +1 -0
  181. package/dist/server/config.js +45 -0
  182. package/dist/server/config.js.map +1 -0
  183. package/dist/server/connect.d.ts +43 -0
  184. package/dist/server/connect.d.ts.map +1 -0
  185. package/dist/server/connect.js +115 -0
  186. package/dist/server/connect.js.map +1 -0
  187. package/dist/server/data-client.d.ts +31 -0
  188. package/dist/server/data-client.d.ts.map +1 -0
  189. package/dist/server/data-client.js +95 -0
  190. package/dist/server/data-client.js.map +1 -0
  191. package/dist/server/index.d.ts +8 -0
  192. package/dist/server/index.d.ts.map +1 -0
  193. package/dist/server/index.js +8 -0
  194. package/dist/server/index.js.map +1 -0
  195. package/dist/server/manifest-signer.d.ts +25 -0
  196. package/dist/server/manifest-signer.d.ts.map +1 -0
  197. package/dist/server/manifest-signer.js +51 -0
  198. package/dist/server/manifest-signer.js.map +1 -0
  199. package/dist/server/request-signer.d.ts +31 -0
  200. package/dist/server/request-signer.d.ts.map +1 -0
  201. package/dist/server/request-signer.js +72 -0
  202. package/dist/server/request-signer.js.map +1 -0
  203. package/dist/server/session-relay.d.ts +39 -0
  204. package/dist/server/session-relay.d.ts.map +1 -0
  205. package/dist/server/session-relay.js +74 -0
  206. package/dist/server/session-relay.js.map +1 -0
  207. package/dist/server/webhook.d.ts +11 -0
  208. package/dist/server/webhook.d.ts.map +1 -0
  209. package/dist/server/webhook.js +18 -0
  210. package/dist/server/webhook.js.map +1 -0
  211. package/dist/skills/index.d.ts +4 -0
  212. package/dist/skills/index.d.ts.map +1 -0
  213. package/dist/skills/index.js +3 -0
  214. package/dist/skills/index.js.map +1 -0
  215. package/dist/skills/paths.d.ts +33 -0
  216. package/dist/skills/paths.d.ts.map +1 -0
  217. package/dist/skills/paths.js +81 -0
  218. package/dist/skills/paths.js.map +1 -0
  219. package/dist/skills/registry.d.ts +48 -0
  220. package/dist/skills/registry.d.ts.map +1 -0
  221. package/dist/skills/registry.js +173 -0
  222. package/dist/skills/registry.js.map +1 -0
  223. package/package.json +147 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtime/playwright/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,yBAAyB,EACzB,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function findDataConnectorsDir(cwd?: string): string | null;
2
+ //# sourceMappingURL=repo-paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-paths.d.ts","sourceRoot":"","sources":["../../src/runtime/repo-paths.ts"],"names":[],"mappings":"AAGA,wBAAgB,qBAAqB,CAAC,GAAG,SAAgB,GAAG,MAAM,GAAG,IAAI,CAwCxE"}
@@ -0,0 +1,36 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ export function findDataConnectorsDir(cwd = process.cwd()) {
4
+ const candidates = [];
5
+ const seen = new Set();
6
+ const pushCandidate = (value) => {
7
+ if (!value) {
8
+ return;
9
+ }
10
+ const resolved = path.resolve(value);
11
+ if (seen.has(resolved)) {
12
+ return;
13
+ }
14
+ seen.add(resolved);
15
+ candidates.push(resolved);
16
+ };
17
+ pushCandidate(process.env.VANA_DATA_CONNECTORS_DIR);
18
+ let currentDir = path.resolve(cwd);
19
+ while (true) {
20
+ pushCandidate(currentDir);
21
+ pushCandidate(path.join(currentDir, "data-connectors"));
22
+ const parentDir = path.dirname(currentDir);
23
+ if (parentDir === currentDir) {
24
+ break;
25
+ }
26
+ currentDir = parentDir;
27
+ }
28
+ for (const candidate of candidates) {
29
+ if (fs.existsSync(path.join(candidate, "registry.json")) &&
30
+ fs.existsSync(path.join(candidate, "skills", "vana-connect", "scripts"))) {
31
+ return candidate;
32
+ }
33
+ }
34
+ return null;
35
+ }
36
+ //# sourceMappingURL=repo-paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-paths.js","sourceRoot":"","sources":["../../src/runtime/repo-paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,UAAU,qBAAqB,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IACvD,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,MAAM,aAAa,GAAG,CAAC,KAAyB,EAAE,EAAE;QAClD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO;QACT,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACnB,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC,CAAC;IAEF,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IAEpD,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,OAAO,IAAI,EAAE,CAAC;QACZ,aAAa,CAAC,UAAU,CAAC,CAAC;QAC1B,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAExD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;YAC7B,MAAM;QACR,CAAC;QACD,UAAU,GAAG,SAAS,CAAC;IACzB,CAAC;IAED,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IACE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;YACpD,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC,EACxE,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,38 @@
1
+ import type { VanaEnvironment } from "../core/constants.js";
2
+ export interface VanaConfig {
3
+ privateKey: `0x${string}`;
4
+ scopes: string[];
5
+ appUrl: string;
6
+ dataSource?: string;
7
+ environment?: VanaEnvironment;
8
+ }
9
+ /**
10
+ * Creates a validated SDK configuration.
11
+ *
12
+ * All values must be passed explicitly — the SDK does not read
13
+ * environment variables. The calling application is responsible
14
+ * for sourcing config values (e.g. from `process.env`).
15
+ *
16
+ * @param config - Required configuration fields.
17
+ * @returns A validated {@link VanaConfig} object.
18
+ * @throws {@link ConnectError} with code `CONFIG_INVALID` if any required field is missing or invalid.
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * import { createVanaConfig } from "vana-cli/server";
23
+ *
24
+ * const config = createVanaConfig({
25
+ * privateKey: process.env.VANA_PRIVATE_KEY as `0x${string}`,
26
+ * scopes: ["chatgpt.conversations"],
27
+ * appUrl: process.env.APP_URL!,
28
+ * });
29
+ * ```
30
+ */
31
+ export declare function createVanaConfig(config: {
32
+ privateKey: `0x${string}`;
33
+ scopes: string[];
34
+ appUrl: string;
35
+ dataSource?: string;
36
+ environment?: VanaEnvironment;
37
+ }): VanaConfig;
38
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/server/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG5D,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,KAAK,MAAM,EAAE,CAAC;IAC1B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,eAAe,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IACvC,UAAU,EAAE,KAAK,MAAM,EAAE,CAAC;IAC1B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,eAAe,CAAC;CAC/B,GAAG,UAAU,CAoCb"}
@@ -0,0 +1,45 @@
1
+ import { ConnectError, ConnectErrorCode } from "../core/errors.js";
2
+ /**
3
+ * Creates a validated SDK configuration.
4
+ *
5
+ * All values must be passed explicitly — the SDK does not read
6
+ * environment variables. The calling application is responsible
7
+ * for sourcing config values (e.g. from `process.env`).
8
+ *
9
+ * @param config - Required configuration fields.
10
+ * @returns A validated {@link VanaConfig} object.
11
+ * @throws {@link ConnectError} with code `CONFIG_INVALID` if any required field is missing or invalid.
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * import { createVanaConfig } from "vana-cli/server";
16
+ *
17
+ * const config = createVanaConfig({
18
+ * privateKey: process.env.VANA_PRIVATE_KEY as `0x${string}`,
19
+ * scopes: ["chatgpt.conversations"],
20
+ * appUrl: process.env.APP_URL!,
21
+ * });
22
+ * ```
23
+ */
24
+ export function createVanaConfig(config) {
25
+ if (!config.privateKey) {
26
+ throw new ConnectError("Missing privateKey. Pass a 0x-prefixed private key.", ConnectErrorCode.CONFIG_INVALID);
27
+ }
28
+ if (!config.privateKey.startsWith("0x")) {
29
+ throw new ConnectError("privateKey must start with 0x.", ConnectErrorCode.CONFIG_INVALID);
30
+ }
31
+ if (!Array.isArray(config.scopes) || config.scopes.length === 0) {
32
+ throw new ConnectError("Missing scopes. Pass a non-empty array of scope strings.", ConnectErrorCode.CONFIG_INVALID);
33
+ }
34
+ if (!config.appUrl) {
35
+ throw new ConnectError("Missing appUrl. Pass the public URL of your deployed app.", ConnectErrorCode.CONFIG_INVALID);
36
+ }
37
+ return {
38
+ privateKey: config.privateKey,
39
+ scopes: config.scopes,
40
+ appUrl: config.appUrl,
41
+ dataSource: config.dataSource,
42
+ environment: config.environment,
43
+ };
44
+ }
45
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/server/config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAUnE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAMhC;IACC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,IAAI,YAAY,CACpB,qDAAqD,EACrD,gBAAgB,CAAC,cAAc,CAChC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,YAAY,CACpB,gCAAgC,EAChC,gBAAgB,CAAC,cAAc,CAChC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,YAAY,CACpB,0DAA0D,EAC1D,gBAAgB,CAAC,cAAc,CAChC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,IAAI,YAAY,CACpB,2DAA2D,EAC3D,gBAAgB,CAAC,cAAc,CAChC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,WAAW,EAAE,MAAM,CAAC,WAAW;KAChC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,43 @@
1
+ import type { ConnectConfig, GetDataConfig, SessionInitResult } from "../core/types.js";
2
+ /**
3
+ * Creates a session on the Session Relay and returns the session ID, connect URL, and deep link URL.
4
+ *
5
+ * This is the entry point for the Vana Connect flow. The returned `connectUrl`
6
+ * should be presented to the user to sign in on account.vana.org and launch Data Connect.
7
+ *
8
+ * @param config - Connection configuration including private key and scopes.
9
+ * @returns Session ID, connect URL, and expiration timestamp.
10
+ * @throws {@link ConnectError} with code `SESSION_INIT_FAILED` if the relay rejects the request.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const session = await connect({
15
+ * privateKey: process.env.VANA_PRIVATE_KEY as `0x${string}`,
16
+ * scopes: ["chatgpt.conversations"],
17
+ * });
18
+ * // session.sessionId, session.connectUrl, session.expiresAt
19
+ * ```
20
+ */
21
+ export declare function connect(config: ConnectConfig): Promise<SessionInitResult>;
22
+ /**
23
+ * Fetches user data from their Personal Server using a signed grant.
24
+ *
25
+ * Resolves the server URL via the Data Portability Gateway, then fetches
26
+ * data for each scope in the grant concurrently.
27
+ *
28
+ * @param config - Data fetch configuration including private key and grant.
29
+ * @returns A `Record` keyed by scope name with the fetched data as values.
30
+ * @throws {@link ConnectError} with code `SERVER_NOT_FOUND` if no server is registered.
31
+ * @throws {@link ConnectError} with code `DATA_FETCH_FAILED` if a scope fetch fails.
32
+ *
33
+ * @example
34
+ * ```typescript
35
+ * const data = await getData({
36
+ * privateKey: process.env.VANA_PRIVATE_KEY as `0x${string}`,
37
+ * grant,
38
+ * });
39
+ * const conversations = data["chatgpt.conversations"];
40
+ * ```
41
+ */
42
+ export declare function getData(config: GetDataConfig): Promise<Record<string, unknown>>;
43
+ //# sourceMappingURL=connect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/server/connect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,iBAAiB,EAClB,MAAM,kBAAkB,CAAC;AAK1B;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,OAAO,CAC3B,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,iBAAiB,CAAC,CAsD5B;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,OAAO,CAC3B,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA8BlC"}
@@ -0,0 +1,115 @@
1
+ import { getEnvConfig } from "../core/constants.js";
2
+ import { createRequestSigner } from "./request-signer.js";
3
+ import { createSessionRelay } from "./session-relay.js";
4
+ import { createDataClient } from "./data-client.js";
5
+ /**
6
+ * Creates a session on the Session Relay and returns the session ID, connect URL, and deep link URL.
7
+ *
8
+ * This is the entry point for the Vana Connect flow. The returned `connectUrl`
9
+ * should be presented to the user to sign in on account.vana.org and launch Data Connect.
10
+ *
11
+ * @param config - Connection configuration including private key and scopes.
12
+ * @returns Session ID, connect URL, and expiration timestamp.
13
+ * @throws {@link ConnectError} with code `SESSION_INIT_FAILED` if the relay rejects the request.
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const session = await connect({
18
+ * privateKey: process.env.VANA_PRIVATE_KEY as `0x${string}`,
19
+ * scopes: ["chatgpt.conversations"],
20
+ * });
21
+ * // session.sessionId, session.connectUrl, session.expiresAt
22
+ * ```
23
+ */
24
+ export async function connect(config) {
25
+ const { sessionRelayUrl, accountUrl } = getEnvConfig(config.environment);
26
+ const signer = createRequestSigner({ privateKey: config.privateKey });
27
+ const granteeAddress = signer.address;
28
+ const mode = config.mode ?? "connect";
29
+ const scopes = config.scopes && config.scopes.length > 0
30
+ ? config.scopes
31
+ : mode === "auth"
32
+ ? ["identity.auth"]
33
+ : [];
34
+ const relay = createSessionRelay({
35
+ privateKey: config.privateKey,
36
+ granteeAddress,
37
+ sessionRelayUrl,
38
+ });
39
+ const relayResult = await relay.initSession({
40
+ scopes,
41
+ webhookUrl: config.webhookUrl,
42
+ appUserId: config.appUserId,
43
+ });
44
+ // Build the account.vana.org connect URL from the relay response
45
+ const connectUrl = new URL("/connect", accountUrl);
46
+ connectUrl.searchParams.set("sessionId", relayResult.sessionId);
47
+ if (mode === "auth") {
48
+ connectUrl.searchParams.set("mode", "auth");
49
+ connectUrl.searchParams.set("relayUrl", sessionRelayUrl);
50
+ }
51
+ if (typeof config.appUrl === "string" && config.appUrl.trim().length > 0) {
52
+ connectUrl.searchParams.set("appUrl", config.appUrl.trim());
53
+ }
54
+ if (typeof config.dataSource === "string" &&
55
+ config.dataSource.trim().length > 0) {
56
+ connectUrl.searchParams.set("dataSource", config.dataSource.trim());
57
+ }
58
+ try {
59
+ const deepLinkParams = new URL(relayResult.deepLinkUrl);
60
+ const secret = deepLinkParams.searchParams.get("secret");
61
+ if (secret)
62
+ connectUrl.searchParams.set("secret", secret);
63
+ }
64
+ catch {
65
+ // deepLinkUrl may not be a valid URL; proceed without secret
66
+ }
67
+ return {
68
+ sessionId: relayResult.sessionId,
69
+ connectUrl: connectUrl.toString(),
70
+ expiresAt: relayResult.expiresAt,
71
+ };
72
+ }
73
+ /**
74
+ * Fetches user data from their Personal Server using a signed grant.
75
+ *
76
+ * Resolves the server URL via the Data Portability Gateway, then fetches
77
+ * data for each scope in the grant concurrently.
78
+ *
79
+ * @param config - Data fetch configuration including private key and grant.
80
+ * @returns A `Record` keyed by scope name with the fetched data as values.
81
+ * @throws {@link ConnectError} with code `SERVER_NOT_FOUND` if no server is registered.
82
+ * @throws {@link ConnectError} with code `DATA_FETCH_FAILED` if a scope fetch fails.
83
+ *
84
+ * @example
85
+ * ```typescript
86
+ * const data = await getData({
87
+ * privateKey: process.env.VANA_PRIVATE_KEY as `0x${string}`,
88
+ * grant,
89
+ * });
90
+ * const conversations = data["chatgpt.conversations"];
91
+ * ```
92
+ */
93
+ export async function getData(config) {
94
+ const { gatewayUrl } = getEnvConfig(config.environment);
95
+ const { grant } = config;
96
+ const dataClient = createDataClient({
97
+ privateKey: config.privateKey,
98
+ gatewayUrl,
99
+ });
100
+ const serverUrl = await dataClient.resolveServerUrl(grant.serverAddress ?? grant.userAddress);
101
+ const results = await Promise.all(grant.scopes.map(async (scope) => {
102
+ const result = await dataClient.fetchData({
103
+ serverUrl,
104
+ scope,
105
+ grantId: grant.grantId,
106
+ });
107
+ return [scope, result];
108
+ }));
109
+ const data = {};
110
+ for (const [scope, result] of results) {
111
+ data[scope] = result;
112
+ }
113
+ return data;
114
+ }
115
+ //# sourceMappingURL=connect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/server/connect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { DataClientConfig, DataFetchParams } from "../core/types.js";
2
+ /**
3
+ * Low-level client for the Data Portability Gateway and Personal Servers.
4
+ *
5
+ * @see {@link createDataClient} to create an instance.
6
+ */
7
+ export interface DataClient {
8
+ /** Resolves a user's Personal Server URL via the gateway. */
9
+ resolveServerUrl(userAddress: string): Promise<string>;
10
+ /** Fetches data for a single scope from a Personal Server. */
11
+ fetchData(params: DataFetchParams): Promise<unknown>;
12
+ /** Lists available scopes on a Personal Server. */
13
+ listScopes(params: {
14
+ serverUrl: string;
15
+ }): Promise<unknown>;
16
+ /** Lists available versions for a scope on a Personal Server. */
17
+ listVersions(params: {
18
+ serverUrl: string;
19
+ scope: string;
20
+ }): Promise<unknown>;
21
+ }
22
+ /**
23
+ * Creates a low-level Data Gateway / Personal Server client.
24
+ *
25
+ * Prefer the high-level {@link getData} function for most use cases.
26
+ *
27
+ * @param config - Data client configuration.
28
+ * @returns A {@link DataClient} instance.
29
+ */
30
+ export declare function createDataClient(config: DataClientConfig): DataClient;
31
+ //# sourceMappingURL=data-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-client.d.ts","sourceRoot":"","sources":["../../src/server/data-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAG1E;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,6DAA6D;IAC7D,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACvD,8DAA8D;IAC9D,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrD,mDAAmD;IACnD,UAAU,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5D,iEAAiE;IACjE,YAAY,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9E;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,UAAU,CA6HrE"}
@@ -0,0 +1,95 @@
1
+ import { ConnectError, ConnectErrorCode } from "../core/errors.js";
2
+ import { createRequestSigner } from "./request-signer.js";
3
+ /**
4
+ * Creates a low-level Data Gateway / Personal Server client.
5
+ *
6
+ * Prefer the high-level {@link getData} function for most use cases.
7
+ *
8
+ * @param config - Data client configuration.
9
+ * @returns A {@link DataClient} instance.
10
+ */
11
+ export function createDataClient(config) {
12
+ const gatewayBase = config.gatewayUrl.replace(/\/+$/, "");
13
+ const signer = createRequestSigner({
14
+ privateKey: config.privateKey,
15
+ bodyHashFormat: "prefixed",
16
+ });
17
+ return {
18
+ async resolveServerUrl(userAddress) {
19
+ const res = await fetch(`${gatewayBase}/v1/servers/${userAddress}`);
20
+ if (res.status === 404) {
21
+ throw new ConnectError(`No server registered for ${userAddress}`, ConnectErrorCode.SERVER_NOT_FOUND, 404);
22
+ }
23
+ if (!res.ok) {
24
+ throw new ConnectError(`Gateway error: ${res.status}`, ConnectErrorCode.GATEWAY_ERROR, res.status);
25
+ }
26
+ const envelope = (await res.json());
27
+ return envelope.data.serverUrl;
28
+ },
29
+ async fetchData(params) {
30
+ const base = params.serverUrl.replace(/\/+$/, "");
31
+ const queryParams = new URLSearchParams();
32
+ if (params.fileId)
33
+ queryParams.set("fileId", params.fileId);
34
+ if (params.at)
35
+ queryParams.set("at", params.at);
36
+ const qs = queryParams.toString();
37
+ const uri = `/v1/data/${params.scope}${qs ? `?${qs}` : ""}`;
38
+ const authHeader = await signer.signRequest({
39
+ aud: base,
40
+ method: "GET",
41
+ uri,
42
+ grantId: params.grantId,
43
+ });
44
+ const url = `${base}${uri}`;
45
+ const res = await fetch(url, {
46
+ headers: { Authorization: authHeader },
47
+ });
48
+ if (!res.ok) {
49
+ const body = await res.text().catch(() => "(unreadable)");
50
+ console.error("[data-client] fetchData failed", {
51
+ status: res.status,
52
+ url,
53
+ scope: params.scope,
54
+ grantId: params.grantId,
55
+ body,
56
+ });
57
+ throw new ConnectError(`Data fetch failed: ${res.status}`, ConnectErrorCode.DATA_FETCH_FAILED, res.status);
58
+ }
59
+ return res.json();
60
+ },
61
+ async listScopes(params) {
62
+ const base = params.serverUrl.replace(/\/+$/, "");
63
+ const uri = "/v1/data";
64
+ const authHeader = await signer.signRequest({
65
+ aud: base,
66
+ method: "GET",
67
+ uri,
68
+ });
69
+ const res = await fetch(`${base}${uri}`, {
70
+ headers: { Authorization: authHeader },
71
+ });
72
+ if (!res.ok) {
73
+ throw new ConnectError(`List scopes failed: ${res.status}`, ConnectErrorCode.LIST_SCOPES_FAILED, res.status);
74
+ }
75
+ return res.json();
76
+ },
77
+ async listVersions(params) {
78
+ const base = params.serverUrl.replace(/\/+$/, "");
79
+ const uri = `/v1/data/${params.scope}/versions`;
80
+ const authHeader = await signer.signRequest({
81
+ aud: base,
82
+ method: "GET",
83
+ uri,
84
+ });
85
+ const res = await fetch(`${base}${uri}`, {
86
+ headers: { Authorization: authHeader },
87
+ });
88
+ if (!res.ok) {
89
+ throw new ConnectError(`List versions failed: ${res.status}`, ConnectErrorCode.LIST_VERSIONS_FAILED, res.status);
90
+ }
91
+ return res.json();
92
+ },
93
+ };
94
+ }
95
+ //# sourceMappingURL=data-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-client.js","sourceRoot":"","sources":["../../src/server/data-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export { createRequestSigner, type RequestSigner } from "./request-signer.js";
2
+ export { createSessionRelay, type SessionRelay, type RelaySessionInitResult, } from "./session-relay.js";
3
+ export { createDataClient, type DataClient } from "./data-client.js";
4
+ export { connect, getData } from "./connect.js";
5
+ export { signVanaManifest } from "./manifest-signer.js";
6
+ export { createVanaConfig, type VanaConfig } from "./config.js";
7
+ export { verifyWebhook } from "./webhook.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EACL,kBAAkB,EAClB,KAAK,YAAY,EACjB,KAAK,sBAAsB,GAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,8 @@
1
+ export { createRequestSigner } from "./request-signer.js";
2
+ export { createSessionRelay, } from "./session-relay.js";
3
+ export { createDataClient } from "./data-client.js";
4
+ export { connect, getData } from "./connect.js";
5
+ export { signVanaManifest } from "./manifest-signer.js";
6
+ export { createVanaConfig } from "./config.js";
7
+ export { verifyWebhook } from "./webhook.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAsB,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EACL,kBAAkB,GAGnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAmB,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAmB,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { VanaManifestConfig, VanaManifestBlock } from "../core/types.js";
2
+ /**
3
+ * Signs a web app manifest block for Vana Desktop App identity verification.
4
+ *
5
+ * Include the returned block under the `vana` key in your web app manifest JSON,
6
+ * and make sure your HTML has `<link rel="manifest" href="/manifest.json">`.
7
+ *
8
+ * @param config - Manifest configuration including private key and app URLs.
9
+ * @returns A signed {@link VanaManifestBlock}.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * const vanaBlock = await signVanaManifest({
14
+ * privateKey: process.env.VANA_PRIVATE_KEY as `0x${string}`,
15
+ * appUrl: "https://yourapp.com",
16
+ * privacyPolicyUrl: "https://yourapp.com/privacy",
17
+ * termsUrl: "https://yourapp.com/terms",
18
+ * supportUrl: "https://yourapp.com/support",
19
+ * webhookUrl: "https://yourapp.com/api/webhook",
20
+ * });
21
+ * const manifest = { name: "Your App", vana: vanaBlock };
22
+ * ```
23
+ */
24
+ export declare function signVanaManifest(config: VanaManifestConfig): Promise<VanaManifestBlock>;
25
+ //# sourceMappingURL=manifest-signer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-signer.d.ts","sourceRoot":"","sources":["../../src/server/manifest-signer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAa9E;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,iBAAiB,CAAC,CAgB5B"}
@@ -0,0 +1,51 @@
1
+ import { privateKeyToAccount } from "viem/accounts";
2
+ function canonicalizeJson(obj) {
3
+ if (obj === null || typeof obj !== "object")
4
+ return obj;
5
+ if (Array.isArray(obj))
6
+ return obj.map(canonicalizeJson);
7
+ const sorted = {};
8
+ for (const key of Object.keys(obj).sort()) {
9
+ if (key === "signature")
10
+ continue;
11
+ sorted[key] = canonicalizeJson(obj[key]);
12
+ }
13
+ return sorted;
14
+ }
15
+ /**
16
+ * Signs a web app manifest block for Vana Desktop App identity verification.
17
+ *
18
+ * Include the returned block under the `vana` key in your web app manifest JSON,
19
+ * and make sure your HTML has `<link rel="manifest" href="/manifest.json">`.
20
+ *
21
+ * @param config - Manifest configuration including private key and app URLs.
22
+ * @returns A signed {@link VanaManifestBlock}.
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * const vanaBlock = await signVanaManifest({
27
+ * privateKey: process.env.VANA_PRIVATE_KEY as `0x${string}`,
28
+ * appUrl: "https://yourapp.com",
29
+ * privacyPolicyUrl: "https://yourapp.com/privacy",
30
+ * termsUrl: "https://yourapp.com/terms",
31
+ * supportUrl: "https://yourapp.com/support",
32
+ * webhookUrl: "https://yourapp.com/api/webhook",
33
+ * });
34
+ * const manifest = { name: "Your App", vana: vanaBlock };
35
+ * ```
36
+ */
37
+ export async function signVanaManifest(config) {
38
+ const account = privateKeyToAccount(config.privateKey);
39
+ const block = {
40
+ appUrl: config.appUrl,
41
+ privacyPolicyUrl: config.privacyPolicyUrl,
42
+ supportUrl: config.supportUrl,
43
+ termsUrl: config.termsUrl,
44
+ webhookUrl: config.webhookUrl,
45
+ };
46
+ const canonical = canonicalizeJson(block);
47
+ const message = JSON.stringify(canonical);
48
+ const signature = await account.signMessage({ message });
49
+ return { ...block, signature };
50
+ }
51
+ //# sourceMappingURL=manifest-signer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-signer.js","sourceRoot":"","sources":["../../src/server/manifest-signer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAGpD,SAAS,gBAAgB,CAAC,GAAY;IACpC,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACxD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACzD,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAA8B,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QACrE,IAAI,GAAG,KAAK,WAAW;YAAE,SAAS;QAClC,MAAM,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAE,GAA+B,CAAC,GAAG,CAAC,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAA0B;IAE1B,MAAM,OAAO,GAAG,mBAAmB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAEvD,MAAM,KAAK,GAAG;QACZ,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CAAC;IAEF,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAEzD,OAAO,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,CAAC;AACjC,CAAC"}
@@ -0,0 +1,31 @@
1
+ import type { RequestSignerConfig } from "../core/types.js";
2
+ /**
3
+ * Generates `Web3Signed` authorization headers for protocol requests.
4
+ *
5
+ * @see {@link createRequestSigner} to create an instance.
6
+ */
7
+ export interface RequestSigner {
8
+ /**
9
+ * Signs a request and returns the `Authorization` header value.
10
+ *
11
+ * @param params - Request metadata (audience, method, URI, optional body and grantId).
12
+ * @returns A `Web3Signed <payload>.<signature>` header string.
13
+ */
14
+ signRequest(params: {
15
+ aud: string;
16
+ method: string;
17
+ uri: string;
18
+ body?: string;
19
+ grantId?: string;
20
+ }): Promise<string>;
21
+ /** The wallet address derived from the private key. */
22
+ readonly address: `0x${string}`;
23
+ }
24
+ /**
25
+ * Creates a request signer that generates `Web3Signed` authorization headers.
26
+ *
27
+ * @param config - Configuration containing the builder's private key.
28
+ * @returns A {@link RequestSigner} instance.
29
+ */
30
+ export declare function createRequestSigner(config: RequestSignerConfig): RequestSigner;
31
+ //# sourceMappingURL=request-signer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-signer.d.ts","sourceRoot":"","sources":["../../src/server/request-signer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAuC5D;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;OAKG;IACH,WAAW,CAAC,MAAM,EAAE;QAClB,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACpB,uDAAuD;IACvD,QAAQ,CAAC,OAAO,EAAE,KAAK,MAAM,EAAE,CAAC;CACjC;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,mBAAmB,GAC1B,aAAa,CAuCf"}