@next-core/easyops-runtime 0.10.5 → 0.10.7

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.
Files changed (66) hide show
  1. package/dist/cjs/analytics/http.js +3 -4
  2. package/dist/cjs/analytics/http.js.map +1 -1
  3. package/dist/cjs/checkInstalledApps.js +1 -2
  4. package/dist/cjs/checkInstalledApps.js.map +1 -1
  5. package/dist/cjs/checkPermissions.js.map +1 -1
  6. package/dist/cjs/flowApi/CollectContracts.js.map +1 -1
  7. package/dist/cjs/flowApi/FlowApi.js +2 -2
  8. package/dist/cjs/flowApi/FlowApi.js.map +1 -1
  9. package/dist/cjs/flowApi/FlowApiProvider.js +5 -5
  10. package/dist/cjs/flowApi/FlowApiProvider.js.map +1 -1
  11. package/dist/cjs/menu/fetchMenuById.js.map +1 -1
  12. package/dist/cjs/menu/fetchMenuTitle.js +1 -1
  13. package/dist/cjs/menu/fetchMenuTitle.js.map +1 -1
  14. package/dist/cjs/menu/getMenusOfStandaloneApp.js +2 -2
  15. package/dist/cjs/menu/getMenusOfStandaloneApp.js.map +1 -1
  16. package/dist/cjs/menu/mergeMenu.js +1 -2
  17. package/dist/cjs/menu/mergeMenu.js.map +1 -1
  18. package/dist/cjs/menu/reorderMenuItems.js +1 -4
  19. package/dist/cjs/menu/reorderMenuItems.js.map +1 -1
  20. package/dist/cjs/websocket/MessageDispatcher.js.map +1 -1
  21. package/dist/cjs/websocket/MessageService.js.map +1 -1
  22. package/dist/esm/analytics/analytics.js +23 -18
  23. package/dist/esm/analytics/analytics.js.map +1 -1
  24. package/dist/esm/analytics/http.js +19 -20
  25. package/dist/esm/analytics/http.js.map +1 -1
  26. package/dist/esm/analytics/pageView.js +6 -6
  27. package/dist/esm/analytics/pageView.js.map +1 -1
  28. package/dist/esm/analytics/transport.js +12 -12
  29. package/dist/esm/analytics/transport.js.map +1 -1
  30. package/dist/esm/auth-v2.js +1 -1
  31. package/dist/esm/auth-v2.js.map +1 -1
  32. package/dist/esm/auth.js +5 -4
  33. package/dist/esm/auth.js.map +1 -1
  34. package/dist/esm/checkInstalledApps.js +19 -30
  35. package/dist/esm/checkInstalledApps.js.map +1 -1
  36. package/dist/esm/checkPermissions.js +35 -48
  37. package/dist/esm/checkPermissions.js.map +1 -1
  38. package/dist/esm/flowApi/CollectContracts.js +5 -5
  39. package/dist/esm/flowApi/CollectContracts.js.map +1 -1
  40. package/dist/esm/flowApi/FlowApi.js +68 -87
  41. package/dist/esm/flowApi/FlowApi.js.map +1 -1
  42. package/dist/esm/flowApi/FlowApiProvider.js +87 -87
  43. package/dist/esm/flowApi/FlowApiProvider.js.map +1 -1
  44. package/dist/esm/index.js +3 -3
  45. package/dist/esm/index.js.map +1 -1
  46. package/dist/esm/menu/computeMenuData.js +17 -24
  47. package/dist/esm/menu/computeMenuData.js.map +1 -1
  48. package/dist/esm/menu/constants.js +3 -3
  49. package/dist/esm/menu/constants.js.map +1 -1
  50. package/dist/esm/menu/fetchMenuById.js +61 -70
  51. package/dist/esm/menu/fetchMenuById.js.map +1 -1
  52. package/dist/esm/menu/fetchMenuTitle.js +27 -34
  53. package/dist/esm/menu/fetchMenuTitle.js.map +1 -1
  54. package/dist/esm/menu/getMenusOfStandaloneApp.js +11 -9
  55. package/dist/esm/menu/getMenusOfStandaloneApp.js.map +1 -1
  56. package/dist/esm/menu/loadDynamicMenuItems.js +17 -23
  57. package/dist/esm/menu/loadDynamicMenuItems.js.map +1 -1
  58. package/dist/esm/menu/mergeMenu.js +44 -54
  59. package/dist/esm/menu/mergeMenu.js.map +1 -1
  60. package/dist/esm/menu/reorderMenuItems.js +3 -6
  61. package/dist/esm/menu/reorderMenuItems.js.map +1 -1
  62. package/dist/esm/websocket/MessageDispatcher.js +19 -19
  63. package/dist/esm/websocket/MessageDispatcher.js.map +1 -1
  64. package/dist/esm/websocket/MessageService.js +9 -9
  65. package/dist/esm/websocket/MessageService.js.map +1 -1
  66. package/package.json +9 -9
