@githolon/runtime 0.110.1 → 0.111.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/RUNTIME-SOURCES.sha256 +9 -8
- package/dist/nomos-native-runtime.js +165 -71
- package/dist/nomos-runner.js +159 -73
- package/dist/remote-reception.cjs +1 -1
- package/dist/remote-reception.js +1 -1
- package/dist/typescript-application-desk.js +1 -1
- package/package.json +1 -1
- package/runner/node-entry.mjs +166 -71
- package/src/protocol/nomos/runtime/v2/observability_desk_pb.d.ts +30 -0
- package/src/protocol/nomos/runtime/v2/observability_desk_pb.js +8 -1
|
@@ -34,12 +34,14 @@
|
|
|
34
34
|
1963a804a9cfe7d44a76b2c476817639b939d7e93828da865cab40fe9ba536fa adapter/custody-transport.ts
|
|
35
35
|
1a5d9fd32360e2cec4adbee9e56221fb26def66bb9d122e0b5745cebc963d92e node_modules/xml-naming/src/index.js
|
|
36
36
|
1b27a1f4d58d6314cd4887d0f47493d1a98fc474e3364388f321c3aeb94a8ac3 adapter/workspace_effect_outcome.ts
|
|
37
|
+
1b8eea8acf14374c28330cb21eea0e14f151fffb7c678f8e4a7f34722dc2eb22 peer-office/src/runtime/workspace_sync.ts
|
|
37
38
|
1c0bba78daf8c28ac51f35d60b2b2fbca9c57bc7bcdb05a05a1f15a2ca657164 peer-office/src/reception/application_readiness_transport.ts
|
|
38
39
|
1c364712aa61711ce0e654ed81e26fe821e8f7b6dac9c31fe6d49fc184dbacd2 node_modules/@bufbuild/protobuf/dist/esm/wire/size-delimited.js
|
|
39
40
|
1d1f03bc86ea3788b57b43c7720de2c41a7b133d852262a7615b3b152777cdef node_modules/@bufbuild/protobuf/dist/esm/reflect/nested-types.js
|
|
40
41
|
1d5259e6815efcdc11fa9e132422158f7a8359bf038d71ba2162c5cf3ebbb519 adapter/kernel_call_desk.ts
|
|
41
42
|
1e165c6f5d0adf93969445b47030d8d79e3b7a7ab2d50ee00f9edfa91a15c866 node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect-check.js
|
|
42
43
|
1e1a40b354386dd1e3190a6cf408a57d6d9ba4eda70dc02278b58110330ec11a adapter/proto/nomos/runtime/v2/runtime_pb.js
|
|
44
|
+
1f351df3317c6c19626860bbbf7c8010e3de75a54361da413116e397de95fddd peer-office/src/peer_office.ts
|
|
43
45
|
1f6876ca69679c5203f3a26796540847401798ace69cd094f3e2e50b5d7f1543 peer-office/src/runtime/placement_fetch.ts
|
|
44
46
|
1feb293fbfd20018e4a3790168737afa3705e7bd22dbcf2a6fd4b0cdb7bfac0c node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/descriptor_pb.js
|
|
45
47
|
202a9f1d1e496f4fa102ea90c85773d723104b7bdedb14db059b59d4ab41c017 adapter/proto/nomos/runtime/v2/application_readiness_desk_pb.js
|
|
@@ -74,18 +76,16 @@
|
|
|
74
76
|
3fa38ca64538032d871cd44da41bf6a6ad2eb133b6b8ebc2d8b4d33615b00dcf peer-office/src/reception/application_session_pipe.ts
|
|
75
77
|
3fade4f9262d10e39f346b57a7f08d03641e0ebd75556d087f6319f6c6003a24 peer-office/src/runtime/sha256.ts
|
|
76
78
|
3ffd9b9e4c466f6e8aa767897e5e7a792d5ac12b28a1faa0a91c8144cd80a61e peer-office/src/principal.ts
|
|
79
|
+
401f6c470c647496e6dcea19b15897b6a3f8ae8c1ae8074ad92f6cdc7f043ddc peer-office/package/package.json
|
|
77
80
|
4035067fe7f24445f52c48ac3d0229e5cada9512909ce662f62617f49ec42f3c node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect.js
|
|
78
81
|
404ccad83d8180f73cb43a724e1492e1ec1cfe614f365bb0ef9262fa2ad1d538 adapter/born_custody_publication.ts
|
|
79
82
|
40bdf3ab37f544b9f8ea7e474114f489a77ed3247e0be597b9e83e01688e8c80 node_modules/fast-xml-builder/src/ignoreAttributes.js
|
|
80
83
|
40bdf3ab37f544b9f8ea7e474114f489a77ed3247e0be597b9e83e01688e8c80 node_modules/fast-xml-parser/src/ignoreAttributes.js
|
|
81
84
|
42242740dd3c09c2530972c6bc477e6aa2be2f91f6cdf112585eb1f1929721a7 peer-office/src/runtime/subscription_manager.ts
|
|
82
85
|
437d1f7906925689d0329ee2f729786117903a5f9191a5a47faec67081ab6f6a peer-office/src/runtime/interaction_desk.ts
|
|
83
|
-
4402a942e628634ec9cb86d36e8d08c6a63216152f5b13e207a853173a8986c7 peer-office/src/runtime/credential_recovery_desk.ts
|
|
84
86
|
44d54aa1500d8b179b56c47003530ade9220c0daec31caeeeb1a59760eca6d88 node_modules/fast-xml-builder/src/fxb.js
|
|
85
|
-
45e0c35b4e8b0c1f606ca98a827d5ba041716ef346c5ba77a5c3303a5399b7ff adapter/proto/nomos/runtime/v2/observability_desk_pb.js
|
|
86
87
|
463a7041ce45ddd801fc0e0981bb11658b76bb44caad19d2971d73d7700d739b node_modules/@bufbuild/protobuf/dist/esm/wire/text-encoding.js
|
|
87
88
|
46ce19f00a64198852937f4a982c59a5d237aeab590255873e131f2f0468e98e peer-office/src/runtime/workspace_opening.ts
|
|
88
|
-
46df6f8f4bd0288fed37e8393805df8542556ae7ad663dcef492406000963a63 peer-office/package/package.json
|
|
89
89
|
475e62094c73367833cec6253c5834a887cae9bcfa43a691a9fe3b7495c19106 node_modules/@bufbuild/protobuf/dist/esm/unknown-enum.js
|
|
90
90
|
48b8a92448c21da157755c24058a1522d62389815254bd43858e27fc200cc793 peer-office/src/runtime/retention_observer.ts
|
|
91
91
|
497ee51559f8769c47defb7679dd516b5736c22c433bc857a19e8ccd9593c842 node_modules/is-unsafe/src/contexts/xml.js
|
|
@@ -100,8 +100,6 @@
|
|
|
100
100
|
511c208c41516891173332c5348ee1d846c886919ace3e9deedeafc1225d6e95 peer-office/src/runtime/kernel_call_scope.ts
|
|
101
101
|
513a0ca639e4d5cbb6ecce90f9668ab63f5e8ce4df2468b1ad439112b903ef0a platform-shells/node/local-development/kernel_work_recovery.ts
|
|
102
102
|
519afa7759c5cce91b66cd6b1444014ead77df1f691d0eee356b14206d32d59e peer-office/src/runtime/workspace_call_binding.ts
|
|
103
|
-
5295c7fdcb8d70cadc057dcd7b1efda4535dfae93f1a601b304245fdf8adb5ab peer-office/src/peer_office.ts
|
|
104
|
-
5521fba42530e15bdba2f5a67e7e3c03d0e753c6d70c8834071a6b8832fda007 peer-office/src/runtime/correspondence_desk.ts
|
|
105
103
|
56e2ac380c2d9be43647d88928727c17df70a3e734834a5be62c8bcb18616738 adapter/proto/nomos/runtime/v2/custody_desk_pb.js
|
|
106
104
|
57677b7b20768a3bd6eb50fdff229852be7f9978e5988924d2c935ba934366d4 adapter/proto/nomos/discovery/v1/workspace_placement_pb.js
|
|
107
105
|
587bee5d27b6dbc99d24f472ea93028659610c3496be7d667e72483483c3f3ba node_modules/fast-xml-parser/src/fxp.js
|
|
@@ -145,6 +143,7 @@
|
|
|
145
143
|
7ec79572a67e1764cd0e93fe2c49d696cd179836293f62e5f50c54e01d6af242 peer-office/src/runtime/provider_origins.ts
|
|
146
144
|
812a2077e073564d6470b8fda8ac0d20ecaaf75ddb1594d55d28acc2da8a1a71 node_modules/@nodable/entities/src/EntityEncoder.js
|
|
147
145
|
81539d21eb82b21f6bab3b84d0b7296cb240532e0314c303d06799a1f5fe4e81 adapter/proto/nomos/runtime/v2/residency_desk_pb.js
|
|
146
|
+
8265b7063f35842f61f48c693eb9c740f07949284fb589380b6795dd88dd5ff1 peer-office/src/runtime/replica_follow_controller.ts
|
|
148
147
|
829eadd8a1a441d25be0cb93b00e16a0d0c20fd294db95d8f2ed87e6954b7182 node_modules/base64-js/index.js
|
|
149
148
|
836d6535b507906f82129a7cae5b1cbd42efaef969f18b13675b39ba7cb5ebcb peer-office/src/runtime/birth_custody_desk.ts
|
|
150
149
|
83f6bd206b77bfab38d03069a14f1d0c9e5d998b65716642fab5cf8b4d4f75c5 node_modules/@bufbuild/protobuf/dist/esm/merge.js
|
|
@@ -161,6 +160,7 @@
|
|
|
161
160
|
8b9453609e831ac3dfe38ab70c329ece1355564a88afea0ad2217964a18931ce platform-shells/node/local-development/filesystem_git_custody.ts
|
|
162
161
|
8c3a01d5ef78535de41c19a8385211c57f31bbbfc4dc0497d452a0f16f382089 platform-shells/browser/peer.ts
|
|
163
162
|
8ce60aff8226986c6ec652887c97a9515a2f10dd046596d76797cbdd0bb46e1d peer-office/src/runtime/remote_runtime_paper.ts
|
|
163
|
+
8e033b086d23caeba4a8b2e69284b6448787884bb0978eddf67729569d268367 peer-office/src/runtime/credential_recovery_desk.ts
|
|
164
164
|
8e73c652d2c41232e1a3217524dcdbbe7f26834d59cfe80e4432ec59a801dc42 peer-office/src/runtime/authentication_readiness_desk.ts
|
|
165
165
|
9109542ce7615df736d0b89b9562a0f8e989099aff65de707217d6a170591812 peer-office/src/runtime/read_maintenance_desk.ts
|
|
166
166
|
92884553e5d2d46ea273441deb32dc07187dc8ded3524356fa68536d1f2fc435 node_modules/@bufbuild/protobuf/dist/esm/descriptors.js
|
|
@@ -170,6 +170,7 @@
|
|
|
170
170
|
94a3cef0f355a9a177661748d24faae32206a5cc382c8601a34dcf005340107b node_modules/fast-xml-parser/src/xmlparser/OrderedObjParser.js
|
|
171
171
|
95ad7c933403a0c8f7fd3e2df6c4df3008c29911d3d5db063a90460a14144da2 peer-office/src/runtime/records_desk.ts
|
|
172
172
|
95dbcb2580ed30cb11222c773163c6a906a7e363c5ec4263bd39c1f3a7a16cc2 node_modules/@bufbuild/protobuf/dist/esm/from-json.js
|
|
173
|
+
9633e84964edf9d8e2f719766c002cabe341e5e805e729ae7ea8fa9ec4c95410 peer-office/src/runtime/correspondence_desk.ts
|
|
173
174
|
96cb2eb563ccb18dc23fd9f8fb0f65193a1b90f39758a561eed747368ead00b3 node_modules/@bufbuild/protobuf/dist/esm/wkt/index.js
|
|
174
175
|
96ec5d127a4e8cd77bdc678422f0d57c8ff9e37bcec999983da71a7b72ce9a0e node_modules/@nodable/entities/src/entities.js
|
|
175
176
|
98f5abf9a7fb522aab513ef3831dd9c5837cebcb38a960cb546ffd084926d746 node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/empty_pb.js
|
|
@@ -185,11 +186,12 @@
|
|
|
185
186
|
a0eca2694871be026546039e99a71291822d01ba81943d44e69a14b2d766fd1a peer-office/src/runtime/custody_desk.ts
|
|
186
187
|
a0fcc6110f1154fd197a8ce056e2008dbc7d1750f8dd3ba77c3910af928ed3a1 node_modules/uri-js/dist/es5/uri.all.js
|
|
187
188
|
a33120feed1faf765328722cee117f63e2147cb87052120fdacc9bd1086e67ab peer-office/src/runtime/receiving_group_framework_wire.generated.ts
|
|
189
|
+
a50ecbaddcb56ff4895d6b0a2eed91f4e9d239c5eea08d8b5d1610a3ac2592f1 adapter/proto/nomos/runtime/v2/observability_desk_pb.js
|
|
188
190
|
a51ad595569ec83af14644004083aad7f5086703dd46d609e8b006e36bac0f55 peer-office/src/runtime/read_response_desk.ts
|
|
189
191
|
a5540af900952b2ea7fde1fa967d624d427bcec5f3d1d89f3e78453a8624c650 peer-office/src/runtime/identity_witness_cache.ts
|
|
190
|
-
a56269a4903af574cbc4bbd060d45b236bf95c71934df6dba16a50e7b776e6ed peer-office/src/runtime/receiving_group_desk.ts
|
|
191
192
|
a56cf2bf8174e0adf94970d70e003afcfc3923a53d0cf973f92d374cfe684544 node_modules/@nodable/entities/src/EntityDecoder.js
|
|
192
193
|
a6250aa83ce7f238614fb7421f31e541c63c415a295e3764687693464918f3c4 node_modules/path-expression-matcher/src/ExpressionSet.js
|
|
194
|
+
a79a133a4f4ae9559b127aca26b20b0b40af3b6a2cc17d75bedbd413d78276af peer-office/src/runtime/receiving_group_desk.ts
|
|
193
195
|
a91848ee180529e2a60c05dfb9584cad19cd4e1c6f391fdb76a938bcae4c0328 node_modules/@bjorn3/browser_wasi_shim/dist/debug.js
|
|
194
196
|
a9a2aefe743f0243ae1adb3acdd3db6cdb671b744b5f83235cc4e0be905f1a5b peer-office/package/src/typescript_application_desk.public.d.ts
|
|
195
197
|
aa531ecbd052fa45ffdd32cc7fb976a82fb657913c58a2628b2d57a4c66afdc4 adapter/proto/nomos/runtime/v2/correspondence_desk_pb.js
|
|
@@ -197,7 +199,6 @@ aa6349944f16d71986273ecfc8e552bfece3d61d5641e526c0ceabf3f154fdaf peer-office/sr
|
|
|
197
199
|
ab43714f566a6ccd988cc3a30810d857552dbd14d0f060934907fb4bba1000f0 peer-office/package/src/admission_decision.ts
|
|
198
200
|
ab80eeeafd4d89a5daaf5d2e00fb471cc6b53fa90776750ca3ad82df482d7c3f peer-office/src/runtime/peer_lifecycle.ts
|
|
199
201
|
ad3de46df125304b2a61c2fa5537b0e519635997d99686a76119b38cf260963f adapter/proto/nomos/runtime/v2/identity_desk_pb.js
|
|
200
|
-
aeb94bc5762080dca498fcbdfa5c347525dceb1f3748db82106b479c5d23d931 peer-office/src/runtime/workspace_sync.ts
|
|
201
202
|
afde3ddb29cc6ee2c48b30043feca4ea14b5690035aa134b08b4df83558faa7c platform-shells/shared/system_observation_clock.ts
|
|
202
203
|
b09ee99807e1edeb746b4a4a1e41519edaff1fed9f71a170bc15e8835af93e25 node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/timestamp_pb.js
|
|
203
204
|
b178d69931fdb285d0cd3bae0343a0fd0c80eed27e90d07992153927f9bcc8c3 peer-office/src/runtime/frame_runner.ts
|
|
@@ -209,6 +210,7 @@ b6d7539356e92bfa257edd790e8d5d697167205b7154106e8758455cc3483e82 runtime/osgi_r
|
|
|
209
210
|
b724e831adc854badc34efa38d71f4cd755a59342a420062c31fb06ddf7f0a2b peer-office/src/runtime/workspace_sync_dependencies.ts
|
|
210
211
|
b82bb05bb957bb59990dda51bb60ed8b9f656cc090312295ea0958e4cd52bdb7 peer-office/src/runtime/device_recovery_journal.ts
|
|
211
212
|
ba7223ebf0eea2f078ba83f0128830f7cd07224c57d7e61251541c1c17e83009 peer-office/src/runtime/workspace_effect_delivery.ts
|
|
213
|
+
bb8e81020a9cbf3f8562c196fa5609ef5dec911e0981920c7d05de67769c79d4 peer-office/src/runtime/credential_failure.ts
|
|
212
214
|
bcc5325758b3b940384c7bf2a7132874421989c2561a59dc49c4ef0b88c352dc node_modules/fast-xml-parser/src/xmlbuilder/json2xml.js
|
|
213
215
|
bd1c0b20cc774f08636c4b8469cc9617721e77b4cbb3dc64b30e00410a3b041d adapter/proto/nomos/runtime/v2/model_adoption_desk_pb.js
|
|
214
216
|
bd675346437237807b4973fd47897e57fa1d556b0d33d987d5c12764c2e7d8e4 node_modules/fast-xml-parser/src/xmlparser/xmlNode.js
|
|
@@ -257,7 +259,6 @@ dd9f3f24fb154cfbfbde94e8f2647647c80c8ca050b98e981a407e760a4b9c1e node_modules/@
|
|
|
257
259
|
deaa25227d669aa3fbe99174275588dcc175de648ae6623fddf11d6ae69d7f67 platform-shells/node/local-development/peer_process.ts
|
|
258
260
|
e20a132033f105a29db1cfdb3d85bbadbb7206b9a7e3336bcb030a63d66b4ab2 node_modules/is-unsafe/src/contexts/nosql.js
|
|
259
261
|
e2133d7e0f0ce5491a3e9bd560e9e47db2243a6a9f762be89c82e027d99d278e peer-office/src/runtime/credential_sessions.ts
|
|
260
|
-
e24433e22af52db25858865dfff3c6ed1e6932f3257ae242a795acbedda70303 peer-office/src/runtime/replica_follow_controller.ts
|
|
261
262
|
e2d341fc536c47a45d2e45fc1df232094b4afe67281b92eae91ed9b7698c32ff platform-shells/browser/entry.ts
|
|
262
263
|
e34016b82b6f6e4c4a1cc2dd44ccd14a348e8156a1f6c5aeeb2c7fc36a15b8f9 adapter/proto/nomos/kernel/v1/kernel_pb.js
|
|
263
264
|
e34016b82b6f6e4c4a1cc2dd44ccd14a348e8156a1f6c5aeeb2c7fc36a15b8f9 peer-office/package/src/protocol/nomos/kernel/v1/kernel_pb.js
|
|
@@ -5957,7 +5957,7 @@ var NomosRuntimeComponent = (() => {
|
|
|
5957
5957
|
var CustodyBreakPolicy = /* @__PURE__ */ tsEnum(CustodyBreakPolicySchema);
|
|
5958
5958
|
|
|
5959
5959
|
// ../../adapter/proto/nomos/runtime/v2/observability_desk_pb.js
|
|
5960
|
-
var file_nomos_runtime_v2_observability_desk = /* @__PURE__ */ fileDesc("Cilub21vcy9ydW50aW1lL3YyL29ic2VydmFiaWxpdHlfZGVzay5wcm90bxIQbm9tb3MucnVudGltZS52MiJCCgxUcmFjZUNvbnRleHQSEAoIdHJhY2VfaWQYASABKAwSDwoHc3Bhbl9pZBgCIAEoDBIPCgdzYW1wbGVkGAMgASgIIp0CCg5SdW50aW1lRmFpbHVyZRIMCgRjb2RlGAEgASgJEg8KB21lc3NhZ2UYAiABKAkSEQoJY29tcG9uZW50GAMgASgJEhYKCXdvcmtzcGFjZRgEIAEoCUgAiAEBEhMKBmRvbWFpbhgFIAEoCUgBiAEBEhYKCWRpcmVjdGl2ZRgGIAEoCUgCiAEBEjkKCmF0dHJpYnV0ZXMYByADKAsyJS5ub21vcy5ydW50aW1lLnYyLkRpYWdub3N0aWNBdHRyaWJ1dGUSMgoEa2luZBgIIAEoDjIkLm5vbW9zLnJ1bnRpbWUudjIuUnVudGltZUZhaWx1cmVLaW5kQgwKCl93b3Jrc3BhY2VCCQoHX2RvbWFpbkIMCgpfZGlyZWN0aXZlIr4BChJSdW50aW1lVW5hdmFpbGFibGUSOgoGcmVhc29uGAEgASgOMioubm9tb3MucnVudGltZS52Mi5SdW50aW1lVW5hdmFpbGFibGVSZWFzb24SEQoJd29ya3NwYWNlGAIgASgJEhEKCXJldHJ5YWJsZRgDIAEoCBIfChJyZXRyeV9hZnRlcl9taWxsaXMYBCABKA1IAIgBARIOCgZkZXRhaWwYBSABKAlCFQoTX3JldHJ5X2FmdGVyX21pbGxpcyJ+
|
|
5960
|
+
var file_nomos_runtime_v2_observability_desk = /* @__PURE__ */ fileDesc("Cilub21vcy9ydW50aW1lL3YyL29ic2VydmFiaWxpdHlfZGVzay5wcm90bxIQbm9tb3MucnVudGltZS52MiJCCgxUcmFjZUNvbnRleHQSEAoIdHJhY2VfaWQYASABKAwSDwoHc3Bhbl9pZBgCIAEoDBIPCgdzYW1wbGVkGAMgASgIIp0CCg5SdW50aW1lRmFpbHVyZRIMCgRjb2RlGAEgASgJEg8KB21lc3NhZ2UYAiABKAkSEQoJY29tcG9uZW50GAMgASgJEhYKCXdvcmtzcGFjZRgEIAEoCUgAiAEBEhMKBmRvbWFpbhgFIAEoCUgBiAEBEhYKCWRpcmVjdGl2ZRgGIAEoCUgCiAEBEjkKCmF0dHJpYnV0ZXMYByADKAsyJS5ub21vcy5ydW50aW1lLnYyLkRpYWdub3N0aWNBdHRyaWJ1dGUSMgoEa2luZBgIIAEoDjIkLm5vbW9zLnJ1bnRpbWUudjIuUnVudGltZUZhaWx1cmVLaW5kQgwKCl93b3Jrc3BhY2VCCQoHX2RvbWFpbkIMCgpfZGlyZWN0aXZlIr4BChJSdW50aW1lVW5hdmFpbGFibGUSOgoGcmVhc29uGAEgASgOMioubm9tb3MucnVudGltZS52Mi5SdW50aW1lVW5hdmFpbGFibGVSZWFzb24SEQoJd29ya3NwYWNlGAIgASgJEhEKCXJldHJ5YWJsZRgDIAEoCBIfChJyZXRyeV9hZnRlcl9taWxsaXMYBCABKA1IAIgBARIOCgZkZXRhaWwYBSABKAlCFQoTX3JldHJ5X2FmdGVyX21pbGxpcyJ+Cg5SdW50aW1lUmVmdXNhbBI2CgZyZWFzb24YASABKA4yJi5ub21vcy5ydW50aW1lLnYyLlJ1bnRpbWVSZWZ1c2FsUmVhc29uEhEKCXdvcmtzcGFjZRgCIAEoCRIRCglyZXRyeWFibGUYAyABKAgSDgoGZGV0YWlsGAQgASgJIqUBChNEaWFnbm9zdGljQXR0cmlidXRlEgwKBG5hbWUYASABKAkSFgoMc3RyaW5nX3ZhbHVlGAIgASgJSAASFwoNaW50ZWdlcl92YWx1ZRgDIAEoEkgAEhYKDGRvdWJsZV92YWx1ZRgEIAEoAUgAEhcKDWJvb2xlYW5fdmFsdWUYBSABKAhIABIVCgtieXRlc192YWx1ZRgGIAEoDEgAQgcKBXZhbHVlIqQLCgxSdW50aW1lRXZlbnQSEAoIc2VxdWVuY2UYASABKAQSFAoHc2Vzc2lvbhgCIAEoCUgBiAEBEi8KBXJlYWR5GAogASgLMh4ubm9tb3MucnVudGltZS52Mi5SdW50aW1lUmVhZHlIABI3Cg13YXRjaF9jaGFuZ2VkGAsgASgLMh4ubm9tb3MucnVudGltZS52Mi5XYXRjaENoYW5nZWRIABI5Cg5zeW5jX2NvbXBsZXRlZBgMIAEoCzIfLm5vbW9zLnJ1bnRpbWUudjIuU3luY0NvbXBsZXRlZEgAEjUKDGxpbmtfY2hhbmdlZBgNIAEoCzIdLm5vbW9zLnJ1bnRpbWUudjIuTGlua0NoYW5nZWRIABI5Cg5zaWduYWxfY2hhbmdlZBgOIAEoCzIfLm5vbW9zLnJ1bnRpbWUudjIuU2lnbmFsQ2hhbmdlZEgAEjsKD2N1c3RvZHlfY2hhbmdlZBgPIAEoCzIgLm5vbW9zLnJ1bnRpbWUudjIuQ3VzdG9keUNoYW5nZWRIABJCChNsb2NhbF93b3JrX3JlamVjdGVkGBAgASgLMiMubm9tb3MucnVudGltZS52Mi5Mb2NhbFdvcmtSZWplY3RlZEgAEjMKC2xhd19jaGFuZ2VkGBEgASgLMhwubm9tb3MucnVudGltZS52Mi5MYXdDaGFuZ2VkSAASQwoPa2VybmVsX3Byb2dyZXNzGBIgASgLMigubm9tb3MucnVudGltZS52Mi5LZXJuZWxQcm9ncmVzc09ic2VydmVkSAASLQoEc3BhbhgTIAEoCzIdLm5vbW9zLnJ1bnRpbWUudjIuUnVudGltZVNwYW5IABI/ChF0cmFuc2Zlcl9wcm9ncmVzcxgUIAEoCzIiLm5vbW9zLnJ1bnRpbWUudjIuVHJhbnNmZXJQcm9ncmVzc0gAEkkKFG1haW50ZW5hbmNlX3Byb2dyZXNzGBUgASgLMikubm9tb3MucnVudGltZS52Mi5SZWFkTWFpbnRlbmFuY2VQcm9ncmVzc0gAEjsKDXNvY2tldF9lZmZlY3QYFiABKAsyIi5ub21vcy5ydW50aW1lLnYyLlBlZXJTb2NrZXRFZmZlY3RIABJUChxjcmVkZW50aWFsX3JlZnJlc2hfcmVxdWVzdGVkGBcgASgLMiwubm9tb3MucnVudGltZS52Mi5DcmVkZW50aWFsUmVmcmVzaFJlcXVlc3RlZEgAElIKG3JlY2VpdmluZ19ncm91cF9jb252ZXJnZW5jZRgYIAEoCzIrLm5vbW9zLnJ1bnRpbWUudjIuUmVjZWl2aW5nR3JvdXBDb252ZXJnZW5jZUgAEkoKF21vZGVsX2Fkb3B0aW9uX3Byb2dyZXNzGBkgASgLMicubm9tb3MucnVudGltZS52Mi5Nb2RlbEFkb3B0aW9uUHJvZ3Jlc3NIABI7Cg9mb2xsb3dzX3N1bW1hcnkYGiABKAsyIC5ub21vcy5ydW50aW1lLnYyLkZvbGxvd3NTdW1tYXJ5SAASRAoUbG9jYWxfY29weV9wcmVzZXJ2ZWQYGyABKAsyJC5ub21vcy5ydW50aW1lLnYyLlByZXNlcnZlZExvY2FsQ29weUgAEk4KGWZvcmVpZ25fcGxhY2VtZW50X2lnbm9yZWQYHCABKAsyKS5ub21vcy5ydW50aW1lLnYyLkZvcmVpZ25QbGFjZW1lbnRJZ25vcmVkSAASQwoTYmluZGluZ19xdWFyYW50aW5lZBgdIAEoCzIkLm5vbW9zLnJ1bnRpbWUudjIuUXVhcmFudGluZWRCaW5kaW5nSAASPwoRd3JpdGVfcHJlcGFyYXRpb24YHiABKAsyIi5ub21vcy5ydW50aW1lLnYyLldyaXRlUHJlcGFyYXRpb25IAEIHCgVldmVudEIKCghfc2Vzc2lvbiK8AQoORm9sbG93c1N1bW1hcnkSEAoIZm9sbG93ZWQYASABKA0SDwoHc2V0dGxlZBgCIAEoDRIMCgRsaXZlGAMgASgNEjcKCndvcmtzcGFjZXMYBCADKAsyIy5ub21vcy5ydW50aW1lLnYyLkZvbGxvd09ic2VydmF0aW9uEiQKF29ic2VydmVkX2F0X3VuaXhfbWlsbGlzGAUgASgESACIAQFCGgoYX29ic2VydmVkX2F0X3VuaXhfbWlsbGlzItECChFGb2xsb3dPYnNlcnZhdGlvbhIRCgl3b3Jrc3BhY2UYASABKAkSNwoFcGhhc2UYAiABKA4yKC5ub21vcy5ydW50aW1lLnYyLkZvbGxvd09ic2VydmF0aW9uUGhhc2USDAoEbGl2ZRgDIAEoCBITCgZkZXRhaWwYBCABKAlIAIgBARIhChRyZXRyeV9hdF91bml4X21pbGxpcxgFIAEoBEgBiAEBEh8KEmR1ZV9hdF91bml4X21pbGxpcxgGIAEoBEgCiAEBEhQKB2F0dGVtcHQYByABKA1IA4gBARIaCg1hY3RpdmVfZWZmZWN0GAggASgJSASIAQFCCQoHX2RldGFpbEIXChVfcmV0cnlfYXRfdW5peF9taWxsaXNCFQoTX2R1ZV9hdF91bml4X21pbGxpc0IKCghfYXR0ZW1wdEIQCg5fYWN0aXZlX2VmZmVjdCJWChpDcmVkZW50aWFsUmVmcmVzaFJlcXVlc3RlZBI4CgdwZW5kaW5nGAEgASgLMicubm9tb3MucnVudGltZS52Mi5Db3JyZXNwb25kZW5jZVBlbmRpbmciPgoMUnVudGltZVJlYWR5EhcKD3J1bnRpbWVfdmVyc2lvbhgBIAEoCRIVCg1rZXJuZWxfc2hhMjU2GAIgASgMIvwBCgxXYXRjaENoYW5nZWQSFwoPc3Vic2NyaXB0aW9uX2lkGAEgASgJEhMKC3Jlc3VsdF91c2RhGAIgASgMEjYKB2ZhaWx1cmUYAyABKAsyIC5ub21vcy5ydW50aW1lLnYyLlJ1bnRpbWVGYWlsdXJlSACIAQESNQoSYXBwbGljYXRpb25fcmVzdWx0GAQgASgLMhQuZ29vZ2xlLnByb3RvYnVmLkFueUgBiAEBEhoKDWludGVnZXJfdmFsdWUYBSABKANIAogBAUIKCghfZmFpbHVyZUIVChNfYXBwbGljYXRpb25fcmVzdWx0QhAKDl9pbnRlZ2VyX3ZhbHVlIpwBCg1TeW5jQ29tcGxldGVkEg4KBnJlYXNvbhgBIAEoCRI3CgZyZXN1bHQYAiABKAsyJy5ub21vcy5ydW50aW1lLnYyLlN5bmNXb3Jrc3BhY2VSZXNwb25zZRI2CgdmYWlsdXJlGAMgASgLMiAubm9tb3MucnVudGltZS52Mi5SdW50aW1lRmFpbHVyZUgAiAEBQgoKCF9mYWlsdXJlIjsKC0xpbmtDaGFuZ2VkEiwKBnN0YXR1cxgBIAEoDjIcLm5vbW9zLnJ1bnRpbWUudjIuTGlua1N0YXR1cyI4Cg1TaWduYWxDaGFuZ2VkEg4KBmRvbWFpbhgBIAEoCRIXCg9wcm9qZWN0aW9uX3VzZGEYAiABKAwiUAoKTGF3Q2hhbmdlZBIOCgZkb21haW4YASABKAkSFgoOcGFja2FnZV9zaGEyNTYYAiABKAkSGgoSY29tcGF0aWJpbGl0eV91c2RhGAMgASgMIt0BCgtSdW50aW1lU3BhbhIQCgh0cmFjZV9pZBgBIAEoDBIPCgdzcGFuX2lkGAIgASgMEhsKDnBhcmVudF9zcGFuX2lkGAMgASgMSACIAQESDAoEbmFtZRgEIAEoCRIaChJzdGFydGVkX3VuaXhfbmFub3MYBSABKAQSFgoOZHVyYXRpb25fbmFub3MYBiABKAQSOQoKYXR0cmlidXRlcxgHIAMoCzIlLm5vbW9zLnJ1bnRpbWUudjIuRGlhZ25vc3RpY0F0dHJpYnV0ZUIRCg9fcGFyZW50X3NwYW5faWQi6gEKFktlcm5lbFByb2dyZXNzT2JzZXJ2ZWQSOQoIc25hcHNob3QYASABKAsyJy5ub21vcy5rZXJuZWwudjEuS2VybmVsUHJvZ3Jlc3NTbmFwc2hvdBIkChxob3N0X29ic2VydmVkX2VsYXBzZWRfbWljcm9zGAIgASgEEioKImhvc3Rfb2JzZXJ2ZWRfcGhhc2VfZWxhcHNlZF9taWNyb3MYAyABKAQSHgoWcHJvY2Vzc19yZXNpZGVudF9ieXRlcxgEIAEoBBIjChtwcm9jZXNzX3BlYWtfcmVzaWRlbnRfYnl0ZXMYBSABKAQiggEKEFRyYW5zZmVyUHJvZ3Jlc3MSFgoOcmVjZWl2ZWRfYnl0ZXMYASABKAQSGAoLdG90YWxfYnl0ZXMYAiABKARIAIgBARIsCgRraW5kGAMgASgOMh4ubm9tb3MucnVudGltZS52Mi5UcmFuc2ZlcktpbmRCDgoMX3RvdGFsX2J5dGVzIjkKEFdyaXRlUHJlcGFyYXRpb24SEgoKcmVxdWVzdF9pZBgBIAEoCRIRCgl3b3Jrc3BhY2UYAiABKAkqygEKElJ1bnRpbWVGYWlsdXJlS2luZBIkCiBSVU5USU1FX0ZBSUxVUkVfS0lORF9VTlNQRUNJRklFRBAAEiEKHVJVTlRJTUVfRkFJTFVSRV9LSU5EX0lOVEVSTkFMEAESIQodUlVOVElNRV9GQUlMVVJFX0tJTkRfUFJPVE9DT0wQAhIiCh5SVU5USU1FX0ZBSUxVUkVfS0lORF9JTlRFR1JJVFkQAxIkCiBSVU5USU1FX0ZBSUxVUkVfS0lORF9VTlNVUFBPUlRFRBAEKqcDChhSdW50aW1lVW5hdmFpbGFibGVSZWFzb24SKgomUlVOVElNRV9VTkFWQUlMQUJMRV9SRUFTT05fVU5TUEVDSUZJRUQQABIyCi5SVU5USU1FX1VOQVZBSUxBQkxFX1JFQVNPTl9SRU1PVEVfT05MWV9PRkZMSU5FEAESMQotUlVOVElNRV9VTkFWQUlMQUJMRV9SRUFTT05fUkVNT1RFX1VOUkVBQ0hBQkxFEAISLQopUlVOVElNRV9VTkFWQUlMQUJMRV9SRUFTT05fUkVNT1RFX1RJTUVPVVQQAxI2CjJSVU5USU1FX1VOQVZBSUxBQkxFX1JFQVNPTl9MT0NBTF9SRVBMSUNBX05PVF9SRUFEWRAEEjUKMVJVTlRJTUVfVU5BVkFJTEFCTEVfUkVBU09OX0NSRURFTlRJQUxfVU5BVkFJTEFCTEUQBRIwCixSVU5USU1FX1VOQVZBSUxBQkxFX1JFQVNPTl9XT1JLU1BBQ0VfT1BFTklORxAGEigKJFJVTlRJTUVfVU5BVkFJTEFCTEVfUkVBU09OX1BFRVJfQlVTWRAHKvABChRSdW50aW1lUmVmdXNhbFJlYXNvbhImCiJSVU5USU1FX1JFRlVTQUxfUkVBU09OX1VOU1BFQ0lGSUVEEAASLQopUlVOVElNRV9SRUZVU0FMX1JFQVNPTl9JTlZBTElEX0NSRURFTlRJQUwQARIoCiRSVU5USU1FX1JFRlVTQUxfUkVBU09OX0FDQ0VTU19ERU5JRUQQAhIrCidSVU5USU1FX1JFRlVTQUxfUkVBU09OX1BMQUNFTUVOVF9QT0xJQ1kQAxIqCiZSVU5USU1FX1JFRlVTQUxfUkVBU09OX1NFU1NJT05fVU5CT1VORBAEKpUEChZGb2xsb3dPYnNlcnZhdGlvblBoYXNlEigKJEZPTExPV19PQlNFUlZBVElPTl9QSEFTRV9VTlNQRUNJRklFRBAAEiQKIEZPTExPV19PQlNFUlZBVElPTl9QSEFTRV9ERVNJUkVEEAESIAocRk9MTE9XX09CU0VSVkFUSU9OX1BIQVNFX0RVRRACEiQKIEZPTExPV19PQlNFUlZBVElPTl9QSEFTRV9SVU5OSU5HEAMSJAogRk9MTE9XX09CU0VSVkFUSU9OX1BIQVNFX1NFVFRMRUQQBBIwCixGT0xMT1dfT0JTRVJWQVRJT05fUEhBU0VfQVdBSVRJTkdfREVQRU5ERU5DWRAFEiQKIEZPTExPV19PQlNFUlZBVElPTl9QSEFTRV9PRkZMSU5FEAYSLworRk9MTE9XX09CU0VSVkFUSU9OX1BIQVNFX0lOVkFMSURfQ1JFREVOVElBTBAHEiQKIEZPTExPV19PQlNFUlZBVElPTl9QSEFTRV9CQUNLT0ZGEAgSLAooRk9MTE9XX09CU0VSVkFUSU9OX1BIQVNFX1JFQk9STl9SRU1PVEVMWRAJEiwKKEZPTExPV19PQlNFUlZBVElPTl9QSEFTRV9SRVBMQUNJTkdfTE9DQUwQChIyCi5GT0xMT1dfT0JTRVJWQVRJT05fUEhBU0VfTE9DQUxfQ09QWV9VTlJFQURBQkxFEAsqVwoKTGlua1N0YXR1cxIbChdMSU5LX1NUQVRVU19VTlNQRUNJRklFRBAAEhQKEExJTktfU1RBVFVTX09QRU4QARIWChJMSU5LX1NUQVRVU19DTE9TRUQQAip2CgxUcmFuc2ZlcktpbmQSHQoZVFJBTlNGRVJfS0lORF9VTlNQRUNJRklFRBAAEhcKE1RSQU5TRkVSX0tJTkRfREVMVEEQARIWChJUUkFOU0ZFUl9LSU5EX0ZVTEwQAhIWChJUUkFOU0ZFUl9LSU5EX1BVU0gQA2IGcHJvdG8z", [file_google_protobuf_any, file_nomos_kernel_v1_progress, file_nomos_runtime_v2_correspondence_desk, file_nomos_runtime_v2_custody_desk, file_nomos_runtime_v2_placement_desk, file_nomos_runtime_v2_maintenance_desk, file_nomos_runtime_v2_model_adoption_desk, file_nomos_runtime_v2_receiving_group_desk, file_nomos_runtime_v2_recovery_desk]);
|
|
5961
5961
|
var RuntimeFailureSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_observability_desk, 1);
|
|
5962
5962
|
var RuntimeUnavailableSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_observability_desk, 2);
|
|
5963
5963
|
var RuntimeRefusalSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_observability_desk, 3);
|
|
@@ -5971,6 +5971,7 @@ var NomosRuntimeComponent = (() => {
|
|
|
5971
5971
|
var SyncCompletedSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_observability_desk, 11);
|
|
5972
5972
|
var LinkChangedSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_observability_desk, 12);
|
|
5973
5973
|
var RuntimeSpanSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_observability_desk, 15);
|
|
5974
|
+
var WritePreparationSchema = /* @__PURE__ */ messageDesc(file_nomos_runtime_v2_observability_desk, 18);
|
|
5974
5975
|
var RuntimeFailureKindSchema = /* @__PURE__ */ enumDesc(file_nomos_runtime_v2_observability_desk, 0);
|
|
5975
5976
|
var RuntimeFailureKind = /* @__PURE__ */ tsEnum(RuntimeFailureKindSchema);
|
|
5976
5977
|
var RuntimeUnavailableReasonSchema = /* @__PURE__ */ enumDesc(file_nomos_runtime_v2_observability_desk, 1);
|
|
@@ -8777,6 +8778,17 @@ var NomosRuntimeComponent = (() => {
|
|
|
8777
8778
|
}
|
|
8778
8779
|
};
|
|
8779
8780
|
|
|
8781
|
+
// ../src/runtime/credential_failure.ts
|
|
8782
|
+
function recoverableCredential(failure) {
|
|
8783
|
+
return failure.code === "nomos.auth.token_expired" || failure.code === "nomos.auth.token_missing";
|
|
8784
|
+
}
|
|
8785
|
+
function syncNeedsCredentialRefresh(result, failure) {
|
|
8786
|
+
if (failure !== void 0 && recoverableCredential(failure)) return true;
|
|
8787
|
+
const offer = result?.offerReceipt?.outcome;
|
|
8788
|
+
const pushNeedsRefresh = offer?.case === "failure" ? recoverableCredential(offer.value) : result?.pushError?.status === 401;
|
|
8789
|
+
return pushNeedsRefresh || result?.discoveryError?.status === 401;
|
|
8790
|
+
}
|
|
8791
|
+
|
|
8780
8792
|
// ../src/runtime/credential_renewal.ts
|
|
8781
8793
|
var RENEW_BEFORE_MILLIS = 5 * 6e4;
|
|
8782
8794
|
var BASE64URL = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
|
|
@@ -9040,7 +9052,7 @@ var NomosRuntimeComponent = (() => {
|
|
|
9040
9052
|
return false;
|
|
9041
9053
|
}
|
|
9042
9054
|
observeSync(session, event) {
|
|
9043
|
-
if (!syncNeedsCredentialRefresh(event) || this.#tokenless(session)) return;
|
|
9055
|
+
if (!syncNeedsCredentialRefresh(event.result, event.failure) || this.#tokenless(session)) return;
|
|
9044
9056
|
this.#prune();
|
|
9045
9057
|
const capability = this.#ports.capabilityFor(session);
|
|
9046
9058
|
const existing = this.#active.get(capability);
|
|
@@ -9242,15 +9254,6 @@ var NomosRuntimeComponent = (() => {
|
|
|
9242
9254
|
this.#completed.clear();
|
|
9243
9255
|
}
|
|
9244
9256
|
};
|
|
9245
|
-
function recoverableCredential(failure) {
|
|
9246
|
-
return failure.code === "nomos.auth.token_expired" || failure.code === "nomos.auth.token_missing";
|
|
9247
|
-
}
|
|
9248
|
-
function syncNeedsCredentialRefresh(event) {
|
|
9249
|
-
const failures = [event.result?.pushError, event.result?.discoveryError];
|
|
9250
|
-
if (failures.some((failure) => failure?.status === 401 || failure?.status === 403)) return true;
|
|
9251
|
-
const text = `${event.failure?.message ?? ""} ${failures.map((failure) => failure?.message ?? "").join(" ")}`.toLowerCase();
|
|
9252
|
-
return text.includes("unauthenticated") || text.includes("token expired") || text.includes("invalid token");
|
|
9253
|
-
}
|
|
9254
9257
|
|
|
9255
9258
|
// ../src/runtime/device_identity_desk.ts
|
|
9256
9259
|
var DEVICE_IDENTITY_UNAVAILABLE = "nomos.runtime.device_identity_unavailable";
|
|
@@ -10104,6 +10107,7 @@ var NomosRuntimeComponent = (() => {
|
|
|
10104
10107
|
#accounts = /* @__PURE__ */ new Map();
|
|
10105
10108
|
/** D22: device key hash → the workspaces the console reported this key enrolled in (this process's memory, not truth). */
|
|
10106
10109
|
#consoleEnrolments = /* @__PURE__ */ new Map();
|
|
10110
|
+
#preparingWrites = /* @__PURE__ */ new Map();
|
|
10107
10111
|
#sequence = 0;
|
|
10108
10112
|
#internalRequestId = 30000000000n;
|
|
10109
10113
|
constructor(ports) {
|
|
@@ -10143,16 +10147,124 @@ var NomosRuntimeComponent = (() => {
|
|
|
10143
10147
|
if (head === account.observedHead) return;
|
|
10144
10148
|
this.#tails.set(workspace, { ...account, inFlight: false, attempts: 0, notBefore: 0n });
|
|
10145
10149
|
}
|
|
10146
|
-
/**
|
|
10147
|
-
*
|
|
10150
|
+
/** Only a proven non-admission can enter recovery. Console-enrolled children
|
|
10151
|
+
* share the owning application's route, selected by credential capability and
|
|
10152
|
+
* principal, never by workspace-name guessing or an unverified payload. */
|
|
10148
10153
|
recoverOffer(request, response) {
|
|
10149
|
-
if (!this.#ports.call || request.command.case !== "kernelCall" || request.command.value.credentialUse !== CredentialUse.SESSION || request.command.value.request?.operation.case !== "offer" || request.command.value.request.operation.value.intent.case !== "call"
|
|
10154
|
+
if (!this.#ports.call || request.command.case !== "kernelCall" || request.command.value.credentialUse !== CredentialUse.SESSION || request.command.value.request?.operation.case !== "offer" || request.command.value.request.operation.value.intent.case !== "call") return;
|
|
10155
|
+
const missing = response.outcome.case === "failure" ? response.outcome.value.code === "nomos.authz.signer_enrollment_missing" : response.outcome.case === "offer" && response.outcome.value.outcome.case === "refused" && response.outcome.value.outcome.value.refusal?.code === KernelRefusalCode.FORGED_PRINCIPAL && response.outcome.value.outcome.value.refusal.details?.fields.actor?.kind.case === "text" && response.outcome.value.outcome.value.refusal.details.fields.actor.kind.value === "unenrolled-signer-key";
|
|
10156
|
+
const revoked = response.outcome.case === "failure" && response.outcome.value.code === "nomos.authz.device_key_revoked";
|
|
10157
|
+
if (!missing && !revoked) return;
|
|
10150
10158
|
const binding = this.#ports.binding(request.command.value.session);
|
|
10151
|
-
|
|
10152
|
-
|
|
10159
|
+
if (!binding) return;
|
|
10160
|
+
const enrolled = [...this.#accounts.values()].find((account2) => {
|
|
10161
|
+
const owner = this.#ports.binding(account2.session);
|
|
10162
|
+
return account2.enrolment && owner?.credentialCapability === binding.credentialCapability && owner.principal === binding.principal;
|
|
10163
|
+
});
|
|
10153
10164
|
const copy3 = fromBinary(RuntimeRequestSchema, toBinary(RuntimeRequestSchema, request));
|
|
10165
|
+
if (enrolled?.enrolment) {
|
|
10166
|
+
if (revoked) return this.#writeRefused(binding.workspace, "This device's access has been revoked.");
|
|
10167
|
+
return this.#begin(request, `enrolled-write-${++this.#sequence}`, (workId2) => this.#prepareEnrolledWrite(copy3, binding, enrolled.application, enrolled.enrolment, workId2));
|
|
10168
|
+
}
|
|
10169
|
+
const account = this.#accounts.get(binding.workspace);
|
|
10170
|
+
if (!account) return;
|
|
10154
10171
|
return this.#begin(request, `receiving-group-authoring-${++this.#sequence}`, (workId2) => this.#recoverOffer(copy3, response, account, workId2));
|
|
10155
10172
|
}
|
|
10173
|
+
#writeRefused(workspace, detail, reason = RuntimeRefusalReason.ACCESS_DENIED) {
|
|
10174
|
+
return { case: "refused", value: create(RuntimeRefusalSchema, {
|
|
10175
|
+
reason,
|
|
10176
|
+
workspace,
|
|
10177
|
+
retryable: false,
|
|
10178
|
+
detail
|
|
10179
|
+
}) };
|
|
10180
|
+
}
|
|
10181
|
+
#writeWaiting(workspace, detail) {
|
|
10182
|
+
return { case: "unavailable", value: create(RuntimeUnavailableSchema, {
|
|
10183
|
+
reason: RuntimeUnavailableReason.CREDENTIAL_UNAVAILABLE,
|
|
10184
|
+
workspace,
|
|
10185
|
+
retryable: true,
|
|
10186
|
+
retryAfterMillis: 1e3,
|
|
10187
|
+
detail
|
|
10188
|
+
}) };
|
|
10189
|
+
}
|
|
10190
|
+
*#prepareEnrolledWrite(request, binding, application, route, workId2) {
|
|
10191
|
+
if (request.command.case !== "kernelCall") throw new Error("write preparation lost its call");
|
|
10192
|
+
const command = request.command.value;
|
|
10193
|
+
const principal = binding.principal;
|
|
10194
|
+
const unavailable = () => this.#writeWaiting(
|
|
10195
|
+
binding.workspace,
|
|
10196
|
+
"This device is still being prepared to save changes. Your change has not been saved. Try again when connected."
|
|
10197
|
+
);
|
|
10198
|
+
this.#ports.emit(binding.session, { case: "writePreparation", value: create(WritePreparationSchema, {
|
|
10199
|
+
requestId: command.request.requestId,
|
|
10200
|
+
workspace: binding.workspace
|
|
10201
|
+
}) });
|
|
10202
|
+
const key = JSON.stringify([binding.credentialCapability, principal, binding.workspace]);
|
|
10203
|
+
const shared = this.#preparingWrites.get(key);
|
|
10204
|
+
const deadline = this.#ports.clock.monotonicNanoseconds() + 30000000000n;
|
|
10205
|
+
let wake = 0;
|
|
10206
|
+
if (shared) {
|
|
10207
|
+
while (!shared.settled) {
|
|
10208
|
+
if (this.#ports.clock.monotonicNanoseconds() >= deadline) return unavailable();
|
|
10209
|
+
const receipt = yield { case: "wake", value: create(PeerWakeEffectSchema, {
|
|
10210
|
+
effectId: `${workId2}:join-${++wake}`,
|
|
10211
|
+
delayMillis: 250
|
|
10212
|
+
}) };
|
|
10213
|
+
if (receipt.outcome.case !== "woken") return unavailable();
|
|
10214
|
+
}
|
|
10215
|
+
if (shared.result) return shared.result;
|
|
10216
|
+
} else {
|
|
10217
|
+
const preparation = { settled: false };
|
|
10218
|
+
this.#preparingWrites.set(key, preparation);
|
|
10219
|
+
try {
|
|
10220
|
+
const secret = this.#ports.authorSecretIfPresent(binding.session);
|
|
10221
|
+
if (!secret) return preparation.result = this.#writeRefused(binding.workspace, "Sign in again to set up this device.", RuntimeRefusalReason.INVALID_CREDENTIAL);
|
|
10222
|
+
const keyHash = sha256Hex(this.#ports.deriveSigningPublicKey(secret));
|
|
10223
|
+
let posture = this.#ports.posture(request, binding.session, principal, secret, false);
|
|
10224
|
+
if (posture.deviceSignerStatus === DeviceSignerStatus.REVOKED) {
|
|
10225
|
+
return preparation.result = this.#writeRefused(binding.workspace, "This device's access has been revoked.");
|
|
10226
|
+
}
|
|
10227
|
+
if (!posture.enrolledDevice || posture.deviceSignerStatus !== DeviceSignerStatus.ACTIVE) {
|
|
10228
|
+
const enrolled = yield* this.#enrolAtConsole(
|
|
10229
|
+
route,
|
|
10230
|
+
binding,
|
|
10231
|
+
`${application}|${principal}`,
|
|
10232
|
+
principal,
|
|
10233
|
+
keyHash,
|
|
10234
|
+
[binding.workspace],
|
|
10235
|
+
`${workId2}:console`
|
|
10236
|
+
);
|
|
10237
|
+
if (enrolled.case === "deferred") return preparation.result = enrolled.credentialRefused ? this.#writeRefused(binding.workspace, "Sign in again to set up this device.", RuntimeRefusalReason.INVALID_CREDENTIAL) : unavailable();
|
|
10238
|
+
if (!(binding.workspace in enrolled.value.heads)) {
|
|
10239
|
+
return preparation.result = this.#writeRefused(binding.workspace, "This device could not obtain access to save changes in this workspace.");
|
|
10240
|
+
}
|
|
10241
|
+
while (true) {
|
|
10242
|
+
posture = this.#ports.posture(request, binding.session, principal, secret, false);
|
|
10243
|
+
if (posture.deviceSignerStatus === DeviceSignerStatus.REVOKED) {
|
|
10244
|
+
return preparation.result = this.#writeRefused(binding.workspace, "This device's access has been revoked.");
|
|
10245
|
+
}
|
|
10246
|
+
if (posture.enrolledDevice && posture.deviceSignerStatus === DeviceSignerStatus.ACTIVE) break;
|
|
10247
|
+
if (this.#ports.clock.monotonicNanoseconds() >= deadline) return preparation.result = unavailable();
|
|
10248
|
+
const receipt = yield { case: "wake", value: create(PeerWakeEffectSchema, {
|
|
10249
|
+
effectId: `${workId2}:observe-${++wake}`,
|
|
10250
|
+
delayMillis: 500
|
|
10251
|
+
}) };
|
|
10252
|
+
if (receipt.outcome.case !== "woken") return preparation.result = unavailable();
|
|
10253
|
+
}
|
|
10254
|
+
}
|
|
10255
|
+
} catch (error) {
|
|
10256
|
+
if (error instanceof ReceivingGroupRefusal) {
|
|
10257
|
+
return preparation.result = this.#writeRefused(binding.workspace, "This device could not obtain access to save changes in this workspace.");
|
|
10258
|
+
}
|
|
10259
|
+
preparation.result = unavailable();
|
|
10260
|
+
throw error;
|
|
10261
|
+
} finally {
|
|
10262
|
+
preparation.settled = true;
|
|
10263
|
+
this.#preparingWrites.delete(key);
|
|
10264
|
+
}
|
|
10265
|
+
}
|
|
10266
|
+
return { case: "retried", request, response: this.#ports.call(request, command) };
|
|
10267
|
+
}
|
|
10156
10268
|
*#recoverOffer(request, response, account, workId2) {
|
|
10157
10269
|
const workspace = this.#ports.binding(account.session).workspace;
|
|
10158
10270
|
const deadline = this.#ports.clock.monotonicNanoseconds() + 60000000000n;
|
|
@@ -10220,6 +10332,7 @@ var NomosRuntimeComponent = (() => {
|
|
|
10220
10332
|
this.#opening.clear();
|
|
10221
10333
|
this.#accounts.clear();
|
|
10222
10334
|
this.#consoleEnrolments.clear();
|
|
10335
|
+
this.#preparingWrites.clear();
|
|
10223
10336
|
}
|
|
10224
10337
|
#begin(request, workId2, procedure) {
|
|
10225
10338
|
const held = {
|
|
@@ -14159,12 +14272,12 @@ var NomosRuntimeComponent = (() => {
|
|
|
14159
14272
|
this.#desk.transition(result.workspace, { case: ReplicaFollowEventKind.WentOffline, nowUnixMillis });
|
|
14160
14273
|
return delayUntilDue(this.#desk.get(result.workspace), nowUnixMillis);
|
|
14161
14274
|
}
|
|
14162
|
-
|
|
14163
|
-
|
|
14275
|
+
if (syncNeedsCredentialRefresh(result)) {
|
|
14276
|
+
const offer = result.offerReceipt?.outcome;
|
|
14164
14277
|
const transition = this.#desk.transition(result.workspace, {
|
|
14165
14278
|
case: ReplicaFollowEventKind.CredentialRejected,
|
|
14166
14279
|
nowUnixMillis,
|
|
14167
|
-
failure:
|
|
14280
|
+
failure: (offer?.case === "failure" ? offer.value.message : void 0) || result.pushError?.message || result.discoveryError?.message || "remote requires a refreshed credential"
|
|
14168
14281
|
});
|
|
14169
14282
|
if (transition.effects.some((effect) => effect.case === ReplicaFollowEffectKind.RefreshCredential)) {
|
|
14170
14283
|
return 0;
|
|
@@ -16224,7 +16337,6 @@ var NomosRuntimeComponent = (() => {
|
|
|
16224
16337
|
Done: "done"
|
|
16225
16338
|
});
|
|
16226
16339
|
var trackedMain = "refs/remotes/nomos/main";
|
|
16227
|
-
var NO_COMMON_BASE = "this replica holds local history with no frontier its upstream ever confirmed; convergence needs a common admitted base \u2014 drop the local copy to refetch it, or re-discover a provider holding this lineage";
|
|
16228
16340
|
var deferredRemote = "refs/remotes/nomos/deferred";
|
|
16229
16341
|
var deferredLocal = "refs/nomos/sync-deferred-local";
|
|
16230
16342
|
var judgedThisLifetime = /* @__PURE__ */ new Map();
|
|
@@ -16435,38 +16547,13 @@ var NomosRuntimeComponent = (() => {
|
|
|
16435
16547
|
}), { case: "awaiting", requestId });
|
|
16436
16548
|
}
|
|
16437
16549
|
/**
|
|
16438
|
-
*
|
|
16439
|
-
*
|
|
16440
|
-
*
|
|
16441
|
-
*
|
|
16442
|
-
* state ("a non-empty live ledger requires a common admitted base"), so every step after the
|
|
16443
|
-
* O(1) frontier probe is wasted work — and it is not cheap waste: the fetch negotiates with
|
|
16444
|
-
* no `have` (a full-history pack), and the dependency planner decodes EVERY intent from
|
|
16445
|
-
* genesis and inspects every change, once per round. That is O(history) per follow round,
|
|
16446
|
-
* repeated at every retry, for a round that can only end in a refusal.
|
|
16447
|
-
*
|
|
16448
|
-
* The one base this round can establish costs nothing and is established before this is
|
|
16449
|
-
* asked: an upstream holding exactly this replica's head (the probe's answer) converges it
|
|
16450
|
-
* and records the tracking frontier. Anything else needs the local copy to be dropped and
|
|
16451
|
-
* refetched (an application decision, which preserves the copy), or a re-discovery that
|
|
16452
|
-
* names a provider holding this lineage. Both are reported, at O(1), as this failure.
|
|
16453
|
-
*/
|
|
16454
|
-
/**
|
|
16455
|
-
* Establish this round's base when none is tracked, without walking any history it can avoid.
|
|
16456
|
-
*
|
|
16457
|
-
* The upstream just named its own frontier. If that commit is in THIS replica's lineage, it is
|
|
16458
|
-
* a common admitted base by definition — both sides hold it — and adopting it turns the round
|
|
16459
|
-
* into an ordinary fast-forward: the offer carries only the suffix above it, the fetch can name
|
|
16460
|
-
* it as a truthful `have`, and convergence has the base the kernel requires. One commit walk
|
|
16461
|
-
* (no change decoding, no pack, no network) decides it.
|
|
16462
|
-
*
|
|
16463
|
-
* If it is not in this replica's lineage, no base exists to establish and the round is refused
|
|
16464
|
-
* (#noCommonBase) before it leases, fetches or plans anything.
|
|
16465
|
-
*
|
|
16466
|
-
* A kernel without the commit walk cannot be asked, so it keeps the previous behaviour.
|
|
16550
|
+
* Establish a cheap base when the provider's current tip is in our local chain.
|
|
16551
|
+
* A negative answer means the base is unknown: both sides may have advanced from
|
|
16552
|
+
* an earlier shared commit. Acquire the candidate and let the kernel discover
|
|
16553
|
+
* and judge that history. A tracking bookmark is not an admission prerequisite.
|
|
16467
16554
|
*/
|
|
16468
16555
|
#establishBase(upstreamHead) {
|
|
16469
|
-
if (!this.#
|
|
16556
|
+
if (!this.#missingTrackedBase() || !this.#kernel.historySummary) return true;
|
|
16470
16557
|
const summary = this.#kernel.historySummary(this.#mount, this.#requestId, upstreamHead, this.#localHead);
|
|
16471
16558
|
if (!summary.reachedBase) return false;
|
|
16472
16559
|
this.#previousHead = upstreamHead;
|
|
@@ -16481,26 +16568,9 @@ var NomosRuntimeComponent = (() => {
|
|
|
16481
16568
|
get establishedBase() {
|
|
16482
16569
|
return this.#establishedBase;
|
|
16483
16570
|
}
|
|
16484
|
-
#
|
|
16571
|
+
#missingTrackedBase() {
|
|
16485
16572
|
return this.#previousHead === void 0 && this.#localHead !== void 0 && this.#replaceLocalHead === void 0;
|
|
16486
16573
|
}
|
|
16487
|
-
#noCommonBaseResult() {
|
|
16488
|
-
return this.#finish(create(SyncWorkspaceResponseSchema, {
|
|
16489
|
-
workspace: this.#mount.workspace,
|
|
16490
|
-
...this.#localHead === void 0 ? {} : { currentHead: this.#localHead },
|
|
16491
|
-
stillAhead: true,
|
|
16492
|
-
...this.#offerReceipt === void 0 ? {} : { offerReceipt: this.#offerReceipt },
|
|
16493
|
-
pushError: create(RuntimeTransportFailureSchema, {
|
|
16494
|
-
endpoint: this.#offerEndpoint(),
|
|
16495
|
-
status: 409,
|
|
16496
|
-
refused: true,
|
|
16497
|
-
message: NO_COMMON_BASE
|
|
16498
|
-
}),
|
|
16499
|
-
timings: create(SyncPhaseTimingsSchema, {
|
|
16500
|
-
convergeMillis: elapsedMillis(this.#clock, this.#started)
|
|
16501
|
-
})
|
|
16502
|
-
}));
|
|
16503
|
-
}
|
|
16504
16574
|
#holdsLocalWork() {
|
|
16505
16575
|
return this.#command.admit && !!this.#localHead && this.#localHead !== this.#previousHead;
|
|
16506
16576
|
}
|
|
@@ -16652,7 +16722,6 @@ var NomosRuntimeComponent = (() => {
|
|
|
16652
16722
|
if (!this.#desiredHead) return this.#transportFailure("resident peer returned no admitted frontier", false);
|
|
16653
16723
|
this.#candidateDurable = admission.sealedMain === this.#desiredHead;
|
|
16654
16724
|
if (state.phase === WorkspaceSyncPhase.Probe && this.#desiredHead !== this.#localHead) {
|
|
16655
|
-
if (!this.#establishBase(this.#desiredHead)) return this.#noCommonBaseResult();
|
|
16656
16725
|
if (this.#alreadyJudged(this.#desiredHead)) {
|
|
16657
16726
|
return this.#finish(create(SyncWorkspaceResponseSchema, {
|
|
16658
16727
|
workspace: this.#mount.workspace,
|
|
@@ -16664,6 +16733,22 @@ var NomosRuntimeComponent = (() => {
|
|
|
16664
16733
|
offerReceipt: this.#offerReceipt
|
|
16665
16734
|
}));
|
|
16666
16735
|
}
|
|
16736
|
+
if (!this.#establishBase(this.#desiredHead)) {
|
|
16737
|
+
this.#offerAfterConverge = this.#command.admit;
|
|
16738
|
+
this.#rebaseFrom = void 0;
|
|
16739
|
+
return this.#leaseEffect();
|
|
16740
|
+
}
|
|
16741
|
+
if (this.#establishedBase && !this.#candidateDurable && this.#kernel.resolveRef(this.#mount, this.#requestId, trackedMain) === void 0) {
|
|
16742
|
+
return this.#finish(create(SyncWorkspaceResponseSchema, {
|
|
16743
|
+
workspace: this.#mount.workspace,
|
|
16744
|
+
currentHead: this.#localHead,
|
|
16745
|
+
previousHead: this.#previousHead,
|
|
16746
|
+
stillAhead: true,
|
|
16747
|
+
directOfferDeferred: true,
|
|
16748
|
+
reconnectRequired: false,
|
|
16749
|
+
offerReceipt: this.#offerReceipt
|
|
16750
|
+
}));
|
|
16751
|
+
}
|
|
16667
16752
|
if (this.#probeOnly) {
|
|
16668
16753
|
this.#needsReconciliation = true;
|
|
16669
16754
|
return this.#finish(create(SyncWorkspaceResponseSchema, {
|
|
@@ -16709,7 +16794,7 @@ var NomosRuntimeComponent = (() => {
|
|
|
16709
16794
|
return this.#converge(this.#desiredHead, admission.resultPack.byteLength, 0);
|
|
16710
16795
|
}
|
|
16711
16796
|
if (this.#desiredHead === this.#previousHead) return this.#converge(this.#desiredHead, 0, 0);
|
|
16712
|
-
|
|
16797
|
+
this.#establishBase(this.#desiredHead);
|
|
16713
16798
|
if (admission.recoveryRequired !== false) return this.#leaseEffect();
|
|
16714
16799
|
return this.#transportFailure("resident peer supplied neither the missing delta nor a history gap", false);
|
|
16715
16800
|
}
|
|
@@ -16932,7 +17017,7 @@ var NomosRuntimeComponent = (() => {
|
|
|
16932
17017
|
}
|
|
16933
17018
|
}
|
|
16934
17019
|
#converge(candidateHead, receivedBytes, prefetchMillis) {
|
|
16935
|
-
|
|
17020
|
+
this.#establishBase(candidateHead);
|
|
16936
17021
|
this.#beforeConverge?.(candidateHead, this.#previousHead);
|
|
16937
17022
|
const convergeStarted = this.#clock.monotonicNanoseconds();
|
|
16938
17023
|
let judged;
|
|
@@ -19378,13 +19463,21 @@ var NomosRuntimeComponent = (() => {
|
|
|
19378
19463
|
}
|
|
19379
19464
|
#observeSyncResult(requestId, workId2, result) {
|
|
19380
19465
|
const timings = result.timings;
|
|
19466
|
+
const receipt = result.offerReceipt?.outcome;
|
|
19467
|
+
const admission = receipt?.case === "admission" ? receipt.value : void 0;
|
|
19381
19468
|
this.#events.instant("peer.follow.sync-result", {
|
|
19382
19469
|
request: create(RuntimeRequestSchema, { protocolVersion: 2, requestId }),
|
|
19383
19470
|
workspace: result.workspace
|
|
19384
19471
|
}, {
|
|
19385
19472
|
"sync.workId": workId2,
|
|
19386
19473
|
...result.currentHead ? { "sync.head": result.currentHead } : {},
|
|
19474
|
+
...result.previousHead ? { "sync.previousHead": result.previousHead } : {},
|
|
19475
|
+
...admission?.main ? { "sync.providerHead": admission.main } : {},
|
|
19476
|
+
...admission?.sealedMain ? { "sync.sealedHead": admission.sealedMain } : {},
|
|
19387
19477
|
"sync.stillAhead": result.stillAhead,
|
|
19478
|
+
"sync.reconnectRequired": result.reconnectRequired,
|
|
19479
|
+
"sync.refused": result.refused,
|
|
19480
|
+
"sync.deferred": result.deferred,
|
|
19388
19481
|
"sync.directOfferDeferred": result.directOfferDeferred,
|
|
19389
19482
|
"sync.offline": result.offline,
|
|
19390
19483
|
...timings ? {
|
|
@@ -22456,6 +22549,7 @@ var NomosRuntimeComponent = (() => {
|
|
|
22456
22549
|
return this.#responses.modelAdoption(request, step);
|
|
22457
22550
|
}
|
|
22458
22551
|
#receivingGroupResponse(request, step) {
|
|
22552
|
+
if (step.case === "refused") return this.#response(request, { case: "refused", value: step.value });
|
|
22459
22553
|
if (step.case === "retried") return this.#birthCustodyResponse(step.request, this.#birthCustody.afterKernelCall(step.request, step.response));
|
|
22460
22554
|
if (step.case === "pending") return this.#response(request, { case: "correspondencePending", value: step.value });
|
|
22461
22555
|
if (step.case === "failure") return this.#failure(request, step.code, step.message);
|