@almadar/shell-node 1.2.1 → 1.3.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.
@@ -1,3 +1,3 @@
1
- export { OrbitalServerRuntime, UnresolvedProgramError } from './chunk-U2YFXKUN.js';
2
- import './chunk-YEC2UPB4.js';
1
+ export { OrbitalServerRuntime, UnresolvedProgramError } from './chunk-7G76O2WN.js';
2
+ import './chunk-J7DCQOQW.js';
3
3
  import './chunk-EEYGL7AB.js';
@@ -1,4 +1,4 @@
1
- import { workspacesRoot, kernelWorkspaceHost, workspaceBucketFromEnv } from './chunk-WIL5CHP5.js';
1
+ import { workspacesRoot, kernelWorkspaceHost, workspaceBucketFromEnv } from './chunk-D4MHWNNC.js';
2
2
  import { runProgramEffect } from './chunk-7QE32QQR.js';
3
3
  import { installedWorkspaceHost, installWorkspaceHost } from './chunk-BWMLDDCL.js';
4
4
 
@@ -1,4 +1,4 @@
1
- import { installNodeHostPorts, createNodeTokenPost, nativeOsHost } from './chunk-YEC2UPB4.js';
1
+ import { installNodeHostPorts, createNodeTokenPost, nativeOsHost } from './chunk-J7DCQOQW.js';
2
2
  import { nativeMemoryOf } from './chunk-EEYGL7AB.js';
3
3
  import { EventBus, bindDeclaredCollections, createSecretPorts, defaultCallService, kernelEventRequestParser, kernelOsTls, kernelOsCompletions, stampEmitSource, eventRouteKey, kernelOsGrants, KernelEngine, dispatchDeclaredInput, dispatchInbound, createSecretStore, evaluateOnKernel, InFlightCalls } from '@almadar/shell-runtime';
4
4
  import { installKernelEvaluator, orbitalInlineEntities, asEventId, asTraitId, inlineTraitRefs, tickEventKey, toPayloadValue } from '@almadar/core';
@@ -496,7 +496,10 @@ var OrbitalServerRuntime = class {
496
496
  /** Run a follow-on step's call outcome as its own dispatch, and hand its result to the host-dispatch sink. */
497
497
  runDeferredOutcome(orbitalName, request) {
498
498
  void this.processOrbitalEvent(orbitalName, request).then(
499
- (response) => this.hostDispatchSink?.(this.browserDispatchItem(orbitalName, request, response)),
499
+ (response) => {
500
+ if (request.targetTrait !== void 0 && !this.requireKernelEngine().browserRuns(request.targetTrait)) return;
501
+ this.hostDispatchSink?.(this.browserDispatchItem(orbitalName, request, response));
502
+ },
500
503
  (error) => effectLog.error("deferred-outcome:failed", { orbitalName, event: request.event, trait: request.targetTrait, error: error.message })
501
504
  );
502
505
  }
@@ -1,4 +1,4 @@
1
- import { installNodeHostPorts, createNodeTokenPost, nativeOsHost } from './chunk-YEC2UPB4.js';
1
+ import { installNodeHostPorts, createNodeTokenPost, nativeOsHost } from './chunk-J7DCQOQW.js';
2
2
  import { loadNativeKernelModule, resolveNativeAddon, loadKernelModule } from './chunk-EEYGL7AB.js';
3
3
  import { workspaceOwnerSegment } from './chunk-BWMLDDCL.js';
4
4
  import { mkdirSync, realpathSync, mkdtempSync, writeFileSync, rmSync } from 'fs';
@@ -5,6 +5,7 @@ import { AsyncLocalStorage } from 'async_hooks';
5
5
  import { installCredentialScopeStorage, CREDENTIAL_MASTER_KEY_ENV, CREDENTIAL_PREVIOUS_MASTER_KEY_ENV, CredentialVault, installCredentialStore, createNativeOsPort } from '@almadar/shell-runtime';
6
6
  import { lookup } from 'dns/promises';
7
7
  import { request } from 'https';
8
+ import { request as request$1 } from 'http';
8
9
  import { isIP } from 'net';
9
10
  import { homedir } from 'os';
10
11
 
@@ -123,10 +124,43 @@ function urlOf(endpoint) {
123
124
  throw new TokenPostRefusal("the token endpoint is not a url");
124
125
  }
125
126
  }
