@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:
|
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:
|
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:
|
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-
|
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:
|
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<
|
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 {};
|
package/out/sbvr-api/actions.js
CHANGED
@@ -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-
|
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-
|
152
|
+
"publishedAt": "2025-05-01T13:16:36.421Z"
|
153
153
|
}
|
154
154
|
}
|
package/src/sbvr-api/actions.ts
CHANGED
@@ -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
|
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:
|
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):
|
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();
|