@keimelion/sdk 0.0.0-stage → 0.1.1-dev.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of @keimelion/sdk might be problematic. Click here for more details.
- package/LICENSE +21 -0
- package/README.md +197 -2
- package/dist/chunk-2LLUUBMQ.js +26 -0
- package/dist/chunk-2LLUUBMQ.js.map +1 -0
- package/dist/chunk-E3CTTWFQ.js +33 -0
- package/dist/chunk-E3CTTWFQ.js.map +1 -0
- package/dist/chunk-VT6MXJE5.js +126 -0
- package/dist/chunk-VT6MXJE5.js.map +1 -0
- package/dist/client/index.d.ts +97 -0
- package/dist/client/index.js +257 -0
- package/dist/client/index.js.map +1 -0
- package/dist/currency-CBw0nA_h.d.ts +20 -0
- package/dist/enums/index.d.ts +65 -0
- package/dist/enums/index.js +104 -0
- package/dist/enums/index.js.map +1 -0
- package/dist/error-B-yLf6aF.d.ts +212 -0
- package/dist/error-code-DzfCEXrl.d.ts +78 -0
- package/dist/schemas/index.d.ts +222 -0
- package/dist/schemas/index.js +73 -0
- package/dist/schemas/index.js.map +1 -0
- package/package.json +85 -4
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
import { validationErrorMetadataSchema, apiErrorBodySchema, resetPasswordResponseSchema, forgotPasswordResponseSchema, logoutResponseSchema, refreshResponseSchema, loginResponseSchema, verifyEmailResponseSchema, registerResponseSchema } from '../chunk-VT6MXJE5.js';
|
|
2
|
+
import { HttpHeader, HttpStatus, HttpMethod } from '../chunk-E3CTTWFQ.js';
|
|
3
|
+
import '../chunk-2LLUUBMQ.js';
|
|
4
|
+
|
|
5
|
+
// src/client/_core/api-error.ts
|
|
6
|
+
var ClientErrorCode = {
|
|
7
|
+
INVALID_RESPONSE: "INVALID_RESPONSE",
|
|
8
|
+
NETWORK_ERROR: "NETWORK_ERROR",
|
|
9
|
+
TIMEOUT: "TIMEOUT",
|
|
10
|
+
ABORTED: "ABORTED"
|
|
11
|
+
};
|
|
12
|
+
var INVALID_RESPONSE_MESSAGE = "The API response does not match the expected contract";
|
|
13
|
+
var NETWORK_ERROR_MESSAGE = "The API could not be reached";
|
|
14
|
+
var TIMEOUT_MESSAGE = "The API did not respond in time";
|
|
15
|
+
var ABORTED_MESSAGE = "The request was aborted";
|
|
16
|
+
var NO_RESPONSE_STATUS = 0;
|
|
17
|
+
var TIMEOUT_ERROR_NAME = "TimeoutError";
|
|
18
|
+
var ABORT_ERROR_NAME = "AbortError";
|
|
19
|
+
var ApiError = class extends Error {
|
|
20
|
+
name = "ApiError";
|
|
21
|
+
status;
|
|
22
|
+
code;
|
|
23
|
+
metadata;
|
|
24
|
+
issues;
|
|
25
|
+
constructor(options) {
|
|
26
|
+
super(options.message, { cause: options.cause });
|
|
27
|
+
this.status = options.status;
|
|
28
|
+
this.code = options.code;
|
|
29
|
+
this.metadata = options.metadata;
|
|
30
|
+
this.issues = extractValidationIssues(options.metadata);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
function createInvalidResponseError(status, cause) {
|
|
34
|
+
return new ApiError({
|
|
35
|
+
status,
|
|
36
|
+
code: ClientErrorCode.INVALID_RESPONSE,
|
|
37
|
+
message: INVALID_RESPONSE_MESSAGE,
|
|
38
|
+
metadata: {},
|
|
39
|
+
cause
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
function createTransportError(cause) {
|
|
43
|
+
const errorName = cause instanceof Error ? cause.name : null;
|
|
44
|
+
if (errorName === TIMEOUT_ERROR_NAME) {
|
|
45
|
+
return createClientError(ClientErrorCode.TIMEOUT, TIMEOUT_MESSAGE, cause);
|
|
46
|
+
}
|
|
47
|
+
if (errorName === ABORT_ERROR_NAME) {
|
|
48
|
+
return createClientError(ClientErrorCode.ABORTED, ABORTED_MESSAGE, cause);
|
|
49
|
+
}
|
|
50
|
+
return createClientError(ClientErrorCode.NETWORK_ERROR, NETWORK_ERROR_MESSAGE, cause);
|
|
51
|
+
}
|
|
52
|
+
function createClientError(code, message, cause) {
|
|
53
|
+
return new ApiError({ status: NO_RESPONSE_STATUS, code, message, metadata: {}, cause });
|
|
54
|
+
}
|
|
55
|
+
function extractValidationIssues(metadata) {
|
|
56
|
+
const parsed = validationErrorMetadataSchema.safeParse(metadata);
|
|
57
|
+
return parsed.success ? parsed.data.issues : [];
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// src/client/_core/http-client.ts
|
|
61
|
+
var JSON_CONTENT_TYPE = "application/json";
|
|
62
|
+
var PATH_PARAM_PREFIX = ":";
|
|
63
|
+
var DEFAULT_TIMEOUT_MS = 3e4;
|
|
64
|
+
var RequestAuthMode = {
|
|
65
|
+
// Default: the Bearer token comes from the client's `getToken`.
|
|
66
|
+
TOKEN_PROVIDER: "token-provider",
|
|
67
|
+
// Public route: never send an Authorization header.
|
|
68
|
+
NONE: "none"
|
|
69
|
+
};
|
|
70
|
+
function createHttpClient(options) {
|
|
71
|
+
const baseUrl = trimTrailingSlashes(options.baseUrl);
|
|
72
|
+
const fetchFunction = options.fetch ?? defaultFetch;
|
|
73
|
+
const timeoutMs = options.timeoutMs === void 0 ? DEFAULT_TIMEOUT_MS : options.timeoutMs;
|
|
74
|
+
return {
|
|
75
|
+
async request(request) {
|
|
76
|
+
const url = `${baseUrl}${buildPath(request.path, request.pathParams)}${buildQueryString(request.query)}`;
|
|
77
|
+
const init = await buildRequestInit(request, options.getToken, timeoutMs);
|
|
78
|
+
const response = await fetchFunction(url, init).catch((error) => {
|
|
79
|
+
throw createTransportError(error);
|
|
80
|
+
});
|
|
81
|
+
const body = await readJsonBody(response);
|
|
82
|
+
if (!response.ok) {
|
|
83
|
+
throw toApiError(response.status, body);
|
|
84
|
+
}
|
|
85
|
+
return parseResponseBody(response.status, body, request.responseSchema);
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
function trimTrailingSlashes(url) {
|
|
90
|
+
let end = url.length;
|
|
91
|
+
while (end > 0 && url[end - 1] === "/") {
|
|
92
|
+
end -= 1;
|
|
93
|
+
}
|
|
94
|
+
return url.slice(0, end);
|
|
95
|
+
}
|
|
96
|
+
function defaultFetch(url, init) {
|
|
97
|
+
return globalThis.fetch(url, init);
|
|
98
|
+
}
|
|
99
|
+
function buildPath(template, pathParams = {}) {
|
|
100
|
+
return template.split("/").map((segment) => {
|
|
101
|
+
if (!segment.startsWith(PATH_PARAM_PREFIX)) return segment;
|
|
102
|
+
const name = segment.slice(PATH_PARAM_PREFIX.length);
|
|
103
|
+
const value = pathParams[name];
|
|
104
|
+
if (value === void 0) {
|
|
105
|
+
throw new Error(`Missing path param "${name}" for ${template}`);
|
|
106
|
+
}
|
|
107
|
+
return encodeURIComponent(String(value));
|
|
108
|
+
}).join("/");
|
|
109
|
+
}
|
|
110
|
+
function buildQueryString(query) {
|
|
111
|
+
if (!query) return "";
|
|
112
|
+
const searchParams = new URLSearchParams();
|
|
113
|
+
for (const [key, rawValue] of Object.entries(query)) {
|
|
114
|
+
const values = Array.isArray(rawValue) ? rawValue : [rawValue];
|
|
115
|
+
for (const value of values) {
|
|
116
|
+
if (value === null || value === void 0) continue;
|
|
117
|
+
searchParams.append(key, String(value));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
const serialized = searchParams.toString();
|
|
121
|
+
return serialized === "" ? "" : `?${serialized}`;
|
|
122
|
+
}
|
|
123
|
+
async function resolveToken(auth, getToken) {
|
|
124
|
+
if (auth === RequestAuthMode.NONE) return null;
|
|
125
|
+
if (typeof auth === "object") return auth.token;
|
|
126
|
+
return getToken();
|
|
127
|
+
}
|
|
128
|
+
function buildSignal(callerSignal, timeoutMs) {
|
|
129
|
+
if (timeoutMs === null) return callerSignal;
|
|
130
|
+
const timeoutSignal = AbortSignal.timeout(timeoutMs);
|
|
131
|
+
return callerSignal ? AbortSignal.any([callerSignal, timeoutSignal]) : timeoutSignal;
|
|
132
|
+
}
|
|
133
|
+
async function buildRequestInit(request, getToken, timeoutMs) {
|
|
134
|
+
const headers = { [HttpHeader.ACCEPT]: JSON_CONTENT_TYPE };
|
|
135
|
+
const token = await resolveToken(request.auth, getToken);
|
|
136
|
+
if (token) {
|
|
137
|
+
headers[HttpHeader.AUTHORIZATION] = `Bearer ${token}`;
|
|
138
|
+
}
|
|
139
|
+
const init = { method: request.method, headers };
|
|
140
|
+
const signal = buildSignal(request.signal, timeoutMs);
|
|
141
|
+
if (signal) {
|
|
142
|
+
init.signal = signal;
|
|
143
|
+
}
|
|
144
|
+
if (request.body === void 0) {
|
|
145
|
+
return init;
|
|
146
|
+
}
|
|
147
|
+
headers[HttpHeader.CONTENT_TYPE] = JSON_CONTENT_TYPE;
|
|
148
|
+
return { ...init, body: JSON.stringify(request.body) };
|
|
149
|
+
}
|
|
150
|
+
async function readJsonBody(response) {
|
|
151
|
+
if (response.status === HttpStatus.NO_CONTENT) {
|
|
152
|
+
return { isJson: true, value: void 0 };
|
|
153
|
+
}
|
|
154
|
+
try {
|
|
155
|
+
return { isJson: true, value: await response.json() };
|
|
156
|
+
} catch (error) {
|
|
157
|
+
return { isJson: false, cause: error };
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
function toApiError(status, body) {
|
|
161
|
+
if (!body.isJson) {
|
|
162
|
+
return createInvalidResponseError(status, body.cause);
|
|
163
|
+
}
|
|
164
|
+
const envelope = apiErrorBodySchema.safeParse(body.value);
|
|
165
|
+
if (!envelope.success) {
|
|
166
|
+
return createInvalidResponseError(status, envelope.error);
|
|
167
|
+
}
|
|
168
|
+
return new ApiError({ status, ...envelope.data });
|
|
169
|
+
}
|
|
170
|
+
function parseResponseBody(status, body, responseSchema) {
|
|
171
|
+
if (!body.isJson) {
|
|
172
|
+
throw createInvalidResponseError(status, body.cause);
|
|
173
|
+
}
|
|
174
|
+
const parsed = responseSchema.safeParse(body.value);
|
|
175
|
+
if (!parsed.success) {
|
|
176
|
+
throw createInvalidResponseError(status, parsed.error);
|
|
177
|
+
}
|
|
178
|
+
return parsed.data;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// src/client/auth/auth.paths.ts
|
|
182
|
+
var AuthPaths = {
|
|
183
|
+
REGISTER: "/v1/auth/register",
|
|
184
|
+
VERIFY_EMAIL: "/v1/auth/verify-email",
|
|
185
|
+
LOGIN: "/v1/auth/login",
|
|
186
|
+
REFRESH: "/v1/auth/refresh",
|
|
187
|
+
LOGOUT: "/v1/auth/logout",
|
|
188
|
+
FORGOT_PASSWORD: "/v1/auth/forgot-password",
|
|
189
|
+
RESET_PASSWORD: "/v1/auth/reset-password"
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
// src/client/auth/auth.client.ts
|
|
193
|
+
function createAuthClient(http) {
|
|
194
|
+
return {
|
|
195
|
+
register: (input) => http.request({
|
|
196
|
+
method: HttpMethod.POST,
|
|
197
|
+
path: AuthPaths.REGISTER,
|
|
198
|
+
body: input,
|
|
199
|
+
auth: RequestAuthMode.NONE,
|
|
200
|
+
responseSchema: registerResponseSchema
|
|
201
|
+
}),
|
|
202
|
+
verifyEmail: (input) => http.request({
|
|
203
|
+
method: HttpMethod.POST,
|
|
204
|
+
path: AuthPaths.VERIFY_EMAIL,
|
|
205
|
+
body: input,
|
|
206
|
+
auth: RequestAuthMode.NONE,
|
|
207
|
+
responseSchema: verifyEmailResponseSchema
|
|
208
|
+
}),
|
|
209
|
+
login: (input) => http.request({
|
|
210
|
+
method: HttpMethod.POST,
|
|
211
|
+
path: AuthPaths.LOGIN,
|
|
212
|
+
body: input,
|
|
213
|
+
auth: RequestAuthMode.NONE,
|
|
214
|
+
responseSchema: loginResponseSchema
|
|
215
|
+
}),
|
|
216
|
+
refresh: (input) => http.request({
|
|
217
|
+
method: HttpMethod.POST,
|
|
218
|
+
path: AuthPaths.REFRESH,
|
|
219
|
+
body: input,
|
|
220
|
+
auth: RequestAuthMode.NONE,
|
|
221
|
+
responseSchema: refreshResponseSchema
|
|
222
|
+
}),
|
|
223
|
+
logout: (input = {}) => http.request({
|
|
224
|
+
method: HttpMethod.POST,
|
|
225
|
+
path: AuthPaths.LOGOUT,
|
|
226
|
+
body: input,
|
|
227
|
+
responseSchema: logoutResponseSchema
|
|
228
|
+
}),
|
|
229
|
+
forgotPassword: (input) => http.request({
|
|
230
|
+
method: HttpMethod.POST,
|
|
231
|
+
path: AuthPaths.FORGOT_PASSWORD,
|
|
232
|
+
body: input,
|
|
233
|
+
auth: RequestAuthMode.NONE,
|
|
234
|
+
responseSchema: forgotPasswordResponseSchema
|
|
235
|
+
}),
|
|
236
|
+
resetPassword: (input) => http.request({
|
|
237
|
+
method: HttpMethod.POST,
|
|
238
|
+
path: AuthPaths.RESET_PASSWORD,
|
|
239
|
+
body: input,
|
|
240
|
+
auth: RequestAuthMode.NONE,
|
|
241
|
+
responseSchema: resetPasswordResponseSchema
|
|
242
|
+
})
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// src/client/create-client.ts
|
|
247
|
+
function createClient(options) {
|
|
248
|
+
const http = createHttpClient(options);
|
|
249
|
+
return {
|
|
250
|
+
http,
|
|
251
|
+
auth: createAuthClient(http)
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
export { ABORTED_MESSAGE, ApiError, AuthPaths, ClientErrorCode, DEFAULT_TIMEOUT_MS, INVALID_RESPONSE_MESSAGE, NETWORK_ERROR_MESSAGE, RequestAuthMode, TIMEOUT_MESSAGE, createAuthClient, createClient, createHttpClient };
|
|
256
|
+
//# sourceMappingURL=index.js.map
|
|
257
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/client/_core/api-error.ts","../../src/client/_core/http-client.ts","../../src/client/auth/auth.paths.ts","../../src/client/auth/auth.client.ts","../../src/client/create-client.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import { validationErrorMetadataSchema } from '../../schemas/_shared/error.js'\nimport type { ValidationIssueParsed } from '../../schemas/_shared/error.js'\nimport type { ErrorCode } from '../../enums/error-code.js'\n\n// Errors raised by the client itself (status 0 when no HTTP response was received).\nexport const ClientErrorCode = {\n INVALID_RESPONSE: 'INVALID_RESPONSE',\n NETWORK_ERROR: 'NETWORK_ERROR',\n TIMEOUT: 'TIMEOUT',\n ABORTED: 'ABORTED',\n} as const\nexport type ClientErrorCode = (typeof ClientErrorCode)[keyof typeof ClientErrorCode]\n\n// Known codes autocomplete; the `string` fallback keeps an older client working when the API\n// starts sending a code this SDK version does not know yet.\nexport type ApiErrorCode = ErrorCode | ClientErrorCode | (string & Record<never, never>)\n\nexport const INVALID_RESPONSE_MESSAGE = 'The API response does not match the expected contract'\nexport const NETWORK_ERROR_MESSAGE = 'The API could not be reached'\nexport const TIMEOUT_MESSAGE = 'The API did not respond in time'\nexport const ABORTED_MESSAGE = 'The request was aborted'\n\nconst NO_RESPONSE_STATUS = 0\nconst TIMEOUT_ERROR_NAME = 'TimeoutError'\nconst ABORT_ERROR_NAME = 'AbortError'\n\nexport interface ApiErrorOptions {\n status: number\n code: ApiErrorCode\n message: string\n metadata: Record<string, unknown>\n cause?: unknown\n}\n\nexport class ApiError extends Error {\n override readonly name = 'ApiError'\n readonly status: number\n readonly code: ApiErrorCode\n readonly metadata: Record<string, unknown>\n readonly issues: ValidationIssueParsed[]\n\n constructor(options: ApiErrorOptions) {\n super(options.message, { cause: options.cause })\n this.status = options.status\n this.code = options.code\n this.metadata = options.metadata\n this.issues = extractValidationIssues(options.metadata)\n }\n}\n\nexport function createInvalidResponseError(status: number, cause: unknown): ApiError {\n return new ApiError({\n status,\n code: ClientErrorCode.INVALID_RESPONSE,\n message: INVALID_RESPONSE_MESSAGE,\n metadata: {},\n cause,\n })\n}\n\n// fetch rejects without an HTTP response: offline, DNS, CORS, timeout or caller abort.\nexport function createTransportError(cause: unknown): ApiError {\n const errorName = cause instanceof Error ? cause.name : null\n if (errorName === TIMEOUT_ERROR_NAME) {\n return createClientError(ClientErrorCode.TIMEOUT, TIMEOUT_MESSAGE, cause)\n }\n if (errorName === ABORT_ERROR_NAME) {\n return createClientError(ClientErrorCode.ABORTED, ABORTED_MESSAGE, cause)\n }\n return createClientError(ClientErrorCode.NETWORK_ERROR, NETWORK_ERROR_MESSAGE, cause)\n}\n\nfunction createClientError(code: ClientErrorCode, message: string, cause: unknown): ApiError {\n return new ApiError({ status: NO_RESPONSE_STATUS, code, message, metadata: {}, cause })\n}\n\nfunction extractValidationIssues(metadata: Record<string, unknown>): ValidationIssueParsed[] {\n const parsed = validationErrorMetadataSchema.safeParse(metadata)\n return parsed.success ? parsed.data.issues : []\n}\n","import type { z } from 'zod'\nimport { HttpHeader, HttpStatus } from '../../enums/http.js'\nimport type { HttpMethod } from '../../enums/http.js'\nimport { apiErrorBodySchema } from '../../schemas/_shared/error.js'\nimport { ApiError, createInvalidResponseError, createTransportError } from './api-error.js'\n\nconst JSON_CONTENT_TYPE = 'application/json'\nconst PATH_PARAM_PREFIX = ':'\nexport const DEFAULT_TIMEOUT_MS = 30_000\n\nexport type TokenProvider = () => string | null | Promise<string | null>\n\nexport type FetchFunction = (url: string, init: RequestInit) => Promise<Response>\n\nexport type PathParams = Record<string, string | number>\n\nexport type QueryValue = string | number | boolean | null | undefined\n\n// `null` / `undefined` values are skipped; arrays are sent as repeated keys (`?tag=a&tag=b`).\n// Bracket keys pass through as-is, e.g. `{ 'title[ilike]': 'foo' }` for admin filters.\nexport type QueryParams = Record<string, QueryValue | readonly QueryValue[]>\n\nexport const RequestAuthMode = {\n // Default: the Bearer token comes from the client's `getToken`.\n TOKEN_PROVIDER: 'token-provider',\n // Public route: never send an Authorization header.\n NONE: 'none',\n} as const\nexport type RequestAuthMode = (typeof RequestAuthMode)[keyof typeof RequestAuthMode]\n\n// An explicit token bypasses `getToken` (e.g. the anonymous `rsv_…` reservation token).\nexport type RequestAuth = RequestAuthMode | { token: string }\n\nexport interface HttpRequest<TResponseSchema extends z.ZodType> {\n method: HttpMethod\n // Path template; `:name` segments are replaced from `pathParams`, e.g. `/v1/lists/:id`.\n path: string\n pathParams?: PathParams\n query?: QueryParams\n body?: unknown\n auth?: RequestAuth\n // Combined with the client timeout: whichever fires first aborts the request.\n signal?: AbortSignal\n responseSchema: TResponseSchema\n}\n\nexport interface HttpClient {\n request<TResponseSchema extends z.ZodType>(\n request: HttpRequest<TResponseSchema>,\n ): Promise<z.output<TResponseSchema>>\n}\n\nexport interface HttpClientOptions {\n baseUrl: string\n getToken: TokenProvider\n fetch?: FetchFunction\n // Per-request timeout; `null` disables it. Defaults to DEFAULT_TIMEOUT_MS.\n timeoutMs?: number | null\n}\n\ntype JsonBodyResult = { isJson: true; value: unknown } | { isJson: false; cause: unknown }\n\nexport function createHttpClient(options: HttpClientOptions): HttpClient {\n const baseUrl = trimTrailingSlashes(options.baseUrl)\n const fetchFunction = options.fetch ?? defaultFetch\n const timeoutMs = options.timeoutMs === undefined ? DEFAULT_TIMEOUT_MS : options.timeoutMs\n\n return {\n async request<TResponseSchema extends z.ZodType>(\n request: HttpRequest<TResponseSchema>,\n ): Promise<z.output<TResponseSchema>> {\n const url = `${baseUrl}${buildPath(request.path, request.pathParams)}${buildQueryString(request.query)}`\n const init = await buildRequestInit(request, options.getToken, timeoutMs)\n const response = await fetchFunction(url, init).catch((error: unknown) => {\n throw createTransportError(error)\n })\n const body = await readJsonBody(response)\n if (!response.ok) {\n throw toApiError(response.status, body)\n }\n return parseResponseBody(response.status, body, request.responseSchema)\n },\n }\n}\n\nfunction trimTrailingSlashes(url: string): string {\n let end = url.length\n while (end > 0 && url[end - 1] === '/') {\n end -= 1\n }\n return url.slice(0, end)\n}\n\nfunction defaultFetch(url: string, init: RequestInit): Promise<Response> {\n return globalThis.fetch(url, init)\n}\n\nfunction buildPath(template: string, pathParams: PathParams = {}): string {\n return template\n .split('/')\n .map((segment) => {\n if (!segment.startsWith(PATH_PARAM_PREFIX)) return segment\n const name = segment.slice(PATH_PARAM_PREFIX.length)\n const value = pathParams[name]\n if (value === undefined) {\n throw new Error(`Missing path param \"${name}\" for ${template}`)\n }\n return encodeURIComponent(String(value))\n })\n .join('/')\n}\n\nfunction buildQueryString(query: QueryParams | undefined): string {\n if (!query) return ''\n const searchParams = new URLSearchParams()\n for (const [key, rawValue] of Object.entries(query)) {\n const values: readonly QueryValue[] = Array.isArray(rawValue) ? rawValue : [rawValue]\n for (const value of values) {\n if (value === null || value === undefined) continue\n searchParams.append(key, String(value))\n }\n }\n const serialized = searchParams.toString()\n return serialized === '' ? '' : `?${serialized}`\n}\n\nasync function resolveToken(\n auth: RequestAuth | undefined,\n getToken: TokenProvider,\n): Promise<string | null> {\n if (auth === RequestAuthMode.NONE) return null\n if (typeof auth === 'object') return auth.token\n return getToken()\n}\n\nfunction buildSignal(\n callerSignal: AbortSignal | undefined,\n timeoutMs: number | null,\n): AbortSignal | undefined {\n if (timeoutMs === null) return callerSignal\n const timeoutSignal = AbortSignal.timeout(timeoutMs)\n return callerSignal ? AbortSignal.any([callerSignal, timeoutSignal]) : timeoutSignal\n}\n\nasync function buildRequestInit<TResponseSchema extends z.ZodType>(\n request: HttpRequest<TResponseSchema>,\n getToken: TokenProvider,\n timeoutMs: number | null,\n): Promise<RequestInit> {\n const headers: Record<string, string> = { [HttpHeader.ACCEPT]: JSON_CONTENT_TYPE }\n const token = await resolveToken(request.auth, getToken)\n if (token) {\n headers[HttpHeader.AUTHORIZATION] = `Bearer ${token}`\n }\n const init: RequestInit = { method: request.method, headers }\n const signal = buildSignal(request.signal, timeoutMs)\n if (signal) {\n init.signal = signal\n }\n if (request.body === undefined) {\n return init\n }\n headers[HttpHeader.CONTENT_TYPE] = JSON_CONTENT_TYPE\n return { ...init, body: JSON.stringify(request.body) }\n}\n\nasync function readJsonBody(response: Response): Promise<JsonBodyResult> {\n if (response.status === HttpStatus.NO_CONTENT) {\n return { isJson: true, value: undefined }\n }\n try {\n return { isJson: true, value: await response.json() }\n } catch (error: unknown) {\n return { isJson: false, cause: error }\n }\n}\n\nfunction toApiError(status: number, body: JsonBodyResult): ApiError {\n if (!body.isJson) {\n return createInvalidResponseError(status, body.cause)\n }\n const envelope = apiErrorBodySchema.safeParse(body.value)\n if (!envelope.success) {\n return createInvalidResponseError(status, envelope.error)\n }\n return new ApiError({ status, ...envelope.data })\n}\n\nfunction parseResponseBody<TResponseSchema extends z.ZodType>(\n status: number,\n body: JsonBodyResult,\n responseSchema: TResponseSchema,\n): z.output<TResponseSchema> {\n if (!body.isJson) {\n throw createInvalidResponseError(status, body.cause)\n }\n const parsed = responseSchema.safeParse(body.value)\n if (!parsed.success) {\n throw createInvalidResponseError(status, parsed.error)\n }\n return parsed.data\n}\n","export const AuthPaths = {\n REGISTER: '/v1/auth/register',\n VERIFY_EMAIL: '/v1/auth/verify-email',\n LOGIN: '/v1/auth/login',\n REFRESH: '/v1/auth/refresh',\n LOGOUT: '/v1/auth/logout',\n FORGOT_PASSWORD: '/v1/auth/forgot-password',\n RESET_PASSWORD: '/v1/auth/reset-password',\n} as const\n","import { HttpMethod } from '../../enums/http.js'\nimport { loginResponseSchema } from '../../schemas/auth/login.js'\nimport type { LoginRequestInput, LoginResponseParsed } from '../../schemas/auth/login.js'\nimport { refreshResponseSchema } from '../../schemas/auth/refresh.js'\nimport type { RefreshRequestInput, RefreshResponseParsed } from '../../schemas/auth/refresh.js'\nimport { logoutResponseSchema } from '../../schemas/auth/logout.js'\nimport type { LogoutRequestInput, LogoutResponseParsed } from '../../schemas/auth/logout.js'\nimport { registerResponseSchema } from '../../schemas/auth/register.js'\nimport type { RegisterRequestInput, RegisterResponseParsed } from '../../schemas/auth/register.js'\nimport { verifyEmailResponseSchema } from '../../schemas/auth/verify-email.js'\nimport type {\n VerifyEmailRequestInput,\n VerifyEmailResponseParsed,\n} from '../../schemas/auth/verify-email.js'\nimport { forgotPasswordResponseSchema } from '../../schemas/auth/forgot-password.js'\nimport type {\n ForgotPasswordRequestInput,\n ForgotPasswordResponseParsed,\n} from '../../schemas/auth/forgot-password.js'\nimport { resetPasswordResponseSchema } from '../../schemas/auth/reset-password.js'\nimport type {\n ResetPasswordRequestInput,\n ResetPasswordResponseParsed,\n} from '../../schemas/auth/reset-password.js'\nimport { RequestAuthMode } from '../_core/http-client.js'\nimport type { HttpClient } from '../_core/http-client.js'\nimport { AuthPaths } from './auth.paths.js'\n\nexport interface AuthClient {\n register(input: RegisterRequestInput): Promise<RegisterResponseParsed>\n verifyEmail(input: VerifyEmailRequestInput): Promise<VerifyEmailResponseParsed>\n login(input: LoginRequestInput): Promise<LoginResponseParsed>\n refresh(input: RefreshRequestInput): Promise<RefreshResponseParsed>\n logout(input?: LogoutRequestInput): Promise<LogoutResponseParsed>\n forgotPassword(input: ForgotPasswordRequestInput): Promise<ForgotPasswordResponseParsed>\n resetPassword(input: ResetPasswordRequestInput): Promise<ResetPasswordResponseParsed>\n}\n\nexport function createAuthClient(http: HttpClient): AuthClient {\n return {\n register: (input) =>\n http.request({\n method: HttpMethod.POST,\n path: AuthPaths.REGISTER,\n body: input,\n auth: RequestAuthMode.NONE,\n responseSchema: registerResponseSchema,\n }),\n verifyEmail: (input) =>\n http.request({\n method: HttpMethod.POST,\n path: AuthPaths.VERIFY_EMAIL,\n body: input,\n auth: RequestAuthMode.NONE,\n responseSchema: verifyEmailResponseSchema,\n }),\n login: (input) =>\n http.request({\n method: HttpMethod.POST,\n path: AuthPaths.LOGIN,\n body: input,\n auth: RequestAuthMode.NONE,\n responseSchema: loginResponseSchema,\n }),\n refresh: (input) =>\n http.request({\n method: HttpMethod.POST,\n path: AuthPaths.REFRESH,\n body: input,\n auth: RequestAuthMode.NONE,\n responseSchema: refreshResponseSchema,\n }),\n logout: (input = {}) =>\n http.request({\n method: HttpMethod.POST,\n path: AuthPaths.LOGOUT,\n body: input,\n responseSchema: logoutResponseSchema,\n }),\n forgotPassword: (input) =>\n http.request({\n method: HttpMethod.POST,\n path: AuthPaths.FORGOT_PASSWORD,\n body: input,\n auth: RequestAuthMode.NONE,\n responseSchema: forgotPasswordResponseSchema,\n }),\n resetPassword: (input) =>\n http.request({\n method: HttpMethod.POST,\n path: AuthPaths.RESET_PASSWORD,\n body: input,\n auth: RequestAuthMode.NONE,\n responseSchema: resetPasswordResponseSchema,\n }),\n }\n}\n","import { createAuthClient } from './auth/auth.client.js'\nimport type { AuthClient } from './auth/auth.client.js'\nimport { createHttpClient } from './_core/http-client.js'\nimport type { HttpClient, HttpClientOptions } from './_core/http-client.js'\n\nexport type CreateClientOptions = HttpClientOptions\n\n// Full client with every domain. Consumers that only need a few domains (e.g. the extension)\n// can compose `createHttpClient` + `createXClient(http)` instead, so bundlers drop the rest.\nexport interface KeimelionClient {\n http: HttpClient\n auth: AuthClient\n}\n\nexport function createClient(options: CreateClientOptions): KeimelionClient {\n const http = createHttpClient(options)\n return {\n http,\n auth: createAuthClient(http),\n }\n}\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ISO 4217 currencies supported by the API for item source prices and
|
|
3
|
+
* read-time FX normalization.
|
|
4
|
+
*
|
|
5
|
+
* The API seeds its `currencies` table from this set: adding or removing a code
|
|
6
|
+
* requires a paired DB migration in Keimelion-API.
|
|
7
|
+
*/ declare const SupportedCurrencies: {
|
|
8
|
+
readonly EUR: "EUR";
|
|
9
|
+
readonly USD: "USD";
|
|
10
|
+
readonly GBP: "GBP";
|
|
11
|
+
readonly CHF: "CHF";
|
|
12
|
+
readonly CAD: "CAD";
|
|
13
|
+
readonly AUD: "AUD";
|
|
14
|
+
readonly JPY: "JPY";
|
|
15
|
+
};
|
|
16
|
+
type SupportedCurrency = (typeof SupportedCurrencies)[keyof typeof SupportedCurrencies];
|
|
17
|
+
declare const SUPPORTED_CURRENCY_VALUES: [SupportedCurrency, ...SupportedCurrency[]];
|
|
18
|
+
|
|
19
|
+
export { SUPPORTED_CURRENCY_VALUES as S, SupportedCurrencies as a };
|
|
20
|
+
export type { SupportedCurrency as b };
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
export { S as SUPPORTED_CURRENCY_VALUES, a as SupportedCurrencies, b as SupportedCurrency } from '../currency-CBw0nA_h.js';
|
|
2
|
+
export { E as ErrorCode, a as HttpHeader, H as HttpMethod, b as HttpStatus } from '../error-code-DzfCEXrl.js';
|
|
3
|
+
|
|
4
|
+
declare const AUTH_PROVIDER_VALUES: readonly ["email", "google"];
|
|
5
|
+
type AuthProvider = (typeof AUTH_PROVIDER_VALUES)[number];
|
|
6
|
+
|
|
7
|
+
declare const DELETION_REASON_VALUES: readonly ["soft_delete_grace", "inactive_24mo", "user_request"];
|
|
8
|
+
type DeletionReason = (typeof DELETION_REASON_VALUES)[number];
|
|
9
|
+
|
|
10
|
+
declare const FeedbackStatuses: {
|
|
11
|
+
readonly OPEN: "open";
|
|
12
|
+
readonly REVIEWED: "reviewed";
|
|
13
|
+
readonly CLOSED: "closed";
|
|
14
|
+
};
|
|
15
|
+
type FeedbackStatus = (typeof FeedbackStatuses)[keyof typeof FeedbackStatuses];
|
|
16
|
+
declare const FEEDBACK_STATUS_VALUES: [FeedbackStatus, ...FeedbackStatus[]];
|
|
17
|
+
|
|
18
|
+
declare const InviteStatuses: {
|
|
19
|
+
readonly PENDING: "pending";
|
|
20
|
+
readonly ACCEPTED: "accepted";
|
|
21
|
+
readonly DECLINED: "declined";
|
|
22
|
+
readonly REVOKED: "revoked";
|
|
23
|
+
};
|
|
24
|
+
type InviteStatus = (typeof InviteStatuses)[keyof typeof InviteStatuses];
|
|
25
|
+
declare const INVITE_STATUS_VALUES: [InviteStatus, ...InviteStatus[]];
|
|
26
|
+
|
|
27
|
+
declare const ItemStatuses: {
|
|
28
|
+
readonly AVAILABLE: "available";
|
|
29
|
+
readonly RESERVED: "reserved";
|
|
30
|
+
readonly PURCHASED: "purchased";
|
|
31
|
+
};
|
|
32
|
+
type ItemStatus = (typeof ItemStatuses)[keyof typeof ItemStatuses];
|
|
33
|
+
declare const ITEM_STATUS_VALUES: [ItemStatus, ...ItemStatus[]];
|
|
34
|
+
|
|
35
|
+
declare const ListStatuses: {
|
|
36
|
+
readonly ACTIVE: "active";
|
|
37
|
+
readonly ARCHIVED: "archived";
|
|
38
|
+
readonly DELETED: "deleted";
|
|
39
|
+
};
|
|
40
|
+
type ListStatus = (typeof ListStatuses)[keyof typeof ListStatuses];
|
|
41
|
+
declare const LIST_STATUS_VALUES: [ListStatus, ...ListStatus[]];
|
|
42
|
+
|
|
43
|
+
declare const ListUserRoles: {
|
|
44
|
+
readonly OWNER: "owner";
|
|
45
|
+
readonly EDITOR: "editor";
|
|
46
|
+
readonly VIEWER: "viewer";
|
|
47
|
+
};
|
|
48
|
+
type ListUserRole = (typeof ListUserRoles)[keyof typeof ListUserRoles];
|
|
49
|
+
declare const LIST_USER_ROLE_VALUES: [ListUserRole, ...ListUserRole[]];
|
|
50
|
+
declare const CONTRIBUTOR_ROLE_VALUES: readonly ["owner", "editor"];
|
|
51
|
+
|
|
52
|
+
declare const LOCALES: readonly ["fr", "en"];
|
|
53
|
+
type Locale = (typeof LOCALES)[number];
|
|
54
|
+
declare const DEFAULT_LOCALE: Locale;
|
|
55
|
+
|
|
56
|
+
declare const UserRoles: {
|
|
57
|
+
readonly USER: "user";
|
|
58
|
+
readonly MODERATOR: "moderator";
|
|
59
|
+
readonly ADMIN: "admin";
|
|
60
|
+
};
|
|
61
|
+
type UserRole = (typeof UserRoles)[keyof typeof UserRoles];
|
|
62
|
+
declare const USER_ROLE_VALUES: [UserRole, ...UserRole[]];
|
|
63
|
+
|
|
64
|
+
export { AUTH_PROVIDER_VALUES, CONTRIBUTOR_ROLE_VALUES, DEFAULT_LOCALE, DELETION_REASON_VALUES, FEEDBACK_STATUS_VALUES, FeedbackStatuses, INVITE_STATUS_VALUES, ITEM_STATUS_VALUES, InviteStatuses, ItemStatuses, LIST_STATUS_VALUES, LIST_USER_ROLE_VALUES, LOCALES, ListStatuses, ListUserRoles, USER_ROLE_VALUES, UserRoles };
|
|
65
|
+
export type { AuthProvider, DeletionReason, FeedbackStatus, InviteStatus, ItemStatus, ListStatus, ListUserRole, Locale, UserRole };
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
export { HttpHeader, HttpMethod, HttpStatus } from '../chunk-E3CTTWFQ.js';
|
|
2
|
+
export { AUTH_PROVIDER_VALUES, SUPPORTED_CURRENCY_VALUES, SupportedCurrencies, USER_ROLE_VALUES, UserRoles } from '../chunk-2LLUUBMQ.js';
|
|
3
|
+
|
|
4
|
+
// src/enums/deletion-reason.ts
|
|
5
|
+
var DELETION_REASON_VALUES = [
|
|
6
|
+
"soft_delete_grace",
|
|
7
|
+
"inactive_24mo",
|
|
8
|
+
"user_request"
|
|
9
|
+
];
|
|
10
|
+
|
|
11
|
+
// src/enums/error-code.ts
|
|
12
|
+
var ErrorCode = {
|
|
13
|
+
BAD_REQUEST: "BAD_REQUEST",
|
|
14
|
+
UNAUTHORIZED: "UNAUTHORIZED",
|
|
15
|
+
FORBIDDEN: "FORBIDDEN",
|
|
16
|
+
EMAIL_NOT_VERIFIED: "EMAIL_NOT_VERIFIED",
|
|
17
|
+
ACCOUNT_BANNED: "ACCOUNT_BANNED",
|
|
18
|
+
NOT_FOUND: "NOT_FOUND",
|
|
19
|
+
CONFLICT: "CONFLICT",
|
|
20
|
+
DUPLICATE_SHOP_FOR_ITEM: "DUPLICATE_SHOP_FOR_ITEM",
|
|
21
|
+
SLUG_GENERATION_EXHAUSTED: "SLUG_GENERATION_EXHAUSTED",
|
|
22
|
+
CATEGORY_NOT_FOUND: "CATEGORY_NOT_FOUND",
|
|
23
|
+
CATEGORY_MAX_DEPTH_EXCEEDED: "CATEGORY_MAX_DEPTH_EXCEEDED",
|
|
24
|
+
CATEGORY_CYCLE_DETECTED: "CATEGORY_CYCLE_DETECTED",
|
|
25
|
+
TAG_NOT_FOUND: "TAG_NOT_FOUND",
|
|
26
|
+
TAG_INVALID_NAME: "TAG_INVALID_NAME",
|
|
27
|
+
UNPROCESSABLE_ENTITY: "UNPROCESSABLE_ENTITY",
|
|
28
|
+
NO_FIELDS_TO_UPDATE: "NO_FIELDS_TO_UPDATE",
|
|
29
|
+
RATE_LIMIT_EXCEEDED: "RATE_LIMIT_EXCEEDED",
|
|
30
|
+
USER_CREATION_FAILED: "USER_CREATION_FAILED",
|
|
31
|
+
USER_UPDATE_FAILED: "USER_UPDATE_FAILED",
|
|
32
|
+
ACCOUNT_DELETION_FAILED: "ACCOUNT_DELETION_FAILED",
|
|
33
|
+
LOGOUT_FAILED: "LOGOUT_FAILED",
|
|
34
|
+
INVALID_RESET_TOKEN: "INVALID_RESET_TOKEN",
|
|
35
|
+
INVALID_REFRESH_TOKEN: "INVALID_REFRESH_TOKEN",
|
|
36
|
+
INVALID_CREDENTIALS: "INVALID_CREDENTIALS",
|
|
37
|
+
INVALID_OPERATION: "INVALID_OPERATION",
|
|
38
|
+
FEEDBACK_CREATION_FAILED: "FEEDBACK_CREATION_FAILED",
|
|
39
|
+
FEEDBACK_NOT_FOUND: "FEEDBACK_NOT_FOUND",
|
|
40
|
+
INVALID_IMAGE: "INVALID_IMAGE",
|
|
41
|
+
INVALID_IMAGE_TYPE: "INVALID_IMAGE_TYPE",
|
|
42
|
+
PAYLOAD_TOO_LARGE: "PAYLOAD_TOO_LARGE",
|
|
43
|
+
IMAGE_AND_CLEAR_CONFLICT: "IMAGE_AND_CLEAR_CONFLICT",
|
|
44
|
+
COLLAB_SELF_INVITE: "COLLAB_SELF_INVITE",
|
|
45
|
+
COLLAB_ALREADY_MEMBER: "COLLAB_ALREADY_MEMBER",
|
|
46
|
+
COLLAB_INVITE_NOT_FOUND: "COLLAB_INVITE_NOT_FOUND",
|
|
47
|
+
COLLAB_INVITE_EXPIRED: "COLLAB_INVITE_EXPIRED",
|
|
48
|
+
COLLAB_INVITE_ALREADY_RESOLVED: "COLLAB_INVITE_ALREADY_RESOLVED",
|
|
49
|
+
COLLAB_EMAIL_MISMATCH: "COLLAB_EMAIL_MISMATCH",
|
|
50
|
+
RESERVATION_TOKEN_INVALID: "RESERVATION_TOKEN_INVALID",
|
|
51
|
+
RESERVATION_REQUIRES_RESERVER_NAME: "RESERVATION_REQUIRES_RESERVER_NAME",
|
|
52
|
+
RESERVATION_INCONSISTENT_INTENT: "RESERVATION_INCONSISTENT_INTENT",
|
|
53
|
+
INTERNAL_ERROR: "INTERNAL_ERROR"
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
// src/enums/feedback-status.ts
|
|
57
|
+
var FeedbackStatuses = {
|
|
58
|
+
OPEN: "open",
|
|
59
|
+
REVIEWED: "reviewed",
|
|
60
|
+
CLOSED: "closed"
|
|
61
|
+
};
|
|
62
|
+
var FEEDBACK_STATUS_VALUES = Object.values(FeedbackStatuses);
|
|
63
|
+
|
|
64
|
+
// src/enums/invite-status.ts
|
|
65
|
+
var InviteStatuses = {
|
|
66
|
+
PENDING: "pending",
|
|
67
|
+
ACCEPTED: "accepted",
|
|
68
|
+
DECLINED: "declined",
|
|
69
|
+
REVOKED: "revoked"
|
|
70
|
+
};
|
|
71
|
+
var INVITE_STATUS_VALUES = Object.values(InviteStatuses);
|
|
72
|
+
|
|
73
|
+
// src/enums/item-status.ts
|
|
74
|
+
var ItemStatuses = {
|
|
75
|
+
AVAILABLE: "available",
|
|
76
|
+
RESERVED: "reserved",
|
|
77
|
+
PURCHASED: "purchased"
|
|
78
|
+
};
|
|
79
|
+
var ITEM_STATUS_VALUES = Object.values(ItemStatuses);
|
|
80
|
+
|
|
81
|
+
// src/enums/list-status.ts
|
|
82
|
+
var ListStatuses = {
|
|
83
|
+
ACTIVE: "active",
|
|
84
|
+
ARCHIVED: "archived",
|
|
85
|
+
DELETED: "deleted"
|
|
86
|
+
};
|
|
87
|
+
var LIST_STATUS_VALUES = Object.values(ListStatuses);
|
|
88
|
+
|
|
89
|
+
// src/enums/list-user-role.ts
|
|
90
|
+
var ListUserRoles = {
|
|
91
|
+
OWNER: "owner",
|
|
92
|
+
EDITOR: "editor",
|
|
93
|
+
VIEWER: "viewer"
|
|
94
|
+
};
|
|
95
|
+
var LIST_USER_ROLE_VALUES = Object.values(ListUserRoles);
|
|
96
|
+
var CONTRIBUTOR_ROLE_VALUES = [ListUserRoles.OWNER, ListUserRoles.EDITOR];
|
|
97
|
+
|
|
98
|
+
// src/enums/locale.ts
|
|
99
|
+
var LOCALES = ["fr", "en"];
|
|
100
|
+
var DEFAULT_LOCALE = "en";
|
|
101
|
+
|
|
102
|
+
export { CONTRIBUTOR_ROLE_VALUES, DEFAULT_LOCALE, DELETION_REASON_VALUES, ErrorCode, FEEDBACK_STATUS_VALUES, FeedbackStatuses, INVITE_STATUS_VALUES, ITEM_STATUS_VALUES, InviteStatuses, ItemStatuses, LIST_STATUS_VALUES, LIST_USER_ROLE_VALUES, LOCALES, ListStatuses, ListUserRoles };
|
|
103
|
+
//# sourceMappingURL=index.js.map
|
|
104
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/enums/deletion-reason.ts","../../src/enums/error-code.ts","../../src/enums/feedback-status.ts","../../src/enums/invite-status.ts","../../src/enums/item-status.ts","../../src/enums/list-status.ts","../../src/enums/list-user-role.ts","../../src/enums/locale.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["export const DELETION_REASON_VALUES = [\n 'soft_delete_grace',\n 'inactive_24mo',\n 'user_request',\n] as const\nexport type DeletionReason = (typeof DELETION_REASON_VALUES)[number]\n","export const ErrorCode = {\n BAD_REQUEST: 'BAD_REQUEST',\n UNAUTHORIZED: 'UNAUTHORIZED',\n FORBIDDEN: 'FORBIDDEN',\n EMAIL_NOT_VERIFIED: 'EMAIL_NOT_VERIFIED',\n ACCOUNT_BANNED: 'ACCOUNT_BANNED',\n NOT_FOUND: 'NOT_FOUND',\n CONFLICT: 'CONFLICT',\n DUPLICATE_SHOP_FOR_ITEM: 'DUPLICATE_SHOP_FOR_ITEM',\n SLUG_GENERATION_EXHAUSTED: 'SLUG_GENERATION_EXHAUSTED',\n CATEGORY_NOT_FOUND: 'CATEGORY_NOT_FOUND',\n CATEGORY_MAX_DEPTH_EXCEEDED: 'CATEGORY_MAX_DEPTH_EXCEEDED',\n CATEGORY_CYCLE_DETECTED: 'CATEGORY_CYCLE_DETECTED',\n TAG_NOT_FOUND: 'TAG_NOT_FOUND',\n TAG_INVALID_NAME: 'TAG_INVALID_NAME',\n UNPROCESSABLE_ENTITY: 'UNPROCESSABLE_ENTITY',\n NO_FIELDS_TO_UPDATE: 'NO_FIELDS_TO_UPDATE',\n RATE_LIMIT_EXCEEDED: 'RATE_LIMIT_EXCEEDED',\n USER_CREATION_FAILED: 'USER_CREATION_FAILED',\n USER_UPDATE_FAILED: 'USER_UPDATE_FAILED',\n ACCOUNT_DELETION_FAILED: 'ACCOUNT_DELETION_FAILED',\n LOGOUT_FAILED: 'LOGOUT_FAILED',\n INVALID_RESET_TOKEN: 'INVALID_RESET_TOKEN',\n INVALID_REFRESH_TOKEN: 'INVALID_REFRESH_TOKEN',\n INVALID_CREDENTIALS: 'INVALID_CREDENTIALS',\n INVALID_OPERATION: 'INVALID_OPERATION',\n FEEDBACK_CREATION_FAILED: 'FEEDBACK_CREATION_FAILED',\n FEEDBACK_NOT_FOUND: 'FEEDBACK_NOT_FOUND',\n INVALID_IMAGE: 'INVALID_IMAGE',\n INVALID_IMAGE_TYPE: 'INVALID_IMAGE_TYPE',\n PAYLOAD_TOO_LARGE: 'PAYLOAD_TOO_LARGE',\n IMAGE_AND_CLEAR_CONFLICT: 'IMAGE_AND_CLEAR_CONFLICT',\n COLLAB_SELF_INVITE: 'COLLAB_SELF_INVITE',\n COLLAB_ALREADY_MEMBER: 'COLLAB_ALREADY_MEMBER',\n COLLAB_INVITE_NOT_FOUND: 'COLLAB_INVITE_NOT_FOUND',\n COLLAB_INVITE_EXPIRED: 'COLLAB_INVITE_EXPIRED',\n COLLAB_INVITE_ALREADY_RESOLVED: 'COLLAB_INVITE_ALREADY_RESOLVED',\n COLLAB_EMAIL_MISMATCH: 'COLLAB_EMAIL_MISMATCH',\n RESERVATION_TOKEN_INVALID: 'RESERVATION_TOKEN_INVALID',\n RESERVATION_REQUIRES_RESERVER_NAME: 'RESERVATION_REQUIRES_RESERVER_NAME',\n RESERVATION_INCONSISTENT_INTENT: 'RESERVATION_INCONSISTENT_INTENT',\n INTERNAL_ERROR: 'INTERNAL_ERROR',\n} as const\nexport type ErrorCode = (typeof ErrorCode)[keyof typeof ErrorCode]\n","export const FeedbackStatuses = {\n OPEN: 'open',\n REVIEWED: 'reviewed',\n CLOSED: 'closed',\n} as const\n\nexport type FeedbackStatus = (typeof FeedbackStatuses)[keyof typeof FeedbackStatuses]\n\nexport const FEEDBACK_STATUS_VALUES = Object.values(FeedbackStatuses) as [\n FeedbackStatus,\n ...FeedbackStatus[],\n]\n","export const InviteStatuses = {\n PENDING: 'pending',\n ACCEPTED: 'accepted',\n DECLINED: 'declined',\n REVOKED: 'revoked',\n} as const\n\nexport type InviteStatus = (typeof InviteStatuses)[keyof typeof InviteStatuses]\n\nexport const INVITE_STATUS_VALUES = Object.values(InviteStatuses) as [\n InviteStatus,\n ...InviteStatus[],\n]\n","export const ItemStatuses = {\n AVAILABLE: 'available',\n RESERVED: 'reserved',\n PURCHASED: 'purchased',\n} as const\n\nexport type ItemStatus = (typeof ItemStatuses)[keyof typeof ItemStatuses]\n\nexport const ITEM_STATUS_VALUES = Object.values(ItemStatuses) as [ItemStatus, ...ItemStatus[]]\n","export const ListStatuses = {\n ACTIVE: 'active',\n ARCHIVED: 'archived',\n DELETED: 'deleted',\n} as const\n\nexport type ListStatus = (typeof ListStatuses)[keyof typeof ListStatuses]\n\nexport const LIST_STATUS_VALUES = Object.values(ListStatuses) as [ListStatus, ...ListStatus[]]\n","export const ListUserRoles = {\n OWNER: 'owner',\n EDITOR: 'editor',\n VIEWER: 'viewer',\n} as const\n\nexport type ListUserRole = (typeof ListUserRoles)[keyof typeof ListUserRoles]\n\nexport const LIST_USER_ROLE_VALUES = Object.values(ListUserRoles) as [\n ListUserRole,\n ...ListUserRole[],\n]\n\nexport const CONTRIBUTOR_ROLE_VALUES = [ListUserRoles.OWNER, ListUserRoles.EDITOR] as const\n","export const LOCALES = ['fr', 'en'] as const\n\nexport type Locale = (typeof LOCALES)[number]\n\nexport const DEFAULT_LOCALE: Locale = 'en'\n"]}
|