@nuanu-ai/agentbrowse 0.2.46 → 0.2.48

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 (190) hide show
  1. package/README.md +69 -10
  2. package/dist/agentpay-gateway.d.ts +9 -0
  3. package/dist/agentpay-gateway.d.ts.map +1 -1
  4. package/dist/agentpay-gateway.js +30 -0
  5. package/dist/agentpay-stagehand-llm.d.ts.map +1 -1
  6. package/dist/agentpay-stagehand-llm.js +9 -1
  7. package/dist/command-api-tracing.d.ts +19 -0
  8. package/dist/command-api-tracing.d.ts.map +1 -0
  9. package/dist/command-api-tracing.js +137 -0
  10. package/dist/commands/act.d.ts.map +1 -1
  11. package/dist/commands/act.js +822 -670
  12. package/dist/commands/act.test-harness.d.ts +6 -0
  13. package/dist/commands/act.test-harness.d.ts.map +1 -1
  14. package/dist/commands/act.test-harness.js +44 -1
  15. package/dist/commands/action-acceptance.d.ts.map +1 -1
  16. package/dist/commands/action-acceptance.js +115 -0
  17. package/dist/commands/captcha-solve.d.ts.map +1 -1
  18. package/dist/commands/captcha-solve.js +83 -16
  19. package/dist/commands/click-action-executor.d.ts +0 -1
  20. package/dist/commands/click-action-executor.d.ts.map +1 -1
  21. package/dist/commands/click-action-executor.js +31 -77
  22. package/dist/commands/close.d.ts +3 -3
  23. package/dist/commands/close.d.ts.map +1 -1
  24. package/dist/commands/close.js +178 -0
  25. package/dist/commands/descriptor-validation.d.ts.map +1 -1
  26. package/dist/commands/descriptor-validation.js +75 -57
  27. package/dist/commands/end-session.d.ts +25 -0
  28. package/dist/commands/end-session.d.ts.map +1 -0
  29. package/dist/commands/end-session.js +161 -0
  30. package/dist/commands/extract-stagehand-executor.js +1 -1
  31. package/dist/commands/extract.d.ts.map +1 -1
  32. package/dist/commands/extract.js +339 -202
  33. package/dist/commands/fill-secret.d.ts +3 -3
  34. package/dist/commands/fill-secret.d.ts.map +1 -1
  35. package/dist/commands/fill-secret.js +419 -234
  36. package/dist/commands/get-secrets-catalog.d.ts.map +1 -1
  37. package/dist/commands/get-secrets-catalog.js +66 -5
  38. package/dist/commands/interaction-kernel.d.ts +46 -0
  39. package/dist/commands/interaction-kernel.d.ts.map +1 -0
  40. package/dist/commands/interaction-kernel.js +215 -0
  41. package/dist/commands/launch.d.ts +0 -2
  42. package/dist/commands/launch.d.ts.map +1 -1
  43. package/dist/commands/launch.js +109 -17
  44. package/dist/commands/navigate.d.ts.map +1 -1
  45. package/dist/commands/navigate.js +188 -45
  46. package/dist/commands/observe-accessibility.d.ts.map +1 -1
  47. package/dist/commands/observe-accessibility.js +50 -39
  48. package/dist/commands/observe-dom-label-contract.d.ts.map +1 -1
  49. package/dist/commands/observe-dom-label-contract.js +5 -0
  50. package/dist/commands/observe-inventory.d.ts +13 -0
  51. package/dist/commands/observe-inventory.d.ts.map +1 -1
  52. package/dist/commands/observe-inventory.js +320 -65
  53. package/dist/commands/observe-persistence.d.ts.map +1 -1
  54. package/dist/commands/observe-persistence.js +3 -0
  55. package/dist/commands/observe-projection.d.ts +1 -0
  56. package/dist/commands/observe-projection.d.ts.map +1 -1
  57. package/dist/commands/observe-projection.js +7 -2
  58. package/dist/commands/observe-protected.d.ts +1 -0
  59. package/dist/commands/observe-protected.d.ts.map +1 -1
  60. package/dist/commands/observe-protected.js +9 -4
  61. package/dist/commands/observe-semantics.d.ts.map +1 -1
  62. package/dist/commands/observe-semantics.js +5 -2
  63. package/dist/commands/observe-stagehand.d.ts +1 -0
  64. package/dist/commands/observe-stagehand.d.ts.map +1 -1
  65. package/dist/commands/observe-stagehand.js +2 -0
  66. package/dist/commands/observe.d.ts +2 -0
  67. package/dist/commands/observe.d.ts.map +1 -1
  68. package/dist/commands/observe.js +387 -203
  69. package/dist/commands/observe.test-harness.d.ts +8 -0
  70. package/dist/commands/observe.test-harness.d.ts.map +1 -1
  71. package/dist/commands/observe.test-harness.js +48 -1
  72. package/dist/commands/poll-secret.d.ts +6 -0
  73. package/dist/commands/poll-secret.d.ts.map +1 -0
  74. package/dist/commands/poll-secret.js +159 -0
  75. package/dist/commands/request-secret.d.ts +6 -0
  76. package/dist/commands/request-secret.d.ts.map +1 -0
  77. package/dist/commands/request-secret.js +284 -0
  78. package/dist/commands/screenshot.d.ts.map +1 -1
  79. package/dist/commands/screenshot.js +172 -7
  80. package/dist/commands/select-action-executor.d.ts.map +1 -1
  81. package/dist/commands/semantic-observe.d.ts +4 -0
  82. package/dist/commands/semantic-observe.d.ts.map +1 -1
  83. package/dist/commands/semantic-observe.js +388 -17
  84. package/dist/commands/start-session.d.ts +31 -0
  85. package/dist/commands/start-session.d.ts.map +1 -0
  86. package/dist/commands/start-session.js +347 -0
  87. package/dist/commands/status.d.ts +2 -1
  88. package/dist/commands/status.d.ts.map +1 -1
  89. package/dist/commands/status.js +166 -144
  90. package/dist/control-semantics.d.ts +1 -0
  91. package/dist/control-semantics.d.ts.map +1 -1
  92. package/dist/control-semantics.js +51 -9
  93. package/dist/index.d.ts.map +1 -1
  94. package/dist/index.js +144 -45
  95. package/dist/otel-exporter.d.ts +58 -0
  96. package/dist/otel-exporter.d.ts.map +1 -0
  97. package/dist/otel-exporter.js +263 -0
  98. package/dist/otel-projector.d.ts +75 -0
  99. package/dist/otel-projector.d.ts.map +1 -0
  100. package/dist/otel-projector.js +409 -0
  101. package/dist/owned-browser.d.ts +1 -1
  102. package/dist/owned-browser.d.ts.map +1 -1
  103. package/dist/owned-browser.js +13 -1
  104. package/dist/owned-process.d.ts +2 -0
  105. package/dist/owned-process.d.ts.map +1 -1
  106. package/dist/owned-process.js +7 -3
  107. package/dist/playwright-runtime.d.ts +1 -1
  108. package/dist/playwright-runtime.d.ts.map +1 -1
  109. package/dist/playwright-runtime.js +8 -8
  110. package/dist/run-observability.d.ts +25 -0
  111. package/dist/run-observability.d.ts.map +1 -0
  112. package/dist/run-observability.js +115 -0
  113. package/dist/run-store.d.ts +274 -0
  114. package/dist/run-store.d.ts.map +1 -0
  115. package/dist/run-store.js +631 -0
  116. package/dist/runtime-metrics.d.ts +27 -0
  117. package/dist/runtime-metrics.d.ts.map +1 -0
  118. package/dist/runtime-metrics.js +66 -0
  119. package/dist/runtime-page-state.d.ts +11 -0
  120. package/dist/runtime-page-state.d.ts.map +1 -0
  121. package/dist/runtime-page-state.js +62 -0
  122. package/dist/runtime-protected-state.d.ts +16 -0
  123. package/dist/runtime-protected-state.d.ts.map +1 -0
  124. package/dist/runtime-protected-state.js +157 -0
  125. package/dist/runtime-state.d.ts +10 -44
  126. package/dist/runtime-state.d.ts.map +1 -1
  127. package/dist/runtime-state.js +57 -222
  128. package/dist/secrets/backend.d.ts +65 -16
  129. package/dist/secrets/backend.d.ts.map +1 -1
  130. package/dist/secrets/backend.js +135 -95
  131. package/dist/secrets/catalog-sync.d.ts.map +1 -1
  132. package/dist/secrets/catalog-sync.js +4 -1
  133. package/dist/secrets/form-matcher.d.ts +5 -5
  134. package/dist/secrets/form-matcher.d.ts.map +1 -1
  135. package/dist/secrets/form-matcher.js +292 -164
  136. package/dist/secrets/intent-output.d.ts +6 -10
  137. package/dist/secrets/intent-output.d.ts.map +1 -1
  138. package/dist/secrets/intent-output.js +4 -58
  139. package/dist/secrets/mock-agentpay-cabinet.d.ts +38 -27
  140. package/dist/secrets/mock-agentpay-cabinet.d.ts.map +1 -1
  141. package/dist/secrets/mock-agentpay-cabinet.js +177 -111
  142. package/dist/secrets/protected-artifact-guard.d.ts +2 -2
  143. package/dist/secrets/protected-artifact-guard.d.ts.map +1 -1
  144. package/dist/secrets/protected-artifact-guard.js +2 -2
  145. package/dist/secrets/protected-bindings.d.ts +1 -1
  146. package/dist/secrets/protected-bindings.d.ts.map +1 -1
  147. package/dist/secrets/protected-bindings.js +6 -0
  148. package/dist/secrets/protected-field-semantics.d.ts +9 -0
  149. package/dist/secrets/protected-field-semantics.d.ts.map +1 -0
  150. package/dist/secrets/protected-field-semantics.js +154 -0
  151. package/dist/secrets/protected-field-values.d.ts.map +1 -1
  152. package/dist/secrets/protected-field-values.js +3 -3
  153. package/dist/secrets/protected-fill.d.ts +1 -1
  154. package/dist/secrets/protected-fill.d.ts.map +1 -1
  155. package/dist/secrets/protected-fill.js +45 -149
  156. package/dist/secrets/protected-value-adapters.d.ts +2 -1
  157. package/dist/secrets/protected-value-adapters.d.ts.map +1 -1
  158. package/dist/secrets/protected-value-adapters.js +80 -1
  159. package/dist/secrets/request-output.d.ts +11 -0
  160. package/dist/secrets/request-output.d.ts.map +1 -0
  161. package/dist/secrets/request-output.js +75 -0
  162. package/dist/secrets/types.d.ts +15 -9
  163. package/dist/secrets/types.d.ts.map +1 -1
  164. package/dist/secrets/types.js +3 -0
  165. package/dist/session-event-exporter.d.ts +36 -0
  166. package/dist/session-event-exporter.d.ts.map +1 -0
  167. package/dist/session-event-exporter.js +428 -0
  168. package/dist/session.d.ts +16 -7
  169. package/dist/session.d.ts.map +1 -1
  170. package/dist/session.js +150 -23
  171. package/dist/sessions-backend.d.ts +354 -0
  172. package/dist/sessions-backend.d.ts.map +1 -0
  173. package/dist/sessions-backend.js +126 -0
  174. package/dist/solver/browser-launcher.d.ts +1 -1
  175. package/dist/solver/browser-launcher.d.ts.map +1 -1
  176. package/dist/solver/browser-launcher.js +39 -13
  177. package/dist/solver/captcha-solver.d.ts.map +1 -1
  178. package/dist/solver/captcha-solver.js +8 -1
  179. package/dist/solver/types.d.ts +1 -0
  180. package/dist/solver/types.d.ts.map +1 -1
  181. package/dist/workflow-session-completion.d.ts +33 -0
  182. package/dist/workflow-session-completion.d.ts.map +1 -0
  183. package/dist/workflow-session-completion.js +156 -0
  184. package/package.json +9 -1
  185. package/dist/commands/create-intent.d.ts +0 -6
  186. package/dist/commands/create-intent.d.ts.map +0 -1
  187. package/dist/commands/create-intent.js +0 -75
  188. package/dist/commands/poll-intent.d.ts +0 -6
  189. package/dist/commands/poll-intent.d.ts.map +0 -1
  190. package/dist/commands/poll-intent.js +0 -57