@@ -1 +1 @@
1
- {"version":3,"file":"checkInstalledApps.js","names":["traverseStoryboardExpressions","collectInstalledAppsHasUsage","RuntimeApi_searchMicroAppStandalone","checkingApps","Map","checkedApps","preCheckInstalledApps","storyboard","hasAppInBootstrap","window","STANDALONE_MICRO_APPS","NO_AUTH_GUARD","appIds","scanInstalledAppsUsage","searchIds","appId","has","push","length","promise","query","$in","fields","catch","error","console","_loop","_appId","set","then","result","_result$list","app","list","find","item","checkedApp","_objectSpread","id","undefined","waitForCheckingApps","_x","_waitForCheckingApps","apply","arguments","_asyncToGenerator","Promise","all","map","get","getCheckedApp","_storyboard$meta","usage","usedArgs","Set","customTemplates","menus","meta","routes","node","parent"],"sources":["../../src/checkInstalledApps.ts"],"sourcesContent":["import type { MicroApp, Storyboard } from \"@next-core/types\";\nimport {\n traverseStoryboardExpressions,\n collectInstalledAppsHasUsage,\n type MemberCallUsage,\n} from \"@next-core/utils/storyboard\";\nimport { RuntimeApi_searchMicroAppStandalone } from \"@next-api-sdk/micro-app-standalone-sdk\";\n\ntype AppForCheck = Pick<MicroApp, \"id\" | \"currentVersion\" | \"installStatus\">;\n\nconst checkingApps = new Map<string, Promise<AppForCheck | undefined>>();\nconst checkedApps = new Map<string, AppForCheck | undefined>();\n\nexport function preCheckInstalledApps(\n storyboard: Storyboard,\n hasAppInBootstrap: (appId: string) => boolean\n) {\n if (window.STANDALONE_MICRO_APPS && !window.NO_AUTH_GUARD) {\n const appIds = scanInstalledAppsUsage(storyboard);\n const searchIds: string[] = [];\n for (const appId of appIds) {\n // Do not check these apps already checking or in bootstrap.\n if (!checkingApps.has(appId) && !hasAppInBootstrap(appId)) {\n searchIds.push(appId);\n }\n }\n if (searchIds.length === 0) {\n return;\n }\n const promise = RuntimeApi_searchMicroAppStandalone({\n query: { appId: { $in: searchIds } },\n fields: [\"appId\", \"currentVersion\", \"installStatus\"],\n }).catch((error) => {\n // Allow search micro app 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(\"Get off site standalone micro-apps failed\", error);\n });\n for (const appId of searchIds) {\n checkingApps.set(\n appId,\n promise.then((result) => {\n const app = result?.list?.find((item) => item.appId === appId);\n const checkedApp = app\n ? {\n ...app,\n id: appId,\n }\n : undefined;\n checkedApps.set(appId, checkedApp);\n return checkedApp;\n })\n );\n }\n }\n}\n\nexport async function waitForCheckingApps(appIds: string[]) {\n await Promise.all(appIds.map((appId) => checkingApps.get(appId)));\n}\n\nexport function getCheckedApp(appId: string) {\n if (window.STANDALONE_MICRO_APPS) {\n return checkedApps.get(appId);\n }\n}\n\nfunction scanInstalledAppsUsage(storyboard: Storyboard) {\n const usage: MemberCallUsage = {\n usedArgs: new Set(),\n };\n // `INSTALLED_APPS.has(...)` is not available in storyboard functions\n const { customTemplates, menus } = storyboard.meta ?? {};\n traverseStoryboardExpressions(\n [storyboard.routes, customTemplates, menus],\n (node, parent) => {\n collectInstalledAppsHasUsage(usage, node, parent);\n },\n \"INSTALLED_APPS\"\n );\n return [...usage.usedArgs];\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"checkInstalledApps.js","names":["traverseStoryboardExpressions","collectInstalledAppsHasUsage","RuntimeApi_searchMicroAppStandalone","checkingApps","Map","checkedApps","preCheckInstalledApps","storyboard","hasAppInBootstrap","window","STANDALONE_MICRO_APPS","NO_AUTH_GUARD","appIds","scanInstalledAppsUsage","searchIds","appId","has","push","length","promise","query","$in","fields","catch","error","console","set","then","result","_result$list","app","list","find","item","checkedApp","id","undefined","waitForCheckingApps","Promise","all","map","get","getCheckedApp","usage","usedArgs","Set","customTemplates","menus","meta","routes","node","parent"],"sources":["../../src/checkInstalledApps.ts"],"sourcesContent":["import type { MicroApp, Storyboard } from \"@next-core/types\";\nimport {\n traverseStoryboardExpressions,\n collectInstalledAppsHasUsage,\n type MemberCallUsage,\n} from \"@next-core/utils/storyboard\";\nimport { RuntimeApi_searchMicroAppStandalone } from \"@next-api-sdk/micro-app-standalone-sdk\";\n\ntype AppForCheck = Pick<MicroApp, \"id\" | \"currentVersion\" | \"installStatus\">;\n\nconst checkingApps = new Map<string, Promise<AppForCheck | undefined>>();\nconst checkedApps = new Map<string, AppForCheck | undefined>();\n\nexport function preCheckInstalledApps(\n storyboard: Storyboard,\n hasAppInBootstrap: (appId: string) => boolean\n) {\n if (window.STANDALONE_MICRO_APPS && !window.NO_AUTH_GUARD) {\n const appIds = scanInstalledAppsUsage(storyboard);\n const searchIds: string[] = [];\n for (const appId of appIds) {\n // Do not check these apps already checking or in bootstrap.\n if (!checkingApps.has(appId) && !hasAppInBootstrap(appId)) {\n searchIds.push(appId);\n }\n }\n if (searchIds.length === 0) {\n return;\n }\n const promise = RuntimeApi_searchMicroAppStandalone({\n query: { appId: { $in: searchIds } },\n fields: [\"appId\", \"currentVersion\", \"installStatus\"],\n }).catch((error) => {\n // Allow search micro app 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(\"Get off site standalone micro-apps failed\", error);\n });\n for (const appId of searchIds) {\n checkingApps.set(\n appId,\n promise.then((result) => {\n const app = result?.list?.find((item) => item.appId === appId);\n const checkedApp = app\n ? {\n ...app,\n id: appId,\n }\n : undefined;\n checkedApps.set(appId, checkedApp);\n return checkedApp;\n })\n );\n }\n }\n}\n\nexport async function waitForCheckingApps(appIds: string[]) {\n await Promise.all(appIds.map((appId) => checkingApps.get(appId)));\n}\n\nexport function getCheckedApp(appId: string) {\n if (window.STANDALONE_MICRO_APPS) {\n return checkedApps.get(appId);\n }\n}\n\nfunction scanInstalledAppsUsage(storyboard: Storyboard) {\n const usage: MemberCallUsage = {\n usedArgs: new Set(),\n };\n // `INSTALLED_APPS.has(...)` is not available in storyboard functions\n const { customTemplates, menus } = storyboard.meta ?? {};\n traverseStoryboardExpressions(\n [storyboard.routes, customTemplates, menus],\n (node, parent) => {\n collectInstalledAppsHasUsage(usage, node, parent);\n },\n \"INSTALLED_APPS\"\n );\n return [...usage.usedArgs];\n}\n"],"mappings":"AACA,SACEA,6BAA6B,EAC7BC,4BAA4B,QAEvB,6BAA6B;AACpC,SAASC,mCAAmC,QAAQ,wCAAwC;AAI5F,MAAMC,YAAY,GAAG,IAAIC,GAAG,CAA2C,CAAC;AACxE,MAAMC,WAAW,GAAG,IAAID,GAAG,CAAkC,CAAC;AAE9D,OAAO,SAASE,qBAAqBA,CACnCC,UAAsB,EACtBC,iBAA6C,EAC7C;EACA,IAAIC,MAAM,CAACC,qBAAqB,IAAI,CAACD,MAAM,CAACE,aAAa,EAAE;IACzD,MAAMC,MAAM,GAAGC,sBAAsB,CAACN,UAAU,CAAC;IACjD,MAAMO,SAAmB,GAAG,EAAE;IAC9B,KAAK,MAAMC,KAAK,IAAIH,MAAM,EAAE;MAC1B;MACA,IAAI,CAACT,YAAY,CAACa,GAAG,CAACD,KAAK,CAAC,IAAI,CAACP,iBAAiB,CAACO,KAAK,CAAC,EAAE;QACzDD,SAAS,CAACG,IAAI,CAACF,KAAK,CAAC;MACvB;IACF;IACA,IAAID,SAAS,CAACI,MAAM,KAAK,CAAC,EAAE;MAC1B;IACF;IACA,MAAMC,OAAO,GAAGjB,mCAAmC,CAAC;MAClDkB,KAAK,EAAE;QAAEL,KAAK,EAAE;UAAEM,GAAG,EAAEP;QAAU;MAAE,CAAC;MACpCQ,MAAM,EAAE,CAAC,OAAO,EAAE,gBAAgB,EAAE,eAAe;IACrD,CAAC,CAAC,CAACC,KAAK,CAAEC,KAAK,IAAK;MAClB;MACA;MACA;MACAC,OAAO,CAACD,KAAK,CAAC,2CAA2C,EAAEA,KAAK,CAAC;IACnE,CAAC,CAAC;IACF,KAAK,MAAMT,KAAK,IAAID,SAAS,EAAE;MAC7BX,YAAY,CAACuB,GAAG,CACdX,KAAK,EACLI,OAAO,CAACQ,IAAI,CAAEC,MAAM,IAAK;QAAA,IAAAC,YAAA;QACvB,MAAMC,GAAG,GAAGF,MAAM,aAANA,MAAM,gBAAAC,YAAA,GAAND,MAAM,CAAEG,IAAI,cAAAF,YAAA,uBAAZA,YAAA,CAAcG,IAAI,CAAEC,IAAI,IAAKA,IAAI,CAAClB,KAAK,KAAKA,KAAK,CAAC;QAC9D,MAAMmB,UAAU,GAAGJ,GAAG,GAClB;UACE,GAAGA,GAAG;UACNK,EAAE,EAAEpB;QACN,CAAC,GACDqB,SAAS;QACb/B,WAAW,CAACqB,GAAG,CAACX,KAAK,EAAEmB,UAAU,CAAC;QAClC,OAAOA,UAAU;MACnB,CAAC,CACH,CAAC;IACH;EACF;AACF;AAEA,OAAO,eAAeG,mBAAmBA,CAACzB,MAAgB,EAAE;EAC1D,MAAM0B,OAAO,CAACC,GAAG,CAAC3B,MAAM,CAAC4B,GAAG,CAAEzB,KAAK,IAAKZ,YAAY,CAACsC,GAAG,CAAC1B,KAAK,CAAC,CAAC,CAAC;AACnE;AAEA,OAAO,SAAS2B,aAAaA,CAAC3B,KAAa,EAAE;EAC3C,IAAIN,MAAM,CAACC,qBAAqB,EAAE;IAChC,OAAOL,WAAW,CAACoC,GAAG,CAAC1B,KAAK,CAAC;EAC/B;AACF;AAEA,SAASF,sBAAsBA,CAACN,UAAsB,EAAE;EACtD,MAAMoC,KAAsB,GAAG;IAC7BC,QAAQ,EAAE,IAAIC,GAAG,CAAC;EACpB,CAAC;EACD;EACA,MAAM;IAAEC,eAAe;IAAEC;EAAM,CAAC,GAAGxC,UAAU,CAACyC,IAAI,IAAI,CAAC,CAAC;EACxDhD,6BAA6B,CAC3B,CAACO,UAAU,CAAC0C,MAAM,EAAEH,eAAe,EAAEC,KAAK,CAAC,EAC3C,CAACG,IAAI,EAAEC,MAAM,KAAK;IAChBlD,4BAA4B,CAAC0C,KAAK,EAAEO,IAAI,EAAEC,MAAM,CAAC;EACnD,CAAC,EACD,gBACF,CAAC;EACD,OAAO,CAAC,GAAGR,KAAK,CAACC,QAAQ,CAAC;AAC5B","ignoreList":[]}
@@ -1,36 +1,51 @@
1
- import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
1
  import { difference } from "lodash";
