@friggframework/schemas
Canonical JSON Schema definitions for the Frigg Framework, providing formal validation and documentation for all core configuration objects.
Overview
This package contains the official, versioned schemas for:
- App Definition: Configuration for Frigg applications
- Integration Definition: Configuration for Frigg integrations
- API Module Definition: Configuration for Frigg API modules
- Serverless Configuration: AWS deployment configuration
- Environment Configuration: Environment variable management
- Core Models: User, Entity, and Credential data models
Installation
npm install @friggframework/schemasUsage
Basic Validation
const { validateAppDefinition } = require('@friggframework/schemas');
const appDefinition = {
integrations: [],
user: { password: true },
encryption: { useDefaultKMSForFieldLevelEncryption: true }
};
const result = validateAppDefinition(appDefinition);
if (result.valid) {
console.log('✅ App definition is valid');
} else {
console.error('❌ Validation errors:', result.errors);
}Advanced Validation
const { validate, formatErrors } = require('@friggframework/schemas');
// Validate any schema by name
const result = validate('integration-definition', integrationData);
if (!result.valid) {
console.error('Validation failed:');
console.error(formatErrors(result.errors));
}Schema Introspection
const { getSchemas, getSchema } = require('@friggframework/schemas');
// Get all available schemas
const allSchemas = getSchemas();
console.log('Available schemas:', Object.keys(allSchemas));
// Get a specific schema
const appSchema = getSchema('app-definition');
console.log('App definition schema:', appSchema);Available Schemas
App Definition Schema
Defines the structure for Frigg application configuration.
Key Properties:
integrations(required): Array of integration classesuser: User management configurationsecurity: CORS, rate limiting, and security settingsencryption: KMS and encryption settingslogging: Logging configurationcustom: Application-specific settings
Example:
const appDefinition = {
integrations: [HubSpotIntegration],
user: { password: true },
encryption: { useDefaultKMSForFieldLevelEncryption: true },
vpc: { enable: true },
security: {
cors: {
origin: "http://localhost:3000",
credentials: true
}
},
logging: { level: "info" },
custom: {
appName: "My Frigg App",
version: "1.0.0",
environment: "development"
}
};Integration Definition Schema
Defines the structure for Frigg integrations.
Key Properties:
name(required): Integration identifierversion(required): Semantic versionoptions: Configuration options and display propertiescapabilities: Authentication, webhooks, sync capabilitiesrequirements: Environment variables and dependencies
Example:
const integrationDefinition = {
name: "hubspot",
version: "2.0.0",
options: {
type: "api",
hasUserConfig: true,
display: {
name: "HubSpot CRM",
description: "Integrate with HubSpot for CRM functionality",
category: "CRM",
tags: ["crm", "marketing"]
}
},
capabilities: {
auth: ["oauth2"],
webhooks: true,
sync: { bidirectional: true, incremental: true }
}
};API Module Definition Schema
Defines the structure for Frigg API modules.
Key Properties:
moduleName(required): Module identifiergetName(required): Function returning module namerequiredAuthMethods(required): Authentication configurationenv: Environment variable configurationconfig: Module-specific configuration
Example:
const apiModuleDefinition = {
moduleName: "hubspot",
getName: function() { return "hubspot"; },
requiredAuthMethods: {
getToken: async function(api, params) { /* implementation */ },
apiPropertiesToPersist: {
credential: ["access_token", "refresh_token"],
entity: ["external_id", "portal_id"]
},
getCredentialDetails: async function(api) { /* implementation */ },
testAuthRequest: async function() { /* implementation */ }
},
env: {
client_id: process.env.HUBSPOT_CLIENT_ID,
client_secret: process.env.HUBSPOT_CLIENT_SECRET
}
};Serverless Configuration Schema
Defines the structure for Serverless Framework configuration used in AWS deployments.
Key Properties:
service(required): Service name for the deploymentprovider(required): Cloud provider configuration (AWS, runtime, region, etc.)functions: Lambda function definitions with handlers and eventsresources: CloudFormation resource definitionsplugins: Serverless Framework plugins
Example:
const serverlessConfig = {
frameworkVersion: ">=3.17.0",
service: "frigg-backend",
provider: {
name: "aws",
runtime: "nodejs20.x",
timeout: 30,
region: "us-east-1"
},
functions: {
api: {
handler: "./src/api.handler",
events: [{
http: {
path: "/api/{proxy+}",
method: "ANY",
cors: true
}
}]
}
}
};Environment Configuration Schema
Defines the structure for environment variable management and validation.
Key Properties:
environments: Environment-specific configurations (development, staging, production)global: Global settings for masking, encryption, and audit loggingtemplates: Reusable templates for different integration types
Example:
const environmentConfig = {
environments: {
development: {
variables: {
DATABASE_URL: {
value: "mongodb://localhost:27017/frigg-dev",
required: true,
sensitive: true,
description: "MongoDB connection string"
}
},
integrations: {
hubspot: {
required: ["HUBSPOT_CLIENT_ID", "HUBSPOT_CLIENT_SECRET"],
prefix: "HUBSPOT"
}
}
}
},
global: {
encryptionKeys: {
kmsKeyId: "12345678-1234-1234-1234-123456789abc",
algorithm: "AES-256-GCM"
}
}
};Core Models Schema
Defines the structure for core Frigg data models including User, Entity, and Credential.
Key Properties:
user: User model with authentication, preferences, and permissionscredential: Authentication credential storage with encryptionentity: Data entity configuration with sync settings
Example:
const coreModels = {
user: {
_id: "507f1f77bcf86cd799439011",
email: "user@example.com",
role: "user",
permissions: ["integrations:read", "integrations:write"],
preferences: {
theme: "dark",
notifications: { email: true }
}
},
credential: {
_id: "507f1f77bcf86cd799439012",
userId: "507f1f77bcf86cd799439011",
subType: "hubspot",
auth_is_valid: true,
authData: {
access_token: "encrypted_token",
token_type: "Bearer"
}
},
entity: {
_id: "507f1f77bcf86cd799439013",
credentialId: "507f1f77bcf86cd799439012",
userId: "507f1f77bcf86cd799439011",
subType: "contact",
name: "HubSpot Contacts",
status: "active"
}
};API Reference
Validation Functions
validate(schemaName, data)
Validates data against a named schema.
Parameters:
schemaName(string): Name of schema ('app-definition', 'integration-definition', 'api-module-definition', 'serverless-config', 'environment-config', 'core-models')data(object): Data to validate
Returns: { valid: boolean, errors: array|null, data: object }
validateAppDefinition(appDefinition)
Validates an app definition object.
validateIntegrationDefinition(integrationDefinition)
Validates an integration definition object.
validateApiModuleDefinition(apiModuleDefinition)
Validates an API module definition object.
validateServerlessConfig(serverlessConfig)
Validates a Serverless Framework configuration object.
validateEnvironmentConfig(environmentConfig)
Validates an environment configuration object.
validateCoreModels(coreModels)
Validates core data models (User, Entity, Credential).
Schema Access Functions
getSchemas()
Returns all available schemas as an object.
getSchema(schemaName)
Returns a specific schema by name.
Utility Functions
formatErrors(errors)
Formats AJV validation errors for human-readable output.
Development
Running Schema Validation
npm run validateThis validates all schemas against the JSON Schema meta-schema and tests all examples.
Testing
npm testSchema Versioning
Schemas follow semantic versioning. Breaking changes to schemas will result in major version bumps.
Current schema versions:
- App Definition: Draft-07 (JSON Schema)
- Integration Definition: Draft-07 (JSON Schema)
- API Module Definition: Draft-07 (JSON Schema)
- Serverless Configuration: Draft-07 (JSON Schema)
- Environment Configuration: Draft-07 (JSON Schema)
- Core Models: Draft-07 (JSON Schema)
Contributing
When updating schemas:
- Update the schema file in
schemas/ - Update examples in the schema
- Run
npm run validateto ensure validity - Update this README if needed
- Update version if breaking changes
License
MIT - see LICENSE file for details.