ipfs: make API URL configurable, reorganize config
This commit is contained in:
parent
c4af44d582
commit
c40f10539d
|
@ -7,16 +7,6 @@ await dotenv.load({
|
||||||
examplePath: null,
|
examplePath: null,
|
||||||
});
|
});
|
||||||
|
|
||||||
const optionalBooleanSchema = z
|
|
||||||
.enum(['true', 'false'])
|
|
||||||
.optional()
|
|
||||||
.transform((value) => value !== undefined ? value === 'true' : undefined);
|
|
||||||
|
|
||||||
const optionalNumberSchema = z
|
|
||||||
.string()
|
|
||||||
.optional()
|
|
||||||
.transform((value) => value !== undefined ? Number(value) : undefined);
|
|
||||||
|
|
||||||
/** Application-wide configuration. */
|
/** Application-wide configuration. */
|
||||||
const Conf = {
|
const Conf = {
|
||||||
/** Ditto admin secret key in nip19 format. This is the way it's configured by an admin. */
|
/** Ditto admin secret key in nip19 format. This is the way it's configured by an admin. */
|
||||||
|
@ -98,22 +88,45 @@ const Conf = {
|
||||||
return optionalBooleanSchema.parse(Deno.env.get('S3_USE_SSL'));
|
return optionalBooleanSchema.parse(Deno.env.get('S3_USE_SSL'));
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
ipfs: {
|
||||||
|
/** Base URL for private IPFS API calls. */
|
||||||
|
get apiUrl() {
|
||||||
|
return Deno.env.get('IPFS_API_URL') || 'http://localhost:5001';
|
||||||
|
},
|
||||||
|
},
|
||||||
/** Domain of the Ditto server as a `URL` object, for easily grabbing the `hostname`, etc. */
|
/** Domain of the Ditto server as a `URL` object, for easily grabbing the `hostname`, etc. */
|
||||||
get url() {
|
get url() {
|
||||||
return new URL(Conf.localDomain);
|
return new URL(Conf.localDomain);
|
||||||
},
|
},
|
||||||
/** Merges the path with the localDomain. */
|
/** Merges the path with the localDomain. */
|
||||||
local(path: string): string {
|
local(path: string): string {
|
||||||
const url = new URL(path.startsWith('/') ? path : new URL(path).pathname, Conf.localDomain);
|
return mergePaths(Conf.localDomain, path);
|
||||||
|
|
||||||
if (!path.startsWith('/')) {
|
|
||||||
// Copy query parameters from the original URL to the new URL
|
|
||||||
const originalUrl = new URL(path);
|
|
||||||
url.search = originalUrl.search;
|
|
||||||
}
|
|
||||||
|
|
||||||
return url.toString();
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const optionalBooleanSchema = z
|
||||||
|
.enum(['true', 'false'])
|
||||||
|
.optional()
|
||||||
|
.transform((value) => value !== undefined ? value === 'true' : undefined);
|
||||||
|
|
||||||
|
const optionalNumberSchema = z
|
||||||
|
.string()
|
||||||
|
.optional()
|
||||||
|
.transform((value) => value !== undefined ? Number(value) : undefined);
|
||||||
|
|
||||||
|
function mergePaths(base: string, path: string) {
|
||||||
|
const url = new URL(
|
||||||
|
path.startsWith('/') ? path : new URL(path).pathname,
|
||||||
|
base,
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!path.startsWith('/')) {
|
||||||
|
// Copy query parameters from the original URL to the new URL
|
||||||
|
const originalUrl = new URL(path);
|
||||||
|
url.search = originalUrl.search;
|
||||||
|
}
|
||||||
|
|
||||||
|
return url.toString();
|
||||||
|
}
|
||||||
|
|
||||||
export { Conf };
|
export { Conf };
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import { Conf } from '@/config.ts';
|
||||||
import { z } from '@/deps.ts';
|
import { z } from '@/deps.ts';
|
||||||
|
|
||||||
import type { Uploader } from './types.ts';
|
import type { Uploader } from './types.ts';
|
||||||
|
@ -9,10 +10,12 @@ const ipfsAddResultSchema = z.object({
|
||||||
});
|
});
|
||||||
|
|
||||||
const ipfsUploader: Uploader = async (file) => {
|
const ipfsUploader: Uploader = async (file) => {
|
||||||
|
const url = new URL('/api/v0/add', Conf.ipfs.apiUrl);
|
||||||
|
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
formData.append('file', file);
|
formData.append('file', file);
|
||||||
|
|
||||||
const response = await fetch('http://localhost:5001/api/v0/add', {
|
const response = await fetch(url, {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
body: formData,
|
body: formData,
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue