@eminuckan/spine 0.2.2 → 0.3.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 (135) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/CODE_OF_CONDUCT.md +39 -0
  3. package/CONTRIBUTING.md +78 -0
  4. package/MAINTAINERS.md +43 -0
  5. package/README.md +111 -55
  6. package/ROADMAP.md +58 -0
  7. package/SECURITY.md +37 -0
  8. package/dist/access/evaluator.d.ts +3 -0
  9. package/dist/access/evaluator.d.ts.map +1 -0
  10. package/dist/access/index.d.ts +3 -0
  11. package/dist/access/index.d.ts.map +1 -0
  12. package/dist/access/index.js +4 -0
  13. package/dist/access/types.d.ts +38 -0
  14. package/dist/access/types.d.ts.map +1 -0
  15. package/dist/access-CGrsDMwu.js +61 -0
  16. package/dist/access-CGrsDMwu.js.map +1 -0
  17. package/dist/api-client/api-config.server.d.ts +27 -0
  18. package/dist/api-client/api-config.server.d.ts.map +1 -1
  19. package/dist/api-client/error-codes.d.ts +6 -31
  20. package/dist/api-client/error-codes.d.ts.map +1 -1
  21. package/dist/api-client/index.js +3 -3
  22. package/dist/api-client/server.d.ts +1 -1
  23. package/dist/api-client/server.d.ts.map +1 -1
  24. package/dist/api-client/server.js +4 -4
  25. package/dist/{api-client-DsrxK05Z.js → api-client-CgZUMukO.js} +9 -26
  26. package/dist/api-client-CgZUMukO.js.map +1 -0
  27. package/dist/auth/auth.server.d.ts +21 -16
  28. package/dist/auth/auth.server.d.ts.map +1 -1
  29. package/dist/auth/authorization-parameters.d.ts +5 -0
  30. package/dist/auth/authorization-parameters.d.ts.map +1 -0
  31. package/dist/auth/index.d.ts +1 -1
  32. package/dist/auth/index.d.ts.map +1 -1
  33. package/dist/auth/redis-session-storage.server.d.ts +18 -1
  34. package/dist/auth/redis-session-storage.server.d.ts.map +1 -1
  35. package/dist/auth/route-protection.server.d.ts +20 -4
  36. package/dist/auth/route-protection.server.d.ts.map +1 -1
  37. package/dist/auth/server.d.ts +1 -1
  38. package/dist/auth/server.d.ts.map +1 -1
  39. package/dist/auth/server.js +5 -5
  40. package/dist/auth/types.d.ts +88 -21
  41. package/dist/auth/types.d.ts.map +1 -1
  42. package/dist/auth.server-D5oiz9aF.js +1066 -0
  43. package/dist/auth.server-D5oiz9aF.js.map +1 -0
  44. package/dist/auth.server-lC94lmlx.js +5 -0
  45. package/dist/identity/identity-context.server.d.ts +2 -0
  46. package/dist/identity/identity-context.server.d.ts.map +1 -1
  47. package/dist/identity/identity-store.d.ts +19 -2
  48. package/dist/identity/identity-store.d.ts.map +1 -1
  49. package/dist/identity/index.js +2 -2
  50. package/dist/identity/server.js +3 -3
  51. package/dist/identity/types.d.ts +3 -1
  52. package/dist/identity/types.d.ts.map +1 -1
  53. package/dist/{identity-CFa1txoj.js → identity-C5un-xAs.js} +104 -60
  54. package/dist/identity-C5un-xAs.js.map +1 -0
  55. package/dist/index.d.ts +1 -0
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +12 -10
  58. package/dist/logging/index.js +1 -1
  59. package/dist/{logging-_h2mi3L9.js → logging-DviiAkLx.js} +2 -2
  60. package/dist/{logging-_h2mi3L9.js.map → logging-DviiAkLx.js.map} +1 -1
  61. package/dist/permission-service-CvGpwI0d.js +95 -0
  62. package/dist/permission-service-CvGpwI0d.js.map +1 -0
  63. package/dist/permissions/constants.d.ts +3 -0
  64. package/dist/permissions/constants.d.ts.map +1 -1
  65. package/dist/permissions/index.js +2 -1
  66. package/dist/permissions/permission-store.d.ts +1 -1
  67. package/dist/permissions/types.d.ts +1 -1
  68. package/dist/permissions/types.d.ts.map +1 -1
  69. package/dist/{permissions-D5ScGGnd.js → permissions-_n1hIG7Q.js} +8 -106
  70. package/dist/permissions-_n1hIG7Q.js.map +1 -0
  71. package/dist/query-client/index.js +1 -1
  72. package/dist/query-client/types.d.ts +9 -9
  73. package/dist/query-client/types.d.ts.map +1 -1
  74. package/dist/{query-client-Bpe08pk9.js → query-client-Bh3TyB8W.js} +2 -2
  75. package/dist/query-client-Bh3TyB8W.js.map +1 -0
  76. package/dist/react-router/index.js +12 -10
  77. package/dist/react-router/server.js +19 -17
  78. package/dist/redis-session-storage.server-v2VcpFsQ.js +500 -0
  79. package/dist/redis-session-storage.server-v2VcpFsQ.js.map +1 -0
  80. package/dist/{server-BHfKHKF_.js → server-B6PCxc-T.js} +39 -87
  81. package/dist/server-B6PCxc-T.js.map +1 -0
  82. package/dist/{server-DZmcd2Lr.js → server-C96NMFBy.js} +18 -10
  83. package/dist/server-C96NMFBy.js.map +1 -0
  84. package/dist/{server-BxvRxjCK.js → server-Ca-3DJf2.js} +44 -11
  85. package/dist/server-Ca-3DJf2.js.map +1 -0
  86. package/dist/{server-C3L8J7iE.js → server-Dxsww9v9.js} +6 -5
  87. package/dist/server-Dxsww9v9.js.map +1 -0
  88. package/dist/{server-CouYoZiw.js → server-hGrElJMG.js} +2 -2
  89. package/dist/{server-CouYoZiw.js.map → server-hGrElJMG.js.map} +1 -1
  90. package/dist/server.js +19 -17
  91. package/dist/signalr/index.js +1 -1
  92. package/dist/signalr/types.d.ts +1 -1
  93. package/dist/{signalr-SJ-1sIxw.js → signalr-k-70VHKo.js} +3 -2
  94. package/dist/signalr-k-70VHKo.js.map +1 -0
  95. package/dist/tenant/index.js +2 -2
  96. package/dist/tenant/server.js +4 -4
  97. package/dist/tenant/tenant-context.d.ts +17 -1
  98. package/dist/tenant/tenant-context.d.ts.map +1 -1
  99. package/dist/tenant/tenant-cookie.server.d.ts.map +1 -1
  100. package/dist/tenant/tenant-store.d.ts +54 -9
  101. package/dist/tenant/tenant-store.d.ts.map +1 -1
  102. package/dist/tenant/tenant.server.d.ts +20 -1
  103. package/dist/tenant/tenant.server.d.ts.map +1 -1
  104. package/dist/tenant/types.d.ts +29 -9
  105. package/dist/tenant/types.d.ts.map +1 -1
  106. package/dist/tenant-DfLemb6n.js +384 -0
  107. package/dist/tenant-DfLemb6n.js.map +1 -0
  108. package/dist/{types-BnKaWdfe.js → types-BaaE6wjY.js} +1 -1
  109. package/dist/{types-BnKaWdfe.js.map → types-BaaE6wjY.js.map} +1 -1
  110. package/docs/adapters.md +87 -0
  111. package/docs/architecture.md +193 -0
  112. package/docs/backend-adaptation.md +249 -0
  113. package/docs/codex-for-oss-application.md +31 -0
  114. package/docs/codex-maintenance.md +47 -0
  115. package/docs/installation.md +213 -0
  116. package/docs/module-reference.md +207 -0
  117. package/docs/releasing.md +92 -0
  118. package/package.json +27 -4
  119. package/dist/api-client-DsrxK05Z.js.map +0 -1
  120. package/dist/auth.server-BPiCtlJE.js +0 -5
  121. package/dist/auth.server-Cx2h2qu3.js +0 -724
  122. package/dist/auth.server-Cx2h2qu3.js.map +0 -1
  123. package/dist/identity-CFa1txoj.js.map +0 -1
  124. package/dist/permissions-D5ScGGnd.js.map +0 -1
  125. package/dist/query-client-Bpe08pk9.js.map +0 -1
  126. package/dist/redis-session-storage.server-BR_0y-QO.js +0 -250
  127. package/dist/redis-session-storage.server-BR_0y-QO.js.map +0 -1
  128. package/dist/server-BHfKHKF_.js.map +0 -1
  129. package/dist/server-BxvRxjCK.js.map +0 -1
  130. package/dist/server-C3L8J7iE.js.map +0 -1
  131. package/dist/server-DZmcd2Lr.js.map +0 -1
  132. package/dist/signalr-SJ-1sIxw.js.map +0 -1
  133. package/dist/tenant-C6KPaSCX.js +0 -256
  134. package/dist/tenant-C6KPaSCX.js.map +0 -1
  135. /package/dist/{src-CJ2RLi94.js → src-B9rDUgSb.js} +0 -0
