@txstate-mws/sveltekit-utils 1.0.2 → 1.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.
package/dist/api.d.ts CHANGED
@@ -11,12 +11,13 @@ type Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>;
11
11
  export declare function recordNavigations(callback: (evt: InteractionEvent) => void): void;
12
12
  export declare class APIBase {
13
13
  protected apiBase: string;
14
- protected authRedirect: string;
15
- protected token?: string;
14
+ authRedirect: string | URL;
15
+ loginRedirect: (api: APIBase, currentUrl: string) => URL;
16
+ token?: string;
16
17
  fetch: (info: RequestInfo, init?: RequestInit) => Promise<Response>;
17
18
  protected ready: () => void;
18
19
  protected readyPromise: Promise<void>;
19
- constructor(apiBase: string, authRedirect: string);
20
+ constructor(apiBase: string, authRedirect: string | URL, loginRedirect?: (api: APIBase, currentUrl: string) => URL);
20
21
  init(token: string | undefined, fetch?: (info: RequestInfo, init?: RequestInit) => Promise<Response>): Promise<void>;
21
22
  stringifyQuery(query: undefined | APIBaseQueryPayload): string;
22
23
  protected request<ReturnType = any>(path: string, method: string, opts?: {
package/dist/api.js CHANGED
@@ -4,6 +4,7 @@ import { get } from 'svelte/store';
4
4
  import { rescue, toArray } from 'txstate-utils';
5
5
  import { page } from '$app/stores';
6
6
  import { afterNavigate } from '$app/navigation';
7
+ import { unifiedAuth } from './unifiedauth.js';
7
8
  /**
8
9
  * Provided for convenience in case you are not using APIBase but still want to record navigations
9
10
  *
@@ -12,30 +13,41 @@ import { afterNavigate } from '$app/navigation';
12
13
  * Must be called from a svelte component. Should usually be your root +layout.svelte.
13
14
  */
14
15
  export function recordNavigations(callback) {
16
+ let timer = 0;
17
+ let from;
15
18
  afterNavigate(navigation => {
16
- callback({ eventType: 'sveltekit-utils-navigation', screen: (navigation.from ?? navigation.to)?.route.id, target: navigation.to?.url.toString(), action: 'navigation', additionalProperties: { fullPageLoad: String(!navigation.from) } });
19
+ // save off the navigation.from in case we're debouncing a redirect
20
+ if (timer === 0)
21
+ from = navigation.from;
22
+ clearTimeout(timer); // we are debouncing because sometimes afterNavigate gets called twice
23
+ timer = setTimeout(() => {
24
+ callback({ eventType: 'sveltekit-utils-navigation', screen: (from ?? navigation.to)?.route.id, target: navigation.to?.url.pathname, action: 'navigation', additionalProperties: { fullPageLoad: String(!from) } });
25
+ timer = 0;
26
+ }, 10);
17
27
  });
18
28
  }
19
29
  export class APIBase {
20
30
  apiBase;
21
31
  authRedirect;
32
+ loginRedirect;
22
33
  token;
23
34
  fetch;
24
35
  ready;
25
36
  readyPromise;
26
- constructor(apiBase, authRedirect) {
37
+ constructor(apiBase, authRedirect, loginRedirect = unifiedAuth.loginRedirect) {
27
38
  this.apiBase = apiBase;
28
39
  this.authRedirect = authRedirect;
40
+ this.loginRedirect = loginRedirect;
29
41
  this.readyPromise = new Promise(resolve => { this.ready = resolve; });
30
42
  }
31
43
  async init(token, fetch) {
32
- this.token = token;
33
44
  this.fetch = fetch ?? this.fetch;
34
- if (this.token) {
35
- sessionStorage.setItem('token', this.token);
45
+ if (token) {
46
+ this.token = token;
47
+ sessionStorage.setItem('token', token);
36
48
  }
37
49
  else {
38
- this.token = sessionStorage.getItem('token') ?? undefined;
50
+ this.token ??= sessionStorage.getItem('token') ?? undefined;
39
51
  }
40
52
  this.ready();
41
53
  }
@@ -67,9 +79,7 @@ export class APIBase {
67
79
  const isJsonResponse = contentType && contentType.indexOf("application/json") !== -1;
68
80
  if (!resp.ok && !(resp.status === 422 && opts?.inlineValidation)) {
69
81
  if (resp.status === 401) {
70
- const loginRedirect = new URL(this.authRedirect);
71
- loginRedirect.searchParams.set('requestedUrl', location.href);
72
- location.href = loginRedirect.toString();
82
+ location.href = this.loginRedirect(this, location.href).toString();
73
83
  throw error(401);
74
84
  }
75
85
  else {
package/dist/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  export * from './api.js';
2
+ export * from './unifiedauth.js';
package/dist/index.js CHANGED
@@ -1,2 +1,3 @@
1
1
  export * from './api.js';
2
+ export * from './unifiedauth.js';
2
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,kBAAkB,CAAA"}
@@ -0,0 +1,24 @@
1
+ import { type LoadEvent } from '@sveltejs/kit';
2
+ import type { APIBase } from './api.js';
3
+ interface HandleOpts {
4
+ /**
5
+ * handleUnifiedAuth redirects users to unified auth by default if they don't have
6
+ * a token yet. If your UI is at least partially available to the public, set
7
+ * allowUnauthenticated to true.
8
+ */
9
+ allowUnauthenticated?: boolean;
10
+ }
11
+ export declare const unifiedAuth: {
12
+ /**
13
+ * Your root +layout.ts' load function should call this method to ensure that it
14
+ * handles authentication from Unified Auth. By default it will redirect unauthenticated
15
+ * users to Unified Auth without a screen flash.
16
+ *
17
+ * If you set allowUnauthenticated: true and wait for the API to send a 401, there
18
+ * will often be a screen flash.
19
+ */
20
+ handle(api: APIBase, input: LoadEvent, opts?: HandleOpts): Promise<void>;
21
+ loginRedirect(api: APIBase, currentUrl: string): URL;
22
+ requireAuth(api: APIBase, input: LoadEvent): void;
23
+ };
24
+ export {};
@@ -0,0 +1,37 @@
1
+ import { redirect } from '@sveltejs/kit';
2
+ export const unifiedAuth = {
3
+ /**
4
+ * Your root +layout.ts' load function should call this method to ensure that it
5
+ * handles authentication from Unified Auth. By default it will redirect unauthenticated
6
+ * users to Unified Auth without a screen flash.
7
+ *
8
+ * If you set allowUnauthenticated: true and wait for the API to send a 401, there
9
+ * will often be a screen flash.
10
+ */
11
+ async handle(api, input, opts) {
12
+ const unifiedJwt = input.url.searchParams.get('unifiedJwt') ?? undefined;
13
+ await api.init(unifiedJwt);
14
+ if (unifiedJwt) {
15
+ let redirectUrl = input.url.searchParams.get('requestedUrl') ?? undefined;
16
+ if (!redirectUrl) {
17
+ const currentUrl = new URL(input.url);
18
+ currentUrl.searchParams.delete('unifiedJwt');
19
+ redirectUrl = currentUrl.toString();
20
+ }
21
+ throw redirect(302, redirectUrl);
22
+ }
23
+ if (!opts?.allowUnauthenticated)
24
+ this.requireAuth(api, input);
25
+ },
26
+ loginRedirect(api, currentUrl) {
27
+ const loginRedirect = new URL(api.authRedirect);
28
+ loginRedirect.searchParams.set('requestedUrl', currentUrl);
29
+ return loginRedirect;
30
+ },
31
+ requireAuth(api, input) {
32
+ if (!api.token) {
33
+ throw redirect(302, this.loginRedirect(api, input.url.toString()));
34
+ }
35
+ }
36
+ };
37
+ //# sourceMappingURL=unifiedauth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unifiedauth.js","sourceRoot":"","sources":["../src/unifiedauth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,QAAQ,EAAE,MAAM,eAAe,CAAA;AAYxD,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB;;;;;;;OAOG;IACH,KAAK,CAAC,MAAM,CAAE,GAAY,EAAE,KAAgB,EAAE,IAAiB;QAC7D,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,SAAS,CAAA;QACxE,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAC1B,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,SAAS,CAAA;YACzE,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;gBACrC,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;gBAC5C,WAAW,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAA;YACrC,CAAC;YACD,MAAM,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC,CAAA;QAClC,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,oBAAoB;YAAE,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAC/D,CAAC;IAED,aAAa,CAAE,GAAY,EAAE,UAAkB;QAC7C,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;QAC/C,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,UAAU,CAAC,CAAA;QAC1D,OAAO,aAAa,CAAA;IACtB,CAAC;IAED,WAAW,CAAE,GAAY,EAAE,KAAgB;QACzC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;QACpE,CAAC;IACH,CAAC;CACF,CAAA"}
package/package.json CHANGED
@@ -1,10 +1,13 @@
1
1
  {
2
2
  "name": "@txstate-mws/sveltekit-utils",
3
- "version": "1.0.2",
3
+ "version": "1.1.0",
4
4
  "description": "Shared library for code that is specifically tied to sveltekit in addition to svelte.",
5
5
  "type": "module",
6
6
  "exports": {
7
- ".": "./dist/index.js"
7
+ ".": {
8
+ "types": "./dist/index.d.ts",
9
+ "default": "./dist/index.js"
10
+ }
8
11
  },
9
12
  "types": "./dist/index.d.ts",
10
13
  "dependencies": {