@adcp/client 4.19.0 → 4.21.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 (81) hide show
  1. package/dist/lib/index.d.ts +5 -4
  2. package/dist/lib/index.d.ts.map +1 -1
  3. package/dist/lib/index.js +12 -5
  4. package/dist/lib/index.js.map +1 -1
  5. package/dist/lib/registry/cursor-store.d.ts +19 -0
  6. package/dist/lib/registry/cursor-store.d.ts.map +1 -0
  7. package/dist/lib/registry/cursor-store.js +44 -0
  8. package/dist/lib/registry/cursor-store.js.map +1 -0
  9. package/dist/lib/registry/index.d.ts +99 -4
  10. package/dist/lib/registry/index.d.ts.map +1 -1
  11. package/dist/lib/registry/index.js +281 -3
  12. package/dist/lib/registry/index.js.map +1 -1
  13. package/dist/lib/registry/property-registry.d.ts +57 -0
  14. package/dist/lib/registry/property-registry.d.ts.map +1 -0
  15. package/dist/lib/registry/property-registry.js +92 -0
  16. package/dist/lib/registry/property-registry.js.map +1 -0
  17. package/dist/lib/registry/sync.d.ts +130 -0
  18. package/dist/lib/registry/sync.d.ts.map +1 -0
  19. package/dist/lib/registry/sync.js +359 -0
  20. package/dist/lib/registry/sync.js.map +1 -0
  21. package/dist/lib/registry/types.d.ts +40 -1
  22. package/dist/lib/registry/types.d.ts.map +1 -1
  23. package/dist/lib/registry/types.generated.d.ts +369 -0
  24. package/dist/lib/registry/types.generated.d.ts.map +1 -1
  25. package/dist/lib/registry/types.generated.js +1 -1
  26. package/dist/lib/testing/agent-tester.d.ts +1 -1
  27. package/dist/lib/testing/agent-tester.d.ts.map +1 -1
  28. package/dist/lib/testing/agent-tester.js +10 -1
  29. package/dist/lib/testing/agent-tester.js.map +1 -1
  30. package/dist/lib/testing/client.d.ts.map +1 -1
  31. package/dist/lib/testing/client.js +2 -0
  32. package/dist/lib/testing/client.js.map +1 -1
  33. package/dist/lib/testing/compliance/comply.d.ts.map +1 -1
  34. package/dist/lib/testing/compliance/comply.js +110 -140
  35. package/dist/lib/testing/compliance/comply.js.map +1 -1
  36. package/dist/lib/testing/index.d.ts +1 -1
  37. package/dist/lib/testing/index.d.ts.map +1 -1
  38. package/dist/lib/testing/index.js +4 -1
  39. package/dist/lib/testing/index.js.map +1 -1
  40. package/dist/lib/testing/orchestrator.d.ts.map +1 -1
  41. package/dist/lib/testing/orchestrator.js +3 -0
  42. package/dist/lib/testing/orchestrator.js.map +1 -1
  43. package/dist/lib/testing/scenarios/brand-rights.d.ts +23 -0
  44. package/dist/lib/testing/scenarios/brand-rights.d.ts.map +1 -0
  45. package/dist/lib/testing/scenarios/brand-rights.js +144 -0
  46. package/dist/lib/testing/scenarios/brand-rights.js.map +1 -0
  47. package/dist/lib/testing/scenarios/capabilities.d.ts.map +1 -1
  48. package/dist/lib/testing/scenarios/capabilities.js +11 -2
  49. package/dist/lib/testing/scenarios/capabilities.js.map +1 -1
  50. package/dist/lib/testing/scenarios/governance.d.ts.map +1 -1
  51. package/dist/lib/testing/scenarios/governance.js +5 -0
  52. package/dist/lib/testing/scenarios/governance.js.map +1 -1
  53. package/dist/lib/testing/scenarios/index.d.ts +2 -0
  54. package/dist/lib/testing/scenarios/index.d.ts.map +1 -1
  55. package/dist/lib/testing/scenarios/index.js +10 -2
  56. package/dist/lib/testing/scenarios/index.js.map +1 -1
  57. package/dist/lib/testing/scenarios/media-buy.d.ts.map +1 -1
  58. package/dist/lib/testing/scenarios/media-buy.js +22 -3
  59. package/dist/lib/testing/scenarios/media-buy.js.map +1 -1
  60. package/dist/lib/testing/scenarios/trusted-match.d.ts +22 -0
  61. package/dist/lib/testing/scenarios/trusted-match.d.ts.map +1 -0
  62. package/dist/lib/testing/scenarios/trusted-match.js +128 -0
  63. package/dist/lib/testing/scenarios/trusted-match.js.map +1 -0
  64. package/dist/lib/testing/types.d.ts +2 -1
  65. package/dist/lib/testing/types.d.ts.map +1 -1
  66. package/dist/lib/types/core.generated.d.ts +34 -21
  67. package/dist/lib/types/core.generated.d.ts.map +1 -1
  68. package/dist/lib/types/core.generated.js +1 -1
  69. package/dist/lib/types/schemas.generated.d.ts +801 -624
  70. package/dist/lib/types/schemas.generated.d.ts.map +1 -1
  71. package/dist/lib/types/schemas.generated.js +99 -83
  72. package/dist/lib/types/schemas.generated.js.map +1 -1
  73. package/dist/lib/types/tools.generated.d.ts +100 -46
  74. package/dist/lib/types/tools.generated.d.ts.map +1 -1
  75. package/dist/lib/utils/capabilities.d.ts +4 -1
  76. package/dist/lib/utils/capabilities.d.ts.map +1 -1
  77. package/dist/lib/utils/capabilities.js +25 -1
  78. package/dist/lib/utils/capabilities.js.map +1 -1
  79. package/dist/lib/version.d.ts +3 -3
  80. package/dist/lib/version.js +3 -3
  81. package/package.json +1 -1
