diff --git a/public/appicons/io.pilot.primitive.png b/public/appicons/io.pilot.primitive.png new file mode 100644 index 00000000..03f3f94d Binary files /dev/null and b/public/appicons/io.pilot.primitive.png differ diff --git a/scripts/gen-apps.mjs b/scripts/gen-apps.mjs index ac24c54a..c0794c63 100644 --- a/scripts/gen-apps.mjs +++ b/scripts/gen-apps.mjs @@ -27,7 +27,7 @@ const CATEGORIES = [ { id: 'infra', name: 'Infrastructure', blurb: 'Containers, microVMs, and deploys — the compute layer for agents.', hue: 30 }, { id: 'security', name: 'Security', blurb: 'Guardrails and firewalls for agents and their inputs.', hue: 5 }, { id: 'finance', name: 'Finance & Payments', blurb: 'Settle value on-overlay and read the markets.', hue: 155 }, - { id: 'comms', name: 'Communications', blurb: 'Give an agent its own phone number — voice, SMS/iMessage, and threaded conversations.', hue: 315 }, + { id: 'comms', name: 'Communications', blurb: 'Give an agent its own phone number or email inbox — voice, SMS/iMessage, email, and threaded conversations.', hue: 315 }, ]; const CAT_HUE = Object.fromEntries(CATEGORIES.map((c) => [c.id, c.hue])); @@ -38,7 +38,7 @@ const CATMAP = { 'io.pilot.smol': 'infra', 'io.pilot.miren': 'infra', 'io.pilot.docker': 'infra', 'io.pilot.aegis': 'security', 'io.pilot.didit': 'security', 'io.pilot.slipstream': 'finance', 'io.pilot.wallet': 'finance', - 'io.pilot.agentphone': 'comms', + 'io.pilot.agentphone': 'comms', 'io.pilot.primitive': 'comms', }; // ---------- icons: brand mark (Simple Icons), line glyph (Lucide), or real logo image ---------- @@ -63,6 +63,7 @@ const ICON_MAP = { 'io.pilot.bowmark': { image: 'png', fit: 'cover', bg: '#0b0b0a' }, 'io.pilot.orthogonal': { image: 'png', fit: 'cover', bg: '#e3e6df' }, 'io.pilot.agentphone': { image: 'png', fit: 'contain', bg: '#26B65A' }, + 'io.pilot.primitive': { image: 'png', fit: 'cover', bg: '#111110' }, }; function relLum(hex) { @@ -88,7 +89,7 @@ function iconFor(id, hue) { // ---------- presentation config ---------- const APP_IDS = [ - 'io.pilot.agentphone', + 'io.pilot.primitive', 'io.pilot.agentphone', 'io.pilot.postgres', 'io.pilot.duckdb', 'io.pilot.sqlite', 'io.pilot.mysql', 'io.pilot.redis', 'io.pilot.sixtyfour', 'io.pilot.cosift', 'io.telepat.ideon-free', 'io.pilot.plainweb', 'io.pilot.otto', 'io.pilot.smol', 'io.pilot.miren', 'io.pilot.docker', 'io.pilot.aegis', @@ -112,7 +113,7 @@ function build(id) { const o = overrides[id] || {}; const cat = CATMAP[id]; const platforms = o.platforms || (LINUX_ONLY.has(id) ? ['linux-arm64', 'linux-amd64'] : ALL_PLATFORMS); - const methods = (methodsMap[id] || []).map((m) => ({ name: m.name, summary: m.summary || null })); + const methods = (methodsMap[id] || []).map((m) => ({ name: m.name, summary: m.summary || null, example: m.example || null, gated: m.gated || null })); return { id, name: o.name || id, @@ -142,6 +143,7 @@ function build(id) { runtimes: o.runtimes || ['go'], publishedAt: o.publishedAt ? String(o.publishedAt).slice(0, 10) : null, updatedAt: o.publishedAt ? String(o.publishedAt).slice(0, 10) : null, + limits: o.limits || null, }; } @@ -149,7 +151,8 @@ const apps = APP_IDS.map(build); const banner = `// AUTO-GENERATED by scripts/gen-apps.mjs from authoritative catalogue snapshots\n// (src/data/app-overrides.json + app-methods.json). Do not edit by hand.\n// No ratings or install counts — those are not published by the catalogue.\n`; const body = `${banner} -export interface AppMethod { name: string; summary: string | null; } +export interface AppMethod { name: string; summary: string | null; example: string | null; gated: string | null; } +export interface AppLimit { label: string; value: string; } export interface AppChangelog { version: string; date?: string | null; notes: string[]; } export interface AppBundle { platform: string; bytes: number | null; } export interface AppDependency { id: string; reason: string; optional?: boolean; } @@ -165,6 +168,7 @@ export interface App { featured: boolean; real: boolean; inCatalogue: boolean; icon: AppIcon; minPilotVersion: string; runtimes: string[]; publishedAt: string | null; updatedAt: string | null; + limits: AppLimit[] | null; } export interface Category { id: string; name: string; blurb: string; hue: number; } diff --git a/src/data/app-methods.json b/src/data/app-methods.json index b5c88833..10c45dfd 100644 --- a/src/data/app-methods.json +++ b/src/data/app-methods.json @@ -1,4 +1,666 @@ { +"io.pilot.primitive": [ +{ +"name": "primitive.signup", +"summary": "Provision your own Primitive account and a managed *.primitive.email inbox in ONE call \u2014 no email, no code, no human step", +"example": "{}", +"gated": null +}, +{ +"name": "primitive.get_account", +"summary": "Get account info", +"example": "{}", +"gated": null +}, +{ +"name": "primitive.update_account", +"summary": "Update account settings", +"example": "{\"spam_threshold\": 10, \"discard_content_on_webhook_confirmed\": true}", +"gated": null +}, +{ +"name": "primitive.get_storage_stats", +"summary": "Get storage usage", +"example": "{}", +"gated": null +}, +{ +"name": "primitive.get_webhook_secret", +"summary": "Get webhook signing secret", +"example": "{}", +"gated": null +}, +{ +"name": "primitive.rotate_webhook_secret", +"summary": "Rotate webhook signing secret", +"example": "{}", +"gated": null +}, +{ +"name": "primitive.list_domains", +"summary": "List all domains", +"example": "{}", +"gated": null +}, +{ +"name": "primitive.add_domain", +"summary": "Claim a new domain", +"example": "{\"domain\": \"\", \"confirmed\": true, \"outbound\": true}", +"gated": "requires a custom domain whose DNS you control \u2014 the managed *.primitive.email inbox needs no domain setup" +}, +{ +"name": "primitive.update_domain", +"summary": "Update domain settings", +"example": "{\"id\": \"\", \"is_active\": true, \"spam_threshold\": 10}", +"gated": null +}, +{ +"name": "primitive.delete_domain", +"summary": "Delete a domain", +"example": "{\"id\": \"\"}", +"gated": null +}, +{ +"name": "primitive.verify_domain", +"summary": "Verify domain ownership", +"example": "{\"id\": \"\"}", +"gated": "requires a custom domain whose DNS you control" +}, +{ +"name": "primitive.download_domain_zone_file", +"summary": "Download domain DNS zone file", +"example": "{\"id\": \"\", \"outbound_only\": true}", +"gated": "requires a custom domain whose DNS you control" +}, +{ +"name": "primitive.get_inbox_status", +"summary": "Get inbound inbox readiness", +"example": "{}", +"gated": null +}, +{ +"name": "primitive.list_emails", +"summary": "List inbound emails", +"example": "{\"cursor\": \"\", \"limit\": 20, \"domain_id\": \"\", \"status\": \"\", \"search\": \"search terms\", \"date_from\": \"\", \"date_to\": \"\"}", +"gated": null +}, +{ +"name": "primitive.search_emails", +"summary": "Search inbound emails", +"example": "{\"q\": \"search terms\", \"from\": \"you@your-inbox.primitive.email\", \"to\": \"someone@example.com\", \"subject\": \"Subject line\", \"body\": \"\", \"domain_id\": \"\", \"reply_to_sent_email_id\": \"\"}", +"gated": null +}, +{ +"name": "primitive.get_email", +"summary": "Get inbound email by id", +"example": "{\"id\": \"\"}", +"gated": null +}, +{ +"name": "primitive.delete_email", +"summary": "Delete an email", +"example": "{\"id\": \"\"}", +"gated": null +}, +{ +"name": "primitive.download_raw_email", +"summary": "Download raw email", +"example": "{\"id\": \"\", \"token\": \"\"}", +"gated": null +}, +{ +"name": "primitive.download_attachments", +"summary": "Download email attachments", +"example": "{\"id\": \"\", \"token\": \"\"}", +"gated": null +}, +{ +"name": "primitive.reply_to_email", +"summary": "Reply to an inbound email", +"example": "{\"id\": \"\", \"body_text\": \"Plain-text body\", \"body_html\": \"

