@nordsym/apiclaw 1.5.8 → 1.5.10

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 (80) hide show
  1. package/CHANGELOG-WHITELIST-V2.md +269 -0
  2. package/HIVR-INTEGRATION.md +281 -0
  3. package/HIVR-WHITELIST-STATUS.md +205 -0
  4. package/HIVR-WHITELIST.md +148 -0
  5. package/HTTP-API.md +306 -0
  6. package/WHITELIST-ARCHITECTURE.md +379 -0
  7. package/api/discover.ts +71 -0
  8. package/api/health.ts +20 -0
  9. package/convex/http.d.ts.map +1 -1
  10. package/convex/http.js +8 -0
  11. package/convex/http.js.map +1 -1
  12. package/convex/http.ts +8 -0
  13. package/dist/access-control.d.ts +45 -0
  14. package/dist/access-control.d.ts.map +1 -0
  15. package/dist/access-control.js +142 -0
  16. package/dist/access-control.js.map +1 -0
  17. package/dist/analytics.d.ts +4 -0
  18. package/dist/analytics.d.ts.map +1 -1
  19. package/dist/analytics.js +1 -0
  20. package/dist/analytics.js.map +1 -1
  21. package/dist/bin-http.d.ts +7 -0
  22. package/dist/bin-http.d.ts.map +1 -0
  23. package/dist/bin-http.js +43 -0
  24. package/dist/bin-http.js.map +1 -0
  25. package/dist/credentials.d.ts.map +1 -1
  26. package/dist/credentials.js +20 -0
  27. package/dist/credentials.js.map +1 -1
  28. package/dist/execute.d.ts.map +1 -1
  29. package/dist/execute.js +245 -0
  30. package/dist/execute.js.map +1 -1
  31. package/dist/hivr-whitelist.d.ts +18 -0
  32. package/dist/hivr-whitelist.d.ts.map +1 -0
  33. package/dist/hivr-whitelist.js +95 -0
  34. package/dist/hivr-whitelist.js.map +1 -0
  35. package/dist/http-api.d.ts +16 -0
  36. package/dist/http-api.d.ts.map +1 -0
  37. package/dist/http-api.js +253 -0
  38. package/dist/http-api.js.map +1 -0
  39. package/dist/http-server-minimal.d.ts +7 -0
  40. package/dist/http-server-minimal.d.ts.map +1 -0
  41. package/dist/http-server-minimal.js +126 -0
  42. package/dist/http-server-minimal.js.map +1 -0
  43. package/dist/product-whitelist.d.ts +37 -0
  44. package/dist/product-whitelist.d.ts.map +1 -0
  45. package/dist/product-whitelist.js +203 -0
  46. package/dist/product-whitelist.js.map +1 -0
  47. package/dist/proxy.d.ts.map +1 -1
  48. package/dist/proxy.js +1 -1
  49. package/dist/proxy.js.map +1 -1
  50. package/landing/next-env.d.ts +1 -0
  51. package/landing/pages/api/discover.ts +43 -0
  52. package/landing/pages/api/health.ts +20 -0
  53. package/landing/src/app/auth/verify/page.tsx +6 -0
  54. package/landing/src/app/dashboard/verify/page.tsx +6 -0
  55. package/landing/src/app/join/page.tsx +6 -0
  56. package/landing/src/app/layout.tsx +5 -5
  57. package/landing/src/app/mou/[partnerId]/page.tsx +6 -0
  58. package/landing/src/app/providers/dashboard/[apiId]/actions/[actionId]/edit/page.tsx +6 -0
  59. package/landing/src/app/providers/dashboard/[apiId]/actions/new/page.tsx +5 -0
  60. package/landing/src/app/providers/dashboard/[apiId]/actions/page.tsx +5 -0
  61. package/landing/src/app/providers/dashboard/[apiId]/direct-call/page.tsx +5 -0
  62. package/landing/src/app/providers/dashboard/[apiId]/page.tsx +5 -0
  63. package/landing/src/app/providers/dashboard/[apiId]/test/page.tsx +5 -0
  64. package/landing/src/app/providers/dashboard/layout.tsx +6 -6
  65. package/landing/src/app/providers/dashboard/verify/page.tsx +6 -0
  66. package/landing/src/app/upgrade/page.tsx +6 -0
  67. package/landing/src/app/workspace/page.tsx +6 -0
  68. package/landing/src/lib/stats.json +1 -1
  69. package/package.json +6 -3
  70. package/scripts/test-whitelist-v2.sh +128 -0
  71. package/src/access-control.ts +174 -0
  72. package/src/analytics.ts +5 -0
  73. package/src/bin-http.ts +45 -0
  74. package/src/credentials.ts +20 -0
  75. package/src/execute.ts +247 -0
  76. package/src/hivr-whitelist.ts +110 -0
  77. package/src/http-api.ts +286 -0
  78. package/src/http-server-minimal.ts +154 -0
  79. package/src/product-whitelist.ts +246 -0
  80. package/src/proxy.ts +1 -1
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Hivr Bees Auto-Whitelist
3
+ * Dynamically fetches active agents from Hivr's Convex deployment
4
+ * Falls back to static whitelist if Convex is unreachable
5
+ */
6
+ // Hivr PROD Convex deployment
7
+ const HIVR_CONVEX_URL = "https://sensible-quail-275.convex.cloud";
8
+ // Fallback static whitelist (in case Convex is down)
9
+ const STATIC_WHITELIST = [
10
+ 'bytebee',
11
+ 'analyzerbee',
12
+ 'buildbee',
13
+ 'buzzwriter',
14
+ 'hivemind',
15
+ 'hivesage',
16
+ 'symbot',
17
+ 'hivrqueen',
18
+ 'marketmaven',
19
+ 'reconbee',
20
+ 'sprintbee',
21
+ 'quillbee',
22
+ ];
23
+ // Cache whitelist for 5 minutes
24
+ let cachedWhitelist = null;
25
+ let cacheExpiry = 0;
26
+ /**
27
+ * Fetch all active agents from Hivr Convex
28
+ */
29
+ async function fetchHivrAgents() {
30
+ try {
31
+ // Call Convex HTTP API directly
32
+ const response = await fetch(`${HIVR_CONVEX_URL}/api/query`, {
33
+ method: 'POST',
34
+ headers: {
35
+ 'Content-Type': 'application/json',
36
+ },
37
+ body: JSON.stringify({
38
+ path: 'agents:list',
39
+ args: {},
40
+ }),
41
+ });
42
+ if (!response.ok) {
43
+ console.warn('[Hivr Whitelist] Convex HTTP API error, using static whitelist');
44
+ return STATIC_WHITELIST;
45
+ }
46
+ const agents = await response.json();
47
+ if (!agents || !Array.isArray(agents)) {
48
+ console.warn('[Hivr Whitelist] Invalid response from Hivr Convex, using static whitelist');
49
+ return STATIC_WHITELIST;
50
+ }
51
+ // Extract handles (Hivr uses 'handle', not 'agentId')
52
+ const handles = agents
53
+ .map((a) => a.handle?.toLowerCase().trim())
54
+ .filter((h) => h && h.length > 0);
55
+ console.log(`[Hivr Whitelist] Fetched ${handles.length} agents from Hivr`);
56
+ return handles;
57
+ }
58
+ catch (error) {
59
+ console.error('[Hivr Whitelist] Failed to fetch from Hivr Convex:', error);
60
+ return STATIC_WHITELIST;
61
+ }
62
+ }
63
+ /**
64
+ * Get current whitelist (cached or fresh)
65
+ */
66
+ export async function getWhitelist() {
67
+ const now = Date.now();
68
+ // Return cached if still valid
69
+ if (cachedWhitelist && now < cacheExpiry) {
70
+ return cachedWhitelist;
71
+ }
72
+ // Fetch fresh whitelist
73
+ cachedWhitelist = await fetchHivrAgents();
74
+ cacheExpiry = now + (5 * 60 * 1000); // 5 minutes
75
+ return cachedWhitelist;
76
+ }
77
+ /**
78
+ * Check if agent is authorized
79
+ */
80
+ export async function isAuthorized(agentId) {
81
+ if (!agentId)
82
+ return false;
83
+ const whitelist = await getWhitelist();
84
+ const normalized = agentId.toLowerCase().trim();
85
+ return whitelist.includes(normalized);
86
+ }
87
+ /**
88
+ * Force refresh whitelist (call after adding new bee)
89
+ */
90
+ export function invalidateCache() {
91
+ cachedWhitelist = null;
92
+ cacheExpiry = 0;
93
+ console.log('[Hivr Whitelist] Cache invalidated');
94
+ }
95
+ //# sourceMappingURL=hivr-whitelist.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hivr-whitelist.js","sourceRoot":"","sources":["../src/hivr-whitelist.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * APIClaw HTTP API Server
3
+ * Provides REST endpoints for headless agents (Hivr bees, webhooks, etc)
4
+ *
5
+ * Endpoints:
6
+ * - GET /api/discover?query=...&agentId=...
7
+ * - POST /api/call_api { provider, action, params, agentId }
8
+ * - GET /health
9
+ *
10
+ * Auth: Whitelist-based for Hivr bees
11
+ */
12
+ /**
13
+ * Start HTTP server
14
+ */
15
+ export declare function startHTTPServer(port?: number): void;
16
+ //# sourceMappingURL=http-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-api.d.ts","sourceRoot":"","sources":["../src/http-api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAwPH;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,GAAE,MAAa,GAAG,IAAI,CAwBzD"}
@@ -0,0 +1,253 @@
1
+ /**
2
+ * APIClaw HTTP API Server
3
+ * Provides REST endpoints for headless agents (Hivr bees, webhooks, etc)
4
+ *
5
+ * Endpoints:
6
+ * - GET /api/discover?query=...&agentId=...
7
+ * - POST /api/call_api { provider, action, params, agentId }
8
+ * - GET /health
9
+ *
10
+ * Auth: Whitelist-based for Hivr bees
11
+ */
12
+ import { createServer } from 'http';
13
+ import { URL } from 'url';
14
+ import { discoverAPIs } from './discovery.js';
15
+ import { isOpenAPI, executeOpenAPI } from './open-apis.js';
16
+ import { executeMetered } from './metered.js';
17
+ import { logAPICall } from './analytics.js';
18
+ import { isAuthorized, getProduct } from './product-whitelist.js';
19
+ /**
20
+ * Parse JSON body from request
21
+ */
22
+ async function parseBody(req) {
23
+ return new Promise((resolve, reject) => {
24
+ let body = '';
25
+ req.on('data', chunk => body += chunk.toString());
26
+ req.on('end', () => {
27
+ try {
28
+ resolve(JSON.parse(body));
29
+ }
30
+ catch (e) {
31
+ reject(new Error('Invalid JSON'));
32
+ }
33
+ });
34
+ req.on('error', reject);
35
+ });
36
+ }
37
+ /**
38
+ * Send JSON response
39
+ */
40
+ function sendJSON(res, status, data) {
41
+ res.writeHead(status, {
42
+ 'Content-Type': 'application/json',
43
+ 'Access-Control-Allow-Origin': '*',
44
+ 'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
45
+ 'Access-Control-Allow-Headers': 'Content-Type, X-Agent-Id',
46
+ });
47
+ res.end(JSON.stringify(data));
48
+ }
49
+ /**
50
+ * Handle /api/discover
51
+ * GET /api/discover?query=web+search&agentId=bytebee&category=Search&maxResults=5
52
+ */
53
+ async function handleDiscover(req, res, url) {
54
+ const query = url.searchParams.get('query');
55
+ const agentId = url.searchParams.get('agentId');
56
+ const category = url.searchParams.get('category') || undefined;
57
+ const maxResults = parseInt(url.searchParams.get('maxResults') || '5');
58
+ if (!query) {
59
+ sendJSON(res, 400, { error: 'Missing query parameter' });
60
+ return;
61
+ }
62
+ if (!(await isAuthorized(agentId || undefined))) {
63
+ sendJSON(res, 403, {
64
+ error: 'Unauthorized',
65
+ message: 'This endpoint is restricted to Hivr bees. Contact admin@nordsym.com for access.',
66
+ });
67
+ return;
68
+ }
69
+ const startTime = Date.now();
70
+ const results = discoverAPIs(query, { category, maxResults });
71
+ const responseTimeMs = Date.now() - startTime;
72
+ // Log to analytics with product info
73
+ const product = agentId ? getProduct(agentId) : null;
74
+ logAPICall({
75
+ timestamp: new Date().toISOString(),
76
+ provider: 'apiclaw_discovery',
77
+ action: 'discover',
78
+ type: 'open',
79
+ userId: agentId || 'unknown',
80
+ success: true,
81
+ latencyMs: responseTimeMs,
82
+ metadata: product ? { product } : undefined,
83
+ });
84
+ sendJSON(res, 200, {
85
+ success: true,
86
+ query,
87
+ results: results.map(r => ({
88
+ provider: r.provider,
89
+ score: r.relevance_score,
90
+ reasons: r.match_reasons,
91
+ })),
92
+ count: results.length,
93
+ responseTimeMs,
94
+ });
95
+ }
96
+ /**
97
+ * Handle /api/call_api
98
+ * POST /api/call_api
99
+ * Body: { provider: "brave_search", action: "search", params: { query: "AI news" }, agentId: "bytebee" }
100
+ */
101
+ async function handleCallAPI(req, res) {
102
+ let body;
103
+ try {
104
+ body = await parseBody(req);
105
+ }
106
+ catch (e) {
107
+ sendJSON(res, 400, { error: 'Invalid JSON body' });
108
+ return;
109
+ }
110
+ const { provider, action, params, agentId } = body;
111
+ if (!provider || !action || !params || !agentId) {
112
+ sendJSON(res, 400, {
113
+ error: 'Missing required fields',
114
+ required: ['provider', 'action', 'params', 'agentId']
115
+ });
116
+ return;
117
+ }
118
+ // Check whitelist + access control
119
+ const { isAllowed } = await import('./access-control.js');
120
+ const accessCheck = await isAllowed(agentId, provider);
121
+ if (!accessCheck.allowed) {
122
+ sendJSON(res, 403, {
123
+ error: 'Access Denied',
124
+ message: accessCheck.reason || 'Not authorized',
125
+ hint: 'Contact admin@nordsym.com for access',
126
+ });
127
+ return;
128
+ }
129
+ const startTime = Date.now();
130
+ let result;
131
+ let apiType;
132
+ let success = true;
133
+ let error;
134
+ try {
135
+ if (isOpenAPI(provider)) {
136
+ apiType = 'open';
137
+ result = await executeOpenAPI(provider, action, params);
138
+ success = result.success;
139
+ error = result.error;
140
+ }
141
+ else {
142
+ apiType = 'direct';
143
+ // For Direct Call APIs, use Hivr's workspace/credentials
144
+ // TODO: Get Hivr workspace token from env or config
145
+ const customerKey = process.env.APICLAW_HIVR_CUSTOMER_KEY;
146
+ const stripeCustomerId = process.env.APICLAW_HIVR_STRIPE_CUSTOMER;
147
+ result = await executeMetered(provider, action, params, {
148
+ customerId: stripeCustomerId,
149
+ customerKey,
150
+ userId: `hivr:${agentId}`,
151
+ });
152
+ success = result.success;
153
+ error = result.error;
154
+ }
155
+ }
156
+ catch (e) {
157
+ success = false;
158
+ error = e.message;
159
+ result = { success: false, error: error };
160
+ }
161
+ const latencyMs = Date.now() - startTime;
162
+ // Log to analytics with product info
163
+ const product = getProduct(agentId);
164
+ logAPICall({
165
+ timestamp: new Date().toISOString(),
166
+ provider,
167
+ action,
168
+ type: apiType,
169
+ userId: agentId,
170
+ success,
171
+ latencyMs,
172
+ error,
173
+ metadata: product ? { product } : undefined,
174
+ });
175
+ sendJSON(res, success ? 200 : 500, {
176
+ success,
177
+ provider,
178
+ action,
179
+ agentId,
180
+ data: result.data,
181
+ error: result.error,
182
+ latencyMs,
183
+ });
184
+ }
185
+ /**
186
+ * Handle OPTIONS (CORS preflight)
187
+ */
188
+ function handleOptions(res) {
189
+ res.writeHead(204, {
190
+ 'Access-Control-Allow-Origin': '*',
191
+ 'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
192
+ 'Access-Control-Allow-Headers': 'Content-Type, X-Agent-Id',
193
+ 'Access-Control-Max-Age': '86400',
194
+ });
195
+ res.end();
196
+ }
197
+ /**
198
+ * Main request handler
199
+ */
200
+ async function handleRequest(req, res) {
201
+ const url = new URL(req.url || '/', `http://${req.headers.host}`);
202
+ console.log(`[APIClaw HTTP] ${req.method} ${url.pathname}`);
203
+ // CORS preflight
204
+ if (req.method === 'OPTIONS') {
205
+ handleOptions(res);
206
+ return;
207
+ }
208
+ // Health check
209
+ if (url.pathname === '/health') {
210
+ sendJSON(res, 200, { status: 'ok', service: 'apiclaw-http-api' });
211
+ return;
212
+ }
213
+ // Route requests
214
+ if (url.pathname === '/api/discover' && req.method === 'GET') {
215
+ await handleDiscover(req, res, url);
216
+ return;
217
+ }
218
+ if (url.pathname === '/api/call_api' && req.method === 'POST') {
219
+ await handleCallAPI(req, res);
220
+ return;
221
+ }
222
+ // 404
223
+ sendJSON(res, 404, { error: 'Not found' });
224
+ }
225
+ /**
226
+ * Start HTTP server
227
+ */
228
+ export function startHTTPServer(port = 3000) {
229
+ const server = createServer(async (req, res) => {
230
+ try {
231
+ await handleRequest(req, res);
232
+ }
233
+ catch (error) {
234
+ console.error('[APIClaw HTTP] Error:', error);
235
+ sendJSON(res, 500, { error: 'Internal server error', message: error.message });
236
+ }
237
+ });
238
+ server.listen(port, () => {
239
+ console.log(`\nšŸ¦ž APIClaw HTTP API running on http://localhost:${port}`);
240
+ console.log(` GET /api/discover?query=...&agentId=...`);
241
+ console.log(` POST /api/call_api`);
242
+ console.log(` GET /health\n`);
243
+ });
244
+ server.on('error', (error) => {
245
+ if (error.code === 'EADDRINUSE') {
246
+ console.error(`[APIClaw HTTP] Port ${port} is already in use`);
247
+ }
248
+ else {
249
+ console.error('[APIClaw HTTP] Server error:', error);
250
+ }
251
+ });
252
+ }
253
+ //# sourceMappingURL=http-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-api.js","sourceRoot":"","sources":["../src/http-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Minimal HTTP API Server for APIClaw
4
+ * Bypasses chain executor imports
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=http-server-minimal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-server-minimal.d.ts","sourceRoot":"","sources":["../src/http-server-minimal.ts"],"names":[],"mappings":";AACA;;;GAGG"}
@@ -0,0 +1,126 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Minimal HTTP API Server for APIClaw
4
+ * Bypasses chain executor imports
5
+ */
6
+ import { createServer } from 'http';
7
+ import { URL } from 'url';
8
+ const PORT = parseInt(process.env.PORT || '3001');
9
+ // Import whitelist directly
10
+ import { isAuthorized, getProduct } from './product-whitelist.js';
11
+ function sendJSON(res, status, data) {
12
+ res.writeHead(status, {
13
+ 'Content-Type': 'application/json',
14
+ 'Access-Control-Allow-Origin': '*',
15
+ });
16
+ res.end(JSON.stringify(data));
17
+ }
18
+ async function parseBody(req) {
19
+ return new Promise((resolve, reject) => {
20
+ let body = '';
21
+ req.on('data', (chunk) => body += chunk.toString());
22
+ req.on('end', () => {
23
+ try {
24
+ resolve(JSON.parse(body));
25
+ }
26
+ catch (e) {
27
+ reject(new Error('Invalid JSON'));
28
+ }
29
+ });
30
+ });
31
+ }
32
+ const server = createServer(async (req, res) => {
33
+ const url = new URL(req.url || '/', `http://${req.headers.host}`);
34
+ console.log(`[APIClaw] ${req.method} ${url.pathname}`);
35
+ // CORS
36
+ if (req.method === 'OPTIONS') {
37
+ res.writeHead(204, {
38
+ 'Access-Control-Allow-Origin': '*',
39
+ 'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
40
+ 'Access-Control-Allow-Headers': 'Content-Type',
41
+ });
42
+ res.end();
43
+ return;
44
+ }
45
+ // Health check
46
+ if (url.pathname === '/health') {
47
+ sendJSON(res, 200, {
48
+ status: 'ok',
49
+ service: 'apiclaw-http-api',
50
+ version: '2.0.0',
51
+ whitelist: 'multi-product',
52
+ });
53
+ return;
54
+ }
55
+ // Discovery endpoint
56
+ if (url.pathname === '/api/discover' && req.method === 'GET') {
57
+ const query = url.searchParams.get('query');
58
+ const agentId = url.searchParams.get('agentId');
59
+ if (!query) {
60
+ sendJSON(res, 400, { error: 'Missing query parameter' });
61
+ return;
62
+ }
63
+ const authorized = await isAuthorized(agentId || undefined);
64
+ if (!authorized) {
65
+ sendJSON(res, 403, {
66
+ error: 'Unauthorized',
67
+ message: 'This endpoint is restricted. Contact admin@nordsym.com',
68
+ });
69
+ return;
70
+ }
71
+ const product = agentId ? getProduct(agentId) : null;
72
+ sendJSON(res, 200, {
73
+ success: true,
74
+ query,
75
+ agentId,
76
+ product,
77
+ message: 'Whitelist v2.0 active - discovery endpoint placeholder',
78
+ });
79
+ return;
80
+ }
81
+ // Call API endpoint
82
+ if (url.pathname === '/api/call_api' && req.method === 'POST') {
83
+ try {
84
+ const body = await parseBody(req);
85
+ const { provider, action, params, agentId } = body;
86
+ if (!provider || !action || !agentId) {
87
+ sendJSON(res, 400, {
88
+ error: 'Missing required fields',
89
+ required: ['provider', 'action', 'agentId', 'params'],
90
+ });
91
+ return;
92
+ }
93
+ const authorized = await isAuthorized(agentId);
94
+ if (!authorized) {
95
+ sendJSON(res, 403, {
96
+ error: 'Unauthorized',
97
+ message: 'Agent not whitelisted',
98
+ });
99
+ return;
100
+ }
101
+ const product = getProduct(agentId);
102
+ sendJSON(res, 200, {
103
+ success: true,
104
+ agentId,
105
+ provider,
106
+ action,
107
+ product,
108
+ message: 'Whitelist v2.0 active - execution placeholder',
109
+ });
110
+ }
111
+ catch (e) {
112
+ sendJSON(res, 400, { error: e.message });
113
+ }
114
+ return;
115
+ }
116
+ // 404
117
+ sendJSON(res, 404, { error: 'Not found' });
118
+ });
119
+ server.listen(PORT, () => {
120
+ console.log(`\nšŸ¦ž APIClaw HTTP API (Whitelist v2.0)`);
121
+ console.log(` Running on http://localhost:${PORT}`);
122
+ console.log(` GET /health`);
123
+ console.log(` GET /api/discover?query=...&agentId=...`);
124
+ console.log(` POST /api/call_api\n`);
125
+ });
126
+ //# sourceMappingURL=http-server-minimal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-server-minimal.js","sourceRoot":"","sources":["../src/http-server-minimal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Multi-Product Whitelist System
3
+ * Supports multiple products (Hivr, NordSym, partners) with namespaced agentIds
4
+ *
5
+ * Format: product:agentId
6
+ * Examples: hivr:bytebee, nordsym:mollebot, partner_x:agent1
7
+ */
8
+ interface ProductSource {
9
+ name: string;
10
+ convexUrl: string;
11
+ queryPath: string;
12
+ agentIdField: string;
13
+ authToken?: string;
14
+ }
15
+ /**
16
+ * Get current whitelist (cached or fresh)
17
+ */
18
+ export declare function getWhitelist(): Promise<string[]>;
19
+ /**
20
+ * Check if agentId is authorized
21
+ * Supports both namespaced (product:agent) and legacy (agent) formats
22
+ */
23
+ export declare function isAuthorized(agentId: string | undefined): Promise<boolean>;
24
+ /**
25
+ * Extract product name from agentId
26
+ */
27
+ export declare function getProduct(agentId: string): string | null;
28
+ /**
29
+ * Force refresh whitelist (call after adding new agent)
30
+ */
31
+ export declare function invalidateCache(product?: string): void;
32
+ /**
33
+ * Add new product source dynamically
34
+ */
35
+ export declare function addProductSource(source: ProductSource): void;
36
+ export {};
37
+ //# sourceMappingURL=product-whitelist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product-whitelist.d.ts","sourceRoot":"","sources":["../src/product-whitelist.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA4HD;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAqCtD;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAyBhF;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGzD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAQtD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAU5D"}