@vorionsys/contracts 0.1.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/dist/aci/aci-string.d.ts +539 -0
- package/dist/aci/aci-string.d.ts.map +1 -0
- package/dist/aci/aci-string.js +563 -0
- package/dist/aci/aci-string.js.map +1 -0
- package/dist/aci/attestation.d.ts +648 -0
- package/dist/aci/attestation.d.ts.map +1 -0
- package/dist/aci/attestation.js +289 -0
- package/dist/aci/attestation.js.map +1 -0
- package/dist/aci/domains.d.ts +260 -0
- package/dist/aci/domains.d.ts.map +1 -0
- package/dist/aci/domains.js +322 -0
- package/dist/aci/domains.js.map +1 -0
- package/dist/aci/effective-permission.d.ts +371 -0
- package/dist/aci/effective-permission.d.ts.map +1 -0
- package/dist/aci/effective-permission.js +351 -0
- package/dist/aci/effective-permission.js.map +1 -0
- package/dist/aci/identity.d.ts +1100 -0
- package/dist/aci/identity.d.ts.map +1 -0
- package/dist/aci/identity.js +328 -0
- package/dist/aci/identity.js.map +1 -0
- package/dist/aci/index.d.ts +67 -0
- package/dist/aci/index.d.ts.map +1 -0
- package/dist/aci/index.js +157 -0
- package/dist/aci/index.js.map +1 -0
- package/dist/aci/jwt-claims.d.ts +756 -0
- package/dist/aci/jwt-claims.d.ts.map +1 -0
- package/dist/aci/jwt-claims.js +335 -0
- package/dist/aci/jwt-claims.js.map +1 -0
- package/dist/aci/levels.d.ts +279 -0
- package/dist/aci/levels.d.ts.map +1 -0
- package/dist/aci/levels.js +467 -0
- package/dist/aci/levels.js.map +1 -0
- package/dist/aci/mapping.d.ts +291 -0
- package/dist/aci/mapping.d.ts.map +1 -0
- package/dist/aci/mapping.js +427 -0
- package/dist/aci/mapping.js.map +1 -0
- package/dist/aci/skills.d.ts +314 -0
- package/dist/aci/skills.d.ts.map +1 -0
- package/dist/aci/skills.js +404 -0
- package/dist/aci/skills.js.map +1 -0
- package/dist/aci/tiers.d.ts +403 -0
- package/dist/aci/tiers.d.ts.map +1 -0
- package/dist/aci/tiers.js +659 -0
- package/dist/aci/tiers.js.map +1 -0
- package/dist/canonical/agent.d.ts +796 -0
- package/dist/canonical/agent.d.ts.map +1 -0
- package/dist/canonical/agent.js +527 -0
- package/dist/canonical/agent.js.map +1 -0
- package/dist/canonical/governance.d.ts +905 -0
- package/dist/canonical/governance.d.ts.map +1 -0
- package/dist/canonical/governance.js +454 -0
- package/dist/canonical/governance.js.map +1 -0
- package/dist/canonical/index.d.ts +17 -0
- package/dist/canonical/index.d.ts.map +1 -0
- package/dist/canonical/index.js +21 -0
- package/dist/canonical/index.js.map +1 -0
- package/dist/canonical/intent.d.ts +727 -0
- package/dist/canonical/intent.d.ts.map +1 -0
- package/dist/canonical/intent.js +203 -0
- package/dist/canonical/intent.js.map +1 -0
- package/dist/canonical/risk-level.d.ts +344 -0
- package/dist/canonical/risk-level.d.ts.map +1 -0
- package/dist/canonical/risk-level.js +472 -0
- package/dist/canonical/risk-level.js.map +1 -0
- package/dist/canonical/trust-band.d.ts +239 -0
- package/dist/canonical/trust-band.d.ts.map +1 -0
- package/dist/canonical/trust-band.js +298 -0
- package/dist/canonical/trust-band.js.map +1 -0
- package/dist/canonical/trust-score.d.ts +301 -0
- package/dist/canonical/trust-score.d.ts.map +1 -0
- package/dist/canonical/trust-score.js +390 -0
- package/dist/canonical/trust-score.js.map +1 -0
- package/dist/canonical/trust-signal.d.ts +617 -0
- package/dist/canonical/trust-signal.d.ts.map +1 -0
- package/dist/canonical/trust-signal.js +355 -0
- package/dist/canonical/trust-signal.js.map +1 -0
- package/dist/canonical/validation.d.ts +231 -0
- package/dist/canonical/validation.d.ts.map +1 -0
- package/dist/canonical/validation.js +558 -0
- package/dist/canonical/validation.js.map +1 -0
- package/dist/common/index.d.ts +7 -0
- package/dist/common/index.d.ts.map +1 -0
- package/dist/common/index.js +7 -0
- package/dist/common/index.js.map +1 -0
- package/dist/common/primitives.d.ts +56 -0
- package/dist/common/primitives.d.ts.map +1 -0
- package/dist/common/primitives.js +70 -0
- package/dist/common/primitives.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/v2/canary-probe.d.ts +201 -0
- package/dist/v2/canary-probe.d.ts.map +1 -0
- package/dist/v2/canary-probe.js +99 -0
- package/dist/v2/canary-probe.js.map +1 -0
- package/dist/v2/component.d.ts +132 -0
- package/dist/v2/component.d.ts.map +1 -0
- package/dist/v2/component.js +5 -0
- package/dist/v2/component.js.map +1 -0
- package/dist/v2/decision.d.ts +310 -0
- package/dist/v2/decision.d.ts.map +1 -0
- package/dist/v2/decision.js +21 -0
- package/dist/v2/decision.js.map +1 -0
- package/dist/v2/enums.d.ts +185 -0
- package/dist/v2/enums.d.ts.map +1 -0
- package/dist/v2/enums.js +203 -0
- package/dist/v2/enums.js.map +1 -0
- package/dist/v2/evidence.d.ts +368 -0
- package/dist/v2/evidence.d.ts.map +1 -0
- package/dist/v2/evidence.js +152 -0
- package/dist/v2/evidence.js.map +1 -0
- package/dist/v2/execution.d.ts +190 -0
- package/dist/v2/execution.d.ts.map +1 -0
- package/dist/v2/execution.js +5 -0
- package/dist/v2/execution.js.map +1 -0
- package/dist/v2/index.d.ts +19 -0
- package/dist/v2/index.d.ts.map +1 -0
- package/dist/v2/index.js +32 -0
- package/dist/v2/index.js.map +1 -0
- package/dist/v2/intent.d.ts +89 -0
- package/dist/v2/intent.d.ts.map +1 -0
- package/dist/v2/intent.js +5 -0
- package/dist/v2/intent.js.map +1 -0
- package/dist/v2/policy-bundle.d.ts +166 -0
- package/dist/v2/policy-bundle.d.ts.map +1 -0
- package/dist/v2/policy-bundle.js +20 -0
- package/dist/v2/policy-bundle.js.map +1 -0
- package/dist/v2/pre-action-gate.d.ts +185 -0
- package/dist/v2/pre-action-gate.d.ts.map +1 -0
- package/dist/v2/pre-action-gate.js +64 -0
- package/dist/v2/pre-action-gate.js.map +1 -0
- package/dist/v2/proof-event.d.ts +201 -0
- package/dist/v2/proof-event.d.ts.map +1 -0
- package/dist/v2/proof-event.js +5 -0
- package/dist/v2/proof-event.js.map +1 -0
- package/dist/v2/retention.d.ts +329 -0
- package/dist/v2/retention.d.ts.map +1 -0
- package/dist/v2/retention.js +162 -0
- package/dist/v2/retention.js.map +1 -0
- package/dist/v2/trust-delta.d.ts +119 -0
- package/dist/v2/trust-delta.d.ts.map +1 -0
- package/dist/v2/trust-delta.js +28 -0
- package/dist/v2/trust-delta.js.map +1 -0
- package/dist/v2/trust-profile.d.ts +337 -0
- package/dist/v2/trust-profile.d.ts.map +1 -0
- package/dist/v2/trust-profile.js +96 -0
- package/dist/v2/trust-profile.js.map +1 -0
- package/dist/validators/decision.d.ts +430 -0
- package/dist/validators/decision.d.ts.map +1 -0
- package/dist/validators/decision.js +61 -0
- package/dist/validators/decision.js.map +1 -0
- package/dist/validators/enums.d.ts +24 -0
- package/dist/validators/enums.d.ts.map +1 -0
- package/dist/validators/enums.js +24 -0
- package/dist/validators/enums.js.map +1 -0
- package/dist/validators/index.d.ts +30 -0
- package/dist/validators/index.d.ts.map +1 -0
- package/dist/validators/index.js +42 -0
- package/dist/validators/index.js.map +1 -0
- package/dist/validators/intent.d.ts +229 -0
- package/dist/validators/intent.d.ts.map +1 -0
- package/dist/validators/intent.js +47 -0
- package/dist/validators/intent.js.map +1 -0
- package/dist/validators/proof-event.d.ts +981 -0
- package/dist/validators/proof-event.d.ts.map +1 -0
- package/dist/validators/proof-event.js +134 -0
- package/dist/validators/proof-event.js.map +1 -0
- package/dist/validators/trust-profile.d.ts +350 -0
- package/dist/validators/trust-profile.d.ts.map +1 -0
- package/dist/validators/trust-profile.js +65 -0
- package/dist/validators/trust-profile.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview ACI Domain Codes and Bitmask Operations
|
|
3
|
+
*
|
|
4
|
+
* Defines the capability domain codes used in ACI strings, with bitmask
|
|
5
|
+
* encoding for efficient queries and domain matching.
|
|
6
|
+
*
|
|
7
|
+
* Domain codes represent high-level capability areas that agents can operate in.
|
|
8
|
+
* Each domain has a single-character code, a human-readable name, a bitmask value,
|
|
9
|
+
* and a description of its scope.
|
|
10
|
+
*
|
|
11
|
+
* @module @vorion/contracts/aci/domains
|
|
12
|
+
*/
|
|
13
|
+
import { z } from 'zod';
|
|
14
|
+
/**
|
|
15
|
+
* Array of all valid domain codes.
|
|
16
|
+
*/
|
|
17
|
+
export const DOMAIN_CODES = [
|
|
18
|
+
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'S',
|
|
19
|
+
];
|
|
20
|
+
/**
|
|
21
|
+
* Zod schema for DomainCode validation.
|
|
22
|
+
*/
|
|
23
|
+
export const domainCodeSchema = z.enum(['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'S'], {
|
|
24
|
+
errorMap: () => ({ message: 'Invalid domain code. Must be one of: A, B, C, D, E, F, G, H, I, S' }),
|
|
25
|
+
});
|
|
26
|
+
/**
|
|
27
|
+
* Capability domains with their definitions.
|
|
28
|
+
*
|
|
29
|
+
* Each domain has a unique bitmask value (power of 2) for efficient
|
|
30
|
+
* storage and querying of domain combinations.
|
|
31
|
+
*/
|
|
32
|
+
export const CAPABILITY_DOMAINS = {
|
|
33
|
+
A: { code: 'A', name: 'Administration', bit: 0x001, description: 'System administration, user management' },
|
|
34
|
+
B: { code: 'B', name: 'Business', bit: 0x002, description: 'Business logic, workflows, approvals' },
|
|
35
|
+
C: { code: 'C', name: 'Communications', bit: 0x004, description: 'Email, messaging, notifications' },
|
|
36
|
+
D: { code: 'D', name: 'Data', bit: 0x008, description: 'Data processing, analytics, reporting' },
|
|
37
|
+
E: { code: 'E', name: 'External', bit: 0x010, description: 'Third-party integrations, APIs' },
|
|
38
|
+
F: { code: 'F', name: 'Finance', bit: 0x020, description: 'Financial operations, payments, accounting' },
|
|
39
|
+
G: { code: 'G', name: 'Governance', bit: 0x040, description: 'Policy, compliance, oversight' },
|
|
40
|
+
H: { code: 'H', name: 'Hospitality', bit: 0x080, description: 'Venue, events, catering management' },
|
|
41
|
+
I: { code: 'I', name: 'Infrastructure', bit: 0x100, description: 'Compute, storage, networking' },
|
|
42
|
+
S: { code: 'S', name: 'Security', bit: 0x200, description: 'Authentication, authorization, audit' },
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Human-readable domain names indexed by code.
|
|
46
|
+
*/
|
|
47
|
+
export const DOMAIN_NAMES = {
|
|
48
|
+
A: 'Administration',
|
|
49
|
+
B: 'Business',
|
|
50
|
+
C: 'Communications',
|
|
51
|
+
D: 'Data',
|
|
52
|
+
E: 'External',
|
|
53
|
+
F: 'Finance',
|
|
54
|
+
G: 'Governance',
|
|
55
|
+
H: 'Hospitality',
|
|
56
|
+
I: 'Infrastructure',
|
|
57
|
+
S: 'Security',
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Bitmask value representing all domains combined.
|
|
61
|
+
*/
|
|
62
|
+
export const ALL_DOMAINS_BITMASK = Object.values(CAPABILITY_DOMAINS).reduce((mask, domain) => mask | domain.bit, 0);
|
|
63
|
+
// ============================================================================
|
|
64
|
+
// Bitmask Encoding/Decoding
|
|
65
|
+
// ============================================================================
|
|
66
|
+
/**
|
|
67
|
+
* Encodes an array of domain codes into a bitmask.
|
|
68
|
+
*
|
|
69
|
+
* @param domains - Array of domain codes to encode
|
|
70
|
+
* @returns Bitmask integer representing the domains
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```typescript
|
|
74
|
+
* encodeDomains(['A', 'B']); // 0x003 (3)
|
|
75
|
+
* encodeDomains(['A', 'S']); // 0x201 (513)
|
|
76
|
+
* encodeDomains([]); // 0
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
export function encodeDomains(domains) {
|
|
80
|
+
return domains.reduce((mask, code) => {
|
|
81
|
+
const domain = CAPABILITY_DOMAINS[code];
|
|
82
|
+
return mask | domain.bit;
|
|
83
|
+
}, 0);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Decodes a bitmask into an array of domain codes.
|
|
87
|
+
*
|
|
88
|
+
* @param bitmask - Bitmask integer to decode
|
|
89
|
+
* @returns Array of domain codes present in the bitmask
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* ```typescript
|
|
93
|
+
* decodeDomains(0x003); // ['A', 'B']
|
|
94
|
+
* decodeDomains(0x201); // ['A', 'S']
|
|
95
|
+
* decodeDomains(0); // []
|
|
96
|
+
* ```
|
|
97
|
+
*/
|
|
98
|
+
export function decodeDomains(bitmask) {
|
|
99
|
+
return DOMAIN_CODES.filter((code) => (bitmask & CAPABILITY_DOMAINS[code].bit) !== 0);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Converts a domain string (e.g., "ABS") to an array of domain codes.
|
|
103
|
+
*
|
|
104
|
+
* @param domainString - String containing domain codes (e.g., "ABS")
|
|
105
|
+
* @returns Array of domain codes
|
|
106
|
+
* @throws Error if any character is not a valid domain code
|
|
107
|
+
*
|
|
108
|
+
* @example
|
|
109
|
+
* ```typescript
|
|
110
|
+
* parseDomainString('ABS'); // ['A', 'B', 'S']
|
|
111
|
+
* parseDomainString('D'); // ['D']
|
|
112
|
+
* ```
|
|
113
|
+
*/
|
|
114
|
+
export function parseDomainString(domainString) {
|
|
115
|
+
const codes = domainString.split('');
|
|
116
|
+
const invalidCodes = codes.filter((c) => !DOMAIN_CODES.includes(c));
|
|
117
|
+
if (invalidCodes.length > 0) {
|
|
118
|
+
throw new Error(`Invalid domain codes: ${invalidCodes.join(', ')}`);
|
|
119
|
+
}
|
|
120
|
+
return codes;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Converts an array of domain codes to a domain string.
|
|
124
|
+
*
|
|
125
|
+
* @param domains - Array of domain codes
|
|
126
|
+
* @param sort - Whether to sort the codes alphabetically (default: true)
|
|
127
|
+
* @returns String containing the domain codes
|
|
128
|
+
*
|
|
129
|
+
* @example
|
|
130
|
+
* ```typescript
|
|
131
|
+
* formatDomainString(['S', 'A', 'B']); // 'ABS'
|
|
132
|
+
* formatDomainString(['S', 'A'], false); // 'SA'
|
|
133
|
+
* ```
|
|
134
|
+
*/
|
|
135
|
+
export function formatDomainString(domains, sort = true) {
|
|
136
|
+
const uniqueDomains = [...new Set(domains)];
|
|
137
|
+
return sort ? uniqueDomains.sort().join('') : uniqueDomains.join('');
|
|
138
|
+
}
|
|
139
|
+
// ============================================================================
|
|
140
|
+
// Domain Matching
|
|
141
|
+
// ============================================================================
|
|
142
|
+
/**
|
|
143
|
+
* Checks if a set of domains includes all required domains.
|
|
144
|
+
*
|
|
145
|
+
* @param agentDomains - Domains the agent has (array or bitmask)
|
|
146
|
+
* @param requiredDomains - Domains required (array or bitmask)
|
|
147
|
+
* @returns True if agent has all required domains
|
|
148
|
+
*
|
|
149
|
+
* @example
|
|
150
|
+
* ```typescript
|
|
151
|
+
* hasDomains(['A', 'B', 'C'], ['A', 'B']); // true
|
|
152
|
+
* hasDomains(['A', 'B'], ['A', 'B', 'C']); // false
|
|
153
|
+
* hasDomains(0x007, 0x003); // true (ABC has AB)
|
|
154
|
+
* ```
|
|
155
|
+
*/
|
|
156
|
+
export function hasDomains(agentDomains, requiredDomains) {
|
|
157
|
+
const agentMask = typeof agentDomains === 'number'
|
|
158
|
+
? agentDomains
|
|
159
|
+
: encodeDomains(agentDomains);
|
|
160
|
+
const requiredMask = typeof requiredDomains === 'number'
|
|
161
|
+
? requiredDomains
|
|
162
|
+
: encodeDomains(requiredDomains);
|
|
163
|
+
return (agentMask & requiredMask) === requiredMask;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Checks if a set of domains satisfies domain requirements.
|
|
167
|
+
*
|
|
168
|
+
* This is an alias for hasDomains with more semantic naming for
|
|
169
|
+
* authorization contexts.
|
|
170
|
+
*
|
|
171
|
+
* @param agentDomains - Domains the agent has
|
|
172
|
+
* @param requirements - Domain requirements to satisfy
|
|
173
|
+
* @returns True if all requirements are satisfied
|
|
174
|
+
*/
|
|
175
|
+
export function satisfiesDomainRequirements(agentDomains, requirements) {
|
|
176
|
+
return hasDomains(agentDomains, requirements);
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Gets the intersection of two domain sets.
|
|
180
|
+
*
|
|
181
|
+
* @param domainsA - First domain set
|
|
182
|
+
* @param domainsB - Second domain set
|
|
183
|
+
* @returns Array of domains present in both sets
|
|
184
|
+
*
|
|
185
|
+
* @example
|
|
186
|
+
* ```typescript
|
|
187
|
+
* intersectDomains(['A', 'B', 'C'], ['B', 'C', 'D']); // ['B', 'C']
|
|
188
|
+
* ```
|
|
189
|
+
*/
|
|
190
|
+
export function intersectDomains(domainsA, domainsB) {
|
|
191
|
+
const maskA = typeof domainsA === 'number' ? domainsA : encodeDomains(domainsA);
|
|
192
|
+
const maskB = typeof domainsB === 'number' ? domainsB : encodeDomains(domainsB);
|
|
193
|
+
return decodeDomains(maskA & maskB);
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Gets the union of two domain sets.
|
|
197
|
+
*
|
|
198
|
+
* @param domainsA - First domain set
|
|
199
|
+
* @param domainsB - Second domain set
|
|
200
|
+
* @returns Array of domains present in either set
|
|
201
|
+
*
|
|
202
|
+
* @example
|
|
203
|
+
* ```typescript
|
|
204
|
+
* unionDomains(['A', 'B'], ['B', 'C']); // ['A', 'B', 'C']
|
|
205
|
+
* ```
|
|
206
|
+
*/
|
|
207
|
+
export function unionDomains(domainsA, domainsB) {
|
|
208
|
+
const maskA = typeof domainsA === 'number' ? domainsA : encodeDomains(domainsA);
|
|
209
|
+
const maskB = typeof domainsB === 'number' ? domainsB : encodeDomains(domainsB);
|
|
210
|
+
return decodeDomains(maskA | maskB);
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Gets domains in the first set that are not in the second.
|
|
214
|
+
*
|
|
215
|
+
* @param domainsA - First domain set
|
|
216
|
+
* @param domainsB - Second domain set
|
|
217
|
+
* @returns Array of domains in A but not in B
|
|
218
|
+
*
|
|
219
|
+
* @example
|
|
220
|
+
* ```typescript
|
|
221
|
+
* differenceDomains(['A', 'B', 'C'], ['B', 'C']); // ['A']
|
|
222
|
+
* ```
|
|
223
|
+
*/
|
|
224
|
+
export function differenceDomains(domainsA, domainsB) {
|
|
225
|
+
const maskA = typeof domainsA === 'number' ? domainsA : encodeDomains(domainsA);
|
|
226
|
+
const maskB = typeof domainsB === 'number' ? domainsB : encodeDomains(domainsB);
|
|
227
|
+
return decodeDomains(maskA & ~maskB);
|
|
228
|
+
}
|
|
229
|
+
// ============================================================================
|
|
230
|
+
// Domain Information
|
|
231
|
+
// ============================================================================
|
|
232
|
+
/**
|
|
233
|
+
* Gets the full definition for a domain code.
|
|
234
|
+
*
|
|
235
|
+
* @param code - Domain code
|
|
236
|
+
* @returns Domain definition
|
|
237
|
+
*/
|
|
238
|
+
export function getDomainDefinition(code) {
|
|
239
|
+
return CAPABILITY_DOMAINS[code];
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Gets the human-readable name for a domain code.
|
|
243
|
+
*
|
|
244
|
+
* @param code - Domain code
|
|
245
|
+
* @returns Domain name
|
|
246
|
+
*/
|
|
247
|
+
export function getDomainName(code) {
|
|
248
|
+
return DOMAIN_NAMES[code];
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Gets the bitmask value for a domain code.
|
|
252
|
+
*
|
|
253
|
+
* @param code - Domain code
|
|
254
|
+
* @returns Bitmask value
|
|
255
|
+
*/
|
|
256
|
+
export function getDomainBit(code) {
|
|
257
|
+
return CAPABILITY_DOMAINS[code].bit;
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Counts the number of domains in a bitmask.
|
|
261
|
+
*
|
|
262
|
+
* @param bitmask - Domain bitmask
|
|
263
|
+
* @returns Number of domains
|
|
264
|
+
*/
|
|
265
|
+
export function countDomains(bitmask) {
|
|
266
|
+
let count = 0;
|
|
267
|
+
let mask = bitmask;
|
|
268
|
+
while (mask) {
|
|
269
|
+
count += mask & 1;
|
|
270
|
+
mask >>>= 1;
|
|
271
|
+
}
|
|
272
|
+
return count;
|
|
273
|
+
}
|
|
274
|
+
// ============================================================================
|
|
275
|
+
// Type Guards
|
|
276
|
+
// ============================================================================
|
|
277
|
+
/**
|
|
278
|
+
* Type guard to check if a value is a valid DomainCode.
|
|
279
|
+
*
|
|
280
|
+
* @param value - Value to check
|
|
281
|
+
* @returns True if value is a valid DomainCode
|
|
282
|
+
*/
|
|
283
|
+
export function isDomainCode(value) {
|
|
284
|
+
return typeof value === 'string' && DOMAIN_CODES.includes(value);
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Type guard to check if all values in an array are valid DomainCodes.
|
|
288
|
+
*
|
|
289
|
+
* @param values - Array to check
|
|
290
|
+
* @returns True if all values are valid DomainCodes
|
|
291
|
+
*/
|
|
292
|
+
export function isDomainCodeArray(values) {
|
|
293
|
+
return Array.isArray(values) && values.every(isDomainCode);
|
|
294
|
+
}
|
|
295
|
+
// ============================================================================
|
|
296
|
+
// Zod Schemas
|
|
297
|
+
// ============================================================================
|
|
298
|
+
/**
|
|
299
|
+
* Zod schema for domain definition.
|
|
300
|
+
*/
|
|
301
|
+
export const domainDefinitionSchema = z.object({
|
|
302
|
+
code: domainCodeSchema,
|
|
303
|
+
name: z.string().min(1),
|
|
304
|
+
bit: z.number().int().positive(),
|
|
305
|
+
description: z.string().min(1),
|
|
306
|
+
});
|
|
307
|
+
/**
|
|
308
|
+
* Zod schema for an array of domain codes.
|
|
309
|
+
*/
|
|
310
|
+
export const domainCodeArraySchema = z.array(domainCodeSchema);
|
|
311
|
+
/**
|
|
312
|
+
* Zod schema for a domain bitmask (positive integer).
|
|
313
|
+
*/
|
|
314
|
+
export const domainBitmaskSchema = z.number().int().min(0).max(ALL_DOMAINS_BITMASK);
|
|
315
|
+
/**
|
|
316
|
+
* Zod schema for domain string (e.g., "ABS").
|
|
317
|
+
*/
|
|
318
|
+
export const domainStringSchema = z
|
|
319
|
+
.string()
|
|
320
|
+
.regex(/^[ABCDEFGHIS]+$/, 'Domain string must only contain valid domain codes (A-I, S)')
|
|
321
|
+
.transform((str) => parseDomainString(str));
|
|
322
|
+
//# sourceMappingURL=domains.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domains.js","sourceRoot":"","sources":["../../src/aci/domains.ts"],"names":[],"mappings":"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"}
|