@logto/remix 1.1.0 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/lib/framework/get-cookie-header-from-request.d.ts +1 -0
  2. package/lib/framework/get-cookie-header-from-request.js +5 -0
  3. package/lib/framework/get-cookie-header-from-request.mjs +3 -0
  4. package/lib/framework/mocks.d.ts +22 -0
  5. package/lib/index.d.ts +3 -7
  6. package/lib/index.js +17 -480
  7. package/lib/index.mjs +22 -0
  8. package/lib/infrastructure/logto/create-client.d.ts +6 -0
  9. package/lib/infrastructure/logto/create-client.js +17 -0
  10. package/lib/infrastructure/logto/create-client.mjs +11 -0
  11. package/lib/infrastructure/logto/create-client.spec.d.ts +1 -0
  12. package/lib/infrastructure/logto/create-storage.d.ts +14 -0
  13. package/lib/infrastructure/logto/create-storage.js +30 -0
  14. package/lib/infrastructure/logto/create-storage.mjs +28 -0
  15. package/lib/infrastructure/logto/create-storage.spec.d.ts +1 -0
  16. package/lib/infrastructure/logto/get-context.d.ts +11 -0
  17. package/lib/infrastructure/logto/get-context.js +12 -0
  18. package/lib/infrastructure/logto/get-context.mjs +10 -0
  19. package/lib/infrastructure/logto/handle-sign-in-callback.d.ts +14 -0
  20. package/lib/infrastructure/logto/handle-sign-in-callback.js +12 -0
  21. package/lib/infrastructure/logto/handle-sign-in-callback.mjs +10 -0
  22. package/lib/infrastructure/logto/handle-sign-in.d.ts +15 -0
  23. package/lib/infrastructure/logto/handle-sign-in.js +30 -0
  24. package/lib/infrastructure/logto/handle-sign-in.mjs +28 -0
  25. package/lib/infrastructure/logto/handle-sign-out.d.ts +11 -0
  26. package/lib/infrastructure/logto/handle-sign-out.js +26 -0
  27. package/lib/infrastructure/logto/handle-sign-out.mjs +24 -0
  28. package/lib/infrastructure/logto/index.d.ts +26 -0
  29. package/lib/infrastructure/logto/index.js +21 -0
  30. package/lib/infrastructure/logto/index.mjs +19 -0
  31. package/lib/useCases/getContext/GetContextController.d.ts +13 -0
  32. package/lib/useCases/getContext/GetContextController.js +21 -0
  33. package/lib/useCases/getContext/GetContextController.mjs +19 -0
  34. package/lib/useCases/getContext/GetContextController.spec.d.ts +1 -0
  35. package/lib/useCases/getContext/GetContextUseCase.d.ts +15 -0
  36. package/lib/useCases/getContext/GetContextUseCase.js +13 -0
  37. package/lib/useCases/getContext/GetContextUseCase.mjs +11 -0
  38. package/lib/useCases/getContext/GetContextUseCase.spec.d.ts +1 -0
  39. package/lib/useCases/getContext/index.d.ts +9 -0
  40. package/lib/useCases/getContext/index.js +19 -0
  41. package/lib/useCases/getContext/index.mjs +17 -0
  42. package/lib/useCases/handleAuthRoutes/HandleAuthRoutesError.d.ts +9 -0
  43. package/lib/useCases/handleAuthRoutes/HandleAuthRoutesError.js +21 -0
  44. package/lib/useCases/handleAuthRoutes/HandleAuthRoutesError.mjs +19 -0
  45. package/lib/useCases/handleAuthRoutes/index.d.ts +15 -0
  46. package/lib/useCases/handleAuthRoutes/index.js +44 -0
  47. package/lib/useCases/handleAuthRoutes/index.mjs +42 -0
  48. package/lib/useCases/handleSignIn/HandleSignInController.d.ts +15 -0
  49. package/lib/useCases/handleSignIn/HandleSignInController.js +31 -0
  50. package/lib/useCases/handleSignIn/HandleSignInController.mjs +29 -0
  51. package/lib/useCases/handleSignIn/HandleSignInController.spec.d.ts +1 -0
  52. package/lib/useCases/handleSignIn/HandleSignInUseCase.d.ts +16 -0
  53. package/lib/useCases/handleSignIn/HandleSignInUseCase.js +17 -0
  54. package/lib/useCases/handleSignIn/HandleSignInUseCase.mjs +15 -0
  55. package/lib/useCases/handleSignIn/HandleSignInUseCase.spec.d.ts +1 -0
  56. package/lib/useCases/handleSignIn/index.d.ts +11 -0
  57. package/lib/useCases/handleSignIn/index.js +19 -0
  58. package/lib/useCases/handleSignIn/index.mjs +17 -0
  59. package/lib/useCases/handleSignInCallback/HandleSignInCallbackController.d.ts +15 -0
  60. package/lib/useCases/handleSignInCallback/HandleSignInCallbackController.js +42 -0
  61. package/lib/useCases/handleSignInCallback/HandleSignInCallbackController.mjs +40 -0
  62. package/lib/useCases/handleSignInCallback/HandleSignInCallbackController.spec.d.ts +1 -0
  63. package/lib/useCases/handleSignInCallback/HandleSignInCallbackError.d.ts +8 -0
  64. package/lib/useCases/handleSignInCallback/HandleSignInCallbackError.js +17 -0
  65. package/lib/useCases/handleSignInCallback/HandleSignInCallbackError.mjs +15 -0
  66. package/lib/useCases/handleSignInCallback/HandleSignInCallbackUseCase.d.ts +15 -0
  67. package/lib/useCases/handleSignInCallback/HandleSignInCallbackUseCase.js +16 -0
  68. package/lib/useCases/handleSignInCallback/HandleSignInCallbackUseCase.mjs +14 -0
  69. package/lib/useCases/handleSignInCallback/HandleSignInCallbackUseCase.spec.d.ts +1 -0
  70. package/lib/useCases/handleSignInCallback/index.d.ts +11 -0
  71. package/lib/useCases/handleSignInCallback/index.js +19 -0
  72. package/lib/useCases/handleSignInCallback/index.mjs +17 -0
  73. package/lib/useCases/handleSignOut/HandleSignOutController.d.ts +15 -0
  74. package/lib/useCases/handleSignOut/HandleSignOutController.js +34 -0
  75. package/lib/useCases/handleSignOut/HandleSignOutController.mjs +32 -0
  76. package/lib/useCases/handleSignOut/HandleSignOutController.spec.d.ts +1 -0
  77. package/lib/useCases/handleSignOut/HandleSignOutError.d.ts +8 -0
  78. package/lib/useCases/handleSignOut/HandleSignOutError.js +17 -0
  79. package/lib/useCases/handleSignOut/HandleSignOutError.mjs +15 -0
  80. package/lib/useCases/handleSignOut/HandleSignOutUseCase.d.ts +16 -0
  81. package/lib/useCases/handleSignOut/HandleSignOutUseCase.js +17 -0
  82. package/lib/useCases/handleSignOut/HandleSignOutUseCase.mjs +15 -0
  83. package/lib/useCases/handleSignOut/HandleSignOutUseCase.spec.d.ts +1 -0
  84. package/lib/useCases/handleSignOut/index.d.ts +11 -0
  85. package/lib/useCases/handleSignOut/index.js +19 -0
  86. package/lib/useCases/handleSignOut/index.mjs +17 -0
  87. package/package.json +13 -17
  88. package/lib/index.d.ts.map +0 -1
  89. package/lib/index.js.map +0 -1
  90. package/lib/module.d.mts +0 -29
  91. package/lib/module.mjs +0 -480
  92. package/lib/module.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ export declare const getCookieHeaderFromRequest: (request: Request) => string | null;
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ const getCookieHeaderFromRequest = (request) => request.headers.get('Cookie');
4
+
5
+ exports.getCookieHeaderFromRequest = getCookieHeaderFromRequest;
@@ -0,0 +1,3 @@
1
+ const getCookieHeaderFromRequest = (request) => request.headers.get('Cookie');
2
+
3
+ export { getCookieHeaderFromRequest };
@@ -0,0 +1,22 @@
1
+ /// <reference types="jest" />
2
+ import type { Session, SessionStorage } from '@remix-run/node';
3
+ import type { CreateLogtoAdapter, LogtoContext } from '../infrastructure/logto';
4
+ export declare const getContext: jest.Mock<Promise<{
5
+ context: LogtoContext;
6
+ }>, []>;
7
+ export declare const storage: import("../infrastructure/logto/create-storage").LogtoStorage;
8
+ export declare const handleSignIn: jest.Mock<Promise<{
9
+ session: Session;
10
+ navigateToUrl: string;
11
+ }>, []>;
12
+ export declare const handleSignInCallback: jest.Mock<Promise<{
13
+ session: Session;
14
+ }>, []>;
15
+ export declare const handleSignOut: jest.Mock<Promise<{
16
+ navigateToUrl: string;
17
+ }>, []>;
18
+ export declare const createLogtoAdapter: CreateLogtoAdapter;
19
+ export declare const commitSession: jest.Mock<Promise<string>, [session: Session]>;
20
+ export declare const destroySession: jest.Mock<any, any>;
21
+ export declare const getSession: jest.Mock<any, any>;
22
+ export declare const sessionStorage: SessionStorage;
package/lib/index.d.ts CHANGED
@@ -1,11 +1,9 @@
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';
1
+ import type { GetContextParameters, LogtoConfig } from '@logto/node';
2
+ import type { SessionStorage } from '@remix-run/node';
5
3
  type Config = Readonly<LogtoConfig> & {
6
4
  readonly baseUrl: string;
7
5
  };
