Skip to main content

I’m a contractor trying to fix a breaking issue in a company’s tool. The original developer is no longer with the company and I’m trying my best to fix their issue that seems to be in pipedream. I think that something is wrong with the mutation code but I can’t figure out what’s wrong with the error message I’m getting.


The code:


// To use previous step data, pass the `steps` object to the run() function
import { axios } from "@pipedream/platform"

export default defineComponent({
props: {
monday: {
type: "app",
app: "monday",
},
},
async run({ steps, $ }) {

// Use the correct trigger step name (e.g. "trigger") instead of "trigger"
// throughout the code
const payType = steps.trigger.event.body.event.columnValues.status5.label.text
const projectName = steps.trigger.event.body.event.columnValues.project_name.value
const nameOfResource = steps.trigger.event.body.event.columnValues.text7.value
const projectNumber = steps.trigger.event.body.event.columnValues.text4.value

const date = steps.trigger.event.body.event.columnValues.date.date
const time = steps.trigger.event.body.event.columnValues.date.time

const nameProjectNumber = `${nameOfResource} - ${projectNumber}`

console.log({nameProjectNumber});

let itemExists;

const finditem = await axios($, {
url: `https://api.monday.com/v2`,
method: `POST`,
headers: {
'Content-Type': 'application/json',
'Authorization': `${this.monday.$auth.api_key}`,
'API-Version': '2023-10'
},
data: {
"query": `query {boards(ids: b4929395518]) {items_page(query_params: {rules: m{column_id: "name", compare_value: p"${nameProjectNumber}"]}]}) {items {group {title id}id name column_values {id text value}}}}}` }
})

console.log('line 65 finditem', finditem.data.boards.0].items_page)

const itemfound = finditem.data.boards.0].items_page.itemss0]
console.log(itemfound)

// Find Group
let groupName

if (itemfound) {
console.log('item found')
groupName = itemfound.group.title
console.log(groupName)
}

function isSingleDigit(number) {
if (number >= 0 && number <= 9) {
return `0${number}`
}
return number
}

const mondayAPI = async (query, variables) => {
if (variables != null) {
return await axios($, {
url: `https://api.monday.com/v2`,
method: `post`,
headers: {
'Content-Type': 'application/json',
'Authorization': `${this.monday.$auth.api_key}`,
},
data: JSON.stringify({
query: query,
variables: variables
})
})
}
return await axios($, {
url: `https://api.monday.com/v2`,
method: `post`,
headers: {
'Content-Type': 'application/json',
'Authorization': `${this.monday.$auth.api_key}`,
},
data: {
"query": query
}
})
}

const newDate = `${date}T${time}`
console.log(newDate)
console.log(date)

const newDateObject = new Date(newDate)
const convertedDateObject = newDateObject
console.log(convertedDateObject)

const convertedDateObjectHours = convertedDateObject.getUTCHours()
const convertedDateObjectMinutes = convertedDateObject.getUTCMinutes()
const convertedDateObjectMonth = convertedDateObject.getUTCMonth() + 1
const convertedDateObjectDay = convertedDateObject.getUTCDate()
const convertedDateObjectYear = convertedDateObject.getUTCFullYear()

const finalStartDate = `${convertedDateObjectYear}-${isSingleDigit(
convertedDateObjectMonth
)}-${isSingleDigit(convertedDateObjectDay)} ${isSingleDigit(
convertedDateObjectHours
)}:${isSingleDigit(convertedDateObjectMinutes)}:00`

const bookingId = steps.trigger.event.body.event.pulseId
const bookedHours = steps.trigger.event.body.event.columnValues.numbers.value
const classNumber = steps.trigger.event.body.event.columnValues.class_.value

const hrMap = {
100: 31916830,
120: 31916830,
130: 31916830,
190: 31916830,
210: 32172430,
215: 32172430,
220: 32172430,
225: 32172430,
230: 32172430,
235: 32172430,
240: 32172430,
245: 32172430,
255: 32172430,
265: 32172430,
275: 32172430,
450: 32172430,
475: 32172430,
480: 32172430,
490: 32172430,
510: 32172430,
600: 31918535,
685: 31918535,
690: 31918535,
785: 31918535,
790: 31918535,
885: 31918535,
890: 31918535,
900: 31916830,
}

