@txstate-mws/sveltekit-utils 1.0.0 → 1.0.2
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 +37 -9
- package/dist/api.js +42 -8
- package/dist/api.js.map +1 -1
- package/package.json +1 -1
package/dist/api.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { InteractionEvent } from '@txstate-mws/fastify-shared';
|
|
2
|
-
export type APIBaseQueryPayload = string | Record<string, string | number | (string | number)[]>;
|
|
1
|
+
import type { InteractionEvent, ValidatedResponse } from '@txstate-mws/fastify-shared';
|
|
2
|
+
export type APIBaseQueryPayload = string | Record<string, undefined | string | number | (string | number)[]>;
|
|
3
3
|
type Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>;
|
|
4
4
|
/**
|
|
5
5
|
* Provided for convenience in case you are not using APIBase but still want to record navigations
|
|
@@ -19,18 +19,46 @@ export declare class APIBase {
|
|
|
19
19
|
constructor(apiBase: string, authRedirect: string);
|
|
20
20
|
init(token: string | undefined, fetch?: (info: RequestInfo, init?: RequestInit) => Promise<Response>): Promise<void>;
|
|
21
21
|
stringifyQuery(query: undefined | APIBaseQueryPayload): string;
|
|
22
|
-
protected request<ReturnType = any>(path: string, method: string,
|
|
22
|
+
protected request<ReturnType = any>(path: string, method: string, opts?: {
|
|
23
23
|
body?: any;
|
|
24
24
|
query?: APIBaseQueryPayload;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
inlineValidation?: boolean;
|
|
26
|
+
}): Promise<ReturnType>;
|
|
27
|
+
get<ReturnType = any>(path: string, query?: APIBaseQueryPayload): Promise<ReturnType>;
|
|
28
|
+
/**
|
|
29
|
+
* Remember to use validatedPost when the user is interacting with a form. That way they
|
|
30
|
+
* will get inline errors.
|
|
31
|
+
*/
|
|
32
|
+
post<ReturnType = any>(path: string, body?: any, query?: APIBaseQueryPayload): Promise<ReturnType>;
|
|
33
|
+
/**
|
|
34
|
+
* Remember to use validatedPut when the user is interacting with a form. That way they
|
|
35
|
+
* will get inline errors.
|
|
36
|
+
*/
|
|
37
|
+
put<ReturnType = any>(path: string, body?: any, query?: APIBaseQueryPayload): Promise<ReturnType>;
|
|
38
|
+
/**
|
|
39
|
+
* Remember to use validatedPatch when the user is interacting with a form. That way they
|
|
40
|
+
* will get inline errors.
|
|
41
|
+
*/
|
|
42
|
+
patch<ReturnType = any>(path: string, body?: any, query?: APIBaseQueryPayload): Promise<ReturnType>;
|
|
43
|
+
/**
|
|
44
|
+
* Use this method when the user is interacting with a form. You should expect a ValidatedResponse,
|
|
45
|
+
* e.g. { success: false, messages: [{ type: 'error', message: 'That name is already taken.', path: 'name' }] }
|
|
46
|
+
*/
|
|
47
|
+
validatedPost<ReturnType extends ValidatedResponse = ValidatedResponse>(path: string, body?: any, query?: APIBaseQueryPayload): Promise<ReturnType>;
|
|
48
|
+
/**
|
|
49
|
+
* Use this method when the user is interacting with a form. You should expect a ValidatedResponse,
|
|
50
|
+
* e.g. { success: false, messages: [{ type: 'error', message: 'That name is already taken.', path: 'name' }] }
|
|
51
|
+
*/
|
|
52
|
+
validatedPut<ReturnType extends ValidatedResponse = ValidatedResponse>(path: string, body?: any, query?: APIBaseQueryPayload): Promise<ReturnType>;
|
|
53
|
+
/**
|
|
54
|
+
* Use this method when the user is interacting with a form. You should expect a ValidatedResponse,
|
|
55
|
+
* e.g. { success: false, messages: [{ type: 'error', message: 'That name is already taken.', path: 'name' }] }
|
|
56
|
+
*/
|
|
57
|
+
validatedPatch<ReturnType extends ValidatedResponse = ValidatedResponse>(path: string, body?: any, query?: APIBaseQueryPayload): Promise<ReturnType>;
|
|
30
58
|
/**
|
|
31
59
|
* Sending a JSON body with an HTTP DELETE is not recommended
|
|
32
60
|
*/
|
|
33
|
-
delete<ReturnType = any>(path: string, query?: APIBaseQueryPayload, body?: any): Promise<
|
|
61
|
+
delete<ReturnType = any>(path: string, query?: APIBaseQueryPayload, body?: any): Promise<ReturnType>;
|
|
34
62
|
graphql<ReturnType = any>(query: string, variables?: any, querySignature?: string): Promise<ReturnType>;
|
|
35
63
|
protected analyticsQueue: InteractionEvent[];
|
|
36
64
|
recordInteraction(evt: Optional<InteractionEvent, 'screen'>): void;
|
package/dist/api.js
CHANGED
|
@@ -51,19 +51,21 @@ export class APIBase {
|
|
|
51
51
|
}
|
|
52
52
|
return '?' + p.toString();
|
|
53
53
|
}
|
|
54
|
-
async request(path, method,
|
|
54
|
+
async request(path, method, opts) {
|
|
55
55
|
await this.readyPromise;
|
|
56
56
|
try {
|
|
57
|
-
const resp = await this.fetch(this.apiBase + path + this.stringifyQuery(
|
|
57
|
+
const resp = await this.fetch(this.apiBase + path + this.stringifyQuery(opts?.query), {
|
|
58
58
|
method,
|
|
59
59
|
headers: {
|
|
60
60
|
Authorization: `Bearer ${this.token ?? ''}`,
|
|
61
61
|
Accept: 'application/json',
|
|
62
|
-
...(
|
|
62
|
+
...(opts?.body ? { 'Content-Type': 'application/json' } : {})
|
|
63
63
|
},
|
|
64
|
-
body:
|
|
64
|
+
body: opts?.body ? JSON.stringify(opts.body) : undefined
|
|
65
65
|
});
|
|
66
|
-
|
|
66
|
+
const contentType = resp.headers.get("content-type");
|
|
67
|
+
const isJsonResponse = contentType && contentType.indexOf("application/json") !== -1;
|
|
68
|
+
if (!resp.ok && !(resp.status === 422 && opts?.inlineValidation)) {
|
|
67
69
|
if (resp.status === 401) {
|
|
68
70
|
const loginRedirect = new URL(this.authRedirect);
|
|
69
71
|
loginRedirect.searchParams.set('requestedUrl', location.href);
|
|
@@ -71,13 +73,12 @@ export class APIBase {
|
|
|
71
73
|
throw error(401);
|
|
72
74
|
}
|
|
73
75
|
else {
|
|
74
|
-
const message = ((await rescue(resp.json()))?.message ?? resp.statusText);
|
|
76
|
+
const message = ((isJsonResponse ? (await rescue(resp.json()))?.message : await rescue(resp.text())) ?? resp.statusText);
|
|
75
77
|
toasts.add(message);
|
|
76
78
|
throw error(resp.status, message);
|
|
77
79
|
}
|
|
78
80
|
}
|
|
79
|
-
|
|
80
|
-
return (contentType && contentType.indexOf("application/json") !== -1) ? await resp.json() : await resp.text();
|
|
81
|
+
return ((isJsonResponse) ? await resp.json() : await resp.text());
|
|
81
82
|
}
|
|
82
83
|
catch (e) {
|
|
83
84
|
toasts.add(e.message);
|
|
@@ -87,15 +88,48 @@ export class APIBase {
|
|
|
87
88
|
async get(path, query) {
|
|
88
89
|
return await this.request(path, 'GET', { query });
|
|
89
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* Remember to use validatedPost when the user is interacting with a form. That way they
|
|
93
|
+
* will get inline errors.
|
|
94
|
+
*/
|
|
90
95
|
async post(path, body, query) {
|
|
91
96
|
return await this.request(path, 'POST', { body, query });
|
|
92
97
|
}
|
|
98
|
+
/**
|
|
99
|
+
* Remember to use validatedPut when the user is interacting with a form. That way they
|
|
100
|
+
* will get inline errors.
|
|
101
|
+
*/
|
|
93
102
|
async put(path, body, query) {
|
|
94
103
|
return await this.request(path, 'PUT', { body, query });
|
|
95
104
|
}
|
|
105
|
+
/**
|
|
106
|
+
* Remember to use validatedPatch when the user is interacting with a form. That way they
|
|
107
|
+
* will get inline errors.
|
|
108
|
+
*/
|
|
96
109
|
async patch(path, body, query) {
|
|
97
110
|
return await this.request(path, 'PATCH', { body, query });
|
|
98
111
|
}
|
|
112
|
+
/**
|
|
113
|
+
* Use this method when the user is interacting with a form. You should expect a ValidatedResponse,
|
|
114
|
+
* e.g. { success: false, messages: [{ type: 'error', message: 'That name is already taken.', path: 'name' }] }
|
|
115
|
+
*/
|
|
116
|
+
async validatedPost(path, body, query) {
|
|
117
|
+
return await this.request(path, 'POST', { body, query, inlineValidation: true });
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Use this method when the user is interacting with a form. You should expect a ValidatedResponse,
|
|
121
|
+
* e.g. { success: false, messages: [{ type: 'error', message: 'That name is already taken.', path: 'name' }] }
|
|
122
|
+
*/
|
|
123
|
+
async validatedPut(path, body, query) {
|
|
124
|
+
return await this.request(path, 'PUT', { body, query, inlineValidation: true });
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Use this method when the user is interacting with a form. You should expect a ValidatedResponse,
|
|
128
|
+
* e.g. { success: false, messages: [{ type: 'error', message: 'That name is already taken.', path: 'name' }] }
|
|
129
|
+
*/
|
|
130
|
+
async validatedPatch(path, body, query) {
|
|
131
|
+
return await this.request(path, 'PATCH', { body, query, inlineValidation: true });
|
|
132
|
+
}
|
|
99
133
|
/**
|
|
100
134
|
* Sending a JSON body with an HTTP DELETE is not recommended
|
|
101
135
|
*/
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAA;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AACrC,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAK/C;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAE,QAAyC;IAC1E,aAAa,CAAC,UAAU,CAAC,EAAE;QACzB,QAAQ,CAAC,EAAE,SAAS,EAAE,4BAA4B,EAAE,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,oBAAoB,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;IAC7O,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,OAAO,OAAO;IAMK;IAA2B;IALxC,KAAK,CAAS;IACjB,KAAK,CAA+D;IACjE,KAAK,CAAa;IAClB,YAAY,CAAe;IAErC,YAAuB,OAAe,EAAY,YAAoB;QAA/C,YAAO,GAAP,OAAO,CAAQ;QAAY,iBAAY,GAAZ,YAAY,CAAQ;QACpE,IAAI,CAAC,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,GAAG,OAAO,CAAA,CAAC,CAAC,CAAC,CAAA;IACtE,CAAC;IAED,KAAK,CAAC,IAAI,CAAE,KAAyB,EAAE,KAAoE;QACzG,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,IAAI,CAAC,KAAK,CAAA;QAChC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;QAC7C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,SAAS,CAAA;QAC3D,CAAC;QACD,IAAI,CAAC,KAAK,EAAE,CAAA;IACd,CAAC;IAED,cAAc,CAAE,KAAsC;QACpD,IAAI,KAAK,IAAI,IAAI;YAAE,OAAO,EAAE,CAAA;QAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAA;QACjF,MAAM,CAAC,GAAG,IAAI,eAAe,EAAE,CAAA;QAC/B,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/C,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC;gBAAE,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QACxD,CAAC;QACD,OAAO,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAA;IAC3B,CAAC;IAES,KAAK,CAAC,OAAO,CAAqB,IAAY,EAAE,MAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|