@logto/remix 1.1.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/lib/framework/get-cookie-header-from-request.cjs +5 -0
  2. package/lib/framework/get-cookie-header-from-request.d.ts +1 -0
  3. package/lib/framework/get-cookie-header-from-request.js +3 -0
  4. package/lib/framework/mocks.d.ts +22 -0
  5. package/lib/index.cjs +24 -0
  6. package/lib/index.d.ts +3 -7
  7. package/lib/index.js +17 -482
  8. package/lib/infrastructure/logto/create-client.cjs +17 -0
  9. package/lib/infrastructure/logto/create-client.d.ts +6 -0
  10. package/lib/infrastructure/logto/create-client.js +11 -0
  11. package/lib/infrastructure/logto/create-client.spec.d.ts +1 -0
  12. package/lib/infrastructure/logto/create-storage.cjs +30 -0
  13. package/lib/infrastructure/logto/create-storage.d.ts +14 -0
  14. package/lib/infrastructure/logto/create-storage.js +28 -0
  15. package/lib/infrastructure/logto/create-storage.spec.d.ts +1 -0
  16. package/lib/infrastructure/logto/get-context.cjs +12 -0
  17. package/lib/infrastructure/logto/get-context.d.ts +11 -0
  18. package/lib/infrastructure/logto/get-context.js +10 -0
  19. package/lib/infrastructure/logto/handle-sign-in-callback.cjs +12 -0
  20. package/lib/infrastructure/logto/handle-sign-in-callback.d.ts +14 -0
  21. package/lib/infrastructure/logto/handle-sign-in-callback.js +10 -0
  22. package/lib/infrastructure/logto/handle-sign-in.cjs +30 -0
  23. package/lib/infrastructure/logto/handle-sign-in.d.ts +15 -0
  24. package/lib/infrastructure/logto/handle-sign-in.js +28 -0
  25. package/lib/infrastructure/logto/handle-sign-out.cjs +26 -0
  26. package/lib/infrastructure/logto/handle-sign-out.d.ts +11 -0
  27. package/lib/infrastructure/logto/handle-sign-out.js +24 -0
  28. package/lib/infrastructure/logto/index.cjs +21 -0
  29. package/lib/infrastructure/logto/index.d.ts +26 -0
  30. package/lib/infrastructure/logto/index.js +19 -0
  31. package/lib/useCases/getContext/GetContextController.cjs +21 -0
  32. package/lib/useCases/getContext/GetContextController.d.ts +13 -0
  33. package/lib/useCases/getContext/GetContextController.js +19 -0
  34. package/lib/useCases/getContext/GetContextController.spec.d.ts +1 -0
  35. package/lib/useCases/getContext/GetContextUseCase.cjs +13 -0
  36. package/lib/useCases/getContext/GetContextUseCase.d.ts +15 -0
  37. package/lib/useCases/getContext/GetContextUseCase.js +11 -0
  38. package/lib/useCases/getContext/GetContextUseCase.spec.d.ts +1 -0
  39. package/lib/useCases/getContext/index.cjs +19 -0
  40. package/lib/useCases/getContext/index.d.ts +9 -0
  41. package/lib/useCases/getContext/index.js +17 -0
  42. package/lib/useCases/handleAuthRoutes/HandleAuthRoutesError.cjs +21 -0
  43. package/lib/useCases/handleAuthRoutes/HandleAuthRoutesError.d.ts +9 -0
  44. package/lib/useCases/handleAuthRoutes/HandleAuthRoutesError.js +19 -0
  45. package/lib/useCases/handleAuthRoutes/index.cjs +44 -0
  46. package/lib/useCases/handleAuthRoutes/index.d.ts +15 -0
  47. package/lib/useCases/handleAuthRoutes/index.js +42 -0
  48. package/lib/useCases/handleSignIn/HandleSignInController.cjs +31 -0
  49. package/lib/useCases/handleSignIn/HandleSignInController.d.ts +15 -0
  50. package/lib/useCases/handleSignIn/HandleSignInController.js +29 -0
  51. package/lib/useCases/handleSignIn/HandleSignInController.spec.d.ts +1 -0
  52. package/lib/useCases/handleSignIn/HandleSignInUseCase.cjs +17 -0
  53. package/lib/useCases/handleSignIn/HandleSignInUseCase.d.ts +16 -0
  54. package/lib/useCases/handleSignIn/HandleSignInUseCase.js +15 -0
  55. package/lib/useCases/handleSignIn/HandleSignInUseCase.spec.d.ts +1 -0
  56. package/lib/useCases/handleSignIn/index.cjs +19 -0
  57. package/lib/useCases/handleSignIn/index.d.ts +11 -0
  58. package/lib/useCases/handleSignIn/index.js +17 -0
  59. package/lib/useCases/handleSignInCallback/HandleSignInCallbackController.cjs +42 -0
  60. package/lib/useCases/handleSignInCallback/HandleSignInCallbackController.d.ts +15 -0
  61. package/lib/useCases/handleSignInCallback/HandleSignInCallbackController.js +40 -0
  62. package/lib/useCases/handleSignInCallback/HandleSignInCallbackController.spec.d.ts +1 -0
  63. package/lib/useCases/handleSignInCallback/HandleSignInCallbackError.cjs +17 -0
  64. package/lib/useCases/handleSignInCallback/HandleSignInCallbackError.d.ts +8 -0
  65. package/lib/useCases/handleSignInCallback/HandleSignInCallbackError.js +15 -0
  66. package/lib/useCases/handleSignInCallback/HandleSignInCallbackUseCase.cjs +16 -0
  67. package/lib/useCases/handleSignInCallback/HandleSignInCallbackUseCase.d.ts +15 -0
  68. package/lib/useCases/handleSignInCallback/HandleSignInCallbackUseCase.js +14 -0
  69. package/lib/useCases/handleSignInCallback/HandleSignInCallbackUseCase.spec.d.ts +1 -0
  70. package/lib/useCases/handleSignInCallback/index.cjs +19 -0
  71. package/lib/useCases/handleSignInCallback/index.d.ts +11 -0
  72. package/lib/useCases/handleSignInCallback/index.js +17 -0
  73. package/lib/useCases/handleSignOut/HandleSignOutController.cjs +34 -0
  74. package/lib/useCases/handleSignOut/HandleSignOutController.d.ts +15 -0
  75. package/lib/useCases/handleSignOut/HandleSignOutController.js +32 -0
  76. package/lib/useCases/handleSignOut/HandleSignOutController.spec.d.ts +1 -0
  77. package/lib/useCases/handleSignOut/HandleSignOutError.cjs +17 -0
  78. package/lib/useCases/handleSignOut/HandleSignOutError.d.ts +8 -0
  79. package/lib/useCases/handleSignOut/HandleSignOutError.js +15 -0
  80. package/lib/useCases/handleSignOut/HandleSignOutUseCase.cjs +17 -0
  81. package/lib/useCases/handleSignOut/HandleSignOutUseCase.d.ts +16 -0
  82. package/lib/useCases/handleSignOut/HandleSignOutUseCase.js +15 -0
  83. package/lib/useCases/handleSignOut/HandleSignOutUseCase.spec.d.ts +1 -0
  84. package/lib/useCases/handleSignOut/index.cjs +19 -0
  85. package/lib/useCases/handleSignOut/index.d.ts +11 -0
  86. package/lib/useCases/handleSignOut/index.js +17 -0
  87. package/package.json +29 -34
  88. package/lib/index.d.ts.map +0 -1
  89. package/lib/index.js.map +0 -1
  90. package/lib/module.d.mts +0 -29
  91. package/lib/module.mjs +0 -480
  92. package/lib/module.mjs.map +0 -1
