Skip to content
GitHub

Continue a grant request

During a grant request flow, an authorization server can require an individual (typically a client’s end user) to approve the grant by interacting directly with the server. For example, by tapping an Approve button on a web page provided by the auth server.

After the individual approves the grant, the auth server sends the client an interaction reference. The client must send a continuation request containing the reference back to the authorization server to obtain an access token.

These code snippets enable an authorized client to send a grant continuation request to the authorization server.

Before you begin

We recommend creating a wallet account on the test wallet. Creating an account allows you to test your client against the Open Payments APIs by using an ILP-enabled wallet funded with play money.

Issue grant continuation request

Prerequisites

Additional configuration

Add "type": "module" to package.json

Add the following to tsconfig.json

{
"compilerOptions": {
"target": "ES2022",
"module": "ES2022"
}
}

Import createAuthenticatedClient from the Open Payments SDK

Import dependencies

import { createAuthenticatedClient } from "@interledger/open-payments";
Copied!

Create an authenticated Open Payments client

Create an Open Payments-authenticated client by providing the following properties:

  • walletAddressURL : your Open Payments-enabled wallet address that your client will use to authenticate itself to one or more authorization servers.
  • privateKey : the EdDSA-Ed25519 key or preferably the absolute or relative file path to the key that is bound to your wallet address. A public key signed with this private key must be made available as a public JWK document at {walletAddressUrl}/jwks.json url.
  • keyId : the identifier of the private key and the corresponding public key.

Initialize Open Payments client

const client = await createAuthenticatedClient({
  walletAddressUrl: WALLET_ADDRESS,
  privateKey: PRIVATE_KEY_PATH,
  keyId: KEY_ID,
});
Copied!

Get started

Import dependencies

import {
  createAuthenticatedClient,
  isFinalizedGrant,
} from "@interledger/open-payments";
Copied!

Initialize Open Payments client

const client = await createAuthenticatedClient({
  walletAddressUrl: WALLET_ADDRESS,
  privateKey: PRIVATE_KEY_PATH,
  keyId: KEY_ID,
});
Copied!

Continue grant

const grant = await client.grant.continue(
  {
    accessToken: CONTINUE_ACCESS_TOKEN,
    url: CONTINUE_URI,
  },
  {
    interact_ref: interactRef,
  },
);
Copied!

Check grant state

if (!isFinalizedGrant(grant)) {
  throw new Error("Expected finalized grant. Received non-finalized grant.");
}
Copied!

Output

console.log("OUTGOING_PAYMENT_ACCESS_TOKEN =", grant.access_token.value);
console.log(
  "OUTGOING_PAYMENT_ACCESS_TOKEN_MANAGE_URL =",
  grant.access_token.manage,
);
Copied!

Run tsx path/to/directory/index.ts.

View full source

References