@logto/remix 1.0.0-beta.9 → 1.0.0-rc.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.
package/README.md CHANGED
@@ -97,7 +97,7 @@ A typical use case is to fetch the _authentication context_ which contains infor
97
97
 
98
98
  ```ts
99
99
  // app/routes/index.tsx
100
- import type { LogtoContext } from "@openformation/logto-remix";
100
+ import type { LogtoContext } from "@logto/remix";
101
101
  import { LoaderFunction, json } from "@remix-run/node";
102
102
  import { useLoaderData } from "@remix-run/react";
103
103
 
@@ -108,7 +108,7 @@ type LoaderResponse = {
108
108
  };
109
109
 
110
110
  export const loader: LoaderFunction = async ({ request }) => {
111
- const context = await logto.getContext({ includeAccessToken: false })(
111
+ const context = await logto.getContext({ getAccessToken: false })(
112
112
  request
113
113
  );
114
114
 
package/lib/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { LogtoConfig } from "@logto/node";
1
+ import { GetContextParameters, LogtoConfig } from "@logto/node";
2
2
  import { SessionStorage } from "@remix-run/node";
3
3
  export { type LogtoConfig } from '@logto/node';
4
4
  export { type LogtoContext } from '@logto/node';
@@ -22,9 +22,7 @@ export const makeLogtoRemix: (config: Config, deps: {
22
22
  readonly redirectBackTo: string;
23
23
  };
24
24
  }) => import("@remix-run/node").LoaderFunction;
25
- getContext: (dto: {
26
- includeAccessToken: boolean;
27
- }) => (request: Request) => Promise<import("@logto/node").LogtoContext>;
25
+ getContext: (dto: GetContextParameters) => (request: Request) => Promise<import("@logto/node").LogtoContext>;
28
26
  }>;
29
27
  export { type LogtoContext } from '@logto/node';
30
28
 
@@ -1 +1 @@
1
- {"mappings":";;ACeA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AKW/C,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AkBnBhD,cAAc,QAAQ,CAAC,WAAW,CAAC,GAAG;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,OAAO,MAAM,yBACH,MAAM,QACR;IACJ,gBAAgB,cAAc,CAAC;CAChC;;;;;;;;;;;;;;;sBAemB;QAAE,kBAAkB,EAAE,OAAO,CAAA;KAAE;EAMpD,CAAC;AAEF,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC","sources":["packages/remix/src/src/infrastructure/logto/create-storage.ts","packages/remix/src/src/infrastructure/logto/create-client.ts","packages/remix/src/src/infrastructure/logto/get-context.ts","packages/remix/src/src/infrastructure/logto/handle-sign-in.ts","packages/remix/src/src/infrastructure/logto/handle-sign-in-callback.ts","packages/remix/src/src/infrastructure/logto/handle-sign-out.ts","packages/remix/src/src/infrastructure/logto/index.ts","packages/remix/src/src/framework/get-cookie-header-from-request.ts","packages/remix/src/src/useCases/getContext/GetContextUseCase.ts","packages/remix/src/src/useCases/getContext/GetContextController.ts","packages/remix/src/src/useCases/getContext/index.ts","packages/remix/src/src/useCases/handleSignIn/HandleSignInUseCase.ts","packages/remix/src/src/useCases/handleSignIn/HandleSignInController.ts","packages/remix/src/src/useCases/handleSignIn/index.ts","packages/remix/src/src/useCases/handleSignInCallback/HandleSignInCallbackError.ts","packages/remix/src/src/useCases/handleSignInCallback/HandleSignInCallbackUseCase.ts","packages/remix/src/src/useCases/handleSignInCallback/HandleSignInCallbackController.ts","packages/remix/src/src/useCases/handleSignInCallback/index.ts","packages/remix/src/src/useCases/handleSignOut/HandleSignOutError.ts","packages/remix/src/src/useCases/handleSignOut/HandleSignOutUseCase.ts","packages/remix/src/src/useCases/handleSignOut/HandleSignOutController.ts","packages/remix/src/src/useCases/handleSignOut/index.ts","packages/remix/src/src/useCases/handleAuthRoutes/HandleAuthRoutesError.ts","packages/remix/src/src/useCases/handleAuthRoutes/index.ts","packages/remix/src/src/index.ts","packages/remix/src/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"import { LogtoConfig } from '@logto/node';\nimport { SessionStorage } from '@remix-run/node';\n\nimport { makeLogtoAdapter } from './infrastructure/logto';\nimport { makeGetContext } from './useCases/getContext';\nimport { makeHandleAuthRoutes } from './useCases/handleAuthRoutes';\n\ntype Config = Readonly<LogtoConfig> & {\n readonly baseUrl: string;\n};\n\nexport const makeLogtoRemix = (\n config: Config,\n deps: {\n sessionStorage: SessionStorage;\n }\n) => {\n const { sessionStorage } = deps;\n\n const { baseUrl } = config;\n\n const createLogtoAdapter = makeLogtoAdapter(config);\n\n return Object.freeze({\n handleAuthRoutes: makeHandleAuthRoutes({\n baseUrl,\n createLogtoAdapter,\n sessionStorage,\n }),\n\n getContext: (dto: { includeAccessToken: boolean }) =>\n makeGetContext(dto, {\n createLogtoAdapter,\n sessionStorage,\n }),\n });\n};\n\nexport { type LogtoContext } from '@logto/node';\n"],"names":[],"version":3,"file":"index.d.ts.map"}
1
+ {"mappings":";;ACeA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AKW/C,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AkBnBhD,cAAc,QAAQ,CAAC,WAAW,CAAC,GAAG;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,OAAO,MAAM,yBACH,MAAM,QACR;IACJ,gBAAgB,cAAc,CAAC;CAChC;;;;;;;;;;;;;;;sBAemB,oBAAoB;EAMzC,CAAC;AAEF,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC","sources":["packages/remix/src/src/infrastructure/logto/create-storage.ts","packages/remix/src/src/infrastructure/logto/create-client.ts","packages/remix/src/src/infrastructure/logto/get-context.ts","packages/remix/src/src/infrastructure/logto/handle-sign-in.ts","packages/remix/src/src/infrastructure/logto/handle-sign-in-callback.ts","packages/remix/src/src/infrastructure/logto/handle-sign-out.ts","packages/remix/src/src/infrastructure/logto/index.ts","packages/remix/src/src/framework/get-cookie-header-from-request.ts","packages/remix/src/src/useCases/getContext/GetContextUseCase.ts","packages/remix/src/src/useCases/getContext/GetContextController.ts","packages/remix/src/src/useCases/getContext/index.ts","packages/remix/src/src/useCases/handleSignIn/HandleSignInUseCase.ts","packages/remix/src/src/useCases/handleSignIn/HandleSignInController.ts","packages/remix/src/src/useCases/handleSignIn/index.ts","packages/remix/src/src/useCases/handleSignInCallback/HandleSignInCallbackError.ts","packages/remix/src/src/useCases/handleSignInCallback/HandleSignInCallbackUseCase.ts","packages/remix/src/src/useCases/handleSignInCallback/HandleSignInCallbackController.ts","packages/remix/src/src/useCases/handleSignInCallback/index.ts","packages/remix/src/src/useCases/handleSignOut/HandleSignOutError.ts","packages/remix/src/src/useCases/handleSignOut/HandleSignOutUseCase.ts","packages/remix/src/src/useCases/handleSignOut/HandleSignOutController.ts","packages/remix/src/src/useCases/handleSignOut/index.ts","packages/remix/src/src/useCases/handleAuthRoutes/HandleAuthRoutesError.ts","packages/remix/src/src/useCases/handleAuthRoutes/index.ts","packages/remix/src/src/index.ts","packages/remix/src/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"import { GetContextParameters, LogtoConfig } from '@logto/node';\nimport { SessionStorage } from '@remix-run/node';\n\nimport { makeLogtoAdapter } from './infrastructure/logto';\nimport { makeGetContext } from './useCases/getContext';\nimport { makeHandleAuthRoutes } from './useCases/handleAuthRoutes';\n\ntype Config = Readonly<LogtoConfig> & {\n readonly baseUrl: string;\n};\n\nexport const makeLogtoRemix = (\n config: Config,\n deps: {\n sessionStorage: SessionStorage;\n }\n) => {\n const { sessionStorage } = deps;\n\n const { baseUrl } = config;\n\n const createLogtoAdapter = makeLogtoAdapter(config);\n\n return Object.freeze({\n handleAuthRoutes: makeHandleAuthRoutes({\n baseUrl,\n createLogtoAdapter,\n sessionStorage,\n }),\n\n getContext: (dto: GetContextParameters) =>\n makeGetContext(dto, {\n createLogtoAdapter,\n sessionStorage,\n }),\n });\n};\n\nexport { type LogtoContext } from '@logto/node';\n"],"names":[],"version":3,"file":"index.d.ts.map"}
package/lib/index.js CHANGED
@@ -1,5 +1,5 @@
1
- var $jCOgx$logtonode = require("@logto/node");
2
- var $jCOgx$remixrunnode = require("@remix-run/node");
1
+ var $1UY29$logtonode = require("@logto/node");
2
+ var $1UY29$remixrunnode = require("@remix-run/node");
3
3
 
4
4
  function $parcel$export(e, n, v, s) {
5
5
  Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
@@ -8,22 +8,22 @@ function $parcel$interopDefault(a) {
8
8
  return a && a.__esModule ? a.default : a;
9
9
  }
10
10
 
11
- $parcel$export(module.exports, "makeLogtoRemix", () => $0ca379f5bbbb8613$export$502a4d54d411a9fd);
11
+ $parcel$export(module.exports, "makeLogtoRemix", () => $d280ab1184950f89$export$502a4d54d411a9fd);
12
12
 
13
- const $94c40b1de01e2ef7$export$60d790dda55ffee6 = (config, storage)=>// Have to deactivate the eslint rule here as the `LogtoClient`
13
+ const $432ba72d919a1e72$export$60d790dda55ffee6 = (config, storage)=>// Have to deactivate the eslint rule here as the `LogtoClient`
14
14
  // awaits a `navigate` function.
15
15
  // eslint-disable-next-line @typescript-eslint/no-empty-function
16
16
  (navigate = ()=>{})=>{
17
- return new (0, ($parcel$interopDefault($jCOgx$logtonode)))(config, {
17
+ return new (0, ($parcel$interopDefault($1UY29$logtonode)))(config, {
18
18
  storage: storage,
19
19
  navigate: navigate
20
20
  });
21
21
  };
22
22
 
23
23
 
24
- class $827429ca01feafa0$var$LogtoStorage {
24
+ class $0039633e49290279$var$LogtoStorage {
25
25
  static fromSession = (session)=>{
26
- return new $827429ca01feafa0$var$LogtoStorage({
26
+ return new $0039633e49290279$var$LogtoStorage({
27
27
  session: session
28
28
  });
29
29
  };
@@ -46,21 +46,21 @@ class $827429ca01feafa0$var$LogtoStorage {
46
46
  };
47
47
  }
48
48
  }
49
- const $827429ca01feafa0$export$d184a47a971dd4b9 = (session)=>$827429ca01feafa0$var$LogtoStorage.fromSession(session);
49
+ const $0039633e49290279$export$d184a47a971dd4b9 = (session)=>$0039633e49290279$var$LogtoStorage.fromSession(session);
50
50
 
51
51
 
52
- const $929a552c463d8b64$export$f4d9bb4cf5d2b40c = (deps)=>async (request)=>{
52
+ const $9d7cd9eac4864785$export$f4d9bb4cf5d2b40c = (deps)=>async (request)=>{
53
53
  const { storage: storage , createClient: createClient } = deps;
54
54
  const client = createClient();
55
- const context = await client.getContext(request.includeAccessToken);
55
+ const context = await client.getContext(request);
56
56
  return {
57
57
  context: context
58
58
  };
59
59
  };
60
60
 
61
61
 
62
- class $57de529bd46d1977$var$HandleSignInCommand {
63
- static fromDependencies = (dependencies)=>new $57de529bd46d1977$var$HandleSignInCommand({
62
+ class $b6b640b5dde7b3d1$var$HandleSignInCommand {
63
+ static fromDependencies = (dependencies)=>new $b6b640b5dde7b3d1$var$HandleSignInCommand({
64
64
  createClient: dependencies.createClient
65
65
  });
66
66
  constructor(properties){
@@ -78,9 +78,9 @@ class $57de529bd46d1977$var$HandleSignInCommand {
78
78
  };
79
79
  }
80
80
  }
81
- const $57de529bd46d1977$export$3c00ad1b716e9134 = (deps)=>async (request)=>{
81
+ const $b6b640b5dde7b3d1$export$3c00ad1b716e9134 = (deps)=>async (request)=>{
82
82
  const { storage: storage , createClient: createClient } = deps;
83
- const command = $57de529bd46d1977$var$HandleSignInCommand.fromDependencies({
83
+ const command = $b6b640b5dde7b3d1$var$HandleSignInCommand.fromDependencies({
84
84
  createClient: createClient
85
85
  });
86
86
  const { navigateToUrl: navigateToUrl } = await command.execute(request);
@@ -91,7 +91,7 @@ const $57de529bd46d1977$export$3c00ad1b716e9134 = (deps)=>async (request)=>{
91
91
  };
92
92
 
93
93
 
94
- const $a5a397d32fbbf55b$export$9c07365b51e93ba3 = (deps)=>async (request)=>{
94
+ const $ba5c5a17c0470429$export$9c07365b51e93ba3 = (deps)=>async (request)=>{
95
95
  const { storage: storage , createClient: createClient } = deps;
96
96
  const client = createClient();
97
97
  await client.handleSignInCallback(request.callbackUri);
@@ -101,8 +101,8 @@ const $a5a397d32fbbf55b$export$9c07365b51e93ba3 = (deps)=>async (request)=>{
101
101
  };
102
102
 
103
103
 
104
- class $43687e20c64eb0a9$var$HandleSignOutCommand {
105
- static fromDependencies = (dependencies)=>new $43687e20c64eb0a9$var$HandleSignOutCommand({
104
+ class $56983c96c6292b7b$var$HandleSignOutCommand {
105
+ static fromDependencies = (dependencies)=>new $56983c96c6292b7b$var$HandleSignOutCommand({
106
106
  createClient: dependencies.createClient
107
107
  });
108
108
  constructor(properties){
@@ -120,31 +120,31 @@ class $43687e20c64eb0a9$var$HandleSignOutCommand {
120
120
  };
121
121
  }
122
122
  }
123
- const $43687e20c64eb0a9$export$89f18ff1488dade0 = (deps)=>async (request)=>{
123
+ const $56983c96c6292b7b$export$89f18ff1488dade0 = (deps)=>async (request)=>{
124
124
  const { createClient: createClient } = deps;
125
- const command = $43687e20c64eb0a9$var$HandleSignOutCommand.fromDependencies({
125
+ const command = $56983c96c6292b7b$var$HandleSignOutCommand.fromDependencies({
126
126
  createClient: createClient
127
127
  });
128
128
  return command.execute(request);
129
129
  };
130
130
 
131
131
 
132
- const $be51f08b006ed125$export$5e1ab578feca185a = (config)=>(session)=>{
133
- const storage = (0, $827429ca01feafa0$export$d184a47a971dd4b9)(session);
134
- const createClient = (0, $94c40b1de01e2ef7$export$60d790dda55ffee6)(config, storage);
132
+ const $a4e270a96c0fa97a$export$5e1ab578feca185a = (config)=>(session)=>{
133
+ const storage = (0, $0039633e49290279$export$d184a47a971dd4b9)(session);
134
+ const createClient = (0, $432ba72d919a1e72$export$60d790dda55ffee6)(config, storage);
135
135
  return {
136
- handleSignIn: (0, $57de529bd46d1977$export$3c00ad1b716e9134)({
136
+ handleSignIn: (0, $b6b640b5dde7b3d1$export$3c00ad1b716e9134)({
137
137
  storage: storage,
138
138
  createClient: createClient
139
139
  }),
140
- handleSignInCallback: (0, $a5a397d32fbbf55b$export$9c07365b51e93ba3)({
140
+ handleSignInCallback: (0, $ba5c5a17c0470429$export$9c07365b51e93ba3)({
141
141
  storage: storage,
142
142
  createClient: createClient
143
143
  }),
144
- handleSignOut: (0, $43687e20c64eb0a9$export$89f18ff1488dade0)({
144
+ handleSignOut: (0, $56983c96c6292b7b$export$89f18ff1488dade0)({
145
145
  createClient: createClient
146
146
  }),
147
- getContext: (0, $929a552c463d8b64$export$f4d9bb4cf5d2b40c)({
147
+ getContext: (0, $9d7cd9eac4864785$export$f4d9bb4cf5d2b40c)({
148
148
  storage: storage,
149
149
  createClient: createClient
150
150
  })
@@ -152,24 +152,19 @@ const $be51f08b006ed125$export$5e1ab578feca185a = (config)=>(session)=>{
152
152
  };
153
153
 
154
154
 
155
- const $978a582c6f8c8e7b$export$5c6fae4c79d686e4 = (request)=>request.headers.get("Cookie");
155
+ const $a8afe3841584871e$export$5c6fae4c79d686e4 = (request)=>request.headers.get("Cookie");
156
156
 
157
157
 
158
- class $9d799c5e2ef306d6$export$32386402b3f0a45 {
159
- static fromDto = (dto)=>new $9d799c5e2ef306d6$export$32386402b3f0a45({
160
- useCase: dto.useCase,
161
- includeAccessToken: dto.includeAccessToken ?? false
162
- });
158
+ class $5ea2bffde4379db3$export$32386402b3f0a45 {
159
+ static fromDto = (dto)=>new $5ea2bffde4379db3$export$32386402b3f0a45(dto);
163
160
  constructor(properties){
164
161
  this.properties = properties;
165
162
  this.useCase = this.properties.useCase;
166
- this.includeAccessToken = this.properties.includeAccessToken;
167
163
  this.execute = async (request)=>{
168
- const cookieHeader = (0, $978a582c6f8c8e7b$export$5c6fae4c79d686e4)(request);
169
- const { includeAccessToken: includeAccessToken } = this;
164
+ const cookieHeader = (0, $a8afe3841584871e$export$5c6fae4c79d686e4)(request);
170
165
  const result = await this.useCase({
171
166
  cookieHeader: cookieHeader ?? undefined,
172
- includeAccessToken: includeAccessToken
167
+ ...this.properties
173
168
  });
174
169
  return result.context;
175
170
  };
@@ -177,28 +172,26 @@ class $9d799c5e2ef306d6$export$32386402b3f0a45 {
177
172
  }
178
173
 
179
174
 
180
- const $407324a9de7811e9$export$53ae38c062671653 = (deps)=>async (request)=>{
175
+ const $b710f2274063a387$export$53ae38c062671653 = (deps)=>async (request)=>{
181
176
  const { sessionStorage: sessionStorage , createLogtoAdapter: createLogtoAdapter } = deps;
182
177
  const session = await sessionStorage.getSession(request.cookieHeader);
183
178
  const logto = createLogtoAdapter(session);
184
- const response = await logto.getContext({
185
- includeAccessToken: request.includeAccessToken
186
- });
179
+ const response = await logto.getContext(request);
187
180
  return {
188
181
  context: response.context
189
182
  };
190
183
  };
191
184
 
192
185
 
193
- const $7b69d37f648a005c$export$f4d9bb4cf5d2b40c = (dto, deps)=>async (request)=>{
186
+ const $10ac017bdfe3e60c$export$f4d9bb4cf5d2b40c = (dto, deps)=>async (request)=>{
194
187
  const { createLogtoAdapter: createLogtoAdapter , sessionStorage: sessionStorage } = deps;
195
- const useCase = (0, $407324a9de7811e9$export$53ae38c062671653)({
188
+ const useCase = (0, $b710f2274063a387$export$53ae38c062671653)({
196
189
  createLogtoAdapter: createLogtoAdapter,
197
190
  sessionStorage: sessionStorage
198
191
  });
199
- const controller = (0, $9d799c5e2ef306d6$export$32386402b3f0a45).fromDto({
192
+ const controller = (0, $5ea2bffde4379db3$export$32386402b3f0a45).fromDto({
200
193
  useCase: useCase,
201
- includeAccessToken: dto.includeAccessToken
194
+ ...dto
202
195
  });
203
196
  return controller.execute(request);
204
197
  };
@@ -206,8 +199,8 @@ const $7b69d37f648a005c$export$f4d9bb4cf5d2b40c = (dto, deps)=>async (request)=>
206
199
 
207
200
 
208
201
 
209
- class $6ca04f2e8ce3f248$export$8bb8370a824a554b {
210
- static fromDto = (dto)=>new $6ca04f2e8ce3f248$export$8bb8370a824a554b({
202
+ class $29dab4b4aca0abe0$export$8bb8370a824a554b {
203
+ static fromDto = (dto)=>new $29dab4b4aca0abe0$export$8bb8370a824a554b({
211
204
  useCase: dto.useCase,
212
205
  redirectUri: dto.redirectUri
213
206
  });
@@ -216,13 +209,13 @@ class $6ca04f2e8ce3f248$export$8bb8370a824a554b {
216
209
  this.useCase = this.properties.useCase;
217
210
  this.redirectUri = this.properties.redirectUri;
218
211
  this.execute = async (request)=>{
219
- const cookieHeader = (0, $978a582c6f8c8e7b$export$5c6fae4c79d686e4)(request);
212
+ const cookieHeader = (0, $a8afe3841584871e$export$5c6fae4c79d686e4)(request);
220
213
  const { redirectUri: redirectUri } = this;
221
214
  const result = await this.useCase({
222
215
  cookieHeader: cookieHeader ?? undefined,
223
216
  redirectUri: redirectUri
224
217
  });
225
- return (0, $jCOgx$remixrunnode.redirect)(result.navigateToUrl, {
218
+ return (0, $1UY29$remixrunnode.redirect)(result.navigateToUrl, {
226
219
  headers: {
227
220
  "Set-Cookie": result.cookieHeader
228
221
  }
@@ -232,7 +225,7 @@ class $6ca04f2e8ce3f248$export$8bb8370a824a554b {
232
225
  }
233
226
 
234
227
 
235
- const $b3adef7963962600$export$463099392e1e6404 = (deps)=>async (request)=>{
228
+ const $c230f3a04bd8ec78$export$463099392e1e6404 = (deps)=>async (request)=>{
236
229
  const { sessionStorage: sessionStorage , createLogtoAdapter: createLogtoAdapter } = deps;
237
230
  const session = await sessionStorage.getSession(request.cookieHeader);
238
231
  const logto = createLogtoAdapter(session);
@@ -247,13 +240,13 @@ const $b3adef7963962600$export$463099392e1e6404 = (deps)=>async (request)=>{
247
240
  };
248
241
 
249
242
 
250
- const $4e85595756955e84$export$3c00ad1b716e9134 = (dto, deps)=>async (request)=>{
243
+ const $7d87cb1bafa09779$export$3c00ad1b716e9134 = (dto, deps)=>async (request)=>{
251
244
  const { createLogtoAdapter: createLogtoAdapter , sessionStorage: sessionStorage } = deps;
252
- const useCase = (0, $b3adef7963962600$export$463099392e1e6404)({
245
+ const useCase = (0, $c230f3a04bd8ec78$export$463099392e1e6404)({
253
246
  createLogtoAdapter: createLogtoAdapter,
254
247
  sessionStorage: sessionStorage
255
248
  });
256
- const controller = (0, $6ca04f2e8ce3f248$export$8bb8370a824a554b).fromDto({
249
+ const controller = (0, $29dab4b4aca0abe0$export$8bb8370a824a554b).fromDto({
257
250
  useCase: useCase,
258
251
  redirectUri: dto.redirectBackTo
259
252
  });
@@ -263,8 +256,8 @@ const $4e85595756955e84$export$3c00ad1b716e9134 = (dto, deps)=>async (request)=>
263
256
 
264
257
 
265
258
 
266
- class $21e03cfddf6418cf$export$144a9ac3253d5e56 extends Error {
267
- static becauseNoCookieHeaderPresent = ()=>new $21e03cfddf6418cf$export$144a9ac3253d5e56({
259
+ class $bacebc5f40652238$export$144a9ac3253d5e56 extends Error {
260
+ static becauseNoCookieHeaderPresent = ()=>new $bacebc5f40652238$export$144a9ac3253d5e56({
268
261
  code: 1665388541,
269
262
  message: `The authentication sign-in callback route can't be accessed without a valid cookie.`
