@bctrl/sdk 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (260) hide show
  1. package/README.md +75 -0
  2. package/dist/agents/browser-use/index.d.ts +1 -0
  3. package/dist/agents/browser-use/index.js +9 -0
  4. package/dist/agents/browser-use/namespace.d.ts +39 -0
  5. package/dist/agents/browser-use/namespace.js +93 -0
  6. package/dist/agents/index.d.ts +2 -0
  7. package/dist/agents/index.js +17 -0
  8. package/dist/agents/stagehand/core.d.ts +93 -0
  9. package/dist/agents/stagehand/core.js +144 -0
  10. package/dist/agents/stagehand/index.d.ts +3 -0
  11. package/dist/agents/stagehand/index.js +24 -0
  12. package/dist/agents/stagehand/namespace.d.ts +51 -0
  13. package/dist/agents/stagehand/namespace.js +65 -0
  14. package/dist/ai-credentials/client.d.ts +12 -0
  15. package/dist/ai-credentials/client.js +70 -0
  16. package/dist/ai-credentials/index.d.ts +1 -0
  17. package/dist/ai-credentials/index.js +1 -0
  18. package/dist/base/event-binding.d.ts +7 -0
  19. package/dist/base/event-binding.js +23 -0
  20. package/dist/base/types.d.ts +109 -0
  21. package/dist/base/types.js +4 -0
  22. package/dist/bctrl.d.ts +37 -0
  23. package/dist/bctrl.js +77 -0
  24. package/dist/browser-extensions/client.d.ts +15 -0
  25. package/dist/browser-extensions/client.js +72 -0
  26. package/dist/browser-extensions/index.d.ts +2 -0
  27. package/dist/browser-extensions/index.js +1 -0
  28. package/dist/browser-profiles/client.d.ts +11 -0
  29. package/dist/browser-profiles/client.js +63 -0
  30. package/dist/browser-profiles/index.d.ts +1 -0
  31. package/dist/browser-profiles/index.js +1 -0
  32. package/dist/captcha/index.d.ts +1 -0
  33. package/dist/captcha/index.js +1 -0
  34. package/dist/captcha/namespace.d.ts +34 -0
  35. package/dist/captcha/namespace.js +41 -0
  36. package/dist/client/index.d.ts +1 -0
  37. package/dist/client/index.js +1 -0
  38. package/dist/client/rpc.d.ts +83 -0
  39. package/dist/client/rpc.js +354 -0
  40. package/dist/config.d.ts +5 -0
  41. package/dist/config.js +28 -0
  42. package/dist/constants/browser.d.ts +2 -0
  43. package/dist/constants/browser.js +1 -0
  44. package/dist/contracts/agent-tools.d.ts +45 -0
  45. package/dist/contracts/agent-tools.js +31 -0
  46. package/dist/contracts/automation.d.ts +265 -0
  47. package/dist/contracts/automation.js +109 -0
  48. package/dist/contracts/browser-management.d.ts +179 -0
  49. package/dist/contracts/browser-management.js +95 -0
  50. package/dist/contracts/browser-use.d.ts +136 -0
  51. package/dist/contracts/browser-use.js +93 -0
  52. package/dist/contracts/captcha.d.ts +114 -0
  53. package/dist/contracts/captcha.js +40 -0
  54. package/dist/contracts/desktop.d.ts +223 -0
  55. package/dist/contracts/desktop.js +121 -0
  56. package/dist/contracts/drivers/playwright.d.ts +2008 -0
  57. package/dist/contracts/drivers/playwright.js +2033 -0
  58. package/dist/contracts/drivers/puppeteer.d.ts +1221 -0
  59. package/dist/contracts/drivers/puppeteer.js +941 -0
  60. package/dist/contracts/drivers/selenium.d.ts +156 -0
  61. package/dist/contracts/drivers/selenium.js +61 -0
  62. package/dist/contracts/drivers/stagehand.d.ts +155 -0
  63. package/dist/contracts/drivers/stagehand.js +7 -0
  64. package/dist/contracts/extensions.d.ts +13 -0
  65. package/dist/contracts/extensions.js +9 -0
  66. package/dist/contracts/index.d.ts +13 -0
  67. package/dist/contracts/index.js +13 -0
  68. package/dist/contracts/public-api.d.ts +360 -0
  69. package/dist/contracts/public-api.js +17 -0
  70. package/dist/contracts/runtime.d.ts +81 -0
  71. package/dist/contracts/runtime.js +16 -0
  72. package/dist/contracts/stagehand.d.ts +253 -0
  73. package/dist/contracts/stagehand.js +145 -0
  74. package/dist/contracts/storage.d.ts +51 -0
  75. package/dist/contracts/storage.js +56 -0
  76. package/dist/contracts/vault.d.ts +119 -0
  77. package/dist/contracts/vault.js +112 -0
  78. package/dist/contracts/version.d.ts +3 -0
  79. package/dist/contracts/version.js +16 -0
  80. package/dist/desktop.d.ts +2 -0
  81. package/dist/desktop.js +3 -0
  82. package/dist/drivers/desktop/index.d.ts +65 -0
  83. package/dist/drivers/desktop/index.js +68 -0
  84. package/dist/drivers/desktop/session.d.ts +313 -0
  85. package/dist/drivers/desktop/session.js +432 -0
  86. package/dist/drivers/playwright/event-emitter.d.ts +160 -0
  87. package/dist/drivers/playwright/event-emitter.js +297 -0
  88. package/dist/drivers/playwright/generated/api-request-context.d.ts +137 -0
  89. package/dist/drivers/playwright/generated/api-request-context.js +154 -0
  90. package/dist/drivers/playwright/generated/api-response.d.ts +119 -0
  91. package/dist/drivers/playwright/generated/api-response.js +123 -0
  92. package/dist/drivers/playwright/generated/browser-context.d.ts +284 -0
  93. package/dist/drivers/playwright/generated/browser-context.js +458 -0
  94. package/dist/drivers/playwright/generated/browser.d.ts +120 -0
  95. package/dist/drivers/playwright/generated/browser.js +151 -0
  96. package/dist/drivers/playwright/generated/clock.d.ts +80 -0
  97. package/dist/drivers/playwright/generated/clock.js +94 -0
  98. package/dist/drivers/playwright/generated/console-message.d.ts +94 -0
  99. package/dist/drivers/playwright/generated/console-message.js +89 -0
  100. package/dist/drivers/playwright/generated/coverage.d.ts +57 -0
  101. package/dist/drivers/playwright/generated/coverage.js +66 -0
  102. package/dist/drivers/playwright/generated/dialog.d.ts +79 -0
  103. package/dist/drivers/playwright/generated/dialog.js +80 -0
  104. package/dist/drivers/playwright/generated/element-handle.d.ts +399 -0
  105. package/dist/drivers/playwright/generated/element-handle.js +501 -0
  106. package/dist/drivers/playwright/generated/frame-locator.d.ts +34 -0
  107. package/dist/drivers/playwright/generated/frame-locator.js +63 -0
  108. package/dist/drivers/playwright/generated/frame.d.ts +557 -0
  109. package/dist/drivers/playwright/generated/frame.js +634 -0
  110. package/dist/drivers/playwright/generated/js-handle.d.ts +72 -0
  111. package/dist/drivers/playwright/generated/js-handle.js +92 -0
  112. package/dist/drivers/playwright/generated/keyboard.d.ts +103 -0
  113. package/dist/drivers/playwright/generated/keyboard.js +113 -0
  114. package/dist/drivers/playwright/generated/locator.d.ts +795 -0
  115. package/dist/drivers/playwright/generated/locator.js +974 -0
  116. package/dist/drivers/playwright/generated/mouse.d.ts +97 -0
  117. package/dist/drivers/playwright/generated/mouse.js +109 -0
  118. package/dist/drivers/playwright/generated/page.d.ts +762 -0
  119. package/dist/drivers/playwright/generated/page.js +988 -0
  120. package/dist/drivers/playwright/generated/touchscreen.d.ts +34 -0
  121. package/dist/drivers/playwright/generated/touchscreen.js +37 -0
  122. package/dist/drivers/playwright/generated/tracing.d.ts +78 -0
  123. package/dist/drivers/playwright/generated/tracing.js +80 -0
  124. package/dist/drivers/playwright/generated/worker.d.ts +53 -0
  125. package/dist/drivers/playwright/generated/worker.js +59 -0
  126. package/dist/drivers/playwright/index.d.ts +19 -0
  127. package/dist/drivers/playwright/index.js +20 -0
  128. package/dist/drivers/playwright/remote-base.d.ts +62 -0
  129. package/dist/drivers/playwright/remote-base.js +86 -0
  130. package/dist/drivers/playwright/types.d.ts +148 -0
  131. package/dist/drivers/playwright/types.js +8 -0
  132. package/dist/drivers/puppeteer/errors.d.ts +50 -0
  133. package/dist/drivers/puppeteer/errors.js +71 -0
  134. package/dist/drivers/puppeteer/event-emitter.d.ts +145 -0
  135. package/dist/drivers/puppeteer/event-emitter.js +259 -0
  136. package/dist/drivers/puppeteer/generated/accessibility.d.ts +77 -0
  137. package/dist/drivers/puppeteer/generated/accessibility.js +74 -0
  138. package/dist/drivers/puppeteer/generated/browser-context.d.ts +116 -0
  139. package/dist/drivers/puppeteer/generated/browser-context.js +168 -0
  140. package/dist/drivers/puppeteer/generated/browser.d.ts +169 -0
  141. package/dist/drivers/puppeteer/generated/browser.js +246 -0
  142. package/dist/drivers/puppeteer/generated/console-message.d.ts +54 -0
  143. package/dist/drivers/puppeteer/generated/console-message.js +69 -0
  144. package/dist/drivers/puppeteer/generated/coverage.d.ts +49 -0
  145. package/dist/drivers/puppeteer/generated/coverage.js +57 -0
  146. package/dist/drivers/puppeteer/generated/dialog.d.ts +46 -0
  147. package/dist/drivers/puppeteer/generated/dialog.js +60 -0
  148. package/dist/drivers/puppeteer/generated/element-handle.d.ts +261 -0
  149. package/dist/drivers/puppeteer/generated/element-handle.js +341 -0
  150. package/dist/drivers/puppeteer/generated/file-chooser.d.ts +34 -0
  151. package/dist/drivers/puppeteer/generated/file-chooser.js +43 -0
  152. package/dist/drivers/puppeteer/generated/frame.d.ts +221 -0
  153. package/dist/drivers/puppeteer/generated/frame.js +302 -0
  154. package/dist/drivers/puppeteer/generated/http-request.d.ts +195 -0
  155. package/dist/drivers/puppeteer/generated/http-request.js +243 -0
  156. package/dist/drivers/puppeteer/generated/http-response.d.ts +142 -0
  157. package/dist/drivers/puppeteer/generated/http-response.js +169 -0
  158. package/dist/drivers/puppeteer/generated/js-handle.d.ts +104 -0
  159. package/dist/drivers/puppeteer/generated/js-handle.js +125 -0
  160. package/dist/drivers/puppeteer/generated/keyboard.d.ts +79 -0
  161. package/dist/drivers/puppeteer/generated/keyboard.js +89 -0
  162. package/dist/drivers/puppeteer/generated/locator.d.ts +141 -0
  163. package/dist/drivers/puppeteer/generated/locator.js +164 -0
  164. package/dist/drivers/puppeteer/generated/mouse.d.ts +74 -0
  165. package/dist/drivers/puppeteer/generated/mouse.js +94 -0
  166. package/dist/drivers/puppeteer/generated/page.d.ts +604 -0
  167. package/dist/drivers/puppeteer/generated/page.js +776 -0
  168. package/dist/drivers/puppeteer/generated/target.d.ts +105 -0
  169. package/dist/drivers/puppeteer/generated/target.js +123 -0
  170. package/dist/drivers/puppeteer/generated/touchscreen.d.ts +87 -0
  171. package/dist/drivers/puppeteer/generated/touchscreen.js +103 -0
  172. package/dist/drivers/puppeteer/generated/tracing.d.ts +38 -0
  173. package/dist/drivers/puppeteer/generated/tracing.js +43 -0
  174. package/dist/drivers/puppeteer/generated/web-worker.d.ts +63 -0
  175. package/dist/drivers/puppeteer/generated/web-worker.js +73 -0
  176. package/dist/drivers/puppeteer/index.d.ts +21 -0
  177. package/dist/drivers/puppeteer/index.js +23 -0
  178. package/dist/drivers/puppeteer/remote-base.d.ts +57 -0
  179. package/dist/drivers/puppeteer/remote-base.js +79 -0
  180. package/dist/drivers/puppeteer/types.d.ts +178 -0
  181. package/dist/drivers/puppeteer/types.js +8 -0
  182. package/dist/drivers/selenium/driver.d.ts +28 -0
  183. package/dist/drivers/selenium/driver.js +169 -0
  184. package/dist/drivers/selenium/element.d.ts +34 -0
  185. package/dist/drivers/selenium/element.js +73 -0
  186. package/dist/drivers/selenium/index.d.ts +3 -0
  187. package/dist/drivers/selenium/index.js +5 -0
  188. package/dist/drivers/selenium/types.d.ts +2 -0
  189. package/dist/drivers/selenium/types.js +12 -0
  190. package/dist/drivers/stagehand/generated/context.d.ts +127 -0
  191. package/dist/drivers/stagehand/generated/context.js +153 -0
  192. package/dist/drivers/stagehand/generated/locator.d.ts +324 -0
  193. package/dist/drivers/stagehand/generated/locator.js +368 -0
  194. package/dist/drivers/stagehand/generated/page.d.ts +377 -0
  195. package/dist/drivers/stagehand/generated/page.js +439 -0
  196. package/dist/drivers/stagehand/generated/response.d.ts +197 -0
  197. package/dist/drivers/stagehand/generated/response.js +232 -0
  198. package/dist/drivers/stagehand/index.d.ts +5 -0
  199. package/dist/drivers/stagehand/index.js +8 -0
  200. package/dist/drivers/stagehand/types.d.ts +1 -0
  201. package/dist/drivers/stagehand/types.js +7 -0
  202. package/dist/errors.d.ts +47 -0
  203. package/dist/errors.js +157 -0
  204. package/dist/extensions/client.d.ts +47 -0
  205. package/dist/extensions/client.js +154 -0
  206. package/dist/extensions/index.d.ts +1 -0
  207. package/dist/extensions/index.js +1 -0
  208. package/dist/index.d.ts +12 -0
  209. package/dist/index.js +23 -0
  210. package/dist/internal/dev-client.d.ts +5 -0
  211. package/dist/internal/dev-client.js +9 -0
  212. package/dist/internal/rpc-targets.d.ts +17 -0
  213. package/dist/internal/rpc-targets.js +58 -0
  214. package/dist/internal/serialization.d.ts +32 -0
  215. package/dist/internal/serialization.js +42 -0
  216. package/dist/internal/transport.d.ts +24 -0
  217. package/dist/internal/transport.js +29 -0
  218. package/dist/playwright.d.ts +1 -0
  219. package/dist/playwright.js +2 -0
  220. package/dist/puppeteer.d.ts +1 -0
  221. package/dist/puppeteer.js +2 -0
  222. package/dist/selenium.d.ts +1 -0
  223. package/dist/selenium.js +2 -0
  224. package/dist/stagehand.d.ts +1 -0
  225. package/dist/stagehand.js +2 -0
  226. package/dist/storage/client.d.ts +151 -0
  227. package/dist/storage/client.js +329 -0
  228. package/dist/storage/index.d.ts +2 -0
  229. package/dist/storage/index.js +4 -0
  230. package/dist/telemetry.d.ts +18 -0
  231. package/dist/telemetry.js +93 -0
  232. package/dist/updates/client.d.ts +8 -0
  233. package/dist/updates/client.js +128 -0
  234. package/dist/updates/index.d.ts +1 -0
  235. package/dist/updates/index.js +1 -0
  236. package/dist/utils/http.d.ts +39 -0
  237. package/dist/utils/http.js +88 -0
  238. package/dist/utils/index.d.ts +4 -0
  239. package/dist/utils/index.js +4 -0
  240. package/dist/utils/logger.d.ts +27 -0
  241. package/dist/utils/logger.js +74 -0
  242. package/dist/utils/schema.d.ts +17 -0
  243. package/dist/utils/schema.js +31 -0
  244. package/dist/utils/url.d.ts +5 -0
  245. package/dist/utils/url.js +7 -0
  246. package/dist/vault/client.d.ts +43 -0
  247. package/dist/vault/client.js +123 -0
  248. package/dist/vault/index.d.ts +1 -0
  249. package/dist/vault/index.js +1 -0
  250. package/dist/version.d.ts +1 -0
  251. package/dist/version.js +4 -0
  252. package/dist/workspaces/browser-runtime.d.ts +251 -0
  253. package/dist/workspaces/browser-runtime.js +1025 -0
  254. package/dist/workspaces/client.d.ts +48 -0
  255. package/dist/workspaces/client.js +222 -0
  256. package/dist/workspaces/index.d.ts +2 -0
  257. package/dist/workspaces/index.js +2 -0
  258. package/dist/workspaces/runtime-event-pump.d.ts +65 -0
  259. package/dist/workspaces/runtime-event-pump.js +716 -0
  260. package/package.json +56 -0
