@balena/open-balena-api 38.0.0-build-Limit-size-ofl-arge-fields-7b29e06f8391501d61a8512e197634ceadfa93c5-1 → 38.0.0-build-enum-fields-a050075803d4f1ff46d4a5ab5e394bda577005e9-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.
@@ -0,0 +1,46 @@
1
+ DO $$
2
+ BEGIN
3
+ IF NOT EXISTS (
4
+ SELECT 1
5
+ FROM information_schema.table_constraints tc
6
+ WHERE tc.CONSTRAINT_TYPE = 'CHECK'
7
+ AND tc.table_schema = CURRENT_SCHEMA()
8
+ AND tc.table_name = 'application'
9
+ AND tc.constraint_name = 'application$QqBV+60jro8TubDvmFVw6BwX9diAf/SNdJ1816Yxpx0='
10
+ ) THEN
11
+ ALTER TABLE "application" ADD CONSTRAINT "application$QqBV+60jro8TubDvmFVw6BwX9diAf/SNdJ1816Yxpx0=" CHECK (
12
+ ((32 = LENGTH("uuid")) AND (LENGTH("uuid") IS NOT NULL) AND ("uuid" IS NOT NULL))
13
+ );
14
+ END IF;
15
+
16
+ IF NOT EXISTS (
17
+ SELECT 1
18
+ FROM information_schema.table_constraints tc
19
+ WHERE tc.CONSTRAINT_TYPE = 'CHECK'
20
+ AND tc.table_schema = CURRENT_SCHEMA()
21
+ AND tc.table_name = 'image'
22
+ AND tc.constraint_name = 'image$lZeBT9pF01RBiHpxC0g1n9T+XNyAo0tNDoPKEgREbfA='
23
+ ) THEN
24
+ ALTER TABLE "image" ADD CONSTRAINT "image$lZeBT9pF01RBiHpxC0g1n9T+XNyAo0tNDoPKEgREbfA=" CHECK (
25
+ (NOT (('success' = "status") AND ("status" IS NOT NULL) AND ("push timestamp" IS NULL)))
26
+ );
27
+ END IF;
28
+
29
+ IF NOT EXISTS (
30
+ SELECT 1
31
+ FROM information_schema.table_constraints tc
32
+ WHERE tc.CONSTRAINT_TYPE = 'CHECK'
33
+ AND tc.table_schema = CURRENT_SCHEMA()
34
+ AND tc.table_name = 'scheduled job run'
35
+ AND tc.constraint_name = 'scheduled job run$RKSl1c68Wu6bc7gqz25YsgDiydg6eJU5WorAXs6wPdk='
36
+ ) THEN
37
+ ALTER TABLE "scheduled job run" ADD CONSTRAINT "scheduled job run$RKSl1c68Wu6bc7gqz25YsgDiydg6eJU5WorAXs6wPdk=" CHECK (
38
+ (NOT (('success' = "status") AND ("status" IS NOT NULL) AND ("end timestamp" IS NULL)))
39
+ );
40
+ END IF;
41
+ END;
42
+ $$;
43
+
44
+ ALTER TABLE "application" DROP CONSTRAINT IF EXISTS "application$mZf6fIjTFZaZUdsCaYh/lnRvAxaNt8fVao0CoBFRPWM=";
45
+ ALTER TABLE "image" DROP CONSTRAINT IF EXISTS "image$f+RwXXr0uXiXbinfGuS+2KUJUP/5ZYRn0X2OTXgwKDw=";
46
+ ALTER TABLE "scheduled job run" DROP CONSTRAINT IF EXISTS "scheduled job run$wRT+EFBynm3yyXccCcMT2Jy+lMxnqwEmH8VyLPRJ02Q=";
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@balena/open-balena-api",
3
3
  "description": "Internet of things, Made Simple",