@@ -0,0 +1,11 @@
1
+ import type { SessionStorage } from '@remix-run/node';
2
+ import type { CreateLogtoAdapter } from '../../infrastructure/logto/index.js';
3
+ type HandleSignOutDto = {
4
+ readonly redirectBackTo: string;
5
+ };
6
+ type HandleSignOutDeps = {
7
+ readonly createLogtoAdapter: CreateLogtoAdapter;
8
+ readonly sessionStorage: SessionStorage;
9
+ };
10
+ export declare const makeHandleSignOut: (dto: HandleSignOutDto, deps: HandleSignOutDeps) => (request: Request) => Promise<import("@remix-run/node").TypedResponse<never>>;
11
+ export {};
@@ -0,0 +1,17 @@
1
+ import { HandleSignOutController } from './HandleSignOutController.js';
2
+ import { makeHandleSignOutUseCase } from './HandleSignOutUseCase.js';
3
+
4
+ const makeHandleSignOut = (dto, deps) => async (request) => {
5
+ const { createLogtoAdapter, sessionStorage } = deps;
6
+ const useCase = makeHandleSignOutUseCase({
7
+ createLogtoAdapter,
8
+ sessionStorage,
9
+ });
10
+ const controller = HandleSignOutController.fromDto({
11
+ useCase,
12
+ redirectUri: dto.redirectBackTo,
13
+ });
14
+ return controller.execute(request);
15
+ };
16
+
17
+ export { makeHandleSignOut };
package/package.json CHANGED
@@ -1,14 +1,16 @@
1
1
  {
2
2
  "name": "@logto/remix",
3
- "version": "1.1.1",
4
- "source": "./src/index.ts",
5
- "main": "./lib/index.js",
3
+ "version": "2.0.0",
4
+ "type": "module",
5
+ "main": "./lib/index.cjs",
6
+ "module": "./lib/index.js",
7
+ "types": "./lib/index.d.ts",
6
8
  "exports": {
7
- "require": "./lib/index.js",
8
- "import": "./lib/module.mjs"
9
+ "types": "./lib/index.d.ts",
10
+ "require": "./lib/index.cjs",
11
+ "import": "./lib/index.js",
12
+ "default": "./lib/index.js"
9
13
  },
10
- "module": "./lib/module.mjs",
11
- "types": "./lib/index.d.ts",
12
14
  "files": [
13
15
  "lib"
14
16
  ],
@@ -18,45 +20,30 @@
18
20
  "url": "https://github.com/logto-io/js.git",
19
21
  "directory": "packages/remix"
20
22
  },
