172 lines
5.0 KiB
TypeScript
172 lines
5.0 KiB
TypeScript
import * as bunq from './ts/index.js';
|
|
|
|
// Example of stateless usage of the bunq library
|
|
|
|
// 1. Initial session creation
|
|
async function createNewSession() {
|
|
const bunqAccount = new bunq.BunqAccount({
|
|
apiKey: 'your-api-key',
|
|
deviceName: 'my-app',
|
|
environment: 'PRODUCTION',
|
|
});
|
|
|
|
// Initialize and get session data
|
|
const sessionData = await bunqAccount.init();
|
|
|
|
// Save session data to your preferred storage (database, file, etc.)
|
|
await saveSessionToDatabase(sessionData);
|
|
|
|
// Use the account
|
|
const { accounts } = await bunqAccount.getAccounts();
|
|
console.log('Found accounts:', accounts.length);
|
|
|
|
return sessionData;
|
|
}
|
|
|
|
// 2. Reusing an existing session
|
|
async function reuseExistingSession() {
|
|
// Load session data from your storage
|
|
const sessionData = await loadSessionFromDatabase();
|
|
|
|
const bunqAccount = new bunq.BunqAccount({
|
|
apiKey: 'your-api-key',
|
|
deviceName: 'my-app',
|
|
environment: 'PRODUCTION',
|
|
});
|
|
|
|
// Initialize with existing session
|
|
await bunqAccount.initWithSession(sessionData);
|
|
|
|
// Use the account - session refresh happens automatically
|
|
const { accounts, sessionData: updatedSession } = await bunqAccount.getAccounts();
|
|
|
|
// If session was refreshed, save the updated session data
|
|
if (updatedSession) {
|
|
await saveSessionToDatabase(updatedSession);
|
|
}
|
|
|
|
return accounts;
|
|
}
|
|
|
|
// 3. OAuth token with existing installation
|
|
async function oauthWithExistingInstallation() {
|
|
const bunqAccount = new bunq.BunqAccount({
|
|
apiKey: 'oauth-access-token',
|
|
deviceName: 'my-oauth-app',
|
|
environment: 'PRODUCTION',
|
|
isOAuthToken: true,
|
|
});
|
|
|
|
try {
|
|
// Try normal initialization
|
|
const sessionData = await bunqAccount.init();
|
|
await saveSessionToDatabase(sessionData);
|
|
} catch (error) {
|
|
// If OAuth token already has installation, use existing
|
|
const existingInstallation = await loadInstallationFromDatabase();
|
|
const sessionData = await bunqAccount.initOAuthWithExistingInstallation(existingInstallation);
|
|
await saveSessionToDatabase(sessionData);
|
|
}
|
|
}
|
|
|
|
// 4. Session validation
|
|
async function validateAndRefreshSession() {
|
|
const sessionData = await loadSessionFromDatabase();
|
|
|
|
const bunqAccount = new bunq.BunqAccount({
|
|
apiKey: 'your-api-key',
|
|
deviceName: 'my-app',
|
|
environment: 'PRODUCTION',
|
|
});
|
|
|
|
try {
|
|
await bunqAccount.initWithSession(sessionData);
|
|
|
|
if (!bunqAccount.isSessionValid()) {
|
|
// Session expired, create new one
|
|
const newSessionData = await bunqAccount.init();
|
|
await saveSessionToDatabase(newSessionData);
|
|
}
|
|
} catch (error) {
|
|
// Session invalid, create new one
|
|
const newSessionData = await bunqAccount.init();
|
|
await saveSessionToDatabase(newSessionData);
|
|
}
|
|
}
|
|
|
|
// 5. Complete example with error handling
|
|
async function completeExample() {
|
|
let bunqAccount: bunq.BunqAccount;
|
|
let sessionData: bunq.ISessionData;
|
|
|
|
try {
|
|
// Try to load existing session
|
|
const existingSession = await loadSessionFromDatabase();
|
|
|
|
bunqAccount = new bunq.BunqAccount({
|
|
apiKey: process.env.BUNQ_API_KEY!,
|
|
deviceName: 'my-production-app',
|
|
environment: 'PRODUCTION',
|
|
});
|
|
|
|
if (existingSession) {
|
|
try {
|
|
await bunqAccount.initWithSession(existingSession);
|
|
console.log('Reused existing session');
|
|
} catch (error) {
|
|
// Session invalid, create new one
|
|
sessionData = await bunqAccount.init();
|
|
await saveSessionToDatabase(sessionData);
|
|
console.log('Created new session');
|
|
}
|
|
} else {
|
|
// No existing session, create new one
|
|
sessionData = await bunqAccount.init();
|
|
await saveSessionToDatabase(sessionData);
|
|
console.log('Created new session');
|
|
}
|
|
|
|
// Use the API
|
|
const { accounts, sessionData: updatedSession } = await bunqAccount.getAccounts();
|
|
|
|
// Save updated session if it was refreshed
|
|
if (updatedSession) {
|
|
await saveSessionToDatabase(updatedSession);
|
|
console.log('Session was refreshed');
|
|
}
|
|
|
|
// Make a payment
|
|
const account = accounts[0];
|
|
const payment = await bunq.BunqPayment.builder(bunqAccount, account)
|
|
.amount('10.00', 'EUR')
|
|
.toIban('NL91ABNA0417164300', 'Test Recipient')
|
|
.description('Test payment')
|
|
.create();
|
|
|
|
console.log('Payment created:', payment.id);
|
|
|
|
// Clean up
|
|
await bunqAccount.stop();
|
|
|
|
} catch (error) {
|
|
console.error('Error:', error);
|
|
}
|
|
}
|
|
|
|
// Mock storage functions (implement these with your actual storage)
|
|
async function saveSessionToDatabase(sessionData: bunq.ISessionData): Promise<void> {
|
|
// Implement your storage logic here
|
|
// Example: await db.sessions.save(sessionData);
|
|
}
|
|
|
|
async function loadSessionFromDatabase(): Promise<bunq.ISessionData | null> {
|
|
// Implement your storage logic here
|
|
// Example: return await db.sessions.findLatest();
|
|
return null;
|
|
}
|
|
|
|
async function loadInstallationFromDatabase(): Promise<Partial<bunq.ISessionData> | undefined> {
|
|
// Load just the installation data needed for OAuth
|
|
// Example: return await db.installations.findByApiKey();
|
|
return undefined;
|
|
} |