@wemush/wols 1.2.0 → 1.3.0
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/CHANGELOG.md +170 -0
- package/README.md +204 -31
- package/dist/cjs/compact-url.d.ts +150 -0
- package/dist/cjs/compact-url.d.ts.map +1 -0
- package/dist/cjs/crypto/decrypt.d.ts +110 -0
- package/dist/cjs/crypto/decrypt.d.ts.map +1 -0
- package/dist/cjs/crypto/decrypt.js +519 -99
- package/dist/cjs/crypto/decrypt.js.map +1 -1
- package/dist/cjs/crypto/encrypt.d.ts +132 -0
- package/dist/cjs/crypto/encrypt.d.ts.map +1 -0
- package/dist/cjs/crypto/encrypt.js +281 -200
- package/dist/cjs/crypto/encrypt.js.map +1 -1
- package/dist/cjs/crypto/index.d.ts +12 -0
- package/dist/cjs/crypto/index.d.ts.map +1 -0
- package/dist/cjs/crypto/index.js +15 -2
- package/dist/cjs/crypto/index.js.map +1 -1
- package/dist/cjs/crypto/shared.d.ts +116 -0
- package/dist/cjs/crypto/shared.d.ts.map +1 -0
- package/dist/cjs/crypto/shared.js +238 -0
- package/dist/cjs/crypto/shared.js.map +1 -0
- package/dist/cjs/errors.d.ts +133 -0
- package/dist/cjs/errors.d.ts.map +1 -0
- package/dist/cjs/errors.js +39 -1
- package/dist/cjs/errors.js.map +1 -1
- package/dist/cjs/index.d.ts +29 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +19 -4
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/parser.d.ts +30 -0
- package/dist/cjs/parser.d.ts.map +1 -0
- package/dist/cjs/qr/generate.d.ts +62 -0
- package/dist/cjs/qr/generate.d.ts.map +1 -0
- package/dist/cjs/qr/index.d.ts +10 -0
- package/dist/cjs/qr/index.d.ts.map +1 -0
- package/dist/cjs/specimen.d.ts +96 -0
- package/dist/cjs/specimen.d.ts.map +1 -0
- package/dist/cjs/specimen.js +84 -11
- package/dist/cjs/specimen.js.map +1 -1
- package/dist/cjs/types.d.ts +735 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +65 -5
- package/dist/cjs/types.js.map +1 -1
- package/dist/cjs/utils/cuid.d.ts +46 -0
- package/dist/cjs/utils/cuid.d.ts.map +1 -0
- package/dist/cjs/utils/cuid.js +6 -4
- package/dist/cjs/utils/cuid.js.map +1 -1
- package/dist/cjs/utils/environment.d.ts +137 -0
- package/dist/cjs/utils/environment.d.ts.map +1 -0
- package/dist/cjs/utils/iso8601.d.ts +79 -0
- package/dist/cjs/utils/iso8601.d.ts.map +1 -0
- package/dist/cjs/utils/migration.d.ts +162 -0
- package/dist/cjs/utils/migration.d.ts.map +1 -0
- package/dist/cjs/validator.d.ts +25 -0
- package/dist/cjs/validator.d.ts.map +1 -0
- package/dist/cjs/validator.js +33 -22
- package/dist/cjs/validator.js.map +1 -1
- package/dist/esm/crypto/decrypt.js +515 -99
- package/dist/esm/crypto/decrypt.js.map +1 -1
- package/dist/esm/crypto/encrypt.js +277 -200
- package/dist/esm/crypto/encrypt.js.map +1 -1
- package/dist/esm/crypto/index.js +5 -3
- package/dist/esm/crypto/index.js.map +1 -1
- package/dist/esm/crypto/shared.js +222 -0
- package/dist/esm/crypto/shared.js.map +1 -0
- package/dist/esm/errors.js +37 -0
- package/dist/esm/errors.js.map +1 -1
- package/dist/esm/index.js +6 -6
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/specimen.js +84 -12
- package/dist/esm/specimen.js.map +1 -1
- package/dist/esm/types.js +63 -4
- package/dist/esm/types.js.map +1 -1
- package/dist/esm/utils/cuid.js +6 -4
- package/dist/esm/utils/cuid.js.map +1 -1
- package/dist/esm/validator.js +34 -23
- package/dist/esm/validator.js.map +1 -1
- package/dist/types/crypto/decrypt.d.ts +93 -22
- package/dist/types/crypto/decrypt.d.ts.map +1 -1
- package/dist/types/crypto/encrypt.d.ts +106 -61
- package/dist/types/crypto/encrypt.d.ts.map +1 -1
- package/dist/types/crypto/index.d.ts +5 -3
- package/dist/types/crypto/index.d.ts.map +1 -1
- package/dist/types/crypto/shared.d.ts +116 -0
- package/dist/types/crypto/shared.d.ts.map +1 -0
- package/dist/types/errors.d.ts +31 -1
- package/dist/types/errors.d.ts.map +1 -1
- package/dist/types/index.d.ts +7 -7
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/specimen.d.ts +29 -4
- package/dist/types/specimen.d.ts.map +1 -1
- package/dist/types/types.d.ts +265 -40
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/utils/cuid.d.ts +5 -3
- package/dist/types/utils/cuid.d.ts.map +1 -1
- package/dist/types/validator.d.ts +1 -1
- package/dist/types/validator.d.ts.map +1 -1
- package/package.json +32 -14
package/dist/esm/types.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* WOLS TypeScript Library - Core Types
|
|
3
3
|
*
|
|
4
4
|
* This module defines all the core types, interfaces, and enums
|
|
5
|
-
* for the WeMush Open Labeling Standard (WOLS) v1.
|
|
5
|
+
* for the WeMush Open Labeling Standard (WOLS) v1.3.0.
|
|
6
6
|
*
|
|
7
7
|
* @packageDocumentation
|
|
8
8
|
* @module @wemush/wols
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
/**
|
|
14
14
|
* WOLS specification version implemented by this library.
|
|
15
15
|
*/
|
|
16
|
-
export const WOLS_VERSION = '1.
|
|
16
|
+
export const WOLS_VERSION = '1.3.0';
|
|
17
17
|
/**
|
|
18
18
|
* JSON-LD context URL for WOLS specimens.
|
|
19
19
|
*/
|
|
@@ -64,7 +64,9 @@ const TYPE_ALIAS_REGISTRY = new Map([
|
|
|
64
64
|
// Fruiting aliases
|
|
65
65
|
['FLUSH', 'FRUITING'],
|
|
66
66
|
['PINNING', 'FRUITING'],
|
|
67
|
-
|
|
67
|
+
// PRIMORDIA is a reserved alias (v1.3.0): it resolves to FRUITING, and
|
|
68
|
+
// createSpecimen() additionally sets stage PRIMORDIA. See PRIMORDIA_TYPE_ALIAS.
|
|
69
|
+
['PRIMORDIA', 'FRUITING'],
|
|
68
70
|
['FRUIT', 'FRUITING'],
|
|
69
71
|
['FIRST_FLUSH', 'FRUITING'],
|
|
70
72
|
// Harvest aliases
|
|
@@ -73,11 +75,22 @@ const TYPE_ALIAS_REGISTRY = new Map([
|
|
|
73
75
|
['PROCESSED', 'HARVEST'],
|
|
74
76
|
['EXTRACT', 'HARVEST'],
|
|
75
77
|
]);
|
|
78
|
+
/**
|
|
79
|
+
* Reserved type alias with special handling (WOLS v1.3.0).
|
|
80
|
+
*
|
|
81
|
+
* `PRIMORDIA` is a GrowthStage, not a SpecimenType. When it is supplied as a
|
|
82
|
+
* type, it resolves to `FRUITING` and `createSpecimen()` sets
|
|
83
|
+
* `stage: 'PRIMORDIA'` unless a stage was supplied.
|
|
84
|
+
*
|
|
85
|
+
* @since 1.3.0
|
|
86
|
+
*/
|
|
87
|
+
export const PRIMORDIA_TYPE_ALIAS = 'PRIMORDIA';
|
|
76
88
|
/**
|
|
77
89
|
* Register a custom type alias.
|
|
78
90
|
*
|
|
79
91
|
* @param alias - The alias string (case-insensitive, stored uppercase)
|
|
80
92
|
* @param wolsType - The canonical WOLS SpecimenType
|
|
93
|
+
* @throws Error if `alias` is the reserved `PRIMORDIA` alias
|
|
81
94
|
*
|
|
82
95
|
* @example
|
|
83
96
|
* ```typescript
|
|
@@ -85,7 +98,11 @@ const TYPE_ALIAS_REGISTRY = new Map([
|
|
|
85
98
|
* ```
|
|
86
99
|
*/
|
|
87
100
|
export function registerTypeAlias(alias, wolsType) {
|
|
88
|
-
|
|
101
|
+
const upper = alias.toUpperCase();
|
|
102
|
+
if (upper === PRIMORDIA_TYPE_ALIAS && wolsType !== 'FRUITING') {
|
|
103
|
+
throw new Error(`'${PRIMORDIA_TYPE_ALIAS}' is a reserved alias for FRUITING and cannot be remapped`);
|
|
104
|
+
}
|
|
105
|
+
TYPE_ALIAS_REGISTRY.set(upper, wolsType);
|
|
89
106
|
}
|
|
90
107
|
/**
|
|
91
108
|
* Resolve a type alias to its canonical WOLS type.
|
|
@@ -100,6 +117,10 @@ export function registerTypeAlias(alias, wolsType) {
|
|
|
100
117
|
* resolveTypeAlias('CULTURE') // Returns 'CULTURE'
|
|
101
118
|
* resolveTypeAlias('unknown') // Returns 'unknown'
|
|
102
119
|
* ```
|
|
120
|
+
*
|
|
121
|
+
* @remarks Maps the type only. `PRIMORDIA` resolves to `FRUITING` here and
|
|
122
|
+
* the PRIMORDIA stage is lost; use {@link resolveTypeAndStage} when building
|
|
123
|
+
* a specimen from user input.
|
|
103
124
|
*/
|
|
104
125
|
export function resolveTypeAlias(typeOrAlias) {
|
|
105
126
|
const upper = typeOrAlias.toUpperCase();
|
|
@@ -111,6 +132,40 @@ export function resolveTypeAlias(typeOrAlias) {
|
|
|
111
132
|
const resolved = TYPE_ALIAS_REGISTRY.get(upper);
|
|
112
133
|
return resolved ?? typeOrAlias;
|
|
113
134
|
}
|
|
135
|
+
/**
|
|
136
|
+
* Resolve a supplied specimen type (canonical or alias, any case) together
|
|
137
|
+
* with its stage, applying the reserved `PRIMORDIA` rule (WOLS v1.3.0).
|
|
138
|
+
*
|
|
139
|
+
* This is the single source of truth used by `createSpecimen()` and
|
|
140
|
+
* `serializeSpecimen()`. `resolveTypeAlias()` and `mapToWolsType()` map the
|
|
141
|
+
* type only; integrations that map a type and then build a specimen
|
|
142
|
+
* themselves should use this function so the `PRIMORDIA` stage is not lost.
|
|
143
|
+
*
|
|
144
|
+
* - `PRIMORDIA` resolves to `FRUITING`, and `stage` becomes `'PRIMORDIA'`
|
|
145
|
+
* only when no stage was supplied (a supplied stage is never overridden).
|
|
146
|
+
* `primordia` is `true` so callers can warn.
|
|
147
|
+
* - Other aliases resolve the type and leave `stage` unchanged.
|
|
148
|
+
* - Unknown types return `null`.
|
|
149
|
+
*
|
|
150
|
+
* @example
|
|
151
|
+
* ```typescript
|
|
152
|
+
* resolveTypeAndStage('primordia') // { type: 'FRUITING', stage: 'PRIMORDIA', primordia: true }
|
|
153
|
+
* resolveTypeAndStage('PRIMORDIA', 'FRUITING') // { type: 'FRUITING', stage: 'FRUITING', primordia: true }
|
|
154
|
+
* resolveTypeAndStage('LC') // { type: 'CULTURE', stage: undefined, primordia: false }
|
|
155
|
+
* ```
|
|
156
|
+
*
|
|
157
|
+
* @since 1.3.0
|
|
158
|
+
*/
|
|
159
|
+
export function resolveTypeAndStage(type, stage) {
|
|
160
|
+
if (typeof type !== 'string') {
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
if (type.toUpperCase() === PRIMORDIA_TYPE_ALIAS) {
|
|
164
|
+
return { type: 'FRUITING', stage: stage ?? 'PRIMORDIA', primordia: true };
|
|
165
|
+
}
|
|
166
|
+
const resolved = resolveTypeAlias(type);
|
|
167
|
+
return isSpecimenType(resolved) ? { type: resolved, stage, primordia: false } : null;
|
|
168
|
+
}
|
|
114
169
|
/**
|
|
115
170
|
* Get all registered type aliases.
|
|
116
171
|
*
|
|
@@ -152,6 +207,10 @@ export const WOLS_TO_PLATFORM_MAP = {
|
|
|
152
207
|
* mapToWolsType('Unknown Type') // Returns null
|
|
153
208
|
* ```
|
|
154
209
|
*
|
|
210
|
+
* @remarks Maps the type only. `PRIMORDIA` maps to `FRUITING` and the
|
|
211
|
+
* PRIMORDIA stage is lost; use {@link resolveTypeAndStage} when building a
|
|
212
|
+
* specimen from user input.
|
|
213
|
+
*
|
|
155
214
|
* @since 1.2.0
|
|
156
215
|
*/
|
|
157
216
|
export function mapToWolsType(platformType) {
|
package/dist/esm/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAC;AAEpC;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,4BAA4B,CAAC;AAkBzD;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,EAAU;IACrC,OAAO,EAAgB,CAAC;AAC1B,CAAC;AAWD;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAA4B;IACrD,SAAS;IACT,OAAO;IACP,WAAW;IACX,UAAU;IACV,SAAS;CACD,CAAC;AAEX,gFAAgF;AAChF,6BAA6B;AAC7B,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,mBAAmB,GAA8B,IAAI,GAAG,CAAC;IAC7D,kBAAkB;IAClB,CAAC,gBAAgB,EAAE,SAAS,CAAC;IAC7B,CAAC,IAAI,EAAE,SAAS,CAAC;IACjB,CAAC,MAAM,EAAE,SAAS,CAAC;IACnB,CAAC,OAAO,EAAE,SAAS,CAAC;IACpB,CAAC,OAAO,EAAE,SAAS,CAAC;IACpB,CAAC,eAAe,EAAE,SAAS,CAAC;IAC5B,gBAAgB;IAChB,CAAC,aAAa,EAAE,OAAO,CAAC;IACxB,CAAC,eAAe,EAAE,OAAO,CAAC;IAC1B,CAAC,YAAY,EAAE,OAAO,CAAC;IACvB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,oBAAoB;IACpB,CAAC,OAAO,EAAE,WAAW,CAAC;IACtB,CAAC,KAAK,EAAE,WAAW,CAAC;IACpB,CAAC,KAAK,EAAE,WAAW,CAAC;IACpB,CAAC,KAAK,EAAE,WAAW,CAAC;IACpB,CAAC,QAAQ,EAAE,WAAW,CAAC;IACvB,mBAAmB;IACnB,CAAC,OAAO,EAAE,UAAU,CAAC;IACrB,CAAC,SAAS,EAAE,UAAU,CAAC;IACvB,CAAC,WAAW,EAAE,UAAU,CAAC
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/utils/cuid.js
CHANGED
|
@@ -134,12 +134,14 @@ export function createSpecimenId() {
|
|
|
134
134
|
return `wemush:${createId()}`;
|
|
135
135
|
}
|
|
136
136
|
/**
|
|
137
|
-
* Validate a specimen ID
|
|
137
|
+
* Validate a specimen ID: the `wemush:` prefix followed by any non-empty suffix
|
|
138
|
+
* (WOLS v1.3.0). Pass `strict: true` for the CUID-style `wemush:[a-z0-9]+` check.
|
|
138
139
|
*
|
|
139
140
|
* @param id - The ID to validate
|
|
140
|
-
* @
|
|
141
|
+
* @param strict - Require a lowercase alphanumeric suffix
|
|
142
|
+
* @returns true if the ID is valid
|
|
141
143
|
*/
|
|
142
|
-
export function isValidSpecimenId(id) {
|
|
143
|
-
return /^wemush:[a-z0-9]+$/.test(id);
|
|
144
|
+
export function isValidSpecimenId(id, strict = false) {
|
|
145
|
+
return strict ? /^wemush:[a-z0-9]+$/.test(id) : id.startsWith('wemush:') && id.length > 7;
|
|
144
146
|
}
|
|
145
147
|
//# sourceMappingURL=cuid.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cuid.js","sourceRoot":"","sources":["../../../src/utils/cuid.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cuid.js","sourceRoot":"","sources":["../../../src/utils/cuid.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/validator.js
CHANGED
|
@@ -6,13 +6,13 @@
|
|
|
6
6
|
* @module validator
|
|
7
7
|
*/
|
|
8
8
|
import { WolsErrorCode } from './errors.js';
|
|
9
|
-
import { isGrowthStage, isSpecimenType, WOLS_CONTEXT, } from './types.js';
|
|
9
|
+
import { GROWTH_STAGES, isGrowthStage, isSpecimenType, WOLS_CONTEXT, } from './types.js';
|
|
10
10
|
import { isValidISO8601 } from './utils/iso8601.js';
|
|
11
11
|
// =============================================================================
|
|
12
12
|
// VALIDATION PATTERNS
|
|
13
13
|
// =============================================================================
|
|
14
14
|
/**
|
|
15
|
-
* Pattern for
|
|
15
|
+
* Pattern for the opt-in 'strict' ID mode (CUID-style): wemush:[a-z0-9]+
|
|
16
16
|
*/
|
|
17
17
|
const SPECIMEN_ID_PATTERN_STRICT = /^wemush:[a-z0-9]+$/;
|
|
18
18
|
/**
|
|
@@ -29,9 +29,9 @@ const SPECIMEN_ID_PATTERN_UUID = /^wemush:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{
|
|
|
29
29
|
*/
|
|
30
30
|
const SEMVER_PATTERN = /^\d+\.\d+\.\d+$/;
|
|
31
31
|
/**
|
|
32
|
-
* Pattern for valid strain generation: P, F1, F2,
|
|
32
|
+
* Pattern for valid strain generation: P, P1, F1, F2, G1, G2, or numeric (v1.2.0).
|
|
33
33
|
*/
|
|
34
|
-
const GENERATION_PATTERN = /^(P|F\d+|G\d+|\d+)$/;
|
|
34
|
+
const GENERATION_PATTERN = /^(P|P\d+|F\d+|G\d+|\d+)$/;
|
|
35
35
|
/**
|
|
36
36
|
* Known WOLS specimen fields (for unknown field detection).
|
|
37
37
|
*/
|
|
@@ -111,13 +111,14 @@ function validateType(value, errors, _options) {
|
|
|
111
111
|
}
|
|
112
112
|
}
|
|
113
113
|
/**
|
|
114
|
-
* Validate id field with flexible ID format support
|
|
114
|
+
* Validate id field with flexible ID format support.
|
|
115
115
|
*
|
|
116
|
-
*
|
|
117
|
-
*
|
|
116
|
+
* WOLS requires implementations to accept any non-empty suffix after
|
|
117
|
+
* `wemush:`, so that is the default. Format checks are opt-in:
|
|
118
|
+
* - 'any': wemush:{non-empty-string} (default since v1.3.0)
|
|
119
|
+
* - 'strict': wemush:[a-z0-9]+ (CUID-style)
|
|
118
120
|
* - 'ulid': wemush:{ULID}
|
|
119
|
-
* - 'uuid': wemush:{UUID
|
|
120
|
-
* - 'any': wemush:{non-empty-string}
|
|
121
|
+
* - 'uuid': wemush:{UUID}
|
|
121
122
|
* - Custom validator function
|
|
122
123
|
*/
|
|
123
124
|
function validateId(value, errors, options) {
|
|
@@ -141,8 +142,8 @@ function validateId(value, errors, options) {
|
|
|
141
142
|
errors.push(error('id', WolsErrorCode.INVALID_ID_FORMAT, `id must start with 'wemush:', got '${value}'`));
|
|
142
143
|
return;
|
|
143
144
|
}
|
|
144
|
-
// Get ID mode (default: '
|
|
145
|
-
const mode = options.idMode ?? '
|
|
145
|
+
// Get ID mode (default: 'any', as required by WOLS)
|
|
146
|
+
const mode = options.idMode ?? 'any';
|
|
146
147
|
switch (mode) {
|
|
147
148
|
case 'strict':
|
|
148
149
|
if (!SPECIMEN_ID_PATTERN_STRICT.test(value)) {
|
|
@@ -216,11 +217,12 @@ function validateStage(value, errors, warnings, options) {
|
|
|
216
217
|
return; // Optional field
|
|
217
218
|
}
|
|
218
219
|
if (!isGrowthStage(value)) {
|
|
220
|
+
const stages = GROWTH_STAGES.join(', ');
|
|
219
221
|
if (options.level === 'lenient') {
|
|
220
|
-
warnings.push(warning('stage', 'UNKNOWN_GROWTH_STAGE', `Unknown growth stage '${value}'`,
|
|
222
|
+
warnings.push(warning('stage', 'UNKNOWN_GROWTH_STAGE', `Unknown growth stage '${String(value)}'`, `Use one of: ${stages}`));
|
|
221
223
|
}
|
|
222
224
|
else {
|
|
223
|
-
errors.push(error('stage', 'INVALID_GROWTH_STAGE', `stage must be one of
|
|
225
|
+
errors.push(error('stage', 'INVALID_GROWTH_STAGE', `stage must be one of ${stages}, got '${String(value)}'`));
|
|
224
226
|
}
|
|
225
227
|
}
|
|
226
228
|
}
|
|
@@ -247,7 +249,10 @@ function validateCreated(value, errors, warnings, options) {
|
|
|
247
249
|
/**
|
|
248
250
|
* Validate strain object.
|
|
249
251
|
*/
|
|
250
|
-
function
|
|
252
|
+
function isNonNegativeInteger(value) {
|
|
253
|
+
return typeof value === 'number' && Number.isInteger(value) && value >= 0;
|
|
254
|
+
}
|
|
255
|
+
function validateStrain(value, errors, warnings, _options) {
|
|
251
256
|
if (value === undefined || value === null) {
|
|
252
257
|
return; // Optional field
|
|
253
258
|
}
|
|
@@ -263,15 +268,21 @@ function validateStrain(value, errors, _options) {
|
|
|
263
268
|
// Validate generation format if present
|
|
264
269
|
if (strain.generation !== undefined) {
|
|
265
270
|
if (typeof strain.generation !== 'string' || !GENERATION_PATTERN.test(strain.generation)) {
|
|
266
|
-
errors.push(error('strain.generation', WolsErrorCode.INVALID_GENERATION, `strain.generation must
|
|
271
|
+
errors.push(error('strain.generation', WolsErrorCode.INVALID_GENERATION, `strain.generation must be P, P<n>, F<n>, G<n> or <n>, got '${String(strain.generation)}'`));
|
|
267
272
|
}
|
|
268
273
|
}
|
|
269
|
-
// Validate clonalGeneration if present
|
|
270
|
-
if (strain.clonalGeneration !== undefined) {
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
274
|
+
// Validate clonalGeneration if present (0 = original culture)
|
|
275
|
+
if (strain.clonalGeneration !== undefined && !isNonNegativeInteger(strain.clonalGeneration)) {
|
|
276
|
+
errors.push(error('strain.clonalGeneration', WolsErrorCode.INVALID_FORMAT, 'strain.clonalGeneration must be a non-negative integer (0 = original culture)'));
|
|
277
|
+
}
|
|
278
|
+
// Validate transferDepth if present (v1.3.0; 0 = original culture)
|
|
279
|
+
if (strain.transferDepth !== undefined) {
|
|
280
|
+
if (!isNonNegativeInteger(strain.transferDepth)) {
|
|
281
|
+
errors.push(error('strain.transferDepth', WolsErrorCode.INVALID_FORMAT, `strain.transferDepth must be a non-negative integer, got ${JSON.stringify(strain.transferDepth)}`));
|
|
282
|
+
}
|
|
283
|
+
else if (isNonNegativeInteger(strain.clonalGeneration) &&
|
|
284
|
+
strain.transferDepth < strain.clonalGeneration) {
|
|
285
|
+
warnings.push(warning('strain.transferDepth', 'TRANSFER_DEPTH_BELOW_CLONAL_GENERATION', `strain.transferDepth (${strain.transferDepth}) is less than strain.clonalGeneration (${strain.clonalGeneration})`, 'transferDepth counts every transfer, including subcultures, so it should be at least clonalGeneration'));
|
|
275
286
|
}
|
|
276
287
|
}
|
|
277
288
|
// Validate source if present (informational, no strict enum)
|
|
@@ -300,7 +311,7 @@ function checkUnknownFields(specimen, warnings, options) {
|
|
|
300
311
|
// MAIN VALIDATION FUNCTION
|
|
301
312
|
// =============================================================================
|
|
302
313
|
/**
|
|
303
|
-
* Validate a specimen object against the WOLS v1.
|
|
314
|
+
* Validate a specimen object against the WOLS v1.3.0 schema.
|
|
304
315
|
*
|
|
305
316
|
* @param specimen - The specimen object to validate
|
|
306
317
|
* @param options - Validation options
|
|
@@ -345,7 +356,7 @@ export function validateSpecimen(specimen, options = {}) {
|
|
|
345
356
|
// Validate optional fields
|
|
346
357
|
validateStage(data['stage'], errors, warnings, opts);
|
|
347
358
|
validateCreated(data['created'], errors, warnings, opts);
|
|
348
|
-
validateStrain(data['strain'], errors, opts);
|
|
359
|
+
validateStrain(data['strain'], errors, warnings, opts);
|
|
349
360
|
// Check for unknown fields
|
|
350
361
|
checkUnknownFields(data, warnings, opts);
|
|
351
362
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/validator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,39 +1,110 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* WOLS Decryption Module
|
|
2
|
+
* WOLS Decryption Module (WOLS v1.3.0 encrypted format)
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Decrypts `wemush://v1/encrypted/...` URLs, the equivalent
|
|
5
|
+
* {@link EncryptedSpecimen} objects, and field-level {@link EncryptedField}
|
|
6
|
+
* values, using WebCrypto only.
|
|
6
7
|
*
|
|
7
|
-
*
|
|
8
|
+
* Failures never throw; they return `{ success: false, error }` where `error`
|
|
9
|
+
* is a {@link WolsDecryptionError} with a stable, typed `reason`.
|
|
8
10
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
11
|
+
* Every cheap check (parameter presence, encodings, IV length, iteration
|
|
12
|
+
* bounds, key type) runs before PBKDF2, so a malformed or hostile label costs
|
|
13
|
+
* no key derivation. The iteration count comes from the label and is bounded
|
|
14
|
+
* by `maxIterations` (default 10,000,000).
|
|
15
|
+
*
|
|
16
|
+
* Legacy payloads (no `kdf`, pre-1.3.0 fixed salt) are rejected with
|
|
17
|
+
* `legacy-format` unless `allowLegacy: true` is passed.
|
|
12
18
|
*
|
|
13
19
|
* @module crypto/decrypt
|
|
14
20
|
*/
|
|
15
|
-
import type {
|
|
21
|
+
import type { DecryptResult, DecryptionOptions, EncryptedField, EncryptedSpecimen, FieldEncryptedSpecimen, Specimen } from '../types.js';
|
|
16
22
|
/**
|
|
17
|
-
*
|
|
23
|
+
* Parse an encrypted-format URL into an {@link EncryptedSpecimen} without decrypting.
|
|
24
|
+
*
|
|
25
|
+
* Only checks URL structure. Parameter rules (kdf, salt, iterations) are
|
|
26
|
+
* enforced on decryption. The path segment is percent-decoded to recover the ID.
|
|
18
27
|
*
|
|
19
|
-
* @
|
|
20
|
-
|
|
21
|
-
|
|
28
|
+
* @since 1.3.0
|
|
29
|
+
*/
|
|
30
|
+
export declare function parseEncryptedUrl(url: string): DecryptResult<EncryptedSpecimen>;
|
|
31
|
+
/**
|
|
32
|
+
* Decrypt an encrypted label to its exact plaintext (the embedded JSON-LD string).
|
|
33
|
+
*
|
|
34
|
+
* Enforces every v1.3.0 wire rule, including that the decrypted specimen's
|
|
35
|
+
* `id` equals `wemush:{id}` from the URL path. For object input the check is
|
|
36
|
+
* made against the object's `id`; an object without `id` is not bound to any
|
|
37
|
+
* ID, so prefer the URL form for untrusted input.
|
|
38
|
+
*
|
|
39
|
+
* @param input - `wemush://v1/encrypted/...` URL or an {@link EncryptedSpecimen}
|
|
40
|
+
* @param options - `key`, and optional `allowLegacy` and `maxIterations`
|
|
41
|
+
* @since 1.3.0
|
|
42
|
+
*/
|
|
43
|
+
export declare function decryptPlaintext(input: string | EncryptedSpecimen, options: DecryptionOptions): Promise<DecryptResult<string>>;
|
|
44
|
+
/**
|
|
45
|
+
* Decrypt an encrypted label and parse it into a validated Specimen.
|
|
46
|
+
*
|
|
47
|
+
* @param input - `wemush://v1/encrypted/...` URL or an {@link EncryptedSpecimen}
|
|
48
|
+
* @param options - `key`, and optional `allowLegacy` and `maxIterations`
|
|
49
|
+
* @returns DecryptResult; on failure `error.reason` gives the category
|
|
22
50
|
*
|
|
23
51
|
* @example
|
|
24
52
|
* ```typescript
|
|
25
|
-
*
|
|
53
|
+
* const result = await decryptSpecimen(url, { key: 'correct horse battery staple' });
|
|
54
|
+
* if (result.success) console.log(result.data.species);
|
|
55
|
+
* else console.error(result.error.reason, result.error.message);
|
|
56
|
+
* ```
|
|
57
|
+
*
|
|
58
|
+
* @since 1.3.0 Accepts encrypted URLs, raw key bytes, `allowLegacy` and `maxIterations`
|
|
59
|
+
*/
|
|
60
|
+
export declare function decryptSpecimen(input: string | EncryptedSpecimen, options: DecryptionOptions): Promise<DecryptResult<Specimen>>;
|
|
61
|
+
/**
|
|
62
|
+
* Decrypt a single field-level {@link EncryptedField} to its original value.
|
|
26
63
|
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
64
|
+
* `binding` names the label and field the value belongs to. It is the AES-GCM
|
|
65
|
+
* additional data (`"{id}\n{field}"`, WOLS 1.3.0), so a value moved to another
|
|
66
|
+
* field or copied from another label fails with `authentication-failed`.
|
|
67
|
+
* Legacy (pre-1.3.0) values, which have no `kdf`, carry no binding.
|
|
30
68
|
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
* }
|
|
34
|
-
*
|
|
35
|
-
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```typescript
|
|
71
|
+
* const r = await decryptField(partial.strain, { key }, { id: partial.id, field: 'strain' });
|
|
72
|
+
* ```
|
|
73
|
+
*
|
|
74
|
+
* @since 1.3.0
|
|
75
|
+
*/
|
|
76
|
+
export declare function decryptField(field: EncryptedField, options: DecryptionOptions, binding: FieldBinding): Promise<DecryptResult<unknown>>;
|
|
77
|
+
/** The label and top-level field an encrypted value belongs to. */
|
|
78
|
+
export interface FieldBinding {
|
|
79
|
+
/** The label's full id, e.g. `"wemush:clx1a2b3c4"` */
|
|
80
|
+
id: string;
|
|
81
|
+
/** The top-level field name, e.g. `"strain"` */
|
|
82
|
+
field: string;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Decrypt every field-level encrypted value in a specimen produced by
|
|
86
|
+
* `encryptFields()`, and return the restored, validated Specimen.
|
|
87
|
+
*
|
|
88
|
+
* Before any key is derived:
|
|
89
|
+
* - a label whose identifying fields (`@context`, `@type`, `id`, `version`,
|
|
90
|
+
* `type`, `species`) include an encrypted object is refused
|
|
91
|
+
* (`identifying-field`); decrypted values never replace them
|
|
92
|
+
* - every encrypted field is validated
|
|
93
|
+
* - the iterations of each distinct (salt, iterations) pair are summed, and
|
|
94
|
+
* the label is refused if the total exceeds `maxIterations` (10,000,000)
|
|
95
|
+
*
|
|
96
|
+
* Fields sharing a salt and iteration count share one derivation. Each value
|
|
97
|
+
* is authenticated against its AAD, `"{id}\n{field}"`, so swapped or copied
|
|
98
|
+
* values fail with `authentication-failed`.
|
|
99
|
+
*
|
|
100
|
+
* @example
|
|
101
|
+
* ```typescript
|
|
102
|
+
* const partial = await encryptFields(specimen, { key, fields: ['strain'] });
|
|
103
|
+
* const restored = await decryptFields(partial, { key });
|
|
104
|
+
* if (restored.success) restored.data.strain?.name;
|
|
36
105
|
* ```
|
|
106
|
+
*
|
|
107
|
+
* @since 1.3.0
|
|
37
108
|
*/
|
|
38
|
-
export declare function
|
|
109
|
+
export declare function decryptFields(value: FieldEncryptedSpecimen | Record<string, unknown>, options: DecryptionOptions): Promise<DecryptResult<Specimen>>;
|
|
39
110
|
//# sourceMappingURL=decrypt.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decrypt.d.ts","sourceRoot":"","sources":["../../../src/crypto/decrypt.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"decrypt.d.ts","sourceRoot":"","sources":["../../../src/crypto/decrypt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EAEjB,sBAAsB,EAEtB,QAAQ,EACT,MAAM,aAAa,CAAC;AAwDrB;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAAC,iBAAiB,CAAC,CAuE/E;AAwSD;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,GAAG,iBAAiB,EACjC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CA8BhC;AAeD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,MAAM,GAAG,iBAAiB,EACjC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAIlC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAiBjC;AAED,mEAAmE;AACnE,MAAM,WAAW,YAAY;IAC3B,sDAAsD;IACtD,EAAE,EAAE,MAAM,CAAC;IACX,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAC;CACf;AAsCD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvD,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAyGlC"}
|