@dsh-enhanced/plugin-control-plane 0.1.31 → 0.1.34

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 (199) hide show
  1. package/README.md +352 -4
  2. package/bin/dsh-local-release-adapter.js +80 -16
  3. package/bin/dsh-npm-registry-adapter.js +613 -0
  4. package/bin/dsh-source-adoption-authority.js +12 -0
  5. package/bin/dsh-source-approval-authority.js +16 -0
  6. package/bin/dsh-source-release-authority.js +12 -0
  7. package/bin/dsh-systemd-host-attestor.js +707 -0
  8. package/bin/dsh-task-observation-authority.js +15 -0
  9. package/lib/adapter-process.d.ts +23 -0
  10. package/lib/adapter-process.d.ts.map +1 -0
  11. package/lib/adapter-process.js +305 -0
  12. package/lib/adapter-process.js.map +1 -0
  13. package/lib/adoption-coordinator.d.ts +63 -0
  14. package/lib/adoption-coordinator.d.ts.map +1 -0
  15. package/lib/adoption-coordinator.js +241 -0
  16. package/lib/adoption-coordinator.js.map +1 -0
  17. package/lib/adoption-handoff.d.ts +16 -0
  18. package/lib/adoption-handoff.d.ts.map +1 -0
  19. package/lib/adoption-handoff.js +11 -0
  20. package/lib/adoption-handoff.js.map +1 -0
  21. package/lib/attestation.d.ts.map +1 -1
  22. package/lib/attestation.js +49 -1
  23. package/lib/attestation.js.map +1 -1
  24. package/lib/catalog.d.ts.map +1 -1
  25. package/lib/catalog.js +29 -2
  26. package/lib/catalog.js.map +1 -1
  27. package/lib/cli.d.ts +33 -9
  28. package/lib/cli.d.ts.map +1 -1
  29. package/lib/cli.js +624 -178
  30. package/lib/cli.js.map +1 -1
  31. package/lib/deployment-readiness.d.ts +38 -0
  32. package/lib/deployment-readiness.d.ts.map +1 -0
  33. package/lib/deployment-readiness.js +154 -0
  34. package/lib/deployment-readiness.js.map +1 -0
  35. package/lib/effect-blocked-replay.d.ts +81 -0
  36. package/lib/effect-blocked-replay.d.ts.map +1 -0
  37. package/lib/effect-blocked-replay.js +259 -0
  38. package/lib/effect-blocked-replay.js.map +1 -0
  39. package/lib/errors.d.ts +6 -0
  40. package/lib/errors.d.ts.map +1 -0
  41. package/lib/errors.js +9 -0
  42. package/lib/errors.js.map +1 -0
  43. package/lib/foreground-deployment-runtime.d.ts +20 -0
  44. package/lib/foreground-deployment-runtime.d.ts.map +1 -0
  45. package/lib/foreground-deployment-runtime.js +79 -0
  46. package/lib/foreground-deployment-runtime.js.map +1 -0
  47. package/lib/foreground-deployment.d.ts +17 -0
  48. package/lib/foreground-deployment.d.ts.map +1 -0
  49. package/lib/foreground-deployment.js +43 -0
  50. package/lib/foreground-deployment.js.map +1 -0
  51. package/lib/host-attestor.d.ts +1 -1
  52. package/lib/host-attestor.d.ts.map +1 -1
  53. package/lib/host-attestor.js +51 -57
  54. package/lib/host-attestor.js.map +1 -1
  55. package/lib/index.d.ts +25 -2
  56. package/lib/index.d.ts.map +1 -1
  57. package/lib/index.js +11 -2
  58. package/lib/index.js.map +1 -1
  59. package/lib/npm-publish.d.ts +25 -0
  60. package/lib/npm-publish.d.ts.map +1 -0
  61. package/lib/npm-publish.js +280 -0
  62. package/lib/npm-publish.js.map +1 -0
  63. package/lib/owner-task-gap-types.d.ts +21 -0
  64. package/lib/owner-task-gap-types.d.ts.map +1 -0
  65. package/lib/owner-task-gap-types.js +2 -0
  66. package/lib/owner-task-gap-types.js.map +1 -0
  67. package/lib/owner-task-gaps.d.ts +24 -0
  68. package/lib/owner-task-gaps.d.ts.map +1 -0
  69. package/lib/owner-task-gaps.js +74 -0
  70. package/lib/owner-task-gaps.js.map +1 -0
  71. package/lib/post-activation.d.ts +33 -0
  72. package/lib/post-activation.d.ts.map +1 -0
  73. package/lib/post-activation.js +219 -0
  74. package/lib/post-activation.js.map +1 -0
  75. package/lib/registry-fetch.d.ts +50 -0
  76. package/lib/registry-fetch.d.ts.map +1 -0
  77. package/lib/registry-fetch.js +267 -0
  78. package/lib/registry-fetch.js.map +1 -0
  79. package/lib/release.d.ts +4 -4
  80. package/lib/release.d.ts.map +1 -1
  81. package/lib/release.js +142 -56
  82. package/lib/release.js.map +1 -1
  83. package/lib/replay-endpoint-protocol.d.ts +65 -0
  84. package/lib/replay-endpoint-protocol.d.ts.map +1 -0
  85. package/lib/replay-endpoint-protocol.js +183 -0
  86. package/lib/replay-endpoint-protocol.js.map +1 -0
  87. package/lib/replay-endpoint.d.ts +7 -0
  88. package/lib/replay-endpoint.d.ts.map +1 -0
  89. package/lib/replay-endpoint.js +193 -0
  90. package/lib/replay-endpoint.js.map +1 -0
  91. package/lib/replay-grant.d.ts +62 -0
  92. package/lib/replay-grant.d.ts.map +1 -0
  93. package/lib/replay-grant.js +208 -0
  94. package/lib/replay-grant.js.map +1 -0
  95. package/lib/replay-journal.d.ts +25 -0
  96. package/lib/replay-journal.d.ts.map +1 -0
  97. package/lib/replay-journal.js +275 -0
  98. package/lib/replay-journal.js.map +1 -0
  99. package/lib/runtime-observer-protocol.d.ts +63 -0
  100. package/lib/runtime-observer-protocol.d.ts.map +1 -0
  101. package/lib/runtime-observer-protocol.js +280 -0
  102. package/lib/runtime-observer-protocol.js.map +1 -0
  103. package/lib/runtime-observer.d.ts +8 -0
  104. package/lib/runtime-observer.d.ts.map +1 -0
  105. package/lib/runtime-observer.js +182 -0
  106. package/lib/runtime-observer.js.map +1 -0
  107. package/lib/service.d.ts +145 -1
  108. package/lib/service.d.ts.map +1 -1
  109. package/lib/service.js +734 -6
  110. package/lib/service.js.map +1 -1
  111. package/lib/source-adoption-authority.d.ts +65 -0
  112. package/lib/source-adoption-authority.d.ts.map +1 -0
  113. package/lib/source-adoption-authority.js +271 -0
  114. package/lib/source-adoption-authority.js.map +1 -0
  115. package/lib/source-adoption-runner.d.ts +28 -0
  116. package/lib/source-adoption-runner.d.ts.map +1 -0
  117. package/lib/source-adoption-runner.js +197 -0
  118. package/lib/source-adoption-runner.js.map +1 -0
  119. package/lib/source-approval-authority.d.ts +50 -0
  120. package/lib/source-approval-authority.d.ts.map +1 -0
  121. package/lib/source-approval-authority.js +412 -0
  122. package/lib/source-approval-authority.js.map +1 -0
  123. package/lib/source-approval-client.d.ts +32 -0
  124. package/lib/source-approval-client.d.ts.map +1 -0
  125. package/lib/source-approval-client.js +175 -0
  126. package/lib/source-approval-client.js.map +1 -0
  127. package/lib/source-build.d.ts +60 -0
  128. package/lib/source-build.d.ts.map +1 -0
  129. package/lib/source-build.js +311 -0
  130. package/lib/source-build.js.map +1 -0
  131. package/lib/source-context.d.ts +24 -0
  132. package/lib/source-context.d.ts.map +1 -0
  133. package/lib/source-context.js +99 -0
  134. package/lib/source-context.js.map +1 -0
  135. package/lib/source-job-types.d.ts +87 -0
  136. package/lib/source-job-types.d.ts.map +1 -0
  137. package/lib/source-job-types.js +2 -0
  138. package/lib/source-job-types.js.map +1 -0
  139. package/lib/source-jobs.d.ts +113 -0
  140. package/lib/source-jobs.d.ts.map +1 -0
  141. package/lib/source-jobs.js +535 -0
  142. package/lib/source-jobs.js.map +1 -0
  143. package/lib/source-release-authority.d.ts +35 -0
  144. package/lib/source-release-authority.d.ts.map +1 -0
  145. package/lib/source-release-authority.js +271 -0
  146. package/lib/source-release-authority.js.map +1 -0
  147. package/lib/source-release-client.d.ts +10 -0
  148. package/lib/source-release-client.d.ts.map +1 -0
  149. package/lib/source-release-client.js +24 -0
  150. package/lib/source-release-client.js.map +1 -0
  151. package/lib/source-release-runner.d.ts +31 -0
  152. package/lib/source-release-runner.d.ts.map +1 -0
  153. package/lib/source-release-runner.js +125 -0
  154. package/lib/source-release-runner.js.map +1 -0
  155. package/lib/source-versioning.d.ts +24 -0
  156. package/lib/source-versioning.d.ts.map +1 -0
  157. package/lib/source-versioning.js +213 -0
  158. package/lib/source-versioning.js.map +1 -0
  159. package/lib/source-workspace.d.ts +117 -0
  160. package/lib/source-workspace.d.ts.map +1 -0
  161. package/lib/source-workspace.js +458 -0
  162. package/lib/source-workspace.js.map +1 -0
  163. package/lib/sqlite.d.ts +1 -1
  164. package/lib/sqlite.d.ts.map +1 -1
  165. package/lib/sqlite.js +509 -7
  166. package/lib/sqlite.js.map +1 -1
  167. package/lib/store.d.ts +229 -6
  168. package/lib/store.d.ts.map +1 -1
  169. package/lib/store.js +2431 -383
  170. package/lib/store.js.map +1 -1
  171. package/lib/task-observation-authority.d.ts +29 -0
  172. package/lib/task-observation-authority.d.ts.map +1 -0
  173. package/lib/task-observation-authority.js +370 -0
  174. package/lib/task-observation-authority.js.map +1 -0
  175. package/lib/task-observation-client.d.ts +4 -0
  176. package/lib/task-observation-client.d.ts.map +1 -0
  177. package/lib/task-observation-client.js +20 -0
  178. package/lib/task-observation-client.js.map +1 -0
  179. package/lib/task-observation-runtime.d.ts +59 -0
  180. package/lib/task-observation-runtime.d.ts.map +1 -0
  181. package/lib/task-observation-runtime.js +331 -0
  182. package/lib/task-observation-runtime.js.map +1 -0
  183. package/lib/task-observation-store.d.ts +17 -0
  184. package/lib/task-observation-store.d.ts.map +1 -0
  185. package/lib/task-observation-store.js +115 -0
  186. package/lib/task-observation-store.js.map +1 -0
  187. package/lib/task-observation-types.d.ts +67 -0
  188. package/lib/task-observation-types.d.ts.map +1 -0
  189. package/lib/task-observation-types.js +2 -0
  190. package/lib/task-observation-types.js.map +1 -0
  191. package/lib/trust.d.ts +3 -0
  192. package/lib/trust.d.ts.map +1 -1
  193. package/lib/trust.js +0 -0
  194. package/lib/trust.js.map +1 -1
  195. package/lib/types.d.ts +275 -8
  196. package/lib/types.d.ts.map +1 -1
  197. package/lib/version.d.ts +1 -1
  198. package/lib/version.js +1 -1
  199. package/package.json +40 -5
