@dsh-enhanced/lark-channel 0.1.48 → 0.1.53

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 (205) hide show
  1. package/README.md +20 -8
  2. package/docs/rsi-setup.md +145 -12
  3. package/docs/setup.md +29 -14
  4. package/docs/supervised-growth.md +2 -0
  5. package/lib/adapter.d.ts +6 -0
  6. package/lib/adapter.d.ts.map +1 -1
  7. package/lib/adapter.js +79 -8
  8. package/lib/adapter.js.map +1 -1
  9. package/lib/business-cli-install.d.ts +9 -0
  10. package/lib/business-cli-install.d.ts.map +1 -0
  11. package/lib/business-cli-install.js +367 -0
  12. package/lib/business-cli-install.js.map +1 -0
  13. package/lib/business-environment.d.ts +2 -0
  14. package/lib/business-environment.d.ts.map +1 -0
  15. package/lib/business-environment.js +16 -0
  16. package/lib/business-environment.js.map +1 -0
  17. package/lib/business-skill.d.ts +32 -0
  18. package/lib/business-skill.d.ts.map +1 -0
  19. package/lib/business-skill.js +202 -0
  20. package/lib/business-skill.js.map +1 -0
  21. package/lib/launchd-control.d.ts +24 -0
  22. package/lib/launchd-control.d.ts.map +1 -0
  23. package/lib/launchd-control.js +68 -0
  24. package/lib/launchd-control.js.map +1 -0
  25. package/lib/launchd-identity.d.ts +34 -0
  26. package/lib/launchd-identity.d.ts.map +1 -0
  27. package/lib/launchd-identity.js +184 -0
  28. package/lib/launchd-identity.js.map +1 -0
  29. package/lib/launchd-target-lock.d.ts +6 -0
  30. package/lib/launchd-target-lock.d.ts.map +1 -0
  31. package/lib/launchd-target-lock.js +48 -0
  32. package/lib/launchd-target-lock.js.map +1 -0
  33. package/lib/launchd.d.ts +18 -0
  34. package/lib/launchd.d.ts.map +1 -1
  35. package/lib/launchd.js +211 -54
  36. package/lib/launchd.js.map +1 -1
  37. package/lib/rsi-authority-config.d.ts +29 -0
  38. package/lib/rsi-authority-config.d.ts.map +1 -0
  39. package/lib/rsi-authority-config.js +233 -0
  40. package/lib/rsi-authority-config.js.map +1 -0
  41. package/lib/rsi-authority-resources.d.ts +36 -0
  42. package/lib/rsi-authority-resources.d.ts.map +1 -0
  43. package/lib/rsi-authority-resources.js +139 -0
  44. package/lib/rsi-authority-resources.js.map +1 -0
  45. package/lib/rsi-authority-runtime.d.ts +50 -0
  46. package/lib/rsi-authority-runtime.d.ts.map +1 -0
  47. package/lib/rsi-authority-runtime.js +393 -0
  48. package/lib/rsi-authority-runtime.js.map +1 -0
  49. package/lib/rsi-bootstrap-manifest.d.ts +39 -0
  50. package/lib/rsi-bootstrap-manifest.d.ts.map +1 -0
  51. package/lib/rsi-bootstrap-manifest.js +345 -0
  52. package/lib/rsi-bootstrap-manifest.js.map +1 -0
  53. package/lib/rsi-bootstrap.d.ts +30 -0
  54. package/lib/rsi-bootstrap.d.ts.map +1 -0
  55. package/lib/rsi-bootstrap.js +363 -0
  56. package/lib/rsi-bootstrap.js.map +1 -0
  57. package/lib/rsi-build.d.ts +54 -0
  58. package/lib/rsi-build.d.ts.map +1 -0
  59. package/lib/rsi-build.js +478 -0
  60. package/lib/rsi-build.js.map +1 -0
  61. package/lib/rsi-creation-build.d.ts +48 -0
  62. package/lib/rsi-creation-build.d.ts.map +1 -0
  63. package/lib/rsi-creation-build.js +363 -0
  64. package/lib/rsi-creation-build.js.map +1 -0
  65. package/lib/rsi-host-authorities.d.ts +18 -0
  66. package/lib/rsi-host-authorities.d.ts.map +1 -0
  67. package/lib/rsi-host-authorities.js +129 -0
  68. package/lib/rsi-host-authorities.js.map +1 -0
  69. package/lib/rsi-host-update.d.ts +113 -0
  70. package/lib/rsi-host-update.d.ts.map +1 -0
  71. package/lib/rsi-host-update.js +316 -0
  72. package/lib/rsi-host-update.js.map +1 -0
  73. package/lib/rsi-install-inputs.d.ts +43 -0
  74. package/lib/rsi-install-inputs.d.ts.map +1 -0
  75. package/lib/rsi-install-inputs.js +342 -0
  76. package/lib/rsi-install-inputs.js.map +1 -0
  77. package/lib/rsi-install.d.ts +54 -0
  78. package/lib/rsi-install.d.ts.map +1 -0
  79. package/lib/rsi-install.js +404 -0
  80. package/lib/rsi-install.js.map +1 -0
  81. package/lib/rsi-local-activation.d.ts +78 -0
  82. package/lib/rsi-local-activation.d.ts.map +1 -0
  83. package/lib/rsi-local-activation.js +485 -0
  84. package/lib/rsi-local-activation.js.map +1 -0
  85. package/lib/rsi-local-cohort.d.ts +70 -0
  86. package/lib/rsi-local-cohort.d.ts.map +1 -0
  87. package/lib/rsi-local-cohort.js +781 -0
  88. package/lib/rsi-local-cohort.js.map +1 -0
  89. package/lib/rsi-local-install.d.ts +68 -0
  90. package/lib/rsi-local-install.d.ts.map +1 -0
  91. package/lib/rsi-local-install.js +322 -0
  92. package/lib/rsi-local-install.js.map +1 -0
  93. package/lib/rsi-local-pair-install.d.ts +38 -0
  94. package/lib/rsi-local-pair-install.d.ts.map +1 -0
  95. package/lib/rsi-local-pair-install.js +200 -0
  96. package/lib/rsi-local-pair-install.js.map +1 -0
  97. package/lib/rsi-local-profile-update.d.ts +25 -0
  98. package/lib/rsi-local-profile-update.d.ts.map +1 -0
  99. package/lib/rsi-local-profile-update.js +226 -0
  100. package/lib/rsi-local-profile-update.js.map +1 -0
  101. package/lib/rsi-local-resources.d.ts +37 -0
  102. package/lib/rsi-local-resources.d.ts.map +1 -0
  103. package/lib/rsi-local-resources.js +184 -0
  104. package/lib/rsi-local-resources.js.map +1 -0
  105. package/lib/rsi-local-roots-extension.d.ts +11 -0
  106. package/lib/rsi-local-roots-extension.d.ts.map +1 -0
  107. package/lib/rsi-local-roots-extension.js +31 -0
  108. package/lib/rsi-local-roots-extension.js.map +1 -0
  109. package/lib/rsi-local-update-build.d.ts +18 -0
  110. package/lib/rsi-local-update-build.d.ts.map +1 -0
  111. package/lib/rsi-local-update-build.js +37 -0
  112. package/lib/rsi-local-update-build.js.map +1 -0
  113. package/lib/rsi-local-update.d.ts +39 -0
  114. package/lib/rsi-local-update.d.ts.map +1 -0
  115. package/lib/rsi-local-update.js +205 -0
  116. package/lib/rsi-local-update.js.map +1 -0
  117. package/lib/rsi-memory-learning.d.ts +30 -0
  118. package/lib/rsi-memory-learning.d.ts.map +1 -0
  119. package/lib/rsi-memory-learning.js +104 -0
  120. package/lib/rsi-memory-learning.js.map +1 -0
  121. package/lib/rsi-native-install.d.ts +38 -0
  122. package/lib/rsi-native-install.d.ts.map +1 -0
  123. package/lib/rsi-native-install.js +254 -0
  124. package/lib/rsi-native-install.js.map +1 -0
  125. package/lib/rsi-native-launchd.d.ts +7 -0
  126. package/lib/rsi-native-launchd.d.ts.map +1 -0
  127. package/lib/rsi-native-launchd.js +49 -0
  128. package/lib/rsi-native-launchd.js.map +1 -0
  129. package/lib/rsi-native-profile.d.ts +64 -0
  130. package/lib/rsi-native-profile.d.ts.map +1 -0
  131. package/lib/rsi-native-profile.js +283 -0
  132. package/lib/rsi-native-profile.js.map +1 -0
  133. package/lib/rsi-native-runtime-bootstrap.d.ts +35 -0
  134. package/lib/rsi-native-runtime-bootstrap.d.ts.map +1 -0
  135. package/lib/rsi-native-runtime-bootstrap.js +385 -0
  136. package/lib/rsi-native-runtime-bootstrap.js.map +1 -0
  137. package/lib/rsi-owner-profile.d.ts +37 -0
  138. package/lib/rsi-owner-profile.d.ts.map +1 -0
  139. package/lib/rsi-owner-profile.js +178 -0
  140. package/lib/rsi-owner-profile.js.map +1 -0
  141. package/lib/rsi-plugin-creation.d.ts +32 -0
  142. package/lib/rsi-plugin-creation.d.ts.map +1 -0
  143. package/lib/rsi-plugin-creation.js +189 -0
  144. package/lib/rsi-plugin-creation.js.map +1 -0
  145. package/lib/rsi-profile.d.ts +23 -0
  146. package/lib/rsi-profile.d.ts.map +1 -1
  147. package/lib/rsi-profile.js +154 -43
  148. package/lib/rsi-profile.js.map +1 -1
  149. package/lib/rsi-release-build.d.ts +41 -0
  150. package/lib/rsi-release-build.d.ts.map +1 -0
  151. package/lib/rsi-release-build.js +223 -0
  152. package/lib/rsi-release-build.js.map +1 -0
  153. package/lib/rsi-service-environment.d.ts +6 -0
  154. package/lib/rsi-service-environment.d.ts.map +1 -0
  155. package/lib/rsi-service-environment.js +113 -0
  156. package/lib/rsi-service-environment.js.map +1 -0
  157. package/lib/rsi-service-setup.d.ts +10 -0
  158. package/lib/rsi-service-setup.d.ts.map +1 -0
  159. package/lib/rsi-service-setup.js +34 -0
  160. package/lib/rsi-service-setup.js.map +1 -0
  161. package/lib/rsi-setup.d.ts +35 -2
  162. package/lib/rsi-setup.d.ts.map +1 -1
  163. package/lib/rsi-setup.js +475 -32
  164. package/lib/rsi-setup.js.map +1 -1
  165. package/lib/rsi-source-maintenance.d.ts +25 -0
  166. package/lib/rsi-source-maintenance.d.ts.map +1 -0
  167. package/lib/rsi-source-maintenance.js +348 -0
  168. package/lib/rsi-source-maintenance.js.map +1 -0
  169. package/lib/rsi-source-update.d.ts +26 -0
  170. package/lib/rsi-source-update.d.ts.map +1 -0
  171. package/lib/rsi-source-update.js +276 -0
  172. package/lib/rsi-source-update.js.map +1 -0
  173. package/lib/rsi-source.d.ts +34 -0
  174. package/lib/rsi-source.d.ts.map +1 -0
  175. package/lib/rsi-source.js +487 -0
  176. package/lib/rsi-source.js.map +1 -0
  177. package/lib/rsi-systemd-bootstrap.d.ts +46 -0
  178. package/lib/rsi-systemd-bootstrap.d.ts.map +1 -0
  179. package/lib/rsi-systemd-bootstrap.js +271 -0
  180. package/lib/rsi-systemd-bootstrap.js.map +1 -0
  181. package/lib/sdk.d.ts.map +1 -1
  182. package/lib/sdk.js +26 -1
  183. package/lib/sdk.js.map +1 -1
  184. package/lib/setup-business.d.ts +49 -0
  185. package/lib/setup-business.d.ts.map +1 -0
  186. package/lib/setup-business.js +335 -0
  187. package/lib/setup-business.js.map +1 -0
  188. package/lib/setup-profile.d.ts +1 -1
  189. package/lib/setup-profile.d.ts.map +1 -1
  190. package/lib/setup-profile.js +25 -2
  191. package/lib/setup-profile.js.map +1 -1
  192. package/lib/setup.d.ts +12 -1
  193. package/lib/setup.d.ts.map +1 -1
  194. package/lib/setup.js +265 -48
  195. package/lib/setup.js.map +1 -1
  196. package/lib/systemd.d.ts +10 -0
  197. package/lib/systemd.d.ts.map +1 -1
  198. package/lib/systemd.js +23 -6
  199. package/lib/systemd.js.map +1 -1
  200. package/lib/types.d.ts +7 -0
  201. package/lib/types.d.ts.map +1 -1
  202. package/lib/types.js.map +1 -1
  203. package/lib/version.d.ts +1 -1
  204. package/lib/version.js +1 -1
  205. package/package.json +33 -20