270
263
  });
@@ -278,8 +271,8 @@ class $21e03cfddf6418cf$export$144a9ac3253d5e56 extends Error {
278
271
  }
279
272
 
280
273
 
281
- class $f663abe9edb298e3$export$c8d670afaf17c618 {
282
- static fromDto = (dto)=>new $f663abe9edb298e3$export$c8d670afaf17c618({
274
+ class $c35099547b1a0858$export$c8d670afaf17c618 {
275
+ static fromDto = (dto)=>new $c35099547b1a0858$export$c8d670afaf17c618({
283
276
  useCase: dto.useCase,
284
277
  redirectUri: dto.redirectUri
285
278
  });
@@ -288,8 +281,8 @@ class $f663abe9edb298e3$export$c8d670afaf17c618 {
288
281
  this.useCase = this.properties.useCase;
289
282
  this.redirectUri = this.properties.redirectUri;
290
283
  this.execute = async (request)=>{
291
- const cookieHeader = (0, $978a582c6f8c8e7b$export$5c6fae4c79d686e4)(request);
292
- if (!cookieHeader) throw (0, $21e03cfddf6418cf$export$144a9ac3253d5e56).becauseNoCookieHeaderPresent();
284
+ const cookieHeader = (0, $a8afe3841584871e$export$5c6fae4c79d686e4)(request);
285
+ if (!cookieHeader) throw (0, $bacebc5f40652238$export$144a9ac3253d5e56).becauseNoCookieHeaderPresent();
293
286
  // In some scenarios, like performing the sign-in callback within a Gitpod
294
287
  // environment, the load balancer rewrites the URL and uses `http` as the
295
288
  // protocol. Here, we make sure that when the `x-forwarded-proto` HTTP header
@@ -300,7 +293,7 @@ class $f663abe9edb298e3$export$c8d670afaf17c618 {
300
293
  cookieHeader: cookieHeader,
301
294
  callbackUri: callbackUri
302
295
  });
303
- return (0, $jCOgx$remixrunnode.redirect)(this.redirectUri, {
296
+ return (0, $1UY29$remixrunnode.redirect)(this.redirectUri, {
304
297
  headers: {
305
298
  "Set-Cookie": result.cookieHeader
306
299
  }
@@ -310,7 +303,7 @@ class $f663abe9edb298e3$export$c8d670afaf17c618 {
310
303
  }
311
304
 
312
305
 
313
- const $ff5498b695abf304$export$22e357c661ee13a4 = (deps)=>async (request)=>{
306
+ const $3ae3cea103e3f353$export$22e357c661ee13a4 = (deps)=>async (request)=>{
314
307
  const { sessionStorage: sessionStorage , createLogtoAdapter: createLogtoAdapter } = deps;
315
308
  const session = await sessionStorage.getSession(request.cookieHeader);
316
309
  const logto = createLogtoAdapter(session);
@@ -324,13 +317,13 @@ const $ff5498b695abf304$export$22e357c661ee13a4 = (deps)=>async (request)=>{
324
317
  };
325
318
 
326
319
 
327
- const $7a39fdd186e8afdc$export$9c07365b51e93ba3 = (dto, deps)=>async (request)=>{
320
+ const $4df2ab785be2e3b0$export$9c07365b51e93ba3 = (dto, deps)=>async (request)=>{
328
321
  const { createLogtoAdapter: createLogtoAdapter , sessionStorage: sessionStorage } = deps;
329
- const useCase = (0, $ff5498b695abf304$export$22e357c661ee13a4)({
322
+ const useCase = (0, $3ae3cea103e3f353$export$22e357c661ee13a4)({
330
323
  createLogtoAdapter: createLogtoAdapter,
331
324
  sessionStorage: sessionStorage
332
325
  });
333
- const controller = (0, $f663abe9edb298e3$export$c8d670afaf17c618).fromDto({
326
+ const controller = (0, $c35099547b1a0858$export$c8d670afaf17c618).fromDto({
334
327
  useCase: useCase,
335
328
  redirectUri: dto.redirectBackTo
336
329
  });
@@ -340,8 +333,8 @@ const $7a39fdd186e8afdc$export$9c07365b51e93ba3 = (dto, deps)=>async (request)=>
340
333
 
341
334
 
342
335
 
343
- class $311025c6b993527d$export$e01614cfebe90908 extends Error {
344
- static becauseNoCookieHeaderPresent = ()=>new $311025c6b993527d$export$e01614cfebe90908({
336
+ class $b7dcd894e0be6905$export$e01614cfebe90908 extends Error {
337
+ static becauseNoCookieHeaderPresent = ()=>new $b7dcd894e0be6905$export$e01614cfebe90908({
345
338
  code: 1665388713,
346
339
  message: `The authentication sign-out route can't be accessed without a valid cookie.`
347
340
  });
@@ -355,8 +348,8 @@ class $311025c6b993527d$export$e01614cfebe90908 extends Error {
355
348
  }
356
349
 
357
350
 
358
- class $dbef723619a85b93$export$543cea0b68ca8887 {
359
- static fromDto = (dto)=>new $dbef723619a85b93$export$543cea0b68ca8887({
351
+ class $1791a93b2ba8efd2$export$543cea0b68ca8887 {
352
+ static fromDto = (dto)=>new $1791a93b2ba8efd2$export$543cea0b68ca8887({
360
353
  useCase: dto.useCase,
361
354
  redirectUri: dto.redirectUri
362
355
  });
@@ -365,13 +358,13 @@ class $dbef723619a85b93$export$543cea0b68ca8887 {
365
358
  this.useCase = this.properties.useCase;
366
359
  this.redirectUri = this.properties.redirectUri;
367
360
  this.execute = async (request)=>{
368
- const cookieHeader = (0, $978a582c6f8c8e7b$export$5c6fae4c79d686e4)(request);
369
- if (!cookieHeader) throw (0, $311025c6b993527d$export$e01614cfebe90908).becauseNoCookieHeaderPresent();
361
+ const cookieHeader = (0, $a8afe3841584871e$export$5c6fae4c79d686e4)(request);
362
+ if (!cookieHeader) throw (0, $b7dcd894e0be6905$export$e01614cfebe90908).becauseNoCookieHeaderPresent();
370
363
  const result = await this.useCase({
371
364
  cookieHeader: cookieHeader,
372
365
  redirectUri: this.redirectUri
373
366
  });
374
- return (0, $jCOgx$remixrunnode.redirect)(this.redirectUri, {
367
+ return (0, $1UY29$remixrunnode.redirect)(result.navigateToUrl, {
375
368
  headers: {
376
369
  "Set-Cookie": result.cookieHeader
377
370
  }
@@ -381,7 +374,7 @@ class $dbef723619a85b93$export$543cea0b68ca8887 {
381
374
  }
382
375
 
383
376
 
384
- const $2453e8ad28193ffe$export$8ccb0e4b7ccc1fc4 = (deps)=>async (request)=>{
377
+ const $fb309dcd4b062524$export$8ccb0e4b7ccc1fc4 = (deps)=>async (request)=>{
385
378
  const { sessionStorage: sessionStorage , createLogtoAdapter: createLogtoAdapter } = deps;
386
379
  const session = await sessionStorage.getSession(request.cookieHeader);
387
380
  const logto = createLogtoAdapter(session);
@@ -396,13 +389,13 @@ const $2453e8ad28193ffe$export$8ccb0e4b7ccc1fc4 = (deps)=>async (request)=>{
396
389
  };
397
390
 
398
391
 
399
- const $380e7b1772b43f91$export$89f18ff1488dade0 = (dto, deps)=>async (request)=>{
392
+ const $af9527187f2d8283$export$89f18ff1488dade0 = (dto, deps)=>async (request)=>{
400
393
  const { createLogtoAdapter: createLogtoAdapter , sessionStorage: sessionStorage } = deps;
401
- const useCase = (0, $2453e8ad28193ffe$export$8ccb0e4b7ccc1fc4)({
394
+ const useCase = (0, $fb309dcd4b062524$export$8ccb0e4b7ccc1fc4)({
402
395
  createLogtoAdapter: createLogtoAdapter,
403
396
  sessionStorage: sessionStorage
404
397
  });
405
- const controller = (0, $dbef723619a85b93$export$543cea0b68ca8887).fromDto({
398
+ const controller = (0, $1791a93b2ba8efd2$export$543cea0b68ca8887).fromDto({
406
399
  useCase: useCase,
407
400
  redirectUri: dto.redirectBackTo
408
401
  });
@@ -410,12 +403,12 @@ const $380e7b1772b43f91$export$89f18ff1488dade0 = (dto, deps)=>async (request)=>
410
403
  };
411
404
 
412
405
 
413
- class $1a27034d0b6c1fa0$export$fcbf49abe9908796 extends Error {
414
- static becauseNoConfigForPath = (anticipatedPath)=>new $1a27034d0b6c1fa0$export$fcbf49abe9908796({
406
+ class $39dd7d8d62a3df87$export$fcbf49abe9908796 extends Error {
407
+ static becauseNoConfigForPath = (anticipatedPath)=>new $39dd7d8d62a3df87$export$fcbf49abe9908796({
415
408
  code: 1665388277,
416
409
  message: `No configuration available for path "${anticipatedPath}".`
417
410
  });
418
- static becauseOfUnknownRoute = (anticipatedConfigKey)=>new $1a27034d0b6c1fa0$export$fcbf49abe9908796({
411
+ static becauseOfUnknownRoute = (anticipatedConfigKey)=>new $39dd7d8d62a3df87$export$fcbf49abe9908796({
419
412
  code: 1665388278,
420
413
  message: `The config key "${anticipatedConfigKey}" is invalid.`
421
414
  });
@@ -429,17 +422,17 @@ class $1a27034d0b6c1fa0$export$fcbf49abe9908796 extends Error {
429
422
  }
430
423
 
431
424
 
432
- const $4726b3ba230d3664$export$d6e32a8c2b1ad7f3 = (deps)=>(dto)=>async ({ request: request })=>{
425
+ const $85c2f13c6554a877$export$d6e32a8c2b1ad7f3 = (deps)=>(dto)=>async ({ request: request })=>{
433
426
  const anticipatedPath = new URL(request.url).pathname;
434
427
  /* eslint-disable no-restricted-syntax */ const configKey = Object.keys(dto).find((type)=>dto[type].path === anticipatedPath);
435
428
  const configExists = Boolean(configKey);
436
- /* eslint-enable no-restricted-syntax */ if (!configExists) throw (0, $1a27034d0b6c1fa0$export$fcbf49abe9908796).becauseNoConfigForPath(anticipatedPath);
429
+ /* eslint-enable no-restricted-syntax */ if (!configExists) throw (0, $39dd7d8d62a3df87$export$fcbf49abe9908796).becauseNoConfigForPath(anticipatedPath);
437
430
  const { sessionStorage: sessionStorage , createLogtoAdapter: createLogtoAdapter , baseUrl: baseUrl } = deps;
438
431
  const config = dto[configKey];
439
432
  switch(configKey){
440
433
  case "sign-in":
441
434
  {
442
- const handler = (0, $4e85595756955e84$export$3c00ad1b716e9134)({
435
+ const handler = (0, $7d87cb1bafa09779$export$3c00ad1b716e9134)({
443
436
  redirectBackTo: `${baseUrl}${config.redirectBackTo}`
444
437
  }, {
445
438
  sessionStorage: sessionStorage,
@@ -449,41 +442,41 @@ const $4726b3ba230d3664$export$d6e32a8c2b1ad7f3 = (deps)=>(dto)=>async ({ reques
449
442
  }
450
443
  case "sign-in-callback":
451
444
  {
452
- const handler1 = (0, $7a39fdd186e8afdc$export$9c07365b51e93ba3)({
445
+ const handler = (0, $4df2ab785be2e3b0$export$9c07365b51e93ba3)({
453
446
  redirectBackTo: `${baseUrl}${config.redirectBackTo}`
454
447
  }, {
455
448
  sessionStorage: sessionStorage,
456
449
  createLogtoAdapter: createLogtoAdapter
457
450
  });
458
- return handler1(request);
451
+ return handler(request);
459
452
  }
460
453
  case "sign-out":
461
454
  {
462
- const handler2 = (0, $380e7b1772b43f91$export$89f18ff1488dade0)({
455
+ const handler = (0, $af9527187f2d8283$export$89f18ff1488dade0)({
463
456
  redirectBackTo: `${baseUrl}${config.redirectBackTo}`
464
457
  }, {
465
458
  sessionStorage: sessionStorage,
466
459
  createLogtoAdapter: createLogtoAdapter
467
460
  });
468
- return handler2(request);
461
+ return handler(request);
469
462
  }
470
463
  default:
471
- throw (0, $1a27034d0b6c1fa0$export$fcbf49abe9908796).becauseOfUnknownRoute(configKey);
464
+ throw (0, $39dd7d8d62a3df87$export$fcbf49abe9908796).becauseOfUnknownRoute(configKey);
472
465
  }
473
466
  };
474
467
 
475
468
 
476
- const $0ca379f5bbbb8613$export$502a4d54d411a9fd = (config, deps)=>{
469
+ const $d280ab1184950f89$export$502a4d54d411a9fd = (config, deps)=>{
477
470
  const { sessionStorage: sessionStorage } = deps;
478
471
  const { baseUrl: baseUrl } = config;
479
- const createLogtoAdapter = (0, $be51f08b006ed125$export$5e1ab578feca185a)(config);
472
+ const createLogtoAdapter = (0, $a4e270a96c0fa97a$export$5e1ab578feca185a)(config);
480
473
  return Object.freeze({
481
- handleAuthRoutes: (0, $4726b3ba230d3664$export$d6e32a8c2b1ad7f3)({
474
+ handleAuthRoutes: (0, $85c2f13c6554a877$export$d6e32a8c2b1ad7f3)({
482
475
  baseUrl: baseUrl,
483
476
  createLogtoAdapter: createLogtoAdapter,
484
477
  sessionStorage: sessionStorage
485
478
  }),
486
- getContext: (dto)=>(0, $7b69d37f648a005c$export$f4d9bb4cf5d2b40c)(dto, {
479
+ getContext: (dto)=>(0, $10ac017bdfe3e60c$export$f4d9bb4cf5d2b40c)(dto, {
487
480
  createLogtoAdapter: createLogtoAdapter,
488
481
  sessionStorage: sessionStorage
489
482
  })
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"mappings":"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","sources":["packages/remix/src/index.ts","packages/remix/src/infrastructure/logto/index.ts","packages/remix/src/infrastructure/logto/create-client.ts","packages/remix/src/infrastructure/logto/create-storage.ts","packages/remix/src/infrastructure/logto/get-context.ts","packages/remix/src/infrastructure/logto/handle-sign-in.ts","packages/remix/src/infrastructure/logto/handle-sign-in-callback.ts","packages/remix/src/infrastructure/logto/handle-sign-out.ts","packages/remix/src/useCases/getContext/index.ts","packages/remix/src/useCases/getContext/GetContextController.ts","packages/remix/src/framework/get-cookie-header-from-request.ts","packages/remix/src/useCases/getContext/GetContextUseCase.ts","packages/remix/src/useCases/handleAuthRoutes/index.ts","packages/remix/src/useCases/handleSignIn/index.ts","packages/remix/src/useCases/handleSignIn/HandleSignInController.ts","packages/remix/src/useCases/handleSignIn/HandleSignInUseCase.ts","packages/remix/src/useCases/handleSignInCallback/index.ts","packages/remix/src/useCases/handleSignInCallback/HandleSignInCallbackController.ts","packages/remix/src/useCases/handleSignInCallback/HandleSignInCallbackError.ts","packages/remix/src/useCases/handleSignInCallback/HandleSignInCallbackUseCase.ts","packages/remix/src/useCases/handleSignOut/index.ts","packages/remix/src/useCases/handleSignOut/HandleSignOutController.ts","packages/remix/src/useCases/handleSignOut/HandleSignOutError.ts","packages/remix/src/useCases/handleSignOut/HandleSignOutUseCase.ts","packages/remix/src/useCases/handleAuthRoutes/HandleAuthRoutesError.ts"],"sourcesContent":["import { LogtoConfig } from '@logto/node';\nimport { SessionStorage } from '@remix-run/node';\n\nimport { makeLogtoAdapter } from './infrastructure/logto';\nimport { makeGetContext } from './useCases/getContext';\nimport { makeHandleAuthRoutes } from './useCases/handleAuthRoutes';\n\ntype Config = Readonly<LogtoConfig> & {\n readonly baseUrl: string;\n};\n\nexport const makeLogtoRemix = (\n config: Config,\n deps: {\n sessionStorage: SessionStorage;\n }\n) => {\n const { sessionStorage } = deps;\n\n const { baseUrl } = config;\n\n const createLogtoAdapter = makeLogtoAdapter(config);\n\n return Object.freeze({\n handleAuthRoutes: makeHandleAuthRoutes({\n baseUrl,\n createLogtoAdapter,\n sessionStorage,\n }),\n\n getContext: (dto: { includeAccessToken: boolean }) =>\n makeGetContext(dto, {\n createLogtoAdapter,\n sessionStorage,\n }),\n });\n};\n\nexport { type LogtoContext } from '@logto/node';\n","import type { LogtoConfig } from '@logto/node';\nimport { Session } from '@remix-run/node';\n\nimport { makeLogtoClient } from './create-client';\nimport { createStorage } from './create-storage';\nimport { makeGetContext } from './get-context';\nimport { makeHandleSignIn } from './handle-sign-in';\nimport { makeHandleSignInCallback } from './handle-sign-in-callback';\nimport { makeHandleSignOut } from './handle-sign-out';\n\ntype MakeLogtoAdapterConfiguration = LogtoConfig;\n\nexport const makeLogtoAdapter = (config: MakeLogtoAdapterConfiguration) => (session: Session) => {\n const storage = createStorage(session);\n const createClient = makeLogtoClient(config, storage);\n\n return {\n handleSignIn: makeHandleSignIn({ storage, createClient }),\n handleSignInCallback: makeHandleSignInCallback({ storage, createClient }),\n handleSignOut: makeHandleSignOut({ createClient }),\n getContext: makeGetContext({ storage, createClient }),\n };\n};\n\nexport type CreateLogtoAdapter = ReturnType<typeof makeLogtoAdapter>;\n\nexport { type LogtoContext } from '@logto/node';\n","import LogtoClient, { LogtoConfig } from '@logto/node';\n\nimport { LogtoStorage } from './create-storage';\n\nexport const makeLogtoClient =\n (config: LogtoConfig, storage: LogtoStorage) =>\n // Have to deactivate the eslint rule here as the `LogtoClient`\n // awaits a `navigate` function.\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n (navigate: (url: string) => void = () => {}) => {\n return new LogtoClient(config, { storage, navigate });\n };\n\nexport type CreateLogtoClient = ReturnType<typeof makeLogtoClient>;\n\nexport { type LogtoConfig } from '@logto/node';\n","import { Storage, StorageKey } from '@logto/node';\nimport { Session } from '@remix-run/node';\n\nclass LogtoStorage implements Storage {\n public static readonly fromSession = (session: Session) => {\n return new LogtoStorage({ session });\n };\n\n public readonly session = this.properties.session;\n\n private constructor(\n private readonly properties: {\n session: Session;\n }\n ) {}\n\n public readonly setItem = async (key: StorageKey, value: string) => {\n this.session.set(key, value);\n };\n\n public readonly getItem = async (key: StorageKey) => {\n const itemExists = this.session.has(key);\n\n if (!itemExists) {\n return null;\n }\n\n return String(this.session.get(key));\n };\n\n public readonly removeItem = async (key: StorageKey) => {\n this.session.unset(key);\n };\n\n public readonly save = async () => {\n // Not required as the persistence happens in the integration layer\n };\n}\n\nexport const createStorage = (session: Session) => LogtoStorage.fromSession(session);\n\nexport type { LogtoStorage };\n","import { LogtoContext } from '@logto/node';\n\nimport { CreateLogtoClient } from './create-client';\nimport { LogtoStorage } from './create-storage';\n\ntype GetContextRequest = {\n readonly includeAccessToken: boolean;\n};\n\ntype GetContextResponse = {\n readonly context: LogtoContext;\n};\n\nexport const makeGetContext =\n (deps: { storage: LogtoStorage; createClient: CreateLogtoClient }) =>\n async (request: GetContextRequest): Promise<GetContextResponse> => {\n const { storage, createClient } = deps;\n\n const client = createClient();\n\n const context = await client.getContext(request.includeAccessToken);\n\n return {\n context,\n };\n };\n","import { Session } from '@remix-run/node';\n\nimport { CreateLogtoClient } from './create-client';\nimport { LogtoStorage } from './create-storage';\n\ntype HandleSignInRequest = {\n readonly redirectUri: string;\n};\n\ntype HandleSignInResponse = {\n readonly session: Session;\n readonly navigateToUrl: string;\n};\n\nclass HandleSignInCommand {\n public static readonly fromDependencies = (dependencies: { createClient: CreateLogtoClient }) =>\n new HandleSignInCommand({ createClient: dependencies.createClient });\n\n private navigateToUrl = '/api/sign-in';\n\n private constructor(\n private readonly properties: {\n readonly createClient: CreateLogtoClient;\n }\n ) {}\n\n public async execute(request: HandleSignInRequest) {\n const { createClient } = this.properties;\n\n const client = createClient((url) => {\n this.navigateToUrl = url;\n });\n\n await client.signIn(request.redirectUri);\n\n return {\n navigateToUrl: this.navigateToUrl,\n };\n }\n}\n\nexport const makeHandleSignIn =\n (deps: { storage: LogtoStorage; createClient: CreateLogtoClient }) =>\n async (request: HandleSignInRequest): Promise<HandleSignInResponse> => {\n const { storage, createClient } = deps;\n\n const command = HandleSignInCommand.fromDependencies({ createClient });\n\n const { navigateToUrl } = await command.execute(request);\n\n return {\n session: storage.session,\n navigateToUrl,\n };\n };\n","import { Session } from '@remix-run/node';\n\nimport { CreateLogtoClient } from './create-client';\nimport { LogtoStorage } from './create-storage';\n\ntype HandleSignInCallbackRequest = {\n callbackUri: string;\n};\n\ntype HandleSignInCallbackResponse = {\n readonly session: Session;\n};\n\nexport const makeHandleSignInCallback =\n (deps: { storage: LogtoStorage; createClient: CreateLogtoClient }) =>\n async (request: HandleSignInCallbackRequest): Promise<HandleSignInCallbackResponse> => {\n const { storage, createClient } = deps;\n\n const client = createClient();\n\n await client.handleSignInCallback(request.callbackUri);\n\n return {\n session: storage.session,\n };\n };\n","import { CreateLogtoClient } from './create-client';\n\ntype HandleSignOutRequest = {\n readonly redirectUri: string;\n};\n\ntype HandleSignOutResponse = {\n readonly navigateToUrl: string;\n};\n\nclass HandleSignOutCommand {\n public static readonly fromDependencies = (dependencies: { createClient: CreateLogtoClient }) =>\n new HandleSignOutCommand({ createClient: dependencies.createClient });\n\n private navigateToUrl = '/api/sign-in';\n\n private constructor(\n private readonly properties: {\n readonly createClient: CreateLogtoClient;\n }\n ) {}\n\n public async execute(request: HandleSignOutRequest) {\n const { createClient } = this.properties;\n\n const client = createClient((url) => {\n this.navigateToUrl = url;\n });\n\n await client.signOut(request.redirectUri);\n\n return {\n navigateToUrl: this.navigateToUrl,\n };\n }\n}\n\nexport const makeHandleSignOut =\n (deps: { createClient: CreateLogtoClient }) =>\n async (request: HandleSignOutRequest): Promise<HandleSignOutResponse> => {\n const { createClient } = deps;\n\n const command = HandleSignOutCommand.fromDependencies({ createClient });\n\n return command.execute(request);\n };\n","import { SessionStorage } from '@remix-run/node';\n\nimport { CreateLogtoAdapter } from '../../infrastructure/logto';\nimport { GetContextController } from './GetContextController';\nimport { makeGetContextUseCase } from './GetContextUseCase';\n\ntype GetContextDto = {\n readonly includeAccessToken?: boolean;\n};\n\ntype HandleGetContextDeps = {\n readonly createLogtoAdapter: CreateLogtoAdapter;\n readonly sessionStorage: SessionStorage;\n};\n\nexport const makeGetContext =\n (dto: GetContextDto, deps: HandleGetContextDeps) => async (request: Request) => {\n const { createLogtoAdapter, sessionStorage } = deps;\n\n const useCase = makeGetContextUseCase({\n createLogtoAdapter,\n sessionStorage,\n });\n\n const controller = GetContextController.fromDto({\n useCase,\n includeAccessToken: dto.includeAccessToken,\n });\n\n return controller.execute(request);\n };\n","import { LogtoContext } from '@logto/node';\n\nimport { getCookieHeaderFromRequest } from '../../framework/get-cookie-header-from-request';\nimport type { GetContextUseCase } from './GetContextUseCase';\n\ntype GetContextControllerDto = {\n readonly includeAccessToken?: boolean;\n readonly useCase: GetContextUseCase;\n};\n\nexport class GetContextController {\n public static readonly fromDto = (dto: GetContextControllerDto) =>\n new GetContextController({\n useCase: dto.useCase,\n includeAccessToken: dto.includeAccessToken ?? false,\n });\n\n private readonly useCase = this.properties.useCase;\n private readonly includeAccessToken = this.properties.includeAccessToken;\n private constructor(\n private readonly properties: {\n includeAccessToken: boolean;\n useCase: GetContextUseCase;\n }\n ) {}\n\n public readonly execute = async (request: Request): Promise<LogtoContext> => {\n const cookieHeader = getCookieHeaderFromRequest(request);\n const { includeAccessToken } = this;\n\n const result = await this.useCase({\n cookieHeader: cookieHeader ?? undefined,\n includeAccessToken,\n });\n\n return result.context;\n };\n}\n","export const getCookieHeaderFromRequest = (request: Request) => request.headers.get('Cookie');\n","import { SessionStorage } from '@remix-run/node';\n\nimport { CreateLogtoAdapter, LogtoContext } from '../../infrastructure/logto';\n\ntype GetContextRequest = {\n readonly cookieHeader: string | undefined;\n readonly includeAccessToken: boolean;\n};\n\ntype GetContextResponse = {\n context: Readonly<LogtoContext>;\n};\n\nexport const makeGetContextUseCase =\n (deps: { createLogtoAdapter: CreateLogtoAdapter; sessionStorage: SessionStorage }) =>\n async (request: GetContextRequest): Promise<GetContextResponse> => {\n const { sessionStorage, createLogtoAdapter } = deps;\n\n const session = await sessionStorage.getSession(request.cookieHeader);\n\n const logto = createLogtoAdapter(session);\n\n const response = await logto.getContext({\n includeAccessToken: request.includeAccessToken,\n });\n\n return {\n context: response.context,\n };\n };\n\nexport type GetContextUseCase = ReturnType<typeof makeGetContextUseCase>;\n","import { LoaderFunction, SessionStorage } from '@remix-run/node';\n\nimport { CreateLogtoAdapter } from '../../infrastructure/logto';\nimport { makeHandleSignIn } from '../handleSignIn';\nimport { makeHandleSignInCallback } from '../handleSignInCallback';\nimport { makeHandleSignOut } from '../handleSignOut';\nimport { HandleAuthRoutesError } from './HandleAuthRoutesError';\n\ntype AuthRouteConfig = {\n readonly path: string;\n readonly redirectBackTo: string;\n};\n\ntype PossibleRouteTypes = 'sign-in' | 'sign-in-callback' | 'sign-out';\n\ntype HandleAuthRoutesDto = Record<PossibleRouteTypes, AuthRouteConfig>;\n\ntype MakeHandleAuthRoutesDto = {\n readonly baseUrl: string;\n readonly createLogtoAdapter: CreateLogtoAdapter;\n readonly sessionStorage: SessionStorage;\n};\n\nexport const makeHandleAuthRoutes =\n (deps: MakeHandleAuthRoutesDto) =>\n (dto: HandleAuthRoutesDto): LoaderFunction =>\n async ({ request }) => {\n const anticipatedPath = new URL(request.url).pathname;\n\n /* eslint-disable no-restricted-syntax */\n const configKey = Object.keys(dto).find(\n (type) => dto[type as PossibleRouteTypes].path === anticipatedPath\n ) as keyof HandleAuthRoutesDto;\n\n const configExists = Boolean(configKey);\n /* eslint-enable no-restricted-syntax */\n\n if (!configExists) {\n throw HandleAuthRoutesError.becauseNoConfigForPath(anticipatedPath);\n }\n\n const { sessionStorage, createLogtoAdapter, baseUrl } = deps;\n\n const config = dto[configKey];\n\n switch (configKey) {\n case 'sign-in': {\n const handler = makeHandleSignIn(\n {\n redirectBackTo: `${baseUrl}${config.redirectBackTo}`,\n },\n { sessionStorage, createLogtoAdapter }\n );\n\n return handler(request);\n }\n\n case 'sign-in-callback': {\n const handler = makeHandleSignInCallback(\n {\n redirectBackTo: `${baseUrl}${config.redirectBackTo}`,\n },\n { sessionStorage, createLogtoAdapter }\n );\n\n return handler(request);\n }\n\n case 'sign-out': {\n const handler = makeHandleSignOut(\n {\n redirectBackTo: `${baseUrl}${config.redirectBackTo}`,\n },\n { sessionStorage, createLogtoAdapter }\n );\n\n return handler(request);\n }\n\n default: {\n throw HandleAuthRoutesError.becauseOfUnknownRoute(configKey);\n }\n }\n };\n","import { SessionStorage } from '@remix-run/node';\n\nimport { CreateLogtoAdapter } from '../../infrastructure/logto';\nimport { HandleSignInController } from './HandleSignInController';\nimport { makeHandleSignInUseCase } from './HandleSignInUseCase';\n\ntype HandleSignInDto = {\n readonly redirectBackTo: string;\n};\n\ntype HandleSignInDeps = {\n readonly createLogtoAdapter: CreateLogtoAdapter;\n readonly sessionStorage: SessionStorage;\n};\n\nexport const makeHandleSignIn =\n (dto: HandleSignInDto, deps: HandleSignInDeps) => async (request: Request) => {\n const { createLogtoAdapter, sessionStorage } = deps;\n\n const useCase = makeHandleSignInUseCase({\n createLogtoAdapter,\n sessionStorage,\n });\n\n const controller = HandleSignInController.fromDto({\n useCase,\n redirectUri: dto.redirectBackTo,\n });\n\n return controller.execute(request);\n };\n","import { redirect, TypedResponse } from '@remix-run/node';\n\nimport { getCookieHeaderFromRequest } from '../../framework/get-cookie-header-from-request';\nimport type { HandleSignInUseCase } from './HandleSignInUseCase';\n\ntype HandleSignInControllerDto = {\n readonly redirectUri: string;\n readonly useCase: HandleSignInUseCase;\n};\n\nexport class HandleSignInController {\n public static readonly fromDto = (dto: HandleSignInControllerDto) =>\n new HandleSignInController({\n useCase: dto.useCase,\n redirectUri: dto.redirectUri,\n });\n\n private readonly useCase = this.properties.useCase;\n private readonly redirectUri = this.properties.redirectUri;\n private constructor(\n private readonly properties: {\n redirectUri: string;\n useCase: HandleSignInUseCase;\n }\n ) {}\n\n public readonly execute = async (request: Request): Promise<TypedResponse<never>> => {\n const cookieHeader = getCookieHeaderFromRequest(request);\n const { redirectUri } = this;\n\n const result = await this.useCase({\n cookieHeader: cookieHeader ?? undefined,\n redirectUri,\n });\n\n return redirect(result.navigateToUrl, {\n headers: {\n 'Set-Cookie': result.cookieHeader,\n },\n });\n };\n}\n","import { SessionStorage } from '@remix-run/node';\n\nimport { CreateLogtoAdapter } from '../../infrastructure/logto';\n\ntype SignInRequest = {\n readonly cookieHeader: string | undefined;\n readonly redirectUri: string;\n};\n\ntype SignInResponse = {\n readonly cookieHeader: string;\n readonly navigateToUrl: string;\n};\n\nexport const makeHandleSignInUseCase =\n (deps: { createLogtoAdapter: CreateLogtoAdapter; sessionStorage: SessionStorage }) =>\n async (request: SignInRequest): Promise<SignInResponse> => {\n const { sessionStorage, createLogtoAdapter } = deps;\n\n const session = await sessionStorage.getSession(request.cookieHeader);\n\n const logto = createLogtoAdapter(session);\n\n const response = await logto.handleSignIn({\n redirectUri: request.redirectUri,\n });\n\n const cookieHeader = await sessionStorage.commitSession(response.session);\n\n return {\n cookieHeader,\n navigateToUrl: response.navigateToUrl,\n };\n };\n\nexport type HandleSignInUseCase = ReturnType<typeof makeHandleSignInUseCase>;\n","import { SessionStorage } from '@remix-run/node';\n\nimport { CreateLogtoAdapter } from '../../infrastructure/logto';\nimport { HandleSignInCallbackController } from './HandleSignInCallbackController';\nimport { makeHandleSignInCallbackUseCase } from './HandleSignInCallbackUseCase';\n\ntype HandleSignInCallbackDto = {\n readonly redirectBackTo: string;\n};\n\ntype HandleSignInCallbackDeps = {\n readonly createLogtoAdapter: CreateLogtoAdapter;\n readonly sessionStorage: SessionStorage;\n};\n\nexport const makeHandleSignInCallback =\n (dto: HandleSignInCallbackDto, deps: HandleSignInCallbackDeps) => async (request: Request) => {\n const { createLogtoAdapter, sessionStorage } = deps;\n\n const useCase = makeHandleSignInCallbackUseCase({\n createLogtoAdapter,\n sessionStorage,\n });\n\n const controller = HandleSignInCallbackController.fromDto({\n useCase,\n redirectUri: dto.redirectBackTo,\n });\n\n return controller.execute(request);\n };\n","import { redirect, TypedResponse } from '@remix-run/node';\n\nimport { getCookieHeaderFromRequest } from '../../framework/get-cookie-header-from-request';\nimport { HandleSignInCallbackError } from './HandleSignInCallbackError';\nimport type { HandleSignInCallbackUseCase } from './HandleSignInCallbackUseCase';\n\ntype HandleSignInCallbackControllerDto = {\n readonly useCase: HandleSignInCallbackUseCase;\n readonly redirectUri: string;\n};\n\nexport class HandleSignInCallbackController {\n public static readonly fromDto = (dto: HandleSignInCallbackControllerDto) =>\n new HandleSignInCallbackController({\n useCase: dto.useCase,\n redirectUri: dto.redirectUri,\n });\n\n private readonly useCase = this.properties.useCase;\n private readonly redirectUri = this.properties.redirectUri;\n\n private constructor(\n private readonly properties: {\n useCase: HandleSignInCallbackUseCase;\n redirectUri: string;\n }\n ) {}\n\n public readonly execute = async (request: Request): Promise<TypedResponse<never>> => {\n const cookieHeader = getCookieHeaderFromRequest(request);\n\n if (!cookieHeader) {\n throw HandleSignInCallbackError.becauseNoCookieHeaderPresent();\n }\n\n // In some scenarios, like performing the sign-in callback within a Gitpod\n // environment, the load balancer rewrites the URL and uses `http` as the\n // protocol. Here, we make sure that when the `x-forwarded-proto` HTTP header\n // is present, we will replace `http` with `https` in the `callbackUri`.\n const isForwardedHttpsTraffic = request.headers.get('x-forwarded-proto') === 'https';\n\n const callbackUri = isForwardedHttpsTraffic\n ? request.url.replace('http', 'https')\n : request.url;\n\n const result = await this.useCase({\n cookieHeader,\n callbackUri,\n });\n\n return redirect(this.redirectUri, {\n headers: {\n 'Set-Cookie': result.cookieHeader,\n },\n });\n };\n}\n","export class HandleSignInCallbackError extends Error {\n public static readonly becauseNoCookieHeaderPresent = () =>\n new HandleSignInCallbackError({\n code: 1_665_388_541,\n message: `The authentication sign-in callback route can't be accessed without a valid cookie.`,\n });\n\n public readonly code = this.properties.code;\n public readonly cause = this.properties.cause;\n public readonly plainMessage = this.properties.message;\n\n private constructor(\n private readonly properties: {\n readonly code: number;\n readonly message: string;\n readonly cause?: Error;\n }\n ) {\n super(`#[${properties.code}] ${properties.message}`);\n }\n}\n","import { SessionStorage } from '@remix-run/node';\n\nimport { CreateLogtoAdapter } from '../../infrastructure/logto';\n\ntype SignInCallbackRequest = {\n readonly cookieHeader: string;\n readonly callbackUri: string;\n};\n\ntype SignInCallbackResponse = {\n readonly cookieHeader: string;\n};\n\nexport const makeHandleSignInCallbackUseCase =\n (deps: { createLogtoAdapter: CreateLogtoAdapter; sessionStorage: SessionStorage }) =>\n async (request: SignInCallbackRequest): Promise<SignInCallbackResponse> => {\n const { sessionStorage, createLogtoAdapter } = deps;\n\n const session = await sessionStorage.getSession(request.cookieHeader);\n\n const logto = createLogtoAdapter(session);\n\n const response = await logto.handleSignInCallback({\n callbackUri: request.callbackUri,\n });\n\n const cookieHeader = await sessionStorage.commitSession(response.session);\n\n return {\n cookieHeader,\n };\n };\n\nexport type HandleSignInCallbackUseCase = ReturnType<typeof makeHandleSignInCallbackUseCase>;\n","import { SessionStorage } from '@remix-run/node';\n\nimport { CreateLogtoAdapter } from '../../infrastructure/logto';\nimport { HandleSignOutController } from './HandleSignOutController';\nimport { makeHandleSignOutUseCase } from './HandleSignOutUseCase';\n\ntype HandleSignOutDto = {\n readonly redirectBackTo: string;\n};\n\ntype HandleSignOutDeps = {\n readonly createLogtoAdapter: CreateLogtoAdapter;\n readonly sessionStorage: SessionStorage;\n};\n\nexport const makeHandleSignOut =\n (dto: HandleSignOutDto, deps: HandleSignOutDeps) => async (request: Request) => {\n const { createLogtoAdapter, sessionStorage } = deps;\n\n const useCase = makeHandleSignOutUseCase({\n createLogtoAdapter,\n sessionStorage,\n });\n\n const controller = HandleSignOutController.fromDto({\n useCase,\n redirectUri: dto.redirectBackTo,\n });\n\n return controller.execute(request);\n };\n","import { redirect, TypedResponse } from '@remix-run/node';\n\nimport { getCookieHeaderFromRequest } from '../../framework/get-cookie-header-from-request';\nimport { HandleSignOutError } from './HandleSignOutError';\nimport type { HandleSignOutUseCase } from './HandleSignOutUseCase';\n\ntype HandleSignOutControllerDto = {\n readonly useCase: HandleSignOutUseCase;\n readonly redirectUri: string;\n};\n\nexport class HandleSignOutController {\n public static readonly fromDto = (dto: HandleSignOutControllerDto) =>\n new HandleSignOutController({\n useCase: dto.useCase,\n redirectUri: dto.redirectUri,\n });\n\n private readonly useCase = this.properties.useCase;\n private readonly redirectUri = this.properties.redirectUri;\n\n private constructor(\n private readonly properties: {\n useCase: HandleSignOutUseCase;\n redirectUri: string;\n }\n ) {}\n\n public readonly execute = async (request: Request): Promise<TypedResponse<never>> => {\n const cookieHeader = getCookieHeaderFromRequest(request);\n\n if (!cookieHeader) {\n throw HandleSignOutError.becauseNoCookieHeaderPresent();\n }\n\n const result = await this.useCase({\n cookieHeader,\n redirectUri: this.redirectUri,\n });\n\n return redirect(this.redirectUri, {\n headers: {\n 'Set-Cookie': result.cookieHeader,\n },\n });\n };\n}\n","export class HandleSignOutError extends Error {\n public static readonly becauseNoCookieHeaderPresent = () =>\n new HandleSignOutError({\n code: 1_665_388_713,\n message: `The authentication sign-out route can't be accessed without a valid cookie.`,\n });\n\n public readonly code = this.properties.code;\n public readonly cause = this.properties.cause;\n public readonly plainMessage = this.properties.message;\n\n private constructor(\n private readonly properties: {\n readonly code: number;\n readonly message: string;\n readonly cause?: Error;\n }\n ) {\n super(`#[${properties.code}] ${properties.message}`);\n }\n}\n","import { SessionStorage } from '@remix-run/node';\n\nimport { CreateLogtoAdapter } from '../../infrastructure/logto';\n\ntype SignOutRequest = {\n readonly cookieHeader: string | undefined;\n redirectUri: string;\n};\n\ntype SignOutResponse = {\n cookieHeader: string;\n readonly navigateToUrl: string;\n};\n\nexport const makeHandleSignOutUseCase =\n (deps: { createLogtoAdapter: CreateLogtoAdapter; sessionStorage: SessionStorage }) =>\n async (request: SignOutRequest): Promise<SignOutResponse> => {\n const { sessionStorage, createLogtoAdapter } = deps;\n\n const session = await sessionStorage.getSession(request.cookieHeader);\n\n const logto = createLogtoAdapter(session);\n\n const response = await logto.handleSignOut({\n redirectUri: request.redirectUri,\n });\n\n const cookieHeader = await sessionStorage.destroySession(session);\n\n return {\n cookieHeader,\n navigateToUrl: response.navigateToUrl,\n };\n };\n\nexport type HandleSignOutUseCase = ReturnType<typeof makeHandleSignOutUseCase>;\n","export class HandleAuthRoutesError extends Error {\n public static readonly becauseNoConfigForPath = (anticipatedPath: string) =>\n new HandleAuthRoutesError({\n code: 1_665_388_277,\n message: `No configuration available for path \"${anticipatedPath}\".`,\n });\n\n public static readonly becauseOfUnknownRoute = (anticipatedConfigKey: string) =>\n new HandleAuthRoutesError({\n code: 1_665_388_278,\n message: `The config key \"${anticipatedConfigKey}\" is invalid.`,\n });\n\n public readonly code = this.properties.code;\n public readonly cause = this.properties.cause;\n public readonly plainMessage = this.properties.message;\n\n private constructor(\n private readonly properties: {\n readonly code: number;\n readonly message: string;\n readonly cause?: Error;\n }\n ) {\n super(`#[${properties.code}] ${properties.message}`);\n }\n}\n"],"names":[],"version":3,"file":"index.js.map","sourceRoot":"../../../"}
1
+ {"mappings":"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","sources":["packages/remix/src/index.ts","packages/remix/src/infrastructure/logto/index.ts","packages/remix/src/infrastructure/logto/create-client.ts","packages/remix/src/infrastructure/logto/create-storage.ts","packages/remix/src/infrastructure/logto/get-context.ts","packages/remix/src/infrastructure/logto/handle-sign-in.ts","packages/remix/src/infrastructure/logto/handle-sign-in-callback.ts","packages/remix/src/infrastructure/logto/handle-sign-out.ts","packages/remix/src/useCases/getContext/index.ts","packages/remix/src/useCases/getContext/GetContextController.ts","packages/remix/src/framework/get-cookie-header-from-request.ts","packages/remix/src/useCases/getContext/GetContextUseCase.ts","packages/remix/src/useCases/handleAuthRoutes/index.ts","packages/remix/src/useCases/handleSignIn/index.ts","packages/remix/src/useCases/handleSignIn/HandleSignInController.ts","packages/remix/src/useCases/handleSignIn/HandleSignInUseCase.ts","packages/remix/src/useCases/handleSignInCallback/index.ts","packages/remix/src/useCases/handleSignInCallback/HandleSignInCallbackController.ts","packages/remix/src/useCases/handleSignInCallback/HandleSignInCallbackError.ts","packages/remix/src/useCases/handleSignInCallback/HandleSignInCallbackUseCase.ts","packages/remix/src/useCases/handleSignOut/index.ts","packages/remix/src/useCases/handleSignOut/HandleSignOutController.ts","packages/remix/src/useCases/handleSignOut/HandleSignOutError.ts","packages/remix/src/useCases/handleSignOut/HandleSignOutUseCase.ts","packages/remix/src/useCases/handleAuthRoutes/HandleAuthRoutesError.ts"],"sourcesContent":["import { GetContextParameters, LogtoConfig } from '@logto/node';\nimport { SessionStorage } from '@remix-run/node';\n\nimport { makeLogtoAdapter } from './infrastructure/logto';\nimport { makeGetContext } from './useCases/getContext';\nimport { makeHandleAuthRoutes } from './useCases/handleAuthRoutes';\n\ntype Config = Readonly<LogtoConfig> & {\n readonly baseUrl: string;\n};\n\nexport const makeLogtoRemix = (\n config: Config,\n deps: {\n sessionStorage: SessionStorage;\n }\n) => {\n const { sessionStorage } = deps;\n\n const { baseUrl } = config;\n\n const createLogtoAdapter = makeLogtoAdapter(config);\n\n return Object.freeze({\n handleAuthRoutes: makeHandleAuthRoutes({\n baseUrl,\n createLogtoAdapter,\n sessionStorage,\n }),\n\n getContext: (dto: GetContextParameters) =>\n makeGetContext(dto, {\n createLogtoAdapter,\n sessionStorage,\n }),\n });\n};\n\nexport { type LogtoContext } from '@logto/node';\n","import type { LogtoConfig } from '@logto/node';\nimport { Session } from '@remix-run/node';\n\nimport { makeLogtoClient } from './create-client';\nimport { createStorage } from './create-storage';\nimport { makeGetContext } from './get-context';\nimport { makeHandleSignIn } from './handle-sign-in';\nimport { makeHandleSignInCallback } from './handle-sign-in-callback';\nimport { makeHandleSignOut } from './handle-sign-out';\n\ntype MakeLogtoAdapterConfiguration = LogtoConfig;\n\nexport const makeLogtoAdapter = (config: MakeLogtoAdapterConfiguration) => (session: Session) => {\n const storage = createStorage(session);\n const createClient = makeLogtoClient(config, storage);\n\n return {\n handleSignIn: makeHandleSignIn({ storage, createClient }),\n handleSignInCallback: makeHandleSignInCallback({ storage, createClient }),\n handleSignOut: makeHandleSignOut({ createClient }),\n getContext: makeGetContext({ storage, createClient }),\n };\n};\n\nexport type CreateLogtoAdapter = ReturnType<typeof makeLogtoAdapter>;\n\nexport { type LogtoContext } from '@logto/node';\n","import LogtoClient, { LogtoConfig } from '@logto/node';\n\nimport { LogtoStorage } from './create-storage';\n\nexport const makeLogtoClient =\n (config: LogtoConfig, storage: LogtoStorage) =>\n // Have to deactivate the eslint rule here as the `LogtoClient`\n // awaits a `navigate` function.\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n (navigate: (url: string) => void = () => {}) => {\n return new LogtoClient(config, { storage, navigate });\n };\n\nexport type CreateLogtoClient = ReturnType<typeof makeLogtoClient>;\n\nexport { type LogtoConfig } from '@logto/node';\n","import { Storage, StorageKey } from '@logto/node';\nimport { Session } from '@remix-run/node';\n\nclass LogtoStorage implements Storage {\n public static readonly fromSession = (session: Session) => {\n return new LogtoStorage({ session });\n };\n\n public readonly session = this.properties.session;\n\n private constructor(\n private readonly properties: {\n session: Session;\n }\n ) {}\n\n public readonly setItem = async (key: StorageKey, value: string) => {\n this.session.set(key, value);\n };\n\n public readonly getItem = async (key: StorageKey) => {\n const itemExists = this.session.has(key);\n\n if (!itemExists) {\n return null;\n }\n\n return String(this.session.get(key));\n };\n\n public readonly removeItem = async (key: StorageKey) => {\n this.session.unset(key);\n };\n\n public readonly save = async () => {\n // Not required as the persistence happens in the integration layer\n };\n}\n\nexport const createStorage = (session: Session) => LogtoStorage.fromSession(session);\n\nexport type { LogtoStorage };\n","import { GetContextParameters, LogtoContext } from '@logto/node';\n\nimport { CreateLogtoClient } from './create-client';\nimport { LogtoStorage } from './create-storage';\n\ntype GetContextResponse = {\n readonly context: LogtoContext;\n};\n\nexport const makeGetContext =\n (deps: { storage: LogtoStorage; createClient: CreateLogtoClient }) =>\n async (request: GetContextParameters): Promise<GetContextResponse> => {\n const { storage, createClient } = deps;\n\n const client = createClient();\n\n const context = await client.getContext(request);\n\n return {\n context,\n };\n };\n","import { Session } from '@remix-run/node';\n\nimport { CreateLogtoClient } from './create-client';\nimport { LogtoStorage } from './create-storage';\n\ntype HandleSignInRequest = {\n readonly redirectUri: string;\n};\n\ntype HandleSignInResponse = {\n readonly session: Session;\n readonly navigateToUrl: string;\n};\n\nclass HandleSignInCommand {\n public static readonly fromDependencies = (dependencies: { createClient: CreateLogtoClient }) =>\n new HandleSignInCommand({ createClient: dependencies.createClient });\n\n private navigateToUrl = '/api/sign-in';\n\n private constructor(\n private readonly properties: {\n readonly createClient: CreateLogtoClient;\n }\n ) {}\n\n public async execute(request: HandleSignInRequest) {\n const { createClient } = this.properties;\n\n const client = createClient((url) => {\n this.navigateToUrl = url;\n });\n\n await client.signIn(request.redirectUri);\n\n return {\n navigateToUrl: this.navigateToUrl,\n };\n }\n}\n\nexport const makeHandleSignIn =\n (deps: { storage: LogtoStorage; createClient: CreateLogtoClient }) =>\n async (request: HandleSignInRequest): Promise<HandleSignInResponse> => {\n const { storage, createClient } = deps;\n\n const command = HandleSignInCommand.fromDependencies({ createClient });\n\n const { navigateToUrl } = await command.execute(request);\n\n return {\n session: storage.session,\n navigateToUrl,\n };\n };\n","import { Session } from '@remix-run/node';\n\nimport { CreateLogtoClient } from './create-client';\nimport { LogtoStorage } from './create-storage';\n\ntype HandleSignInCallbackRequest = {\n callbackUri: string;\n};\n\ntype HandleSignInCallbackResponse = {\n readonly session: Session;\n};\n\nexport const makeHandleSignInCallback =\n (deps: { storage: LogtoStorage; createClient: CreateLogtoClient }) =>\n async (request: HandleSignInCallbackRequest): Promise<HandleSignInCallbackResponse> => {\n const { storage, createClient } = deps;\n\n const client = createClient();\n\n await client.handleSignInCallback(request.callbackUri);\n\n return {\n session: storage.session,\n };\n };\n","import { CreateLogtoClient } from './create-client';\n\ntype HandleSignOutRequest = {\n readonly redirectUri: string;\n};\n\ntype HandleSignOutResponse = {\n readonly navigateToUrl: string;\n};\n\nclass HandleSignOutCommand {\n public static readonly fromDependencies = (dependencies: { createClient: CreateLogtoClient }) =>\n new HandleSignOutCommand({ createClient: dependencies.createClient });\n\n private navigateToUrl = '/api/sign-in';\n\n private constructor(\n private readonly properties: {\n readonly createClient: CreateLogtoClient;\n }\n ) {}\n\n public async execute(request: HandleSignOutRequest) {\n const { createClient } = this.properties;\n\n const client = createClient((url) => {\n this.navigateToUrl = url;\n });\n\n await client.signOut(request.redirectUri);\n\n return {\n navigateToUrl: this.navigateToUrl,\n };\n }\n}\n\nexport const makeHandleSignOut =\n (deps: { createClient: CreateLogtoClient }) =>\n async (request: HandleSignOutRequest): Promise<HandleSignOutResponse> => {\n const { createClient } = deps;\n\n const command = HandleSignOutCommand.fromDependencies({ createClient });\n\n return command.execute(request);\n };\n","import { GetContextParameters } from '@logto/node';\nimport { SessionStorage } from '@remix-run/node';\n\nimport { CreateLogtoAdapter } from '../../infrastructure/logto';\nimport { GetContextController } from './GetContextController';\nimport { makeGetContextUseCase } from './GetContextUseCase';\n\ntype HandleGetContextDeps = {\n readonly createLogtoAdapter: CreateLogtoAdapter;\n readonly sessionStorage: SessionStorage;\n};\n\nexport const makeGetContext =\n (dto: GetContextParameters, deps: HandleGetContextDeps) => async (request: Request) => {\n const { createLogtoAdapter, sessionStorage } = deps;\n\n const useCase = makeGetContextUseCase({\n createLogtoAdapter,\n sessionStorage,\n });\n\n const controller = GetContextController.fromDto({\n useCase,\n ...dto,\n });\n\n return controller.execute(request);\n };\n","import { GetContextParameters, LogtoContext } from '@logto/node';\n\nimport { getCookieHeaderFromRequest } from '../../framework/get-cookie-header-from-request';\nimport type { GetContextUseCase } from './GetContextUseCase';\n\ntype GetContextControllerDto = GetContextParameters & {\n readonly useCase: GetContextUseCase;\n};\n\nexport class GetContextController {\n public static readonly fromDto = (dto: GetContextControllerDto) => new GetContextController(dto);\n\n private readonly useCase = this.properties.useCase;\n private constructor(\n private readonly properties: GetContextParameters & {\n useCase: GetContextUseCase;\n }\n ) {}\n\n public readonly execute = async (request: Request): Promise<LogtoContext> => {\n const cookieHeader = getCookieHeaderFromRequest(request);\n\n const result = await this.useCase({\n cookieHeader: cookieHeader ?? undefined,\n ...this.properties,\n });\n\n return result.context;\n };\n}\n","export const getCookieHeaderFromRequest = (request: Request) => request.headers.get('Cookie');\n","import { GetContextParameters } from '@logto/node';\nimport { SessionStorage } from '@remix-run/node';\n\nimport { CreateLogtoAdapter, LogtoContext } from '../../infrastructure/logto';\n\ntype GetContextRequest = GetContextParameters & {\n readonly cookieHeader: string | undefined;\n};\n\ntype GetContextResponse = {\n context: Readonly<LogtoContext>;\n};\n\nexport const makeGetContextUseCase =\n (deps: { createLogtoAdapter: CreateLogtoAdapter; sessionStorage: SessionStorage }) =>\n async (request: GetContextRequest): Promise<GetContextResponse> => {\n const { sessionStorage, createLogtoAdapter } = deps;\n\n const session = await sessionStorage.getSession(request.cookieHeader);\n\n const logto = createLogtoAdapter(session);\n\n const response = await logto.getContext(request);\n\n return {\n context: response.context,\n };\n };\n\nexport type GetContextUseCase = ReturnType<typeof makeGetContextUseCase>;\n","import { LoaderFunction, SessionStorage } from '@remix-run/node';\n\nimport { CreateLogtoAdapter } from '../../infrastructure/logto';\nimport { makeHandleSignIn } from '../handleSignIn';\nimport { makeHandleSignInCallback } from '../handleSignInCallback';\nimport { makeHandleSignOut } from '../handleSignOut';\nimport { HandleAuthRoutesError } from './HandleAuthRoutesError';\n\ntype AuthRouteConfig = {\n readonly path: string;\n readonly redirectBackTo: string;\n};\n\ntype PossibleRouteTypes = 'sign-in' | 'sign-in-callback' | 'sign-out';\n\ntype HandleAuthRoutesDto = Record<PossibleRouteTypes, AuthRouteConfig>;\n\ntype MakeHandleAuthRoutesDto = {\n readonly baseUrl: string;\n readonly createLogtoAdapter: CreateLogtoAdapter;\n readonly sessionStorage: SessionStorage;\n};\n\nexport const makeHandleAuthRoutes =\n (deps: MakeHandleAuthRoutesDto) =>\n (dto: HandleAuthRoutesDto): LoaderFunction =>\n async ({ request }) => {\n const anticipatedPath = new URL(request.url).pathname;\n\n /* eslint-disable no-restricted-syntax */\n const configKey = Object.keys(dto).find(\n (type) => dto[type as PossibleRouteTypes].path === anticipatedPath\n ) as keyof HandleAuthRoutesDto;\n\n const configExists = Boolean(configKey);\n /* eslint-enable no-restricted-syntax */\n\n if (!configExists) {\n throw HandleAuthRoutesError.becauseNoConfigForPath(anticipatedPath);\n }\n\n const { sessionStorage, createLogtoAdapter, baseUrl } = deps;\n\n const config = dto[configKey];\n\n switch (configKey) {\n case 'sign-in': {\n const handler = makeHandleSignIn(\n {\n redirectBackTo: `${baseUrl}${config.redirectBackTo}`,\n },\n { sessionStorage, createLogtoAdapter }\n );\n\n return handler(request);\n }\n\n case 'sign-in-callback': {\n const handler = makeHandleSignInCallback(\n {\n redirectBackTo: `${baseUrl}${config.redirectBackTo}`,\n },\n { sessionStorage, createLogtoAdapter }\n );\n\n return handler(request);\n }\n\n case 'sign-out': {\n const handler = makeHandleSignOut(\n {\n redirectBackTo: `${baseUrl}${config.redirectBackTo}`,\n },\n { sessionStorage, createLogtoAdapter }\n );\n\n return handler(request);\n }\n\n default: {\n throw HandleAuthRoutesError.becauseOfUnknownRoute(configKey);\n }\n }\n };\n","import { SessionStorage } from '@remix-run/node';\n\nimport { CreateLogtoAdapter } from '../../infrastructure/logto';\nimport { HandleSignInController } from './HandleSignInController';\nimport { makeHandleSignInUseCase } from './HandleSignInUseCase';\n\ntype HandleSignInDto = {\n readonly redirectBackTo: string;\n};\n\ntype HandleSignInDeps = {\n readonly createLogtoAdapter: CreateLogtoAdapter;\n readonly sessionStorage: SessionStorage;\n};\n\nexport const makeHandleSignIn =\n (dto: HandleSignInDto, deps: HandleSignInDeps) => async (request: Request) => {\n const { createLogtoAdapter, sessionStorage } = deps;\n\n const useCase = makeHandleSignInUseCase({\n createLogtoAdapter,\n sessionStorage,\n });\n\n const controller = HandleSignInController.fromDto({\n useCase,\n redirectUri: dto.redirectBackTo,\n });\n\n return controller.execute(request);\n };\n","import { redirect, TypedResponse } from '@remix-run/node';\n\nimport { getCookieHeaderFromRequest } from '../../framework/get-cookie-header-from-request';\nimport type { HandleSignInUseCase } from './HandleSignInUseCase';\n\ntype HandleSignInControllerDto = {\n readonly redirectUri: string;\n readonly useCase: HandleSignInUseCase;\n};\n\nexport class HandleSignInController {\n public static readonly fromDto = (dto: HandleSignInControllerDto) =>\n new HandleSignInController({\n useCase: dto.useCase,\n redirectUri: dto.redirectUri,\n });\n\n private readonly useCase = this.properties.useCase;\n private readonly redirectUri = this.properties.redirectUri;\n private constructor(\n private readonly properties: {\n redirectUri: string;\n useCase: HandleSignInUseCase;\n }\n ) {}\n\n public readonly execute = async (request: Request): Promise<TypedResponse<never>> => {\n const cookieHeader = getCookieHeaderFromRequest(request);\n const { redirectUri } = this;\n\n const result = await this.useCase({\n cookieHeader: cookieHeader ?? undefined,\n redirectUri,\n });\n\n return redirect(result.navigateToUrl, {\n headers: {\n 'Set-Cookie': result.cookieHeader,\n },\n });\n };\n}\n","import { SessionStorage } from '@remix-run/node';\n\nimport { CreateLogtoAdapter } from '../../infrastructure/logto';\n\ntype SignInRequest = {\n readonly cookieHeader: string | undefined;\n readonly redirectUri: string;\n};\n\ntype SignInResponse = {\n readonly cookieHeader: string;\n readonly navigateToUrl: string;\n};\n\nexport const makeHandleSignInUseCase =\n (deps: { createLogtoAdapter: CreateLogtoAdapter; sessionStorage: SessionStorage }) =>\n async (request: SignInRequest): Promise<SignInResponse> => {\n const { sessionStorage, createLogtoAdapter } = deps;\n\n const session = await sessionStorage.getSession(request.cookieHeader);\n\n const logto = createLogtoAdapter(session);\n\n const response = await logto.handleSignIn({\n redirectUri: request.redirectUri,\n });\n\n const cookieHeader = await sessionStorage.commitSession(response.session);\n\n return {\n cookieHeader,\n navigateToUrl: response.navigateToUrl,\n };\n };\n\nexport type HandleSignInUseCase = ReturnType<typeof makeHandleSignInUseCase>;\n","import { SessionStorage } from '@remix-run/node';\n\nimport { CreateLogtoAdapter } from '../../infrastructure/logto';\nimport { HandleSignInCallbackController } from './HandleSignInCallbackController';\nimport { makeHandleSignInCallbackUseCase } from './HandleSignInCallbackUseCase';\n\ntype HandleSignInCallbackDto = {\n readonly redirectBackTo: string;\n};\n\ntype HandleSignInCallbackDeps = {\n readonly createLogtoAdapter: CreateLogtoAdapter;\n readonly sessionStorage: SessionStorage;\n};\n\nexport const makeHandleSignInCallback =\n (dto: HandleSignInCallbackDto, deps: HandleSignInCallbackDeps) => async (request: Request) => {\n const { createLogtoAdapter, sessionStorage } = deps;\n\n const useCase = makeHandleSignInCallbackUseCase({\n createLogtoAdapter,\n sessionStorage,\n });\n\n const controller = HandleSignInCallbackController.fromDto({\n useCase,\n redirectUri: dto.redirectBackTo,\n });\n\n return controller.execute(request);\n };\n","import { redirect, TypedResponse } from '@remix-run/node';\n\nimport { getCookieHeaderFromRequest } from '../../framework/get-cookie-header-from-request';\nimport { HandleSignInCallbackError } from './HandleSignInCallbackError';\nimport type { HandleSignInCallbackUseCase } from './HandleSignInCallbackUseCase';\n\ntype HandleSignInCallbackControllerDto = {\n readonly useCase: HandleSignInCallbackUseCase;\n readonly redirectUri: string;\n};\n\nexport class HandleSignInCallbackController {\n public static readonly fromDto = (dto: HandleSignInCallbackControllerDto) =>\n new HandleSignInCallbackController({\n useCase: dto.useCase,\n redirectUri: dto.redirectUri,\n });\n\n private readonly useCase = this.properties.useCase;\n private readonly redirectUri = this.properties.redirectUri;\n\n private constructor(\n private readonly properties: {\n useCase: HandleSignInCallbackUseCase;\n redirectUri: string;\n }\n ) {}\n\n public readonly execute = async (request: Request): Promise<TypedResponse<never>> => {\n const cookieHeader = getCookieHeaderFromRequest(request);\n\n if (!cookieHeader) {\n throw HandleSignInCallbackError.becauseNoCookieHeaderPresent();\n }\n\n // In some scenarios, like performing the sign-in callback within a Gitpod\n // environment, the load balancer rewrites the URL and uses `http` as the\n // protocol. Here, we make sure that when the `x-forwarded-proto` HTTP header\n // is present, we will replace `http` with `https` in the `callbackUri`.\n const isForwardedHttpsTraffic = request.headers.get('x-forwarded-proto') === 'https';\n\n const callbackUri = isForwardedHttpsTraffic\n ? request.url.replace('http', 'https')\n : request.url;\n\n const result = await this.useCase({\n cookieHeader,\n callbackUri,\n });\n\n return redirect(this.redirectUri, {\n headers: {\n 'Set-Cookie': result.cookieHeader,\n },\n });\n };\n}\n","export class HandleSignInCallbackError extends Error {\n public static readonly becauseNoCookieHeaderPresent = () =>\n new HandleSignInCallbackError({\n code: 1_665_388_541,\n message: `The authentication sign-in callback route can't be accessed without a valid cookie.`,\n });\n\n public readonly code = this.properties.code;\n public readonly cause = this.properties.cause;\n public readonly plainMessage = this.properties.message;\n\n private constructor(\n private readonly properties: {\n readonly code: number;\n readonly message: string;\n readonly cause?: Error;\n }\n ) {\n super(`#[${properties.code}] ${properties.message}`);\n }\n}\n","import { SessionStorage } from '@remix-run/node';\n\nimport { CreateLogtoAdapter } from '../../infrastructure/logto';\n\ntype SignInCallbackRequest = {\n readonly cookieHeader: string;\n readonly callbackUri: string;\n};\n\ntype SignInCallbackResponse = {\n readonly cookieHeader: string;\n};\n\nexport const makeHandleSignInCallbackUseCase =\n (deps: { createLogtoAdapter: CreateLogtoAdapter; sessionStorage: SessionStorage }) =>\n async (request: SignInCallbackRequest): Promise<SignInCallbackResponse> => {\n const { sessionStorage, createLogtoAdapter } = deps;\n\n const session = await sessionStorage.getSession(request.cookieHeader);\n\n const logto = createLogtoAdapter(session);\n\n const response = await logto.handleSignInCallback({\n callbackUri: request.callbackUri,\n });\n\n const cookieHeader = await sessionStorage.commitSession(response.session);\n\n return {\n cookieHeader,\n };\n };\n\nexport type HandleSignInCallbackUseCase = ReturnType<typeof makeHandleSignInCallbackUseCase>;\n","import { SessionStorage } from '@remix-run/node';\n\nimport { CreateLogtoAdapter } from '../../infrastructure/logto';\nimport { HandleSignOutController } from './HandleSignOutController';\nimport { makeHandleSignOutUseCase } from './HandleSignOutUseCase';\n\ntype HandleSignOutDto = {\n readonly redirectBackTo: string;\n};\n\ntype HandleSignOutDeps = {\n readonly createLogtoAdapter: CreateLogtoAdapter;\n readonly sessionStorage: SessionStorage;\n};\n\nexport const makeHandleSignOut =\n (dto: HandleSignOutDto, deps: HandleSignOutDeps) => async (request: Request) => {\n const { createLogtoAdapter, sessionStorage } = deps;\n\n const useCase = makeHandleSignOutUseCase({\n createLogtoAdapter,\n sessionStorage,\n });\n\n const controller = HandleSignOutController.fromDto({\n useCase,\n redirectUri: dto.redirectBackTo,\n });\n\n return controller.execute(request);\n };\n","import { redirect, TypedResponse } from '@remix-run/node';\n\nimport { getCookieHeaderFromRequest } from '../../framework/get-cookie-header-from-request';\nimport { HandleSignOutError } from './HandleSignOutError';\nimport type { HandleSignOutUseCase } from './HandleSignOutUseCase';\n\ntype HandleSignOutControllerDto = {\n readonly useCase: HandleSignOutUseCase;\n readonly redirectUri: string;\n};\n\nexport class HandleSignOutController {\n public static readonly fromDto = (dto: HandleSignOutControllerDto) =>\n new HandleSignOutController({\n useCase: dto.useCase,\n redirectUri: dto.redirectUri,\n });\n\n private readonly useCase = this.properties.useCase;\n private readonly redirectUri = this.properties.redirectUri;\n\n private constructor(\n private readonly properties: {\n useCase: HandleSignOutUseCase;\n redirectUri: string;\n }\n ) {}\n\n public readonly execute = async (request: Request): Promise<TypedResponse<never>> => {\n const cookieHeader = getCookieHeaderFromRequest(request);\n\n if (!cookieHeader) {\n throw HandleSignOutError.becauseNoCookieHeaderPresent();\n }\n\n const result = await this.useCase({\n cookieHeader,\n redirectUri: this.redirectUri,\n });\n\n return redirect(result.navigateToUrl, {\n headers: {\n 'Set-Cookie': result.cookieHeader,\n },\n });\n };\n}\n","export class HandleSignOutError extends Error {\n public static readonly becauseNoCookieHeaderPresent = () =>\n new HandleSignOutError({\n code: 1_665_388_713,\n message: `The authentication sign-out route can't be accessed without a valid cookie.`,\n });\n\n public readonly code = this.properties.code;\n public readonly cause = this.properties.cause;\n public readonly plainMessage = this.properties.message;\n\n private constructor(\n private readonly properties: {\n readonly code: number;\n readonly message: string;\n readonly cause?: Error;\n }\n ) {\n super(`#[${properties.code}] ${properties.message}`);\n }\n}\n","import { SessionStorage } from '@remix-run/node';\n\nimport { CreateLogtoAdapter } from '../../infrastructure/logto';\n\ntype SignOutRequest = {\n readonly cookieHeader: string | undefined;\n redirectUri: string;\n};\n\ntype SignOutResponse = {\n cookieHeader: string;\n readonly navigateToUrl: string;\n};\n\nexport const makeHandleSignOutUseCase =\n (deps: { createLogtoAdapter: CreateLogtoAdapter; sessionStorage: SessionStorage }) =>\n async (request: SignOutRequest): Promise<SignOutResponse> => {\n const { sessionStorage, createLogtoAdapter } = deps;\n\n const session = await sessionStorage.getSession(request.cookieHeader);\n\n const logto = createLogtoAdapter(session);\n\n const response = await logto.handleSignOut({\n redirectUri: request.redirectUri,\n });\n\n const cookieHeader = await sessionStorage.destroySession(session);\n\n return {\n cookieHeader,\n navigateToUrl: response.navigateToUrl,\n };\n };\n\nexport type HandleSignOutUseCase = ReturnType<typeof makeHandleSignOutUseCase>;\n","export class HandleAuthRoutesError extends Error {\n public static readonly becauseNoConfigForPath = (anticipatedPath: string) =>\n new HandleAuthRoutesError({\n code: 1_665_388_277,\n message: `No configuration available for path \"${anticipatedPath}\".`,\n });\n\n public static readonly becauseOfUnknownRoute = (anticipatedConfigKey: string) =>\n new HandleAuthRoutesError({\n code: 1_665_388_278,\n message: `The config key \"${anticipatedConfigKey}\" is invalid.`,\n });\n\n public readonly code = this.properties.code;\n public readonly cause = this.properties.cause;\n public readonly plainMessage = this.properties.message;\n\n private constructor(\n private readonly properties: {\n readonly code: number;\n readonly message: string;\n readonly cause?: Error;\n }\n ) {\n super(`#[${properties.code}] ${properties.message}`);\n }\n}\n"],"names":[],"version":3,"file":"index.js.map","sourceRoot":"../../../"}
@@ -0,0 +1,29 @@
1
+ import { GetContextParameters, LogtoConfig } from "@logto/node";
2
+ import { SessionStorage } from "@remix-run/node";
3
+ export { type LogtoConfig } from '@logto/node';
4
+ export { type LogtoContext } from '@logto/node';
5
+ type Config = Readonly<LogtoConfig> & {
6
+ readonly baseUrl: string;
7
+ };
8
+ export const makeLogtoRemix: (config: Config, deps: {
9
+ sessionStorage: SessionStorage;
10
+ }) => Readonly<{
11
+ handleAuthRoutes: (dto: {
12
+ "sign-in": {
13
+ readonly path: string;
14
+ readonly redirectBackTo: string;
15
+ };
16
+ "sign-in-callback": {
17
+ readonly path: string;
18
+ readonly redirectBackTo: string;
19
+ };
20
+ "sign-out": {
21
+ readonly path: string;
22
+ readonly redirectBackTo: string;
23
+ };
24
+ }) => import("@remix-run/node").LoaderFunction;
25
+ getContext: (dto: GetContextParameters) => (request: Request) => Promise<import("@logto/node").LogtoContext>;
26
+ }>;
27
+ export { type LogtoContext } from '@logto/node';
28
+
29
+ //# sourceMappingURL=index.d.ts.map
@@ -44,7 +44,7 @@ const $eabaa16027fa75f6$export$d184a47a971dd4b9 = (session)=>$eabaa16027fa75f6$v
44
44
  const $9871ffc29633cf75$export$f4d9bb4cf5d2b40c = (deps)=>async (request)=>{
45
45
  const { storage: storage , createClient: createClient } = deps;
46
46
  const client = createClient();
47
- const context = await client.getContext(request.includeAccessToken);
47
+ const context = await client.getContext(request);
48
48
  return {
49
49
  context: context
50
50
  };
@@ -148,20 +148,15 @@ const $b813d30ec7910eef$export$5c6fae4c79d686e4 = (request)=>request.headers.get
148
148
 
149
149
 
150
150
  class $a734929d0f00259a$export$32386402b3f0a45 {
151
- static fromDto = (dto)=>new $a734929d0f00259a$export$32386402b3f0a45({
152
- useCase: dto.useCase,
153
- includeAccessToken: dto.includeAccessToken ?? false
154
- });
151
+ static fromDto = (dto)=>new $a734929d0f00259a$export$32386402b3f0a45(dto);
155
152
  constructor(properties){
156
153
  this.properties = properties;
157
154
  this.useCase = this.properties.useCase;
158
- this.includeAccessToken = this.properties.includeAccessToken;
159
155
  this.execute = async (request)=>{
160
156
  const cookieHeader = (0, $b813d30ec7910eef$export$5c6fae4c79d686e4)(request);
161
- const { includeAccessToken: includeAccessToken } = this;
162
157
  const result = await this.useCase({
163
158
  cookieHeader: cookieHeader ?? undefined,
164
- includeAccessToken: includeAccessToken
159
+ ...this.properties
165
160
  });
166
161
  return result.context;
167
162
  };
@@ -173,9 +168,7 @@ const $8b64182c9ca2d96b$export$53ae38c062671653 = (deps)=>async (request)=>{
173
168
  const { sessionStorage: sessionStorage , createLogtoAdapter: createLogtoAdapter } = deps;
174
169
  const session = await sessionStorage.getSession(request.cookieHeader);
175
170
  const logto = createLogtoAdapter(session);
176
- const response = await logto.getContext({
177
- includeAccessToken: request.includeAccessToken
178
- });
171
+ const response = await logto.getContext(request);
179
172
  return {
180
173
  context: response.context
181
174
  };
@@ -190,7 +183,7 @@ const $5fd42984a21638c8$export$f4d9bb4cf5d2b40c = (dto, deps)=>async (request)=>
190
183
  });
191
184
  const controller = (0, $a734929d0f00259a$export$32386402b3f0a45).fromDto({
192
185
  useCase: useCase,
193
- includeAccessToken: dto.includeAccessToken
186
+ ...dto
194
187
  });
195
188
  return controller.execute(request);
196
189
  };
@@ -363,7 +356,7 @@ class $13339b9c4cafe264$export$543cea0b68ca8887 {
363
356
  cookieHeader: cookieHeader,
364
357
  redirectUri: this.redirectUri
365
358
  });
366
- return (0, $7ShZa$redirect)(this.redirectUri, {
359
+ return (0, $7ShZa$redirect)(result.navigateToUrl, {
367
360
  headers: {
368
361
  "Set-Cookie": result.cookieHeader
369
362
  }
@@ -441,23 +434,23 @@ const $1043eb6460a48bdc$export$d6e32a8c2b1ad7f3 = (deps)=>(dto)=>async ({ reques
441
434
  }
442
435
  case "sign-in-callback":
443
436
  {
444
- const handler1 = (0, $ac2413e7e33dffd6$export$9c07365b51e93ba3)({
437
+ const handler = (0, $ac2413e7e33dffd6$export$9c07365b51e93ba3)({
445
438
  redirectBackTo: `${baseUrl}${config.redirectBackTo}`
446
439
  }, {
447
440
  sessionStorage: sessionStorage,
448
441
  createLogtoAdapter: createLogtoAdapter
449
442
  });
450
- return handler1(request);
443
+ return handler(request);
451
444
  }
452
445
  case "sign-out":
453
446
  {
454
- const handler2 = (0, $8b8766e059fbc2db$export$89f18ff1488dade0)({
447
+ const handler = (0, $8b8766e059fbc2db$export$89f18ff1488dade0)({
455
448
  redirectBackTo: `${baseUrl}${config.redirectBackTo}`
456
449
  }, {
457
450
  sessionStorage: sessionStorage,
458
451
  createLogtoAdapter: createLogtoAdapter
459
452
  });
460
- return handler2(request);
453
+ return handler(request);
461
454
  }
462
455
  default:
463
456
  throw (0, $2c6f4bda3966e0b7$export$fcbf49abe9908796).becauseOfUnknownRoute(configKey);
@@ -484,4 +477,4 @@ const $cbb6646cee16f748$export$502a4d54d411a9fd = (config, deps)=>{
484
477
 
485
478
 
486
479
  export {$cbb6646cee16f748$export$502a4d54d411a9fd as makeLogtoRemix};
487
- //# sourceMappingURL=module.js.map
480
+ //# sourceMappingURL=module.mjs.map
@@ -0,0 +1 @@
1
+ {"mappings":"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","sources":["packages/remix/src/index.ts","packages/remix/src/infrastructure/logto/index.ts","packages/remix/src/infrastructure/logto/create-client.ts","packages/remix/src/infrastructure/logto/create-storage.ts","packages/remix/src/infrastructure/logto/get-context.ts","packages/remix/src/infrastructure/logto/handle-sign-in.ts","packages/remix/src/infrastructure/logto/handle-sign-in-callback.ts","packages/remix/src/infrastructure/logto/handle-sign-out.ts","packages/remix/src/useCases/getContext/index.ts","packages/remix/src/useCases/getContext/GetContextController.ts","packages/remix/src/framework/get-cookie-header-from-request.ts","packages/remix/src/useCases/getContext/GetContextUseCase.ts","packages/remix/src/useCases/handleAuthRoutes/index.ts","packages/remix/src/useCases/handleSignIn/index.ts","packages/remix/src/useCases/handleSignIn/HandleSignInController.ts","packages/remix/src/useCases/handleSignIn/HandleSignInUseCase.ts","packages/remix/src/useCases/handleSignInCallback/index.ts","packages/remix/src/useCases/handleSignInCallback/HandleSignInCallbackController.ts","packages/remix/src/useCases/handleSignInCallback/HandleSignInCallbackError.ts","packages/remix/src/useCases/handleSignInCallback/HandleSignInCallbackUseCase.ts","packages/remix/src/useCases/handleSignOut/index.ts","packages/remix/src/useCases/handleSignOut/HandleSignOutController.ts","packages/remix/src/useCases/handleSignOut/HandleSignOutError.ts","packages/remix/src/useCases/handleSignOut/HandleSignOutUseCase.ts","packages/remix/src/useCases/handleAuthRoutes/HandleAuthRoutesError.ts"],"sourcesContent":["import { GetContextParameters, LogtoConfig } from '@logto/node';\nimport { SessionStorage } from '@remix-run/node';\n\nimport { makeLogtoAdapter } from './infrastructure/logto';\nimport { makeGetContext } from './useCases/getContext';\nimport { makeHandleAuthRoutes } from './useCases/handleAuthRoutes';\n\ntype Config = Readonly<LogtoConfig> & {\n readonly baseUrl: string;\n};\n\nexport const makeLogtoRemix = (\n config: Config,\n deps: {\n sessionStorage: SessionStorage;\n }\n) => {\n const { sessionStorage } = deps;\n\n const { baseUrl } = config;\n\n const createLogtoAdapter = makeLogtoAdapter(config);\n\n return Object.freeze({\n handleAuthRoutes: makeHandleAuthRoutes({\n baseUrl,\n createLogtoAdapter,\n sessionStorage,\n }),\n\n getContext: (dto: GetContextParameters) =>\n makeGetContext(dto, {\n createLogtoAdapter,\n sessionStorage,\n }),\n });\n};\n\nexport { type LogtoContext } from '@logto/node';\n","import type { LogtoConfig } from '@logto/node';\nimport { Session } from '@remix-run/node';\n\nimport { makeLogtoClient } from './create-client';\nimport { createStorage } from './create-storage';\nimport { makeGetContext } from './get-context';\nimport { makeHandleSignIn } from './handle-sign-in';\nimport { makeHandleSignInCallback } from './handle-sign-in-callback';\nimport { makeHandleSignOut } from './handle-sign-out';\n\ntype MakeLogtoAdapterConfiguration = LogtoConfig;\n\nexport const makeLogtoAdapter = (config: MakeLogtoAdapterConfiguration) => (session: Session) => {\n const storage = createStorage(session);\n const createClient = makeLogtoClient(config, storage);\n\n return {\n handleSignIn: makeHandleSignIn({ storage, createClient }),\n handleSignInCallback: makeHandleSignInCallback({ storage, createClient }),\n handleSignOut: makeHandleSignOut({ createClient }),\n getContext: makeGetContext({ storage, createClient }),\n };\n};\n\nexport type CreateLogtoAdapter = ReturnType<typeof makeLogtoAdapter>;\n\nexport { type LogtoContext } from '@logto/node';\n","import LogtoClient, { LogtoConfig } from '@logto/node';\n\nimport { LogtoStorage } from './create-storage';\n\nexport const makeLogtoClient =\n (config: LogtoConfig, storage: LogtoStorage) =>\n // Have to deactivate the eslint rule here as the `LogtoClient`\n // awaits a `navigate` function.\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n (navigate: (url: string) => void = () => {}) => {\n return new LogtoClient(config, { storage, navigate });\n };\n\nexport type CreateLogtoClient = ReturnType<typeof makeLogtoClient>;\n\nexport { type LogtoConfig } from '@logto/node';\n","import { Storage, StorageKey } from '@logto/node';\nimport { Session } from '@remix-run/node';\n\nclass LogtoStorage implements Storage {\n public static readonly fromSession = (session: Session) => {\n return new LogtoStorage({ session });\n };\n\n public readonly session = this.properties.session;\n\n private constructor(\n private readonly properties: {\n session: Session;\n }\n ) {}\n\n public readonly setItem = async (key: StorageKey, value: string) => {\n this.session.set(key, value);\n };\n\n public readonly getItem = async (key: StorageKey) => {\n const itemExists = this.session.has(key);\n\n if (!itemExists) {\n return null;\n }\n\n return String(this.session.get(key));\n };\n\n public readonly removeItem = async (key: StorageKey) => {\n this.session.unset(key);\n };\n\n public readonly save = async () => {\n // Not required as the persistence happens in the integration layer\n };\n}\n\nexport const createStorage = (session: Session) => LogtoStorage.fromSession(session);\n\nexport type { LogtoStorage };\n","import { GetContextParameters, LogtoContext } from '@logto/node';\n\nimport { CreateLogtoClient } from './create-client';\nimport { LogtoStorage } from './create-storage';\n\ntype GetContextResponse = {\n readonly context: LogtoContext;\n};\n\nexport const makeGetContext =\n (deps: { storage: LogtoStorage; createClient: CreateLogtoClient }) =>\n async (request: GetContextParameters): Promise<GetContextResponse> => {\n const { storage, createClient } = deps;\n\n const client = createClient();\n\n const context = await client.getContext(request);\n\n return {\n context,\n };\n };\n","import { Session } from '@remix-run/node';\n\nimport { CreateLogtoClient } from './create-client';\nimport { LogtoStorage } from './create-storage';\n\ntype HandleSignInRequest = {\n readonly redirectUri: string;\n};\n\ntype HandleSignInResponse = {\n readonly session: Session;\n readonly navigateToUrl: string;\n};\n\nclass HandleSignInCommand {\n public static readonly fromDependencies = (dependencies: { createClient: CreateLogtoClient }) =>\n new HandleSignInCommand({ createClient: dependencies.createClient });\n\n private navigateToUrl = '/api/sign-in';\n\n private constructor(\n private readonly properties: {\n readonly createClient: CreateLogtoClient;\n }\n ) {}\n\n public async execute(request: HandleSignInRequest) {\n const { createClient } = this.properties;\n\n const client = createClient((url) => {\n this.navigateToUrl = url;\n });\n\n await client.signIn(request.redirectUri);\n\n return {\n navigateToUrl: this.navigateToUrl,\n };\n }\n}\n\nexport const makeHandleSignIn =\n (deps: { storage: LogtoStorage; createClient: CreateLogtoClient }) =>\n async (request: HandleSignInRequest): Promise<HandleSignInResponse> => {\n const { storage, createClient } = deps;\n\n const command = HandleSignInCommand.fromDependencies({ createClient });\n\n const { navigateToUrl } = await command.execute(request);\n\n return {\n session: storage.session,\n navigateToUrl,\n };\n };\n","import { Session } from '@remix-run/node';\n\nimport { CreateLogtoClient } from './create-client';\nimport { LogtoStorage } from './create-storage';\n\ntype HandleSignInCallbackRequest = {\n callbackUri: string;\n};\n\ntype HandleSignInCallbackResponse = {\n readonly session: Session;\n};\n\nexport const makeHandleSignInCallback =\n (deps: { storage: LogtoStorage; createClient: CreateLogtoClient }) =>\n async (request: HandleSignInCallbackRequest): Promise<HandleSignInCallbackResponse> => {\n const { storage, createClient } = deps;\n\n const client = createClient();\n\n await client.handleSignInCallback(request.callbackUri);\n\n return {\n session: storage.session,\n };\n };\n","import { CreateLogtoClient } from './create-client';\n\ntype HandleSignOutRequest = {\n readonly redirectUri: string;\n};\n\ntype HandleSignOutResponse = {\n readonly navigateToUrl: string;\n};\n\nclass HandleSignOutCommand {\n public static readonly fromDependencies = (dependencies: { createClient: CreateLogtoClient }) =>\n new HandleSignOutCommand({ createClient: dependencies.createClient });\n\n private navigateToUrl = '/api/sign-in';\n\n private constructor(\n private readonly properties: {\n readonly createClient: CreateLogtoClient;\n }\n ) {}\n\n public async execute(request: HandleSignOutRequest) {\n const { createClient } = this.properties;\n\n const client = createClient((url) => {\n this.navigateToUrl = url;\n });\n\n await client.signOut(request.redirectUri);\n\n return {\n navigateToUrl: this.navigateToUrl,\n };\n }\n}\n\nexport const makeHandleSignOut =\n (deps: { createClient: CreateLogtoClient }) =>\n async (request: HandleSignOutRequest): Promise<HandleSignOutResponse> => {\n const { createClient } = deps;\n\n const command = HandleSignOutCommand.fromDependencies({ createClient });\n\n return command.execute(request);\n };\n","import { GetContextParameters } from '@logto/node';\nimport { SessionStorage } from '@remix-run/node';\n\nimport { CreateLogtoAdapter } from '../../infrastructure/logto';\nimport { GetContextController } from './GetContextController';\nimport { makeGetContextUseCase } from './GetContextUseCase';\n\ntype HandleGetContextDeps = {\n readonly createLogtoAdapter: CreateLogtoAdapter;\n readonly sessionStorage: SessionStorage;\n};\n\nexport const makeGetContext =\n (dto: GetContextParameters, deps: HandleGetContextDeps) => async (request: Request) => {\n const { createLogtoAdapter, sessionStorage } = deps;\n\n const useCase = makeGetContextUseCase({\n createLogtoAdapter,\n sessionStorage,\n });\n\n const controller = GetContextController.fromDto({\n useCase,\n ...dto,\n });\n\n return controller.execute(request);\n };\n","import { GetContextParameters, LogtoContext } from '@logto/node';\n\nimport { getCookieHeaderFromRequest } from '../../framework/get-cookie-header-from-request';\nimport type { GetContextUseCase } from './GetContextUseCase';\n\ntype GetContextControllerDto = GetContextParameters & {\n readonly useCase: GetContextUseCase;\n};\n\nexport class GetContextController {\n public static readonly fromDto = (dto: GetContextControllerDto) => new GetContextController(dto);\n\n private readonly useCase = this.properties.useCase;\n private constructor(\n private readonly properties: GetContextParameters & {\n useCase: GetContextUseCase;\n }\n ) {}\n\n public readonly execute = async (request: Request): Promise<LogtoContext> => {\n const cookieHeader = getCookieHeaderFromRequest(request);\n\n const result = await this.useCase({\n cookieHeader: cookieHeader ?? undefined,\n ...this.properties,\n });\n\n return result.context;\n };\n}\n","export const getCookieHeaderFromRequest = (request: Request) => request.headers.get('Cookie');\n","import { GetContextParameters } from '@logto/node';\nimport { SessionStorage } from '@remix-run/node';\n\nimport { CreateLogtoAdapter, LogtoContext } from '../../infrastructure/logto';\n\ntype GetContextRequest = GetContextParameters & {\n readonly cookieHeader: string | undefined;\n};\n\ntype GetContextResponse = {\n context: Readonly<LogtoContext>;\n};\n\nexport const makeGetContextUseCase =\n (deps: { createLogtoAdapter: CreateLogtoAdapter; sessionStorage: SessionStorage }) =>\n async (request: GetContextRequest): Promise<GetContextResponse> => {\n const { sessionStorage, createLogtoAdapter } = deps;\n\n const session = await sessionStorage.getSession(request.cookieHeader);\n\n const logto = createLogtoAdapter(session);\n\n const response = await logto.getContext(request);\n\n return {\n context: response.context,\n };\n };\n\nexport type GetContextUseCase = ReturnType<typeof makeGetContextUseCase>;\n","import { LoaderFunction, SessionStorage } from '@remix-run/node';\n\nimport { CreateLogtoAdapter } from '../../infrastructure/logto';\nimport { makeHandleSignIn } from '../handleSignIn';\nimport { makeHandleSignInCallback } from '../handleSignInCallback';\nimport { makeHandleSignOut } from '../handleSignOut';\nimport { HandleAuthRoutesError } from './HandleAuthRoutesError';\n\ntype AuthRouteConfig = {\n readonly path: string;\n readonly redirectBackTo: string;\n};\n\ntype PossibleRouteTypes = 'sign-in' | 'sign-in-callback' | 'sign-out';\n\ntype HandleAuthRoutesDto = Record<PossibleRouteTypes, AuthRouteConfig>;\n\ntype MakeHandleAuthRoutesDto = {\n readonly baseUrl: string;\n readonly createLogtoAdapter: CreateLogtoAdapter;\n readonly sessionStorage: SessionStorage;\n};\n\nexport const makeHandleAuthRoutes =\n (deps: MakeHandleAuthRoutesDto) =>\n (dto: HandleAuthRoutesDto): LoaderFunction =>\n async ({ request }) => {\n const anticipatedPath = new URL(request.url).pathname;\n\n /* eslint-disable no-restricted-syntax */\n const configKey = Object.keys(dto).find(\n (type) => dto[type as PossibleRouteTypes].path === anticipatedPath\n ) as keyof HandleAuthRoutesDto;\n\n const configExists = Boolean(configKey);\n /* eslint-enable no-restricted-syntax */\n\n if (!configExists) {\n throw HandleAuthRoutesError.becauseNoConfigForPath(anticipatedPath);\n }\n\n const { sessionStorage, createLogtoAdapter, baseUrl } = deps;\n\n const config = dto[configKey];\n\n switch (configKey) {\n case 'sign-in': {\n const handler = makeHandleSignIn(\n {\n redirectBackTo: `${baseUrl}${config.redirectBackTo}`,\n },\n { sessionStorage, createLogtoAdapter }\n );\n\n return handler(request);\n }\n\n case 'sign-in-callback': {\n const handler = makeHandleSignInCallback(\n {\n redirectBackTo: `${baseUrl}${config.redirectBackTo}`,\n },\n { sessionStorage, createLogtoAdapter }\n );\n\n return handler(request);\n }\n\n case 'sign-out': {\n const handler = makeHandleSignOut(\n {\n redirectBackTo: `${baseUrl}${config.redirectBackTo}`,\n },\n { sessionStorage, createLogtoAdapter }\n );\n\n return handler(request);\n }\n\n default: {\n throw HandleAuthRoutesError.becauseOfUnknownRoute(configKey);\n }\n }\n };\n","import { SessionStorage } from '@remix-run/node';\n\nimport { CreateLogtoAdapter } from '../../infrastructure/logto';\nimport { HandleSignInController } from './HandleSignInController';\nimport { makeHandleSignInUseCase } from './HandleSignInUseCase';\n\ntype HandleSignInDto = {\n readonly redirectBackTo: string;\n};\n\ntype HandleSignInDeps = {\n readonly createLogtoAdapter: CreateLogtoAdapter;\n readonly sessionStorage: SessionStorage;\n};\n\nexport const makeHandleSignIn =\n (dto: HandleSignInDto, deps: HandleSignInDeps) => async (request: Request) => {\n const { createLogtoAdapter, sessionStorage } = deps;\n\n const useCase = makeHandleSignInUseCase({\n createLogtoAdapter,\n sessionStorage,\n });\n\n const controller = HandleSignInController.fromDto({\n useCase,\n redirectUri: dto.redirectBackTo,\n });\n\n return controller.execute(request);\n };\n","import { redirect, TypedResponse } from '@remix-run/node';\n\nimport { getCookieHeaderFromRequest } from '../../framework/get-cookie-header-from-request';\nimport type { HandleSignInUseCase } from './HandleSignInUseCase';\n\ntype HandleSignInControllerDto = {\n readonly redirectUri: string;\n readonly useCase: HandleSignInUseCase;\n};\n\nexport class HandleSignInController {\n public static readonly fromDto = (dto: HandleSignInControllerDto) =>\n new HandleSignInController({\n useCase: dto.useCase,\n redirectUri: dto.redirectUri,\n });\n\n private readonly useCase = this.properties.useCase;\n private readonly redirectUri = this.properties.redirectUri;\n private constructor(\n private readonly properties: {\n redirectUri: string;\n useCase: HandleSignInUseCase;\n }\n ) {}\n\n public readonly execute = async (request: Request): Promise<TypedResponse<never>> => {\n const cookieHeader = getCookieHeaderFromRequest(request);\n const { redirectUri } = this;\n\n const result = await this.useCase({\n cookieHeader: cookieHeader ?? undefined,\n redirectUri,\n });\n\n return redirect(result.navigateToUrl, {\n headers: {\n 'Set-Cookie': result.cookieHeader,\n },\n });\n };\n}\n","import { SessionStorage } from '@remix-run/node';\n\nimport { CreateLogtoAdapter } from '../../infrastructure/logto';\n\ntype SignInRequest = {\n readonly cookieHeader: string | undefined;\n readonly redirectUri: string;\n};\n\ntype SignInResponse = {\n readonly cookieHeader: string;\n readonly navigateToUrl: string;\n};\n\nexport const makeHandleSignInUseCase =\n (deps: { createLogtoAdapter: CreateLogtoAdapter; sessionStorage: SessionStorage }) =>\n async (request: SignInRequest): Promise<SignInResponse> => {\n const { sessionStorage, createLogtoAdapter } = deps;\n\n const session = await sessionStorage.getSession(request.cookieHeader);\n\n const logto = createLogtoAdapter(session);\n\n const response = await logto.handleSignIn({\n redirectUri: request.redirectUri,\n });\n\n const cookieHeader = await sessionStorage.commitSession(response.session);\n\n return {\n cookieHeader,\n navigateToUrl: response.navigateToUrl,\n };\n };\n\nexport type HandleSignInUseCase = ReturnType<typeof makeHandleSignInUseCase>;\n","import { SessionStorage } from '@remix-run/node';\n\nimport { CreateLogtoAdapter } from '../../infrastructure/logto';\nimport { HandleSignInCallbackController } from './HandleSignInCallbackController';\nimport { makeHandleSignInCallbackUseCase } from './HandleSignInCallbackUseCase';\n\ntype HandleSignInCallbackDto = {\n readonly redirectBackTo: string;\n};\n\ntype HandleSignInCallbackDeps = {\n readonly createLogtoAdapter: CreateLogtoAdapter;\n readonly sessionStorage: SessionStorage;\n};\n\nexport const makeHandleSignInCallback =\n (dto: HandleSignInCallbackDto, deps: HandleSignInCallbackDeps) => async (request: Request) => {\n const { createLogtoAdapter, sessionStorage } = deps;\n\n const useCase = makeHandleSignInCallbackUseCase({\n createLogtoAdapter,\n sessionStorage,\n });\n\n const controller = HandleSignInCallbackController.fromDto({\n useCase,\n redirectUri: dto.redirectBackTo,\n });\n\n return controller.execute(request);\n };\n","import { redirect, TypedResponse } from '@remix-run/node';\n\nimport { getCookieHeaderFromRequest } from '../../framework/get-cookie-header-from-request';\nimport { HandleSignInCallbackError } from './HandleSignInCallbackError';\nimport type { HandleSignInCallbackUseCase } from './HandleSignInCallbackUseCase';\n\ntype HandleSignInCallbackControllerDto = {\n readonly useCase: HandleSignInCallbackUseCase;\n readonly redirectUri: string;\n};\n\nexport class HandleSignInCallbackController {\n public static readonly fromDto = (dto: HandleSignInCallbackControllerDto) =>\n new HandleSignInCallbackController({\n useCase: dto.useCase,\n redirectUri: dto.redirectUri,\n });\n\n private readonly useCase = this.properties.useCase;\n private readonly redirectUri = this.properties.redirectUri;\n\n private constructor(\n private readonly properties: {\n useCase: HandleSignInCallbackUseCase;\n redirectUri: string;\n }\n ) {}\n\n public readonly execute = async (request: Request): Promise<TypedResponse<never>> => {\n const cookieHeader = getCookieHeaderFromRequest(request);\n\n if (!cookieHeader) {\n throw HandleSignInCallbackError.becauseNoCookieHeaderPresent();\n }\n\n // In some scenarios, like performing the sign-in callback within a Gitpod\n // environment, the load balancer rewrites the URL and uses `http` as the\n // protocol. Here, we make sure that when the `x-forwarded-proto` HTTP header\n // is present, we will replace `http` with `https` in the `callbackUri`.\n const isForwardedHttpsTraffic = request.headers.get('x-forwarded-proto') === 'https';\n\n const callbackUri = isForwardedHttpsTraffic\n ? request.url.replace('http', 'https')\n : request.url;\n\n const result = await this.useCase({\n cookieHeader,\n callbackUri,\n });\n\n return redirect(this.redirectUri, {\n headers: {\n 'Set-Cookie': result.cookieHeader,\n },\n });\n };\n}\n","export class HandleSignInCallbackError extends Error {\n public static readonly becauseNoCookieHeaderPresent = () =>\n new HandleSignInCallbackError({\n code: 1_665_388_541,\n message: `The authentication sign-in callback route can't be accessed without a valid cookie.`,\n });\n\n public readonly code = this.properties.code;\n public readonly cause = this.properties.cause;\n public readonly plainMessage = this.properties.message;\n\n private constructor(\n private readonly properties: {\n readonly code: number;\n readonly message: string;\n readonly cause?: Error;\n }\n ) {\n super(`#[${properties.code}] ${properties.message}`);\n }\n}\n","import { SessionStorage } from '@remix-run/node';\n\nimport { CreateLogtoAdapter } from '../../infrastructure/logto';\n\ntype SignInCallbackRequest = {\n readonly cookieHeader: string;\n readonly callbackUri: string;\n};\n\ntype SignInCallbackResponse = {\n readonly cookieHeader: string;\n};\n\nexport const makeHandleSignInCallbackUseCase =\n (deps: { createLogtoAdapter: CreateLogtoAdapter; sessionStorage: SessionStorage }) =>\n async (request: SignInCallbackRequest): Promise<SignInCallbackResponse> => {\n const { sessionStorage, createLogtoAdapter } = deps;\n\n const session = await sessionStorage.getSession(request.cookieHeader);\n\n const logto = createLogtoAdapter(session);\n\n const response = await logto.handleSignInCallback({\n callbackUri: request.callbackUri,\n });\n\n const cookieHeader = await sessionStorage.commitSession(response.session);\n\n return {\n cookieHeader,\n };\n };\n\nexport type HandleSignInCallbackUseCase = ReturnType<typeof makeHandleSignInCallbackUseCase>;\n","import { SessionStorage } from '@remix-run/node';\n\nimport { CreateLogtoAdapter } from '../../infrastructure/logto';\nimport { HandleSignOutController } from './HandleSignOutController';\nimport { makeHandleSignOutUseCase } from './HandleSignOutUseCase';\n\ntype HandleSignOutDto = {\n readonly redirectBackTo: string;\n};\n\ntype HandleSignOutDeps = {\n readonly createLogtoAdapter: CreateLogtoAdapter;\n readonly sessionStorage: SessionStorage;\n};\n\nexport const makeHandleSignOut =\n (dto: HandleSignOutDto, deps: HandleSignOutDeps) => async (request: Request) => {\n const { createLogtoAdapter, sessionStorage } = deps;\n\n const useCase = makeHandleSignOutUseCase({\n createLogtoAdapter,\n sessionStorage,\n });\n\n const controller = HandleSignOutController.fromDto({\n useCase,\n redirectUri: dto.redirectBackTo,\n });\n\n return controller.execute(request);\n };\n","import { redirect, TypedResponse } from '@remix-run/node';\n\nimport { getCookieHeaderFromRequest } from '../../framework/get-cookie-header-from-request';\nimport { HandleSignOutError } from './HandleSignOutError';\nimport type { HandleSignOutUseCase } from './HandleSignOutUseCase';\n\ntype HandleSignOutControllerDto = {\n readonly useCase: HandleSignOutUseCase;\n readonly redirectUri: string;\n};\n\nexport class HandleSignOutController {\n public static readonly fromDto = (dto: HandleSignOutControllerDto) =>\n new HandleSignOutController({\n useCase: dto.useCase,\n redirectUri: dto.redirectUri,\n });\n\n private readonly useCase = this.properties.useCase;\n private readonly redirectUri = this.properties.redirectUri;\n\n private constructor(\n private readonly properties: {\n useCase: HandleSignOutUseCase;\n redirectUri: string;\n }\n ) {}\n\n public readonly execute = async (request: Request): Promise<TypedResponse<never>> => {\n const cookieHeader = getCookieHeaderFromRequest(request);\n\n if (!cookieHeader) {\n throw HandleSignOutError.becauseNoCookieHeaderPresent();\n }\n\n const result = await this.useCase({\n cookieHeader,\n redirectUri: this.redirectUri,\n });\n\n return redirect(result.navigateToUrl, {\n headers: {\n 'Set-Cookie': result.cookieHeader,\n },\n });\n };\n}\n","export class HandleSignOutError extends Error {\n public static readonly becauseNoCookieHeaderPresent = () =>\n new HandleSignOutError({\n code: 1_665_388_713,\n message: `The authentication sign-out route can't be accessed without a valid cookie.`,\n });\n\n public readonly code = this.properties.code;\n public readonly cause = this.properties.cause;\n public readonly plainMessage = this.properties.message;\n\n private constructor(\n private readonly properties: {\n readonly code: number;\n readonly message: string;\n readonly cause?: Error;\n }\n ) {\n super(`#[${properties.code}] ${properties.message}`);\n }\n}\n","import { SessionStorage } from '@remix-run/node';\n\nimport { CreateLogtoAdapter } from '../../infrastructure/logto';\n\ntype SignOutRequest = {\n readonly cookieHeader: string | undefined;\n redirectUri: string;\n};\n\ntype SignOutResponse = {\n cookieHeader: string;\n readonly navigateToUrl: string;\n};\n\nexport const makeHandleSignOutUseCase =\n (deps: { createLogtoAdapter: CreateLogtoAdapter; sessionStorage: SessionStorage }) =>\n async (request: SignOutRequest): Promise<SignOutResponse> => {\n const { sessionStorage, createLogtoAdapter } = deps;\n\n const session = await sessionStorage.getSession(request.cookieHeader);\n\n const logto = createLogtoAdapter(session);\n\n const response = await logto.handleSignOut({\n redirectUri: request.redirectUri,\n });\n\n const cookieHeader = await sessionStorage.destroySession(session);\n\n return {\n cookieHeader,\n navigateToUrl: response.navigateToUrl,\n };\n };\n\nexport type HandleSignOutUseCase = ReturnType<typeof makeHandleSignOutUseCase>;\n","export class HandleAuthRoutesError extends Error {\n public static readonly becauseNoConfigForPath = (anticipatedPath: string) =>\n new HandleAuthRoutesError({\n code: 1_665_388_277,\n message: `No configuration available for path \"${anticipatedPath}\".`,\n });\n\n public static readonly becauseOfUnknownRoute = (anticipatedConfigKey: string) =>\n new HandleAuthRoutesError({\n code: 1_665_388_278,\n message: `The config key \"${anticipatedConfigKey}\" is invalid.`,\n });\n\n public readonly code = this.properties.code;\n public readonly cause = this.properties.cause;\n public readonly plainMessage = this.properties.message;\n\n private constructor(\n private readonly properties: {\n readonly code: number;\n readonly message: string;\n readonly cause?: Error;\n }\n ) {\n super(`#[${properties.code}] ${properties.message}`);\n }\n}\n"],"names":[],"version":3,"file":"module.mjs.map"}
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@logto/remix",
3
- "version": "1.0.0-beta.9",
3
+ "version": "1.0.0-rc.0",
4
4
  "source": "./src/index.ts",
5
5
  "main": "./lib/index.js",
6
6
  "exports": {
7
7
  "require": "./lib/index.js",
8
- "import": "./lib/module.js"
8
+ "import": "./lib/module.mjs"
9
9
  },
10
- "module": "./lib/module.js",
10
+ "module": "./lib/module.mjs",
11
11
  "types": "./lib/index.d.ts",
12
12
  "files": [
13
13
  "lib"
@@ -22,22 +22,22 @@
22
22
  "dev:tsc": "tsc -p tsconfig.build.json -w --preserveWatchOutput",
23
23
  "precommit": "lint-staged",
24
24
  "check": "tsc --noEmit",
25
- "build": "rm -rf lib/ && pnpm check && parcel build",
25
+ "build": "rm -rf lib/ && pnpm check && parcel build && cp lib/index.d.ts lib/module.d.mts",
26
26
  "lint": "eslint --ext .ts src",
27
27
  "test": "jest",
28
28
  "test:coverage": "jest --silent --coverage",
29
29
  "prepack": "pnpm test"
30
30
  },
31
31
  "dependencies": {
32
- "@logto/node": "^1.0.0-beta.9"
32
+ "@logto/node": "^1.0.0-rc.0"
33
33
  },
34
34
  "devDependencies": {
35
35
  "@commitlint/cli": "^17.1.2",
36
36
  "@commitlint/config-conventional": "^17.1.0",
37
37
  "@jest/types": "^27.5.1",
38
- "@parcel/core": "^2.7.0",
39
- "@parcel/packager-ts": "^2.7.0",
40
- "@parcel/transformer-typescript-types": "^2.7.0",
38
+ "@parcel/core": "^2.8.3",
39
+ "@parcel/packager-ts": "^2.8.3",
40
+ "@parcel/transformer-typescript-types": "^2.8.3",
41
41
  "@remix-run/node": "^1.7.2",
42
42
  "@silverhand/eslint-config": "^1.0.0",
43
43
  "@silverhand/ts-config": "^1.0.0",
@@ -52,7 +52,7 @@
52
52
  "jest-location-mock": "^1.0.9",
53
53
  "jest-matcher-specific-error": "^1.0.0",
54
54
  "lint-staged": "^13.0.3",
55
- "parcel": "^2.7.0",
55
+ "parcel": "^2.8.3",
56
56
  "prettier": "^2.7.1",
57
57
  "react": "^17.0.2",
58
58
  "react-dom": "^17.0.2",
@@ -72,9 +72,9 @@
72
72
  "main": {
73
73
  "context": "node",
74
74
  "engines": {
75
- "node": "^16"
75
+ "node": ">=18.12.0"
76
76
  }
77
77
  }
78
78
  },
79
- "gitHead": "196ece6cad697ec93f53230cd165fedc7aa5d825"
79
+ "gitHead": "98960287d1016efa9e68b6c4d4407885d6ec9dc6"
80
80
  }
package/lib/module.js.map DELETED
@@ -1 +0,0 @@
1
- {"mappings":"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","sources":["packages/remix/src/index.ts","packages/remix/src/infrastructure/logto/index.ts","packages/remix/src/infrastructure/logto/create-client.ts","packages/remix/src/infrastructure/logto/create-storage.ts","packages/remix/src/infrastructure/logto/get-context.ts","packages/remix/src/infrastructure/logto/handle-sign-in.ts","packages/remix/src/infrastructure/logto/handle-sign-in-callback.ts","packages/remix/src/infrastructure/logto/handle-sign-out.ts","packages/remix/src/useCases/getContext/index.ts","packages/remix/src/useCases/getContext/GetContextController.ts","packages/remix/src/framework/get-cookie-header-from-request.ts","packages/remix/src/useCases/getContext/GetContextUseCase.ts","packages/remix/src/useCases/handleAuthRoutes/index.ts","packages/remix/src/useCases/handleSignIn/index.ts","packages/remix/src/useCases/handleSignIn/HandleSignInController.ts","packages/remix/src/useCases/handleSignIn/HandleSignInUseCase.ts","packages/remix/src/useCases/handleSignInCallback/index.ts","packages/remix/src/useCases/handleSignInCallback/HandleSignInCallbackController.ts","packages/remix/src/useCases/handleSignInCallback/HandleSignInCallbackError.ts","packages/remix/src/useCases/handleSignInCallback/HandleSignInCallbackUseCase.ts","packages/remix/src/useCases/handleSignOut/index.ts","packages/remix/src/useCases/handleSignOut/HandleSignOutController.ts","packages/remix/src/useCases/handleSignOut/HandleSignOutError.ts","packages/remix/src/useCases/handleSignOut/HandleSignOutUseCase.ts","packages/remix/src/useCases/handleAuthRoutes/HandleAuthRoutesError.ts"],"sourcesContent":["import { LogtoConfig } from '@logto/node';\nimport { SessionStorage } from '@remix-run/node';\n\nimport { makeLogtoAdapter } from './infrastructure/logto';\nimport { makeGetContext } from './useCases/getContext';\nimport { makeHandleAuthRoutes } from './useCases/handleAuthRoutes';\n\ntype Config = Readonly<LogtoConfig> & {\n readonly baseUrl: string;\n};\n\nexport const makeLogtoRemix = (\n config: Config,\n deps: {\n sessionStorage: SessionStorage;\n }\n) => {\n const { sessionStorage } = deps;\n\n const { baseUrl } = config;\n\n const createLogtoAdapter = makeLogtoAdapter(config);\n\n return Object.freeze({\n handleAuthRoutes: makeHandleAuthRoutes({\n baseUrl,\n createLogtoAdapter,\n sessionStorage,\n }),\n\n getContext: (dto: { includeAccessToken: boolean }) =>\n makeGetContext(dto, {\n createLogtoAdapter,\n sessionStorage,\n }),\n });\n};\n\nexport { type LogtoContext } from '@logto/node';\n","import type { LogtoConfig } from '@logto/node';\nimport { Session } from '@remix-run/node';\n\nimport { makeLogtoClient } from './create-client';\nimport { createStorage } from './create-storage';\nimport { makeGetContext } from './get-context';\nimport { makeHandleSignIn } from './handle-sign-in';\nimport { makeHandleSignInCallback } from './handle-sign-in-callback';\nimport { makeHandleSignOut } from './handle-sign-out';\n\ntype MakeLogtoAdapterConfiguration = LogtoConfig;\n\nexport const makeLogtoAdapter = (config: MakeLogtoAdapterConfiguration) => (session: Session) => {\n const storage = createStorage(session);\n const createClient = makeLogtoClient(config, storage);\n\n return {\n handleSignIn: makeHandleSignIn({ storage, createClient }),\n handleSignInCallback: makeHandleSignInCallback({ storage, createClient }),\n handleSignOut: makeHandleSignOut({ createClient }),\n getContext: makeGetContext({ storage, createClient }),\n };\n};\n\nexport type CreateLogtoAdapter = ReturnType<typeof makeLogtoAdapter>;\n\nexport { type LogtoContext } from '@logto/node';\n","import LogtoClient, { LogtoConfig } from '@logto/node';\n\nimport { LogtoStorage } from './create-storage';\n\nexport const makeLogtoClient =\n (config: LogtoConfig, storage: LogtoStorage) =>\n // Have to deactivate the eslint rule here as the `LogtoClient`\n // awaits a `navigate` function.\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n (navigate: (url: string) => void = () => {}) => {\n return new LogtoClient(config, { storage, navigate });\n };\n\nexport type CreateLogtoClient = ReturnType<typeof makeLogtoClient>;\n\nexport { type LogtoConfig } from '@logto/node';\n","import { Storage, StorageKey } from '@logto/node';\nimport { Session } from '@remix-run/node';\n\nclass LogtoStorage implements Storage {\n public static readonly fromSession = (session: Session) => {\n return new LogtoStorage({ session });\n };\n\n public readonly session = this.properties.session;\n\n private constructor(\n private readonly properties: {\n session: Session;\n }\n ) {}\n\n public readonly setItem = async (key: StorageKey, value: string) => {\n this.session.set(key, value);\n };\n\n public readonly getItem = async (key: StorageKey) => {\n const itemExists = this.session.has(key);\n\n if (!itemExists) {\n return null;\n }\n\n return String(this.session.get(key));\n };\n\n public readonly removeItem = async (key: StorageKey) => {\n this.session.unset(key);\n };\n\n public readonly save = async () => {\n // Not required as the persistence happens in the integration layer\n };\n}\n\nexport const createStorage = (session: Session) => LogtoStorage.fromSession(session);\n\nexport type { LogtoStorage };\n","import { LogtoContext } from '@logto/node';\n\nimport { CreateLogtoClient } from './create-client';\nimport { LogtoStorage } from './create-storage';\n\ntype GetContextRequest = {\n readonly includeAccessToken: boolean;\n};\n\ntype GetContextResponse = {\n readonly context: LogtoContext;\n};\n\nexport const makeGetContext =\n (deps: { storage: LogtoStorage; createClient: CreateLogtoClient }) =>\n async (request: GetContextRequest): Promise<GetContextResponse> => {\n const { storage, createClient } = deps;\n\n const client = createClient();\n\n const context = await client.getContext(request.includeAccessToken);\n\n return {\n context,\n };\n };\n","import { Session } from '@remix-run/node';\n\nimport { CreateLogtoClient } from './create-client';\nimport { LogtoStorage } from './create-storage';\n\ntype HandleSignInRequest = {\n readonly redirectUri: string;\n};\n\ntype HandleSignInResponse = {\n readonly session: Session;\n readonly navigateToUrl: string;\n};\n\nclass HandleSignInCommand {\n public static readonly fromDependencies = (dependencies: { createClient: CreateLogtoClient }) =>\n new HandleSignInCommand({ createClient: dependencies.createClient });\n\n private navigateToUrl = '/api/sign-in';\n\n private constructor(\n private readonly properties: {\n readonly createClient: CreateLogtoClient;\n }\n ) {}\n\n public async execute(request: HandleSignInRequest) {\n const { createClient } = this.properties;\n\n const client = createClient((url) => {\n this.navigateToUrl = url;\n });\n\n await client.signIn(request.redirectUri);\n\n return {\n navigateToUrl: this.navigateToUrl,\n };\n }\n}\n\nexport const makeHandleSignIn =\n (deps: { storage: LogtoStorage; createClient: CreateLogtoClient }) =>\n async (request: HandleSignInRequest): Promise<HandleSignInResponse> => {\n const { storage, createClient } = deps;\n\n const command = HandleSignInCommand.fromDependencies({ createClient });\n\n const { navigateToUrl } = await command.execute(request);\n\n return {\n session: storage.session,\n navigateToUrl,\n };\n };\n","import { Session } from '@remix-run/node';\n\nimport { CreateLogtoClient } from './create-client';\nimport { LogtoStorage } from './create-storage';\n\ntype HandleSignInCallbackRequest = {\n callbackUri: string;\n};\n\ntype HandleSignInCallbackResponse = {\n readonly session: Session;\n};\n\nexport const makeHandleSignInCallback =\n (deps: { storage: LogtoStorage; createClient: CreateLogtoClient }) =>\n async (request: HandleSignInCallbackRequest): Promise<HandleSignInCallbackResponse> => {\n const { storage, createClient } = deps;\n\n const client = createClient();\n\n await client.handleSignInCallback(request.callbackUri);\n\n return {\n session: storage.session,\n };\n };\n","import { CreateLogtoClient } from './create-client';\n\ntype HandleSignOutRequest = {\n readonly redirectUri: string;\n};\n\ntype HandleSignOutResponse = {\n readonly navigateToUrl: string;\n};\n\nclass HandleSignOutCommand {\n public static readonly fromDependencies = (dependencies: { createClient: CreateLogtoClient }) =>\n new HandleSignOutCommand({ createClient: dependencies.createClient });\n\n private navigateToUrl = '/api/sign-in';\n\n private constructor(\n private readonly properties: {\n readonly createClient: CreateLogtoClient;\n }\n ) {}\n\n public async execute(request: HandleSignOutRequest) {\n const { createClient } = this.properties;\n\n const client = createClient((url) => {\n this.navigateToUrl = url;\n });\n\n await client.signOut(request.redirectUri);\n\n return {\n navigateToUrl: this.navigateToUrl,\n };\n }\n}\n\nexport const makeHandleSignOut =\n (deps: { createClient: CreateLogtoClient }) =>\n async (request: HandleSignOutRequest): Promise<HandleSignOutResponse> => {\n const { createClient } = deps;\n\n const command = HandleSignOutCommand.fromDependencies({ createClient });\n\n return command.execute(request);\n };\n","import { SessionStorage } from '@remix-run/node';\n\nimport { CreateLogtoAdapter } from '../../infrastructure/logto';\nimport { GetContextController } from './GetContextController';\nimport { makeGetContextUseCase } from './GetContextUseCase';\n\ntype GetContextDto = {\n readonly includeAccessToken?: boolean;\n};\n\ntype HandleGetContextDeps = {\n readonly createLogtoAdapter: CreateLogtoAdapter;\n readonly sessionStorage: SessionStorage;\n};\n\nexport const makeGetContext =\n (dto: GetContextDto, deps: HandleGetContextDeps) => async (request: Request) => {\n const { createLogtoAdapter, sessionStorage } = deps;\n\n const useCase = makeGetContextUseCase({\n createLogtoAdapter,\n sessionStorage,\n });\n\n const controller = GetContextController.fromDto({\n useCase,\n includeAccessToken: dto.includeAccessToken,\n });\n\n return controller.execute(request);\n };\n","import { LogtoContext } from '@logto/node';\n\nimport { getCookieHeaderFromRequest } from '../../framework/get-cookie-header-from-request';\nimport type { GetContextUseCase } from './GetContextUseCase';\n\ntype GetContextControllerDto = {\n readonly includeAccessToken?: boolean;\n readonly useCase: GetContextUseCase;\n};\n\nexport class GetContextController {\n public static readonly fromDto = (dto: GetContextControllerDto) =>\n new GetContextController({\n useCase: dto.useCase,\n includeAccessToken: dto.includeAccessToken ?? false,\n });\n\n private readonly useCase = this.properties.useCase;\n private readonly includeAccessToken = this.properties.includeAccessToken;\n private constructor(\n private readonly properties: {\n includeAccessToken: boolean;\n useCase: GetContextUseCase;\n }\n ) {}\n\n public readonly execute = async (request: Request): Promise<LogtoContext> => {\n const cookieHeader = getCookieHeaderFromRequest(request);\n const { includeAccessToken } = this;\n\n const result = await this.useCase({\n cookieHeader: cookieHeader ?? undefined,\n includeAccessToken,\n });\n\n return result.context;\n };\n}\n","export const getCookieHeaderFromRequest = (request: Request) => request.headers.get('Cookie');\n","import { SessionStorage } from '@remix-run/node';\n\nimport { CreateLogtoAdapter, LogtoContext } from '../../infrastructure/logto';\n\ntype GetContextRequest = {\n readonly cookieHeader: string | undefined;\n readonly includeAccessToken: boolean;\n};\n\ntype GetContextResponse = {\n context: Readonly<LogtoContext>;\n};\n\nexport const makeGetContextUseCase =\n (deps: { createLogtoAdapter: CreateLogtoAdapter; sessionStorage: SessionStorage }) =>\n async (request: GetContextRequest): Promise<GetContextResponse> => {\n const { sessionStorage, createLogtoAdapter } = deps;\n\n const session = await sessionStorage.getSession(request.cookieHeader);\n\n const logto = createLogtoAdapter(session);\n\n const response = await logto.getContext({\n includeAccessToken: request.includeAccessToken,\n });\n\n return {\n context: response.context,\n };\n };\n\nexport type GetContextUseCase = ReturnType<typeof makeGetContextUseCase>;\n","import { LoaderFunction, SessionStorage } from '@remix-run/node';\n\nimport { CreateLogtoAdapter } from '../../infrastructure/logto';\nimport { makeHandleSignIn } from '../handleSignIn';\nimport { makeHandleSignInCallback } from '../handleSignInCallback';\nimport { makeHandleSignOut } from '../handleSignOut';\nimport { HandleAuthRoutesError } from './HandleAuthRoutesError';\n\ntype AuthRouteConfig = {\n readonly path: string;\n readonly redirectBackTo: string;\n};\n\ntype PossibleRouteTypes = 'sign-in' | 'sign-in-callback' | 'sign-out';\n\ntype HandleAuthRoutesDto = Record<PossibleRouteTypes, AuthRouteConfig>;\n\ntype MakeHandleAuthRoutesDto = {\n readonly baseUrl: string;\n readonly createLogtoAdapter: CreateLogtoAdapter;\n readonly sessionStorage: SessionStorage;\n};\n\nexport const makeHandleAuthRoutes =\n (deps: MakeHandleAuthRoutesDto) =>\n (dto: HandleAuthRoutesDto): LoaderFunction =>\n async ({ request }) => {\n const anticipatedPath = new URL(request.url).pathname;\n\n /* eslint-disable no-restricted-syntax */\n const configKey = Object.keys(dto).find(\n (type) => dto[type as PossibleRouteTypes].path === anticipatedPath\n ) as keyof HandleAuthRoutesDto;\n\n const configExists = Boolean(configKey);\n /* eslint-enable no-restricted-syntax */\n\n if (!configExists) {\n throw HandleAuthRoutesError.becauseNoConfigForPath(anticipatedPath);\n }\n\n const { sessionStorage, createLogtoAdapter, baseUrl } = deps;\n\n const config = dto[configKey];\n\n switch (configKey) {\n case 'sign-in': {\n const handler = makeHandleSignIn(\n {\n redirectBackTo: `${baseUrl}${config.redirectBackTo}`,\n },\n { sessionStorage, createLogtoAdapter }\n );\n\n return handler(request);\n }\n\n case 'sign-in-callback': {\n const handler = makeHandleSignInCallback(\n {\n redirectBackTo: `${baseUrl}${config.redirectBackTo}`,\n },\n { sessionStorage, createLogtoAdapter }\n );\n\n return handler(request);\n }\n\n case 'sign-out': {\n const handler = makeHandleSignOut(\n {\n redirectBackTo: `${baseUrl}${config.redirectBackTo}`,\n },\n { sessionStorage, createLogtoAdapter }\n );\n\n return handler(request);\n }\n\n default: {\n throw HandleAuthRoutesError.becauseOfUnknownRoute(configKey);\n }\n }\n };\n","import { SessionStorage } from '@remix-run/node';\n\nimport { CreateLogtoAdapter } from '../../infrastructure/logto';\nimport { HandleSignInController } from './HandleSignInController';\nimport { makeHandleSignInUseCase } from './HandleSignInUseCase';\n\ntype HandleSignInDto = {\n readonly redirectBackTo: string;\n};\n\ntype HandleSignInDeps = {\n readonly createLogtoAdapter: CreateLogtoAdapter;\n readonly sessionStorage: SessionStorage;\n};\n\nexport const makeHandleSignIn =\n (dto: HandleSignInDto, deps: HandleSignInDeps) => async (request: Request) => {\n const { createLogtoAdapter, sessionStorage } = deps;\n\n const useCase = makeHandleSignInUseCase({\n createLogtoAdapter,\n sessionStorage,\n });\n\n const controller = HandleSignInController.fromDto({\n useCase,\n redirectUri: dto.redirectBackTo,\n });\n\n return controller.execute(request);\n };\n","import { redirect, TypedResponse } from '@remix-run/node';\n\nimport { getCookieHeaderFromRequest } from '../../framework/get-cookie-header-from-request';\nimport type { HandleSignInUseCase } from './HandleSignInUseCase';\n\ntype HandleSignInControllerDto = {\n readonly redirectUri: string;\n readonly useCase: HandleSignInUseCase;\n};\n\nexport class HandleSignInController {\n public static readonly fromDto = (dto: HandleSignInControllerDto) =>\n new HandleSignInController({\n useCase: dto.useCase,\n redirectUri: dto.redirectUri,\n });\n\n private readonly useCase = this.properties.useCase;\n private readonly redirectUri = this.properties.redirectUri;\n private constructor(\n private readonly properties: {\n redirectUri: string;\n useCase: HandleSignInUseCase;\n }\n ) {}\n\n public readonly execute = async (request: Request): Promise<TypedResponse<never>> => {\n const cookieHeader = getCookieHeaderFromRequest(request);\n const { redirectUri } = this;\n\n const result = await this.useCase({\n cookieHeader: cookieHeader ?? undefined,\n redirectUri,\n });\n\n return redirect(result.navigateToUrl, {\n headers: {\n 'Set-Cookie': result.cookieHeader,\n },\n });\n };\n}\n","import { SessionStorage } from '@remix-run/node';\n\nimport { CreateLogtoAdapter } from '../../infrastructure/logto';\n\ntype SignInRequest = {\n readonly cookieHeader: string | undefined;\n readonly redirectUri: string;\n};\n\ntype SignInResponse = {\n readonly cookieHeader: string;\n readonly navigateToUrl: string;\n};\n\nexport const makeHandleSignInUseCase =\n (deps: { createLogtoAdapter: CreateLogtoAdapter; sessionStorage: SessionStorage }) =>\n async (request: SignInRequest): Promise<SignInResponse> => {\n const { sessionStorage, createLogtoAdapter } = deps;\n\n const session = await sessionStorage.getSession(request.cookieHeader);\n\n const logto = createLogtoAdapter(session);\n\n const response = await logto.handleSignIn({\n redirectUri: request.redirectUri,\n });\n\n const cookieHeader = await sessionStorage.commitSession(response.session);\n\n return {\n cookieHeader,\n navigateToUrl: response.navigateToUrl,\n };\n };\n\nexport type HandleSignInUseCase = ReturnType<typeof makeHandleSignInUseCase>;\n","import { SessionStorage } from '@remix-run/node';\n\nimport { CreateLogtoAdapter } from '../../infrastructure/logto';\nimport { HandleSignInCallbackController } from './HandleSignInCallbackController';\nimport { makeHandleSignInCallbackUseCase } from './HandleSignInCallbackUseCase';\n\ntype HandleSignInCallbackDto = {\n readonly redirectBackTo: string;\n};\n\ntype HandleSignInCallbackDeps = {\n readonly createLogtoAdapter: CreateLogtoAdapter;\n readonly sessionStorage: SessionStorage;\n};\n\nexport const makeHandleSignInCallback =\n (dto: HandleSignInCallbackDto, deps: HandleSignInCallbackDeps) => async (request: Request) => {\n const { createLogtoAdapter, sessionStorage } = deps;\n\n const useCase = makeHandleSignInCallbackUseCase({\n createLogtoAdapter,\n sessionStorage,\n });\n\n const controller = HandleSignInCallbackController.fromDto({\n useCase,\n redirectUri: dto.redirectBackTo,\n });\n\n return controller.execute(request);\n };\n","import { redirect, TypedResponse } from '@remix-run/node';\n\nimport { getCookieHeaderFromRequest } from '../../framework/get-cookie-header-from-request';\nimport { HandleSignInCallbackError } from './HandleSignInCallbackError';\nimport type { HandleSignInCallbackUseCase } from './HandleSignInCallbackUseCase';\n\ntype HandleSignInCallbackControllerDto = {\n readonly useCase: HandleSignInCallbackUseCase;\n readonly redirectUri: string;\n};\n\nexport class HandleSignInCallbackController {\n public static readonly fromDto = (dto: HandleSignInCallbackControllerDto) =>\n new HandleSignInCallbackController({\n useCase: dto.useCase,\n redirectUri: dto.redirectUri,\n });\n\n private readonly useCase = this.properties.useCase;\n private readonly redirectUri = this.properties.redirectUri;\n\n private constructor(\n private readonly properties: {\n useCase: HandleSignInCallbackUseCase;\n redirectUri: string;\n }\n ) {}\n\n public readonly execute = async (request: Request): Promise<TypedResponse<never>> => {\n const cookieHeader = getCookieHeaderFromRequest(request);\n\n if (!cookieHeader) {\n throw HandleSignInCallbackError.becauseNoCookieHeaderPresent();\n }\n\n // In some scenarios, like performing the sign-in callback within a Gitpod\n // environment, the load balancer rewrites the URL and uses `http` as the\n // protocol. Here, we make sure that when the `x-forwarded-proto` HTTP header\n // is present, we will replace `http` with `https` in the `callbackUri`.\n const isForwardedHttpsTraffic = request.headers.get('x-forwarded-proto') === 'https';\n\n const callbackUri = isForwardedHttpsTraffic\n ? request.url.replace('http', 'https')\n : request.url;\n\n const result = await this.useCase({\n cookieHeader,\n callbackUri,\n });\n\n return redirect(this.redirectUri, {\n headers: {\n 'Set-Cookie': result.cookieHeader,\n },\n });\n };\n}\n","export class HandleSignInCallbackError extends Error {\n public static readonly becauseNoCookieHeaderPresent = () =>\n new HandleSignInCallbackError({\n code: 1_665_388_541,\n message: `The authentication sign-in callback route can't be accessed without a valid cookie.`,\n });\n\n public readonly code = this.properties.code;\n public readonly cause = this.properties.cause;\n public readonly plainMessage = this.properties.message;\n\n private constructor(\n private readonly properties: {\n readonly code: number;\n readonly message: string;\n readonly cause?: Error;\n }\n ) {\n super(`#[${properties.code}] ${properties.message}`);\n }\n}\n","import { SessionStorage } from '@remix-run/node';\n\nimport { CreateLogtoAdapter } from '../../infrastructure/logto';\n\ntype SignInCallbackRequest = {\n readonly cookieHeader: string;\n readonly callbackUri: string;\n};\n\ntype SignInCallbackResponse = {\n readonly cookieHeader: string;\n};\n\nexport const makeHandleSignInCallbackUseCase =\n (deps: { createLogtoAdapter: CreateLogtoAdapter; sessionStorage: SessionStorage }) =>\n async (request: SignInCallbackRequest): Promise<SignInCallbackResponse> => {\n const { sessionStorage, createLogtoAdapter } = deps;\n\n const session = await sessionStorage.getSession(request.cookieHeader);\n\n const logto = createLogtoAdapter(session);\n\n const response = await logto.handleSignInCallback({\n callbackUri: request.callbackUri,\n });\n\n const cookieHeader = await sessionStorage.commitSession(response.session);\n\n return {\n cookieHeader,\n };\n };\n\nexport type HandleSignInCallbackUseCase = ReturnType<typeof makeHandleSignInCallbackUseCase>;\n","import { SessionStorage } from '@remix-run/node';\n\nimport { CreateLogtoAdapter } from '../../infrastructure/logto';\nimport { HandleSignOutController } from './HandleSignOutController';\nimport { makeHandleSignOutUseCase } from './HandleSignOutUseCase';\n\ntype HandleSignOutDto = {\n readonly redirectBackTo: string;\n};\n\ntype HandleSignOutDeps = {\n readonly createLogtoAdapter: CreateLogtoAdapter;\n readonly sessionStorage: SessionStorage;\n};\n\nexport const makeHandleSignOut =\n (dto: HandleSignOutDto, deps: HandleSignOutDeps) => async (request: Request) => {\n const { createLogtoAdapter, sessionStorage } = deps;\n\n const useCase = makeHandleSignOutUseCase({\n createLogtoAdapter,\n sessionStorage,\n });\n\n const controller = HandleSignOutController.fromDto({\n useCase,\n redirectUri: dto.redirectBackTo,\n });\n\n return controller.execute(request);\n };\n","import { redirect, TypedResponse } from '@remix-run/node';\n\nimport { getCookieHeaderFromRequest } from '../../framework/get-cookie-header-from-request';\nimport { HandleSignOutError } from './HandleSignOutError';\nimport type { HandleSignOutUseCase } from './HandleSignOutUseCase';\n\ntype HandleSignOutControllerDto = {\n readonly useCase: HandleSignOutUseCase;\n readonly redirectUri: string;\n};\n\nexport class HandleSignOutController {\n public static readonly fromDto = (dto: HandleSignOutControllerDto) =>\n new HandleSignOutController({\n useCase: dto.useCase,\n redirectUri: dto.redirectUri,\n });\n\n private readonly useCase = this.properties.useCase;\n private readonly redirectUri = this.properties.redirectUri;\n\n private constructor(\n private readonly properties: {\n useCase: HandleSignOutUseCase;\n redirectUri: string;\n }\n ) {}\n\n public readonly execute = async (request: Request): Promise<TypedResponse<never>> => {\n const cookieHeader = getCookieHeaderFromRequest(request);\n\n if (!cookieHeader) {\n throw HandleSignOutError.becauseNoCookieHeaderPresent();\n }\n\n const result = await this.useCase({\n cookieHeader,\n redirectUri: this.redirectUri,\n });\n\n return redirect(this.redirectUri, {\n headers: {\n 'Set-Cookie': result.cookieHeader,\n },\n });\n };\n}\n","export class HandleSignOutError extends Error {\n public static readonly becauseNoCookieHeaderPresent = () =>\n new HandleSignOutError({\n code: 1_665_388_713,\n message: `The authentication sign-out route can't be accessed without a valid cookie.`,\n });\n\n public readonly code = this.properties.code;\n public readonly cause = this.properties.cause;\n public readonly plainMessage = this.properties.message;\n\n private constructor(\n private readonly properties: {\n readonly code: number;\n readonly message: string;\n readonly cause?: Error;\n }\n ) {\n super(`#[${properties.code}] ${properties.message}`);\n }\n}\n","import { SessionStorage } from '@remix-run/node';\n\nimport { CreateLogtoAdapter } from '../../infrastructure/logto';\n\ntype SignOutRequest = {\n readonly cookieHeader: string | undefined;\n redirectUri: string;\n};\n\ntype SignOutResponse = {\n cookieHeader: string;\n readonly navigateToUrl: string;\n};\n\nexport const makeHandleSignOutUseCase =\n (deps: { createLogtoAdapter: CreateLogtoAdapter; sessionStorage: SessionStorage }) =>\n async (request: SignOutRequest): Promise<SignOutResponse> => {\n const { sessionStorage, createLogtoAdapter } = deps;\n\n const session = await sessionStorage.getSession(request.cookieHeader);\n\n const logto = createLogtoAdapter(session);\n\n const response = await logto.handleSignOut({\n redirectUri: request.redirectUri,\n });\n\n const cookieHeader = await sessionStorage.destroySession(session);\n\n return {\n cookieHeader,\n navigateToUrl: response.navigateToUrl,\n };\n };\n\nexport type HandleSignOutUseCase = ReturnType<typeof makeHandleSignOutUseCase>;\n","export class HandleAuthRoutesError extends Error {\n public static readonly becauseNoConfigForPath = (anticipatedPath: string) =>\n new HandleAuthRoutesError({\n code: 1_665_388_277,\n message: `No configuration available for path \"${anticipatedPath}\".`,\n });\n\n public static readonly becauseOfUnknownRoute = (anticipatedConfigKey: string) =>\n new HandleAuthRoutesError({\n code: 1_665_388_278,\n message: `The config key \"${anticipatedConfigKey}\" is invalid.`,\n });\n\n public readonly code = this.properties.code;\n public readonly cause = this.properties.cause;\n public readonly plainMessage = this.properties.message;\n\n private constructor(\n private readonly properties: {\n readonly code: number;\n readonly message: string;\n readonly cause?: Error;\n }\n ) {\n super(`#[${properties.code}] ${properties.message}`);\n }\n}\n"],"names":[],"version":3,"file":"module.js.map"}