UNPKG

n8n-nodes-magic-directory

Version:

Connect with n8n community members through intelligent profile matching. Powered by Magic Inbox for P2P messaging and workflow sharing.

979 lines (978 loc) β€’ 51.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MagicDirectory = void 0; const n8n_workflow_1 = require("n8n-workflow"); class MagicDirectory { constructor() { this.description = { displayName: 'Magic Directory', name: 'magicDirectory', icon: 'fa:users', group: ['magic'], version: 3, subtitle: '={{$parameter["operation"]}} - {{$parameter["category"]}}', description: 'Connect with n8n community members through intelligent profile matching. Powered by Magic Inbox for P2P messaging, email communication, and instant workflow sharing between instances.', defaults: { name: 'Magic Directory', }, inputs: ["main" /* NodeConnectionType.Main */], outputs: ["main" /* NodeConnectionType.Main */], credentials: [], properties: [ { displayName: '🎯 Operation', name: 'operation', type: 'options', noDataExpression: true, options: [ { name: 'πŸ“ Register Profile', value: 'register', description: 'Add your profile to Magic Directory community', }, { name: 'πŸ” Search Profiles', value: 'search', description: 'Find matching community members', }, ], default: 'search', }, { displayName: 'πŸ“‚ Category', name: 'category', type: 'options', options: [ { name: '🀝 Collaboration', value: 'collaboration' }, { name: 'πŸ‘¨β€πŸ« Mentoring', value: 'mentorat' }, { name: '🀝 Friends', value: 'friend' }, { name: 'πŸ’• Love Male', value: 'lovemale' }, { name: 'πŸ’• Love Female', value: 'lovefemale' }, { name: '🏒 Business', value: 'business' }, { name: 'πŸ’Ό Jobs', value: 'job' }, ], default: 'collaboration', required: true, }, // === CHAMPS COMMUNS REGISTRATION === { displayName: 'πŸ‘€ Your Name', name: 'name', type: 'string', displayOptions: { show: { operation: ['register'] } }, required: true, default: '', placeholder: 'Charles Magic Dev', }, { displayName: 'πŸ“§ Email', name: 'email', type: 'string', displayOptions: { show: { operation: ['register'] } }, required: true, default: '', placeholder: 'your-email@example.com', }, { displayName: 'πŸ“¬ Magic Inbox Webhook URL', name: 'magic_inbox_url', type: 'string', displayOptions: { show: { operation: ['register'] } }, required: true, default: '', placeholder: 'https://your-n8n-instance.com/webhook/magic-inbox', description: '🚨 REQUIRED: First install n8n-nodes-magic-inbox (npm install n8n-nodes-magic-inbox). Magic Inbox enables P2P messaging between n8n instances, email-like inbox system, direct workflow sharing & teleportation, and decentralized communication. Setup steps: 1) Install the package 2) Add Magic Inbox node to your workflow 3) Configure webhook URL (/webhook/magic-inbox) 4) Copy the full webhook URL here 5) Test it first before registering!', }, { displayName: 'πŸ“ Location', name: 'location', type: 'string', displayOptions: { show: { operation: ['register'] } }, required: true, default: '', placeholder: 'Marseille, Remote, PACA, Worldwide', }, // === COLLABORATION REGISTRATION === { displayName: 'πŸ“ Project Description', name: 'project_description', type: 'string', typeOptions: { rows: 3 }, displayOptions: { show: { operation: ['register'], category: ['collaboration'] } }, required: true, default: '', placeholder: 'Describe your collaboration project...', }, { displayName: 'πŸ”‘ Main Skills', name: 'main_skills', type: 'options', typeOptions: { multipleValues: true }, displayOptions: { show: { operation: ['register'], category: ['collaboration'] } }, options: [ { name: 'Web Development', value: 'web-dev' }, { name: 'Design', value: 'design' }, { name: 'Marketing', value: 'marketing' }, { name: 'Data Analysis', value: 'data-analysis' }, { name: 'AI/ML', value: 'ai-ml' }, { name: 'DevOps', value: 'devops' }, { name: 'Mobile Development', value: 'mobile-dev' }, ], default: [], required: true, }, { displayName: 'πŸ’° Budget Allocated', name: 'budget', type: 'string', displayOptions: { show: { operation: ['register'], category: ['collaboration'] } }, default: '', placeholder: '€5000, Equity, Free, Negotiable', }, { displayName: 'πŸ“… Availability Start Date', name: 'availability_date', type: 'dateTime', displayOptions: { show: { operation: ['register'], category: ['collaboration'] } }, default: '', }, { displayName: '⏱️ Experience (Years)', name: 'experience_years', type: 'number', displayOptions: { show: { operation: ['register'], category: ['collaboration'] } }, default: 1, typeOptions: { minValue: 0, maxValue: 50 }, }, // === COLLABORATION SEARCH === { displayName: 'πŸ” Looking for Skills', name: 'search_main_skills', type: 'options', typeOptions: { multipleValues: true }, displayOptions: { show: { operation: ['search'], category: ['collaboration'] } }, options: [ { name: 'Web Development', value: 'web-dev' }, { name: 'Design', value: 'design' }, { name: 'Marketing', value: 'marketing' }, { name: 'Data Analysis', value: 'data-analysis' }, { name: 'AI/ML', value: 'ai-ml' }, { name: 'DevOps', value: 'devops' }, { name: 'Mobile Development', value: 'mobile-dev' }, ], default: [], }, { displayName: 'πŸ’° Budget Expectation', name: 'search_budget', type: 'string', displayOptions: { show: { operation: ['search'], category: ['collaboration'] } }, default: '', placeholder: 'Free, €5000+, Equity, Negotiable', }, { displayName: '⏱️ Minimum Experience (Years)', name: 'search_experience_min', type: 'number', displayOptions: { show: { operation: ['search'], category: ['collaboration'] } }, default: 0, typeOptions: { minValue: 0, maxValue: 50 }, }, { displayName: 'πŸ“… Available From', name: 'search_availability_from', type: 'dateTime', displayOptions: { show: { operation: ['search'], category: ['collaboration'] } }, default: '', }, // === MENTORAT REGISTRATION === { displayName: '🎯 Expertise Domain', name: 'expertise_domain', type: 'options', displayOptions: { show: { operation: ['register'], category: ['mentorat'] } }, options: [ { name: 'Tech', value: 'tech' }, { name: 'Entrepreneurship', value: 'entrepreneurship' }, { name: 'Personal Development', value: 'personal-dev' }, { name: 'Career Development', value: 'career' }, { name: 'Leadership', value: 'leadership' }, { name: 'Finance', value: 'finance' }, ], default: 'tech', required: true, }, { displayName: '🎚️ Experience Level', name: 'experience_level', type: 'options', displayOptions: { show: { operation: ['register'], category: ['mentorat'] } }, options: [ { name: '🌱 Beginner', value: 'beginner' }, { name: 'πŸš€ Intermediate', value: 'intermediate' }, { name: '⭐ Expert', value: 'expert' }, { name: 'πŸ₯· Ninja', value: 'ninja' }, ], default: 'intermediate', required: true, }, { displayName: 'πŸ• Mentoring Duration', name: 'mentoring_duration', type: 'options', displayOptions: { show: { operation: ['register'], category: ['mentorat'] } }, options: [ { name: '1-3 months', value: 'short' }, { name: '3-6 months', value: 'medium' }, { name: '6+ months', value: 'long' }, { name: 'Ongoing', value: 'ongoing' }, ], default: 'medium', }, { displayName: 'πŸ’Έ Mentoring Rate', name: 'mentoring_rate', type: 'string', displayOptions: { show: { operation: ['register'], category: ['mentorat'] } }, default: '', placeholder: 'Free, €50/hour, Equity, Negotiable', }, // === MENTORAT SEARCH === { displayName: '🎯 Seeking Expertise In', name: 'search_expertise_domain', type: 'options', typeOptions: { multipleValues: true }, displayOptions: { show: { operation: ['search'], category: ['mentorat'] } }, options: [ { name: 'Tech', value: 'tech' }, { name: 'Entrepreneurship', value: 'entrepreneurship' }, { name: 'Personal Development', value: 'personal-dev' }, { name: 'Career Development', value: 'career' }, { name: 'Leadership', value: 'leadership' }, { name: 'Finance', value: 'finance' }, ], default: ['tech'], }, { displayName: '🎚️ Mentor Experience Level', name: 'search_experience_level', type: 'options', typeOptions: { multipleValues: true }, displayOptions: { show: { operation: ['search'], category: ['mentorat'] } }, options: [ { name: 'πŸš€ Intermediate', value: 'intermediate' }, { name: '⭐ Expert', value: 'expert' }, { name: 'πŸ₯· Ninja', value: 'ninja' }, ], default: ['expert'], }, { displayName: 'πŸ’Έ Budget Type', name: 'search_mentoring_type', type: 'options', displayOptions: { show: { operation: ['search'], category: ['mentorat'] } }, options: [ { name: 'Free mentoring', value: 'free' }, { name: 'Paid mentoring', value: 'paid' }, { name: 'Both', value: 'both' }, ], default: 'both', }, // === FRIENDS REGISTRATION === { displayName: '🎯 Interests', name: 'interests', type: 'options', typeOptions: { multipleValues: true }, displayOptions: { show: { operation: ['register'], category: ['friend'] } }, options: [ { name: 'Sport', value: 'sport' }, { name: 'Travel', value: 'travel' }, { name: 'Movies & TV', value: 'movies' }, { name: 'Music', value: 'music' }, { name: 'Gaming', value: 'gaming' }, { name: 'Cooking', value: 'cooking' }, { name: 'Art & Culture', value: 'art' }, { name: 'Tech', value: 'tech' }, { name: 'Reading', value: 'reading' }, { name: 'Outdoor Activities', value: 'outdoor' }, ], default: [], required: true, }, { displayName: 'πŸŽ‚ Age', name: 'age', type: 'number', displayOptions: { show: { operation: ['register'], category: ['friend'] } }, default: 25, typeOptions: { minValue: 16, maxValue: 99 }, }, { displayName: 'πŸ• Availability', name: 'availability', type: 'options', typeOptions: { multipleValues: true }, displayOptions: { show: { operation: ['register'], category: ['friend'] } }, options: [ { name: 'Weekends', value: 'weekends' }, { name: 'Evenings', value: 'evenings' }, { name: 'Daytime', value: 'daytime' }, { name: 'Flexible', value: 'flexible' }, ], default: ['weekends'], }, { displayName: 'πŸ‘₯ Preferred Age Group', name: 'preferred_age_group', type: 'options', displayOptions: { show: { operation: ['register'], category: ['friend'] } }, options: [ { name: '18-25', value: '18-25' }, { name: '25-35', value: '25-35' }, { name: '35-45', value: '35-45' }, { name: '45+', value: '45+' }, { name: 'Any age', value: 'any' }, ], default: 'any', }, { displayName: 'πŸ—£οΈ Languages Spoken', name: 'languages', type: 'string', displayOptions: { show: { operation: ['register'], category: ['friend'] } }, default: '', placeholder: 'French, English, Spanish', }, // === FRIENDS SEARCH === { displayName: '🎯 Common Interests', name: 'search_interests', type: 'options', typeOptions: { multipleValues: true }, displayOptions: { show: { operation: ['search'], category: ['friend'] } }, options: [ { name: 'Sport', value: 'sport' }, { name: 'Travel', value: 'travel' }, { name: 'Movies & TV', value: 'movies' }, { name: 'Music', value: 'music' }, { name: 'Gaming', value: 'gaming' }, { name: 'Cooking', value: 'cooking' }, { name: 'Art & Culture', value: 'art' }, { name: 'Tech', value: 'tech' }, { name: 'Reading', value: 'reading' }, { name: 'Outdoor Activities', value: 'outdoor' }, ], default: [], }, { displayName: 'πŸŽ‚ Age Range (Min)', name: 'search_age_min', type: 'number', displayOptions: { show: { operation: ['search'], category: ['friend'] } }, default: 18, typeOptions: { minValue: 16, maxValue: 99 }, }, { displayName: 'πŸŽ‚ Age Range (Max)', name: 'search_age_max', type: 'number', displayOptions: { show: { operation: ['search'], category: ['friend'] } }, default: 50, typeOptions: { minValue: 16, maxValue: 99 }, }, { displayName: 'πŸ• Shared Availability', name: 'search_availability', type: 'options', typeOptions: { multipleValues: true }, displayOptions: { show: { operation: ['search'], category: ['friend'] } }, options: [ { name: 'Weekends', value: 'weekends' }, { name: 'Evenings', value: 'evenings' }, { name: 'Daytime', value: 'daytime' }, { name: 'Flexible', value: 'flexible' }, ], default: ['weekends'], }, // === LOVE MALE REGISTRATION === { displayName: 'πŸŽ‚ Age', name: 'age', type: 'number', displayOptions: { show: { operation: ['register'], category: ['lovemale'] } }, required: true, default: 25, typeOptions: { minValue: 18, maxValue: 99 }, }, { displayName: 'πŸ’ Relationship Preferences', name: 'relationship_preferences', type: 'options', displayOptions: { show: { operation: ['register'], category: ['lovemale'] } }, options: [ { name: 'Serious Relationship', value: 'serious' }, { name: 'Casual Dating', value: 'casual' }, { name: 'Friendship First', value: 'friendship' }, { name: 'Open to All', value: 'open' }, ], default: 'serious', required: true, }, { displayName: 'πŸ’• Personal Interests', name: 'personal_interests', type: 'string', typeOptions: { rows: 2 }, displayOptions: { show: { operation: ['register'], category: ['lovemale'] } }, default: '', placeholder: 'What do you enjoy doing in your free time?', }, { displayName: 'πŸ³οΈβ€ Orientation', name: 'orientation', type: 'options', displayOptions: { show: { operation: ['register'], category: ['lovemale'] } }, options: [ { name: 'Heterosexual', value: 'hetero' }, { name: 'Homosexual', value: 'homo' }, { name: 'Bisexual', value: 'bi' }, { name: 'Pansexual', value: 'pan' }, { name: 'Other', value: 'other' }, ], default: 'hetero', }, // === LOVE MALE SEARCH === { displayName: 'πŸŽ‚ Age Range (Min)', name: 'search_age_min', type: 'number', displayOptions: { show: { operation: ['search'], category: ['lovemale'] } }, default: 18, typeOptions: { minValue: 18, maxValue: 99 }, }, { displayName: 'πŸŽ‚ Age Range (Max)', name: 'search_age_max', type: 'number', displayOptions: { show: { operation: ['search'], category: ['lovemale'] } }, default: 35, typeOptions: { minValue: 18, maxValue: 99 }, }, { displayName: 'πŸ’ Seeking Relationship Type', name: 'search_relationship_type', type: 'options', typeOptions: { multipleValues: true }, displayOptions: { show: { operation: ['search'], category: ['lovemale'] } }, options: [ { name: 'Serious Relationship', value: 'serious' }, { name: 'Casual Dating', value: 'casual' }, { name: 'Friendship First', value: 'friendship' }, { name: 'Open to All', value: 'open' }, ], default: ['serious'], }, { displayName: 'πŸ³οΈβ€πŸŒˆ Preferred Orientation', name: 'search_orientation', type: 'options', typeOptions: { multipleValues: true }, displayOptions: { show: { operation: ['search'], category: ['lovemale'] } }, options: [ { name: 'Heterosexual', value: 'hetero' }, { name: 'Homosexual', value: 'homo' }, { name: 'Bisexual', value: 'bi' }, { name: 'Pansexual', value: 'pan' }, { name: 'Other', value: 'other' }, ], default: ['hetero'], }, // === LOVE FEMALE REGISTRATION (identiques aux males) === { displayName: 'πŸŽ‚ Age', name: 'age', type: 'number', displayOptions: { show: { operation: ['register'], category: ['lovefemale'] } }, required: true, default: 25, typeOptions: { minValue: 18, maxValue: 99 }, }, { displayName: 'πŸ’ Relationship Preferences', name: 'relationship_preferences', type: 'options', displayOptions: { show: { operation: ['register'], category: ['lovefemale'] } }, options: [ { name: 'Serious Relationship', value: 'serious' }, { name: 'Casual Dating', value: 'casual' }, { name: 'Friendship First', value: 'friendship' }, { name: 'Open to All', value: 'open' }, ], default: 'serious', required: true, }, { displayName: 'πŸ’• Personal Interests', name: 'personal_interests', type: 'string', typeOptions: { rows: 2 }, displayOptions: { show: { operation: ['register'], category: ['lovefemale'] } }, default: '', placeholder: 'What do you enjoy doing in your free time?', }, { displayName: 'πŸ³οΈβ€πŸŒˆ Orientation', name: 'orientation', type: 'options', displayOptions: { show: { operation: ['register'], category: ['lovefemale'] } }, options: [ { name: 'Heterosexual', value: 'hetero' }, { name: 'Homosexual', value: 'homo' }, { name: 'Bisexual', value: 'bi' }, { name: 'Pansexual', value: 'pan' }, { name: 'Other', value: 'other' }, ], default: 'hetero', }, // === LOVE FEMALE SEARCH (identiques aux males) === { displayName: 'πŸŽ‚ Age Range (Min)', name: 'search_age_min', type: 'number', displayOptions: { show: { operation: ['search'], category: ['lovefemale'] } }, default: 18, typeOptions: { minValue: 18, maxValue: 99 }, }, { displayName: 'πŸŽ‚ Age Range (Max)', name: 'search_age_max', type: 'number', displayOptions: { show: { operation: ['search'], category: ['lovefemale'] } }, default: 35, typeOptions: { minValue: 18, maxValue: 99 }, }, { displayName: 'πŸ’ Seeking Relationship Type', name: 'search_relationship_type', type: 'options', typeOptions: { multipleValues: true }, displayOptions: { show: { operation: ['search'], category: ['lovefemale'] } }, options: [ { name: 'Serious Relationship', value: 'serious' }, { name: 'Casual Dating', value: 'casual' }, { name: 'Friendship First', value: 'friendship' }, { name: 'Open to All', value: 'open' }, ], default: ['serious'], }, { displayName: 'πŸ³οΈβ€ Preferred Orientation', name: 'search_orientation', type: 'options', typeOptions: { multipleValues: true }, displayOptions: { show: { operation: ['search'], category: ['lovefemale'] } }, options: [ { name: 'Heterosexual', value: 'hetero' }, { name: 'Homosexual', value: 'homo' }, { name: 'Bisexual', value: 'bi' }, { name: 'Pansexual', value: 'pan' }, { name: 'Other', value: 'other' }, ], default: ['hetero'], }, // === BUSINESS REGISTRATION === { displayName: '🏒 Business Sector', name: 'business_sector', type: 'options', displayOptions: { show: { operation: ['register'], category: ['business'] } }, options: [ { name: 'Technology', value: 'tech' }, { name: 'E-commerce', value: 'ecommerce' }, { name: 'Services', value: 'services' }, { name: 'Healthcare', value: 'healthcare' }, { name: 'Education', value: 'education' }, { name: 'Finance', value: 'finance' }, { name: 'Real Estate', value: 'realestate' }, { name: 'Manufacturing', value: 'manufacturing' }, ], default: 'tech', required: true, }, { displayName: 'πŸ“ Business Offer Description', name: 'business_description', type: 'string', typeOptions: { rows: 3 }, displayOptions: { show: { operation: ['register'], category: ['business'] } }, required: true, default: '', placeholder: 'Describe your business opportunity, partnership, or service...', }, { displayName: 'πŸ’° Budget Range', name: 'budget_range', type: 'options', displayOptions: { show: { operation: ['register'], category: ['business'] } }, options: [ { name: '< €10k', value: 'small' }, { name: '€10k - €50k', value: 'medium' }, { name: '€50k - €200k', value: 'large' }, { name: '€200k+', value: 'enterprise' }, { name: 'Equity based', value: 'equity' }, { name: 'Revenue share', value: 'revenue' }, ], default: 'medium', }, { displayName: '🎯 Business Goals', name: 'business_goals', type: 'options', typeOptions: { multipleValues: true }, displayOptions: { show: { operation: ['register'], category: ['business'] } }, options: [ { name: 'Investment', value: 'investment' }, { name: 'Partnership', value: 'partnership' }, { name: 'Client Acquisition', value: 'clients' }, { name: 'Supplier Network', value: 'suppliers' }, { name: 'Joint Venture', value: 'joint-venture' }, ], default: ['partnership'], }, // === BUSINESS SEARCH === { displayName: '🏒 Seeking Business Sector', name: 'search_business_sector', type: 'options', typeOptions: { multipleValues: true }, displayOptions: { show: { operation: ['search'], category: ['business'] } }, options: [ { name: 'Technology', value: 'tech' }, { name: 'E-commerce', value: 'ecommerce' }, { name: 'Services', value: 'services' }, { name: 'Healthcare', value: 'healthcare' }, { name: 'Education', value: 'education' }, { name: 'Finance', value: 'finance' }, { name: 'Real Estate', value: 'realestate' }, { name: 'Manufacturing', value: 'manufacturing' }, ], default: ['tech'], }, { displayName: 'πŸ’° Budget Range Looking For', name: 'search_budget_range', type: 'options', typeOptions: { multipleValues: true }, displayOptions: { show: { operation: ['search'], category: ['business'] } }, options: [ { name: '< €10k', value: 'small' }, { name: '€10k - €50k', value: 'medium' }, { name: '€50k - €200k', value: 'large' }, { name: '€200k+', value: 'enterprise' }, { name: 'Equity based', value: 'equity' }, { name: 'Revenue share', value: 'revenue' }, ], default: ['medium'], }, { displayName: '🎯 Interested In', name: 'search_business_goals', type: 'options', typeOptions: { multipleValues: true }, displayOptions: { show: { operation: ['search'], category: ['business'] } }, options: [ { name: 'Investment', value: 'investment' }, { name: 'Partnership', value: 'partnership' }, { name: 'Client Acquisition', value: 'clients' }, { name: 'Supplier Network', value: 'suppliers' }, { name: 'Joint Venture', value: 'joint-venture' }, ], default: ['partnership'], }, // === JOB REGISTRATION === { displayName: 'πŸ’Ό Position Type', name: 'position_type', type: 'options', displayOptions: { show: { operation: ['register'], category: ['job'] } }, options: [ { name: 'Developer', value: 'developer' }, { name: 'Designer', value: 'designer' }, { name: 'Manager', value: 'manager' }, { name: 'Sales', value: 'sales' }, { name: 'Marketing', value: 'marketing' }, { name: 'Data Analyst', value: 'data-analyst' }, { name: 'DevOps', value: 'devops' }, { name: 'Product Manager', value: 'product-manager' }, { name: 'Consultant', value: 'consultant' }, ], default: 'developer', required: true, }, { displayName: '🎚️ Experience Level', name: 'job_experience_level', type: 'options', displayOptions: { show: { operation: ['register'], category: ['job'] } }, options: [ { name: 'Junior (0-2 years)', value: 'junior' }, { name: 'Mid-level (2-5 years)', value: 'mid' }, { name: 'Senior (5-10 years)', value: 'senior' }, { name: 'Lead/Principal (10+ years)', value: 'lead' }, ], default: 'mid', required: true, }, { displayName: 'πŸ’° Desired Salary', name: 'desired_salary', type: 'string', displayOptions: { show: { operation: ['register'], category: ['job'] } }, default: '', placeholder: '€45k-55k/year, Negotiable, Equity + Salary', }, { displayName: 'πŸ”§ Specific Skills', name: 'specific_skills', type: 'string', displayOptions: { show: { operation: ['register'], category: ['job'] } }, default: '', placeholder: 'React, Node.js, AWS, Docker, Agile...', }, { displayName: 'πŸ“… Available Start Date', name: 'start_date', type: 'dateTime', displayOptions: { show: { operation: ['register'], category: ['job'] } }, default: '', }, // === JOB SEARCH === { displayName: 'πŸ’Ό Looking for Position', name: 'search_position_type', type: 'options', typeOptions: { multipleValues: true }, displayOptions: { show: { operation: ['search'], category: ['job'] } }, options: [ { name: 'Developer', value: 'developer' }, { name: 'Designer', value: 'designer' }, { name: 'Manager', value: 'manager' }, { name: 'Sales', value: 'sales' }, { name: 'Marketing', value: 'marketing' }, { name: 'Data Analyst', value: 'data-analyst' }, { name: 'DevOps', value: 'devops' }, { name: 'Product Manager', value: 'product-manager' }, { name: 'Consultant', value: 'consultant' }, ], default: ['developer'], }, { displayName: '🎚️ Minimum Experience Level', name: 'search_experience_level', type: 'options', displayOptions: { show: { operation: ['search'], category: ['job'] } }, options: [ { name: 'Junior (0-2 years)', value: 'junior' }, { name: 'Mid-level (2-5 years)', value: 'mid' }, { name: 'Senior (5-10 years)', value: 'senior' }, { name: 'Lead/Principal (10+ years)', value: 'lead' }, ], default: 'junior', }, { displayName: 'πŸ’° Salary Range', name: 'search_salary_range', type: 'string', displayOptions: { show: { operation: ['search'], category: ['job'] } }, default: '', placeholder: '€40k+, €50k-€70k, Equity welcome', }, { displayName: 'πŸ”§ Required Skills', name: 'search_skills', type: 'string', displayOptions: { show: { operation: ['search'], category: ['job'] } }, default: '', placeholder: 'React, Node.js, Python, * for any', }, // === CHAMPS COMMUNS SEARCH === { displayName: 'πŸ‘€ Name Keywords', name: 'search_name', type: 'string', displayOptions: { show: { operation: ['search'] } }, placeholder: 'charles, magic or * for any name', default: '*', }, { displayName: 'πŸ“ Location Search', name: 'search_location', type: 'string', displayOptions: { show: { operation: ['search'] } }, placeholder: 'marseille, paca, remote or * for anywhere', default: '*', }, // === CHAMP LIBRE REGISTRATION === { displayName: 'πŸ“ Additional Information', name: 'additional_info', type: 'string', typeOptions: { rows: 3 }, displayOptions: { show: { operation: ['register'] } }, default: '', placeholder: 'Any additional relevant information you want to share...', description: 'Free text field for any details you want to add', }, // === BACKEND URL === { displayName: '🌐 Backend URL', name: 'backendUrl', type: 'string', default: 'https://n8n.srv740722.hstgr.cloud/webhook/MAGICDIRECTORY', description: 'Magic Directory backend webhook URL', }, ], }; } async execute() { const items = this.getInputData(); const returnData = []; for (let i = 0; i < items.length; i++) { try { const operation = this.getNodeParameter('operation', i); const category = this.getNodeParameter('category', i); const backendUrl = this.getNodeParameter('backendUrl', i); let payload = {}; if (operation === 'register') { const registrationKey = `registration${category}`; // Champs communs const commonFields = { name: this.getNodeParameter('name', i), email: this.getNodeParameter('email', i), magic_inbox_url: this.getNodeParameter('magic_inbox_url', i), location: this.getNodeParameter('location', i), additional_info: this.getNodeParameter('additional_info', i, ''), }; // Champs spΓ©cifiques par catΓ©gorie let categoryFields = {}; switch (category) { case 'collaboration': categoryFields = { project_description: this.getNodeParameter('project_description', i), main_skills: this.getNodeParameter('main_skills', i), budget: this.getNodeParameter('budget', i, ''), availability_date: this.getNodeParameter('availability_date', i, ''), experience_years: this.getNodeParameter('experience_years', i, 1), }; break; case 'mentorat': categoryFields = { expertise_domain: this.getNodeParameter('expertise_domain', i), experience_level: this.getNodeParameter('experience_level', i), mentoring_duration: this.getNodeParameter('mentoring_duration', i, ''), mentoring_rate: this.getNodeParameter('mentoring_rate', i, ''), }; break; case 'friend': categoryFields = { interests: this.getNodeParameter('interests', i), age: this.getNodeParameter('age', i, 25), availability: this.getNodeParameter('availability', i, []), preferred_age_group: this.getNodeParameter('preferred_age_group', i, 'any'), languages: this.getNodeParameter('languages', i, ''), }; break; case 'lovemale': case 'lovefemale': categoryFields = { sex: category === 'lovemale' ? 'man' : 'woman', age: this.getNodeParameter('age', i), relationship_preferences: this.getNodeParameter('relationship_preferences', i), personal_interests: this.getNodeParameter('personal_interests', i, ''), orientation: this.getNodeParameter('orientation', i, 'hetero'), }; break; case 'business': categoryFields = { business_sector: this.getNodeParameter('business_sector', i), business_description: this.getNodeParameter('business_description', i), budget_range: this.getNodeParameter('budget_range', i, 'medium'), business_goals: this.getNodeParameter('business_goals', i, []), }; break; case 'job': categoryFields = { position_type: this.getNodeParameter('position_type', i), job_experience_level: this.getNodeParameter('job_experience_level', i), desired_salary: this.getNodeParameter('desired_salary', i, ''), specific_skills: this.getNodeParameter('specific_skills', i, ''), start_date: this.getNodeParameter('start_date', i, ''), }; break; } payload[registrationKey] = { ...commonFields, ...categoryFields }; } else if (operation === 'search') { const searchKey = `research${category}`; let searchFields = { name: this.getNodeParameter('search_name', i, '*'), location: this.getNodeParameter('search_location', i, '*'), }; // Champs de recherche spΓ©cifiques par catΓ©gorie switch (category) { case 'collaboration': searchFields = { ...searchFields, main_skills: this.getNodeParameter('search_main_skills', i, []), budget: this.getNodeParameter('search_budget', i, '*'), experience_min: this.getNodeParameter('search_experience_min', i, 0), availability_from: this.getNodeParameter('search_availability_from', i, ''), }; break; case 'mentorat': searchFields = { ...searchFields, expertise_domain: this.getNodeParameter('search_expertise_domain', i, []), experience_level: this.getNodeParameter('search_experience_level', i, []), mentoring_type: this.getNodeParameter('search_mentoring_type', i, 'both'), }; break; case 'friend': searchFields = { ...searchFields, interests: this.getNodeParameter('search_interests', i, []), age_min: this.getNodeParameter('search_age_min', i, 18), age_max: this.getNodeParameter('search_age_max', i, 50), availability: this.getNodeParameter('search_availability', i, []), }; break; case 'lovemale': case 'lovefemale': searchFields = { ...searchFields, seeking_sex: category === 'lovemale' ? 'woman' : 'man', age_min: this.getNodeParameter('search_age_min', i, 18), age_max: this.getNodeParameter('search_age_max', i, 35), relationship_type: this.getNodeParameter('search_relationship_type', i, ['serious']), orientation: this.getNodeParameter('search_orientation', i, ['hetero']), }; break; case 'business': searchFields = { ...searchFields, business_sector: this.getNodeParameter('search_business_sector', i, []), budget_range: this.getNodeParameter('search_budget_range', i, []), business_goals: this.getNodeParameter('search_business_goals', i, []), }; break; case 'job': searchFields = { ...searchFields, position_type: this.getNodeParameter('search_position_type', i, []), experience_level: this.getNodeParameter('search_experience_level', i, 'junior'), salary_range: this.getNodeParameter('search_salary_range', i, '*'), skills: this.getNodeParameter('search_skills', i, '*'), }; break;