{"_id":"@amonlibanio/n8n-openapi-node","name":"@amonlibanio/n8n-openapi-node","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@amonlibanio/n8n-openapi-node","version":"1.0.0","description":"Turn OpenAPI specs into n8n node","main":"dist/src/index.js","module":"dist/src/index.js","types":"dist/src/index.d.ts","scripts":{"build":"tsc","test":"bun test"},"repository":{"type":"git","url":"git+https://github.com/amonlibanio/n8n-openapi-node.git"},"keywords":["n8n","openapi"],"author":{"name":"amonlibanio"},"license":"MIT","bugs":{"url":"https://github.com/amonlibanio/n8n-openapi-node/issues"},"exports":{".":{"import":"./dist/src/index.js","require":"./dist/src/index.js"}},"homepage":"https://github.com/amonlibanio/n8n-openapi-node#readme","devDependencies":{"@types/lodash":"^4.17.20","n8n-core":"^1.14.1","n8n-workflow":"^1.82.0","typescript":"^5.9.2"},"dependencies":{"lodash":"^4.17.21","openapi-types":"^12.1.3","pino":"^9.4.0","pino-pretty":"^13.1.1"},"_id":"@amonlibanio/n8n-openapi-node@1.0.0","gitHead":"f30f00190878d11f8cd85c3661909ec45f535299","_nodeVersion":"22.19.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-SigvNsjIorBB2yN2ac47cFRDUccXjT3PfmKhHPEHM93B3PS5YVpqnsF0Bq9+hth7o8lFyj992Vu/RMra3c2R7Q==","shasum":"143c5d1b6660c83464db1b8c09f891c4427d8a2c","tarball":"https://registry.npmjs.org/@amonlibanio/n8n-openapi-node/-/n8n-openapi-node-1.0.0.tgz","fileCount":73,"unpackedSize":106619,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@amonlibanio%2fn8n-openapi-node@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCbEv5KqRnoeRuIqOvRdTuXY0foI3mUsQmQ5juA8z7PsAIhAPFwG+mXmaQIcGlB7Cu7c0UvVP8o/YRDwWjq8CCntUfz"}]},"_npmUser":{"name":"amonlibanio","email":"amon.libanio@gmail.com"},"directories":{},"maintainers":[{"name":"amonlibanio","email":"amon.libanio@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/n8n-openapi-node_1.0.0_1758020446093_0.7412045520386907"},"_hasShrinkwrap":false}},"time":{"created":"2025-09-16T11:00:45.951Z","1.0.0":"2025-09-16T11:00:46.268Z","modified":"2025-09-16T11:00:46.883Z"},"maintainers":[{"name":"amonlibanio","email":"amon.libanio@gmail.com"}],"description":"Turn OpenAPI specs into n8n node","homepage":"https://github.com/amonlibanio/n8n-openapi-node#readme","keywords":["n8n","openapi"],"repository":{"type":"git","url":"git+https://github.com/amonlibanio/n8n-openapi-node.git"},"author":{"name":"amonlibanio"},"bugs":{"url":"https://github.com/amonlibanio/n8n-openapi-node/issues"},"license":"MIT","readme":"# @amonlibanio/n8n-openapi-node\n\nConvert OpenAPI v3 specifications into n8n node properties.\n\n[![npm version](https://img.shields.io/npm/v/@amonlibanio/n8n-openapi-node.svg)](https://www.npmjs.com/package/@amonlibanio/n8n-openapi-node)\n\n## Installation\n\n```bash\nnpm install @amonlibanio/n8n-openapi-node\n```\n\n## Usage\n\n1. Add your OpenAPI specification file to your project\n2. Generate n8n node properties:\n\n```typescript\nimport { PropertiesBuilder } from '@amonlibanio/n8n-openapi-node';\nimport * as doc from './openapi.json';\nimport type { OpenAPIV3 } from 'openapi-types';\n\nconst parser = new PropertiesBuilder(doc as OpenAPIV3.Document);\nconst properties = parser.Build();\n\n// Use properties in your n8n node\nexport class MyNode implements INodeType {\n  description: INodeTypeDescription = {\n    // ... other properties\n    properties: properties, // Generated properties\n  };\n}\n```\n\n## What it generates\n\n- **Resources** from OpenAPI tags\n- **Operations** from OpenAPI operations (actions in n8n)\n- **Parameters** (query, path, header)\n- **Request body** fields\n- **Response** handling\n\n## Customization\n\n### Custom Parsers\n\n```typescript\nimport { PropertiesBuilder, IBuilderConfig, ResourceParser, OperationParser } from '@amonlibanio/n8n-openapi-node';\nimport type { OpenAPIV3 } from 'openapi-types';\n\n// Custom resource parser\nclass CustomResourceParser extends ResourceParser {\n  GetName(tag: OpenAPIV3.TagObject): string {\n    return tag['x-display-name'] || super.GetName(tag);\n  }\n}\n\n// Custom operation parser\nclass CustomOperationParser extends OperationParser {\n  ShouldSkip(operation: OpenAPIV3.OperationObject): boolean {\n    // Skip internal operations\n    return operation.tags?.includes('internal') || super.ShouldSkip(operation);\n  }\n}\n\nconst config: IBuilderConfig = {\n  resource: new CustomResourceParser(),\n  operation: new CustomOperationParser(),\n};\n\nconst parser = new PropertiesBuilder(doc as OpenAPIV3.Document, config);\nconst properties = parser.Build();\n```\n\n### Property Overrides\n\nOverride specific properties after generation:\n\n```typescript\nconst overrides = [\n  {\n    find: { name: 'session', type: 'string' },\n    replace: { default: '={{ $json.session }}' }\n  },\n  {\n    find: { name: 'apiKey', type: 'string' },\n    replace: { \n      default: '={{ $credentials.apiKey }}',\n      required: true \n    }\n  }\n];\n\nconst properties = parser.Build(overrides);\n```\n\n## Examples\n\n### Basic Usage\n\n```typescript\nimport { PropertiesBuilder } from '@amonlibanio/n8n-openapi-node';\nimport * as openApiSpec from './api-spec.json';\nimport type { OpenAPIV3 } from 'openapi-types';\n\n// Generate properties from OpenAPI spec\nconst builder = new PropertiesBuilder(openApiSpec as OpenAPIV3.Document);\nconst properties = builder.Build();\n\n// Use in your n8n node\nexport class MyApiNode implements INodeType {\n  description: INodeTypeDescription = {\n    displayName: 'My API',\n    name: 'myApi',\n    group: ['transform'],\n    version: 1,\n    properties: properties, // Generated properties\n    // ... other node configuration\n  };\n}\n```\n\n### Custom Parsers\n\n```typescript\nimport { PropertiesBuilder, IBuilderConfig, ResourceParser, OperationParser } from '@amonlibanio/n8n-openapi-node';\nimport type { OpenAPIV3 } from 'openapi-types';\n\n// Custom resource parser\nclass CustomResourceParser extends ResourceParser {\n  GetName(tag: OpenAPIV3.TagObject): string {\n    return tag['x-display-name'] || super.GetName(tag);\n  }\n}\n\n// Custom operation parser\nclass CustomOperationParser extends OperationParser {\n  ShouldSkip(operation: OpenAPIV3.OperationObject): boolean {\n    // Skip internal operations\n    return operation.tags?.includes('internal') || super.ShouldSkip(operation);\n  }\n}\n\n// Use custom parsers\nconst config: IBuilderConfig = {\n  resource: new CustomResourceParser(),\n  operation: new CustomOperationParser(),\n};\n\nconst builder = new PropertiesBuilder(openApiSpec as OpenAPIV3.Document, config);\nconst properties = builder.Build();\n```\n\n### Property Overrides\n\n```typescript\n// Override specific properties\nconst overrides = [\n  {\n    find: { name: 'apiKey', type: 'string' },\n    replace: { \n      default: '={{ $credentials.apiKey }}',\n      required: true \n    }\n  },\n  {\n    find: { name: 'userId', type: 'number' },\n    replace: { \n      default: '={{ $json.id }}',\n      displayName: 'User ID' \n    }\n  }\n];\n\nconst properties = builder.Build(overrides);\n```\n\n## FAQ\n\n**OpenAPI v2?** Convert to v3 at [editor.swagger.io](https://editor.swagger.io)\n\n**YAML spec?** Convert to JSON at [editor.swagger.io](https://editor.swagger.io)\n\n**Issues?** Open a [GitHub issue](https://github.com/amonlibanio/n8n-openapi-node/issues) with your spec file.\n","readmeFilename":"README.md","_rev":"1-7d15bab02171c277890d60e00d64c419"}