Trying to Create Appwrite N8N Connector

Describe the problem/error/question

Just struggling with deployment, wondering if I can use Appwrite’s node-appwrite SDK for server side operations without using their REST API as the node-appwrite SDK is just using their REST API

What is the error message (if any)?

Right now saying the specified package could not be loading, but the real problem is they display on the list as addable then give me an error, “Error loading something displayName undefined”

Please share your workflow

(Select the nodes on your canvas and use the keyboard shortcuts CMD+C/CTRL+C and CMD+V/CTRL+V to copy and paste the workflow.)

Share the output returned by the last node

Information on your n8n setup

  • n8n version:
  • Database (default: SQLite):
  • n8n EXECUTIONS_PROCESS setting (default: own, main):
  • Running n8n via (Docker, npm, n8n cloud, desktop app):
  • Operating system:

Hey @ZachHandley,

Welcome to the community :tada:

There are a few issues in your node looking at it, I would start by updating your dependencies to only include what is needed for example including n8n-core is likely to break things.

You can use the Appwrite SDK if you want to although our preferred aproach is to use the API where possible as it can rule out any issues with bugs in extra packages.

Which field is giving you the error at the moment? I don’t use Appwrite but looking at the node there is a lot of stuff commented out that could probably do with being cleaned up first.

1 Like

My problem is I can’t really tell what’s erroring. Sometimes it’s when I install it, other times it’s when I move something around, right now I get the error, “Unable to find node Appwrite” while updating but yeah I’ve done a lot. I’ll debug more shortly and remove n8n-core, I didn’t want it anyways, I was basing it off the wrong package I think

So after tinkering around I can’t tell but is it because I have an options selector in a fixedCollection or is there a cap on the number of options a fixedCollection can have?

displayName: 'Additional Fields',
		name: 'additionalFields',
		type: 'fixedCollection',
		placeholder: 'Add Query',
		description: 'Queries to filter the documents by. [learn more about filtering](https://appwrite.io/docs/filters).',
		typeOptions: {
			multipleValues: true,
		},
		displayOptions: {
			show: {
				resource: [
					'document',
				],
				operation: [
					'getAllDocs',
					'getDoc',
				],
			},
		},
		default: {},
		options: [
			{
				displayName: 'Index to Select',
				name: 'index',
				type: 'string',
				default: '',
				description: 'Index to select, if needed',
				requiresDataPath: 'single',
				// {
				// 	displayName: 'Select',
				// 	name: 'indexSelect',
				// 	type: 'list',
				// 	hint: "Begin typing your index",
				// 	typeOptions: {
				// 		searchListMethod: 'listIndexes',
				// 		searchable: true,
				// 		searchFilterRequired: false,
				// 	},
				// },
			},
			{
				displayName: 'Value 1',
				name: 'value1',
				type: 'string',
				default: '',
				requiresDataPath: 'multiple',
				description: 'First value for queries, such as what the index is equal to, or the first value of a between',
			},
			{
				displayName: 'Value 2',
				name: 'value2',
				type: 'string',
				default: '',
				requiresDataPath: 'single',
				description: 'Second value for between and a few other queries, ignore if not needed',
			},
			{
				displayName: 'Query',
				name: 'query',
				type: 'options',
				default: 'equal',
				options: [
					{
						name: 'Between',
						value: 'between',
						description: 'Returns document if attribute value falls between the two values. The boundary values are inclusive and can be strings or numbers.',
					},
					{
						name: 'Cursor After',
						value: 'cursor_after',
						description: 'Places the cursor after the specified resource ID. Used for pagination.',
					},
					{
						name: 'Cursor Before',
						value: 'cursor_before',
						description: 'Places the cursor before the specified resource ID. Used for pagination.',
					},
					{
						name: 'Ends With',
						value: 'ends_with',
						description: 'Returns documents if a string attributes ends with a substring',
					},
					{
						name: 'Equal',
						value: 'equal',
						description: 'Returns document if attribute is equal to any value in the provided array',
					},
					{
						name: 'Greater Than',
						value: 'greater_than',
						description: 'Returns document if attribute is greater than the provided value',
					},
					{
						name: 'Greater Than or Equal',
						value: 'greater_than_or_equal',
						description: 'Returns document if attribute is greater than or equal to the provided value',
					},
					{
						name: 'Is Not Null',
						value: 'is_not_null',
						description: 'Returns documents where attribute value is not null',
					},
					{
						name: 'Is Null',
						value: 'is_null',
						description: 'Returns documents where attribute value is null',
					},
					{
						name: 'Less Than',
						value: 'less_than',
						description: 'Returns document if attribute is less than the provided value',
					},
					{
						name: 'Less Than or Equal',
						value: 'less_than_or_equal',
						description: 'Returns document if attribute is less than or equal to the provided value',
					},
					{
						name: 'Limit',
						value: 'limit',
						description: 'Limits the number of results returned by the query. Used for pagination. If the limit query is not used, the limit defaults to 25 results.',
					},
					{
						name: 'Not Equal',
						value: 'not_equal',
						description: 'Returns document if attribute is not equal to any value in the provided array',
					},
					{
						name: 'Offset',
						value: 'offset',
						description: 'Offset the results returned by skipping some of the results. Used for pagination.',
					},
					{
						name: 'Order Ascending',
						value: 'order_ascending',
						description: 'Orders results in ascending order by attribute. Attribute must be indexed. Pass in an empty string to return in natural order.',
					},
					{
						name: 'Order Descending',
						value: 'order_descending',
						description: 'Orders results in descending order by attribute. Attribute must be indexed. Pass in an empty string to return in natural order.',
					},
					{
						name: 'Search',
						value: 'search',
						description: 'Searches string attributes for provided keywords. Requires a Full-text index on queried attributes.',
					},
					{
						name: 'Select',
						value: 'select',
						description: 'Select which attributes should be returned from a document',
					},
					{
						name: 'Starts With',
						value: 'starts_with',
						description: 'Returns documents if a string attributes starts with a substring',
					},
				],
			},
		]

Hey @ZachHandley,

There shouldn’t be a limit, I think I set up a node a while back that had over 30

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.