@logto/remix 1.0.0-beta.10 → 1.0.0-beta.12

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/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { LogtoConfig } from "@logto/node";
1
+ import { GetContextParameters, LogtoConfig } from "@logto/node";
2
2
  import { SessionStorage } from "@remix-run/node";
3
3
  export { type LogtoConfig } from '@logto/node';
4
4
  export { type LogtoContext } from '@logto/node';
@@ -22,9 +22,7 @@ export const makeLogtoRemix: (config: Config, deps: {
22
22
  readonly redirectBackTo: string;
23
23
  };
24
24
  }) => import("@remix-run/node").LoaderFunction;
25
- getContext: (dto: {
26
- includeAccessToken: boolean;
27
- }) => (request: Request) => Promise<import("@logto/node").LogtoContext>;
25
+ getContext: (dto: GetContextParameters) => (request: Request) => Promise<import("@logto/node").LogtoContext>;
28
26
  }>;
29
27
  export { type LogtoContext } from '@logto/node';
30
28
 
@@ -1 +1 @@
1
- {"mappings":";;ACeA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AKW/C,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AkBnBhD,cAAc,QAAQ,CAAC,WAAW,CAAC,GAAG;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,OAAO,MAAM,yBACH,MAAM,QACR;IACJ,gBAAgB,cAAc,CAAC;CAChC;;;;;;;;;;;;;;;sBAemB;QAAE,kBAAkB,EAAE,OAAO,CAAA;KAAE;EAMpD,CAAC;AAEF,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC","sources":["packages/remix/src/src/infrastructure/logto/create-storage.ts","packages/remix/src/src/infrastructure/logto/create-client.ts","packages/remix/src/src/infrastructure/logto/get-context.ts","packages/remix/src/src/infrastructure/logto/handle-sign-in.ts","packages/remix/src/src/infrastructure/logto/handle-sign-in-callback.ts","packages/remix/src/src/infrastructure/logto/handle-sign-out.ts","packages/remix/src/src/infrastructure/logto/index.ts","packages/remix/src/src/framework/get-cookie-header-from-request.ts","packages/remix/src/src/useCases/getContext/GetContextUseCase.ts","packages/remix/src/src/useCases/getContext/GetContextController.ts","packages/remix/src/src/useCases/getContext/index.ts","packages/remix/src/src/useCases/handleSignIn/HandleSignInUseCase.ts","packages/remix/src/src/useCases/handleSignIn/HandleSignInController.ts","packages/remix/src/src/useCases/handleSignIn/index.ts","packages/remix/src/src/useCases/handleSignInCallback/HandleSignInCallbackError.ts","packages/remix/src/src/useCases/handleSignInCallback/HandleSignInCallbackUseCase.ts","packages/remix/src/src/useCases/handleSignInCallback/HandleSignInCallbackController.ts","packages/remix/src/src/useCases/handleSignInCallback/index.ts","packages/remix/src/src/useCases/handleSignOut/HandleSignOutError.ts","packages/remix/src/src/useCases/handleSignOut/HandleSignOutUseCase.ts","packages/remix/src/src/useCases/handleSignOut/HandleSignOutController.ts","packages/remix/src/src/useCases/handleSignOut/index.ts","packages/remix/src/src/useCases/handleAuthRoutes/HandleAuthRoutesError.ts","packages/remix/src/src/useCases/handleAuthRoutes/index.ts","packages/remix/src/src/index.ts","packages/remix/src/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"import { LogtoConfig } from '@logto/node';\nimport { SessionStorage } from '@remix-run/node';\n\nimport { makeLogtoAdapter } from './infrastructure/logto';\nimport { makeGetContext } from './useCases/getContext';\nimport { makeHandleAuthRoutes } from './useCases/handleAuthRoutes';\n\ntype Config = Readonly<LogtoConfig> & {\n readonly baseUrl: string;\n};\n\nexport const makeLogtoRemix = (\n config: Config,\n deps: {\n sessionStorage: SessionStorage;\n }\n) => {\n const { sessionStorage } = deps;\n\n const { baseUrl } = config;\n\n const createLogtoAdapter = makeLogtoAdapter(config);\n\n return Object.freeze({\n handleAuthRoutes: makeHandleAuthRoutes({\n baseUrl,\n createLogtoAdapter,\n sessionStorage,\n }),\n\n getContext: (dto: { includeAccessToken: boolean }) =>\n makeGetContext(dto, {\n createLogtoAdapter,\n sessionStorage,\n }),\n });\n};\n\nexport { type LogtoContext } from '@logto/node';\n"],"names":[],"version":3,"file":"index.d.ts.map"}
1
+ {"mappings":";;ACeA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AKW/C,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AkBnBhD,cAAc,QAAQ,CAAC,WAAW,CAAC,GAAG;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,OAAO,MAAM,yBACH,MAAM,QACR;IACJ,gBAAgB,cAAc,CAAC;CAChC;;;;;;;;;;;;;;;sBAemB,oBAAoB;EAMzC,CAAC;AAEF,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC","sources":["packages/remix/src/src/infrastructure/logto/create-storage.ts","packages/remix/src/src/infrastructure/logto/create-client.ts","packages/remix/src/src/infrastructure/logto/get-context.ts","packages/remix/src/src/infrastructure/logto/handle-sign-in.ts","packages/remix/src/src/infrastructure/logto/handle-sign-in-callback.ts","packages/remix/src/src/infrastructure/logto/handle-sign-out.ts","packages/remix/src/src/infrastructure/logto/index.ts","packages/remix/src/src/framework/get-cookie-header-from-request.ts","packages/remix/src/src/useCases/getContext/GetContextUseCase.ts","packages/remix/src/src/useCases/getContext/GetContextController.ts","packages/remix/src/src/useCases/getContext/index.ts","packages/remix/src/src/useCases/handleSignIn/HandleSignInUseCase.ts","packages/remix/src/src/useCases/handleSignIn/HandleSignInController.ts","packages/remix/src/src/useCases/handleSignIn/index.ts","packages/remix/src/src/useCases/handleSignInCallback/HandleSignInCallbackError.ts","packages/remix/src/src/useCases/handleSignInCallback/HandleSignInCallbackUseCase.ts","packages/remix/src/src/useCases/handleSignInCallback/HandleSignInCallbackController.ts","packages/remix/src/src/useCases/handleSignInCallback/index.ts","packages/remix/src/src/useCases/handleSignOut/HandleSignOutError.ts","packages/remix/src/src/useCases/handleSignOut/HandleSignOutUseCase.ts","packages/remix/src/src/useCases/handleSignOut/HandleSignOutController.ts","packages/remix/src/src/useCases/handleSignOut/index.ts","packages/remix/src/src/useCases/handleAuthRoutes/HandleAuthRoutesError.ts","packages/remix/src/src/useCases/handleAuthRoutes/index.ts","packages/remix/src/src/index.ts","packages/remix/src/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"import { GetContextParameters, LogtoConfig } from '@logto/node';\nimport { SessionStorage } from '@remix-run/node';\n\nimport { makeLogtoAdapter } from './infrastructure/logto';\nimport { makeGetContext } from './useCases/getContext';\nimport { makeHandleAuthRoutes } from './useCases/handleAuthRoutes';\n\ntype Config = Readonly<LogtoConfig> & {\n readonly baseUrl: string;\n};\n\nexport const makeLogtoRemix = (\n config: Config,\n deps: {\n sessionStorage: SessionStorage;\n }\n) => {\n const { sessionStorage } = deps;\n\n const { baseUrl } = config;\n\n const createLogtoAdapter = makeLogtoAdapter(config);\n\n return Object.freeze({\n handleAuthRoutes: makeHandleAuthRoutes({\n baseUrl,\n createLogtoAdapter,\n sessionStorage,\n }),\n\n getContext: (dto: GetContextParameters) =>\n makeGetContext(dto, {\n createLogtoAdapter,\n sessionStorage,\n }),\n });\n};\n\nexport { type LogtoContext } from '@logto/node';\n"],"names":[],"version":3,"file":"index.d.ts.map"}
package/lib/index.js CHANGED
@@ -52,7 +52,7 @@ const $827429ca01feafa0$export$d184a47a971dd4b9 = (session)=>$827429ca01feafa0$v
52
52
  const $929a552c463d8b64$export$f4d9bb4cf5d2b40c = (deps)=>async (request)=>{
53
53
  const { storage: storage , createClient: createClient } = deps;
54
54
  const client = createClient();
55
- const context = await client.getContext(request.includeAccessToken);
55
+ const context = await client.getContext(request);
56
56
  return {
57
57
  context: context
58
58
  };
@@ -156,20 +156,15 @@ const $978a582c6f8c8e7b$export$5c6fae4c79d686e4 = (request)=>request.headers.get
156
156
 
157
157
 
158
158
  class $9d799c5e2ef306d6$export$32386402b3f0a45 {
159
- static fromDto = (dto)=>new $9d799c5e2ef306d6$export$32386402b3f0a45({
160
- useCase: dto.useCase,
161
- includeAccessToken: dto.includeAccessToken ?? false
162
- });
159
+ static fromDto = (dto)=>new $9d799c5e2ef306d6$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
164
  const cookieHeader = (0, $978a582c6f8c8e7b$export$5c6fae4c79d686e4)(request);
169
- const { includeAccessToken: includeAccessToken } = this;
170
165
  const result = await this.useCase({
171
166
  cookieHeader: cookieHeader ?? undefined,
172
- includeAccessToken: includeAccessToken
167
+ ...this.properties
173
168
  });
174
169
  return result.context;
175
170
  };
@@ -181,9 +176,7 @@ const $407324a9de7811e9$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
  };
@@ -198,7 +191,7 @@ const $7b69d37f648a005c$export$f4d9bb4cf5d2b40c = (dto, deps)=>async (request)=>
198
191
  });
199
192
  const controller = (0, $9d799c5e2ef306d6$export$32386402b3f0a45).fromDto({
200
193
  useCase: useCase,
201
- includeAccessToken: dto.includeAccessToken
194
+ ...dto
202
195
  });
203
196
  return controller.execute(request);
204
197
  };
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"mappings":";;;;;;;;;;;AEAA;AAIO,MAAM,yCAAe,GAC1B,CAAC,MAAmB,EAAE,OAAqB,GAC3C,+DAA+D;IAC/D,gCAAgC;IAChC,gEAAgE;IAChE,CAAC,QAA+B,GAAG,IAAM,EAAE,GAAK;QAC9C,OAAO,IAAI,CAAA,GAAA,0CAAW,CAAA,CAAC,MAAM,EAAE;qBAAE,OAAO;sBAAE,QAAQ;SAAE,CAAC,CAAC;KACvD,AAAC;;ADXJ;AEGA,MAAM,kCAAY;IAChB,OAAuB,WAAW,GAAG,CAAC,OAAgB,GAAK;QACzD,OAAO,IAAI,kCAAY,CAAC;qBAAE,OAAO;SAAE,CAAC,CAAC;KACtC,CAAC;IAIF,YACmB,UAEhB,CACD;aAHiB,UAEhB,GAFgB,UAEhB;aALa,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO;aAQjC,OAAO,GAAG,OAAO,GAAe,EAAE,KAAa,GAAK;YAClE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SAC9B;aAEe,OAAO,GAAG,OAAO,GAAe,GAAK;YACnD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,AAAC;YAEzC,IAAI,CAAC,UAAU,EACb,OAAO,IAAI,CAAC;YAGd,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;SACtC;aAEe,UAAU,GAAG,OAAO,GAAe,GAAK;YACtD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SACzB;aAEe,IAAI,GAAG,UAAY;QACjC,mEAAmE;SACpE;KAtBG;CAuBL;AAEM,MAAM,yCAAa,GAAG,CAAC,OAAgB,GAAK,kCAAY,CAAC,WAAW,CAAC,OAAO,CAAC,AAAC;;;AC1B9E,MAAM,yCAAc,GACzB,CAAC,IAAgE,GACjE,OAAO,OAA0B,GAAkC;QACjE,MAAM,WAAE,OAAO,CAAA,gBAAE,YAAY,CAAA,EAAE,GAAG,IAAI,AAAC;QAEvC,MAAM,MAAM,GAAG,YAAY,EAAE,AAAC;QAE9B,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,AAAC;QAEpE,OAAO;qBACL,OAAO;SACR,CAAC;KACH,AAAC;;;ACXJ,MAAM,yCAAmB;IACvB,OAAuB,gBAAgB,GAAG,CAAC,YAAiD,GAC1F,IAAI,yCAAmB,CAAC;YAAE,YAAY,EAAE,YAAY,CAAC,YAAY;SAAE,CAAC,CAAC;IAIvE,YACmB,UAEhB,CACD;aAHiB,UAEhB,GAFgB,UAEhB;aALK,aAAa,GAAG,cAAc;KAMlC;IAEJ,MAAa,OAAO,CAAC,OAA4B,EAAE;QACjD,MAAM,gBAAE,YAAY,CAAA,EAAE,GAAG,IAAI,CAAC,UAAU,AAAC;QAEzC,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,GAAG,GAAK;YACnC,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC;SAC1B,CAAC,AAAC;QAEH,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAEzC,OAAO;YACL,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC;KACH;CACF;AAEM,MAAM,yCAAgB,GAC3B,CAAC,IAAgE,GACjE,OAAO,OAA4B,GAAoC;QACrE,MAAM,WAAE,OAAO,CAAA,gBAAE,YAAY,CAAA,EAAE,GAAG,IAAI,AAAC;QAEvC,MAAM,OAAO,GAAG,yCAAmB,CAAC,gBAAgB,CAAC;0BAAE,YAAY;SAAE,CAAC,AAAC;QAEvE,MAAM,iBAAE,aAAa,CAAA,EAAE,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,AAAC;QAEzD,OAAO;YACL,OAAO,EAAE,OAAO,CAAC,OAAO;2BACxB,aAAa;SACd,CAAC;KACH,AAAC;;;ACzCG,MAAM,yCAAwB,GACnC,CAAC,IAAgE,GACjE,OAAO,OAAoC,GAA4C;QACrF,MAAM,WAAE,OAAO,CAAA,gBAAE,YAAY,CAAA,EAAE,GAAG,IAAI,AAAC;QAEvC,MAAM,MAAM,GAAG,YAAY,EAAE,AAAC;QAE9B,MAAM,MAAM,CAAC,oBAAoB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAEvD,OAAO;YACL,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC;KACH,AAAC;;;ACfJ,MAAM,0CAAoB;IACxB,OAAuB,gBAAgB,GAAG,CAAC,YAAiD,GAC1F,IAAI,0CAAoB,CAAC;YAAE,YAAY,EAAE,YAAY,CAAC,YAAY;SAAE,CAAC,CAAC;IAIxE,YACmB,UAEhB,CACD;aAHiB,UAEhB,GAFgB,UAEhB;aALK,aAAa,GAAG,cAAc;KAMlC;IAEJ,MAAa,OAAO,CAAC,OAA6B,EAAE;QAClD,MAAM,gBAAE,YAAY,CAAA,EAAE,GAAG,IAAI,CAAC,UAAU,AAAC;QAEzC,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,GAAG,GAAK;YACnC,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC;SAC1B,CAAC,AAAC;QAEH,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAE1C,OAAO;YACL,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC;KACH;CACF;AAEM,MAAM,yCAAiB,GAC5B,CAAC,IAAyC,GAC1C,OAAO,OAA6B,GAAqC;QACvE,MAAM,gBAAE,YAAY,CAAA,EAAE,GAAG,IAAI,AAAC;QAE9B,MAAM,OAAO,GAAG,0CAAoB,CAAC,gBAAgB,CAAC;0BAAE,YAAY;SAAE,CAAC,AAAC;QAExE,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;KACjC,AAAC;;;ANjCG,MAAM,yCAAgB,GAAG,CAAC,MAAqC,GAAK,CAAC,OAAgB,GAAK;QAC/F,MAAM,OAAO,GAAG,CAAA,GAAA,yCAAa,CAAA,CAAC,OAAO,CAAC,AAAC;QACvC,MAAM,YAAY,GAAG,CAAA,GAAA,yCAAe,CAAA,CAAC,MAAM,EAAE,OAAO,CAAC,AAAC;QAEtD,OAAO;YACL,YAAY,EAAE,CAAA,GAAA,yCAAgB,CAAA,CAAC;yBAAE,OAAO;8BAAE,YAAY;aAAE,CAAC;YACzD,oBAAoB,EAAE,CAAA,GAAA,yCAAwB,CAAA,CAAC;yBAAE,OAAO;8BAAE,YAAY;aAAE,CAAC;YACzE,aAAa,EAAE,CAAA,GAAA,yCAAiB,CAAA,CAAC;8BAAE,YAAY;aAAE,CAAC;YAClD,UAAU,EAAE,CAAA,GAAA,yCAAc,CAAA,CAAC;yBAAE,OAAO;8BAAE,YAAY;aAAE,CAAC;SACtD,CAAC;KACH,AAAC;;ADtBF;AUAO,MAAM,yCAA0B,GAAG,CAAC,OAAgB,GAAK,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,AAAC;;ADA9F;AAUO,MAAM,wCAAoB;IAC/B,OAAuB,OAAO,GAAG,CAAC,GAA4B,GAC5D,IAAI,wCAAoB,CAAC;YACvB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,kBAAkB,EAAE,GAAG,CAAC,kBAAkB,IAAI,KAAK;SACpD,CAAC,CAAC;IAIL,YACmB,UAGhB,CACD;aAJiB,UAGhB,GAHgB,UAGhB;aANc,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO;aACjC,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB;aAQxD,OAAO,GAAG,OAAO,OAAgB,GAA4B;YAC3E,MAAM,YAAY,GAAG,CAAA,GAAA,yCAA0B,CAAA,CAAC,OAAO,CAAC,AAAC;YACzD,MAAM,sBAAE,kBAAkB,CAAA,EAAE,GAAG,IAAI,AAAC;YAEpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC;gBAChC,YAAY,EAAE,YAAY,IAAI,SAAS;oCACvC,kBAAkB;aACnB,CAAC,AAAC;YAEH,OAAO,MAAM,CAAC,OAAO,CAAC;SACvB;KAZG;CAaL;;ADrCD;AGaO,MAAM,yCAAqB,GAChC,CAAC,IAAgF,GACjF,OAAO,OAA0B,GAAkC;QACjE,MAAM,kBAAE,cAAc,CAAA,sBAAE,kBAAkB,CAAA,EAAE,GAAG,IAAI,AAAC;QAEpD,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,AAAC;QAEtE,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,AAAC;QAE1C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC;YACtC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;SAC/C,CAAC,AAAC;QAEH,OAAO;YACL,OAAO,EAAE,QAAQ,CAAC,OAAO;SAC1B,CAAC;KACH,AAAC;;;AHdG,MAAM,yCAAc,GACzB,CAAC,GAAkB,EAAE,IAA0B,GAAK,OAAO,OAAgB,GAAK;QAC9E,MAAM,sBAAE,kBAAkB,CAAA,kBAAE,cAAc,CAAA,EAAE,GAAG,IAAI,AAAC;QAEpD,MAAM,OAAO,GAAG,CAAA,GAAA,yCAAqB,CAAA,CAAC;gCACpC,kBAAkB;4BAClB,cAAc;SACf,CAAC,AAAC;QAEH,MAAM,UAAU,GAAG,CAAA,GAAA,wCAAoB,CAAA,CAAC,OAAO,CAAC;qBAC9C,OAAO;YACP,kBAAkB,EAAE,GAAG,CAAC,kBAAkB;SAC3C,CAAC,AAAC;QAEH,OAAO,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;KACpC,AAAC;;;AM9BJ;;AAUO,MAAM,yCAAsB;IACjC,OAAuB,OAAO,GAAG,CAAC,GAA8B,GAC9D,IAAI,yCAAsB,CAAC;YACzB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,WAAW,EAAE,GAAG,CAAC,WAAW;SAC7B,CAAC,CAAC;IAIL,YACmB,UAGhB,CACD;aAJiB,UAGhB,GAHgB,UAGhB;aANc,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO;aACjC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW;aAQ1C,OAAO,GAAG,OAAO,OAAgB,GAAoC;YACnF,MAAM,YAAY,GAAG,CAAA,GAAA,yCAA0B,CAAA,CAAC,OAAO,CAAC,AAAC;YACzD,MAAM,eAAE,WAAW,CAAA,EAAE,GAAG,IAAI,AAAC;YAE7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC;gBAChC,YAAY,EAAE,YAAY,IAAI,SAAS;6BACvC,WAAW;aACZ,CAAC,AAAC;YAEH,OAAO,CAAA,GAAA,4BAAQ,CAAA,CAAC,MAAM,CAAC,aAAa,EAAE;gBACpC,OAAO,EAAE;oBACP,YAAY,EAAE,MAAM,CAAC,YAAY;iBAClC;aACF,CAAC,CAAC;SACJ;KAhBG;CAiBL;;ADzCD;AEcO,MAAM,yCAAuB,GAClC,CAAC,IAAgF,GACjF,OAAO,OAAsB,GAA8B;QACzD,MAAM,kBAAE,cAAc,CAAA,sBAAE,kBAAkB,CAAA,EAAE,GAAG,IAAI,AAAC;QAEpD,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,AAAC;QAEtE,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,AAAC;QAE1C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC;YACxC,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC,AAAC;QAEH,MAAM,YAAY,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,AAAC;QAE1E,OAAO;0BACL,YAAY;YACZ,aAAa,EAAE,QAAQ,CAAC,aAAa;SACtC,CAAC;KACH,AAAC;;;AFlBG,MAAM,yCAAgB,GAC3B,CAAC,GAAoB,EAAE,IAAsB,GAAK,OAAO,OAAgB,GAAK;QAC5E,MAAM,sBAAE,kBAAkB,CAAA,kBAAE,cAAc,CAAA,EAAE,GAAG,IAAI,AAAC;QAEpD,MAAM,OAAO,GAAG,CAAA,GAAA,yCAAuB,CAAA,CAAC;gCACtC,kBAAkB;4BAClB,cAAc;SACf,CAAC,AAAC;QAEH,MAAM,UAAU,GAAG,CAAA,GAAA,yCAAsB,CAAA,CAAC,OAAO,CAAC;qBAChD,OAAO;YACP,WAAW,EAAE,GAAG,CAAC,cAAc;SAChC,CAAC,AAAC;QAEH,OAAO,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;KACpC,AAAC;;AD9BJ;AKAA;;ACAO,MAAM,yCAAyB,SAAS,KAAK;IAClD,OAAuB,4BAA4B,GAAG,IACpD,IAAI,yCAAyB,CAAC;YAC5B,IAAI,EAAE,UAAa;YACnB,OAAO,EAAE,CAAC,mFAAmF,CAAC;SAC/F,CAAC,CAAC;IAML,YACmB,UAIhB,CACD;QACA,KAAK,CAAC,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;aANpC,UAIhB,GAJgB,UAIhB;aATa,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI;aAC3B,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK;aAC7B,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO;KAUrD;CACF;;;ADTM,MAAM,yCAA8B;IACzC,OAAuB,OAAO,GAAG,CAAC,GAAsC,GACtE,IAAI,yCAA8B,CAAC;YACjC,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,WAAW,EAAE,GAAG,CAAC,WAAW;SAC7B,CAAC,CAAC;IAKL,YACmB,UAGhB,CACD;aAJiB,UAGhB,GAHgB,UAGhB;aAPc,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO;aACjC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW;aAS1C,OAAO,GAAG,OAAO,OAAgB,GAAoC;YACnF,MAAM,YAAY,GAAG,CAAA,GAAA,yCAA0B,CAAA,CAAC,OAAO,CAAC,AAAC;YAEzD,IAAI,CAAC,YAAY,EACf,MAAM,CAAA,GAAA,yCAAyB,CAAA,CAAC,4BAA4B,EAAE,CAAC;YAGjE,0EAA0E;YAC1E,yEAAyE;YACzE,6EAA6E;YAC7E,wEAAwE;YACxE,MAAM,uBAAuB,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,KAAK,OAAO,AAAC;YAErF,MAAM,WAAW,GAAG,uBAAuB,GACvC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,GACpC,OAAO,CAAC,GAAG,AAAC;YAEhB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC;8BAChC,YAAY;6BACZ,WAAW;aACZ,CAAC,AAAC;YAEH,OAAO,CAAA,GAAA,4BAAQ,CAAA,CAAC,IAAI,CAAC,WAAW,EAAE;gBAChC,OAAO,EAAE;oBACP,YAAY,EAAE,MAAM,CAAC,YAAY;iBAClC;aACF,CAAC,CAAC;SACJ;KA7BG;CA8BL;;ADxDD;AGaO,MAAM,yCAA+B,GAC1C,CAAC,IAAgF,GACjF,OAAO,OAA8B,GAAsC;QACzE,MAAM,kBAAE,cAAc,CAAA,sBAAE,kBAAkB,CAAA,EAAE,GAAG,IAAI,AAAC;QAEpD,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,AAAC;QAEtE,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,AAAC;QAE1C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,oBAAoB,CAAC;YAChD,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC,AAAC;QAEH,MAAM,YAAY,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,AAAC;QAE1E,OAAO;0BACL,YAAY;SACb,CAAC;KACH,AAAC;;;AHhBG,MAAM,yCAAwB,GACnC,CAAC,GAA4B,EAAE,IAA8B,GAAK,OAAO,OAAgB,GAAK;QAC5F,MAAM,sBAAE,kBAAkB,CAAA,kBAAE,cAAc,CAAA,EAAE,GAAG,IAAI,AAAC;QAEpD,MAAM,OAAO,GAAG,CAAA,GAAA,yCAA+B,CAAA,CAAC;gCAC9C,kBAAkB;4BAClB,cAAc;SACf,CAAC,AAAC;QAEH,MAAM,UAAU,GAAG,CAAA,GAAA,yCAA8B,CAAA,CAAC,OAAO,CAAC;qBACxD,OAAO;YACP,WAAW,EAAE,GAAG,CAAC,cAAc;SAChC,CAAC,AAAC;QAEH,OAAO,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;KACpC,AAAC;;;AK9BJ;;ACAO,MAAM,yCAAkB,SAAS,KAAK;IAC3C,OAAuB,4BAA4B,GAAG,IACpD,IAAI,yCAAkB,CAAC;YACrB,IAAI,EAAE,UAAa;YACnB,OAAO,EAAE,CAAC,2EAA2E,CAAC;SACvF,CAAC,CAAC;IAML,YACmB,UAIhB,CACD;QACA,KAAK,CAAC,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;aANpC,UAIhB,GAJgB,UAIhB;aATa,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI;aAC3B,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK;aAC7B,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO;KAUrD;CACF;;;ADTM,MAAM,yCAAuB;IAClC,OAAuB,OAAO,GAAG,CAAC,GAA+B,GAC/D,IAAI,yCAAuB,CAAC;YAC1B,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,WAAW,EAAE,GAAG,CAAC,WAAW;SAC7B,CAAC,CAAC;IAKL,YACmB,UAGhB,CACD;aAJiB,UAGhB,GAHgB,UAGhB;aAPc,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO;aACjC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW;aAS1C,OAAO,GAAG,OAAO,OAAgB,GAAoC;YACnF,MAAM,YAAY,GAAG,CAAA,GAAA,yCAA0B,CAAA,CAAC,OAAO,CAAC,AAAC;YAEzD,IAAI,CAAC,YAAY,EACf,MAAM,CAAA,GAAA,yCAAkB,CAAA,CAAC,4BAA4B,EAAE,CAAC;YAG1D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC;8BAChC,YAAY;gBACZ,WAAW,EAAE,IAAI,CAAC,WAAW;aAC9B,CAAC,AAAC;YAEH,OAAO,CAAA,GAAA,4BAAQ,CAAA,CAAC,MAAM,CAAC,aAAa,EAAE;gBACpC,OAAO,EAAE;oBACP,YAAY,EAAE,MAAM,CAAC,YAAY;iBAClC;aACF,CAAC,CAAC;SACJ;KAnBG;CAoBL;;AD9CD;AGcO,MAAM,yCAAwB,GACnC,CAAC,IAAgF,GACjF,OAAO,OAAuB,GAA+B;QAC3D,MAAM,kBAAE,cAAc,CAAA,sBAAE,kBAAkB,CAAA,EAAE,GAAG,IAAI,AAAC;QAEpD,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,AAAC;QAEtE,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,AAAC;QAE1C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,aAAa,CAAC;YACzC,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC,AAAC;QAEH,MAAM,YAAY,GAAG,MAAM,cAAc,CAAC,cAAc,CAAC,OAAO,CAAC,AAAC;QAElE,OAAO;0BACL,YAAY;YACZ,aAAa,EAAE,QAAQ,CAAC,aAAa;SACtC,CAAC;KACH,AAAC;;;AHlBG,MAAM,yCAAiB,GAC5B,CAAC,GAAqB,EAAE,IAAuB,GAAK,OAAO,OAAgB,GAAK;QAC9E,MAAM,sBAAE,kBAAkB,CAAA,kBAAE,cAAc,CAAA,EAAE,GAAG,IAAI,AAAC;QAEpD,MAAM,OAAO,GAAG,CAAA,GAAA,yCAAwB,CAAA,CAAC;gCACvC,kBAAkB;4BAClB,cAAc;SACf,CAAC,AAAC;QAEH,MAAM,UAAU,GAAG,CAAA,GAAA,yCAAuB,CAAA,CAAC,OAAO,CAAC;qBACjD,OAAO;YACP,WAAW,EAAE,GAAG,CAAC,cAAc;SAChC,CAAC,AAAC;QAEH,OAAO,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;KACpC,AAAC;;;AI9BG,MAAM,yCAAqB,SAAS,KAAK;IAC9C,OAAuB,sBAAsB,GAAG,CAAC,eAAuB,GACtE,IAAI,yCAAqB,CAAC;YACxB,IAAI,EAAE,UAAa;YACnB,OAAO,EAAE,CAAC,qCAAqC,EAAE,eAAe,CAAC,EAAE,CAAC;SACrE,CAAC,CAAC;IAEL,OAAuB,qBAAqB,GAAG,CAAC,oBAA4B,GAC1E,IAAI,yCAAqB,CAAC;YACxB,IAAI,EAAE,UAAa;YACnB,OAAO,EAAE,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,aAAa,CAAC;SAChE,CAAC,CAAC;IAML,YACmB,UAIhB,CACD;QACA,KAAK,CAAC,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;aANpC,UAIhB,GAJgB,UAIhB;aATa,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI;aAC3B,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK;aAC7B,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO;KAUrD;CACF;;;AZHM,MAAM,yCAAoB,GAC/B,CAAC,IAA6B,GAC9B,CAAC,GAAwB,GACzB,OAAO,WAAE,OAAO,CAAA,EAAE,GAAK;YACrB,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,AAAC;YAEtD,yCAAyC,CACzC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CACrC,CAAC,IAAI,GAAK,GAAG,CAAC,IAAI,CAAuB,CAAC,IAAI,KAAK,eAAe,CACnE,AAA6B,AAAC;YAE/B,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,AAAC;YACxC,wCAAwC,CAExC,IAAI,CAAC,YAAY,EACf,MAAM,CAAA,GAAA,yCAAqB,CAAA,CAAC,sBAAsB,CAAC,eAAe,CAAC,CAAC;YAGtE,MAAM,kBAAE,cAAc,CAAA,sBAAE,kBAAkB,CAAA,WAAE,OAAO,CAAA,EAAE,GAAG,IAAI,AAAC;YAE7D,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,AAAC;YAE9B,OAAQ,SAAS;gBACf,KAAK,SAAS;oBAAE;wBACd,MAAM,OAAO,GAAG,CAAA,GAAA,yCAAgB,CAAA,CAC9B;4BACE,cAAc,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;yBACrD,EACD;4CAAE,cAAc;gDAAE,kBAAkB;yBAAE,CACvC,AAAC;wBAEF,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC;qBACzB;gBAED,KAAK,kBAAkB;oBAAE;wBACvB,MAAM,QAAO,GAAG,CAAA,GAAA,yCAAwB,CAAA,CACtC;4BACE,cAAc,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;yBACrD,EACD;4CAAE,cAAc;gDAAE,kBAAkB;yBAAE,CACvC,AAAC;wBAEF,OAAO,QAAO,CAAC,OAAO,CAAC,CAAC;qBACzB;gBAED,KAAK,UAAU;oBAAE;wBACf,MAAM,QAAO,GAAG,CAAA,GAAA,yCAAiB,CAAA,CAC/B;4BACE,cAAc,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;yBACrD,EACD;4CAAE,cAAc;gDAAE,kBAAkB;yBAAE,CACvC,AAAC;wBAEF,OAAO,QAAO,CAAC,OAAO,CAAC,CAAC;qBACzB;gBAED;oBACE,MAAM,CAAA,GAAA,yCAAqB,CAAA,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;aAEhE;SACF,AAAC;;;AZxEG,MAAM,yCAAc,GAAG,CAC5B,MAAc,EACd,IAEC,GACE;IACH,MAAM,kBAAE,cAAc,CAAA,EAAE,GAAG,IAAI,AAAC;IAEhC,MAAM,WAAE,OAAO,CAAA,EAAE,GAAG,MAAM,AAAC;IAE3B,MAAM,kBAAkB,GAAG,CAAA,GAAA,yCAAgB,CAAA,CAAC,MAAM,CAAC,AAAC;IAEpD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,gBAAgB,EAAE,CAAA,GAAA,yCAAoB,CAAA,CAAC;qBACrC,OAAO;gCACP,kBAAkB;4BAClB,cAAc;SACf,CAAC;QAEF,UAAU,EAAE,CAAC,GAAoC,GAC/C,CAAA,GAAA,yCAAc,CAAA,CAAC,GAAG,EAAE;oCAClB,kBAAkB;gCAClB,cAAc;aACf,CAAC;KACL,CAAC,CAAC;CACJ,AAAC","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(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":"../../../"}
1
+ {"mappings":";;;;;;;;;;;AEAA;AAIO,MAAM,yCAAe,GAC1B,CAAC,MAAmB,EAAE,OAAqB,GAC3C,+DAA+D;IAC/D,gCAAgC;IAChC,gEAAgE;IAChE,CAAC,QAA+B,GAAG,IAAM,EAAE,GAAK;QAC9C,OAAO,IAAI,CAAA,GAAA,0CAAW,CAAA,CAAC,MAAM,EAAE;qBAAE,OAAO;sBAAE,QAAQ;SAAE,CAAC,CAAC;KACvD,AAAC;;ADXJ;AEGA,MAAM,kCAAY;IAChB,OAAuB,WAAW,GAAG,CAAC,OAAgB,GAAK;QACzD,OAAO,IAAI,kCAAY,CAAC;qBAAE,OAAO;SAAE,CAAC,CAAC;KACtC,CAAC;IAIF,YACmB,UAEhB,CACD;aAHiB,UAEhB,GAFgB,UAEhB;aALa,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO;aAQjC,OAAO,GAAG,OAAO,GAAe,EAAE,KAAa,GAAK;YAClE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SAC9B;aAEe,OAAO,GAAG,OAAO,GAAe,GAAK;YACnD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,AAAC;YAEzC,IAAI,CAAC,UAAU,EACb,OAAO,IAAI,CAAC;YAGd,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;SACtC;aAEe,UAAU,GAAG,OAAO,GAAe,GAAK;YACtD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SACzB;aAEe,IAAI,GAAG,UAAY;QACjC,mEAAmE;SACpE;KAtBG;CAuBL;AAEM,MAAM,yCAAa,GAAG,CAAC,OAAgB,GAAK,kCAAY,CAAC,WAAW,CAAC,OAAO,CAAC,AAAC;;;AC9B9E,MAAM,yCAAc,GACzB,CAAC,IAAgE,GACjE,OAAO,OAA6B,GAAkC;QACpE,MAAM,WAAE,OAAO,CAAA,gBAAE,YAAY,CAAA,EAAE,GAAG,IAAI,AAAC;QAEvC,MAAM,MAAM,GAAG,YAAY,EAAE,AAAC;QAE9B,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,AAAC;QAEjD,OAAO;qBACL,OAAO;SACR,CAAC;KACH,AAAC;;;ACPJ,MAAM,yCAAmB;IACvB,OAAuB,gBAAgB,GAAG,CAAC,YAAiD,GAC1F,IAAI,yCAAmB,CAAC;YAAE,YAAY,EAAE,YAAY,CAAC,YAAY;SAAE,CAAC,CAAC;IAIvE,YACmB,UAEhB,CACD;aAHiB,UAEhB,GAFgB,UAEhB;aALK,aAAa,GAAG,cAAc;KAMlC;IAEJ,MAAa,OAAO,CAAC,OAA4B,EAAE;QACjD,MAAM,gBAAE,YAAY,CAAA,EAAE,GAAG,IAAI,CAAC,UAAU,AAAC;QAEzC,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,GAAG,GAAK;YACnC,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC;SAC1B,CAAC,AAAC;QAEH,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAEzC,OAAO;YACL,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC;KACH;CACF;AAEM,MAAM,yCAAgB,GAC3B,CAAC,IAAgE,GACjE,OAAO,OAA4B,GAAoC;QACrE,MAAM,WAAE,OAAO,CAAA,gBAAE,YAAY,CAAA,EAAE,GAAG,IAAI,AAAC;QAEvC,MAAM,OAAO,GAAG,yCAAmB,CAAC,gBAAgB,CAAC;0BAAE,YAAY;SAAE,CAAC,AAAC;QAEvE,MAAM,iBAAE,aAAa,CAAA,EAAE,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,AAAC;QAEzD,OAAO;YACL,OAAO,EAAE,OAAO,CAAC,OAAO;2BACxB,aAAa;SACd,CAAC;KACH,AAAC;;;ACzCG,MAAM,yCAAwB,GACnC,CAAC,IAAgE,GACjE,OAAO,OAAoC,GAA4C;QACrF,MAAM,WAAE,OAAO,CAAA,gBAAE,YAAY,CAAA,EAAE,GAAG,IAAI,AAAC;QAEvC,MAAM,MAAM,GAAG,YAAY,EAAE,AAAC;QAE9B,MAAM,MAAM,CAAC,oBAAoB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAEvD,OAAO;YACL,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC;KACH,AAAC;;;ACfJ,MAAM,0CAAoB;IACxB,OAAuB,gBAAgB,GAAG,CAAC,YAAiD,GAC1F,IAAI,0CAAoB,CAAC;YAAE,YAAY,EAAE,YAAY,CAAC,YAAY;SAAE,CAAC,CAAC;IAIxE,YACmB,UAEhB,CACD;aAHiB,UAEhB,GAFgB,UAEhB;aALK,aAAa,GAAG,cAAc;KAMlC;IAEJ,MAAa,OAAO,CAAC,OAA6B,EAAE;QAClD,MAAM,gBAAE,YAAY,CAAA,EAAE,GAAG,IAAI,CAAC,UAAU,AAAC;QAEzC,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,GAAG,GAAK;YACnC,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC;SAC1B,CAAC,AAAC;QAEH,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAE1C,OAAO;YACL,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC;KACH;CACF;AAEM,MAAM,yCAAiB,GAC5B,CAAC,IAAyC,GAC1C,OAAO,OAA6B,GAAqC;QACvE,MAAM,gBAAE,YAAY,CAAA,EAAE,GAAG,IAAI,AAAC;QAE9B,MAAM,OAAO,GAAG,0CAAoB,CAAC,gBAAgB,CAAC;0BAAE,YAAY;SAAE,CAAC,AAAC;QAExE,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;KACjC,AAAC;;;ANjCG,MAAM,yCAAgB,GAAG,CAAC,MAAqC,GAAK,CAAC,OAAgB,GAAK;QAC/F,MAAM,OAAO,GAAG,CAAA,GAAA,yCAAa,CAAA,CAAC,OAAO,CAAC,AAAC;QACvC,MAAM,YAAY,GAAG,CAAA,GAAA,yCAAe,CAAA,CAAC,MAAM,EAAE,OAAO,CAAC,AAAC;QAEtD,OAAO;YACL,YAAY,EAAE,CAAA,GAAA,yCAAgB,CAAA,CAAC;yBAAE,OAAO;8BAAE,YAAY;aAAE,CAAC;YACzD,oBAAoB,EAAE,CAAA,GAAA,yCAAwB,CAAA,CAAC;yBAAE,OAAO;8BAAE,YAAY;aAAE,CAAC;YACzE,aAAa,EAAE,CAAA,GAAA,yCAAiB,CAAA,CAAC;8BAAE,YAAY;aAAE,CAAC;YAClD,UAAU,EAAE,CAAA,GAAA,yCAAc,CAAA,CAAC;yBAAE,OAAO;8BAAE,YAAY;aAAE,CAAC;SACtD,CAAC;KACH,AAAC;;ADtBF;AUAO,MAAM,yCAA0B,GAAG,CAAC,OAAgB,GAAK,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,AAAC;;ADA9F;AASO,MAAM,wCAAoB;IAC/B,OAAuB,OAAO,GAAG,CAAC,GAA4B,GAAK,IAAI,wCAAoB,CAAC,GAAG,CAAC,CAAC;IAGjG,YACmB,UAEhB,CACD;aAHiB,UAEhB,GAFgB,UAEhB;aAJc,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO;aAOlC,OAAO,GAAG,OAAO,OAAgB,GAA4B;YAC3E,MAAM,YAAY,GAAG,CAAA,GAAA,yCAA0B,CAAA,CAAC,OAAO,CAAC,AAAC;YAEzD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC;gBAChC,YAAY,EAAE,YAAY,IAAI,SAAS;gBACvC,GAAG,IAAI,CAAC,UAAU;aACnB,CAAC,AAAC;YAEH,OAAO,MAAM,CAAC,OAAO,CAAC;SACvB;KAXG;CAYL;;AD7BD;AGaO,MAAM,yCAAqB,GAChC,CAAC,IAAgF,GACjF,OAAO,OAA0B,GAAkC;QACjE,MAAM,kBAAE,cAAc,CAAA,sBAAE,kBAAkB,CAAA,EAAE,GAAG,IAAI,AAAC;QAEpD,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,AAAC;QAEtE,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,AAAC;QAE1C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,AAAC;QAEjD,OAAO;YACL,OAAO,EAAE,QAAQ,CAAC,OAAO;SAC1B,CAAC;KACH,AAAC;;;AHfG,MAAM,yCAAc,GACzB,CAAC,GAAyB,EAAE,IAA0B,GAAK,OAAO,OAAgB,GAAK;QACrF,MAAM,sBAAE,kBAAkB,CAAA,kBAAE,cAAc,CAAA,EAAE,GAAG,IAAI,AAAC;QAEpD,MAAM,OAAO,GAAG,CAAA,GAAA,yCAAqB,CAAA,CAAC;gCACpC,kBAAkB;4BAClB,cAAc;SACf,CAAC,AAAC;QAEH,MAAM,UAAU,GAAG,CAAA,GAAA,wCAAoB,CAAA,CAAC,OAAO,CAAC;qBAC9C,OAAO;YACP,GAAG,GAAG;SACP,CAAC,AAAC;QAEH,OAAO,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;KACpC,AAAC;;;AM3BJ;;AAUO,MAAM,yCAAsB;IACjC,OAAuB,OAAO,GAAG,CAAC,GAA8B,GAC9D,IAAI,yCAAsB,CAAC;YACzB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,WAAW,EAAE,GAAG,CAAC,WAAW;SAC7B,CAAC,CAAC;IAIL,YACmB,UAGhB,CACD;aAJiB,UAGhB,GAHgB,UAGhB;aANc,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO;aACjC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW;aAQ1C,OAAO,GAAG,OAAO,OAAgB,GAAoC;YACnF,MAAM,YAAY,GAAG,CAAA,GAAA,yCAA0B,CAAA,CAAC,OAAO,CAAC,AAAC;YACzD,MAAM,eAAE,WAAW,CAAA,EAAE,GAAG,IAAI,AAAC;YAE7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC;gBAChC,YAAY,EAAE,YAAY,IAAI,SAAS;6BACvC,WAAW;aACZ,CAAC,AAAC;YAEH,OAAO,CAAA,GAAA,4BAAQ,CAAA,CAAC,MAAM,CAAC,aAAa,EAAE;gBACpC,OAAO,EAAE;oBACP,YAAY,EAAE,MAAM,CAAC,YAAY;iBAClC;aACF,CAAC,CAAC;SACJ;KAhBG;CAiBL;;ADzCD;AEcO,MAAM,yCAAuB,GAClC,CAAC,IAAgF,GACjF,OAAO,OAAsB,GAA8B;QACzD,MAAM,kBAAE,cAAc,CAAA,sBAAE,kBAAkB,CAAA,EAAE,GAAG,IAAI,AAAC;QAEpD,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,AAAC;QAEtE,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,AAAC;QAE1C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC;YACxC,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC,AAAC;QAEH,MAAM,YAAY,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,AAAC;QAE1E,OAAO;0BACL,YAAY;YACZ,aAAa,EAAE,QAAQ,CAAC,aAAa;SACtC,CAAC;KACH,AAAC;;;AFlBG,MAAM,yCAAgB,GAC3B,CAAC,GAAoB,EAAE,IAAsB,GAAK,OAAO,OAAgB,GAAK;QAC5E,MAAM,sBAAE,kBAAkB,CAAA,kBAAE,cAAc,CAAA,EAAE,GAAG,IAAI,AAAC;QAEpD,MAAM,OAAO,GAAG,CAAA,GAAA,yCAAuB,CAAA,CAAC;gCACtC,kBAAkB;4BAClB,cAAc;SACf,CAAC,AAAC;QAEH,MAAM,UAAU,GAAG,CAAA,GAAA,yCAAsB,CAAA,CAAC,OAAO,CAAC;qBAChD,OAAO;YACP,WAAW,EAAE,GAAG,CAAC,cAAc;SAChC,CAAC,AAAC;QAEH,OAAO,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;KACpC,AAAC;;AD9BJ;AKAA;;ACAO,MAAM,yCAAyB,SAAS,KAAK;IAClD,OAAuB,4BAA4B,GAAG,IACpD,IAAI,yCAAyB,CAAC;YAC5B,IAAI,EAAE,UAAa;YACnB,OAAO,EAAE,CAAC,mFAAmF,CAAC;SAC/F,CAAC,CAAC;IAML,YACmB,UAIhB,CACD;QACA,KAAK,CAAC,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;aANpC,UAIhB,GAJgB,UAIhB;aATa,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI;aAC3B,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK;aAC7B,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO;KAUrD;CACF;;;ADTM,MAAM,yCAA8B;IACzC,OAAuB,OAAO,GAAG,CAAC,GAAsC,GACtE,IAAI,yCAA8B,CAAC;YACjC,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,WAAW,EAAE,GAAG,CAAC,WAAW;SAC7B,CAAC,CAAC;IAKL,YACmB,UAGhB,CACD;aAJiB,UAGhB,GAHgB,UAGhB;aAPc,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO;aACjC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW;aAS1C,OAAO,GAAG,OAAO,OAAgB,GAAoC;YACnF,MAAM,YAAY,GAAG,CAAA,GAAA,yCAA0B,CAAA,CAAC,OAAO,CAAC,AAAC;YAEzD,IAAI,CAAC,YAAY,EACf,MAAM,CAAA,GAAA,yCAAyB,CAAA,CAAC,4BAA4B,EAAE,CAAC;YAGjE,0EAA0E;YAC1E,yEAAyE;YACzE,6EAA6E;YAC7E,wEAAwE;YACxE,MAAM,uBAAuB,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,KAAK,OAAO,AAAC;YAErF,MAAM,WAAW,GAAG,uBAAuB,GACvC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,GACpC,OAAO,CAAC,GAAG,AAAC;YAEhB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC;8BAChC,YAAY;6BACZ,WAAW;aACZ,CAAC,AAAC;YAEH,OAAO,CAAA,GAAA,4BAAQ,CAAA,CAAC,IAAI,CAAC,WAAW,EAAE;gBAChC,OAAO,EAAE;oBACP,YAAY,EAAE,MAAM,CAAC,YAAY;iBAClC;aACF,CAAC,CAAC;SACJ;KA7BG;CA8BL;;ADxDD;AGaO,MAAM,yCAA+B,GAC1C,CAAC,IAAgF,GACjF,OAAO,OAA8B,GAAsC;QACzE,MAAM,kBAAE,cAAc,CAAA,sBAAE,kBAAkB,CAAA,EAAE,GAAG,IAAI,AAAC;QAEpD,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,AAAC;QAEtE,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,AAAC;QAE1C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,oBAAoB,CAAC;YAChD,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC,AAAC;QAEH,MAAM,YAAY,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,AAAC;QAE1E,OAAO;0BACL,YAAY;SACb,CAAC;KACH,AAAC;;;AHhBG,MAAM,yCAAwB,GACnC,CAAC,GAA4B,EAAE,IAA8B,GAAK,OAAO,OAAgB,GAAK;QAC5F,MAAM,sBAAE,kBAAkB,CAAA,kBAAE,cAAc,CAAA,EAAE,GAAG,IAAI,AAAC;QAEpD,MAAM,OAAO,GAAG,CAAA,GAAA,yCAA+B,CAAA,CAAC;gCAC9C,kBAAkB;4BAClB,cAAc;SACf,CAAC,AAAC;QAEH,MAAM,UAAU,GAAG,CAAA,GAAA,yCAA8B,CAAA,CAAC,OAAO,CAAC;qBACxD,OAAO;YACP,WAAW,EAAE,GAAG,CAAC,cAAc;SAChC,CAAC,AAAC;QAEH,OAAO,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;KACpC,AAAC;;;AK9BJ;;ACAO,MAAM,yCAAkB,SAAS,KAAK;IAC3C,OAAuB,4BAA4B,GAAG,IACpD,IAAI,yCAAkB,CAAC;YACrB,IAAI,EAAE,UAAa;YACnB,OAAO,EAAE,CAAC,2EAA2E,CAAC;SACvF,CAAC,CAAC;IAML,YACmB,UAIhB,CACD;QACA,KAAK,CAAC,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;aANpC,UAIhB,GAJgB,UAIhB;aATa,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI;aAC3B,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK;aAC7B,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO;KAUrD;CACF;;;ADTM,MAAM,yCAAuB;IAClC,OAAuB,OAAO,GAAG,CAAC,GAA+B,GAC/D,IAAI,yCAAuB,CAAC;YAC1B,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,WAAW,EAAE,GAAG,CAAC,WAAW;SAC7B,CAAC,CAAC;IAKL,YACmB,UAGhB,CACD;aAJiB,UAGhB,GAHgB,UAGhB;aAPc,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO;aACjC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW;aAS1C,OAAO,GAAG,OAAO,OAAgB,GAAoC;YACnF,MAAM,YAAY,GAAG,CAAA,GAAA,yCAA0B,CAAA,CAAC,OAAO,CAAC,AAAC;YAEzD,IAAI,CAAC,YAAY,EACf,MAAM,CAAA,GAAA,yCAAkB,CAAA,CAAC,4BAA4B,EAAE,CAAC;YAG1D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC;8BAChC,YAAY;gBACZ,WAAW,EAAE,IAAI,CAAC,WAAW;aAC9B,CAAC,AAAC;YAEH,OAAO,CAAA,GAAA,4BAAQ,CAAA,CAAC,MAAM,CAAC,aAAa,EAAE;gBACpC,OAAO,EAAE;oBACP,YAAY,EAAE,MAAM,CAAC,YAAY;iBAClC;aACF,CAAC,CAAC;SACJ;KAnBG;CAoBL;;AD9CD;AGcO,MAAM,yCAAwB,GACnC,CAAC,IAAgF,GACjF,OAAO,OAAuB,GAA+B;QAC3D,MAAM,kBAAE,cAAc,CAAA,sBAAE,kBAAkB,CAAA,EAAE,GAAG,IAAI,AAAC;QAEpD,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,AAAC;QAEtE,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,AAAC;QAE1C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,aAAa,CAAC;YACzC,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC,AAAC;QAEH,MAAM,YAAY,GAAG,MAAM,cAAc,CAAC,cAAc,CAAC,OAAO,CAAC,AAAC;QAElE,OAAO;0BACL,YAAY;YACZ,aAAa,EAAE,QAAQ,CAAC,aAAa;SACtC,CAAC;KACH,AAAC;;;AHlBG,MAAM,yCAAiB,GAC5B,CAAC,GAAqB,EAAE,IAAuB,GAAK,OAAO,OAAgB,GAAK;QAC9E,MAAM,sBAAE,kBAAkB,CAAA,kBAAE,cAAc,CAAA,EAAE,GAAG,IAAI,AAAC;QAEpD,MAAM,OAAO,GAAG,CAAA,GAAA,yCAAwB,CAAA,CAAC;gCACvC,kBAAkB;4BAClB,cAAc;SACf,CAAC,AAAC;QAEH,MAAM,UAAU,GAAG,CAAA,GAAA,yCAAuB,CAAA,CAAC,OAAO,CAAC;qBACjD,OAAO;YACP,WAAW,EAAE,GAAG,CAAC,cAAc;SAChC,CAAC,AAAC;QAEH,OAAO,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;KACpC,AAAC;;;AI9BG,MAAM,yCAAqB,SAAS,KAAK;IAC9C,OAAuB,sBAAsB,GAAG,CAAC,eAAuB,GACtE,IAAI,yCAAqB,CAAC;YACxB,IAAI,EAAE,UAAa;YACnB,OAAO,EAAE,CAAC,qCAAqC,EAAE,eAAe,CAAC,EAAE,CAAC;SACrE,CAAC,CAAC;IAEL,OAAuB,qBAAqB,GAAG,CAAC,oBAA4B,GAC1E,IAAI,yCAAqB,CAAC;YACxB,IAAI,EAAE,UAAa;YACnB,OAAO,EAAE,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,aAAa,CAAC;SAChE,CAAC,CAAC;IAML,YACmB,UAIhB,CACD;QACA,KAAK,CAAC,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;aANpC,UAIhB,GAJgB,UAIhB;aATa,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI;aAC3B,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK;aAC7B,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO;KAUrD;CACF;;;AZHM,MAAM,yCAAoB,GAC/B,CAAC,IAA6B,GAC9B,CAAC,GAAwB,GACzB,OAAO,WAAE,OAAO,CAAA,EAAE,GAAK;YACrB,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,AAAC;YAEtD,yCAAyC,CACzC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CACrC,CAAC,IAAI,GAAK,GAAG,CAAC,IAAI,CAAuB,CAAC,IAAI,KAAK,eAAe,CACnE,AAA6B,AAAC;YAE/B,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,AAAC;YACxC,wCAAwC,CAExC,IAAI,CAAC,YAAY,EACf,MAAM,CAAA,GAAA,yCAAqB,CAAA,CAAC,sBAAsB,CAAC,eAAe,CAAC,CAAC;YAGtE,MAAM,kBAAE,cAAc,CAAA,sBAAE,kBAAkB,CAAA,WAAE,OAAO,CAAA,EAAE,GAAG,IAAI,AAAC;YAE7D,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,AAAC;YAE9B,OAAQ,SAAS;gBACf,KAAK,SAAS;oBAAE;wBACd,MAAM,OAAO,GAAG,CAAA,GAAA,yCAAgB,CAAA,CAC9B;4BACE,cAAc,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;yBACrD,EACD;4CAAE,cAAc;gDAAE,kBAAkB;yBAAE,CACvC,AAAC;wBAEF,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC;qBACzB;gBAED,KAAK,kBAAkB;oBAAE;wBACvB,MAAM,QAAO,GAAG,CAAA,GAAA,yCAAwB,CAAA,CACtC;4BACE,cAAc,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;yBACrD,EACD;4CAAE,cAAc;gDAAE,kBAAkB;yBAAE,CACvC,AAAC;wBAEF,OAAO,QAAO,CAAC,OAAO,CAAC,CAAC;qBACzB;gBAED,KAAK,UAAU;oBAAE;wBACf,MAAM,QAAO,GAAG,CAAA,GAAA,yCAAiB,CAAA,CAC/B;4BACE,cAAc,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;yBACrD,EACD;4CAAE,cAAc;gDAAE,kBAAkB;yBAAE,CACvC,AAAC;wBAEF,OAAO,QAAO,CAAC,OAAO,CAAC,CAAC;qBACzB;gBAED;oBACE,MAAM,CAAA,GAAA,yCAAqB,CAAA,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;aAEhE;SACF,AAAC;;;AZxEG,MAAM,yCAAc,GAAG,CAC5B,MAAc,EACd,IAEC,GACE;IACH,MAAM,kBAAE,cAAc,CAAA,EAAE,GAAG,IAAI,AAAC;IAEhC,MAAM,WAAE,OAAO,CAAA,EAAE,GAAG,MAAM,AAAC;IAE3B,MAAM,kBAAkB,GAAG,CAAA,GAAA,yCAAgB,CAAA,CAAC,MAAM,CAAC,AAAC;IAEpD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,gBAAgB,EAAE,CAAA,GAAA,yCAAoB,CAAA,CAAC;qBACrC,OAAO;gCACP,kBAAkB;4BAClB,cAAc;SACf,CAAC;QAEF,UAAU,EAAE,CAAC,GAAyB,GACpC,CAAA,GAAA,yCAAc,CAAA,CAAC,GAAG,EAAE;oCAClB,kBAAkB;gCAClB,cAAc;aACf,CAAC;KACL,CAAC,CAAC;CACJ,AAAC","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.js CHANGED
@@ -44,7 +44,7 @@ const $eabaa16027fa75f6$export$d184a47a971dd4b9 = (session)=>$eabaa16027fa75f6$v
44
44
  const $9871ffc29633cf75$export$f4d9bb4cf5d2b40c = (deps)=>async (request)=>{
45
45
  const { storage: storage , createClient: createClient } = deps;
46
46
  const client = createClient();
47
- const context = await client.getContext(request.includeAccessToken);
47
+ const context = await client.getContext(request);
48
48
  return {
49
49
  context: context
50
50
  };
@@ -148,20 +148,15 @@ const $b813d30ec7910eef$export$5c6fae4c79d686e4 = (request)=>request.headers.get
148
148
 
149
149
 
150
150
  class $a734929d0f00259a$export$32386402b3f0a45 {
151
- static fromDto = (dto)=>new $a734929d0f00259a$export$32386402b3f0a45({
152
- useCase: dto.useCase,
153
- includeAccessToken: dto.includeAccessToken ?? false
154
- });
151
+ static fromDto = (dto)=>new $a734929d0f00259a$export$32386402b3f0a45(dto);
155
152
  constructor(properties){
156
153
  this.properties = properties;
157
154
  this.useCase = this.properties.useCase;
158
- this.includeAccessToken = this.properties.includeAccessToken;
159
155
  this.execute = async (request)=>{
160
156
  const cookieHeader = (0, $b813d30ec7910eef$export$5c6fae4c79d686e4)(request);
161
- const { includeAccessToken: includeAccessToken } = this;
162
157
  const result = await this.useCase({
163
158
  cookieHeader: cookieHeader ?? undefined,
164
- includeAccessToken: includeAccessToken
159
+ ...this.properties
165
160
  });
166
161
  return result.context;
167
162
  };
@@ -173,9 +168,7 @@ const $8b64182c9ca2d96b$export$53ae38c062671653 = (deps)=>async (request)=>{
173
168
  const { sessionStorage: sessionStorage , createLogtoAdapter: createLogtoAdapter } = deps;
174
169
  const session = await sessionStorage.getSession(request.cookieHeader);
175
170
  const logto = createLogtoAdapter(session);
176
- const response = await logto.getContext({
177
- includeAccessToken: request.includeAccessToken
178
- });
171
+ const response = await logto.getContext(request);
179
172
  return {
180
173
  context: response.context
181
174
  };
@@ -190,7 +183,7 @@ const $5fd42984a21638c8$export$f4d9bb4cf5d2b40c = (dto, deps)=>async (request)=>
190
183
  });
191
184
  const controller = (0, $a734929d0f00259a$export$32386402b3f0a45).fromDto({
192
185
  useCase: useCase,
193
- includeAccessToken: dto.includeAccessToken
186
+ ...dto
194
187
  });
195
188
  return controller.execute(request);
196
189
  };
package/lib/module.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(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.js.map"}
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.js.map"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@logto/remix",
3
- "version": "1.0.0-beta.10",
3
+ "version": "1.0.0-beta.12",
4
4
  "source": "./src/index.ts",
5
5
  "main": "./lib/index.js",
6
6
  "exports": {
@@ -29,7 +29,7 @@
29
29
  "prepack": "pnpm test"
30
30
  },
31
31
  "dependencies": {
32
- "@logto/node": "^1.0.0-beta.10"
32
+ "@logto/node": "^1.0.0-beta.12"
33
33
  },
34
34
  "devDependencies": {
35
35
  "@commitlint/cli": "^17.1.2",
@@ -76,5 +76,5 @@
76
76
  }
77
77
  }
78
78
  },
79
- "gitHead": "c79c3759b7f15c44bf5b476dcebd82e9c96e9dd8"
79
+ "gitHead": "8d3230e887abf2069c1eccd72632203fc04809cc"
80
80
  }