@strivacity/sdk-svelte 3.0.2 → 4.0.0-beta.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 (107) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +1714 -428
  3. package/dist/assets/rolldown-runtime.cjs +1 -0
  4. package/dist/client/components.svelte.cjs +2 -0
  5. package/dist/client/components.svelte.cjs.map +1 -0
  6. package/dist/client/components.svelte.d.ts +11 -0
  7. package/dist/client/components.svelte.mjs +2 -0
  8. package/dist/client/components.svelte.mjs.map +1 -0
  9. package/dist/client/hooks.svelte.cjs +2 -0
  10. package/dist/client/hooks.svelte.cjs.map +1 -0
  11. package/dist/client/hooks.svelte.d.ts +27 -0
  12. package/dist/client/hooks.svelte.mjs +2 -0
  13. package/dist/client/hooks.svelte.mjs.map +1 -0
  14. package/dist/client/index.cjs +1 -0
  15. package/dist/client/index.d.ts +8 -0
  16. package/dist/client/index.mjs +1 -0
  17. package/dist/client/storages.cjs +1 -0
  18. package/dist/client/storages.d.ts +1 -0
  19. package/dist/client/storages.mjs +1 -0
  20. package/dist/client/types.cjs +1 -0
  21. package/dist/client/types.d.ts +238 -0
  22. package/dist/client/types.mjs +1 -0
  23. package/dist/client/utils.cjs +1 -0
  24. package/dist/client/utils.d.ts +1 -0
  25. package/dist/client/utils.mjs +1 -0
  26. package/dist/errors.cjs +1 -0
  27. package/dist/errors.d.ts +1 -0
  28. package/dist/errors.mjs +1 -0
  29. package/dist/server/index.cjs +1 -0
  30. package/dist/server/index.d.ts +6 -0
  31. package/dist/server/index.mjs +1 -0
  32. package/dist/server/sdk.cjs +2 -0
  33. package/dist/server/sdk.cjs.map +1 -0
  34. package/dist/server/sdk.d.ts +8 -0
  35. package/dist/server/sdk.mjs +2 -0
  36. package/dist/server/sdk.mjs.map +1 -0
  37. package/dist/server/storages.cjs +2 -0
  38. package/dist/server/storages.cjs.map +1 -0
  39. package/dist/server/storages.d.ts +10 -0
  40. package/dist/server/storages.mjs +2 -0
  41. package/dist/server/storages.mjs.map +1 -0
  42. package/dist/server/types.cjs +1 -0
  43. package/dist/server/types.d.ts +35 -0
  44. package/dist/server/types.mjs +1 -0
  45. package/dist/server/utils.cjs +1 -0
  46. package/dist/server/utils.d.ts +1 -0
  47. package/dist/server/utils.mjs +1 -0
  48. package/dist/types.cjs +1 -2
  49. package/dist/types.d.ts +2 -181
  50. package/dist/types.mjs +1 -2
  51. package/eslint.config.mjs +3 -0
  52. package/package.json +59 -11
  53. package/project.json +47 -0
  54. package/src/client/components.svelte.ts +125 -0
  55. package/src/client/hooks.svelte.ts +221 -0
  56. package/src/client/index.ts +8 -0
  57. package/src/client/storages.ts +1 -0
  58. package/src/client/types.ts +299 -0
  59. package/src/client/utils.ts +1 -0
  60. package/src/errors.ts +1 -0
  61. package/src/server/index.ts +6 -0
  62. package/src/server/sdk.ts +77 -0
  63. package/src/server/storages.ts +22 -0
  64. package/src/server/types.ts +49 -0
  65. package/src/server/utils.ts +1 -0
  66. package/src/types.ts +2 -0
  67. package/svelte.config.js +5 -0
  68. package/testing/fixtures/AuthProviderHost.svelte +29 -0
  69. package/testing/fixtures/Harness.svelte +30 -0
  70. package/testing/fixtures/NativeLoginConsumer.svelte +21 -0
  71. package/testing/fixtures/NativeLoginContextConsumer.svelte +10 -0
  72. package/testing/fixtures/StrivacityConsumer.svelte +10 -0
  73. package/testing/tests/components.spec.ts +183 -0
  74. package/testing/tests/errors.spec.ts +10 -0
  75. package/testing/tests/hooks.spec.ts +275 -0
  76. package/testing/tests/index.spec.ts +199 -0
  77. package/testing/tests/server/sdk.spec.ts +214 -0
  78. package/testing/tests/server/storages.spec.ts +50 -0
  79. package/testing/tests/server/utils.spec.ts +10 -0
  80. package/testing/tests/storages.spec.ts +10 -0
  81. package/testing/tests/utils.spec.ts +10 -0
  82. package/testing/utils/mount.ts +83 -0
  83. package/tsconfig.app.json +4 -0
  84. package/tsconfig.json +6 -0
  85. package/vite.config.mts +52 -0
  86. package/dist/AuthProvider.cjs +0 -2
  87. package/dist/AuthProvider.cjs.map +0 -1
  88. package/dist/AuthProvider.mjs +0 -2
  89. package/dist/AuthProvider.mjs.map +0 -1
  90. package/dist/AuthProvider.svelte.d.ts +0 -1
  91. package/dist/LoginRenderer.cjs +0 -2
  92. package/dist/LoginRenderer.cjs.map +0 -1
  93. package/dist/LoginRenderer.mjs +0 -2
  94. package/dist/LoginRenderer.mjs.map +0 -1
  95. package/dist/LoginRenderer.svelte.d.ts +0 -1
  96. package/dist/composables.cjs +0 -2
  97. package/dist/composables.cjs.map +0 -1
  98. package/dist/composables.d.ts +0 -12
  99. package/dist/composables.mjs +0 -2
  100. package/dist/composables.mjs.map +0 -1
  101. package/dist/index.cjs +0 -2
  102. package/dist/index.cjs.map +0 -1
  103. package/dist/index.d.ts +0 -13
  104. package/dist/index.mjs +0 -2
  105. package/dist/index.mjs.map +0 -1
  106. package/dist/types.cjs.map +0 -1
  107. package/dist/types.mjs.map +0 -1
