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.
@@ -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;AAK9C,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,cAAc,EACvB,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,GACnC,OAAO,CAYT"}
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 = JSON.stringify(request.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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmV0dGVyLWF1dGgtcmVxdWVzdC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYXV0aC9iZXR0ZXItYXV0aC1yZXF1ZXN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgRmFzdGlmeVJlcXVlc3QgfSBmcm9tIFwiZmFzdGlmeVwiO1xuXG5pbXBvcnQgeyBjb252ZXJ0RmFzdGlmeUhlYWRlcnNUb1N0YW5kYXJkIH0gZnJvbSBcIi4uL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQgeyByZXBsYWNlQ2xpZW50SXBIZWFkZXJzIH0gZnJvbSBcIi4vYXVkaXQtbG9nL2NsaWVudC1pcFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQmV0dGVyQXV0aFJlcXVlc3QoXG4gIHJlcXVlc3Q6IEZhc3RpZnlSZXF1ZXN0LFxuICBpcEFkZHJlc3NIZWFkZXJzPzogcmVhZG9ubHkgc3RyaW5nW10sXG4pOiBSZXF1ZXN0IHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChyZXF1ZXN0LnVybCwgYGh0dHA6Ly8ke3JlcXVlc3QuaGVhZGVycy5ob3N0fWApO1xuICBjb25zdCBoZWFkZXJzID0gY29udmVydEZhc3RpZnlIZWFkZXJzVG9TdGFuZGFyZChyZXF1ZXN0LmhlYWRlcnMpO1xuXG4gIHJlcGxhY2VDbGllbnRJcEhlYWRlcnMoaGVhZGVycywgcmVxdWVzdC5pcCwgaXBBZGRyZXNzSGVhZGVycyk7XG5cbiAgY29uc3QgaW5pdDogUmVxdWVzdEluaXQgPSB7XG4gICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICBoZWFkZXJzLFxuICB9O1xuICBpZiAocmVxdWVzdC5ib2R5KSBpbml0LmJvZHkgPSBKU09OLnN0cmluZ2lmeShyZXF1ZXN0LmJvZHkpO1xuICByZXR1cm4gbmV3IFJlcXVlc3QodXJsLnRvU3RyaW5nKCksIGluaXQpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBS0EsU0FBZ0Isd0JBQ2QsU0FDQSxrQkFDUztDQUNULE1BQU0sTUFBTSxJQUFJLElBQUksUUFBUSxLQUFLLFVBQVUsUUFBUSxRQUFRLE1BQU07Q0FDakUsTUFBTSxVQUFVLGdDQUFnQyxRQUFRLE9BQU87Q0FFL0QsdUJBQXVCLFNBQVMsUUFBUSxJQUFJLGdCQUFnQjtDQUU1RCxNQUFNLE9BQW9CO0VBQ3hCLFFBQVEsUUFBUTtFQUNoQjtDQUNGO0NBQ0EsSUFBSSxRQUFRLE1BQU0sS0FBSyxPQUFPLEtBQUssVUFBVSxRQUFRLElBQUk7Q0FDekQsT0FBTyxJQUFJLFFBQVEsSUFBSSxTQUFTLEdBQUcsSUFBSTtBQUN6Qzs7WUFsQmdFO2dCQUNGIn0=
55
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmV0dGVyLWF1dGgtcmVxdWVzdC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYXV0aC9iZXR0ZXItYXV0aC1yZXF1ZXN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgRmFzdGlmeVJlcXVlc3QgfSBmcm9tIFwiZmFzdGlmeVwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgY29udmVydEZhc3RpZnlIZWFkZXJzVG9TdGFuZGFyZCB9IGZyb20gXCIuLi91dGlscy91dGlsc1wiO1xuaW1wb3J0IHsgcmVwbGFjZUNsaWVudElwSGVhZGVycyB9IGZyb20gXCIuL2F1ZGl0LWxvZy9jbGllbnQtaXBcIjtcblxuLyoqIGNoYXJzZXQg65OxIO2MjOudvOuvuO2EsOuCmCDrjIDshozrrLjsnpAg67OA7ZiV64+EIO2PrO2VqO2VtCB1cmxlbmNvZGVkIGNvbnRlbnQtdHlwZeyduOyngCDtjJDrs4TtlZzri6QgKFJGQyA5MTEwIMKnOC4zLjEpICovXG5mdW5jdGlvbiBpc1VybEVuY29kZWRDb250ZW50VHlwZShoZWFkZXJzOiBIZWFkZXJzKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgaGVhZGVycy5nZXQoXCJjb250ZW50LXR5cGVcIik/LnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKSA/P1xuICAgIGZhbHNlXG4gICk7XG59XG5cbi8qKiDtjIzshJzqsIAg67O466y47J2EIOqwgOqzte2VmOyngCDslYrqs6Ag64SY6ri0IOqyveyasOydmCDsm5DrrLggdXJsZW5jb2RlZCDrrLjsnpDsl7QgKi9cbmNvbnN0IHJhd1VybEVuY29kZWRCb2R5U2NoZW1hID0gei5zdHJpbmcoKTtcblxuLyoqIEZhc3RpZnkgdXJsZW5jb2RlZCDtjIzshJzqsIAg7IOd7ISx7ZWY64qUIO2CpC3qsJIg67O466y4ICjrsJjrs7Ug7YKk64qUIOuwsOyXtOuhnCDtjIzsi7HrkKgpICovXG5jb25zdCB1cmxFbmNvZGVkVmFsdWVTY2hlbWEgPSB6LnVuaW9uKFt6LnN0cmluZygpLCB6Lm51bWJlcigpLCB6LmJvb2xlYW4oKV0pO1xuY29uc3QgdXJsRW5jb2RlZFJlY29yZFNjaGVtYSA9IHoucmVjb3JkKFxuICB6LnN0cmluZygpLFxuICB6LnVuaW9uKFt1cmxFbmNvZGVkVmFsdWVTY2hlbWEsIHouYXJyYXkodXJsRW5jb2RlZFZhbHVlU2NoZW1hKV0pLFxuKTtcblxuLyoqXG4gKiBGYXN0aWZ56rCAIO2MjOyLse2VnCDrs7jrrLjsnYQg7JuQ656YIGNvbnRlbnQtdHlwZeyXkCDrp57qsowg7J6s7KeB66Cs7ZmU7ZWc64ukLlxuICogdXJsZW5jb2RlZCDrs7jrrLjsnYQgSlNPTuycvOuhnCDsnqzsp4HroKztmZTtlZjrqbQgYmV0dGVyLWF1dGjqsIAg7Y+8IOy9nOuwsSjsmIg6IEFwcGxlIGZvcm1fcG9zdCnsnYRcbiAqIO2VtOyEne2VmOyngCDrqrvtlZjrr4DroZwoc3RhdGVfbm90X2ZvdW5kKSwgY29udGVudC10eXBl6rO8IOuzuOusuCDtj6zrp7fsnYQg7J287LmY7Iuc7YKo64ukLlxuICovXG5mdW5jdGlvbiBzZXJpYWxpemVCb2R5KHJlcXVlc3Q6IEZhc3RpZnlSZXF1ZXN0LCBoZWFkZXJzOiBIZWFkZXJzKTogc3RyaW5nIHtcbiAgaWYgKCFpc1VybEVuY29kZWRDb250ZW50VHlwZShoZWFkZXJzKSkgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJlcXVlc3QuYm9keSk7XG5cbiAgLy8g7J2066+4IHVybGVuY29kZWQg66y47J6Q7Je07J2066m0IOq3uOuMgOuhnCDsoITri6ztlbQg6rCSIOyZnOqzoeydhCDtlLztlZzri6RcbiAgY29uc3QgcmF3Qm9keSA9IHJhd1VybEVuY29kZWRCb2R5U2NoZW1hLnNhZmVQYXJzZShyZXF1ZXN0LmJvZHkpO1xuICBpZiAocmF3Qm9keS5zdWNjZXNzKSByZXR1cm4gcmF3Qm9keS5kYXRhO1xuXG4gIGNvbnN0IHJlY29yZEJvZHkgPSB1cmxFbmNvZGVkUmVjb3JkU2NoZW1hLnNhZmVQYXJzZShyZXF1ZXN0LmJvZHkpO1xuICAvLyDsmIjsg4Eg67CWIO2Yle2DnOydmCDrs7jrrLjsnYAg6riw7KG0IOuPmeyekShKU09OIOyngeugrO2ZlCnsnYQg7Jyg7KeA7ZWc64ukXG4gIGlmICghcmVjb3JkQm9keS5zdWNjZXNzKSByZXR1cm4gSlNPTi5zdHJpbmdpZnkocmVxdWVzdC5ib2R5KTtcblxuICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHJlY29yZEJvZHkuZGF0YSkpIHtcbiAgICAvLyDrsLDsl7TsnYAgXCJhLGJcIuuhnCDtlansuZjsp4Ag7JWK6rOgIOuwmOuztSDtgqQodGFncz1hJnRhZ3M9YinroZwg7KeB66Cs7ZmU7ZWc64ukXG4gICAgY29uc3QgaXRlbXMgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHBhcmFtcy5hcHBlbmQoa2V5LCBTdHJpbmcoaXRlbSkpO1xuICB9XG4gIHJldHVybiBwYXJhbXMudG9TdHJpbmcoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJldHRlckF1dGhSZXF1ZXN0KFxuICByZXF1ZXN0OiBGYXN0aWZ5UmVxdWVzdCxcbiAgaXBBZGRyZXNzSGVhZGVycz86IHJlYWRvbmx5IHN0cmluZ1tdLFxuKTogUmVxdWVzdCB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwocmVxdWVzdC51cmwsIGBodHRwOi8vJHtyZXF1ZXN0LmhlYWRlcnMuaG9zdH1gKTtcbiAgY29uc3QgaGVhZGVycyA9IGNvbnZlcnRGYXN0aWZ5SGVhZGVyc1RvU3RhbmRhcmQocmVxdWVzdC5oZWFkZXJzKTtcblxuICByZXBsYWNlQ2xpZW50SXBIZWFkZXJzKGhlYWRlcnMsIHJlcXVlc3QuaXAsIGlwQWRkcmVzc0hlYWRlcnMpO1xuXG4gIGNvbnN0IGluaXQ6IFJlcXVlc3RJbml0ID0ge1xuICAgIG1ldGhvZDogcmVxdWVzdC5tZXRob2QsXG4gICAgaGVhZGVycyxcbiAgfTtcbiAgaWYgKHJlcXVlc3QuYm9keSkgaW5pdC5ib2R5ID0gc2VyaWFsaXplQm9keShyZXF1ZXN0LCBoZWFkZXJzKTtcbiAgcmV0dXJuIG5ldyBSZXF1ZXN0KHVybC50b1N0cmluZygpLCBpbml0KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBT0EsU0FBUyx3QkFBd0IsU0FBMkI7Q0FDMUQsT0FDRSxRQUFRLElBQUksY0FBYyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsV0FBVyxtQ0FBbUMsS0FDekY7QUFFSjs7Ozs7O0FBaUJBLFNBQVMsY0FBYyxTQUF5QixTQUEwQjtDQUN4RSxJQUFJLENBQUMsd0JBQXdCLE9BQU8sR0FBRyxPQUFPLEtBQUssVUFBVSxRQUFRLElBQUk7Q0FHekUsTUFBTSxVQUFVLHdCQUF3QixVQUFVLFFBQVEsSUFBSTtDQUM5RCxJQUFJLFFBQVEsU0FBUyxPQUFPLFFBQVE7Q0FFcEMsTUFBTSxhQUFhLHVCQUF1QixVQUFVLFFBQVEsSUFBSTtDQUVoRSxJQUFJLENBQUMsV0FBVyxTQUFTLE9BQU8sS0FBSyxVQUFVLFFBQVEsSUFBSTtDQUUzRCxNQUFNLFNBQVMsSUFBSSxnQkFBZ0I7Q0FDbkMsS0FBSyxNQUFNLENBQUMsS0FBSyxVQUFVLE9BQU8sUUFBUSxXQUFXLElBQUksR0FBRztFQUUxRCxNQUFNLFFBQVEsTUFBTSxRQUFRLEtBQUssSUFBSSxRQUFRLENBQUMsS0FBSztFQUNuRCxLQUFLLE1BQU0sUUFBUSxPQUFPLE9BQU8sT0FBTyxLQUFLLE9BQU8sSUFBSSxDQUFDO0NBQzNEO0NBQ0EsT0FBTyxPQUFPLFNBQVM7QUFDekI7QUFFQSxTQUFnQix3QkFDZCxTQUNBLGtCQUNTO0NBQ1QsTUFBTSxNQUFNLElBQUksSUFBSSxRQUFRLEtBQUssVUFBVSxRQUFRLFFBQVEsTUFBTTtDQUNqRSxNQUFNLFVBQVUsZ0NBQWdDLFFBQVEsT0FBTztDQUUvRCx1QkFBdUIsU0FBUyxRQUFRLElBQUksZ0JBQWdCO0NBRTVELE1BQU0sT0FBb0I7RUFDeEIsUUFBUSxRQUFRO0VBQ2hCO0NBQ0Y7Q0FDQSxJQUFJLFFBQVEsTUFBTSxLQUFLLE9BQU8sY0FBYyxTQUFTLE9BQU87Q0FDNUQsT0FBTyxJQUFJLFFBQVEsSUFBSSxTQUFTLEdBQUcsSUFBSTtBQUN6Qzs7O1lBN0RnRTtnQkFDRjtDQVd4RCwwQkFBMEIsRUFBRSxPQUFPO0NBR25DLHdCQUF3QixFQUFFLE1BQU07RUFBQyxFQUFFLE9BQU87RUFBRyxFQUFFLE9BQU87RUFBRyxFQUFFLFFBQVE7Q0FBQyxDQUFDO0NBQ3JFLHlCQUF5QixFQUFFLE9BQy9CLEVBQUUsT0FBTyxHQUNULEVBQUUsTUFBTSxDQUFDLHVCQUF1QixFQUFFLE1BQU0scUJBQXFCLENBQUMsQ0FBQyxDQUNqRSJ9