@@ -1,5 +1,5 @@
1
- import { spawn } from 'node:child_process';
2
1
  import { realpath } from 'node:fs/promises';
2
+ import { ControlledProcessError, executeControlledProcess } from './adapter-process.js';
3
3
  import { parseHostAttestationReceipt } from './attestation.js';
4
4
  import { ControlPlaneStore, ControlPlaneStoreError } from './store.js';
5
5
  import { inheritedHostAttestorEnvironment, openTrustedExecutable, verifyOpenTrustedExecutable } from './trust.js';
@@ -29,20 +29,26 @@ export function hostRequirements(policy, phase, previousHostGeneration) {
29
29
  if (phase === 'soak')
30
30
  return { kind: phase, minimumWindowMs: policy.soakMinimumWindowMs,
31
31
  minimumSamples: policy.soakMinimumSamples, maximumFailureRate: policy.soakMaximumFailureRate };
32
- return { kind: phase, minimumChecks: policy.healthMinimumChecks, maximumFailures: policy.healthMaximumFailures };
32
+ if (phase === 'health')
33
+ return { kind: phase, minimumChecks: policy.healthMinimumChecks, maximumFailures: policy.healthMaximumFailures };
34
+ throw new HostAttestorError('FAILED', 'rollback requirements must be bound to the durable recovery marker');
33
35
  }