@@ -0,0 +1,214 @@
1
+ import type { RequestEvent } from '@sveltejs/kit';
2
+ import type { BaseServerSDK } from '@strivacity/sdk-core/types';
3
+ import type { SvelteKitServerSDK, SvelteKitServerSDKInitConfig } from '../../../src/server/types';
4
+ import { describe, test, expect, vi, beforeEach } from 'vitest';
5
+ import { isRedirect } from '@sveltejs/kit';
6
+ import { createBaseServerSDK } from '@strivacity/sdk-core/server';
7
+ import { createMockBaseServerSDK } from '@strivacity/testing/mocks/sdk';
8
+ import { createServerSDK } from '../../../src/server/sdk';
9
+
10
+ vi.mock('@strivacity/sdk-core/server', async (importOriginal) => ({
11
+ ...(await importOriginal<typeof import('@strivacity/sdk-core/server')>()),
12
+ createBaseServerSDK: vi.fn(),
13
+ }));
14
+
15
+ const validInitConfig: SvelteKitServerSDKInitConfig = {
16
+ issuer: 'https://brandtegrity.io',
17
+ clientId: 'client-id',
18
+ redirectUri: 'https://brandtegrity.io/callback',
19
+ secret: 'secret',
20
+ };
21
+
22
+ function installBase(overrides?: Record<string, unknown>) {
23
+ const base = createMockBaseServerSDK<BaseServerSDK<RequestEvent>>(overrides);
24
+ vi.mocked(createBaseServerSDK).mockReturnValue(base);
25
+
26
+ return base;
27
+ }
28
+
29
+ function createEvent(overrides: Partial<RequestEvent> = {}): RequestEvent {
30
+ return {
31
+ request: new Request('https://brandtegrity.io/profile'),
32
+ url: new URL('https://brandtegrity.io/profile'),
33
+ ...overrides,
34
+ } as RequestEvent;
35
+ }
36
+
37
+ beforeEach(() => {
38
+ vi.mocked(createBaseServerSDK).mockReset();
39
+ });
40
+
41
+ describe('createServerSDK', () => {
42
+ test('creates the base server sdk with a toRequest adapter reading event.request, and the given config', () => {
43
+ installBase();
44
+
45
+ createServerSDK(validInitConfig);
46
+
47
+ expect(createBaseServerSDK).toHaveBeenCalledTimes(1);
48
+ const [adapter, forwardedConfig] = vi.mocked(createBaseServerSDK).mock.calls[0];
49
+ expect(forwardedConfig).toBe(validInitConfig);
50
+
51
+ const event = createEvent();
52
+ expect(adapter.toRequest(event)).toBe(event.request);
53
+ });
54
+
55
+ test('exposes the underlying options', () => {
56
+ const base = installBase({ options: { mode: 'redirect', authUrlPrefix: '/auth' } });
57
+ const sdk = createServerSDK(validInitConfig);
58
+
59
+ expect(sdk.options).toBe(base.options);
60
+ });
61
+
62
+ describe('pass-through methods', () => {
63
+ const event = createEvent();
64
+
65
+ test.each([
66
+ ['getSession', [event]],
67
+ ['updateSession', [{ access_token: 'a' }, event]],
68
+ ['refreshSession', [event]],
69
+ ['revokeSession', [event]],
70
+ ['getEntrySession', ['https://brandtegrity.io/entry']],
71
+ ['completeLogin', [{ code: 'abc' }, event]],
72
+ ['logout', ['https://brandtegrity.io', event]],
73
+ ['handleLogin', [event]],
74
+ ['handleRegister', [event]],
75
+ ['handleCallback', [event]],
76
+ ['handleRefresh', [event]],
77
+ ['handleRevoke', [event]],
78
+ ['handleEntry', [event]],
79
+ ['handleLogout', [event]],
80
+ ['handleBackChannelLogout', [event]],
81
+ ['handler', [event]],
82
+ ] as const)('%s calls through to the base server sdk with the same arguments and return value', async (method, args) => {
83
+ const base = installBase();
84
+ const sdk = createServerSDK(validInitConfig);
85
+
86
+ const result = await (sdk[method as keyof SvelteKitServerSDK] as (...a: Array<unknown>) => unknown)(...args);
87
+ // indexed through a plain Record (rather than the method-shorthand-typed BaseServerSDK) so the mock
88
+ // function reference isn't flagged as an unbound method
89
+ const baseAsRecord = base as unknown as Record<string, ReturnType<typeof vi.fn>>;
90
+ const baseMock = baseAsRecord[method];
91
+
92
+ expect(baseMock).toHaveBeenCalledWith(...args);
93
+ expect(result).toEqual(await baseMock.mock.results[0].value);
94
+ });
95
+ });
96
+
97
+ describe('handle', () => {
98
+ test('returns the base handler response unchanged when it resolves one, without calling resolve', async () => {
99
+ const response = new Response(null, { status: 200 });
100
+ const base = installBase({ handler: vi.fn().mockResolvedValue(response) });
101
+ const sdk = createServerSDK(validInitConfig);
102
+ const event = createEvent();
103
+ const resolve = vi.fn();
104
+
105
+ const result = await sdk.handle({ event, resolve });
106
+
107
+ expect(base.handler).toHaveBeenCalledWith(event);
108
+ expect(result).toBe(response);
109
+ expect(resolve).not.toHaveBeenCalled();
110
+ });
111
+
112
+ test('falls back to resolve(event) when the base handler resolves null', async () => {
113
+ installBase({ handler: vi.fn().mockResolvedValue(null) });
114
+ const sdk = createServerSDK(validInitConfig);
115
+ const event = createEvent();
116
+ const resolveResult = new Response('ok');
117
+ const resolve = vi.fn().mockResolvedValue(resolveResult);
118
+
119
+ const result = await sdk.handle({ event, resolve });
120
+
121
+ expect(resolve).toHaveBeenCalledWith(event);
122
+ expect(result).toBe(resolveResult);
123
+ });
124
+ });
125
+
126
+ describe('requireSession', () => {
127
+ test('returns the session unchanged when it is still valid', async () => {
128
+ const session = { access_token: 'a', expires_at: Math.floor(Date.now() / 1000) + 3600 };
129
+ const base = installBase({ getSession: vi.fn().mockResolvedValue(session) });
130
+ const sdk = createServerSDK(validInitConfig);
131
+
132
+ await expect(sdk.requireSession(createEvent())).resolves.toBe(session);
133
+ expect(base.refreshSession).not.toHaveBeenCalled();
134
+ });
135
+
136
+ test('refreshes an expired session that still has a refresh token', async () => {
137
+ const expiredSession = { access_token: 'a', expires_at: 0, refresh_token: 'r' };
138
+ const refreshedSession = { access_token: 'b', expires_at: Math.floor(Date.now() / 1000) + 3600 };
139
+ const base = installBase({
140
+ getSession: vi.fn().mockResolvedValue(expiredSession),
141
+ refreshSession: vi.fn().mockResolvedValue(refreshedSession),
142
+ });
143
+ const sdk = createServerSDK(validInitConfig);
144
+ const event = createEvent();
145
+
146
+ await expect(sdk.requireSession(event)).resolves.toBe(refreshedSession);
147
+ expect(base.refreshSession).toHaveBeenCalledWith(event);
148
+ });
149
+
150
+ test('redirects when refreshing an expired session throws instead of propagating the refresh error', async () => {
151
+ const expiredSession = { access_token: 'a', expires_at: 0, refresh_token: 'r' };
152
+ installBase({
153
+ options: { mode: 'redirect', authUrlPrefix: '/auth' },
154
+ getSession: vi.fn().mockResolvedValue(expiredSession),
155
+ refreshSession: vi.fn().mockRejectedValue(new Error('refresh failed')),
156
+ });
157
+ const sdk = createServerSDK(validInitConfig);
158
+
159
+ const error = await sdk.requireSession(createEvent()).catch((error: unknown) => error);
160
+ expect(isRedirect(error)).toBe(true);
161
+ });
162
+
163
+ test('returns an expired session unrefreshed, without redirecting, when it has no refresh token', async () => {
164
+ // the guard only redirects when there is no session at all; an expired-but-unrefreshable session is
165
+ // still handed back as-is rather than forced through login again.
166
+ const expiredSession = { access_token: 'a', expires_at: 0 };
167
+ const base = installBase({ options: { mode: 'redirect', authUrlPrefix: '/auth' }, getSession: vi.fn().mockResolvedValue(expiredSession) });
168
+ const sdk = createServerSDK(validInitConfig);
169
+
170
+ await expect(sdk.requireSession(createEvent())).resolves.toBe(expiredSession);
171
+ expect(base.refreshSession).not.toHaveBeenCalled();
172
+ });
173
+
174
+ test('redirects to the authUrlPrefix login route with a returnTo defaulting to the current path, in non-embedded/native modes', async () => {
175
+ installBase({ options: { mode: 'redirect', authUrlPrefix: '/auth' }, getSession: vi.fn().mockResolvedValue(null) });
176
+ const sdk = createServerSDK(validInitConfig);
177
+ const event = createEvent({ url: new URL('https://brandtegrity.io/profile?tab=security') });
178
+
179
+ const error = (await sdk.requireSession(event).catch((error: unknown) => error)) as { status: number; location: string };
180
+
181
+ expect(isRedirect(error)).toBe(true);
182
+ expect(error.status).toBe(302);
183
+ expect(error.location).toBe('https://brandtegrity.io/auth/login?returnTo=%2Fprofile%3Ftab%3Dsecurity');
184
+ });
185
+
186
+ test('redirects to options.loginUri instead, in embedded/native modes', async () => {
187
+ installBase({ options: { mode: 'native', loginUri: '/native-login' }, getSession: vi.fn().mockResolvedValue(null) });
188
+ const sdk = createServerSDK(validInitConfig);
189
+ const event = createEvent({ url: new URL('https://brandtegrity.io/app') });
190
+
191
+ const error = (await sdk.requireSession(event).catch((error: unknown) => error)) as { location: string };
192
+
193
+ expect(error.location).toBe('https://brandtegrity.io/native-login?returnTo=%2Fapp');
194
+ });
195
+
196
+ test('uses a given returnTo option instead of the current path', async () => {
197
+ installBase({ options: { mode: 'redirect', authUrlPrefix: '/auth' }, getSession: vi.fn().mockResolvedValue(null) });
198
+ const sdk = createServerSDK(validInitConfig);
199
+
200
+ const error = (await sdk.requireSession(createEvent(), { returnTo: '/custom' }).catch((error: unknown) => error)) as { location: string };
201
+
202
+ expect(error.location).toBe('https://brandtegrity.io/auth/login?returnTo=%2Fcustom');
203
+ });
204
+
205
+ test('omits the returnTo query param entirely when it resolves to an empty string', async () => {
206
+ installBase({ options: { mode: 'redirect', authUrlPrefix: '/auth' }, getSession: vi.fn().mockResolvedValue(null) });
207
+ const sdk = createServerSDK(validInitConfig);
208
+
209
+ const error = (await sdk.requireSession(createEvent(), { returnTo: '' }).catch((error: unknown) => error)) as { location: string };
210
+
211
+ expect(error.location).toBe('https://brandtegrity.io/auth/login');
212
+ });
213
+ });
214
+ });
@@ -0,0 +1,50 @@
1
+ import type { RequestEvent } from '@sveltejs/kit';
2
+ import { describe, test, expect, vi, beforeEach } from 'vitest';
3
+ import { createSessionIdCookieStorage as createSessionIdCookieStorageBase } from '@strivacity/sdk-core/storages/server';
4
+ import * as coreStorages from '@strivacity/sdk-core/storages';
5
+ import * as serverStorages from '../../../src/server/storages';
6
+
7
+ vi.mock('@strivacity/sdk-core/storages/server', async (importOriginal) => ({
8
+ ...(await importOriginal<typeof import('@strivacity/sdk-core/storages/server')>()),
9
+ createSessionIdCookieStorage: vi.fn(),
10
+ }));
11
+
12
+ beforeEach(() => {
13
+ vi.mocked(createSessionIdCookieStorageBase).mockReset();
14
+ });
15
+
16
+ test('re-exports storages from the core sdk, alongside its own createSessionIdCookieStorage wrapper', () => {
17
+ const coreKeys = Object.keys(coreStorages);
18
+
19
+ expect(coreKeys.length).toBeGreaterThan(0);
20
+ expect(Object.keys(serverStorages).sort()).toEqual(coreKeys.sort());
21
+ });
22
+
23
+ describe('createSessionIdCookieStorage', () => {
24
+ test('forwards the given storage and options to the core implementation, and returns its result', () => {
25
+ const wrapped = { get: vi.fn(), set: vi.fn(), delete: vi.fn() };
26
+ vi.mocked(createSessionIdCookieStorageBase).mockReturnValue(wrapped);
27
+ const storage = { get: vi.fn(), set: vi.fn(), delete: vi.fn() };
28
+ const options = { defaultCookieOptions: { path: '/custom' } };
29
+
30
+ const result = serverStorages.createSessionIdCookieStorage(storage, options);
31
+
32
+ expect(result).toBe(wrapped);
33
+ expect(createSessionIdCookieStorageBase).toHaveBeenCalledTimes(1);
34
+ const [, forwardedStorage, forwardedOptions] = vi.mocked(createSessionIdCookieStorageBase).mock.calls[0];
35
+ expect(forwardedStorage).toBe(storage);
36
+ expect(forwardedOptions).toBe(options);
37
+ });
38
+
39
+ test('builds a toRequest adapter that reads the request straight off the SvelteKit event', () => {
40
+ vi.mocked(createSessionIdCookieStorageBase).mockReturnValue({} as never);
41
+
42
+ serverStorages.createSessionIdCookieStorage({ get: vi.fn(), set: vi.fn(), delete: vi.fn() });
43
+
44
+ const [adapter] = vi.mocked(createSessionIdCookieStorageBase).mock.calls[0];
45
+ const request = new Request('https://brandtegrity.io');
46
+ const event = { request } as RequestEvent;
47
+
48
+ expect(adapter.toRequest(event)).toBe(request);
49
+ });
50
+ });
@@ -0,0 +1,10 @@
1
+ import { test, expect } from 'vitest';
2
+ import * as serverUtils from '../../../src/server/utils';
3
+ import * as coreUtils from '@strivacity/sdk-core/utils';
4
+
5
+ test('re-exports utility from the core sdk', () => {
6
+ const coreKeys = Object.keys(coreUtils);
7
+
8
+ expect(coreKeys.length).toBeGreaterThan(0);
9
+ expect(Object.keys(serverUtils).sort()).toEqual(coreKeys.sort());
10
+ });
@@ -0,0 +1,10 @@
1
+ import { test, expect } from 'vitest';
2
+ import * as svelteStorages from '../../src/client/storages';
3
+ import * as coreStorages from '@strivacity/sdk-core/storages';
4
+
5
+ test('re-exports storages from the core sdk', () => {
6
+ const coreKeys = Object.keys(coreStorages);
7
+
8
+ expect(coreKeys.length).toBeGreaterThan(0);
9
+ expect(Object.keys(svelteStorages).sort()).toEqual(coreKeys.sort());
10
+ });
@@ -0,0 +1,10 @@
1
+ import { test, expect } from 'vitest';
2
+ import * as svelteUtils from '../../src/client/utils';
3
+ import * as coreUtils from '@strivacity/sdk-core/utils';
4
+
5
+ test('re-exports utility from the core sdk', () => {
6
+ const coreKeys = Object.keys(coreUtils);
7
+
8
+ expect(coreKeys.length).toBeGreaterThan(0);
9
+ expect(Object.keys(svelteUtils).sort()).toEqual(coreKeys.sort());
10
+ });
@@ -0,0 +1,83 @@
1
+ import type {
2
+ SDKContext,
3
+ LoginContext,
4
+ UseNativeLoginOptions,
5
+ RedirectFlow,
6
+ PopupFlow,
7
+ NativeFlow,
8
+ EmbeddedFlow,
9
+ StyAuthProviderProps,
10
+ SessionData,
11
+ } from '../../src/types';
12
+ import { mount as svelteMount, unmount as svelteUnmount, flushSync, tick } from 'svelte';
13
+ import { flushPromises } from '@strivacity/testing/mocks/common';
14
+ import Harness from '../fixtures/Harness.svelte';
15
+ import StrivacityConsumer from '../fixtures/StrivacityConsumer.svelte';
16
+ import NativeLoginConsumer from '../fixtures/NativeLoginConsumer.svelte';
17
+ import NativeLoginContextConsumer from '../fixtures/NativeLoginContextConsumer.svelte';
18
+ import AuthProviderHost from '../fixtures/AuthProviderHost.svelte';
19
+
20
+ type Flow = RedirectFlow | PopupFlow | NativeFlow | EmbeddedFlow;
21
+
22
+ // mount()/unmount() from 'svelte' are the only entry point runes-using code (onMount/onDestroy/setContext/getContext
23
+ // included) can be exercised through outside of a real component tree; every helper below wraps a small fixture
24
+ // component (tests/fixtures/*.svelte) through them instead of calling the hooks directly from a .spec.ts file.
25
+ async function settle() {
26
+ await flushPromises();
27
+ flushSync();
28
+ await tick();
29
+ }
30
+
31
+ export function mountStrivacityConsumerWithoutProvider() {
32
+ const target = document.createElement('div');
33
+ const instance = svelteMount(StrivacityConsumer, { target }) as { getContextValue: () => SDKContext<Flow> };
34
+
35
+ return { target, instance };
36
+ }
37
+
38
+ export async function mountStrivacityConsumer(context: SDKContext<Flow>) {
39
+ const target = document.createElement('div');
40
+ const harness = svelteMount(Harness, { target, props: { context, component: StrivacityConsumer } }) as {
41
+ getInstance: () => { getContextValue: () => SDKContext<Flow> };
42
+ };
43
+ await settle();
44
+
45
+ return { target, harness, instance: harness.getInstance() };
46
+ }
47
+
48
+ export function mountNativeLoginContextConsumerWithoutProvider() {
49
+ const target = document.createElement('div');
50
+ const instance = svelteMount(NativeLoginContextConsumer, { target }) as { getContextValue: () => LoginContext };
51
+
52
+ return { target, instance };
53
+ }
54
+
55
+ export async function mountWithNativeLogin(sdk: NativeFlow, options: UseNativeLoginOptions = {}) {
56
+ const target = document.createElement('div');
57
+ // unlike sdk-vue (which destructures `sdk` out of the context and calls sdk.init() directly), useNativeLogin here
58
+ // keeps the whole SDKContext and calls its own ctx.init() wrapper, so the mock context needs an init() of its own.
59
+ const context = { sdk, init: () => sdk.init() } as unknown as SDKContext<NativeFlow>;
60
+ const harness = svelteMount(Harness, { target, props: { context, component: NativeLoginConsumer, componentProps: { options } } }) as {
61
+ getInstance: () => { getLogin: () => LoginContext; getChildContext: () => LoginContext | undefined };
62
+ };
63
+ await settle();
64
+
65
+ const instance = harness.getInstance();
66
+
67
+ return { target, harness, login: instance.getLogin(), getChildContext: () => instance.getChildContext() };
68
+ }
69
+
70
+ export async function mountAuthProvider(options: StyAuthProviderProps['options'], initialSession: SessionData | null = null) {
71
+ const target = document.createElement('div');
72
+ const instance = svelteMount(AuthProviderHost, { target, props: { options, initialSession } }) as {
73
+ getContextValue: () => SDKContext<Flow>;
74
+ getChildContextValue: () => SDKContext<Flow> | undefined;
75
+ setSession: (value: SessionData | null | undefined) => void;
76
+ };
77
+ await settle();
78
+
79
+ return { target, instance };
80
+ }
81
+
82
+ export const unmount = svelteUnmount;
83
+ export { settle };
@@ -0,0 +1,4 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "include": ["./src/**/*.ts", "./src/**/*.svelte"]
4
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "extends": "../../tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "moduleResolution": "bundler"
5
+ }
6
+ }
@@ -0,0 +1,52 @@
1
+ import { resolve, relative, extname } from 'node:path';
2
+ import { globSync } from 'node:fs';
3
+ import { defineConfig } from 'vite';
4
+ import { getVitestConfig } from '@strivacity/testing/vitest/config';
5
+ import { svelte } from '@sveltejs/vite-plugin-svelte';
6
+ import dtsPlugin from 'unplugin-dts/vite';
7
+
8
+ export default defineConfig({
9
+ plugins: [
10
+ svelte({
11
+ compilerOptions: {
12
+ runes: true,
13
+ },
14
+ }),
15
+ dtsPlugin({
16
+ tsconfigPath: './tsconfig.app.json',
17
+ entryRoot: './src',
18
+ include: ['./src'],
19
+ }),
20
+ ],
21
+ resolve: process.env.VITEST ? { conditions: ['browser'] } : undefined,
22
+ build: {
23
+ reportCompressedSize: true,
24
+ emptyOutDir: true,
25
+ sourcemap: true,
26
+ rollupOptions: {
27
+ preserveEntrySignatures: 'allow-extension',
28
+ external: [/@strivacity/, /^svelte/, /^@sveltejs\/kit/],
29
+ input: Object.fromEntries(
30
+ globSync('./src/**/*.{ts,svelte}', { exclude: ['**/*.d.ts'] }).map((file) => [
31
+ relative('./src', file.slice(0, file.length - extname(file).length)),
32
+ resolve(file),
33
+ ]),
34
+ ),
35
+ output: [
36
+ {
37
+ format: 'esm',
38
+ entryFileNames: '[name].mjs',
39
+ chunkFileNames: 'assets/[name].mjs',
40
+ assetFileNames: 'assets/[name].[extname]',
41
+ },
42
+ {
43
+ format: 'commonjs',
44
+ entryFileNames: '[name].cjs',
45
+ chunkFileNames: 'assets/[name].cjs',
46
+ assetFileNames: 'assets/[name].[extname]',
47
+ },
48
+ ],
49
+ },
50
+ },
51
+ test: getVitestConfig('svelte'),
52
+ });
@@ -1,2 +0,0 @@
1
- "use strict";require("svelte/internal/disclose-version");const d=require("svelte/internal/client"),c=require("svelte"),k=require("@strivacity/sdk-core"),T=require("./composables.cjs");function b(o){const i=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(o){for(const e in o)if(e!=="default"){const s=Object.getOwnPropertyDescriptor(o,e);Object.defineProperty(i,e,s.get?s:{enumerable:!0,get:()=>o[e]})}}return i.default=o,Object.freeze(i)}const a=b(d);function f(o,i){a.push(i,!0);const e=k.initFlow(i.options);let s=a.proxy({loading:!0,isAuthenticated:!1,idTokenClaims:null,accessToken:null,refreshToken:null,accessTokenExpired:!0,accessTokenExpirationDate:null});const t=async()=>{s.isAuthenticated=await e.isAuthenticated,s.idTokenClaims=e.idTokenClaims||null,s.accessToken=e.accessToken||null,s.refreshToken=e.refreshToken||null,s.accessTokenExpired=e.accessTokenExpired,s.accessTokenExpirationDate=e.accessTokenExpirationDate||null,s.loading&&(s.loading=!1)},l=[e.subscribeToEvent("init",t),e.subscribeToEvent("loggedIn",t),e.subscribeToEvent("sessionLoaded",t),e.subscribeToEvent("tokenRefreshed",t),e.subscribeToEvent("tokenRefreshFailed",t),e.subscribeToEvent("logoutInitiated",t),e.subscribeToEvent("tokenRevoked",t),e.subscribeToEvent("tokenRevokeFailed",t)];c.setContext(T.STRIVACITY_SDK,{sdk:e,state:s,login:async n=>{if(e.options.mode==="native")return e.login(n);await e.login(n),await t()},register:async n=>{if(e.options.mode==="native")return e.register(n);await e.register(n),await t()},entry:async n=>await e.entry(n),refresh:async()=>{await e.refresh(),await t()},revoke:async()=>{await e.revoke(),await t()},logout:async n=>{await e.logout(n),await t()},handleCallback:async n=>{await e.handleCallback(n),await t()}}),c.onMount(()=>()=>{l.forEach(n=>n.dispose())});var r=a.comment(),u=a.first_child(r);a.snippet(u,()=>i.children??a.noop),a.append(o,r),a.pop()}module.exports=f;
2
- //# sourceMappingURL=AuthProvider.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AuthProvider.cjs","sources":["../src/AuthProvider.svelte"],"sourcesContent":["<script lang=\"ts\">\n\timport type { SDKOptions, IdTokenClaims } from '@strivacity/sdk-core';\n\timport type { PopupFlow } from '@strivacity/sdk-core/flows/PopupFlow';\n\timport type { RedirectFlow } from '@strivacity/sdk-core/flows/RedirectFlow';\n\timport type { NativeFlow } from '@strivacity/sdk-core/flows/NativeFlow';\n\timport { setContext, onMount } from 'svelte';\n\timport { initFlow } from '@strivacity/sdk-core';\n\timport { STRIVACITY_SDK } from './composables';\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tlet { options, children }: { options: SDKOptions; children?: any } = $props();\n\n\t// svelte-ignore state_referenced_locally\n\tconst sdk = initFlow(options);\n\tlet state = $state({\n\t\tloading: true,\n\t\tisAuthenticated: false,\n\t\tidTokenClaims: null as IdTokenClaims | null,\n\t\taccessToken: null as string | null,\n\t\trefreshToken: null as string | null,\n\t\taccessTokenExpired: true,\n\t\taccessTokenExpirationDate: null as number | null,\n\t});\n\n\tconst updateSession = async () => {\n\t\tstate.isAuthenticated = await sdk.isAuthenticated;\n\t\tstate.idTokenClaims = sdk.idTokenClaims || null;\n\t\tstate.accessToken = sdk.accessToken || null;\n\t\tstate.refreshToken = sdk.refreshToken || null;\n\t\tstate.accessTokenExpired = sdk.accessTokenExpired;\n\t\tstate.accessTokenExpirationDate = sdk.accessTokenExpirationDate || null;\n\n\t\tif (state.loading) {\n\t\t\tstate.loading = false;\n\t\t}\n\t};\n\tconst events = [\n\t\tsdk.subscribeToEvent('init', updateSession),\n\t\tsdk.subscribeToEvent('loggedIn', updateSession),\n\t\tsdk.subscribeToEvent('sessionLoaded', updateSession),\n\t\tsdk.subscribeToEvent('tokenRefreshed', updateSession),\n\t\tsdk.subscribeToEvent('tokenRefreshFailed', updateSession),\n\t\tsdk.subscribeToEvent('logoutInitiated', updateSession),\n\t\tsdk.subscribeToEvent('tokenRevoked', updateSession),\n\t\tsdk.subscribeToEvent('tokenRevokeFailed', updateSession),\n\t];\n\n\tsetContext(STRIVACITY_SDK, {\n\t\tsdk,\n\t\tstate,\n\n\t\tlogin: async (options?: Parameters<PopupFlow['login'] | RedirectFlow['login'] | NativeFlow['login']>[0]) => {\n\t\t\tif (sdk.options.mode === 'native') {\n\t\t\t\treturn sdk.login(options);\n\t\t\t}\n\n\t\t\tawait sdk.login(options);\n\t\t\tawait updateSession();\n\t\t},\n\t\tregister: async (options?: Parameters<PopupFlow['register'] | RedirectFlow['register'] | NativeFlow['register']>[0]) => {\n\t\t\tif (sdk.options.mode === 'native') {\n\t\t\t\treturn sdk.register(options);\n\t\t\t}\n\n\t\t\tawait sdk.register(options);\n\t\t\tawait updateSession();\n\t\t},\n\t\tentry: async (url?: string) => {\n\t\t\treturn await sdk.entry(url);\n\t\t},\n\t\trefresh: async () => {\n\t\t\tawait sdk.refresh();\n\t\t\tawait updateSession();\n\t\t},\n\t\trevoke: async () => {\n\t\t\tawait sdk.revoke();\n\t\t\tawait updateSession();\n\t\t},\n\t\tlogout: async (options?: Parameters<PopupFlow['logout'] | RedirectFlow['logout']>[0]) => {\n\t\t\tawait sdk.logout(options);\n\t\t\tawait updateSession();\n\t\t},\n\t\thandleCallback: async (url?: Parameters<PopupFlow['handleCallback'] | RedirectFlow['handleCallback'] | NativeFlow['handleCallback']>[0]) => {\n\t\t\tawait sdk.handleCallback(url);\n\t\t\tawait updateSession();\n\t\t},\n\t});\n\n\tonMount(() => {\n\t\treturn () => {\n\t\t\tevents.forEach((event) => event.dispose());\n\t\t};\n\t});\n</script>\n\n{@render children?.()}\n"],"names":["sdk","initFlow","$$props","state","$","updateSession","events","setContext","STRIVACITY_SDK","options","url","onMount","event"],"mappings":"ieAAA,cAaO,MAAAA,EAAMC,EAAAA,SAAQC,EAAA,OAAA,MAChBC,EAAKC,EAAA,MAAA,CACR,QAAS,GACT,gBAAiB,GACjB,cAAe,KACf,YAAa,KACb,aAAc,KACd,mBAAoB,GACpB,0BAA2B,OAGtB,MAAAC,EAAa,SAAe,CACjCF,EAAM,gBAAe,MAASH,EAAI,gBAClCG,EAAM,cAAgBH,EAAI,eAAiB,KAC3CG,EAAM,YAAcH,EAAI,aAAe,KACvCG,EAAM,aAAeH,EAAI,cAAgB,KACzCG,EAAM,mBAAqBH,EAAI,mBAC/BG,EAAM,0BAA4BH,EAAI,2BAA6B,KAE/DG,EAAM,UACTA,EAAM,QAAU,GAElB,EACMG,EAAM,CACXN,EAAI,iBAAiB,OAAQK,CAAa,EAC1CL,EAAI,iBAAiB,WAAYK,CAAa,EAC9CL,EAAI,iBAAiB,gBAAiBK,CAAa,EACnDL,EAAI,iBAAiB,iBAAkBK,CAAa,EACpDL,EAAI,iBAAiB,qBAAsBK,CAAa,EACxDL,EAAI,iBAAiB,kBAAmBK,CAAa,EACrDL,EAAI,iBAAiB,eAAgBK,CAAa,EAClDL,EAAI,iBAAiB,oBAAqBK,CAAa,GAGxDE,EAAAA,WAAWC,EAAAA,eAAc,CACxB,IAAAR,EACA,MAAAG,EAEA,MAAK,MAASM,GAA8F,CACvG,GAAAT,EAAI,QAAQ,OAAS,gBACjBA,EAAI,MAAMS,CAAO,QAGnBT,EAAI,MAAMS,CAAO,QACjBJ,EAAa,CACpB,EACA,SAAQ,MAASI,GAAuG,CACnH,GAAAT,EAAI,QAAQ,OAAS,gBACjBA,EAAI,SAASS,CAAO,QAGtBT,EAAI,SAASS,CAAO,QACpBJ,EAAa,CACpB,EACA,MAAK,MAASK,SACAV,EAAI,MAAMU,CAAG,EAE3B,QAAO,SAAc,CACd,MAAAV,EAAI,QAAO,QACXK,EAAa,CACpB,EACA,OAAM,SAAc,CACb,MAAAL,EAAI,OAAM,QACVK,EAAa,CACpB,EACA,OAAM,MAASI,GAA0E,OAClFT,EAAI,OAAOS,CAAO,QAClBJ,EAAa,CACpB,EACA,eAAc,MAASK,GAAqH,OACrIV,EAAI,eAAeU,CAAG,QACtBL,EAAa,CACpB,IAGDM,EAAAA,QAAO,IACO,IAAA,CACZL,EAAO,QAASM,GAAUA,EAAM,QAAO,CAAA,CACxC,CACA,gGACM"}
@@ -1,2 +0,0 @@
1
- import"svelte/internal/disclose-version";import*as i from"svelte/internal/client";import{setContext as u,onMount as d}from"svelte";import{initFlow as k}from"@strivacity/sdk-core";import{STRIVACITY_SDK as T}from"./composables.mjs";function h(r,o){i.push(o,!0);const e=k(o.options);let a=i.proxy({loading:!0,isAuthenticated:!1,idTokenClaims:null,accessToken:null,refreshToken:null,accessTokenExpired:!0,accessTokenExpirationDate:null});const n=async()=>{a.isAuthenticated=await e.isAuthenticated,a.idTokenClaims=e.idTokenClaims||null,a.accessToken=e.accessToken||null,a.refreshToken=e.refreshToken||null,a.accessTokenExpired=e.accessTokenExpired,a.accessTokenExpirationDate=e.accessTokenExpirationDate||null,a.loading&&(a.loading=!1)},c=[e.subscribeToEvent("init",n),e.subscribeToEvent("loggedIn",n),e.subscribeToEvent("sessionLoaded",n),e.subscribeToEvent("tokenRefreshed",n),e.subscribeToEvent("tokenRefreshFailed",n),e.subscribeToEvent("logoutInitiated",n),e.subscribeToEvent("tokenRevoked",n),e.subscribeToEvent("tokenRevokeFailed",n)];u(T,{sdk:e,state:a,login:async t=>{if(e.options.mode==="native")return e.login(t);await e.login(t),await n()},register:async t=>{if(e.options.mode==="native")return e.register(t);await e.register(t),await n()},entry:async t=>await e.entry(t),refresh:async()=>{await e.refresh(),await n()},revoke:async()=>{await e.revoke(),await n()},logout:async t=>{await e.logout(t),await n()},handleCallback:async t=>{await e.handleCallback(t),await n()}}),d(()=>()=>{c.forEach(t=>t.dispose())});var s=i.comment(),l=i.first_child(s);i.snippet(l,()=>o.children??i.noop),i.append(r,s),i.pop()}export{h as default};
2
- //# sourceMappingURL=AuthProvider.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AuthProvider.mjs","sources":["../src/AuthProvider.svelte"],"sourcesContent":["<script lang=\"ts\">\n\timport type { SDKOptions, IdTokenClaims } from '@strivacity/sdk-core';\n\timport type { PopupFlow } from '@strivacity/sdk-core/flows/PopupFlow';\n\timport type { RedirectFlow } from '@strivacity/sdk-core/flows/RedirectFlow';\n\timport type { NativeFlow } from '@strivacity/sdk-core/flows/NativeFlow';\n\timport { setContext, onMount } from 'svelte';\n\timport { initFlow } from '@strivacity/sdk-core';\n\timport { STRIVACITY_SDK } from './composables';\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tlet { options, children }: { options: SDKOptions; children?: any } = $props();\n\n\t// svelte-ignore state_referenced_locally\n\tconst sdk = initFlow(options);\n\tlet state = $state({\n\t\tloading: true,\n\t\tisAuthenticated: false,\n\t\tidTokenClaims: null as IdTokenClaims | null,\n\t\taccessToken: null as string | null,\n\t\trefreshToken: null as string | null,\n\t\taccessTokenExpired: true,\n\t\taccessTokenExpirationDate: null as number | null,\n\t});\n\n\tconst updateSession = async () => {\n\t\tstate.isAuthenticated = await sdk.isAuthenticated;\n\t\tstate.idTokenClaims = sdk.idTokenClaims || null;\n\t\tstate.accessToken = sdk.accessToken || null;\n\t\tstate.refreshToken = sdk.refreshToken || null;\n\t\tstate.accessTokenExpired = sdk.accessTokenExpired;\n\t\tstate.accessTokenExpirationDate = sdk.accessTokenExpirationDate || null;\n\n\t\tif (state.loading) {\n\t\t\tstate.loading = false;\n\t\t}\n\t};\n\tconst events = [\n\t\tsdk.subscribeToEvent('init', updateSession),\n\t\tsdk.subscribeToEvent('loggedIn', updateSession),\n\t\tsdk.subscribeToEvent('sessionLoaded', updateSession),\n\t\tsdk.subscribeToEvent('tokenRefreshed', updateSession),\n\t\tsdk.subscribeToEvent('tokenRefreshFailed', updateSession),\n\t\tsdk.subscribeToEvent('logoutInitiated', updateSession),\n\t\tsdk.subscribeToEvent('tokenRevoked', updateSession),\n\t\tsdk.subscribeToEvent('tokenRevokeFailed', updateSession),\n\t];\n\n\tsetContext(STRIVACITY_SDK, {\n\t\tsdk,\n\t\tstate,\n\n\t\tlogin: async (options?: Parameters<PopupFlow['login'] | RedirectFlow['login'] | NativeFlow['login']>[0]) => {\n\t\t\tif (sdk.options.mode === 'native') {\n\t\t\t\treturn sdk.login(options);\n\t\t\t}\n\n\t\t\tawait sdk.login(options);\n\t\t\tawait updateSession();\n\t\t},\n\t\tregister: async (options?: Parameters<PopupFlow['register'] | RedirectFlow['register'] | NativeFlow['register']>[0]) => {\n\t\t\tif (sdk.options.mode === 'native') {\n\t\t\t\treturn sdk.register(options);\n\t\t\t}\n\n\t\t\tawait sdk.register(options);\n\t\t\tawait updateSession();\n\t\t},\n\t\tentry: async (url?: string) => {\n\t\t\treturn await sdk.entry(url);\n\t\t},\n\t\trefresh: async () => {\n\t\t\tawait sdk.refresh();\n\t\t\tawait updateSession();\n\t\t},\n\t\trevoke: async () => {\n\t\t\tawait sdk.revoke();\n\t\t\tawait updateSession();\n\t\t},\n\t\tlogout: async (options?: Parameters<PopupFlow['logout'] | RedirectFlow['logout']>[0]) => {\n\t\t\tawait sdk.logout(options);\n\t\t\tawait updateSession();\n\t\t},\n\t\thandleCallback: async (url?: Parameters<PopupFlow['handleCallback'] | RedirectFlow['handleCallback'] | NativeFlow['handleCallback']>[0]) => {\n\t\t\tawait sdk.handleCallback(url);\n\t\t\tawait updateSession();\n\t\t},\n\t});\n\n\tonMount(() => {\n\t\treturn () => {\n\t\t\tevents.forEach((event) => event.dispose());\n\t\t};\n\t});\n</script>\n\n{@render children?.()}\n"],"names":["sdk","initFlow","$$props","state","$","updateSession","events","setContext","STRIVACITY_SDK","options","url","onMount","event"],"mappings":"qPAAA,cAaO,MAAAA,EAAMC,EAAQC,EAAA,OAAA,MAChBC,EAAKC,EAAA,MAAA,CACR,QAAS,GACT,gBAAiB,GACjB,cAAe,KACf,YAAa,KACb,aAAc,KACd,mBAAoB,GACpB,0BAA2B,OAGtB,MAAAC,EAAa,SAAe,CACjCF,EAAM,gBAAe,MAASH,EAAI,gBAClCG,EAAM,cAAgBH,EAAI,eAAiB,KAC3CG,EAAM,YAAcH,EAAI,aAAe,KACvCG,EAAM,aAAeH,EAAI,cAAgB,KACzCG,EAAM,mBAAqBH,EAAI,mBAC/BG,EAAM,0BAA4BH,EAAI,2BAA6B,KAE/DG,EAAM,UACTA,EAAM,QAAU,GAElB,EACMG,EAAM,CACXN,EAAI,iBAAiB,OAAQK,CAAa,EAC1CL,EAAI,iBAAiB,WAAYK,CAAa,EAC9CL,EAAI,iBAAiB,gBAAiBK,CAAa,EACnDL,EAAI,iBAAiB,iBAAkBK,CAAa,EACpDL,EAAI,iBAAiB,qBAAsBK,CAAa,EACxDL,EAAI,iBAAiB,kBAAmBK,CAAa,EACrDL,EAAI,iBAAiB,eAAgBK,CAAa,EAClDL,EAAI,iBAAiB,oBAAqBK,CAAa,GAGxDE,EAAWC,EAAc,CACxB,IAAAR,EACA,MAAAG,EAEA,MAAK,MAASM,GAA8F,CACvG,GAAAT,EAAI,QAAQ,OAAS,gBACjBA,EAAI,MAAMS,CAAO,QAGnBT,EAAI,MAAMS,CAAO,QACjBJ,EAAa,CACpB,EACA,SAAQ,MAASI,GAAuG,CACnH,GAAAT,EAAI,QAAQ,OAAS,gBACjBA,EAAI,SAASS,CAAO,QAGtBT,EAAI,SAASS,CAAO,QACpBJ,EAAa,CACpB,EACA,MAAK,MAASK,SACAV,EAAI,MAAMU,CAAG,EAE3B,QAAO,SAAc,CACd,MAAAV,EAAI,QAAO,QACXK,EAAa,CACpB,EACA,OAAM,SAAc,CACb,MAAAL,EAAI,OAAM,QACVK,EAAa,CACpB,EACA,OAAM,MAASI,GAA0E,OAClFT,EAAI,OAAOS,CAAO,QAClBJ,EAAa,CACpB,EACA,eAAc,MAASK,GAAqH,OACrIV,EAAI,eAAeU,CAAG,QACtBL,EAAa,CACpB,IAGDM,EAAO,IACO,IAAA,CACZL,EAAO,QAASM,GAAUA,EAAM,QAAO,CAAA,CACxC,CACA,gGACM"}
@@ -1 +0,0 @@
1
- export { SvelteComponent as default } from 'svelte';
@@ -1,2 +0,0 @@
1
- "use strict";require("svelte/internal/disclose-version");const L=require("svelte/internal/client"),j=require("svelte"),I=require("@strivacity/sdk-core"),z=require("@strivacity/sdk-core/utils/object"),E=require("./composables.cjs");function M(g){const o=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(g){for(const f in g)if(f!=="default"){const y=Object.getOwnPropertyDescriptor(g,f);Object.defineProperty(o,f,y.get?y:{enumerable:!0,get:()=>g[f]})}}return o.default=g,Object.freeze(o)}const e=M(L),q=(g,o=e.noop)=>{var f=e.comment(),y=e.first_child(f);e.each(y,17,o,l=>l?.key,(l,d)=>{var t=e.comment(),u=e.first_child(t);{var C=v=>{const _=e.derived(()=>e.get(d).component);var k=e.comment(),U=e.first_child(k);{var F=c=>{var p=e.comment(),h=e.first_child(p);e.component(h,()=>e.get(_),(w,n)=>{n(w,e.spread_props(()=>e.get(d).props,{children:(r,s)=>{q(r,()=>e.get(d).children)},$$slots:{default:!0}}))}),e.append(c,p)},O=c=>{var p=e.comment(),h=e.first_child(p);e.component(h,()=>e.get(_),(w,n)=>{n(w,e.spread_props(()=>e.get(d).props))}),e.append(c,p)};e.if(U,c=>{e.get(d).children?c(F):c(O,!1)})}e.append(v,k)};e.if(u,v=>{e.get(d)&&v(C)})}e.append(l,t)}),e.append(g,f)};var T=e.from_html('<div class="login-renderer"><!></div>');function J(g,o){e.push(o,!0);let f=e.prop(o,"sessionId",3,null),y=e.prop(o,"language",3,null);const{sdk:l}=E.useStrivacity(),d=l.login(o.params),t=e.proxy({loading:!1,forms:{},messages:{},state:{},submitForm:async()=>{},triggerFallback:()=>{},triggerClose:()=>{},setFormValue:()=>{},setMessage:()=>{}}),u=(n,r)=>{const s=n||t.state.hostedUrl;if(l.logging?.warn(r?`Triggering fallback due to: ${r}`:"Triggering fallback"),!s){const a=new Error("No hosted URL provided");throw l.logging?.error("Fallback error",a),a}o.onfallback?.(new I.FallbackError(new URL(s)))},C=()=>{o.onclose?.()},v=n=>n.map((r,s)=>{if(r.type==="widget"){const a=t.state.forms?.find(m=>m.id===r.formId),i=a?.widgets.find(m=>m.id===r.widgetId);if(!a||!i)return u(void 0,`Unable to find form or widget for item: formId=${r.formId}, widgetId=${r.widgetId}`),null;const b=o.widgets?.[i.type];return b?{component:b,props:{formId:a.id,config:i},key:`${a.id}.${i.id}`}:(u(void 0,`No component found for widget type ${i.type}`),null)}else if(r.type==="vertical"||r.type==="horizontal"){const a=o.widgets?.layout;return a?{component:a,props:{formId:r.items[0].formId,type:r.type,tag:"div"},children:v(r.items),key:`layout-${s}`}:(u(void 0,"No layout component provided"),null)}else return u(void 0,"Unknown item type in layout"),null}),_=(n,r,s)=>{s===""&&(s=null),t.forms={...t.forms,[n]:{...t.forms[n]||{},[r]:s===""?null:s}}},k=(n,r,s)=>{t.messages={...t.messages,[n]:{...t.messages[n]||{},[r]:s}}},U=async n=>{try{t.loading=!0;const r=await d?.submitForm(n,z.unflattenObject(t.forms[n]));await F(r),t.loading=!1}catch(r){r instanceof I.FallbackError?o.onfallback?.(r):o.onerror?.(r)}},F=async n=>{if(await l.isAuthenticated)o.onlogin?.(l.idTokenClaims);else{const r=JSON.parse(JSON.stringify(t.state)),s={hostedUrl:n?.hostedUrl??t.state.hostedUrl,finalizeUrl:n?.finalizeUrl??t.state.finalizeUrl,screen:n?.screen??t.state.screen,forms:n?.forms??t.state.forms,layout:n?.layout??t.state.layout,messages:n?.messages??{},branding:n?.branding??t.state.branding};if(s.screen!==t.state.screen){t.forms={},t.messages={};for(const a of s.forms??[])t.forms[a.id]={},t.messages[a.id]={}}else l.logging?.info(`Updating screen: ${s.screen}`);Object.keys(s.messages??{}).forEach(a=>{a==="global"?o.onglobalmessage?.(s.messages?.global?.text??""):t.messages[a]=s.messages[a]}),t.state=s,setTimeout(()=>{o.onblockready?.({previousState:r,state:JSON.parse(JSON.stringify(s))})},1)}};t.submitForm=U,t.triggerFallback=u,t.triggerClose=C,t.setFormValue=_,t.setMessage=k,j.setContext("nativeFlowContext",t),j.onMount(async()=>{try{const n=await d?.startSession(f(),y());o.onlanguagechange?.(d.language),n&&await F(n)}catch(n){n instanceof I.FallbackError?o.onfallback?.(n):o.onerror?.(n)}});let O=e.derived(()=>t.state.screen&&o.widgets?.layout?v(t.state.layout?.items??[]):[]);var c=T(),p=e.child(c);{var h=n=>{const r=e.derived(()=>o.widgets?.layout);var s=e.comment(),a=e.first_child(s);{let i=e.derived(()=>t.state.layout?.type);e.component(a,()=>e.get(r),(b,m)=>{m(b,{get formId(){return t.state.layout?.items[0].formId},get type(){return e.get(i)},tag:"form",children:(S,N)=>{q(S,()=>e.get(O))},$$slots:{default:!0}})})}e.append(n,s)},w=n=>{var r=e.comment(),s=e.first_child(r);{var a=i=>{const b=e.derived(()=>o.widgets?.loading);var m=e.comment(),S=e.first_child(m);e.component(S,()=>e.get(b),(N,x)=>{x(N,{})}),e.append(i,m)};e.if(s,i=>{o.widgets?.loading&&i(a)},!0)}e.append(n,r)};e.if(p,n=>{t.state.screen&&o.widgets?.layout?n(h):n(w,!1)})}e.reset(c),e.append(g,c),e.pop()}module.exports=J;
2
- //# sourceMappingURL=LoginRenderer.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LoginRenderer.cjs","sources":["../src/LoginRenderer.svelte"],"sourcesContent":["<script lang=\"ts\">\n\t/* eslint-disable @typescript-eslint/no-explicit-any */\n\timport type {\n\t\tNativeParams,\n\t\tPartialRecord,\n\t\tWidgetType,\n\t\tLayoutWidget,\n\t\tLoginFlowState,\n\t\tWidget,\n\t\tIdTokenClaims,\n\t\tLoginFlowMessage,\n\t} from '@strivacity/sdk-core';\n\timport type { NativeContext, NativeFlowContextValue } from './types';\n\timport type { Component } from 'svelte';\n\timport { setContext, onMount } from 'svelte';\n\timport { FallbackError } from '@strivacity/sdk-core';\n\timport { unflattenObject } from '@strivacity/sdk-core/utils/object';\n\timport { useStrivacity } from './composables';\n\n\tlet {\n\t\tparams,\n\t\twidgets,\n\t\tsessionId = null,\n\t\tlanguage = null,\n\t\tonlogin,\n\t\tonfallback,\n\t\tonclose,\n\t\tonerror,\n\t\tonglobalmessage,\n\t\tonblockready,\n\t\tonlanguagechange,\n\t}: {\n\t\tparams?: NativeParams;\n\t\twidgets?: PartialRecord<WidgetType, Component>;\n\t\tsessionId?: string | null;\n\t\tlanguage?: string | null;\n\t\tonlogin?: (claims?: IdTokenClaims | null) => void;\n\t\tonfallback?: (error: FallbackError) => void;\n\t\tonclose?: () => void;\n\t\tonerror?: (error: any) => void;\n\t\tonglobalmessage?: (message: string) => void;\n\t\tonblockready?: ({ previousState, state }: { previousState: LoginFlowState; state: LoginFlowState }) => void;\n\t\tonlanguagechange?: (language: string | null) => void;\n\t} = $props();\n\n\tconst { sdk } = useStrivacity<NativeContext>();\n\t// svelte-ignore state_referenced_locally\n\tconst loginHandler = sdk.login(params);\n\tconst context = $state<NativeFlowContextValue>({\n\t\tloading: false,\n\t\tforms: {},\n\t\tmessages: {},\n\t\tstate: {},\n\t\tsubmitForm: async () => {},\n\t\ttriggerFallback: () => {},\n\t\ttriggerClose: () => {},\n\t\tsetFormValue: () => {},\n\t\tsetMessage: () => {},\n\t});\n\n\tconst triggerFallback = (hostedUrl?: string, message?: string) => {\n\t\tconst url = hostedUrl || context.state.hostedUrl;\n\n\t\tsdk.logging?.warn(message ? `Triggering fallback due to: ${message}` : 'Triggering fallback');\n\n\t\tif (!url) {\n\t\t\tconst error = new Error('No hosted URL provided');\n\t\t\tsdk.logging?.error('Fallback error', error);\n\t\t\tthrow error;\n\t\t}\n\n\t\tonfallback?.(new FallbackError(new URL(url)));\n\t};\n\n\tconst triggerClose = () => {\n\t\tonclose?.();\n\t};\n\n\tconst renderWidgets = (items: LayoutWidget['items']): Array<any> => {\n\t\treturn items.map((item, idx) => {\n\t\t\tif (item.type === 'widget') {\n\t\t\t\tconst form = context.state.forms?.find((f: any) => f.id === item.formId);\n\t\t\t\tconst widget = form?.widgets.find((w: any) => w.id === item.widgetId);\n\n\t\t\t\tif (!form || !widget) {\n\t\t\t\t\ttriggerFallback(undefined, `Unable to find form or widget for item: formId=${item.formId}, widgetId=${item.widgetId}`);\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tconst WidgetComponent = widgets?.[widget.type as keyof typeof widgets];\n\n\t\t\t\tif (!WidgetComponent) {\n\t\t\t\t\ttriggerFallback(undefined, `No component found for widget type ${widget.type}`);\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tcomponent: WidgetComponent,\n\t\t\t\t\tprops: { formId: form.id, config: widget },\n\t\t\t\t\tkey: `${form.id}.${widget.id}`,\n\t\t\t\t};\n\t\t\t} else if (item.type === 'vertical' || item.type === 'horizontal') {\n\t\t\t\tconst LayoutComponent = widgets?.layout;\n\n\t\t\t\tif (!LayoutComponent) {\n\t\t\t\t\ttriggerFallback(undefined, 'No layout component provided');\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tcomponent: LayoutComponent,\n\t\t\t\t\tprops: { formId: (item.items[0] as Widget).formId, type: item.type, tag: 'div' },\n\t\t\t\t\tchildren: renderWidgets(item.items),\n\t\t\t\t\tkey: `layout-${idx}`,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\ttriggerFallback(undefined, 'Unknown item type in layout');\n\t\t\t\treturn null;\n\t\t\t}\n\t\t});\n\t};\n\n\tconst setFormValue = (formId: string, widgetId: string, value: unknown) => {\n\t\tif (value === '') {\n\t\t\tvalue = null;\n\t\t}\n\n\t\tcontext.forms = {\n\t\t\t...context.forms,\n\t\t\t[formId]: { ...(context.forms[formId] || {}), [widgetId]: value === '' ? null : value },\n\t\t};\n\t};\n\n\tconst setMessage = (formId: string, widgetId: string, value: LoginFlowMessage) => {\n\t\tcontext.messages = {\n\t\t\t...context.messages,\n\t\t\t[formId]: { ...(context.messages[formId] || {}), [widgetId]: value },\n\t\t};\n\t};\n\n\tconst submitForm = async (formId: string) => {\n\t\ttry {\n\t\t\tcontext.loading = true;\n\n\t\t\tconst data = await loginHandler?.submitForm(formId, unflattenObject(context.forms[formId]));\n\t\t\tawait handleResponse(data);\n\n\t\t\tcontext.loading = false;\n\t\t} catch (error) {\n\t\t\tif (error instanceof FallbackError) {\n\t\t\t\tonfallback?.(error);\n\t\t\t} else {\n\t\t\t\tonerror?.(error);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handleResponse = async (data?: LoginFlowState) => {\n\t\tif (await sdk.isAuthenticated) {\n\t\t\tonlogin?.(sdk.idTokenClaims);\n\t\t} else {\n\t\t\tconst previousState = JSON.parse(JSON.stringify(context.state));\n\t\t\tconst newState: LoginFlowState = {\n\t\t\t\thostedUrl: data?.hostedUrl ?? context.state.hostedUrl,\n\t\t\t\tfinalizeUrl: data?.finalizeUrl ?? context.state.finalizeUrl,\n\t\t\t\tscreen: data?.screen ?? context.state.screen,\n\t\t\t\tforms: data?.forms ?? context.state.forms,\n\t\t\t\tlayout: data?.layout ?? context.state.layout,\n\t\t\t\tmessages: data?.messages ?? {},\n\t\t\t\tbranding: data?.branding ?? context.state.branding,\n\t\t\t};\n\n\t\t\tif (newState.screen !== context.state.screen) {\n\t\t\t\tcontext.forms = {};\n\t\t\t\tcontext.messages = {};\n\n\t\t\t\tfor (const form of newState.forms ?? []) {\n\t\t\t\t\tcontext.forms[form.id] = {};\n\t\t\t\t\tcontext.messages[form.id] = {};\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsdk.logging?.info(`Updating screen: ${newState.screen}`);\n\t\t\t}\n\n\t\t\tObject.keys(newState.messages ?? {}).forEach((formId) => {\n\t\t\t\tif (formId === 'global') {\n\t\t\t\t\tonglobalmessage?.(newState.messages?.global?.text ?? '');\n\t\t\t\t} else {\n\t\t\t\t\tcontext.messages[formId] = newState.messages![formId];\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tcontext.state = newState;\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tonblockready?.({ previousState, state: JSON.parse(JSON.stringify(newState)) });\n\t\t\t}, 1);\n\t\t}\n\t};\n\n\tcontext.submitForm = submitForm;\n\tcontext.triggerFallback = triggerFallback;\n\tcontext.triggerClose = triggerClose;\n\tcontext.setFormValue = setFormValue;\n\tcontext.setMessage = setMessage;\n\n\tsetContext('nativeFlowContext', context);\n\n\tonMount(async () => {\n\t\ttry {\n\t\t\tconst data = await loginHandler?.startSession(sessionId, language);\n\t\t\tonlanguagechange?.(loginHandler.language);\n\n\t\t\tif (data) {\n\t\t\t\tawait handleResponse(data);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error instanceof FallbackError) {\n\t\t\t\tonfallback?.(error);\n\t\t\t} else {\n\t\t\t\tonerror?.(error);\n\t\t\t}\n\t\t}\n\t});\n\n\tlet renderedWidgets = $derived(context.state.screen && widgets?.layout ? renderWidgets(context.state.layout?.items ?? []) : []);\n</script>\n\n{#snippet renderItems(items: any[])}\n\t{#each items as item (item?.key)}\n\t\t{#if item}\n\t\t\t{@const Component = item.component}\n\t\t\t{#if item.children}\n\t\t\t\t<Component {...item.props}>\n\t\t\t\t\t{@render renderItems(item.children)}\n\t\t\t\t</Component>\n\t\t\t{:else}\n\t\t\t\t<Component {...item.props} />\n\t\t\t{/if}\n\t\t{/if}\n\t{/each}\n{/snippet}\n\n<div class=\"login-renderer\">\n\t{#if context.state.screen && widgets?.layout}\n\t\t{@const LayoutComponent = widgets?.layout}\n\t\t<LayoutComponent formId={(context.state.layout?.items[0] as Widget).formId} type={context.state.layout?.type} tag=\"form\">\n\t\t\t{@render renderItems(renderedWidgets)}\n\t\t</LayoutComponent>\n\t{:else if widgets?.loading}\n\t\t{@const LoadingComponent = widgets?.loading}\n\t\t<LoadingComponent />\n\t{/if}\n</div>\n"],"names":["renderItems","items","$","node","item","Component","Component_1","$$anchor","Component_2","$$render","consequent","alternate","consequent_1","sessionId","language","sdk","useStrivacity","loginHandler","$$props","context","triggerFallback","hostedUrl","message","url","error","FallbackError","triggerClose","renderWidgets","idx","form","f","widget","w","WidgetComponent","LayoutComponent","setFormValue","formId","widgetId","value","setMessage","submitForm","data","unflattenObject","handleResponse","previousState","newState","setContext","onMount","renderedWidgets","div","root","$0","LayoutComponent_1","LoadingComponent","LoadingComponent_1","consequent_3","consequent_2","alternate_1"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import"svelte/internal/disclose-version";import*as e from"svelte/internal/client";import{setContext as z,onMount as J}from"svelte";import{FallbackError as N}from"@strivacity/sdk-core";import{unflattenObject as M}from"@strivacity/sdk-core/utils/object";import{useStrivacity as R}from"./composables.mjs";const L=(k,s=e.noop)=>{var h=e.comment(),F=e.first_child(h);e.each(F,17,s,l=>l?.key,(l,d)=>{var t=e.comment(),f=e.first_child(t);{var U=u=>{const w=e.derived(()=>e.get(d).component);var _=e.comment(),C=e.first_child(_);{var b=g=>{var m=e.comment(),y=e.first_child(m);e.component(y,()=>e.get(w),(v,n)=>{n(v,e.spread_props(()=>e.get(d).props,{children:(o,r)=>{L(o,()=>e.get(d).children)},$$slots:{default:!0}}))}),e.append(g,m)},I=g=>{var m=e.comment(),y=e.first_child(m);e.component(y,()=>e.get(w),(v,n)=>{n(v,e.spread_props(()=>e.get(d).props))}),e.append(g,m)};e.if(C,g=>{e.get(d).children?g(b):g(I,!1)})}e.append(u,_)};e.if(f,u=>{e.get(d)&&u(U)})}e.append(l,t)}),e.append(k,h)};var T=e.from_html('<div class="login-renderer"><!></div>');function A(k,s){e.push(s,!0);let h=e.prop(s,"sessionId",3,null),F=e.prop(s,"language",3,null);const{sdk:l}=R(),d=l.login(s.params),t=e.proxy({loading:!1,forms:{},messages:{},state:{},submitForm:async()=>{},triggerFallback:()=>{},triggerClose:()=>{},setFormValue:()=>{},setMessage:()=>{}}),f=(n,o)=>{const r=n||t.state.hostedUrl;if(l.logging?.warn(o?`Triggering fallback due to: ${o}`:"Triggering fallback"),!r){const a=new Error("No hosted URL provided");throw l.logging?.error("Fallback error",a),a}s.onfallback?.(new N(new URL(r)))},U=()=>{s.onclose?.()},u=n=>n.map((o,r)=>{if(o.type==="widget"){const a=t.state.forms?.find(c=>c.id===o.formId),i=a?.widgets.find(c=>c.id===o.widgetId);if(!a||!i)return f(void 0,`Unable to find form or widget for item: formId=${o.formId}, widgetId=${o.widgetId}`),null;const p=s.widgets?.[i.type];return p?{component:p,props:{formId:a.id,config:i},key:`${a.id}.${i.id}`}:(f(void 0,`No component found for widget type ${i.type}`),null)}else if(o.type==="vertical"||o.type==="horizontal"){const a=s.widgets?.layout;return a?{component:a,props:{formId:o.items[0].formId,type:o.type,tag:"div"},children:u(o.items),key:`layout-${r}`}:(f(void 0,"No layout component provided"),null)}else return f(void 0,"Unknown item type in layout"),null}),w=(n,o,r)=>{r===""&&(r=null),t.forms={...t.forms,[n]:{...t.forms[n]||{},[o]:r===""?null:r}}},_=(n,o,r)=>{t.messages={...t.messages,[n]:{...t.messages[n]||{},[o]:r}}},C=async n=>{try{t.loading=!0;const o=await d?.submitForm(n,M(t.forms[n]));await b(o),t.loading=!1}catch(o){o instanceof N?s.onfallback?.(o):s.onerror?.(o)}},b=async n=>{if(await l.isAuthenticated)s.onlogin?.(l.idTokenClaims);else{const o=JSON.parse(JSON.stringify(t.state)),r={hostedUrl:n?.hostedUrl??t.state.hostedUrl,finalizeUrl:n?.finalizeUrl??t.state.finalizeUrl,screen:n?.screen??t.state.screen,forms:n?.forms??t.state.forms,layout:n?.layout??t.state.layout,messages:n?.messages??{},branding:n?.branding??t.state.branding};if(r.screen!==t.state.screen){t.forms={},t.messages={};for(const a of r.forms??[])t.forms[a.id]={},t.messages[a.id]={}}else l.logging?.info(`Updating screen: ${r.screen}`);Object.keys(r.messages??{}).forEach(a=>{a==="global"?s.onglobalmessage?.(r.messages?.global?.text??""):t.messages[a]=r.messages[a]}),t.state=r,setTimeout(()=>{s.onblockready?.({previousState:o,state:JSON.parse(JSON.stringify(r))})},1)}};t.submitForm=C,t.triggerFallback=f,t.triggerClose=U,t.setFormValue=w,t.setMessage=_,z("nativeFlowContext",t),J(async()=>{try{const n=await d?.startSession(h(),F());s.onlanguagechange?.(d.language),n&&await b(n)}catch(n){n instanceof N?s.onfallback?.(n):s.onerror?.(n)}});let I=e.derived(()=>t.state.screen&&s.widgets?.layout?u(t.state.layout?.items??[]):[]);var g=T(),m=e.child(g);{var y=n=>{const o=e.derived(()=>s.widgets?.layout);var r=e.comment(),a=e.first_child(r);{let i=e.derived(()=>t.state.layout?.type);e.component(a,()=>e.get(o),(p,c)=>{c(p,{get formId(){return t.state.layout?.items[0].formId},get type(){return e.get(i)},tag:"form",children:(S,x)=>{L(S,()=>e.get(I))},$$slots:{default:!0}})})}e.append(n,r)},v=n=>{var o=e.comment(),r=e.first_child(o);{var a=i=>{const p=e.derived(()=>s.widgets?.loading);var c=e.comment(),S=e.first_child(c);e.component(S,()=>e.get(p),(x,O)=>{O(x,{})}),e.append(i,c)};e.if(r,i=>{s.widgets?.loading&&i(a)},!0)}e.append(n,o)};e.if(m,n=>{t.state.screen&&s.widgets?.layout?n(y):n(v,!1)})}e.reset(g),e.append(k,g),e.pop()}export{A as default};
2
- //# sourceMappingURL=LoginRenderer.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LoginRenderer.mjs","sources":["../src/LoginRenderer.svelte"],"sourcesContent":["<script lang=\"ts\">\n\t/* eslint-disable @typescript-eslint/no-explicit-any */\n\timport type {\n\t\tNativeParams,\n\t\tPartialRecord,\n\t\tWidgetType,\n\t\tLayoutWidget,\n\t\tLoginFlowState,\n\t\tWidget,\n\t\tIdTokenClaims,\n\t\tLoginFlowMessage,\n\t} from '@strivacity/sdk-core';\n\timport type { NativeContext, NativeFlowContextValue } from './types';\n\timport type { Component } from 'svelte';\n\timport { setContext, onMount } from 'svelte';\n\timport { FallbackError } from '@strivacity/sdk-core';\n\timport { unflattenObject } from '@strivacity/sdk-core/utils/object';\n\timport { useStrivacity } from './composables';\n\n\tlet {\n\t\tparams,\n\t\twidgets,\n\t\tsessionId = null,\n\t\tlanguage = null,\n\t\tonlogin,\n\t\tonfallback,\n\t\tonclose,\n\t\tonerror,\n\t\tonglobalmessage,\n\t\tonblockready,\n\t\tonlanguagechange,\n\t}: {\n\t\tparams?: NativeParams;\n\t\twidgets?: PartialRecord<WidgetType, Component>;\n\t\tsessionId?: string | null;\n\t\tlanguage?: string | null;\n\t\tonlogin?: (claims?: IdTokenClaims | null) => void;\n\t\tonfallback?: (error: FallbackError) => void;\n\t\tonclose?: () => void;\n\t\tonerror?: (error: any) => void;\n\t\tonglobalmessage?: (message: string) => void;\n\t\tonblockready?: ({ previousState, state }: { previousState: LoginFlowState; state: LoginFlowState }) => void;\n\t\tonlanguagechange?: (language: string | null) => void;\n\t} = $props();\n\n\tconst { sdk } = useStrivacity<NativeContext>();\n\t// svelte-ignore state_referenced_locally\n\tconst loginHandler = sdk.login(params);\n\tconst context = $state<NativeFlowContextValue>({\n\t\tloading: false,\n\t\tforms: {},\n\t\tmessages: {},\n\t\tstate: {},\n\t\tsubmitForm: async () => {},\n\t\ttriggerFallback: () => {},\n\t\ttriggerClose: () => {},\n\t\tsetFormValue: () => {},\n\t\tsetMessage: () => {},\n\t});\n\n\tconst triggerFallback = (hostedUrl?: string, message?: string) => {\n\t\tconst url = hostedUrl || context.state.hostedUrl;\n\n\t\tsdk.logging?.warn(message ? `Triggering fallback due to: ${message}` : 'Triggering fallback');\n\n\t\tif (!url) {\n\t\t\tconst error = new Error('No hosted URL provided');\n\t\t\tsdk.logging?.error('Fallback error', error);\n\t\t\tthrow error;\n\t\t}\n\n\t\tonfallback?.(new FallbackError(new URL(url)));\n\t};\n\n\tconst triggerClose = () => {\n\t\tonclose?.();\n\t};\n\n\tconst renderWidgets = (items: LayoutWidget['items']): Array<any> => {\n\t\treturn items.map((item, idx) => {\n\t\t\tif (item.type === 'widget') {\n\t\t\t\tconst form = context.state.forms?.find((f: any) => f.id === item.formId);\n\t\t\t\tconst widget = form?.widgets.find((w: any) => w.id === item.widgetId);\n\n\t\t\t\tif (!form || !widget) {\n\t\t\t\t\ttriggerFallback(undefined, `Unable to find form or widget for item: formId=${item.formId}, widgetId=${item.widgetId}`);\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tconst WidgetComponent = widgets?.[widget.type as keyof typeof widgets];\n\n\t\t\t\tif (!WidgetComponent) {\n\t\t\t\t\ttriggerFallback(undefined, `No component found for widget type ${widget.type}`);\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tcomponent: WidgetComponent,\n\t\t\t\t\tprops: { formId: form.id, config: widget },\n\t\t\t\t\tkey: `${form.id}.${widget.id}`,\n\t\t\t\t};\n\t\t\t} else if (item.type === 'vertical' || item.type === 'horizontal') {\n\t\t\t\tconst LayoutComponent = widgets?.layout;\n\n\t\t\t\tif (!LayoutComponent) {\n\t\t\t\t\ttriggerFallback(undefined, 'No layout component provided');\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tcomponent: LayoutComponent,\n\t\t\t\t\tprops: { formId: (item.items[0] as Widget).formId, type: item.type, tag: 'div' },\n\t\t\t\t\tchildren: renderWidgets(item.items),\n\t\t\t\t\tkey: `layout-${idx}`,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\ttriggerFallback(undefined, 'Unknown item type in layout');\n\t\t\t\treturn null;\n\t\t\t}\n\t\t});\n\t};\n\n\tconst setFormValue = (formId: string, widgetId: string, value: unknown) => {\n\t\tif (value === '') {\n\t\t\tvalue = null;\n\t\t}\n\n\t\tcontext.forms = {\n\t\t\t...context.forms,\n\t\t\t[formId]: { ...(context.forms[formId] || {}), [widgetId]: value === '' ? null : value },\n\t\t};\n\t};\n\n\tconst setMessage = (formId: string, widgetId: string, value: LoginFlowMessage) => {\n\t\tcontext.messages = {\n\t\t\t...context.messages,\n\t\t\t[formId]: { ...(context.messages[formId] || {}), [widgetId]: value },\n\t\t};\n\t};\n\n\tconst submitForm = async (formId: string) => {\n\t\ttry {\n\t\t\tcontext.loading = true;\n\n\t\t\tconst data = await loginHandler?.submitForm(formId, unflattenObject(context.forms[formId]));\n\t\t\tawait handleResponse(data);\n\n\t\t\tcontext.loading = false;\n\t\t} catch (error) {\n\t\t\tif (error instanceof FallbackError) {\n\t\t\t\tonfallback?.(error);\n\t\t\t} else {\n\t\t\t\tonerror?.(error);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handleResponse = async (data?: LoginFlowState) => {\n\t\tif (await sdk.isAuthenticated) {\n\t\t\tonlogin?.(sdk.idTokenClaims);\n\t\t} else {\n\t\t\tconst previousState = JSON.parse(JSON.stringify(context.state));\n\t\t\tconst newState: LoginFlowState = {\n\t\t\t\thostedUrl: data?.hostedUrl ?? context.state.hostedUrl,\n\t\t\t\tfinalizeUrl: data?.finalizeUrl ?? context.state.finalizeUrl,\n\t\t\t\tscreen: data?.screen ?? context.state.screen,\n\t\t\t\tforms: data?.forms ?? context.state.forms,\n\t\t\t\tlayout: data?.layout ?? context.state.layout,\n\t\t\t\tmessages: data?.messages ?? {},\n\t\t\t\tbranding: data?.branding ?? context.state.branding,\n\t\t\t};\n\n\t\t\tif (newState.screen !== context.state.screen) {\n\t\t\t\tcontext.forms = {};\n\t\t\t\tcontext.messages = {};\n\n\t\t\t\tfor (const form of newState.forms ?? []) {\n\t\t\t\t\tcontext.forms[form.id] = {};\n\t\t\t\t\tcontext.messages[form.id] = {};\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsdk.logging?.info(`Updating screen: ${newState.screen}`);\n\t\t\t}\n\n\t\t\tObject.keys(newState.messages ?? {}).forEach((formId) => {\n\t\t\t\tif (formId === 'global') {\n\t\t\t\t\tonglobalmessage?.(newState.messages?.global?.text ?? '');\n\t\t\t\t} else {\n\t\t\t\t\tcontext.messages[formId] = newState.messages![formId];\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tcontext.state = newState;\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tonblockready?.({ previousState, state: JSON.parse(JSON.stringify(newState)) });\n\t\t\t}, 1);\n\t\t}\n\t};\n\n\tcontext.submitForm = submitForm;\n\tcontext.triggerFallback = triggerFallback;\n\tcontext.triggerClose = triggerClose;\n\tcontext.setFormValue = setFormValue;\n\tcontext.setMessage = setMessage;\n\n\tsetContext('nativeFlowContext', context);\n\n\tonMount(async () => {\n\t\ttry {\n\t\t\tconst data = await loginHandler?.startSession(sessionId, language);\n\t\t\tonlanguagechange?.(loginHandler.language);\n\n\t\t\tif (data) {\n\t\t\t\tawait handleResponse(data);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error instanceof FallbackError) {\n\t\t\t\tonfallback?.(error);\n\t\t\t} else {\n\t\t\t\tonerror?.(error);\n\t\t\t}\n\t\t}\n\t});\n\n\tlet renderedWidgets = $derived(context.state.screen && widgets?.layout ? renderWidgets(context.state.layout?.items ?? []) : []);\n</script>\n\n{#snippet renderItems(items: any[])}\n\t{#each items as item (item?.key)}\n\t\t{#if item}\n\t\t\t{@const Component = item.component}\n\t\t\t{#if item.children}\n\t\t\t\t<Component {...item.props}>\n\t\t\t\t\t{@render renderItems(item.children)}\n\t\t\t\t</Component>\n\t\t\t{:else}\n\t\t\t\t<Component {...item.props} />\n\t\t\t{/if}\n\t\t{/if}\n\t{/each}\n{/snippet}\n\n<div class=\"login-renderer\">\n\t{#if context.state.screen && widgets?.layout}\n\t\t{@const LayoutComponent = widgets?.layout}\n\t\t<LayoutComponent formId={(context.state.layout?.items[0] as Widget).formId} type={context.state.layout?.type} tag=\"form\">\n\t\t\t{@render renderItems(renderedWidgets)}\n\t\t</LayoutComponent>\n\t{:else if widgets?.loading}\n\t\t{@const LoadingComponent = widgets?.loading}\n\t\t<LoadingComponent />\n\t{/if}\n</div>\n"],"names":["renderItems","items","$","node","item","Component","Component_1","$$anchor","Component_2","$$render","consequent","alternate","consequent_1","sessionId","language","sdk","useStrivacity","loginHandler","$$props","context","triggerFallback","hostedUrl","message","url","error","FallbackError","triggerClose","renderWidgets","idx","form","f","widget","w","WidgetComponent","LayoutComponent","setFormValue","formId","widgetId","value","setMessage","submitForm","data","unflattenObject","handleResponse","previousState","newState","setContext","onMount","renderedWidgets","div","root","$0","LayoutComponent_1","LoadingComponent","LoadingComponent_1","consequent_3","consequent_2","alternate_1"],"mappings":"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"}
@@ -1 +0,0 @@
1
- export { SvelteComponent as default } from 'svelte';
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("svelte"),e=Symbol("sty"),o=()=>{const t=r.getContext(e);if(!t)throw new Error("Missing Strivacity SDK context");return t};exports.STRIVACITY_SDK=e;exports.useStrivacity=o;
2
- //# sourceMappingURL=composables.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"composables.cjs","sources":["../src/composables.ts"],"sourcesContent":["import { getContext } from 'svelte';\nimport type { PopupContext, RedirectContext, NativeContext } from './types';\n\nexport const STRIVACITY_SDK = Symbol('sty');\n\n/**\n * Hook to access the Strivacity SDK context\n *\n * @template T Extends either PopupContext, RedirectContext or NativeContext.\n *\n * @returns {T} The current Strivacity SDK context.\n *\n * @throws {Error} If the context is not provided by an AuthProvider.\n */\nexport const useStrivacity = <T extends PopupContext | RedirectContext | NativeContext>() => {\n\tconst context = getContext<T>(STRIVACITY_SDK);\n\n\tif (!context) {\n\t\tthrow new Error('Missing Strivacity SDK context');\n\t}\n\n\treturn context;\n};\n"],"names":["STRIVACITY_SDK","useStrivacity","context","getContext"],"mappings":"0GAGaA,EAAiB,OAAO,KAAK,EAW7BC,EAAgB,IAAgE,CAC5F,MAAMC,EAAUC,EAAAA,WAAcH,CAAc,EAE5C,GAAI,CAACE,EACJ,MAAM,IAAI,MAAM,gCAAgC,EAGjD,OAAOA,CACR"}
@@ -1,12 +0,0 @@
1
- import { PopupContext, RedirectContext, NativeContext } from './types';
2
- export declare const STRIVACITY_SDK: unique symbol;
3
- /**
4
- * Hook to access the Strivacity SDK context
5
- *
6
- * @template T Extends either PopupContext, RedirectContext or NativeContext.
7
- *
8
- * @returns {T} The current Strivacity SDK context.
9
- *
10
- * @throws {Error} If the context is not provided by an AuthProvider.
11
- */
12
- export declare const useStrivacity: <T extends PopupContext | RedirectContext | NativeContext>() => T;
@@ -1,2 +0,0 @@
1
- import{getContext as o}from"svelte";const r=Symbol("sty"),e=()=>{const t=o(r);if(!t)throw new Error("Missing Strivacity SDK context");return t};export{r as STRIVACITY_SDK,e as useStrivacity};
2
- //# sourceMappingURL=composables.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"composables.mjs","sources":["../src/composables.ts"],"sourcesContent":["import { getContext } from 'svelte';\nimport type { PopupContext, RedirectContext, NativeContext } from './types';\n\nexport const STRIVACITY_SDK = Symbol('sty');\n\n/**\n * Hook to access the Strivacity SDK context\n *\n * @template T Extends either PopupContext, RedirectContext or NativeContext.\n *\n * @returns {T} The current Strivacity SDK context.\n *\n * @throws {Error} If the context is not provided by an AuthProvider.\n */\nexport const useStrivacity = <T extends PopupContext | RedirectContext | NativeContext>() => {\n\tconst context = getContext<T>(STRIVACITY_SDK);\n\n\tif (!context) {\n\t\tthrow new Error('Missing Strivacity SDK context');\n\t}\n\n\treturn context;\n};\n"],"names":["STRIVACITY_SDK","useStrivacity","context","getContext"],"mappings":"oCAGO,MAAMA,EAAiB,OAAO,KAAK,EAW7BC,EAAgB,IAAgE,CAC5F,MAAMC,EAAUC,EAAcH,CAAc,EAE5C,GAAI,CAACE,EACJ,MAAM,IAAI,MAAM,gCAAgC,EAGjD,OAAOA,CACR"}