4
- "version": "38.0.0-build-Limit-size-ofl-arge-fields-7b29e06f8391501d61a8512e197634ceadfa93c5-1",
4
+ "version": "38.0.0-build-enum-fields-a050075803d4f1ff46d4a5ab5e394bda577005e9-1",
5
5
  "license": "AGPL-3.0",
6
6
  "repository": {
7
7
  "type": "git",
@@ -50,7 +50,7 @@
50
50
  "@balena/env-parsing": "^1.2.4",
51
51
  "@balena/es-version": "^1.0.3",
52
52
  "@balena/node-metrics-gatherer": "^6.0.3",
53
- "@balena/pinejs": "^21.6.0",
53
+ "@balena/pinejs": "^21.6.9",
54
54
  "@balena/pinejs-webresource-cloudfront": "^2.0.0",
55
55
  "@balena/pinejs-webresource-s3": "^2.1.2",
56
56
  "@opentelemetry/api": "^1.9.0",
@@ -157,7 +157,7 @@
157
157
  "p-timeout": "^6.1.4",
158
158
  "pinejs-client-supertest": "^3.0.1",
159
159
  "rimraf": "^6.0.1",
160
- "sinon": "^20.0.0",
160
+ "sinon": "^21.0.0",
161
161
  "supertest": "^7.1.1"
162
162
  },
163
163
  "engines": {
@@ -174,6 +174,6 @@
174
174
  "import": "@swc-node/register/esm-register"
175
175
  },
176
176
  "versionist": {
177
- "publishedAt": "2025-06-13T13:55:19.500Z"
177
+ "publishedAt": "2025-06-20T15:29:24.995Z"
178
178
  }
179
179
  }