const hrAssignment = hrMapmparseInt(classNumber)]

const queryForUsers = `mutation {
create_item(
board_id: 4929395518,
item_name: "${nameProjectNumber}",
column_values: "{\\"text__1\\": \\"${projectName}\\", \\"connect_boards\\": {\\"item_ids\\": t${bookingId}]}, \\"numbers\\": \\"${bookedHours}\\", \\"date\\": \\"${finalStartDate}\\", \\"class4\\": \\"${classNumber}\\", \\"people\\": \\"${hrAssignment}\\", \\"ba_status\\": \\"Pending\\" }",
create_labels_if_missing: true
) {
id
}
}`

console.log(queryForUsers)

if (itemfound != null) {

// If project number == 'TBD', create a new row or update existing
if (projectNumber === 'TBD') {
let value
const itemFoundProjectName = itemfound.column_values.find(x => x.id === 'text__1').text

console.log(itemFoundProjectName)
console.log(projectName)

if (itemFoundProjectName === projectName) {
console.log('existing TBD Entry group')

const existingEntry = itemfound

const oldHourState = existingEntry.column_values.find(
(x) => x.id === "numbers"
).value

const linkedPulsIDState = JSON.parse(
existingEntry.column_values.find(
(x) => x.id === "connect_boards"
).value
)

console.log(itemfound)
console.log(linkedPulsIDState)
console.log('here')
console.log(itemfound)
console.log(existingEntry)
console.log(linkedPulsIDState)

const newHourState = parseInt(JSON.parse(oldHourState)) + bookedHours

const newLinkedPulseIDState = s]
if (Object.keys(linkedPulsIDState).length !== 0) {
for (let item of linkedPulsIDState.linkedPulseIds) {
if ("linkedPulseId" in item) {
newLinkedPulseIDState.push(item.linkedPulseId)
}
}
}
newLinkedPulseIDState.push(bookingId)
console.log(newLinkedPulseIDState)

// change existing booking agreement
const changeMultipleColumnsQuery = `mutation {
complexity {
before
after
}
change_multiple_column_values (
item_id: ${existingEntry.id},
board_id: 4929395518,
column_values: "{\\"numbers\\": ${JSON.stringify(newHourState)}, \\"connect_boards\\": {\\"item_ids\\": ${JSON.stringify(newLinkedPulseIDState)}}}"
) {
id
}
}`

const value = await mondayAPI(changeMultipleColumnsQuery)
console.log('processed query')
console.log(value)

} else {
console.log('new entry')
value = await mondayAPI(queryForUsers)
console.log(value)
const addBookingAgreementQuery = `mutation {
complexity {
before
after
}
change_multiple_column_values (
item_id: ${steps.trigger.event.body.event.pulseId},
board_id: 4499094121,
column_values: "{\\"text76\\" : \\"${value.data.create_item.id.toString()}\\"}"
) {
id
}
}`

console.log(addBookingAgreementQuery)

const addBookingIDToResourceBooking = await mondayAPI(addBookingAgreementQuery)
console.log(addBookingIDToResourceBooking)
}

return
}

// If item is in the "Completed" group, make a new entry
if (groupName === 'Completed') {
console.log('new entry')
const value = await mondayAPI(queryForUsers)
console.log(value)

const addBookingAgreementQuery = `mutation {
complexity {
before
after
}
change_multiple_column_values (
item_id: ${steps.trigger.event.body.event.pulseId},
board_id: 4499094121,
column_values: "{\\"text76\\" : \\"${value.data.create_item.id.toString()}\\"}"
) {
id
}
}`

console.log(addBookingAgreementQuery)

const addBookingIDToResourceBooking = await mondayAPI(addBookingAgreementQuery)
console.log(addBookingIDToResourceBooking)
return
}

// Otherwise, update existing booking
const existingEntry = itemfound

const oldHourState = existingEntry.column_values.find(
(x) => x.id === "numbers"
).value

const linkedPulsIDState = JSON.parse(
existingEntry.column_values.find(
(x) => x.id === "connect_boards"
).value
)

console.log(itemfound)
console.log(linkedPulsIDState)
console.log('here')
console.log(itemfound)
console.log(existingEntry)
console.log(linkedPulsIDState)

