@balena/pinejs 21.4.0-build-add-actions-example-1ad1a8bf73a68b5d6de8214515769d1e562721ba-1 → 21.4.0-build-add-actions-example-6e3f5d12bf1644c266f898558c5a1a25ef595f2b-1

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.
@@ -1,6 +1,6 @@
1
1
  - commits:
2
2
  - subject: Add multipart upload actions
3
- hash: 1ad1a8bf73a68b5d6de8214515769d1e562721ba
3
+ hash: 6e3f5d12bf1644c266f898558c5a1a25ef595f2b
4
4
  body: ""
5
5
  footer:
6
6
  Change-type: minor
@@ -8,7 +8,7 @@
8
8
  author: Otavio Jacobi
9
9
  nested: []
10
10
  - subject: Add webresource vocabulary
11
- hash: e980f56d34225c4cc8ea0dd66061c1765e3e2cb8
11
+ hash: b20dcfaa27fbc7a3d64600b55882a65cdaa99c59
12
12
  body: ""
13
13
  footer:
14
14
  Change-type: minor
@@ -16,16 +16,18 @@
16
16
  author: Otavio Jacobi
17
17
  nested: []
18
18
  - subject: Add support for defining odata actions
19
- hash: 32c9efff1f1478325ba4c336e45468ff119ff31c
19
+ hash: 57ea3eb16fe9ec8e28ea12b969da062ec4374a2d
20
20
  body: ""
21
21
  footer:
22
+ See: https://balena.fibery.io/search/9OI72#Work/Improvement/Add-odata-actions-foundation-for-pinejs-2818
23
+ see: https://balena.fibery.io/search/9OI72#Work/Improvement/Add-odata-actions-foundation-for-pinejs-2818
22
24
  Change-type: minor
23
25
  change-type: minor
24
26
  author: Otavio Jacobi
25
27
  nested: []
26
28
  version: 21.4.0
27
29
  title: ""
28
- date: 2025-05-01T00:58:09.084Z
30
+ date: 2025-05-01T13:16:35.320Z
29
31
  - commits:
30
32
  - subject: Add multipart upload interface for handlers
31
33
  hash: d78ee0da169cb9b252bfe8d51c4f57cd10051475
@@ -2,7 +2,6 @@ import type { ODataQuery } from '@balena/odata-parser';
2
2
  import { type ParsedODataRequest } from '../sbvr-api/uri-parser.js';
3
3
  import { api, type Response } from '../sbvr-api/sbvr-utils.js';
4
4
  import type { Tx } from '../database-layer/db.js';
