@vibesdotdev/infra-deploy 1.0.0-rc.4 → 1.0.0-rc.6
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/cli/npm/infra-npm-mirror.cli-command.descriptor.d.ts +13 -7
- package/dist/cli/npm/infra-npm-mirror.cli-command.descriptor.d.ts.map +1 -1
- package/dist/cli/npm/infra-npm-mirror.cli-command.descriptor.js +15 -7
- package/dist/cli/npm/infra-npm-mirror.cli-command.descriptor.js.map +1 -1
- package/dist/cli/npm/infra-npm-mirror.cli-command.impl.d.ts +1 -1
- package/dist/cli/npm/infra-npm-mirror.cli-command.impl.d.ts.map +1 -1
- package/dist/cli/npm/infra-npm-mirror.cli-command.impl.js +45 -19
- package/dist/cli/npm/infra-npm-mirror.cli-command.impl.js.map +1 -1
- package/dist/cli/npm/infra-npm-publish.cli-command.descriptor.d.ts +3 -0
- package/dist/cli/npm/infra-npm-publish.cli-command.descriptor.d.ts.map +1 -1
- package/dist/cli/npm/infra-npm-publish.cli-command.descriptor.js +4 -0
- package/dist/cli/npm/infra-npm-publish.cli-command.descriptor.js.map +1 -1
- package/dist/cli/npm/infra-npm-publish.cli-command.impl.d.ts +5 -0
- package/dist/cli/npm/infra-npm-publish.cli-command.impl.d.ts.map +1 -1
- package/dist/cli/npm/infra-npm-publish.cli-command.impl.js +44 -6
- package/dist/cli/npm/infra-npm-publish.cli-command.impl.js.map +1 -1
- package/dist/cli/npm/mirror-registry-artifacts.d.ts +46 -19
- package/dist/cli/npm/mirror-registry-artifacts.d.ts.map +1 -1
- package/dist/cli/npm/mirror-registry-artifacts.js +82 -97
- package/dist/cli/npm/mirror-registry-artifacts.js.map +1 -1
- package/dist/cli/npm/npm-protocol-package-registry.d.ts +32 -0
- package/dist/cli/npm/npm-protocol-package-registry.d.ts.map +1 -0
- package/dist/cli/npm/npm-protocol-package-registry.js +237 -0
- package/dist/cli/npm/npm-protocol-package-registry.js.map +1 -0
- package/dist/cli/npm/publish/publish-to-mirror.d.ts +28 -0
- package/dist/cli/npm/publish/publish-to-mirror.d.ts.map +1 -0
- package/dist/cli/npm/publish/publish-to-mirror.js +36 -0
- package/dist/cli/npm/publish/publish-to-mirror.js.map +1 -0
- package/dist/cli/npm/publish/registry-reads.d.ts +1 -0
- package/dist/cli/npm/publish/registry-reads.d.ts.map +1 -1
- package/dist/cli/npm/publish/registry-reads.js +33 -1
- package/dist/cli/npm/publish/registry-reads.js.map +1 -1
- package/dist/cli/npm/put-attested-packument.d.ts +46 -0
- package/dist/cli/npm/put-attested-packument.d.ts.map +1 -1
- package/dist/cli/npm/put-attested-packument.js +123 -10
- package/dist/cli/npm/put-attested-packument.js.map +1 -1
- package/dist/cli/npm/registries/npmjs.package-registry.descriptor.d.ts +56 -0
- package/dist/cli/npm/registries/npmjs.package-registry.descriptor.d.ts.map +1 -0
- package/dist/cli/npm/registries/npmjs.package-registry.descriptor.js +16 -0
- package/dist/cli/npm/registries/npmjs.package-registry.descriptor.js.map +1 -0
- package/dist/cli/npm/registries/package-registries.plugin.d.ts +3 -0
- package/dist/cli/npm/registries/package-registries.plugin.d.ts.map +1 -0
- package/dist/cli/npm/registries/package-registries.plugin.js +44 -0
- package/dist/cli/npm/registries/package-registries.plugin.js.map +1 -0
- package/dist/cli/npm/registries/resolve-package-registry.d.ts +29 -0
- package/dist/cli/npm/registries/resolve-package-registry.d.ts.map +1 -0
- package/dist/cli/npm/registries/resolve-package-registry.js +58 -0
- package/dist/cli/npm/registries/resolve-package-registry.js.map +1 -0
- package/dist/cli/npm/registries/vibes-registry.package-registry.descriptor.d.ts +53 -0
- package/dist/cli/npm/registries/vibes-registry.package-registry.descriptor.d.ts.map +1 -0
- package/dist/cli/npm/registries/vibes-registry.package-registry.descriptor.js +12 -0
- package/dist/cli/npm/registries/vibes-registry.package-registry.descriptor.js.map +1 -0
- package/dist/cli/run/deployment-provider.d.ts +4 -9
- package/dist/cli/run/deployment-provider.d.ts.map +1 -1
- package/dist/cli/run/deployment-provider.js +7 -28
- package/dist/cli/run/deployment-provider.js.map +1 -1
- package/dist/cli/run/immutable-deployment-release.program.d.ts +1 -0
- package/dist/cli/run/immutable-deployment-release.program.d.ts.map +1 -1
- package/dist/cli/run/immutable-deployment-release.program.js +2 -6
- package/dist/cli/run/immutable-deployment-release.program.js.map +1 -1
- package/dist/cli/run/infra-deploy.run.cli-command.descriptor.d.ts +0 -3
- package/dist/cli/run/infra-deploy.run.cli-command.descriptor.d.ts.map +1 -1
- package/dist/cli/run/infra-deploy.run.cli-command.descriptor.js +0 -1
- package/dist/cli/run/infra-deploy.run.cli-command.descriptor.js.map +1 -1
- package/dist/cli/run/infra-deploy.run.cli-command.impl.d.ts.map +1 -1
- package/dist/cli/run/infra-deploy.run.cli-command.impl.js +18 -42
- package/dist/cli/run/infra-deploy.run.cli-command.impl.js.map +1 -1
- package/dist/cli/shared/build-workspace-artifacts.d.ts +7 -2
- package/dist/cli/shared/build-workspace-artifacts.d.ts.map +1 -1
- package/dist/cli/shared/build-workspace-artifacts.js +41 -5
- package/dist/cli/shared/build-workspace-artifacts.js.map +1 -1
- package/dist/cli/shared/workspace-artifact-store.d.ts +14 -0
- package/dist/cli/shared/workspace-artifact-store.d.ts.map +1 -0
- package/dist/cli/shared/workspace-artifact-store.js +53 -0
- package/dist/cli/shared/workspace-artifact-store.js.map +1 -0
- package/dist/cli/workers/doks-worker-runtime.d.ts +1 -0
- package/dist/cli/workers/doks-worker-runtime.d.ts.map +1 -1
- package/dist/infra-deploy.plugin.d.ts.map +1 -1
- package/dist/infra-deploy.plugin.js +2 -0
- package/dist/infra-deploy.plugin.js.map +1 -1
- package/package.json +14 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mirror-registry-artifacts.d.ts","sourceRoot":"","sources":["../../../src/cli/npm/mirror-registry-artifacts.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"mirror-registry-artifacts.d.ts","sourceRoot":"","sources":["../../../src/cli/npm/mirror-registry-artifacts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,eAAe,EAAU,gBAAgB,EAAsB,MAAM,qBAAqB,CAAC;AACpG,OAAO,KAAK,EAAE,6BAA6B,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAE1G,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAG1E,8FAA8F;AAC9F,MAAM,MAAM,aAAa;AACxB,iEAAiE;AAC/D;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE;AACtF,iFAAiF;GAC/E;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE;AACrF,gFAAgF;GAC9E;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE;AACpF,kEAAkE;GAChE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE;AAClD,mFAAmF;GACjF;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACjG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,OAAO,EAAE,sBAAsB,CAAA;CAAE;AAC9I,0GAA0G;GACxG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,eAAe,CAAC,SAAS,CAAC,CAAA;CAAE,CAAC;AAQzJ,wBAAsB,uBAAuB,CAAC,OAAO,EAAE;IACtD,MAAM,EAAE,6BAA6B,CAAC;IACtC,MAAM,EAAE,6BAA6B,CAAC;IACtC,4EAA4E;IAC5E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,kFAAkF;IAClF,YAAY,CAAC,EAAE,2BAA2B,CAAC;IAC3C,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;CAC7C,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAmB3B"}
|
|
@@ -1,114 +1,99 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* A mirror registry carries the exact bytes of its source registry at the source's
|
|
3
|
+
* versions and tags. Both are `infra/package-registry` implementations. For each
|
|
3
4
|
* package, in the dependency order the caller passes (leaves first), the mirror reads
|
|
4
|
-
* the source
|
|
5
|
-
* eligible)
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* the source's release tags anonymously (only what the source serves publicly is
|
|
6
|
+
* eligible): the one tag asked for, or every tag the source serves. Each tagged
|
|
7
|
+
* version the target lacks is fetched at its recorded integrity and written as the
|
|
8
|
+
* same bytes (accepted is published; the next run reads it back as present); a
|
|
9
|
+
* version the target already holds has its tag moved when it differs.
|
|
10
|
+
* Nothing is re-packed or re-versioned.
|
|
8
11
|
*
|
|
9
12
|
* A refusal or failure is reported for that package and the mirror continues.
|
|
10
13
|
*/
|
|
11
|
-
import { settle, valueFreeFailure } from '@vibesdotdev/kernel';
|
|
14
|
+
import { CapabilityError, settle, valueFreeFailure } from '@vibesdotdev/kernel';
|
|
12
15
|
import { z } from 'zod/v4';
|
|
13
|
-
import {
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
+
import { sha1Hex } from "./npm-protocol-package-registry.js";
|
|
17
|
+
const RefusalSchema = z.object({
|
|
18
|
+
message: z.string(),
|
|
19
|
+
reason: z.literal('registry-put-failed'),
|
|
20
|
+
details: z.object({ status: z.number(), retryAfter: z.string().optional(), contentType: z.string().optional(), notice: z.string().optional() })
|
|
16
21
|
});
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
22
|
+
export async function mirrorRegistryArtifacts(options) {
|
|
23
|
+
const settled = new Map();
|
|
24
|
+
let next = 0;
|
|
25
|
+
const lane = async () => {
|
|
26
|
+
for (let index = next++; index < options.packages.length; index = next++) {
|
|
27
|
+
const name = options.packages[index];
|
|
28
|
+
const outcomes = [];
|
|
29
|
+
const report = (outcome) => {
|
|
30
|
+
outcomes.push(outcome);
|
|
31
|
+
options.onOutcome?.(outcome);
|
|
32
|
+
};
|
|
33
|
+
const mirrored = await settle(() => mirrorOne({ ...options, name, report }));
|
|
34
|
+
if (!mirrored.ok)
|
|
35
|
+
report(failedOutcome(name, undefined, mirrored.cause));
|
|
36
|
+
settled.set(name, outcomes);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
await Promise.all(Array.from({ length: Math.max(1, Math.min(options.concurrency ?? 1, options.packages.length)) }, lane));
|
|
40
|
+
// Outcomes keep the caller's dependency order, whichever lane finished first.
|
|
41
|
+
return options.packages.flatMap((name) => settled.get(name) ?? []);
|
|
34
42
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
await response.body?.cancel();
|
|
44
|
-
throw new Error(`packument read ${url} failed (${response.status})`);
|
|
43
|
+
function failedOutcome(name, tag, cause) {
|
|
44
|
+
const outcome = { name, state: 'failed', failure: valueFreeFailure(cause) };
|
|
45
|
+
if (tag !== undefined)
|
|
46
|
+
outcome.tag = tag;
|
|
47
|
+
if (cause instanceof CapabilityError) {
|
|
48
|
+
outcome.message = cause.message;
|
|
49
|
+
if (cause.details !== undefined)
|
|
50
|
+
outcome.details = cause.details;
|
|
45
51
|
}
|
|
46
|
-
return
|
|
52
|
+
return outcome;
|
|
47
53
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
const
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
const mirrored = await settle(() => mirrorOne({ ...options, fetchImpl, source, target, name }));
|
|
61
|
-
outcomes.push(mirrored.ok ? mirrored.value : { name, state: 'failed', failure: valueFreeFailure(mirrored.cause) });
|
|
54
|
+
async function mirrorOne(options) {
|
|
55
|
+
const { name, source, report } = options;
|
|
56
|
+
// Anonymous on purpose: eligibility is what the source serves publicly, never a manifest field.
|
|
57
|
+
const read = await source.readReleases(name, { anonymous: true });
|
|
58
|
+
if (read.state === 'absent')
|
|
59
|
+
return report({ name, state: 'restricted' });
|
|
60
|
+
if (options.tag !== undefined && read.tags[options.tag] === undefined)
|
|
61
|
+
return report({ name, state: 'untagged', tag: options.tag });
|
|
62
|
+
const tags = options.tag === undefined ? Object.keys(read.tags).sort() : [options.tag];
|
|
63
|
+
for (const tag of tags) {
|
|
64
|
+
const carried = await settle(() => mirrorTag({ ...options, tag, release: read.tags[tag] }));
|
|
65
|
+
report(carried.ok ? carried.value : failedOutcome(name, tag, carried.cause));
|
|
62
66
|
}
|
|
63
|
-
return outcomes;
|
|
64
67
|
}
|
|
65
|
-
async function
|
|
66
|
-
const { name,
|
|
67
|
-
|
|
68
|
-
const
|
|
69
|
-
if (packument === null)
|
|
70
|
-
return { name, state: 'restricted' };
|
|
71
|
-
const version = packument['dist-tags'][options.tag];
|
|
72
|
-
if (version === undefined)
|
|
73
|
-
return { name, state: 'untagged', tag: options.tag };
|
|
74
|
-
const { dist } = VersionSchema.parse(packument.versions[version]);
|
|
75
|
-
const existing = await targetIntegrity(fetchImpl, options.target, name, version, options.token);
|
|
68
|
+
async function mirrorTag(options) {
|
|
69
|
+
const { name, tag, source, target } = options;
|
|
70
|
+
const { version, integrity } = options.release;
|
|
71
|
+
const existing = await target.versionIntegrity(name, version);
|
|
76
72
|
if (existing !== undefined) {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
throw new Error(`tarball for ${name}@${version} does not match the Registry's dist.integrity`);
|
|
73
|
+
if (existing !== integrity)
|
|
74
|
+
return { name, tag, state: 'conflict', version, source: integrity, target: existing };
|
|
75
|
+
// A packument can lag the write that set this tag, so only a tag that names another version
|
|
76
|
+
// is moved; an absent tag on a version the target holds is not evidence the tag is missing.
|
|
77
|
+
const current = (await target.distTags(name))[tag];
|
|
78
|
+
if (current === undefined || current === version)
|
|
79
|
+
return { name, tag, state: 'present', version, integrity };
|
|
80
|
+
const moved = await settle(() => target.setTag({ name, tag, version, secondFactor: options.secondFactor }));
|
|
81
|
+
if (!moved.ok)
|
|
82
|
+
return refusedOrThrow(name, tag, version, moved.cause);
|
|
83
|
+
return { name, tag, state: 'tagged', version, integrity };
|
|
89
84
|
}
|
|
85
|
+
const bytes = await source.tarball(name, version, integrity);
|
|
90
86
|
const shasum = await sha1Hex(bytes);
|
|
91
|
-
const
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
// The PUT owner reports a registry refusal with its status and redacted `{ error }` text in the message.
|
|
103
|
-
const refusal = z.object({ message: z.string(), details: z.object({ status: z.number() }) }).safeParse(put.cause);
|
|
104
|
-
if (refusal.success)
|
|
105
|
-
return { name, state: 'refused', version, status: refusal.data.details.status, error: refusal.data.message };
|
|
106
|
-
throw put.cause;
|
|
107
|
-
}
|
|
108
|
-
const recorded = await targetIntegrity(fetchImpl, options.target, name, version, options.token);
|
|
109
|
-
if (recorded !== dist.integrity) {
|
|
110
|
-
throw new Error(`${name}@${version} was accepted, but the target records ${recorded ?? 'no'} integrity`);
|
|
111
|
-
}
|
|
112
|
-
return { name, state: 'mirrored', version, integrity: recorded };
|
|
87
|
+
const written = await settle(() => target.publish({ bytes, tag, access: 'public', dist: { integrity, shasum }, secondFactor: options.secondFactor }));
|
|
88
|
+
if (!written.ok)
|
|
89
|
+
return refusedOrThrow(name, tag, version, written.cause);
|
|
90
|
+
return { name, tag, state: 'mirrored', version, integrity: written.value.integrity };
|
|
91
|
+
}
|
|
92
|
+
/** A registry refusal (status and redacted `{ error }` text) as an outcome; any other failure stays a failure. */
|
|
93
|
+
function refusedOrThrow(name, tag, version, cause) {
|
|
94
|
+
const refusal = RefusalSchema.safeParse(cause);
|
|
95
|
+
if (!refusal.success)
|
|
96
|
+
throw cause;
|
|
97
|
+
return { name, tag, state: 'refused', version, status: refusal.data.details.status, error: refusal.data.message, refusal: refusal.data.details };
|
|
113
98
|
}
|
|
114
99
|
//# sourceMappingURL=mirror-registry-artifacts.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mirror-registry-artifacts.js","sourceRoot":"","sources":["../../../src/cli/npm/mirror-registry-artifacts.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"mirror-registry-artifacts.js","sourceRoot":"","sources":["../../../src/cli/npm/mirror-registry-artifacts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The npm registry protocol as an `infra/package-registry` implementation: the
|
|
3
|
+
* Vibes Registry and public npm both answer it. Reads go through the packument
|
|
4
|
+
* (`GET /<name>`) and the version document, writes through the attested publish
|
|
5
|
+
* PUT; a write returns when the registry accepts it.
|
|
6
|
+
*
|
|
7
|
+
* The credential comes from the runtime Secrets owner under the descriptor's
|
|
8
|
+
* `publish.credential.secret` and is never printed. The second factor follows
|
|
9
|
+
* `publish.secondFactor`; a write that the descriptor says needs one refuses
|
|
10
|
+
* typed when the caller hands none.
|
|
11
|
+
*/
|
|
12
|
+
import { type VibesRuntime } from '@vibesdotdev/kernel';
|
|
13
|
+
import type { PackageRegistryDescriptor, PackageRegistryImplementation } from '@vibesdotdev/infra-core';
|
|
14
|
+
/** The adapter id an `infra/package-registry` descriptor names to select this implementation. */
|
|
15
|
+
export declare const NPM_PROTOCOL_ADAPTER = "npm-protocol";
|
|
16
|
+
/** The npm `dist.integrity` of `bytes`. */
|
|
17
|
+
export declare function sha512Integrity(bytes: Uint8Array): Promise<string>;
|
|
18
|
+
/** The npm `dist.shasum` of `bytes`. */
|
|
19
|
+
export declare function sha1Hex(bytes: Uint8Array): Promise<string>;
|
|
20
|
+
export type NpmProtocolRegistryOptions = {
|
|
21
|
+
descriptor: PackageRegistryDescriptor;
|
|
22
|
+
runtime: VibesRuntime;
|
|
23
|
+
/** The Secrets environment the credential is read from; the runtime's selected one when absent. */
|
|
24
|
+
environment?: string;
|
|
25
|
+
fetchImpl?: typeof fetch;
|
|
26
|
+
/** The `npm-session` id npm's client sends on every request of one command. */
|
|
27
|
+
session?: string;
|
|
28
|
+
/** Reads the publish credential; the runtime Secrets owner under `publish.credential.secret` by default. */
|
|
29
|
+
credential?: () => Promise<string | undefined>;
|
|
30
|
+
};
|
|
31
|
+
export declare function createNpmProtocolPackageRegistry(options: NpmProtocolRegistryOptions): PackageRegistryImplementation;
|
|
32
|
+
//# sourceMappingURL=npm-protocol-package-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"npm-protocol-package-registry.d.ts","sourceRoot":"","sources":["../../../src/cli/npm/npm-protocol-package-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAA2B,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEjF,OAAO,KAAK,EACX,yBAAyB,EACzB,6BAA6B,EAK7B,MAAM,yBAAyB,CAAC;AAQjC,iGAAiG;AACjG,eAAO,MAAM,oBAAoB,iBAAiB,CAAC;AAenD,2CAA2C;AAC3C,wBAAsB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAExE;AAED,wCAAwC;AACxC,wBAAsB,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAEhE;AASD,MAAM,MAAM,0BAA0B,GAAG;IACxC,UAAU,EAAE,yBAAyB,CAAC;IACtC,OAAO,EAAE,YAAY,CAAC;IACtB,mGAAmG;IACnG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4GAA4G;IAC5G,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CAC/C,CAAC;AAEF,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,0BAA0B,GAAG,6BAA6B,CA+MnH"}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The npm registry protocol as an `infra/package-registry` implementation: the
|
|
3
|
+
* Vibes Registry and public npm both answer it. Reads go through the packument
|
|
4
|
+
* (`GET /<name>`) and the version document, writes through the attested publish
|
|
5
|
+
* PUT; a write returns when the registry accepts it.
|
|
6
|
+
*
|
|
7
|
+
* The credential comes from the runtime Secrets owner under the descriptor's
|
|
8
|
+
* `publish.credential.secret` and is never printed. The second factor follows
|
|
9
|
+
* `publish.secondFactor`; a write that the descriptor says needs one refuses
|
|
10
|
+
* typed when the caller hands none.
|
|
11
|
+
*/
|
|
12
|
+
import { CapabilityError, settle } from '@vibesdotdev/kernel';
|
|
13
|
+
import { serviceOrigin } from '@vibesdotdev/infra-core/service';
|
|
14
|
+
import { z } from 'zod/v4';
|
|
15
|
+
import { bytesToBase64, putAttestedPackument, registryErrorText, registryRefusalDetails, writeWithSecondFactor } from "./put-attested-packument.js";
|
|
16
|
+
import { normalizeRegistryUrl, resolveTokenFromSecrets } from "./publish/registry-credentials.js";
|
|
17
|
+
/** The packument media types npm's client sends (npm-registry-fetch `corgiDoc`, then full JSON). */
|
|
18
|
+
const NPM_PACKUMENT_ACCEPT = 'application/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8, */*';
|
|
19
|
+
/** The adapter id an `infra/package-registry` descriptor names to select this implementation. */
|
|
20
|
+
export const NPM_PROTOCOL_ADAPTER = 'npm-protocol';
|
|
21
|
+
const VersionSchema = z.object({
|
|
22
|
+
dist: z.object({ tarball: z.string().url(), integrity: z.string().startsWith('sha512-') })
|
|
23
|
+
});
|
|
24
|
+
const PackumentSchema = z.object({
|
|
25
|
+
'dist-tags': z.record(z.string(), z.string()).default({}),
|
|
26
|
+
versions: z.record(z.string(), z.unknown()).default({})
|
|
27
|
+
});
|
|
28
|
+
async function digest(algorithm, bytes) {
|
|
29
|
+
return new Uint8Array(await crypto.subtle.digest(algorithm, new Uint8Array(bytes)));
|
|
30
|
+
}
|
|
31
|
+
/** The npm `dist.integrity` of `bytes`. */
|
|
32
|
+
export async function sha512Integrity(bytes) {
|
|
33
|
+
return `sha512-${bytesToBase64(await digest('SHA-512', bytes))}`;
|
|
34
|
+
}
|
|
35
|
+
/** The npm `dist.shasum` of `bytes`. */
|
|
36
|
+
export async function sha1Hex(bytes) {
|
|
37
|
+
return [...(await digest('SHA-1', bytes))].map((byte) => byte.toString(16).padStart(2, '0')).join('');
|
|
38
|
+
}
|
|
39
|
+
/** A packument version's `dist`; a version without a tarball and sha512 integrity refuses typed. */
|
|
40
|
+
function versionDist(entry, where) {
|
|
41
|
+
const version = VersionSchema.safeParse(entry);
|
|
42
|
+
if (version.success)
|
|
43
|
+
return version.data.dist;
|
|
44
|
+
throw new CapabilityError(`${where} has no tarball with a sha512 integrity`, 'UNAVAILABLE', { reason: 'registry-version-invalid' });
|
|
45
|
+
}
|
|
46
|
+
export function createNpmProtocolPackageRegistry(options) {
|
|
47
|
+
const { descriptor, runtime } = options;
|
|
48
|
+
const fetchImpl = options.fetchImpl ?? fetch;
|
|
49
|
+
const session = options.session ?? crypto.randomUUID().replaceAll('-', '').slice(0, 16);
|
|
50
|
+
let origin;
|
|
51
|
+
let token;
|
|
52
|
+
const readCredential = async () => options.credential === undefined
|
|
53
|
+
? resolveTokenFromSecrets(runtime, descriptor.publish.credential.secret, { environment: options.environment })
|
|
54
|
+
: { value: await options.credential(), environment: options.environment ?? 'supplied' };
|
|
55
|
+
// What a registry serves its installers is the anonymous view when it needs no credential to read
|
|
56
|
+
// (an authenticated read of public npm can omit published versions).
|
|
57
|
+
const readsAnonymously = !descriptor.authRequired || descriptor.publish === undefined;
|
|
58
|
+
const resolveOrigin = () => (origin ??= descriptor.url !== undefined
|
|
59
|
+
? Promise.resolve(normalizeRegistryUrl(descriptor.url))
|
|
60
|
+
: serviceOrigin(runtime, descriptor.service).then(normalizeRegistryUrl));
|
|
61
|
+
/** The credential when the descriptor names one; `undefined` when it names none. */
|
|
62
|
+
const resolveToken = () => (token ??= descriptor.publish === undefined
|
|
63
|
+
? Promise.resolve(undefined)
|
|
64
|
+
: readCredential().then((credential) => {
|
|
65
|
+
if (credential.value !== undefined)
|
|
66
|
+
return credential.value;
|
|
67
|
+
throw new CapabilityError(`No ${descriptor.publish.credential.secret} in the ${credential.environment} secrets for package registry ${descriptor.id}. Store it with \`vibes secrets set ${descriptor.publish.credential.secret}\`.`, 'PERMISSION_DENIED', { reason: 'package-registry-credential-missing', details: { registry: descriptor.id, secret: descriptor.publish.credential.secret, environment: credential.environment } });
|
|
68
|
+
}));
|
|
69
|
+
/** A packument read: `null` when the registry answers 404 (absent, or not served to this reader). */
|
|
70
|
+
async function readPackument(name, anonymous) {
|
|
71
|
+
const url = `${await resolveOrigin()}/${encodeURIComponent(name)}`;
|
|
72
|
+
const credential = anonymous ? undefined : await resolveToken();
|
|
73
|
+
// npm's own client asks for the install document first. Public npm serves it fresh after a
|
|
74
|
+
// publish while its full JSON document can still answer a cached 404.
|
|
75
|
+
const headers = new Headers({ accept: NPM_PACKUMENT_ACCEPT });
|
|
76
|
+
if (credential !== undefined)
|
|
77
|
+
headers.set('authorization', `Bearer ${credential}`);
|
|
78
|
+
const secrets = credential === undefined ? [] : [credential];
|
|
79
|
+
const response = await fetchImpl(url, { headers });
|
|
80
|
+
if (response.status === 404) {
|
|
81
|
+
await response.body?.cancel();
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
if (!response.ok) {
|
|
85
|
+
const details = registryRefusalDetails(response, secrets);
|
|
86
|
+
const said = await registryErrorText(response, secrets);
|
|
87
|
+
throw new CapabilityError(`packument read ${url} failed (${response.status})${said === undefined ? '' : `: ${said}`}`, 'UNAVAILABLE', {
|
|
88
|
+
reason: 'registry-packument-read-failed',
|
|
89
|
+
retryable: response.status === 429 || response.status >= 500,
|
|
90
|
+
details
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
const body = await settle(() => response.json());
|
|
94
|
+
const packument = body.ok ? PackumentSchema.safeParse(body.value) : undefined;
|
|
95
|
+
if (packument?.success)
|
|
96
|
+
return packument.data;
|
|
97
|
+
throw new CapabilityError(`packument read ${url} answered ${response.status} with a body that is not a packument`, 'UNAVAILABLE', {
|
|
98
|
+
reason: 'registry-packument-invalid',
|
|
99
|
+
details: registryRefusalDetails(response, secrets)
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* The version document (`GET /<name>/<version>`) first: public npm serves it as soon as
|
|
104
|
+
* a publish lands, while either packument document can lag. A
|
|
105
|
+
* registry without that route (404) is read through its packument.
|
|
106
|
+
*/
|
|
107
|
+
async function versionIntegrity(name, version) {
|
|
108
|
+
const anonymous = readsAnonymously;
|
|
109
|
+
const credential = anonymous ? undefined : await resolveToken();
|
|
110
|
+
const url = `${await resolveOrigin()}/${encodeURIComponent(name)}/${encodeURIComponent(version)}`;
|
|
111
|
+
const headers = new Headers({ accept: 'application/json' });
|
|
112
|
+
if (credential !== undefined)
|
|
113
|
+
headers.set('authorization', `Bearer ${credential}`);
|
|
114
|
+
const response = await fetchImpl(url, { headers });
|
|
115
|
+
if (response.ok) {
|
|
116
|
+
const body = await settle(() => response.json());
|
|
117
|
+
if (body.ok)
|
|
118
|
+
return versionDist(body.value, `${descriptor.id} ${name}@${version}`).integrity;
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
await response.body?.cancel();
|
|
122
|
+
}
|
|
123
|
+
const packument = await readPackument(name, anonymous);
|
|
124
|
+
const entry = packument?.versions[version];
|
|
125
|
+
return entry === undefined ? undefined : versionDist(entry, `${descriptor.id} ${name}@${version}`).integrity;
|
|
126
|
+
}
|
|
127
|
+
/** A write's second factor checked against what the descriptor asks for. */
|
|
128
|
+
function requireSecondFactor(factor) {
|
|
129
|
+
const policy = descriptor.publish;
|
|
130
|
+
if (policy === undefined) {
|
|
131
|
+
throw new CapabilityError(`Package registry ${descriptor.id} declares no publish credential.`, 'PERMISSION_DENIED', {
|
|
132
|
+
reason: 'package-registry-publish-undeclared',
|
|
133
|
+
details: { registry: descriptor.id }
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
if (policy.secondFactor !== 'none' && factor === undefined) {
|
|
137
|
+
throw new CapabilityError(`Package registry ${descriptor.id} asks for a ${policy.secondFactor} second factor on writes.`, 'PERMISSION_DENIED', {
|
|
138
|
+
reason: 'package-registry-second-factor-required',
|
|
139
|
+
details: { registry: descriptor.id, secondFactor: policy.secondFactor }
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
return {
|
|
143
|
+
otp: factor?.kind === 'otp' ? factor.code : undefined,
|
|
144
|
+
webAuth: factor?.kind === 'web' ? { announce: factor.announce, session, retryOnTimeout: factor.retryOnTimeout } : undefined
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
const implementation = {
|
|
148
|
+
config: descriptor,
|
|
149
|
+
forEnvironment: (environment) => createNpmProtocolPackageRegistry({ ...options, environment, session }),
|
|
150
|
+
origin: resolveOrigin,
|
|
151
|
+
async readRelease(name, tag, read = {}) {
|
|
152
|
+
const packument = await readPackument(name, read.anonymous === true);
|
|
153
|
+
if (packument === null)
|
|
154
|
+
return { state: 'absent' };
|
|
155
|
+
const version = packument['dist-tags'][tag];
|
|
156
|
+
if (version === undefined)
|
|
157
|
+
return { state: 'untagged' };
|
|
158
|
+
const { integrity } = versionDist(packument.versions[version], `${descriptor.id} ${name}@${version}`);
|
|
159
|
+
return { state: 'released', release: { version, integrity } };
|
|
160
|
+
},
|
|
161
|
+
async readReleases(name, read = {}) {
|
|
162
|
+
const packument = await readPackument(name, read.anonymous === true);
|
|
163
|
+
if (packument === null)
|
|
164
|
+
return { state: 'absent' };
|
|
165
|
+
const tags = {};
|
|
166
|
+
for (const [tag, version] of Object.entries(packument['dist-tags'])) {
|
|
167
|
+
tags[tag] = { version, integrity: versionDist(packument.versions[version], `${descriptor.id} ${name}@${version}`).integrity };
|
|
168
|
+
}
|
|
169
|
+
return { state: 'released', tags };
|
|
170
|
+
},
|
|
171
|
+
async distTags(name) {
|
|
172
|
+
return (await readPackument(name, readsAnonymously))?.['dist-tags'] ?? {};
|
|
173
|
+
},
|
|
174
|
+
async setTag(input) {
|
|
175
|
+
const factor = requireSecondFactor(input.secondFactor);
|
|
176
|
+
const token = (await resolveToken());
|
|
177
|
+
const response = await writeWithSecondFactor({
|
|
178
|
+
runtime,
|
|
179
|
+
url: `${await resolveOrigin()}/-/package/${encodeURIComponent(input.name)}/dist-tags/${encodeURIComponent(input.tag)}`,
|
|
180
|
+
body: JSON.stringify(input.version),
|
|
181
|
+
token,
|
|
182
|
+
...factor,
|
|
183
|
+
fetchImpl
|
|
184
|
+
});
|
|
185
|
+
if (!response.ok) {
|
|
186
|
+
const details = registryRefusalDetails(response, [token]);
|
|
187
|
+
const said = await registryErrorText(response, [token]);
|
|
188
|
+
throw new CapabilityError(`Dist-tag ${input.tag} → ${input.name}@${input.version} on ${descriptor.id} failed (${response.status})${said === undefined ? '' : `: ${said}`}`, 'UNAVAILABLE', { reason: 'registry-put-failed', retryable: response.status === 429 || response.status >= 500, details });
|
|
189
|
+
}
|
|
190
|
+
await response.body?.cancel();
|
|
191
|
+
},
|
|
192
|
+
versionIntegrity,
|
|
193
|
+
async tarball(name, version, integrity) {
|
|
194
|
+
const packument = await readPackument(name, true);
|
|
195
|
+
const entry = packument?.versions[version];
|
|
196
|
+
if (entry === undefined) {
|
|
197
|
+
throw new CapabilityError(`${descriptor.id} does not serve ${name}@${version}`, 'NOT_FOUND', { reason: 'registry-version-absent' });
|
|
198
|
+
}
|
|
199
|
+
const { tarball } = versionDist(entry, `${descriptor.id} ${name}@${version}`);
|
|
200
|
+
const download = await fetchImpl(tarball);
|
|
201
|
+
if (!download.ok) {
|
|
202
|
+
await download.body?.cancel();
|
|
203
|
+
throw new CapabilityError(`tarball read for ${name}@${version} failed (${download.status})`, 'UNAVAILABLE', {
|
|
204
|
+
reason: 'registry-tarball-read-failed',
|
|
205
|
+
retryable: download.status === 429 || download.status >= 500,
|
|
206
|
+
details: { status: download.status }
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
const bytes = new Uint8Array(await download.arrayBuffer());
|
|
210
|
+
if ((await sha512Integrity(bytes)) !== integrity) {
|
|
211
|
+
throw new CapabilityError(`tarball for ${name}@${version} does not match its recorded integrity`, 'INVALID_INPUT', {
|
|
212
|
+
reason: 'registry-tarball-integrity-mismatch'
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
return bytes;
|
|
216
|
+
},
|
|
217
|
+
async publish(input) {
|
|
218
|
+
const factor = requireSecondFactor(input.secondFactor);
|
|
219
|
+
const put = await putAttestedPackument({
|
|
220
|
+
runtime,
|
|
221
|
+
tarball: { bytes: input.bytes },
|
|
222
|
+
registry: await resolveOrigin(),
|
|
223
|
+
token: (await resolveToken()),
|
|
224
|
+
tag: input.tag,
|
|
225
|
+
access: input.access,
|
|
226
|
+
dist: input.dist,
|
|
227
|
+
...factor,
|
|
228
|
+
fetchImpl
|
|
229
|
+
});
|
|
230
|
+
// Accepted is published: a registry can take minutes to serve a fresh write, and the
|
|
231
|
+
// next read reports it present.
|
|
232
|
+
return { name: put.name, version: put.version, integrity: input.dist.integrity };
|
|
233
|
+
}
|
|
234
|
+
};
|
|
235
|
+
return implementation;
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=npm-protocol-package-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"npm-protocol-package-registry.js","sourceRoot":"","sources":["../../../src/cli/npm/npm-protocol-package-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `vibes infra npm publish <paths> --to <registry>` for a registry whose
|
|
3
|
+
* descriptor names `publish.mirrorOf`: the release never packs for it. The
|
|
4
|
+
* release roots and their workspace dependencies, in dependency order, are
|
|
5
|
+
* carried from the source registry as its exact bytes (`mirrorRegistryArtifacts`).
|
|
6
|
+
*/
|
|
7
|
+
import type { UIContext } from '@vibesdotdev/cli/providers';
|
|
8
|
+
import { type VibesRuntime } from '@vibesdotdev/kernel';
|
|
9
|
+
import type { PackageRegistryImplementation } from '@vibesdotdev/infra-core';
|
|
10
|
+
import type { RegistryReleaseWorkspacePackage } from '@vibesdotdev/registry';
|
|
11
|
+
import { type MirrorOutcome } from '../mirror-registry-artifacts.ts';
|
|
12
|
+
export declare function publishToMirrorRegistry(options: {
|
|
13
|
+
runtime: VibesRuntime;
|
|
14
|
+
ui: UIContext;
|
|
15
|
+
target: PackageRegistryImplementation;
|
|
16
|
+
packageDirs: readonly string[];
|
|
17
|
+
workspace: ReadonlyMap<string, RegistryReleaseWorkspacePackage>;
|
|
18
|
+
tag?: string;
|
|
19
|
+
otp?: string;
|
|
20
|
+
environment?: string;
|
|
21
|
+
quiet: boolean;
|
|
22
|
+
}): Promise<{
|
|
23
|
+
ok: boolean;
|
|
24
|
+
source: string;
|
|
25
|
+
target: string;
|
|
26
|
+
outcomes: MirrorOutcome[];
|
|
27
|
+
}>;
|
|
28
|
+
//# sourceMappingURL=publish-to-mirror.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish-to-mirror.d.ts","sourceRoot":"","sources":["../../../../src/cli/npm/publish/publish-to-mirror.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AAE7E,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAA2B,KAAK,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAI9F,wBAAsB,uBAAuB,CAAC,OAAO,EAAE;IACtD,OAAO,EAAE,YAAY,CAAC;IACtB,EAAE,EAAE,SAAS,CAAC;IACd,MAAM,EAAE,6BAA6B,CAAC;IACtC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,+BAA+B,CAAC,CAAC;IAChE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,OAAO,CAAC;CACf,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,aAAa,EAAE,CAAA;CAAE,CAAC,CA6BtF"}
|