@miakapp/cli 4.0.0-alpha.0 → 4.0.0-alpha.3

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.
Files changed (57) hide show
  1. package/package.json +4 -3
  2. package/dist/agent-pack.d.ts +0 -78
  3. package/dist/agent-pack.d.ts.map +0 -1
  4. package/dist/agent-pack.js +0 -193
  5. package/dist/agent-pack.js.map +0 -1
  6. package/dist/artifact.d.ts +0 -32
  7. package/dist/artifact.d.ts.map +0 -1
  8. package/dist/artifact.js +0 -328
  9. package/dist/artifact.js.map +0 -1
  10. package/dist/control-plane.d.ts +0 -37
  11. package/dist/control-plane.d.ts.map +0 -1
  12. package/dist/control-plane.js +0 -127
  13. package/dist/control-plane.js.map +0 -1
  14. package/dist/discovery.d.ts +0 -95
  15. package/dist/discovery.d.ts.map +0 -1
  16. package/dist/discovery.js +0 -389
  17. package/dist/discovery.js.map +0 -1
  18. package/dist/errors.d.ts +0 -37
  19. package/dist/errors.d.ts.map +0 -1
  20. package/dist/errors.js +0 -56
  21. package/dist/errors.js.map +0 -1
  22. package/dist/internal/http.d.ts +0 -35
  23. package/dist/internal/http.d.ts.map +0 -1
  24. package/dist/internal/http.js +0 -125
  25. package/dist/internal/http.js.map +0 -1
  26. package/dist/internal/json.d.ts +0 -15
  27. package/dist/internal/json.d.ts.map +0 -1
  28. package/dist/internal/json.js +0 -227
  29. package/dist/internal/json.js.map +0 -1
  30. package/dist/internal/names.d.ts +0 -45
  31. package/dist/internal/names.d.ts.map +0 -1
  32. package/dist/internal/names.js +0 -98
  33. package/dist/internal/names.js.map +0 -1
  34. package/dist/internal/requirements.d.ts +0 -10
  35. package/dist/internal/requirements.d.ts.map +0 -1
  36. package/dist/internal/requirements.js +0 -50
  37. package/dist/internal/requirements.js.map +0 -1
  38. package/dist/internal/yaml.d.ts +0 -26
  39. package/dist/internal/yaml.d.ts.map +0 -1
  40. package/dist/internal/yaml.js +0 -184
  41. package/dist/internal/yaml.js.map +0 -1
  42. package/dist/main.d.ts +0 -86
  43. package/dist/main.d.ts.map +0 -1
  44. package/dist/main.js +0 -666
  45. package/dist/main.js.map +0 -1
  46. package/dist/mcp.d.ts +0 -93
  47. package/dist/mcp.d.ts.map +0 -1
  48. package/dist/mcp.js +0 -524
  49. package/dist/mcp.js.map +0 -1
  50. package/dist/project.d.ts +0 -25
  51. package/dist/project.d.ts.map +0 -1
  52. package/dist/project.js +0 -90
  53. package/dist/project.js.map +0 -1
  54. package/dist/publication.d.ts +0 -95
  55. package/dist/publication.d.ts.map +0 -1
  56. package/dist/publication.js +0 -408
  57. package/dist/publication.js.map +0 -1
