¿Cómo publicar imágenes a través de API?

Lo intenté (proverbialmente lanzar fideos mojados para ver qué se pega). Pero ya era aprensivo y @simon tiene razón.

Idealmente, el plugin también estaría disponible en el móvil. Pero por ahora, si solo funciona en el escritorio, es lo que hay.

Por supuesto, otra solución podría ser: Obsidian Vault en el móvil → sincronizar con el escritorio → cli para subir a Discourse. Pero eso parece un poco complicado.

Básicamente, la situación ideal es que el foro de Discourse reemplace al Obsidian Vault. De esa manera, los usuarios que prefieren el foro, pueden usar el foro. Los usuarios que prefieren (o de hecho necesitan una solución sin conexión) pueden usar Obsidian. Ya tengo algunas ideas sobre cómo podría funcionar una sincronización bidireccional. Pero creo que primero hay que gestionar las imágenes/archivos de alguna manera.

Editar:
Estoy bastante convencido de que esto funcionará, pero no consigo que los parámetros sean correctos:

					try {
						const imgfile = await this.app.vault.readBinary(file);
						const boundary = genBoundary();
						const sBoundary = '--' + boundary + '\r\n';
						let body = '';
						body += `${sBoundary}Content-Disposition: form-data; name=\"type\"\r\n\r\ncomposer\r\n`;
						body += `${sBoundary}Content-Disposition: form-data; name=\"synchronous\"\r\n\r\ntrue\r\n`;
						body += `${sBoundary}Content-Disposition: form-data; name=\"files[]\"; filename=\"${file.name}\"\r\nContent-Type: image/jpg\r\n`;

						const eBoundary = '\r\n--' + boundary + '--' + '\r\n';
						const bodyArray = new TextEncoder().encode(body);
						const endBoundaryArray = new TextEncoder().encode(eBoundary);

						const formDataArray = new Uint8Array(bodyArray.length + imgfile.byteLength + endBoundaryArray.length);
						formDataArray.set(bodyArray, 0);
						formDataArray.set(new Uint8Array(imgfile), bodyArray.length);
						formDataArray.set(endBoundaryArray, bodyArray.length + imgfile.byteLength);

						const url = `${this.settings.baseUrl}/uploads.json`;
						const headers = {
							"Api-Key": this.settings.apiKey,
							"Api-Username": this.settings.disUser,
							"Content-Type": `multipart/form-data; boundary=${boundary}`
						};

						const response = await requestUrl({
							url: url,
							method: "POST",
							body: formDataArray,
							throw: false,
							headers: headers,
						});

						if (response.status == 200) {
							const jsonResponse = response.json();
							console.log(`Upload Image jsonResponse: ${JSON.stringify(jsonResponse)}`);
							imageUrls.push(jsonResponse.url);
						} else {
							new NotifyUser(this.app, `Error uploading image: ${response.status}`).open();
							console.error(`Error uploading image: ${JSON.stringify(response.json)}`);
						}