@balena/pinejs 21.4.0-build-add-odata-actions-57ea3eb16fe9ec8e28ea12b969da062ec4374a2d-1 → 21.4.0-build-add-odata-actions-ae9038ff8df4e301ebeef7c283c978fcae5ea4e4-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 support for defining odata actions
3
- hash: 57ea3eb16fe9ec8e28ea12b969da062ec4374a2d
3
+ hash: ae9038ff8df4e301ebeef7c283c978fcae5ea4e4
4
4
  body: ""
5
5
  footer:
6
6
  See: https://balena.fibery.io/search/9OI72#Work/Improvement/Add-odata-actions-foundation-for-pinejs-2818
@@ -11,7 +11,7 @@
11
11
  nested: []
12
12
  version: 21.4.0
13
13
  title: ""
14
- date: 2025-05-01T13:11:07.411Z
14
+ date: 2025-05-01T14:24:40.074Z
15
15
  - commits:
16
16
  - subject: Add multipart upload interface for handlers
17
17
  hash: d78ee0da169cb9b252bfe8d51c4f57cd10051475
@@ -14,7 +14,7 @@ export const runAction = async (request, req) => {
14
14
  }
15
15
  const actionName = request.odataQuery.property.resource;
16
16
  const action = actions?.[request.vocabulary]?.[request.resourceName]?.[actionName];
17
- if (!action) {
17
+ if (action == null) {
18
18
  throw new BadRequestError();
19
19
  }
20
20
  return sbvrUtils.db.transaction(async (tx) => {
@@ -25,10 +25,10 @@ export const runAction = async (request, req) => {
25
25
  passthrough: { tx, req },
26
26
  });
27
27
  return await action({
28
- request: request,
28
+ request,
29
29
  tx,
30
30
  api: applicationApi,
31
- req: req,
31
+ req,
32
32
  id,
33
33
  });
34
34
  });
@@ -41,16 +41,16 @@ 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
+ .split('?', 1)[0]
45
45
  .replace(new RegExp(`(${actionName})$`), 'canAccess');
46
46
  if (!canAccessUrl.endsWith('/canAccess')) {
47
47
  throw new UnauthorizedError();
48
48
  }
49
49
  const applicationApi = api[request.vocabulary];
