commit 14f7632c8534be78e7728b72b1ca26d3e831b6e0
parent c30396812a5ab86f08bdd90e4a07e51e608c9625
Author: triesap <137732411+triesap@users.noreply.github.com>
Date: Wed, 9 Apr 2025 00:50:49 +0000
utils: refactor http utils, add/edit utils. add type imports. migrate types to `@radroots/client`
Diffstat:
12 files changed, 40 insertions(+), 133 deletions(-)
diff --git a/utils/src/*regex.ts b/utils/src/*regex.ts
@@ -49,6 +49,7 @@ export const util_rxp = {
};
export type FormFieldsKey =
+ | `nostr_secret_key`
| `product_title`
| `product_key`
| `product_process`
@@ -131,4 +132,8 @@ export const form_fields: Record<FormFieldsKey, FormField> = {
charset: util_rxp.alpha_ch,
validate: util_rxp.alpha,
},
+ nostr_secret_key: {
+ charset: util_rxp.alpha_ch,
+ validate: util_rxp.alpha,
+ }
};
diff --git a/utils/src/*validation.ts b/utils/src/*validation.ts
@@ -1,4 +1,4 @@
-import { GeolocationAddress, GeolocationPoint, parse_int, util_rxp } from "$root";
+import { type GeolocationAddress, type GeolocationPoint, parse_int, util_rxp } from "$root";
import { z } from "zod";
export const vu_area_unit = z.union([
diff --git a/utils/src/app/util.ts b/utils/src/app/util.ts
@@ -88,7 +88,7 @@ export const encode_query_params = <T extends string>(params_list: NavigationPar
return query ? `?${query}` : ``;
};
-export const encode_route = <T extends string>(route: T, params_list?: NavigationParamTuple<T>[]): string => {
+export const encode_route = <TRoute extends string, TParam extends string>(route: TRoute, params_list?: NavigationParamTuple<TParam>[]): string => {
const query = encode_query_params(params_list);
if (!query) return route;
return `${route === `/` ? `/` : route.replace(/\/+$/, ``)}${query}`;
diff --git a/utils/src/client/database.ts b/utils/src/client/database.ts
@@ -1,95 +0,0 @@
-
-
-export type IClientDatabase<
- TILocationGcsCreate extends object,
- TLocationGcsCreateResolve extends object,
- TILocationGcsRead extends object,
- TLocationGcsReadResolve extends object,
- TILocationGcsReadList extends object,
- TLocationGcsReadListResolve extends object,
- TILocationGcsDelete extends object,
- TLocationGcsDeleteResolve extends object,
- TILocationGcsUpdate extends object,
- TLocationGcsUpdateResolve extends object,
- TITradeProductCreate extends object,
- TTradeProductCreateResolve extends object,
- TITradeProductRead extends object,
- TTradeProductReadResolve extends object,
- TITradeProductReadList extends object,
- TTradeProductReadListResolve extends object,
- TITradeProductDelete extends object,
- TTradeProductDeleteResolve extends object,
- TITradeProductUpdate extends object,
- TTradeProductUpdateResolve extends object,
- TINostrProfileCreate extends object,
- TNostrProfileCreateResolve extends object,
- TINostrProfileRead extends object,
- TNostrProfileReadResolve extends object,
- TINostrProfileReadList extends object,
- TNostrProfileReadListResolve extends object,
- TINostrProfileDelete extends object,
- TNostrProfileDeleteResolve extends object,
- TINostrProfileUpdate extends object,
- TNostrProfileUpdateResolve extends object,
- TINostrRelayCreate extends object,
- TNostrRelayCreateResolve extends object,
- TINostrRelayRead extends object,
- TNostrRelayReadResolve extends object,
- TINostrRelayReadList extends object,
- TNostrRelayReadListResolve extends object,
- TINostrRelayDelete extends object,
- TNostrRelayDeleteResolve extends object,
- TINostrRelayUpdate extends object,
- TNostrRelayUpdateResolve extends object,
- TIMediaImageCreate extends object,
- TMediaImageCreateResolve extends object,
- TIMediaImageRead extends object,
- TMediaImageReadResolve extends object,
- TIMediaImageReadList extends object,
- TMediaImageReadListResolve extends object,
- TIMediaImageDelete extends object,
- TMediaImageDeleteResolve extends object,
- TIMediaImageUpdate extends object,
- TMediaImageUpdateResolve extends object,
- TILogErrorCreate extends object,
- TLogErrorCreateResolve extends object,
- TILogErrorRead extends object,
- TLogErrorReadResolve extends object,
- TILogErrorReadList extends object,
- TLogErrorReadListResolve extends object,
- TILogErrorDelete extends object,
- TLogErrorDeleteResolve extends object,
- TILogErrorUpdate extends object,
- TLogErrorUpdateResolve extends object
-> = {
- location_gcs_create(opts: TILocationGcsCreate): Promise<TLocationGcsCreateResolve>;
- location_gcs_read(opts: TILocationGcsRead): Promise<TLocationGcsReadResolve>;
- location_gcs_read_list(opts: TILocationGcsReadList): Promise<TLocationGcsReadListResolve>;
- location_gcs_delete(opts: TILocationGcsDelete): Promise<TLocationGcsDeleteResolve>;
- location_gcs_update(opts: TILocationGcsUpdate): Promise<TLocationGcsUpdateResolve>;
- trade_product_create(opts: TITradeProductCreate): Promise<TTradeProductCreateResolve>;
- trade_product_read(opts: TITradeProductRead): Promise<TTradeProductReadResolve>;
- trade_product_read_list(opts: TITradeProductReadList): Promise<TTradeProductReadListResolve>;
- trade_product_delete(opts: TITradeProductDelete): Promise<TTradeProductDeleteResolve>;
- trade_product_update(opts: TITradeProductUpdate): Promise<TTradeProductUpdateResolve>;
- nostr_profile_create(opts: TINostrProfileCreate): Promise<TNostrProfileCreateResolve>;
- nostr_profile_read(opts: TINostrProfileRead): Promise<TNostrProfileReadResolve>;
- nostr_profile_read_list(opts: TINostrProfileReadList): Promise<TNostrProfileReadListResolve>;
- nostr_profile_delete(opts: TINostrProfileDelete): Promise<TNostrProfileDeleteResolve>;
- nostr_profile_update(opts: TINostrProfileUpdate): Promise<TNostrProfileUpdateResolve>;
- nostr_relay_create(opts: TINostrRelayCreate): Promise<TNostrRelayCreateResolve>;
- nostr_relay_read(opts: TINostrRelayRead): Promise<TNostrRelayReadResolve>;
- nostr_relay_read_list(opts: TINostrRelayReadList): Promise<TNostrRelayReadListResolve>;
- nostr_relay_delete(opts: TINostrRelayDelete): Promise<TNostrRelayDeleteResolve>;
- nostr_relay_update(opts: TINostrRelayUpdate): Promise<TNostrRelayUpdateResolve>;
- media_image_create(opts: TIMediaImageCreate): Promise<TMediaImageCreateResolve>;
- media_image_read(opts: TIMediaImageRead): Promise<TMediaImageReadResolve>;
- media_image_read_list(opts: TIMediaImageReadList): Promise<TMediaImageReadListResolve>;
- media_image_delete(opts: TIMediaImageDelete): Promise<TMediaImageDeleteResolve>;
- media_image_update(opts: TIMediaImageUpdate): Promise<TMediaImageUpdateResolve>;
- log_error_create(opts: TILogErrorCreate): Promise<TLogErrorCreateResolve>;
- log_error_read(opts: TILogErrorRead): Promise<TLogErrorReadResolve>;
- log_error_read_list(opts: TILogErrorReadList): Promise<TLogErrorReadListResolve>;
- log_error_delete(opts: TILogErrorDelete): Promise<TLogErrorDeleteResolve>;
- log_error_update(opts: TILogErrorUpdate): Promise<TLogErrorUpdateResolve>;
-};
-\ No newline at end of file
diff --git a/utils/src/client/datastore.ts b/utils/src/client/datastore.ts
@@ -1,29 +1,22 @@
-import type { ErrorMessage, ResultObj, ResultPass, ResultsList } from "..";
+import type { ResolveError, ResultObj, ResultPass, ResultsList } from "$root";
-export const ds_map = {
- key_nostr: `nostr:publickey`,
- role: `config:role`,
- eula: `eula:date`
-};
+export type IClientDatastoreSetResolve = ResolveError<ResultPass>;
+export type IClientDatastoreGetResolve = ResolveError<ResultObj<string>>;
+export type IClientDatastoreSetPResolve = ResolveError<ResultPass>;
+export type IClientDatastoreGetPResolve = ResolveError<ResultObj<string>>;
+export type IClientDatastoreKeysResolve = ResolveError<ResultsList<string>>;
+export type IClientDatastoreEntriesResolve = ResolveError<ResultsList<[string, unknown]>>;
+export type IClientDatastoreRemoveResolve = ResolveError<ResultPass>;
-export const ds_map_param = {
- radroots_profile: (public_key: string) => `radroots:profile:${public_key}`
-};
-
-export type IClientDatastoreSetResolve = ResultPass | ErrorMessage<string>;
-export type IClientDatastoreGetResolve = ResultObj<string> | ErrorMessage<string>;
-export type IClientDatastoreSetPResolve = ResultPass | ErrorMessage<string>;
-export type IClientDatastoreGetPResolve = ResultObj<string> | ErrorMessage<string>;
-export type IClientDatastoreKeysResolve = ResultsList<string> | ErrorMessage<string>;
-export type IClientDatastoreEntriesResolve = ResultsList<[string, unknown]> | ErrorMessage<string>;
-export type IClientDatastoreRemoveResolve = ResultPass | ErrorMessage<string>;
-
-export type IClientDatastore = {
+export type IClientDatastore<
+ TKeyMap extends Record<string, string>,
+ TParamKeyMap extends Record<string, (...args: any[]) => string>
+> = {
init(): Promise<void>;
- set(key: keyof typeof ds_map, value: string): Promise<IClientDatastoreSetResolve>;
- get(key: keyof typeof ds_map): Promise<IClientDatastoreGetResolve>;
- setp(key: keyof typeof ds_map_param, key_param: string, value: string): Promise<IClientDatastoreSetPResolve>;
- getp(key: keyof typeof ds_map_param, key_param: string): Promise<IClientDatastoreGetPResolve>;
+ set(key: keyof TKeyMap, value: string): Promise<IClientDatastoreSetResolve>;
+ get(key: keyof TKeyMap): Promise<IClientDatastoreGetResolve>;
+ setp<K extends keyof TParamKeyMap>(key: K, key_param: Parameters<TParamKeyMap[K]>[0], value: string): Promise<IClientDatastoreSetPResolve>;
+ getp<K extends keyof TParamKeyMap>(key: K, key_param: Parameters<TParamKeyMap[K]>[0]): Promise<IClientDatastoreGetPResolve>;
keys(): Promise<IClientDatastoreKeysResolve>;
entries(): Promise<IClientDatastoreEntriesResolve>
remove(key: string): Promise<IClientDatastoreRemoveResolve>;
diff --git a/utils/src/error.ts b/utils/src/error.ts
@@ -12,7 +12,7 @@ export const err_msg = <T extends string>(err: T): ErrorMessage<T> => {
return { err };
};
-export const throw_err = (param: string | ErrorMessage<string>): undefined => {
+export const throw_err = (param: string | ErrorMessage<string>): never => {
if (typeof param === `string`) throw new Error(param);
else throw new Error(param.err);
};
diff --git a/utils/src/geo.ts b/utils/src/geo.ts
@@ -1,4 +1,4 @@
-import { GeolocationPointTuple, GeometryPoint } from "$root";
+import { type GeolocationPointTuple, type GeometryPoint } from "$root";
import { decodeBase32, encodeBase32 } from "geohashing";
export type GeolocationAddress = {
diff --git a/utils/src/http.ts b/utils/src/http.ts
@@ -51,17 +51,17 @@ export const lib_http_parse_headers = (headers: Headers): FieldRecord => {
export const http_fetch_opts = (opts: IHttpOpts): { url: string; options: RequestInit; } => {
const { url } = opts;
- const headers: FieldRecord = {
- ...opts.headers,
- };
- if (opts.authorization) headers['Authorization'] = `Bearer ${encodeURIComponent(opts.authorization)}`;
+ const method = opts.method ? opts.method.toUpperCase() : `GET`;
+ const headers = new Headers();
+ if (method === `POST`) headers.append(`Content-Type`, `application/json`);
+ if (opts.authorization) headers.append(`Authorization`, `Bearer ${encodeURIComponent(opts.authorization)}`);
+ if (opts.headers) Object.entries(opts.headers).forEach(([k, v]) => headers.append(k, v))
const options: RequestInit = {
- method: opts.method ? opts.method.toUpperCase() : `GET`,
+ method,
headers,
}
if (opts.data) options.body = lib_http_to_bodyinit(opts.data);
if (opts.data_bin) options.body = opts.data_bin;
-
return {
url,
options
diff --git a/utils/src/i18n.ts b/utils/src/i18n.ts
@@ -1,4 +1,4 @@
-import { Loader } from '@sveltekit-i18n/base';
+import { type Loader } from '@sveltekit-i18n/base';
import type { Config as ConfigIcu, Parser as ParserIcu } from "@sveltekit-i18n/parser-icu";
import parser_icu from "@sveltekit-i18n/parser-icu";
import i18n, { type Config } from 'sveltekit-i18n';
diff --git a/utils/src/index.ts b/utils/src/index.ts
@@ -7,7 +7,6 @@ export * from "./app/search"
export * from "./app/styles"
export * from "./app/util"
export * from "./browser"
-export * from "./client/database"
export * from "./client/datastore"
export * from "./client/geo"
export * from "./client/gui"
diff --git a/utils/src/response.ts b/utils/src/response.ts
@@ -17,7 +17,7 @@ export const is_results_response = (response: any): response is { results: strin
}
export const is_error_response = (response: any): response is { error: string } => {
- return "error" in response && typeof response.result === "string";
+ return "error" in response && response.error;
}
export const is_message_response = (response: any): response is NotifyMessage => {
diff --git a/utils/src/types.ts b/utils/src/types.ts
@@ -1,3 +1,5 @@
+import { ErrorMessage } from "$root";
+
export type FieldRecord = Record<string, string>;
export type NotifyMessage = {
message: string;
@@ -24,6 +26,9 @@ export type ResultObj<T> = { result: T; };
export type ResultPublicKey = { public_key: string; };
export type ResultSecretKey = { secret_key: string; };
+export type ResolveError<T> = T | ErrorMessage<string>;
+export type ResolveErrorMsg<TRes, TMsg extends string> = TRes | ErrorMessage<TMsg>;
+
export type FileBytesFormat = `kb` | `mb` | `gb`;
export type FileMimeType = string;
export type FilePath = { file_path: string; file_name: string; mime_type: FileMimeType; }
@@ -33,4 +38,4 @@ export type CallbackPromiseFigureResult<Ti, Tr> = (value: Ti) => Promise<Tr | un
export type CallbackPromiseFull<Ti, Tr> = (value: Ti) => Promise<Tr>;
export type CallbackPromiseGeneric<T> = (value: T) => Promise<void>;
export type CallbackPromiseReturn<T> = () => Promise<T>;
-export type CallbackPromiseResult<Tr> = () => Promise<Tr | undefined>;
+export type CallbackPromiseResult<Tr> = () => Promise<Tr | undefined>;
+\ No newline at end of file