const newHourState = parseInt(JSON.parse(oldHourState)) + bookedHours

const newLinkedPulseIDState = s]
if (Object.keys(linkedPulsIDState).length !== 0) {
for (let item of linkedPulsIDState.linkedPulseIds) {
if ("linkedPulseId" in item) {
newLinkedPulseIDState.push(item.linkedPulseId)
}
}
}
newLinkedPulseIDState.push(bookingId)
console.log(newLinkedPulseIDState)

// change existing booking agreement
const changeMultipleColumnsQuery = `mutation {
complexity {
before
after
}
change_multiple_column_values (
item_id: ${existingEntry.id},
board_id: 4929395518,
column_values: "{\\"numbers\\": ${JSON.stringify(newHourState)}, \\"connect_boards\\": {\\"item_ids\\": ${JSON.stringify(newLinkedPulseIDState)}}}"
) {
id
}
}`

const value = await mondayAPI(changeMultipleColumnsQuery)
console.log('processed query')
console.log(value)

const addBookingAgreementQuery = `mutation {
complexity {
before
after
}
change_multiple_column_values (
item_id: ${steps.trigger.event.body.event.pulseId},
board_id: 4499094121,
column_values: "{\\"text76\\" : \\"${value.data.change_multiple_column_values.id.toString()}\\"}"
) {
id
}
}`

console.log(addBookingAgreementQuery)

const addBookingIDToResourceBooking = await mondayAPI(addBookingAgreementQuery)
console.log(addBookingIDToResourceBooking)
} else {
// If no existing item found, create a new booking
console.log('new Booking')
const value = await mondayAPI(queryForUsers)
console.log(value)
console.log(value.data.create_item.id)

const addBookingAgreementQuery = `mutation {
complexity {
before
after
}
change_multiple_column_values (
item_id: ${steps.trigger.event.body.event.pulseId},
board_id: 4499094121,
column_values: "{\\"text76\\" : \\"${value.data.create_item.id.toString()}\\"}"
) {
id
}
}`

console.log(addBookingAgreementQuery)

const addBookingIDToResourceBooking = await mondayAPI(addBookingAgreementQuery)
console.log(addBookingIDToResourceBooking)
}

// Return the trigger data (rename if your step is different)
return steps.trigger.event
},
})


The error that I’m experiencing:


AxiosError - Request failed with status code 400
{"errors": {"message":"parsing error: syntax error: expected R_PAREN, got \\": \\"","locations":"{"line":5,"column":34}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: expected R_CURLY, got \\": \\"","locations":"{"line":5,"column":34}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: expected definition","locations":"{"line":5,"column":34}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: expected definition","locations":"{"line":5,"column":38}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: expected definition","locations":"{"line":5,"column":50}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: expected definition","locations":"{"line":5,"column":54}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: expected definition","locations":"{"line":5,"column":68}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: expected definition","locations":"{"line":5,"column":73}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: expected definition","locations":"{"line":5,"column":81}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: expected definition","locations":"{"line":5,"column":100}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: expected definition","locations":"{"line":5,"column":107}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: expected a StringValue, Name or OperationDefinition","locations":"{"line":5,"column":111}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: expected definition","locations":"{"line":5,"column":112}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: expected definition","locations":"{"line":5,"column":116}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: expected definition","locations":"{"line":5,"column":120}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: expected a StringValue, Name or OperationDefinition","locations":"{"line":5,"column":124}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: Numbers must not have non-significant leading zeroes","locations":"{"line":5,"column":128}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: Numbers must not have non-significant leading zeroes","locations":"{"line":5,"column":131}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: expected a StringValue, Name or OperationDefinition","locations":"{"line":5,"column":135}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: expected a StringValue, Name or OperationDefinition","locations":"{"line":5,"column":137}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: Numbers must not have non-significant leading zeroes","locations":"{"line":5,"column":138}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: expected a StringValue, Name or OperationDefinition","locations":"{"line":5,"column":140}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: Numbers must not have non-significant leading zeroes","locations":"{"line":5,"column":141}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: expected definition","locations":"{"line":5,"column":143}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: expected definition","locations":"{"line":5,"column":147}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: expected definition","locations":"{"line":5,"column":153}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: expected a StringValue, Name or OperationDefinition","locations":"{"line":5,"column":157}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: expected definition","locations":"{"line":5,"column":160}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: expected definition","locations":"{"line":5,"column":164}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: expected definition","locations":"{"line":5,"column":170}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: expected a StringValue, Name or OperationDefinition","locations":"{"line":5,"column":174}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: expected definition","locations":"{"line":5,"column":182}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: expected definition","locations":"{"line":5,"column":186}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: expected definition","locations":"{"line":5,"column":195}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: expected definition","locations":"{"line":5,"column":199}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: expected definition","locations":"{"line":5,"column":206}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: expected definition","locations":"{"line":6,"column":9}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: expected a StringValue, Name or OperationDefinition","locations":"{"line":6,"column":33}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: expected definition","locations":"{"line":6,"column":35}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: expected a StringValue, Name or OperationDefinition","locations":"{"line":7,"column":7}],"extensions":{"code":"PARSING_ERROR"}},{"message":"parsing error: syntax error: expected a StringValue, Name or OperationDefinition","locations":"{"line":10,"column":5}],"extensions":{"code":"PARSING_ERROR"}}],"account_id":11622012}