21
- "scripts": {
22
- "dev:tsc": "tsc -p tsconfig.build.json -w --preserveWatchOutput",
23
- "precommit": "lint-staged",
24
- "check": "tsc --noEmit",
25
- "build": "rm -rf lib/ && pnpm check && parcel build && cp lib/index.d.ts lib/module.d.mts",
26
- "lint": "eslint --ext .ts src",
27
- "test": "jest",
28
- "test:coverage": "jest --silent --coverage",
29
- "prepack": "pnpm test"
30
- },
31
23
  "dependencies": {
32
- "@logto/node": "^1.1.1"
24
+ "@logto/node": "^2.0.0"
33
25
  },
34
26
  "devDependencies": {
35
27
  "@commitlint/cli": "^17.1.2",
36
28
  "@commitlint/config-conventional": "^17.1.0",
37
- "@jest/types": "^27.5.1",
38
- "@parcel/core": "^2.8.3",
39
- "@parcel/packager-ts": "^2.8.3",
40
- "@parcel/transformer-typescript-types": "^2.8.3",
41
29
  "@remix-run/node": "^1.7.2",
42
- "@silverhand/eslint-config": "^2.0.0",
43
- "@silverhand/ts-config": "^1.0.0",
44
- "@silverhand/ts-config-react": "^2.0.0",
45
- "@swc/core": "^1.3.5",
46
- "@swc/jest": "^0.2.23",
30
+ "@silverhand/eslint-config": "^3.0.1",
31
+ "@silverhand/ts-config": "^3.0.0",
32
+ "@silverhand/ts-config-react": "^3.0.0",
33
+ "@swc/core": "^1.3.50",
34
+ "@swc/jest": "^0.2.24",
47
35
  "@tsconfig/recommended": "^1.0.1",
48
36
  "@types/jest": "^29.1.2",
49
37
  "@types/node": "^18.8.3",
50
- "eslint": "^8.23.0",
51
- "jest": "^29.1.2",
38
+ "eslint": "^8.38.0",
39
+ "jest": "^29.5.0",
52
40
  "jest-location-mock": "^1.0.9",
53
41
  "jest-matcher-specific-error": "^1.0.0",
54
42
  "lint-staged": "^13.0.3",
55
- "parcel": "^2.8.3",
56
- "prettier": "^2.7.1",
43
+ "prettier": "^2.8.7",
57
44
  "react": "^17.0.2",
58
45
  "react-dom": "^17.0.2",
59
- "typescript": "^4.8.4"
46
+ "typescript": "^5.0.0"
60
47
  },
