Hi Apple engineering team,
I’m trying to integrate the new Live Caller ID Lookup (PIR) on iOS using your pir-service-example code as well as a custom mock server in Vapor, but the extension never advances past the /issue/token-key-for-user-token step. I’ve tried both:
1. Official Example
Cloned https://github.com/apple/pir-service-example
Ran PIRService locally
Confirmed that
GET /.well-known/private-token-issuer-directory → 200
GET /issue/token-key-for-user-token → 200 (DER bytes, correct SPKI)
No POST /issue ever fires
2. Mock Server (Vapor)
Implemented all five endpoints (/config, /.well-known/private-token-issuer-directory, /issue/token-key-for-user-token, /issue, /queries)
Verified with curl and openssl asn1parse that:
GET /.well-known/private-token-issuer-directory
Content-Type: application/private-token-issuer-directory
{ "issuer-request-uri":"https://…/issue", "token-keys":[…] }
GET /issue/token-key-for-user-token
Content-Type: application/octet-stream
<DER bytes>
Added Cache-Control: public, max-age=3600 on directory and SPKI
Stubbed POST /issue to always return { "token": "" }
Still no POST /issue request from the extension
Reproduction Steps
Install and enable a Live Lookup extension pointing to my server.
Trigger an incoming call on device.
Watch server logs—only see the two GETs, never /issue or /queries.
Expected Behavior
After fetching the SPKI DER, the framework should issue a POST /issue call (Privacy Pass flow) and then POST /queries.
Observed Behavior
Stuck in an infinite loop of:
GET /.well-known/private-token-issuer-directory
GET /issue/token-key-for-user-token
(repeat…)
No progression to the /issue or /queries endpoints.
What I’ve Tried
Verified JSON kebab-case and headers exactly match examples
Confirmed SPKI DER is valid via openssl asn1parse
Added Cache-Control headers
Tested on real device, localhost url, and ngrok public URL
Mocked a valid-looking token response
Could you advise what additional requirement or format detail I’m missing that prevents from advancing past /issue/token-key-for-user-token?
These are the main files:
LiveLookupExtension.swift
routes.swift
service-config.json
Thanks in advance!
Selecting any option will automatically load the page