@@ -3,9 +3,10 @@
3
3
  */
4
4
  /**
5
5
  * Application Type
6
- * Determines logout behavior and error handling
6
+ * Describes app UX shape for login/error handling.
7
7
  */
8
8
  export type ApplicationType = 'no-landing-page' | 'landing-page' | 'dashboard' | 'tenant-app' | 'custom';
9
+ export type OidcClientAuthMethod = 'none' | 'client_secret_post' | 'client_secret_basic';
9
10
  /**
10
11
  * OAuth Configuration
11
12
  */
@@ -13,32 +14,22 @@ export interface AuthConfig {
13
14
  authority: string;
14
15
  clientId: string;
15
16
  clientSecret?: string;
17
+ clientAuthMethod?: OidcClientAuthMethod;
16
18
  redirectUri: string;
17
19
  postLogoutRedirectUri?: string;
18
20
  scope: string;
19
21
  /**
20
- * Application type - determines logout behavior
21
- * - 'no-landing-page': No landing page, defaults to full SSO logout
22
- * - 'landing-page': Has a landing page, defaults to app-specific logout
22
+ * Application type - determines landing/error handling only.
23
+ * Logout scope is request intent:
24
+ * - default `/auth/logout`: RP-Initiated Logout at the identity provider
25
+ * - `/auth/logout?logout=local`: application session cleanup only
26
+ *
27
+ * Aliases:
23
28
  * - 'dashboard': Legacy alias for 'no-landing-page'
24
29
  * - 'tenant-app': Legacy alias for 'landing-page'
25
- * - 'custom': Use explicit ssoLogout setting
26
30
  * @default 'custom'
27
31
  */
28
32
  applicationType?: ApplicationType;
29
- /**
30
- * Whether to perform full SSO logout (clear identity cookie) or app-specific logout
31
- * - true: Full logout - clears identity cookie, revokes all tokens
32
- * - false: App-specific logout - keeps identity cookie, revokes only this app's tokens
33
- *
34
- * If not set, determined by applicationType:
35
- * - 'no-landing-page': true (full logout)
36
- * - 'landing-page': false (app-specific)
37
- * - 'dashboard': true (legacy alias)
38
- * - 'tenant-app': false (legacy alias)
39
- * - 'custom': false (default)
40
- */
41
- ssoLogout?: boolean;
42
33
  /**
43
34
  * Whether the application has a landing page
44
35
  * - true: Has landing page - OAuth errors redirect to home, user sees landing
@@ -95,20 +86,57 @@ export interface OAuthState {
95
86
  codeVerifier: string;
96
87
  nonce?: string;
97
88
  returnUrl?: string;
89
+ /** Keycloak application initiated action requested for this authorization flow. */
90
+ kcAction?: string;
98
91
  createdAt: number;
99
92
  }
