@fileflow/shared
v0.1.0
Published
Shared types, schemas, and utilities for FileFlow
Readme
@fileflow/shared
Core types, schemas, and utilities for FileFlow - a comprehensive data import and KYC verification platform.
Installation
npm install @fileflow/shared
# or
pnpm add @fileflow/shared
# or
yarn add @fileflow/sharedUsage
Import Feature Types
import type {
ImportSchema,
SchemaColumn,
ColumnType,
ValidatorConfig,
ImportSession,
ImportSessionStatus,
} from '@fileflow/shared';
// Define your import schema
const schema: ImportSchema = {
name: 'User Import',
columns: [
{
name: 'email',
type: 'email',
required: true,
validators: [
{
type: 'email',
message: 'Must be a valid email',
severity: 'error',
},
],
},
{
name: 'age',
type: 'number',
required: false,
validators: [
{
type: 'range',
config: { min: 18, max: 120 },
message: 'Age must be between 18 and 120',
severity: 'error',
},
],
},
],
options: {
allowExtraColumns: false,
strictColumnOrder: false,
maxRows: 10000,
},
};KYC Feature Types
import type {
KYCSession,
KYCDocument,
DocumentType,
DocumentStatus,
PassportData,
DriversLicenseData,
ProofOfAddressData,
} from '@fileflow/shared';
// Create a KYC session
const session: Partial<KYCSession> = {
userId: 'user-123',
requiredDocuments: ['passport', 'proof_of_address'],
status: 'pending',
};
// Handle document data
const processPassport = (data: PassportData) => {
console.log(`Passport number: ${data.passportNumber}`);
console.log(`Nationality: ${data.nationality}`);
console.log(`Expiry: ${data.expiryDate}`);
};Theme Customization
import type {
ThemeConfig,
FeatureThemes,
FeatureType,
} from '@fileflow/shared';
import {
DEFAULT_THEME,
DEFAULT_FEATURE_THEMES,
PRESET_THEMES,
mergeFeatureThemes,
themeToCssVariables,
} from '@fileflow/shared';
// Use default theme
const theme = DEFAULT_THEME;
// Customize for specific features
const customThemes: FeatureThemes = {
import: {
...DEFAULT_THEME,
colors: {
...DEFAULT_THEME.colors,
primary: '#6366f1',
primaryHover: '#4f46e5',
},
},
kyc: {
...DEFAULT_THEME,
colors: {
...DEFAULT_THEME.colors,
primary: '#0d9488',
primaryHover: '#0f766e',
},
},
};
// Use preset themes
const darkTheme = PRESET_THEMES.find(t => t.id === 'dark')?.theme;
// Convert theme to CSS variables
const cssVars = themeToCssVariables(DEFAULT_THEME);
// Returns: { '--ff-color-primary': '#6366f1', ... }PaySpace Batch Upload
import {
PAYSPACE_BATCH_SCHEMA,
TRANSACTION_TYPES,
PAYMENT_METHODS,
type TransactionType,
type PaymentMethod,
} from '@fileflow/shared';
// Use the pre-built PaySpace schema
const schema = PAYSPACE_BATCH_SCHEMA;
// Access constants
const validTransactionTypes: TransactionType[] = TRANSACTION_TYPES;
const validPaymentMethods: PaymentMethod[] = PAYMENT_METHODS;Zod Schemas
All types have corresponding Zod schemas for runtime validation:
import {
ImportSchemaSchema,
CreateImportSessionSchema,
CreateKYCSessionSchema,
UploadDocumentSchema,
} from '@fileflow/shared';
// Validate data at runtime
const result = ImportSchemaSchema.safeParse(data);
if (result.success) {
const validSchema = result.data;
// Use validated data
} else {
console.error(result.error);
}Iframe Integration
FileFlow provides embeddable iframe versions of both Import and KYC features for quick integration without SDK installation.
Basic Iframe Setup
<!-- KYC Verification Embed -->
<iframe
id="kyc-iframe"
src="https://fileflow-web.fly.dev/embed/kyc"
width="100%"
height="600"
style="border: none; border-radius: 12px;"
allow="camera"
></iframe>
<!-- Data Import Embed -->
<iframe
id="import-iframe"
src="https://fileflow-web.fly.dev/embed/import"
width="100%"
height="500"
style="border: none; border-radius: 12px;"
></iframe>Iframe Configuration
Customize via URL parameters:
<!-- Customized KYC with brand color and pre-selected documents -->
<iframe
src="https://fileflow-web.fly.dev/embed/kyc?primaryColor=%230d9488&documents=passport,drivers_license&showHeader=true"
width="100%"
height="650"
allow="camera"
></iframe>
<!-- Customized Import with higher row limit -->
<iframe
src="https://fileflow-web.fly.dev/embed/import?primaryColor=%236366f1&maxRows=5000"
width="100%"
height="550"
></iframe>Available Parameters
Common Parameters:
primaryColor- Brand color in hex (URL encoded, e.g.,%236366f1for #6366f1)showHeader- Show/hide header bar (default:true)
KYC Parameters:
documents- Comma-separated document types:passport,drivers_license,proof_of_addressautoStart- Auto-create session without document selection screen
Import Parameters:
maxRows- Maximum rows to import (default: 1000)
Parent-Iframe Communication
The iframe communicates with your application via postMessage API:
// Listen for events from FileFlow embeds
window.addEventListener('message', (event) => {
// KYC Events
if (event.data.source === 'fileflow-kyc') {
switch (event.data.type) {
case 'sessionCreated':
console.log('Session ID:', event.data.data.sessionId);
break;
case 'uploadComplete':
console.log('Document uploaded:', event.data.data.type);
break;
case 'verificationComplete':
const { verified, sessionId, documents } = event.data.data;
console.log('Verification complete:', verified);
// Handle verification result
if (verified) {
// Update user status, redirect, etc.
}
break;
case 'error':
console.error('KYC Error:', event.data.data.message);
break;
case 'close':
// User clicked Done - close iframe/modal
document.getElementById('kyc-iframe').style.display = 'none';
break;
}
}
// Import Events
if (event.data.source === 'fileflow-import') {
switch (event.data.type) {
case 'fileParsed':
const { headers, rowCount } = event.data.data;
console.log(`Parsed ${rowCount} rows with headers:`, headers);
break;
case 'validated':
const { errors, rows } = event.data.data;
if (errors.length > 0) {
console.warn('Validation errors:', errors);
}
break;
case 'importComplete':
const { totalRows, data } = event.data.data;
console.log(`Import complete: ${totalRows} rows`);
// Process imported data
processImportedData(data);
break;
case 'close':
// User clicked Done
document.getElementById('import-iframe').style.display = 'none';
break;
}
}
});Event Types
KYC Events:
sessionCreated- Session initialized with{ sessionId }uploadStarted- Document upload began{ type, fileName }uploadComplete- Document processed{ type, data }uploadError- Upload failed{ type, message }verificationComplete- All documents verified{ verified, sessionId, documents }stateChange- User moved to new step{ step, ... }close- User clicked Done{ verified }error- General error{ message }
Import Events:
uploadStarted- File upload began{ fileName }fileParsed- File parsed successfully{ headers, rowCount }validated- Validation complete{ errors, rows }importComplete- Import finished{ totalRows, data }stateChange- User moved to new step{ step, rows }close- User clicked Done{ success }error- Error occurred{ message }
TypeScript Support
If using TypeScript, you can type the postMessage events:
interface FileFlowMessage {
source: 'fileflow-kyc' | 'fileflow-import';
type: string;
data: unknown;
}
interface KYCVerificationComplete {
verified: boolean;
sessionId: string;
documents: Array<{
type: string;
status: string;
extractedData: unknown;
}>;
}
interface ImportComplete {
totalRows: number;
data: Record<string, unknown>[];
}
window.addEventListener('message', (event: MessageEvent<FileFlowMessage>) => {
if (event.data.source === 'fileflow-kyc') {
if (event.data.type === 'verificationComplete') {
const result = event.data.data as KYCVerificationComplete;
// Type-safe access to result
}
}
});API Reference
Types
Import Types
ImportSchema- Complete schema definition for data importSchemaColumn- Single column definition with type and validatorsColumnType- Available column types (text, number, email, etc.)ValidatorConfig- Validation rule configurationValidatorType- Available validators (required, email, range, etc.)TransformConfig- Data transformation rulesImportSession- Import session state and dataImportSessionStatus- Session status enumValidationError- Validation error details
KYC Types
KYCSession- KYC session state and configurationKYCDocument- Document upload detailsDocumentType- Available document typesDocumentStatus- Document processing statusPassportData- Extracted passport informationDriversLicenseData- Extracted license informationProofOfAddressData- Extracted address proof informationFraudFlag- Detected fraud indicators
Theme Types
ThemeConfig- Complete theme configurationThemeColors- Color palette definitionThemeTypography- Font and text stylingThemeSpacing- Border radius and spacing valuesThemeShadows- Shadow definitionsFeatureType- Feature identifier ('import' | 'kyc')FeatureThemes- Theme configuration per feature
Constants
Import Constants
import { COLUMN_TYPES, VALIDATOR_TYPES } from '@fileflow/shared';
// Available column types
COLUMN_TYPES = ['text', 'number', 'email', 'url', 'date', 'boolean', 'select'];
// Available validator types
VALIDATOR_TYPES = ['required', 'email', 'url', 'range', 'pattern', 'custom'];KYC Constants
import { DOCUMENT_TYPES, KYC_SESSION_STATUSES } from '@fileflow/shared';
DOCUMENT_TYPES = ['passport', 'drivers_license', 'proof_of_address'];
KYC_SESSION_STATUSES = ['pending', 'in_progress', 'completed', 'failed'];Theme Constants
import { DEFAULT_THEME, PRESET_THEMES } from '@fileflow/shared';
// Default theme configuration
DEFAULT_THEME: ThemeConfig;
// Pre-built theme presets
PRESET_THEMES: Array<{ id: string; name: string; theme: ThemeConfig }>;Utilities
mergeFeatureThemes(base, overrides)
Merge feature theme overrides with base themes.
const merged = mergeFeatureThemes(DEFAULT_FEATURE_THEMES, {
import: {
colors: {
primary: '#ff0000',
},
},
});themeToCssVariables(theme)
Convert theme configuration to CSS variable object.
const cssVars = themeToCssVariables(theme);
// { '--ff-color-primary': '#6366f1', ... }
// Apply to document
Object.entries(cssVars).forEach(([key, value]) => {
document.documentElement.style.setProperty(key, value);
});Development
# Install dependencies
pnpm install
# Build
pnpm build
# Type check
pnpm typecheck
# Watch mode
pnpm devLicense
MIT