@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 +2 -2
- package/lib/index.d.ts +2 -4
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +82 -89
- package/lib/index.js.map +1 -1
- package/lib/module.d.mts +29 -0
- package/lib/{module.js → module.mjs} +11 -18
- package/lib/module.mjs.map +1 -0
- package/package.json +11 -11
- package/lib/module.js.map +0 -1
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 "@
|
|
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({
|
|
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
|
|
package/lib/index.d.ts.map
CHANGED
|
@@ -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
|
|
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 $
|
|
2
|
-
var $
|
|
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", () => $
|
|
11
|
+
$parcel$export(module.exports, "makeLogtoRemix", () => $d280ab1184950f89$export$502a4d54d411a9fd);
|
|
12
12
|
|
|
13
|
-
const $
|
|
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($
|
|
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 $
|
|
24
|
+
class $0039633e49290279$var$LogtoStorage {
|
|
25
25
|
static fromSession = (session)=>{
|
|
26
|
-
return new $
|
|
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 $
|
|
49
|
+
const $0039633e49290279$export$d184a47a971dd4b9 = (session)=>$0039633e49290279$var$LogtoStorage.fromSession(session);
|
|
50
50
|
|
|
51
51
|
|
|
52
|
-
const $
|
|
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
|
|
55
|
+
const context = await client.getContext(request);
|
|
56
56
|
return {
|
|
57
57
|
context: context
|
|
58
58
|
};
|
|
59
59
|
};
|
|
60
60
|
|
|
61
61
|
|
|
62
|
-
class $
|
|
63
|
-
static fromDependencies = (dependencies)=>new $
|
|
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 $
|
|
81
|
+
const $b6b640b5dde7b3d1$export$3c00ad1b716e9134 = (deps)=>async (request)=>{
|
|
82
82
|
const { storage: storage , createClient: createClient } = deps;
|
|
83
|
-
const command = $
|
|
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 $
|
|
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 $
|
|
105
|
-
static fromDependencies = (dependencies)=>new $
|
|
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 $
|
|
123
|
+
const $56983c96c6292b7b$export$89f18ff1488dade0 = (deps)=>async (request)=>{
|
|
124
124
|
const { createClient: createClient } = deps;
|
|
125
|
-
const command = $
|
|
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 $
|
|
133
|
-
const storage = (0, $
|
|
134
|
-
const createClient = (0, $
|
|
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, $
|
|
136
|
+
handleSignIn: (0, $b6b640b5dde7b3d1$export$3c00ad1b716e9134)({
|
|
137
137
|
storage: storage,
|
|
138
138
|
createClient: createClient
|
|
139
139
|
}),
|
|
140
|
-
handleSignInCallback: (0, $
|
|
140
|
+
handleSignInCallback: (0, $ba5c5a17c0470429$export$9c07365b51e93ba3)({
|
|
141
141
|
storage: storage,
|
|
142
142
|
createClient: createClient
|
|
143
143
|
}),
|
|
144
|
-
handleSignOut: (0, $
|
|
144
|
+
handleSignOut: (0, $56983c96c6292b7b$export$89f18ff1488dade0)({
|
|
145
145
|
createClient: createClient
|
|
146
146
|
}),
|
|
147
|
-
getContext: (0, $
|
|
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 $
|
|
155
|
+
const $a8afe3841584871e$export$5c6fae4c79d686e4 = (request)=>request.headers.get("Cookie");
|
|
156
156
|
|
|
157
157
|
|
|
158
|
-
class $
|
|
159
|
-
static fromDto = (dto)=>new $
|
|
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, $
|
|
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
|
-
|
|
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 $
|
|
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 $
|
|
186
|
+
const $10ac017bdfe3e60c$export$f4d9bb4cf5d2b40c = (dto, deps)=>async (request)=>{
|
|
194
187
|
const { createLogtoAdapter: createLogtoAdapter , sessionStorage: sessionStorage } = deps;
|
|
195
|
-
const useCase = (0, $
|
|
188
|
+
const useCase = (0, $b710f2274063a387$export$53ae38c062671653)({
|
|
196
189
|
createLogtoAdapter: createLogtoAdapter,
|
|
197
190
|
sessionStorage: sessionStorage
|
|
198
191
|
});
|
|
199
|
-
const controller = (0, $
|
|
192
|
+
const controller = (0, $5ea2bffde4379db3$export$32386402b3f0a45).fromDto({
|
|
200
193
|
useCase: useCase,
|
|
201
|
-
|
|
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 $
|
|
210
|
-
static fromDto = (dto)=>new $
|
|
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, $
|
|
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, $
|
|
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 $
|
|
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 $
|
|
243
|
+
const $7d87cb1bafa09779$export$3c00ad1b716e9134 = (dto, deps)=>async (request)=>{
|
|
251
244
|
const { createLogtoAdapter: createLogtoAdapter , sessionStorage: sessionStorage } = deps;
|
|
252
|
-
const useCase = (0, $
|
|
245
|
+
const useCase = (0, $c230f3a04bd8ec78$export$463099392e1e6404)({
|
|
253
246
|
createLogtoAdapter: createLogtoAdapter,
|
|
254
247
|
sessionStorage: sessionStorage
|
|
255
248
|
});
|
|
256
|
-
const controller = (0, $
|
|
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 $
|
|
267
|
-
static becauseNoCookieHeaderPresent = ()=>new $
|
|
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 $
|
|
282
|
-
static fromDto = (dto)=>new $
|
|
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, $
|
|
292
|
-
if (!cookieHeader) throw (0, $
|
|
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, $
|
|
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 $
|
|
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 $
|
|
320
|
+
const $4df2ab785be2e3b0$export$9c07365b51e93ba3 = (dto, deps)=>async (request)=>{
|
|
328
321
|
const { createLogtoAdapter: createLogtoAdapter , sessionStorage: sessionStorage } = deps;
|
|
329
|
-
const useCase = (0, $
|
|
322
|
+
const useCase = (0, $3ae3cea103e3f353$export$22e357c661ee13a4)({
|
|
330
323
|
createLogtoAdapter: createLogtoAdapter,
|
|
331
324
|
sessionStorage: sessionStorage
|
|
332
325
|
});
|
|
333
|
-
const controller = (0, $
|
|
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 $
|
|
344
|
-
static becauseNoCookieHeaderPresent = ()=>new $
|
|
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 $
|
|
359
|
-
static fromDto = (dto)=>new $
|
|
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, $
|
|
369
|
-
if (!cookieHeader) throw (0, $
|
|
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, $
|
|
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 $
|
|
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 $
|
|
392
|
+
const $af9527187f2d8283$export$89f18ff1488dade0 = (dto, deps)=>async (request)=>{
|
|
400
393
|
const { createLogtoAdapter: createLogtoAdapter , sessionStorage: sessionStorage } = deps;
|
|
401
|
-
const useCase = (0, $
|
|
394
|
+
const useCase = (0, $fb309dcd4b062524$export$8ccb0e4b7ccc1fc4)({
|
|
402
395
|
createLogtoAdapter: createLogtoAdapter,
|
|
403
396
|
sessionStorage: sessionStorage
|
|
404
397
|
});
|
|
405
|
-
const controller = (0, $
|
|
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 $
|
|
414
|
-
static becauseNoConfigForPath = (anticipatedPath)=>new $
|
|
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 $
|
|
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 $
|
|
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, $
|
|
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, $
|
|
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
|
|
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
|
|
451
|
+
return handler(request);
|
|
459
452
|
}
|
|
460
453
|
case "sign-out":
|
|
461
454
|
{
|
|
462
|
-
const
|
|
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
|
|
461
|
+
return handler(request);
|
|
469
462
|
}
|
|
470
463
|
default:
|
|
471
|
-
throw (0, $
|
|
464
|
+
throw (0, $39dd7d8d62a3df87$export$fcbf49abe9908796).becauseOfUnknownRoute(configKey);
|
|
472
465
|
}
|
|
473
466
|
};
|
|
474
467
|
|
|
475
468
|
|
|
476
|
-
const $
|
|
469
|
+
const $d280ab1184950f89$export$502a4d54d411a9fd = (config, deps)=>{
|
|
477
470
|
const { sessionStorage: sessionStorage } = deps;
|
|
478
471
|
const { baseUrl: baseUrl } = config;
|
|
479
|
-
const createLogtoAdapter = (0, $
|
|
472
|
+
const createLogtoAdapter = (0, $a4e270a96c0fa97a$export$5e1ab578feca185a)(config);
|
|
480
473
|
return Object.freeze({
|
|
481
|
-
handleAuthRoutes: (0, $
|
|
474
|
+
handleAuthRoutes: (0, $85c2f13c6554a877$export$d6e32a8c2b1ad7f3)({
|
|
482
475
|
baseUrl: baseUrl,
|
|
483
476
|
createLogtoAdapter: createLogtoAdapter,
|
|
484
477
|
sessionStorage: sessionStorage
|
|
485
478
|
}),
|
|
486
|
-
getContext: (dto)=>(0, $
|
|
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":"../../../"}
|
package/lib/module.d.mts
ADDED
|
@@ -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
|
|
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
|
-
|
|
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
|
-
|
|
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)(
|
|
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
|
|
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
|
|
443
|
+
return handler(request);
|
|
451
444
|
}
|
|
452
445
|
case "sign-out":
|
|
453
446
|
{
|
|
454
|
-
const
|
|
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
|
|
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.
|
|
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-
|
|
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.
|
|
8
|
+
"import": "./lib/module.mjs"
|
|
9
9
|
},
|
|
10
|
-
"module": "./lib/module.
|
|
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-
|
|
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.
|
|
39
|
-
"@parcel/packager-ts": "^2.
|
|
40
|
-
"@parcel/transformer-typescript-types": "^2.
|
|
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.
|
|
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": "
|
|
75
|
+
"node": ">=18.12.0"
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
78
|
},
|
|
79
|
-
"gitHead": "
|
|
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"}
|