nodes/YouTrack/resources/command/execute.ts (111 lines of code) (raw):
import type { INodeProperties } from 'n8n-workflow';
import type { CommandExecuteRequestBody } from '../types';
import { normalizeCommandQuery, validateCommandQuery, normalizeComment } from './utils';
const DEFAULT_FIELDS = 'issues(id,idReadable),query,visibility(permittedGroups(id,name),permittedUsers(id,login))';
export const commandExecuteDescription: INodeProperties[] = [
// Command: Query (required)
{
displayName: 'Command Query',
name: 'query',
type: 'string',
required: true,
displayOptions: {
show: {
resource: ['command'],
operation: ['execute'],
},
},
default: '',
placeholder: 'e.g. tag MyTag for me',
description:
'YouTrack command string. Examples: "tag MyTag", "for me", "tag To deploy for jane.doe", "vote+1", "star username", "work 2h Fixed bug", "visible to Developers", "add visible to john.doe". Note: "vote+1" cannot be used on your own issues. Any unrecognized words will be treated as tag names. For assignee commands, use "for me" (current user) or "for username" (must be a valid YouTrack username - if you get "Assignee expected" error, verify the username exists).',
routing: {
send: {
type: 'body',
property: 'query',
preSend: [
async function (this, requestOptions) {
const query = this.getNodeParameter('query') as string;
validateCommandQuery(query, this);
const normalizedQuery = normalizeCommandQuery(query);
if (requestOptions.body && typeof requestOptions.body === 'object') {
(requestOptions.body as CommandExecuteRequestBody).query = normalizedQuery;
}
return requestOptions;
},
],
},
},
},
// Additional Options
{
displayName: 'Additional Options',
name: 'additionalOptions',
type: 'collection',
placeholder: 'Add Option',
default: {
fields: DEFAULT_FIELDS,
},
displayOptions: {
show: {
resource: ['command'],
operation: ['execute'],
},
},
options: [
{
displayName: 'Comment',
name: 'comment',
type: 'string',
typeOptions: {
rows: 4,
},
default: '',
description:
'Comment text to add along with the command. This is the correct way to add comments in YouTrack - do NOT use "comment" in the Command Query field (that will create a tag). Use this field to add comments with commands like "for me", "tag MyTag", etc.',
routing: {
send: {
type: 'body',
property: 'comment',
preSend: [
async function (this, requestOptions) {
const comment = this.getNodeParameter('additionalOptions.comment') as string;
const normalizedComment = normalizeComment(comment);
if (normalizedComment && requestOptions.body && typeof requestOptions.body === 'object') {
(requestOptions.body as CommandExecuteRequestBody).comment = normalizedComment;
}
return requestOptions;
},
],
},
},
},
{
displayName: 'Fields',
name: 'fields',
type: 'string',
default: DEFAULT_FIELDS,
description:
'Comma-separated list of fields to return in response. Example: issues(ID,idReadable,summary),query.',
routing: {
send: {
type: 'query',
property: 'fields',
},
},
},
{
displayName: 'Silent',
name: 'silent',
type: 'boolean',
default: false,
description:
'Whether enabled, suppresses update notifications. Useful for bulk updates. Requires "Apply Commands Silently" permission.',
routing: {
send: {
type: 'body',
property: 'silent',
},
},
}
],
},
];