61
48
  "peerDependencies": {
62
49
  "@remix-run/node": ">=1"
@@ -76,5 +63,13 @@
76
63
  }
77
64
  }
78
65
  },
79
- "gitHead": "f74d96813d0bcc07a5134d43318f1e167a6f47ff"
80
- }
66
+ "scripts": {
67
+ "dev:tsc": "tsc -p tsconfig.build.json -w --preserveWatchOutput",
68
+ "precommit": "lint-staged",
69
+ "check": "tsc --noEmit",
70
+ "build": "rm -rf lib/ && tsc -p tsconfig.build.json --noEmit && rollup -c",
71
+ "lint": "eslint --ext .ts src",
72
+ "test": "jest",
73
+ "test:coverage": "jest --silent --coverage"
74
+ }
75
+ }
@@ -1 +0,0 @@
1
- {"mappings":";;ACgBA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AKU/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 type { GetContextParameters, LogtoConfig } from '@logto/node';\nimport type { 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.map DELETED
@@ -1 +0,0 @@
1
- {"mappings":"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","sources":["packages/remix/src/index.ts","packages/remix/src/infrastructure/logto/index.ts","packages/remix/src/infrastructure/logto/create-client.ts","packages/remix/src/infrastructure/logto/create-storage.ts","packages/remix/src/infrastructure/logto/get-context.ts","packages/remix/src/infrastructure/logto/handle-sign-in.ts","packages/remix/src/infrastructure/logto/handle-sign-in-callback.ts","packages/remix/src/infrastructure/logto/handle-sign-out.ts","packages/remix/src/useCases/getContext/index.ts","packages/remix/src/useCases/getContext/GetContextController.ts","packages/remix/src/framework/get-cookie-header-from-request.ts","packages/remix/src/useCases/getContext/GetContextUseCase.ts","packages/remix/src/useCases/handleAuthRoutes/index.ts","packages/remix/src/useCases/handleSignIn/index.ts","packages/remix/src/useCases/handleSignIn/HandleSignInController.ts","packages/remix/src/useCases/handleSignIn/HandleSignInUseCase.ts","packages/remix/src/useCases/handleSignInCallback/index.ts","packages/remix/src/useCases/handleSignInCallback/HandleSignInCallbackController.ts","packages/remix/src/useCases/handleSignInCallback/HandleSignInCallbackError.ts","packages/remix/src/useCases/handleSignInCallback/HandleSignInCallbackUseCase.ts","packages/remix/src/useCases/handleSignOut/index.ts","packages/remix/src/useCases/handleSignOut/HandleSignOutController.ts","packages/remix/src/useCases/handleSignOut/HandleSignOutError.ts","packages/remix/src/useCases/handleSignOut/HandleSignOutUseCase.ts","packages/remix/src/useCases/handleAuthRoutes/HandleAuthRoutesError.ts"],"sourcesContent":["import type { GetContextParameters, LogtoConfig } from '@logto/node';\nimport type { 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 type { 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 type { LogtoConfig } from '@logto/node';\nimport LogtoClient from '@logto/node';\n\nimport type { 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 type { Storage, StorageKey } from '@logto/node';\nimport type { 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 type { GetContextParameters, LogtoContext } from '@logto/node';\n\nimport type { CreateLogtoClient } from './create-client';\nimport type { 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 type { Session } from '@remix-run/node';\n\nimport type { CreateLogtoClient } from './create-client';\nimport type { 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 type { Session } from '@remix-run/node';\n\nimport type { CreateLogtoClient } from './create-client';\nimport type { 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 type { 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 type { GetContextParameters } from '@logto/node';\nimport type { SessionStorage } from '@remix-run/node';\n\nimport type { 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 type { 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 type { GetContextParameters } from '@logto/node';\nimport type { SessionStorage } from '@remix-run/node';\n\nimport type { 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 type { LoaderFunction, SessionStorage } from '@remix-run/node';\n\nimport type { 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 type { SessionStorage } from '@remix-run/node';\n\nimport type { 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 type { TypedResponse } from '@remix-run/node';\nimport { redirect } 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 type { SessionStorage } from '@remix-run/node';\n\nimport type { 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 type { SessionStorage } from '@remix-run/node';\n\nimport type { 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 type { TypedResponse } from '@remix-run/node';\nimport { redirect } 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 type { SessionStorage } from '@remix-run/node';\n\nimport type { 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 type { SessionStorage } from '@remix-run/node';\n\nimport type { 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 type { TypedResponse } from '@remix-run/node';\nimport { redirect } 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 type { SessionStorage } from '@remix-run/node';\n\nimport type { CreateLogtoAdapter } from '../../infrastructure/logto';\n\ntype SignOutRequest = {\n readonly cookieHeader: string | undefined;\n redirectUri: string;\n};\n\ntype SignOutResponse = {\n cookieHeader: string;\n readonly navigateToUrl: string;\n};\n\nexport const makeHandleSignOutUseCase =\n (deps: { createLogtoAdapter: CreateLogtoAdapter; sessionStorage: SessionStorage }) =>\n async (request: SignOutRequest): Promise<SignOutResponse> => {\n const { sessionStorage, createLogtoAdapter } = deps;\n\n const session = await sessionStorage.getSession(request.cookieHeader);\n\n const logto = createLogtoAdapter(session);\n\n const response = await logto.handleSignOut({\n redirectUri: request.redirectUri,\n });\n\n const cookieHeader = await sessionStorage.destroySession(session);\n\n return {\n cookieHeader,\n navigateToUrl: response.navigateToUrl,\n };\n };\n\nexport type HandleSignOutUseCase = ReturnType<typeof makeHandleSignOutUseCase>;\n","export class HandleAuthRoutesError extends Error {\n public static readonly becauseNoConfigForPath = (anticipatedPath: string) =>\n new HandleAuthRoutesError({\n code: 1_665_388_277,\n message: `No configuration available for path \"${anticipatedPath}\".`,\n });\n\n public static readonly becauseOfUnknownRoute = (anticipatedConfigKey: string) =>\n new HandleAuthRoutesError({\n code: 1_665_388_278,\n message: `The config key \"${anticipatedConfigKey}\" is invalid.`,\n });\n\n public readonly code = this.properties.code;\n public readonly cause = this.properties.cause;\n public readonly plainMessage = this.properties.message;\n\n private constructor(\n private readonly properties: {\n readonly code: number;\n readonly message: string;\n readonly cause?: Error;\n }\n ) {\n super(`#[${properties.code}] ${properties.message}`);\n }\n}\n"],"names":[],"version":3,"file":"index.js.map","sourceRoot":"../../../"}
package/lib/module.d.mts DELETED
@@ -1,29 +0,0 @@
1
- import { GetContextParameters, LogtoConfig } from "@logto/node";
2
- import { SessionStorage } from "@remix-run/node";
3
- export { type LogtoConfig } from '@logto/node';
4
- export { type LogtoContext } from '@logto/node';
5
- type Config = Readonly<LogtoConfig> & {
6
- readonly baseUrl: string;
7
- };
8
- export const makeLogtoRemix: (config: Config, deps: {
9
- sessionStorage: SessionStorage;
10
- }) => Readonly<{
11
- handleAuthRoutes: (dto: {
12
- "sign-in": {
13
- readonly path: string;
14
- readonly redirectBackTo: string;
15
- };
16
- "sign-in-callback": {
17
- readonly path: string;
18
- readonly redirectBackTo: string;
19
- };
20
- "sign-out": {
21
- readonly path: string;
22
- readonly redirectBackTo: string;
23
- };
24
- }) => import("@remix-run/node").LoaderFunction;
25
- getContext: (dto: GetContextParameters) => (request: Request) => Promise<import("@logto/node").LogtoContext>;
26
- }>;
27
- export { type LogtoContext } from '@logto/node';
28
-
29
- //# sourceMappingURL=index.d.ts.map