import {
  ServerClient,
  createDpopKeyPair,
  createDpopProofFactory,
  exchangeProductAssertion,
} from "@notorganic/sdk";

// Call on a trusted server with a fresh, authorized product assertion.
// Assertions are single-use and valid for no more than 60 seconds.
export async function readWallet(
  assertion: string,
  request: typeof fetch = globalThis.fetch,
) {
  const baseURL = "https://api.notorganic.info";
  const keyPair = await createDpopKeyPair();
  const token = await exchangeProductAssertion(
    baseURL,
    {
      assertion,
      dpop_jwk: keyPair.publicJwk,
      scope: "wallet:read",
    },
    { fetch: request },
  );

  const client = new ServerClient({
    baseURL,
    accessToken: token.access_token,
    dpopProof: createDpopProofFactory(keyPair),
    fetch: request,
  });

  return client.wallet.retrieve();
}
