API reference
ApiProvider
Provides the GraphQL client and session state to the blueprint-api
hooks.
Import
import { ApiProvider } from '@krakentech/blueprint-api/client';
Usage
import { ApiProvider } from '@krakentech/blueprint-api/client';
const App = () => (
<ApiProvider
apiRoute="/api/graphql"
// these can be retrieved from the following `blueprint-auth` package hooks if you are using it
sessionState={sessionState} // `useSession`
handleKrakenErrors={handleKrakenErrors} // `useKrakenAuthErrorHandler`
>
<MyComponent />
</ApiProvider>
);
errorWithMessage
Error with a message and log it to the console.
Import
import { errorWithMessage } from '@krakentech/blueprint-api';
Usage
import { errorWithMessage } from '@krakentech/blueprint-api';
throw errorWithMessage('This is an error message');
getErrorCode
Get the errorCode
from a Kraken error response.
Import
import { getErrorCode } from '@krakentech/blueprint-api';
Usage
import { getErrorCode } from '@krakentech/blueprint-api';
const errorCode = getErrorCode(error);
getErrorType
Get the errorType
from a Kraken error (or the errorClass
if the errorType
is not available).
Import
import { getErrorType } from '@krakentech/blueprint-api';
Usage
import { getErrorType } from '@krakentech/blueprint-api';
const errorType = getErrorType(error);
getKrakenErrorDetails
Get the error details from a Kraken error.
We use the errorTypeToCodeMap
to map the errorCode
to a human-readable errorType
.
Import
import { getKrakenErrorDetails } from '@krakentech/blueprint-api';
Usage
import { getKrakenErrorDetails } from '@krakentech/blueprint-api';
const errorDetails = getKrakenErrorDetails(error);
getResponseErrorMessage
Get the first error message from the response errors
array.
Import
import { getResponseErrorMessage } from '@krakentech/blueprint-api';
Usage
import { getResponseErrorMessage } from '@krakentech/blueprint-api';
const errorMessage = getResponseErrorMessage(response);
isErrorWithMessage
Type guard to check if an error has a message
property.
Import
import { isErrorWithMessage } from '@krakentech/blueprint-api';
Usage
import { isErrorWithMessage } from '@krakentech/blueprint-api';
if (isErrorWithMessage(error)) {
console.log('This error has a message');
}
isKrakenErrorResponse
Type guard to check if an error is a Kraken error response.
Import
import { isKrakenErrorResponse } from '@krakentech/blueprint-api';
Usage
import { isKrakenErrorResponse } from '@krakentech/blueprint-api';
if (isKrakenErrorResponse(error)) {
console.log('This is a Kraken error response');
}
isMappedKrakenErrorCode
Type guard to check if a specific errorCode
is of MappedKrakenErrorCode
type.
Import
import { isMappedKrakenErrorCode } from '@krakentech/blueprint-api';
Usage
import { isMappedKrakenErrorCode } from '@krakentech/blueprint-api';
if (isMappedKrakenErrorCode(error)) {
console.log('This is a mapped Kraken error code');
}
setErrorSearchParam
Utility function to set the 'error' search param in a URL.
Import
import { setErrorSearchParam } from '@krakentech/blueprint-api';
Usage
import { setErrorSearchParam } from '@krakentech/blueprint-api';
setErrorSearchParam({
url,
errorCode,
});
useApi
This context provides the needed GraphQL client and session state to the api hooks. You shouldn't need to use this hook directly, as it is used internally by the other hooks.
Import
import { useApi } from '@krakentech/blueprint-api/client';
Usage
import { useApi } from '@krakentech/blueprint-api/client';
import { useQuery } from '@tanstack/react-query';
const useViewer = () => {
const { graphqlClient } = useApi();
return useQuery({
queryFn: async () => {
const { data } = await graphqlClient.request(`
query {
viewer {
id
email
}
}
`);
return data.viewer;
},
...
})
};
useInfiniteKrakenQuery
This hook provides a query function that can be used to send a GraphQL query to the Kraken API, with infinite pagination.
Import
import { useInfiniteKrakenQuery } from '@krakentech/blueprint-api/client';
Usage
import { useInfiniteKrakenQuery } from '@krakentech/blueprint-api/client';
import { graphql } from 'gql.tada';
const useUsers = () => {
const { graphqlClient } = useApi();
return useInfiniteKrakenQuery({
query: graphql(`
query GetUsers($first: Int, $after: String) {
users(first: $first, after: $after) {
id
email
}
}
`),
...
});
};
useKrakenMutation
This hook provides a mutation function that can be used to send a GraphQL mutation to the Kraken API.
Import
import { useKrakenMutation } from '@krakentech/blueprint-api/client';
Usage
import { useKrakenMutation } from '@krakentech/blueprint-api/client';
import { graphql } from 'gql.tada';
const useCreateUser = () => {
const { graphqlClient } = useApi();
return useKrakenMutation({
mutation: graphql(`
mutation CreateUser($input: CreateUserInput!) {
createUser(input: $input) {
id
email
}
}
`),
...
});
};
useKrakenQuery
This hook provides a query function that can be used to send a GraphQL query to the Kraken API.
Import
import { useKrakenQuery } from '@krakentech/blueprint-api/client';
Usage
import { useKrakenQuery } from '@krakentech/blueprint-api/client';
import { graphql } from 'gql.tada';
const useViewer = () => {
const { graphqlClient } = useApi();
return useKrakenQuery({
query: graphql(`
query GetViewer {
viewer {
id
email
}
}
`),
...
});
};
useApiRouteMutation
This is the hook for calling custom API routes with React Query integration. Note that this is for mutation only.
- Provides a streamlined way to make HTTP requests to custom API endpoints (GET, POST, PUT, DELETE, PATCH)
- Built on top of React Query's useMutation for state management and caching
- Includes automatic error handling through the existing Kraken error system
- Supports TypeScript generics for type-safe request/response handling
- Configurable HTTP methods (defaults to POST)
- Custom headers support
- JSON request/response handling
- Built-in error handling via handleKrakenErrors
- No retry by default (suitable for mutations)
The endpoint parameter should match your custom API route path. For example, if you create a file at pages/api/org/initialize-user.ts
,
your endpoint would be /api/org/initialize-user
.
Import
import { useApiRouteMutation } from '@krakentech/blueprint-api/client';
Usage
// Define your types
interface MyResponse {
success: boolean;
data: { id: string; name: string };
}
interface MyVariables {
userId: string;
settings: { theme: string };
}
// Create the mutation hook
const useMyCustomMutation = () => {
return useApiRouteMutation<MyResponse, ApiRouteMutationError, MyVariables>({
endpoint: '/api/my-custom-route', // Must match your API file path
method: 'POST', // Optional, defaults to POST
mutationKey: ['myCustomMutation'], // Optional, for React Query caching
onSuccess: (data) => { // Optional
// Do something with data
},
onError: (error) => { // Optional
// Do something with error
}
});
};
// The endpoint parameter should match your custom API route path.
- API file: pages/api/users/profile.ts → endpoint: /api/users/profile
- API file: pages/api/settings.ts → endpoint: /api/settings
- API file: pages/api/org/initialize-user.ts → endpoint: /api/org/initialize-user