@authrim/sveltekit 0.1.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 (266) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +531 -0
  3. package/dist/__tests__/client-events.test.d.ts +2 -0
  4. package/dist/__tests__/client-events.test.d.ts.map +1 -0
  5. package/dist/__tests__/client-events.test.js +225 -0
  6. package/dist/__tests__/providers.test.d.ts +2 -0
  7. package/dist/__tests__/providers.test.d.ts.map +1 -0
  8. package/dist/__tests__/providers.test.js +68 -0
  9. package/dist/__tests__/response.test.d.ts +2 -0
  10. package/dist/__tests__/response.test.d.ts.map +1 -0
  11. package/dist/__tests__/response.test.js +99 -0
  12. package/dist/__tests__/stores.test.d.ts +2 -0
  13. package/dist/__tests__/stores.test.d.ts.map +1 -0
  14. package/dist/__tests__/stores.test.js +91 -0
  15. package/dist/client.d.ts +25 -0
  16. package/dist/client.d.ts.map +1 -0
  17. package/dist/client.js +411 -0
  18. package/dist/components/AuthProvider.svelte +56 -0
  19. package/dist/components/AuthProvider.svelte.d.ts +34 -0
  20. package/dist/components/AuthProvider.svelte.d.ts.map +1 -0
  21. package/dist/components/ProtectedRoute.svelte +71 -0
  22. package/dist/components/ProtectedRoute.svelte.d.ts +38 -0
  23. package/dist/components/ProtectedRoute.svelte.d.ts.map +1 -0
  24. package/dist/components/SignInButton.svelte +93 -0
  25. package/dist/components/SignInButton.svelte.d.ts +43 -0
  26. package/dist/components/SignInButton.svelte.d.ts.map +1 -0
  27. package/dist/components/SignOutButton.svelte +72 -0
  28. package/dist/components/SignOutButton.svelte.d.ts +40 -0
  29. package/dist/components/SignOutButton.svelte.d.ts.map +1 -0
  30. package/dist/components/UserProfile.svelte +71 -0
  31. package/dist/components/UserProfile.svelte.d.ts +51 -0
  32. package/dist/components/UserProfile.svelte.d.ts.map +1 -0
  33. package/dist/components/index.d.ts +6 -0
  34. package/dist/components/index.d.ts.map +1 -0
  35. package/dist/components/index.js +5 -0
  36. package/dist/direct-auth/ciba.d.ts +47 -0
  37. package/dist/direct-auth/ciba.d.ts.map +1 -0
  38. package/dist/direct-auth/ciba.js +77 -0
  39. package/dist/direct-auth/consent.d.ts +85 -0
  40. package/dist/direct-auth/consent.d.ts.map +1 -0
  41. package/dist/direct-auth/consent.js +57 -0
  42. package/dist/direct-auth/device-flow.d.ts +40 -0
  43. package/dist/direct-auth/device-flow.d.ts.map +1 -0
  44. package/dist/direct-auth/device-flow.js +45 -0
  45. package/dist/direct-auth/email-code.d.ts +48 -0
  46. package/dist/direct-auth/email-code.d.ts.map +1 -0
  47. package/dist/direct-auth/email-code.js +265 -0
  48. package/dist/direct-auth/index.d.ts +9 -0
  49. package/dist/direct-auth/index.d.ts.map +1 -0
  50. package/dist/direct-auth/index.js +8 -0
  51. package/dist/direct-auth/login-challenge.d.ts +41 -0
  52. package/dist/direct-auth/login-challenge.d.ts.map +1 -0
  53. package/dist/direct-auth/login-challenge.js +34 -0
  54. package/dist/direct-auth/passkey.d.ts +30 -0
  55. package/dist/direct-auth/passkey.d.ts.map +1 -0
  56. package/dist/direct-auth/passkey.js +392 -0
  57. package/dist/direct-auth/session.d.ts +48 -0
  58. package/dist/direct-auth/session.d.ts.map +1 -0
  59. package/dist/direct-auth/session.js +219 -0
  60. package/dist/direct-auth/social.d.ts +56 -0
  61. package/dist/direct-auth/social.d.ts.map +1 -0
  62. package/dist/direct-auth/social.js +484 -0
  63. package/dist/index.d.ts +17 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +14 -0
  66. package/dist/providers/crypto.d.ts +13 -0
  67. package/dist/providers/crypto.d.ts.map +1 -0
  68. package/dist/providers/crypto.js +27 -0
  69. package/dist/providers/http.d.ts +30 -0
  70. package/dist/providers/http.d.ts.map +1 -0
  71. package/dist/providers/http.js +65 -0
  72. package/dist/providers/index.d.ts +4 -0
  73. package/dist/providers/index.d.ts.map +1 -0
  74. package/dist/providers/index.js +3 -0
  75. package/dist/providers/storage.d.ts +21 -0
  76. package/dist/providers/storage.d.ts.map +1 -0
  77. package/dist/providers/storage.js +83 -0
  78. package/dist/server/handle.d.ts +46 -0
  79. package/dist/server/handle.d.ts.map +1 -0
  80. package/dist/server/handle.js +60 -0
  81. package/dist/server/index.d.ts +4 -0
  82. package/dist/server/index.d.ts.map +1 -0
  83. package/dist/server/index.js +3 -0
  84. package/dist/server/load.d.ts +83 -0
  85. package/dist/server/load.d.ts.map +1 -0
  86. package/dist/server/load.js +86 -0
  87. package/dist/server/session.d.ts +44 -0
  88. package/dist/server/session.d.ts.map +1 -0
  89. package/dist/server/session.js +50 -0
  90. package/dist/stores/auth.d.ts +56 -0
  91. package/dist/stores/auth.d.ts.map +1 -0
  92. package/dist/stores/auth.js +64 -0
  93. package/dist/stores/index.d.ts +2 -0
  94. package/dist/stores/index.d.ts.map +1 -0
  95. package/dist/stores/index.js +1 -0
  96. package/dist/types.d.ts +164 -0
  97. package/dist/types.d.ts.map +1 -0
  98. package/dist/types.js +4 -0
  99. package/dist/ui/account/LinkAccountButton.svelte +133 -0
  100. package/dist/ui/account/LinkAccountButton.svelte.d.ts +37 -0
  101. package/dist/ui/account/LinkAccountButton.svelte.d.ts.map +1 -0
  102. package/dist/ui/account/LinkedAccountsList.svelte +233 -0
  103. package/dist/ui/account/LinkedAccountsList.svelte.d.ts +32 -0
  104. package/dist/ui/account/LinkedAccountsList.svelte.d.ts.map +1 -0
  105. package/dist/ui/account/UnlinkAccountButton.svelte +179 -0
  106. package/dist/ui/account/UnlinkAccountButton.svelte.d.ts +28 -0
  107. package/dist/ui/account/UnlinkAccountButton.svelte.d.ts.map +1 -0
  108. package/dist/ui/account/index.d.ts +7 -0
  109. package/dist/ui/account/index.d.ts.map +1 -0
  110. package/dist/ui/account/index.js +6 -0
  111. package/dist/ui/context.d.ts +17 -0
  112. package/dist/ui/context.d.ts.map +1 -0
  113. package/dist/ui/context.js +71 -0
  114. package/dist/ui/forms/CIBARequestCard.svelte +315 -0
  115. package/dist/ui/forms/CIBARequestCard.svelte.d.ts +50 -0
  116. package/dist/ui/forms/CIBARequestCard.svelte.d.ts.map +1 -0
  117. package/dist/ui/forms/ClientInfo.svelte +232 -0
  118. package/dist/ui/forms/ClientInfo.svelte.d.ts +35 -0
  119. package/dist/ui/forms/ClientInfo.svelte.d.ts.map +1 -0
  120. package/dist/ui/forms/ConsentScopesList.svelte +109 -0
  121. package/dist/ui/forms/ConsentScopesList.svelte.d.ts +30 -0
  122. package/dist/ui/forms/ConsentScopesList.svelte.d.ts.map +1 -0
  123. package/dist/ui/forms/EmailCodeForm.svelte +224 -0
  124. package/dist/ui/forms/EmailCodeForm.svelte.d.ts +39 -0
  125. package/dist/ui/forms/EmailCodeForm.svelte.d.ts.map +1 -0
  126. package/dist/ui/forms/OrgSelector.svelte +95 -0
  127. package/dist/ui/forms/OrgSelector.svelte.d.ts +37 -0
  128. package/dist/ui/forms/OrgSelector.svelte.d.ts.map +1 -0
  129. package/dist/ui/forms/PasskeyConditionalInput.svelte +173 -0
  130. package/dist/ui/forms/PasskeyConditionalInput.svelte.d.ts +36 -0
  131. package/dist/ui/forms/PasskeyConditionalInput.svelte.d.ts.map +1 -0
  132. package/dist/ui/forms/QRCodeDisplay.svelte +122 -0
  133. package/dist/ui/forms/QRCodeDisplay.svelte.d.ts +27 -0
  134. package/dist/ui/forms/QRCodeDisplay.svelte.d.ts.map +1 -0
  135. package/dist/ui/forms/SocialLoginButtons.svelte +209 -0
  136. package/dist/ui/forms/SocialLoginButtons.svelte.d.ts +33 -0
  137. package/dist/ui/forms/SocialLoginButtons.svelte.d.ts.map +1 -0
  138. package/dist/ui/forms/UserCodeInput.svelte +183 -0
  139. package/dist/ui/forms/UserCodeInput.svelte.d.ts +34 -0
  140. package/dist/ui/forms/UserCodeInput.svelte.d.ts.map +1 -0
  141. package/dist/ui/forms/index.d.ts +13 -0
  142. package/dist/ui/forms/index.d.ts.map +1 -0
  143. package/dist/ui/forms/index.js +12 -0
  144. package/dist/ui/helpers/AuthError.svelte +124 -0
  145. package/dist/ui/helpers/AuthError.svelte.d.ts +26 -0
  146. package/dist/ui/helpers/AuthError.svelte.d.ts.map +1 -0
  147. package/dist/ui/helpers/AuthLoading.svelte +83 -0
  148. package/dist/ui/helpers/AuthLoading.svelte.d.ts +25 -0
  149. package/dist/ui/helpers/AuthLoading.svelte.d.ts.map +1 -0
  150. package/dist/ui/helpers/OTPInput.svelte +214 -0
  151. package/dist/ui/helpers/OTPInput.svelte.d.ts +34 -0
  152. package/dist/ui/helpers/OTPInput.svelte.d.ts.map +1 -0
  153. package/dist/ui/helpers/ResendCodeButton.svelte +140 -0
  154. package/dist/ui/helpers/ResendCodeButton.svelte.d.ts +28 -0
  155. package/dist/ui/helpers/ResendCodeButton.svelte.d.ts.map +1 -0
  156. package/dist/ui/helpers/index.d.ts +8 -0
  157. package/dist/ui/helpers/index.d.ts.map +1 -0
  158. package/dist/ui/helpers/index.js +7 -0
  159. package/dist/ui/index.d.ts +43 -0
  160. package/dist/ui/index.d.ts.map +1 -0
  161. package/dist/ui/index.js +48 -0
  162. package/dist/ui/passkey/PasskeyDeleteButton.svelte +177 -0
  163. package/dist/ui/passkey/PasskeyDeleteButton.svelte.d.ts +26 -0
  164. package/dist/ui/passkey/PasskeyDeleteButton.svelte.d.ts.map +1 -0
  165. package/dist/ui/passkey/PasskeyList.svelte +225 -0
  166. package/dist/ui/passkey/PasskeyList.svelte.d.ts +30 -0
  167. package/dist/ui/passkey/PasskeyList.svelte.d.ts.map +1 -0
  168. package/dist/ui/passkey/PasskeyRegisterButton.svelte +52 -0
  169. package/dist/ui/passkey/PasskeyRegisterButton.svelte.d.ts +38 -0
  170. package/dist/ui/passkey/PasskeyRegisterButton.svelte.d.ts.map +1 -0
  171. package/dist/ui/passkey/index.d.ts +7 -0
  172. package/dist/ui/passkey/index.d.ts.map +1 -0
  173. package/dist/ui/passkey/index.js +6 -0
  174. package/dist/ui/session/SessionExpiryIndicator.svelte +109 -0
  175. package/dist/ui/session/SessionExpiryIndicator.svelte.d.ts +23 -0
  176. package/dist/ui/session/SessionExpiryIndicator.svelte.d.ts.map +1 -0
  177. package/dist/ui/session/SessionList.svelte +231 -0
  178. package/dist/ui/session/SessionList.svelte.d.ts +31 -0
  179. package/dist/ui/session/SessionList.svelte.d.ts.map +1 -0
  180. package/dist/ui/session/SessionRevokeButton.svelte +72 -0
  181. package/dist/ui/session/SessionRevokeButton.svelte.d.ts +26 -0
  182. package/dist/ui/session/SessionRevokeButton.svelte.d.ts.map +1 -0
  183. package/dist/ui/session/index.d.ts +7 -0
  184. package/dist/ui/session/index.d.ts.map +1 -0
  185. package/dist/ui/session/index.js +6 -0
  186. package/dist/ui/shared/Alert.svelte +246 -0
  187. package/dist/ui/shared/Alert.svelte.d.ts +36 -0
  188. package/dist/ui/shared/Alert.svelte.d.ts.map +1 -0
  189. package/dist/ui/shared/Badge.svelte +100 -0
  190. package/dist/ui/shared/Badge.svelte.d.ts +35 -0
  191. package/dist/ui/shared/Badge.svelte.d.ts.map +1 -0
  192. package/dist/ui/shared/Button.svelte +213 -0
  193. package/dist/ui/shared/Button.svelte.d.ts +42 -0
  194. package/dist/ui/shared/Button.svelte.d.ts.map +1 -0
  195. package/dist/ui/shared/Card.svelte +85 -0
  196. package/dist/ui/shared/Card.svelte.d.ts +39 -0
  197. package/dist/ui/shared/Card.svelte.d.ts.map +1 -0
  198. package/dist/ui/shared/CountdownTimer.svelte +150 -0
  199. package/dist/ui/shared/CountdownTimer.svelte.d.ts +30 -0
  200. package/dist/ui/shared/CountdownTimer.svelte.d.ts.map +1 -0
  201. package/dist/ui/shared/Dialog.svelte +240 -0
  202. package/dist/ui/shared/Dialog.svelte.d.ts +39 -0
  203. package/dist/ui/shared/Dialog.svelte.d.ts.map +1 -0
  204. package/dist/ui/shared/Input.svelte +192 -0
  205. package/dist/ui/shared/Input.svelte.d.ts +42 -0
  206. package/dist/ui/shared/Input.svelte.d.ts.map +1 -0
  207. package/dist/ui/shared/LanguageSwitcher.svelte +99 -0
  208. package/dist/ui/shared/LanguageSwitcher.svelte.d.ts +31 -0
  209. package/dist/ui/shared/LanguageSwitcher.svelte.d.ts.map +1 -0
  210. package/dist/ui/shared/Spinner.svelte +75 -0
  211. package/dist/ui/shared/Spinner.svelte.d.ts +24 -0
  212. package/dist/ui/shared/Spinner.svelte.d.ts.map +1 -0
  213. package/dist/ui/shared/index.d.ts +13 -0
  214. package/dist/ui/shared/index.d.ts.map +1 -0
  215. package/dist/ui/shared/index.js +12 -0
  216. package/dist/ui/styles/base.css +168 -0
  217. package/dist/ui/styles/theme.css +279 -0
  218. package/dist/ui/templates/AccountSettingsTemplate.svelte +205 -0
  219. package/dist/ui/templates/AccountSettingsTemplate.svelte.d.ts +49 -0
  220. package/dist/ui/templates/AccountSettingsTemplate.svelte.d.ts.map +1 -0
  221. package/dist/ui/templates/CIBATemplate.svelte +227 -0
  222. package/dist/ui/templates/CIBATemplate.svelte.d.ts +45 -0
  223. package/dist/ui/templates/CIBATemplate.svelte.d.ts.map +1 -0
  224. package/dist/ui/templates/ConsentTemplate.svelte +549 -0
  225. package/dist/ui/templates/ConsentTemplate.svelte.d.ts +76 -0
  226. package/dist/ui/templates/ConsentTemplate.svelte.d.ts.map +1 -0
  227. package/dist/ui/templates/DeviceFlowTemplate.svelte +228 -0
  228. package/dist/ui/templates/DeviceFlowTemplate.svelte.d.ts +47 -0
  229. package/dist/ui/templates/DeviceFlowTemplate.svelte.d.ts.map +1 -0
  230. package/dist/ui/templates/LoginTemplate.svelte +234 -0
  231. package/dist/ui/templates/LoginTemplate.svelte.d.ts +49 -0
  232. package/dist/ui/templates/LoginTemplate.svelte.d.ts.map +1 -0
  233. package/dist/ui/templates/ReauthTemplate.svelte +269 -0
  234. package/dist/ui/templates/ReauthTemplate.svelte.d.ts +54 -0
  235. package/dist/ui/templates/ReauthTemplate.svelte.d.ts.map +1 -0
  236. package/dist/ui/templates/SignUpTemplate.svelte +345 -0
  237. package/dist/ui/templates/SignUpTemplate.svelte.d.ts +53 -0
  238. package/dist/ui/templates/SignUpTemplate.svelte.d.ts.map +1 -0
  239. package/dist/ui/templates/index.d.ts +14 -0
  240. package/dist/ui/templates/index.d.ts.map +1 -0
  241. package/dist/ui/templates/index.js +13 -0
  242. package/dist/ui/types.d.ts +151 -0
  243. package/dist/ui/types.d.ts.map +1 -0
  244. package/dist/ui/types.js +4 -0
  245. package/dist/utils/context.d.ts +12 -0
  246. package/dist/utils/context.d.ts.map +1 -0
  247. package/dist/utils/context.js +26 -0
  248. package/dist/utils/error-mapping.d.ts +29 -0
  249. package/dist/utils/error-mapping.d.ts.map +1 -0
  250. package/dist/utils/error-mapping.js +38 -0
  251. package/dist/utils/index.d.ts +7 -0
  252. package/dist/utils/index.d.ts.map +1 -0
  253. package/dist/utils/index.js +6 -0
  254. package/dist/utils/response.d.ts +21 -0
  255. package/dist/utils/response.d.ts.map +1 -0
  256. package/dist/utils/response.js +84 -0
  257. package/dist/utils/sensitive-data.d.ts +9 -0
  258. package/dist/utils/sensitive-data.d.ts.map +1 -0
  259. package/dist/utils/sensitive-data.js +56 -0
  260. package/dist/utils/ssr.d.ts +38 -0
  261. package/dist/utils/ssr.d.ts.map +1 -0
  262. package/dist/utils/ssr.js +73 -0
  263. package/dist/utils/webauthn-converters.d.ts +9 -0
  264. package/dist/utils/webauthn-converters.d.ts.map +1 -0
  265. package/dist/utils/webauthn-converters.js +75 -0
  266. package/package.json +111 -0
