@capytale/activity.js 3.1.27 → 3.1.29
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/activity/activityType/activityType.d.ts +2 -0
- package/activity/activityType/activityType.js.map +1 -1
- package/api/http/backend.d.ts +7 -4
- package/api/http/backend.js +19 -7
- package/api/http/backend.js.map +1 -1
- package/backend/capytale/auth.js +66 -40
- package/backend/capytale/auth.js.map +1 -1
- package/backend/capytale/resolver.js +9 -3
- package/backend/capytale/resolver.js.map +1 -1
- package/package.json +1 -1
|
@@ -34,6 +34,8 @@ export type ActivityType = {
|
|
|
34
34
|
filterWith?: string | null;
|
|
35
35
|
/** Si ce type d'activité produit des évaluations détaillées. */
|
|
36
36
|
detailedEvaluation: boolean;
|
|
37
|
+
/** Si ce type d'activité utilise les consignes */
|
|
38
|
+
hasInstructions: boolean;
|
|
37
39
|
/** Si ce type d'activité est exportable. */
|
|
38
40
|
exportable: boolean;
|
|
39
41
|
/** Si ce type d'activité est compatible lti. (`null` signifie ne sera jamais compatible) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activityType.js","sourceRoot":"","sources":["../../src/activity/activityType/activityType.ts"],"names":[],"mappings":"","sourcesContent":["import type { ActivityMode } from \"~/activitySession\";\n\ntype IframeUrlMap = {\n create: string;\n review: string;\n assignment: string;\n view: string;\n}\n\ntype ContractParameters = {\n variant?: string;\n backend?: 'db' | 'fs';\n [p: string] : number | boolean | string | undefined;\n}\n\nexport type ActivityType = {\n id: string;\n name: string;\n status?: { beta?: boolean };\n icon: {\n path: string;\n style?: { [s: string]: string };\n };\n helpUrl: string;\n summary: string;\n description: string;\n tags?: string;\n bundle: string;\n /** Si ce type d'activité est disponible pour l'utilisateur courant. */\n available: boolean;\n /** Indique que ce type d'activité est remplacé. */\n replacedBy?: string | null;\n /** Ce type d'activité devrait être filtré en même temps que celui indiqué. */\n filterWith?: string | null;\n /** Si ce type d'activité produit des évaluations détaillées. */\n detailedEvaluation: boolean;\n /** Si ce type d'activité est exportable. */\n exportable: boolean;\n /** Si ce type d'activité est compatible lti. (`null` signifie ne sera jamais compatible) */\n lti: boolean | null;\n /** L'url de l'iFrame */\n \n iframe_url: null | string | IframeUrlMap;\n contracts: null | {\n [contract: string]: ContractParameters;\n }\n}\n\nexport type ActivityGroup = {\n title: string;\n tooltip?: string;\n activities: string[];\n};\n\nexport type ActivityGroups = {\n [key: string]: ActivityGroup;\n};\n\nexport type ActivityWeights = {\n all: { [key: string]: number };\n niveaux: {\n [key: string]: {\n title: string;\n activities: { [key: string]: number }\n }\n };\n groups: ActivityGroups;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"activityType.js","sourceRoot":"","sources":["../../src/activity/activityType/activityType.ts"],"names":[],"mappings":"","sourcesContent":["import type { ActivityMode } from \"~/activitySession\";\n\ntype IframeUrlMap = {\n create: string;\n review: string;\n assignment: string;\n view: string;\n}\n\ntype ContractParameters = {\n variant?: string;\n backend?: 'db' | 'fs';\n [p: string] : number | boolean | string | undefined;\n}\n\nexport type ActivityType = {\n id: string;\n name: string;\n status?: { beta?: boolean };\n icon: {\n path: string;\n style?: { [s: string]: string };\n };\n helpUrl: string;\n summary: string;\n description: string;\n tags?: string;\n bundle: string;\n /** Si ce type d'activité est disponible pour l'utilisateur courant. */\n available: boolean;\n /** Indique que ce type d'activité est remplacé. */\n replacedBy?: string | null;\n /** Ce type d'activité devrait être filtré en même temps que celui indiqué. */\n filterWith?: string | null;\n /** Si ce type d'activité produit des évaluations détaillées. */\n detailedEvaluation: boolean;\n /** Si ce type d'activité utilise les consignes */\n hasInstructions: boolean;\n /** Si ce type d'activité est exportable. */\n exportable: boolean;\n /** Si ce type d'activité est compatible lti. (`null` signifie ne sera jamais compatible) */\n lti: boolean | null;\n /** L'url de l'iFrame */\n \n iframe_url: null | string | IframeUrlMap;\n contracts: null | {\n [contract: string]: ContractParameters;\n }\n}\n\nexport type ActivityGroup = {\n title: string;\n tooltip?: string;\n activities: string[];\n};\n\nexport type ActivityGroups = {\n [key: string]: ActivityGroup;\n};\n\nexport type ActivityWeights = {\n all: { [key: string]: number };\n niveaux: {\n [key: string]: {\n title: string;\n activities: { [key: string]: number }\n }\n };\n groups: ActivityGroups;\n};\n"]}
|
package/api/http/backend.d.ts
CHANGED
|
@@ -10,6 +10,11 @@ export type ReturnValueType<T extends ReturnType> = {
|
|
|
10
10
|
'stream': ReadableStream<Uint8Array> | null;
|
|
11
11
|
'void': void;
|
|
12
12
|
}[T];
|
|
13
|
+
export interface HttpRequestOptions {
|
|
14
|
+
credentials?: RequestCredentials;
|
|
15
|
+
mode?: RequestMode;
|
|
16
|
+
headers?: HeadersInit;
|
|
17
|
+
}
|
|
13
18
|
export interface CredentialProvider {
|
|
14
19
|
/**
|
|
15
20
|
* Fournit les en-têtes d'authentification pour une requête HTTP.
|
|
@@ -17,11 +22,9 @@ export interface CredentialProvider {
|
|
|
17
22
|
* @param isSafe - indique si la requête est considérée safe (GET, HEAD, OPTIONS)
|
|
18
23
|
* @param url - l'URL de la requête
|
|
19
24
|
* @param auth - indique si l'authentification est requise
|
|
20
|
-
* @
|
|
21
|
-
* si non défini, les en-têtes d'authentification seuls sont retournés
|
|
22
|
-
* @returns les en-têtes d'authentification
|
|
25
|
+
* @returns les options de requête à employer
|
|
23
26
|
*/
|
|
24
|
-
getCredentialsFor(isSafe: boolean, url: string, auth?: boolean
|
|
27
|
+
getCredentialsFor(isSafe: boolean, url: string, auth?: boolean): Promise<HttpRequestOptions>;
|
|
25
28
|
}
|
|
26
29
|
export interface HttpBackend {
|
|
27
30
|
requestAsync<const T extends ReturnType>(method: string, route: RouteOrString, data: any, retType: T, auth?: boolean, expectedStatus?: number | number[], hdr?: HeadersInit): Promise<ReturnValueType<T>>;
|
package/api/http/backend.js
CHANGED
|
@@ -5,6 +5,17 @@ function isSafeMethod(method) {
|
|
|
5
5
|
}
|
|
6
6
|
;
|
|
7
7
|
;
|
|
8
|
+
function mergeHeaders(hdr1, hdr2) {
|
|
9
|
+
if (hdr1 == null)
|
|
10
|
+
return hdr2;
|
|
11
|
+
if (hdr2 == null)
|
|
12
|
+
return hdr1;
|
|
13
|
+
const merged = new Headers(hdr1);
|
|
14
|
+
for (const [key, value] of (new Headers(hdr2)).entries()) {
|
|
15
|
+
merged.set(key, value);
|
|
16
|
+
}
|
|
17
|
+
return merged;
|
|
18
|
+
}
|
|
8
19
|
function isOk(r, expected) {
|
|
9
20
|
if (expected == null)
|
|
10
21
|
return r.ok;
|
|
@@ -12,14 +23,15 @@ function isOk(r, expected) {
|
|
|
12
23
|
return expected.includes(r.status);
|
|
13
24
|
return r.status === expected;
|
|
14
25
|
}
|
|
15
|
-
async function rawRequestAsync(method, url, data, expectedStatus, hdr) {
|
|
26
|
+
async function rawRequestAsync(method, url, data, expectedStatus, hdr, options) {
|
|
16
27
|
let response;
|
|
28
|
+
if (options == null)
|
|
29
|
+
options = {};
|
|
30
|
+
options.headers = mergeHeaders(hdr, options.headers);
|
|
31
|
+
options.method = method;
|
|
32
|
+
options.body = data;
|
|
17
33
|
try {
|
|
18
|
-
let request = new Request(url,
|
|
19
|
-
method: method,
|
|
20
|
-
headers: hdr,
|
|
21
|
-
body: data,
|
|
22
|
-
});
|
|
34
|
+
let request = new Request(url, options);
|
|
23
35
|
response = await fetch(request);
|
|
24
36
|
if (isOk(response, expectedStatus))
|
|
25
37
|
return response;
|
|
@@ -46,7 +58,7 @@ export default function (r, cp) {
|
|
|
46
58
|
function authRawRequestAsync(method, route, data, auth, expectedStatus, hdr) {
|
|
47
59
|
method = method.toUpperCase();
|
|
48
60
|
const url = typeof route === 'string' ? route : r(route);
|
|
49
|
-
return cp.getCredentialsFor(isSafeMethod(method), url, auth
|
|
61
|
+
return cp.getCredentialsFor(isSafeMethod(method), url, auth).then(options => rawRequestAsync(method, url, data, expectedStatus, hdr, options));
|
|
50
62
|
}
|
|
51
63
|
function requestAsync(method, route, data, retType, auth, expectedStatus, hdr) {
|
|
52
64
|
const reqTask = authRawRequestAsync(method, route, data, auth, expectedStatus, hdr);
|
package/api/http/backend.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend.js","sourceRoot":"","sources":["../../src/api/http/backend.ts"],"names":[],"mappings":"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","sourcesContent":["import { NetworkError, StatusError, ApiError, PayloadError } from \"./error\";\r\nimport type { Route, RouteResolver } from \"./route\";\r\n\r\ntype RouteOrString = Route | string;\r\n\r\nexport type NonVoidReturnType = 'json' | 'text' | 'blob' | 'arrayBuffer' | 'stream';\r\nexport type ReturnType = NonVoidReturnType | 'void';\r\ntype CallableReturnType = Exclude<NonVoidReturnType, 'stream'>;\r\n\r\nexport type ReturnValueType<T extends ReturnType> = {\r\n 'json': unknown;\r\n 'text': string;\r\n 'blob': Blob;\r\n 'arrayBuffer': ArrayBuffer;\r\n 'stream': ReadableStream<Uint8Array> | null;\r\n 'void': void;\r\n}[T];\r\n\r\nconst safeMethods = ['GET', 'HEAD', 'OPTIONS'];\r\n\r\nfunction isSafeMethod(method: string): boolean {\r\n return safeMethods.includes(method);\r\n}\r\n\r\nexport interface CredentialProvider {\r\n /**\r\n * Fournit les en-têtes d'authentification pour une requête HTTP.\r\n * \r\n * @param isSafe - indique si la requête est considérée safe (GET, HEAD, OPTIONS)\r\n * @param url - l'URL de la requête\r\n * @param auth - indique si l'authentification est requise\r\n * @param hdr - si défini, les en-têtes de la requête auquel ajouter les en-têtes d'authentification \r\n * si non défini, les en-têtes d'authentification seuls sont retournés\r\n * @returns les en-têtes d'authentification\r\n */\r\n getCredentialsFor(isSafe: boolean, url: string, auth?: boolean, hdr?: HeadersInit): Promise<HeadersInit>\r\n};\r\n\r\nexport interface HttpBackend {\r\n requestAsync<const T extends ReturnType>(\r\n method: string,\r\n route: RouteOrString,\r\n data: any,\r\n retType: T,\r\n auth?: boolean,\r\n expectedStatus?: number | number[],\r\n hdr?: HeadersInit\r\n ): Promise<ReturnValueType<T>>;\r\n\r\n getAsync<const T extends ReturnType>(\r\n route: RouteOrString,\r\n retType: T,\r\n auth?: boolean\r\n ): Promise<ReturnValueType<T>>;\r\n getJsonAsync(route: RouteOrString, auth?: boolean): Promise<unknown | null>;\r\n getJsonAsync<T>(route: RouteOrString, auth?: boolean): Promise<T | null>;\r\n getStringAsync(route: RouteOrString, auth?: boolean): Promise<string>;\r\n\r\n getNullableAsync<const T extends NonVoidReturnType>(\r\n route: RouteOrString,\r\n retType: T,\r\n auth?: boolean\r\n ): Promise<ReturnValueType<T> | null>;\r\n getNullableStringAsync(route: RouteOrString, auth?: boolean): Promise<string | null>;\r\n\r\n postAsync(route: RouteOrString, data: any, type?: string): Promise<void>;\r\n postJsonAsync(route: RouteOrString, data: any, json?: boolean): Promise<void>;\r\n postGetJsonAsync(route: RouteOrString, data: any, json?: boolean): Promise<unknown>;\r\n postGetJsonAsync<T>(route: RouteOrString, data: any, json?: boolean): Promise<T>;\r\n\r\n putAsync(route: RouteOrString, data: any, type?: string): Promise<void>;\r\n putJsonAsync(route: RouteOrString, data: any, json?: boolean): Promise<void>;\r\n putGetJsonAsync(route: RouteOrString, data: any, json?: boolean): Promise<unknown>;\r\n putGetJsonAsync<T>(route: RouteOrString, data: any, json?: boolean): Promise<T>;\r\n\r\n patchAsync(route: RouteOrString, data: any, type?: string): Promise<void>;\r\n patchJsonAsync(route: RouteOrString, data: any, json?: boolean): Promise<void>;\r\n patchGetJsonAsync(route: RouteOrString, data: any, json?: boolean): Promise<unknown>;\r\n patchGetJsonAsync<T>(route: RouteOrString, data: any, json?: boolean): Promise<T>;\r\n\r\n deleteAsync(route: RouteOrString): Promise<void>;\r\n deleteGetJsonAsync(route: RouteOrString): Promise<unknown>;\r\n deleteGetJsonAsync<T>(route: RouteOrString): Promise<T>;\r\n};\r\n\r\nfunction isOk(r: Response, expected?: number | number[]): boolean {\r\n if (expected == null) return r.ok;\r\n if (Array.isArray(expected)) return expected.includes(r.status);\r\n return r.status === expected;\r\n}\r\n\r\nasync function rawRequestAsync(\r\n method: string,\r\n url: string,\r\n data: any,\r\n expectedStatus?: number | number[],\r\n hdr?: HeadersInit\r\n): Promise<Response> {\r\n let response: Response;\r\n try {\r\n let request = new Request(url, {\r\n method: method,\r\n headers: hdr,\r\n body: data,\r\n });\r\n response = await fetch(request);\r\n if (isOk(response, expectedStatus)) return response;\r\n } catch (e: any) {\r\n throw new NetworkError({ method, url }, e.message);\r\n }\r\n // Il y a une erreur. On extraie le message d'erreur du corps de la réponse\r\n if (response.headers.get('Content-Type')?.includes('application/json')) {\r\n let payload: any;\r\n try {\r\n payload = await response.json();\r\n } catch (e) {\r\n throw new StatusError({ method, url }, response.statusText, response.status);\r\n }\r\n if (typeof payload === 'object' && payload != null) {\r\n throw new ApiError({ method, url }, response.statusText, response.status, payload);\r\n }\r\n }\r\n throw new StatusError({ method, url }, response.statusText, response.status);\r\n}\r\n\r\n\r\nexport default function (r: RouteResolver, cp: CredentialProvider): HttpBackend {\r\n function authRawRequestAsync(\r\n method: string,\r\n route: RouteOrString,\r\n data: any,\r\n auth?: boolean,\r\n expectedStatus?: number | number[],\r\n hdr?: HeadersInit\r\n ): Promise<Response> {\r\n method = method.toUpperCase();\r\n const url = typeof route === 'string' ? route : r(route);\r\n return cp.getCredentialsFor(isSafeMethod(method), url, auth, hdr).then(\r\n hdr => rawRequestAsync(method, url, data, expectedStatus, hdr)\r\n );\r\n }\r\n\r\n function requestAsync<const T extends ReturnType>(\r\n method: string,\r\n route: RouteOrString,\r\n data: any,\r\n retType: T,\r\n auth?: boolean,\r\n expectedStatus?: number | number[],\r\n hdr?: HeadersInit\r\n ): Promise<ReturnValueType<T>> {\r\n const reqTask = authRawRequestAsync(method, route, data, auth, expectedStatus, hdr);\r\n if (retType === 'void') return reqTask.then(_ => void 0 as ReturnValueType<T>);\r\n else return reqTask.then(\r\n (response: Response) => {\r\n if (retType === 'stream') return response.body;\r\n else return response[retType as CallableReturnType]().catch((e) => {\r\n throw new PayloadError({ method, url: typeof route === 'string' ? route : r(route) }, e.message);\r\n });\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Une requête avec un type mime spécifié\r\n */\r\n function typedRequestAsync<const T extends ReturnType>(\r\n method: string,\r\n route: RouteOrString,\r\n data: any,\r\n retType: T,\r\n auth?: boolean,\r\n expectedStatus?: number | number[],\r\n type?: string\r\n ): Promise<ReturnValueType<T>> {\r\n if (type == null) return requestAsync(method, route, data, retType, auth, expectedStatus);\r\n const hdr = { 'Content-Type': type };\r\n return requestAsync(method, route, data, retType, auth, expectedStatus, hdr);\r\n }\r\n\r\n function jsonDataRequestAsync(\r\n method: string,\r\n route: RouteOrString,\r\n getResponse: boolean,\r\n data: any,\r\n json?: boolean\r\n ): Promise<any> {\r\n if (!json) data = JSON.stringify(data);\r\n const hdr = { 'Content-Type': 'application/json' };\r\n return authRawRequestAsync(method, route, data, true, [200, 201, 204], hdr).then(\r\n (response: Response) => {\r\n if (!getResponse) return void 0;\r\n if (response.status === 204) return null;\r\n else return response.json().catch((e) => {\r\n throw new PayloadError({ method, url: typeof route === 'string' ? route : r(route) }, e.message);\r\n });\r\n }\r\n );\r\n }\r\n\r\n function getNullableAsync<const T extends NonVoidReturnType>(\r\n route: RouteOrString,\r\n retType: T,\r\n auth?: boolean,\r\n hdr?: HeadersInit\r\n ): Promise<ReturnValueType<T> | null> {\r\n return authRawRequestAsync(\"GET\", route, null, auth, [200, 204], hdr).then(\r\n (response: Response) => {\r\n if (response.status === 204) return null;\r\n if (retType === 'stream') return response.body;\r\n else return response[retType as CallableReturnType]().catch((e) => {\r\n throw new PayloadError({ method: 'GET', url: typeof route === 'string' ? route : r(route) }, e.message);\r\n });\r\n }\r\n );\r\n }\r\n\r\n\r\n return (\r\n {\r\n requestAsync(method, route, data, retType, auth?, expectedStatus?, hdr?) {\r\n return requestAsync(method, route, data, retType, auth, expectedStatus, hdr);\r\n },\r\n\r\n getAsync(route, retType, auth?) {\r\n return requestAsync(\"GET\", route, null, retType, auth);\r\n },\r\n getJsonAsync(route: RouteOrString, auth?: boolean): Promise<unknown> {\r\n return getNullableAsync(route, 'json', auth);\r\n },\r\n getStringAsync(route: RouteOrString, auth?: boolean): Promise<string> {\r\n return requestAsync(\"GET\", route, null, \"text\", auth);\r\n },\r\n getNullableAsync(route, retType, auth?) {\r\n return getNullableAsync(route, retType, auth)\r\n },\r\n getNullableStringAsync(route: RouteOrString, auth?: boolean): Promise<string | null> {\r\n return getNullableAsync(route, 'text', auth);\r\n },\r\n\r\n postAsync(route, data: any, type?: string): Promise<void> {\r\n return typedRequestAsync(\"POST\", route, data, 'void', true, [200, 201], type);\r\n },\r\n postJsonAsync(route: RouteOrString, data: any, json?: boolean): Promise<void> {\r\n return jsonDataRequestAsync(\"POST\", route, false, data, json);\r\n },\r\n postGetJsonAsync(route: RouteOrString, data: any, json?: boolean): Promise<unknown> {\r\n return jsonDataRequestAsync(\"POST\", route, true, data, json);\r\n },\r\n\r\n putAsync(route, data, type?: string): Promise<void> {\r\n return typedRequestAsync(\"PUT\", route, data, 'void', true, [200, 204], type);\r\n },\r\n putJsonAsync(route: RouteOrString, data: any, json?: boolean): Promise<void> {\r\n return jsonDataRequestAsync(\"PUT\", route, false, data, json);\r\n },\r\n putGetJsonAsync(route: RouteOrString, data: any, json?: boolean): Promise<unknown> {\r\n return jsonDataRequestAsync(\"PUT\", route, true, data, json);\r\n },\r\n\r\n patchAsync(route, data: any, type?: string): Promise<void> {\r\n return typedRequestAsync(\"PATCH\", route, data, 'void', true, [200, 204], type);\r\n },\r\n patchJsonAsync(route: RouteOrString, data: any, json?: boolean): Promise<void> {\r\n return jsonDataRequestAsync(\"PATCH\", route, false, data, json);\r\n },\r\n patchGetJsonAsync(route: RouteOrString, data: any, json?: boolean): Promise<unknown> {\r\n return jsonDataRequestAsync(\"PATCH\", route, true, data, json);\r\n },\r\n\r\n deleteAsync(route): Promise<void> {\r\n return requestAsync(\"DELETE\", route, null, 'void', true, [200, 204]);\r\n },\r\n deleteGetJsonAsync(route: RouteOrString): Promise<unknown> {\r\n return requestAsync(\"DELETE\", route, null, 'json', true);\r\n },\r\n });\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"backend.js","sourceRoot":"","sources":["../../src/api/http/backend.ts"],"names":[],"mappings":"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","sourcesContent":["import { NetworkError, StatusError, ApiError, PayloadError } from \"./error\";\r\nimport type { Route, RouteResolver } from \"./route\";\r\n\r\ntype RouteOrString = Route | string;\r\n\r\nexport type NonVoidReturnType = 'json' | 'text' | 'blob' | 'arrayBuffer' | 'stream';\r\nexport type ReturnType = NonVoidReturnType | 'void';\r\ntype CallableReturnType = Exclude<NonVoidReturnType, 'stream'>;\r\n\r\nexport type ReturnValueType<T extends ReturnType> = {\r\n 'json': unknown;\r\n 'text': string;\r\n 'blob': Blob;\r\n 'arrayBuffer': ArrayBuffer;\r\n 'stream': ReadableStream<Uint8Array> | null;\r\n 'void': void;\r\n}[T];\r\n\r\nconst safeMethods = ['GET', 'HEAD', 'OPTIONS'];\r\n\r\nfunction isSafeMethod(method: string): boolean {\r\n return safeMethods.includes(method);\r\n}\r\n\r\nexport interface HttpRequestOptions {\r\n credentials?: RequestCredentials;\r\n mode?: RequestMode;\r\n headers?: HeadersInit;\r\n}\r\n\r\nexport interface CredentialProvider {\r\n /**\r\n * Fournit les en-têtes d'authentification pour une requête HTTP.\r\n * \r\n * @param isSafe - indique si la requête est considérée safe (GET, HEAD, OPTIONS)\r\n * @param url - l'URL de la requête\r\n * @param auth - indique si l'authentification est requise\r\n * @returns les options de requête à employer\r\n */\r\n getCredentialsFor(isSafe: boolean, url: string, auth?: boolean): Promise<HttpRequestOptions>\r\n};\r\n\r\nexport interface HttpBackend {\r\n requestAsync<const T extends ReturnType>(\r\n method: string,\r\n route: RouteOrString,\r\n data: any,\r\n retType: T,\r\n auth?: boolean,\r\n expectedStatus?: number | number[],\r\n hdr?: HeadersInit\r\n ): Promise<ReturnValueType<T>>;\r\n\r\n getAsync<const T extends ReturnType>(\r\n route: RouteOrString,\r\n retType: T,\r\n auth?: boolean\r\n ): Promise<ReturnValueType<T>>;\r\n getJsonAsync(route: RouteOrString, auth?: boolean): Promise<unknown | null>;\r\n getJsonAsync<T>(route: RouteOrString, auth?: boolean): Promise<T | null>;\r\n getStringAsync(route: RouteOrString, auth?: boolean): Promise<string>;\r\n\r\n getNullableAsync<const T extends NonVoidReturnType>(\r\n route: RouteOrString,\r\n retType: T,\r\n auth?: boolean\r\n ): Promise<ReturnValueType<T> | null>;\r\n getNullableStringAsync(route: RouteOrString, auth?: boolean): Promise<string | null>;\r\n\r\n postAsync(route: RouteOrString, data: any, type?: string): Promise<void>;\r\n postJsonAsync(route: RouteOrString, data: any, json?: boolean): Promise<void>;\r\n postGetJsonAsync(route: RouteOrString, data: any, json?: boolean): Promise<unknown>;\r\n postGetJsonAsync<T>(route: RouteOrString, data: any, json?: boolean): Promise<T>;\r\n\r\n putAsync(route: RouteOrString, data: any, type?: string): Promise<void>;\r\n putJsonAsync(route: RouteOrString, data: any, json?: boolean): Promise<void>;\r\n putGetJsonAsync(route: RouteOrString, data: any, json?: boolean): Promise<unknown>;\r\n putGetJsonAsync<T>(route: RouteOrString, data: any, json?: boolean): Promise<T>;\r\n\r\n patchAsync(route: RouteOrString, data: any, type?: string): Promise<void>;\r\n patchJsonAsync(route: RouteOrString, data: any, json?: boolean): Promise<void>;\r\n patchGetJsonAsync(route: RouteOrString, data: any, json?: boolean): Promise<unknown>;\r\n patchGetJsonAsync<T>(route: RouteOrString, data: any, json?: boolean): Promise<T>;\r\n\r\n deleteAsync(route: RouteOrString): Promise<void>;\r\n deleteGetJsonAsync(route: RouteOrString): Promise<unknown>;\r\n deleteGetJsonAsync<T>(route: RouteOrString): Promise<T>;\r\n};\r\n\r\nfunction mergeHeaders(hdr1?: HeadersInit, hdr2?: HeadersInit): HeadersInit | undefined {\r\n if (hdr1 == null) return hdr2;\r\n if (hdr2 == null) return hdr1;\r\n const merged = new Headers(hdr1);\r\n for (const [key, value] of (new Headers(hdr2)).entries()) {\r\n merged.set(key, value);\r\n }\r\n return merged;\r\n}\r\n\r\nfunction isOk(r: Response, expected?: number | number[]): boolean {\r\n if (expected == null) return r.ok;\r\n if (Array.isArray(expected)) return expected.includes(r.status);\r\n return r.status === expected;\r\n}\r\n\r\nasync function rawRequestAsync(\r\n method: string,\r\n url: string,\r\n data: any,\r\n expectedStatus?: number | number[],\r\n hdr?: HeadersInit,\r\n options?: RequestInit\r\n): Promise<Response> {\r\n let response: Response;\r\n if (options == null) options = {};\r\n options.headers = mergeHeaders(hdr, options.headers);\r\n options.method = method;\r\n options.body = data;\r\n try {\r\n let request = new Request(url, options);\r\n response = await fetch(request);\r\n if (isOk(response, expectedStatus)) return response;\r\n } catch (e: any) {\r\n throw new NetworkError({ method, url }, e.message);\r\n }\r\n // Il y a une erreur. On extraie le message d'erreur du corps de la réponse\r\n if (response.headers.get('Content-Type')?.includes('application/json')) {\r\n let payload: any;\r\n try {\r\n payload = await response.json();\r\n } catch (e) {\r\n throw new StatusError({ method, url }, response.statusText, response.status);\r\n }\r\n if (typeof payload === 'object' && payload != null) {\r\n throw new ApiError({ method, url }, response.statusText, response.status, payload);\r\n }\r\n }\r\n throw new StatusError({ method, url }, response.statusText, response.status);\r\n}\r\n\r\n\r\nexport default function (r: RouteResolver, cp: CredentialProvider): HttpBackend {\r\n function authRawRequestAsync(\r\n method: string,\r\n route: RouteOrString,\r\n data: any,\r\n auth?: boolean,\r\n expectedStatus?: number | number[],\r\n hdr?: HeadersInit\r\n ): Promise<Response> {\r\n method = method.toUpperCase();\r\n const url = typeof route === 'string' ? route : r(route);\r\n return cp.getCredentialsFor(isSafeMethod(method), url, auth).then(\r\n options => rawRequestAsync(method, url, data, expectedStatus, hdr, options)\r\n );\r\n }\r\n\r\n function requestAsync<const T extends ReturnType>(\r\n method: string,\r\n route: RouteOrString,\r\n data: any,\r\n retType: T,\r\n auth?: boolean,\r\n expectedStatus?: number | number[],\r\n hdr?: HeadersInit\r\n ): Promise<ReturnValueType<T>> {\r\n const reqTask = authRawRequestAsync(method, route, data, auth, expectedStatus, hdr);\r\n if (retType === 'void') return reqTask.then(_ => void 0 as ReturnValueType<T>);\r\n else return reqTask.then(\r\n (response: Response) => {\r\n if (retType === 'stream') return response.body;\r\n else return response[retType as CallableReturnType]().catch((e) => {\r\n throw new PayloadError({ method, url: typeof route === 'string' ? route : r(route) }, e.message);\r\n });\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Une requête avec un type mime spécifié\r\n */\r\n function typedRequestAsync<const T extends ReturnType>(\r\n method: string,\r\n route: RouteOrString,\r\n data: any,\r\n retType: T,\r\n auth?: boolean,\r\n expectedStatus?: number | number[],\r\n type?: string\r\n ): Promise<ReturnValueType<T>> {\r\n if (type == null) return requestAsync(method, route, data, retType, auth, expectedStatus);\r\n const hdr = { 'Content-Type': type };\r\n return requestAsync(method, route, data, retType, auth, expectedStatus, hdr);\r\n }\r\n\r\n function jsonDataRequestAsync(\r\n method: string,\r\n route: RouteOrString,\r\n getResponse: boolean,\r\n data: any,\r\n json?: boolean\r\n ): Promise<any> {\r\n if (!json) data = JSON.stringify(data);\r\n const hdr = { 'Content-Type': 'application/json' };\r\n return authRawRequestAsync(method, route, data, true, [200, 201, 204], hdr).then(\r\n (response: Response) => {\r\n if (!getResponse) return void 0;\r\n if (response.status === 204) return null;\r\n else return response.json().catch((e) => {\r\n throw new PayloadError({ method, url: typeof route === 'string' ? route : r(route) }, e.message);\r\n });\r\n }\r\n );\r\n }\r\n\r\n function getNullableAsync<const T extends NonVoidReturnType>(\r\n route: RouteOrString,\r\n retType: T,\r\n auth?: boolean,\r\n hdr?: HeadersInit\r\n ): Promise<ReturnValueType<T> | null> {\r\n return authRawRequestAsync(\"GET\", route, null, auth, [200, 204], hdr).then(\r\n (response: Response) => {\r\n if (response.status === 204) return null;\r\n if (retType === 'stream') return response.body;\r\n else return response[retType as CallableReturnType]().catch((e) => {\r\n throw new PayloadError({ method: 'GET', url: typeof route === 'string' ? route : r(route) }, e.message);\r\n });\r\n }\r\n );\r\n }\r\n\r\n\r\n return (\r\n {\r\n requestAsync(method, route, data, retType, auth?, expectedStatus?, hdr?) {\r\n return requestAsync(method, route, data, retType, auth, expectedStatus, hdr);\r\n },\r\n\r\n getAsync(route, retType, auth?) {\r\n return requestAsync(\"GET\", route, null, retType, auth);\r\n },\r\n getJsonAsync(route: RouteOrString, auth?: boolean): Promise<unknown> {\r\n return getNullableAsync(route, 'json', auth);\r\n },\r\n getStringAsync(route: RouteOrString, auth?: boolean): Promise<string> {\r\n return requestAsync(\"GET\", route, null, \"text\", auth);\r\n },\r\n getNullableAsync(route, retType, auth?) {\r\n return getNullableAsync(route, retType, auth)\r\n },\r\n getNullableStringAsync(route: RouteOrString, auth?: boolean): Promise<string | null> {\r\n return getNullableAsync(route, 'text', auth);\r\n },\r\n\r\n postAsync(route, data: any, type?: string): Promise<void> {\r\n return typedRequestAsync(\"POST\", route, data, 'void', true, [200, 201], type);\r\n },\r\n postJsonAsync(route: RouteOrString, data: any, json?: boolean): Promise<void> {\r\n return jsonDataRequestAsync(\"POST\", route, false, data, json);\r\n },\r\n postGetJsonAsync(route: RouteOrString, data: any, json?: boolean): Promise<unknown> {\r\n return jsonDataRequestAsync(\"POST\", route, true, data, json);\r\n },\r\n\r\n putAsync(route, data, type?: string): Promise<void> {\r\n return typedRequestAsync(\"PUT\", route, data, 'void', true, [200, 204], type);\r\n },\r\n putJsonAsync(route: RouteOrString, data: any, json?: boolean): Promise<void> {\r\n return jsonDataRequestAsync(\"PUT\", route, false, data, json);\r\n },\r\n putGetJsonAsync(route: RouteOrString, data: any, json?: boolean): Promise<unknown> {\r\n return jsonDataRequestAsync(\"PUT\", route, true, data, json);\r\n },\r\n\r\n patchAsync(route, data: any, type?: string): Promise<void> {\r\n return typedRequestAsync(\"PATCH\", route, data, 'void', true, [200, 204], type);\r\n },\r\n patchJsonAsync(route: RouteOrString, data: any, json?: boolean): Promise<void> {\r\n return jsonDataRequestAsync(\"PATCH\", route, false, data, json);\r\n },\r\n patchGetJsonAsync(route: RouteOrString, data: any, json?: boolean): Promise<unknown> {\r\n return jsonDataRequestAsync(\"PATCH\", route, true, data, json);\r\n },\r\n\r\n deleteAsync(route): Promise<void> {\r\n return requestAsync(\"DELETE\", route, null, 'void', true, [200, 204]);\r\n },\r\n deleteGetJsonAsync(route: RouteOrString): Promise<unknown> {\r\n return requestAsync(\"DELETE\", route, null, 'json', true);\r\n },\r\n });\r\n}\r\n"]}
|
package/backend/capytale/auth.js
CHANGED
|
@@ -6,63 +6,89 @@ function addApiAccessHeader(hdr) {
|
|
|
6
6
|
return hdr;
|
|
7
7
|
}
|
|
8
8
|
const errorMsg = 'Impossible de récupérer le jeton CSRF';
|
|
9
|
-
let
|
|
10
|
-
function getCsrfTkAsync() {
|
|
9
|
+
let csrfTk;
|
|
10
|
+
async function getCsrfTkAsync() {
|
|
11
11
|
if (ltiSession.isActive)
|
|
12
|
-
return
|
|
13
|
-
if (null !=
|
|
14
|
-
return
|
|
12
|
+
return '';
|
|
13
|
+
if (null != csrfTk)
|
|
14
|
+
return csrfTk;
|
|
15
15
|
const url = resolve({ name: 'session', id: 'token' });
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
.then((resp) => {
|
|
16
|
+
try {
|
|
17
|
+
const resp = await fetch(url);
|
|
19
18
|
if (!resp.ok) {
|
|
20
|
-
|
|
19
|
+
csrfTk = undefined;
|
|
21
20
|
throw new Error(errorMsg);
|
|
22
21
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
22
|
+
csrfTk = await resp.text();
|
|
23
|
+
return csrfTk;
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
csrfTk = undefined;
|
|
27
|
+
throw new AggregateError([error], errorMsg);
|
|
28
|
+
}
|
|
29
29
|
}
|
|
30
30
|
export default {
|
|
31
|
-
getCredentialsFor(isSafe, url, auth
|
|
32
|
-
const
|
|
31
|
+
async getCredentialsFor(isSafe, url, auth) {
|
|
32
|
+
const urlO = new URL(url, window.location.href);
|
|
33
|
+
const sameOrigin = urlO.origin === window.location.origin;
|
|
34
|
+
let sameApp;
|
|
35
|
+
if (sameOrigin) {
|
|
36
|
+
sameApp = true;
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
sameApp = urlO.hostname.endsWith(window.location.hostname);
|
|
40
|
+
}
|
|
41
|
+
if (!sameApp) {
|
|
42
|
+
return { mode: 'cors' };
|
|
43
|
+
}
|
|
44
|
+
const secured = urlO.protocol === 'https:';
|
|
45
|
+
if (!secured) {
|
|
46
|
+
if (sameOrigin) {
|
|
47
|
+
return {};
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
return { mode: 'cors' };
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const options = {
|
|
54
|
+
headers: new Headers(),
|
|
55
|
+
};
|
|
56
|
+
if (!sameOrigin) {
|
|
57
|
+
options.mode = 'cors';
|
|
58
|
+
}
|
|
59
|
+
const addApiHdr = (auth === true) && sameOrigin;
|
|
33
60
|
if (auth == null)
|
|
34
61
|
auth = true;
|
|
35
|
-
if (
|
|
36
|
-
|
|
37
|
-
if (!(hdr instanceof Headers))
|
|
38
|
-
hdr = new Headers(hdr);
|
|
39
|
-
const urlO = new URL(url, window.location.href);
|
|
40
|
-
if (urlO.origin === window.location.origin) {
|
|
41
|
-
if (isSafe) {
|
|
62
|
+
if (isSafe) {
|
|
63
|
+
if (auth) {
|
|
42
64
|
if (ltiSession.isActive) {
|
|
43
|
-
|
|
44
|
-
ltiSession.addLtiAuthHeader(hdr);
|
|
45
|
-
}
|
|
65
|
+
ltiSession.addLtiAuthHeader(options.headers);
|
|
46
66
|
}
|
|
47
|
-
|
|
48
|
-
|
|
67
|
+
else {
|
|
68
|
+
if (!sameOrigin) {
|
|
69
|
+
options.credentials = 'include';
|
|
70
|
+
}
|
|
49
71
|
}
|
|
50
72
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
73
|
+
if (addApiHdr) {
|
|
74
|
+
addApiAccessHeader(options.headers);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
if (auth) {
|
|
79
|
+
if (ltiSession.isActive) {
|
|
80
|
+
ltiSession.addLtiAuthHeader(options.headers);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
if (!sameOrigin) {
|
|
84
|
+
options.credentials = 'include';
|
|
61
85
|
}
|
|
86
|
+
const tk = await getCsrfTkAsync();
|
|
87
|
+
options.headers.set('X-CSRF-Token', tk);
|
|
62
88
|
}
|
|
63
89
|
}
|
|
64
90
|
}
|
|
65
|
-
return
|
|
91
|
+
return options;
|
|
66
92
|
},
|
|
67
93
|
};
|
|
68
94
|
//# sourceMappingURL=auth.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/backend/capytale/auth.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,YAAY,CAAC;AACjC,OAAO,UAAU,MAAM,OAAO,CAAC;AAG/B,oBAAoB;AACpB,SAAS,kBAAkB,CAAC,GAAY;IACpC,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IACpC,OAAO,GAAG,CAAC;AACf,CAAC;AAED,MAAM,QAAQ,GAAG,uCAAuC,CAAC;AACzD,IAAI,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/backend/capytale/auth.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CredentialProvider, HttpRequestOptions } from '../../api/http/backend';\nimport resolve from \"./resolver\";\nimport ltiSession from \"./lti\";\n\n\n// API access header\nfunction addApiAccessHeader(hdr: Headers): Headers {\n hdr.set('X-API-ACCESS', 'capytale');\n return hdr;\n}\n\nconst errorMsg = 'Impossible de récupérer le jeton CSRF';\nlet csrfTk: string | undefined;\n\nasync function getCsrfTkAsync(): Promise<string> {\n if (ltiSession.isActive) return '';\n if (null != csrfTk) return csrfTk;\n const url = resolve({ name: 'session', id: 'token' });\n try {\n const resp = await fetch(url);\n if (!resp.ok) {\n csrfTk = undefined;\n throw new Error(errorMsg);\n }\n csrfTk = await resp.text();\n return csrfTk;\n } catch (error) {\n csrfTk = undefined;\n throw new AggregateError([error], errorMsg);\n }\n}\n\nexport default {\n async getCredentialsFor(isSafe: boolean, url: string, auth?: boolean) {\n const urlO = new URL(url, window.location.href);\n const sameOrigin = urlO.origin === window.location.origin;\n let sameApp: boolean;\n if (sameOrigin) {\n sameApp = true;\n }\n else {\n sameApp = urlO.hostname.endsWith(window.location.hostname);\n }\n if (!sameApp) {\n return { mode: 'cors' };\n }\n const secured = urlO.protocol === 'https:';\n if (!secured) {\n if (sameOrigin) {\n return {};\n } else {\n return { mode: 'cors' };\n }\n }\n\n const options: HttpRequestOptions = {\n headers: new Headers(),\n };\n if (!sameOrigin) {\n options.mode = 'cors';\n }\n\n const addApiHdr = (auth === true) && sameOrigin;\n if (auth == null) auth = true;\n if (isSafe) {\n if (auth) {\n if (ltiSession.isActive) {\n ltiSession.addLtiAuthHeader(options.headers as Headers);\n } else {\n if (!sameOrigin) {\n options.credentials = 'include';\n }\n }\n }\n if (addApiHdr) {\n addApiAccessHeader(options.headers as Headers);\n }\n } else {\n if (auth) {\n if (ltiSession.isActive) {\n ltiSession.addLtiAuthHeader(options.headers as Headers);\n } else {\n if (!sameOrigin) {\n options.credentials = 'include';\n }\n const tk = await getCsrfTkAsync();\n (options.headers as Headers).set('X-CSRF-Token', tk);\n }\n }\n }\n return options;\n },\n} as CredentialProvider;"]}
|
|
@@ -100,6 +100,11 @@ function evalResolve(route) {
|
|
|
100
100
|
else
|
|
101
101
|
return `${cActApiEp}n/${route.id}/e/${route.uid}`;
|
|
102
102
|
}
|
|
103
|
+
function servicesResolve(route) {
|
|
104
|
+
if (!route.path.startsWith('/'))
|
|
105
|
+
route.path = '/' + route.path;
|
|
106
|
+
return `//services.${window.location.hostname}${route.path}`;
|
|
107
|
+
}
|
|
103
108
|
function resolve(route) {
|
|
104
109
|
switch (route.name) {
|
|
105
110
|
case 'fs.list': return `${cActApiEp}n/${route.id}/fields`;
|
|
@@ -121,14 +126,15 @@ function resolve(route) {
|
|
|
121
126
|
case 'vanilla': return vanillaEp + route.service + '.php';
|
|
122
127
|
case 'vs-db': return '/web/vs-db/api/n/' + route.id;
|
|
123
128
|
case 'activityNav': return navResolve(route);
|
|
129
|
+
case 'services': return servicesResolve(route);
|
|
124
130
|
}
|
|
125
131
|
return '';
|
|
126
132
|
}
|
|
127
133
|
export default function (route, absolute = false) {
|
|
128
134
|
const relative = resolve(route);
|
|
129
|
-
if (absolute)
|
|
130
|
-
return window.location.origin + relative;
|
|
131
|
-
else
|
|
135
|
+
if (!absolute)
|
|
132
136
|
return relative;
|
|
137
|
+
const url = new URL(relative, window.location.href);
|
|
138
|
+
return url.href;
|
|
133
139
|
}
|
|
134
140
|
//# sourceMappingURL=resolver.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/backend/capytale/resolver.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/backend/capytale/resolver.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Route } from \"../../api/http/route\";\nimport ltiSession from \"./lti\";\n\nconst cActApiEp = '/web/c-act/api/';\nconst cAuthApiEp = '/web/c-auth/api/';\nconst cUiApiEp = '/web/c-ui/api/';\nconst cHdlsEp = '/web/c-hdls/';\nconst nodeEp = '/web/node/';\nconst userEp = '/web/userinfos?uid_raw=';\nconst sessionEp = '/web/session/';\nconst frontEp = '/web/';\nconst vanillaEp = '/vanilla/';\n\nfunction restResolve(route: Route): string {\n let url;\n switch (route.type) {\n case 'node': url = nodeEp + route.id + '?_format=json'; break;\n case 'user': url = userEp + route.id + '&_format=json'; break;\n }\n if (url == null) return '';\n if (route?.noecho) url += '&_noecho=1';\n return url;\n}\n\nfunction typeResolve(route: Route): string {\n if (route.type) return `${cActApiEp}t/${route.type}`;\n else return `${cActApiEp}t`;\n}\n\nfunction typeFavoriteResolve(route: Route): string {\n if (route.type) return `${cUiApiEp}favorite_activity/${route.type}`;\n else return `${cUiApiEp}favorite_activity`;\n}\n\nfunction frontResolve(route: Route): string {\n switch (route.page) {\n case 'bib': return frontEp + 'bibliotheque';\n case 'assignments': return frontEp + 'assignments/' + route.id;\n case 'edit': return frontEp + 'node/' + route.id + '/edit';\n case 'my': return frontEp + 'my';\n }\n return frontEp;\n}\n\nfunction stdNavResolve(route: Route): string {\n if (route.page === 'return') {\n switch (route.mode) {\n case 'view': return frontEp + 'bibliotheque';\n case 'create': return frontEp + 'my';\n case 'review': return frontEp + 'assignments/' + route.id;\n case 'assignment': return frontEp + 'my';\n }\n return frontEp + 'my';\n } else if (route.page === 'edit') {\n return `${cHdlsEp}node/${route.id}/edit`;\n } else if (route.page === 'create') {\n return `${cHdlsEp}activity/${route.type}/add`;\n } else {\n return frontEp + 'my';\n }\n}\n\nfunction ltiNavResolve(route: Route): string {\n switch (route.page) {\n case 'return':\n return ltiSession.getProperty('returnUrl');\n case 'edit':\n return ltiSession.getProperty('formUrl');\n case 'create':\n return frontEp + 'tks/lti/tool/activity/add/' + route.type + '?lti=' + ltiSession.getSessId();\n }\n return '';\n}\n\nfunction navResolve(route: Route): string {\n if (ltiSession.isActive) return ltiNavResolve(route);\n else return stdNavResolve(route);\n}\n\nfunction sesameUserResole(route: Route): string {\n if (route.count) return cAuthApiEp + 'sesame/user/count';\n if (route.uid) return cAuthApiEp + 'sesame/user/' + route.uid;\n return cAuthApiEp + 'sesame/user';\n}\n\nfunction sesameCodeResole(route: Route): string {\n if (route.code) return cAuthApiEp + 'sesame/code/' + route.code;\n return cAuthApiEp + 'sesame/code';\n}\n\nfunction evalResolve(route: Route): string {\n if (route.uid == null) return `${cActApiEp}n/${route.id}/e`;\n else return `${cActApiEp}n/${route.id}/e/${route.uid}`;\n}\n\nfunction servicesResolve(route: Route): string {\n if (!(route.path as string).startsWith('/')) route.path = '/' + route.path;\n return `//services.${window.location.hostname}${route.path}`;\n}\n\nfunction resolve(route: Route): string {\n switch (route.name) {\n case 'fs.list': return `${cActApiEp}n/${route.id}/fields`;\n case 'fs.field': return `${cActApiEp}n/${route.id}/fields/${route.field}`;\n case 'rest': return restResolve(route);\n case 'session': return sessionEp + route.id;\n case 'c-auth.me': return cAuthApiEp + 'me';\n case 'sa.list': return `${cActApiEp}n/${route.id}/assignments`;\n case 'sa.launch': return frontEp + 'c/' + route.code;\n case 'sa.eval': return evalResolve(route);\n case 'type': return typeResolve(route);\n case 'type.groups': return `${cActApiEp}g`;\n case 'type.weights': return `${cActApiEp}w`;\n case 'type.favorite': return typeFavoriteResolve(route);\n case 'front': return frontResolve(route);\n case 'ent': return cAuthApiEp + 'list';\n case 'sesame.user': return sesameUserResole(route);\n case 'sesame.code': return sesameCodeResole(route);\n case 'vanilla': return vanillaEp + route.service + '.php';\n case 'vs-db': return '/web/vs-db/api/n/' + route.id;\n case 'activityNav': return navResolve(route);\n case 'services': return servicesResolve(route);\n }\n return '';\n}\n\nexport default function (route: Route, absolute: boolean = false): string {\n const relative = resolve(route);\n if (!absolute) return relative;\n const url = new URL(relative, window.location.href);\n return url.href;\n}"]}
|