127
+ function collect(req, response, settle, reject) {
128
+ const status = response.statusCode ?? 0;
129
+ if (status >= 300 && status < 400) {
130
+ response.resume();
131
+ reject(new TokenPostRefusal(`the token endpoint answered a redirect (${status}); redirects are not followed`));
132
+ req.destroy();
133
+ return;
134
+ }
135
+ const chunks = [];
136
+ response.on("data", (chunk) => chunks.push(chunk));
137
+ response.on("end", () => settle({ status, body: Buffer.concat(chunks).toString("utf8") }));
138
+ response.on("error", () => reject(new TokenPostRefusal("the token endpoint response failed")));
139
+ }
140
+ function metadataGet(send, endpoint, headers) {
141
+ const url = urlOf(endpoint);
142
+ const requestHeaders = {};
143
+ for (const [name, value] of headers) requestHeaders[name] = value;
144
+ requestHeaders["Connection"] = "close";
145
+ return new Promise((settle, reject) => {
146
+ const req = send(
147
+ { method: "GET", protocol: "http:", host: url.hostname, port: url.port === "" ? 80 : Number(url.port), path: `${url.pathname}${url.search}`, headers: requestHeaders, timeout: IO_TIMEOUT_MS },
148
+ (response) => collect(req, response, settle, reject)
149
+ );
150
+ req.on("timeout", () => {
151
+ reject(new TokenPostRefusal("the metadata server timed out"));
152
+ req.destroy();
153
+ });
154
+ req.on("error", (error) => reject(new TokenPostRefusal(`could not reach the metadata server${error.code !== void 0 ? ` (${error.code})` : ""}`)));
155
+ req.end();
156
+ });
157
+ }
126
158
  function createNodeTokenPost(options) {
127
159
  const send = options.request ?? request;
160
+ const sendMetadata = options.metadataRequest ?? request$1;
128
161
  const resolve = options.resolve ?? systemResolve;
129
- return async ({ endpoint, headers, body }) => {
162
+ return async ({ kind, endpoint, headers, body }) => {
163
+ if (kind === "metadata") return metadataGet(sendMetadata, endpoint, headers);
130
164
  const url = urlOf(endpoint);
131
165
  if (url.protocol !== "https:") throw new TokenPostRefusal("the token endpoint must be https");
132
166
  if (!options.egressAllows(endpoint)) throw new TokenPostRefusal(`${url.host} is not an origin the program declares in egress`);
@@ -157,19 +191,7 @@ function createNodeTokenPost(options) {
157
191
  else callback(null, checked.address, checked.family);
158
192
  }
159
193
  },
160
- (response) => {
161
- const status = response.statusCode ?? 0;
162
- if (status >= 300 && status < 400) {
163
- response.resume();
164
- reject(new TokenPostRefusal(`the token endpoint answered a redirect (${status}); redirects are not followed`));
165
- req.destroy();
166
- return;
167
- }
168
- const chunks = [];
169
- response.on("data", (chunk) => chunks.push(chunk));
170
- response.on("end", () => settle({ status, body: Buffer.concat(chunks).toString("utf8") }));
171
- response.on("error", () => reject(new TokenPostRefusal("the token endpoint response failed")));
172
- }
194
+ (response) => collect(req, response, settle, reject)
173
195
  );
174
196
  req.on("timeout", () => {
175
197
  reject(new TokenPostRefusal("the token endpoint timed out"));
@@ -1,6 +1,6 @@
1
- export { createProgramHandlers } from './chunk-CB2RKJKB.js';
2
- import './chunk-WIL5CHP5.js';
3
- import './chunk-YEC2UPB4.js';
1
+ export { createProgramHandlers } from './chunk-2ZDUXJRK.js';
2
+ import './chunk-D4MHWNNC.js';
3
+ import './chunk-J7DCQOQW.js';
4
4
  import './chunk-EEYGL7AB.js';
5
5
  import './chunk-7QE32QQR.js';
6
6
  import './chunk-BWMLDDCL.js';
package/dist/index.d.ts CHANGED
@@ -116,6 +116,8 @@ interface NodeTokenPostOptions {
116
116
  /** The kernel's public-address rule. */
117
117
  isPublicAddress(ip: string): boolean;
118
118
  request?: (options: RequestOptions, onResponse: (response: IncomingMessage) => void) => ClientRequest;
119
+ /** The plain-http request of a `metadata` exchange. */
120
+ metadataRequest?: (options: RequestOptions, onResponse: (response: IncomingMessage) => void) => ClientRequest;
119
121
  resolve?: (host: string) => Promise<ResolvedAddress[]>;
120
122
  }
121
123
  declare class TokenPostRefusal extends Error {
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
- export { OrbitalServerRuntime, UnresolvedProgramError } from './chunk-U2YFXKUN.js';
2
- export { createProgramHandlers } from './chunk-CB2RKJKB.js';
3
- export { KernelProgram, emitPayload, kernelWorkspaceHost, resolveProgramFile, workspaceBucketFromEnv, workspacesRoot } from './chunk-WIL5CHP5.js';
4
- export { DEFAULT_CREDENTIALS_FILE, TokenPostRefusal, createNodeTokenPost, credentialsFilePath, fileCredentialRows, installNodeCredentialVault, installNodeHostPorts } from './chunk-YEC2UPB4.js';
1
+ export { OrbitalServerRuntime, UnresolvedProgramError } from './chunk-7G76O2WN.js';
2
+ export { createProgramHandlers } from './chunk-2ZDUXJRK.js';
3
+ export { KernelProgram, emitPayload, kernelWorkspaceHost, resolveProgramFile, workspaceBucketFromEnv, workspacesRoot } from './chunk-D4MHWNNC.js';
4
+ export { DEFAULT_CREDENTIALS_FILE, TokenPostRefusal, createNodeTokenPost, credentialsFilePath, fileCredentialRows, installNodeCredentialVault, installNodeHostPorts } from './chunk-J7DCQOQW.js';
5
5
  export { loadInstalledKernel, loadKernelModule, loadNativeKernelModule, nativeMemoryOf, resolveNativeAddon } from './chunk-EEYGL7AB.js';
6
6
  export { behaviorCatalog, behaviorCatalogSync, behaviorDependencies, behaviorDescribe, behaviorResolve, behaviorSource, programCompose, programEval, programOsGrants, programPrint, programProve, programRead, programResolve, programResolveSchema, programStep, programValidate, runProgramEffect, workspaceAccessError } from './chunk-7QE32QQR.js';
7
7
  export { installWorkspaceHost, installedWorkspaceHost, uninstallWorkspaceHost, workspaceOwnerSegment } from './chunk-BWMLDDCL.js';
@@ -1,4 +1,4 @@
1
- export { kernelWorkspaceHost, workspaceBucketFromEnv, workspacesRoot } from './chunk-WIL5CHP5.js';
2
- import './chunk-YEC2UPB4.js';
1
+ export { kernelWorkspaceHost, workspaceBucketFromEnv, workspacesRoot } from './chunk-D4MHWNNC.js';
2
+ import './chunk-J7DCQOQW.js';
3
3
  import './chunk-EEYGL7AB.js';
4
4
  import './chunk-BWMLDDCL.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@almadar/shell-node",
3
- "version": "1.2.1",
3
+ "version": "1.3.1",
4
4
  "orbRelease": {
5
5
  "severity": "normal"
6
6
  },
@@ -37,12 +37,12 @@
37
37
  "access": "public"
38
38
  },
39
39
  "dependencies": {
40
- "@almadar/core": "^11.4.0",
41
- "@almadar/kernel": "^19.2.0",
42
- "@almadar/logger": "^2.4.0",
40
+ "@almadar/core": "^11.5.1",
41
+ "@almadar/kernel": "^19.3.0",
42
+ "@almadar/logger": "^2.5.1",
43
43
  "zod": "^4.6.7",
44
- "@almadar/std": "^17.2.1",
45
- "@almadar/shell-runtime": "^1.2.1"
44
+ "@almadar/std": "^17.3.1",
45
+ "@almadar/shell-runtime": "^1.3.1"
46
46
  },
47
47
  "devDependencies": {
48
48
  "@types/node": "^20.0.0",