@@ -0,0 +1,130 @@
1
+ import { EventEmitter } from 'node:events';
2
+ import type { RegistryClient } from './index';
3
+ import type { CatalogEvent, AgentSearchResult, AuthorizationEntry } from './types.generated';
4
+ import type { CursorStore } from './cursor-store';
5
+ export interface RegistrySyncConfig {
6
+ /** RegistryClient instance to use for API calls. */
7
+ client: RegistryClient;
8
+ /** Polling interval in milliseconds. Default: 30000 (30s). */
9
+ pollIntervalMs?: number;
10
+ /** Choose which indexes to maintain. */
11
+ indexes?: {
12
+ /** Agent inventory profiles. Default: true. */
13
+ agents?: boolean;
14
+ /** Authorization entries (agent→domain mappings). Default: true. */
15
+ authorizations?: boolean;
16
+ };
17
+ /** Optional cursor store for persisting the feed cursor between restarts. */
18
+ cursorStore?: CursorStore;
19
+ /** Called on errors during polling/bootstrap. */
20
+ onError?: (error: Error) => void;
21
+ }
22
+ export type RegistrySyncState = 'idle' | 'bootstrapping' | 'syncing' | 'error';
23
+ export interface RegistrySyncEvents {
24
+ bootstrap: [{
25
+ agentCount: number;
26
+ authorizationCount: number;
27
+ }];
28
+ sync: [{
29
+ cursor: string;
30
+ eventsApplied: number;
31
+ }];
32
+ /** Emitted for each event applied during polling. Not emitted during bootstrap. */
33
+ event: [{
34
+ event: CatalogEvent;
35
+ }];
36
+ error: [{
37
+ error: Error;
38
+ }];
39
+ stateChange: [{
40
+ from: RegistrySyncState;
41
+ to: RegistrySyncState;
42
+ }];
43
+ }
44
+ export interface AgentFilter {
45
+ type?: string;
46
+ channels?: string[];
47
+ markets?: string[];
48
+ categories?: string[];
49
+ property_types?: string[];
50
+ tags?: string[];
51
+ delivery_types?: string[];
52
+ has_tmp?: boolean;
53
+ min_properties?: number;
54
+ }
55
+ /**
56
+ * In-memory replica of the AdCP registry.
57
+ *
58
+ * Bootstraps from the agent search endpoint, then polls the event feed
59
+ * to maintain up-to-date indexes for zero-latency lookups.
60
+ *
61
+ * @example
62
+ * ```ts
63
+ * const client = new RegistryClient({ apiKey: 'sk_...' });
64
+ * const sync = new RegistrySync({ client });
65
+ * await sync.start();
66
+ *
67
+ * // Zero-latency lookups
68
+ * const agent = sync.getAgent('https://ads.example.com');
69
+ * const authorized = sync.isAuthorized('https://ads.example.com', 'publisher.com');
70
+ * const ctv = sync.findAgents({ channels: ['ctv'], markets: ['US'] });
71
+ *
72
+ * sync.on('event', ({ event }) => console.log('registry change:', event.event_type));
73
+ * sync.stop();
74
+ * ```
75
+ */
76
+ export declare class RegistrySync extends EventEmitter<RegistrySyncEvents> {
77
+ private readonly client;
78
+ private readonly pollIntervalMs;
79
+ private readonly indexAgents;
80
+ private readonly indexAuthorizations;
81
+ private readonly errorHandler;
82
+ private readonly cursorStore;
83
+ private _state;
84
+ private cursor;
85
+ private pollTimer;
86
+ private agents;
87
+ private authByDomain;
88
+ private authByAgent;
89
+ constructor(config: RegistrySyncConfig);
90
+ /** Bootstrap from the registry and begin polling the event feed. */
91
+ start(): Promise<void>;
92
+ /** Stop polling. In-memory state is preserved. */
93
+ stop(): void;
94
+ /** Stop, clear all state. Call start() again to re-bootstrap. */
95
+ reset(): Promise<void>;
96
+ /** Get an agent by URL. */
97
+ getAgent(url: string): AgentSearchResult | undefined;
98
+ /** Get all agents in the index. */
99
+ getAgents(): AgentSearchResult[];
100
+ /** Find agents matching a filter. All specified dimensions use AND; values within arrays use OR. */
101
+ findAgents(filter: AgentFilter): AgentSearchResult[];
102
+ /** Get all authorizations for a publisher domain. */
103
+ getAuthorizationsForDomain(domain: string): AuthorizationEntry[];
104
+ /** Get all authorizations for an agent. */
105
+ getAuthorizationsForAgent(agentUrl: string): AuthorizationEntry[];
106
+ /**
107
+ * Check if an agent has any authorization for a publisher domain.
108
+ * Does not evaluate property_id scoping, time bounds, or effective dates.
109
+ * For scoped checks, use getAuthorizationsForDomain() and inspect entries directly.
110
+ */
111
+ isAuthorized(agentUrl: string, domain: string): boolean;
112
+ get state(): RegistrySyncState;
113
+ getCursor(): string | null;
114
+ getStats(): {
115
+ agents: number;
116
+ authorizations: number;
117
+ };
118
+ private bootstrap;
119
+ private schedulePoll;
120
+ private pollLoop;
121
+ private poll;
122
+ /**
123
+ * Drain all available feed pages. Used during bootstrap (does not emit 'event' per event).
124
+ */
125
+ private drainFeed;
126
+ private applyEvent;
127
+ private clearIndexes;
128
+ private setState;
129
+ }
130
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../src/lib/registry/sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,359 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RegistrySync = void 0;
4
+ const node_events_1 = require("node:events");
5
+ const cursor_store_1 = require("./cursor-store");
6
+ // ====== RegistrySync ======
7
+ /**
8
+ * In-memory replica of the AdCP registry.
9
+ *
10
+ * Bootstraps from the agent search endpoint, then polls the event feed
11
+ * to maintain up-to-date indexes for zero-latency lookups.
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * const client = new RegistryClient({ apiKey: 'sk_...' });
16
+ * const sync = new RegistrySync({ client });
17
+ * await sync.start();
18
+ *
19
+ * // Zero-latency lookups
20
+ * const agent = sync.getAgent('https://ads.example.com');
21
+ * const authorized = sync.isAuthorized('https://ads.example.com', 'publisher.com');
22
+ * const ctv = sync.findAgents({ channels: ['ctv'], markets: ['US'] });
23
+ *
24
+ * sync.on('event', ({ event }) => console.log('registry change:', event.event_type));
25
+ * sync.stop();
26
+ * ```
27
+ */
28
+ class RegistrySync extends node_events_1.EventEmitter {
29
+ client;
30
+ pollIntervalMs;
31
+ indexAgents;
32
+ indexAuthorizations;
33
+ errorHandler;
34
+ cursorStore;
35
+ _state = 'idle';
36
+ cursor = null;
37
+ pollTimer = null;
38
+ // Indexes
39
+ agents = new Map();
40
+ authByDomain = new Map();
41
+ authByAgent = new Map();
42
+ constructor(config) {
43
+ super();
44
+ this.client = config.client;
45
+ this.pollIntervalMs = config.pollIntervalMs ?? 30_000;
46
+ this.indexAgents = config.indexes?.agents !== false;
47
+ this.indexAuthorizations = config.indexes?.authorizations !== false;
48
+ this.cursorStore = config.cursorStore ?? new cursor_store_1.InMemoryCursorStore();
49
+ this.errorHandler = config.onError;
50
+ }
51
+ // ====== Lifecycle ======
52
+ /** Bootstrap from the registry and begin polling the event feed. */
53
+ async start() {
54
+ if (this._state === 'syncing' || this._state === 'bootstrapping')
55
+ return;
56
+ await this.bootstrap();
57
+ this.schedulePoll();
58
+ }
59
+ /** Stop polling. In-memory state is preserved. */
60
+ stop() {
61
+ if (this.pollTimer) {
62
+ clearTimeout(this.pollTimer);
63
+ this.pollTimer = null;
64
+ }
65
+ if (this._state === 'syncing') {
66
+ this.setState('idle');
67
+ }
68
+ }
69
+ /** Stop, clear all state. Call start() again to re-bootstrap. */
70
+ async reset() {
71
+ this.stop();
72
+ this.clearIndexes();
73
+ this.cursor = null;
74
+ this.setState('idle');
75
+ }
76
+ // ====== Agent Lookups ======
77
+ /** Get an agent by URL. */
78
+ getAgent(url) {
79
+ return this.agents.get(url);
80
+ }
81
+ /** Get all agents in the index. */
82
+ getAgents() {
83
+ return [...this.agents.values()];
84
+ }
85
+ /** Find agents matching a filter. All specified dimensions use AND; values within arrays use OR. */
86
+ findAgents(filter) {
87
+ return this.getAgents().filter(agent => {
88
+ const p = agent.inventory_profile;
89
+ if (filter.type && agent.type !== filter.type)
90
+ return false;
91
+ if (filter.channels?.length && !filter.channels.some(c => p.channels.includes(c)))
92
+ return false;
93
+ if (filter.markets?.length && !filter.markets.some(m => p.markets.includes(m)))
94
+ return false;
95
+ if (filter.categories?.length && !filter.categories.some(c => p.categories.includes(c)))
96
+ return false;
97
+ if (filter.property_types?.length && !filter.property_types.some(t => p.property_types.includes(t)))
98
+ return false;
99
+ if (filter.tags?.length && !filter.tags.some(t => p.tags.includes(t)))
100
+ return false;
101
+ if (filter.delivery_types?.length && !filter.delivery_types.some(d => p.delivery_types.includes(d)))
102
+ return false;
103
+ if (filter.has_tmp != null && p.has_tmp !== filter.has_tmp)
104
+ return false;
105
+ if (filter.min_properties != null && p.property_count < filter.min_properties)
106
+ return false;
107
+ return true;
108
+ });
109
+ }
110
+ // ====== Authorization Lookups ======
111
+ /** Get all authorizations for a publisher domain. */
112
+ getAuthorizationsForDomain(domain) {
113
+ return this.authByDomain.get(domain) ?? [];
114
+ }
115
+ /** Get all authorizations for an agent. */
116
+ getAuthorizationsForAgent(agentUrl) {
117
+ return this.authByAgent.get(agentUrl) ?? [];
118
+ }
119
+ /**
120
+ * Check if an agent has any authorization for a publisher domain.
121
+ * Does not evaluate property_id scoping, time bounds, or effective dates.
122
+ * For scoped checks, use getAuthorizationsForDomain() and inspect entries directly.
123
+ */
124
+ isAuthorized(agentUrl, domain) {
125
+ const entries = this.authByDomain.get(domain);
126
+ return entries != null && entries.some(e => e.agent_url === agentUrl);
127
+ }
128
+ // ====== State ======
129
+ get state() {
130
+ return this._state;
131
+ }
132
+ getCursor() {
133
+ return this.cursor;
134
+ }
135
+ getStats() {
136
+ let authCount = 0;
137
+ for (const entries of this.authByDomain.values())
138
+ authCount += entries.length;
139
+ return { agents: this.agents.size, authorizations: authCount };
140
+ }
141
+ // ====== Private: Bootstrap ======
142
+ async bootstrap() {
143
+ this.setState('bootstrapping');
144
+ try {
145
+ // Restore cursor from store if available
146
+ const storedCursor = await this.cursorStore.getCursor();
147
+ if (storedCursor) {
148
+ this.cursor = storedCursor;
149
+ }
150
+ // Paginate searchAgents to load all agents
151
+ if (this.indexAgents) {
152
+ let cursor;
153
+ do {
154
+ const query = { limit: 200 };
155
+ if (cursor)
156
+ query.cursor = cursor;
157
+ const res = await this.client.searchAgents(query);
158
+ for (const agent of res.results) {
159
+ this.agents.set(agent.url, agent);
160
+ }
161
+ cursor = res.has_more && res.cursor ? res.cursor : undefined;
162
+ } while (cursor);
163
+ }
164
+ // Get initial feed cursor and apply any events
165
+ await this.drainFeed();
166
+ this.setState('syncing');
167
+ this.emit('bootstrap', {
168
+ agentCount: this.agents.size,
169
+ authorizationCount: this.getStats().authorizations,
170
+ });
171
+ }
172
+ catch (err) {
173
+ this.setState('error');
174
+ const error = err instanceof Error ? err : new Error(String(err));
175
+ this.errorHandler?.(error);
176
+ this.emit('error', { error });
177
+ throw error;
178
+ }
179
+ }
180
+ // ====== Private: Polling ======
181
+ schedulePoll() {
182
+ this.pollTimer = setTimeout(() => this.pollLoop(), this.pollIntervalMs);
183
+ }
184
+ async pollLoop() {
185
+ try {
186
+ await this.poll();
187
+ }
188
+ catch (err) {
189
+ const error = err instanceof Error ? err : new Error(String(err));
190
+ this.emit('error', { error });
191
+ this.errorHandler?.(error);
192
+ }
193
+ // Schedule next poll even after errors (will retry), unless stopped
194
+ if (this._state === 'syncing') {
195
+ this.schedulePoll();
196
+ }
197
+ }
198
+ async poll() {
199
+ let totalEventsApplied = 0;
200
+ let hasMore = true;
201
+ while (hasMore) {
202
+ const feed = await this.client.getFeed({
203
+ cursor: this.cursor ?? undefined,
204
+ limit: 1000,
205
+ });
206
+ if (feed.cursor_expired) {
207
+ // Clear state and re-bootstrap inline; the existing poll loop continues
208
+ this.clearIndexes();
209
+ this.cursor = null;
210
+ await this.bootstrap();
211
+ return;
212
+ }
213
+ for (const event of feed.events) {
214
+ this.applyEvent(event);
215
+ this.emit('event', { event });
216
+ totalEventsApplied++;
217
+ }
218
+ if (feed.cursor) {
219
+ this.cursor = feed.cursor;
220
+ }
221
+ hasMore = feed.has_more && this.cursor != null;
222
+ }
223
+ if (this.cursor) {
224
+ await this.cursorStore.setCursor(this.cursor);
225
+ }
226
+ if (totalEventsApplied > 0) {
227
+ this.emit('sync', { cursor: this.cursor, eventsApplied: totalEventsApplied });
228
+ }
229
+ }
230
+ /**
231
+ * Drain all available feed pages. Used during bootstrap (does not emit 'event' per event).
232
+ */
233
+ async drainFeed() {
234
+ let hasMore = true;
235
+ while (hasMore) {
236
+ const feed = await this.client.getFeed({
237
+ cursor: this.cursor ?? undefined,
238
+ limit: 1000,
239
+ });
240
+ for (const event of feed.events) {
241
+ this.applyEvent(event);
242
+ }
243
+ this.cursor = feed.cursor;
244
+ hasMore = feed.has_more && this.cursor != null;
245
+ }
246
+ if (this.cursor) {
247
+ await this.cursorStore.setCursor(this.cursor);
248
+ }
249
+ }
250
+ // ====== Private: Event Application ======
251
+ applyEvent(event) {
252
+ const payload = event.payload;
253
+ switch (event.event_type) {
254
+ case 'agent.discovered':
255
+ case 'agent.profile_updated': {
256
+ if (!this.indexAgents)
257
+ break;
258
+ const existing = this.agents.get(event.entity_id);
259
+ if (existing && payload.inventory_profile) {
260
+ this.agents.set(event.entity_id, {
261
+ ...existing,
262
+ inventory_profile: payload.inventory_profile,
263
+ });
264
+ }
265
+ else if (!existing) {
266
+ // New agent: use payload data or create stub
267
+ this.agents.set(event.entity_id, {
268
+ url: event.entity_id,
269
+ name: payload.name ?? event.entity_id,
270
+ type: payload.type ?? 'unknown',
271
+ inventory_profile: payload.inventory_profile ?? {
272
+ channels: [],
273
+ property_types: [],
274
+ markets: [],
275
+ categories: [],
276
+ category_taxonomy: 'iab_content_3.0',
277
+ tags: [],
278
+ delivery_types: [],
279
+ property_count: 0,
280
+ publisher_count: 0,
281
+ has_tmp: false,
282
+ },
283
+ match: { score: 0, matched_filters: [] },
284
+ });
285
+ }
286
+ break;
287
+ }
288
+ case 'agent.removed': {
289
+ if (this.indexAgents)
290
+ this.agents.delete(event.entity_id);
291
+ if (this.indexAuthorizations)
292
+ this.authByAgent.delete(event.entity_id);
293
+ break;
294
+ }
295
+ case 'authorization.granted': {
296
+ if (!this.indexAuthorizations)
297
+ break;
298
+ const entry = payload;
299
+ if (!entry.agent_url || !entry.publisher_domain || !entry.authorization_type)
300
+ break;
301
+ const domainEntries = this.authByDomain.get(entry.publisher_domain) ?? [];
302
+ if (!domainEntries.some(e => e.agent_url === entry.agent_url && e.authorization_type === entry.authorization_type)) {
303
+ domainEntries.push(entry);
304
+ this.authByDomain.set(entry.publisher_domain, domainEntries);
305
+ }
306
+ const agentEntries = this.authByAgent.get(entry.agent_url) ?? [];
307
+ if (!agentEntries.some(e => e.publisher_domain === entry.publisher_domain && e.authorization_type === entry.authorization_type)) {
308
+ agentEntries.push(entry);
309
+ this.authByAgent.set(entry.agent_url, agentEntries);
310
+ }
311
+ break;
312
+ }
313
+ case 'authorization.revoked': {
314
+ if (!this.indexAuthorizations)
315
+ break;
316
+ const agentUrl = payload.agent_url;
317
+ const domain = payload.publisher_domain;
318
+ const authType = payload.authorization_type;
319
+ if (!agentUrl || !domain)
320
+ break;
321
+ const domainEntries = this.authByDomain.get(domain);
322
+ if (domainEntries) {
323
+ const filtered = domainEntries.filter(e => !(e.agent_url === agentUrl && (!authType || e.authorization_type === authType)));
324
+ if (filtered.length > 0)
325
+ this.authByDomain.set(domain, filtered);
326
+ else
327
+ this.authByDomain.delete(domain);
328
+ }
329
+ const agentEntries = this.authByAgent.get(agentUrl);
330
+ if (agentEntries) {
331
+ const filtered = agentEntries.filter(e => !(e.publisher_domain === domain && (!authType || e.authorization_type === authType)));
332
+ if (filtered.length > 0)
333
+ this.authByAgent.set(agentUrl, filtered);
334
+ else
335
+ this.authByAgent.delete(agentUrl);
336
+ }
337
+ break;
338
+ }
339
+ // Property and publisher events: no-op for v1 (no property index yet)
340
+ default:
341
+ break;
342
+ }
343
+ }
344
+ // ====== Private: Helpers ======
345
+ clearIndexes() {
346
+ this.agents.clear();
347
+ this.authByDomain.clear();
348
+ this.authByAgent.clear();
349
+ }
350
+ setState(next) {
351
+ const from = this._state;
352
+ if (from === next)
353
+ return;
354
+ this._state = next;
355
+ this.emit('stateChange', { from, to: next });
356
+ }
357
+ }
358
+ exports.RegistrySync = RegistrySync;
359
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/lib/registry/sync.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@
4
4
  * Generated types are in types.generated.ts (from OpenAPI spec).
