@jobshimo/browser-link 0.20.0 → 0.22.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 (45) hide show
  1. package/README.md +74 -70
  2. package/dist/bridge/events.d.ts +1 -1
  3. package/dist/bridge/events.js +6 -1
  4. package/dist/bridge/events.js.map +1 -1
  5. package/dist/bridge/ipc-client.d.ts +6 -7
  6. package/dist/bridge/ipc-client.js +4 -3
  7. package/dist/bridge/ipc-client.js.map +1 -1
  8. package/dist/bridge/protocol.d.ts +28 -16
  9. package/dist/bridge/protocol.js +23 -7
  10. package/dist/bridge/protocol.js.map +1 -1
  11. package/dist/bridge/server.d.ts +8 -10
  12. package/dist/bridge/server.js.map +1 -1
  13. package/dist/bridge/ws-bridge.d.ts +53 -18
  14. package/dist/bridge/ws-bridge.js +129 -21
  15. package/dist/bridge/ws-bridge.js.map +1 -1
  16. package/dist/cli.js +62 -2
  17. package/dist/cli.js.map +1 -1
  18. package/dist/commands/config.d.ts +5 -0
  19. package/dist/commands/config.js +62 -8
  20. package/dist/commands/config.js.map +1 -1
  21. package/dist/commands/map.d.ts +2 -0
  22. package/dist/commands/map.js +698 -0
  23. package/dist/commands/map.js.map +1 -0
  24. package/dist/config.d.ts +19 -0
  25. package/dist/config.js.map +1 -1
  26. package/dist/extension/background.js +424 -1
  27. package/dist/extension/background.js.map +1 -1
  28. package/dist/extension/flow-recording-policy.d.ts +47 -0
  29. package/dist/extension/flow-recording-policy.js +54 -0
  30. package/dist/extension/flow-recording-policy.js.map +1 -0
  31. package/dist/extension/inpage/recorder.d.ts +35 -0
  32. package/dist/extension/inpage/recorder.js +333 -0
  33. package/dist/extension/inpage/recorder.js.map +1 -0
  34. package/dist/extension/manifest.json +1 -1
  35. package/dist/extension/popup.html +56 -0
  36. package/dist/extension/popup.js +195 -4
  37. package/dist/extension/popup.js.map +1 -1
  38. package/dist/extension/recording.d.ts +158 -0
  39. package/dist/extension/recording.js +214 -0
  40. package/dist/extension/recording.js.map +1 -0
  41. package/dist/map/queries.d.ts +107 -0
  42. package/dist/map/queries.js +174 -0
  43. package/dist/map/queries.js.map +1 -1
  44. package/dist/messages.d.ts +53 -12
  45. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"popup.js","sourceRoot":"","sources":["../src/popup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"popup.js","sourceRoot":"","sources":["../src/popup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,158 @@
1
+ /**
2
+ * Pure, chrome.*-free logic for turning captured in-page recorder events
3
+ * (see `inpage/recorder.ts`) into `browser.flow`-grammar steps (see
4
+ * `flow.ts`'s `FlowStep`), enforcing the 20-step cap, and building the
5
+ * navigation `wait_for` hint. background.ts owns the CDP binding, the
6
+ * `chrome.tabs.onUpdated` navigation signal, and the actual step array for
7
+ * an in-progress recording; every DECISION about what that array should
8
+ * contain next lives here, unit-tested without a real browser tab — same
9
+ * separation `idle-policy.ts` and `settle.ts` already established.
10
+ *
11
+ * PRIVACY NOTE: `toFlowStep` is the ONLY place a `type` step's `text`
12
+ * field is ever set, and it is ALWAYS the constant `TEXT_PLACEHOLDER`
13
+ * (`"<TEXT>"`) — there is no code path here, or in `inpage/recorder.ts`,
14
+ * that has access to a field's real value in the first place.
15
+ */
16
+ import type { FlowStep } from './flow.js';
17
+ /** Mirrors `MAX_FLOW_STEPS` in flow.ts / the server's `browser.flow` schema
18
+ * — a recording can never produce more steps than a flow recipe can hold. */
19
+ export declare const MAX_RECORDING_STEPS = 20;
20
+ /** The ONLY string ever used for a recorded `type` step's `text` field.
21
+ * See the module doc — recorder.ts never transmits the real value, so this
22
+ * constant is never substituting anything sensitive; it exists purely so
23
+ * the recipe is immediately recognizable as needing a real value filled in
24
+ * before replay (same placeholder convention `browser.map.save` already
25
+ * documents for hand-written flow recipes). */
26
+ export declare const TEXT_PLACEHOLDER = "<TEXT>";
27
+ /** The default navigation-hint step suggested after a step that caused the
28
+ * tab to navigate. `expression` is a valid `wait_for` mode per the
29
+ * `browser.flow` schema (`oneOf: [selector, expression, network_url]`) —
30
+ * kept intentionally simple (readyState) rather than guessing at a
31
+ * selector on a document the recorder has not seen yet. Rendered by the
32
+ * popup as an EDITABLE suggestion, not a fixed fact — the user (or a later
33
+ * agent editing the saved recipe) may replace it with a more specific
34
+ * selector-based wait. */
35
+ export declare function buildNavigationWaitForStep(): FlowStep;
36
+ /** Raw payload shapes emitted by `inpage/recorder.ts` over the CDP
37
+ * binding — one JSON string per call. Mirrors the payload shapes
38
+ * documented in recorder.ts's module doc (minus the transport-level
39
+ * `nonce`, which `parseRecordedPayload` consumes and strips). */
40
+ export type RecordedPayload = {
41
+ kind: 'click';
42
+ selector: string;
43
+ ambiguous?: boolean;
44
+ } | {
45
+ kind: 'type';
46
+ selector: string;
47
+ ambiguous?: boolean;
48
+ } | {
49
+ kind: 'press';
50
+ key: string;
51
+ };
52
+ /** Fresh per-recording-session identifiers (see recorder.ts's THREAT MODEL
53
+ * doc). The three global NAMES (binding, active-flag, stop-fn) are
54
+ * INDEPENDENT random values with no shared prefix OR suffix — so a page
55
+ * cannot cheaply enumerate `Object.getOwnPropertyNames(window)` for a
56
+ * predictable pattern (`startsWith('__blRec_')`, `endsWith('_active')`, …)
57
+ * to detect that recording is active; every recorder global is
58
+ * indistinguishable from an ordinary random page global. The `nonce` is the
59
+ * shared secret that authenticates every payload. All are generated from
60
+ * `crypto.randomUUID()` — available in the MV3 service worker, the popup,
61
+ * and every test environment this repo targets (Node >= 19). A leading
62
+ * letter is prepended so each name is a syntactically valid identifier
63
+ * (the recorder accesses every global via bracket notation, so this is
64
+ * belt-and-braces, not strictly required). */
65
+ export interface RecordingSession {
66
+ bindingName: string;
67
+ activeFlag: string;
68
+ stopFn: string;
69
+ nonce: string;
70
+ }
71
+ export declare function generateRecordingSession(): RecordingSession;
72
+ /** Upper bound on a recorded selector's length. genSelectorInfo's worst
73
+ * case (a fully-qualified 32-part structural path) sits far below this;
74
+ * anything longer is not a selector the recorder produced. */
75
+ export declare const MAX_RECORDED_SELECTOR_LENGTH = 1000;
76
+ /** The ONLY keys the recorder ever emits as a `press` payload — the
77
+ * allowlist `parseRecordedPayload` enforces. Deliberately NOT the full set
78
+ * `browser.press` accepts: recorder-originated steps are validated MORE
79
+ * strictly than agent-authored ones, because the binding channel they
80
+ * arrive over is callable by page scripts (see recorder.ts's THREAT MODEL
81
+ * doc). Kept in sync by hand with recorder.ts's SPECIAL_KEYS + Enter. */
82
+ export declare const RECORDED_PRESS_KEYS: ReadonlySet<string>;
83
+ /**
84
+ * Parse + validate one `Runtime.bindingCalled` payload string against the
85
+ * ACTIVE session's nonce. Returns `null` on anything malformed — and the
86
+ * bar here is deliberately HIGHER than the generic `validateFlowSteps`,
87
+ * because the CDP binding is callable by any script running in the target
88
+ * page (see recorder.ts's THREAT MODEL doc), not just the recorder:
89
+ *
90
+ * - the payload's `nonce` must equal `expectedNonce` (the per-session
91
+ * secret only the injected recorder knows) — a blind page-script call
92
+ * fails HERE and records nothing;
93
+ * - `selector` is length-capped and rejected on control characters, so
94
+ * the channel cannot smuggle arbitrary blobs (e.g. a cookie string
95
+ * disguised as a selector) into the map DB;
96
+ * - `key` must be on the exact allowlist of keys the recorder emits.
97
+ */
98
+ export declare function parseRecordedPayload(raw: string, expectedNonce: string): RecordedPayload | null;
99
+ /**
100
+ * Convert one captured payload into its `browser.flow`-grammar step. The
101
+ * `type` branch is the privacy boundary described in the module doc — the
102
+ * placeholder is a constant, never derived from anything the payload
103
+ * carries (the payload has no field capable of carrying a real value in
104
+ * the first place).
105
+ *
106
+ * The payload's `ambiguous` flag is deliberately NOT embedded in the step
107
+ * itself: `browser.flow`'s JSON schema sets `additionalProperties: false`
108
+ * on every step body, so an extra key would make the recipe fail schema
109
+ * validation at REPLAY time. Instead, background.ts tracks which step
110
+ * indices were ambiguous (`RecordingState.ambiguousStepIndices`), the
111
+ * popup surfaces a per-step warning in the review list, and
112
+ * `buildAmbiguousNote` below folds the same information into the saved
113
+ * recipe's description — the computed safety signal is surfaced, never
114
+ * silently dropped.
115
+ */
116
+ export declare function toFlowStep(payload: RecordedPayload): FlowStep;
117
+ /**
118
+ * Human-readable caution for a recipe whose recorded selectors could not
119
+ * be made unique across the page's deep search scope (see
120
+ * `genSelectorInfo`'s `ambiguous` flag). `indices` are 0-based step
121
+ * positions; the note renders them 1-based to match the popup's numbered
122
+ * review list. Returns `null` when nothing was ambiguous, so callers can
123
+ * skip touching the description entirely in the common case.
124
+ */
125
+ export declare function buildAmbiguousNote(indices: readonly number[]): string | null;
126
+ /** Result of appending a step to an in-progress recording. `capped: true`
127
+ * means the 20-step ceiling was already reached BEFORE this call — the
128
+ * step was NOT appended, and background.ts should auto-stop the
129
+ * recording and surface the cap notice to the popup. */
130
+ export interface AppendResult {
131
+ steps: FlowStep[];
132
+ capped: boolean;
133
+ }
134
+ /** Append one already-converted `FlowStep` to a recording's step list,
135
+ * enforcing `MAX_RECORDING_STEPS`. Pure — returns a NEW array, never
136
+ * mutates `steps`, so background.ts can keep using the previous array if
137
+ * `capped` comes back true. */
138
+ export declare function appendRecordingStep(steps: readonly FlowStep[], step: FlowStep): AppendResult;
139
+ /**
140
+ * Decide whether a newly-observed tab URL represents a navigation that
141
+ * happened WHILE recording (vs. e.g. a same-document hash change or a
142
+ * redundant `chrome.tabs.onUpdated` "complete" event for the URL already
143
+ * being recorded). Pure string comparison — background.ts is responsible
144
+ * for tracking `lastRecordedUrl` and calling this on every "complete"
145
+ * update for the recording tab.
146
+ *
147
+ * LIMITATION (documented in the README): the caller drives this off
148
+ * `chrome.tabs.onUpdated`'s "complete" status, which does NOT fire for
149
+ * single-page-app route changes done purely via the History API
150
+ * (`pushState`/`replaceState`, no document load). Those transitions get no
151
+ * automatic `wait_for` hint step; a user editing the recipe adds one by
152
+ * hand if replay needs to wait for the SPA route to settle.
153
+ */
154
+ export declare function isNavigationForRecording(lastRecordedUrl: string, currentUrl: string): boolean;
155
+ /** One-line human-readable description of a `FlowStep`, for the popup's
156
+ * step review list. Deliberately terse — the popup shows these in a
157
+ * scrollable `<ol>` alongside the step count. */
158
+ export declare function describeFlowStep(step: FlowStep): string;
@@ -0,0 +1,214 @@
1
+ /** Mirrors `MAX_FLOW_STEPS` in flow.ts / the server's `browser.flow` schema
2
+ * — a recording can never produce more steps than a flow recipe can hold. */
3
+ export const MAX_RECORDING_STEPS = 20;
4
+ /** The ONLY string ever used for a recorded `type` step's `text` field.
5
+ * See the module doc — recorder.ts never transmits the real value, so this
6
+ * constant is never substituting anything sensitive; it exists purely so
7
+ * the recipe is immediately recognizable as needing a real value filled in
8
+ * before replay (same placeholder convention `browser.map.save` already
9
+ * documents for hand-written flow recipes). */
10
+ export const TEXT_PLACEHOLDER = '<TEXT>';
11
+ /** The default navigation-hint step suggested after a step that caused the
12
+ * tab to navigate. `expression` is a valid `wait_for` mode per the
13
+ * `browser.flow` schema (`oneOf: [selector, expression, network_url]`) —
14
+ * kept intentionally simple (readyState) rather than guessing at a
15
+ * selector on a document the recorder has not seen yet. Rendered by the
16
+ * popup as an EDITABLE suggestion, not a fixed fact — the user (or a later
17
+ * agent editing the saved recipe) may replace it with a more specific
18
+ * selector-based wait. */
19
+ export function buildNavigationWaitForStep() {
20
+ return { wait_for: { expression: "document.readyState === 'complete'" } };
21
+ }
22
+ export function generateRecordingSession() {
23
+ // A fresh bare random identifier per call. 32 hex chars from randomUUID,
24
+ // with the FIRST char remapped to a letter whose value still varies with
25
+ // the random input (hex letters a-f pass through; digits 0-9 map to g-p).
26
+ // Result: a valid identifier with NO fixed, shared, guessable prefix or
27
+ // suffix across sessions — nothing a page can pattern-match on.
28
+ const rand = () => {
29
+ const hex = crypto.randomUUID().replace(/-/g, '');
30
+ const first = hex[0];
31
+ const firstLetter = /[0-9]/.test(first)
32
+ ? String.fromCharCode('g'.charCodeAt(0) + Number(first))
33
+ : first;
34
+ return firstLetter + hex.slice(1);
35
+ };
36
+ return { bindingName: rand(), activeFlag: rand(), stopFn: rand(), nonce: rand() };
37
+ }
38
+ /** Upper bound on a recorded selector's length. genSelectorInfo's worst
39
+ * case (a fully-qualified 32-part structural path) sits far below this;
40
+ * anything longer is not a selector the recorder produced. */
41
+ export const MAX_RECORDED_SELECTOR_LENGTH = 1000;
42
+ /** The ONLY keys the recorder ever emits as a `press` payload — the
43
+ * allowlist `parseRecordedPayload` enforces. Deliberately NOT the full set
44
+ * `browser.press` accepts: recorder-originated steps are validated MORE
45
+ * strictly than agent-authored ones, because the binding channel they
46
+ * arrive over is callable by page scripts (see recorder.ts's THREAT MODEL
47
+ * doc). Kept in sync by hand with recorder.ts's SPECIAL_KEYS + Enter. */
48
+ export const RECORDED_PRESS_KEYS = new Set([
49
+ 'Enter',
50
+ 'Escape',
51
+ 'Tab',
52
+ 'ArrowUp',
53
+ 'ArrowDown',
54
+ 'ArrowLeft',
55
+ 'ArrowRight',
56
+ ]);
57
+ /**
58
+ * Characters no legitimate CSS selector generated by genSelectorInfo can
59
+ * contain: C0 + DEL + C1 controls, ZWSP, line/paragraph separators, the
60
+ * legacy bidi embedding/override controls (LRE..RLO), WORD JOINER, the
61
+ * modern bidi isolate block (LRI..PDI), and BOM. Deliberately does NOT
62
+ * block ZWJ (U+200D — present in every multi-codepoint emoji sequence) or
63
+ * LRM/RLM (U+200E/U+200F — embedded by RTL-aware sites): genSelectorInfo's
64
+ * aria-label branch inlines raw attribute text, so a legit label carrying
65
+ * an emoji or directional mark must still parse. The nonce remains the
66
+ * real gate; this is defense in depth against a selector-shaped smuggling
67
+ * attempt using genuinely invisible / spoofing characters.
68
+ */
69
+ /* eslint-disable no-control-regex -- intentionally matches control chars */
70
+ const CONTROL_CHARS = /[\u0000-\u001F\u007F-\u009F\u200B\u2028\u2029\u202A-\u202E\u2060\u2066-\u2069\uFEFF]/;
71
+ /* eslint-enable no-control-regex */
72
+ /**
73
+ * Parse + validate one `Runtime.bindingCalled` payload string against the
74
+ * ACTIVE session's nonce. Returns `null` on anything malformed — and the
75
+ * bar here is deliberately HIGHER than the generic `validateFlowSteps`,
76
+ * because the CDP binding is callable by any script running in the target
77
+ * page (see recorder.ts's THREAT MODEL doc), not just the recorder:
78
+ *
79
+ * - the payload's `nonce` must equal `expectedNonce` (the per-session
80
+ * secret only the injected recorder knows) — a blind page-script call
81
+ * fails HERE and records nothing;
82
+ * - `selector` is length-capped and rejected on control characters, so
83
+ * the channel cannot smuggle arbitrary blobs (e.g. a cookie string
84
+ * disguised as a selector) into the map DB;
85
+ * - `key` must be on the exact allowlist of keys the recorder emits.
86
+ */
87
+ export function parseRecordedPayload(raw, expectedNonce) {
88
+ let obj;
89
+ try {
90
+ obj = JSON.parse(raw);
91
+ }
92
+ catch {
93
+ return null;
94
+ }
95
+ if (!obj || typeof obj !== 'object')
96
+ return null;
97
+ const o = obj;
98
+ if (typeof o.nonce !== 'string' || o.nonce !== expectedNonce)
99
+ return null;
100
+ if (o.kind === 'click' || o.kind === 'type') {
101
+ if (typeof o.selector !== 'string' || o.selector.length === 0)
102
+ return null;
103
+ if (o.selector.length > MAX_RECORDED_SELECTOR_LENGTH)
104
+ return null;
105
+ if (CONTROL_CHARS.test(o.selector))
106
+ return null;
107
+ const ambiguous = o.ambiguous === true;
108
+ return ambiguous
109
+ ? { kind: o.kind, selector: o.selector, ambiguous: true }
110
+ : { kind: o.kind, selector: o.selector };
111
+ }
112
+ if (o.kind === 'press') {
113
+ if (typeof o.key !== 'string' || !RECORDED_PRESS_KEYS.has(o.key))
114
+ return null;
115
+ return { kind: 'press', key: o.key };
116
+ }
117
+ return null;
118
+ }
119
+ /**
120
+ * Convert one captured payload into its `browser.flow`-grammar step. The
121
+ * `type` branch is the privacy boundary described in the module doc — the
122
+ * placeholder is a constant, never derived from anything the payload
123
+ * carries (the payload has no field capable of carrying a real value in
124
+ * the first place).
125
+ *
126
+ * The payload's `ambiguous` flag is deliberately NOT embedded in the step
127
+ * itself: `browser.flow`'s JSON schema sets `additionalProperties: false`
128
+ * on every step body, so an extra key would make the recipe fail schema
129
+ * validation at REPLAY time. Instead, background.ts tracks which step
130
+ * indices were ambiguous (`RecordingState.ambiguousStepIndices`), the
131
+ * popup surfaces a per-step warning in the review list, and
132
+ * `buildAmbiguousNote` below folds the same information into the saved
133
+ * recipe's description — the computed safety signal is surfaced, never
134
+ * silently dropped.
135
+ */
136
+ export function toFlowStep(payload) {
137
+ switch (payload.kind) {
138
+ case 'click':
139
+ return { click: { selector: payload.selector } };
140
+ case 'type':
141
+ return { type: { selector: payload.selector, text: TEXT_PLACEHOLDER } };
142
+ case 'press':
143
+ return { press: { key: payload.key } };
144
+ }
145
+ }
146
+ /**
147
+ * Human-readable caution for a recipe whose recorded selectors could not
148
+ * be made unique across the page's deep search scope (see
149
+ * `genSelectorInfo`'s `ambiguous` flag). `indices` are 0-based step
150
+ * positions; the note renders them 1-based to match the popup's numbered
151
+ * review list. Returns `null` when nothing was ambiguous, so callers can
152
+ * skip touching the description entirely in the common case.
153
+ */
154
+ export function buildAmbiguousNote(indices) {
155
+ if (indices.length === 0)
156
+ return null;
157
+ const human = indices.map((i) => i + 1).join(', ');
158
+ const plural = indices.length === 1 ? 'Step' : 'Steps';
159
+ return (`${plural} ${human}: selector may match multiple elements ` +
160
+ `(resolves first-match-wins) — verify before replaying.`);
161
+ }
162
+ /** Append one already-converted `FlowStep` to a recording's step list,
163
+ * enforcing `MAX_RECORDING_STEPS`. Pure — returns a NEW array, never
164
+ * mutates `steps`, so background.ts can keep using the previous array if
165
+ * `capped` comes back true. */
166
+ export function appendRecordingStep(steps, step) {
167
+ if (steps.length >= MAX_RECORDING_STEPS) {
168
+ return { steps: [...steps], capped: true };
169
+ }
170
+ return { steps: [...steps, step], capped: false };
171
+ }
172
+ /**
173
+ * Decide whether a newly-observed tab URL represents a navigation that
174
+ * happened WHILE recording (vs. e.g. a same-document hash change or a
175
+ * redundant `chrome.tabs.onUpdated` "complete" event for the URL already
176
+ * being recorded). Pure string comparison — background.ts is responsible
177
+ * for tracking `lastRecordedUrl` and calling this on every "complete"
178
+ * update for the recording tab.
179
+ *
180
+ * LIMITATION (documented in the README): the caller drives this off
181
+ * `chrome.tabs.onUpdated`'s "complete" status, which does NOT fire for
182
+ * single-page-app route changes done purely via the History API
183
+ * (`pushState`/`replaceState`, no document load). Those transitions get no
184
+ * automatic `wait_for` hint step; a user editing the recipe adds one by
185
+ * hand if replay needs to wait for the SPA route to settle.
186
+ */
187
+ export function isNavigationForRecording(lastRecordedUrl, currentUrl) {
188
+ return currentUrl.length > 0 && currentUrl !== lastRecordedUrl;
189
+ }
190
+ /** One-line human-readable description of a `FlowStep`, for the popup's
191
+ * step review list. Deliberately terse — the popup shows these in a
192
+ * scrollable `<ol>` alongside the step count. */
193
+ export function describeFlowStep(step) {
194
+ if ('click' in step)
195
+ return `Click ${step.click.selector ?? '(implicit target)'}`;
196
+ if ('type' in step)
197
+ return `Type into ${step.type.selector ?? '(focused field)'}`;
198
+ if ('press' in step)
199
+ return `Press ${step.press.key}`;
200
+ if ('wait_for' in step) {
201
+ const w = step.wait_for;
202
+ if (w.selector)
203
+ return `Wait for ${w.selector}`;
204
+ if (w.expression)
205
+ return `Wait for ${w.expression}`;
206
+ if (w.network_url)
207
+ return `Wait for network: ${w.network_url}`;
208
+ return 'Wait';
209
+ }
210
+ if ('find' in step)
211
+ return `Find "${step.find.text}"`;
212
+ return 'Unknown step';
213
+ }
214
+ //# sourceMappingURL=recording.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recording.js","sourceRoot":"","sources":["../src/recording.ts"],"names":[],"mappings":"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"}
@@ -42,6 +42,34 @@ export declare function saveEntry(input: SaveEntryInput): {
42
42
  app: AppRow;
43
43
  entry: EntryRow;
44
44
  };
45
+ export interface RestoreEntryInput {
46
+ origin: string;
47
+ app_key?: string | null;
48
+ title?: string | null;
49
+ url_pattern: string;
50
+ kind: EntryKind;
51
+ purpose: string;
52
+ payload: unknown;
53
+ notes?: string | null;
54
+ verified_at?: string | null;
55
+ failed_at?: string | null;
56
+ }
57
+ /**
58
+ * Restore-only counterpart to `saveEntry`, used by `browser-link map
59
+ * import`. `saveEntry` models "the agent just successfully executed
60
+ * this": it stamps `verified_at = now` and clears `failed_at` — the right
61
+ * semantics for a live save, and the WRONG ones for a backup restore,
62
+ * where re-stamping would silently "heal" a selector the map knew to be
63
+ * broken. This writes `verified_at`/`failed_at`/`notes` exactly as given
64
+ * (including null), preserving the entry's track record through an
65
+ * export → import round trip. Same upsert key as `saveEntry`
66
+ * ((app, url_pattern, kind, purpose)); the agent-facing
67
+ * `browser.map.save` never calls this.
68
+ */
69
+ export declare function restoreEntry(input: RestoreEntryInput): {
70
+ app: AppRow;
71
+ entry: EntryRow;
72
+ };
45
73
  export interface RecallInput {
46
74
  origin: string;
47
75
  app_key?: string | null;
@@ -71,6 +99,59 @@ export interface ForgetResult {
71
99
  export declare function forget(input: ForgetInput): ForgetResult;
72
100
  export declare function renameApp(app_id: number, new_app_key: string): AppRow | null;
73
101
  export declare function listApps(): AppRow[];
102
+ export interface AppSummary extends AppRow {
103
+ entries: number;
104
+ flows: number;
105
+ }
106
+ /**
107
+ * Every app with its entry and flow counts, most-recently-seen first.
108
+ * Powers `browser-link map ls` — `listApps()` alone does not carry counts,
109
+ * and the CLI is the only caller that needs them (the MCP-facing
110
+ * `browser.map.apps` tool intentionally stays lean). Counts are computed
111
+ * with correlated subqueries rather than a JOIN + GROUP BY so an app with
112
+ * zero entries or zero flows still gets a row (a JOIN would need two LEFT
113
+ * JOINs to avoid multiplying rows across both tables).
114
+ */
115
+ export declare function listAppsWithCounts(): AppSummary[];
116
+ /**
117
+ * Every app matching an identifier, most-recently-seen first — by app_key
118
+ * (exact match) first, falling back to origin (canonicalized, same rule
119
+ * every other write/lookup path uses) when no app_key matches. app_key
120
+ * uniqueness is per-origin, so the same key CAN match apps on several
121
+ * origins; a caller about to DELETE something must check `length > 1`
122
+ * and confirm with the user rather than silently trusting position 0
123
+ * (see `browser-link map forget --flow`). Read-only callers can take
124
+ * position 0 directly — that is exactly what `findApp` does.
125
+ */
126
+ export declare function findAppCandidates(identifier: string): AppRow[];
127
+ /**
128
+ * Resolve one app by app_key (exact match; most-recently-seen wins if the
129
+ * same key was used across more than one origin) OR by origin
130
+ * (canonicalized, same rule every other write/lookup path uses). Backs
131
+ * `browser-link map show`/`export <app>`, where a human names one app with
132
+ * whichever identifier they remember. Returns `null` — never throws — so
133
+ * callers can produce their own "not found, did you mean…" message with
134
+ * the full app_key list from `listApps()`. Destructive callers must use
135
+ * `findAppCandidates` instead, so an ambiguous identifier is detected
136
+ * BEFORE anything is deleted.
137
+ */
138
+ export declare function findApp(identifier: string): AppRow | null;
139
+ /**
140
+ * Exact (origin, app_key) lookup — the same identity `apps`' UNIQUE
141
+ * constraint (and `upsertApp`) matches on. Used by `browser-link map
142
+ * import --replace` to find the existing app to wipe before writing the
143
+ * imported data fresh; unlike `findApp`, this never falls back to a
144
+ * fuzzier match — replace must target the exact app the export file
145
+ * describes, not a same-named app_key on a different origin.
146
+ */
147
+ export declare function findAppByOriginAndKey(origin: string, app_key: string): AppRow | null;
148
+ /**
149
+ * Every entry saved for an app, regardless of url_pattern. Unlike
150
+ * `recall()`, this is not origin/url-scoped and — like `getMapHint` —
151
+ * deliberately does NOT touch `last_seen_at`: a CLI read (`map show`,
152
+ * `map export`) is passive and must not affect map freshness.
153
+ */
154
+ export declare function listEntries(app_id: number): EntryRow[];
74
155
  export interface MapHint {
75
156
  app_key: string;
76
157
  entries: number;
@@ -118,5 +199,31 @@ export declare function saveFlow(input: SaveFlowInput): {
118
199
  app: AppRow;
119
200
  flow: FlowRow;
120
201
  };
202
+ export interface RestoreFlowInput extends SaveFlowInput {
203
+ use_count?: number;
204
+ }
205
+ /**
206
+ * Restore-only counterpart to `saveFlow`, used by `browser-link map
207
+ * import`. `saveFlow` always inserts with `use_count = 0` — right for a
208
+ * brand-new recipe, wrong for a backup restore, where it would erase the
209
+ * flow's track record. On insert, the imported `use_count` is written
210
+ * as-is; on update (merge into an app that already has this flow name),
211
+ * the LARGER of the existing and imported counts wins, so a merge can
212
+ * never LOWER a locally-earned track record. Only a non-negative integer
213
+ * is accepted — anything else falls back to 0 rather than poisoning the
214
+ * column. The agent-facing `browser.map.save` never calls this.
215
+ */
216
+ export declare function restoreFlow(input: RestoreFlowInput): {
217
+ app: AppRow;
218
+ flow: FlowRow;
219
+ };
121
220
  /** Every flow recipe saved for an app, alphabetical by name. */
122
221
  export declare function listFlows(app_id: number): FlowRow[];
222
+ /**
223
+ * Delete a single named flow recipe, leaving the app and its entries
224
+ * untouched. Backs `browser-link map forget <app> --flow <name>` — the
225
+ * single-flow counterpart to `forget()`'s app_id/entry_id deletion, which
226
+ * has no notion of a flow name. Returns whether a row was actually
227
+ * deleted, so the caller can tell "deleted" from "no such flow".
228
+ */
229
+ export declare function deleteFlow(app_id: number, name: string): boolean;