50
- if (!applicationApi) {
50
+ if (applicationApi == null) {
51
51
  throw new BadRequestError(`Could not find model ${request.vocabulary}`);
52
52
  }
53
- const res = await api[request.vocabulary].request({
53
+ const res = await applicationApi.request({
54
54
  method: 'POST',
55
55
  url: canAccessUrl,
56
56
  body: { action: actionName },
@@ -60,11 +60,11 @@ export const canRunAction = async (request, req, actionName, tx) => {
60
60
  };
61
61
  const canAccessResourceId = (canAccessResponse) => {
62
62
  const item = canAccessResponse?.d?.[0];
63
- if (!item || typeof item !== 'object') {
63
+ if (item == null || typeof item !== 'object') {
64
64
  throw new UnauthorizedError();
65
65
  }
66
66
  const keys = Object.keys(item);
67
- if (keys.length !== 1 || !item[keys[0]]) {
67
+ if (keys.length !== 1 || item[keys[0]] == null) {
68
68
  throw new UnauthorizedError();
69
69
  }
70
70
  return item[keys[0]];
@@ -1 +1 @@
1
- {"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/sbvr-api/actions.ts"],"names":[],"mappings":"AACA,OAAO,EACN,eAAe,GAEf,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,GAAG,EAAiB,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAuB1D,MAAM,OAAO,GAAG,EAMf,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAC9B,OAA2B,EACK,EAAE;IAGlC,OAAO,CACN,OAAO,CAAC,MAAM,KAAK,MAAM;QACzB,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,QAAQ,IAAI,IAAI;QAC7C,OAAO,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CACtD,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CACpC,IAAI,IAAI,CACT,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAC7B,OAA2B,EAC3B,GAAc,EACM,EAAE;IACtB,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC;QACrC,MAAM,IAAI,eAAe,EAAE,CAAC;IAC7B,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACxD,MAAM,MAAM,GACX,OAAO,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;IACrE,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,MAAM,IAAI,eAAe,EAAE,CAAC;IAC7B,CAAC;IAED,OAAO,SAAS,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;QAM5C,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG;YAChC,CAAC,CAAC,MAAM,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,CAAC;YAClD,CAAC,CAAC,SAAS,CAAC;QAEb,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC;YACpD,WAAW,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE;SACxB,CAAC,CAAC;QAEH,OAAO,MAAM,MAAM,CAAC;YACnB,OAAO,EAAE,OAAO;YAChB,EAAE;YACF,GAAG,EAAE,cAAc;YACnB,GAAG,EAAE,GAAG;YACR,EAAE;SACF,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CACxB,UAAiB,EACjB,YAAoB,EACpB,UAAkB,EAClB,MAA0B,EACzB,EAAE;IACH,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC3B,OAAO,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;IACzC,OAAO,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC;AACxD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAChC,OAA2B,EAC3B,GAAc,EACd,UAAkB,EAClB,EAAM,EACL,EAAE;IACH,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG;SAC9B,KAAK,CAAC,CAAC,CAAC;SACR,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACb,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,UAAU,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC;IAEvD,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,iBAAiB,EAAE,CAAC;IAC/B,CAAC;IAED,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/C,IAAI,CAAC,cAAc,EAAE,CAAC;QACrB,MAAM,IAAI,eAAe,CAAC,wBAAwB,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC;QACjD,MAAM,EAAE,MAAM;QACd,GAAG,EAAE,YAAY;QACjB,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;QAC5B,WAAW,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE;KACxB,CAAC,CAAC;IAEH,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAC;AACjC,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,iBAA4B,EAAW,EAAE;IACrE,MAAM,IAAI,GAAG,iBAAiB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACvC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,IAAI,iBAAiB,EAAE,CAAC;IAC/B,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,iBAAiB,EAAE,CAAC;IAC/B,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACtB,CAAC,CAAC"}
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-odata-actions-57ea3eb16fe9ec8e28ea12b969da062ec4374a2d-1",
3
+ "version": "21.4.0-build-add-odata-actions-ae9038ff8df4e301ebeef7c283c978fcae5ea4e4-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-01T13:11:08.425Z"
152
+ "publishedAt": "2025-05-01T14:24:41.105Z"
153
153
  }
154
154
  }
@@ -30,13 +30,13 @@ export type ODataAction<Vocab extends string = string> = (
30
30
  args: ODataActionArgs<Vocab>,
31
31
  ) => Promise<Response>;
32
32
 
33
- const actions = {} as {
33
+ const actions: {
34
34
  [vocab: string]: {
35
35
  [resourceName: string]: {
36
36
  [actionName: string]: ODataAction;
37
37
  };
38
38
  };
39
- };
39
+ } = {};
40
40
 
41
41
  export const isActionRequest = (
42
42
  request: ParsedODataRequest,
@@ -63,7 +63,7 @@ export const runAction = async (
63
63
  const actionName = request.odataQuery.property.resource;
64
64
  const action =
65
65
  actions?.[request.vocabulary]?.[request.resourceName]?.[actionName];
66
- if (!action) {
66
+ if (action == null) {
67
67
  throw new BadRequestError();
68
68
  }
69
69
 
@@ -82,10 +82,10 @@ export const runAction = async (
82
82
  });
83
83
 
84
84
  return await action({
85
- request: request,
85
+ request,
86
86
  tx,
87
87
  api: applicationApi,
88
- req: req,
88
+ req,
89
89
  id,
90
90
  });
91
91
  });
@@ -110,7 +110,7 @@ export const canRunAction = async (
110
110
  ) => {
111
111
  const canAccessUrl = request.url
112
112
  .slice(1)
113
- .split('?')[0]
113
+ .split('?', 1)[0]
114
114
  .replace(new RegExp(`(${actionName})$`), 'canAccess');
115
115
 
116
116
  if (!canAccessUrl.endsWith('/canAccess')) {
@@ -118,11 +118,11 @@ export const canRunAction = async (
118
118
  }
119
119
 
120
120
  const applicationApi = api[request.vocabulary];
121
- if (!applicationApi) {
121
+ if (applicationApi == null) {
122
122
  throw new BadRequestError(`Could not find model ${request.vocabulary}`);
123
123
  }
124
124
 
125
- const res = await api[request.vocabulary].request({
125
+ const res = await applicationApi.request({
126
126
  method: 'POST',
127
127
  url: canAccessUrl,
128
128
  body: { action: actionName },
@@ -134,11 +134,11 @@ export const canRunAction = async (
134
134
 
135
135
  const canAccessResourceId = (canAccessResponse: AnyObject): unknown => {
136
136
  const item = canAccessResponse?.d?.[0];
137
- if (!item || typeof item !== 'object') {
137
+ if (item == null || typeof item !== 'object') {
138
138
  throw new UnauthorizedError();
139
139
  }
140
140
  const keys = Object.keys(item);
141
- if (keys.length !== 1 || !item[keys[0]]) {
141
+ if (keys.length !== 1 || item[keys[0]] == null) {
142
142
  throw new UnauthorizedError();
143
143
  }
144
144