sonamu 0.11.13 → 0.11.15
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.
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +5 -5
- package/dist/auth/better-auth-request.d.ts.map +1 -1
- package/dist/auth/better-auth-request.js +33 -2
- package/dist/ui-web/assets/{index-ClxAM2Lk.js → index-LpE8u19O.js} +57 -57
- package/dist/ui-web/index.html +1 -1
- package/package.json +1 -1
- package/src/api/__tests__/sonamu.plugins.test.ts +211 -0
- package/src/api/sonamu.ts +5 -4
- package/src/auth/__tests__/better-auth-request.test.ts +210 -0
- package/src/auth/better-auth-request.ts +45 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"better-auth-request.d.ts","sourceRoot":"","sources":["../../src/auth/better-auth-request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"better-auth-request.d.ts","sourceRoot":"","sources":["../../src/auth/better-auth-request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,SAAS,CAAC;AAiD9C,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,cAAc,EACvB,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,GACnC,OAAO,CAYT"}
|
|
@@ -1,7 +1,30 @@
|
|
|
1
1
|
import { __esmMin } from "../_virtual/_rolldown/runtime.js";
|
|
2
2
|
import { convertFastifyHeadersToStandard, init_utils } from "../utils/utils.js";
|
|
3
3
|
import { init_client_ip, replaceClientIpHeaders } from "./audit-log/client-ip.js";
|
|
4
|
+
import { z } from "zod";
|
|
4
5
|
//#region src/auth/better-auth-request.ts
|
|
6
|
+
/** charset 등 파라미터나 대소문자 변형도 포함해 urlencoded content-type인지 판별한다 (RFC 9110 §8.3.1) */
|
|
7
|
+
function isUrlEncodedContentType(headers) {
|
|
8
|
+
return headers.get("content-type")?.toLowerCase().startsWith("application/x-www-form-urlencoded") ?? false;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Fastify가 파싱한 본문을 원래 content-type에 맞게 재직렬화한다.
|
|
12
|
+
* urlencoded 본문을 JSON으로 재직렬화하면 better-auth가 폼 콜백(예: Apple form_post)을
|
|
13
|
+
* 해석하지 못하므로(state_not_found), content-type과 본문 포맷을 일치시킨다.
|
|
14
|
+
*/
|
|
15
|
+
function serializeBody(request, headers) {
|
|
16
|
+
if (!isUrlEncodedContentType(headers)) return JSON.stringify(request.body);
|
|
17
|
+
const rawBody = rawUrlEncodedBodySchema.safeParse(request.body);
|
|
18
|
+
if (rawBody.success) return rawBody.data;
|
|
19
|
+
const recordBody = urlEncodedRecordSchema.safeParse(request.body);
|
|
20
|
+
if (!recordBody.success) return JSON.stringify(request.body);
|
|
21
|
+
const params = new URLSearchParams();
|
|
22
|
+
for (const [key, value] of Object.entries(recordBody.data)) {
|
|
23
|
+
const items = Array.isArray(value) ? value : [value];
|
|
24
|
+
for (const item of items) params.append(key, String(item));
|
|
25
|
+
}
|
|
26
|
+
return params.toString();
|
|
27
|
+
}
|
|
5
28
|
function createBetterAuthRequest(request, ipAddressHeaders) {
|
|
6
29
|
const url = new URL(request.url, `http://${request.headers.host}`);
|
|
7
30
|
const headers = convertFastifyHeadersToStandard(request.headers);
|
|
@@ -10,15 +33,23 @@ function createBetterAuthRequest(request, ipAddressHeaders) {
|
|
|
10
33
|
method: request.method,
|
|
11
34
|
headers
|
|
12
35
|
};
|
|
13
|
-
if (request.body) init.body =
|
|
36
|
+
if (request.body) init.body = serializeBody(request, headers);
|
|
14
37
|
return new Request(url.toString(), init);
|
|
15
38
|
}
|
|
39
|
+
var rawUrlEncodedBodySchema, urlEncodedValueSchema, urlEncodedRecordSchema;
|
|
16
40
|
var init_better_auth_request = __esmMin((() => {
|
|
17
41
|
init_utils();
|
|
18
42
|
init_client_ip();
|
|
43
|
+
rawUrlEncodedBodySchema = z.string();
|
|
44
|
+
urlEncodedValueSchema = z.union([
|
|
45
|
+
z.string(),
|
|
46
|
+
z.number(),
|
|
47
|
+
z.boolean()
|
|
48
|
+
]);
|
|
49
|
+
urlEncodedRecordSchema = z.record(z.string(), z.union([urlEncodedValueSchema, z.array(urlEncodedValueSchema)]));
|
|
19
50
|
}));
|
|
20
51
|
//#endregion
|
|
21
52
|
init_better_auth_request();
|
|
22
53
|
export { createBetterAuthRequest, init_better_auth_request };
|
|
23
54
|
|
|
24
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmV0dGVyLWF1dGgtcmVxdWVzdC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYXV0aC9iZXR0ZXItYXV0aC1yZXF1ZXN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgRmFzdGlmeVJlcXVlc3QgfSBmcm9tIFwiZmFzdGlmeVwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgY29udmVydEZhc3RpZnlIZWFkZXJzVG9TdGFuZGFyZCB9IGZyb20gXCIuLi91dGlscy91dGlsc1wiO1xuaW1wb3J0IHsgcmVwbGFjZUNsaWVudElwSGVhZGVycyB9IGZyb20gXCIuL2F1ZGl0LWxvZy9jbGllbnQtaXBcIjtcblxuLyoqIGNoYXJzZXQg65OxIO2MjOudvOuvuO2EsOuCmCDrjIDshozrrLjsnpAg67OA7ZiV64+EIO2PrO2VqO2VtCB1cmxlbmNvZGVkIGNvbnRlbnQtdHlwZeyduOyngCDtjJDrs4TtlZzri6QgKFJGQyA5MTEwIMKnOC4zLjEpICovXG5mdW5jdGlvbiBpc1VybEVuY29kZWRDb250ZW50VHlwZShoZWFkZXJzOiBIZWFkZXJzKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgaGVhZGVycy5nZXQoXCJjb250ZW50LXR5cGVcIik/LnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKSA/P1xuICAgIGZhbHNlXG4gICk7XG59XG5cbi8qKiDtjIzshJzqsIAg67O466y47J2EIOqwgOqzte2VmOyngCDslYrqs6Ag64SY6ri0IOqyveyasOydmCDsm5DrrLggdXJsZW5jb2RlZCDrrLjsnpDsl7QgKi9cbmNvbnN0IHJhd1VybEVuY29kZWRCb2R5U2NoZW1hID0gei5zdHJpbmcoKTtcblxuLyoqIEZhc3RpZnkgdXJsZW5jb2RlZCDtjIzshJzqsIAg7IOd7ISx7ZWY64qUIO2CpC3qsJIg67O466y4ICjrsJjrs7Ug7YKk64qUIOuwsOyXtOuhnCDtjIzsi7HrkKgpICovXG5jb25zdCB1cmxFbmNvZGVkVmFsdWVTY2hlbWEgPSB6LnVuaW9uKFt6LnN0cmluZygpLCB6Lm51bWJlcigpLCB6LmJvb2xlYW4oKV0pO1xuY29uc3QgdXJsRW5jb2RlZFJlY29yZFNjaGVtYSA9IHoucmVjb3JkKFxuICB6LnN0cmluZygpLFxuICB6LnVuaW9uKFt1cmxFbmNvZGVkVmFsdWVTY2hlbWEsIHouYXJyYXkodXJsRW5jb2RlZFZhbHVlU2NoZW1hKV0pLFxuKTtcblxuLyoqXG4gKiBGYXN0aWZ56rCAIO2MjOyLse2VnCDrs7jrrLjsnYQg7JuQ656YIGNvbnRlbnQtdHlwZeyXkCDrp57qsowg7J6s7KeB66Cs7ZmU7ZWc64ukLlxuICogdXJsZW5jb2RlZCDrs7jrrLjsnYQgSlNPTuycvOuhnCDsnqzsp4HroKztmZTtlZjrqbQgYmV0dGVyLWF1dGjqsIAg7Y+8IOy9nOuwsSjsmIg6IEFwcGxlIGZvcm1fcG9zdCnsnYRcbiAqIO2VtOyEne2VmOyngCDrqrvtlZjrr4DroZwoc3RhdGVfbm90X2ZvdW5kKSwgY29udGVudC10eXBl6rO8IOuzuOusuCDtj6zrp7fsnYQg7J287LmY7Iuc7YKo64ukLlxuICovXG5mdW5jdGlvbiBzZXJpYWxpemVCb2R5KHJlcXVlc3Q6IEZhc3RpZnlSZXF1ZXN0LCBoZWFkZXJzOiBIZWFkZXJzKTogc3RyaW5nIHtcbiAgaWYgKCFpc1VybEVuY29kZWRDb250ZW50VHlwZShoZWFkZXJzKSkgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJlcXVlc3QuYm9keSk7XG5cbiAgLy8g7J2066+4IHVybGVuY29kZWQg66y47J6Q7Je07J2066m0IOq3uOuMgOuhnCDsoITri6ztlbQg6rCSIOyZnOqzoeydhCDtlLztlZzri6RcbiAgY29uc3QgcmF3Qm9keSA9IHJhd1VybEVuY29kZWRCb2R5U2NoZW1hLnNhZmVQYXJzZShyZXF1ZXN0LmJvZHkpO1xuICBpZiAocmF3Qm9keS5zdWNjZXNzKSByZXR1cm4gcmF3Qm9keS5kYXRhO1xuXG4gIGNvbnN0IHJlY29yZEJvZHkgPSB1cmxFbmNvZGVkUmVjb3JkU2NoZW1hLnNhZmVQYXJzZShyZXF1ZXN0LmJvZHkpO1xuICAvLyDsmIjsg4Eg67CWIO2Yle2DnOydmCDrs7jrrLjsnYAg6riw7KG0IOuPmeyekShKU09OIOyngeugrO2ZlCnsnYQg7Jyg7KeA7ZWc64ukXG4gIGlmICghcmVjb3JkQm9keS5zdWNjZXNzKSByZXR1cm4gSlNPTi5zdHJpbmdpZnkocmVxdWVzdC5ib2R5KTtcblxuICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHJlY29yZEJvZHkuZGF0YSkpIHtcbiAgICAvLyDrsLDsl7TsnYAgXCJhLGJcIuuhnCDtlansuZjsp4Ag7JWK6rOgIOuwmOuztSDtgqQodGFncz1hJnRhZ3M9YinroZwg7KeB66Cs7ZmU7ZWc64ukXG4gICAgY29uc3QgaXRlbXMgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHBhcmFtcy5hcHBlbmQoa2V5LCBTdHJpbmcoaXRlbSkpO1xuICB9XG4gIHJldHVybiBwYXJhbXMudG9TdHJpbmcoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJldHRlckF1dGhSZXF1ZXN0KFxuICByZXF1ZXN0OiBGYXN0aWZ5UmVxdWVzdCxcbiAgaXBBZGRyZXNzSGVhZGVycz86IHJlYWRvbmx5IHN0cmluZ1tdLFxuKTogUmVxdWVzdCB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwocmVxdWVzdC51cmwsIGBodHRwOi8vJHtyZXF1ZXN0LmhlYWRlcnMuaG9zdH1gKTtcbiAgY29uc3QgaGVhZGVycyA9IGNvbnZlcnRGYXN0aWZ5SGVhZGVyc1RvU3RhbmRhcmQocmVxdWVzdC5oZWFkZXJzKTtcblxuICByZXBsYWNlQ2xpZW50SXBIZWFkZXJzKGhlYWRlcnMsIHJlcXVlc3QuaXAsIGlwQWRkcmVzc0hlYWRlcnMpO1xuXG4gIGNvbnN0IGluaXQ6IFJlcXVlc3RJbml0ID0ge1xuICAgIG1ldGhvZDogcmVxdWVzdC5tZXRob2QsXG4gICAgaGVhZGVycyxcbiAgfTtcbiAgaWYgKHJlcXVlc3QuYm9keSkgaW5pdC5ib2R5ID0gc2VyaWFsaXplQm9keShyZXF1ZXN0LCBoZWFkZXJzKTtcbiAgcmV0dXJuIG5ldyBSZXF1ZXN0KHVybC50b1N0cmluZygpLCBpbml0KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBT0EsU0FBUyx3QkFBd0IsU0FBMkI7Q0FDMUQsT0FDRSxRQUFRLElBQUksY0FBYyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsV0FBVyxtQ0FBbUMsS0FDekY7QUFFSjs7Ozs7O0FBaUJBLFNBQVMsY0FBYyxTQUF5QixTQUEwQjtDQUN4RSxJQUFJLENBQUMsd0JBQXdCLE9BQU8sR0FBRyxPQUFPLEtBQUssVUFBVSxRQUFRLElBQUk7Q0FHekUsTUFBTSxVQUFVLHdCQUF3QixVQUFVLFFBQVEsSUFBSTtDQUM5RCxJQUFJLFFBQVEsU0FBUyxPQUFPLFFBQVE7Q0FFcEMsTUFBTSxhQUFhLHVCQUF1QixVQUFVLFFBQVEsSUFBSTtDQUVoRSxJQUFJLENBQUMsV0FBVyxTQUFTLE9BQU8sS0FBSyxVQUFVLFFBQVEsSUFBSTtDQUUzRCxNQUFNLFNBQVMsSUFBSSxnQkFBZ0I7Q0FDbkMsS0FBSyxNQUFNLENBQUMsS0FBSyxVQUFVLE9BQU8sUUFBUSxXQUFXLElBQUksR0FBRztFQUUxRCxNQUFNLFFBQVEsTUFBTSxRQUFRLEtBQUssSUFBSSxRQUFRLENBQUMsS0FBSztFQUNuRCxLQUFLLE1BQU0sUUFBUSxPQUFPLE9BQU8sT0FBTyxLQUFLLE9BQU8sSUFBSSxDQUFDO0NBQzNEO0NBQ0EsT0FBTyxPQUFPLFNBQVM7QUFDekI7QUFFQSxTQUFnQix3QkFDZCxTQUNBLGtCQUNTO0NBQ1QsTUFBTSxNQUFNLElBQUksSUFBSSxRQUFRLEtBQUssVUFBVSxRQUFRLFFBQVEsTUFBTTtDQUNqRSxNQUFNLFVBQVUsZ0NBQWdDLFFBQVEsT0FBTztDQUUvRCx1QkFBdUIsU0FBUyxRQUFRLElBQUksZ0JBQWdCO0NBRTVELE1BQU0sT0FBb0I7RUFDeEIsUUFBUSxRQUFRO0VBQ2hCO0NBQ0Y7Q0FDQSxJQUFJLFFBQVEsTUFBTSxLQUFLLE9BQU8sY0FBYyxTQUFTLE9BQU87Q0FDNUQsT0FBTyxJQUFJLFFBQVEsSUFBSSxTQUFTLEdBQUcsSUFBSTtBQUN6Qzs7O1lBN0RnRTtnQkFDRjtDQVd4RCwwQkFBMEIsRUFBRSxPQUFPO0NBR25DLHdCQUF3QixFQUFFLE1BQU07RUFBQyxFQUFFLE9BQU87RUFBRyxFQUFFLE9BQU87RUFBRyxFQUFFLFFBQVE7Q0FBQyxDQUFDO0NBQ3JFLHlCQUF5QixFQUFFLE9BQy9CLEVBQUUsT0FBTyxHQUNULEVBQUUsTUFBTSxDQUFDLHVCQUF1QixFQUFFLE1BQU0scUJBQXFCLENBQUMsQ0FBQyxDQUNqRSJ9
|