@logto/remix 1.1.1 → 2.0.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/lib/framework/get-cookie-header-from-request.cjs +5 -0
- package/lib/framework/get-cookie-header-from-request.d.ts +1 -0
- package/lib/framework/get-cookie-header-from-request.js +3 -0
- package/lib/framework/mocks.d.ts +22 -0
- package/lib/index.cjs +24 -0
- package/lib/index.d.ts +3 -7
- package/lib/index.js +17 -482
- package/lib/infrastructure/logto/create-client.cjs +17 -0
- package/lib/infrastructure/logto/create-client.d.ts +6 -0
- package/lib/infrastructure/logto/create-client.js +11 -0
- package/lib/infrastructure/logto/create-client.spec.d.ts +1 -0
- package/lib/infrastructure/logto/create-storage.cjs +30 -0
- package/lib/infrastructure/logto/create-storage.d.ts +14 -0
- package/lib/infrastructure/logto/create-storage.js +28 -0
- package/lib/infrastructure/logto/create-storage.spec.d.ts +1 -0
- package/lib/infrastructure/logto/get-context.cjs +12 -0
- package/lib/infrastructure/logto/get-context.d.ts +11 -0
- package/lib/infrastructure/logto/get-context.js +10 -0
- package/lib/infrastructure/logto/handle-sign-in-callback.cjs +12 -0
- package/lib/infrastructure/logto/handle-sign-in-callback.d.ts +14 -0
- package/lib/infrastructure/logto/handle-sign-in-callback.js +10 -0
- package/lib/infrastructure/logto/handle-sign-in.cjs +30 -0
- package/lib/infrastructure/logto/handle-sign-in.d.ts +15 -0
- package/lib/infrastructure/logto/handle-sign-in.js +28 -0
- package/lib/infrastructure/logto/handle-sign-out.cjs +26 -0
- package/lib/infrastructure/logto/handle-sign-out.d.ts +11 -0
- package/lib/infrastructure/logto/handle-sign-out.js +24 -0
- package/lib/infrastructure/logto/index.cjs +21 -0
- package/lib/infrastructure/logto/index.d.ts +26 -0
- package/lib/infrastructure/logto/index.js +19 -0
- package/lib/useCases/getContext/GetContextController.cjs +21 -0
- package/lib/useCases/getContext/GetContextController.d.ts +13 -0
- package/lib/useCases/getContext/GetContextController.js +19 -0
- package/lib/useCases/getContext/GetContextController.spec.d.ts +1 -0
- package/lib/useCases/getContext/GetContextUseCase.cjs +13 -0
- package/lib/useCases/getContext/GetContextUseCase.d.ts +15 -0
- package/lib/useCases/getContext/GetContextUseCase.js +11 -0
- package/lib/useCases/getContext/GetContextUseCase.spec.d.ts +1 -0
- package/lib/useCases/getContext/index.cjs +19 -0
- package/lib/useCases/getContext/index.d.ts +9 -0
- package/lib/useCases/getContext/index.js +17 -0
- package/lib/useCases/handleAuthRoutes/HandleAuthRoutesError.cjs +21 -0
- package/lib/useCases/handleAuthRoutes/HandleAuthRoutesError.d.ts +9 -0
- package/lib/useCases/handleAuthRoutes/HandleAuthRoutesError.js +19 -0
- package/lib/useCases/handleAuthRoutes/index.cjs +44 -0
- package/lib/useCases/handleAuthRoutes/index.d.ts +15 -0
- package/lib/useCases/handleAuthRoutes/index.js +42 -0
- package/lib/useCases/handleSignIn/HandleSignInController.cjs +31 -0
- package/lib/useCases/handleSignIn/HandleSignInController.d.ts +15 -0
- package/lib/useCases/handleSignIn/HandleSignInController.js +29 -0
- package/lib/useCases/handleSignIn/HandleSignInController.spec.d.ts +1 -0
- package/lib/useCases/handleSignIn/HandleSignInUseCase.cjs +17 -0
- package/lib/useCases/handleSignIn/HandleSignInUseCase.d.ts +16 -0
- package/lib/useCases/handleSignIn/HandleSignInUseCase.js +15 -0
- package/lib/useCases/handleSignIn/HandleSignInUseCase.spec.d.ts +1 -0
- package/lib/useCases/handleSignIn/index.cjs +19 -0
- package/lib/useCases/handleSignIn/index.d.ts +11 -0
- package/lib/useCases/handleSignIn/index.js +17 -0
- package/lib/useCases/handleSignInCallback/HandleSignInCallbackController.cjs +42 -0
- package/lib/useCases/handleSignInCallback/HandleSignInCallbackController.d.ts +15 -0
- package/lib/useCases/handleSignInCallback/HandleSignInCallbackController.js +40 -0
- package/lib/useCases/handleSignInCallback/HandleSignInCallbackController.spec.d.ts +1 -0
- package/lib/useCases/handleSignInCallback/HandleSignInCallbackError.cjs +17 -0
- package/lib/useCases/handleSignInCallback/HandleSignInCallbackError.d.ts +8 -0
- package/lib/useCases/handleSignInCallback/HandleSignInCallbackError.js +15 -0
- package/lib/useCases/handleSignInCallback/HandleSignInCallbackUseCase.cjs +16 -0
- package/lib/useCases/handleSignInCallback/HandleSignInCallbackUseCase.d.ts +15 -0
- package/lib/useCases/handleSignInCallback/HandleSignInCallbackUseCase.js +14 -0
- package/lib/useCases/handleSignInCallback/HandleSignInCallbackUseCase.spec.d.ts +1 -0
- package/lib/useCases/handleSignInCallback/index.cjs +19 -0
- package/lib/useCases/handleSignInCallback/index.d.ts +11 -0
- package/lib/useCases/handleSignInCallback/index.js +17 -0
- package/lib/useCases/handleSignOut/HandleSignOutController.cjs +34 -0
- package/lib/useCases/handleSignOut/HandleSignOutController.d.ts +15 -0
- package/lib/useCases/handleSignOut/HandleSignOutController.js +32 -0
- package/lib/useCases/handleSignOut/HandleSignOutController.spec.d.ts +1 -0
- package/lib/useCases/handleSignOut/HandleSignOutError.cjs +17 -0
- package/lib/useCases/handleSignOut/HandleSignOutError.d.ts +8 -0
- package/lib/useCases/handleSignOut/HandleSignOutError.js +15 -0
- package/lib/useCases/handleSignOut/HandleSignOutUseCase.cjs +17 -0
- package/lib/useCases/handleSignOut/HandleSignOutUseCase.d.ts +16 -0
- package/lib/useCases/handleSignOut/HandleSignOutUseCase.js +15 -0
- package/lib/useCases/handleSignOut/HandleSignOutUseCase.spec.d.ts +1 -0
- package/lib/useCases/handleSignOut/index.cjs +19 -0
- package/lib/useCases/handleSignOut/index.d.ts +11 -0
- package/lib/useCases/handleSignOut/index.js +17 -0
- package/package.json +29 -34
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/module.d.mts +0 -29
- package/lib/module.mjs +0 -480
- package/lib/module.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const getCookieHeaderFromRequest: (request: Request) => string | null;
|
|
@@ -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/index.js';
|
|
4
|
+
export declare const getContext: jest.Mock<Promise<{
|
|
5
|
+
context: LogtoContext;
|
|
6
|
+
}>, []>;
|
|
7
|
+
export declare const storage: import("../infrastructure/logto/create-storage.js").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.cjs
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var index$2 = require('./infrastructure/logto/index.cjs');
|
|
4
|
+
var index$1 = require('./useCases/getContext/index.cjs');
|
|
5
|
+
var index = require('./useCases/handleAuthRoutes/index.cjs');
|
|
6
|
+
|
|
7
|
+
const makeLogtoRemix = (config, deps) => {
|
|
8
|
+
const { sessionStorage } = deps;
|
|
9
|
+
const { baseUrl } = config;
|
|
10
|
+
const createLogtoAdapter = index$2.makeLogtoAdapter(config);
|
|
11
|
+
return Object.freeze({
|
|
12
|
+
handleAuthRoutes: index.makeHandleAuthRoutes({
|
|
13
|
+
baseUrl,
|
|
14
|
+
createLogtoAdapter,
|
|
15
|
+
sessionStorage,
|
|
16
|
+
}),
|
|
17
|
+
getContext: (dto) => index$1.makeGetContext(dto, {
|
|
18
|
+
createLogtoAdapter,
|
|
19
|
+
sessionStorage,
|
|
20
|
+
}),
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
exports.makeLogtoRemix = makeLogtoRemix;
|
package/lib/index.d.ts
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import { GetContextParameters, LogtoConfig } from
|
|
2
|
-
import { SessionStorage } from
|
|
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,22 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
10
|
-
|
|
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);
|
|
1
|
+
import { makeLogtoAdapter } from './infrastructure/logto/index.js';
|
|
2
|
+
import { makeGetContext } from './useCases/getContext/index.js';
|
|
3
|
+
import { makeHandleAuthRoutes } from './useCases/handleAuthRoutes/index.js';
|
|
4
|
+
|
|
5
|
+
const makeLogtoRemix = (config, deps) => {
|
|
6
|
+
const { sessionStorage } = deps;
|
|
7
|
+
const { baseUrl } = config;
|
|
8
|
+
const createLogtoAdapter = makeLogtoAdapter(config);
|
|
473
9
|
return Object.freeze({
|
|
474
|
-
handleAuthRoutes: (
|
|
475
|
-
baseUrl
|
|
476
|
-
createLogtoAdapter
|
|
477
|
-
sessionStorage
|
|
10
|
+
handleAuthRoutes: makeHandleAuthRoutes({
|
|
11
|
+
baseUrl,
|
|
12
|
+
createLogtoAdapter,
|
|
13
|
+
sessionStorage,
|
|
14
|
+
}),
|
|
15
|
+
getContext: (dto) => makeGetContext(dto, {
|
|
16
|
+
createLogtoAdapter,
|
|
17
|
+
sessionStorage,
|
|
478
18
|
}),
|
|
479
|
-
getContext: (dto)=>(0, $10ac017bdfe3e60c$export$f4d9bb4cf5d2b40c)(dto, {
|
|
480
|
-
createLogtoAdapter: createLogtoAdapter,
|
|
481
|
-
sessionStorage: sessionStorage
|
|
482
|
-
})
|
|
483
19
|
});
|
|
484
20
|
};
|
|
485
21
|
|
|
486
|
-
|
|
487
|
-
//# sourceMappingURL=index.js.map
|
|
22
|
+
export { makeLogtoRemix };
|
|
@@ -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,6 @@
|
|
|
1
|
+
import type { LogtoConfig } from '@logto/node';
|
|
2
|
+
import LogtoClient from '@logto/node';
|
|
3
|
+
import type { LogtoStorage } from './create-storage.js';
|
|
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,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,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;
|
|
@@ -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 };
|