@kokoniai/integrations-core
v0.1.0
Published
Shared utilities for KokoniAI integrations (eBay, Crisp, Shopify)
Maintainers
Readme
@kokoni/integrations-core
Shared utilities for KokoniAI marketplace integrations (eBay, Crisp, Shopify).
Installation
npm install @kokoni/integrations-coreModules
Crypto (@kokoni/integrations-core/crypto)
Token encryption and webhook signature verification.
import { encryptToken, decryptToken, verifyCrispWebhookSignature } from '@kokoni/integrations-core/crypto';
// Encrypt OAuth tokens for storage
const encrypted = await encryptToken(accessToken, ENCRYPTION_KEY);
const decrypted = await decryptToken(encrypted, ENCRYPTION_KEY);
// Verify Crisp webhook signatures
const isValid = await verifyCrispWebhookSignature({
rawBody,
signature,
timestamp,
secret: WEBHOOK_SECRET,
});Validation (@kokoni/integrations-core/validation)
Input validation and sanitization utilities.
import {
isValidUUID,
isValidWebsiteId,
sanitizeString,
escapeXml
} from '@kokoni/integrations-core/validation';
// Validate inputs
if (!isValidUUID(userId)) throw new Error('Invalid user ID');
if (!isValidWebsiteId(websiteId)) throw new Error('Invalid website ID');
// Sanitize user input
const safeName = sanitizeString(userInput, 100);
// Escape for XML APIs (eBay Trading API)
const xmlSafe = escapeXml(message);Auth (@kokoni/integrations-core/auth)
JWT validation and OAuth state management.
import { validateJWT, createSignedState, verifyAndDecodeState } from '@kokoni/integrations-core/auth';
// Validate JWT in edge functions
const auth = await validateJWT(req.headers.get('Authorization'), supabaseClient);
if (!auth) return new Response('Unauthorized', { status: 401 });
const userId = auth.user.id;
// Create signed OAuth state
const state = await createSignedState(
{ userId, uuid: crypto.randomUUID(), iat: Date.now() / 1000 },
SECRET_KEY
);
// Verify OAuth callback state
const decoded = await verifyAndDecodeState(state, SECRET_KEY);
if (!decoded) throw new Error('Invalid or expired state');Development
# Install dependencies
npm install
# Build
npm run build
# Watch mode
npm run devPublishing
npm publish --access publicLicense
MIT