34
36
  function expectedPhase(plan) {
35
37
  const status = plan.status.startsWith('awaiting-') ? plan.status.slice('awaiting-'.length) : '';
36
- if (!['reload', 'readiness', 'effect-blocked-replay', 'shadow', 'canary', 'soak', 'health'].includes(status)) {
38
+ if (!['reload', 'readiness', 'effect-blocked-replay', 'shadow', 'canary', 'soak', 'health', 'rollback'].includes(status)) {
37
39
  throw new HostAttestorError('FAILED', 'plan is not awaiting a Host phase');
38
40
  }
39
41
  return status;
40
42
  }
41
43
  function prepare(store, plan, trust, issuer) {
42
- const phase = expectedPhase(plan);
44
+ const phase = plan.status === 'rollback-pending' && plan.activation?.hostRecoveryRequired ? 'rollback' : expectedPhase(plan);
45
+ const requirements = phase === 'rollback'
46
+ ? { kind: 'rollback', previousHostGeneration: store.latestHostGeneration(plan.installationId), action: plan.activation?.targetOriginallyExisted ? 'restore' : 'stop',
47
+ baselineFiles: plan.activation?.targetBaselineFiles ?? [], minimumChecks: trust.hostPolicy.healthMinimumChecks }
48
+ : hostRequirements(trust.hostPolicy, phase, store.latestHostGeneration(plan.installationId));
43
49
  return store.prepareHostAttestationOperation({ planId: plan.id, expectedRevision: plan.revision,
44
50
  expectedFence: plan.activation.fence, issuer,
45
- requirements: hostRequirements(trust.hostPolicy, phase, store.latestHostGeneration(plan.installationId)),
51
+ requirements,
46
52
  receiptTtlMs: trust.hostPolicy.receiptTtlMs });
47
53
  }
48
54
  export function prepareManualHostAttestation(store, plan, trust) {
@@ -56,7 +62,9 @@ export function prepareConfiguredHostAttestation(store, plan, trust) {
56
62
  path: attestor.path, sha256: attestor.sha256, interpreter: attestor.interpreter,
57
63
  authority: attestor.authority, keyId: attestor.keyId });
58
64
  }