@@ -0,0 +1,88 @@
1
+ // ============================================================================
2
+ // HTTP Utilities - Shared utilities for HTTP requests
3
+ // ============================================================================
4
+ import { TimeoutError } from '../errors.js';
5
+ import * as telemetry from '../telemetry.js';
6
+ // Default timeout for HTTP requests (30 seconds for normal, 120 seconds for long operations)
7
+ export const DEFAULT_TIMEOUT_MS = 30000;
8
+ export const LONG_TIMEOUT_MS = 120000;
9
+ /**
10
+ * Safely parse JSON response from a fetch Response.
11
+ * Throws a descriptive error if parsing fails.
12
+ *
13
+ * @param response - The fetch Response object
14
+ * @param context - Context string for error messages (e.g., "Create session", "RPC browser.newPage")
15
+ * @returns Parsed JSON data
16
+ * @throws Error if JSON parsing fails
17
+ */
18
+ export async function parseJsonResponse(response, context) {
19
+ try {
20
+ return (await response.json());
21
+ }
22
+ catch (err) {
23
+ throw new Error(`${context}: Failed to parse response as JSON - ${err instanceof Error ? err.message : err}`);
24
+ }
25
+ }
26
+ /**
27
+ * Parse a server error body into a normalized message + optional machine code.
28
+ */
29
+ export function parseErrorDetails(bodyText) {
30
+ const text = bodyText.trim();
31
+ if (!text)
32
+ return { message: 'Unknown error' };
33
+ try {
34
+ const parsed = JSON.parse(text);
35
+ if (typeof parsed === 'string' && parsed.trim())
36
+ return { message: parsed.trim() };
37
+ if (parsed && typeof parsed === 'object') {
38
+ const record = parsed;
39
+ const message = (typeof record.error === 'string' && record.error.trim()) ||
40
+ (typeof record.message === 'string' && record.message.trim()) ||
41
+ text;
42
+ const code = typeof record.code === 'string' && record.code.trim() ? record.code.trim() : undefined;
43
+ return { message, code };
44
+ }
45
+ }
46
+ catch {
47
+ // Fall through to raw text if it's not JSON
48
+ }
49
+ return { message: text };
50
+ }
51
+ /**
52
+ * Backward-compatible helper for call sites that only need the message text.
53
+ */
54
+ export function parseErrorMessage(bodyText) {
55
+ return parseErrorDetails(bodyText).message;
56
+ }
57
+ /**
58
+ * Fetch with automatic timeout using AbortController.
59
+ * Throws a descriptive error if the request times out.
60
+ *
61
+ * @param url - The URL to fetch
62
+ * @param options - Standard fetch options (headers, method, body, etc.)
63
+ * @param timeoutMs - Timeout in milliseconds (default: DEFAULT_TIMEOUT_MS)
64
+ * @returns The fetch Response object
65
+ * @throws Error if request times out or fails
66
+ */
67
+ export async function fetchWithTimeout(url, options = {}, timeoutMs = DEFAULT_TIMEOUT_MS) {
68
+ const controller = new AbortController();
69
+ const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
70
+ try {
71
+ const response = await fetch(url, {
72
+ ...options,
73
+ signal: controller.signal,
74
+ });
75
+ return response;
76
+ }
77
+ catch (err) {
78
+ if (err instanceof Error && err.name === 'AbortError') {
79
+ const timeoutErr = new TimeoutError(`Request timed out after ${timeoutMs}ms`, { timeoutMs });
80
+ telemetry.captureError(timeoutErr, { url, timeoutMs });
81
+ throw timeoutErr;
82
+ }
83
+ throw err;
84
+ }
85
+ finally {
86
+ clearTimeout(timeoutId);
87
+ }
88
+ }
@@ -0,0 +1,4 @@
1
+ export * from './http.js';
2
+ export * from './schema.js';
3
+ export * from './logger.js';
4
+ export * from './url.js';
@@ -0,0 +1,4 @@
1
+ export * from './http.js';
2
+ export * from './schema.js';
3
+ export * from './logger.js';
4
+ export * from './url.js';
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Log levels for the SDK logger.
3
+ */
4
+ export type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'silent';
5
+ /**
6
+ * Log handler function type.
7
+ */
8
+ export type LogHandler = (level: LogLevel, message: string, ...args: unknown[]) => void;
9
+ /**
10
+ * SDK Logger - call methods directly or configure via setLogLevel/setLogHandler.
11
+ */
12
+ export declare const logger: {
13
+ debug: (message: string, ...args: unknown[]) => void;
14
+ info: (message: string, ...args: unknown[]) => void;
15
+ warn: (message: string, ...args: unknown[]) => void;
16
+ error: (message: string, ...args: unknown[]) => void;
17
+ /**
18
+ * Set the minimum log level.
19
+ * Levels: 'debug' | 'info' | 'warn' | 'error' | 'silent'
20
+ */
21
+ setLevel: (level: LogLevel) => void;
22
+ /**
23
+ * Set a custom log handler.
24
+ * Useful for integrating with your application's logging system.
25
+ */
26
+ setHandler: (handler: LogHandler) => void;
27
+ };
@@ -0,0 +1,74 @@
1
+ // ============================================================================
2
+ // SDK Logger - Lightweight logging for debugging
3
+ // ============================================================================
4
+ /**
5
+ * Default log handler that uses console methods.
6
+ */
7
+ const defaultHandler = (level, message, ...args) => {
8
+ if (level === 'silent')
9
+ return;
10
+ const prefix = `[bctrl-sdk]`;
11
+ switch (level) {
12
+ case 'debug':
13
+ console.debug(prefix, message, ...args);
14
+ break;
15
+ case 'info':
16
+ console.info(prefix, message, ...args);
17
+ break;
18
+ case 'warn':
19
+ console.warn(prefix, message, ...args);
20
+ break;
21
+ case 'error':
22
+ console.error(prefix, message, ...args);
23
+ break;
24
+ }
25
+ };
26
+ const config = {
27
+ level: process.env.BCTRL_LOG_LEVEL || 'warn',
28
+ handler: defaultHandler,
29
+ };
30
+ const levelOrder = {
31
+ debug: 0,
32
+ info: 1,
33
+ warn: 2,
34
+ error: 3,
35
+ silent: 4,
36
+ };
37
+ function shouldLog(level) {
38
+ return levelOrder[level] >= levelOrder[config.level];
39
+ }
40
+ /**
41
+ * SDK Logger - call methods directly or configure via setLogLevel/setLogHandler.
42
+ */
43
+ export const logger = {
44
+ debug: (message, ...args) => {
45
+ if (shouldLog('debug'))
46
+ config.handler('debug', message, ...args);
47
+ },
48
+ info: (message, ...args) => {
49
+ if (shouldLog('info'))
50
+ config.handler('info', message, ...args);
51
+ },
52
+ warn: (message, ...args) => {
53
+ if (shouldLog('warn'))
54
+ config.handler('warn', message, ...args);
55
+ },
56
+ error: (message, ...args) => {
57
+ if (shouldLog('error'))
58
+ config.handler('error', message, ...args);
59
+ },
60
+ /**
61
+ * Set the minimum log level.
62
+ * Levels: 'debug' | 'info' | 'warn' | 'error' | 'silent'
63
+ */
64
+ setLevel: (level) => {
65
+ config.level = level;
66
+ },
67
+ /**
68
+ * Set a custom log handler.
69
+ * Useful for integrating with your application's logging system.
70
+ */
71
+ setHandler: (handler) => {
72
+ config.handler = handler;
73
+ },
74
+ };
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Schema utilities for converting Zod schemas to JSON Schema.
3
+ * Allows SDK users to pass Zod schemas directly, which are converted
4
+ * to JSON Schema for transmission over HTTP.
5
+ */
6
+ import type { ZodType } from 'zod';
7
+ /**
8
+ * Check if a value is a Zod schema.
9
+ * Zod 4 schemas have _zod property and toJSONSchema method.
10
+ */
11
+ export declare function isZodSchema(value: unknown): value is ZodType;
12
+ /**
13
+ * Convert a schema (Zod or JSON Schema) to JSON Schema format.
14
+ * If already a JSON Schema object, returns as-is.
15
+ * If a Zod schema, converts using Zod 4's native toJSONSchema().
16
+ */
17
+ export declare function toJsonSchema(schema: unknown): Record<string, unknown>;
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Schema utilities for converting Zod schemas to JSON Schema.
3
+ * Allows SDK users to pass Zod schemas directly, which are converted
4
+ * to JSON Schema for transmission over HTTP.
5
+ */
6
+ /**
7
+ * Check if a value is a Zod schema.
8
+ * Zod 4 schemas have _zod property and toJSONSchema method.
9
+ */
10
+ export function isZodSchema(value) {
11
+ return (value !== null &&
12
+ typeof value === 'object' &&
13
+ '_zod' in value &&
14
+ typeof value.toJSONSchema === 'function');
15
+ }
16
+ /**
17
+ * Convert a schema (Zod or JSON Schema) to JSON Schema format.
18
+ * If already a JSON Schema object, returns as-is.
19
+ * If a Zod schema, converts using Zod 4's native toJSONSchema().
20
+ */
21
+ export function toJsonSchema(schema) {
22
+ if (isZodSchema(schema)) {
23
+ // Use Zod 4's native toJSONSchema method
24
+ const result = schema.toJSONSchema();
25
+ // Remove $schema wrapper if present
26
+ const { $schema, ...jsonSchema } = result;
27
+ return jsonSchema;
28
+ }
29
+ // Assume it's already a JSON Schema object
30
+ return schema;
31
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Remove a single trailing slash from a URL-like string.
3
+ * Preserves previous behavior of `.replace(/\/$/, '')`.
4
+ */
5
+ export declare function stripTrailingSlash(value: string): string;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Remove a single trailing slash from a URL-like string.
3
+ * Preserves previous behavior of `.replace(/\/$/, '')`.
4
+ */
5
+ export function stripTrailingSlash(value) {
6
+ return value.endsWith('/') ? value.slice(0, -1) : value;
7
+ }
@@ -0,0 +1,43 @@
1
+ import type { VaultCredential, VaultCredentialInput, VaultCredentialMeta } from '../contracts/vault.js';
2
+ type VaultListKeyOptions = {
3
+ prefix?: string;
4
+ };
5
+ type VaultListMetaOptions = {
6
+ meta: true;
7
+ prefix?: string;
8
+ origin?: string;
9
+ hasTotp?: boolean;
10
+ limit?: number;
11
+ };
12
+ export declare class VaultClient {
13
+ private readonly baseUrl;
14
+ private readonly apiKey?;
15
+ private readonly sessionId?;
16
+ constructor(baseUrl: string, apiKey?: string | undefined, sessionId?: string | undefined);
17
+ private headers;
18
+ /**
19
+ * Get a credential from the vault.
20
+ * Returns null if not found.
21
+ */
22
+ get(key: string): Promise<VaultCredential | null>;
23
+ /**
24
+ * Set (create/update) a credential in the vault.
25
+ */
26
+ set(key: string, credential: VaultCredentialInput): Promise<void>;
27
+ /**
28
+ * Delete a credential from the vault.
29
+ */
30
+ delete(key: string): Promise<void>;
31
+ /**
32
+ * List credential keys with optional prefix.
33
+ */
34
+ list(): Promise<string[]>;
35
+ list(prefix: string): Promise<string[]>;
36
+ list(options: VaultListKeyOptions): Promise<string[]>;
37
+ list(options: VaultListMetaOptions): Promise<VaultCredentialMeta[]>;
38
+ /**
39
+ * Get current TOTP code for a credential.
40
+ */
41
+ totp(key: string): Promise<string>;
42
+ }
43
+ export {};
@@ -0,0 +1,123 @@
1
+ /**
2
+ * VaultClient — SDK client for vault credential management.
3
+ *
4
+ * Thin HTTP client that mirrors the control plane vault API.
5
+ * Same pattern as StorageClient.
6
+ */
7
+ import { fetchWithTimeout, parseJsonResponse } from '../utils/http.js';
8
+ import { SDK_VERSION } from '../version.js';
9
+ // ============================================================================
10
+ // VaultClient
11
+ // ============================================================================
12
+ export class VaultClient {
13
+ baseUrl;
14
+ apiKey;
15
+ sessionId;
16
+ constructor(baseUrl, apiKey, sessionId) {
17
+ this.baseUrl = baseUrl;
18
+ this.apiKey = apiKey;
19
+ this.sessionId = sessionId;
20
+ }
21
+ headers(withJsonBody = false) {
22
+ const h = {
23
+ 'x-sdk-version': SDK_VERSION,
24
+ };
25
+ if (withJsonBody)
26
+ h['Content-Type'] = 'application/json';
27
+ if (this.apiKey)
28
+ h['Authorization'] = `Bearer ${this.apiKey}`;
29
+ if (this.sessionId)
30
+ h['x-session-id'] = this.sessionId;
31
+ return h;
32
+ }
33
+ /**
34
+ * Get a credential from the vault.
35
+ * Returns null if not found.
36
+ */
37
+ async get(key) {
38
+ const res = await fetchWithTimeout(`${this.baseUrl}/vault/${encodeVaultKey(key)}`, {
39
+ headers: this.headers(),
40
+ });
41
+ if (res.status === 404)
42
+ return null;
43
+ if (!res.ok)
44
+ throw new Error(`Vault get failed: ${await res.text()}`);
45
+ return parseJsonResponse(res, 'Vault get');
46
+ }
47
+ /**
48
+ * Set (create/update) a credential in the vault.
49
+ */
50
+ async set(key, credential) {
51
+ const res = await fetchWithTimeout(`${this.baseUrl}/vault/${encodeVaultKey(key)}`, {
52
+ method: 'PUT',
53
+ headers: this.headers(true),
54
+ body: JSON.stringify(credential),
55
+ });
56
+ if (!res.ok)
57
+ throw new Error(`Vault set failed: ${await res.text()}`);
58
+ }
59
+ /**
60
+ * Delete a credential from the vault.
61
+ */
62
+ async delete(key) {
63
+ const res = await fetchWithTimeout(`${this.baseUrl}/vault/${encodeVaultKey(key)}`, {
64
+ method: 'DELETE',
65
+ headers: this.headers(),
66
+ });
67
+ if (!res.ok)
68
+ throw new Error(`Vault delete failed: ${await res.text()}`);
69
+ }
70
+ async list(input) {
71
+ const params = new URLSearchParams();
72
+ if (typeof input === 'string') {
73
+ params.set('prefix', input);
74
+ }
75
+ else if (input) {
76
+ if ('meta' in input && input.meta === true) {
77
+ params.set('meta', '1');
78
+ if (input.prefix)
79
+ params.set('prefix', input.prefix);
80
+ if (input.origin)
81
+ params.set('origin', input.origin);
82
+ if (typeof input.hasTotp === 'boolean')
83
+ params.set('hasTotp', String(input.hasTotp));
84
+ if (typeof input.limit === 'number')
85
+ params.set('limit', String(input.limit));
86
+ }
87
+ else if (input.prefix) {
88
+ params.set('prefix', input.prefix);
89
+ }
90
+ }
91
+ const query = params.toString();
92
+ const suffix = query ? `?${query}` : '';
93
+ const res = await fetchWithTimeout(`${this.baseUrl}/vault${suffix}`, {
94
+ headers: this.headers(),
95
+ });
96
+ if (!res.ok)
97
+ throw new Error(`Vault list failed: ${await res.text()}`);
98
+ if (typeof input === 'object' && input && 'meta' in input && input.meta === true) {
99
+ const data = await parseJsonResponse(res, 'Vault list (metadata)');
100
+ return data.items;
101
+ }
102
+ const data = await parseJsonResponse(res, 'Vault list');
103
+ return data.keys;
104
+ }
105
+ /**
106
+ * Get current TOTP code for a credential.
107
+ */
108
+ async totp(key) {
109
+ const res = await fetchWithTimeout(`${this.baseUrl}/vault/${encodeVaultKey(key)}/totp`, {
110
+ headers: this.headers(),
111
+ });
112
+ if (!res.ok)
113
+ throw new Error(`Vault TOTP failed: ${await res.text()}`);
114
+ const data = await parseJsonResponse(res, 'Vault TOTP');
115
+ return data.code;
116
+ }
117
+ }
118
+ /**
119
+ * Encode each segment of a slash-separated vault key.
120
+ */
121
+ function encodeVaultKey(key) {
122
+ return key.split('/').map(encodeURIComponent).join('/');
123
+ }
@@ -0,0 +1 @@
1
+ export { VaultClient } from './client.js';
@@ -0,0 +1 @@
1
+ export { VaultClient } from './client.js';
@@ -0,0 +1 @@
1
+ export declare const SDK_VERSION: string;
@@ -0,0 +1,4 @@
1
+ import { createRequire } from 'node:module';
2
+ const require = createRequire(import.meta.url);
3
+ const pkg = require('../package.json');
4
+ export const SDK_VERSION = pkg.version;