5
- import type { Params } from 'pinejs-client-core';
6
5
  export type ODataActionRequest = Omit<ParsedODataRequest, 'odataQuery'> & {
7
6
  odataQuery: Omit<ODataQuery, 'property'> & {
8
7
  property: {
@@ -15,18 +14,12 @@ export type ODataActionArgs<Vocab extends string = string> = {
15
14
  request: ODataActionRequest;
16
15
  tx: Tx;
17
16
  api: (typeof api)[Vocab];
18
- id: Params['id'];
17
+ id: unknown;
19
18
  req: ActionReq;
20
19
  };
21
20
  export type ODataAction<Vocab extends string = string> = (args: ODataActionArgs<Vocab>) => Promise<Response>;
22
21
  export declare const isActionRequest: (request: ParsedODataRequest) => request is ODataActionRequest;
23
22
  export declare const runAction: (request: ODataActionRequest, req: ActionReq) => Promise<Response>;
24
23
  export declare const addAction: <Vocab extends string>(vocabulary: Vocab, resourceName: string, actionName: string, action: ODataAction<Vocab>) => void;
25
- export declare const canRunAction: (request: ParsedODataRequest, req: ActionReq, actionName: string, tx: Tx) => Promise<((string | number | Date | {
26
- '@': string;
27
- }) | {
28
- [x: string]: (string | number | Date | {
29
- '@': string;
30
- }) | undefined;
31
- }) | undefined>;
24
+ export declare const canRunAction: (request: ParsedODataRequest, req: ActionReq, actionName: string, tx: Tx) => Promise<unknown>;
32
25
  export {};
@@ -41,7 +41,11 @@ export const addAction = (vocabulary, resourceName, actionName, action) => {
41
41
  export const canRunAction = async (request, req, actionName, tx) => {
42
42
  const canAccessUrl = request.url
43
43
  .slice(1)
44
+ .split('?')[0]
44
45
  .replace(new RegExp(`(${actionName})$`), 'canAccess');
46
+ if (!canAccessUrl.endsWith('/canAccess')) {
47
+ throw new UnauthorizedError();
48
+ }
45
49
  const applicationApi = api[request.vocabulary];
46
50
  if (!applicationApi) {
47
51
  throw new BadRequestError(`Could not find model ${request.vocabulary}`);
@@ -1 +1 @@
1
- {"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/sbvr-api/actions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/sbvr-api/actions.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@balena/pinejs",
3
- "version": "21.4.0-build-add-actions-example-1ad1a8bf73a68b5d6de8214515769d1e562721ba-1",
3
+ "version": "21.4.0-build-add-actions-example-6e3f5d12bf1644c266f898558c5a1a25ef595f2b-1",
4
4
  "main": "out/server-glue/module.js",
5
5
  "type": "module",
6
6
  "repository": "git@github.com:balena-io/pinejs.git",
@@ -149,6 +149,6 @@
149
149
  "recursive": true
150
150
  },
151
151
  "versionist": {
152
- "publishedAt": "2025-05-01T00:58:10.202Z"
152
+ "publishedAt": "2025-05-01T13:16:36.421Z"
153
153
  }
154
154
  }
@@ -6,7 +6,7 @@ import {
6
6
  import { api, type Response } from '../sbvr-api/sbvr-utils.js';
7
7
  import type { Tx } from '../database-layer/db.js';
8
8
  import { sbvrUtils } from '../server-glue/module.js';
9
- import type { AnyObject, Params } from 'pinejs-client-core';
9
+ import type { AnyObject } from 'pinejs-client-core';
10
10
  import { UnauthorizedError } from '../sbvr-api/errors.js';
11
11
 
12
12
  export type ODataActionRequest = Omit<ParsedODataRequest, 'odataQuery'> & {
@@ -23,7 +23,7 @@ export type ODataActionArgs<Vocab extends string = string> = {
23
23
  request: ODataActionRequest;
24
24
  tx: Tx;
25
25
  api: (typeof api)[Vocab];
26
- id: Params['id'];
26
+ id: unknown;
27
27
  req: ActionReq;
28
28
  };
29
29
  export type ODataAction<Vocab extends string = string> = (
@@ -110,8 +110,13 @@ export const canRunAction = async (
110
110
  ) => {
111
111
  const canAccessUrl = request.url
112
112
  .slice(1)
113
+ .split('?')[0]
113
114
  .replace(new RegExp(`(${actionName})$`), 'canAccess');
114
115
 
116
+ if (!canAccessUrl.endsWith('/canAccess')) {
117
+ throw new UnauthorizedError();
118
+ }
119
+
115
120
  const applicationApi = api[request.vocabulary];
116
121
  if (!applicationApi) {
117
122
  throw new BadRequestError(`Could not find model ${request.vocabulary}`);
@@ -127,7 +132,7 @@ export const canRunAction = async (
127
132
  return canAccessResourceId(res);
128
133
  };
129
134
 
130
- const canAccessResourceId = (canAccessResponse: AnyObject): Params['id'] => {
135
+ const canAccessResourceId = (canAccessResponse: AnyObject): unknown => {
131
136
  const item = canAccessResponse?.d?.[0];
132
137
  if (!item || typeof item !== 'object') {
133
138
  throw new UnauthorizedError();