5
5
  * This file re-exports them with ergonomic names and adds client-specific types.
6
6
  */
7
- export type { ResolvedBrand, LocalizedName, BrandRegistryItem, ResolvedProperty, PropertyIdentifier, PropertyRegistryItem, ValidationResult, RegistryError, PublisherPropertySelector, FederatedAgentWithDetails, AgentHealth, AgentStats, AgentCapabilities, PropertySummary, FederatedPublisher, DomainLookupResult, } from './types.generated';
7
+ export type { ResolvedBrand, LocalizedName, BrandRegistryItem, ResolvedProperty, PropertyIdentifier, PropertyRegistryItem, ValidationResult, RegistryError, PublisherPropertySelector, FederatedAgentWithDetails, AgentHealth, AgentStats, AgentCapabilities, PropertySummary, FederatedPublisher, DomainLookupResult, BrandActivity, PropertyActivity, PolicySummary, Policy, PolicyHistory, CatalogEvent, FeedResponse, AgentInventoryProfile, AgentSearchResult, AgentSearchResponse, CrawlRequestResponse, AuthorizationEntry, } from './types.generated';
8
8
  export type { paths, operations, components } from './types.generated';
9
9
  import type { operations } from './types.generated';
10
10
  /** Request body for POST /api/brands/save */