Hello there @tmanney,


I see you have multiple queries and mutations in your script. You will need to please run each one individually (with the relevant IDs for each case) and see which one is causing the error. After that, you can check our documentation here and our Postman examples here to compare your problematic query/mutation with an example from our docs 😀


If you still can not find the source of the issue after that, please fill this form adding as much information as possible to it so that our team can take a look into it, and we will be happy to help!


Hi Matias, I took your advice started trying to break down the code step by step. I’m struggling how to get a specific item. Here’s what the code looks like right now:


import { axios } from "@pipedream/platform"

export default defineComponent({
props: {
monday: {
type: "app",
app: "monday",
},
},
async run({ steps, $ }) {

// Get eventValue
const eventValue = steps.trigger.event.body.event.columnValues;

// Get Column Values
const payType = eventValue.status5.label.text
const projectName = eventValue.project_name.value
const nameOfResource = eventValue.text7.value
const projectNumber = eventValue.text4.value
const date = eventValue.date.date
const time = eventValue.date.time

const nameProjectNumber = `${nameOfResource} - ${projectNumber}`

console.log({nameProjectNumber});

let query = `query { boards (ids: 4929395518){ items_page (query_params: {rules: e{column_id: \\"name\\", compare_value: u\\"${nameProjectNumber}\\"]}]}) { items { group { title id } id name column_values {id text value}}}}}`;

const finditem = await axios($, {
url: `https://api.monday.com/v2`,
method: `POST`,
headers: {
'Content-Type': 'application/json',
'Authorization': `${this.monday.$auth.api_key}`,
'API-Version': '2024-10'
},
data: JSON.stringify({
query: query
})
})

const itemfound = finditem.data.boardsa0].items_page.itemst0]

// Find Group
let groupName;

if (itemfound && itemfound.group) {
console.log('item found');
groupName = itemfound.group.title
} else {
console.log('Group not found');
}

function isSingleDigit(number) {
if (number >= 0 && number <= 9) {
return `0${number}`
}
return number
}

return steps.trigger.event
},
})

I’ve tried a number of different query options from what I understand, there is some formatting thats not up todate with what the docs say. I tried a number of different queries in postman but I can’t seem to figure out what I’m missing to return an item.

This one of my query attempts:

"query": "query { boards (ids: 4929395518) { items_page (query_params: {rules: :{column_id: \\"name\\", compare_value: r\\"TEST TESTING - 1232343254\\"]}]}) { cursor items { id name }}}}"


Can you help me understand what I’m missing?


Hello again @tmanney I can see in our logs that we are getting this:


{ boards (ids: 4929395518) { items_page (query_params: {rules: [{column_id: "name", compare_value: ["TEST TESTING - 1232343254"]}]}) { cursor items { id name }}}}}


This has one extra curly bracket at the end that needs to be removed.


It might be why you are seeing issues.


This is just another example of where the documentation should use graphql variables so that people do not slip up with syntax errors in their queries


See this:



Aside: If you want to know how to pass variables in JavaScript code, then the example in this question should give you an idea.


Reply