@@ -0,0 +1,276 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { lstat, mkdir, mkdtemp, readdir, realpath, rename, rm, stat } from 'node:fs/promises';
3
+ import { dirname, isAbsolute, join, resolve, sep } from 'node:path';
4
+ import { rsiBuildResources as io } from './rsi-build.js';
5
+ import { readRsiLocalCohort } from './rsi-local-cohort.js';
6
+ import { readRsiSourceWorkspace } from './rsi-source.js';
7
+ const PROFILE = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/u;
8
+ const COMMIT = /^[a-f0-9]{40}$/u;
9
+ const HASH = /^[a-f0-9]{64}$/u;
10
+ const EXACT_VERSION = /^[0-9]+\.[0-9]+\.[0-9]+(?:-[0-9A-Za-z]+(?:[.-][0-9A-Za-z]+)*)?$/u;
11
+ const sha256 = (value) => createHash('sha256').update(value).digest('hex');
12
+ const fail = (message) => { throw new Error(`rsi source update: ${message}`); };
13
+ const inside = (root, path) => path === root || path.startsWith(`${root}${sep}`);
14
+ function canonical(path, label) {
15
+ if (typeof path !== 'string' || !isAbsolute(path) || resolve(path) !== path || path.includes('\0'))
16
+ fail(`${label} must be canonical absolute`);
17
+ }
18
+ async function directory(path) {
19
+ const item = await lstat(path);
20
+ if (!item.isDirectory() || item.isSymbolicLink() || (item.mode & 0o077) !== 0
21
+ || process.getuid && item.uid !== process.getuid() || await realpath(path) !== path)
22
+ fail(`unsafe private directory: ${path}`);
23
+ }
24
+ async function privateFile(path, maximum) {
25
+ const item = await lstat(path);
26
+ if (!item.isFile() || item.isSymbolicLink() || item.nlink !== 1 || item.size < 1 || item.size > maximum
27
+ || (item.mode & 0o077) !== 0 || process.getuid && item.uid !== process.getuid())
28
+ fail(`unsafe private file: ${path}`);
29
+ return io.readStable(path, maximum, true);
30
+ }
31
+ async function candidateConfigDigest(repository) {
32
+ const path = join(repository, '.git', 'config');
33
+ const item = await lstat(path);
34
+ if (!item.isFile() || item.isSymbolicLink() || item.nlink !== 1 || item.size < 1 || item.size > 65_536
35
+ || (item.mode & 0o022) !== 0 || process.getuid && item.uid !== process.getuid())
36
+ fail('candidate Git config is unsafe');
37
+ return sha256(await io.readStable(path, 65_536, false));
38
+ }
39
+ function parseJson(bytes, label) {
40
+ let value;
41
+ try {
42
+ value = JSON.parse(bytes.toString('utf8'));
43
+ }
44
+ catch {
45
+ fail(`${label} is invalid`);
46
+ }
47
+ if (value === null || typeof value !== 'object' || Array.isArray(value))
48
+ fail(`${label} is not an object`);
49
+ return value;
50
+ }
51
+ async function absent(path) {
52
+ try {
53
+ await lstat(path);
54
+ return false;
55
+ }
56
+ catch (error) {
57
+ if (error.code === 'ENOENT')
58
+ return true;
59
+ throw error;
60
+ }
61
+ }
62
+ function gitEnvironment() {
63
+ return { PATH: '/usr/bin:/bin', LANG: 'C', LC_ALL: 'C', HOME: '/nonexistent',
64
+ GIT_CONFIG_NOSYSTEM: '1', GIT_CONFIG_GLOBAL: '/dev/null', GIT_CONFIG_SYSTEM: '/dev/null',
65
+ GIT_CONFIG_COUNT: '0', GIT_ALLOW_PROTOCOL: 'file', GIT_NO_REPLACE_OBJECTS: '1', GIT_NO_LAZY_FETCH: '1',
66
+ GIT_TERMINAL_PROMPT: '0', GIT_ASKPASS: '/bin/false', GCM_INTERACTIVE: 'never',
67
+ GIT_AUTHOR_NAME: 'DSH source update', GIT_AUTHOR_EMAIL: 'source-update@localhost',
68
+ GIT_COMMITTER_NAME: 'DSH source update', GIT_COMMITTER_EMAIL: 'source-update@localhost',
69
+ GIT_AUTHOR_DATE: '2000-01-01T00:00:00+0000', GIT_COMMITTER_DATE: '2000-01-01T00:00:00+0000',
70
+ GIT_MERGE_AUTOEDIT: 'no', GIT_LFS_SKIP_SMUDGE: '1' };
71
+ }
72
+ const GIT_FLAGS = ['-c', 'core.hooksPath=/dev/null', '-c', 'core.fsmonitor=false', '-c', 'protocol.allow=never',
73
+ '-c', 'protocol.file.allow=always', '-c', 'credential.helper=', '-c', 'gc.auto=0',
74
+ '-c', 'commit.gpgsign=false', '-c', 'merge.gpgsign=false'];
75
+ async function git(cwd, args, signal) {
76
+ return io.command('/usr/bin/git', [...GIT_FLAGS, '-C', cwd, ...args], gitEnvironment(), signal, 60_000, 65_536);
77
+ }
78
+ async function directRef(repository, name, signal) {
79
+ const value = await git(repository, ['for-each-ref', '--format=%(refname)%00%(objectname)%00%(symref)', name], signal);
80
+ const fields = value.split('\0');
81
+ if (fields.length !== 3 || fields[0] !== name || !COMMIT.test(fields[1]) || fields[2] !== '')
82
+ fail(`managed Git ref is missing or symbolic: ${name}`);
83
+ return fields[1];
84
+ }
85
+ async function ancestor(cwd, first, second, signal) {
86
+ // merge-base --is-ancestor returns 1 for a legitimate non-ancestor. The
87
+ // explicit merge-base result avoids interpreting an arbitrary Git failure.
88
+ const base = await git(cwd, ['merge-base', first, second], signal);
89
+ if (!COMMIT.test(base))
90
+ fail('Git merge-base is invalid');
91
+ return base === first;
92
+ }
93
+ async function noAlternates(repository, bare = false) {
94
+ const gitDirectory = bare ? repository : join(repository, '.git');
95
+ const item = await lstat(gitDirectory);
96
+ if (!item.isDirectory() || item.isSymbolicLink() || await realpath(gitDirectory) !== gitDirectory)
97
+ fail('repository Git directory is not physical');
98
+ for (const name of ['alternates', 'http-alternates'])
99
+ if (!await absent(join(gitDirectory, 'objects', 'info', name))) {
100
+ fail('external Git object alternates are forbidden');
101
+ }
102
+ }
103
+ async function packageVersion(repository, ref, signal) {
104
+ const manifest = parseJson(Buffer.from(await git(repository, ['show', `${ref}:package.json`], signal)), 'candidate source package manifest');
105
+ const candidateVersion = manifest.version;
106
+ if (manifest.name !== 'dsh-enhanced' || typeof candidateVersion !== 'string' || !EXACT_VERSION.test(candidateVersion)) {
107
+ fail('candidate source package name or version is invalid');
108
+ }
109
+ return candidateVersion;
110
+ }
111
+ async function original(input, signal) {
112
+ const bootstrapPath = join(input.dshHome, 'rsi-sources', input.profile, 'bootstrap.json');
113
+ const bootstrap = await privateFile(bootstrapPath, 65_536);
114
+ const saved = parseJson(bootstrap, 'original source receipt');
115
+ if (typeof saved.version !== 'string' || !EXACT_VERSION.test(saved.version))
116
+ fail('original source version is invalid');
117
+ const source = await readRsiSourceWorkspace({ dshHome: input.dshHome, profile: input.profile,
118
+ sourceRepository: input.sourceRepository, signal });
119
+ if (source.origin.kind !== 'local-head' || source.origin.locator !== input.sourceRepository)
120
+ fail('original source is not the selected local repository');
121
+ const cohort = await readRsiLocalCohort({ dshHome: input.dshHome, profile: input.profile, source });
122
+ await noAlternates(source.repository);
123
+ await noAlternates(source.baseline.remote, true);
124
+ const repairCommit = await directRef(source.repository, 'refs/dsh-source/repairs', signal);
125
+ const bareTip = await directRef(source.baseline.remote, 'refs/heads/repairs', signal);
126
+ if (bareTip !== repairCommit
127
+ || !await ancestor(source.repository, source.sourceCommit, repairCommit, signal))
128
+ fail('current repair refs differ or lost their bootstrap ancestry');
129
+ const upstreamCommit = await git(input.sourceRepository, ['rev-parse', 'HEAD'], signal);
130
+ if (!COMMIT.test(upstreamCommit))
131
+ fail('upstream HEAD is invalid');
132
+ await noAlternates(input.sourceRepository);
133
+ const upstreamVersion = await packageVersion(input.sourceRepository, upstreamCommit, signal);
134
+ return { source, cohort, originalBootstrapDigest: sha256(bootstrap), originalCohortDigest: cohort.receiptDigest,
135
+ upstreamCommit, upstreamVersion, repairCommit };
136
+ }
137
+ async function currentOriginal(input, expected, signal) {
138
+ const actual = await original(input, signal);
139
+ if (actual.originalBootstrapDigest !== expected.originalBootstrapDigest
140
+ || actual.originalCohortDigest !== expected.originalCohortDigest
141
+ || actual.upstreamCommit !== expected.upstreamCommit || actual.repairCommit !== expected.repairCommit
142
+ || actual.upstreamVersion !== expected.upstreamVersion
143
+ || actual.source.sourceCommit !== expected.source.sourceCommit)
144
+ fail('original source changed during preparation');
145
+ }
146
+ async function verifiedCandidate(repository, receipt, signal) {
147
+ await directory(repository);
148
+ await noAlternates(repository);
149
+ if (await candidateConfigDigest(repository) !== receipt.candidateConfigDigest)
150
+ fail('candidate Git config changed');
151
+ if (await git(repository, ['rev-parse', '--show-toplevel'], signal) !== repository
152
+ || await git(repository, ['rev-parse', '--show-object-format=storage'], signal) !== 'sha1'
153
+ || await git(repository, ['symbolic-ref', 'HEAD'], signal) !== 'refs/heads/repairs'
154
+ || await git(repository, ['rev-parse', 'HEAD'], signal) !== receipt.sourceCommit
155
+ || await git(repository, ['rev-parse', 'HEAD^{tree}'], signal) !== receipt.sourceTree
156
+ || await directRef(repository, 'refs/dsh-update/upstream', signal) !== receipt.upstreamCommit
157
+ || await directRef(repository, 'refs/dsh-update/repair', signal) !== receipt.repairCommit
158
+ || await git(repository, ['status', '--porcelain=v1', '--untracked-files=all'], signal) !== ''
159
+ || !await ancestor(repository, receipt.upstreamCommit, receipt.sourceCommit, signal)
160
+ || !await ancestor(repository, receipt.repairCommit, receipt.sourceCommit, signal))
161
+ fail('candidate repository differs from its receipt');
162
+ if (await packageVersion(repository, receipt.sourceCommit, signal) !== receipt.version)
163
+ fail('candidate merged package version differs from upstream');
164
+ }
165
+ /** Verify a completed immutable candidate and the original source it was prepared from. */
166
+ export async function readRsiSourceUpdate(input) {
167
+ canonical(input.dshHome, 'DSH_HOME');
168
+ canonical(input.sourceRepository, 'source repository');
169
+ canonical(input.candidateRoot, 'candidate root');
170
+ if (!PROFILE.test(input.profile) || inside(input.dshHome, input.candidateRoot)
171
+ || inside(input.candidateRoot, input.dshHome) || inside(input.candidateRoot, input.sourceRepository)
172
+ || inside(input.sourceRepository, input.candidateRoot))
173
+ fail('candidate scope is invalid');
174
+ const signal = AbortSignal.any([input.signal ?? new AbortController().signal, AbortSignal.timeout(180_000)]);
175
+ await directory(dirname(input.candidateRoot));
176
+ await directory(input.candidateRoot);
177
+ if (JSON.stringify((await readdir(input.candidateRoot)).sort()) !== JSON.stringify(['receipt.json', 'repository']))
178
+ fail('candidate is incomplete');
179
+ const source = await privateFile(join(input.candidateRoot, 'receipt.json'), 65_536);
180
+ const receipt = parseJson(source, 'candidate receipt');
181
+ const { receiptDigest, ...content } = receipt;
182
+ if (receipt.schemaVersion !== 1 || receipt.root !== input.candidateRoot
183
+ || receipt.repository !== join(input.candidateRoot, 'repository') || !EXACT_VERSION.test(String(receipt.version))
184
+ || !COMMIT.test(String(receipt.sourceCommit)) || !COMMIT.test(String(receipt.sourceTree))
185
+ || !HASH.test(String(receipt.candidateConfigDigest))
186
+ || !COMMIT.test(String(receipt.upstreamCommit)) || !COMMIT.test(String(receipt.repairCommit))
187
+ || !HASH.test(String(receipt.originalBootstrapDigest)) || !HASH.test(String(receipt.originalCohortDigest))
188
+ || !HASH.test(String(receiptDigest)) || sha256(JSON.stringify(content)) !== receiptDigest)
189
+ fail('candidate receipt differs');
190
+ const baseline = await original(input, signal);
191
+ if (baseline.originalBootstrapDigest !== receipt.originalBootstrapDigest
192
+ || baseline.originalCohortDigest !== receipt.originalCohortDigest
193
+ || baseline.upstreamCommit !== receipt.upstreamCommit || baseline.repairCommit !== receipt.repairCommit
194
+ || baseline.upstreamVersion !== receipt.version)
195
+ fail('candidate original source changed');
196
+ await verifiedCandidate(receipt.repository, receipt, signal);
197
+ await currentOriginal(input, baseline, signal);
198
+ return receipt;
199
+ }
200
+ /** Build a candidate outside DSH_HOME; this never changes the live source refs. */
201
+ export async function prepareRsiSourceUpdate(input) {
202
+ canonical(input.dshHome, 'DSH_HOME');
203
+ canonical(input.sourceRepository, 'source repository');
204
+ canonical(input.candidateRoot, 'candidate root');
205
+ if (!PROFILE.test(input.profile) || inside(input.dshHome, input.candidateRoot)
206
+ || inside(input.candidateRoot, input.dshHome) || inside(input.candidateRoot, input.sourceRepository)
207
+ || inside(input.sourceRepository, input.candidateRoot))
208
+ fail('candidate scope is invalid');
209
+ await directory(dirname(input.candidateRoot));
210
+ if (!await absent(input.candidateRoot))
211
+ return readRsiSourceUpdate(input);
212
+ const signal = AbortSignal.any([input.signal ?? new AbortController().signal, AbortSignal.timeout(300_000)]);
213
+ const baseline = await original(input, signal);
214
+ const stage = await mkdtemp(join(dirname(input.candidateRoot), `.${input.profile}-source-stage-`));
215
+ let claimed;
216
+ try {
217
+ await directory(stage);
218
+ const repository = join(stage, 'repository'), template = join(stage, 'empty-template');
219
+ await mkdir(repository, { mode: 0o700 });
220
+ await mkdir(template, { mode: 0o700 });
221
+ await git(repository, ['init', '--object-format=sha1', '--initial-branch=repairs', `--template=${template}`, '.'], signal);
222
+ await git(repository, ['fetch', '--no-tags', '--no-write-fetch-head', '--no-recurse-submodules',
223
+ input.sourceRepository, `+${baseline.upstreamCommit}:refs/dsh-update/upstream`], signal);
224
+ await git(repository, ['fetch', '--no-tags', '--no-write-fetch-head', '--no-recurse-submodules',
225
+ baseline.source.repository, `+${baseline.repairCommit}:refs/dsh-update/repair`], signal);
226
+ await git(repository, ['checkout', '-B', 'repairs', baseline.repairCommit], signal);
227
+ if (await ancestor(repository, baseline.repairCommit, baseline.upstreamCommit, signal)) {
228
+ await git(repository, ['merge', '--ff-only', 'refs/dsh-update/upstream'], signal);
229
+ }
230
+ else if (!await ancestor(repository, baseline.upstreamCommit, baseline.repairCommit, signal)) {
231
+ try {
232
+ await git(repository, ['merge', '--no-ff', '--no-edit', '--strategy=ort', 'refs/dsh-update/upstream'], signal);
233
+ }
234
+ catch {
235
+ fail('upstream and repair commits cannot be merged without conflict');
236
+ }
237
+ }
238
+ const sourceCommit = await git(repository, ['rev-parse', 'HEAD'], signal);
239
+ const sourceTree = await git(repository, ['rev-parse', 'HEAD^{tree}'], signal);
240
+ if (!COMMIT.test(sourceCommit) || !COMMIT.test(sourceTree))
241
+ fail('candidate Git result is invalid');
242
+ if (await packageVersion(repository, sourceCommit, signal) !== baseline.upstreamVersion) {
243
+ fail('candidate merged package version differs from upstream');
244
+ }
245
+ const configDigest = await candidateConfigDigest(repository);
246
+ await currentOriginal(input, baseline, signal);
247
+ await mkdir(input.candidateRoot, { mode: 0o700 });
248
+ const identity = await stat(input.candidateRoot);
249
+ claimed = { dev: identity.dev, ino: identity.ino };
250
+ await rename(repository, join(input.candidateRoot, 'repository'));
251
+ const content = { schemaVersion: 1, root: input.candidateRoot, repository: join(input.candidateRoot, 'repository'),
252
+ version: baseline.upstreamVersion, sourceCommit, sourceTree, candidateConfigDigest: configDigest,
253
+ upstreamCommit: baseline.upstreamCommit, repairCommit: baseline.repairCommit,
254
+ originalBootstrapDigest: baseline.originalBootstrapDigest, originalCohortDigest: baseline.originalCohortDigest };
255
+ const receipt = { ...content, receiptDigest: sha256(JSON.stringify(content)) };
256
+ await io.writeExclusive(join(input.candidateRoot, 'receipt.json'), JSON.stringify(receipt));
257
+ await io.syncDirectory(input.candidateRoot);
258
+ await io.syncDirectory(dirname(input.candidateRoot));
259
+ return await readRsiSourceUpdate(input);
260
+ }
261
+ catch (error) {
262
+ if (claimed) {
263
+ const item = await lstat(input.candidateRoot).catch(() => undefined);
264
+ if (item?.isDirectory() && item.dev === claimed.dev && item.ino === claimed.ino
265
+ && await absent(join(input.candidateRoot, 'receipt.json'))
266
+ && (await readdir(input.candidateRoot)).every(name => name === 'repository')) {
267
+ await rm(input.candidateRoot, { recursive: true, force: true });
268
+ }
269
+ }
270
+ throw error;
271
+ }
272
+ finally {
273
+ await rm(stage, { recursive: true, force: true });
274
+ }
275
+ }
276
+ //# sourceMappingURL=rsi-source-update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsi-source-update.js","sourceRoot":"","sources":["../src/rsi-source-update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ export interface RsiSourceWorkspace {
2
+ schemaVersion: 1;
3
+ version: string;
4
+ origin: {
5
+ kind: 'official-tag' | 'local-head';
6
+ locator: string;
7
+ ref: string;
8
+ };
9
+ sourceCommit: string;
10
+ repository: string;
11
+ baseline: {
12
+ ref: 'refs/dsh-source/repairs';
13
+ remote: string;
14
+ targetBranch: 'repairs';
15
+ initialCommit: string;
16
+ };
17
+ }
18
+ /** Read the registered source without creating or repairing any workspace. */
19
+ export declare function readRsiSourceWorkspace(input: {
20
+ dshHome: string;
21
+ profile: string;
22
+ version?: string;
23
+ sourceRepository?: string | undefined;
24
+ signal?: AbortSignal;
25
+ }): Promise<RsiSourceWorkspace>;
26
+ /** Caller must hold the DSH_HOME lifecycle lock across this operation and setup. */
27
+ export declare function prepareRsiSourceWorkspace(input: {
28
+ dshHome: string;
29
+ profile: string;
30
+ version: string;
31
+ sourceRepository?: string | undefined;
32
+ signal?: AbortSignal;
33
+ }): Promise<RsiSourceWorkspace>;
34
+ //# sourceMappingURL=rsi-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsi-source.d.ts","sourceRoot":"","sources":["../src/rsi-source.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,CAAC,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE;QAAE,IAAI,EAAE,cAAc,GAAG,YAAY,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IAC7E,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE;QAAE,GAAG,EAAE,yBAAyB,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,SAAS,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAA;CAC7G;AA0PD,8EAA8E;AAC9E,wBAAsB,sBAAsB,CAAC,KAAK,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IACvG,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA4B5F;AAED,oFAAoF;AACpF,wBAAsB,yBAAyB,CAAC,KAAK,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IACzG,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAyF5F"}