mcp-scraper 0.45.0 → 0.47.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 (54) hide show
  1. package/README.md +6 -2
  2. package/dist/bin/api-server.cjs +1098 -198
  3. package/dist/bin/api-server.cjs.map +1 -1
  4. package/dist/bin/api-server.js +3 -3
  5. package/dist/bin/mcp-scraper-cli.cjs +1 -1
  6. package/dist/bin/mcp-scraper-cli.cjs.map +1 -1
  7. package/dist/bin/mcp-scraper-cli.js +1 -1
  8. package/dist/bin/mcp-scraper-install.cjs +3 -2
  9. package/dist/bin/mcp-scraper-install.cjs.map +1 -1
  10. package/dist/bin/mcp-scraper-install.js +2 -2
  11. package/dist/bin/mcp-stdio-server.cjs +251 -34
  12. package/dist/bin/mcp-stdio-server.cjs.map +1 -1
  13. package/dist/bin/mcp-stdio-server.js +5 -5
  14. package/dist/bin/paa-harvest.cjs.map +1 -1
  15. package/dist/bin/paa-harvest.js +3 -3
  16. package/dist/{chunk-5X7CJEK3.js → chunk-5S6LYQQO.js} +2 -2
  17. package/dist/chunk-5S6LYQQO.js.map +1 -0
  18. package/dist/{chunk-OVD4E4AP.js → chunk-GV5EGE5M.js} +2 -2
  19. package/dist/chunk-H4NWAF5B.js +7 -0
  20. package/dist/chunk-H4NWAF5B.js.map +1 -0
  21. package/dist/{chunk-T5AFM4G5.js → chunk-IWYYZXBR.js} +2 -2
  22. package/dist/{chunk-RJMOOII7.js → chunk-JH7A4HA7.js} +2 -2
  23. package/dist/{chunk-JFOT5JEL.js → chunk-MW3ET532.js} +2 -2
  24. package/dist/{chunk-GRODXRUY.js → chunk-QSUGPYGQ.js} +3 -2
  25. package/dist/chunk-QSUGPYGQ.js.map +1 -0
  26. package/dist/{chunk-WT2UHDSE.js → chunk-TV6KPZ6J.js} +2 -2
  27. package/dist/{chunk-FQIICRR4.js → chunk-XCGQBGDA.js} +296 -38
  28. package/dist/chunk-XCGQBGDA.js.map +1 -0
  29. package/dist/{db-4ABEYNDM.js → db-W3RPRILW.js} +2 -2
  30. package/dist/{extract-bundle-DYMQRQWG.js → extract-bundle-DXWWQER6.js} +3 -3
  31. package/dist/index.cjs.map +1 -1
  32. package/dist/index.js +3 -3
  33. package/dist/{location-data-repository-HDNCU4Z4.js → location-data-repository-2FJVMTZ2.js} +3 -3
  34. package/dist/{server-7B75SDNG.js → server-OHMZJRSB.js} +778 -141
  35. package/dist/server-OHMZJRSB.js.map +1 -0
  36. package/dist/{site-extract-repository-G723PZIL.js → site-extract-repository-UULQAGO4.js} +3 -3
  37. package/dist/{worker-4LZGRHDA.js → worker-3QX7LG62.js} +5 -5
  38. package/package.json +2 -2
  39. package/dist/chunk-5X7CJEK3.js.map +0 -1
  40. package/dist/chunk-CEZ3NFBP.js +0 -7
  41. package/dist/chunk-CEZ3NFBP.js.map +0 -1
  42. package/dist/chunk-FQIICRR4.js.map +0 -1
  43. package/dist/chunk-GRODXRUY.js.map +0 -1
  44. package/dist/server-7B75SDNG.js.map +0 -1
  45. /package/dist/{chunk-OVD4E4AP.js.map → chunk-GV5EGE5M.js.map} +0 -0
  46. /package/dist/{chunk-T5AFM4G5.js.map → chunk-IWYYZXBR.js.map} +0 -0
  47. /package/dist/{chunk-RJMOOII7.js.map → chunk-JH7A4HA7.js.map} +0 -0
  48. /package/dist/{chunk-JFOT5JEL.js.map → chunk-MW3ET532.js.map} +0 -0
  49. /package/dist/{chunk-WT2UHDSE.js.map → chunk-TV6KPZ6J.js.map} +0 -0
  50. /package/dist/{db-4ABEYNDM.js.map → db-W3RPRILW.js.map} +0 -0
  51. /package/dist/{extract-bundle-DYMQRQWG.js.map → extract-bundle-DXWWQER6.js.map} +0 -0
  52. /package/dist/{location-data-repository-HDNCU4Z4.js.map → location-data-repository-2FJVMTZ2.js.map} +0 -0
  53. /package/dist/{site-extract-repository-G723PZIL.js.map → site-extract-repository-UULQAGO4.js.map} +0 -0
  54. /package/dist/{worker-4LZGRHDA.js.map → worker-3QX7LG62.js.map} +0 -0