8
- export const makeLogtoRemix: (config: Config, deps: {
6
+ export declare const makeLogtoRemix: (config: Config, deps: {
9
7
  sessionStorage: SessionStorage;
10
8
  }) => Readonly<{
11
9
  handleAuthRoutes: (dto: {
@@ -25,5 +23,3 @@ export const makeLogtoRemix: (config: Config, deps: {
25
23
  getContext: (dto: GetContextParameters) => (request: Request) => Promise<import("@logto/node").LogtoContext>;
26
24
  }>;
27
25
  export { type LogtoContext } from '@logto/node';
28
-
29
- //# sourceMappingURL=index.d.ts.map
package/lib/index.js CHANGED
@@ -1,487 +1,24 @@
1
- var $1UY29$logtonode = require("@logto/node");
2
- var $1UY29$remixrunnode = require("@remix-run/node");
1
+ 'use strict';
3
2
 
4
- function $parcel$export(e, n, v, s) {
5
- Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
6
- }
7
- function $parcel$interopDefault(a) {
8
- return a && a.__esModule ? a.default : a;
9
- }
3
+ var index$2 = require('./infrastructure/logto/index.js');
4
+ var index$1 = require('./useCases/getContext/index.js');
5
+ var index = require('./useCases/handleAuthRoutes/index.js');
10
6
 
11
- $parcel$export(module.exports, "makeLogtoRemix", () => $d280ab1184950f89$export$502a4d54d411a9fd);
12
-
13
- const $432ba72d919a1e72$export$60d790dda55ffee6 = (config, storage)=>// Have to deactivate the eslint rule here as the `LogtoClient`
14
- // awaits a `navigate` function.
15
- // eslint-disable-next-line @typescript-eslint/no-empty-function
16
- (navigate = ()=>{})=>{
17
- return new (0, ($parcel$interopDefault($1UY29$logtonode)))(config, {
18
- storage: storage,
19
- navigate: navigate
20
- });
21
- };
22
-
23
-
24
- class $0039633e49290279$var$LogtoStorage {
25
- static fromSession = (session)=>{
26
- return new $0039633e49290279$var$LogtoStorage({
27
- session: session
28
- });
29
- };
30
- constructor(properties){
31
- this.properties = properties;
32
- this.session = this.properties.session;
33
- this.setItem = async (key, value)=>{
34
- this.session.set(key, value);
35
- };
36
- this.getItem = async (key)=>{
37
- const itemExists = this.session.has(key);
38
- if (!itemExists) return null;
39
- return String(this.session.get(key));
40
- };
41
- this.removeItem = async (key)=>{
42
- this.session.unset(key);
43
- };
44
- this.save = async ()=>{
45
- // Not required as the persistence happens in the integration layer
46
- };
47
- }
48
- }
49
- const $0039633e49290279$export$d184a47a971dd4b9 = (session)=>$0039633e49290279$var$LogtoStorage.fromSession(session);
50
-
51
-
52
- const $9d7cd9eac4864785$export$f4d9bb4cf5d2b40c = (deps)=>async (request)=>{
53
- const { storage: storage , createClient: createClient } = deps;
54
- const client = createClient();
55
- const context = await client.getContext(request);
56
- return {
57
- context: context
58
- };
59
- };
60
-
61
-
62
- class $b6b640b5dde7b3d1$var$HandleSignInCommand {
63
- static fromDependencies = (dependencies)=>new $b6b640b5dde7b3d1$var$HandleSignInCommand({
64
- createClient: dependencies.createClient
65
- });
66
- constructor(properties){
67
- this.properties = properties;
68
- this.navigateToUrl = "/api/sign-in";
69
- }
70
- async execute(request) {
71
- const { createClient: createClient } = this.properties;
72
- const client = createClient((url)=>{
73
- this.navigateToUrl = url;
74
- });
75
- await client.signIn(request.redirectUri);
76
- return {
77
- navigateToUrl: this.navigateToUrl
78
- };
79
- }
80
- }
81
- const $b6b640b5dde7b3d1$export$3c00ad1b716e9134 = (deps)=>async (request)=>{
82
- const { storage: storage , createClient: createClient } = deps;
83
- const command = $b6b640b5dde7b3d1$var$HandleSignInCommand.fromDependencies({
84
- createClient: createClient
85
- });
86
- const { navigateToUrl: navigateToUrl } = await command.execute(request);
87
- return {
88
- session: storage.session,
89
- navigateToUrl: navigateToUrl
90
- };
91
- };
92
-
93
-
94
- const $ba5c5a17c0470429$export$9c07365b51e93ba3 = (deps)=>async (request)=>{
95
- const { storage: storage , createClient: createClient } = deps;
96
- const client = createClient();
97
- await client.handleSignInCallback(request.callbackUri);
98
- return {
99
- session: storage.session
100
- };
101
- };
102
-
103
-
104
- class $56983c96c6292b7b$var$HandleSignOutCommand {
105
- static fromDependencies = (dependencies)=>new $56983c96c6292b7b$var$HandleSignOutCommand({
106
- createClient: dependencies.createClient
107
- });
108
- constructor(properties){
109
- this.properties = properties;
110
- this.navigateToUrl = "/api/sign-in";
111
- }
112
- async execute(request) {
113
- const { createClient: createClient } = this.properties;
114
- const client = createClient((url)=>{
115
- this.navigateToUrl = url;
116
- });
117
- await client.signOut(request.redirectUri);
118
- return {
119
- navigateToUrl: this.navigateToUrl
120
- };
121
- }
122
- }
123
- const $56983c96c6292b7b$export$89f18ff1488dade0 = (deps)=>async (request)=>{
124
- const { createClient: createClient } = deps;
125
- const command = $56983c96c6292b7b$var$HandleSignOutCommand.fromDependencies({
126
- createClient: createClient
127
- });
128
- return command.execute(request);
129
- };
130
-
131
-
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
- return {
136
- handleSignIn: (0, $b6b640b5dde7b3d1$export$3c00ad1b716e9134)({
137
- storage: storage,
138
- createClient: createClient
139
- }),
140
- handleSignInCallback: (0, $ba5c5a17c0470429$export$9c07365b51e93ba3)({
141
- storage: storage,
142
- createClient: createClient
143
- }),
144
- handleSignOut: (0, $56983c96c6292b7b$export$89f18ff1488dade0)({
145
- createClient: createClient
146
- }),
147
- getContext: (0, $9d7cd9eac4864785$export$f4d9bb4cf5d2b40c)({
148
- storage: storage,
149
- createClient: createClient
150
- })
151
- };
152
- };
153
-
154
-
155
- const $a8afe3841584871e$export$5c6fae4c79d686e4 = (request)=>request.headers.get("Cookie");
156
-
157
-
158
- class $5ea2bffde4379db3$export$32386402b3f0a45 {
159
- static fromDto = (dto)=>new $5ea2bffde4379db3$export$32386402b3f0a45(dto);
160
- constructor(properties){
161
- this.properties = properties;
162
- this.useCase = this.properties.useCase;
163
- this.execute = async (request)=>{
164
- const cookieHeader = (0, $a8afe3841584871e$export$5c6fae4c79d686e4)(request);
165
- const result = await this.useCase({
166
- cookieHeader: cookieHeader ?? undefined,
167
- ...this.properties
168
- });
169
- return result.context;
170
- };
171
- }
172
- }
173
-
174
-
175
- const $b710f2274063a387$export$53ae38c062671653 = (deps)=>async (request)=>{
176
- const { sessionStorage: sessionStorage , createLogtoAdapter: createLogtoAdapter } = deps;
177
- const session = await sessionStorage.getSession(request.cookieHeader);
178
- const logto = createLogtoAdapter(session);
179
- const response = await logto.getContext(request);
180
- return {
181
- context: response.context
182
- };
183
- };
184
-
185
-
186
- const $10ac017bdfe3e60c$export$f4d9bb4cf5d2b40c = (dto, deps)=>async (request)=>{
187
- const { createLogtoAdapter: createLogtoAdapter , sessionStorage: sessionStorage } = deps;
188
- const useCase = (0, $b710f2274063a387$export$53ae38c062671653)({
189
- createLogtoAdapter: createLogtoAdapter,
190
- sessionStorage: sessionStorage
191
- });
192
- const controller = (0, $5ea2bffde4379db3$export$32386402b3f0a45).fromDto({
193
- useCase: useCase,
194
- ...dto
195
- });
196
- return controller.execute(request);
197
- };
198
-
199
-
200
-
201
-
202
- class $29dab4b4aca0abe0$export$8bb8370a824a554b {
203
- static fromDto = (dto)=>new $29dab4b4aca0abe0$export$8bb8370a824a554b({
204
- useCase: dto.useCase,
205
- redirectUri: dto.redirectUri
206
- });
207
- constructor(properties){
208
- this.properties = properties;
209
- this.useCase = this.properties.useCase;
210
- this.redirectUri = this.properties.redirectUri;
211
- this.execute = async (request)=>{
212
- const cookieHeader = (0, $a8afe3841584871e$export$5c6fae4c79d686e4)(request);
213
- const { redirectUri: redirectUri } = this;
214
- const result = await this.useCase({
215
- cookieHeader: cookieHeader ?? undefined,
216
- redirectUri: redirectUri
217
- });
218
- return (0, $1UY29$remixrunnode.redirect)(result.navigateToUrl, {
219
- headers: {
220
- "Set-Cookie": result.cookieHeader
221
- }
222
- });
223
- };
224
- }
225
- }
226
-
227
-
228
- const $c230f3a04bd8ec78$export$463099392e1e6404 = (deps)=>async (request)=>{
229
- const { sessionStorage: sessionStorage , createLogtoAdapter: createLogtoAdapter } = deps;
230
- const session = await sessionStorage.getSession(request.cookieHeader);
231
- const logto = createLogtoAdapter(session);
232
- const response = await logto.handleSignIn({
233
- redirectUri: request.redirectUri
234
- });
235
- const cookieHeader = await sessionStorage.commitSession(response.session);
236
- return {
237
- cookieHeader: cookieHeader,
238
- navigateToUrl: response.navigateToUrl
239
- };
240
- };
241
-
242
-
243
- const $7d87cb1bafa09779$export$3c00ad1b716e9134 = (dto, deps)=>async (request)=>{
244
- const { createLogtoAdapter: createLogtoAdapter , sessionStorage: sessionStorage } = deps;
245
- const useCase = (0, $c230f3a04bd8ec78$export$463099392e1e6404)({
246
- createLogtoAdapter: createLogtoAdapter,
247
- sessionStorage: sessionStorage
248
- });
249
- const controller = (0, $29dab4b4aca0abe0$export$8bb8370a824a554b).fromDto({
250
- useCase: useCase,
251
- redirectUri: dto.redirectBackTo
252
- });
253
- return controller.execute(request);
254
- };
255
-
256
-
257
-
258
-
259
- class $bacebc5f40652238$export$144a9ac3253d5e56 extends Error {
260
- static becauseNoCookieHeaderPresent = ()=>new $bacebc5f40652238$export$144a9ac3253d5e56({
261
- code: 1665388541,
262
- message: `The authentication sign-in callback route can't be accessed without a valid cookie.`
263
- });
264
- constructor(properties){
265
- super(`#[${properties.code}] ${properties.message}`);
266
- this.properties = properties;
267
- this.code = this.properties.code;
268
- this.cause = this.properties.cause;
269
- this.plainMessage = this.properties.message;
270
- }
271
- }
272
-
273
-
274
- class $c35099547b1a0858$export$c8d670afaf17c618 {
275
- static fromDto = (dto)=>new $c35099547b1a0858$export$c8d670afaf17c618({
276
- useCase: dto.useCase,
277
- redirectUri: dto.redirectUri
278
- });
279
- constructor(properties){
280
- this.properties = properties;
281
- this.useCase = this.properties.useCase;
282
- this.redirectUri = this.properties.redirectUri;
283
- this.execute = async (request)=>{
284
- const cookieHeader = (0, $a8afe3841584871e$export$5c6fae4c79d686e4)(request);
285
- if (!cookieHeader) throw (0, $bacebc5f40652238$export$144a9ac3253d5e56).becauseNoCookieHeaderPresent();
286
- // In some scenarios, like performing the sign-in callback within a Gitpod
287
- // environment, the load balancer rewrites the URL and uses `http` as the
288
- // protocol. Here, we make sure that when the `x-forwarded-proto` HTTP header
289
- // is present, we will replace `http` with `https` in the `callbackUri`.
290
- const isForwardedHttpsTraffic = request.headers.get("x-forwarded-proto") === "https";
291
- const callbackUri = isForwardedHttpsTraffic ? request.url.replace("http", "https") : request.url;
292
- const result = await this.useCase({
293
- cookieHeader: cookieHeader,
294
- callbackUri: callbackUri
295
- });
296
- return (0, $1UY29$remixrunnode.redirect)(this.redirectUri, {
297
- headers: {
298
- "Set-Cookie": result.cookieHeader
299
- }
300
- });
301
- };
302
- }
303
- }
304
-
305
-
306
- const $3ae3cea103e3f353$export$22e357c661ee13a4 = (deps)=>async (request)=>{
307
- const { sessionStorage: sessionStorage , createLogtoAdapter: createLogtoAdapter } = deps;
308
- const session = await sessionStorage.getSession(request.cookieHeader);
309
- const logto = createLogtoAdapter(session);
310
- const response = await logto.handleSignInCallback({
311
- callbackUri: request.callbackUri
312
- });
313
- const cookieHeader = await sessionStorage.commitSession(response.session);
314
- return {
315
- cookieHeader: cookieHeader
316
- };
317
- };
318
-
319
-
320
- const $4df2ab785be2e3b0$export$9c07365b51e93ba3 = (dto, deps)=>async (request)=>{
321
- const { createLogtoAdapter: createLogtoAdapter , sessionStorage: sessionStorage } = deps;
322
- const useCase = (0, $3ae3cea103e3f353$export$22e357c661ee13a4)({
323
- createLogtoAdapter: createLogtoAdapter,
324
- sessionStorage: sessionStorage
325
- });
326
- const controller = (0, $c35099547b1a0858$export$c8d670afaf17c618).fromDto({
327
- useCase: useCase,
328
- redirectUri: dto.redirectBackTo
329
- });
330
- return controller.execute(request);
331
- };
332
-
333
-
334
-
335
-
336
- class $b7dcd894e0be6905$export$e01614cfebe90908 extends Error {
337
- static becauseNoCookieHeaderPresent = ()=>new $b7dcd894e0be6905$export$e01614cfebe90908({
338
- code: 1665388713,
339
- message: `The authentication sign-out route can't be accessed without a valid cookie.`
340
- });
341
- constructor(properties){
342
- super(`#[${properties.code}] ${properties.message}`);
343
- this.properties = properties;
344
- this.code = this.properties.code;
345
- this.cause = this.properties.cause;
346
- this.plainMessage = this.properties.message;
347
- }
348
- }
349
-
350
-
351
- class $1791a93b2ba8efd2$export$543cea0b68ca8887 {
352
- static fromDto = (dto)=>new $1791a93b2ba8efd2$export$543cea0b68ca8887({
353
- useCase: dto.useCase,
354
- redirectUri: dto.redirectUri
355
- });
356
- constructor(properties){
357
- this.properties = properties;
358
- this.useCase = this.properties.useCase;
359
- this.redirectUri = this.properties.redirectUri;
360
- this.execute = async (request)=>{
361
- const cookieHeader = (0, $a8afe3841584871e$export$5c6fae4c79d686e4)(request);
362
- if (!cookieHeader) throw (0, $b7dcd894e0be6905$export$e01614cfebe90908).becauseNoCookieHeaderPresent();
363
- const result = await this.useCase({
364
- cookieHeader: cookieHeader,
365
- redirectUri: this.redirectUri
366
- });
367
- return (0, $1UY29$remixrunnode.redirect)(result.navigateToUrl, {
368
- headers: {
369
- "Set-Cookie": result.cookieHeader
370
- }
371
- });
372
- };
373
- }
374
- }
375
-
376
-
377
- const $fb309dcd4b062524$export$8ccb0e4b7ccc1fc4 = (deps)=>async (request)=>{
378
- const { sessionStorage: sessionStorage , createLogtoAdapter: createLogtoAdapter } = deps;
379
- const session = await sessionStorage.getSession(request.cookieHeader);
380
- const logto = createLogtoAdapter(session);
381
- const response = await logto.handleSignOut({
382
- redirectUri: request.redirectUri
383
- });
384
- const cookieHeader = await sessionStorage.destroySession(session);
385
- return {
386
- cookieHeader: cookieHeader,
387
- navigateToUrl: response.navigateToUrl
388
- };
389
- };
390
-
391
-
392
- const $af9527187f2d8283$export$89f18ff1488dade0 = (dto, deps)=>async (request)=>{
393
- const { createLogtoAdapter: createLogtoAdapter , sessionStorage: sessionStorage } = deps;
394
- const useCase = (0, $fb309dcd4b062524$export$8ccb0e4b7ccc1fc4)({
395
- createLogtoAdapter: createLogtoAdapter,
396
- sessionStorage: sessionStorage
397
- });
398
- const controller = (0, $1791a93b2ba8efd2$export$543cea0b68ca8887).fromDto({
399
- useCase: useCase,
400
- redirectUri: dto.redirectBackTo
401
- });
402
- return controller.execute(request);
403
- };
404
-
405
-
406
- class $39dd7d8d62a3df87$export$fcbf49abe9908796 extends Error {
407
- static becauseNoConfigForPath = (anticipatedPath)=>new $39dd7d8d62a3df87$export$fcbf49abe9908796({
408
- code: 1665388277,
409
- message: `No configuration available for path "${anticipatedPath}".`
410
- });
411
- static becauseOfUnknownRoute = (anticipatedConfigKey)=>new $39dd7d8d62a3df87$export$fcbf49abe9908796({
412
- code: 1665388278,
413
- message: `The config key "${anticipatedConfigKey}" is invalid.`
414
- });
415
- constructor(properties){
416
- super(`#[${properties.code}] ${properties.message}`);
417
- this.properties = properties;
418
- this.code = this.properties.code;
419
- this.cause = this.properties.cause;
420
- this.plainMessage = this.properties.message;
421
- }
422
- }
423
-
424
-
425
- const $85c2f13c6554a877$export$d6e32a8c2b1ad7f3 = (deps)=>(dto)=>async ({ request: request })=>{
426
- const anticipatedPath = new URL(request.url).pathname;
427
- /* eslint-disable no-restricted-syntax */ const configKey = Object.keys(dto).find((type)=>dto[type].path === anticipatedPath);
428
- const configExists = Boolean(configKey);
429
- /* eslint-enable no-restricted-syntax */ if (!configExists) throw (0, $39dd7d8d62a3df87$export$fcbf49abe9908796).becauseNoConfigForPath(anticipatedPath);
430
- const { sessionStorage: sessionStorage , createLogtoAdapter: createLogtoAdapter , baseUrl: baseUrl } = deps;
431
- const config = dto[configKey];
432
- switch(configKey){
433
- case "sign-in":
434
- {
435
- const handler = (0, $7d87cb1bafa09779$export$3c00ad1b716e9134)({
436
- redirectBackTo: `${baseUrl}${config.redirectBackTo}`
437
- }, {
438
- sessionStorage: sessionStorage,
439
- createLogtoAdapter: createLogtoAdapter
440
- });
441
- return handler(request);
442
- }
443
- case "sign-in-callback":
444
- {
445
- const handler = (0, $4df2ab785be2e3b0$export$9c07365b51e93ba3)({
446
- redirectBackTo: `${baseUrl}${config.redirectBackTo}`
447
- }, {
448
- sessionStorage: sessionStorage,
449
- createLogtoAdapter: createLogtoAdapter
450
- });
451
- return handler(request);
452
- }
453
- case "sign-out":
454
- {
455
- const handler = (0, $af9527187f2d8283$export$89f18ff1488dade0)({
456
- redirectBackTo: `${baseUrl}${config.redirectBackTo}`
457
- }, {
458
- sessionStorage: sessionStorage,
459
- createLogtoAdapter: createLogtoAdapter
460
- });
461
- return handler(request);
462
- }
463
- default:
464
- throw (0, $39dd7d8d62a3df87$export$fcbf49abe9908796).becauseOfUnknownRoute(configKey);
465
- }
466
- };
467
-
468
-
469
- const $d280ab1184950f89$export$502a4d54d411a9fd = (config, deps)=>{
470
- const { sessionStorage: sessionStorage } = deps;
471
- const { baseUrl: baseUrl } = config;
472
- const createLogtoAdapter = (0, $a4e270a96c0fa97a$export$5e1ab578feca185a)(config);
7
+ const makeLogtoRemix = (config, deps) => {
8
+ const { sessionStorage } = deps;
9
+ const { baseUrl } = config;
10
+ const createLogtoAdapter = index$2.makeLogtoAdapter(config);
473
11
  return Object.freeze({
474
- handleAuthRoutes: (0, $85c2f13c6554a877$export$d6e32a8c2b1ad7f3)({
475
- baseUrl: baseUrl,
476
- createLogtoAdapter: createLogtoAdapter,
477
- sessionStorage: sessionStorage
12
+ handleAuthRoutes: index.makeHandleAuthRoutes({
13
+ baseUrl,
14
+ createLogtoAdapter,
15
+ sessionStorage,
16
+ }),
17
+ getContext: (dto) => index$1.makeGetContext(dto, {
18
+ createLogtoAdapter,
19
+ sessionStorage,
478
20
  }),
479
- getContext: (dto)=>(0, $10ac017bdfe3e60c$export$f4d9bb4cf5d2b40c)(dto, {
480
- createLogtoAdapter: createLogtoAdapter,
481
- sessionStorage: sessionStorage
482
- })
483
21
  });
484
22
  };
485
23
 
486
-
487
- //# sourceMappingURL=index.js.map
24
+ exports.makeLogtoRemix = makeLogtoRemix;
package/lib/index.mjs ADDED
@@ -0,0 +1,22 @@
1
+ import { makeLogtoAdapter } from './infrastructure/logto/index.mjs';
2
+ import { makeGetContext } from './useCases/getContext/index.mjs';
3
+ import { makeHandleAuthRoutes } from './useCases/handleAuthRoutes/index.mjs';
4
+
5
+ const makeLogtoRemix = (config, deps) => {
6
+ const { sessionStorage } = deps;
7
+ const { baseUrl } = config;
8
+ const createLogtoAdapter = makeLogtoAdapter(config);
9
+ return Object.freeze({
10
+ handleAuthRoutes: makeHandleAuthRoutes({
11
+ baseUrl,
12
+ createLogtoAdapter,
13
+ sessionStorage,
14
+ }),
15
+ getContext: (dto) => makeGetContext(dto, {
16
+ createLogtoAdapter,
17
+ sessionStorage,
18
+ }),
19
+ });
20
+ };
21
+
22
+ export { makeLogtoRemix };
@@ -0,0 +1,6 @@
1
+ import type { LogtoConfig } from '@logto/node';
2
+ import LogtoClient from '@logto/node';
3
+ import type { LogtoStorage } from './create-storage';
4
+ export declare const makeLogtoClient: (config: LogtoConfig, storage: LogtoStorage) => (navigate?: (url: string) => void) => LogtoClient;
5
+ export type CreateLogtoClient = ReturnType<typeof makeLogtoClient>;
6
+ export { type LogtoConfig } from '@logto/node';
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ var LogtoClient = require('@logto/node');
4
+
5
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
6
+
7
+ var LogtoClient__default = /*#__PURE__*/_interopDefault(LogtoClient);
8
+
9
+ const makeLogtoClient = (config, storage) =>
10
+ // Have to deactivate the eslint rule here as the `LogtoClient`
11
+ // awaits a `navigate` function.
12
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
13
+ (navigate = () => { }) => {
14
+ return new LogtoClient__default.default(config, { storage, navigate });
15
+ };
16
+
17
+ exports.makeLogtoClient = makeLogtoClient;
@@ -0,0 +1,11 @@
1
+ import LogtoClient from '@logto/node';
2
+
3
+ const makeLogtoClient = (config, storage) =>
4
+ // Have to deactivate the eslint rule here as the `LogtoClient`
5
+ // awaits a `navigate` function.
6
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
7
+ (navigate = () => { }) => {
8
+ return new LogtoClient(config, { storage, navigate });
9
+ };
10
+
11
+ export { makeLogtoClient };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,14 @@
1
+ import type { Storage, StorageKey } from '@logto/node';
2
+ import type { Session } from '@remix-run/node';
3
+ declare class LogtoStorage implements Storage {
4
+ private readonly properties;
5
+ static readonly fromSession: (session: Session) => LogtoStorage;
6
+ readonly session: Session;
7
+ private constructor();
8
+ readonly setItem: (key: StorageKey, value: string) => Promise<void>;
9
+ readonly getItem: (key: StorageKey) => Promise<string | null>;
10
+ readonly removeItem: (key: StorageKey) => Promise<void>;
11
+ readonly save: () => Promise<void>;
12
+ }
13
+ export declare const createStorage: (session: Session) => LogtoStorage;
14
+ export type { LogtoStorage };
@@ -0,0 +1,30 @@
1
+ 'use strict';
2
+
3
+ class LogtoStorage {
4
+ static { this.fromSession = (session) => {
5
+ return new LogtoStorage({ session });
6
+ }; }
7
+ constructor(properties) {
8
+ this.properties = properties;
9
+ this.session = this.properties.session;
10
+ this.setItem = async (key, value) => {
11
+ this.session.set(key, value);
12
+ };
13
+ this.getItem = async (key) => {
14
+ const itemExists = this.session.has(key);
15
+ if (!itemExists) {
16
+ return null;
17
+ }
18
+ return String(this.session.get(key));
19
+ };
20
+ this.removeItem = async (key) => {
21
+ this.session.unset(key);
22
+ };
23
+ this.save = async () => {
24
+ // Not required as the persistence happens in the integration layer
25
+ };
26
+ }
27
+ }
28
+ const createStorage = (session) => LogtoStorage.fromSession(session);
29
+
30
+ exports.createStorage = createStorage;