Configuration
The configuration is to be used together with backend, admin and mobile solution to take advantage of multi-tenants setup. The configuration can be set up either manually or using Config creation in admin.
Getting Started
This guide will walk you through the complete setup process for using the IDPass Data Collect system with configuration management.
Prerequisites
Before starting, ensure you have:
- Backend service running
- Admin interface accessible
- Mobile app installed or your own application ready
- Network connectivity between all components
Step 1: Start Required Services
Start Backend Service
# Navigate to your backend directory
cd packages/backend
# Start the backend service
npm start
The backend service should be running on the configured port (typically http://localhost:3000 or similar).
Start Admin Interface
# Navigate to your admin directory
cd packages/admin
# Start the admin interface
npm start
The admin interface should be accessible at http://localhost:5173 or your configured URL.
Step 2: Import or Create Sample Configuration
Option A: Create Configuration via Admin Interface
- Open your admin interface in a web browser
- Navigate to Create Config
- Fill in the required fields
- Save the configuration
Option B: Import Existing Configuration File
- In the admin interface, go to Home
- Click "Upload JSON Config File"
- Select your configuration file (JSON format)
- Confirm the import
Sample Configuration File
{
"id": "sample",
"name": "sample",
"description": "Sample config",
"version": "1",
"entityForms": [
{
"name": "household",
"title": "Household",
"dependsOn": "",
"formio": {
"components": [
{
"label": "Name",
"applyMaskOn": "change",
"tableView": true,
"validateWhenHidden": false,
"key": "name",
"type": "textfield",
"input": true
},
{
"type": "button",
"label": "Submit",
"key": "submit",
"disableOnInvalid": true,
"input": true,
"tableView": false
}
]
}
}
],
"externalSync": {
"type": "mock-sync-server",
"url": "http://localhost:4000",
"auth": "",
"extraFields": {}
},
"authConfigs": [
{
"type": "auth0",
"fields": {
"domain": "your-domain.auth0.com",
"clientId": "your-client-id",
"audience": "your-api-audience",
"scope": "openid profile email"
}
},
{
"type": "keycloak",
"fields": {
"url": "https://your-keycloak-server.com",
"realm": "your-realm",
"clientId": "your-client-id",
"scope": "openid profile email"
}
}
],
"syncServerUrl": "localhost:3000"
}
Step 3: Get Configuration via Mobile App
(You can use mobile package to run a browser app)
Using the Mobile App
- Open the IDPass Data Collect mobile app
- Navigate to the Configuration section
- Use the QR code scanner or manual entry to get your configuration:
- QR Code: Scan the QR code displayed in the admin interface
- Manual Entry: Enter the configuration ID or URL manually
- The app will download and validate the configuration
Using Your Own Application
If you're using your own application, implement the configuration retrieval:
// Example: Retrieve configuration from backend
const response = await fetch(`${serverUrl}/${configId}.json`);
const config = await response.json();
// Initialize your app with the configuration
await initializeDataCollect(config);
Step 4: Initialize DataCollect with Configuration
Initialize the DataCollect Library
import {
EntityDataManager,
EntityStoreImpl,
EventStoreImpl,
EventApplierService,
IndexedDbEntityStorageAdapter,
IndexedDbEventStorageAdapter,
IndexedDbAuthStorageAdapter,
ExternalSyncManager,
InternalSyncManager,
AuthManager
} from '@idpass/datacollect';
// Initialize with your imported configuration
const initializeDataCollect = async (config) => {
// Create storage adapters
const eventStorageAdapter = new IndexedDbEventStorageAdapter('my-data-collect-events');
const entityStorageAdapter = new IndexedDbEntityStorageAdapter('my-data-collect-entities');
const authStorageAdapter = new IndexedDbAuthStorageAdapter('my-data-collect-auth');
// Initialize stores
const eventStore = new EventStoreImpl(eventStorageAdapter);
await eventStore.initialize();
const entityStore = new EntityStoreImpl(entityStorageAdapter);
await entityStore.initialize();
// Initialize auth storage
await authStorageAdapter.initialize();
// Create event applier service
const eventApplierService = new EventApplierService(eventStore, entityStore);
// Create internal sync manager
const internalSyncManager = new InternalSyncManager(
eventStore,
entityStore,
eventApplierService,
config.syncServerUrl,
authStorageAdapter
);
// Create external sync manager (optional)
const externalSyncManager = config.externalSync ? new ExternalSyncManager(
eventStore,
eventApplierService,
config.externalSync
) : null;
// Create authentication manager
const authManager = new AuthManager(
config.authConfigs || [], // Authentication provider configurations
config.syncServerUrl,
authStorageAdapter
);
// Create the main data manager
const dataCollect = new EntityDataManager(
eventStore,
entityStore,
eventApplierService,
externalSyncManager,
internalSyncManager,
authManager
);
return dataCollect;
};
// Initialize the system
const dataCollect = await initializeDataCollect(importedConfig);
Step 5: Collect Data
Create New Records
// Create a new individual record
const formData = {
guid: "form-id",
entityGuid: "form-id",
type: "create-individual",
data: {
name: "John Doe",
dateOfBirth: "1990-01-01",
// Add other fields as needed
},
timestamp: new Date().toISOString(),
userId: "user-id",
syncLevel: 0 // SyncLevel.LOCAL
};
const individual = await dataCollect.submitForm(formData);
console.log('Created individual:', individual);
View Collected Data
// Get all collected data
const allData = await dataCollect.getAllEntities();
console.log('All collected data:', allData);
// Get a specific entity by GUID
const entity = await dataCollect.getEntity("entity-guid");
console.log('Specific entity:', entity);
// Search for specific records
const searchResults = await dataCollect.searchEntities([
{ name: "John Doe" }
]);
console.log('Search results:', searchResults);
Step 6: Authenticate Users
Initialize Authentication Manager
// Initialize the authentication manager (done during setup)
await dataCollect.initializeAuthManager();
Login with Different Authentication Methods
// Login with username/password (for backend authentication)
await dataCollect.login({
username: "admin@hdm.example",
password: "admin1@"
});
// Login with token (for external auth providers like Auth0/Keycloak)
await dataCollect.login({
token: "your-jwt-token"
}, "auth0"); // or "keycloak"
// Check authentication status
const isAuthenticated = await dataCollect.isAuthenticated();
console.log('User authenticated:', isAuthenticated);
Handle Authentication Callbacks
// Handle OAuth callbacks (for Auth0, Keycloak, etc.)
await dataCollect.handleCallback("auth0");
Logout
// Logout user and clear authentication tokens
await dataCollect.logout();
// Verify logout
const isAuthenticated = await dataCollect.isAuthenticated();
console.log('User authenticated after logout:', isAuthenticated); // Should be false
Step 7: Sync to Server Using Backend User
Authenticate with Backend
// Login with backend credentials
await dataCollect.login({
username: "admin@hdm.example",
password: "admin1@"
});
Step 8: Verify Synced Data in Admin
Check Admin Interface
- Open your admin interface
- Navigate to Home
- Check Apps card the following:
- Entities: Verify the number of records matches your collection
User another client instance to get synced data
await anotherManager.login("admin@hdm.example", "admin1@");
await manager.syncWithSyncServer();
Troubleshooting
Common Issues
-
Configuration Not Found
- Verify the configuration ID is correct
- Check that the configuration exists in the admin interface
- Ensure network connectivity to the backend
-
Authentication Failures
- Verify username and password are correct
- Check that the user has proper permissions
- Ensure the authentication endpoint is accessible
-
Sync Failures
- Check network connectivity
- Verify the backend service is running
- Review sync logs for specific error messages
- Ensure data schema matches between client and server
-
Data Not Appearing in Admin
- Verify sync completed successfully
- Check that the correct user account is being used
- Review admin permissions and data visibility settings
Getting Help
If you encounter issues not covered in this guide:
- Check the API Reference for detailed endpoint documentation
- Review the Architecture Documentation for system understanding
- Contact your system administrator for backend-specific issues
Next Steps
- Configuration - Learn more about configuration
- Packages - Explore the packages
- Architecture - Architecture Overview
- Deployment Guide - Production deployment