@@ -50,13 +50,14 @@ function renderInstallTerminal(options) {
50
50
  "1/1 install surfaces ready",
51
51
  colorize("Newest: any approved connection read can become an indexed Memory snapshot in one call. OAuth stays tenant-isolated and provider content is redacted and marked untrusted.", "lime", color),
52
52
  "",
53
- `${colorize("Tools", "cyan", color)} ${colorize("(215 MCP tools)", "muted", color)}`,
53
+ `${colorize("Tools", "cyan", color)} ${colorize("(220 MCP tools)", "muted", color)}`,
54
54
  toolRow("search", ["harvest_paa", "search_serp", "maps_search", "maps_place_intel"], color),
55
55
  toolRow("extract", ["extract_url", "map_site_urls", "extract_site", "audit_site", "directory_workflow"], color),
56
56
  toolRow("build", ["create_editorial_reading_room", "rank_tracker_workflow", "portable HTML"], color),
57
57
  toolRow("media", ["youtube_harvest", "youtube_transcribe", "facebook_ad_search", "facebook_page_intel", "facebook_ad_transcribe", "facebook_video_transcribe", "instagram_profile_content", "instagram_media_download", "reddit_thread"], color),
58
58
  toolRow("browser", ["browser_open", "browser_profile_connect", "browser_profile_list", "browser_close", "browser_screenshot", "browser_read", "browser_locate", "browser_replay_mark", "browser_replay_annotate"], color),
59
59
  toolRow("connect", ["list_service_connections", "describe_service_connection_tool", "import_service_connection_to_memory", "export_connected_service_data", "renew_connected_data_download", "read_service_connection", "call_service_connection_action"], color),
60
+ toolRow("commons", ["commons_search_entities", "commons_prepare_entity", "commons_submit_entity", "commons_prepare_publication", "commons_claim_publication", "commons_publish_editorial", "commons_get_publication"], color),
60
61
  toolRow("account", ["credits_info", "reports", "MCP resources"], color),
61
62
  toolRow("memory", ["memory-put", "memory-get", "memory-search", "list-vaults", "record-fact", "list-scheduled-actions"], color),
62
63
  `${colorize("Workflows", "cyan", color)} ${colorize("(MCP + CLI + API)", "muted", color)}`,
@@ -105,4 +106,4 @@ function renderInstallTerminal(options) {
105
106
  export {
106
107
  renderInstallTerminal
107
108
  };
108
- //# sourceMappingURL=chunk-GRODXRUY.js.map
109
+ //# sourceMappingURL=chunk-QSUGPYGQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/install-terminal.ts"],"sourcesContent":["export interface InstallTerminalOptions {\n color?: boolean\n version: string\n apiKeyConfigured?: boolean\n}\n\ntype Tone = 'cyan' | 'lime' | 'amber' | 'red' | 'muted' | 'bold'\n\nconst CODES: Record<Tone | 'reset', string> = {\n reset: '\\x1b[0m',\n cyan: '\\x1b[36m',\n lime: '\\x1b[32m',\n amber: '\\x1b[33m',\n red: '\\x1b[31m',\n muted: '\\x1b[90m',\n bold: '\\x1b[1m',\n}\n\nfunction colorize(value: string, tone: Tone, enabled: boolean): string {\n if (!enabled) return value\n return `${CODES[tone]}${value}${CODES.reset}`\n}\n\nfunction toolRow(label: string, tools: string[], enabled: boolean): string {\n const padded = label.padEnd(9, ' ')\n return ` ${colorize(padded, 'muted', enabled)} ${tools.join(colorize(' . ', 'muted', enabled))}`\n}\n\nexport function renderInstallTerminal(options: InstallTerminalOptions): string {\n const color = options.color ?? true\n const apiKeyValue = options.apiKeyConfigured ? '$MCP_SCRAPER_API_KEY' : 'sk_live_your_key'\n const ascii = String.raw`\n __ __ ____ ____ \n| \\/ |/ ___| _ \\\n| |\\/| | | | |_) |\n| | | | |___| __/\n|_| |_|\\____|_|\n\n ____ ____ ____ _ ____ _____ ____\n/ ___| / ___| _ \\ / \\ | _ \\| ____| _ \\\n\\___ \\| | | |_) | / _ \\ | |_) | _| | |_) |\n ___) | |___| _ < / ___ \\| __/| |___| _ <\n|____/ \\____|_| \\_\\/_/ \\_\\_| |_____|_| \\_\\\n`\n\n const claudeCommand = [\n `MCP_SCRAPER_API_KEY=${apiKeyValue} npx -y -p mcp-scraper@latest \\\\`,\n ' mcp-scraper-cli agent install claude --apply',\n ].join('\\n')\n\n const codexConfig = [\n '[mcp_servers.mcp-scraper]',\n 'command = \"npx\"',\n 'args = [\"-y\", \"-p\", \"mcp-scraper@latest\", \"mcp-scraper\"]',\n `env = { MCP_SCRAPER_API_KEY = \"${apiKeyValue}\" }`,\n ].join('\\n')\n\n return [\n colorize(`mcp-scraper v${options.version}`, 'bold', color),\n colorize('> mcp-scraper-install', 'muted', color),\n colorize(ascii, 'amber', color),\n `${colorize('MCP Scraper Agent', 'cyan', color)} . v${options.version} . mcpscraper.dev`,\n '1/1 install surfaces ready',\n colorize('Newest: any approved connection read can become an indexed Memory snapshot in one call. OAuth stays tenant-isolated and provider content is redacted and marked untrusted.', 'lime', color),\n '',\n `${colorize('Tools', 'cyan', color)} ${colorize('(220 MCP tools)', 'muted', color)}`,\n toolRow('search', ['harvest_paa', 'search_serp', 'maps_search', 'maps_place_intel'], color),\n toolRow('extract', ['extract_url', 'map_site_urls', 'extract_site', 'audit_site', 'directory_workflow'], color),\n toolRow('build', ['create_editorial_reading_room', 'rank_tracker_workflow', 'portable HTML'], color),\n toolRow('media', ['youtube_harvest', 'youtube_transcribe', 'facebook_ad_search', 'facebook_page_intel', 'facebook_ad_transcribe', 'facebook_video_transcribe', 'instagram_profile_content', 'instagram_media_download', 'reddit_thread'], color),\n toolRow('browser', ['browser_open', 'browser_profile_connect', 'browser_profile_list', 'browser_close', 'browser_screenshot', 'browser_read', 'browser_locate', 'browser_replay_mark', 'browser_replay_annotate'], color),\n toolRow('connect', ['list_service_connections', 'describe_service_connection_tool', 'import_service_connection_to_memory', 'export_connected_service_data', 'renew_connected_data_download', 'read_service_connection', 'call_service_connection_action'], color),\n toolRow('commons', ['commons_search_entities', 'commons_prepare_entity', 'commons_submit_entity', 'commons_prepare_publication', 'commons_claim_publication', 'commons_publish_editorial', 'commons_get_publication'], color),\n toolRow('account', ['credits_info', 'reports', 'MCP resources'], color),\n toolRow('memory', ['memory-put', 'memory-get', 'memory-search', 'list-vaults', 'record-fact', 'list-scheduled-actions'], color),\n `${colorize('Workflows', 'cyan', color)} ${colorize('(MCP + CLI + API)', 'muted', color)}`,\n toolRow('route', ['workflow_list', 'workflow_suggest', 'workflow_run', 'workflow_step', 'workflow_status', 'workflow_artifact_read'], color),\n toolRow('seo', ['directory', 'agent-packet', 'competitive audit', 'map/serp comparison', 'PAA/AIO briefs', 'scheduled runs'], color),\n '',\n colorize('Usage tips:', 'amber', color),\n 'Run mcp-scraper-install for this visible card. Run mcp-scraper-cli for setup utilities and subcommands.',\n 'Run mcp-scraper in a human terminal to print this card; MCP clients get the same command as a silent stdio server.',\n 'Explicit card command: npx -y -p mcp-scraper@latest mcp-scraper-install',\n 'Hosted browser sessions use direct/no-proxy egress by default.',\n 'Customer auth setup: run browser_profile_connect, send the watch_url, let the user sign in, then call browser_profile_list until AUTHENTICATED.',\n 'Connected account ranges: call export_connected_service_data once. It handles Gmail, Calendar, Zoom, and Resend pagination; do not loop read_service_connection over individual records.',\n 'Connected account RAG: call import_service_connection_to_memory for one bounded approved read. It writes a redacted, untrusted snapshot to a stable Memory path and embeds it for search.',\n 'Stack logins / reconnect: run browser_profile_connect again with the same profile name and another domain to add accounts or refresh a login.',\n 'Start with workflow_suggest for broad jobs like market analysis, ICP research, CRO audits, brand briefs, content gaps, and AI visibility.',\n 'For MCP clients, use mcp-scraper so one install can mix SERP, Maps, browser, reports, and saved MCP resources.',\n 'If you hit the concurrency limit, add an extra slot for $5/month with mcp-scraper-cli billing concurrency checkout.',\n '',\n `${colorize('Ready.', 'lime', color)} Install the combined MCP server with one command:`,\n '',\n colorize('Setup doctor', 'amber', color),\n 'npx -y -p mcp-scraper@latest mcp-scraper-cli doctor',\n '',\n colorize('Hosted profile setup', 'amber', color),\n 'In your MCP client, call browser_profile_connect with email=\"seo@example.com\" and domain=\"chatgpt.com\".',\n 'Give the returned watch_url to the user. After they sign in, call browser_profile_list, then browser_open with the returned profile. Add more logins by calling browser_profile_connect again with the same profile and a new domain.',\n '',\n colorize('Claude Code one-command setup', 'amber', color),\n claudeCommand,\n 'Then fully exit Claude Code and open a new Claude terminal. Check with: claude mcp list',\n '',\n colorize('Codex config', 'amber', color),\n codexConfig,\n '',\n colorize('Claude Desktop Extension', 'amber', color),\n 'Download: https://mcpscraper.dev/downloads/mcp-scraper.mcpb',\n '',\n colorize('Safety note:', 'muted', color),\n 'mcp-scraper prints this card only when stdin/stdout are an interactive TTY. In MCP clients it writes only JSON-RPC to stdout.',\n 'Use --stdio or MCP_SCRAPER_FORCE_STDIO=1 to force server mode from a terminal.',\n '',\n ].join('\\n')\n}\n"],"mappings":"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","names":[]}
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-G3P3ZDB4.js";
4
4
  import {
5
5
  getDb
6
- } from "./chunk-5X7CJEK3.js";
6
+ } from "./chunk-5S6LYQQO.js";
7
7
 
8
8
  // src/api/location-data-repository.ts
9
9
  import { createHash, randomUUID } from "crypto";
@@ -681,4 +681,4 @@ export {
681
681
  importHostedCensusPlacesCsv,
682
682
  queryHostedLocationMarkets
683
683
  };
684
- //# sourceMappingURL=chunk-WT2UHDSE.js.map
684
+ //# sourceMappingURL=chunk-TV6KPZ6J.js.map
@@ -18,10 +18,10 @@ import {
18
18
  browserServiceProfileSaveChanges,
19
19
  recordVendorUsage,
20
20
  vendorCostUsd
21
- } from "./chunk-T5AFM4G5.js";
21
+ } from "./chunk-IWYYZXBR.js";
22
22
  import {
23
23
  PACKAGE_VERSION
24
- } from "./chunk-CEZ3NFBP.js";
24
+ } from "./chunk-H4NWAF5B.js";
25
25
  import {
26
26
  MC_PER_CREDIT
27
27
  } from "./chunk-SOEYDWJU.js";