100
93
  /**
101
94
  * Session Data stored in Redis
102
95
  */
103
96
  export interface SessionData {
97
+ sessionId?: string;
104
98
  userId?: string;
105
99
  accessToken?: string;
106
100
  refreshToken?: string;
107
101
  idToken?: string;
108
102
  expiresAt?: number;
103
+ issuer?: string;
104
+ sid?: string;
105
+ sessionState?: string;
106
+ clientId?: string;
107
+ ipAddress?: string;
108
+ userAgent?: string;
109
109
  user?: UserInfo;
110
+ createdAt?: number;
110
111
  lastActivity?: number;
111
112
  }
113
+ export interface AuthSessionSummary {
114
+ sessionId: string;
115
+ userId?: string;
116
+ email?: string;
117
+ name?: string;
118
+ issuer?: string;
119
+ sid?: string;
120
+ sessionState?: string;
121
+ clientId?: string;
122
+ ipAddress?: string;
123
+ userAgent?: string;
124
+ createdAt?: number;
125
+ lastActivity?: number;
126
+ expiresAt?: number;
127
+ isCurrent?: boolean;
128
+ }
129
+ export interface BackChannelLogoutResult {
130
+ destroyedSessions: number;
131
+ issuer?: string;
132
+ subject?: string;
133
+ sid?: string;
134
+ }
135
+ export interface FrontChannelLogoutResult {
136
+ destroyedSessions: number;
137
+ issuer?: string;
138
+ sid?: string;
139
+ }
112
140
  /**
113
141
  * Session Flash Data for temporary messages
114
142
  */
