@astrale-os/kernel-protocol 0.5.0-beta.9 → 0.5.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.
Files changed (203) hide show
  1. package/dist/artifact/index.d.ts +1 -1
  2. package/dist/artifact/index.js +1 -1
  3. package/dist/artifact/ref.d.ts +2 -0
  4. package/dist/artifact/ref.js +4 -3
  5. package/dist/codecs/index.d.ts +1 -2
  6. package/dist/codecs/index.js +1 -2
  7. package/dist/codecs/media-types.d.ts +0 -1
  8. package/dist/codecs/media-types.js +0 -1
  9. package/dist/errors/index.d.ts +1 -0
  10. package/dist/errors/index.js +1 -0
  11. package/dist/errors/retry.d.ts +25 -0
  12. package/dist/errors/retry.js +46 -0
  13. package/dist/index.d.ts +1 -1
  14. package/dist/index.js +1 -1
  15. package/dist/invocation/admission.d.ts +2 -2
  16. package/dist/invocation/admission.js +5 -5
  17. package/dist/invocation/binary.d.ts +1 -0
  18. package/dist/invocation/binary.js +21 -4
  19. package/dist/invocation/binding-codecs.d.ts +3 -2
  20. package/dist/invocation/binding-codecs.js +1 -6
  21. package/dist/invocation/delegate.d.ts +0 -20
  22. package/dist/invocation/delegate.js +2 -34
  23. package/dist/invocation/http/binary.d.ts +3 -1
  24. package/dist/invocation/http/binary.js +6 -1
  25. package/dist/invocation/http/index.d.ts +2 -1
  26. package/dist/invocation/http/index.js +2 -1
  27. package/dist/invocation/http/negotiation.js +3 -10
  28. package/dist/invocation/http/request.d.ts +11 -0
  29. package/dist/invocation/http/request.js +69 -0
  30. package/dist/invocation/index.d.ts +5 -4
  31. package/dist/invocation/index.js +4 -3
  32. package/dist/invocation/maintenance.d.ts +14 -0
  33. package/dist/invocation/maintenance.js +18 -0
  34. package/dist/invocation/redirect.d.ts +10 -12
  35. package/dist/invocation/redirect.js +10 -22
  36. package/dist/invocation/request.d.ts +3 -0
  37. package/dist/invocation/request.js +9 -2
  38. package/dist/invocation/response.d.ts +6 -1
  39. package/dist/invocation/response.js +26 -15
  40. package/dist/invocation/routing.d.ts +14 -4
  41. package/dist/invocation/routing.js +35 -20
  42. package/dist/invocation/schema.d.ts +6 -4
  43. package/dist/invocation/schema.js +5 -11
  44. package/dist/invocation/service-reason.d.ts +20 -15
  45. package/dist/invocation/service-reason.js +27 -19
  46. package/dist/invocation/stale-route.d.ts +3 -3
  47. package/dist/invocation/target.d.ts +5 -2
  48. package/dist/invocation/target.js +25 -3
  49. package/dist/invocation/websocket/binary.js +1 -0
  50. package/dist/invocation/websocket/index.d.ts +1 -1
  51. package/dist/invocation/websocket/index.js +1 -1
  52. package/dist/invocation/websocket/subprotocol.d.ts +1 -2
  53. package/dist/invocation/websocket/subprotocol.js +3 -4
  54. package/dist/issuer/claims.d.ts +7 -0
  55. package/dist/issuer/claims.js +7 -0
  56. package/dist/issuer/index.d.ts +2 -0
  57. package/dist/issuer/index.js +2 -0
  58. package/dist/issuer/paths.d.ts +2 -0
  59. package/dist/issuer/paths.js +1 -0
  60. package/dist/issuer/workflow-engine.d.ts +18 -0
  61. package/dist/issuer/workflow-engine.js +59 -0
  62. package/dist/{publication → release}/bindings/callable.js +6 -6
  63. package/dist/release/bindings/invocation.js +13 -0
  64. package/dist/release/bindings/view.d.ts +11 -0
  65. package/dist/release/bindings/view.js +54 -0
  66. package/dist/release/build.d.ts +6 -0
  67. package/dist/release/build.js +7 -0
  68. package/dist/release/bundle-admission.d.ts +21 -0
  69. package/dist/{publication → release}/bundle-admission.js +15 -20
  70. package/dist/{publication → release}/bundle-descriptor.js +6 -6
  71. package/dist/release/bundle-evidence.d.ts +3 -0
  72. package/dist/release/bundle-evidence.js +13 -0
  73. package/dist/{publication → release}/bundle.d.ts +5 -2
  74. package/dist/{publication → release}/bundle.js +13 -7
  75. package/dist/{publication → release}/delivery/attestation.d.ts +1 -0
  76. package/dist/{publication → release}/delivery/claims.d.ts +7 -2
  77. package/dist/{publication → release}/delivery/claims.js +20 -13
  78. package/dist/release/delivery/delivery.d.ts +11 -0
  79. package/dist/{publication → release}/delivery/delivery.js +7 -12
  80. package/dist/{publication → release}/delivery/error.d.ts +2 -0
  81. package/dist/{publication → release}/delivery/error.js +1 -0
  82. package/dist/{publication → release}/delivery/index.d.ts +5 -1
  83. package/dist/{publication → release}/delivery/index.js +4 -0
  84. package/dist/{publication → release}/delivery/limits.d.ts +2 -1
  85. package/dist/release/delivery/limits.js +5 -0
  86. package/dist/{publication → release}/delivery/request.d.ts +10 -9
  87. package/dist/{publication → release}/delivery/request.js +9 -10
  88. package/dist/{publication → release}/delivery-declaration.js +4 -4
  89. package/dist/release/delivery-endpoint.js +22 -0
  90. package/dist/release/digest.d.ts +13 -0
  91. package/dist/{publication/etag.js → release/digest.js} +1 -6
  92. package/dist/release/error.d.ts +7 -0
  93. package/dist/release/error.js +11 -0
  94. package/dist/release/index.d.ts +17 -0
  95. package/dist/release/index.js +10 -0
  96. package/dist/release/issuer.d.ts +5 -0
  97. package/dist/release/issuer.js +34 -0
  98. package/dist/release/manifest.d.ts +6 -0
  99. package/dist/release/manifest.js +22 -0
  100. package/dist/release/reference.d.ts +26 -0
  101. package/dist/release/reference.js +70 -0
  102. package/dist/release/release.d.ts +60 -0
  103. package/dist/release/release.js +125 -0
  104. package/dist/release/requirements.d.ts +41 -0
  105. package/dist/release/requirements.js +306 -0
  106. package/dist/{publication → release}/route.js +24 -24
  107. package/dist/{publication → release}/schema.js +4 -4
  108. package/dist/release/served.d.ts +27 -0
  109. package/dist/release/served.js +56 -0
  110. package/dist/release/shape.d.ts +8 -0
  111. package/dist/routes/admission.d.ts +1 -1
  112. package/dist/routes/admission.js +7 -85
  113. package/dist/routes/binding.d.ts +3 -3
  114. package/dist/routes/binding.js +11 -21
  115. package/dist/routes/compiler.d.ts +2 -2
  116. package/dist/routes/compiler.js +7 -3
  117. package/dist/routes/credential.d.ts +12 -2
  118. package/dist/routes/credential.js +9 -4
  119. package/dist/routes/decode.d.ts +5 -2
  120. package/dist/routes/decode.js +24 -17
  121. package/dist/routes/deployment-retired.d.ts +30 -0
  122. package/dist/routes/deployment-retired.js +96 -0
  123. package/dist/routes/encode.js +12 -5
  124. package/dist/routes/entries.d.ts +23 -0
  125. package/dist/routes/entries.js +150 -0
  126. package/dist/routes/evidence.d.ts +3 -3
  127. package/dist/routes/evidence.js +7 -33
  128. package/dist/routes/header.d.ts +9 -0
  129. package/dist/routes/header.js +34 -0
  130. package/dist/routes/index.d.ts +2 -2
  131. package/dist/routes/index.js +2 -2
  132. package/dist/routes/mapping.d.ts +1 -1
  133. package/dist/routes/mapping.js +4 -4
  134. package/dist/routes/match.d.ts +1 -1
  135. package/dist/routes/placement.d.ts +2 -2
  136. package/dist/routes/plan.d.ts +1 -1
  137. package/dist/routes/request.d.ts +3 -1
  138. package/dist/routes/reservation.d.ts +4 -2
  139. package/dist/routes/reservation.js +14 -8
  140. package/dist/routes/routing.d.ts +18 -6
  141. package/dist/routes/routing.js +28 -49
  142. package/dist/routes/select.d.ts +1 -1
  143. package/dist/routes/table.d.ts +3 -2
  144. package/dist/routes/target.d.ts +5 -0
  145. package/dist/routes/target.js +16 -0
  146. package/dist/routes/template.d.ts +0 -1
  147. package/dist/routes/template.js +0 -3
  148. package/dist/runtime/artifact.d.ts +5 -4
  149. package/dist/runtime/artifact.js +7 -4
  150. package/dist/runtime/index.d.ts +1 -1
  151. package/dist/runtime/index.js +1 -1
  152. package/dist/schema/installation/codec.d.ts +9 -0
  153. package/dist/schema/installation/codec.js +82 -0
  154. package/dist/schema/installation/index.d.ts +2 -0
  155. package/dist/schema/installation/index.js +1 -0
  156. package/dist/schema/installation/introspection/codec.d.ts +5 -2
  157. package/dist/schema/installation/introspection/codec.js +319 -193
  158. package/dist/schema/installation/introspection/index.d.ts +2 -2
  159. package/dist/schema/installation/introspection/index.js +1 -1
  160. package/dist/schema/installation/introspection/result.d.ts +84 -25
  161. package/dist/schema/installation/result.d.ts +15 -0
  162. package/dist/schema/installation/result.js +1 -0
  163. package/package.json +21 -75
  164. package/dist/codecs/msgpack.d.ts +0 -4
  165. package/dist/codecs/msgpack.js +0 -50
  166. package/dist/publication/bindings/invocation.js +0 -13
  167. package/dist/publication/bindings/view.d.ts +0 -7
  168. package/dist/publication/bindings/view.js +0 -28
  169. package/dist/publication/bundle-admission.d.ts +0 -4
  170. package/dist/publication/bundle-evidence.d.ts +0 -3
  171. package/dist/publication/bundle-evidence.js +0 -13
  172. package/dist/publication/content.d.ts +0 -10
  173. package/dist/publication/delivery/delivery.d.ts +0 -9
  174. package/dist/publication/delivery/limits.js +0 -4
  175. package/dist/publication/delivery-endpoint.js +0 -22
  176. package/dist/publication/error.d.ts +0 -7
  177. package/dist/publication/error.js +0 -11
  178. package/dist/publication/etag.d.ts +0 -6
  179. package/dist/publication/index.d.ts +0 -17
  180. package/dist/publication/index.js +0 -10
  181. package/dist/publication/manifest.d.ts +0 -6
  182. package/dist/publication/manifest.js +0 -30
  183. package/dist/publication/publication.d.ts +0 -36
  184. package/dist/publication/publication.js +0 -133
  185. package/dist/publication/reference.d.ts +0 -17
  186. package/dist/publication/reference.js +0 -68
  187. package/dist/publication/requirements.d.ts +0 -26
  188. package/dist/publication/requirements.js +0 -180
  189. package/dist/routes/release-unavailable.d.ts +0 -8
  190. package/dist/routes/release-unavailable.js +0 -32
  191. /package/dist/{publication → release}/bindings/callable.d.ts +0 -0
  192. /package/dist/{publication → release}/bindings/index.d.ts +0 -0
  193. /package/dist/{publication → release}/bindings/index.js +0 -0
  194. /package/dist/{publication → release}/bindings/invocation.d.ts +0 -0
  195. /package/dist/{publication → release}/bundle-descriptor.d.ts +0 -0
  196. /package/dist/{publication → release}/declaration.d.ts +0 -0
  197. /package/dist/{publication → release}/declaration.js +0 -0
  198. /package/dist/{publication → release}/delivery/attestation.js +0 -0
  199. /package/dist/{publication → release}/delivery-declaration.d.ts +0 -0
  200. /package/dist/{publication → release}/delivery-endpoint.d.ts +0 -0
  201. /package/dist/{publication → release}/route.d.ts +0 -0
  202. /package/dist/{publication → release}/schema.d.ts +0 -0
  203. /package/dist/{publication/content.js → release/shape.js} +0 -0