HTML body

\", \"from\": \"you@your-inbox.primitive.email\", \"wait\": 30, \"attachments\": [\"...\"]}", +"gated": null +}, +{ +"name": "primitive.replay_email_webhooks", +"summary": "Replay email webhooks", +"example": "{\"id\": \"\"}", +"gated": null +}, +{ +"name": "primitive.discard_email_content", +"summary": "Discard email content", +"example": "{\"id\": \"\"}", +"gated": null +}, +{ +"name": "primitive.get_conversation", +"summary": "Get the conversation an email belongs to", +"example": "{\"id\": \"\"}", +"gated": null +}, +{ +"name": "primitive.list_endpoints", +"summary": "List webhook endpoints", +"example": "{}", +"gated": null +}, +{ +"name": "primitive.create_endpoint", +"summary": "Create a webhook endpoint", +"example": "{\"kind\": \"http\", \"url\": \"https://example.com/webhook\", \"function_id\": \"\", \"enabled\": true, \"domain_id\": \"\", \"rules\": {\"...\": \"...\"}, \"is_route_target\": true}", +"gated": null +}, +{ +"name": "primitive.update_endpoint", +"summary": "Update a webhook endpoint", +"example": "{\"id\": \"\", \"url\": \"https://example.com/webhook\", \"enabled\": true, \"domain_id\": \"\", \"rules\": {\"...\": \"...\"}}", +"gated": null +}, +{ +"name": "primitive.delete_endpoint", +"summary": "Delete a webhook endpoint", +"example": "{\"id\": \"\"}", +"gated": null +}, +{ +"name": "primitive.test_endpoint", +"summary": "Send a test webhook", +"example": "{\"id\": \"\"}", +"gated": null +}, +{ +"name": "primitive.list_filters", +"summary": "List filter rules", +"example": "{}", +"gated": null +}, +{ +"name": "primitive.create_filter", +"summary": "Create a filter rule", +"example": "{\"type\": \"whitelist\", \"pattern\": \"*@example.com\", \"domain_id\": \"\"}", +"gated": null +}, +{ +"name": "primitive.update_filter", +"summary": "Update a filter rule", +"example": "{\"id\": \"\", \"enabled\": true}", +"gated": null +}, +{ +"name": "primitive.delete_filter", +"summary": "Delete a filter rule", +"example": "{\"id\": \"\"}", +"gated": null +}, +{ +"name": "primitive.list_wake_schedules", +"summary": "List wake schedules", +"example": "{}", +"gated": "requires a plan/entitlement upgrade \u2014 Wake scheduling is not on the free agent plan" +}, +{ +"name": "primitive.create_wake_schedule", +"summary": "Create a wake schedule", +"example": "{\"from_address\": \"\", \"target_address\": \"\", \"command\": \"\", \"cron_expr\": \"\", \"args\": {\"...\": \"...\"}, \"timezone\": \"\", \"note\": \"\"}", +"gated": "requires a plan/entitlement upgrade \u2014 Wake scheduling is not on the free agent plan" +}, +{ +"name": "primitive.get_wake_schedule", +"summary": "Get a wake schedule", +"example": "{\"id\": \"\"}", +"gated": "requires a plan/entitlement upgrade \u2014 Wake scheduling is not on the free agent plan" +}, +{ +"name": "primitive.update_wake_schedule", +"summary": "Update a wake schedule", +"example": "{\"id\": \"\", \"enabled\": true, \"command\": \"\", \"args\": {\"...\": \"...\"}, \"cron_expr\": \"\", \"timezone\": \"\", \"from_address\": \"\"}", +"gated": "requires a plan/entitlement upgrade \u2014 Wake scheduling is not on the free agent plan" +}, +{ +"name": "primitive.delete_wake_schedule", +"summary": "Delete a wake schedule", +"example": "{\"id\": \"\"}", +"gated": "requires a plan/entitlement upgrade \u2014 Wake scheduling is not on the free agent plan" +}, +{ +"name": "primitive.run_wake_schedule", +"summary": "Run a wake schedule now", +"example": "{\"id\": \"\"}", +"gated": "requires a plan/entitlement upgrade \u2014 Wake scheduling is not on the free agent plan" +}, +{ +"name": "primitive.list_wake_authorizations", +"summary": "List wake authorizations", +"example": "{\"recipient_endpoint_id\": \"\"}", +"gated": "requires a plan/entitlement upgrade \u2014 Wake scheduling is not on the free agent plan" +}, +{ +"name": "primitive.create_wake_authorization", +"summary": "Create a wake authorization", +"example": "{\"recipient_endpoint_id\": \"\", \"allowed_sender_domain\": \"\", \"allowed_sender_address\": \"\", \"allowed_commands\": [\"...\"], \"note\": \"\"}", +"gated": "requires a plan/entitlement upgrade \u2014 Wake scheduling is not on the free agent plan" +}, +{ +"name": "primitive.update_wake_authorization", +"summary": "Update a wake authorization", +"example": "{\"id\": \"\", \"enabled\": true}", +"gated": "requires a plan/entitlement upgrade \u2014 Wake scheduling is not on the free agent plan" +}, +{ +"name": "primitive.delete_wake_authorization", +"summary": "Delete a wake authorization", +"example": "{\"id\": \"\"}", +"gated": "requires a plan/entitlement upgrade \u2014 Wake scheduling is not on the free agent plan" +}, +{ +"name": "primitive.list_wake_dispatches", +"summary": "List recent wake dispatches", +"example": "{\"limit\": 20}", +"gated": "requires a plan/entitlement upgrade \u2014 Wake scheduling is not on the free agent plan" +}, +{ +"name": "primitive.list_routes", +"summary": "List recipient routes", +"example": "{}", +"gated": "requires the recipient-routing feature \u2014 disabled on the free agent plan (the managed inbox routes to storage automatically)" +}, +{ +"name": "primitive.create_route", +"summary": "Create a recipient route", +"example": "{\"match_type\": \"to\", \"pattern\": \"*@example.com\", \"endpoint_id\": \"\", \"function_id\": \"\", \"domain_id\": \"\", \"priority\": 0, \"enabled\": true}", +"gated": "requires the recipient-routing feature \u2014 disabled on the free agent plan (the managed inbox routes to storage automatically)" +}, +{ +"name": "primitive.reorder_routes", +"summary": "Reorder recipient routes", +"example": "{\"updates\": [\"...\"]}", +"gated": "requires the recipient-routing feature \u2014 disabled on the free agent plan (the managed inbox routes to storage automatically)" +}, +{ +"name": "primitive.simulate_route", +"summary": "Simulate routing for a recipient", +"example": "{\"recipient\": \"someone@example.com\", \"event_type\": \"\"}", +"gated": "requires the recipient-routing feature \u2014 disabled on the free agent plan (the managed inbox routes to storage automatically)" +}, +{ +"name": "primitive.update_route", +"summary": "Update a recipient route", +"example": "{\"id\": \"\", \"match_type\": \"to\", \"pattern\": \"*@example.com\", \"endpoint_id\": \"\", \"domain_id\": \"\", \"priority\": 0, \"enabled\": true}", +"gated": "requires the recipient-routing feature \u2014 disabled on the free agent plan (the managed inbox routes to storage automatically)" +}, +{ +"name": "primitive.delete_route", +"summary": "Delete a recipient route", +"example": "{\"id\": \"\"}", +"gated": "requires the recipient-routing feature \u2014 disabled on the free agent plan (the managed inbox routes to storage automatically)" +}, +{ +"name": "primitive.list_deliveries", +"summary": "List webhook deliveries", +"example": "{\"cursor\": \"\", \"limit\": 20, \"email_id\": \"\", \"status\": \"\", \"date_from\": \"\", \"date_to\": \"\"}", +"gated": null +}, +{ +"name": "primitive.replay_delivery", +"summary": "Replay a webhook delivery", +"example": "{\"id\": \"\"}", +"gated": null +}, +{ +"name": "primitive.get_send_permissions", +"summary": "List send-permission rules", +"example": "{}", +"gated": null +}, +{ +"name": "primitive.send_email", +"summary": "Send outbound email", +"example": "{\"from\": \"you@your-inbox.primitive.email\", \"to\": \"someone@example.com\", \"subject\": \"Subject line\", \"body_text\": \"Plain-text body\", \"body_html\": \"

HTML body

\", \"in_reply_to\": \"\", \"references\": [\"...\"]}", +"gated": null +}, +{ +"name": "primitive.semantic_search", +"summary": "Semantic search across received and sent mail", +"example": "{\"query\": \"search terms\", \"mode\": \"\", \"corpus\": [\"...\"], \"search_in\": [\"...\"], \"exclude\": [\"...\"], \"date_from\": \"\", \"date_to\": \"\"}", +"gated": "requires the Pro plan \u2014 semantic search over mail is not on the free agent plan" +}, +{ +"name": "primitive.list_sent_emails", +"summary": "List outbound sent emails", +"example": "{\"cursor\": \"\", \"limit\": 20, \"status\": \"\", \"request_id\": \"\", \"idempotency_key\": \"\", \"date_from\": \"\", \"date_to\": \"\"}", +"gated": null +}, +{ +"name": "primitive.get_sent_email", +"summary": "Get a sent email by id", +"example": "{\"id\": \"\"}", +"gated": null +}, +{ +"name": "primitive.get_thread", +"summary": "Get a conversation thread by id", +"example": "{\"id\": \"\"}", +"gated": null +}, +{ +"name": "primitive.list_functions", +"summary": "List functions", +"example": "{}", +"gated": "requires the developer plan \u2014 confirm an email at primitive.dev to upgrade; hosted Functions are not on the free agent plan" +}, +{ +"name": "primitive.create_function", +"summary": "Deploy a function", +"example": "{\"name\": \"\", \"code\": \"\", \"sourceMap\": \"\", \"files\": {\"...\": \"...\"}}", +"gated": "requires the developer plan \u2014 confirm an email at primitive.dev to upgrade; hosted Functions are not on the free agent plan" +}, +{ +"name": "primitive.get_function", +"summary": "Get a function", +"example": "{\"id\": \"\"}", +"gated": "requires the developer plan \u2014 confirm an email at primitive.dev to upgrade; hosted Functions are not on the free agent plan" +}, +{ +"name": "primitive.update_function", +"summary": "Update and redeploy a function", +"example": "{\"id\": \"\", \"code\": \"\", \"sourceMap\": \"\", \"files\": {\"...\": \"...\"}}", +"gated": "requires the developer plan \u2014 confirm an email at primitive.dev to upgrade; hosted Functions are not on the free agent plan" +}, +{ +"name": "primitive.delete_function", +"summary": "Delete a function", +"example": "{\"id\": \"\"}", +"gated": "requires the developer plan \u2014 confirm an email at primitive.dev to upgrade; hosted Functions are not on the free agent plan" +}, +{ +"name": "primitive.test_function", +"summary": "Send a test invocation", +"example": "{\"id\": \"\", \"local_part\": \"\"}", +"gated": "requires the developer plan \u2014 confirm an email at primitive.dev to upgrade; hosted Functions are not on the free agent plan" +}, +{ +"name": "primitive.get_function_test_run_trace", +"summary": "Get a function test run trace", +"example": "{\"id\": \"\", \"run_id\": \"\"}", +"gated": "requires the developer plan \u2014 confirm an email at primitive.dev to upgrade; hosted Functions are not on the free agent plan" +}, +{ +"name": "primitive.get_org_routing_topology", +"summary": "Get the org's function routing topology", +"example": "{}", +"gated": "requires the developer plan \u2014 confirm an email at primitive.dev to upgrade; hosted Functions are not on the free agent plan" +}, +{ +"name": "primitive.get_function_routing", +"summary": "Get a function's current route binding", +"example": "{\"id\": \"\"}", +"gated": "requires the developer plan \u2014 confirm an email at primitive.dev to upgrade; hosted Functions are not on the free agent plan" +}, +{ +"name": "primitive.set_function_route", +"summary": "Bind a route to a function", +"example": "{\"id\": \"\", \"target\": {\"...\": \"...\"}, \"takeover\": true}", +"gated": "requires the developer plan \u2014 confirm an email at primitive.dev to upgrade; hosted Functions are not on the free agent plan" +}, +{ +"name": "primitive.unset_function_route", +"summary": "Unbind any route from a function", +"example": "{\"id\": \"\"}", +"gated": "requires the developer plan \u2014 confirm an email at primitive.dev to upgrade; hosted Functions are not on the free agent plan" +}, +{ +"name": "primitive.list_function_secrets", +"summary": "List a function's secrets", +"example": "{\"id\": \"\"}", +"gated": "requires the developer plan \u2014 confirm an email at primitive.dev to upgrade; hosted Functions are not on the free agent plan" +}, +{ +"name": "primitive.create_function_secret", +"summary": "Create or update a secret", +"example": "{\"id\": \"\", \"key\": \"namespace/key\", \"value\": {\"any\": \"json\"}}", +"gated": "requires the developer plan \u2014 confirm an email at primitive.dev to upgrade; hosted Functions are not on the free agent plan" +}, +{ +"name": "primitive.set_function_secret", +"summary": "Set a secret by key", +"example": "{\"id\": \"\", \"key\": \"namespace/key\", \"value\": {\"any\": \"json\"}}", +"gated": "requires the developer plan \u2014 confirm an email at primitive.dev to upgrade; hosted Functions are not on the free agent plan" +}, +{ +"name": "primitive.delete_function_secret", +"summary": "Delete a secret", +"example": "{\"id\": \"\", \"key\": \"namespace/key\"}", +"gated": "requires the developer plan \u2014 confirm an email at primitive.dev to upgrade; hosted Functions are not on the free agent plan" +}, +{ +"name": "primitive.list_org_secrets", +"summary": "List org-level (global) secrets", +"example": "{}", +"gated": "requires the developer plan \u2014 confirm an email at primitive.dev to upgrade; hosted Functions are not on the free agent plan" +}, +{ +"name": "primitive.create_org_secret", +"summary": "Create or update an org secret", +"example": "{\"key\": \"namespace/key\", \"value\": {\"any\": \"json\"}}", +"gated": "requires the developer plan \u2014 confirm an email at primitive.dev to upgrade; hosted Functions are not on the free agent plan" +}, +{ +"name": "primitive.set_org_secret", +"summary": "Set an org secret by key", +"example": "{\"key\": \"namespace/key\", \"value\": {\"any\": \"json\"}}", +"gated": "requires the developer plan \u2014 confirm an email at primitive.dev to upgrade; hosted Functions are not on the free agent plan" +}, +{ +"name": "primitive.delete_org_secret", +"summary": "Delete an org secret", +"example": "{\"key\": \"namespace/key\"}", +"gated": "requires the developer plan \u2014 confirm an email at primitive.dev to upgrade; hosted Functions are not on the free agent plan" +}, +{ +"name": "primitive.list_function_logs", +"summary": "List a function's execution logs", +"example": "{\"id\": \"\", \"limit\": 20, \"cursor\": \"\"}", +"gated": "requires the developer plan \u2014 confirm an email at primitive.dev to upgrade; hosted Functions are not on the free agent plan" +}, +{ +"name": "primitive.set_memory", +"summary": "Set a memory", +"example": "{\"key\": \"namespace/key\", \"value\": {\"any\": \"json\"}, \"scope\": {\"...\": \"...\"}, \"ttl_seconds\": 10, \"expires_at\": \"\", \"clear_ttl\": true, \"if_absent\": true}", +"gated": null +}, +{ +"name": "primitive.get_memory", +"summary": "Get a memory", +"example": "{\"key\": \"namespace/key\", \"scope_type\": \"\", \"scope_id\": \"\"}", +"gated": null +}, +{ +"name": "primitive.delete_memory", +"summary": "Delete a memory", +"example": "{\"key\": \"namespace/key\", \"scope_type\": \"\", \"scope_id\": \"\", \"if_version\": \"\"}", +"gated": null +}, +{ +"name": "primitive.search_memories", +"summary": "Search memories", +"example": "{\"prefix\": \"search terms\", \"cursor\": \"\", \"limit\": 20, \"include_value\": \"\", \"updated_after\": \"\", \"updated_before\": \"\", \"scope_type\": \"\"}", +"gated": null +}, +{ +"name": "primitive.register_payout_address", +"summary": "Register a payout address", +"example": "{\"address\": \"someone@example.com\", \"network\": \"\", \"signature\": \"\", \"issued_at\": \"\", \"label\": \"