@@ -134,19 +162,58 @@ export interface TokenRefreshResult {
134
162
  /**
135
163
  * Route protection levels
136
164
  */
137
- export type ProtectionLevel = 'public' | 'auth' | 'onboarding-required' | 'subscription-required';
165
+ export type ProtectionLevel = 'public' | 'auth' | 'policy'
166
+ /** @deprecated Use policy with configureRouteProtection instead. */
167
+ | 'onboarding-required'
168
+ /** @deprecated Use policy with configureRouteProtection instead. */
169
+ | 'subscription-required';
138
170
  /**
139
171
  * Protected route loader function type
140
172
  */
141
173
  export type ProtectedLoaderFn<T> = (user?: UserInfo) => Promise<T> | T;
174
+ export type PublicAuthorizationStateContext = Record<string, string | number | boolean | null | undefined>;
142
175
  /**
143
176
  * Login options
144
177
  */
145
178
  export interface LoginOptions {
146
179
  /** Return URL after successful login */
147
180
  returnUrl?: string;
148
- /** OAuth prompt parameter (none, login, consent, select_account) */
149
- prompt?: 'none' | 'login' | 'consent' | 'select_account';
181
+ /** OAuth prompt parameter (none, login, consent, select_account, create) */
182
+ prompt?: 'none' | 'login' | 'consent' | 'select_account' | 'create';
183
+ /**
184
+ * Additional authorization request parameters.
185
+ *
186
+ * Use this for safe provider hints: `login_hint`, `ui_locales`,
187
+ * `acr_values`, `kc_idp_hint`, or app-specific provider hints allowed by
188
+ * `extraAuthParamNames` / `extraAuthParamPrefixes`.
189
+ * Security-sensitive protocol parameters such as state, nonce, redirect_uri,
190
+ * scope, PKCE, prompt, and kc_action are managed by Spine and cannot be
191
+ * overridden.
192
+ */
193
+ extraAuthParams?: Record<string, string | number | boolean | null | undefined>;
194
+ /**
195
+ * Additional non-sensitive authorization parameter names allowed for this
196
+ * login request. Use this for app-specific identity-provider theme hints.
197
+ */
198
+ extraAuthParamNames?: string[];
199
+ /**
200
+ * Additional non-sensitive authorization parameter prefixes allowed for this
201
+ * login request. Prefixes should be narrow and app-owned.
202
+ */
203
+ extraAuthParamPrefixes?: string[];
204
+ /**
205
+ * Optional public, non-secret UI context appended to the OAuth state value.
206
+ * This exists for identity-provider themes that need display hints while the
207
+ * server still validates the full exact state value during callback handling.
208
+ */
209
+ publicStateContext?: PublicAuthorizationStateContext;
210
+ /**
211
+ * Keycloak application initiated action.
212
+ *
213
+ * Example: `webauthn-register` starts native passkey registration.
214
+ * This is Keycloak-specific and is ignored by non-Keycloak providers.
215
+ */
216
+ kcAction?: string;
150
217
  }
151
218
  /**
152
219
  * Auth error information from OAuth callback
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":"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"}