59
- async function execute(executable, interpreter, args, environment, timeoutMs, input, maximumOutput) {
65
+ async function execute(executable, interpreter, args, environment, timeoutMs, input, maximumOutput, signal) {
66
+ if (signal?.aborted)
67
+ throw new HostAttestorError('FAILED', 'registered Host attestor was cancelled');
60
68
  if (process.platform !== 'linux')
61
69
  throw new HostAttestorError('FAILED', 'descriptor-pinned Host attestors require Linux');
62
70
  try {
@@ -65,55 +73,27 @@ async function execute(executable, interpreter, args, environment, timeoutMs, in
65
73
  catch {
66
74
  throw new HostAttestorError('FAILED', 'descriptor-pinned Host attestors require /proc/self/fd');
67
75
  }
68
- return new Promise((resolve, reject) => {
69
- const command = interpreter === undefined ? '/proc/self/fd/3' : '/proc/self/fd/4';
70
- const commandArguments = interpreter === undefined ? [...args] : ['/proc/self/fd/3', ...args];
71
- const stdio = ['pipe', 'pipe', 'ignore', executable.handle.fd];
72
- if (interpreter !== undefined)
73
- stdio.push(interpreter.handle.fd);
74
- const child = spawn(command, commandArguments, { env: environment, shell: false, stdio });
75
- const chunks = [];
76
- let bytes = 0;
77
- let timedOut = false;
78
- let outputLimit = false;
79
- let settled = false;
80
- const fail = (error) => { if (!settled) {
81
- settled = true;
82
- reject(error);
83
- } };
84
- child.stdout.on('data', (chunk) => {
85
- bytes += chunk.length;
86
- if (bytes > maximumOutput) {
87
- outputLimit = true;
88
- child.kill('SIGKILL');
89
- }
90
- else
91
- chunks.push(chunk);
92
- });
93
- child.once('error', () => fail(new HostAttestorError('FAILED', 'registered Host attestor could not start')));
94
- child.once('close', code => {
95
- if (settled)
96
- return;
97
- settled = true;
98
- if (timedOut)
99
- reject(new HostAttestorError('TIMEOUT', 'registered Host attestor exceeded its deadline'));
100
- else if (outputLimit)
101
- reject(new HostAttestorError('OUTPUT_LIMIT', 'registered Host attestor exceeded its output bound'));
102
- else if (code !== 0)
103
- reject(new HostAttestorError('FAILED', 'registered Host attestor returned a non-zero status'));
104
- else
105
- resolve(Buffer.concat(chunks).toString('utf8'));
106
- });
107
- const timer = setTimeout(() => { timedOut = true; child.kill('SIGKILL'); }, timeoutMs);
108
- child.once('close', () => clearTimeout(timer));
109
- child.stdin.on('error', () => { });
110
- if (input === undefined)
111
- child.stdin.end();
112
- else
113
- child.stdin.end(input, 'utf8');
114
- });
76
+ const command = interpreter === undefined ? '/proc/self/fd/3' : '/proc/self/fd/4';
77
+ const commandArguments = interpreter === undefined ? [...args] : ['/proc/self/fd/3', ...args];
78
+ const stdio = ['pipe', 'pipe', 'ignore', executable.handle.fd];
79
+ if (interpreter !== undefined)
80
+ stdio.push(interpreter.handle.fd);
81
+ try {
82
+ return await executeControlledProcess({ command, args: commandArguments, env: environment, stdio,
83
+ stdin: input, timeoutMs, maximumOutput, ...(signal === undefined ? {} : { signal }) });
84
+ }
85
+ catch (error) {
86
+ if (!(error instanceof ControlledProcessError))
87
+ throw error;
88
+ if (error.code === 'TIMEOUT')
89
+ throw new HostAttestorError('TIMEOUT', 'registered Host attestor exceeded its deadline');
90
+ if (error.code === 'OUTPUT_LIMIT')
91
+ throw new HostAttestorError('OUTPUT_LIMIT', 'registered Host attestor exceeded its output bound');
92
+ throw new HostAttestorError('FAILED', error.code === 'NON_ZERO'
93
+ ? 'registered Host attestor returned a non-zero status' : 'registered Host attestor could not be safely reclaimed');
94
+ }
115
95
  }
116
- export async function invokeConfiguredHostAttestor(trust, request) {
96
+ export async function invokeConfiguredHostAttestor(trust, request, signal) {
117
97
  const attestor = trust.hostAttestor;
118
98
  if (attestor === undefined)
119
99
  throw new HostAttestorError('NOT_CONFIGURED', 'no owner-configured Host attestor is registered');
@@ -125,18 +105,27 @@ export async function invokeConfiguredHostAttestor(trust, request) {
125
105
  throw new HostAttestorError('FAILED', 'durable request is not bound to the configured Host attestor');
126
106
  let executable;
127
107
  let interpreter;
108
+ let receipt;
128
109
  try {
110
+ if (signal?.aborted)
111
+ throw new HostAttestorError('FAILED', 'registered Host attestor was cancelled');
129
112
  executable = await openTrustedExecutable(attestor.path, attestor.sha256);
113
+ if (signal?.aborted)
114
+ throw new HostAttestorError('FAILED', 'registered Host attestor was cancelled');
130
115
  interpreter = attestor.interpreter === null ? undefined
131
116
  : await openTrustedExecutable(attestor.interpreter.path, attestor.interpreter.sha256);
117
+ if (signal?.aborted)
118
+ throw new HostAttestorError('FAILED', 'registered Host attestor was cancelled');
132
119
  const environment = inheritedHostAttestorEnvironment(trust);
133
- const version = (await execute(executable, interpreter, ['--version'], environment, attestor.timeoutMs, undefined, 1_024)).trim();
120
+ const version = (await execute(executable, interpreter, ['--version'], environment, attestor.timeoutMs, undefined, 1_024, signal)).trim();
134
121
  if (version !== attestor.version)
135
122
  throw new HostAttestorError('VERSION_MISMATCH', 'registered Host attestor reported a different version');
136
- const receiptSource = await execute(executable, interpreter, ['attest'], environment, attestor.timeoutMs, `${JSON.stringify(request)}\n`, 65_536);
123
+ const receiptSource = await execute(executable, interpreter, ['attest'], environment, attestor.timeoutMs, `${JSON.stringify(request)}\n`, 65_536, signal);
137
124
  await verifyOpenTrustedExecutable(executable);
138
125
  if (interpreter !== undefined)
139
126
  await verifyOpenTrustedExecutable(interpreter);
127
+ if (signal?.aborted)
128
+ throw new HostAttestorError('FAILED', 'registered Host attestor was cancelled');
140
129
  let parsed;
141
130
  try {
142
131
  parsed = JSON.parse(receiptSource);
@@ -144,7 +133,7 @@ export async function invokeConfiguredHostAttestor(trust, request) {
144
133
  catch {
145
134
  throw new HostAttestorError('FAILED', 'registered Host attestor did not return one JSON receipt');
146
135
  }
147
- return parseHostAttestationReceipt(parsed);
136
+ receipt = parseHostAttestationReceipt(parsed);
148
137
  }
149
138
  catch (error) {
150
139
  if (error instanceof HostAttestorError || error instanceof ControlPlaneStoreError)
@@ -159,5 +148,10 @@ export async function invokeConfiguredHostAttestor(trust, request) {
159
148
  await executable?.handle.close();
160
149
  }
161
150
  }
151
+ if (signal?.aborted)
152
+ throw new HostAttestorError('FAILED', 'registered Host attestor was cancelled');
153
+ if (receipt === undefined)
154
+ throw new HostAttestorError('FAILED', 'registered Host attestor did not return a receipt');
155
+ return receipt;
162
156
  }
163
157
  //# sourceMappingURL=host-attestor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"host-attestor.js","sourceRoot":"","sources":["../src/host-attestor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"host-attestor.js","sourceRoot":"","sources":["../src/host-attestor.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts CHANGED
@@ -1,20 +1,43 @@
1
1
  import type { Context } from '@deepseek-ai/cordis';
2
- import { PluginControlPlaneService, type Config } from './service.js';
2
+ import { PluginControlPlaneService, normalizeControlPlaneConfig, type Config } from './service.js';
3
3
  import { version } from './version.js';
4
4
  export declare const name = "dsh-enhanced-plugin-control-plane";
5
- export { PluginControlPlaneService, version };
5
+ export { PluginControlPlaneService, normalizeControlPlaneConfig, version };
6
6
  export { Config } from './service.js';
7
+ export type { NormalizedControlPlaneConfig } from './service.js';
7
8
  export * from './catalog.js';
9
+ export * from './errors.js';
10
+ export * from './source-workspace.js';
8
11
  export * from './approval.js';
12
+ export type { SourceApprovalClientConfig } from './source-approval-client.js';
13
+ export { validateSourceApprovalAuthorityConfig } from './source-approval-authority.js';
14
+ export type { SourceApprovalAuthorityConfig, SourceApprovalRequest } from './source-approval-authority.js';
15
+ export type { SourceAdoptionConfig } from './source-adoption-runner.js';
16
+ export { validateSourceAdoptionAuthorityConfig } from './source-adoption-authority.js';
17
+ export type { SourceAdoptionAuthorityConfig } from './source-adoption-authority.js';
9
18
  export * from './attestation.js';
10
19
  export * from './host-attestor.js';
20
+ export * from './runtime-observer.js';
21
+ export type { ForegroundDeploymentConfig } from './foreground-deployment-runtime.js';
22
+ export type * from './task-observation-types.js';
23
+ export { validateTaskObservationAuthorityConfig } from './task-observation-authority.js';
24
+ export type { TaskObservationAuthorityConfig } from './task-observation-authority.js';
25
+ export type { ForegroundDeploymentRecord } from './foreground-deployment.js';
26
+ export * from './effect-blocked-replay.js';
27
+ export * from './replay-endpoint.js';
11
28
  export * from './lockfile.js';
12
29
  export * from './release.js';
30
+ export { validateSourceReleaseAuthorityConfig } from './source-release-authority.js';
31
+ export type { SourceReleaseAuthorityConfig } from './source-release-authority.js';
13
32
  export * from './service.js';
14
33
  export * from './sqlite.js';
15
34
  export * from './store.js';
16
35
  export * from './types.js';
17
36
  export * from './trust.js';
37
+ export type * from './source-job-types.js';
38
+ export type { EnqueueSourceJobInput, SourceJobCaller } from './source-jobs.js';
18
39
  export declare function apply(ctx: Context, config: Config): void;
19
40
  export default PluginControlPlaneService;
41
+ export type { AdoptionHandoffTerms, AdoptionHandoffRecord } from './adoption-handoff.js';
42
+ export type { AdoptionCoordinatorConfig } from './adoption-coordinator.js';
20
43
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,yBAAyB,EAAE,KAAK,MAAM,EAAE,MAAM,cAAc,CAAA;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,eAAO,MAAM,IAAI,sCAAsC,CAAA;AACvD,OAAO,EAAE,yBAAyB,EAAE,OAAO,EAAE,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAE1B,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAExD;AAED,eAAe,yBAAyB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,KAAK,MAAM,EAAE,MAAM,cAAc,CAAA;AAClG,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,eAAO,MAAM,IAAI,sCAAsC,CAAA;AACvD,OAAO,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,OAAO,EAAE,CAAA;AAC1E,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,YAAY,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAA;AAChE,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,uBAAuB,CAAA;AACrC,cAAc,eAAe,CAAA;AAC7B,YAAY,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAA;AAC7E,OAAO,EAAE,qCAAqC,EAAE,MAAM,gCAAgC,CAAA;AACtF,YAAY,EAAE,6BAA6B,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAA;AAC1G,YAAY,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AACvE,OAAO,EAAE,qCAAqC,EAAE,MAAM,gCAAgC,CAAA;AACtF,YAAY,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAA;AACnF,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,uBAAuB,CAAA;AACrC,YAAY,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAA;AACpF,mBAAmB,6BAA6B,CAAA;AAChD,OAAO,EAAE,sCAAsC,EAAE,MAAM,iCAAiC,CAAA;AACxF,YAAY,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAA;AACrF,YAAY,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAA;AAC5E,cAAc,4BAA4B,CAAA;AAC1C,cAAc,sBAAsB,CAAA;AACpC,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,OAAO,EAAE,oCAAoC,EAAE,MAAM,+BAA+B,CAAA;AACpF,YAAY,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAA;AACjF,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,mBAAmB,uBAAuB,CAAA;AAC1C,YAAY,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAE9E,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAExD;AAED,eAAe,yBAAyB,CAAA;AAExC,YAAY,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AACxF,YAAY,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAA"}
package/lib/index.js CHANGED
@@ -1,14 +1,23 @@
1
- import { PluginControlPlaneService } from './service.js';
1
+ import { PluginControlPlaneService, normalizeControlPlaneConfig } from './service.js';
2
2
  import { version } from './version.js';
3
3
  export const name = 'dsh-enhanced-plugin-control-plane';
4
- export { PluginControlPlaneService, version };
4
+ export { PluginControlPlaneService, normalizeControlPlaneConfig, version };
5
5
  export { Config } from './service.js';
6
6
  export * from './catalog.js';
7
+ export * from './errors.js';
8
+ export * from './source-workspace.js';
7
9
  export * from './approval.js';
10
+ export { validateSourceApprovalAuthorityConfig } from './source-approval-authority.js';
11
+ export { validateSourceAdoptionAuthorityConfig } from './source-adoption-authority.js';
8
12
  export * from './attestation.js';
9
13
  export * from './host-attestor.js';
14
+ export * from './runtime-observer.js';
15
+ export { validateTaskObservationAuthorityConfig } from './task-observation-authority.js';
16
+ export * from './effect-blocked-replay.js';
17
+ export * from './replay-endpoint.js';
10
18
  export * from './lockfile.js';
11
19
  export * from './release.js';
20
+ export { validateSourceReleaseAuthorityConfig } from './source-release-authority.js';
12
21
  export * from './service.js';
13
22
  export * from './sqlite.js';
14
23
  export * from './store.js';
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAe,MAAM,cAAc,CAAA;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,MAAM,CAAC,MAAM,IAAI,GAAG,mCAAmC,CAAA;AACvD,OAAO,EAAE,yBAAyB,EAAE,OAAO,EAAE,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAE1B,MAAM,UAAU,KAAK,CAAC,GAAY,EAAE,MAAc;IAChD,IAAI,yBAAyB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;AAC5C,CAAC;AAED,eAAe,yBAAyB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,2BAA2B,EAAe,MAAM,cAAc,CAAA;AAClG,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,MAAM,CAAC,MAAM,IAAI,GAAG,mCAAmC,CAAA;AACvD,OAAO,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,OAAO,EAAE,CAAA;AAC1E,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAErC,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,uBAAuB,CAAA;AACrC,cAAc,eAAe,CAAA;AAE7B,OAAO,EAAE,qCAAqC,EAAE,MAAM,gCAAgC,CAAA;AAGtF,OAAO,EAAE,qCAAqC,EAAE,MAAM,gCAAgC,CAAA;AAEtF,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,uBAAuB,CAAA;AAGrC,OAAO,EAAE,sCAAsC,EAAE,MAAM,iCAAiC,CAAA;AAGxF,cAAc,4BAA4B,CAAA;AAC1C,cAAc,sBAAsB,CAAA;AACpC,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,OAAO,EAAE,oCAAoC,EAAE,MAAM,+BAA+B,CAAA;AAEpF,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAI1B,MAAM,UAAU,KAAK,CAAC,GAAY,EAAE,MAAc;IAChD,IAAI,yBAAyB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;AAC5C,CAAC;AAED,eAAe,yBAAyB,CAAA"}
@@ -0,0 +1,25 @@
1
+ export interface NpmPublishInput {
2
+ locator: string;
3
+ packageName: string;
4
+ version: string;
5
+ tarball: Buffer;
6
+ tag: string;
7
+ expectedRegistryReference: string;
8
+ }
9
+ export interface PreparedNpmPublish {
10
+ url: string;
11
+ body: Buffer;
12
+ }
13
+ export interface NpmPublishSendInput {
14
+ url: string;
15
+ body: Buffer;
16
+ token: string;
17
+ caPins: readonly string[];
18
+ timeoutMs: number;
19
+ }
20
+ export declare function prepareNpmPublish(input: NpmPublishInput): PreparedNpmPublish;
21
+ export declare function sendNpmPublish(input: NpmPublishSendInput): Promise<{
22
+ outcome: 'accepted' | 'ambiguous';
23
+ detailDigest: string;
24
+ }>;
25
+ //# sourceMappingURL=npm-publish.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-publish.d.ts","sourceRoot":"","sources":["../src/npm-publish.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;IACX,yBAAyB,EAAE,MAAM,CAAA;CAClC;AAED,MAAM,WAAW,kBAAkB;IAAG,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AACjE,MAAM,WAAW,mBAAmB;IAAG,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE;AAsH/H,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,GAAG,kBAAkB,CAmB5E;AAGD,wBAAsB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,UAAU,GAAG,WAAW,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,CAgCrI"}
@@ -0,0 +1,280 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { request as httpsRequest } from 'node:https';
3
+ import { isIP } from 'node:net';
4
+ import { gunzipSync } from 'node:zlib';
5
+ const MAX_TGZ = 256 * 1024 * 1024;
6
+ const MAX_INFLATED = 256 * 1024 * 1024;
7
+ const MAX_MANIFEST = 1024 * 1024;
8
+ const MAX_RESPONSE = 2 * 1024 * 1024;
9
+ const PACKAGE = /^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/u;
10
+ const VERSION = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z.-]+)?$/u;
11
+ const TAG = /^[a-z][a-z0-9-]{0,63}$/u;
12
+ function fail(message) { throw new Error(`npm publish: ${message}`); }
13
+ function boundedText(value, label, maximum = 8_192) {
14
+ if (typeof value !== 'string' || value.length === 0 || Buffer.byteLength(value) > maximum
15
+ || [...value].some(character => character.charCodeAt(0) <= 0x20 || character.charCodeAt(0) === 0x7f))
16
+ fail(`${label} is invalid`);
17
+ return value;
18
+ }
19
+ function bareHttps(value, label, allowNpmEscapedSlash = false) {
20
+ boundedText(value, label);
21
+ if (/[\\?#]/u.test(value) || /%(?!2f)/u.test(value))
22
+ fail(`${label} is not a canonical HTTPS URL`);
23
+ let url;
24
+ try {
25
+ url = new URL(value);
26
+ }
27
+ catch {
28
+ fail(`${label} is invalid`);
29
+ }
30
+ const rootWithoutSlash = url.pathname === '/' && url.href === `${value}/`;
31
+ if (url.protocol !== 'https:' || url.username || url.password || url.search || url.hash || url.pathname.includes('//')
32
+ || (!allowNpmEscapedSlash && value.includes('%2f')) || (url.href !== value && !rootWithoutSlash))
33
+ fail(`${label} is not a canonical HTTPS URL`);
34
+ return url;
35
+ }
36
+ function basePath(base) { return base.pathname.endsWith('/') ? base.pathname : `${base.pathname}/`; }
37
+ function atBase(base, suffix) {
38
+ const target = new URL(base);
39
+ target.pathname = `${basePath(base)}${suffix}`;
40
+ return target;
41
+ }
42
+ function verifyReference(value, base) {
43
+ const reference = bareHttps(value, 'expected registry reference');
44
+ if (reference.origin !== base.origin || !reference.pathname.startsWith(basePath(base)))
45
+ fail('expected registry reference is outside the configured registry base');
46
+ return reference.href;
47
+ }
48
+ function readString(bytes, offset, length) {
49
+ const field = bytes.subarray(offset, offset + length);
50
+ const end = field.indexOf(0);
51
+ return field.subarray(0, end < 0 ? field.length : end).toString('utf8');
52
+ }
53
+ function octal(bytes, offset, length, label) {
54
+ const raw = readString(bytes, offset, length).trim();
55
+ if (raw === '')
56
+ return 0;
57
+ if (!/^[0-7]+$/u.test(raw))
58
+ fail(`tar ${label} is invalid`);
59
+ const value = Number.parseInt(raw, 8);
60
+ if (!Number.isSafeInteger(value) || value < 0)
61
+ fail(`tar ${label} is invalid`);
62
+ return value;
63
+ }
64
+ function checksum(header) {
65
+ const stored = octal(header, 148, 8, 'checksum');
66
+ let sum = 0;
67
+ for (let index = 0; index < 512; index++)
68
+ sum += index >= 148 && index < 156 ? 32 : header[index];
69
+ if (sum !== stored)
70
+ fail('tar header checksum is invalid');
71
+ }
72
+ function safePath(value, permitTerminalSlash = false) {
73
+ const path = permitTerminalSlash && value.endsWith('/') ? value.slice(0, -1) : value;
74
+ if (!path || value.includes('\0') || value.includes('\\') || value.startsWith('/') || path.split('/').some(part => part === '' || part === '.' || part === '..'))
75
+ fail('tar path is unsafe');
76
+ return value;
77
+ }
78
+ function paxPath(payload) {
79
+ let offset = 0;
80
+ let path;
81
+ while (offset < payload.length) {
82
+ const space = payload.indexOf(0x20, offset);
83
+ if (space < 0)
84
+ fail('PAX record is invalid');
85
+ const lengthText = payload.subarray(offset, space).toString('ascii');
86
+ if (!/^[1-9]\d*$/u.test(lengthText))
87
+ fail('PAX record is invalid');
88
+ const length = Number(lengthText);
89
+ if (!Number.isSafeInteger(length) || length <= space - offset + 1 || offset + length > payload.length)
90
+ fail('PAX record is invalid');
91
+ const record = payload.subarray(space + 1, offset + length);
92
+ if (record[record.length - 1] !== 0x0a)
93
+ fail('PAX record is invalid');
94
+ const equal = record.indexOf(0x3d);
95
+ if (equal < 1)
96
+ fail('PAX record is invalid');
97
+ const key = record.subarray(0, equal).toString('utf8');
98
+ const value = record.subarray(equal + 1, -1).toString('utf8');
99
+ if (key === 'path')
100
+ path = safePath(value, true);
101
+ else if (key === 'size' || key === 'linkpath')
102
+ fail(`PAX ${key} is unsupported`);
103
+ else if (!['atime', 'ctime', 'gid', 'gname', 'mtime', 'uid', 'uname'].includes(key))
104
+ fail(`PAX ${key} is unsupported`);
105
+ offset += length;
106
+ }
107
+ return path;
108
+ }
109
+ function packageManifest(tgz) {
110
+ if (!Buffer.isBuffer(tgz) || tgz.length < 1 || tgz.length > MAX_TGZ)
111
+ fail('tarball exceeds the bounded size');
112
+ let tar;
113
+ try {
114
+ tar = Buffer.from(gunzipSync(tgz, { maxOutputLength: MAX_INFLATED }));
115
+ }
116
+ catch {
117
+ fail('tarball is not a bounded gzip stream');
118
+ }
119
+ let offset = 0;
120
+ let zeroBlocks = 0;
121
+ let pendingPath;
122
+ let pendingPax;
123
+ let manifest;
124
+ while (offset < tar.length) {
125
+ if (offset + 512 > tar.length)
126
+ fail('tarball is truncated');
127
+ const header = tar.subarray(offset, offset + 512);
128
+ offset += 512;
129
+ if (header.every(byte => byte === 0)) {
130
+ if (pendingPath !== undefined || pendingPax !== undefined)
131
+ fail('tarball has a dangling extension header');
132
+ zeroBlocks++;
133
+ continue;
134
+ }
135
+ if (zeroBlocks)
136
+ fail('tarball contains data after its terminator');
137
+ checksum(header);
138
+ const size = octal(header, 124, 12, 'size');
139
+ const type = String.fromCharCode(header[156] || 0);
140
+ const padded = Math.ceil(size / 512) * 512;
141
+ if (offset + padded > tar.length)
142
+ fail('tarball is truncated');
143
+ const payload = tar.subarray(offset, offset + size);
144
+ offset += padded;
145
+ if (type === 'x') {
146
+ if (pendingPath !== undefined || pendingPax !== undefined)
147
+ fail('tarball has stacked extension headers');
148
+ pendingPax = { path: paxPath(payload) };
149
+ continue;
150
+ }
151
+ if (type === 'L') {
152
+ if (pendingPath !== undefined || pendingPax !== undefined)
153
+ fail('tarball has stacked extension headers');
154
+ pendingPath = safePath(payload.subarray(0, payload.length && payload[payload.length - 1] === 0 ? -1 : payload.length).toString('utf8').replace(/\n$/u, ''), true);
155
+ continue;
156
+ }
157
+ if (type !== '\0' && type !== '0' && type !== '5')
158
+ fail('tarball contains an unsupported entry type');
159
+ const prefix = readString(header, 345, 155);
160
+ const path = pendingPax?.path ?? pendingPath ?? safePath(`${prefix}${prefix ? '/' : ''}${readString(header, 0, 100)}`, type === '5');
161
+ pendingPax = undefined;
162
+ pendingPath = undefined;
163
+ if (type === '5') {
164
+ if (size !== 0 || !path.endsWith('/'))
165
+ fail('tar directory entry is invalid');
166
+ continue;
167
+ }
168
+ if (path.endsWith('/'))
169
+ fail('tar file path is unsafe');
170
+ if (path === 'package/package.json') {
171
+ if (manifest !== undefined)
172
+ fail('tarball contains duplicate package manifests');
173
+ if (payload.length > MAX_MANIFEST)
174
+ fail('package manifest exceeds the bounded size');
175
+ try {
176
+ const parsed = JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(payload));
177
+ if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed))
178
+ fail('package manifest is invalid');
179
+ manifest = parsed;
180
+ }
181
+ catch (error) {
182
+ if (error instanceof Error && error.message.startsWith('npm publish:'))
183
+ throw error;
184
+ fail('package manifest is invalid');
185
+ }
186
+ }
187
+ }
188
+ if (zeroBlocks < 2 || manifest === undefined)
189
+ fail('tarball has no unique package/package.json');
190
+ return manifest;
191
+ }
192
+ export function prepareNpmPublish(input) {
193
+ if (!PACKAGE.test(input.packageName))
194
+ fail('package name is invalid');
195
+ if (!VERSION.test(input.version))
196
+ fail('package version is invalid');
197
+ if (!TAG.test(input.tag))
198
+ fail('dist-tag is invalid');
199
+ const base = bareHttps(input.locator, 'registry locator');
200
+ const expected = verifyReference(input.expectedRegistryReference, base);
201
+ const manifest = packageManifest(input.tarball);
202
+ if (manifest.name !== input.packageName || manifest.version !== input.version || manifest.private)
203
+ fail('package manifest does not match the authorized public package');
204
+ if (Object.hasOwn(manifest, 'packageExtensions'))
205
+ fail('package manifest contains packageExtensions');
206
+ const tarballName = `${input.packageName}-${input.version}.tgz`;
207
+ const sha512 = createHash('sha512').update(input.tarball).digest('base64');
208
+ const sha1 = createHash('sha1').update(input.tarball).digest('hex');
209
+ const version = { ...manifest, _id: `${input.packageName}@${input.version}`, dist: { integrity: `sha512-${sha512}`, shasum: sha1, tarball: expected } };
210
+ delete version.patchedDependencies;
211
+ const body = Buffer.from(JSON.stringify({ _id: input.packageName, name: input.packageName,
212
+ description: typeof manifest.description === 'string' ? manifest.description : '', access: 'public', versions: { [input.version]: version },
213
+ 'dist-tags': { [input.tag]: input.version }, _attachments: { [tarballName]: { content_type: 'application/octet-stream', data: input.tarball.toString('base64'), length: input.tarball.length } } }));
214
+ if (body.length > 402_653_184)
215
+ fail('publish body exceeds the bounded size');
216
+ return { url: atBase(base, input.packageName.replace('/', '%2f')).href, body };
217
+ }
218
+ function detail(code) { return createHash('sha256').update(code).digest('hex'); }
219
+ export async function sendNpmPublish(input) {
220
+ const url = bareHttps(input.url, 'publish URL', true);
221
+ if (!Buffer.isBuffer(input.body) || input.body.length < 1 || input.body.length > 402_653_184)
222
+ fail('publish body is invalid');
223
+ if (typeof input.token !== 'string' || input.token.length < 1 || /[^\x21-\x7e]/u.test(input.token))
224
+ fail('publish token is invalid');
225
+ if (!Number.isSafeInteger(input.timeoutMs) || input.timeoutMs < 1 || input.timeoutMs > 120_000)
226
+ fail('publish timeout is invalid');
227
+ if (!Array.isArray(input.caPins) || input.caPins.some(pin => typeof pin !== 'string' || pin.length < 1))
228
+ fail('owner CA pins are invalid');
229
+ const deadline = performance.now() + input.timeoutMs;
230
+ return await new Promise(resolve => {
231
+ let req;
232
+ let response;
233
+ let settled = false;
234
+ const finish = (outcome, code) => {
235
+ if (settled)
236
+ return;
237
+ settled = true;
238
+ clearTimeout(timer);
239
+ response?.destroy();
240
+ req?.destroy();
241
+ resolve({ outcome, detailDigest: detail(code) });
242
+ };
243
+ const timer = setTimeout(() => finish('ambiguous', 'timeout'), Math.max(1, deadline - performance.now()));
244
+ try {
245
+ req = httpsRequest(url, { method: 'PUT', agent: false, rejectUnauthorized: true, ...(input.caPins.length ? { ca: [...input.caPins] } : {}), ...(isIP(url.hostname) === 0 ? { servername: url.hostname } : {}), headers: { authorization: `Bearer ${input.token}`, 'content-type': 'application/json', 'content-length': String(input.body.length), accept: 'application/json', 'accept-encoding': 'identity' } }, incoming => {
246
+ response = incoming;
247
+ const status = incoming.statusCode ?? 0;
248
+ const encoding = incoming.headers['content-encoding'];
249
+ const length = incoming.headers['content-length'];
250
+ if (encoding !== undefined && encoding !== 'identity') {
251
+ finish('ambiguous', `encoding:${status}`);
252
+ return;
253
+ }
254
+ if (length !== undefined && (!/^\d{1,10}$/u.test(length) || Number(length) > MAX_RESPONSE)) {
255
+ finish('ambiguous', `length:${status}`);
256
+ return;
257
+ }
258
+ let size = 0;
259
+ incoming.on('data', (chunk) => { size += chunk.length; if (size > MAX_RESPONSE)
260
+ finish('ambiguous', `body:${status}`); });
261
+ incoming.on('aborted', () => finish('ambiguous', `aborted:${status}`));
262
+ incoming.on('error', () => finish('ambiguous', `response-error:${status}`));
263
+ incoming.on('end', () => {
264
+ if (performance.now() >= deadline)
265
+ finish('ambiguous', 'timeout');
266
+ else if (length !== undefined && size !== Number(length))
267
+ finish('ambiguous', `truncated:${status}`);
268
+ else
269
+ finish(status === 200 || status === 201 ? 'accepted' : 'ambiguous', `status:${status}`);
270
+ });
271
+ });
272
+ req.on('error', () => finish('ambiguous', 'request-error'));
273
+ req.end(input.body);
274
+ }
275
+ catch {
276
+ finish('ambiguous', 'request-start-error');
277
+ }
278
+ });
279
+ }
280
+ //# sourceMappingURL=npm-publish.js.map