dynamically pulling and passing subscriptions from directus to mesh
This commit is contained in:
		@@ -10,7 +10,7 @@ sources:
 | 
			
		||||
        operationHeaders:
 | 
			
		||||
          Authorization: Bearer {env.DIRECTUS_API}
 | 
			
		||||
additionalResolvers:
 | 
			
		||||
  - ./resolvers/projects.js
 | 
			
		||||
  - ./resolvers/directus_subscriptions.js
 | 
			
		||||
 | 
			
		||||
  # - name: Cloudron
 | 
			
		||||
  #   handler:
 | 
			
		||||
 
 | 
			
		||||
@@ -5,13 +5,13 @@ const { parse } = require('graphql');
 | 
			
		||||
const fs = require('fs');
 | 
			
		||||
 | 
			
		||||
const pubsub = new PubSub();
 | 
			
		||||
const PROJECTS_MUTATED = 'PROJECTS_MUTATED';
 | 
			
		||||
 | 
			
		||||
// Read the schema file
 | 
			
		||||
const schema = fs.readFileSync('./schemas/directus.graphql', 'utf8');
 | 
			
		||||
 | 
			
		||||
// Parse the schema
 | 
			
		||||
const document = parse(schema);
 | 
			
		||||
 | 
			
		||||
// Function to find a type definition by name
 | 
			
		||||
const findTypeDefinition = (typeName) => {
 | 
			
		||||
  return document.definitions.find(
 | 
			
		||||
@@ -36,9 +36,6 @@ const extractFields = (type, depth = 0) => {
 | 
			
		||||
    .join('\n');
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const projectsType = findTypeDefinition('projects');
 | 
			
		||||
const projectsFields = extractFields(projectsType);
 | 
			
		||||
 | 
			
		||||
const client = createClient({
 | 
			
		||||
  url: 'wss://directus.andert.me/graphql',
 | 
			
		||||
  keepAlive: 30000,
 | 
			
		||||
@@ -95,9 +92,19 @@ const handleSubscription = (typeName) => {
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Find the Subscription type definition
 | 
			
		||||
const subscriptionType = findTypeDefinition('Subscription');
 | 
			
		||||
 | 
			
		||||
// Extract the subscription type names, excluding the ones starting with 'directus_'
 | 
			
		||||
const subscriptionTypeNames = subscriptionType.fields
 | 
			
		||||
  .map(field => field.name.value.replace('_mutated', ''))
 | 
			
		||||
  .filter(name => !name.startsWith('directus_'));
 | 
			
		||||
 | 
			
		||||
// Generate subscriptions for each type
 | 
			
		||||
const subscriptions = subscriptionTypeNames.reduce((acc, typeName) => {
 | 
			
		||||
  return { ...acc, ...handleSubscription(typeName) };
 | 
			
		||||
}, {});
 | 
			
		||||
 | 
			
		||||
module.exports = {
 | 
			
		||||
  Subscription: {
 | 
			
		||||
    ...handleSubscription('projects'),
 | 
			
		||||
    ...handleSubscription('todos'),
 | 
			
		||||
  },
 | 
			
		||||
  Subscription: subscriptions,
 | 
			
		||||
};
 | 
			
		||||
		Reference in New Issue
	
	Block a user