package/dist/session.js CHANGED
@@ -2,11 +2,18 @@
2
2
  * Session persistence for agentbrowse.
3
3
  * Stores CDP URL + Chrome PID in ~/.agentpay/browse-session.json
4
4
  */
5
- import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from 'node:fs';
5
+ import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, unlinkSync, writeFileSync } from 'node:fs';
6
6
  import { homedir } from 'node:os';
7
7
  import { join } from 'node:path';
8
- const SESSION_DIR = join(homedir(), '.agentpay');
9
- const SESSION_PATH = join(SESSION_DIR, 'browse-session.json');
8
+ function getSessionDir() {
9
+ return join(homedir(), '.agentpay');
10
+ }
11
+ function getSessionPath() {
12
+ return join(getSessionDir(), 'browse-session.json');
13
+ }
14
+ function getWorkflowContextPath() {
15
+ return join(getSessionDir(), 'browse-workflow.json');
16
+ }
10
17
  const BLOCKED_SESSION_KEYS = new Set([
11
18
  'rawValue',
12
19
  'rawValues',
@@ -16,8 +23,20 @@ const BLOCKED_SESSION_KEYS = new Set([
16
23
  'protectedValues',
17
24
  ]);
18
25
  function ensureDir() {
19
- if (!existsSync(SESSION_DIR)) {
20
- mkdirSync(SESSION_DIR, { recursive: true });
26
+ const sessionDir = getSessionDir();
27
+ if (!existsSync(sessionDir)) {
28
+ mkdirSync(sessionDir, { recursive: true });
29
+ }
30
+ }
31
+ function atomicWriteJson(path, contents) {
32
+ const tempPath = `${path}.${process.pid}.tmp`;
33
+ try {
34
+ writeFileSync(tempPath, contents);
35
+ renameSync(tempPath, path);
36
+ }
37
+ catch (error) {
38
+ rmSync(tempPath, { force: true });
39
+ throw error;
21
40
  }
22
41
  }
23
42
  function parseSessionPort(cdpUrl) {
@@ -44,6 +63,37 @@ function parseBrowserInstanceRef(cdpUrl) {
44
63
  return pathSegments.at(-1) ?? cdpUrl;
45
64
  }
46
65
  }
66
+ async function probeSessionEndpoint(session) {
67
+ const port = session.port ?? parseSessionPort(session.cdpUrl) ?? 9222;
68
+ if (!port) {
69
+ return 'unreachable';
70
+ }
71
+ try {
72
+ const response = await fetch(`http://127.0.0.1:${port}/json/version`);
73
+ if (!response.ok) {
74
+ return 'unreachable';
75
+ }
76
+ const payload = (await response.json());
77
+ const liveEndpoint = payload.webSocketDebuggerUrl?.trim();
78
+ if (!liveEndpoint) {
79
+ return 'unreachable';
80
+ }
81
+ const expectedEndpoint = session.identity?.endpoint ?? session.cdpUrl;
82
+ if (liveEndpoint === expectedEndpoint) {
83
+ return 'match';
84
+ }
85
+ const expectedBrowserInstanceRef = session.identity?.browserInstanceRef ?? parseBrowserInstanceRef(expectedEndpoint);
86
+ return parseBrowserInstanceRef(liveEndpoint) === expectedBrowserInstanceRef
87
+ ? 'match'
88
+ : 'mismatch';
89
+ }
90
+ catch {
91
+ return 'unreachable';
92
+ }
93
+ }
94
+ export function resolveBrowserSessionId(session) {
95
+ return session.identity?.browserInstanceRef ?? `pid-${session.pid}`;
96
+ }
47
97
  function isExpired(expiresAt, now) {
48
98
  if (!expiresAt) {
49
99
  return false;
@@ -57,9 +107,9 @@ export function cleanupTransientSecretCache(session, options = {}) {
57
107
  }
58
108
  const now = options.now ?? new Date().toISOString();
59
109
  let changed = false;
60
- for (const [intentId, entry] of Object.entries(cache)) {
110
+ for (const [requestId, entry] of Object.entries(cache)) {
61
111
  if (isExpired(entry.expiresAt, now)) {
62
- delete cache[intentId];
112
+ delete cache[requestId];
63
113
  changed = true;
64
114
  }
65
115
  }
@@ -72,30 +122,54 @@ export function cleanupTransientSecretCache(session, options = {}) {
72
122
  export function cacheTransientSecret(session, entry) {
73
123
  cleanupTransientSecretCache(session);
74
124
  const cache = (session.transientSecretCache ??= {});
75
- cache[entry.intentId] = {
125
+ cache[entry.requestId] = {
76
126
  ...entry,
77
127
  values: { ...entry.values },
78
128
  };
79
- return cache[entry.intentId];
129
+ return cache[entry.requestId];
80
130
  }
81
- export function getCachedTransientSecret(session, intentId, options = {}) {
131
+ export function getCachedTransientSecret(session, requestId, options = {}) {
82
132
  if (cleanupTransientSecretCache(session, options)) {
83
133
  // Keep the in-memory session sanitized for callers that save immediately after load.
84
134
  }
85
- return session.transientSecretCache?.[intentId] ?? null;
135
+ return session.transientSecretCache?.[requestId] ?? null;
86
136
  }
87
- export function deleteCachedTransientSecret(session, intentId) {
137
+ export function deleteCachedTransientSecret(session, requestId) {
88
138
  const cache = session.transientSecretCache;
89
- if (!cache?.[intentId]) {
139
+ if (!cache?.[requestId]) {
90
140
  return false;
91
141
  }
92
- delete cache[intentId];
142
+ delete cache[requestId];
93
143
  if (Object.keys(cache).length === 0) {
94
144
  delete session.transientSecretCache;
95
145
  }
96
146
  return true;
97
147
  }
98
- export function serializeSession(session) {
148
+ function splitSessionForPersistence(session) {
149
+ const { browserSessionId, activeRunId, intentSessionId, currentRequestId, lastKnownStatus, lastEventSeq, transientSecretCache, ...browserSession } = session;
150
+ const resolvedBrowserSessionId = browserSessionId ?? resolveBrowserSessionId(browserSession);
151
+ const workflowContext = {
152
+ ...((activeRunId ||
153
+ intentSessionId ||
154
+ currentRequestId ||
155
+ lastKnownStatus ||
156
+ transientSecretCache) &&
157
+ resolvedBrowserSessionId
158
+ ? { browserSessionId: resolvedBrowserSessionId }
159
+ : {}),
160
+ ...(activeRunId ? { activeRunId } : {}),
161
+ ...(intentSessionId ? { intentSessionId } : {}),
162
+ ...(currentRequestId ? { currentRequestId } : {}),
163
+ ...(lastKnownStatus ? { lastKnownStatus } : {}),
164
+ ...(typeof lastEventSeq === 'number' ? { lastEventSeq } : {}),
165
+ ...(transientSecretCache ? { transientSecretCache } : {}),
166
+ };
167
+ return {
168
+ browserSession: browserSession,
169
+ workflowContext: Object.keys(workflowContext).length > 0 ? workflowContext : null,
170
+ };
171
+ }
172
+ function serializeBrowserSession(session) {
99
173
  return JSON.stringify(session, (key, value) => {
100
174
  if (BLOCKED_SESSION_KEYS.has(key)) {
101
175
  return undefined;
@@ -103,6 +177,28 @@ export function serializeSession(session) {
103
177
  return value;
104
178
  }, 2);
105
179
  }
180
+ function serializeWorkflowContext(context) {
181
+ return JSON.stringify(context, null, 2);
182
+ }
183
+ function loadWorkflowContext() {
184
+ const workflowContextPath = getWorkflowContextPath();
185
+ if (!existsSync(workflowContextPath)) {
186
+ return null;
187
+ }
188
+ try {
189
+ return JSON.parse(readFileSync(workflowContextPath, 'utf-8'));
190
+ }
191
+ catch {
192
+ return null;
193
+ }
194
+ }
195
+ function canHydrateWorkflowContext(browserSession, workflowContext) {
196
+ return (!workflowContext.browserSessionId ||
197
+ workflowContext.browserSessionId === resolveBrowserSessionId(browserSession));
198
+ }
199
+ export function serializeSession(session) {
200
+ return serializeBrowserSession(splitSessionForPersistence(session).browserSession);
201
+ }
106
202
  export function buildOwnedSession(session) {
107
203
  return {
108
204
  ...session,
@@ -119,16 +215,36 @@ export function buildOwnedSession(session) {
119
215
  }
120
216
  export function saveSession(session) {
121
217
  ensureDir();
122
- writeFileSync(SESSION_PATH, serializeSession(session));
218
+ const { browserSession, workflowContext } = splitSessionForPersistence(session);
219
+ const sessionPath = getSessionPath();
220
+ const workflowContextPath = getWorkflowContextPath();
221
+ atomicWriteJson(sessionPath, serializeBrowserSession(browserSession));
222
+ if (workflowContext) {
223
+ atomicWriteJson(workflowContextPath, serializeWorkflowContext(workflowContext));
224
+ }
225
+ else if (existsSync(workflowContextPath)) {
226
+ unlinkSync(workflowContextPath);
227
+ }
123
228
  }
124
229
  export function loadSession() {
125
- if (!existsSync(SESSION_PATH))
230
+ const sessionPath = getSessionPath();
231
+ if (!existsSync(sessionPath))
126
232
  return null;
127
233
  try {
128
- const raw = JSON.parse(readFileSync(SESSION_PATH, 'utf-8'));
234
+ const raw = JSON.parse(readFileSync(sessionPath, 'utf-8'));
129
235
  if (!raw.cdpUrl || !raw.pid)
130
236
  return null;
131
- const session = raw;
237
+ const browserSession = raw;
238
+ const workflowContext = loadWorkflowContext();
239
+ const session = {
240
+ ...browserSession,
241
+ ...(workflowContext && canHydrateWorkflowContext(browserSession, workflowContext)
242
+ ? workflowContext
243
+ : {}),
244
+ };
245
+ if (workflowContext && !canHydrateWorkflowContext(browserSession, workflowContext)) {
246
+ saveSession(browserSession);
247
+ }
132
248
  const changed = cleanupTransientSecretCache(session);
133
249
  if (changed) {
134
250
  saveSession(session);
@@ -151,8 +267,12 @@ export function getSessionPort(session) {
151
267
  return 9222;
152
268
  }
153
269
  export function deleteSession() {
154
- if (existsSync(SESSION_PATH))
155
- unlinkSync(SESSION_PATH);
270
+ const sessionPath = getSessionPath();
271
+ const workflowContextPath = getWorkflowContextPath();
272
+ if (existsSync(sessionPath))
273
+ unlinkSync(sessionPath);
274
+ if (existsSync(workflowContextPath))
275
+ unlinkSync(workflowContextPath);
156
276
  }
157
277
  export function supportsCaptchaSolve(session) {
158
278
  return session?.capabilities?.captchaSolve === true;
@@ -168,8 +288,15 @@ export function isOwnedSession(session) {
168
288
  session.identity.browserInstanceRef.length > 0 &&
169
289
  session.identity.profile === session.profile);
170
290
  }
171
- /** Check if the Chrome process from the session is still alive. */
172
- export function isSessionAlive(session) {
291
+ /** Check if the persisted session still points at the same live browser. */
292
+ export async function isSessionAlive(session) {
293
+ const endpointProbe = await probeSessionEndpoint(session);
294
+ if (endpointProbe === 'match') {
295
+ return true;
296
+ }
297
+ if (endpointProbe === 'mismatch' || session.identity?.ownership === 'agentbrowse') {
298
+ return false;
299
+ }
173
300
  try {
174
301
  process.kill(session.pid, 0);
175
302
  return true;
@@ -0,0 +1,354 @@
1
+ export interface SessionBackendCurrentRequest {
2
+ id: string;
3
+ type: 'secret_read' | 'secret_write' | 'purchase' | 'payment_approval' | 'captcha' | 'alert';
4
+ status: 'pending' | 'fulfilled' | 'denied' | 'expired' | 'failed' | 'canceled';
5
+ blocking: boolean;
6
+ title: string;
7
+ summary: string | null;
8
+ created_at: string;
9
+ updated_at: string;
10
+ expires_at: string | null;
11
+ }
12
+ export interface SessionBackendSession {
13
+ id: string;
14
+ status: 'in_progress' | 'waiting_for_user' | 'error' | 'canceled' | 'completed';
15
+ type: 'payment' | 'subscription' | 'cancellation';
16
+ method: 'card' | 'crypto' | 'x402' | null;
17
+ approach: 'browser' | 'api' | null;
18
+ amount_total: number | null;
19
+ currency: string | null;
20
+ merchant_name: string | null;
21
+ description: string | null;
22
+ current_request_id: string | null;
23
+ last_event_seq: number;
24
+ error_code: string | null;
25
+ error_message: string | null;
26
+ context: Record<string, unknown>;
27
+ metadata: Record<string, unknown>;
28
+ created_at: string;
29
+ updated_at: string;
30
+ completed_at: string | null;
31
+ }
32
+ export interface SessionBackendEvent {
33
+ id: string;
34
+ sequence_no: number;
35
+ type: 'state' | 'observe' | 'reflect' | 'action' | 'error';
36
+ actor: string;
37
+ summary: string;
38
+ payload: Record<string, unknown>;
39
+ trace_id: string | null;
40
+ span_id: string | null;
41
+ created_at: string;
42
+ }
43
+ export interface SessionBackendRequest {
44
+ id: string;
45
+ intent_session_id: string;
46
+ sequence_no: number;
47
+ type: 'secret_read' | 'secret_write' | 'purchase' | 'payment_approval' | 'captcha' | 'alert';
48
+ status: 'pending' | 'fulfilled' | 'denied' | 'expired' | 'failed' | 'canceled';
49
+ blocking: boolean;
50
+ title: string;
51
+ summary: string | null;
52
+ payload: Record<string, unknown>;
53
+ response_payload: Record<string, unknown> | null;
54
+ resolution_channel: string | null;
55
+ created_at: string;
56
+ updated_at: string;
57
+ expires_at: string | null;
58
+ resolved_at: string | null;
59
+ delivery_channels: unknown[];
60
+ error_code: string | null;
61
+ error_message: string | null;
62
+ }
63
+ export interface SessionBackendSecretCatalogEntry {
64
+ id: string;
65
+ kind: 'payment_card' | 'login' | 'identity';
66
+ display_name: string;
67
+ description: string | null;
68
+ status: string;
69
+ source: 'database_values' | 'payment_account_provider';
70
+ fields: Array<{
71
+ key: string;
72
+ label: string;
73
+ type: 'text' | 'secret' | 'date' | 'number';
74
+ required: boolean;
75
+ }>;
76
+ applicability: {
77
+ mode: 'global' | 'hosts';
78
+ hosts?: string[];
79
+ };
80
+ metadata: Record<string, unknown>;
81
+ }
82
+ export interface CreateRemoteSessionInput {
83
+ browserSessionId: string;
84
+ description?: string | null;
85
+ merchantName?: string | null;
86
+ page?: {
87
+ ref?: string;
88
+ url?: string;
89
+ title?: string;
90
+ };
91
+ run: {
92
+ id: string;
93
+ trace_id: string;
94
+ started_at: string;
95
+ ended_at?: string;
96
+ source?: 'cli' | 'test' | 'replay';
97
+ status?: 'running' | 'completed' | 'failed' | 'aborted';
98
+ profile?: string;
99
+ site_host?: string;
100
+ protected_run?: boolean;
101
+ };
102
+ step: {
103
+ id: string;
104
+ ordinal: number;
105
+ command: string;
106
+ started_at: string;
107
+ ended_at?: string;
108
+ span_id: string;
109
+ success?: boolean;
110
+ outcome_type?: string;
111
+ message?: string;
112
+ reason?: string;
113
+ page_ref?: string;
114
+ target_ref?: string;
115
+ surface_ref?: string;
116
+ fill_ref?: string;
117
+ before_snapshot_id?: string;
118
+ after_snapshot_id?: string;
119
+ event_count?: number;
120
+ child_span_count?: number;
121
+ protected_step?: boolean;
122
+ };
123
+ telemetry?: {
124
+ root_trace?: unknown;
125
+ step_trace?: unknown;
126
+ };
127
+ context?: Record<string, unknown>;
128
+ metadata?: Record<string, unknown>;
129
+ }
130
+ export interface RemoteSessionEnvelope {
131
+ session: SessionBackendSession;
132
+ current_request: SessionBackendCurrentRequest | null;
133
+ browser_session_id: string | null;
134
+ }
135
+ export interface RemoteSessionEventEnvelope extends RemoteSessionEnvelope {
136
+ event: SessionBackendEvent;
137
+ duplicate: boolean;
138
+ }
139
+ export type CompleteRemoteSessionResponse = RemoteSessionEventEnvelope;
140
+ export interface RemoteSecretRequestEnvelope extends RemoteSessionEnvelope {
141
+ request: SessionBackendRequest;
142
+ reused: boolean;
143
+ duplicate: boolean;
144
+ }
145
+ export interface RemoteSessionSecretRequestEnvelope extends RemoteSessionEnvelope {
146
+ request: SessionBackendRequest;
147
+ }
148
+ export interface ClaimedRemoteSecret {
149
+ values: Record<string, string>;
150
+ source: 'saved_secret' | 'saved_credential' | 'inline_response';
151
+ stored_secret_ref: string | null;
152
+ credential_id: string | null;
153
+ kind: 'login' | 'identity' | 'payment_card' | null;
154
+ }
155
+ export interface ClaimRemoteSecretResponse {
156
+ request_id: string;
157
+ secret: ClaimedRemoteSecret;
158
+ issued_at: string;
159
+ expires_at: string | null;
160
+ }
161
+ export interface CreateRemoteSessionEventInput {
162
+ clientEventId: string;
163
+ sequenceNo: number;
164
+ type: 'state' | 'observe' | 'reflect' | 'action' | 'error';
165
+ command: string;
166
+ status: 'started' | 'completed' | 'blocked' | 'failed';
167
+ summary: string;
168
+ timestamp: string;
169
+ page?: {
170
+ ref?: string;
171
+ url?: string;
172
+ title?: string;
173
+ };
174
+ details?: Record<string, unknown>;
175
+ telemetry?: {
176
+ root_trace?: unknown;
177
+ step_trace?: unknown;
178
+ };
179
+ run?: {
180
+ id: string;
181
+ trace_id: string;
182
+ started_at: string;
183
+ ended_at?: string;
184
+ source?: 'cli' | 'test' | 'replay';
185
+ status?: 'running' | 'completed' | 'failed' | 'aborted';
186
+ profile?: string;
187
+ site_host?: string;
188
+ protected_run?: boolean;
189
+ };
190
+ step?: {
191
+ id: string;
192
+ ordinal: number;
193
+ command: string;
194
+ started_at: string;
195
+ ended_at?: string;
196
+ span_id: string;
197
+ success?: boolean;
198
+ outcome_type?: string;
199
+ message?: string;
200
+ reason?: string;
201
+ page_ref?: string;
202
+ target_ref?: string;
203
+ surface_ref?: string;
204
+ fill_ref?: string;
205
+ before_snapshot_id?: string;
206
+ after_snapshot_id?: string;
207
+ event_count?: number;
208
+ child_span_count?: number;
209
+ protected_step?: boolean;
210
+ };
211
+ }
212
+ export interface CompleteRemoteSessionInput {
213
+ clientCompletionId: string;
214
+ status: 'completed' | 'canceled' | 'error';
215
+ command: string;
216
+ summary: string;
217
+ timestamp: string;
218
+ page?: {
219
+ ref?: string;
220
+ url?: string;
221
+ title?: string;
222
+ };
223
+ details?: Record<string, unknown>;
224
+ telemetry?: {
225
+ root_trace?: unknown;
226
+ step_trace?: unknown;
227
+ };
228
+ run: {
229
+ id: string;
230
+ trace_id: string;
231
+ started_at: string;
232
+ ended_at?: string;
233
+ source?: 'cli' | 'test' | 'replay';
234
+ status: 'completed' | 'failed' | 'aborted';
235
+ profile?: string;
236
+ site_host?: string;
237
+ protected_run?: boolean;
238
+ };
239
+ step?: {
240
+ id: string;
241
+ ordinal: number;
242
+ command: string;
243
+ started_at: string;
244
+ ended_at?: string;
245
+ span_id: string;
246
+ success?: boolean;
247
+ outcome_type?: string;
248
+ message?: string;
249
+ reason?: string;
250
+ page_ref?: string;
251
+ target_ref?: string;
252
+ surface_ref?: string;
253
+ fill_ref?: string;
254
+ before_snapshot_id?: string;
255
+ after_snapshot_id?: string;
256
+ event_count?: number;
257
+ child_span_count?: number;
258
+ protected_step?: boolean;
259
+ };
260
+ }
261
+ export interface CreateRemoteSecretRequestInput {
262
+ clientRequestId: string;
263
+ fillRef: string;
264
+ purpose: string;
265
+ merchantName: string;
266
+ page?: {
267
+ ref?: string;
268
+ url?: string;
269
+ title?: string;
270
+ };
271
+ secretHint: {
272
+ storedSecretRef?: string;
273
+ credentialKey?: string;
274
+ credentialName?: string;
275
+ kind?: 'login' | 'identity' | 'payment_card';
276
+ host?: string;
277
+ scopeRef?: string;
278
+ fields?: Array<{
279
+ key: string;
280
+ label?: string;
281
+ type?: 'text' | 'secret' | 'date' | 'number';
282
+ required?: boolean;
283
+ }>;
284
+ };
285
+ telemetry?: {
286
+ root_trace?: unknown;
287
+ step_trace?: unknown;
288
+ };
289
+ run?: {
290
+ id: string;
291
+ trace_id: string;
292
+ started_at: string;
293
+ ended_at?: string;
294
+ source?: 'cli' | 'test' | 'replay';
295
+ status?: 'running' | 'completed' | 'failed' | 'aborted';
296
+ profile?: string;
297
+ site_host?: string;
298
+ protected_run?: boolean;
299
+ };
300
+ step?: {
301
+ id: string;
302
+ ordinal: number;
303
+ command: string;
304
+ started_at: string;
305
+ ended_at?: string;
306
+ span_id: string;
307
+ success?: boolean;
308
+ outcome_type?: string;
309
+ message?: string;
310
+ reason?: string;
311
+ page_ref?: string;
312
+ target_ref?: string;
313
+ surface_ref?: string;
314
+ fill_ref?: string;
315
+ before_snapshot_id?: string;
316
+ after_snapshot_id?: string;
317
+ event_count?: number;
318
+ child_span_count?: number;
319
+ protected_step?: boolean;
320
+ };
321
+ }
322
+ export declare class AgentpayRequestError extends Error {
323
+ readonly status: number;
324
+ readonly payload: unknown;
325
+ constructor(message: string, options: {
326
+ status: number;
327
+ payload: unknown;
328
+ });
329
+ }
330
+ export declare function createRemoteSession(input: CreateRemoteSessionInput, options?: {
331
+ fetchImpl?: typeof fetch;
332
+ }): Promise<RemoteSessionEnvelope>;
333
+ export declare function getRemoteSession(sessionId: string, options?: {
334
+ fetchImpl?: typeof fetch;
335
+ }): Promise<RemoteSessionEnvelope>;
336
+ export declare function getRemoteSessionSecretCatalog(sessionId: string, host: string, options?: {
337
+ fetchImpl?: typeof fetch;
338
+ }): Promise<SessionBackendSecretCatalogEntry[]>;
339
+ export declare function createRemoteSessionEvent(sessionId: string, input: CreateRemoteSessionEventInput, options?: {
340
+ fetchImpl?: typeof fetch;
341
+ }): Promise<RemoteSessionEventEnvelope>;
342
+ export declare function completeRemoteSession(sessionId: string, input: CompleteRemoteSessionInput, options?: {
343
+ fetchImpl?: typeof fetch;
344
+ }): Promise<CompleteRemoteSessionResponse>;
345
+ export declare function createRemoteSecretRequest(sessionId: string, input: CreateRemoteSecretRequestInput, options?: {
346
+ fetchImpl?: typeof fetch;
347
+ }): Promise<RemoteSecretRequestEnvelope>;
348
+ export declare function getRemoteSecretRequest(sessionId: string, requestId: string, options?: {
349
+ fetchImpl?: typeof fetch;
350
+ }): Promise<RemoteSessionSecretRequestEnvelope>;
351
+ export declare function claimRemoteSecret(sessionId: string, requestId: string, claimId: string, options?: {
352
+ fetchImpl?: typeof fetch;
353
+ }): Promise<ClaimRemoteSecretResponse>;
354
+ //# sourceMappingURL=sessions-backend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions-backend.d.ts","sourceRoot":"","sources":["../src/sessions-backend.ts"],"names":[],"mappings":"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"}