@@ -23,6 +23,45 @@ export type CreateAdagentsRequest = NonNullable<operations['createAdagents']['re
23
23
  export type ValidateProductAuthorizationRequest = NonNullable<operations['validateProductAuthorization']['requestBody']>['content']['application/json'];
24
24
  /** Request body for POST /api/registry/expand/product-identifiers */
25
25
  export type ExpandProductIdentifiersRequest = NonNullable<operations['expandProductIdentifiers']['requestBody']>['content']['application/json'];
26
+ /** Query parameters for GET /api/registry/feed */
27
+ export type FeedQuery = NonNullable<operations['getRegistryFeed']['parameters']['query']>;
28
+ /** Query parameters for GET /api/registry/agents/search */
29
+ export type AgentSearchQuery = NonNullable<operations['searchAgentProfiles']['parameters']['query']> & {
30
+ /** Agent type filter (creative, signals, sales, governance, si). */
31
+ type?: string;
32
+ /** Sort order. */
33
+ sort?: string;
34
+ };
35
+ /** Request body for POST /api/registry/crawl-request */
36
+ export type CrawlRequest = NonNullable<operations['requestCrawl']['requestBody']>['content']['application/json'];
37
+ /** Query parameters for GET /api/policies/registry */
38
+ export type ListPoliciesQuery = NonNullable<operations['listPolicies']['parameters']['query']>;
39
+ /** Response from GET /api/policies/registry (200) */
40
+ export type ListPoliciesResponse = operations['listPolicies']['responses']['200']['content']['application/json'];
41
+ /** Query parameters for GET /api/policies/resolve */
42
+ export type ResolvePolicyQuery = operations['resolvePolicy']['parameters']['query'];
43
+ /** Response from GET /api/policies/resolve (200) */
44
+ export type ResolvePolicyResponse = operations['resolvePolicy']['responses']['200']['content']['application/json'];
45
+ /** Request body for POST /api/policies/resolve/bulk */
46
+ export type ResolvePoliciesBulkRequest = NonNullable<operations['resolvePoliciesBulk']['requestBody']>['content']['application/json'];
47
+ /** Response from POST /api/policies/resolve/bulk (200) */
48
+ export type ResolvePoliciesBulkResponse = operations['resolvePoliciesBulk']['responses']['200']['content']['application/json'];
49
+ /** Query parameters for GET /api/policies/history */
50
+ export type GetPolicyHistoryQuery = operations['getPolicyHistory']['parameters']['query'];
51
+ /** Response from GET /api/policies/history (200) */
52
+ export type GetPolicyHistoryResponse = operations['getPolicyHistory']['responses']['200']['content']['application/json'];
53
+ /** Request body for POST /api/policies/save */
54
+ export type SavePolicyRequest = NonNullable<operations['savePolicy']['requestBody']>['content']['application/json'];
55
+ /** Response from POST /api/policies/save (200) */
56
+ export type SavePolicyResponse = operations['savePolicy']['responses']['200']['content']['application/json'];
57
+ /** Query parameters for GET /api/brands/history */
58
+ export type GetBrandHistoryQuery = operations['getBrandHistory']['parameters']['query'];
59
+ /** Response from GET /api/brands/history (200) */
60
+ export type GetBrandHistoryResponse = operations['getBrandHistory']['responses']['200']['content']['application/json'];
61
+ /** Query parameters for GET /api/properties/history */
62
+ export type GetPropertyHistoryQuery = operations['getPropertyHistory']['parameters']['query'];
63
+ /** Response from GET /api/properties/history (200) */
64
+ export type GetPropertyHistoryResponse = operations['getPropertyHistory']['responses']['200']['content']['application/json'];
26
65
  /** @deprecated Use ResolvedProperty instead */
27
66
  export type PropertyInfo = import('./types.generated').ResolvedProperty;
28
67
  /** A single company match from a brand search query. */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/registry/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/registry/types.ts"],"names":[],"mappings":"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"}