@@ -0,0 +1,93 @@
1
+ <!--
2
+ SignInButton Component
3
+
4
+ A thin wrapper that delegates all behavior to props/events.
5
+ Responsibilities: Call auth API and dispatch events.
6
+ -->
7
+ <script lang="ts">
8
+ import { createEventDispatcher } from 'svelte';
9
+ import { getAuthContext } from '../utils/context.js';
10
+ import type { SocialProvider, Session, User, AuthLoadingState } from '../types.js';
11
+ import type { AuthError } from '../stores/auth.js';
12
+
13
+ /** Authentication method */
14
+ export let method: 'passkey' | 'social' = 'passkey';
15
+
16
+ /** Social provider (required when method is 'social') */
17
+ export let provider: SocialProvider | undefined = undefined;
18
+
19
+ /** Disabled state */
20
+ export let disabled: boolean = false;
21
+
22
+ /** Custom class */
23
+ let className: string = '';
24
+ export { className as class };
25
+
26
+ const auth = getAuthContext();
27
+ const dispatch = createEventDispatcher<{
28
+ success: { session: Session; user: User };
29
+ error: AuthError;
30
+ loading: AuthLoadingState;
31
+ }>();
32
+
33
+ let loading = false;
34
+
35
+ async function handleClick() {
36
+ if (disabled || loading) return;
37
+
38
+ loading = true;
39
+ dispatch('loading', 'authenticating');
40
+
41
+ try {
42
+ let result;
43
+
44
+ if (method === 'passkey') {
45
+ result = await auth.passkey.login();
46
+ } else if (method === 'social' && provider) {
47
+ result = await auth.social.loginWithPopup(provider);
48
+ } else {
49
+ throw new Error('Invalid method or missing provider');
50
+ }
51
+
52
+ if (result.data) {
53
+ dispatch('success', {
54
+ session: result.data.session,
55
+ user: result.data.user,
56
+ });
57
+ } else if (result.error) {
58
+ dispatch('error', {
59
+ code: result.error.code,
60
+ message: result.error.message,
61
+ });
62
+ }
63
+ } catch (error) {
64
+ dispatch('error', {
65
+ code: 'UNKNOWN_ERROR',
66
+ message: error instanceof Error ? error.message : 'Unknown error',
67
+ });
68
+ } finally {
69
+ loading = false;
70
+ dispatch('loading', 'idle');
71
+ }
72
+ }
73
+ </script>
74
+
75
+ <button
76
+ type="button"
77
+ on:click={handleClick}
78
+ disabled={disabled || loading}
79
+ class={className}
80
+ {...$$restProps}
81
+ >
82
+ <slot>
83
+ {#if loading}
84
+ Signing in...
85
+ {:else if method === 'passkey'}
86
+ Sign in with Passkey
87
+ {:else if method === 'social' && provider}
88
+ Sign in with {provider.charAt(0).toUpperCase() + provider.slice(1)}
89
+ {:else}
90
+ Sign In
91
+ {/if}
92
+ </slot>
93
+ </button>
@@ -0,0 +1,43 @@
1
+ import type { SocialProvider, Session, User, AuthLoadingState } from '../types.js';
2
+ import type { AuthError } from '../stores/auth.js';
3
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
4
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
5
+ $$bindings?: Bindings;
6
+ } & Exports;
7
+ (internal: unknown, props: Props & {
8
+ $$events?: Events;
9
+ $$slots?: Slots;
10
+ }): Exports & {
11
+ $set?: any;
12
+ $on?: any;
13
+ };
14
+ z_$$bindings?: Bindings;
15
+ }
16
+ type $$__sveltets_2_PropsWithChildren<Props, Slots> = Props & (Slots extends {
17
+ default: any;
18
+ } ? Props extends Record<string, never> ? any : {
19
+ children?: any;
20
+ } : {});
21
+ declare const SignInButton: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsWithChildren<{
22
+ [x: string]: any;
23
+ method?: "passkey" | "social" | undefined;
24
+ provider?: SocialProvider | undefined;
25
+ disabled?: boolean | undefined;
26
+ class?: string | undefined;
27
+ }, {
28
+ default: {};
29
+ }>, {
30
+ success: CustomEvent<{
31
+ session: Session;
32
+ user: User;
33
+ }>;
34
+ error: CustomEvent<AuthError>;
35
+ loading: CustomEvent<AuthLoadingState>;
36
+ } & {
37
+ [evt: string]: CustomEvent<any>;
38
+ }, {
39
+ default: {};
40
+ }, {}, string>;
41
+ type SignInButton = InstanceType<typeof SignInButton>;
42
+ export default SignInButton;
43
+ //# sourceMappingURL=SignInButton.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignInButton.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/components/SignInButton.svelte.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAwFnD,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAC9G,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AACD,KAAK,gCAAgC,CAAC,KAAK,EAAE,KAAK,IAAI,KAAK,GACvD,CAAC,KAAK,SAAS;IAAE,OAAO,EAAE,GAAG,CAAA;CAAE,GACzB,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GACnC,GAAG,GACH;IAAE,QAAQ,CAAC,EAAE,GAAG,CAAA;CAAE,GAClB,EAAE,CAAC,CAAC;AAId,QAAA,MAAM,YAAY;;aAtBmB,SAAS,GAAG,QAAQ;;eAEzB,OAAO;YACZ,MAAM;;;;;iBACT,OAAO;cAAQ,IAAI;;;;;;;;cAkBmF,CAAC;AAC7G,KAAK,YAAY,GAAG,YAAY,CAAC,OAAO,YAAY,CAAC,CAAC;AACxD,eAAe,YAAY,CAAC"}
@@ -0,0 +1,72 @@
1
+ <!--
2
+ SignOutButton Component
3
+
4
+ A thin wrapper that delegates all behavior to props/events.
5
+ -->
6
+ <script lang="ts">
7
+ import { createEventDispatcher } from 'svelte';
8
+ import { getAuthContext } from '../utils/context.js';
9
+ import type { AuthLoadingState } from '../types.js';
10
+ import type { AuthError } from '../stores/auth.js';
11
+
12
+ /** Redirect URI after sign out */
13
+ export let redirectUri: string | undefined = undefined;
14
+
15
+ /** Revoke tokens on sign out */
16
+ export let revokeTokens: boolean = false;
17
+
18
+ /** Disabled state */
19
+ export let disabled: boolean = false;
20
+
21
+ /** Custom class */
22
+ let className: string = '';
23
+ export { className as class };
24
+
25
+ const auth = getAuthContext();
26
+ const dispatch = createEventDispatcher<{
27
+ success: void;
28
+ error: AuthError;
29
+ loading: AuthLoadingState;
30
+ }>();
31
+
32
+ let loading = false;
33
+
34
+ async function handleClick() {
35
+ if (disabled || loading) return;
36
+
37
+ loading = true;
38
+ dispatch('loading', 'signing_out');
39
+
40
+ try {
41
+ await auth.signOut({
42
+ redirectUri,
43
+ revokeTokens,
44
+ });
45
+ dispatch('success');
46
+ } catch (error) {
47
+ dispatch('error', {
48
+ code: 'SIGN_OUT_ERROR',
49
+ message: error instanceof Error ? error.message : 'Sign out failed',
50
+ });
51
+ } finally {
52
+ loading = false;
53
+ dispatch('loading', 'idle');
54
+ }
55
+ }
56
+ </script>
57
+
58
+ <button
59
+ type="button"
60
+ on:click={handleClick}
61
+ disabled={disabled || loading}
62
+ class={className}
63
+ {...$$restProps}
64
+ >
65
+ <slot>
66
+ {#if loading}
67
+ Signing out...
68
+ {:else}
69
+ Sign Out
70
+ {/if}
71
+ </slot>
72
+ </button>
@@ -0,0 +1,40 @@
1
+ import type { AuthLoadingState } from '../types.js';
2
+ import type { AuthError } from '../stores/auth.js';
3
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
4
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
5
+ $$bindings?: Bindings;
6
+ } & Exports;
7
+ (internal: unknown, props: Props & {
8
+ $$events?: Events;
9
+ $$slots?: Slots;
10
+ }): Exports & {
11
+ $set?: any;
12
+ $on?: any;
13
+ };
14
+ z_$$bindings?: Bindings;
15
+ }
16
+ type $$__sveltets_2_PropsWithChildren<Props, Slots> = Props & (Slots extends {
17
+ default: any;
18
+ } ? Props extends Record<string, never> ? any : {
19
+ children?: any;
20
+ } : {});
21
+ declare const SignOutButton: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsWithChildren<{
22
+ [x: string]: any;
23
+ redirectUri?: string | undefined | undefined;
24
+ revokeTokens?: boolean | undefined;
25
+ disabled?: boolean | undefined;
26
+ class?: string | undefined;
27
+ }, {
28
+ default: {};
29
+ }>, {
30
+ success: CustomEvent<void>;
31
+ error: CustomEvent<AuthError>;
32
+ loading: CustomEvent<AuthLoadingState>;
33
+ } & {
34
+ [evt: string]: CustomEvent<any>;
35
+ }, {
36
+ default: {};
37
+ }, {}, string>;
38
+ type SignOutButton = InstanceType<typeof SignOutButton>;
39
+ export default SignOutButton;
40
+ //# sourceMappingURL=SignOutButton.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignOutButton.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/components/SignOutButton.svelte.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAuEnD,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAC9G,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AACD,KAAK,gCAAgC,CAAC,KAAK,EAAE,KAAK,IAAI,KAAK,GACvD,CAAC,KAAK,SAAS;IAAE,OAAO,EAAE,GAAG,CAAA;CAAE,GACzB,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GACnC,GAAG,GACH;IAAE,QAAQ,CAAC,EAAE,GAAG,CAAA;CAAE,GAClB,EAAE,CAAC,CAAC;AAId,QAAA,MAAM,aAAa;;kBAtB6B,MAAM,GAAG,SAAS;mBACnB,OAAO;eACtB,OAAO;YACZ,MAAM;;;;;;;;;;;cAmB8F,CAAC;AAC9G,KAAK,aAAa,GAAG,YAAY,CAAC,OAAO,aAAa,CAAC,CAAC;AAC1D,eAAe,aAAa,CAAC"}
@@ -0,0 +1,71 @@
1
+ <!--
2
+ UserProfile Component
3
+
4
+ Displays user information from the auth stores.
5
+ -->
6
+ <script lang="ts">
7
+ import { getAuthContext } from '../utils/context.js';
8
+
9
+ /** Show avatar */
10
+ export let showAvatar: boolean = true;
11
+
12
+ /** Show email */
13
+ export let showEmail: boolean = true;
14
+
15
+ /** Custom class */
16
+ let className: string = '';
17
+ export { className as class };
18
+
19
+ const auth = getAuthContext();
20
+ const { user, isAuthenticated } = auth.stores;
21
+ </script>
22
+
23
+ {#if $isAuthenticated && $user}
24
+ <div class={className} {...$$restProps}>
25
+ <slot name="avatar" user={$user}>
26
+ {#if showAvatar && $user.picture}
27
+ <img src={$user.picture} alt={$user.name || 'User avatar'} class="authrim-avatar" />
28
+ {/if}
29
+ </slot>
30
+
31
+ <slot name="info" user={$user}>
32
+ <div class="authrim-user-info">
33
+ {#if $user.name}
34
+ <span class="authrim-user-name">{$user.name}</span>
35
+ {/if}
36
+ {#if showEmail && $user.email}
37
+ <span class="authrim-user-email">{$user.email}</span>
38
+ {/if}
39
+ </div>
40
+ </slot>
41
+
42
+ <slot user={$user} />
43
+ </div>
44
+ {:else}
45
+ <slot name="unauthenticated">
46
+ <!-- Empty by default -->
47
+ </slot>
48
+ {/if}
49
+
50
+ <style>
51
+ .authrim-avatar {
52
+ width: 40px;
53
+ height: 40px;
54
+ border-radius: 50%;
55
+ object-fit: cover;
56
+ }
57
+
58
+ .authrim-user-info {
59
+ display: flex;
60
+ flex-direction: column;
61
+ }
62
+
63
+ .authrim-user-name {
64
+ font-weight: 500;
65
+ }
66
+
67
+ .authrim-user-email {
68
+ font-size: 0.875em;
69
+ opacity: 0.7;
70
+ }
71
+ </style>
@@ -0,0 +1,51 @@
1
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
+ $$bindings?: Bindings;
4
+ } & Exports;
5
+ (internal: unknown, props: Props & {
6
+ $$events?: Events;
7
+ $$slots?: Slots;
8
+ }): Exports & {
9
+ $set?: any;
10
+ $on?: any;
11
+ };
12
+ z_$$bindings?: Bindings;
13
+ }
14
+ type $$__sveltets_2_PropsWithChildren<Props, Slots> = Props & (Slots extends {
15
+ default: any;
16
+ } ? Props extends Record<string, never> ? any : {
17
+ children?: any;
18
+ } : {});
19
+ declare const UserProfile: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsWithChildren<{
20
+ [x: string]: any;
21
+ showAvatar?: boolean | undefined;
22
+ showEmail?: boolean | undefined;
23
+ class?: string | undefined;
24
+ }, {
25
+ avatar: {
26
+ user: import("@authrim/core").User | null;
27
+ };
28
+ info: {
29
+ user: import("@authrim/core").User | null;
30
+ };
31
+ default: {
32
+ user: import("@authrim/core").User | null;
33
+ };
34
+ unauthenticated: {};
35
+ }>, {
36
+ [evt: string]: CustomEvent<any>;
37
+ }, {
38
+ avatar: {
39
+ user: import("@authrim/core").User | null;
40
+ };
41
+ info: {
42
+ user: import("@authrim/core").User | null;
43
+ };
44
+ default: {
45
+ user: import("@authrim/core").User | null;
46
+ };
47
+ unauthenticated: {};
48
+ }, {}, string>;
49
+ type UserProfile = InstanceType<typeof UserProfile>;
50
+ export default UserProfile;
51
+ //# sourceMappingURL=UserProfile.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserProfile.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/components/UserProfile.svelte.ts"],"names":[],"mappings":"AAyDA,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAC9G,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AACD,KAAK,gCAAgC,CAAC,KAAK,EAAE,KAAK,IAAI,KAAK,GACvD,CAAC,KAAK,SAAS;IAAE,OAAO,EAAE,GAAG,CAAA;CAAE,GACzB,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GACnC,GAAG,GACH;IAAE,QAAQ,CAAC,EAAE,GAAG,CAAA;CAAE,GAClB,EAAE,CAAC,CAAC;AAId,QAAA,MAAM,WAAW;;iBAjBc,OAAO;gBACT,OAAO;YACT,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;cAe4F,CAAC;AAC5G,KAAK,WAAW,GAAG,YAAY,CAAC,OAAO,WAAW,CAAC,CAAC;AACtD,eAAe,WAAW,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { default as AuthProvider } from './AuthProvider.svelte';
2
+ export { default as SignInButton } from './SignInButton.svelte';
3
+ export { default as SignOutButton } from './SignOutButton.svelte';
4
+ export { default as UserProfile } from './UserProfile.svelte';
5
+ export { default as ProtectedRoute } from './ProtectedRoute.svelte';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { default as AuthProvider } from './AuthProvider.svelte';
2
+ export { default as SignInButton } from './SignInButton.svelte';
3
+ export { default as SignOutButton } from './SignOutButton.svelte';
4
+ export { default as UserProfile } from './UserProfile.svelte';
5
+ export { default as ProtectedRoute } from './ProtectedRoute.svelte';
@@ -0,0 +1,47 @@
1
+ /**
2
+ * CIBA (Client Initiated Backchannel Authentication) API Implementation
3
+ *
4
+ * Provides methods for fetching pending CIBA requests and approving/rejecting them.
5
+ * This is a thin API wrapper — no business logic, just HTTP calls.
6
+ */
7
+ import type { HttpClient } from "@authrim/core";
8
+ export interface CIBAPendingRequest {
9
+ auth_req_id: string;
10
+ client_id: string;
11
+ client_name: string;
12
+ client_logo_uri: string | null;
13
+ scope: string;
14
+ binding_message?: string;
15
+ user_code?: string;
16
+ created_at: number;
17
+ expires_at: number;
18
+ }
19
+ export interface CIBAPendingResponse {
20
+ requests: CIBAPendingRequest[];
21
+ }
22
+ export interface CIBAActionResult {
23
+ success: boolean;
24
+ message?: string;
25
+ }
26
+ export interface CIBAApiConfig {
27
+ issuer: string;
28
+ http: HttpClient;
29
+ }
30
+ export declare class CIBAApiImpl {
31
+ private readonly issuer;
32
+ private readonly http;
33
+ constructor(config: CIBAApiConfig);
34
+ /**
35
+ * Fetch pending CIBA authentication requests
36
+ */
37
+ getData(loginHint: string): Promise<CIBAPendingRequest[]>;
38
+ /**
39
+ * Approve a CIBA authentication request
40
+ */
41
+ approve(authReqId: string, userId: string, sub: string): Promise<CIBAActionResult>;
42
+ /**
43
+ * Reject a CIBA authentication request
44
+ */
45
+ reject(authReqId: string, reason?: string): Promise<CIBAActionResult>;
46
+ }
47
+ //# sourceMappingURL=ciba.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ciba.d.ts","sourceRoot":"","sources":["../../src/lib/direct-auth/ciba.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,eAAe,CAAC;AAW7D,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,kBAAkB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,UAAU,CAAC;CAClB;AAMD,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;gBAEtB,MAAM,EAAE,aAAa;IAKjC;;OAEG;IACG,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAkB/D;;OAEG;IACG,OAAO,CACX,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,gBAAgB,CAAC;IAuB5B;;OAEG;IACG,MAAM,CACV,SAAS,EAAE,MAAM,EACjB,MAAM,SAAkB,GACvB,OAAO,CAAC,gBAAgB,CAAC;CAqB7B"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * CIBA (Client Initiated Backchannel Authentication) API Implementation
3
+ *
4
+ * Provides methods for fetching pending CIBA requests and approving/rejecting them.
5
+ * This is a thin API wrapper — no business logic, just HTTP calls.
6
+ */
7
+ // =============================================================================
8
+ // Implementation
9
+ // =============================================================================
10
+ export class CIBAApiImpl {
11
+ issuer;
12
+ http;
13
+ constructor(config) {
14
+ this.issuer = config.issuer;
15
+ this.http = config.http;
16
+ }
17
+ /**
18
+ * Fetch pending CIBA authentication requests
19
+ */
20
+ async getData(loginHint) {
21
+ const url = `${this.issuer}/api/ciba/pending?login_hint=${encodeURIComponent(loginHint)}`;
22
+ const response = await this.http.fetch(url, {
23
+ method: "GET",
24
+ headers: { Accept: "application/json" },
25
+ credentials: "include",
26
+ });
27
+ if (!response.ok || !response.data) {
28
+ const errorMsg = response.data
29
+ ?.error_description || "Failed to load pending requests";
30
+ throw new Error(errorMsg);
31
+ }
32
+ return response.data.requests || [];
33
+ }
34
+ /**
35
+ * Approve a CIBA authentication request
36
+ */
37
+ async approve(authReqId, userId, sub) {
38
+ const url = `${this.issuer}/api/ciba/approve`;
39
+ const response = await this.http.fetch(url, {
40
+ method: "POST",
41
+ headers: { "Content-Type": "application/json" },
42
+ credentials: "include",
43
+ body: JSON.stringify({
44
+ auth_req_id: authReqId,
45
+ user_id: userId,
46
+ sub,
47
+ }),
48
+ });
49
+ if (!response.ok) {
50
+ const errorMsg = response.data
51
+ ?.error_description || "Failed to approve request";
52
+ throw new Error(errorMsg);
53
+ }
54
+ return response.data;
55
+ }
56
+ /**
57
+ * Reject a CIBA authentication request
58
+ */
59
+ async reject(authReqId, reason = "User rejected") {
60
+ const url = `${this.issuer}/api/ciba/deny`;
61
+ const response = await this.http.fetch(url, {
62
+ method: "POST",
63
+ headers: { "Content-Type": "application/json" },
64
+ credentials: "include",
65
+ body: JSON.stringify({
66
+ auth_req_id: authReqId,
67
+ reason,
68
+ }),
69
+ });
70
+ if (!response.ok) {
71
+ const errorMsg = response.data
72
+ ?.error_description || "Failed to deny request";
73
+ throw new Error(errorMsg);
74
+ }
75
+ return response.data;
76
+ }
77
+ }
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Consent API Implementation
3
+ *
4
+ * Provides methods for fetching consent screen data and submitting consent decisions.
5
+ * This is a thin API wrapper — no business logic, just HTTP calls.
6
+ */
7
+ import type { HttpClient } from "@authrim/core";
8
+ export interface ConsentScopeInfo {
9
+ name: string;
10
+ title: string;
11
+ description: string;
12
+ required: boolean;
13
+ }
14
+ export interface ConsentClientInfo {
15
+ client_id: string;
16
+ client_name: string;
17
+ logo_uri?: string;
18
+ client_uri?: string;
19
+ policy_uri?: string;
20
+ tos_uri?: string;
21
+ is_trusted?: boolean;
22
+ }
23
+ export interface ConsentUserInfo {
24
+ id: string;
25
+ email: string;
26
+ name?: string;
27
+ picture?: string;
28
+ }
29
+ export interface ConsentOrgInfo {
30
+ id: string;
31
+ name: string;
32
+ type: string;
33
+ is_primary: boolean;
34
+ plan?: string;
35
+ }
36
+ export interface ConsentActingAsInfo {
37
+ id: string;
38
+ name?: string;
39
+ email: string;
40
+ relationship_type: string;
41
+ permission_level: string;
42
+ }
43
+ export interface ConsentFeatureFlags {
44
+ org_selector_enabled: boolean;
45
+ acting_as_enabled: boolean;
46
+ show_roles: boolean;
47
+ }
48
+ export interface ConsentScreenData {
49
+ challenge_id: string;
50
+ client: ConsentClientInfo;
51
+ scopes: ConsentScopeInfo[];
52
+ user: ConsentUserInfo;
53
+ organizations: ConsentOrgInfo[];
54
+ primary_org: ConsentOrgInfo | null;
55
+ roles: string[];
56
+ acting_as: ConsentActingAsInfo | null;
57
+ target_org_id: string | null;
58
+ features: ConsentFeatureFlags;
59
+ }
60
+ export interface ConsentSubmitOptions {
61
+ approve: boolean;
62
+ selectedOrgId?: string | null;
63
+ actingAsUserId?: string;
64
+ }
65
+ export interface ConsentSubmitResult {
66
+ redirect_url: string;
67
+ }
68
+ export interface ConsentApiConfig {
69
+ issuer: string;
70
+ http: HttpClient;
71
+ }
72
+ export declare class ConsentApiImpl {
73
+ private readonly issuer;
74
+ private readonly http;
75
+ constructor(config: ConsentApiConfig);
76
+ /**
77
+ * Fetch consent screen data
78
+ */
79
+ getData(challengeId: string): Promise<ConsentScreenData>;
80
+ /**
81
+ * Submit consent decision (approve or deny)
82
+ */
83
+ submit(challengeId: string, options: ConsentSubmitOptions): Promise<ConsentSubmitResult>;
84
+ }
85
+ //# sourceMappingURL=consent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consent.d.ts","sourceRoot":"","sources":["../../src/lib/direct-auth/consent.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,eAAe,CAAC;AAW7D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,oBAAoB,EAAE,OAAO,CAAC;IAC9B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,IAAI,EAAE,eAAe,CAAC;IACtB,aAAa,EAAE,cAAc,EAAE,CAAC;IAChC,WAAW,EAAE,cAAc,GAAG,IAAI,CAAC;IACnC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACtC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,mBAAmB,CAAC;CAC/B;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAC;CACtB;AAMD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,UAAU,CAAC;CAClB;AAMD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;gBAEtB,MAAM,EAAE,gBAAgB;IAKpC;;OAEG;IACG,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAkB9D;;OAEG;IACG,MAAM,CACV,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC;CAuBhC"}