@crm-dance/public-api
v0.0.7
Published
Public API types for CRM Dance website integrations
Readme
@crm-dance/public-api
TypeScript client for CRM Dance public API. Use this package to integrate studio websites with CRM Dance for product listings, registrations, and payments.
Installation
npm install @crm-dance/public-apiQuick Start
import {
getPublicActiveProducts,
checkEmailAvailability,
type PublicProductResponse,
type WebsiteRegistrationMessage
} from '@crm-dance/public-api';
// Fetch products available for purchase
const { data: products } = await getPublicActiveProducts({
tenantId: 'your-tenant-id'
});
// Check if email can be used for registration
const { data: result } = await checkEmailAvailability(
{ email: '[email protected]', productId: 'product-uuid' },
{ tenantId: 'your-tenant-id' }
);
if (result.available) {
// Proceed with registration
}API Reference
getPublicActiveProducts(params, options?)
Fetches active products available for purchase on the studio website.
const { data } = await getPublicActiveProducts({
tenantId: string // Required: Studio tenant identifier
});Returns: PublicProductResponse[]
checkEmailAvailability(body, params, options?)
Checks if an email can be used to purchase a specific product. Some products are restricted to new customers only.
const { data } = await checkEmailAvailability(
{
email: string, // Customer email
productId: string // Product UUID
},
{ tenantId: string }
);Returns: EmailCheckResponse
available: boolean- Whether the email can be usedreason?: string- Explanation if unavailable
submitRegistration(body, params, options?)
Submits a registration request. Note: This endpoint is handled by Lambda, not the Spring Boot backend.
const { data } = await submitRegistration(
{
productId: string,
displayName: string,
price: { amount: number, currency: string },
customer: {
email: string,
firstName: string,
lastName: string,
phone?: string,
metadata?: Record<string, string>
}
},
{ tenantId: string }
);Returns: RegistrationResponse
status: 'accepted'correlationId: string- Links registration to Stripe sessioncheckoutUrl: string- Stripe Checkout URL for paymentmessage: string- Human-readable confirmation
Types
PublicProductResponse
interface PublicProductResponse {
id: string; // UUID
ticketTypeId: string; // Associated ticket type UUID
displayName: string;
description?: string;
imageUrl?: string;
price: number;
currency: string; // ISO 4217 (e.g., "USD")
productType: 'INTRO_LESSON' | 'EVENT' | 'PACKAGE';
emailStrategy: 'NEW_USERS_ONLY' | 'ALLOW_EXISTING';
active: boolean;
displayOrder: number;
createdAt: string; // ISO 8601
updatedAt: string; // ISO 8601
}WebsiteRegistrationMessage
SQS message schema for Lambda → Spring Boot communication.
interface WebsiteRegistrationMessage {
correlationId: string;
tenantId: string;
productId: string; // UUID
price: number;
currency: string;
email: string;
firstName: string;
lastName: string;
phone?: string;
metadata?: Record<string, string>;
stripeSessionId: string;
}RegistrationRequest
interface RegistrationRequest {
productId: string;
displayName: string;
price: {
amount: number;
currency: string;
};
customer: {
email: string;
firstName: string;
lastName: string;
phone?: string;
metadata?: Record<string, string>;
};
}Error Handling
All functions return a response object with status and data:
const response = await getPublicActiveProducts({ tenantId: 'xxx' });
if (response.status === 200) {
// Success
const products = response.data;
} else {
// Handle error
console.error('Failed to fetch products');
}For custom error handling, pass RequestInit options:
const response = await getPublicActiveProducts(
{ tenantId: 'xxx' },
{
signal: AbortSignal.timeout(5000), // 5s timeout
headers: { 'X-Custom-Header': 'value' }
}
);License
MIT
