@appsemble/node-utils 0.27.12 → 0.28.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,9 +1,9 @@
1
- # ![](https://gitlab.com/appsemble/appsemble/-/raw/0.27.12/config/assets/logo.svg) Appsemble Node Utilities
1
+ # ![](https://gitlab.com/appsemble/appsemble/-/raw/0.28.2/config/assets/logo.svg) Appsemble Node Utilities
2
2
 
3
3
  > NodeJS utilities used by Appsemble internally.
4
4
 
5
5
  [![npm](https://img.shields.io/npm/v/@appsemble/node-utils)](https://www.npmjs.com/package/@appsemble/node-utils)
6
- [![GitLab CI](https://gitlab.com/appsemble/appsemble/badges/0.27.12/pipeline.svg)](https://gitlab.com/appsemble/appsemble/-/releases/0.27.12)
6
+ [![GitLab CI](https://gitlab.com/appsemble/appsemble/badges/0.28.2/pipeline.svg)](https://gitlab.com/appsemble/appsemble/-/releases/0.28.2)
7
7
  [![Prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://prettier.io)
8
8
 
9
9
  ## Table of Contents
@@ -26,5 +26,5 @@ compatibility is not guaranteed.
26
26
 
27
27
  ## License
28
28
 
29
- [LGPL-3.0-only](https://gitlab.com/appsemble/appsemble/-/blob/0.27.12/LICENSE.md) ©
29
+ [LGPL-3.0-only](https://gitlab.com/appsemble/appsemble/-/blob/0.28.2/LICENSE.md) ©
30
30
  [Appsemble](https://appsemble.com)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@appsemble/node-utils",
3
- "version": "0.27.12",
3
+ "version": "0.28.2",
4
4
  "description": "NodeJS utilities used by Appsemble internally.",
5
5
  "keywords": [
6
6
  "app",
@@ -38,8 +38,8 @@
38
38
  "test": "vitest"
39
39
  },
40
40
  "dependencies": {
41
- "@appsemble/types": "0.27.12",
42
- "@appsemble/utils": "0.27.12",
41
+ "@appsemble/types": "0.28.2",
42
+ "@appsemble/utils": "0.28.2",
43
43
  "@formatjs/fast-memoize": "^2.0.0",
44
44
  "@fortawesome/fontawesome-free": "^6.0.0",
45
45
  "@koa/cors": "^4.0.0",
@@ -2,9 +2,13 @@ import { randomUUID } from 'node:crypto';
2
2
  import { isDeepStrictEqual } from 'node:util';
3
3
  import { assertKoaError, getRemapperContext, getResourceDefinition, logger, processResourceBody, throwKoaError, } from '@appsemble/node-utils';
4
4
  import { defaultLocale, remap } from '@appsemble/utils';
5
- function generateQuery(ctx, { parseQuery }) {
5
+ function generateQuery(ctx, { parseQuery }, resourceDefinition) {
6
6
  try {
7
- return parseQuery({ $filter: ctx.queryParams.$filter, $orderby: ctx.queryParams.$orderby });
7
+ return parseQuery({
8
+ $filter: ctx.queryParams.$filter,
9
+ $orderby: ctx.queryParams.$orderby,
10
+ resourceDefinition,
11
+ });
8
12
  }
9
13
  catch (error) {
10
14
  if (error instanceof Error) {
@@ -16,11 +20,13 @@ function generateQuery(ctx, { parseQuery }) {
16
20
  }
17
21
  export function createQueryResources(options) {
18
22
  return async (ctx) => {
19
- var _a, _b, _c;
23
+ var _a, _b, _c, _d, _e;
20
24
  const { pathParams: { appId, resourceType }, queryParams: { $select, $skip, $top }, user, } = ctx;
21
25
  const { getApp, getAppResources, verifyResourceActionPermission } = options;
22
26
  const app = await getApp({ context: ctx, query: { where: { id: appId } } });
23
- const { order, where } = generateQuery(ctx, options);
27
+ const view = (_a = ctx.queryParams) === null || _a === void 0 ? void 0 : _a.view;
28
+ const resourceDefinition = getResourceDefinition(app, resourceType, ctx, view);
29
+ const { order, where } = generateQuery(ctx, options, resourceDefinition);
24
30
  const memberQuery = await verifyResourceActionPermission({
25
31
  context: ctx,
26
32
  app,
@@ -29,6 +35,7 @@ export function createQueryResources(options) {
29
35
  options,
30
36
  ctx,
31
37
  });
38
+ const isSameOrigin = ((_b = ctx === null || ctx === void 0 ? void 0 : ctx.headers) === null || _b === void 0 ? void 0 : _b.origin) === ((_c = ctx === null || ctx === void 0 ? void 0 : ctx.headers) === null || _c === void 0 ? void 0 : _c.host);
32
39
  const findOptions = {
33
40
  limit: $top,
34
41
  offset: $skip,
@@ -41,7 +48,7 @@ export function createQueryResources(options) {
41
48
  type: resourceType,
42
49
  AppId: appId,
43
50
  expires: { or: [{ gt: new Date() }, null] },
44
- ...(app.demoMode ? { seed: false, ephemeral: true } : {}),
51
+ ...(app.demoMode && !isSameOrigin ? { seed: false, ephemeral: true } : {}),
45
52
  },
46
53
  ],
47
54
  },
@@ -53,14 +60,12 @@ export function createQueryResources(options) {
53
60
  type: resourceType,
54
61
  context: ctx,
55
62
  });
56
- const view = (_a = ctx.queryParams) === null || _a === void 0 ? void 0 : _a.view;
57
- const resourceDefinition = getResourceDefinition(app, resourceType, ctx, view);
58
63
  if (view) {
59
64
  const context = await getRemapperContext(app, app.definition.defaultLanguage || defaultLocale, user && {
60
65
  sub: user.id,
61
66
  name: user.name,
62
67
  email: user.primaryEmail,
63
- email_verified: Boolean((_c = (_b = user.EmailAuthorizations) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.verified),
68
+ email_verified: Boolean((_e = (_d = user.EmailAuthorizations) === null || _d === void 0 ? void 0 : _d[0]) === null || _e === void 0 ? void 0 : _e.verified),
64
69
  zoneinfo: user.timezone,
65
70
  }, options, ctx);
66
71
  ctx.body = resources.map((resource) => remap(resourceDefinition.views[view].remap, resource, context));
package/server/types.d.ts CHANGED
@@ -13,6 +13,7 @@ export interface UtilsUser {
13
13
  verified: boolean;
14
14
  }[];
15
15
  subscribed?: boolean;
16
+ demoLoginUser?: boolean;
16
17
  }
17
18
  declare module 'koa' {
18
19
  interface Request {
@@ -57,6 +58,7 @@ declare module 'koas-security' {
57
58
  declare module 'koas-parameters' {
58
59
  interface PathParams {
59
60
  appId: number;
61
+ appPath: string;
60
62
  appCollectionId: number;
61
63
  appOAuth2SecretId: number;
62
64
  appSamlSecretId: number;
@@ -242,6 +244,7 @@ export interface ReloadUserParams {
242
244
  export interface ParseQueryParams {
243
245
  $filter: string;
244
246
  $orderby: string;
247
+ resourceDefinition: ResourceDefinition;
245
248
  }
246
249
  export interface GetAppResourceParams extends GetAppSubEntityParams {
247
250
  findOptions: FindOptions;