@tinyrack/tinyauth-server 0.0.15 → 0.1.0

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.
Files changed (136) hide show
  1. package/dist/entrypoints/app.d.ts +49 -2
  2. package/dist/entrypoints/app.d.ts.map +1 -1
  3. package/dist/entrypoints/app.js +5 -0
  4. package/dist/entrypoints/app.js.map +1 -1
  5. package/dist/entrypoints/database/postgres/postgres.d.ts.map +1 -1
  6. package/dist/entrypoints/database/postgres/postgres.js +1 -0
  7. package/dist/entrypoints/database/postgres/postgres.js.map +1 -1
  8. package/dist/entrypoints/database/sqlite/sqlite.d.ts.map +1 -1
  9. package/dist/entrypoints/database/sqlite/sqlite.js +1 -0
  10. package/dist/entrypoints/database/sqlite/sqlite.js.map +1 -1
  11. package/dist/entrypoints/identity-providers/apple.d.ts +1 -0
  12. package/dist/entrypoints/identity-providers/apple.d.ts.map +1 -1
  13. package/dist/entrypoints/identity-providers/apple.js +1 -0
  14. package/dist/entrypoints/identity-providers/apple.js.map +1 -1
  15. package/dist/entrypoints/identity-providers/generic-oauth.d.ts +2 -0
  16. package/dist/entrypoints/identity-providers/generic-oauth.d.ts.map +1 -1
  17. package/dist/entrypoints/identity-providers/generic-oauth.js +2 -0
  18. package/dist/entrypoints/identity-providers/generic-oauth.js.map +1 -1
  19. package/dist/lib/config/client.d.ts.map +1 -1
  20. package/dist/lib/config/client.js +5 -1
  21. package/dist/lib/config/client.js.map +1 -1
  22. package/dist/lib/config/identity-providers.d.ts +4 -0
  23. package/dist/lib/config/identity-providers.d.ts.map +1 -1
  24. package/dist/lib/config/identity-providers.js +25 -8
  25. package/dist/lib/config/identity-providers.js.map +1 -1
  26. package/dist/lib/config/resolved.d.ts +2 -0
  27. package/dist/lib/config/resolved.d.ts.map +1 -1
  28. package/dist/lib/config/url-policy.d.ts +4 -0
  29. package/dist/lib/config/url-policy.d.ts.map +1 -0
  30. package/dist/lib/config/url-policy.js +38 -0
  31. package/dist/lib/config/url-policy.js.map +1 -0
  32. package/dist/lib/pkce.d.ts.map +1 -1
  33. package/dist/lib/pkce.js +8 -1
  34. package/dist/lib/pkce.js.map +1 -1
  35. package/dist/middleware/csrf.d.ts +2 -0
  36. package/dist/middleware/csrf.d.ts.map +1 -0
  37. package/dist/middleware/csrf.js +51 -0
  38. package/dist/middleware/csrf.js.map +1 -0
  39. package/dist/middleware/session.d.ts.map +1 -1
  40. package/dist/middleware/session.js +2 -0
  41. package/dist/middleware/session.js.map +1 -1
  42. package/dist/repositories/revoked-token.repository.d.ts +20 -0
  43. package/dist/repositories/revoked-token.repository.d.ts.map +1 -1
  44. package/dist/repositories/revoked-token.repository.js +44 -1
  45. package/dist/repositories/revoked-token.repository.js.map +1 -1
  46. package/dist/routes/api/auth/passkey/verify/post.d.ts.map +1 -1
  47. package/dist/routes/api/auth/passkey/verify/post.js +1 -1
  48. package/dist/routes/api/auth/passkey/verify/post.js.map +1 -1
  49. package/dist/routes/api/index.d.ts +38 -0
  50. package/dist/routes/api/index.d.ts.map +1 -1
  51. package/dist/routes/api/oauth/_provider/authorize/get.d.ts.map +1 -1
  52. package/dist/routes/api/oauth/_provider/authorize/get.js +13 -1
  53. package/dist/routes/api/oauth/_provider/authorize/get.js.map +1 -1
  54. package/dist/routes/api/oauth/_provider/callback/get.d.ts +19 -0
  55. package/dist/routes/api/oauth/_provider/callback/get.d.ts.map +1 -1
  56. package/dist/routes/api/oauth/_provider/callback/get.js +19 -10
  57. package/dist/routes/api/oauth/_provider/callback/get.js.map +1 -1
  58. package/dist/routes/api/oauth/_provider/callback/post.d.ts +19 -0
  59. package/dist/routes/api/oauth/_provider/callback/post.d.ts.map +1 -1
  60. package/dist/routes/api/oauth/_provider/callback/post.js +49 -11
  61. package/dist/routes/api/oauth/_provider/callback/post.js.map +1 -1
  62. package/dist/routes/api/oauth/index.d.ts +38 -0
  63. package/dist/routes/api/oauth/index.d.ts.map +1 -1
  64. package/dist/routes/index.d.ts +47 -2
  65. package/dist/routes/index.d.ts.map +1 -1
  66. package/dist/routes/oauth/.well-known/openid-configuration/get.d.ts +4 -0
  67. package/dist/routes/oauth/.well-known/openid-configuration/get.d.ts.map +1 -1
  68. package/dist/routes/oauth/.well-known/openid-configuration/get.js +25 -2
  69. package/dist/routes/oauth/.well-known/openid-configuration/get.js.map +1 -1
  70. package/dist/routes/oauth/authorize/get.d.ts +2 -0
  71. package/dist/routes/oauth/authorize/get.d.ts.map +1 -1
  72. package/dist/routes/oauth/authorize/get.js +4 -0
  73. package/dist/routes/oauth/authorize/get.js.map +1 -1
  74. package/dist/routes/oauth/client-auth.d.ts +10 -0
  75. package/dist/routes/oauth/client-auth.d.ts.map +1 -0
  76. package/dist/routes/oauth/client-auth.js +57 -0
  77. package/dist/routes/oauth/client-auth.js.map +1 -0
  78. package/dist/routes/oauth/index.d.ts +9 -2
  79. package/dist/routes/oauth/index.d.ts.map +1 -1
  80. package/dist/routes/oauth/introspect/post.d.ts +1 -0
  81. package/dist/routes/oauth/introspect/post.d.ts.map +1 -1
  82. package/dist/routes/oauth/introspect/post.js +36 -12
  83. package/dist/routes/oauth/introspect/post.js.map +1 -1
  84. package/dist/routes/oauth/revoke/post.d.ts.map +1 -1
  85. package/dist/routes/oauth/revoke/post.js +30 -12
  86. package/dist/routes/oauth/revoke/post.js.map +1 -1
  87. package/dist/routes/oauth/token/post.d.ts +2 -2
  88. package/dist/routes/oauth/token/post.d.ts.map +1 -1
  89. package/dist/routes/oauth/token/post.js +32 -9
  90. package/dist/routes/oauth/token/post.js.map +1 -1
  91. package/dist/routes/oauth/userinfo/get.d.ts.map +1 -1
  92. package/dist/routes/oauth/userinfo/get.js +3 -0
  93. package/dist/routes/oauth/userinfo/get.js.map +1 -1
  94. package/dist/schemas/error.d.ts +75 -0
  95. package/dist/schemas/error.d.ts.map +1 -1
  96. package/dist/schemas/error.js +3 -0
  97. package/dist/schemas/error.js.map +1 -1
  98. package/dist/schemas/field.d.ts +1 -6
  99. package/dist/schemas/field.d.ts.map +1 -1
  100. package/dist/schemas/field.js +6 -3
  101. package/dist/schemas/field.js.map +1 -1
  102. package/dist/schemas/oauth.d.ts +1 -1
  103. package/dist/schemas/oauth.js +1 -1
  104. package/dist/schemas/oauth.js.map +1 -1
  105. package/dist/schemas/response.d.ts +1 -1
  106. package/dist/services/container.d.ts +2 -0
  107. package/dist/services/container.d.ts.map +1 -1
  108. package/dist/services/jwt.service.d.ts +6 -0
  109. package/dist/services/jwt.service.d.ts.map +1 -1
  110. package/dist/services/jwt.service.js +60 -34
  111. package/dist/services/jwt.service.js.map +1 -1
  112. package/dist/services/oauth-authorize.service.d.ts +5 -0
  113. package/dist/services/oauth-authorize.service.d.ts.map +1 -1
  114. package/dist/services/oauth-authorize.service.js +67 -9
  115. package/dist/services/oauth-authorize.service.js.map +1 -1
  116. package/dist/services/oauth-client.service.d.ts +3 -0
  117. package/dist/services/oauth-client.service.d.ts.map +1 -1
  118. package/dist/services/oauth-client.service.js +31 -0
  119. package/dist/services/oauth-client.service.js.map +1 -1
  120. package/dist/services/oauth-connect.service.d.ts +6 -8
  121. package/dist/services/oauth-connect.service.d.ts.map +1 -1
  122. package/dist/services/oauth-connect.service.js +158 -20
  123. package/dist/services/oauth-connect.service.js.map +1 -1
  124. package/dist/services/oauth-token.service.d.ts +11 -3
  125. package/dist/services/oauth-token.service.d.ts.map +1 -1
  126. package/dist/services/oauth-token.service.js +153 -50
  127. package/dist/services/oauth-token.service.js.map +1 -1
  128. package/dist/services/passkey.service.d.ts +1 -1
  129. package/dist/services/passkey.service.d.ts.map +1 -1
  130. package/dist/services/passkey.service.js +11 -3
  131. package/dist/services/passkey.service.js.map +1 -1
  132. package/package.json +1 -1
  133. package/public/assets/{index-KMvNrUPy.js → index-DaJe6s9D.js} +26 -26
  134. package/public/assets/{index-KMvNrUPy.js.map → index-DaJe6s9D.js.map} +1 -1
  135. package/public/index.html +1 -1
  136. package/readme.md +74 -25
