import { GraphQLClient, gql } from 'graphql-request';
import crypto from 'crypto';
const API_URL = 'https://transactional-graph.staging.fluzapp.com/api/v1/graphql';
const API_KEY = 'your-api-key-here';
const USER_ID = 'user-id-uuid-here';
const ACCOUNT_ID = 'account-id-uuid-here';
const generateUserToken = async (userId, accountId) => {
const client = new GraphQLClient(API_URL, {
headers: {
Authorization: `Basic ${API_KEY}`,
'Content-Type': 'application/json',
},
});
const GENERATE_USER_ACCESS_TOKEN = gql`
mutation generateUserAccessToken(
$userId: UUID!
$accountId: UUID!
$scopes: [ScopeType!]!
$seatId: UUID
) {
generateUserAccessToken(
userId: $userId
accountId: $accountId
scopes: $scopes
seatId: $seatId
) {
token
scopes
}
}
`;
const variables = {
userId,
accountId,
scopes: [
'LIST_PURCHASES',
'REVEAL_GIFTCARD',
'LIST_OFFERS',
'PURCHASE_GIFTCARD',
'LIST_PAYMENT',
'MANAGE_PAYMENT',
'MAKE_DEPOSIT',
],
seatId: null,
};
const res = await client.request(GENERATE_USER_ACCESS_TOKEN, variables);
return res.generateUserAccessToken.token;
};
const purchaseGiftCard = async (userToken, slug, amount) => {
const client = new GraphQLClient(API_URL, {
headers: {
Authorization: `Bearer ${userToken}`,
'Content-Type': 'application/json',
},
});
const PURCHASE_GIFT_CARD = gql`
mutation purchaseGiftCard($input: PurchaseGiftCardInput!) {
purchaseGiftCard(input: $input) {
purchaseId
purchaseDisplayId
purchaseAmount
giftCard {
giftCardId
status
createdAt
}
}
}
`;
const variables = {
input: {
idempotencyKey: crypto.randomUUID(),
amount,
merchantSlug: slug,
minRewardRate: 2.0,
},
};
return client.request(PURCHASE_GIFT_CARD, variables);
};
const revealGiftCard = async (userToken, giftCardId) => {
const client = new GraphQLClient(API_URL, {
headers: {
Authorization: `Bearer ${userToken}`,
'Content-Type': 'application/json',
},
});
const REVEAL_GIFT_CARD = gql`
mutation revealGiftCardByGiftCardId($giftCardId: UUID!) {
revealGiftCardByGiftCardId(giftCardId: $giftCardId) {
code
pin
url
}
}
`;
return client.request(REVEAL_GIFT_CARD, { giftCardId });
};
(async () => {
const userToken = await generateUserToken(USER_ID, ACCOUNT_ID);
const giftCard = await purchaseGiftCard(userToken, 'aero', 10);
const giftCardId = giftCard.purchaseGiftCard.giftCard.giftCardId;
const details = await revealGiftCard(userToken, giftCardId);
console.log('Gift Card Details:', JSON.stringify(details, null, 2));
})();
Gift cards
Purchase a Gift Card
End-to-end example: generate a token, purchase a gift card, and reveal its details.
Complete flow that generates a user access token, purchases a gift card by merchant slug, and reveals the redemption details.
Related: Purchase Gift Cards, Authentication.