n8n-nodes-moca 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,5 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 60 60" width="60" height="60" role="img" aria-label="MOCA">
2
+ <rect x="2" y="2" width="56" height="56" rx="12" fill="#4C9BE8"/>
3
+ <ellipse cx="30" cy="12" rx="17" ry="5" fill="#0B2947"/>
4
+ <path d="M14 45V15h9.2l6.8 13.4L36.8 15H46v30h-8.2V28.6L32.6 39h-5.2l-5.2-10.4V45z" fill="#0B1D33"/>
5
+ </svg>
@@ -0,0 +1,5 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 60 60" width="60" height="60" role="img" aria-label="MOCA">
2
+ <rect x="2" y="2" width="56" height="56" rx="12" fill="#12467F"/>
3
+ <ellipse cx="30" cy="12" rx="17" ry="5" fill="#3D8FD6"/>
4
+ <path d="M14 45V15h9.2l6.8 13.4L36.8 15H46v30h-8.2V28.6L32.6 39h-5.2l-5.2-10.4V45z" fill="#FFFFFF"/>
5
+ </svg>
@@ -0,0 +1,33 @@
1
+ import type { IExecuteFunctions, IHttpRequestOptions, INode } from 'n8n-workflow';
2
+ import type { MocaEnvironment, MocaResponse } from './protocol';
3
+ export interface MocaCredentials {
4
+ url: string;
5
+ username: string;
6
+ password: string;
7
+ device?: string;
8
+ warehouse?: string;
9
+ locale?: string;
10
+ ignoreSslIssues?: boolean;
11
+ timeout?: number;
12
+ }
13
+ export declare const MOCA_CONTENT_TYPE = "application/moca-xml";
14
+ export declare function buildLoginQuery(username: string, password: string): string;
15
+ export type MocaHttpRequester = (options: IHttpRequestOptions) => Promise<unknown>;
16
+ export interface ExecuteOptions {
17
+ autocommit?: boolean;
18
+ environment?: MocaEnvironment;
19
+ }
20
+ export declare class MocaConnection {
21
+ private readonly request;
22
+ private readonly node;
23
+ private readonly credentials;
24
+ private sessionKey;
25
+ private sessionLocale;
26
+ constructor(request: MocaHttpRequester, node: INode, credentials: MocaCredentials);
27
+ get environment(): MocaEnvironment;
28
+ get isLoggedIn(): boolean;
29
+ private post;
30
+ login(): Promise<MocaResponse>;
31
+ execute(command: string, options?: ExecuteOptions): Promise<MocaResponse>;
32
+ }
33
+ export declare function createConnection(context: IExecuteFunctions, credentials: MocaCredentials): MocaConnection;
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MocaConnection = exports.MOCA_CONTENT_TYPE = void 0;
4
+ exports.buildLoginQuery = buildLoginQuery;
5
+ exports.createConnection = createConnection;
6
+ const n8n_workflow_1 = require("n8n-workflow");
7
+ const protocol_1 = require("./protocol");
8
+ exports.MOCA_CONTENT_TYPE = 'application/moca-xml';
9
+ function buildLoginQuery(username, password) {
10
+ return `login user where usr_id = ${(0, protocol_1.quoteMocaLiteral)(username)} and usr_pswd = ${(0, protocol_1.quoteMocaLiteral)(password)}`;
11
+ }
12
+ function findValue(response, columnName, fallbackPosition) {
13
+ const row = response.rows[0];
14
+ if (row === undefined)
15
+ return null;
16
+ const match = Object.keys(row).find((key) => key.toLowerCase() === columnName);
17
+ if (match !== undefined) {
18
+ const value = row[match];
19
+ return typeof value === 'string' ? value : null;
20
+ }
21
+ const positional = Object.values(row)[fallbackPosition - 1];
22
+ return typeof positional === 'string' ? positional : null;
23
+ }
24
+ class MocaConnection {
25
+ constructor(request, node, credentials) {
26
+ this.request = request;
27
+ this.node = node;
28
+ this.credentials = credentials;
29
+ this.sessionKey = null;
30
+ this.sessionLocale = null;
31
+ }
32
+ get environment() {
33
+ const environment = { USR_ID: this.credentials.username };
34
+ if (this.sessionKey !== null)
35
+ environment.SESSION_KEY = this.sessionKey;
36
+ if (this.credentials.device)
37
+ environment.DEVCOD = this.credentials.device;
38
+ if (this.credentials.warehouse)
39
+ environment.WH_ID = this.credentials.warehouse;
40
+ const locale = this.credentials.locale || this.sessionLocale;
41
+ if (locale)
42
+ environment.LOCALE_ID = locale;
43
+ return environment;
44
+ }
45
+ get isLoggedIn() {
46
+ return this.sessionKey !== null;
47
+ }
48
+ async post(query, options) {
49
+ var _a, _b, _c;
50
+ const body = (0, protocol_1.buildMocaRequest)({
51
+ query,
52
+ environment: (_a = options.environment) !== null && _a !== void 0 ? _a : this.environment,
53
+ autocommit: (_b = options.autocommit) !== null && _b !== void 0 ? _b : true,
54
+ });
55
+ const requestOptions = {
56
+ method: 'POST',
57
+ url: this.credentials.url,
58
+ headers: { 'Content-Type': exports.MOCA_CONTENT_TYPE, Accept: exports.MOCA_CONTENT_TYPE },
59
+ body,
60
+ json: false,
61
+ returnFullResponse: false,
62
+ skipSslCertificateValidation: this.credentials.ignoreSslIssues === true,
63
+ timeout: (_c = this.credentials.timeout) !== null && _c !== void 0 ? _c : 300000,
64
+ };
65
+ let raw;
66
+ try {
67
+ raw = await this.request(requestOptions);
68
+ }
69
+ catch (error) {
70
+ throw new n8n_workflow_1.NodeApiError(this.node, error, {
71
+ message: 'The MOCA server could not be reached',
72
+ description: `Request to ${this.credentials.url} failed: ${error.message}`,
73
+ });
74
+ }
75
+ const text = typeof raw === 'string' ? raw : String(raw !== null && raw !== void 0 ? raw : '');
76
+ if (text.trim() === '') {
77
+ throw new n8n_workflow_1.NodeOperationError(this.node, 'The MOCA server returned an empty response', {
78
+ description: `Check that ${this.credentials.url} points at the MOCA service endpoint.`,
79
+ });
80
+ }
81
+ return (0, protocol_1.parseMocaResponse)(text);
82
+ }
83
+ async login() {
84
+ var _a;
85
+ this.sessionKey = null;
86
+ this.sessionLocale = null;
87
+ const response = await this.post(buildLoginQuery(this.credentials.username, this.credentials.password), {
88
+ autocommit: false,
89
+ environment: { USR_ID: this.credentials.username },
90
+ });
91
+ if (response.status !== protocol_1.MOCA_STATUS.OK) {
92
+ throw new n8n_workflow_1.NodeOperationError(this.node, `MOCA login failed (status ${response.status})`, { description: (_a = response.message) !== null && _a !== void 0 ? _a : 'Check the user name, password and service URL.' });
93
+ }
94
+ this.sessionKey = findValue(response, 'session_key', 5);
95
+ this.sessionLocale = findValue(response, 'locale_id', 2);
96
+ if (this.sessionKey === null) {
97
+ throw new n8n_workflow_1.NodeOperationError(this.node, 'MOCA login succeeded but no session key was returned', { description: 'The server response did not contain a session_key column.' });
98
+ }
99
+ return response;
100
+ }
101
+ async execute(command, options = {}) {
102
+ if (!this.isLoggedIn)
103
+ await this.login();
104
+ let response = await this.post(command, options);
105
+ if (response.status === protocol_1.MOCA_STATUS.SESSION_EXPIRED) {
106
+ await this.login();
107
+ response = await this.post(command, options);
108
+ }
109
+ return response;
110
+ }
111
+ }
112
+ exports.MocaConnection = MocaConnection;
113
+ function createConnection(context, credentials) {
114
+ const request = async (options) => await context.helpers.httpRequest(options);
115
+ return new MocaConnection(request, context.getNode(), credentials);
116
+ }
117
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../nodes/Moca/transport/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ export declare const MOCA_STATUS: {
2
+ readonly OK: 0;
3
+ readonly NO_ROWS: 510;
4
+ readonly SESSION_EXPIRED: 523;
5
+ };
6
+ export interface MocaColumn {
7
+ name: string;
8
+ type?: string;
9
+ length?: number;
10
+ }
11
+ export type MocaValue = string | number | null | MocaResultSet;
12
+ export interface MocaResultSet {
13
+ columns: MocaColumn[];
14
+ rows: Array<Record<string, MocaValue>>;
15
+ }
16
+ export interface MocaResponse extends MocaResultSet {
17
+ status: number;
18
+ message: string | null;
19
+ }
20
+ export interface MocaEnvironment {
21
+ [name: string]: string | undefined;
22
+ }
23
+ export interface BuildRequestOptions {
24
+ query: string;
25
+ environment?: MocaEnvironment;
26
+ autocommit?: boolean;
27
+ }
28
+ export declare function buildMocaRequest(options: BuildRequestOptions): string;
29
+ export declare function quoteMocaLiteral(value: string): string;
30
+ export declare function withPublishedData(command: string, data: Record<string, string>): string;
31
+ export declare function asLocalSyntax(sql: string): string;
32
+ export declare function parseMocaResponse(xml: string): MocaResponse;
33
+ export declare function convertNumericColumns(resultSet: MocaResultSet): Array<Record<string, MocaValue>>;
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MOCA_STATUS = void 0;
4
+ exports.buildMocaRequest = buildMocaRequest;
5
+ exports.quoteMocaLiteral = quoteMocaLiteral;
6
+ exports.withPublishedData = withPublishedData;
7
+ exports.asLocalSyntax = asLocalSyntax;
8
+ exports.parseMocaResponse = parseMocaResponse;
9
+ exports.convertNumericColumns = convertNumericColumns;
10
+ const xml_1 = require("./xml");
11
+ exports.MOCA_STATUS = {
12
+ OK: 0,
13
+ NO_ROWS: 510,
14
+ SESSION_EXPIRED: 523,
15
+ };
16
+ function buildMocaRequest(options) {
17
+ const { query, environment = {}, autocommit = true } = options;
18
+ const vars = Object.entries(environment)
19
+ .filter(([, value]) => value !== undefined && value !== null && value !== '')
20
+ .map(([name, value]) => ` <var name="${(0, xml_1.escapeXmlAttribute)(name)}" value="${(0, xml_1.escapeXmlAttribute)(String(value))}"/>`);
21
+ return [
22
+ '<?xml version="1.0" encoding="UTF-8"?>',
23
+ `<moca-request autocommit="${autocommit ? 'true' : 'false'}">`,
24
+ ' <environment>',
25
+ ...vars,
26
+ ' </environment>',
27
+ ` <query>${(0, xml_1.escapeXmlText)(query)}</query>`,
28
+ '</moca-request>',
29
+ '',
30
+ ].join('\n');
31
+ }
32
+ function quoteMocaLiteral(value) {
33
+ return `'${value.replace(/'/g, "''")}'`;
34
+ }
35
+ function withPublishedData(command, data) {
36
+ const entries = Object.entries(data).filter(([name]) => name.trim() !== '');
37
+ if (entries.length === 0)
38
+ return command;
39
+ const assignments = entries
40
+ .map(([name, value]) => `${name.trim()} = ${quoteMocaLiteral(value !== null && value !== void 0 ? value : '')}`)
41
+ .join('\n and ');
42
+ return `publish data\n where ${assignments}\n|\n${command}`;
43
+ }
44
+ function asLocalSyntax(sql) {
45
+ const trimmed = sql.trim().replace(/;\s*$/, '');
46
+ if (trimmed.startsWith('[') && trimmed.endsWith(']'))
47
+ return trimmed;
48
+ return `[\n${trimmed}\n]`;
49
+ }
50
+ function parseColumns(metadata) {
51
+ if (metadata === undefined)
52
+ return [];
53
+ return (0, xml_1.findChildren)(metadata, 'column').map((column) => {
54
+ var _a, _b;
55
+ const length = Number.parseInt((_a = column.attributes.length) !== null && _a !== void 0 ? _a : '', 10);
56
+ const parsed = { name: (_b = column.attributes.name) !== null && _b !== void 0 ? _b : '' };
57
+ if (column.attributes.type !== undefined)
58
+ parsed.type = column.attributes.type;
59
+ if (!Number.isNaN(length))
60
+ parsed.length = length;
61
+ return parsed;
62
+ });
63
+ }
64
+ function isNullField(field) {
65
+ var _a, _b;
66
+ const flag = ((_b = (_a = field.attributes.null) !== null && _a !== void 0 ? _a : field.attributes.nil) !== null && _b !== void 0 ? _b : '').toLowerCase();
67
+ if (flag === 'true' || flag === '1' || flag === 'yes')
68
+ return true;
69
+ return !field.hasText && field.children.length === 0;
70
+ }
71
+ function parseResults(results) {
72
+ if (results === undefined)
73
+ return { columns: [], rows: [] };
74
+ const columns = parseColumns((0, xml_1.findChild)(results, 'metadata'));
75
+ const data = (0, xml_1.findChild)(results, 'data');
76
+ const rowNodes = data === undefined ? [] : (0, xml_1.findChildren)(data, 'row');
77
+ const rows = rowNodes.map((rowNode) => {
78
+ const row = {};
79
+ const timesSeen = new Map();
80
+ (0, xml_1.findChildren)(rowNode, 'field').forEach((field, position) => {
81
+ var _a, _b, _c, _d;
82
+ const name = (_c = (_b = (_a = columns[position]) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : field.attributes.name) !== null && _c !== void 0 ? _c : `field_${position + 1}`;
83
+ const occurrence = ((_d = timesSeen.get(name)) !== null && _d !== void 0 ? _d : 0) + 1;
84
+ timesSeen.set(name, occurrence);
85
+ const key = occurrence === 1 ? name : `${name}_${occurrence}`;
86
+ const nested = (0, xml_1.findChild)(field, 'moca-results');
87
+ if (nested !== undefined) {
88
+ row[key] = parseResults(nested);
89
+ }
90
+ else {
91
+ row[key] = isNullField(field) ? null : field.text;
92
+ }
93
+ });
94
+ return row;
95
+ });
96
+ return { columns, rows };
97
+ }
98
+ function parseMocaResponse(xml) {
99
+ var _a, _b, _c, _d;
100
+ const document = (0, xml_1.parseXml)(xml);
101
+ const response = (_b = (_a = (0, xml_1.findChild)(document, 'moca-response')) !== null && _a !== void 0 ? _a : document.children[0]) !== null && _b !== void 0 ? _b : document;
102
+ const statusNode = (0, xml_1.findChild)(response, 'status');
103
+ const status = Number.parseInt((_c = statusNode === null || statusNode === void 0 ? void 0 : statusNode.text.trim()) !== null && _c !== void 0 ? _c : '', 10);
104
+ const messageNode = (0, xml_1.findChild)(response, 'message');
105
+ const results = (_d = (0, xml_1.findChild)(response, 'moca-results')) !== null && _d !== void 0 ? _d : (0, xml_1.findDescendant)(response, 'moca-results');
106
+ return {
107
+ status: Number.isNaN(status) ? -1 : status,
108
+ message: messageNode === undefined ? null : messageNode.text.trim(),
109
+ ...parseResults(results),
110
+ };
111
+ }
112
+ const NUMERIC_TYPES = new Set(['I', 'F', 'N', 'L', 'J', 'INTEGER', 'FLOAT', 'NUMBER', 'LONG']);
113
+ function convertNumericColumns(resultSet) {
114
+ const numericColumns = new Set(resultSet.columns
115
+ .filter((column) => { var _a; return NUMERIC_TYPES.has(((_a = column.type) !== null && _a !== void 0 ? _a : '').toUpperCase()); })
116
+ .map((column) => column.name));
117
+ if (numericColumns.size === 0)
118
+ return resultSet.rows;
119
+ return resultSet.rows.map((row) => {
120
+ const converted = {};
121
+ for (const [key, value] of Object.entries(row)) {
122
+ if (numericColumns.has(key) && typeof value === 'string' && value.trim() !== '') {
123
+ const asNumber = Number(value);
124
+ converted[key] = Number.isNaN(asNumber) ? value : asNumber;
125
+ }
126
+ else {
127
+ converted[key] = value;
128
+ }
129
+ }
130
+ return converted;
131
+ });
132
+ }
133
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../../nodes/Moca/transport/protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export interface XmlNode {
2
+ name: string;
3
+ attributes: Record<string, string>;
4
+ children: XmlNode[];
5
+ text: string;
6
+ hasText: boolean;
7
+ }
8
+ export declare function escapeXmlText(value: string): string;
9
+ export declare function escapeXmlAttribute(value: string): string;
10
+ export declare function decodeXmlEntities(value: string): string;
11
+ export declare function parseXml(input: string): XmlNode;
12
+ export declare function findChild(node: XmlNode, name: string): XmlNode | undefined;
13
+ export declare function findDescendant(node: XmlNode, name: string): XmlNode | undefined;
14
+ export declare function findChildren(node: XmlNode, name: string): XmlNode[];
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.escapeXmlText = escapeXmlText;
4
+ exports.escapeXmlAttribute = escapeXmlAttribute;
5
+ exports.decodeXmlEntities = decodeXmlEntities;
6
+ exports.parseXml = parseXml;
7
+ exports.findChild = findChild;
8
+ exports.findDescendant = findDescendant;
9
+ exports.findChildren = findChildren;
10
+ const NAMED_ENTITIES = {
11
+ amp: '&',
12
+ lt: '<',
13
+ gt: '>',
14
+ quot: '"',
15
+ apos: "'",
16
+ };
17
+ function escapeXmlText(value) {
18
+ return value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
19
+ }
20
+ function escapeXmlAttribute(value) {
21
+ return escapeXmlText(value).replace(/"/g, '&quot;');
22
+ }
23
+ function decodeXmlEntities(value) {
24
+ return value.replace(/&(#x?[0-9a-fA-F]+|[a-zA-Z]+);/g, (match, entity) => {
25
+ if (entity.startsWith('#x') || entity.startsWith('#X')) {
26
+ const code = Number.parseInt(entity.slice(2), 16);
27
+ return Number.isNaN(code) ? match : String.fromCodePoint(code);
28
+ }
29
+ if (entity.startsWith('#')) {
30
+ const code = Number.parseInt(entity.slice(1), 10);
31
+ return Number.isNaN(code) ? match : String.fromCodePoint(code);
32
+ }
33
+ const named = NAMED_ENTITIES[entity];
34
+ return named === undefined ? match : named;
35
+ });
36
+ }
37
+ function createNode(name) {
38
+ return { name, attributes: {}, children: [], text: '', hasText: false };
39
+ }
40
+ function addText(node, raw, decode) {
41
+ if (raw === '')
42
+ return;
43
+ node.text += decode ? decodeXmlEntities(raw) : raw;
44
+ node.hasText = true;
45
+ }
46
+ function findTagEnd(input, start) {
47
+ let quote = null;
48
+ for (let i = start; i < input.length; i++) {
49
+ const char = input[i];
50
+ if (quote !== null) {
51
+ if (char === quote)
52
+ quote = null;
53
+ }
54
+ else if (char === '"' || char === "'") {
55
+ quote = char;
56
+ }
57
+ else if (char === '>') {
58
+ return i;
59
+ }
60
+ }
61
+ return -1;
62
+ }
63
+ function parseAttributes(source, node) {
64
+ var _a;
65
+ const pattern = /([^\s=/<>]+)\s*=\s*("([^"]*)"|'([^']*)')/g;
66
+ let match = pattern.exec(source);
67
+ while (match !== null) {
68
+ const value = match[3] !== undefined ? match[3] : ((_a = match[4]) !== null && _a !== void 0 ? _a : '');
69
+ node.attributes[match[1]] = decodeXmlEntities(value);
70
+ match = pattern.exec(source);
71
+ }
72
+ }
73
+ function parseXml(input) {
74
+ const root = createNode('#document');
75
+ const stack = [root];
76
+ let index = 0;
77
+ while (index < input.length) {
78
+ const current = stack[stack.length - 1];
79
+ const open = input.indexOf('<', index);
80
+ if (open === -1) {
81
+ addText(current, input.slice(index), true);
82
+ break;
83
+ }
84
+ if (open > index) {
85
+ addText(current, input.slice(index, open), true);
86
+ }
87
+ if (input.startsWith('<!--', open)) {
88
+ const end = input.indexOf('-->', open);
89
+ index = end === -1 ? input.length : end + 3;
90
+ continue;
91
+ }
92
+ if (input.startsWith('<![CDATA[', open)) {
93
+ const end = input.indexOf(']]>', open);
94
+ addText(current, input.slice(open + 9, end === -1 ? input.length : end), false);
95
+ index = end === -1 ? input.length : end + 3;
96
+ continue;
97
+ }
98
+ if (input.startsWith('<?', open)) {
99
+ const end = input.indexOf('?>', open);
100
+ index = end === -1 ? input.length : end + 2;
101
+ continue;
102
+ }
103
+ if (input.startsWith('<!', open)) {
104
+ const end = findTagEnd(input, open);
105
+ index = end === -1 ? input.length : end + 1;
106
+ continue;
107
+ }
108
+ const tagEnd = findTagEnd(input, open);
109
+ if (tagEnd === -1) {
110
+ break;
111
+ }
112
+ const tagBody = input.slice(open + 1, tagEnd);
113
+ if (tagBody.startsWith('/')) {
114
+ const name = tagBody.slice(1).trim();
115
+ for (let depth = stack.length - 1; depth > 0; depth--) {
116
+ if (stack[depth].name === name) {
117
+ stack.length = depth;
118
+ break;
119
+ }
120
+ }
121
+ index = tagEnd + 1;
122
+ continue;
123
+ }
124
+ const selfClosing = tagBody.endsWith('/');
125
+ const inner = selfClosing ? tagBody.slice(0, -1) : tagBody;
126
+ const nameMatch = /^([^\s/>]+)/.exec(inner);
127
+ if (nameMatch === null) {
128
+ index = tagEnd + 1;
129
+ continue;
130
+ }
131
+ const node = createNode(nameMatch[1]);
132
+ parseAttributes(inner.slice(nameMatch[1].length), node);
133
+ current.children.push(node);
134
+ if (!selfClosing)
135
+ stack.push(node);
136
+ index = tagEnd + 1;
137
+ }
138
+ return root;
139
+ }
140
+ function findChild(node, name) {
141
+ return node.children.find((child) => child.name === name);
142
+ }
143
+ function findDescendant(node, name) {
144
+ for (const child of node.children) {
145
+ if (child.name === name)
146
+ return child;
147
+ const nested = findDescendant(child, name);
148
+ if (nested !== undefined)
149
+ return nested;
150
+ }
151
+ return undefined;
152
+ }
153
+ function findChildren(node, name) {
154
+ return node.children.filter((child) => child.name === name);
155
+ }
156
+ //# sourceMappingURL=xml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xml.js","sourceRoot":"","sources":["../../../../nodes/Moca/transport/xml.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "n8n-nodes-moca",
3
+ "version": "0.1.0",
4
+ "description": "n8n community node to connect to a MOCA server (Blue Yonder / RedPrairie WMS) and run MOCA syntax commands, native (local) SQL, and local msql client commands",
5
+ "license": "MIT",
6
+ "keywords": [
7
+ "n8n-community-node-package",
8
+ "n8n",
9
+ "moca",
10
+ "blue-yonder",
11
+ "redprairie",
12
+ "jda",
13
+ "wms",
14
+ "warehouse"
15
+ ],
16
+ "author": {
17
+ "name": "MOCA Community Node",
18
+ "email": "noreply@example.com"
19
+ },
20
+ "engines": {
21
+ "node": ">=20.19"
22
+ },
23
+ "scripts": {
24
+ "build": "n8n-node build",
25
+ "dev": "n8n-node dev",
26
+ "lint": "n8n-node lint",
27
+ "lint:fix": "n8n-node lint --fix",
28
+ "test": "vitest run",
29
+ "release": "n8n-node release",
30
+ "prepublishOnly": "npm run build && npm test && npm run verify && n8n-node prerelease",
31
+ "live-check": "node scripts/live-check.js",
32
+ "verify": "node scripts/verify-package.js"
33
+ },
34
+ "files": [
35
+ "dist"
36
+ ],
37
+ "n8n": {
38
+ "n8nNodesApiVersion": 1,
39
+ "strict": true,
40
+ "credentials": [
41
+ "dist/credentials/MocaApi.credentials.js"
42
+ ],
43
+ "nodes": [
44
+ "dist/nodes/Moca/Moca.node.js"
45
+ ]
46
+ },
47
+ "devDependencies": {
48
+ "@n8n/node-cli": "^0.44.2",
49
+ "eslint": "9.39.4",
50
+ "prettier": "3.8.3",
51
+ "release-it": "20.2.0",
52
+ "typescript": "5.9.3",
53
+ "vitest": "^3.2.4"
54
+ },
55
+ "peerDependencies": {
56
+ "n8n-workflow": "*"
57
+ }
58
+ }
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "n8n-nodes-moca",
3
+ "version": "0.1.0",
4
+ "description": "n8n community node to connect to a MOCA server (Blue Yonder / RedPrairie WMS) and run MOCA syntax commands, native (local) SQL, and local msql client commands",
5
+ "license": "MIT",
6
+ "keywords": [
7
+ "n8n-community-node-package",
8
+ "n8n",
9
+ "moca",
10
+ "blue-yonder",
11
+ "redprairie",
12
+ "jda",
13
+ "wms",
14
+ "warehouse"
15
+ ],
16
+ "author": {
17
+ "name": "MOCA Community Node",
18
+ "email": "noreply@example.com"
19
+ },
20
+ "engines": {
21
+ "node": ">=20.19"
22
+ },
23
+ "scripts": {
24
+ "build": "n8n-node build",
25
+ "dev": "n8n-node dev",
26
+ "lint": "n8n-node lint",
27
+ "lint:fix": "n8n-node lint --fix",
28
+ "test": "vitest run",
29
+ "release": "n8n-node release",
30
+ "prepublishOnly": "npm run build && npm test && npm run verify && n8n-node prerelease",
31
+ "live-check": "node scripts/live-check.js",
32
+ "verify": "node scripts/verify-package.js"
33
+ },
34
+ "files": [
35
+ "dist"
36
+ ],
37
+ "n8n": {
38
+ "n8nNodesApiVersion": 1,
39
+ "strict": true,
40
+ "credentials": [
41
+ "dist/credentials/MocaApi.credentials.js"
42
+ ],
43
+ "nodes": [
44
+ "dist/nodes/Moca/Moca.node.js"
45
+ ]
46
+ },
47
+ "devDependencies": {
48
+ "@n8n/node-cli": "^0.44.2",
49
+ "eslint": "9.39.4",
50
+ "prettier": "3.8.3",
51
+ "release-it": "20.2.0",
52
+ "typescript": "5.9.3",
53
+ "vitest": "^3.2.4"
54
+ },
55
+ "peerDependencies": {
56
+ "n8n-workflow": "*"
57
+ }
58
+ }