@@ -893,6 +893,25 @@ export declare function createApp(options: CreateAppOptions, runtimeOptions?: Cr
893
893
  output: undefined;
894
894
  outputFormat: "redirect";
895
895
  status: 302;
896
+ } | {
897
+ input: {
898
+ param: {
899
+ provider: string;
900
+ };
901
+ } & {
902
+ query: {
903
+ code?: string | string[];
904
+ state?: string | string[];
905
+ error?: string | string[];
906
+ error_description?: string | string[];
907
+ };
908
+ };
909
+ output: {
910
+ code: any;
911
+ message: any;
912
+ };
913
+ outputFormat: "json";
914
+ status: any;
896
915
  };
897
916
  };
898
917
  }, "/"> | import("hono/types").MergeSchemaPath<{
@@ -913,6 +932,25 @@ export declare function createApp(options: CreateAppOptions, runtimeOptions?: Cr
913
932
  output: undefined;
914
933
  outputFormat: "redirect";
915
934
  status: 302;
935
+ } | {
936
+ input: {
937
+ param: {
938
+ provider: string;
939
+ };
940
+ } & {
941
+ form: {
942
+ code?: import("hono/types").ParsedFormValue | import("hono/types").ParsedFormValue[];
943
+ state?: import("hono/types").ParsedFormValue | import("hono/types").ParsedFormValue[];
944
+ error?: import("hono/types").ParsedFormValue | import("hono/types").ParsedFormValue[];
945
+ error_description?: import("hono/types").ParsedFormValue | import("hono/types").ParsedFormValue[];
946
+ };
947
+ };
948
+ output: {
949
+ code: any;
950
+ message: any;
951
+ };
952
+ outputFormat: "json";
953
+ status: any;
916
954
  };
917
955
  };
918
956
  }, "/"> | import("hono/types").MergeSchemaPath<{
@@ -945,6 +983,7 @@ export declare function createApp(options: CreateAppOptions, runtimeOptions?: Cr
945
983
  nonce?: string | string[];
946
984
  prompt?: string | string[];
947
985
  max_age?: string | string[];
986
+ reauthenticated?: string | string[];
948
987
  display?: string | string[];
949
988
  };
950
989
  };
@@ -964,6 +1003,7 @@ export declare function createApp(options: CreateAppOptions, runtimeOptions?: Cr
964
1003
  nonce?: string | string[];
965
1004
  prompt?: string | string[];
966
1005
  max_age?: string | string[];
1006
+ reauthenticated?: string | string[];
967
1007
  display?: string | string[];
968
1008
  };
969
1009
  };
