Como postar fotos via API?

Fui em frente e tentei (proverbialmente jogando macarrão molhado para ver o que grudava). Mas eu já estava apreensivo e o @simon está correto.

Idealmente, o plugin estaria disponível no celular também. Mas, por enquanto, se apenas o Desktop for o que conseguirmos, é o que conseguiremos.

Claro, outra solução pode ser: Obsidian Vault no celular → sincronizar para Desktop → cli para fazer upload para o Discourse. Mas isso parece um pouco complicado.

Basicamente, a situação ideal é que o fórum Discourse substitua o Obsidian Vault. Dessa forma, os usuários que preferem o fórum podem usar o fórum. Os usuários que preferem (ou realmente precisam de uma solução offline) podem usar o Obsidian. Já tenho algumas ideias sobre como uma sincronização bidirecional pode funcionar. Mas acho que imagens/arquivos precisam ser tratados de alguma forma primeiro.

Editar:
Estou bastante convencido de que isso funcionará, mas não consigo definir os parâmetros corretamente:


						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)}`);
							}