@@ -1,125 +0,0 @@
1
- import { contractError } from '../errors.js';
2
- import { parseJson } from './json.js';
3
- /** RFC 0004 §4.2: one response body is at most 64 KiB outside the stated exceptions. */
4
- export const MAXIMUM_RESPONSE_BYTES = 65_536;
5
- /** RFC 0004 §4.2: one request body is at most 16 KiB. */
6
- export const MAXIMUM_REQUEST_BYTES = 16_384;
7
- /**
8
- * Every control-plane URL is an exact absolute HTTPS identifier with no user
9
- * information, query or fragment. A value that does not round-trip through
10
- * `URL` is rejected rather than normalized.
11
- *
12
- * One deviation from byte-for-byte equality is required rather than convenient.
13
- * RFC 0004 §3 states that `issuer` has no trailing slash, and its own example
14
- * issuer is the bare origin `https://control.example.test`. `URL` serializes
15
- * that back with a trailing slash, so demanding exact equality would reject
16
- * every origin-only issuer the RFC describes and force an arbitrary path
17
- * segment onto every deployment. An empty path is therefore accepted in either
18
- * spelling; nothing else is relaxed, so a stray query, a default port or a
19
- * non-normalized path is still refused.
20
- */
21
- export function canonicalHttpsUrl(value, label) {
22
- if (typeof value !== 'string' || value.length === 0 || value.length > 2_048) {
23
- throw contractError(`${label} is not a bounded URL`);
24
- }
25
- let parsed;
26
- try {
27
- parsed = new URL(value);
28
- }
29
- catch {
30
- throw contractError(`${label} is not a URL`);
31
- }
32
- const roundTrips = parsed.href === value
33
- || (parsed.pathname === '/' && parsed.href === `${value}/`);
34
- if (parsed.protocol !== 'https:'
35
- || parsed.hostname === ''
36
- || parsed.username !== ''
37
- || parsed.password !== ''
38
- || parsed.search !== ''
39
- || parsed.hash !== ''
40
- || !roundTrips) {
41
- throw contractError(`${label} is not a canonical HTTPS identifier`);
42
- }
43
- return value;
44
- }
45
- export function cancelBody(response) {
46
- try {
47
- const cancellation = response?.body?.cancel();
48
- void cancellation?.catch(() => undefined);
49
- }
50
- catch {
51
- // A hostile Fetch implementation cannot change the caller's outcome.
52
- }
53
- }
54
- export async function readBoundedBody(response, maximumBytes) {
55
- const declared = response.headers.get('content-length');
56
- if (declared !== null
57
- && (!/^(?:0|[1-9][0-9]*)$/.test(declared) || Number(declared) > maximumBytes)) {
58
- cancelBody(response);
59
- throw contractError('Response declared a body above the permitted ceiling');
60
- }
61
- if (response.body === null)
62
- throw contractError('Response carried no body');
63
- const reader = response.body.getReader();
64
- const chunks = [];
65
- let size = 0;
66
- try {
67
- while (true) {
68
- const item = await reader.read();
69
- if (item.done)
70
- break;
71
- size += item.value.byteLength;
72
- if (size > maximumBytes) {
73
- void reader.cancel().catch(() => undefined);
74
- throw contractError('Response body exceeded the permitted ceiling');
75
- }
76
- chunks.push(item.value);
77
- }
78
- }
79
- finally {
80
- reader.releaseLock();
81
- }
82
- if (declared !== null && Number(declared) !== size) {
83
- throw contractError('Response body did not match its declared Content-Length');
84
- }
85
- const body = new Uint8Array(size);
86
- let offset = 0;
87
- for (const chunk of chunks) {
88
- body.set(chunk, offset);
89
- offset += chunk.byteLength;
90
- }
91
- return body;
92
- }
93
- export async function readJsonBody(response) {
94
- const body = await readBoundedBody(response, MAXIMUM_RESPONSE_BYTES);
95
- if (body.byteLength === 0)
96
- throw contractError('Response carried an empty JSON body');
97
- return parseJson(body);
98
- }
99
- export function requestBody(value) {
100
- const body = JSON.stringify(value);
101
- if (new TextEncoder().encode(body).byteLength > MAXIMUM_REQUEST_BYTES) {
102
- throw contractError('Request body exceeds the 16 KiB control-plane ceiling');
103
- }
104
- return body;
105
- }
106
- /**
107
- * A control-plane request never follows a redirect, never carries a cookie and
108
- * never negotiates compression for an exact identifier.
109
- */
110
- export function jsonRequestInit(method, token, body, signal) {
111
- const headers = {
112
- accept: 'application/json',
113
- authorization: `Bearer ${token}`,
114
- };
115
- if (body !== undefined)
116
- headers['content-type'] = 'application/json; charset=utf-8';
117
- return {
118
- method,
119
- headers,
120
- redirect: 'error',
121
- signal,
122
- ...(body === undefined ? {} : { body }),
123
- };
124
- }
125
- //# sourceMappingURL=http.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/internal/http.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- export type JsonValue = null | boolean | number | string | JsonValue[] | {
2
- [key: string]: JsonValue;
3
- };
4
- export declare class InvalidJsonError extends Error {
5
- constructor();
6
- }
7
- export declare function parseJson(input: Uint8Array): JsonValue;
8
- /** Accepts only the exact declared key set: an unknown field is a rejection. */
9
- export declare function exactRecord(value: unknown, required: readonly string[], optional?: readonly string[]): Readonly<Record<string, unknown>>;
10
- export declare function boundedString(value: unknown, minimum: number, maximum: number): string;
11
- export declare function stringArray(value: unknown, maximumItems: number): readonly string[];
12
- export declare function positiveInteger(value: unknown, maximum: number): number;
13
- /** RFC 3339 instant as produced by the control plane; compared as an exact string. */
14
- export declare function instant(value: unknown): string;
15
- //# sourceMappingURL=json.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/internal/json.ts"],"names":[],"mappings":"AAkBA,MAAM,MAAM,SAAS,GACjB,IAAI,GACJ,OAAO,GACP,MAAM,GACN,MAAM,GACN,SAAS,EAAE,GACX;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAEjC,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,cAGC;CACF;AAoBD,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,CA8HtD;AAED,gFAAgF;AAChF,wBAAgB,WAAW,CACzB,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,QAAQ,GAAE,SAAS,MAAM,EAAO,GAC/B,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAQnC;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAOtF;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAMnF;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAMvE;AAED,sFAAsF;AACtF,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAK9C"}
@@ -1,227 +0,0 @@
1
- /**
2
- * Strict JSON decoding for control-plane responses.
3
- *
4
- * The SDK keeps an equivalent parser for the access-token exchange, but its
5
- * value and string ceilings are tuned to that one response. Publication
6
- * responses carry the closed RFC 0002 `requires` object, so this parser applies
7
- * the general RFC 0004 §4.2 limits instead. Both reject duplicate keys,
8
- * prototype-polluting keys, trailing content and non-UTF-8 input; neither
9
- * accepts an unknown field anywhere an exact shape is expected.
10
- */
11
- const MAXIMUM_DEPTH = 16;
12
- const MAXIMUM_VALUES = 2_048;
13
- const MAXIMUM_STRING_BYTES = 16_384;
14
- const UTF8 = new TextEncoder();
15
- const CONTROL_CHARACTER = /\p{Cc}/u;
16
- const FORBIDDEN_KEYS = new Set(['__proto__', 'prototype', 'constructor']);
17
- const NUMBER = /^-?(?:0|[1-9][0-9]*)(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?/;
18
- export class InvalidJsonError extends Error {
19
- constructor() {
20
- super('Invalid control-plane JSON');
21
- this.name = 'InvalidJsonError';
22
- }
23
- }
24
- function invalid() {
25
- throw new InvalidJsonError();
26
- }
27
- function hasUnpairedSurrogate(value) {
28
- for (let index = 0; index < value.length; index += 1) {
29
- const unit = value.charCodeAt(index);
30
- if (unit >= 0xd800 && unit <= 0xdbff) {
31
- const following = value.charCodeAt(index + 1);
32
- if (index + 1 >= value.length || following < 0xdc00 || following > 0xdfff)
33
- return true;
34
- index += 1;
35
- }
36
- else if (unit >= 0xdc00 && unit <= 0xdfff) {
37
- return true;
38
- }
39
- }
40
- return false;
41
- }
42
- export function parseJson(input) {
43
- let text;
44
- try {
45
- text = new TextDecoder('utf-8', { fatal: true }).decode(input);
46
- }
47
- catch {
48
- return invalid();
49
- }
50
- let index = 0;
51
- let values = 0;
52
- const skipWhitespace = () => {
53
- while (index < text.length) {
54
- const code = text.charCodeAt(index);
55
- if (code !== 0x20 && code !== 0x09 && code !== 0x0a && code !== 0x0d)
56
- break;
57
- index += 1;
58
- }
59
- };
60
- const parseString = () => {
61
- if (text[index] !== '"')
62
- return invalid();
63
- const start = index;
64
- index += 1;
65
- let escaped = false;
66
- while (index < text.length) {
67
- const character = text[index];
68
- if (!escaped && character === '"') {
69
- index += 1;
70
- let decoded;
71
- try {
72
- decoded = JSON.parse(text.slice(start, index));
73
- }
74
- catch {
75
- return invalid();
76
- }
77
- if (typeof decoded !== 'string'
78
- || hasUnpairedSurrogate(decoded)
79
- || UTF8.encode(decoded).byteLength > MAXIMUM_STRING_BYTES)
80
- return invalid();
81
- return decoded;
82
- }
83
- escaped = !escaped && character === '\\';
84
- index += 1;
85
- }
86
- return invalid();
87
- };
88
- const parseValue = (depth) => {
89
- if (depth > MAXIMUM_DEPTH)
90
- return invalid();
91
- values += 1;
92
- if (values > MAXIMUM_VALUES)
93
- return invalid();
94
- skipWhitespace();
95
- const character = text[index];
96
- if (character === '"')
97
- return parseString();
98
- if (character === '-' || (character !== undefined && character >= '0' && character <= '9')) {
99
- const match = NUMBER.exec(text.slice(index));
100
- if (match === null)
101
- return invalid();
102
- index += match[0].length;
103
- const number = Number(match[0]);
104
- if (!Number.isFinite(number))
105
- return invalid();
106
- return number;
107
- }
108
- if (text.startsWith('true', index)) {
109
- index += 4;
110
- return true;
111
- }
112
- if (text.startsWith('false', index)) {
113
- index += 5;
114
- return false;
115
- }
116
- if (text.startsWith('null', index)) {
117
- index += 4;
118
- return null;
119
- }
120
- if (character === '[') {
121
- index += 1;
122
- const items = [];
123
- skipWhitespace();
124
- if (text[index] === ']') {
125
- index += 1;
126
- return items;
127
- }
128
- while (true) {
129
- items.push(parseValue(depth + 1));
130
- skipWhitespace();
131
- if (text[index] === ']') {
132
- index += 1;
133
- return items;
134
- }
135
- if (text[index] !== ',')
136
- return invalid();
137
- index += 1;
138
- skipWhitespace();
139
- }
140
- }
141
- if (character === '{') {
142
- index += 1;
143
- const record = Object.create(null);
144
- const keys = new Set();
145
- skipWhitespace();
146
- if (text[index] === '}') {
147
- index += 1;
148
- return record;
149
- }
150
- while (true) {
151
- const key = parseString();
152
- if (keys.has(key) || FORBIDDEN_KEYS.has(key))
153
- return invalid();
154
- keys.add(key);
155
- skipWhitespace();
156
- if (text[index] !== ':')
157
- return invalid();
158
- index += 1;
159
- record[key] = parseValue(depth + 1);
160
- skipWhitespace();
161
- if (text[index] === '}') {
162
- index += 1;
163
- return record;
164
- }
165
- if (text[index] !== ',')
166
- return invalid();
167
- index += 1;
168
- skipWhitespace();
169
- }
170
- }
171
- return invalid();
172
- };
173
- skipWhitespace();
174
- const parsed = parseValue(1);
175
- skipWhitespace();
176
- if (index !== text.length)
177
- return invalid();
178
- return parsed;
179
- }
180
- /** Accepts only the exact declared key set: an unknown field is a rejection. */
181
- export function exactRecord(value, required, optional = []) {
182
- if (value === null || Array.isArray(value) || typeof value !== 'object')
183
- return invalid();
184
- const keys = Object.keys(value);
185
- const allowed = new Set([...required, ...optional]);
186
- if (Reflect.ownKeys(value).length !== keys.length
187
- || required.some((key) => !Object.hasOwn(value, key))
188
- || keys.some((key) => !allowed.has(key)))
189
- return invalid();
190
- return value;
191
- }
192
- export function boundedString(value, minimum, maximum) {
193
- if (typeof value !== 'string'
194
- || hasUnpairedSurrogate(value)
195
- || CONTROL_CHARACTER.test(value))
196
- return invalid();
197
- const bytes = UTF8.encode(value).byteLength;
198
- if (bytes < minimum || bytes > maximum)
199
- return invalid();
200
- return value;
201
- }
202
- export function stringArray(value, maximumItems) {
203
- if (!Array.isArray(value) || value.length > maximumItems)
204
- return invalid();
205
- return value.map((item) => {
206
- if (typeof item !== 'string')
207
- return invalid();
208
- return item;
209
- });
210
- }
211
- export function positiveInteger(value, maximum) {
212
- if (typeof value !== 'number'
213
- || !Number.isSafeInteger(value)
214
- || value <= 0
215
- || value > maximum)
216
- return invalid();
217
- return value;
218
- }
219
- /** RFC 3339 instant as produced by the control plane; compared as an exact string. */
220
- export function instant(value) {
221
- const text = boundedString(value, 20, 64);
222
- const parsed = Date.parse(text);
223
- if (!Number.isFinite(parsed))
224
- return invalid();
225
- return text;
226
- }
227
- //# sourceMappingURL=json.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/internal/json.ts"],"names":[],"mappings":"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"}
@@ -1,45 +0,0 @@
1
- /** RFC 0002 §7.1 caps the artifact at 2 MiB decoded. */
2
- export declare const MAXIMUM_ARTIFACT_BYTES = 2097152;
3
- /** RFC 0002 §10 aborts tokenization beyond this program ceiling. */
4
- export declare const MAXIMUM_PROGRAM_TOKENS = 100000;
5
- /**
6
- * RFC 0002 requires each requirement list to be "duplicate-free, bounded" but
7
- * states no per-list ceiling. This is the CLI-side bound derived from the
8
- * RFC 0004 §4.2 16 KiB request body and 2,048-value JSON limits.
9
- */
10
- export declare const MAXIMUM_REQUIREMENTS_PER_LIST = 256;
11
- export declare const REQUIREMENT_KINDS: readonly ['state_read', 'event_subscribe', 'event_publish', 'call', 'presentation'];
12
- export type RequirementKind = (typeof REQUIREMENT_KINDS)[number];
13
- export type Requirements = {
14
- readonly [Kind in RequirementKind]: readonly string[];
15
- };
16
- export declare function utf8Bytes(value: string): number;
17
- export declare function isHomeId(value: unknown): value is string;
18
- /** 16 random bytes as unpadded base64url: upload IDs, Home Key IDs, JWS IDs. */
19
- export declare function isRandomId(value: unknown): value is string;
20
- /** 32 random bytes as unpadded base64url: upload capability secrets and digests. */
21
- export declare function isUploadToken(value: unknown): value is string;
22
- /** A SHA-256 digest encoded as unpadded base64url, per RFC 0002 §7.1. */
23
- export declare function isDigest(value: unknown): value is string;
24
- export declare function canonicalBase64Url(value: string, bytes: number): boolean;
25
- /** RFC 0002 §7.1: non-empty UTF-8 of at most 64 bytes. */
26
- export declare function isRelease(value: unknown): value is string;
27
- /** `generation` is a positive safe integer. */
28
- export declare function isGeneration(value: unknown): value is number;
29
- /**
30
- * RFC 0001 §5.2 dotted name: 1..256 UTF-8 bytes, no control characters, no `*`,
31
- * no leading or trailing dot, no empty dotted segment.
32
- */
33
- export declare function isDottedName(value: unknown): value is string;
34
- /**
35
- * A state, event or call requirement: an exact dotted name, or a dotted prefix
36
- * whose only `*` is the reserved trailing `.*` ACL suffix.
37
- */
38
- export declare function isRequirementPattern(value: unknown): value is string;
39
- /**
40
- * ABI 1 presentation requirements are exact `media.` handles. A wildcard grant
41
- * is forbidden so each host-owned surface stays explicitly enumerated.
42
- */
43
- export declare function isPresentationHandle(value: unknown): value is string;
44
- export declare function isValidRequirement(kind: RequirementKind, value: unknown): boolean;
45
- //# sourceMappingURL=names.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"names.d.ts","sourceRoot":"","sources":["../../src/internal/names.ts"],"names":[],"mappings":"AAYA,wDAAwD;AACxD,eAAO,MAAM,sBAAsB,UAAY,CAAC;AAEhD,oEAAoE;AACpE,eAAO,MAAM,sBAAsB,SAAU,CAAC;AAE9C;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,MAAM,CAAC;AAEjD,eAAO,MAAM,iBAAiB,YAC5B,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,MAAM,EACN,cAAc,CACN,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjE,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,IAAI,IAAI,eAAe,GAAG,SAAS,MAAM,EAAE;CACtD,CAAC;AAEF,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAExD;AAED,gFAAgF;AAChF,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE1D;AAED,oFAAoF;AACpF,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE7D;AAED,yEAAyE;AACzE,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAExD;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAIxE;AAED,0DAA0D;AAC1D,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAIzD;AAED,+CAA+C;AAC/C,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE5D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAO5D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAKpE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAEpE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAEjF"}
@@ -1,98 +0,0 @@
1
- /**
2
- * Identifier and name grammars shared by RFC 0001 §5.2, RFC 0002 §7.1 and
3
- * RFC 0004 §4.1. Every value is validated as an exact byte string: nothing here
4
- * case-folds, Unicode-normalizes or trims.
5
- */
6
- const CONTROL_CHARACTER = /\p{Cc}/u;
7
- const UTF8 = new TextEncoder();
8
- const HOME_ID = /^[a-z][a-z0-9-]{1,61}[a-z0-9]$/;
9
- const BASE64URL = /^[A-Za-z0-9_-]+$/;
10
- const PRESENTATION_HANDLE = /^media\.[^.]/;
11
- /** RFC 0002 §7.1 caps the artifact at 2 MiB decoded. */
12
- export const MAXIMUM_ARTIFACT_BYTES = 2_097_152;
13
- /** RFC 0002 §10 aborts tokenization beyond this program ceiling. */
14
- export const MAXIMUM_PROGRAM_TOKENS = 100_000;
15
- /**
16
- * RFC 0002 requires each requirement list to be "duplicate-free, bounded" but
17
- * states no per-list ceiling. This is the CLI-side bound derived from the
18
- * RFC 0004 §4.2 16 KiB request body and 2,048-value JSON limits.
19
- */
20
- export const MAXIMUM_REQUIREMENTS_PER_LIST = 256;
21
- export const REQUIREMENT_KINDS = [
22
- 'state_read',
23
- 'event_subscribe',
24
- 'event_publish',
25
- 'call',
26
- 'presentation',
27
- ];
28
- export function utf8Bytes(value) {
29
- return UTF8.encode(value).byteLength;
30
- }
31
- export function isHomeId(value) {
32
- return typeof value === 'string' && HOME_ID.test(value) && value.length <= 63;
33
- }
34
- /** 16 random bytes as unpadded base64url: upload IDs, Home Key IDs, JWS IDs. */
35
- export function isRandomId(value) {
36
- return typeof value === 'string' && value.length === 22 && canonicalBase64Url(value, 16);
37
- }
38
- /** 32 random bytes as unpadded base64url: upload capability secrets and digests. */
39
- export function isUploadToken(value) {
40
- return typeof value === 'string' && value.length === 43 && canonicalBase64Url(value, 32);
41
- }
42
- /** A SHA-256 digest encoded as unpadded base64url, per RFC 0002 §7.1. */
43
- export function isDigest(value) {
44
- return isUploadToken(value);
45
- }
46
- export function canonicalBase64Url(value, bytes) {
47
- if (!BASE64URL.test(value))
48
- return false;
49
- const decoded = Buffer.from(value, 'base64url');
50
- return decoded.byteLength === bytes && decoded.toString('base64url') === value;
51
- }
52
- /** RFC 0002 §7.1: non-empty UTF-8 of at most 64 bytes. */
53
- export function isRelease(value) {
54
- if (typeof value !== 'string' || CONTROL_CHARACTER.test(value))
55
- return false;
56
- const bytes = utf8Bytes(value);
57
- return bytes >= 1 && bytes <= 64;
58
- }
59
- /** `generation` is a positive safe integer. */
60
- export function isGeneration(value) {
61
- return typeof value === 'number' && Number.isSafeInteger(value) && value > 0;
62
- }
63
- /**
64
- * RFC 0001 §5.2 dotted name: 1..256 UTF-8 bytes, no control characters, no `*`,
65
- * no leading or trailing dot, no empty dotted segment.
66
- */
67
- export function isDottedName(value) {
68
- if (typeof value !== 'string' || CONTROL_CHARACTER.test(value) || value.includes('*')) {
69
- return false;
70
- }
71
- const bytes = utf8Bytes(value);
72
- if (bytes < 1 || bytes > 256)
73
- return false;
74
- return value.split('.').every((segment) => segment.length > 0);
75
- }
76
- /**
77
- * A state, event or call requirement: an exact dotted name, or a dotted prefix
78
- * whose only `*` is the reserved trailing `.*` ACL suffix.
79
- */
80
- export function isRequirementPattern(value) {
81
- if (typeof value !== 'string')
82
- return false;
83
- if (!value.endsWith('.*'))
84
- return isDottedName(value);
85
- const prefix = value.slice(0, -2);
86
- return utf8Bytes(value) <= 256 && isDottedName(prefix);
87
- }
88
- /**
89
- * ABI 1 presentation requirements are exact `media.` handles. A wildcard grant
90
- * is forbidden so each host-owned surface stays explicitly enumerated.
91
- */
92
- export function isPresentationHandle(value) {
93
- return isDottedName(value) && typeof value === 'string' && PRESENTATION_HANDLE.test(value);
94
- }
95
- export function isValidRequirement(kind, value) {
96
- return kind === 'presentation' ? isPresentationHandle(value) : isRequirementPattern(value);
97
- }
98
- //# sourceMappingURL=names.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"names.js","sourceRoot":"","sources":["../../src/internal/names.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- import { type Requirements } from './names.js';
2
- /**
3
- * The closed RFC 0002 `requires` object. Lists are duplicate-free and sorted by
4
- * UTF-16 code unit so the value the CLI binds into an upload capability is
5
- * byte-identical on every later reconciliation read.
6
- */
7
- export declare function canonicalRequirements(value: unknown): Requirements;
8
- /** Validates a `requires` object received from the control plane. */
9
- export declare function sameRequirements(left: Requirements, right: Requirements): boolean;
10
- //# sourceMappingURL=requirements.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"requirements.d.ts","sourceRoot":"","sources":["../../src/internal/requirements.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,YAAY,EAClB,MAAM,YAAY,CAAC;AAEpB;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAYlE;AA6BD,qEAAqE;AACrE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAMjF"}
@@ -1,50 +0,0 @@
1
- import { projectError } from '../errors.js';
2
- import { MAXIMUM_REQUIREMENTS_PER_LIST, REQUIREMENT_KINDS, isValidRequirement, } from './names.js';
3
- /**
4
- * The closed RFC 0002 `requires` object. Lists are duplicate-free and sorted by
5
- * UTF-16 code unit so the value the CLI binds into an upload capability is
6
- * byte-identical on every later reconciliation read.
7
- */
8
- export function canonicalRequirements(value) {
9
- if (value === null || typeof value !== 'object' || Array.isArray(value)) {
10
- throw projectError('requires must be an object with the five closed capability lists');
11
- }
12
- const unknown = Object.keys(value).filter((key) => !REQUIREMENT_KINDS.includes(key));
13
- if (unknown.length > 0) {
14
- throw projectError(`requires has unknown capability lists: ${unknown.join(', ')}`);
15
- }
16
- const entries = REQUIREMENT_KINDS.map((kind) => [kind, list(value, kind)]);
17
- return Object.freeze(Object.fromEntries(entries));
18
- }
19
- function list(source, kind) {
20
- const value = source[kind];
21
- if (value === undefined)
22
- return Object.freeze([]);
23
- if (!Array.isArray(value))
24
- throw projectError(`requires.${kind} must be an array`);
25
- if (value.length > MAXIMUM_REQUIREMENTS_PER_LIST) {
26
- throw projectError(`requires.${kind} exceeds ${MAXIMUM_REQUIREMENTS_PER_LIST} entries`);
27
- }
28
- const seen = new Set();
29
- for (const item of value) {
30
- if (!isValidRequirement(kind, item)) {
31
- throw projectError(`requires.${kind} contains an invalid requirement: ${JSON.stringify(item)}`, kind === 'presentation'
32
- ? 'ABI 1 presentation requirements are exact media.* handles; wildcards are forbidden.'
33
- : 'Use an exact RFC 0001 dotted name or a dotted prefix ending in .*');
34
- }
35
- if (seen.has(item)) {
36
- throw projectError(`requires.${kind} repeats ${JSON.stringify(item)}`);
37
- }
38
- seen.add(item);
39
- }
40
- return Object.freeze([...seen].sort());
41
- }
42
- /** Validates a `requires` object received from the control plane. */
43
- export function sameRequirements(left, right) {
44
- return REQUIREMENT_KINDS.every((kind) => {
45
- const a = left[kind];
46
- const b = right[kind];
47
- return a.length === b.length && a.every((item, index) => item === b[index]);
48
- });
49
- }
50
- //# sourceMappingURL=requirements.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"requirements.js","sourceRoot":"","sources":["../../src/internal/requirements.ts"],"names":[],"mappings":"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"}
@@ -1,26 +0,0 @@
1
- /**
2
- * A deliberately closed YAML subset for `miakapp.yaml`.
3
- *
4
- * The configuration file is authored by humans and agents, so it stays readable
5
- * YAML; everything beyond the subset below is rejected with the offending line
6
- * rather than interpreted. This keeps the CLI dependency-free and keeps the
7
- * grammar small enough to reason about.
8
- *
9
- * Supported: block mappings, block sequences of scalars, two-space indentation,
10
- * `#` comments, plain scalars, single- and double-quoted scalars, `true`,
11
- * `false`, `null`, `~`, JSON numbers and the empty sequence `[]`.
12
- *
13
- * `[]` is the one flow form accepted, because RFC 0002's `requires` object is
14
- * closed at five lists and a home that requests no capability of a given kind
15
- * must still be able to write that list down. A non-empty flow sequence stays
16
- * rejected: it has a block form.
17
- *
18
- * Rejected: tabs, anchors, aliases, tags, non-empty flow collections,
19
- * multi-line scalars, multiple documents, duplicate keys and merge keys.
20
- */
21
- export type YamlValue = string | number | boolean | null | YamlValue[] | YamlMapping;
22
- export interface YamlMapping {
23
- readonly [key: string]: YamlValue;
24
- }
25
- export declare function parseYaml(source: string): YamlMapping;
26
- //# sourceMappingURL=yaml.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"yaml.d.ts","sourceRoot":"","sources":["../../src/internal/yaml.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,EAAE,GAAG,WAAW,CAAC;AAErF,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AA6JD,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAWrD"}