@@ -981,9 +1021,9 @@ export declare function createApp(options: CreateAppOptions, runtimeOptions?: Cr
981
1021
  input: {
982
1022
  form: {
983
1023
  grant_type: import("hono/types").ParsedFormValue | import("hono/types").ParsedFormValue[];
984
- client_id: import("hono/types").ParsedFormValue | import("hono/types").ParsedFormValue[];
985
1024
  code?: import("hono/types").ParsedFormValue | import("hono/types").ParsedFormValue[];
986
1025
  redirect_uri?: import("hono/types").ParsedFormValue | import("hono/types").ParsedFormValue[];
1026
+ client_id?: import("hono/types").ParsedFormValue | import("hono/types").ParsedFormValue[];
987
1027
  client_secret?: import("hono/types").ParsedFormValue | import("hono/types").ParsedFormValue[];
988
1028
  code_verifier?: import("hono/types").ParsedFormValue | import("hono/types").ParsedFormValue[];
989
1029
  refresh_token?: import("hono/types").ParsedFormValue | import("hono/types").ParsedFormValue[];
@@ -993,7 +1033,7 @@ export declare function createApp(options: CreateAppOptions, runtimeOptions?: Cr
993
1033
  access_token: string;
994
1034
  token_type: "Bearer";
995
1035
  expires_in: number;
996
- refresh_token: string;
1036
+ refresh_token?: string | undefined | undefined;
997
1037
  id_token?: string | undefined | undefined;
998
1038
  scope: string;
999
1039
  };
@@ -1021,6 +1061,7 @@ export declare function createApp(options: CreateAppOptions, runtimeOptions?: Cr
1021
1061
  iat?: number | undefined | undefined;
1022
1062
  sub?: string | undefined | undefined;
1023
1063
  iss?: string | undefined | undefined;
1064
+ aud?: string | undefined | undefined;
1024
1065
  };
1025
1066
  outputFormat: "json";
1026
1067
  status: 200;
@@ -1093,6 +1134,7 @@ export declare function createApp(options: CreateAppOptions, runtimeOptions?: Cr
1093
1134
  token_endpoint: string;
1094
1135
  jwks_uri: string;
1095
1136
  response_types_supported: string[];
1137
+ response_modes_supported: string[];
1096
1138
  subject_types_supported: string[];
1097
1139
  id_token_signing_alg_values_supported: string[];
1098
1140
  userinfo_endpoint: string;
@@ -1104,6 +1146,9 @@ export declare function createApp(options: CreateAppOptions, runtimeOptions?: Cr
1104
1146
  introspection_endpoint: string;
1105
1147
  revocation_endpoint: string;
1106
1148
  ui_locales_supported: ("en" | "ko" | "ja")[];
1149
+ request_parameter_supported: boolean;
1150
+ request_uri_parameter_supported: boolean;
1151
+ claims_parameter_supported: boolean;
1107
1152
  };
1108
1153
  outputFormat: "json";
1109
1154
  status: 200;
@@ -1270,6 +1315,8 @@ export declare function createApp(options: CreateAppOptions, runtimeOptions?: Cr
1270
1315
  picture?: string | undefined;
1271
1316
  };
1272
1317
  icon_url?: string | undefined;
1318
+ jwks_url?: string | undefined;
1319
+ issuer?: string | undefined;
1273
1320
  email_url?: string | undefined;
1274
1321
  response_mode?: string | undefined;
1275
1322
  }[];
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/entrypoints/app.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,0BAA0B,EAEhC,MAAM,wBAAwB,CAAC;AAUhC,OAAO,EACL,KAAK,yBAAyB,EAE/B,MAAM,0BAA0B,CAAC;AAElC;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,0BAA0B,CAAC;AAC1D,MAAM,MAAM,uBAAuB,GAAG,yBAAyB,CAAC;AAEhE,wBAAsB,SAAS,CAC7B,OAAO,EAAE,gBAAgB,EACzB,cAAc,GAAE,uBAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwE7C;AAED,MAAM,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/entrypoints/app.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,0BAA0B,EAEhC,MAAM,wBAAwB,CAAC;AAWhC,OAAO,EACL,KAAK,yBAAyB,EAE/B,MAAM,0BAA0B,CAAC;AAElC;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,0BAA0B,CAAC;AAC1D,MAAM,MAAM,uBAAuB,GAAG,yBAAyB,CAAC;AAEhE,wBAAsB,SAAS,CAC7B,OAAO,EAAE,gBAAgB,EACzB,cAAc,GAAE,uBAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgF7C;AAED,MAAM,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC"}
@@ -4,6 +4,7 @@ import { generateSpecs } from 'hono-openapi';
4
4
  import { TinyAuthRuntimeConfigSchema, } from "../lib/config/index.js";
5
5
  import { createLogger } from "../lib/logger.js";
6
6
  import { createOpenApiDocumentation } from "../lib/openapi.js";
7
+ import { csrfProtection } from "../middleware/csrf.js";
7
8
  import { loggerMiddleware } from "../middleware/logger.js";
8
9
  import { mikroOrmMiddleware } from "../middleware/mikro-orm.js";
9
10
  import { servicesMiddleware } from "../middleware/services.js";
@@ -26,6 +27,9 @@ export async function createApp(options, runtimeOptions = {}) {
26
27
  const app = new Hono()
27
28
  .onError((err, c) => {
28
29
  if (err instanceof TinyAuthError) {
30
+ if (err.code === 'insufficient_scope') {
31
+ c.header('WWW-Authenticate', 'Bearer error="insufficient_scope", scope="openid"');
32
+ }
29
33
  return c.json(err.toJson(), err.status);
30
34
  }
31
35
  logger.error({ err }, 'Unhandled error');
@@ -39,6 +43,7 @@ export async function createApp(options, runtimeOptions = {}) {
39
43
  }))
40
44
  .use('*', sessionMiddleware(config.security.session_secret, config.server.public_origin.startsWith('https')))
41
45
  .use('*', trustedProxyGuard(config.server.trust_proxy))
46
+ .use('/api/*', csrfProtection(config.server.public_origin))
42
47
  .use('*', servicesMiddleware(services))
43
48
  .use('*', mikroOrmMiddleware)
44
49
  .route('/', routes)
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/entrypoints/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAEL,2BAA2B,GAC5B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,CAAC,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAEL,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAQlC,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,OAAyB,EACzB,iBAA0C,EAAE;IAE5C,MAAM,MAAM,GAAG,2BAA2B,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC1D,MAAM,oBAAoB,GAAG,0BAA0B,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAExE,sEAAsE;IACtE,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAEzD,sDAAsD;IACtD,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,kBAAkB,CACpD,MAAM,EACN,MAAM,EACN,cAAc,CACf,CAAC;IAEF,MAAM,eAAe,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxC,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE;SACnB,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QAClB,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;YACjC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1C,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,iBAAiB,CAAC,CAAC;QACzC,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;QACtD,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1D,CAAC,CAAC;SACD,GAAG,CAAC,GAAG,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;SAClC,GAAG,CACF,GAAG,EACH,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa;QACnC,WAAW,EAAE,IAAI;KAClB,CAAC,CACH;SACA,GAAG,CACF,GAAG,EACH,iBAAiB,CACf,MAAM,CAAC,QAAQ,CAAC,cAAc,EAC9B,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAChD,CACF;SACA,GAAG,CAAC,GAAG,EAAE,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;SACtD,GAAG,CAAC,GAAG,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC;SACtC,GAAG,CAAC,GAAG,EAAE,kBAAkB,CAAC;SAC5B,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC;SAClB,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QACpB,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,GAAG,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEL,GAAG,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACpC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC5B,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,GAAG,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE;YACpC,aAAa,EAAE,oBAAoB;SACpC,CAAC,CAAC;QAEH,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,kBAAkB;IAClB,MAAM,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IAEjC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC5C,CAAC"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/entrypoints/app.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../../../src/entrypoints/database/postgres/postgres.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAI5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAKnE,KAAK,sBAAsB,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IACzC,KAAK,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1B,CAAC;AAEF,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,GAAG,cAAc,CA0BzE"}
1
+ {"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../../../src/entrypoints/database/postgres/postgres.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAI5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAKnE,KAAK,sBAAsB,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IACzC,KAAK,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1B,CAAC;AAEF,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,GAAG,cAAc,CA2BzE"}
@@ -20,6 +20,7 @@ export function postgres(database) {
20
20
  extensions: [SeedManager, Migrator],
21
21
  migrations: {
22
22
  migrationsList: POSTGRES_MIGRATIONS,
23
+ snapshot: false,
23
24
  },
24
25
  driverOptions: database.driverOptions ?? {
25
26
  ssl: true,
@@ -1 +1 @@
1
- {"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../../../src/entrypoints/database/postgres/postgres.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA+B,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,iBAAiB,MAAM,yBAAyB,CAAC;AAYxD,MAAM,UAAU,QAAQ,CAAC,QAAgC;IACvD,OAAO;QACL,kBAAkB,EAAE,KAAK,IAAI,EAAE;YAC7B,OAAO,YAAY,CAAC;gBAClB,MAAM,EAAE,gBAAgB;gBACxB,iBAAiB,EAAE,iBAAiB;gBACpC,QAAQ,EAAE,CAAC,GAAG,mBAAmB,EAAE,CAAC;gBACpC,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,MAAM,EAAE,QAAQ,CAAC,IAAI;gBACrB,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,UAAU,EAAE,CAAC,WAAW,EAAE,QAAQ,CAAC;gBACnC,UAAU,EAAE;oBACV,cAAc,EAAE,mBAAmB;iBACpC;gBACD,aAAa,EAAE,QAAQ,CAAC,aAAa,IAAI;oBACvC,GAAG,EAAE,IAAI;iBACV;gBACD,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,KAAK;aAC/B,CAAC,CAAC;QACL,CAAC;QACD,UAAU,EAAE,KAAK,EAAE,GAAa,EAAE,EAAE;YAClC,MAAM,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QAC1B,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../../../src/entrypoints/database/postgres/postgres.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA+B,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,iBAAiB,MAAM,yBAAyB,CAAC;AAYxD,MAAM,UAAU,QAAQ,CAAC,QAAgC;IACvD,OAAO;QACL,kBAAkB,EAAE,KAAK,IAAI,EAAE;YAC7B,OAAO,YAAY,CAAC;gBAClB,MAAM,EAAE,gBAAgB;gBACxB,iBAAiB,EAAE,iBAAiB;gBACpC,QAAQ,EAAE,CAAC,GAAG,mBAAmB,EAAE,CAAC;gBACpC,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,MAAM,EAAE,QAAQ,CAAC,IAAI;gBACrB,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,UAAU,EAAE,CAAC,WAAW,EAAE,QAAQ,CAAC;gBACnC,UAAU,EAAE;oBACV,cAAc,EAAE,mBAAmB;oBACnC,QAAQ,EAAE,KAAK;iBAChB;gBACD,aAAa,EAAE,QAAQ,CAAC,aAAa,IAAI;oBACvC,GAAG,EAAE,IAAI;iBACV;gBACD,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,KAAK;aAC/B,CAAC,CAAC;QACL,CAAC;QACD,UAAU,EAAE,KAAK,EAAE,GAAa,EAAE,EAAE;YAClC,MAAM,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QAC1B,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../../../src/entrypoints/database/sqlite/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAI5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAKnE,KAAK,oBAAoB,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1B,CAAC;AAEF,wBAAgB,MAAM,CAAC,QAAQ,EAAE,oBAAoB,GAAG,cAAc,CA0BrE"}
1
+ {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../../../src/entrypoints/database/sqlite/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAI5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAKnE,KAAK,oBAAoB,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1B,CAAC;AAEF,wBAAgB,MAAM,CAAC,QAAQ,EAAE,oBAAoB,GAAG,cAAc,CA2BrE"}
@@ -18,6 +18,7 @@ export function sqlite(database) {
18
18
  extensions: [SeedManager, Migrator],
19
19
  migrations: {
20
20
  migrationsList: SQLITE_MIGRATIONS,
21
+ snapshot: false,
21
22
  },
22
23
  debug: database.debug ?? false,
23
24
  });
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../../../src/entrypoints/database/sqlite/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA+B,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,iBAAiB,MAAM,yBAAyB,CAAC;AAQxD,MAAM,UAAU,MAAM,CAAC,QAA8B;IACnD,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;IAE1D,OAAO;QACL,kBAAkB,EAAE,KAAK,IAAI,EAAE;YAC7B,OAAO,YAAY,CAAC;gBAClB,MAAM,EAAE,YAAY;gBACpB,MAAM,EAAE,MAAM;gBACd,aAAa,EAAE,IAAI,iBAAiB,CAAC,MAAM,CAAC;gBAC5C,iBAAiB,EAAE,iBAAiB;gBACpC,QAAQ,EAAE,CAAC,GAAG,mBAAmB,EAAE,CAAC;gBACpC,UAAU,EAAE,CAAC,WAAW,EAAE,QAAQ,CAAC;gBACnC,UAAU,EAAE;oBACV,cAAc,EAAE,iBAAiB;iBAClC;gBACD,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,KAAK;aAC/B,CAAC,CAAC;QACL,CAAC;QACD,UAAU,EAAE,KAAK,EAAE,GAAa,EAAE,EAAE;YAClC,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAClB,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAC1B,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../../../src/entrypoints/database/sqlite/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA+B,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,iBAAiB,MAAM,yBAAyB,CAAC;AAQxD,MAAM,UAAU,MAAM,CAAC,QAA8B;IACnD,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;IAE1D,OAAO;QACL,kBAAkB,EAAE,KAAK,IAAI,EAAE;YAC7B,OAAO,YAAY,CAAC;gBAClB,MAAM,EAAE,YAAY;gBACpB,MAAM,EAAE,MAAM;gBACd,aAAa,EAAE,IAAI,iBAAiB,CAAC,MAAM,CAAC;gBAC5C,iBAAiB,EAAE,iBAAiB;gBACpC,QAAQ,EAAE,CAAC,GAAG,mBAAmB,EAAE,CAAC;gBACpC,UAAU,EAAE,CAAC,WAAW,EAAE,QAAQ,CAAC;gBACnC,UAAU,EAAE;oBACV,cAAc,EAAE,iBAAiB;oBACjC,QAAQ,EAAE,KAAK;iBAChB;gBACD,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,KAAK;aAC/B,CAAC,CAAC;QACL,CAAC;QACD,UAAU,EAAE,KAAK,EAAE,GAAa,EAAE,EAAE;YAClC,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAClB,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAC1B,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -6,6 +6,7 @@ export interface AppleOAuthConfig {
6
6
  icon_url?: string | undefined;
7
7
  client_id: string;
8
8
  client_secret: string;
9
+ unsafe_jwks_url_for_tests?: string | undefined;
9
10
  scopes?: string[] | undefined;
10
11
  response_mode?: 'query' | 'fragment' | 'form_post' | undefined;
11
12
  email_conflict_strategy: 'auto_link' | 'require_link';
@@ -1 +1 @@
1
- {"version":3,"file":"apple.d.ts","sourceRoot":"","sources":["../../../src/entrypoints/identity-providers/apple.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAExE,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC9B,aAAa,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;IAC/D,uBAAuB,EAAE,WAAW,GAAG,cAAc,CAAC;CACvD;AAED,wBAAgB,KAAK,CAAC,MAAM,EAAE,gBAAgB,GAAG,sBAAsB,CAqBtE"}
1
+ {"version":3,"file":"apple.d.ts","sourceRoot":"","sources":["../../../src/entrypoints/identity-providers/apple.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAExE,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,yBAAyB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/C,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC9B,aAAa,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;IAC/D,uBAAuB,EAAE,WAAW,GAAG,cAAc,CAAC;CACvD;AAED,wBAAgB,KAAK,CAAC,MAAM,EAAE,gBAAgB,GAAG,sBAAsB,CAsBtE"}
@@ -10,6 +10,7 @@ export function apple(config) {
10
10
  authorization_url: 'https://appleid.apple.com/auth/authorize',
11
11
  token_url: 'https://appleid.apple.com/auth/token',
12
12
  userinfo_url: null,
13
+ jwks_url: config.unsafe_jwks_url_for_tests,
13
14
  scopes: config.scopes || ['openid', 'email', 'name'],
14
15
  response_mode: config.response_mode || 'form_post',
15
16
  email_conflict_strategy: config.email_conflict_strategy,
@@ -1 +1 @@
1
- {"version":3,"file":"apple.js","sourceRoot":"","sources":["../../../src/entrypoints/identity-providers/apple.ts"],"names":[],"mappings":"AAcA,MAAM,UAAU,KAAK,CAAC,MAAwB;IAC5C,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,EAAE;QAC9C,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,iBAAiB,EAAE,0CAA0C;QAC7D,SAAS,EAAE,sCAAsC;QACjD,YAAY,EAAE,IAAI;QAClB,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC;QACpD,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,WAAW;QAClD,uBAAuB,EAAE,MAAM,CAAC,uBAAuB;QACvD,gBAAgB,EAAE;YAChB,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,OAAO;YACd,cAAc,EAAE,gBAAgB;SACjC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"apple.js","sourceRoot":"","sources":["../../../src/entrypoints/identity-providers/apple.ts"],"names":[],"mappings":"AAeA,MAAM,UAAU,KAAK,CAAC,MAAwB;IAC5C,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,EAAE;QAC9C,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,iBAAiB,EAAE,0CAA0C;QAC7D,SAAS,EAAE,sCAAsC;QACjD,YAAY,EAAE,IAAI;QAClB,QAAQ,EAAE,MAAM,CAAC,yBAAyB;QAC1C,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC;QACpD,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,WAAW;QAClD,uBAAuB,EAAE,MAAM,CAAC,uBAAuB;QACvD,gBAAgB,EAAE;YAChB,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,OAAO;YACd,cAAc,EAAE,gBAAgB;SACjC;KACF,CAAC;AACJ,CAAC"}
@@ -9,6 +9,8 @@ export interface GenericOAuthConfig {
9
9
  authorization_url: string;
10
10
  token_url: string;
11
11
  userinfo_url?: string | null | undefined;
12
+ jwks_url?: string | undefined;
13
+ issuer?: string | undefined;
12
14
  email_url?: string | undefined;
13
15
  scopes: string[];
14
16
  response_mode?: 'query' | 'fragment' | 'form_post' | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"generic-oauth.d.ts","sourceRoot":"","sources":["../../../src/entrypoints/identity-providers/generic-oauth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAExE,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;IAC/D,uBAAuB,EAAE,WAAW,GAAG,cAAc,CAAC;IACtD,gBAAgB,EAAE;QAChB,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QACpC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC1B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;KAC9B,CAAC;CACH;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,kBAAkB,GACzB,sBAAsB,CAkBxB"}
1
+ {"version":3,"file":"generic-oauth.d.ts","sourceRoot":"","sources":["../../../src/entrypoints/identity-providers/generic-oauth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAExE,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;IAC/D,uBAAuB,EAAE,WAAW,GAAG,cAAc,CAAC;IACtD,gBAAgB,EAAE;QAChB,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QACpC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC1B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;KAC9B,CAAC;CACH;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,kBAAkB,GACzB,sBAAsB,CAoBxB"}
@@ -10,6 +10,8 @@ export function genericOAuth(config) {
10
10
  authorization_url: config.authorization_url,
11
11
  token_url: config.token_url,
12
12
  userinfo_url: config.userinfo_url ?? null,
13
+ jwks_url: config.jwks_url,
14
+ issuer: config.issuer,
13
15
  email_url: config.email_url,
14
16
  scopes: config.scopes,
15
17
  response_mode: config.response_mode,
@@ -1 +1 @@
1
- {"version":3,"file":"generic-oauth.js","sourceRoot":"","sources":["../../../src/entrypoints/identity-providers/generic-oauth.ts"],"names":[],"mappings":"AAyBA,MAAM,UAAU,YAAY,CAC1B,MAA0B;IAE1B,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;QAC3C,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,IAAI;QACzC,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,uBAAuB,EAAE,MAAM,CAAC,uBAAuB;QACvD,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;KAC1C,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"generic-oauth.js","sourceRoot":"","sources":["../../../src/entrypoints/identity-providers/generic-oauth.ts"],"names":[],"mappings":"AA2BA,MAAM,UAAU,YAAY,CAC1B,MAA0B;IAE1B,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;QAC3C,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,IAAI;QACzC,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,uBAAuB,EAAE,MAAM,CAAC,uBAAuB;QACvD,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;KAC1C,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/lib/config/client.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;oBAuC4B,CAAC;AAE5D,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,sBAAsB,EAAE,YAAY,EAAO,CAAC;AAEzD,eAAO,MAAM,mBAAmB;;;;;;;;;;sBAGiC,CAAC"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/lib/config/client.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAQpB;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;oBAuC4B,CAAC;AAE5D,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,sBAAsB,EAAE,YAAY,EAAO,CAAC;AAEzD,eAAO,MAAM,mBAAmB;;;;;;;;;;sBAGiC,CAAC"}
@@ -1,4 +1,8 @@
1
1
  import z from 'zod';
2
+ import { isSecureRedirectUri } from './url-policy.js';
3
+ const RedirectUriSchema = z.string().refine(isSecureRedirectUri, {
4
+ message: 'Redirect URI must use HTTPS or local HTTP and must not contain fragments or wildcards.',
5
+ });
2
6
  /**
3
7
  * OAuth/OIDC client configuration.
4
8
  * Defines applications that can authenticate through TinyAuth.
@@ -25,7 +29,7 @@ export const ClientConfigSchema = z
25
29
  .optional()
26
30
  .describe('OAuth client_secret for confidential clients. Omit for public clients.'),
27
31
  redirect_uris: z
28
- .array(z.string())
32
+ .array(RedirectUriSchema)
29
33
  .describe('Allowed redirect URIs after authorization.'),
30
34
  response_types: z
31
35
  .array(z.string())
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/lib/config/client.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC;KAChC,MAAM,CAAC;IACN,EAAE,EAAE,CAAC;SACF,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,CAAC,qCAAqC,CAAC;IAClD,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,CAAC,iDAAiD,CAAC;IAC9D,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,qCAAqC,CAAC;IAClD,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,QAAQ,CAAC,iDAAiD,CAAC;IAC9D,aAAa,EAAE,CAAC;SACb,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,wEAAwE,CACzE;IACH,aAAa,EAAE,CAAC;SACb,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,CAAC,4CAA4C,CAAC;IACzD,cAAc,EAAE,CAAC;SACd,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,CAAC,8CAA8C,CAAC;IAC3D,WAAW,EAAE,CAAC;SACX,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,CACP,0EAA0E,CAC3E;IACH,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,QAAQ,CAAC,yDAAyD,CAAC;CACvE,CAAC;KACD,MAAM,EAAE;KACR,QAAQ,CAAC,8CAA8C,CAAC,CAAC;AAI5D,MAAM,CAAC,MAAM,sBAAsB,GAAmB,EAAE,CAAC;AAEzD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC;KACjC,KAAK,CAAC,kBAAkB,CAAC;KACzB,OAAO,CAAC,sBAAsB,CAAC;KAC/B,QAAQ,CAAC,oDAAoD,CAAC,CAAC"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/lib/config/client.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,mBAAmB,EAAE;IAC/D,OAAO,EACL,wFAAwF;CAC3F,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC;KAChC,MAAM,CAAC;IACN,EAAE,EAAE,CAAC;SACF,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,CAAC,qCAAqC,CAAC;IAClD,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,CAAC,iDAAiD,CAAC;IAC9D,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,qCAAqC,CAAC;IAClD,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,QAAQ,CAAC,iDAAiD,CAAC;IAC9D,aAAa,EAAE,CAAC;SACb,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,wEAAwE,CACzE;IACH,aAAa,EAAE,CAAC;SACb,KAAK,CAAC,iBAAiB,CAAC;SACxB,QAAQ,CAAC,4CAA4C,CAAC;IACzD,cAAc,EAAE,CAAC;SACd,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,CAAC,8CAA8C,CAAC;IAC3D,WAAW,EAAE,CAAC;SACX,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,CACP,0EAA0E,CAC3E;IACH,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,QAAQ,CAAC,yDAAyD,CAAC;CACvE,CAAC;KACD,MAAM,EAAE;KACR,QAAQ,CAAC,8CAA8C,CAAC,CAAC;AAI5D,MAAM,CAAC,MAAM,sBAAsB,GAAmB,EAAE,CAAC;AAEzD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC;KACjC,KAAK,CAAC,kBAAkB,CAAC;KACzB,OAAO,CAAC,sBAAsB,CAAC;KAC/B,QAAQ,CAAC,oDAAoD,CAAC,CAAC"}
@@ -15,6 +15,8 @@ export declare const IdentityProviderConfigSchema: z.ZodObject<{
15
15
  authorization_url: z.ZodString;
16
16
  token_url: z.ZodString;
17
17
  userinfo_url: z.ZodNullable<z.ZodString>;
18
+ jwks_url: z.ZodOptional<z.ZodString>;
19
+ issuer: z.ZodOptional<z.ZodString>;
18
20
  email_url: z.ZodOptional<z.ZodString>;
19
21
  scopes: z.ZodArray<z.ZodString>;
20
22
  response_mode: z.ZodOptional<z.ZodString>;
@@ -48,6 +50,8 @@ export declare const IdentityProviderConfigsSchema: z.ZodDefault<z.ZodArray<z.Zo
48
50
  authorization_url: z.ZodString;
49
51
  token_url: z.ZodString;
50
52
  userinfo_url: z.ZodNullable<z.ZodString>;
53
+ jwks_url: z.ZodOptional<z.ZodString>;
54
+ issuer: z.ZodOptional<z.ZodString>;
51
55
  email_url: z.ZodOptional<z.ZodString>;
52
56
  scopes: z.ZodArray<z.ZodString>;
53
57
  response_mode: z.ZodOptional<z.ZodString>;
@@ -1 +1 @@
1
- {"version":3,"file":"identity-providers.d.ts","sourceRoot":"","sources":["../../../src/lib/config/identity-providers.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AA8BpB,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBA0Ce,CAAC;AAEzD,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAC1C,OAAO,4BAA4B,CACpC,CAAC;AAEF,eAAO,MAAM,iCAAiC,EAAE,sBAAsB,EAAO,CAAC;AAE9E,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAGuB,CAAC"}
1
+ {"version":3,"file":"identity-providers.d.ts","sourceRoot":"","sources":["../../../src/lib/config/identity-providers.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAuCpB,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBA+De,CAAC;AAEzD,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAC1C,OAAO,4BAA4B,CACpC,CAAC;AAEF,eAAO,MAAM,iCAAiC,EAAE,sBAAsB,EAAO,CAAC;AAE9E,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAGuB,CAAC"}
@@ -1,4 +1,9 @@
1
1
  import z from 'zod';
2
+ import { isHttpsOrLocalHttpUrl } from './url-policy.js';
3
+ const SecureEndpointUrlSchema = z.string().refine(isHttpsOrLocalHttpUrl, {
4
+ message: 'URL must use HTTPS or local HTTP.',
5
+ });
6
+ const JwksUrlSchema = SecureEndpointUrlSchema.describe('JWKS endpoint URL for providers that verify ID tokens.');
2
7
  const UserinfoMappingConfigSchema = z
3
8
  .object({
4
9
  id: z
@@ -38,16 +43,16 @@ export const IdentityProviderConfigSchema = z
38
43
  client_secret: z
39
44
  .string()
40
45
  .describe('OAuth client secret from the provider.'),
41
- authorization_url: z.string().describe('OAuth authorization endpoint URL.'),
42
- token_url: z.string().describe('OAuth token endpoint URL.'),
43
- userinfo_url: z
44
- .string()
45
- .nullable()
46
- .describe('OAuth userinfo endpoint URL.'),
47
- email_url: z
46
+ authorization_url: SecureEndpointUrlSchema.describe('OAuth authorization endpoint URL.'),
47
+ token_url: SecureEndpointUrlSchema.describe('OAuth token endpoint URL.'),
48
+ userinfo_url: SecureEndpointUrlSchema.nullable().describe('OAuth userinfo endpoint URL.'),
49
+ jwks_url: JwksUrlSchema.optional(),
50
+ issuer: z
48
51
  .string()
52
+ .url()
49
53
  .optional()
50
- .describe('Separate endpoint URL for fetching user email.'),
54
+ .describe('Expected issuer for ID tokens verified with JWKS.'),
55
+ email_url: SecureEndpointUrlSchema.optional().describe('Separate endpoint URL for fetching user email.'),
51
56
  scopes: z
52
57
  .array(z.string())
53
58
  .describe('OAuth scopes to request from the provider.'),
@@ -60,6 +65,18 @@ export const IdentityProviderConfigSchema = z
60
65
  .describe('Strategy when a matching email already exists. ' +
61
66
  '"auto_link" links automatically, "require_link" requires user confirmation.'),
62
67
  userinfo_mapping: UserinfoMappingConfigSchema,
68
+ })
69
+ .superRefine((provider, ctx) => {
70
+ if (provider.type === 'generic_oauth' &&
71
+ provider.userinfo_url === null &&
72
+ provider.jwks_url &&
73
+ !provider.issuer) {
74
+ ctx.addIssue({
75
+ code: 'custom',
76
+ path: ['issuer'],
77
+ message: 'Issuer is required for generic ID-token-only providers with JWKS.',
78
+ });
79
+ }
63
80
  })
64
81
  .strict()
65
82
  .describe('Resolved identity provider configuration.');
@@ -1 +1 @@
1
- {"version":3,"file":"identity-providers.js","sourceRoot":"","sources":["../../../src/lib/config/identity-providers.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,MAAM,2BAA2B,GAAG,CAAC;KAClC,MAAM,CAAC;IACN,EAAE,EAAE,CAAC;SACF,MAAM,EAAE;SACR,QAAQ,CAAC,sDAAsD,CAAC;IACnE,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,QAAQ,CAAC,oDAAoD,CAAC;IACjE,cAAc,EAAE,CAAC;SACd,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,kEAAkE,CACnE;IACH,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,2DAA2D,CAAC;IACxE,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,kEAAkE,CACnE;CACJ,CAAC;KACD,MAAM,EAAE;KACR,QAAQ,CAAC,yDAAyD,CAAC,CAAC;AAEvE,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC;KAC1C,MAAM,CAAC;IACN,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IAC/D,IAAI,EAAE,CAAC;SACJ,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;SACpD,QAAQ,CAAC,yBAAyB,CAAC;IACtC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;IAC3E,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAC1E,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,mDAAmD,CAAC;IAChE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IACpE,aAAa,EAAE,CAAC;SACb,MAAM,EAAE;SACR,QAAQ,CAAC,wCAAwC,CAAC;IACrD,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IAC3E,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IAC3D,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,8BAA8B,CAAC;IAC3C,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,gDAAgD,CAAC;IAC7D,MAAM,EAAE,CAAC;SACN,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,CAAC,4CAA4C,CAAC;IACzD,aAAa,EAAE,CAAC;SACb,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,qDAAqD,CAAC;IAClE,uBAAuB,EAAE,CAAC;SACvB,IAAI,CAAC,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;SACnC,QAAQ,CACP,iDAAiD;QAC/C,6EAA6E,CAChF;IACH,gBAAgB,EAAE,2BAA2B;CAC9C,CAAC;KACD,MAAM,EAAE;KACR,QAAQ,CAAC,2CAA2C,CAAC,CAAC;AAMzD,MAAM,CAAC,MAAM,iCAAiC,GAA6B,EAAE,CAAC;AAE9E,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC;KAC3C,KAAK,CAAC,4BAA4B,CAAC;KACnC,OAAO,CAAC,iCAAiC,CAAC;KAC1C,QAAQ,CAAC,oDAAoD,CAAC,CAAC"}
1
+ {"version":3,"file":"identity-providers.js","sourceRoot":"","sources":["../../../src/lib/config/identity-providers.ts"],"names":[],"mappings":"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"}
@@ -253,6 +253,8 @@ export declare const TinyAuthRuntimeConfigSchema: z.ZodObject<{
253
253
  authorization_url: z.ZodString;
254
254
  token_url: z.ZodString;
255
255
  userinfo_url: z.ZodNullable<z.ZodString>;
256
+ jwks_url: z.ZodOptional<z.ZodString>;
257
+ issuer: z.ZodOptional<z.ZodString>;
256
258
  email_url: z.ZodOptional<z.ZodString>;
257
259
  scopes: z.ZodArray<z.ZodString>;
258
260
  response_mode: z.ZodOptional<z.ZodString>;
@@ -1 +1 @@
1
- {"version":3,"file":"resolved.d.ts","sourceRoot":"","sources":["../../../src/lib/config/resolved.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAqBpB,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAyCM,CAAC;AAE/C,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAC9C,OAAO,2BAA2B,CACnC,CAAC;AACF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAC1C,OAAO,2BAA2B,CACnC,CAAC"}
1
+ {"version":3,"file":"resolved.d.ts","sourceRoot":"","sources":["../../../src/lib/config/resolved.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAqBpB,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAyCM,CAAC;AAE/C,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAC9C,OAAO,2BAA2B,CACnC,CAAC;AACF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAC1C,OAAO,2BAA2B,CACnC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function isLocalHttpHostname(hostname: string): boolean;
2
+ export declare function isHttpsOrLocalHttpUrl(value: string): boolean;
3
+ export declare function isSecureRedirectUri(value: string): boolean;
4
+ //# sourceMappingURL=url-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url-policy.d.ts","sourceRoot":"","sources":["../../../src/lib/config/url-policy.ts"],"names":[],"mappings":"AAeA,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAQ7D;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAY5D;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAU1D"}
@@ -0,0 +1,38 @@
1
+ import { parseIPv4 } from '../ip-utils.js';
2
+ function parseUrl(value) {
3
+ try {
4
+ return new URL(value);
5
+ }
6
+ catch {
7
+ return null;
8
+ }
9
+ }
10
+ function isIPv4Loopback(hostname) {
11
+ const ipv4 = parseIPv4(hostname);
12
+ return ipv4 !== null && (ipv4 & 0xff000000) === 0x7f000000;
13
+ }
14
+ export function isLocalHttpHostname(hostname) {
15
+ return (hostname === 'localhost' ||
16
+ hostname.endsWith('.localhost') ||
17
+ isIPv4Loopback(hostname) ||
18
+ hostname === '[::1]' ||
19
+ hostname === '::1');
20
+ }
21
+ export function isHttpsOrLocalHttpUrl(value) {
22
+ const url = parseUrl(value);
23
+ if (!url) {
24
+ return false;
25
+ }
26
+ if (url.protocol === 'https:') {
27
+ return true;
28
+ }
29
+ return url.protocol === 'http:' && isLocalHttpHostname(url.hostname);
30
+ }
31
+ export function isSecureRedirectUri(value) {
32
+ const url = parseUrl(value);
33
+ if (!url) {
34
+ return false;
35
+ }
36
+ return (!value.includes('*') && url.hash === '' && isHttpsOrLocalHttpUrl(value));
37
+ }
38
+ //# sourceMappingURL=url-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url-policy.js","sourceRoot":"","sources":["../../../src/lib/config/url-policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,SAAS,QAAQ,CAAC,KAAa;IAC7B,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,QAAgB;IACtC,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IACjC,OAAO,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,KAAK,UAAU,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,OAAO,CACL,QAAQ,KAAK,WAAW;QACxB,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC/B,cAAc,CAAC,QAAQ,CAAC;QACxB,QAAQ,KAAK,OAAO;QACpB,QAAQ,KAAK,KAAK,CACnB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAa;IACjD,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE5B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE5B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,CACL,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,EAAE,IAAI,qBAAqB,CAAC,KAAK,CAAC,CACxE,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"pkce.d.ts","sourceRoot":"","sources":["../../src/lib/pkce.ts"],"names":[],"mappings":"AAiBA;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAAC,MAAM,GAAE,MAAW;;;;GAWrD;AAED;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,MAAM,GAAG,OAAgB,oBAKlC"}
1
+ {"version":3,"file":"pkce.d.ts","sourceRoot":"","sources":["../../src/lib/pkce.ts"],"names":[],"mappings":"AAmBA;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAAC,MAAM,GAAE,MAAW;;;;GAWrD;AAED;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,MAAM,GAAG,OAAgB,oBAalC"}
package/dist/lib/pkce.js CHANGED
@@ -1,9 +1,10 @@
1
1
  import { base64url } from 'jose';
2
2
  import { e } from "../schemas/error.js";
3
+ const CODE_VERIFIER_PATTERN = /^[A-Za-z0-9._~-]{43,128}$/;
3
4
  function generateVerifier(length) {
4
5
  const buffer = new Uint8Array(length);
5
6
  crypto.getRandomValues(buffer);
6
- return base64url.encode(buffer);
7
+ return base64url.encode(buffer).slice(0, length);
7
8
  }
8
9
  async function generateChallenge(verifier, method) {
9
10
  if (method === 'plain')
@@ -45,6 +46,12 @@ export async function generatePKCE(length = 64) {
45
46
  * @see {@link https://datatracker.ietf.org/doc/html/rfc7636#section-4.6 | RFC 7636 §4.6 - Client Sends the Authorization Code and the Code Verifier to the Token Endpoint}
46
47
  */
47
48
  export async function validatePKCE(verifier, challenge, method = 'S256') {
49
+ if (method !== 'S256') {
50
+ return false;
51
+ }
52
+ if (!CODE_VERIFIER_PATTERN.test(verifier)) {
53
+ return false;
54
+ }
48
55
  const generatedChallenge = await generateChallenge(verifier, method);
49
56
  // timing safe equals?
50
57
  return generatedChallenge === challenge;
@@ -1 +1 @@
1
- {"version":3,"file":"pkce.js","sourceRoot":"","sources":["../../src/lib/pkce.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,qBAAqB,CAAC;AAExC,SAAS,gBAAgB,CAAC,MAAc;IACtC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAC/B,OAAO,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,QAAgB,EAAE,MAAwB;IACzE,IAAI,MAAM,KAAK,OAAO;QAAE,OAAO,QAAQ,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACzD,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AAChD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,SAAiB,EAAE;IACpD,IAAI,MAAM,GAAG,EAAE,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;QAChC,MAAM,IAAI,CAAC,CAAC,yBAAyB,CAAC,KAAK,EAAE,CAAC;IAChD,CAAC;IACD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC5D,OAAO;QACL,QAAQ;QACR,SAAS;QACT,MAAM,EAAE,MAAM;KACf,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,QAAgB,EAChB,SAAiB,EACjB,SAA2B,MAAM;IAEjC,MAAM,kBAAkB,GAAG,MAAM,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACrE,sBAAsB;IACtB,OAAO,kBAAkB,KAAK,SAAS,CAAC;AAC1C,CAAC"}
1
+ {"version":3,"file":"pkce.js","sourceRoot":"","sources":["../../src/lib/pkce.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,qBAAqB,CAAC;AAExC,MAAM,qBAAqB,GAAG,2BAA2B,CAAC;AAE1D,SAAS,gBAAgB,CAAC,MAAc;IACtC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAC/B,OAAO,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACnD,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,QAAgB,EAAE,MAAwB;IACzE,IAAI,MAAM,KAAK,OAAO;QAAE,OAAO,QAAQ,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACzD,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AAChD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,SAAiB,EAAE;IACpD,IAAI,MAAM,GAAG,EAAE,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;QAChC,MAAM,IAAI,CAAC,CAAC,yBAAyB,CAAC,KAAK,EAAE,CAAC;IAChD,CAAC;IACD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC5D,OAAO;QACL,QAAQ;QACR,SAAS;QACT,MAAM,EAAE,MAAM;KACf,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,QAAgB,EAChB,SAAiB,EACjB,SAA2B,MAAM;IAEjC,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,kBAAkB,GAAG,MAAM,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACrE,sBAAsB;IACtB,OAAO,kBAAkB,KAAK,SAAS,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function csrfProtection(publicOrigin: string): import("hono").MiddlewareHandler<any, string, {}, Response>;
2
+ //# sourceMappingURL=csrf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csrf.d.ts","sourceRoot":"","sources":["../../src/middleware/csrf.ts"],"names":[],"mappings":"AAmBA,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,+DA0ClD"}
@@ -0,0 +1,51 @@
1
+ import { getCookie } from 'hono/cookie';
2
+ import { createMiddleware } from 'hono/factory';
3
+ import { e } from "../schemas/error.js";
4
+ const SAFE_METHODS = new Set(['GET', 'HEAD', 'OPTIONS']);
5
+ const OAUTH_PROVIDER_CALLBACK_PATTERN = /^\/api\/oauth\/[^/]+\/callback$/;
6
+ function normalizeOrigin(value) {
7
+ try {
8
+ return new URL(value).origin;
9
+ }
10
+ catch {
11
+ return undefined;
12
+ }
13
+ }
14
+ function isOAuthProviderCallback(path) {
15
+ return OAUTH_PROVIDER_CALLBACK_PATTERN.test(path);
16
+ }
17
+ export function csrfProtection(publicOrigin) {
18
+ const trustedOrigin = normalizeOrigin(publicOrigin);
19
+ return createMiddleware(async (c, next) => {
20
+ if (SAFE_METHODS.has(c.req.method)) {
21
+ await next();
22
+ return;
23
+ }
24
+ if (isOAuthProviderCallback(c.req.path)) {
25
+ await next();
26
+ return;
27
+ }
28
+ if (!getCookie(c, 'session')) {
29
+ await next();
30
+ return;
31
+ }
32
+ const requestOrigin = c.req.header('Origin');
33
+ if (requestOrigin &&
34
+ trustedOrigin &&
35
+ normalizeOrigin(requestOrigin) === trustedOrigin) {
36
+ await next();
37
+ return;
38
+ }
39
+ const fetchSite = c.req.header('Sec-Fetch-Site');
40
+ if (!requestOrigin && fetchSite === 'same-origin') {
41
+ await next();
42
+ return;
43
+ }
44
+ if (!requestOrigin && !fetchSite && !c.req.header('User-Agent')) {
45
+ await next();
46
+ return;
47
+ }
48
+ throw new e.CsrfViolation.Error();
49
+ });
50
+ }
51
+ //# sourceMappingURL=csrf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csrf.js","sourceRoot":"","sources":["../../src/middleware/csrf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,CAAC,EAAE,MAAM,qBAAqB,CAAC;AAExC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;AACzD,MAAM,+BAA+B,GAAG,iCAAiC,CAAC;AAE1E,SAAS,eAAe,CAAC,KAAa;IACpC,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAAC,IAAY;IAC3C,OAAO,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,YAAoB;IACjD,MAAM,aAAa,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;IAEpD,OAAO,gBAAgB,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QACxC,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,IAAI,uBAAuB,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,MAAM,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC7C,IACE,aAAa;YACb,aAAa;YACb,eAAe,CAAC,aAAa,CAAC,KAAK,aAAa,EAChD,CAAC;YACD,MAAM,IAAI,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACjD,IAAI,CAAC,aAAa,IAAI,SAAS,KAAK,aAAa,EAAE,CAAC;YAClD,MAAM,IAAI,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,IAAI,CAAC,aAAa,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;YAChE,MAAM,IAAI,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,MAAM,IAAI,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/middleware/session.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,UAAU,GAAG;IAAE,SAAS,EAAE;QAAE,OAAO,EAAE,aAAa,CAAA;KAAE,CAAA;CAAE,CAAC;AAEnE,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,IAAI,CAAC,EAAE;QACL,GAAG,EAAE,MAAM,CAAC;QACZ,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF;;;;OAIG;IACH,cAAc,CAAC,EAAE;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF;;;;OAIG;IACH,eAAe,CAAC,EAAE;QAChB,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF;;;;;OAKG;IACH,KAAK,CAAC,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;QACpC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;KAChC,CAAC;IACF;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,CAAC,SAAS,MAAM,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IACzD,GAAG,CAAC,CAAC,SAAS,MAAM,WAAW,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACtE,MAAM,IAAI,IAAI,CAAC;IACf,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChE,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtE,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACjD,iBAAiB,IAAI,IAAI,CAAC;CAC3B;AAED,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,sEA0FxE"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/middleware/session.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,UAAU,GAAG;IAAE,SAAS,EAAE;QAAE,OAAO,EAAE,aAAa,CAAA;KAAE,CAAA;CAAE,CAAC;AAEnE,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,IAAI,CAAC,EAAE;QACL,GAAG,EAAE,MAAM,CAAC;QACZ,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF;;;;OAIG;IACH,cAAc,CAAC,EAAE;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF;;;;OAIG;IACH,eAAe,CAAC,EAAE;QAChB,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF;;;;;OAKG;IACH,KAAK,CAAC,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;QACpC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;KAChC,CAAC;IACF;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,CAAC,SAAS,MAAM,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IACzD,GAAG,CAAC,CAAC,SAAS,MAAM,WAAW,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACtE,MAAM,IAAI,IAAI,CAAC;IACf,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChE,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtE,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACjD,iBAAiB,IAAI,IAAI,CAAC;CAC3B;AAED,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,sEA4FxE"}