3
2
  import { scanPermissionActionsInAny, scanPermissionActionsInStoryboard } from "@next-core/utils/storyboard";
4
3
  import { PermissionApi_validatePermissions } from "@next-api-sdk/micro-app-sdk";
5
4
  import { getAuth, isLoggedIn } from "./auth.js";
6
- var checkedPermissions = [];
7
- var permissionMap = new Map();
5
+ const checkedPermissions = [];
6
+ const permissionMap = new Map();
8
7
  export function preCheckPermissions(storyboard) {
9
8
  if (isLoggedIn() && !getAuth().isAdmin) {
10
- var usedActions = scanPermissionActionsInStoryboard(storyboard);
9
+ const usedActions = scanPermissionActionsInStoryboard(storyboard);
11
10
  return validatePermissions(usedActions);
12
11
  }
13
12
  }
14
- export function preCheckPermissionsForBrickOrRoute(_x, _x2) {
15
- return _preCheckPermissionsForBrickOrRoute.apply(this, arguments);
16
- }
17
- function _preCheckPermissionsForBrickOrRoute() {
18
- _preCheckPermissionsForBrickOrRoute = _asyncToGenerator(function* (container, asyncComputeRealValue) {
19
- if (isLoggedIn() && !getAuth().isAdmin && Array.isArray(container.permissionsPreCheck)) {
20
- var actions = yield asyncComputeRealValue(container.permissionsPreCheck);
21
- return validatePermissions(actions);
22
- }
23
- });
24
- return _preCheckPermissionsForBrickOrRoute.apply(this, arguments);
13
+ export async function preCheckPermissionsForBrickOrRoute(container, asyncComputeRealValue) {
14
+ if (isLoggedIn() && !getAuth().isAdmin && Array.isArray(container.permissionsPreCheck)) {
15
+ const actions = await asyncComputeRealValue(container.permissionsPreCheck);
16
+ return validatePermissions(actions);
17
+ }
25
18
  }
26
19
  export function preCheckPermissionsForAny(data) {
27
20
  if (isLoggedIn() && !getAuth().isAdmin) {
28
- var usedActions = scanPermissionActionsInAny(data);
21
+ const usedActions = scanPermissionActionsInAny(data);
29
22
  return validatePermissions(usedActions);
30
23
  }
31
24
  }
32
- export function validatePermissions(_x3) {
33
- return _validatePermissions.apply(this, arguments);
25
+ export async function validatePermissions(usedActions) {
26
+ // Do not request known actions.
27
+ const actions = difference(usedActions, [...checkedPermissions]);
28
+ if (actions.length === 0) {
29
+ return;
30
+ }
31
+ checkedPermissions.push(...actions);
32
+ try {
33
+ const result = await PermissionApi_validatePermissions({
34
+ actions
35
+ });
36
+ for (const item of result.actions) {
37
+ permissionMap.set(item.action, item.authorizationStatus);
38
+ if (item.authorizationStatus === "undefined") {
39
+ // eslint-disable-next-line no-console
40
+ console.error(`Undefined permission action: "${item.action}"`);
41
+ }
42
+ }
43
+ } catch (error) {
44
+ // Allow pre-check to fail, and
45
+ // make it not crash when the backend service is not updated.
46
+ // eslint-disable-next-line no-console
47
+ console.error("Pre-check permissions failed", error);
48
+ }
34
49
  }
35
50
 
36
51
  /**
@@ -39,34 +54,6 @@ export function validatePermissions(_x3) {
39
54
  *
40
55
  * @param actions - Required permission actions.
41
56
  */
42
- function _validatePermissions() {
43
- _validatePermissions = _asyncToGenerator(function* (usedActions) {
44
- // Do not request known actions.
45
- var actions = difference(usedActions, [...checkedPermissions]);
46
- if (actions.length === 0) {
47
- return;
48
- }
49
- checkedPermissions.push(...actions);
50
- try {
51
- var result = yield PermissionApi_validatePermissions({
52
- actions
53
- });
54
- for (var item of result.actions) {
55
- permissionMap.set(item.action, item.authorizationStatus);
56
- if (item.authorizationStatus === "undefined") {
57
- // eslint-disable-next-line no-console
58
- console.error("Undefined permission action: \"".concat(item.action, "\""));
59
- }
60
- }
61
- } catch (error) {
62
- // Allow pre-check to fail, and
63
- // make it not crash when the backend service is not updated.
64
- // eslint-disable-next-line no-console
65
- console.error("Pre-check permissions failed", error);
66
- }
67
- });
68
- return _validatePermissions.apply(this, arguments);
69
- }
70
57
  export function checkPermissions() {
71
58
  if (!isLoggedIn()) {
72
59
  return false;
@@ -77,7 +64,7 @@ export function checkPermissions() {
77
64
  for (var _len = arguments.length, actions = new Array(_len), _key = 0; _key < _len; _key++) {
78
65
  actions[_key] = arguments[_key];
79
66
  }
80
- for (var action of actions) {
67
+ for (const action of actions) {
81
68
  // Only **exclusively authorized** permissions are ok.
82
69
  // Those scenarios below will fail:
83
70
  // - unauthorized actions (pre-check results)
@@ -89,7 +76,7 @@ export function checkPermissions() {
89
76
  return false;
90
77
  case undefined:
91
78
  // eslint-disable-next-line no-console
92
- console.error("Un-checked permission action: \"".concat(action, "\", please make sure the permission to check is defined in permissionsPreCheck."));
79
+ console.error(`Un-checked permission action: "${action}", please make sure the permission to check is defined in permissionsPreCheck.`);
93
80
  return false;
94
81
  }
95
82
  }
@@ -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","_x","_x2","_preCheckPermissionsForBrickOrRoute","apply","arguments","_asyncToGenerator","container","asyncComputeRealValue","Array","isArray","permissionsPreCheck","actions","preCheckPermissionsForAny","data","_x3","_validatePermissions","length","push","result","item","set","action","authorizationStatus","console","error","concat","checkPermissions","_len","_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({ actions });\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":["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","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({ actions });\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,9 +1,9 @@
1
- var contractsMap = new Map();
2
- var widgetContractMap = new Map();
3
- var debugContractMap = new Map();
4
- var addContract = (contracts, map) => {
1
+ const contractsMap = new Map();
2
+ const widgetContractMap = new Map();
3
+ const debugContractMap = new Map();
4
+ const addContract = (contracts, map) => {
5
5
  contracts === null || contracts === void 0 || contracts.forEach(contract => {
6
- map.set("".concat(contract.namespaceId, ".").concat(contract.name), contract);
6
+ map.set(`${contract.namespaceId}.${contract.name}`, contract);
7
7
  });
8
8
  };
9
9
  export function collectContract(contracts) {
@@ -1 +1 @@
1
- {"version":3,"file":"CollectContracts.js","names":["contractsMap","Map","widgetContractMap","debugContractMap","addContract","contracts","map","forEach","contract","set","concat","namespaceId","name","collectContract","collectWidgetContract","clearCollectWidgetContract","clear","collectDebugContract","clearDebugContract","getContract","get"],"sources":["../../../src/flowApi/CollectContracts.ts"],"sourcesContent":["import { Contract } from \"@next-core/types\";\n\nconst contractsMap: Map<string, Contract> = new Map();\nconst widgetContractMap: Map<string, Contract> = new Map();\nconst debugContractMap: Map<string, Contract> = new Map();\n\nconst addContract = (\n contracts: Contract[] | undefined,\n map: Map<string, Contract>\n): void => {\n contracts?.forEach((contract) => {\n map.set(`${contract.namespaceId}.${contract.name}`, contract);\n });\n};\n\nexport function collectContract(contracts: Contract[] | undefined): void {\n addContract(contracts, contractsMap);\n}\n\nexport function collectWidgetContract(contracts: Contract[] | undefined): void {\n addContract(contracts, widgetContractMap);\n}\n\nexport function clearCollectWidgetContract(): void {\n widgetContractMap.clear();\n}\n\nexport function collectDebugContract(contracts: Contract[] | undefined): void {\n addContract(contracts, debugContractMap);\n}\n\nexport function clearDebugContract() {\n debugContractMap.clear();\n}\n\nexport function getContract(name: string): Contract | undefined {\n return (\n contractsMap.get(name) ||\n widgetContractMap.get(name) ||\n debugContractMap.get(name)\n );\n}\n"],"mappings":"AAEA,IAAMA,YAAmC,GAAG,IAAIC,GAAG,CAAC,CAAC;AACrD,IAAMC,iBAAwC,GAAG,IAAID,GAAG,CAAC,CAAC;AAC1D,IAAME,gBAAuC,GAAG,IAAIF,GAAG,CAAC,CAAC;AAEzD,IAAMG,WAAW,GAAGA,CAClBC,SAAiC,EACjCC,GAA0B,KACjB;EACTD,SAAS,aAATA,SAAS,eAATA,SAAS,CAAEE,OAAO,CAAEC,QAAQ,IAAK;IAC/BF,GAAG,CAACG,GAAG,IAAAC,MAAA,CAAIF,QAAQ,CAACG,WAAW,OAAAD,MAAA,CAAIF,QAAQ,CAACI,IAAI,GAAIJ,QAAQ,CAAC;EAC/D,CAAC,CAAC;AACJ,CAAC;AAED,OAAO,SAASK,eAAeA,CAACR,SAAiC,EAAQ;EACvED,WAAW,CAACC,SAAS,EAAEL,YAAY,CAAC;AACtC;AAEA,OAAO,SAASc,qBAAqBA,CAACT,SAAiC,EAAQ;EAC7ED,WAAW,CAACC,SAAS,EAAEH,iBAAiB,CAAC;AAC3C;AAEA,OAAO,SAASa,0BAA0BA,CAAA,EAAS;EACjDb,iBAAiB,CAACc,KAAK,CAAC,CAAC;AAC3B;AAEA,OAAO,SAASC,oBAAoBA,CAACZ,SAAiC,EAAQ;EAC5ED,WAAW,CAACC,SAAS,EAAEF,gBAAgB,CAAC;AAC1C;AAEA,OAAO,SAASe,kBAAkBA,CAAA,EAAG;EACnCf,gBAAgB,CAACa,KAAK,CAAC,CAAC;AAC1B;AAEA,OAAO,SAASG,WAAWA,CAACP,IAAY,EAAwB;EAC9D,OACEZ,YAAY,CAACoB,GAAG,CAACR,IAAI,CAAC,IACtBV,iBAAiB,CAACkB,GAAG,CAACR,IAAI,CAAC,IAC3BT,gBAAgB,CAACiB,GAAG,CAACR,IAAI,CAAC;AAE9B","ignoreList":[]}
1
+ {"version":3,"file":"CollectContracts.js","names":["contractsMap","Map","widgetContractMap","debugContractMap","addContract","contracts","map","forEach","contract","set","namespaceId","name","collectContract","collectWidgetContract","clearCollectWidgetContract","clear","collectDebugContract","clearDebugContract","getContract","get"],"sources":["../../../src/flowApi/CollectContracts.ts"],"sourcesContent":["import { Contract } from \"@next-core/types\";\n\nconst contractsMap: Map<string, Contract> = new Map();\nconst widgetContractMap: Map<string, Contract> = new Map();\nconst debugContractMap: Map<string, Contract> = new Map();\n\nconst addContract = (\n contracts: Contract[] | undefined,\n map: Map<string, Contract>\n): void => {\n contracts?.forEach((contract) => {\n map.set(`${contract.namespaceId}.${contract.name}`, contract);\n });\n};\n\nexport function collectContract(contracts: Contract[] | undefined): void {\n addContract(contracts, contractsMap);\n}\n\nexport function collectWidgetContract(contracts: Contract[] | undefined): void {\n addContract(contracts, widgetContractMap);\n}\n\nexport function clearCollectWidgetContract(): void {\n widgetContractMap.clear();\n}\n\nexport function collectDebugContract(contracts: Contract[] | undefined): void {\n addContract(contracts, debugContractMap);\n}\n\nexport function clearDebugContract() {\n debugContractMap.clear();\n}\n\nexport function getContract(name: string): Contract | undefined {\n return (\n contractsMap.get(name) ||\n widgetContractMap.get(name) ||\n debugContractMap.get(name)\n );\n}\n"],"mappings":"AAEA,MAAMA,YAAmC,GAAG,IAAIC,GAAG,CAAC,CAAC;AACrD,MAAMC,iBAAwC,GAAG,IAAID,GAAG,CAAC,CAAC;AAC1D,MAAME,gBAAuC,GAAG,IAAIF,GAAG,CAAC,CAAC;AAEzD,MAAMG,WAAW,GAAGA,CAClBC,SAAiC,EACjCC,GAA0B,KACjB;EACTD,SAAS,aAATA,SAAS,eAATA,SAAS,CAAEE,OAAO,CAAEC,QAAQ,IAAK;IAC/BF,GAAG,CAACG,GAAG,CAAC,GAAGD,QAAQ,CAACE,WAAW,IAAIF,QAAQ,CAACG,IAAI,EAAE,EAAEH,QAAQ,CAAC;EAC/D,CAAC,CAAC;AACJ,CAAC;AAED,OAAO,SAASI,eAAeA,CAACP,SAAiC,EAAQ;EACvED,WAAW,CAACC,SAAS,EAAEL,YAAY,CAAC;AACtC;AAEA,OAAO,SAASa,qBAAqBA,CAACR,SAAiC,EAAQ;EAC7ED,WAAW,CAACC,SAAS,EAAEH,iBAAiB,CAAC;AAC3C;AAEA,OAAO,SAASY,0BAA0BA,CAAA,EAAS;EACjDZ,iBAAiB,CAACa,KAAK,CAAC,CAAC;AAC3B;AAEA,OAAO,SAASC,oBAAoBA,CAACX,SAAiC,EAAQ;EAC5ED,WAAW,CAACC,SAAS,EAAEF,gBAAgB,CAAC;AAC1C;AAEA,OAAO,SAASc,kBAAkBA,CAAA,EAAG;EACnCd,gBAAgB,CAACY,KAAK,CAAC,CAAC;AAC1B;AAEA,OAAO,SAASG,WAAWA,CAACP,IAAY,EAAwB;EAC9D,OACEX,YAAY,CAACmB,GAAG,CAACR,IAAI,CAAC,IACtBT,iBAAiB,CAACiB,GAAG,CAACR,IAAI,CAAC,IAC3BR,gBAAgB,CAACgB,GAAG,CAACR,IAAI,CAAC;AAE9B","ignoreList":[]}
@@ -1,33 +1,26 @@
1
- import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
1
  import yaml from "js-yaml";
3
2
  import { ContractApi_searchSingleContract } from "@next-api-sdk/api-gateway-sdk";
4
3
  import { getContract } from "./CollectContracts.js";
5
- var remoteContractCache = new Map();
4
+ const remoteContractCache = new Map();
6
5
 
7
6
  // Legacy Custom API: `${namespace}@${name}`
8
7
  // Flow API: `${namespace}@${name}:${version}`
9
8
  export function isFlowApiProvider(provider) {
10
9
  return provider.includes("@");
11
10
  }
12
- export function getArgsOfFlowApi(_x, _x2, _x3, _x4) {
13
- return _getArgsOfFlowApi.apply(this, arguments);
14
- }
15
- function _getArgsOfFlowApi() {
16
- _getArgsOfFlowApi = _asyncToGenerator(function* (provider, originalArgs, method, stream) {
17
- if (!provider.includes(":")) {
18
- throw new Error("You're using legacy Custom API \"".concat(provider, "\" which is dropped in v3, please use Flow API instead"));
19
- }
20
- var apiDefinition = yield fetchFlowApiDefinition(provider);
21
- if (!apiDefinition) {
22
- throw new FlowApiNotFoundError("Flow API not found: \"".concat(provider, "\""));
23
- }
24
- var apiProfile = getApiProfileFromApiDefinition(provider, apiDefinition);
25
- return getApiArgsFromApiProfile(apiProfile, originalArgs, method, stream);
26
- });
27
- return _getArgsOfFlowApi.apply(this, arguments);
11
+ export async function getArgsOfFlowApi(provider, originalArgs, method, stream) {
12
+ if (!provider.includes(":")) {
13
+ throw new Error(`You're using legacy Custom API "${provider}" which is dropped in v3, please use Flow API instead`);
14
+ }
15
+ const apiDefinition = await fetchFlowApiDefinition(provider);
16
+ if (!apiDefinition) {
17
+ throw new FlowApiNotFoundError(`Flow API not found: "${provider}"`);
18
+ }
19
+ const apiProfile = getApiProfileFromApiDefinition(provider, apiDefinition);
20
+ return getApiArgsFromApiProfile(apiProfile, originalArgs, method, stream);
28
21
  }
29
22
  function getApiArgsFromApiProfile(_ref, originalArgs, method, stream) {
30
- var {
23
+ let {
31
24
  uri,
32
25
  method: apiMethod,
33
26
  ext_fields,
@@ -40,12 +33,12 @@ function getApiArgsFromApiProfile(_ref, originalArgs, method, stream) {
40
33
  request
41
34
  } = _ref;
42
35
  // `saveAs` requires the first argument to be the filename.
43
- var isDownload = method === "saveAs";
44
- var fileName;
36
+ const isDownload = method === "saveAs";
37
+ let fileName;
45
38
  if (isDownload) {
46
39
  fileName = originalArgs.shift();
47
40
  }
48
- var {
41
+ const {
49
42
  url,
50
43
  args
51
44
  } = getTransformedUriAndRestArgs(uri, originalArgs, name, namespace, serviceName, version);
@@ -61,28 +54,28 @@ function getApiArgsFromApiProfile(_ref, originalArgs, method, stream) {
61
54
  }, ...args];
62
55
  }
63
56
  function getTransformedUriAndRestArgs(uri, originalArgs, name, namespace, serviceName, version) {
64
- var prefix = version ? serviceName ? "api/gateway/".concat(serviceName) : "api/gateway/".concat(namespace, ".").concat(name, "@").concat(version) : "api/gateway/api_service.".concat(namespace, ".").concat(name);
65
- var restArgs = originalArgs.slice();
66
- var transformedUri = uri.replace(/:([^/]+)/g, () => restArgs.shift());
57
+ const prefix = version ? serviceName ? `api/gateway/${serviceName}` : `api/gateway/${namespace}.${name}@${version}` : `api/gateway/api_service.${namespace}.${name}`;
58
+ const restArgs = originalArgs.slice();
59
+ const transformedUri = uri.replace(/:([^/]+)/g, () => restArgs.shift());
67
60
  return {
68
61
  url: prefix + transformedUri,
69
62
  args: restArgs
70
63
  };
71
64
  }
72
65
  function getApiProfileFromApiDefinition(provider, api) {
73
- var _contract$endpoint, _contract$response;
74
- var contract = typeof api.contract === "string" ? yaml.safeLoad(api.contract, {
66
+ var _contract$response;
67
+ const contract = typeof api.contract === "string" ? yaml.safeLoad(api.contract, {
75
68
  schema: yaml.JSON_SCHEMA,
76
69
  json: true
77
70
  }) : api.contract;
78
- var {
71
+ const {
79
72
  uri,
80
73
  method = "GET",
81
74
  ext_fields
82
- } = (_contract$endpoint = contract === null || contract === void 0 ? void 0 : contract.endpoint) !== null && _contract$endpoint !== void 0 ? _contract$endpoint : {};
83
- var responseWrapper = contract !== null && contract !== void 0 && contract.response ? contract.response.wrapper !== false : false;
75
+ } = (contract === null || contract === void 0 ? void 0 : contract.endpoint) ?? {};
76
+ const responseWrapper = contract !== null && contract !== void 0 && contract.response ? contract.response.wrapper !== false : false;
84
77
  if (!uri) {
85
- throw new Error("Missing endpoint.uri in contract of provider \"".concat(provider, "\""));
78
+ throw new Error(`Missing endpoint.uri in contract of provider "${provider}"`);
86
79
  }
87
80
  return {
88
81
  uri,
@@ -97,66 +90,54 @@ function getApiProfileFromApiDefinition(provider, api) {
97
90
  request: contract === null || contract === void 0 ? void 0 : contract.request
98
91
  };
99
92
  }
100
- function fetchFlowApiDefinition(_x5) {
101
- return _fetchFlowApiDefinition.apply(this, arguments);
102
- }
103
- function _fetchFlowApiDefinition() {
104
- _fetchFlowApiDefinition = _asyncToGenerator(function* (provider) {
105
- var [namespaceName, nameWithVersion] = provider.split("@");
106
- var [name, version] = nameWithVersion.split(":");
107
-
108
- // Do not cache the result of `geContract`, which will lead to no contract
109
- // will be found when render twice immediately.
110
- var contract = getContract("".concat(namespaceName, ".").concat(name));
111
- if (contract) {
112
- return {
113
- name: contract.name,
114
- namespace: contract.namespaceId,
115
- serviceName: contract.serviceName,
116
- version: contract.version,
117
- contract: {
118
- endpoint: contract.endpoint,
119
- response: contract.response,
120
- request: contract.request
121
- }
122
- };
123
- }
124
- var promise = remoteContractCache.get(provider);
125
- if (!promise) {
126
- promise = fetchFlowApiDefinitionFromRemote(namespaceName, name, version);
127
- remoteContractCache.set(provider, promise);
128
- }
129
- return promise;
130
- });
131
- return _fetchFlowApiDefinition.apply(this, arguments);
132
- }
133
- function fetchFlowApiDefinitionFromRemote(_x6, _x7, _x8) {
134
- return _fetchFlowApiDefinitionFromRemote.apply(this, arguments);
135
- }
136
- function _fetchFlowApiDefinitionFromRemote() {
137
- _fetchFlowApiDefinitionFromRemote = _asyncToGenerator(function* (namespace, name, version) {
138
- var _contractData$namespa;
139
- var {
140
- contractData
141
- } = yield ContractApi_searchSingleContract({
142
- contractName: "".concat(namespace, ".").concat(name),
143
- version
144
- });
93
+ async function fetchFlowApiDefinition(provider) {
94
+ const [namespaceName, nameWithVersion] = provider.split("@");
95
+ const [name, version] = nameWithVersion.split(":");
145
96
 
146
- // return undefined if don't found contract
147
- return contractData ? {
148
- name: contractData.name,
149
- namespace: (_contractData$namespa = contractData.namespace) === null || _contractData$namespa === void 0 || (_contractData$namespa = _contractData$namespa[0]) === null || _contractData$namespa === void 0 ? void 0 : _contractData$namespa.name,
150
- serviceName: contractData.serviceName,
151
- version: contractData.version,
97
+ // Do not cache the result of `geContract`, which will lead to no contract
98
+ // will be found when render twice immediately.
99
+ const contract = getContract(`${namespaceName}.${name}`);
100
+ if (contract) {
101
+ return {
102
+ name: contract.name,
103
+ namespace: contract.namespaceId,
104
+ serviceName: contract.serviceName,
105
+ version: contract.version,
152
106
  contract: {
153
- endpoint: contractData.endpoint,
154
- response: contractData.response,
155
- request: contractData.request
107
+ endpoint: contract.endpoint,
108
+ response: contract.response,
109
+ request: contract.request
156
110
  }
157
- } : null;
111
+ };
112
+ }
113
+ let promise = remoteContractCache.get(provider);
114
+ if (!promise) {
115
+ promise = fetchFlowApiDefinitionFromRemote(namespaceName, name, version);
116
+ remoteContractCache.set(provider, promise);
117
+ }
118
+ return promise;
119
+ }
120
+ async function fetchFlowApiDefinitionFromRemote(namespace, name, version) {
121
+ var _contractData$namespa;
122
+ const {
123
+ contractData
124
+ } = await ContractApi_searchSingleContract({
125
+ contractName: `${namespace}.${name}`,
126
+ version
158
127
  });
159
- return _fetchFlowApiDefinitionFromRemote.apply(this, arguments);
128
+
129
+ // return undefined if don't found contract
130
+ return contractData ? {
131
+ name: contractData.name,
132
+ namespace: (_contractData$namespa = contractData.namespace) === null || _contractData$namespa === void 0 || (_contractData$namespa = _contractData$namespa[0]) === null || _contractData$namespa === void 0 ? void 0 : _contractData$namespa.name,
133
+ serviceName: contractData.serviceName,
134
+ version: contractData.version,
135
+ contract: {
136
+ endpoint: contractData.endpoint,
137
+ response: contractData.response,
138
+ request: contractData.request
139
+ }
140
+ } : null;
160
141
  }
161
142
  class FlowApiNotFoundError extends Error {
162
143
  constructor(message) {
@@ -1 +1 @@
1
- {"version":3,"file":"FlowApi.js","names":["yaml","ContractApi_searchSingleContract","getContract","remoteContractCache","Map","isFlowApiProvider","provider","includes","getArgsOfFlowApi","_x","_x2","_x3","_x4","_getArgsOfFlowApi","apply","arguments","_asyncToGenerator","originalArgs","method","stream","Error","concat","apiDefinition","fetchFlowApiDefinition","FlowApiNotFoundError","apiProfile","getApiProfileFromApiDefinition","getApiArgsFromApiProfile","_ref","uri","apiMethod","ext_fields","name","namespace","serviceName","responseWrapper","version","isFileType","request","isDownload","fileName","shift","url","args","getTransformedUriAndRestArgs","originalUri","prefix","restArgs","slice","transformedUri","replace","api","_contract$endpoint","_contract$response","contract","safeLoad","schema","JSON_SCHEMA","json","endpoint","response","wrapper","toLowerCase","type","_x5","_fetchFlowApiDefinition","namespaceName","nameWithVersion","split","namespaceId","promise","get","fetchFlowApiDefinitionFromRemote","set","_x6","_x7","_x8","_fetchFlowApiDefinitionFromRemote","_contractData$namespa","contractData","contractName","constructor","message","captureStackTrace"],"sources":["../../../src/flowApi/FlowApi.ts"],"sourcesContent":["import yaml from \"js-yaml\";\nimport { ContractApi_searchSingleContract } from \"@next-api-sdk/api-gateway-sdk\";\nimport { ContractRequest, ContractResponse, ExtField } from \"@next-core/types\";\nimport { getContract } from \"./CollectContracts.js\";\n\nconst remoteContractCache = new Map<\n string,\n Promise<CustomApiDefinition | null>\n>();\n\n// Legacy Custom API: `${namespace}@${name}`\n// Flow API: `${namespace}@${name}:${version}`\nexport function isFlowApiProvider(provider: string): boolean {\n return provider.includes(\"@\");\n}\n\nexport async function getArgsOfFlowApi(\n provider: string,\n originalArgs: unknown[],\n method?: string,\n stream?: boolean\n): Promise<unknown[]> {\n if (!provider.includes(\":\")) {\n throw new Error(\n `You're using legacy Custom API \"${provider}\" which is dropped in v3, please use Flow API instead`\n );\n }\n\n const apiDefinition = await fetchFlowApiDefinition(provider);\n\n if (!apiDefinition) {\n throw new FlowApiNotFoundError(`Flow API not found: \"${provider}\"`);\n }\n\n const apiProfile = getApiProfileFromApiDefinition(provider, apiDefinition);\n\n return getApiArgsFromApiProfile(apiProfile, originalArgs, method, stream);\n}\n\nfunction getApiArgsFromApiProfile(\n {\n uri,\n method: apiMethod,\n ext_fields,\n name,\n namespace,\n serviceName,\n responseWrapper,\n version,\n isFileType,\n request,\n }: CustomApiProfile,\n originalArgs: unknown[],\n method?: string,\n stream?: boolean\n): unknown[] {\n // `saveAs` requires the first argument to be the filename.\n const isDownload = method === \"saveAs\";\n let fileName: string | undefined;\n if (isDownload) {\n fileName = originalArgs.shift() as string;\n }\n\n const { url, args } = getTransformedUriAndRestArgs(\n uri,\n originalArgs,\n name,\n namespace,\n serviceName,\n version\n );\n\n return [\n ...(isDownload ? [fileName] : []),\n {\n url,\n originalUri: uri,\n method: apiMethod,\n ext_fields,\n responseWrapper,\n request,\n isFileType,\n stream,\n },\n ...args,\n ];\n}\n\nfunction getTransformedUriAndRestArgs(\n uri: string,\n originalArgs: unknown[],\n name: string,\n namespace: string,\n serviceName: string | undefined,\n version?: string\n): { url: string; args: unknown[] } {\n const prefix = version\n ? serviceName\n ? `api/gateway/${serviceName}`\n : `api/gateway/${namespace}.${name}@${version}`\n : `api/gateway/api_service.${namespace}.${name}`;\n const restArgs = originalArgs.slice();\n const transformedUri = uri.replace(\n /:([^/]+)/g,\n () => restArgs.shift() as string\n );\n return {\n url: prefix + transformedUri,\n args: restArgs,\n };\n}\n\nfunction getApiProfileFromApiDefinition(\n provider: string,\n api: CustomApiDefinition\n): CustomApiProfile {\n const contract: CustomApiDefinition[\"contract\"] =\n typeof api.contract === \"string\"\n ? (yaml.safeLoad(api.contract, {\n schema: yaml.JSON_SCHEMA,\n json: true,\n }) as CustomApiDefinition[\"contract\"])\n : api.contract;\n const { uri, method = \"GET\", ext_fields } = contract?.endpoint ?? {};\n const responseWrapper = contract?.response\n ? contract.response.wrapper !== false\n : false;\n if (!uri) {\n throw new Error(\n `Missing endpoint.uri in contract of provider \"${provider}\"`\n );\n }\n return {\n uri,\n method: method.toLowerCase() === \"list\" ? \"get\" : method,\n ext_fields,\n name: api.name,\n namespace: api.namespace,\n serviceName: api.serviceName,\n version: api.version,\n isFileType: contract?.response?.type === \"file\",\n responseWrapper,\n request: contract?.request,\n };\n}\n\nasync function fetchFlowApiDefinition(\n provider: string\n): Promise<CustomApiDefinition | null> {\n const [namespaceName, nameWithVersion] = provider.split(\"@\");\n const [name, version] = nameWithVersion.split(\":\");\n\n // Do not cache the result of `geContract`, which will lead to no contract\n // will be found when render twice immediately.\n const contract = getContract(`${namespaceName}.${name}`);\n if (contract) {\n return {\n name: contract.name,\n namespace: contract.namespaceId,\n serviceName: contract.serviceName,\n version: contract.version,\n contract: {\n endpoint: contract.endpoint,\n response: contract.response,\n request: contract.request,\n },\n };\n }\n let promise = remoteContractCache.get(provider);\n if (!promise) {\n promise = fetchFlowApiDefinitionFromRemote(namespaceName, name, version);\n remoteContractCache.set(provider, promise);\n }\n return promise;\n}\n\nasync function fetchFlowApiDefinitionFromRemote(\n namespace: string,\n name: string,\n version: string\n): Promise<CustomApiDefinition | null> {\n const { contractData } = await ContractApi_searchSingleContract({\n contractName: `${namespace}.${name}`,\n version,\n });\n\n // return undefined if don't found contract\n return contractData\n ? {\n name: contractData.name,\n namespace: contractData.namespace?.[0]?.name,\n serviceName: contractData.serviceName,\n version: contractData.version,\n contract: {\n endpoint: contractData.endpoint,\n response: contractData.response,\n request: contractData.request,\n },\n }\n : null;\n}\n\nexport interface CustomApiDefinition {\n name: string;\n namespace: string;\n version?: string;\n serviceName?: string;\n contract?: {\n endpoint: {\n ext_fields?: ExtField[];\n uri: string;\n method:\n | \"POST\"\n | \"post\"\n | \"PUT\"\n | \"put\"\n | \"GET\"\n | \"get\"\n | \"DELETE\"\n | \"delete\"\n | \"LIST\"\n | \"list\"\n | \"PATCH\"\n | \"patch\"\n | \"HEAD\"\n | \"head\";\n };\n request?: ContractRequest;\n response?: ContractResponse;\n };\n}\n\nexport interface CustomApiProfile {\n uri: string;\n method: string;\n name: string;\n namespace: string;\n serviceName?: string;\n responseWrapper: boolean;\n version?: string;\n isFileType?: boolean;\n ext_fields?: ExtField[];\n request?: ContractRequest;\n}\n\nclass FlowApiNotFoundError extends Error {\n constructor(message: string) {\n // Pass remaining arguments (including vendor specific ones) to parent constructor\n super(message);\n\n this.name = \"FlowApiNotFoundError\";\n\n // Maintains proper stack trace for where our error was thrown (only available on V8)\n // istanbul ignore else\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, FlowApiNotFoundError);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"FlowApi.js","names":["yaml","ContractApi_searchSingleContract","getContract","remoteContractCache","Map","isFlowApiProvider","provider","includes","getArgsOfFlowApi","originalArgs","method","stream","Error","apiDefinition","fetchFlowApiDefinition","FlowApiNotFoundError","apiProfile","getApiProfileFromApiDefinition","getApiArgsFromApiProfile","_ref","uri","apiMethod","ext_fields","name","namespace","serviceName","responseWrapper","version","isFileType","request","isDownload","fileName","shift","url","args","getTransformedUriAndRestArgs","originalUri","prefix","restArgs","slice","transformedUri","replace","api","_contract$response","contract","safeLoad","schema","JSON_SCHEMA","json","endpoint","response","wrapper","toLowerCase","type","namespaceName","nameWithVersion","split","namespaceId","promise","get","fetchFlowApiDefinitionFromRemote","set","_contractData$namespa","contractData","contractName","constructor","message","captureStackTrace"],"sources":["../../../src/flowApi/FlowApi.ts"],"sourcesContent":["import yaml from \"js-yaml\";\nimport { ContractApi_searchSingleContract } from \"@next-api-sdk/api-gateway-sdk\";\nimport { ContractRequest, ContractResponse, ExtField } from \"@next-core/types\";\nimport { getContract } from \"./CollectContracts.js\";\n\nconst remoteContractCache = new Map<\n string,\n Promise<CustomApiDefinition | null>\n>();\n\n// Legacy Custom API: `${namespace}@${name}`\n// Flow API: `${namespace}@${name}:${version}`\nexport function isFlowApiProvider(provider: string): boolean {\n return provider.includes(\"@\");\n}\n\nexport async function getArgsOfFlowApi(\n provider: string,\n originalArgs: unknown[],\n method?: string,\n stream?: boolean\n): Promise<unknown[]> {\n if (!provider.includes(\":\")) {\n throw new Error(\n `You're using legacy Custom API \"${provider}\" which is dropped in v3, please use Flow API instead`\n );\n }\n\n const apiDefinition = await fetchFlowApiDefinition(provider);\n\n if (!apiDefinition) {\n throw new FlowApiNotFoundError(`Flow API not found: \"${provider}\"`);\n }\n\n const apiProfile = getApiProfileFromApiDefinition(provider, apiDefinition);\n\n return getApiArgsFromApiProfile(apiProfile, originalArgs, method, stream);\n}\n\nfunction getApiArgsFromApiProfile(\n {\n uri,\n method: apiMethod,\n ext_fields,\n name,\n namespace,\n serviceName,\n responseWrapper,\n version,\n isFileType,\n request,\n }: CustomApiProfile,\n originalArgs: unknown[],\n method?: string,\n stream?: boolean\n): unknown[] {\n // `saveAs` requires the first argument to be the filename.\n const isDownload = method === \"saveAs\";\n let fileName: string | undefined;\n if (isDownload) {\n fileName = originalArgs.shift() as string;\n }\n\n const { url, args } = getTransformedUriAndRestArgs(\n uri,\n originalArgs,\n name,\n namespace,\n serviceName,\n version\n );\n\n return [\n ...(isDownload ? [fileName] : []),\n {\n url,\n originalUri: uri,\n method: apiMethod,\n ext_fields,\n responseWrapper,\n request,\n isFileType,\n stream,\n },\n ...args,\n ];\n}\n\nfunction getTransformedUriAndRestArgs(\n uri: string,\n originalArgs: unknown[],\n name: string,\n namespace: string,\n serviceName: string | undefined,\n version?: string\n): { url: string; args: unknown[] } {\n const prefix = version\n ? serviceName\n ? `api/gateway/${serviceName}`\n : `api/gateway/${namespace}.${name}@${version}`\n : `api/gateway/api_service.${namespace}.${name}`;\n const restArgs = originalArgs.slice();\n const transformedUri = uri.replace(\n /:([^/]+)/g,\n () => restArgs.shift() as string\n );\n return {\n url: prefix + transformedUri,\n args: restArgs,\n };\n}\n\nfunction getApiProfileFromApiDefinition(\n provider: string,\n api: CustomApiDefinition\n): CustomApiProfile {\n const contract: CustomApiDefinition[\"contract\"] =\n typeof api.contract === \"string\"\n ? (yaml.safeLoad(api.contract, {\n schema: yaml.JSON_SCHEMA,\n json: true,\n }) as CustomApiDefinition[\"contract\"])\n : api.contract;\n const { uri, method = \"GET\", ext_fields } = contract?.endpoint ?? {};\n const responseWrapper = contract?.response\n ? contract.response.wrapper !== false\n : false;\n if (!uri) {\n throw new Error(\n `Missing endpoint.uri in contract of provider \"${provider}\"`\n );\n }\n return {\n uri,\n method: method.toLowerCase() === \"list\" ? \"get\" : method,\n ext_fields,\n name: api.name,\n namespace: api.namespace,\n serviceName: api.serviceName,\n version: api.version,\n isFileType: contract?.response?.type === \"file\",\n responseWrapper,\n request: contract?.request,\n };\n}\n\nasync function fetchFlowApiDefinition(\n provider: string\n): Promise<CustomApiDefinition | null> {\n const [namespaceName, nameWithVersion] = provider.split(\"@\");\n const [name, version] = nameWithVersion.split(\":\");\n\n // Do not cache the result of `geContract`, which will lead to no contract\n // will be found when render twice immediately.\n const contract = getContract(`${namespaceName}.${name}`);\n if (contract) {\n return {\n name: contract.name,\n namespace: contract.namespaceId,\n serviceName: contract.serviceName,\n version: contract.version,\n contract: {\n endpoint: contract.endpoint,\n response: contract.response,\n request: contract.request,\n },\n };\n }\n let promise = remoteContractCache.get(provider);\n if (!promise) {\n promise = fetchFlowApiDefinitionFromRemote(namespaceName, name, version);\n remoteContractCache.set(provider, promise);\n }\n return promise;\n}\n\nasync function fetchFlowApiDefinitionFromRemote(\n namespace: string,\n name: string,\n version: string\n): Promise<CustomApiDefinition | null> {\n const { contractData } = await ContractApi_searchSingleContract({\n contractName: `${namespace}.${name}`,\n version,\n });\n\n // return undefined if don't found contract\n return contractData\n ? {\n name: contractData.name,\n namespace: contractData.namespace?.[0]?.name,\n serviceName: contractData.serviceName,\n version: contractData.version,\n contract: {\n endpoint: contractData.endpoint,\n response: contractData.response,\n request: contractData.request,\n },\n }\n : null;\n}\n\nexport interface CustomApiDefinition {\n name: string;\n namespace: string;\n version?: string;\n serviceName?: string;\n contract?: {\n endpoint: {\n ext_fields?: ExtField[];\n uri: string;\n method:\n | \"POST\"\n | \"post\"\n | \"PUT\"\n | \"put\"\n | \"GET\"\n | \"get\"\n | \"DELETE\"\n | \"delete\"\n | \"LIST\"\n | \"list\"\n | \"PATCH\"\n | \"patch\"\n | \"HEAD\"\n | \"head\";\n };\n request?: ContractRequest;\n response?: ContractResponse;\n };\n}\n\nexport interface CustomApiProfile {\n uri: string;\n method: string;\n name: string;\n namespace: string;\n serviceName?: string;\n responseWrapper: boolean;\n version?: string;\n isFileType?: boolean;\n ext_fields?: ExtField[];\n request?: ContractRequest;\n}\n\nclass FlowApiNotFoundError extends Error {\n constructor(message: string) {\n // Pass remaining arguments (including vendor specific ones) to parent constructor\n super(message);\n\n this.name = \"FlowApiNotFoundError\";\n\n // Maintains proper stack trace for where our error was thrown (only available on V8)\n // istanbul ignore else\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, FlowApiNotFoundError);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}