@next-core/easyops-runtime 0.12.0 → 0.12.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.
@@ -9,10 +9,10 @@ exports.preCheckPermissionsForAny = preCheckPermissionsForAny;
9
9
  exports.preCheckPermissionsForBrickOrRoute = preCheckPermissionsForBrickOrRoute;
10
10
  exports.resetPermissionPreChecks = resetPermissionPreChecks;
11
11
  exports.validatePermissions = validatePermissions;
12
- var _lodash = require("lodash");
13
12
  var _storyboard = require("@next-core/utils/storyboard");
14
13
  var _microAppSdk = require("@next-api-sdk/micro-app-sdk");
15
14
  var _auth = require("./auth.js");
15
+ const checkingPermissions = new Map();
16
16
  const checkedPermissions = [];
17
17
  const permissionMap = new Map();
18
18
  function preCheckPermissions(storyboard) {
@@ -35,30 +35,50 @@ function preCheckPermissionsForAny(data) {
35
35
  }
36
36
  async function validatePermissions(usedActions) {
37
37
  // Do not request known actions.
38
- const actions = (0, _lodash.difference)(usedActions, [...checkedPermissions]);
39
- if (actions.length === 0) {
38
+ const uncheckedActions = usedActions.filter(action => !checkedPermissions.includes(action));
39
+ if (uncheckedActions.length === 0) {
40
40
  return;
41
41
  }
42
- checkedPermissions.push(...actions);
43
- try {
44
- const result = await (0, _microAppSdk.PermissionApi_validatePermissions)({
45
- actions
46
- }, {
47
- noAbortOnRouteChange: true
48
- });
49
- for (const item of result.actions) {
50
- permissionMap.set(item.action, item.authorizationStatus);
51
- if (item.authorizationStatus === "undefined") {
42
+ const checkingTasks = [];
43
+ const restActions = [];
44
+ for (const action of uncheckedActions) {
45
+ const promise = checkingPermissions.get(action);
46
+ if (promise) {
47
+ checkingTasks.push(promise);
48
+ } else {
49
+ restActions.push(action);
50
+ }
51
+ }
52
+ if (restActions.length > 0) {
53
+ const task = (async () => {
54
+ try {
55
+ const result = await (0, _microAppSdk.PermissionApi_validatePermissions)({
56
+ actions: restActions
57
+ }, {
58
+ noAbortOnRouteChange: true
59
+ });
60
+ for (const item of result.actions) {
61
+ permissionMap.set(item.action, item.authorizationStatus);
62
+ if (item.authorizationStatus === "undefined") {
63
+ // eslint-disable-next-line no-console
64
+ console.error(`Undefined permission action: "${item.action}"`);
65
+ }
66
+ }
67
+ } catch (error) {
68
+ // Allow pre-check to fail, and
69
+ // make it not crash when the backend service is not updated.
52
70
  // eslint-disable-next-line no-console
53
- console.error(`Undefined permission action: "${item.action}"`);
71
+ console.error("Pre-check permissions failed", error);
72
+ } finally {
73
+ checkedPermissions.push(...restActions);
54
74
  }
75
+ })();
76
+ for (const action of restActions) {
77
+ checkingPermissions.set(action, task);
55
78
  }
56
- } catch (error) {
57
- // Allow pre-check to fail, and
58
- // make it not crash when the backend service is not updated.
59
- // eslint-disable-next-line no-console
60
- console.error("Pre-check permissions failed", error);
79
+ checkingTasks.push(task);
61
80
  }
81
+ await Promise.all(checkingTasks);
62
82
  }
63
83
 
64
84
  /**
@@ -97,6 +117,7 @@ function checkPermissions(...actions) {
97
117
  * Reset permission pre-checks after logged-out.
98
118
  */
99
119
  function resetPermissionPreChecks() {
120
+ checkingPermissions.clear();
100
121
  checkedPermissions.length = 0;
101
122
  permissionMap.clear();
102
123
  }
@@ -1 +1 @@
1
- {"version":3,"file":"checkPermissions.js","names":["_lodash","require","_storyboard","_microAppSdk","_auth","checkedPermissions","permissionMap","Map","preCheckPermissions","storyboard","isLoggedIn","getAuth","isAdmin","usedActions","scanPermissionActionsInStoryboard","validatePermissions","preCheckPermissionsForBrickOrRoute","container","asyncComputeRealValue","Array","isArray","permissionsPreCheck","actions","preCheckPermissionsForAny","data","scanPermissionActionsInAny","difference","length","push","result","PermissionApi_validatePermissions","noAbortOnRouteChange","item","set","action","authorizationStatus","console","error","checkPermissions","get","undefined","resetPermissionPreChecks","clear"],"sources":["../../src/checkPermissions.ts"],"sourcesContent":["import { difference } from \"lodash\";\nimport {\n scanPermissionActionsInAny,\n scanPermissionActionsInStoryboard,\n} from \"@next-core/utils/storyboard\";\nimport type { BrickConf, RouteConf, Storyboard } from \"@next-core/types\";\nimport { PermissionApi_validatePermissions } from \"@next-api-sdk/micro-app-sdk\";\nimport { getAuth, isLoggedIn } from \"./auth.js\";\n\ntype PermissionStatus = \"authorized\" | \"unauthorized\" | \"undefined\";\n\nconst checkedPermissions: string[] = [];\nconst permissionMap = new Map<string, PermissionStatus>();\n\nexport function preCheckPermissions(\n storyboard: Storyboard\n): Promise<void> | undefined {\n if (isLoggedIn() && !getAuth().isAdmin) {\n const usedActions = scanPermissionActionsInStoryboard(storyboard);\n return validatePermissions(usedActions);\n }\n}\n\nexport async function preCheckPermissionsForBrickOrRoute(\n container: BrickConf | RouteConf,\n asyncComputeRealValue: (value: unknown) => Promise<unknown>\n) {\n if (\n isLoggedIn() &&\n !getAuth().isAdmin &&\n Array.isArray(container.permissionsPreCheck)\n ) {\n const actions = (await asyncComputeRealValue(\n container.permissionsPreCheck\n )) as string[];\n return validatePermissions(actions);\n }\n}\n\nexport function preCheckPermissionsForAny(\n data: unknown\n): Promise<void> | undefined {\n if (isLoggedIn() && !getAuth().isAdmin) {\n const usedActions = scanPermissionActionsInAny(data);\n return validatePermissions(usedActions);\n }\n}\n\nexport async function validatePermissions(\n usedActions: string[]\n): Promise<void> {\n // Do not request known actions.\n const actions = difference(usedActions, [...checkedPermissions]);\n if (actions.length === 0) {\n return;\n }\n checkedPermissions.push(...actions);\n try {\n const result = await PermissionApi_validatePermissions(\n { actions },\n { noAbortOnRouteChange: true }\n );\n for (const item of result.actions!) {\n permissionMap.set(item.action!, item.authorizationStatus!);\n if (item.authorizationStatus === \"undefined\") {\n // eslint-disable-next-line no-console\n console.error(`Undefined permission action: \"${item.action}\"`);\n }\n }\n } catch (error) {\n // Allow pre-check to fail, and\n // make it not crash when the backend service is not updated.\n // eslint-disable-next-line no-console\n console.error(\"Pre-check permissions failed\", error);\n }\n}\n\n/**\n * Check the current logged-in user whether to have all\n * permissions of actions passed to it.\n *\n * @param actions - Required permission actions.\n */\nexport function checkPermissions(...actions: string[]): boolean {\n if (!isLoggedIn()) {\n return false;\n }\n\n if (getAuth().isAdmin) {\n return true;\n }\n\n for (const action of actions) {\n // Only **exclusively authorized** permissions are ok.\n // Those scenarios below will fail:\n // - unauthorized actions (pre-check results)\n // - undefined actions (pre-check results)\n // - Un-pre-checked or pre-check failed\n switch (permissionMap.get(action)) {\n case \"unauthorized\":\n case \"undefined\":\n return false;\n case undefined:\n // eslint-disable-next-line no-console\n console.error(\n `Un-checked permission action: \"${action}\", please make sure the permission to check is defined in permissionsPreCheck.`\n );\n return false;\n }\n }\n return true;\n}\n\n/**\n * Reset permission pre-checks after logged-out.\n */\nexport function resetPermissionPreChecks(): void {\n checkedPermissions.length = 0;\n permissionMap.clear();\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"checkPermissions.js","names":["_storyboard","require","_microAppSdk","_auth","checkingPermissions","Map","checkedPermissions","permissionMap","preCheckPermissions","storyboard","isLoggedIn","getAuth","isAdmin","usedActions","scanPermissionActionsInStoryboard","validatePermissions","preCheckPermissionsForBrickOrRoute","container","asyncComputeRealValue","Array","isArray","permissionsPreCheck","actions","preCheckPermissionsForAny","data","scanPermissionActionsInAny","uncheckedActions","filter","action","includes","length","checkingTasks","restActions","promise","get","push","task","result","PermissionApi_validatePermissions","noAbortOnRouteChange","item","set","authorizationStatus","console","error","Promise","all","checkPermissions","undefined","resetPermissionPreChecks","clear"],"sources":["../../src/checkPermissions.ts"],"sourcesContent":["import {\n scanPermissionActionsInAny,\n scanPermissionActionsInStoryboard,\n} from \"@next-core/utils/storyboard\";\nimport type { BrickConf, RouteConf, Storyboard } from \"@next-core/types\";\nimport { PermissionApi_validatePermissions } from \"@next-api-sdk/micro-app-sdk\";\nimport { getAuth, isLoggedIn } from \"./auth.js\";\n\ntype PermissionStatus = \"authorized\" | \"unauthorized\" | \"undefined\";\n\nconst checkingPermissions = new Map<string, Promise<void>>();\nconst checkedPermissions: string[] = [];\nconst permissionMap = new Map<string, PermissionStatus>();\n\nexport function preCheckPermissions(\n storyboard: Storyboard\n): Promise<void> | undefined {\n if (isLoggedIn() && !getAuth().isAdmin) {\n const usedActions = scanPermissionActionsInStoryboard(storyboard);\n return validatePermissions(usedActions);\n }\n}\n\nexport async function preCheckPermissionsForBrickOrRoute(\n container: BrickConf | RouteConf,\n asyncComputeRealValue: (value: unknown) => Promise<unknown>\n) {\n if (\n isLoggedIn() &&\n !getAuth().isAdmin &&\n Array.isArray(container.permissionsPreCheck)\n ) {\n const actions = (await asyncComputeRealValue(\n container.permissionsPreCheck\n )) as string[];\n return validatePermissions(actions);\n }\n}\n\nexport function preCheckPermissionsForAny(\n data: unknown\n): Promise<void> | undefined {\n if (isLoggedIn() && !getAuth().isAdmin) {\n const usedActions = scanPermissionActionsInAny(data);\n return validatePermissions(usedActions);\n }\n}\n\nexport async function validatePermissions(\n usedActions: string[]\n): Promise<void> {\n // Do not request known actions.\n const uncheckedActions = usedActions.filter(\n (action) => !checkedPermissions.includes(action)\n );\n if (uncheckedActions.length === 0) {\n return;\n }\n const checkingTasks: Promise<void>[] = [];\n const restActions: string[] = [];\n for (const action of uncheckedActions) {\n const promise = checkingPermissions.get(action);\n if (promise) {\n checkingTasks.push(promise);\n } else {\n restActions.push(action);\n }\n }\n if (restActions.length > 0) {\n const task = (async () => {\n try {\n const result = await PermissionApi_validatePermissions(\n { actions: restActions },\n { noAbortOnRouteChange: true }\n );\n for (const item of result.actions!) {\n permissionMap.set(item.action!, item.authorizationStatus!);\n if (item.authorizationStatus === \"undefined\") {\n // eslint-disable-next-line no-console\n console.error(`Undefined permission action: \"${item.action}\"`);\n }\n }\n } catch (error) {\n // Allow pre-check to fail, and\n // make it not crash when the backend service is not updated.\n // eslint-disable-next-line no-console\n console.error(\"Pre-check permissions failed\", error);\n } finally {\n checkedPermissions.push(...restActions);\n }\n })();\n for (const action of restActions) {\n checkingPermissions.set(action, task);\n }\n checkingTasks.push(task);\n }\n await Promise.all(checkingTasks);\n}\n\n/**\n * Check the current logged-in user whether to have all\n * permissions of actions passed to it.\n *\n * @param actions - Required permission actions.\n */\nexport function checkPermissions(...actions: string[]): boolean {\n if (!isLoggedIn()) {\n return false;\n }\n\n if (getAuth().isAdmin) {\n return true;\n }\n\n for (const action of actions) {\n // Only **exclusively authorized** permissions are ok.\n // Those scenarios below will fail:\n // - unauthorized actions (pre-check results)\n // - undefined actions (pre-check results)\n // - Un-pre-checked or pre-check failed\n switch (permissionMap.get(action)) {\n case \"unauthorized\":\n case \"undefined\":\n return false;\n case undefined:\n // eslint-disable-next-line no-console\n console.error(\n `Un-checked permission action: \"${action}\", please make sure the permission to check is defined in permissionsPreCheck.`\n );\n return false;\n }\n }\n return true;\n}\n\n/**\n * Reset permission pre-checks after logged-out.\n */\nexport function resetPermissionPreChecks(): void {\n checkingPermissions.clear();\n checkedPermissions.length = 0;\n permissionMap.clear();\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,7 +1,7 @@
1
- import { difference } from "lodash";
2
1
  import { scanPermissionActionsInAny, scanPermissionActionsInStoryboard } from "@next-core/utils/storyboard";
3
2
  import { PermissionApi_validatePermissions } from "@next-api-sdk/micro-app-sdk";
4
3
  import { getAuth, isLoggedIn } from "./auth.js";
4
+ const checkingPermissions = new Map();
5
5
  const checkedPermissions = [];
6
6
  const permissionMap = new Map();
7
7
  export function preCheckPermissions(storyboard) {
@@ -24,30 +24,50 @@ export function preCheckPermissionsForAny(data) {
24
24
  }
25
25
  export async function validatePermissions(usedActions) {
26
26
  // Do not request known actions.
27
- const actions = difference(usedActions, [...checkedPermissions]);
28
- if (actions.length === 0) {
27
+ const uncheckedActions = usedActions.filter(action => !checkedPermissions.includes(action));
28
+ if (uncheckedActions.length === 0) {
29
29
  return;
30
30
  }
31
- checkedPermissions.push(...actions);
32
- try {
33
- const result = await PermissionApi_validatePermissions({
34
- actions
35
- }, {
36
- noAbortOnRouteChange: true
37
- });
38
- for (const item of result.actions) {
39
- permissionMap.set(item.action, item.authorizationStatus);
40
- if (item.authorizationStatus === "undefined") {
31
+ const checkingTasks = [];
32
+ const restActions = [];
33
+ for (const action of uncheckedActions) {
34
+ const promise = checkingPermissions.get(action);
35
+ if (promise) {
36
+ checkingTasks.push(promise);
37
+ } else {
38
+ restActions.push(action);
39
+ }
40
+ }
41
+ if (restActions.length > 0) {
42
+ const task = (async () => {
43
+ try {
44
+ const result = await PermissionApi_validatePermissions({
45
+ actions: restActions
46
+ }, {
47
+ noAbortOnRouteChange: true
48
+ });
49
+ for (const item of result.actions) {
50
+ permissionMap.set(item.action, item.authorizationStatus);
51
+ if (item.authorizationStatus === "undefined") {
52
+ // eslint-disable-next-line no-console
53
+ console.error(`Undefined permission action: "${item.action}"`);
54
+ }
55
+ }
56
+ } catch (error) {
57
+ // Allow pre-check to fail, and
58
+ // make it not crash when the backend service is not updated.
41
59
  // eslint-disable-next-line no-console
42
- console.error(`Undefined permission action: "${item.action}"`);
60
+ console.error("Pre-check permissions failed", error);
61
+ } finally {
62
+ checkedPermissions.push(...restActions);
43
63
  }
64
+ })();
65
+ for (const action of restActions) {
66
+ checkingPermissions.set(action, task);
44
67
  }
45
- } catch (error) {
46
- // Allow pre-check to fail, and
47
- // make it not crash when the backend service is not updated.
48
- // eslint-disable-next-line no-console
49
- console.error("Pre-check permissions failed", error);
68
+ checkingTasks.push(task);
50
69
  }
70
+ await Promise.all(checkingTasks);
51
71
  }
52
72
 
53
73
  /**
@@ -89,6 +109,7 @@ export function checkPermissions() {
89
109
  * Reset permission pre-checks after logged-out.
90
110
  */
91
111
  export function resetPermissionPreChecks() {
112
+ checkingPermissions.clear();
92
113
  checkedPermissions.length = 0;
93
114
  permissionMap.clear();
94
115
  }
@@ -1 +1 @@
1
- {"version":3,"file":"checkPermissions.js","names":["difference","scanPermissionActionsInAny","scanPermissionActionsInStoryboard","PermissionApi_validatePermissions","getAuth","isLoggedIn","checkedPermissions","permissionMap","Map","preCheckPermissions","storyboard","isAdmin","usedActions","validatePermissions","preCheckPermissionsForBrickOrRoute","container","asyncComputeRealValue","Array","isArray","permissionsPreCheck","actions","preCheckPermissionsForAny","data","length","push","result","noAbortOnRouteChange","item","set","action","authorizationStatus","console","error","checkPermissions","_len","arguments","_key","get","undefined","resetPermissionPreChecks","clear"],"sources":["../../src/checkPermissions.ts"],"sourcesContent":["import { difference } from \"lodash\";\nimport {\n scanPermissionActionsInAny,\n scanPermissionActionsInStoryboard,\n} from \"@next-core/utils/storyboard\";\nimport type { BrickConf, RouteConf, Storyboard } from \"@next-core/types\";\nimport { PermissionApi_validatePermissions } from \"@next-api-sdk/micro-app-sdk\";\nimport { getAuth, isLoggedIn } from \"./auth.js\";\n\ntype PermissionStatus = \"authorized\" | \"unauthorized\" | \"undefined\";\n\nconst checkedPermissions: string[] = [];\nconst permissionMap = new Map<string, PermissionStatus>();\n\nexport function preCheckPermissions(\n storyboard: Storyboard\n): Promise<void> | undefined {\n if (isLoggedIn() && !getAuth().isAdmin) {\n const usedActions = scanPermissionActionsInStoryboard(storyboard);\n return validatePermissions(usedActions);\n }\n}\n\nexport async function preCheckPermissionsForBrickOrRoute(\n container: BrickConf | RouteConf,\n asyncComputeRealValue: (value: unknown) => Promise<unknown>\n) {\n if (\n isLoggedIn() &&\n !getAuth().isAdmin &&\n Array.isArray(container.permissionsPreCheck)\n ) {\n const actions = (await asyncComputeRealValue(\n container.permissionsPreCheck\n )) as string[];\n return validatePermissions(actions);\n }\n}\n\nexport function preCheckPermissionsForAny(\n data: unknown\n): Promise<void> | undefined {\n if (isLoggedIn() && !getAuth().isAdmin) {\n const usedActions = scanPermissionActionsInAny(data);\n return validatePermissions(usedActions);\n }\n}\n\nexport async function validatePermissions(\n usedActions: string[]\n): Promise<void> {\n // Do not request known actions.\n const actions = difference(usedActions, [...checkedPermissions]);\n if (actions.length === 0) {\n return;\n }\n checkedPermissions.push(...actions);\n try {\n const result = await PermissionApi_validatePermissions(\n { actions },\n { noAbortOnRouteChange: true }\n );\n for (const item of result.actions!) {\n permissionMap.set(item.action!, item.authorizationStatus!);\n if (item.authorizationStatus === \"undefined\") {\n // eslint-disable-next-line no-console\n console.error(`Undefined permission action: \"${item.action}\"`);\n }\n }\n } catch (error) {\n // Allow pre-check to fail, and\n // make it not crash when the backend service is not updated.\n // eslint-disable-next-line no-console\n console.error(\"Pre-check permissions failed\", error);\n }\n}\n\n/**\n * Check the current logged-in user whether to have all\n * permissions of actions passed to it.\n *\n * @param actions - Required permission actions.\n */\nexport function checkPermissions(...actions: string[]): boolean {\n if (!isLoggedIn()) {\n return false;\n }\n\n if (getAuth().isAdmin) {\n return true;\n }\n\n for (const action of actions) {\n // Only **exclusively authorized** permissions are ok.\n // Those scenarios below will fail:\n // - unauthorized actions (pre-check results)\n // - undefined actions (pre-check results)\n // - Un-pre-checked or pre-check failed\n switch (permissionMap.get(action)) {\n case \"unauthorized\":\n case \"undefined\":\n return false;\n case undefined:\n // eslint-disable-next-line no-console\n console.error(\n `Un-checked permission action: \"${action}\", please make sure the permission to check is defined in permissionsPreCheck.`\n );\n return false;\n }\n }\n return true;\n}\n\n/**\n * Reset permission pre-checks after logged-out.\n */\nexport function resetPermissionPreChecks(): void {\n checkedPermissions.length = 0;\n permissionMap.clear();\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"checkPermissions.js","names":["scanPermissionActionsInAny","scanPermissionActionsInStoryboard","PermissionApi_validatePermissions","getAuth","isLoggedIn","checkingPermissions","Map","checkedPermissions","permissionMap","preCheckPermissions","storyboard","isAdmin","usedActions","validatePermissions","preCheckPermissionsForBrickOrRoute","container","asyncComputeRealValue","Array","isArray","permissionsPreCheck","actions","preCheckPermissionsForAny","data","uncheckedActions","filter","action","includes","length","checkingTasks","restActions","promise","get","push","task","result","noAbortOnRouteChange","item","set","authorizationStatus","console","error","Promise","all","checkPermissions","_len","arguments","_key","undefined","resetPermissionPreChecks","clear"],"sources":["../../src/checkPermissions.ts"],"sourcesContent":["import {\n scanPermissionActionsInAny,\n scanPermissionActionsInStoryboard,\n} from \"@next-core/utils/storyboard\";\nimport type { BrickConf, RouteConf, Storyboard } from \"@next-core/types\";\nimport { PermissionApi_validatePermissions } from \"@next-api-sdk/micro-app-sdk\";\nimport { getAuth, isLoggedIn } from \"./auth.js\";\n\ntype PermissionStatus = \"authorized\" | \"unauthorized\" | \"undefined\";\n\nconst checkingPermissions = new Map<string, Promise<void>>();\nconst checkedPermissions: string[] = [];\nconst permissionMap = new Map<string, PermissionStatus>();\n\nexport function preCheckPermissions(\n storyboard: Storyboard\n): Promise<void> | undefined {\n if (isLoggedIn() && !getAuth().isAdmin) {\n const usedActions = scanPermissionActionsInStoryboard(storyboard);\n return validatePermissions(usedActions);\n }\n}\n\nexport async function preCheckPermissionsForBrickOrRoute(\n container: BrickConf | RouteConf,\n asyncComputeRealValue: (value: unknown) => Promise<unknown>\n) {\n if (\n isLoggedIn() &&\n !getAuth().isAdmin &&\n Array.isArray(container.permissionsPreCheck)\n ) {\n const actions = (await asyncComputeRealValue(\n container.permissionsPreCheck\n )) as string[];\n return validatePermissions(actions);\n }\n}\n\nexport function preCheckPermissionsForAny(\n data: unknown\n): Promise<void> | undefined {\n if (isLoggedIn() && !getAuth().isAdmin) {\n const usedActions = scanPermissionActionsInAny(data);\n return validatePermissions(usedActions);\n }\n}\n\nexport async function validatePermissions(\n usedActions: string[]\n): Promise<void> {\n // Do not request known actions.\n const uncheckedActions = usedActions.filter(\n (action) => !checkedPermissions.includes(action)\n );\n if (uncheckedActions.length === 0) {\n return;\n }\n const checkingTasks: Promise<void>[] = [];\n const restActions: string[] = [];\n for (const action of uncheckedActions) {\n const promise = checkingPermissions.get(action);\n if (promise) {\n checkingTasks.push(promise);\n } else {\n restActions.push(action);\n }\n }\n if (restActions.length > 0) {\n const task = (async () => {\n try {\n const result = await PermissionApi_validatePermissions(\n { actions: restActions },\n { noAbortOnRouteChange: true }\n );\n for (const item of result.actions!) {\n permissionMap.set(item.action!, item.authorizationStatus!);\n if (item.authorizationStatus === \"undefined\") {\n // eslint-disable-next-line no-console\n console.error(`Undefined permission action: \"${item.action}\"`);\n }\n }\n } catch (error) {\n // Allow pre-check to fail, and\n // make it not crash when the backend service is not updated.\n // eslint-disable-next-line no-console\n console.error(\"Pre-check permissions failed\", error);\n } finally {\n checkedPermissions.push(...restActions);\n }\n })();\n for (const action of restActions) {\n checkingPermissions.set(action, task);\n }\n checkingTasks.push(task);\n }\n await Promise.all(checkingTasks);\n}\n\n/**\n * Check the current logged-in user whether to have all\n * permissions of actions passed to it.\n *\n * @param actions - Required permission actions.\n */\nexport function checkPermissions(...actions: string[]): boolean {\n if (!isLoggedIn()) {\n return false;\n }\n\n if (getAuth().isAdmin) {\n return true;\n }\n\n for (const action of actions) {\n // Only **exclusively authorized** permissions are ok.\n // Those scenarios below will fail:\n // - unauthorized actions (pre-check results)\n // - undefined actions (pre-check results)\n // - Un-pre-checked or pre-check failed\n switch (permissionMap.get(action)) {\n case \"unauthorized\":\n case \"undefined\":\n return false;\n case undefined:\n // eslint-disable-next-line no-console\n console.error(\n `Un-checked permission action: \"${action}\", please make sure the permission to check is defined in permissionsPreCheck.`\n );\n return false;\n }\n }\n return true;\n}\n\n/**\n * Reset permission pre-checks after logged-out.\n */\nexport function resetPermissionPreChecks(): void {\n checkingPermissions.clear();\n checkedPermissions.length = 0;\n permissionMap.clear();\n}\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@next-core/easyops-runtime",
3
- "version": "0.12.0",
3
+ "version": "0.12.2",
4
4
  "homepage": "https://github.com/easyops-cn/next-core/tree/v3/packages/easyops-runtime",
5
5
  "license": "GPL-3.0",
6
6
  "repository": {
@@ -48,7 +48,7 @@
48
48
  "@next-core/cook": "^2.4.7",
49
49
  "@next-core/http": "^1.2.6",
50
50
  "@next-core/pipes": "^2.0.24",
51
- "@next-core/runtime": "^1.51.0",
51
+ "@next-core/runtime": "^1.52.0",
52
52
  "@next-core/types": "^1.11.2",
53
53
  "@next-core/utils": "^1.7.16",
54
54
  "js-yaml": "^3.14.1",
@@ -60,5 +60,5 @@
60
60
  "jest-websocket-mock": "^2.5.0",
61
61
  "whatwg-fetch": "^3.6.20"
62
62
  },
63
- "gitHead": "b404287cbd4631f7d5c4a2a66215ed45bd6fea52"
63
+ "gitHead": "d1d751b017f41785438ab2bb42282c122809f901"
64
64
  }