@@ -1,7 +1,7 @@
1
1
  import type { IssuerId } from '@astrale-os/kernel-core/auth/issuer';
2
2
  import type { Key, Revision } from '@astrale-os/kernel-dsl/v1';
3
3
  import type { Digest, Ref } from '../artifact/index.js';
4
- import type { PublicationRequirements } from '../publication/index.js';
4
+ import type { Requirements } from '../release/requirements.js';
5
5
  export interface ExecutableDependency {
6
6
  readonly path: string;
7
7
  readonly ref: Ref;
@@ -31,13 +31,14 @@ export interface Module {
31
31
  /** Immutable portable closure selected by one local Schema installation source. */
32
32
  export interface RuntimeArtifact {
33
33
  readonly format: 'astrale.domain-runtime-artifact';
34
- readonly version: 2;
34
+ readonly version: 3;
35
35
  readonly issuer: IssuerId;
36
36
  readonly bundle: Ref;
37
- readonly requirements: PublicationRequirements;
37
+ readonly requirements: Requirements;
38
38
  readonly modules: readonly [Module, ...Module[]];
39
39
  }
40
- export declare const MEDIA_TYPE: 'application/vnd.astrale.domain-runtime+json;v=2';
40
+ export declare const MEDIA_TYPE: 'application/vnd.astrale.domain-runtime+json;v=3';
41
+ export declare function mediaType(_input: Pick<RuntimeArtifact, 'version'>): typeof MEDIA_TYPE;
41
42
  export declare function accept(input: unknown): RuntimeArtifact;
42
43
  export declare function encode(input: RuntimeArtifact): Uint8Array;
43
44
  export declare function runtimeDigest(input: RuntimeArtifact): Digest;
@@ -3,12 +3,15 @@ import { patterns } from '@astrale-os/kernel-dsl/v1/addressing';
3
3
  import * as portable from '@astrale-os/kernel-dsl/value';
4
4
  import { sha256 } from '@noble/hashes/sha2.js';
5
5
  import * as artifact from '../artifact/index.js';
6
- import { admitRequirements } from '../publication/index.js';
7
- export const MEDIA_TYPE = 'application/vnd.astrale.domain-runtime+json;v=2';
6
+ import { admitRequirements } from '../release/requirements.js';
7
+ export const MEDIA_TYPE = 'application/vnd.astrale.domain-runtime+json;v=3';
8
+ export function mediaType(_input) {
9
+ return MEDIA_TYPE;
10
+ }
8
11
  export function accept(input) {
9
12
  const root = record(input, 'Domain Runtime artifact');
10
13
  exact(root, ['bundle', 'format', 'issuer', 'modules', 'requirements', 'version']);
11
- if (root.format !== 'astrale.domain-runtime-artifact' || root.version !== 2) {
14
+ if (root.format !== 'astrale.domain-runtime-artifact' || root.version !== 3) {
12
15
  invalid('Domain Runtime artifact format or version is unsupported.');
13
16
  }
14
17
  if (typeof root.issuer !== 'string')
@@ -26,7 +29,7 @@ export function accept(input) {
26
29
  }
27
30
  return Object.freeze({
28
31
  format: 'astrale.domain-runtime-artifact',
29
- version: 2,
32
+ version: root.version,
30
33
  issuer: admittedIssuer,
31
34
  bundle,
32
35
  requirements,
@@ -1 +1 @@
1
- export { MEDIA_TYPE, accept, acceptExecutable, encode, executableClosure, executableDigest, runtimeDigest, type Digest, type Executable, type ExecutableDependency, type Export, type Module, type RuntimeArtifact, type Ref, } from './artifact.js';
1
+ export { MEDIA_TYPE, mediaType, accept, acceptExecutable, encode, executableClosure, executableDigest, runtimeDigest, type Digest, type Executable, type ExecutableDependency, type Export, type Module, type RuntimeArtifact, type Ref, } from './artifact.js';
@@ -1 +1 @@
1
- export { MEDIA_TYPE, accept, acceptExecutable, encode, executableClosure, executableDigest, runtimeDigest, } from './artifact.js';
1
+ export { MEDIA_TYPE, mediaType, accept, acceptExecutable, encode, executableClosure, executableDigest, runtimeDigest, } from './artifact.js';
@@ -0,0 +1,9 @@
1
+ import type { InstalledGeneration, InstallResult } from './result.js';
2
+ /**
3
+ * Admit one install result, the value a completed install execution ends with: strict, detached
4
+ * and frozen. Throws a TypeError when it is not exactly a changed receipt or the unchanged
5
+ * generations.
6
+ */
7
+ export declare function acceptResult(input: unknown): InstallResult;
8
+ /** One exact installed generation: its origin, Schema revision and Installation Target digest. */
9
+ export declare function acceptGeneration(input: unknown): InstalledGeneration;
@@ -0,0 +1,82 @@
1
+ import { installReceipt } from '@astrale-os/kernel-core/schema/kernel/syscalls/contracts';
2
+ import { patterns } from '@astrale-os/kernel-dsl/v1/addressing';
3
+ /**
4
+ * Admit one install result, the value a completed install execution ends with: strict, detached
5
+ * and frozen. Throws a TypeError when it is not exactly a changed receipt or the unchanged
6
+ * generations.
7
+ */
8
+ export function acceptResult(input) {
9
+ const value = record(input);
10
+ if (value.changed === true) {
11
+ exact(value, ['changed', 'receipt']);
12
+ const parsed = installReceipt.safeParse(value.receipt);
13
+ if (!parsed.success)
14
+ throw new TypeError('Schema installation receipt is invalid.');
15
+ const receipt = deepFreeze(parsed.data);
16
+ if (receipt.transitions.some((transition) => transition.intent.operation !== receipt.operation)) {
17
+ throw new TypeError('Schema installation Transition belongs to another operation.');
18
+ }
19
+ uniqueOrigins(receipt.transitions.map((transition) => transition.intent.origin), 'Schema installation Transitions');
20
+ return Object.freeze({
21
+ changed: true,
22
+ receipt,
23
+ });
24
+ }
25
+ if (value.changed === false) {
26
+ exact(value, ['changed', 'domains']);
27
+ if (!Array.isArray(value.domains) || value.domains.length === 0) {
28
+ throw new TypeError('Schema installation unchanged Domains are empty.');
29
+ }
30
+ const domains = value.domains.map(acceptGeneration);
31
+ uniqueOrigins(domains.map((domain) => domain.origin), 'Schema installation unchanged Domains');
32
+ return Object.freeze({
33
+ changed: false,
34
+ domains: Object.freeze(domains),
35
+ });
36
+ }
37
+ throw new TypeError('Schema installation result kind is invalid.');
38
+ }
39
+ /** One exact installed generation: its origin, Schema revision and Installation Target digest. */
40
+ export function acceptGeneration(input) {
41
+ const value = record(input);
42
+ exact(value, ['generation', 'origin', 'revision']);
43
+ if (typeof value.origin !== 'string' ||
44
+ !patterns.origin.test(value.origin) ||
45
+ typeof value.revision !== 'string' ||
46
+ !patterns.revision.test(value.revision) ||
47
+ typeof value.generation !== 'string' ||
48
+ !/^sha256:[0-9a-f]{64}$/u.test(value.generation)) {
49
+ throw new TypeError('Schema installation unchanged Domain generation is invalid.');
50
+ }
51
+ return Object.freeze({
52
+ origin: value.origin,
53
+ revision: value.revision,
54
+ generation: value.generation,
55
+ });
56
+ }
57
+ function deepFreeze(input) {
58
+ if (input !== null && typeof input === 'object' && !Object.isFrozen(input)) {
59
+ for (const value of Object.values(input))
60
+ deepFreeze(value);
61
+ Object.freeze(input);
62
+ }
63
+ return input;
64
+ }
65
+ function uniqueOrigins(origins, label) {
66
+ if (new Set(origins).size !== origins.length) {
67
+ throw new TypeError(`${label} contain duplicate origins.`);
68
+ }
69
+ }
70
+ function record(input) {
71
+ if (input === null || typeof input !== 'object' || Array.isArray(input)) {
72
+ throw new TypeError('Schema installation result is invalid.');
73
+ }
74
+ return input;
75
+ }
76
+ function exact(input, expected) {
77
+ const keys = Object.keys(input).sort();
78
+ const wanted = [...expected].sort();
79
+ if (keys.length !== wanted.length || keys.some((key, index) => key !== wanted[index])) {
80
+ throw new TypeError('Schema installation result fields are invalid.');
81
+ }
82
+ }
@@ -1 +1,3 @@
1
+ export { acceptGeneration, acceptResult } from './codec.js';
1
2
  export * as introspection from './introspection/index.js';
3
+ export type { InstalledGeneration, InstallResult } from './result.js';
@@ -1 +1,2 @@
1
+ export { acceptGeneration, acceptResult } from './codec.js';
1
2
  export * as introspection from './introspection/index.js';
@@ -1,5 +1,8 @@
1
1
  import type { introspection } from '@astrale-os/kernel-core/schema';
2
- import type { Limits, ResultFor } from './result.js';
3
- export declare const MEDIA_TYPE: 'application/vnd.astrale.schema-introspection.v1+msgpack';
2
+ import type { DomainDependencies, DomainInfo, Limits, ResultFor } from './result.js';
3
+ export declare const MEDIA_TYPE: 'application/vnd.astrale.schema-introspection.v4+json';
4
4
  export declare function encode<Input extends introspection.Introspection>(input: Input, result: ResultFor<Input>): Promise<Uint8Array>;
5
5
  export declare function decode<Input extends introspection.Introspection>(input: Input, bytes: Uint8Array, limits: Limits): Promise<ResultFor<Input>>;
6
+ /** Admit dependency bindings: origin-ordered, one per origin, each label agreeing with its revisions. */
7
+ export declare function acceptDomainDependencies(input: unknown): DomainDependencies;
8
+ export declare function acceptDomainInfo(input: unknown): DomainInfo;