@@ -385,6 +385,18 @@ seam is noted so you can chain them.
385
385
  Use saved filters when a person wants their MCP to operate inside a reading room, trail, source scope,
386
386
  category, tag bundle, media constraint, or other personalized subset of the shared Commons graph.
387
387
 
388
+ ## Transparent Commons user publications
389
+ - A user-owned editorial publication is separate from the neutral public wiki. Start with
390
+ **commons_prepare_publication** to normalize the requested subdomain, check availability, and read the live
391
+ ownership contract. Then call **commons_validate_publication** with operation \`claim\` before
392
+ **commons_claim_publication**.
393
+ - Each account may claim one stable name at \`https://{name}.transparent-commons.cc\`. Claims require an
394
+ idempotency key and never publish content by themselves.
395
+ - To publish, use **editorial_reading_room_guide** when needed, research and author the complete source-grounded
396
+ edition, validate it with **commons_validate_publication** operation \`publish\`, then call
397
+ **commons_publish_editorial**. The publish result returns the permanent publication, archive, and edition URLs.
398
+ - Use **commons_get_publication** to recover the caller's publication and current edition revisions. Existing
399
+ edition edits require the returned baseRevision. Only the account that claimed the subdomain can publish to it.
388
400
 
389
401
  ## Google Maps
390
402
  - Find multiple places/competitors/prospects -> **maps_search** (returns \`results[]\` with name,
@@ -4315,13 +4327,33 @@ var ScheduledArtifactSelectionSchema = z.discriminatedUnion("mode", [
4315
4327
  templateVersionId: z.string().uuid()
4316
4328
  }).strict()
4317
4329
  ]);
4318
- var ArtifactTemplateConfigSchema = z.object({
4330
+ var EditorialArtifactTemplateConfigSchema = z.object({
4319
4331
  theme: z.enum(["paper", "ink", "warm"]),
4320
4332
  density: z.enum(["comfortable", "compact"]),
4321
4333
  showSourceRail: z.boolean(),
4322
4334
  showGeneratedAt: z.boolean(),
4323
4335
  brandName: z.string().trim().min(1).max(80).optional()
4324
4336
  }).strict();
4337
+ var PersonalAuthorityFeatureFlagsSchema = z.object({
4338
+ navigation: z.boolean(),
4339
+ socialLinks: z.boolean(),
4340
+ authority: z.boolean(),
4341
+ consultation: z.boolean(),
4342
+ learning: z.boolean(),
4343
+ services: z.boolean(),
4344
+ proof: z.boolean(),
4345
+ finalCta: z.boolean()
4346
+ }).strict();
4347
+ var PersonalAuthorityTemplateConfigSchema = z.object({
4348
+ theme: z.enum(["blue", "slate", "monochrome"]),
4349
+ showGeneratedAt: z.boolean(),
4350
+ brandName: z.string().trim().min(1).max(80).optional(),
4351
+ featureFlags: PersonalAuthorityFeatureFlagsSchema
4352
+ }).strict();
4353
+ var ArtifactTemplateConfigSchema = z.union([
4354
+ EditorialArtifactTemplateConfigSchema,
4355
+ PersonalAuthorityTemplateConfigSchema
4356
+ ]);
4325
4357
  var EditorialReadingRoomV1InputSchema = z.object({
4326
4358
  title: z.string().trim().min(1).max(300),
4327
4359
  dek: z.string().trim().max(1e3).optional(),
@@ -4354,25 +4386,104 @@ var EditorialReadingRoomV1InputSchema = z.object({
4354
4386
  });
4355
4387
  }
4356
4388
  });
4357
- var CreateArtifactTemplateInputSchema = z.object({
4358
- presetKey: z.literal("editorial_reading_room_v1"),
4389
+ var PersonalAuthorityActionSchema = z.object({
4390
+ label: z.string().trim().min(1).max(120),
4391
+ href: z.string().trim().min(1).max(2e3)
4392
+ }).strict();
4393
+ var PersonalAuthorityV1InputSchema = z.object({
4394
+ name: z.string().trim().min(1).max(160),
4395
+ professionalTitle: z.string().trim().min(1).max(300),
4396
+ summary: z.string().trim().min(1).max(1500),
4397
+ location: z.string().trim().max(160).optional(),
4398
+ email: z.string().trim().email().max(320).optional(),
4399
+ phone: z.string().trim().max(80).optional(),
4400
+ primaryAction: PersonalAuthorityActionSchema,
4401
+ secondaryAction: PersonalAuthorityActionSchema.optional(),
4402
+ socialLinks: z.array(z.object({
4403
+ label: z.string().trim().min(1).max(60),
4404
+ href: z.string().trim().min(1).max(2e3)
4405
+ }).strict()).max(8).default([]),
4406
+ authority: z.object({
4407
+ heading: z.string().trim().min(1).max(500),
4408
+ paragraphs: z.array(z.string().trim().min(1).max(2e3)).min(1).max(6)
4409
+ }).strict().optional(),
4410
+ consultation: z.object({
4411
+ eyebrow: z.string().trim().max(120).optional(),
4412
+ heading: z.string().trim().min(1).max(400),
4413
+ summary: z.string().trim().min(1).max(1e3),
4414
+ action: PersonalAuthorityActionSchema
4415
+ }).strict().optional(),
4416
+ learning: z.object({
4417
+ heading: z.string().trim().min(1).max(400),
4418
+ summary: z.string().trim().max(1e3).optional(),
4419
+ topics: z.array(z.object({
4420
+ title: z.string().trim().min(1).max(160),
4421
+ headline: z.string().trim().min(1).max(300),
4422
+ summary: z.string().trim().min(1).max(1500),
4423
+ href: z.string().trim().min(1).max(2e3).optional()
4424
+ }).strict()).min(1).max(12)
4425
+ }).strict().optional(),
4426
+ services: z.object({
4427
+ heading: z.string().trim().min(1).max(400),
4428
+ summary: z.string().trim().max(1e3).optional(),
4429
+ offers: z.array(z.object({
4430
+ title: z.string().trim().min(1).max(160),
4431
+ description: z.string().trim().min(1).max(1500),
4432
+ action: PersonalAuthorityActionSchema.optional()
4433
+ }).strict()).min(1).max(6)
4434
+ }).strict().optional(),
4435
+ proof: z.object({
4436
+ heading: z.string().trim().min(1).max(400),
4437
+ summary: z.string().trim().max(1e3).optional(),
4438
+ testimonials: z.array(z.object({
4439
+ quote: z.string().trim().min(1).max(1500),
4440
+ person: z.string().trim().min(1).max(160),
4441
+ role: z.string().trim().max(200).optional()
4442
+ }).strict()).min(1).max(12)
4443
+ }).strict().optional(),
4444
+ finalCta: z.object({
4445
+ eyebrow: z.string().trim().max(120).optional(),
4446
+ heading: z.string().trim().min(1).max(400),
4447
+ summary: z.string().trim().max(1e3).optional(),
4448
+ action: PersonalAuthorityActionSchema
4449
+ }).strict().optional()
4450
+ }).strict();
4451
+ var TemplateIdentityFields = {
4359
4452
  name: z.string().trim().min(1).max(120),
4360
4453
  description: z.string().trim().max(500).default(""),
4361
- config: ArtifactTemplateConfigSchema,
4362
4454
  authoringInstructions: z.string().trim().max(4e3)
4363
- }).strict();
4364
- var UpdateArtifactTemplateInputSchema = CreateArtifactTemplateInputSchema.omit({ presetKey: true }).partial().refine((input) => Object.keys(input).length > 0, "At least one field is required");
4365
- var ArtifactTemplateVersionSchema = z.object({
4455
+ };
4456
+ var CreateArtifactTemplateInputSchema = z.discriminatedUnion("presetKey", [
4457
+ z.object({
4458
+ presetKey: z.literal("editorial_reading_room_v1"),
4459
+ ...TemplateIdentityFields,
4460
+ config: EditorialArtifactTemplateConfigSchema
4461
+ }).strict(),
4462
+ z.object({
4463
+ presetKey: z.literal("personal_authority_v1"),
4464
+ ...TemplateIdentityFields,
4465
+ config: PersonalAuthorityTemplateConfigSchema
4466
+ }).strict()
4467
+ ]);
4468
+ var UpdateArtifactTemplateInputSchema = z.object({
4469
+ name: TemplateIdentityFields.name.optional(),
4470
+ description: z.string().trim().max(500).optional(),
4471
+ config: ArtifactTemplateConfigSchema.optional(),
4472
+ authoringInstructions: TemplateIdentityFields.authoringInstructions.optional()
4473
+ }).strict().refine((input) => Object.keys(input).length > 0, "At least one field is required");
4474
+ var ArtifactTemplateVersionBase = {
4366
4475
  templateVersionId: z.string().uuid(),
4367
4476
  templateId: z.string().uuid(),
4368
4477
  version: z.number().int().positive(),
4369
- rendererKey: z.literal("editorial_reading_room_v1"),
4370
4478
  rendererVersion: z.literal(1),
4371
4479
  inputContractVersion: z.literal(1),
4372
- config: ArtifactTemplateConfigSchema,
4373
4480
  authoringInstructions: z.string().max(4e3),
4374
4481
  createdAt: z.string().datetime()
4375
- }).strict();
4482
+ };
4483
+ var ArtifactTemplateVersionSchema = z.discriminatedUnion("rendererKey", [
4484
+ z.object({ ...ArtifactTemplateVersionBase, rendererKey: z.literal("editorial_reading_room_v1"), config: EditorialArtifactTemplateConfigSchema }).strict(),
4485
+ z.object({ ...ArtifactTemplateVersionBase, rendererKey: z.literal("personal_authority_v1"), config: PersonalAuthorityTemplateConfigSchema }).strict()
4486
+ ]);
4376
4487
  var ArtifactTemplateSchema = z.object({
4377
4488
  templateId: z.string().uuid(),
4378
4489
  name: z.string().min(1).max(120),
@@ -4387,9 +4498,15 @@ var ArtifactTemplateSchema = z.object({
4387
4498
  var ListArtifactTemplatesResponseSchema = z.object({
4388
4499
  ok: z.literal(true),
4389
4500
  presets: z.array(z.object({
4390
- presetKey: z.literal("editorial_reading_room_v1"),
4501
+ presetKey: z.enum(["editorial_reading_room_v1", "personal_authority_v1"]),
4391
4502
  name: z.string(),
4392
4503
  description: z.string(),
4504
+ mark: z.string().min(1).max(4),
4505
+ featureFlags: z.array(z.object({
4506
+ key: z.string().min(1),
4507
+ label: z.string().min(1),
4508
+ description: z.string().min(1)
4509
+ }).strict()),
4393
4510
  defaultConfig: ArtifactTemplateConfigSchema
4394
4511
  }).strict()),
4395
4512
  templates: z.array(ArtifactTemplateSchema)
@@ -4404,7 +4521,7 @@ var ScheduledRunArtifactOutputSchema = z.object({
4404
4521
  artifactId: z.string().min(1).max(1e3),
4405
4522
  templateId: z.string().uuid(),
4406
4523
  templateVersionId: z.string().uuid(),
4407
- rendererKey: z.literal("editorial_reading_room_v1"),
4524
+ rendererKey: z.enum(["editorial_reading_room_v1", "personal_authority_v1"]),
4408
4525
  rendererVersion: z.literal(1),
4409
4526
  mimeType: z.literal("text/html"),
4410
4527
  title: z.string().min(1).max(300),
@@ -4456,18 +4573,29 @@ var GetScheduledRunResponseSchema = z.object({
4456
4573
  ok: z.literal(true),
4457
4574
  run: ScheduledRunResultSchema
4458
4575
  }).strict();
4459
- var InternalScheduledArtifactRenderRequestSchema = z.object({
4576
+ var InternalScheduledArtifactRenderRequestBase = {
4460
4577
  identity: z.string().min(1).max(320),
4461
4578
  ownerId: z.string().regex(/^[a-f0-9]{24}$/),
4462
4579
  runId: z.string().min(1).max(200),
4463
4580
  scheduleId: z.string().uuid(),
4464
4581
  templateId: z.string().uuid(),
4465
4582
  templateVersionId: z.string().uuid(),
4466
- rendererKey: z.literal("editorial_reading_room_v1"),
4467
- rendererVersion: z.literal(1),
4468
- config: ArtifactTemplateConfigSchema,
4469
- input: EditorialReadingRoomV1InputSchema
4470
- }).strict();
4583
+ rendererVersion: z.literal(1)
4584
+ };
4585
+ var InternalScheduledArtifactRenderRequestSchema = z.discriminatedUnion("rendererKey", [
4586
+ z.object({
4587
+ ...InternalScheduledArtifactRenderRequestBase,
4588
+ rendererKey: z.literal("editorial_reading_room_v1"),
4589
+ config: EditorialArtifactTemplateConfigSchema,
4590
+ input: EditorialReadingRoomV1InputSchema
4591
+ }).strict(),
4592
+ z.object({
4593
+ ...InternalScheduledArtifactRenderRequestBase,
4594
+ rendererKey: z.literal("personal_authority_v1"),
4595
+ config: PersonalAuthorityTemplateConfigSchema,
4596
+ input: PersonalAuthorityV1InputSchema
4597
+ }).strict()
4598
+ ]);
4471
4599
  var CreateScheduledRunViewLinkInputSchema = z.object({
4472
4600
  artifactId: z.string().min(1).max(1e3),
4473
4601
  expiresInDays: z.number().int().min(1).max(30).default(7)
@@ -4490,10 +4618,15 @@ var ApiErrorResponseSchema = z.object({
4490
4618
  ]),
4491
4619
  requestId: z.string().max(200).optional()
4492
4620
  }).strict();
4493
- var SCHEDULED_ARTIFACT_TEMPLATE_PRESET = {
4621
+ var EDITORIAL_READING_ROOM_TEMPLATE_PRESET = {
4494
4622
  presetKey: "editorial_reading_room_v1",
4495
4623
  name: "Editorial Reading Room",
4496
4624
  description: "A self-contained, source-labelled reading experience for scheduled research and reports.",
4625
+ mark: "Aa",
4626
+ featureFlags: [
4627
+ { key: "showSourceRail", label: "Source rail", description: "Keep source references visible beside the report." },
4628
+ { key: "showGeneratedAt", label: "Generated time", description: "Show when the report was rendered." }
4629
+ ],
4497
4630
  defaultConfig: {
4498
4631
  theme: "paper",
4499
4632
  density: "comfortable",
@@ -4501,6 +4634,36 @@ var SCHEDULED_ARTIFACT_TEMPLATE_PRESET = {
4501
4634
  showGeneratedAt: true
4502
4635
  }
4503
4636
  };
4637
+ var PERSONAL_AUTHORITY_TEMPLATE_PRESET = {
4638
+ presetKey: "personal_authority_v1",
4639
+ name: "Personal Authority",
4640
+ description: "A flexible person-focused website for practitioners, founders, leaders, authors, coaches, and other professionals.",
4641
+ mark: "M",
4642
+ featureFlags: [
4643
+ { key: "navigation", label: "Navigation", description: "Show the responsive header and section navigation." },
4644
+ { key: "socialLinks", label: "Social links", description: "Show professional and media profile links." },
4645
+ { key: "authority", label: "Experience", description: "Show the background and authority section." },
4646
+ { key: "consultation", label: "Consultation", description: "Show an early invitation to connect." },
4647
+ { key: "learning", label: "Ideas and resources", description: "Show educational topics and useful resources." },
4648
+ { key: "services", label: "Ways to work together", description: "Show services, appointments, or offers." },
4649
+ { key: "proof", label: "Proof", description: "Show testimonials, outcomes, or affiliations." },
4650
+ { key: "finalCta", label: "Final invitation", description: "Show the closing contact call to action." }
4651
+ ],
4652
+ defaultConfig: {
4653
+ theme: "blue",
4654
+ showGeneratedAt: false,
4655
+ featureFlags: {
4656
+ navigation: true,
4657
+ socialLinks: true,
4658
+ authority: true,
4659
+ consultation: true,
4660
+ learning: true,
4661
+ services: true,
4662
+ proof: true,
4663
+ finalCta: true
4664
+ }
4665
+ }
4666
+ };
4504
4667
 
4505
4668
  // src/api/wayback-schemas.ts
4506
4669
  import { z as z2 } from "zod";
@@ -5253,6 +5416,37 @@ var RenewEditorialReadingRoomDownloadOutputSchema = {
5253
5416
  downloadUrlExpiresAt: z4.string(),
5254
5417
  expiresAt: z4.string()
5255
5418
  };
5419
+ var CommonsPublicationSubdomainSchema = z4.string().trim().min(3).max(50).describe("Requested publication name under transparent-commons.cc. The server normalizes spaces to hyphens, rejects reserved names, and enforces one globally unique name per account.");
5420
+ var CommonsPreparePublicationInputSchema = {
5421
+ requestedSubdomain: CommonsPublicationSubdomainSchema,
5422
+ title: z4.string().trim().min(1).max(140).optional().describe("Reader-facing publication title. Omit to derive it from the chosen subdomain."),
5423
+ description: z4.string().trim().max(500).optional().describe("Short description used on the publication archive and discovery surfaces.")
5424
+ };
5425
+ var CommonsValidatePublicationInputSchema = {
5426
+ operation: z4.enum(["claim", "publish"]).describe("Validate either a new name claim or a finished editorial edition without writing."),
5427
+ requestedSubdomain: CommonsPublicationSubdomainSchema.optional().describe("Publication name to validate when operation is claim."),
5428
+ publicationSubdomain: CommonsPublicationSubdomainSchema.optional().describe("Already claimed publication name to validate when operation is publish."),
5429
+ title: z4.string().trim().min(1).max(140).optional(),
5430
+ description: z4.string().trim().max(500).optional(),
5431
+ edition: z4.object(CreateEditorialReadingRoomInputSchema).strict().optional().describe("Complete source-grounded reading-room payload to validate when operation is publish."),
5432
+ editionSlug: z4.string().trim().regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/).max(80).optional().describe("Stable public edition slug. Defaults to edition.site.slug."),
5433
+ baseRevision: z4.number().int().positive().optional().describe("Current edition revision when validating an edit.")
5434
+ };
5435
+ var CommonsClaimPublicationInputSchema = {
5436
+ ...CommonsPreparePublicationInputSchema,
5437
+ idempotencyKey: z4.string().trim().min(8).max(200).describe("Unique key for this intended claim. Reuse it only when retrying the same claim.")
5438
+ };
5439
+ var CommonsPublishEditorialInputSchema = {
5440
+ publicationSubdomain: CommonsPublicationSubdomainSchema.describe("Publication owned by the authenticated account."),
5441
+ editionSlug: z4.string().trim().regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/).max(80).optional().describe("Stable public edition slug. Defaults to site.slug."),
5442
+ idempotencyKey: z4.string().trim().min(8).max(200).describe("Unique key for this intended publish. Reuse it only when retrying the same revision."),
5443
+ baseRevision: z4.number().int().positive().optional().describe("Required when revising an existing edition; use the current revision from commons_get_publication."),
5444
+ ...CreateEditorialReadingRoomInputSchema
5445
+ };
5446
+ var CommonsGetPublicationInputSchema = {
5447
+ subdomain: CommonsPublicationSubdomainSchema.optional().describe("Public publication name to inspect. Omit to return the publication owned by the authenticated account."),
5448
+ includeEditions: z4.boolean().default(true).describe("Include the latest revision of every published edition.")
5449
+ };
5256
5450
  var RankTrackerModeSchema = z4.enum(["maps", "organic", "ai_overview", "paa"]);
5257
5451
  var RankTrackerBlueprintInputSchema = {
5258
5452
  projectName: z4.string().min(1).optional().describe("Optional name for the rank tracker project, client, or campaign."),
@@ -8029,6 +8223,41 @@ function registerPaaExtractorMcpTools(server, executor, options = {}) {
8029
8223
  openWorldHint: false
8030
8224
  }
8031
8225
  }, async (input) => executor.commonsListFilters(input));
8226
+ server.registerTool("commons_prepare_publication", {
8227
+ title: "Prepare Transparent Commons Publication",
8228
+ description: "Check and normalize a subscriber-chosen Transparent Commons publication name before any write. Returns name availability, the caller's existing publication, permanent URL shape, ownership rules, and the required validate/claim/publish workflow. This is for a user-owned editorial publication, not a neutral /wiki/ entity.",
8229
+ inputSchema: CommonsPreparePublicationInputSchema,
8230
+ outputSchema: recordOutputSchema("commons_prepare_publication", CommonsGenericOutputSchema),
8231
+ annotations: { title: "Prepare Transparent Commons Publication", readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false }
8232
+ }, async (input) => executor.commonsPreparePublication(input));
8233
+ server.registerTool("commons_validate_publication", {
8234
+ title: "Validate Transparent Commons Publication",
8235
+ description: "Validate a publication name claim or a complete source-grounded editorial edition without writing. Use operation claim before commons_claim_publication and operation publish before commons_publish_editorial. This uses the editorial reading-room contract and checks ownership plus revision conflicts.",
8236
+ inputSchema: CommonsValidatePublicationInputSchema,
8237
+ outputSchema: recordOutputSchema("commons_validate_publication", CommonsGenericOutputSchema),
8238
+ annotations: { title: "Validate Transparent Commons Publication", readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false }
8239
+ }, async (input) => executor.commonsValidatePublication(input));
8240
+ server.registerTool("commons_claim_publication", {
8241
+ title: "Claim Transparent Commons Publication",
8242
+ description: "Permanently claim one globally unique publication subdomain for the authenticated MCP Scraper account. Call commons_prepare_publication and commons_validate_publication first. This creates public identity state but does not publish an edition. Requires an idempotencyKey; retries with the same intended claim are safe.",
8243
+ inputSchema: CommonsClaimPublicationInputSchema,
8244
+ outputSchema: recordOutputSchema("commons_claim_publication", CommonsGenericOutputSchema),
8245
+ annotations: { title: "Claim Transparent Commons Publication", readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: true }
8246
+ }, async (input) => executor.commonsClaimPublication(input));
8247
+ server.registerTool("commons_publish_editorial", {
8248
+ title: "Publish Transparent Commons Editorial Edition",
8249
+ description: "Publish a fully authored editorial reading-room edition to the caller-owned Transparent Commons subdomain and return permanent root, archive, and edition URLs. The calling AI must research and author the source-grounded edition first; this tool validates, renders, and persists it. For an existing edition, pass its current baseRevision. Requires an idempotencyKey; this is not the neutral wiki write tool.",
8250
+ inputSchema: CommonsPublishEditorialInputSchema,
8251
+ outputSchema: recordOutputSchema("commons_publish_editorial", CommonsGenericOutputSchema),
8252
+ annotations: { title: "Publish Transparent Commons Editorial Edition", readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: true }
8253
+ }, async (input) => executor.commonsPublishEditorial(input));
8254
+ server.registerTool("commons_get_publication", {
8255
+ title: "Get Transparent Commons Publication",
8256
+ description: "Read a Transparent Commons publication and its latest edition revisions. Omit subdomain to inspect the caller-owned publication; pass a name to inspect a public publication. Returns the permanent public and archive URLs needed for sharing or later edits.",
8257
+ inputSchema: CommonsGetPublicationInputSchema,
8258
+ outputSchema: recordOutputSchema("commons_get_publication", CommonsGenericOutputSchema),
8259
+ annotations: { title: "Get Transparent Commons Publication", readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false }
8260
+ }, async (input) => executor.commonsGetPublication(input));
8032
8261
  server.registerTool("directory_workflow", {
8033
8262
  title: "Directory Workflow: Markets + Maps",
8034
8263
  description: `Start a durable directory/prospecting job: selects US city markets from versioned hosted Census-place data, optionally joins the active hosted ZIP dataset, then runs Google Maps business searches per city. Pass a new idempotencyKey for each intended job and reuse it only when retrying that call. Production does not read server-local location CSVs. Always returns a background jobId; poll with directory_workflow_status. ${fileBehavior("Saves a CSV of results per city.", "Completed jobs return an owner-scoped CSV artifact.")}`,
@@ -8864,6 +9093,28 @@ var HttpMcpToolExecutor = class {
8864
9093
  commonsListNeedsLinks(input) {
8865
9094
  return this.call("/commons/needs-links/search", input);
8866
9095
  }
9096
+ commonsPreparePublication(input) {
9097
+ return this.call("/commons/publications/prepare", input);
9098
+ }
9099
+ commonsValidatePublication(input) {
9100
+ return this.call("/commons/publications/validate", input);
9101
+ }
9102
+ commonsClaimPublication(input) {
9103
+ const { idempotencyKey, ...body } = input;
9104
+ return this.call("/commons/publications/claim", { ...body, idempotencyKey }, this.timeoutMs, "POST", {
9105
+ "Idempotency-Key": `commons-publication-claim-${createHash4("sha256").update(idempotencyKey).digest("hex")}`
9106
+ });
9107
+ }
9108
+ commonsPublishEditorial(input) {
9109
+ const { idempotencyKey, ...body } = input;
9110
+ return this.call("/commons/publications/publish", { ...body, idempotencyKey }, this.timeoutMs, "POST", {
9111
+ "Idempotency-Key": `commons-publication-publish-${createHash4("sha256").update(idempotencyKey).digest("hex")}`
9112
+ });
9113
+ }
9114
+ commonsGetPublication(input) {
9115
+ const query = new URLSearchParams({ includeEditions: String(input.includeEditions ?? true) });
9116
+ return this.getJson(input.subdomain ? `/commons/publications/${encodeURIComponent(input.subdomain)}?${query}` : `/commons/publications/me?${query}`);
9117
+ }
8867
9118
  async captureSerpSnapshot(input) {
8868
9119
  const fingerprint = createHash4("sha256").update(JSON.stringify(input)).digest("hex");
8869
9120
  const now = Date.now();
@@ -13144,40 +13395,40 @@ function annotations(title, readOnlyHint, destructiveHint = false, idempotentHin
13144
13395
  }
13145
13396
  function registerScheduledResultsMcpTools(server, executor) {
13146
13397
  server.registerTool("list_artifact_templates", {
13147
- title: "List Artifact Templates",
13148
- description: "List approved built-in artifact presets and saved immutable template versions. A preset must be saved before an automation can select it.",
13398
+ title: "List Templates",
13399
+ description: "List registered presentation presets and saved immutable template versions. A preset must be saved before an automation can select it.",
13149
13400
  inputSchema: z9.object({
13150
13401
  status: z9.enum(["active", "archived", "all"]).default("active")
13151
13402
  }).strict(),
13152
13403
  outputSchema: recordOutputSchema("list_artifact_templates", McpListArtifactTemplatesOutputSchema),
13153
- annotations: annotations("List Artifact Templates", true)
13404
+ annotations: annotations("List Templates", true)
13154
13405
  }, (input) => executor.call(
13155
13406
  `/artifact-templates?status=${encodeURIComponent(input.status)}`,
13156
13407
  ListArtifactTemplatesOutputSchema
13157
13408
  ));
13158
13409
  server.registerTool("get_artifact_template", {
13159
- title: "Get Artifact Template",
13160
- description: "Read one saved artifact template and its immutable version history.",
13410
+ title: "Get Template",
13411
+ description: "Read one saved template, its renderer family, configuration, and immutable version history.",
13161
13412
  inputSchema: z9.object({ templateId: TemplateIdSchema }).strict(),
13162
13413
  outputSchema: recordOutputSchema("get_artifact_template", McpArtifactTemplateOutputSchema),
13163
- annotations: annotations("Get Artifact Template", true)
13414
+ annotations: annotations("Get Template", true)
13164
13415
  }, (input) => executor.call(
13165
13416
  `/artifact-templates/${encodeURIComponent(input.templateId)}`,
13166
13417
  ArtifactTemplateOutputSchema
13167
13418
  ));
13168
13419
  server.registerTool("create_artifact_template", {
13169
- title: "Save Artifact Template",
13170
- description: "Save the approved Editorial Reading Room preset as a user-owned template version 1. Arbitrary HTML, JavaScript, and executable code are not accepted.",
13420
+ title: "Create Template",
13421
+ description: "Create a user-owned template from a registered preset. Customize supported flags and presentation guidance; arbitrary executable code is not accepted.",
13171
13422
  inputSchema: CreateArtifactTemplateInputSchema,
13172
13423
  outputSchema: recordOutputSchema("create_artifact_template", McpArtifactTemplateOutputSchema),
13173
- annotations: annotations("Save Artifact Template", false)
13424
+ annotations: annotations("Create Template", false)
13174
13425
  }, (input) => executor.call("/artifact-templates", ArtifactTemplateOutputSchema, "POST", input));
13175
13426
  server.registerTool("update_artifact_template", {
13176
- title: "Create Artifact Template Version",
13177
- description: "Create the next immutable version of a saved artifact template. Existing automations remain pinned to their exact prior version until explicitly changed.",
13427
+ title: "Update Template",
13428
+ description: "Create the next immutable version of a saved template. Existing automations remain pinned to their exact prior version until explicitly changed.",
13178
13429
  inputSchema: UpdateArtifactTemplateToolInputSchema,
13179
13430
  outputSchema: recordOutputSchema("update_artifact_template", McpArtifactTemplateOutputSchema),
13180
- annotations: annotations("Create Artifact Template Version", false)
13431
+ annotations: annotations("Update Template", false)
13181
13432
  }, (input) => {
13182
13433
  const { templateId, ...body } = input;
13183
13434
  UpdateArtifactTemplateInputSchema.parse(body);
@@ -13189,14 +13440,14 @@ function registerScheduledResultsMcpTools(server, executor) {
13189
13440
  );
13190
13441
  });
13191
13442
  server.registerTool("archive_artifact_template", {
13192
- title: "Archive Artifact Template",
13443
+ title: "Archive Template",
13193
13444
  description: "Archive or restore a saved template without deleting its immutable versions. Existing pinned automations continue to work.",
13194
13445
  inputSchema: z9.object({
13195
13446
  templateId: TemplateIdSchema,
13196
13447
  archived: z9.boolean()
13197
13448
  }).strict(),
13198
13449
  outputSchema: recordOutputSchema("archive_artifact_template", McpArtifactTemplateOutputSchema),
13199
- annotations: annotations("Archive Artifact Template", false, false, true)
13450
+ annotations: annotations("Archive Template", false, false, true)
13200
13451
  }, (input) => executor.call(
13201
13452
  `/artifact-templates/${encodeURIComponent(input.templateId)}/${input.archived ? "archive" : "restore"}`,
13202
13453
  ArtifactTemplateOutputSchema,
@@ -13317,8 +13568,10 @@ export {
13317
13568
  WaybackTimelineSchema,
13318
13569
  WaybackInventoryOptionsSchema,
13319
13570
  SERVER_INSTRUCTIONS,
13320
- ArtifactTemplateConfigSchema,
13571
+ EditorialArtifactTemplateConfigSchema,
13572
+ PersonalAuthorityTemplateConfigSchema,
13321
13573
  EditorialReadingRoomV1InputSchema,
13574
+ PersonalAuthorityV1InputSchema,
13322
13575
  CreateArtifactTemplateInputSchema,
13323
13576
  UpdateArtifactTemplateInputSchema,
13324
13577
  ListScheduledRunsQuerySchema,
@@ -13327,9 +13580,14 @@ export {
13327
13580
  CreateScheduledRunViewLinkInputSchema,
13328
13581
  PublicScheduledRunTokenSchema,
13329
13582
  ApiErrorResponseSchema,
13330
- SCHEDULED_ARTIFACT_TEMPLATE_PRESET,
13583
+ EDITORIAL_READING_ROOM_TEMPLATE_PRESET,
13584
+ PERSONAL_AUTHORITY_TEMPLATE_PRESET,
13331
13585
  CreateEditorialReadingRoomInputSchema,
13332
13586
  RenewEditorialReadingRoomDownloadInputSchema,
13587
+ CommonsPreparePublicationInputSchema,
13588
+ CommonsValidatePublicationInputSchema,
13589
+ CommonsClaimPublicationInputSchema,
13590
+ CommonsPublishEditorialInputSchema,
13333
13591
  resolveDeploymentProfile,
13334
13592
  isLoopbackBaseUrl,
13335
13593
  permitsLocalNetworkAccess,
@@ -13346,4 +13604,4 @@ export {
13346
13604
  ScheduledResultsMcpExecutor,
13347
13605
  registerScheduledResultsMcpTools
13348
13606
  };
13349
- //# sourceMappingURL=chunk-FQIICRR4.js.map
13607
+ //# sourceMappingURL=chunk-XCGQBGDA.js.map