@capytale/activity.js 3.1.19 → 3.1.21

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.
@@ -3,6 +3,6 @@ import type { MeBackend } from "../../api/me/backend";
3
3
  import type { UserLoader } from "../../entity/user";
4
4
  import type { ActivityTypeBackend } from "../activityType/backend";
5
5
  import type { RouteResolver } from "../../api/http/route";
6
- import ActivitySession from ".";
7
- export type SessionLoader = (id: number, readOnly?: boolean) => Promise<ActivitySession>;
6
+ import ActivitySession, { ActivityMode } from ".";
7
+ export type SessionLoader = (id: number, readOnly?: boolean, mode?: ActivityMode) => Promise<ActivitySession>;
8
8
  export default function (res: RouteResolver, al: ActivityLoader, mb: MeBackend, ul: UserLoader, atl: ActivityTypeBackend): SessionLoader;
@@ -1,7 +1,7 @@
1
1
  import ActivityError from "../error";
2
2
  import ActivitySession from ".";
3
3
  export default function (res, al, mb, ul, atl) {
4
- async function loadSession(id, readOnly) {
4
+ async function loadSession(id, readOnly, mode) {
5
5
  const aPromise = al(id, readOnly);
6
6
  const mePromise = mb.getMeAsync();
7
7
  const a = await aPromise;
@@ -15,7 +15,12 @@ export default function (res, al, mb, ul, atl) {
15
15
  }
16
16
  else {
17
17
  if (a.isTeacher(me.uid)) {
18
- m = "create";
18
+ if ((mode === "create") || (mode === "view")) {
19
+ m = mode;
20
+ }
21
+ else {
22
+ m = "create";
23
+ }
19
24
  }
20
25
  else {
21
26
  m = "view";
@@ -29,7 +34,12 @@ export default function (res, al, mb, ul, atl) {
29
34
  throw new ActivityError("Vous devez être connecté pour accéder à cette activité.");
30
35
  }
31
36
  if (a.isTeacher(me.uid)) {
32
- m = "review";
37
+ if ((mode === "assignment") || (mode === "review")) {
38
+ m = mode;
39
+ }
40
+ else {
41
+ m = "review";
42
+ }
33
43
  student = await ul(a.assignmentNode.owner.value);
34
44
  }
35
45
  else if (a.isStudent(me.uid)) {
@@ -39,6 +49,9 @@ export default function (res, al, mb, ul, atl) {
39
49
  throw new ActivityError("Accès non autorisé.");
40
50
  }
41
51
  }
52
+ if ((mode != null) && (m !== mode)) {
53
+ console.log("Mode mismatch", `query param : ${mode}`, `inferred : ${m}`, "using inferred mode");
54
+ }
42
55
  const at = await atl.get(a.activityType);
43
56
  return new ActivitySession(res, a, at, me, m, student);
44
57
  }
@@ -1 +1 @@
1
- {"version":3,"file":"backend.js","sourceRoot":"","sources":["../../src/activity/activitySession/backend.ts"],"names":[],"mappings":"AAQA,OAAO,aAAa,MAAM,SAAS,CAAC;AAEpC,OAAO,eAAiC,MAAM,GAAG,CAAC;AAIlD,MAAM,CAAC,OAAO,WAAW,GAAkB,EAAE,EAAkB,EAAE,EAAa,EAAE,EAAc,EAAE,GAAwB;IACpH,KAAK,UAAU,WAAW,CAAC,EAAU,EAAE,QAAkB;QACrD,MAAM,QAAQ,GAAG,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAClC,MAAM,SAAS,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC;QACzB,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC;QAC3B,uCAAuC;QACvC,IAAI,OAAO,GAAqB,SAAS,CAAC;QAC1C,IAAI,CAAe,CAAC;QACpB,IAAI,IAAI,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;YAC3B,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;gBACb,CAAC,GAAG,MAAM,CAAC;YACf,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;oBACtB,CAAC,GAAG,QAAQ,CAAC;gBACjB,CAAC;qBAAM,CAAC;oBACJ,CAAC,GAAG,MAAM,CAAC;gBACf,CAAC;YACL,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,kBAAkB;gBAClC,MAAM,IAAI,aAAa,CAAC,uEAAuE,CAAC,CAAC;YACrG,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;gBACb,MAAM,IAAI,aAAa,CAAC,yDAAyD,CAAC,CAAC;YACvF,CAAC;YACD,IAAI,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,CAAC,GAAG,QAAQ,CAAC;gBACb,OAAO,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,KAAsB,CAAC,CAAC;YACtE,CAAC;iBAAM,IAAI,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7B,CAAC,GAAG,YAAY,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACJ,MAAM,IAAI,aAAa,CAAC,qBAAqB,CAAC,CAAC;YACnD,CAAC;QACL,CAAC;QACD,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QACzC,OAAO,IAAI,eAAe,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,WAAW,CAAC;AACvB,CAAC","sourcesContent":["import { RestReference } from \"~api/rest/restObject\";\nimport type { ActivityLoader } from \"~/activityBunch/backend\";\nimport type { MeBackend } from \"~api/me/backend\";\nimport type { UserLoader } from \"~entity/user\";\nimport type { ActivityTypeBackend } from \"~/activityType/backend\";\nimport type User from \"~entity/user\";\nimport type { RouteResolver } from \"~api/http/route\";\n\nimport ActivityError from \"~/error\";\n\nimport ActivitySession, { ActivityMode } from \".\";\n\nexport type SessionLoader = (id: number, readOnly?: boolean) => Promise<ActivitySession>;\n\nexport default function (res: RouteResolver, al: ActivityLoader, mb: MeBackend, ul: UserLoader, atl: ActivityTypeBackend): SessionLoader {\n async function loadSession(id: number, readOnly?: boolean): Promise<ActivitySession> {\n const aPromise = al(id, readOnly);\n const mePromise = mb.getMeAsync();\n const a = await aPromise;\n const me = await mePromise;\n // TODO: Détecter le cas hors connexion\n let student: User | undefined = undefined;\n let m: ActivityMode;\n if (null == a.assignmentNode) {\n if (me == null) {\n m = \"view\";\n } else {\n if (a.isTeacher(me.uid)) {\n m = \"create\";\n } else {\n m = \"view\";\n }\n }\n } else {\n if (a.code.value == 'student_activity')\n throw new ActivityError(\"Cette activité a été crée par un élève, elle ne peut pas être clonée.\");\n if (me == null) {\n throw new ActivityError(\"Vous devez être connecté pour accéder à cette activité.\");\n }\n if (a.isTeacher(me.uid)) {\n m = \"review\";\n student = await ul(a.assignmentNode.owner.value as RestReference);\n } else if (a.isStudent(me.uid)) {\n m = \"assignment\";\n } else {\n throw new ActivityError(\"Accès non autorisé.\");\n }\n }\n const at = await atl.get(a.activityType);\n return new ActivitySession(res, a, at, me, m, student);\n }\n return loadSession;\n}"]}
1
+ {"version":3,"file":"backend.js","sourceRoot":"","sources":["../../src/activity/activitySession/backend.ts"],"names":[],"mappings":"AAQA,OAAO,aAAa,MAAM,SAAS,CAAC;AAEpC,OAAO,eAAiC,MAAM,GAAG,CAAC;AAIlD,MAAM,CAAC,OAAO,WAAW,GAAkB,EAAE,EAAkB,EAAE,EAAa,EAAE,EAAc,EAAE,GAAwB;IACpH,KAAK,UAAU,WAAW,CAAC,EAAU,EAAE,QAAkB,EAAE,IAAmB;QAC1E,MAAM,QAAQ,GAAG,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAClC,MAAM,SAAS,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC;QACzB,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC;QAC3B,uCAAuC;QACvC,IAAI,OAAO,GAAqB,SAAS,CAAC;QAC1C,IAAI,CAAe,CAAC;QACpB,IAAI,IAAI,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;YAC3B,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;gBACb,CAAC,GAAG,MAAM,CAAC;YACf,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;oBACtB,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,CAAC;wBAC3C,CAAC,GAAG,IAAI,CAAC;oBACb,CAAC;yBAAM,CAAC;wBACJ,CAAC,GAAG,QAAQ,CAAC;oBACjB,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACJ,CAAC,GAAG,MAAM,CAAC;gBACf,CAAC;YACL,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,kBAAkB;gBAClC,MAAM,IAAI,aAAa,CAAC,uEAAuE,CAAC,CAAC;YACrG,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;gBACb,MAAM,IAAI,aAAa,CAAC,yDAAyD,CAAC,CAAC;YACvF,CAAC;YACD,IAAI,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;oBACjD,CAAC,GAAG,IAAI,CAAC;gBACb,CAAC;qBAAM,CAAC;oBACJ,CAAC,GAAG,QAAQ,CAAC;gBACjB,CAAC;gBACD,OAAO,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,KAAsB,CAAC,CAAC;YACtE,CAAC;iBAAM,IAAI,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7B,CAAC,GAAG,YAAY,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACJ,MAAM,IAAI,aAAa,CAAC,qBAAqB,CAAC,CAAC;YACnD,CAAC;QACL,CAAC;QACD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,iBAAiB,IAAI,EAAE,EAAE,cAAc,CAAC,EAAE,EAAE,qBAAqB,CAAC,CAAC;QACpG,CAAC;QACD,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QACzC,OAAO,IAAI,eAAe,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,WAAW,CAAC;AACvB,CAAC","sourcesContent":["import { RestReference } from \"~api/rest/restObject\";\nimport type { ActivityLoader } from \"~/activityBunch/backend\";\nimport type { MeBackend } from \"~api/me/backend\";\nimport type { UserLoader } from \"~entity/user\";\nimport type { ActivityTypeBackend } from \"~/activityType/backend\";\nimport type User from \"~entity/user\";\nimport type { RouteResolver } from \"~api/http/route\";\n\nimport ActivityError from \"~/error\";\n\nimport ActivitySession, { ActivityMode } from \".\";\n\nexport type SessionLoader = (id: number, readOnly?: boolean, mode?: ActivityMode) => Promise<ActivitySession>;\n\nexport default function (res: RouteResolver, al: ActivityLoader, mb: MeBackend, ul: UserLoader, atl: ActivityTypeBackend): SessionLoader {\n async function loadSession(id: number, readOnly?: boolean, mode?: ActivityMode): Promise<ActivitySession> {\n const aPromise = al(id, readOnly);\n const mePromise = mb.getMeAsync();\n const a = await aPromise;\n const me = await mePromise;\n // TODO: Détecter le cas hors connexion\n let student: User | undefined = undefined;\n let m: ActivityMode;\n if (null == a.assignmentNode) {\n if (me == null) {\n m = \"view\";\n } else {\n if (a.isTeacher(me.uid)) {\n if ((mode === \"create\") || (mode === \"view\")) {\n m = mode;\n } else {\n m = \"create\";\n }\n } else {\n m = \"view\";\n }\n }\n } else {\n if (a.code.value == 'student_activity')\n throw new ActivityError(\"Cette activité a été crée par un élève, elle ne peut pas être clonée.\");\n if (me == null) {\n throw new ActivityError(\"Vous devez être connecté pour accéder à cette activité.\");\n }\n if (a.isTeacher(me.uid)) {\n if ((mode === \"assignment\") || (mode === \"review\")) {\n m = mode;\n } else {\n m = \"review\";\n }\n student = await ul(a.assignmentNode.owner.value as RestReference);\n } else if (a.isStudent(me.uid)) {\n m = \"assignment\";\n } else {\n throw new ActivityError(\"Accès non autorisé.\");\n }\n }\n if ((mode != null) && (m !== mode)) {\n console.log(\"Mode mismatch\", `query param : ${mode}`, `inferred : ${m}`, \"using inferred mode\");\n }\n const at = await atl.get(a.activityType);\n return new ActivitySession(res, a, at, me, m, student);\n }\n return loadSession;\n}"]}
@@ -25,15 +25,6 @@ export type SesameBackend = {
25
25
  * @returns Une promesse résolue lorsque les utilisateurs sont mis à jour.
26
26
  */
27
27
  updateMultiUsers(data: MultiSesameUsersUpdateData): Promise<void>;
28
- /**
29
- * Supprime un utilisateur SESAME.
30
- *
31
- * @param data Les données permettant d'indetifier l'utilisateur.
32
- * @returns Une promesse résolue lorsque l'utilisateur est mis à jour.
33
- */
34
- deleteUser(data: {
35
- uid: number;
36
- }): Promise<void>;
37
28
  /**
38
29
  * Supprime plusieurs utilisateurs SESAME.
39
30
  *
@@ -21,10 +21,7 @@ export default function (hb) {
21
21
  return hb.patchJsonAsync(userRoute(data.uid), data);
22
22
  },
23
23
  updateMultiUsers(data) {
24
- return hb.patchJsonAsync(userRoute(), { action: 'update', data });
25
- },
26
- deleteUser(data) {
27
- return hb.deleteAsync(userRoute(data.uid));
24
+ return hb.postJsonAsync(userRoute(), { action: 'update', data });
28
25
  },
29
26
  deleteMultiUsers(uids) {
30
27
  return hb.postJsonAsync(userRoute(), { action: 'delete', uids });
@@ -1 +1 @@
1
- {"version":3,"file":"backend.js","sourceRoot":"","sources":["../../src/auth/sesame/backend.ts"],"names":[],"mappings":"AAMA,SAAS,SAAS,CAAC,MAAqB,IAAI;IACxC,IAAI,GAAG,IAAI,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;IAChD,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC;AACxC,CAAC;AAoED,MAAM,CAAC,OAAO,WAAW,EAAe;IACpC,OAAO;QACH,QAAQ;QACR,UAAU;YACN,OAAO,EAAE,CAAC,YAAY,CAAsB,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,CAAiC,CAAC;QACtH,CAAC;QACD,KAAK,CAAC,SAAS;YACX,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,YAAY,CAAe,SAAS,EAAE,CAAC,CAAC;YAC9D,KAAK,MAAM,IAAI,IAAI,IAAK,EAAE,CAAC;gBACvB,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACpD,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACxD,CAAC;YACD,OAAO,IAAK,CAAC;QACjB,CAAC;QACD,UAAU,CAAC,IAA0B;YACjC,OAAO,EAAE,CAAC,cAAc,CACpB,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EACnB,IAAI,CACP,CAAC;QACN,CAAC;QACD,gBAAgB,CAAC,IAAgC;YAC7C,OAAO,EAAE,CAAC,cAAc,CACpB,SAAS,EAAE,EACX,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAC7B,CAAC;QACN,CAAC;QACD,UAAU,CAAC,IAAI;YACX,OAAO,EAAE,CAAC,WAAW,CACjB,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CACtB,CAAC;QACN,CAAC;QACD,gBAAgB,CAAC,IAAI;YACjB,OAAO,EAAE,CAAC,aAAa,CACnB,SAAS,EAAE,EACX,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAC7B,CAAC;QACN,CAAC;QACD,QAAQ;QACR,KAAK,CAAC,SAAS;YACX,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,YAAY,CAAe,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;YAC1E,KAAK,MAAM,IAAI,IAAI,IAAK,EAAE,CAAC;gBACvB,IAAI,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,GAAI,IAAI,CAAC,GAAW,CAAC,CAAC;YAClD,CAAC;YACD,OAAO,IAAK,CAAC;QACjB,CAAC;QACD,KAAK,CAAC,UAAU,CAAC,IAAuB;YACpC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,YAAY,IAAI,CAAC,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;YACrF,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAQ,CAAC;YACxD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,gBAAgB,CAAa,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,IAAI,CAAC,CAAC;YAClF,IAAI,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,GAAI,IAAI,CAAC,GAAW,CAAC,CAAC;YAC9C,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,UAAU,CAAC,IAAY;YACnB,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,CAAC;KACJ,CAAC;AACN,CAAC","sourcesContent":["import type { SesameUserCountData, SesameUser, SesameUserUpdateData, MultiSesameUsersUpdateData } from \"./sesameUser\";\nimport type { SesameCode, NewSesameCodeData } from \"./sesameCode\";\n\nimport type { Route } from \"../../api/http/route\";\nimport type { HttpBackend } from \"../../api/http/backend\";\n\nfunction userRoute(uid: number | null = null): Route {\n if (uid == null) return { name: 'sesame.user' };\n return { name: 'sesame.user', uid };\n}\n\nexport type SesameBackend = {\n /**\n * Récupère le nombre d'utilisateurs SESAME créés par l'utilisateur courant\n * dans les 12 derniers mois ains que le maximum autorisé.\n */\n countUsers(): Promise<SesameUserCountData>;\n\n /**\n * Récupère la liste des utilisateurs SESAME gérés par l'utilisateur courant.\n */\n listUsers(): Promise<SesameUser[]>;\n\n /**\n * Met à jour un utilisateur SESAME.\n * \n * @param data Les données de mise à jour.\n * @returns Une promesse résolue lorsque l'utilisateur est mis à jour.\n */\n updateUser(data: SesameUserUpdateData): Promise<void>;\n\n /**\n * Met à jour plusieurs utilisateurs SESAME.\n * \n * @param data Les données de mise à jour.\n * @returns Une promesse résolue lorsque les utilisateurs sont mis à jour.\n */\n updateMultiUsers(data: MultiSesameUsersUpdateData): Promise<void>;\n\n /**\n * Supprime un utilisateur SESAME.\n * \n * @param data Les données permettant d'indetifier l'utilisateur.\n * @returns Une promesse résolue lorsque l'utilisateur est mis à jour.\n */\n deleteUser(data: { uid: number }): Promise<void>;\n\n /**\n * Supprime plusieurs utilisateurs SESAME.\n * \n * @param uids tableau des uid des utilisateurs à supprimer.\n * @returns Une promesse résolue lorsque les utilisateurs sont mis à jour.\n */\n deleteMultiUsers(uids: number[]): Promise<void>;\n\n /**\n * Récupère la liste des codes SESAME.\n */\n listCodes(): Promise<SesameCode[]>;\n\n /**\n * Crée un nouveau code SESAME.\n * \n * @param data Les données du code à créer.\n * @returns Le code créé.\n */\n createCode(data: NewSesameCodeData): Promise<SesameCode>;\n\n /**\n * Supprime un code SESAME.\n * \n * @param code Le code à supprimer.\n * @returns Une promesse résolue lorsque le code est supprimé.\n */\n deleteCode(code: string): Promise<void>;\n}\n\nexport default function (hb: HttpBackend): SesameBackend {\n return {\n // Users\n countUsers() {\n return hb.getJsonAsync<SesameUserCountData>({ name: 'sesame.user', count: true }) as Promise<SesameUserCountData>;\n },\n async listUsers(): Promise<SesameUser[]> {\n const list = await hb.getJsonAsync<SesameUser[]>(userRoute());\n for (const user of list!) {\n user.validity.grace = new Date(user.validity.grace);\n user.validity.final = new Date(user.validity.final);\n }\n return list!;\n },\n updateUser(data: SesameUserUpdateData): Promise<void> {\n return hb.patchJsonAsync(\n userRoute(data.uid),\n data\n );\n },\n updateMultiUsers(data: MultiSesameUsersUpdateData): Promise<void> {\n return hb.patchJsonAsync(\n userRoute(),\n { action: 'update', data }\n );\n },\n deleteUser(data) {\n return hb.deleteAsync(\n userRoute(data.uid),\n );\n },\n deleteMultiUsers(uids) {\n return hb.postJsonAsync(\n userRoute(),\n { action: 'delete', uids }\n );\n },\n // codes\n async listCodes(): Promise<SesameCode[]> {\n const list = await hb.getJsonAsync<SesameCode[]>({ name: 'sesame.code' });\n for (const code of list!) {\n code.exp = new Date(1000 * (code.exp as any));\n }\n return list!;\n },\n async createCode(data: NewSesameCodeData): Promise<SesameCode> {\n if ((data == null) || (!(data.exp instanceof Date))) throw new Error(\"Invalid data\");\n data.exp = Math.floor(data.exp.getTime() / 1000) as any;\n const code = await hb.postGetJsonAsync<SesameCode>({ name: 'sesame.code' }, data);\n code.exp = new Date(1000 * (code.exp as any));\n return code;\n },\n deleteCode(code: string): Promise<void> {\n return hb.deleteAsync({ name: 'sesame.code', code });\n }\n };\n}"]}
1
+ {"version":3,"file":"backend.js","sourceRoot":"","sources":["../../src/auth/sesame/backend.ts"],"names":[],"mappings":"AAMA,SAAS,SAAS,CAAC,MAAqB,IAAI;IACxC,IAAI,GAAG,IAAI,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;IAChD,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC;AACxC,CAAC;AA4DD,MAAM,CAAC,OAAO,WAAW,EAAe;IACpC,OAAO;QACH,QAAQ;QACR,UAAU;YACN,OAAO,EAAE,CAAC,YAAY,CAAsB,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,CAAiC,CAAC;QACtH,CAAC;QACD,KAAK,CAAC,SAAS;YACX,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,YAAY,CAAe,SAAS,EAAE,CAAC,CAAC;YAC9D,KAAK,MAAM,IAAI,IAAI,IAAK,EAAE,CAAC;gBACvB,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACpD,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACxD,CAAC;YACD,OAAO,IAAK,CAAC;QACjB,CAAC;QACD,UAAU,CAAC,IAA0B;YACjC,OAAO,EAAE,CAAC,cAAc,CACpB,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EACnB,IAAI,CACP,CAAC;QACN,CAAC;QACD,gBAAgB,CAAC,IAAgC;YAC7C,OAAO,EAAE,CAAC,aAAa,CACnB,SAAS,EAAE,EACX,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAC7B,CAAC;QACN,CAAC;QACD,gBAAgB,CAAC,IAAI;YACjB,OAAO,EAAE,CAAC,aAAa,CACnB,SAAS,EAAE,EACX,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAC7B,CAAC;QACN,CAAC;QACD,QAAQ;QACR,KAAK,CAAC,SAAS;YACX,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,YAAY,CAAe,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;YAC1E,KAAK,MAAM,IAAI,IAAI,IAAK,EAAE,CAAC;gBACvB,IAAI,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,GAAI,IAAI,CAAC,GAAW,CAAC,CAAC;YAClD,CAAC;YACD,OAAO,IAAK,CAAC;QACjB,CAAC;QACD,KAAK,CAAC,UAAU,CAAC,IAAuB;YACpC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,YAAY,IAAI,CAAC,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;YACrF,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAQ,CAAC;YACxD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,gBAAgB,CAAa,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,IAAI,CAAC,CAAC;YAClF,IAAI,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,GAAI,IAAI,CAAC,GAAW,CAAC,CAAC;YAC9C,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,UAAU,CAAC,IAAY;YACnB,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,CAAC;KACJ,CAAC;AACN,CAAC","sourcesContent":["import type { SesameUserCountData, SesameUser, SesameUserUpdateData, MultiSesameUsersUpdateData } from \"./sesameUser\";\nimport type { SesameCode, NewSesameCodeData } from \"./sesameCode\";\n\nimport type { Route } from \"../../api/http/route\";\nimport type { HttpBackend } from \"../../api/http/backend\";\n\nfunction userRoute(uid: number | null = null): Route {\n if (uid == null) return { name: 'sesame.user' };\n return { name: 'sesame.user', uid };\n}\n\nexport type SesameBackend = {\n /**\n * Récupère le nombre d'utilisateurs SESAME créés par l'utilisateur courant\n * dans les 12 derniers mois ains que le maximum autorisé.\n */\n countUsers(): Promise<SesameUserCountData>;\n\n /**\n * Récupère la liste des utilisateurs SESAME gérés par l'utilisateur courant.\n */\n listUsers(): Promise<SesameUser[]>;\n\n /**\n * Met à jour un utilisateur SESAME.\n * \n * @param data Les données de mise à jour.\n * @returns Une promesse résolue lorsque l'utilisateur est mis à jour.\n */\n updateUser(data: SesameUserUpdateData): Promise<void>;\n\n /**\n * Met à jour plusieurs utilisateurs SESAME.\n * \n * @param data Les données de mise à jour.\n * @returns Une promesse résolue lorsque les utilisateurs sont mis à jour.\n */\n updateMultiUsers(data: MultiSesameUsersUpdateData): Promise<void>;\n\n /**\n * Supprime plusieurs utilisateurs SESAME.\n * \n * @param uids tableau des uid des utilisateurs à supprimer.\n * @returns Une promesse résolue lorsque les utilisateurs sont mis à jour.\n */\n deleteMultiUsers(uids: number[]): Promise<void>;\n\n /**\n * Récupère la liste des codes SESAME.\n */\n listCodes(): Promise<SesameCode[]>;\n\n /**\n * Crée un nouveau code SESAME.\n * \n * @param data Les données du code à créer.\n * @returns Le code créé.\n */\n createCode(data: NewSesameCodeData): Promise<SesameCode>;\n\n /**\n * Supprime un code SESAME.\n * \n * @param code Le code à supprimer.\n * @returns Une promesse résolue lorsque le code est supprimé.\n */\n deleteCode(code: string): Promise<void>;\n}\n\nexport default function (hb: HttpBackend): SesameBackend {\n return {\n // Users\n countUsers() {\n return hb.getJsonAsync<SesameUserCountData>({ name: 'sesame.user', count: true }) as Promise<SesameUserCountData>;\n },\n async listUsers(): Promise<SesameUser[]> {\n const list = await hb.getJsonAsync<SesameUser[]>(userRoute());\n for (const user of list!) {\n user.validity.grace = new Date(user.validity.grace);\n user.validity.final = new Date(user.validity.final);\n }\n return list!;\n },\n updateUser(data: SesameUserUpdateData): Promise<void> {\n return hb.patchJsonAsync(\n userRoute(data.uid),\n data\n );\n },\n updateMultiUsers(data: MultiSesameUsersUpdateData): Promise<void> {\n return hb.postJsonAsync(\n userRoute(),\n { action: 'update', data }\n );\n },\n deleteMultiUsers(uids) {\n return hb.postJsonAsync(\n userRoute(),\n { action: 'delete', uids }\n );\n },\n // codes\n async listCodes(): Promise<SesameCode[]> {\n const list = await hb.getJsonAsync<SesameCode[]>({ name: 'sesame.code' });\n for (const code of list!) {\n code.exp = new Date(1000 * (code.exp as any));\n }\n return list!;\n },\n async createCode(data: NewSesameCodeData): Promise<SesameCode> {\n if ((data == null) || (!(data.exp instanceof Date))) throw new Error(\"Invalid data\");\n data.exp = Math.floor(data.exp.getTime() / 1000) as any;\n const code = await hb.postGetJsonAsync<SesameCode>({ name: 'sesame.code' }, data);\n code.exp = new Date(1000 * (code.exp as any));\n return code;\n },\n deleteCode(code: string): Promise<void> {\n return hb.deleteAsync({ name: 'sesame.code', code });\n }\n };\n}"]}
@@ -1,4 +1,6 @@
1
1
  import type { SessionLoader } from "../../activity/activitySession/backend";
2
2
  declare const sessionLoader: SessionLoader;
3
+ declare function autoLoad(readOnly?: boolean): ReturnType<typeof sessionLoader>;
3
4
  export default sessionLoader;
4
5
  export type { SessionLoader };
6
+ export { autoLoad };
@@ -4,6 +4,15 @@ import al from "./activityBunch";
4
4
  import mb from "./me";
5
5
  import ul from "./user";
6
6
  import atl from "./activityType";
7
+ import urlParser from "./urlParser";
7
8
  const sessionLoader = sessionBackend(res, al, mb, ul, atl);
9
+ function autoLoad(readOnly) {
10
+ const id = urlParser.getActivityNid();
11
+ if (id == null)
12
+ throw new Error('No nid');
13
+ const mode = urlParser.getActivityMode();
14
+ return sessionLoader(id, readOnly, mode);
15
+ }
8
16
  export default sessionLoader;
17
+ export { autoLoad };
9
18
  //# sourceMappingURL=activitySession.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"activitySession.js","sourceRoot":"","sources":["../../src/backend/capytale/activitySession.ts"],"names":[],"mappings":"AACA,OAAO,cAAc,MAAO,wCAAwC,CAAC;AAErE,OAAO,GAAG,MAAM,YAAY,CAAC;AAC7B,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACjC,OAAO,EAAE,MAAM,MAAM,CAAC;AACtB,OAAO,EAAE,MAAM,QAAQ,CAAC;AACxB,OAAO,GAAG,MAAM,gBAAgB,CAAC;AAEjC,MAAM,aAAa,GAAkB,cAAc,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;AAE1E,eAAe,aAAa,CAAC","sourcesContent":["import type { SessionLoader } from \"../../activity/activitySession/backend\";\nimport sessionBackend from \"../../activity/activitySession/backend\";\n\nimport res from \"./resolver\";\nimport al from \"./activityBunch\";\nimport mb from \"./me\";\nimport ul from \"./user\";\nimport atl from \"./activityType\";\n\nconst sessionLoader: SessionLoader = sessionBackend(res, al, mb, ul, atl);\n\nexport default sessionLoader;\nexport type { SessionLoader };\n"]}
1
+ {"version":3,"file":"activitySession.js","sourceRoot":"","sources":["../../src/backend/capytale/activitySession.ts"],"names":[],"mappings":"AACA,OAAO,cAAc,MAAO,wCAAwC,CAAC;AAErE,OAAO,GAAG,MAAM,YAAY,CAAC;AAC7B,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACjC,OAAO,EAAE,MAAM,MAAM,CAAC;AACtB,OAAO,EAAE,MAAM,QAAQ,CAAC;AACxB,OAAO,GAAG,MAAM,gBAAgB,CAAC;AAEjC,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,MAAM,aAAa,GAAkB,cAAc,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;AAE1E,SAAS,QAAQ,CAAC,QAAkB;IAClC,MAAM,EAAE,GAAG,SAAS,CAAC,cAAc,EAAE,CAAC;IACtC,IAAI,EAAE,IAAI,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,SAAS,CAAC,eAAe,EAAE,CAAC;IACzC,OAAO,aAAa,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,eAAe,aAAa,CAAC;AAE7B,OAAO,EAAE,QAAQ,EAAE,CAAC","sourcesContent":["import type { SessionLoader } from \"../../activity/activitySession/backend\";\nimport sessionBackend from \"../../activity/activitySession/backend\";\n\nimport res from \"./resolver\";\nimport al from \"./activityBunch\";\nimport mb from \"./me\";\nimport ul from \"./user\";\nimport atl from \"./activityType\";\n\nimport urlParser from \"./urlParser\";\n\nconst sessionLoader: SessionLoader = sessionBackend(res, al, mb, ul, atl);\n\nfunction autoLoad(readOnly?: boolean): ReturnType<typeof sessionLoader> {\n const id = urlParser.getActivityNid();\n if (id == null) throw new Error('No nid');\n const mode = urlParser.getActivityMode();\n return sessionLoader(id, readOnly, mode);\n}\n\nexport default sessionLoader;\nexport type { SessionLoader };\nexport { autoLoad };"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@capytale/activity.js",
3
- "version": "3.1.19",
3
+ "version": "3.1.21",
4
4
  "author": "Capytale.fr",
5
5
  "license": "GPL-3.0-or-later",
6
6
  "bin": {