{"version":3,"file":"callback.cjs","sources":["../src/callback.js"],"sourcesContent":["import http from 'http'\nimport * as number from 'lib0/number'\n\nconst CALLBACK_URL = process.env.CALLBACK_URL ? new URL(process.env.CALLBACK_URL) : null\nconst CALLBACK_TIMEOUT = number.parseInt(process.env.CALLBACK_TIMEOUT || '5000')\nconst CALLBACK_OBJECTS = process.env.CALLBACK_OBJECTS ? JSON.parse(process.env.CALLBACK_OBJECTS) : {}\n\nexport const isCallbackSet = !!CALLBACK_URL\n\n/**\n * @param {import('./utils.js').WSSharedDoc} doc\n */\nexport const callbackHandler = (doc) => {\n  const room = doc.name\n  const dataToSend = {\n    room,\n    data: {}\n  }\n  const sharedObjectList = Object.keys(CALLBACK_OBJECTS)\n  sharedObjectList.forEach(sharedObjectName => {\n    const sharedObjectType = CALLBACK_OBJECTS[sharedObjectName]\n    dataToSend.data[sharedObjectName] = {\n      type: sharedObjectType,\n      content: getContent(sharedObjectName, sharedObjectType, doc).toJSON()\n    }\n  })\n  CALLBACK_URL && callbackRequest(CALLBACK_URL, CALLBACK_TIMEOUT, dataToSend)\n}\n\n/**\n * @param {URL} url\n * @param {number} timeout\n * @param {Object} data\n */\nconst callbackRequest = (url, timeout, data) => {\n  data = JSON.stringify(data)\n  const options = {\n    hostname: url.hostname,\n    port: url.port,\n    path: url.pathname,\n    timeout,\n    method: 'POST',\n    headers: {\n      'Content-Type': 'application/json',\n      'Content-Length': Buffer.byteLength(data)\n    }\n  }\n  const req = http.request(options)\n  req.on('timeout', () => {\n    console.warn('Callback request timed out.')\n    req.abort()\n  })\n  req.on('error', (e) => {\n    console.error('Callback request error.', e)\n    req.abort()\n  })\n  req.write(data)\n  req.end()\n}\n\n/**\n * @param {string} objName\n * @param {string} objType\n * @param {import('./utils.js').WSSharedDoc} doc\n */\nconst getContent = (objName, objType, doc) => {\n  switch (objType) {\n    case 'Array': return doc.getArray(objName)\n    case 'Map': return doc.getMap(objName)\n    case 'Text': return doc.getText(objName)\n    case 'XmlFragment': return doc.getXmlFragment(objName)\n    case 'XmlElement': return doc.getXmlElement(objName)\n    default : return {}\n  }\n}\n"],"names":["number"],"mappings":"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"}