@@ -1 +0,0 @@
1
- export {};
@@ -1,24 +0,0 @@
1
- import { addHooksForFieldSizeLimitChecks } from './setup-field-size-limits.js';
2
- addHooksForFieldSizeLimitChecks('resin', 'api_key', {
3
- name: 50,
4
- description: 150,
5
- });
6
- addHooksForFieldSizeLimitChecks('resin', 'organization', {
7
- name: 100,
8
- handle: 100,
9
- });
10
- for (const resource of [
11
- 'application_config_variable',
12
- 'application_environment_variable',
13
- 'device_config_variable',
14
- 'device_environment_variable',
15
- 'device_service_environment_variable',
16
- ]) {
17
- addHooksForFieldSizeLimitChecks('resin', resource, {
18
- value: 100_000,
19
- });
20
- }
21
- addHooksForFieldSizeLimitChecks('resin', 'device_tag', {
22
- value: [0, 10_000],
23
- });
24
- //# sourceMappingURL=hooks.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/features/field-size-limits/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,8BAA8B,CAAC;AAE/E,+BAA+B,CAAC,OAAO,EAAE,SAAS,EAAE;IACnD,IAAI,EAAE,EAAE;IACR,WAAW,EAAE,GAAG;CAChB,CAAC,CAAC;AAEH,+BAA+B,CAAC,OAAO,EAAE,cAAc,EAAE;IACxD,IAAI,EAAE,GAAG;IACT,MAAM,EAAE,GAAG;CACX,CAAC,CAAC;AAEH,KAAK,MAAM,QAAQ,IAAI;IACtB,6BAA6B;IAC7B,kCAAkC;IAClC,wBAAwB;IACxB,6BAA6B;IAC7B,qCAAqC;CACrC,EAAE,CAAC;IACH,+BAA+B,CAAC,OAAO,EAAE,QAAQ,EAAE;QAClD,KAAK,EAAE,OAAO;KACd,CAAC,CAAC;AACJ,CAAC;AAED,+BAA+B,CAAC,OAAO,EAAE,YAAY,EAAE;IACtD,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC,CAAC"}
@@ -1,4 +0,0 @@
1
- /**
2
- * This is a HACH and should only be used when pre-existing data blocks us from adding the respective Necessity directly in the sbvr.
3
- */
4
- export declare function addHooksForFieldSizeLimitChecks(model: string, resource: string, fieldSizeLimits: Record<string, number | [gt: number, le: number]>): void;
@@ -1,37 +0,0 @@
1
- // TODO: We should cleanup the data and delete this file.
2
- import { hooks, errors as pinejsErrors } from '@balena/pinejs';
3
- import { odataNameToSqlName } from '@balena/odata-to-abstract-sql';
4
- const { BadRequestError } = pinejsErrors;
5
- const vowels = ['a', 'e', 'i', 'o', 'u'];
6
- /**
7
- * This is a HACH and should only be used when pre-existing data blocks us from adding the respective Necessity directly in the sbvr.
8
- */
9
- export function addHooksForFieldSizeLimitChecks(model, resource, fieldSizeLimits) {
10
- const fieldSizeLimitEntries = Object.entries(fieldSizeLimits);
11
- const hook = {
12
- POSTPARSE: ({ request }) => {
13
- for (const [field, limits] of fieldSizeLimitEntries) {
14
- const value = request.values[field];
15
- if (typeof value !== 'string') {
16
- continue;
17
- }
18
- const [min, max] = Array.isArray(limits) ? limits : [null, limits];
19
- if (value.length > max || (min != null && value.length <= min)) {
20
- const [term, verb = 'has'] = odataNameToSqlName(field)
21
- .split('-')
22
- .reverse();
23
- // hacky way to decide whether to use "a" or "an"
24
- // should improve one we find cases that this isn't returning the correct results.
25
- const aOrAn = vowels.includes(term[0]) ? 'an' : 'a';
26
- const factType = `${verb} ${aOrAn} ${term}`;
27
- const isGreaterThanAnd = min != null ? `is greater than ${min} and ` : '';
28
- throw new BadRequestError(`It is necessary that each ${odataNameToSqlName(resource)} that ${factType}, ${factType} that has a Length (Type) that ${isGreaterThanAnd}is less than or equal to ${max}.`);
29
- }
30
- }
31
- },
32
- };
33
- for (const method of ['POST', 'PATCH', 'PUT']) {
34
- hooks.addPureHook(method, model, resource, hook);
35
- }
36
- }
37
- //# sourceMappingURL=setup-field-size-limits.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"setup-field-size-limits.js","sourceRoot":"","sources":["../../../src/features/field-size-limits/setup-field-size-limits.ts"],"names":[],"mappings":"AAAA,yDAAyD;AAGzD,OAAO,EAAE,KAAK,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,MAAM,EAAE,eAAe,EAAE,GAAG,YAAY,CAAC;AAEzC,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEzC;;GAEG;AACH,MAAM,UAAU,+BAA+B,CAC9C,KAAa,EACb,QAAgB,EAChB,eAAkE;IAElE,MAAM,qBAAqB,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC9D,MAAM,IAAI,GAAoB;QAC7B,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;YAC1B,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,qBAAqB,EAAE,CAAC;gBACrD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACpC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAC/B,SAAS;gBACV,CAAC;gBACD,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBACnE,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC;oBAChE,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,KAAK,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC;yBACpD,KAAK,CAAC,GAAG,CAAC;yBACV,OAAO,EAAE,CAAC;oBACZ,iDAAiD;oBACjD,kFAAkF;oBAClF,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;oBACpD,MAAM,QAAQ,GAAG,GAAG,IAAI,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;oBAE5C,MAAM,gBAAgB,GACrB,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,mBAAmB,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;oBAElD,MAAM,IAAI,eAAe,CACxB,6BAA6B,kBAAkB,CAAC,QAAQ,CAAC,SAAS,QAAQ,KAAK,QAAQ,kCAAkC,gBAAgB,4BAA4B,GAAG,GAAG,CAC3K,CAAC;gBACH,CAAC;YACF,CAAC;QACF,CAAC;KACD,CAAC;IAEF,KAAK,MAAM,MAAM,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAU,EAAE,CAAC;QACxD,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;AACF,CAAC"}