@dsh-enhanced/lark-channel 0.1.48 → 0.1.49

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 (173) hide show
  1. package/README.md +19 -8
  2. package/docs/rsi-setup.md +123 -11
  3. package/docs/setup.md +27 -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/rsi-authority-config.d.ts +29 -0
  22. package/lib/rsi-authority-config.d.ts.map +1 -0
  23. package/lib/rsi-authority-config.js +233 -0
  24. package/lib/rsi-authority-config.js.map +1 -0
  25. package/lib/rsi-authority-resources.d.ts +36 -0
  26. package/lib/rsi-authority-resources.d.ts.map +1 -0
  27. package/lib/rsi-authority-resources.js +139 -0
  28. package/lib/rsi-authority-resources.js.map +1 -0
  29. package/lib/rsi-authority-runtime.d.ts +50 -0
  30. package/lib/rsi-authority-runtime.d.ts.map +1 -0
  31. package/lib/rsi-authority-runtime.js +393 -0
  32. package/lib/rsi-authority-runtime.js.map +1 -0
  33. package/lib/rsi-bootstrap-manifest.d.ts +39 -0
  34. package/lib/rsi-bootstrap-manifest.d.ts.map +1 -0
  35. package/lib/rsi-bootstrap-manifest.js +366 -0
  36. package/lib/rsi-bootstrap-manifest.js.map +1 -0
  37. package/lib/rsi-bootstrap.d.ts +30 -0
  38. package/lib/rsi-bootstrap.d.ts.map +1 -0
  39. package/lib/rsi-bootstrap.js +363 -0
  40. package/lib/rsi-bootstrap.js.map +1 -0
  41. package/lib/rsi-build.d.ts +45 -0
  42. package/lib/rsi-build.d.ts.map +1 -0
  43. package/lib/rsi-build.js +404 -0
  44. package/lib/rsi-build.js.map +1 -0
  45. package/lib/rsi-creation-build.d.ts +47 -0
  46. package/lib/rsi-creation-build.d.ts.map +1 -0
  47. package/lib/rsi-creation-build.js +333 -0
  48. package/lib/rsi-creation-build.js.map +1 -0
  49. package/lib/rsi-host-authorities.d.ts +18 -0
  50. package/lib/rsi-host-authorities.d.ts.map +1 -0
  51. package/lib/rsi-host-authorities.js +129 -0
  52. package/lib/rsi-host-authorities.js.map +1 -0
  53. package/lib/rsi-host-update.d.ts +113 -0
  54. package/lib/rsi-host-update.d.ts.map +1 -0
  55. package/lib/rsi-host-update.js +316 -0
  56. package/lib/rsi-host-update.js.map +1 -0
  57. package/lib/rsi-install-inputs.d.ts +43 -0
  58. package/lib/rsi-install-inputs.d.ts.map +1 -0
  59. package/lib/rsi-install-inputs.js +342 -0
  60. package/lib/rsi-install-inputs.js.map +1 -0
  61. package/lib/rsi-install.d.ts +54 -0
  62. package/lib/rsi-install.d.ts.map +1 -0
  63. package/lib/rsi-install.js +404 -0
  64. package/lib/rsi-install.js.map +1 -0
  65. package/lib/rsi-local-activation.d.ts +78 -0
  66. package/lib/rsi-local-activation.d.ts.map +1 -0
  67. package/lib/rsi-local-activation.js +485 -0
  68. package/lib/rsi-local-activation.js.map +1 -0
  69. package/lib/rsi-local-cohort.d.ts +70 -0
  70. package/lib/rsi-local-cohort.d.ts.map +1 -0
  71. package/lib/rsi-local-cohort.js +781 -0
  72. package/lib/rsi-local-cohort.js.map +1 -0
  73. package/lib/rsi-local-install.d.ts +40 -0
  74. package/lib/rsi-local-install.d.ts.map +1 -0
  75. package/lib/rsi-local-install.js +221 -0
  76. package/lib/rsi-local-install.js.map +1 -0
  77. package/lib/rsi-local-pair-install.d.ts +38 -0
  78. package/lib/rsi-local-pair-install.d.ts.map +1 -0
  79. package/lib/rsi-local-pair-install.js +200 -0
  80. package/lib/rsi-local-pair-install.js.map +1 -0
  81. package/lib/rsi-local-profile-update.d.ts +25 -0
  82. package/lib/rsi-local-profile-update.d.ts.map +1 -0
  83. package/lib/rsi-local-profile-update.js +226 -0
  84. package/lib/rsi-local-profile-update.js.map +1 -0
  85. package/lib/rsi-local-resources.d.ts +37 -0
  86. package/lib/rsi-local-resources.d.ts.map +1 -0
  87. package/lib/rsi-local-resources.js +184 -0
  88. package/lib/rsi-local-resources.js.map +1 -0
  89. package/lib/rsi-local-roots-extension.d.ts +11 -0
  90. package/lib/rsi-local-roots-extension.d.ts.map +1 -0
  91. package/lib/rsi-local-roots-extension.js +31 -0
  92. package/lib/rsi-local-roots-extension.js.map +1 -0
  93. package/lib/rsi-local-update-build.d.ts +18 -0
  94. package/lib/rsi-local-update-build.d.ts.map +1 -0
  95. package/lib/rsi-local-update-build.js +37 -0
  96. package/lib/rsi-local-update-build.js.map +1 -0
  97. package/lib/rsi-local-update.d.ts +39 -0
  98. package/lib/rsi-local-update.d.ts.map +1 -0
  99. package/lib/rsi-local-update.js +205 -0
  100. package/lib/rsi-local-update.js.map +1 -0
  101. package/lib/rsi-memory-learning.d.ts +22 -0
  102. package/lib/rsi-memory-learning.d.ts.map +1 -0
  103. package/lib/rsi-memory-learning.js +76 -0
  104. package/lib/rsi-memory-learning.js.map +1 -0
  105. package/lib/rsi-owner-profile.d.ts +37 -0
  106. package/lib/rsi-owner-profile.d.ts.map +1 -0
  107. package/lib/rsi-owner-profile.js +178 -0
  108. package/lib/rsi-owner-profile.js.map +1 -0
  109. package/lib/rsi-plugin-creation.d.ts +31 -0
  110. package/lib/rsi-plugin-creation.d.ts.map +1 -0
  111. package/lib/rsi-plugin-creation.js +179 -0
  112. package/lib/rsi-plugin-creation.js.map +1 -0
  113. package/lib/rsi-profile.d.ts +23 -0
  114. package/lib/rsi-profile.d.ts.map +1 -1
  115. package/lib/rsi-profile.js +154 -43
  116. package/lib/rsi-profile.js.map +1 -1
  117. package/lib/rsi-release-build.d.ts +41 -0
  118. package/lib/rsi-release-build.d.ts.map +1 -0
  119. package/lib/rsi-release-build.js +223 -0
  120. package/lib/rsi-release-build.js.map +1 -0
  121. package/lib/rsi-service-environment.d.ts +6 -0
  122. package/lib/rsi-service-environment.d.ts.map +1 -0
  123. package/lib/rsi-service-environment.js +113 -0
  124. package/lib/rsi-service-environment.js.map +1 -0
  125. package/lib/rsi-service-setup.d.ts +10 -0
  126. package/lib/rsi-service-setup.d.ts.map +1 -0
  127. package/lib/rsi-service-setup.js +34 -0
  128. package/lib/rsi-service-setup.js.map +1 -0
  129. package/lib/rsi-setup.d.ts +35 -2
  130. package/lib/rsi-setup.d.ts.map +1 -1
  131. package/lib/rsi-setup.js +459 -32
  132. package/lib/rsi-setup.js.map +1 -1
  133. package/lib/rsi-source-maintenance.d.ts +25 -0
  134. package/lib/rsi-source-maintenance.d.ts.map +1 -0
  135. package/lib/rsi-source-maintenance.js +348 -0
  136. package/lib/rsi-source-maintenance.js.map +1 -0
  137. package/lib/rsi-source-update.d.ts +26 -0
  138. package/lib/rsi-source-update.d.ts.map +1 -0
  139. package/lib/rsi-source-update.js +276 -0
  140. package/lib/rsi-source-update.js.map +1 -0
  141. package/lib/rsi-source.d.ts +34 -0
  142. package/lib/rsi-source.d.ts.map +1 -0
  143. package/lib/rsi-source.js +375 -0
  144. package/lib/rsi-source.js.map +1 -0
  145. package/lib/rsi-systemd-bootstrap.d.ts +46 -0
  146. package/lib/rsi-systemd-bootstrap.d.ts.map +1 -0
  147. package/lib/rsi-systemd-bootstrap.js +271 -0
  148. package/lib/rsi-systemd-bootstrap.js.map +1 -0
  149. package/lib/sdk.d.ts.map +1 -1
  150. package/lib/sdk.js +26 -1
  151. package/lib/sdk.js.map +1 -1
  152. package/lib/setup-business.d.ts +49 -0
  153. package/lib/setup-business.d.ts.map +1 -0
  154. package/lib/setup-business.js +335 -0
  155. package/lib/setup-business.js.map +1 -0
  156. package/lib/setup-profile.d.ts +1 -1
  157. package/lib/setup-profile.d.ts.map +1 -1
  158. package/lib/setup-profile.js +25 -2
  159. package/lib/setup-profile.js.map +1 -1
  160. package/lib/setup.d.ts +12 -1
  161. package/lib/setup.d.ts.map +1 -1
  162. package/lib/setup.js +138 -34
  163. package/lib/setup.js.map +1 -1
  164. package/lib/systemd.d.ts +10 -0
  165. package/lib/systemd.d.ts.map +1 -1
  166. package/lib/systemd.js +23 -6
  167. package/lib/systemd.js.map +1 -1
  168. package/lib/types.d.ts +7 -0
  169. package/lib/types.d.ts.map +1 -1
  170. package/lib/types.js.map +1 -1
  171. package/lib/version.d.ts +1 -1
  172. package/lib/version.js +1 -1
  173. package/package.json +32 -20
@@ -0,0 +1,202 @@
1
+ import { createHash, randomUUID } from 'node:crypto';
2
+ import { lstat, mkdir, readFile, readdir, rename, unlink, writeFile } from 'node:fs/promises';
3
+ import { isAbsolute, join, parse, relative, resolve, sep, win32 } from 'node:path';
4
+ import { parse as parseYaml, stringify } from 'yaml';
5
+ import { LARK_BUSINESS_CLEARED_ENV } from './business-environment.js';
6
+ const identifierPattern = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/u;
7
+ const ownerPattern = /^ou_[A-Za-z0-9_-]{1,124}$/u;
8
+ const appIdPattern = /^cli_[0-9a-fA-F]{16}$/u;
9
+ const markerPrefix = '<!-- managed-by:@dsh-enhanced/lark-channel/business-skill:v1 ';
10
+ function hasControlCharacter(value) {
11
+ return Array.from(value).some(char => {
12
+ const code = char.codePointAt(0) ?? 0;
13
+ return code < 32 || code === 127;
14
+ });
15
+ }
16
+ function requireIdentifier(value, field) {
17
+ if (typeof value !== 'string' || !identifierPattern.test(value)) {
18
+ throw new Error(`lark business skill: invalid ${field}`);
19
+ }
20
+ return value;
21
+ }
22
+ function requireBinding(input) {
23
+ const profile = requireIdentifier(input.profile, 'profile');
24
+ const account = requireIdentifier(input.account, 'account');
25
+ if (typeof input.ownerUserId !== 'string' || !ownerPattern.test(input.ownerUserId)) {
26
+ throw new Error('lark business skill: invalid ownerUserId');
27
+ }
28
+ if (typeof input.appId !== 'string' || !appIdPattern.test(input.appId)) {
29
+ throw new Error('lark business skill: invalid appId');
30
+ }
31
+ return { profile, account, appId: input.appId, ownerUserId: input.ownerUserId };
32
+ }
33
+ function requireAbsolutePath(value, field, platform) {
34
+ if (typeof value !== 'string' || hasControlCharacter(value)
35
+ || !(isAbsolute(value) || (platform === 'win32' && win32.isAbsolute(value)))) {
36
+ throw new Error(`lark business skill: ${field} must be an absolute path without control characters`);
37
+ }
38
+ return platform === 'win32' && win32.isAbsolute(value) && !isAbsolute(value)
39
+ ? win32.normalize(value) : resolve(value);
40
+ }
41
+ function validate(input) {
42
+ const platform = input.platform ?? process.platform;
43
+ const binding = requireBinding(input);
44
+ const cliProfile = requireIdentifier(input.cliProfile, 'cliProfile');
45
+ return {
46
+ dshHome: requireAbsolutePath(input.dshHome, 'dshHome', platform),
47
+ ...binding,
48
+ cliCommand: requireAbsolutePath(input.cliCommand, 'cliCommand', platform),
49
+ cliProfile,
50
+ cliConfigDir: requireAbsolutePath(input.cliConfigDir, 'cliConfigDir', platform),
51
+ cliDataDir: requireAbsolutePath(input.cliDataDir, 'cliDataDir', platform),
52
+ platform,
53
+ };
54
+ }
55
+ function shellQuote(value) {
56
+ return `'${value.replaceAll("'", `'"'"'`)}'`;
57
+ }
58
+ function powershellQuote(value) {
59
+ return `'${value.replaceAll("'", "''")}'`;
60
+ }
61
+ function skillName(input) {
62
+ const hash = createHash('sha256').update(input.profile).update('\0').update(input.account).digest('hex').slice(0, 16);
63
+ return `lark-business-${hash}`;
64
+ }
65
+ export function renderLarkBusinessSkill(input) {
66
+ const checked = validate(input);
67
+ const name = skillName(checked);
68
+ const marker = `${markerPrefix}${name} -->`;
69
+ const cli = checked.platform === 'win32'
70
+ ? `${LARK_BUSINESS_CLEARED_ENV.map(name => `Remove-Item Env:${name} -ErrorAction SilentlyContinue;`).join(' ')} $env:LARKSUITE_CLI_CONFIG_DIR=${powershellQuote(checked.cliConfigDir)}; $env:LARKSUITE_CLI_DATA_DIR=${powershellQuote(checked.cliDataDir)}; $env:LARKSUITE_CLI_NO_UPDATE_NOTIFIER='1'; $env:LARKSUITE_CLI_NO_SKILLS_NOTIFIER='1'; & ${powershellQuote(checked.cliCommand)} --profile ${powershellQuote(checked.cliProfile)}`
71
+ : `env ${LARK_BUSINESS_CLEARED_ENV.map(name => `-u ${name}`).join(' ')} LARKSUITE_CLI_CONFIG_DIR=${shellQuote(checked.cliConfigDir)} LARKSUITE_CLI_DATA_DIR=${shellQuote(checked.cliDataDir)} LARKSUITE_CLI_NO_UPDATE_NOTIFIER=1 LARKSUITE_CLI_NO_SKILLS_NOTIFIER=1 ${shellQuote(checked.cliCommand)} --profile ${shellQuote(checked.cliProfile)}`;
72
+ const frontmatter = stringify({
73
+ name,
74
+ description: `Use the configured Lark CLI for owner-authorized documents, sheets, Base, calendar, tasks, mail, meetings, contacts, and approvals. Only for DSH profile ${checked.profile}, Lark account ${checked.account}, app ${checked.appId}, and owner ${checked.ownerUserId}; read current embedded official skills and schemas before acting.`,
75
+ metadata: { appId: checked.appId, ownerUserId: checked.ownerUserId,
76
+ profile: checked.profile, account: checked.account },
77
+ }).trimEnd();
78
+ const content = `---\n${frontmatter}\n---\n${marker}\n# Lark business operations\n\nThis skill belongs to DSH profile **${checked.profile}**, Lark account **${checked.account}**, application **${checked.appId}**, and owner open ID **${checked.ownerUserId}**. Use it only when the current DSH profile, channel account, application, and owner all match this binding. If any value differs, stop using this skill and rerun channel setup. These values identify this installation; they are not credentials. Never print tokens, secrets, or configuration contents.\n\nUse the native skill and shell tools for this task (${checked.platform === 'win32' ? 'PowerShell on Windows' : 'a POSIX shell on this platform'}). Do not start another Agent loop. Every CLI invocation must use the exact command prefix below, including its explicit profile and private configuration directory. Linux uses the private data directory for CLI token files; on macOS and Windows the CLI may use a system keychain shared by the OS account. Do not use an unbound CLI command or the machine's default CLI profile/configuration.\n\n ${cli} skills list\n ${cli} skills read lark-shared\n\nBefore each business operation, discover the current embedded official instructions with \`skills list\`, then \`skills read <relevant-skill>\`. Read its referenced files on demand with \`skills list <skill>/references\` and \`skills read <skill> <reference-path>\`. The embedded instructions and command schemas are the source of truth; do not rely on a copied catalogue. For example, a document task can start with:\n\n ${cli} skills read lark-doc\n\nUse the operation's \`--help\` and \`schema <service.resource.method>\` when the exact arguments or risk level are unclear. Keep the same isolated prefix for these calls and for every subsequent business command. Select \`--as user\` for the owner's personal resources; use \`--as bot\` only for application/bot resources. The bot identity may not see the owner's resources.\n\nThe owner's current request authorizes the operations necessary to complete that task; do not ask again for an already authorized action. If a CLI command exits with code 10, add \`--yes\` only when the specific operation is already authorized by that request, then retry that command once. Otherwise request the missing authorization. Authentication, scope, and network failures are not approval gates: diagnose them, never turn them into a successful retry.\n\nKeep all subsequent examples and real invocations bound to this exact prefix, including explicit \`--profile\`. Do not disclose credentials in replies or logs.\n`;
79
+ return { name, content };
80
+ }
81
+ async function existingKind(path) {
82
+ try {
83
+ const stat = await lstat(path);
84
+ if (stat.isSymbolicLink())
85
+ return 'symlink';
86
+ if (stat.isDirectory())
87
+ return 'directory';
88
+ if (stat.isFile())
89
+ return 'file';
90
+ return 'other';
91
+ }
92
+ catch (error) {
93
+ if (error.code === 'ENOENT')
94
+ return 'missing';
95
+ throw error;
96
+ }
97
+ }
98
+ async function ensureRealDirectory(path) {
99
+ const absolute = resolve(path);
100
+ const root = parse(absolute).root;
101
+ let current = root;
102
+ for (const segment of relative(root, absolute).split(sep).filter(Boolean)) {
103
+ current = join(current, segment);
104
+ const kind = await existingKind(current);
105
+ if (kind === 'missing')
106
+ await mkdir(current, { mode: 0o700 });
107
+ else if (kind !== 'directory')
108
+ throw new Error(`lark business skill: directory path is ${kind}: ${current}`);
109
+ }
110
+ }
111
+ async function hasExistingRealDirectory(path) {
112
+ const absolute = resolve(path);
113
+ const root = parse(absolute).root;
114
+ let current = root;
115
+ for (const segment of relative(root, absolute).split(sep).filter(Boolean)) {
116
+ current = join(current, segment);
117
+ const kind = await existingKind(current);
118
+ if (kind === 'missing')
119
+ return false;
120
+ if (kind !== 'directory')
121
+ throw new Error(`lark business skill: directory path is ${kind}: ${current}`);
122
+ }
123
+ return true;
124
+ }
125
+ function metadataBinding(content, name) {
126
+ const marker = `${markerPrefix}${name} -->`;
127
+ const separator = `\n---\n${marker}\n`;
128
+ const end = content.startsWith('---\n') ? content.indexOf(separator, 4) : -1;
129
+ if (end < 0)
130
+ throw new Error('lark business skill: existing SKILL.md is not managed by this installer');
131
+ try {
132
+ const document = parseYaml(content.slice(4, end));
133
+ if (typeof document !== 'object' || document === null || Array.isArray(document))
134
+ return undefined;
135
+ const metadata = document.metadata;
136
+ return typeof metadata === 'object' && metadata !== null && !Array.isArray(metadata)
137
+ ? metadata : undefined;
138
+ }
139
+ catch {
140
+ return undefined;
141
+ }
142
+ }
143
+ /** Remove a stale managed skill after owner/app rotation or explicit opt-out. */
144
+ export async function reconcileLarkBusinessSkill(input) {
145
+ const binding = requireBinding(input);
146
+ if (typeof input.enabled !== 'boolean')
147
+ throw new Error('lark business skill: invalid enabled flag');
148
+ const dshHome = requireAbsolutePath(input.dshHome, 'dshHome', process.platform);
149
+ const previousAccount = input.previousAccount === undefined
150
+ ? undefined : requireIdentifier(input.previousAccount, 'previousAccount');
151
+ const reconcileName = async (name, removeRegardlessOfBinding) => {
152
+ const skillDir = join(dshHome, 'skills', name);
153
+ if (!await hasExistingRealDirectory(skillDir))
154
+ return;
155
+ const path = join(skillDir, 'SKILL.md');
156
+ const kind = await existingKind(path);
157
+ if (kind === 'missing')
158
+ return;
159
+ if (kind !== 'file')
160
+ throw new Error(`lark business skill: existing SKILL.md is ${kind}; refusing to replace it`);
161
+ const metadata = metadataBinding(await readFile(path, 'utf8'), name);
162
+ if (removeRegardlessOfBinding || !input.enabled || metadata?.appId !== binding.appId || metadata?.ownerUserId !== binding.ownerUserId
163
+ || metadata?.profile !== binding.profile || metadata?.account !== binding.account) {
164
+ await unlink(path);
165
+ }
166
+ };
167
+ if (previousAccount !== undefined && previousAccount !== binding.account) {
168
+ await reconcileName(skillName({ profile: binding.profile, account: previousAccount }), true);
169
+ }
170
+ await reconcileName(skillName(binding), false);
171
+ }
172
+ export async function installLarkBusinessSkill(input) {
173
+ const { name, content } = renderLarkBusinessSkill(input);
174
+ const dshHome = requireAbsolutePath(input.dshHome, 'dshHome', input.platform ?? process.platform);
175
+ const skillDir = join(dshHome, 'skills', name);
176
+ const path = join(skillDir, 'SKILL.md');
177
+ await ensureRealDirectory(skillDir);
178
+ const kind = await existingKind(path);
179
+ if (kind !== 'missing' && kind !== 'file') {
180
+ throw new Error(`lark business skill: existing SKILL.md is ${kind}; refusing to replace it`);
181
+ }
182
+ if (kind === 'file') {
183
+ const previous = await readFile(path, 'utf8');
184
+ metadataBinding(previous, name);
185
+ if (previous === content)
186
+ return { path, name };
187
+ }
188
+ else if ((await readdir(skillDir)).length !== 0) {
189
+ throw new Error('lark business skill: existing skill directory is not managed by this installer');
190
+ }
191
+ const temporary = join(skillDir, `.SKILL.md.${randomUUID()}.tmp`);
192
+ try {
193
+ await writeFile(temporary, content, { encoding: 'utf8', flag: 'wx', mode: 0o600 });
194
+ await rename(temporary, path);
195
+ }
196
+ catch (error) {
197
+ await unlink(temporary).catch(() => undefined);
198
+ throw error;
199
+ }
200
+ return { path, name };
201
+ }
202
+ //# sourceMappingURL=business-skill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"business-skill.js","sourceRoot":"","sources":["../src/business-skill.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { type PluginControlTrustConfig, type SourceReleaseAuthorityConfig, type SystemdHostAuthorityConfig } from '@dsh-enhanced/plugin-control-plane';
2
+ import { type RsiAuthorityResources } from './rsi-authority-resources.js';
3
+ import type { Pin, RsiAuthorityRuntime } from './rsi-authority-runtime.js';
4
+ import type { RsiSetupManifest } from './rsi-profile.js';
5
+ import type { RsiReleaseBuildConfig } from './rsi-release-build.js';
6
+ import type { RsiSourceWorkspace } from './rsi-source.js';
7
+ export interface RsiAuthorityConfigInput {
8
+ manifest: RsiSetupManifest;
9
+ resources: RsiAuthorityResources;
10
+ runtime: RsiAuthorityRuntime;
11
+ source: RsiSourceWorkspace;
12
+ releaseBuild: RsiReleaseBuildConfig;
13
+ executor: PluginControlTrustConfig['executor'];
14
+ systemctl: Pin & {
15
+ interpreter: Pin | null;
16
+ };
17
+ unitProperties: SystemdHostAuthorityConfig['template']['unitProperties'];
18
+ policies: SourceReleaseAuthorityConfig['grant']['policies'];
19
+ now: number;
20
+ }
21
+ /** Compile immutable configuration bytes. The caller creates private directories,
22
+ * writes files atomically, opens the Control Plane ledger, and runs the real
23
+ * filesystem and executable validators before any service is enabled. */
24
+ export declare function compileRsiAuthorityConfigs(input: RsiAuthorityConfigInput): {
25
+ files: Record<string, string>;
26
+ directories: string[];
27
+ trust: PluginControlTrustConfig;
28
+ };
29
+ //# sourceMappingURL=rsi-authority-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsi-authority-config.d.ts","sourceRoot":"","sources":["../src/rsi-authority-config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuE,KAAK,wBAAwB,EACjC,KAAK,4BAA4B,EAChF,KAAK,0BAA0B,EAAuC,MAAM,oCAAoC,CAAA;AAE3I,OAAO,EAAqB,KAAK,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AAC5F,OAAO,KAAK,EAAE,GAAG,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AA+BzD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,gBAAgB,CAAA;IAC1B,SAAS,EAAE,qBAAqB,CAAA;IAChC,OAAO,EAAE,mBAAmB,CAAA;IAC5B,MAAM,EAAE,kBAAkB,CAAA;IAC1B,YAAY,EAAE,qBAAqB,CAAA;IACnC,QAAQ,EAAE,wBAAwB,CAAC,UAAU,CAAC,CAAA;IAC9C,SAAS,EAAE,GAAG,GAAG;QAAE,WAAW,EAAE,GAAG,GAAG,IAAI,CAAA;KAAE,CAAA;IAC5C,cAAc,EAAE,0BAA0B,CAAC,UAAU,CAAC,CAAC,gBAAgB,CAAC,CAAA;IACxE,QAAQ,EAAE,4BAA4B,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAA;IAC3D,GAAG,EAAE,MAAM,CAAA;CACZ;AAED;;yEAEyE;AACzE,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,uBAAuB,GAAG;IAC1E,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,wBAAwB,CAAA;CACtF,CAgLA"}
@@ -0,0 +1,233 @@
1
+ import { createHash, createPublicKey } from 'node:crypto';
2
+ import { dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';
3
+ import { isDeepStrictEqual } from 'node:util';
4
+ import { defaultHostAttestationPolicy } from '@dsh-enhanced/plugin-control-plane';
5
+ import { rsiAuthorityRoles } from './rsi-authority-resources.js';
6
+ const phases = ['pr', 'review', 'merge', 'build', 'sign', 'publish', 'registry-verify', 'catalog-admission'];
7
+ const digest = (source) => createHash('sha256').update(source).digest('hex');
8
+ const json = (value) => `${JSON.stringify(value, null, 2)}\n`;
9
+ function fail(message) { throw new Error(`rsi authority config: ${message}`); }
10
+ function path(value, label) {
11
+ if (typeof value !== 'string' || !isAbsolute(value) || value === '/' || resolve(value) !== value
12
+ || value.includes('\0') || /[\r\n]/u.test(value))
13
+ fail(`${label} must be a canonical absolute path`);
14
+ return value;
15
+ }
16
+ function within(root, value, label) {
17
+ path(root, 'config root');
18
+ path(value, label);
19
+ const child = relative(root, value);
20
+ if (!child || child === '..' || child.startsWith(`..${sep}`) || isAbsolute(child))
21
+ fail(`${label} must be inside the authority config root`);
22
+ return value;
23
+ }
24
+ function finite(value, now, label) {
25
+ if (!Number.isSafeInteger(value) || value <= now)
26
+ fail(`${label} has expired`);
27
+ return value;
28
+ }
29
+ function positive(value, max, label) {
30
+ if (!Number.isSafeInteger(value) || value < 1 || value > max)
31
+ fail(`${label} is outside its finite limit`);
32
+ return value;
33
+ }
34
+ function checkedPin(value, label) {
35
+ path(value.path, label);
36
+ if (!/^[a-f0-9]{64}$/u.test(value.sha256))
37
+ fail(`${label} digest is invalid`);
38
+ return value;
39
+ }
40
+ /** Compile immutable configuration bytes. The caller creates private directories,
41
+ * writes files atomically, opens the Control Plane ledger, and runs the real
42
+ * filesystem and executable validators before any service is enabled. */
43
+ export function compileRsiAuthorityConfigs(input) {
44
+ const { manifest, resources, runtime, source, releaseBuild, executor, now } = input;
45
+ const cp = manifest.controlPlane, reviews = manifest.sourceReviews, env = manifest.serviceEnvironment?.target;
46
+ const jobs = cp.sourceJobs, approvals = cp.sourceApprovals, releases = cp.sourceReleases;
47
+ const adoption = cp.sourceAdoptions, observations = cp.taskObservations, qualification = cp.liveQualification;
48
+ if (manifest.schemaVersion !== 1 || resources.schemaVersion !== 1 || runtime.schemaVersion !== 1 || source.schemaVersion !== 1
49
+ || !Number.isSafeInteger(now) || now < 1 || !jobs || !approvals || !releases || !adoption || !observations || !qualification
50
+ || !cp.runtimeObserver || !cp.foregroundDeployments || !cp.sourceReleaseExecution || !env
51
+ || !adoption.liveQualification || !adoption.handoff || !adoption.hostDeploymentInputs)
52
+ fail('complete bounded-live deployment input is required');
53
+ const home = path(dirname(dirname(resources.root)), 'DSH_HOME');
54
+ if (resources.root !== join(home, 'rsi-authorities', manifest.targetProfile)
55
+ || resources.configRoot !== join(resources.root, 'config') || resources.stateRoot !== join(resources.root, 'state')
56
+ || runtime.root !== join(home, 'rsi-authority-runtimes', manifest.targetProfile)
57
+ || cp.runtimeObserver.profilePath !== join(home, 'profiles', manifest.targetProfile)
58
+ || adoption.profile !== manifest.targetProfile || observations.profilePath !== cp.runtimeObserver.profilePath
59
+ || qualification.profilePath !== cp.runtimeObserver.profilePath
60
+ || cp.catalogPath !== resources.catalog.path || jobs.repository !== source.repository
61
+ || source.baseline.targetBranch !== 'repairs' || !isDeepStrictEqual(jobs.baseline, source.baseline)
62
+ || reviews.repository !== source.baseline.remote || cp.sourceReleaseExecution.reviewDecisionRoot !== reviews.decisionRoot
63
+ || cp.sourceReleaseExecution.independentReview !== true || cp.sourceBuild?.versioning !== 'patch'
64
+ || reviews.owner.authorityId !== jobs.ownerRouteId || reviews.owner.principalId !== jobs.principalId
65
+ || reviews.owner.workspace !== jobs.workspace || reviews.owner.agentPreset !== jobs.preset
66
+ || !isDeepStrictEqual(reviews.plugins, input.policies.map(policy => policy.candidateId))
67
+ || adoption.liveQualification.authority !== resources.identities.qualification.authority
68
+ || adoption.liveQualification.keyId !== resources.identities.qualification.keyId
69
+ || manifest.serviceEnvironment?.coordinator?.DSH_SYSTEMD_HOST_ATTESTOR_CONFIG !== env.DSH_SYSTEMD_HOST_ATTESTOR_CONFIG)
70
+ fail('source, profile, owner, or policy binding differs');
71
+ for (const [name, client] of [['approval', approvals], ['release', releases], ['adoption', adoption.authority],
72
+ ['observation', observations.authority], ['qualification', qualification.authority]]) {
73
+ if (!isDeepStrictEqual(client.executable, runtime.executables[name])
74
+ || !isDeepStrictEqual(client.interpreter, runtime.node))
75
+ fail(`${name} client differs from prepared authority runtime`);
76
+ }
77
+ const ledgerPath = join(path(cp.statePath, 'Control Plane state'), 'control.sqlite');
78
+ const worktreeRoot = join(cp.statePath, 'source-worktrees');
79
+ const root = path(resources.configRoot, 'authority config root');
80
+ const trustPath = within(root, cp.trustPath, 'trust path');
81
+ const resolverPath = join(root, 'host-authority.json');
82
+ const hostWrapperPath = within(root, env.DSH_SYSTEMD_HOST_ATTESTOR_CONFIG, 'Host wrapper path');
83
+ const approvalPath = within(root, approvals.configPath, 'approval config path');
84
+ const releasePath = within(root, releases.configPath, 'release config path');
85
+ const adoptionPath = within(root, adoption.authority.configPath, 'adoption config path');
86
+ const observationPath = within(root, observations.authority.configPath, 'observation config path');
87
+ const qualificationPath = within(root, qualification.authority.configPath, 'qualification config path');
88
+ const expiry = Math.min(finite(jobs.expiresAt, now, 'source jobs'), finite(reviews.expiresAt, now, 'source reviews'), finite(observations.policy.expiresAt, now, 'task observation policy'));
89
+ positive(jobs.maxSubmissions, 10_000, 'source submissions');
90
+ positive(reviews.maxReviews, 10_000, 'source reviews');
91
+ positive(observations.policy.maximumObservations, 1_000, 'task observations');
92
+ if (input.policies.length < 1 || input.policies.length > 32 || new Set(input.policies.map(policy => policy.candidateId)).size !== input.policies.length
93
+ || new Set(reviews.plugins).size !== reviews.plugins.length)
94
+ fail('source policies must be distinct and finite');
95
+ for (const policy of input.policies) {
96
+ if (policy.targetBranch !== source.baseline.targetBranch || policy.dshBaseline !== executor.version
97
+ || policy.packageName !== `@dsh-enhanced/${policy.candidateId}` || policy.packagePath !== `plugins/${policy.candidateId}`
98
+ || policy.registryId !== resources.registry.id || policy.registryLocator !== resources.registry.locator
99
+ || policy.catalogId !== resources.catalog.id || policy.catalogPath !== resources.catalog.path
100
+ || policy.minimumReproducibleBuilds < 2)
101
+ fail(`release policy differs from deployment: ${policy.candidateId}`);
102
+ }
103
+ const role = (name) => resources.identities[name];
104
+ const key = (name) => {
105
+ const identity = role(name);
106
+ if (identity.keyPath !== join(resources.root, 'identities', `${name}.pem`)
107
+ || identity.authority !== `${name}-${resources.installationId}` || identity.keyId !== `${identity.authority}-key`)
108
+ fail(`identity differs: ${name}`);
109
+ try {
110
+ if (createPublicKey(identity.publicKeyPem).asymmetricKeyType !== 'ed25519')
111
+ fail(`identity is not Ed25519: ${name}`);
112
+ }
113
+ catch {
114
+ fail(`identity is invalid: ${name}`);
115
+ }
116
+ return { authority: identity.authority, keyId: identity.keyId, publicKeyPem: identity.publicKeyPem };
117
+ };
118
+ if (new Set(rsiAuthorityRoles.map(name => role(name).publicKeyPem)).size !== rsiAuthorityRoles.length)
119
+ fail('authority keys must be independent');
120
+ const files = {};
121
+ const directories = new Set([root, join(root, 'public-keys'), resources.stateRoot, cp.statePath, worktreeRoot,
122
+ reviews.decisionRoot, join(resources.stateRoot, 'reviews'), join(resources.stateRoot, 'release'),
123
+ join(resources.stateRoot, 'host-attestor'), join(resources.stateRoot, 'registry-download')]);
124
+ const add = (filename, value) => {
125
+ if (Object.hasOwn(files, filename))
126
+ fail(`config paths collide: ${filename}`);
127
+ files[filename] = json(value);
128
+ directories.add(dirname(filename));
129
+ };
130
+ const publicPath = (name) => join(root, 'public-keys', `${name}.pem`);
131
+ for (const name of rsiAuthorityRoles) {
132
+ const filename = publicPath(name);
133
+ if (Object.hasOwn(files, filename))
134
+ fail(`public key paths collide: ${name}`);
135
+ files[filename] = role(name).publicKeyPem;
136
+ }
137
+ const identity = (name) => ({ authority: role(name).authority, keyId: role(name).keyId,
138
+ publicKeyPath: publicPath(name) });
139
+ const base = (name) => ({ schemaVersion: 1, authority: role(name).authority,
140
+ keyId: role(name).keyId, keyPath: role(name).keyPath, statePath: join(resources.stateRoot, `${name}.json`), controlDatabasePath: ledgerPath });
141
+ const common = { repository: source.repository, worktreeRoot, owner: reviews.owner, plugins: [...reviews.plugins],
142
+ maxChangedFiles: positive(reviews.maxChangedFiles, 256, 'changed files'),
143
+ maxChangedBytes: positive(reviews.maxInputBytes, 16 * 1024 * 1024, 'changed bytes'), receiptTtlMs: 60_000 };
144
+ const approvalConfig = { ...base('approval'), grant: { id: `approval-${resources.installationId}`,
145
+ expiresAt: expiry, maxApprovals: Math.min(jobs.maxSubmissions, reviews.maxReviews), ...common, versioning: 'patch' } };
146
+ const releaseConfig = { ...base('release'), grant: { id: `release-${resources.installationId}`,
147
+ expiresAt: expiry, maxReleases: Math.min(jobs.maxSubmissions, reviews.maxReviews), ...common, versioning: 'patch', policies: input.policies } };
148
+ const ledger = { id: resources.ledgerId, path: ledgerPath };
149
+ const profilePath = join(home, 'profiles', manifest.targetProfile);
150
+ const packages = reviews.plugins.map(name => `@dsh-enhanced/${name}`);
151
+ const adoptionPolicies = input.policies.map(({ candidateId, packageName, dshBaseline, capabilities, authorities, requires, registryId, registryLocator }) => ({ candidateId, packageName, dshBaseline, capabilities, authorities, requires, registryId, registryLocator }));
152
+ const adoptionConfig = { ...base('adoption'), grant: { id: `adoption-${resources.installationId}`,
153
+ expiresAt: expiry, maxAdoptions: Math.min(jobs.maxSubmissions, reviews.maxReviews), owner: reviews.owner,
154
+ installationId: resources.installationId, ledger, target: { dshHome: home, profile: manifest.targetProfile, profilePath },
155
+ executor: { id: executor.id, version: executor.version, path: executor.path, sha256: executor.sha256 },
156
+ catalogPath: resources.catalog.path, receiptTtlMs: 60_000, handoff: adoption.handoff,
157
+ liveQualification: adoption.liveQualification, hostDeploymentInputs: adoption.hostDeploymentInputs, policies: adoptionPolicies } };
158
+ const observationConfig = { ...base('observation'), grant: { policy: observations.policy,
159
+ owner: reviews.owner, installationId: resources.installationId, ledger, profilePath, packages, receiptTtlMs: 60_000 } };
160
+ const qualificationConfig = { ...base('qualification'), grant: { id: `qualification-${resources.installationId}`,
161
+ expiresAt: expiry, maxQualifications: Math.min(jobs.maxSubmissions, observations.policy.maximumObservations, 1_000),
162
+ owner: reviews.owner, installationId: resources.installationId, ledger, profilePath, packages,
163
+ terms: adoption.liveQualification, receiptTtlMs: 60_000 } };
164
+ add(approvalPath, approvalConfig);
165
+ add(releasePath, releaseConfig);
166
+ add(adoptionPath, adoptionConfig);
167
+ add(observationPath, observationConfig);
168
+ add(qualificationPath, qualificationConfig);
169
+ const releaseAdapters = {};
170
+ for (const phase of phases) {
171
+ const envName = `DSH_RELEASE_${phase.toUpperCase().replaceAll('-', '_')}_CONFIG`;
172
+ const configPath = within(root, env[envName], `${phase} adapter path`);
173
+ const executable = checkedPin(runtime.releaseAdapters[phase], `${phase} adapter`);
174
+ const stateRoot = join(resources.stateRoot, 'release', phase);
175
+ directories.add(stateRoot);
176
+ const adapter = { schemaVersion: 1, id: `release-${phase}-${resources.installationId}`, phase,
177
+ executablePath: executable.path, authority: role(phase).authority, keyId: role(phase).keyId,
178
+ privateKeyPath: role(phase).keyPath, authorizationAuthority: identity('release'), stateRoot,
179
+ git: { executable: checkedPin(reviews.git, 'review Git'), remote: source.baseline.remote,
180
+ targetBranch: source.baseline.targetBranch, authorName: 'DSH self iteration',
181
+ authorEmail: `agent-${resources.installationId}@dsh.invalid`, reviewStore: join(resources.stateRoot, 'reviews'),
182
+ reviewDecisionRoot: reviews.decisionRoot, reviewAuthority: identity('review') },
183
+ build: releaseBuild,
184
+ registry: { ...resources.registry, downloadRoot: join(resources.stateRoot, 'registry-download'), signer: identity('sign') },
185
+ catalog: { ...resources.catalog, helper: checkedPin(runtime.catalogValidator, 'catalog validator'),
186
+ interpreter: checkedPin(runtime.node, 'catalog Node') },
187
+ ...(phase === 'catalog-admission' ? { registryVerifier: identity('registry-verify') } : {}) };
188
+ add(configPath, adapter);
189
+ releaseAdapters[phase] = { id: adapter.id, version: 'dsh-local-release-adapter-1', ...executable,
190
+ interpreter: checkedPin(runtime.node, 'adapter Node'), authority: role(phase).authority, keyId: role(phase).keyId,
191
+ timeoutMs: 300_000, environmentAllowlist: [envName] };
192
+ }
193
+ const hostTemplate = {
194
+ authority: role('host').authority, keyId: role('host').keyId, privateKeyPath: role('host').keyPath,
195
+ stateRoot: join(resources.stateRoot, 'host-attestor'), executable: checkedPin(runtime.executables.hostAttestor, 'Host attestor'),
196
+ interpreter: checkedPin(runtime.node, 'Host Node'), processHelper: checkedPin(runtime.processHelper, 'process helper'),
197
+ systemctl: { ...checkedPin(input.systemctl, 'systemctl'), interpreter: input.systemctl.interpreter === null ? null
198
+ : checkedPin(input.systemctl.interpreter, 'systemctl interpreter') }, scope: 'user',
199
+ unit: `dsh-profile-${manifest.targetProfile}.service`, unitProperties: input.unitProperties,
200
+ timeoutMs: 20_000, stableWindowMs: 1_000, pollIntervalMs: 100,
201
+ readiness: { client: checkedPin(runtime.observerClient, 'observer client'), observer: cp.runtimeObserver },
202
+ recoveryReadiness: { client: checkedPin(runtime.observerClient, 'recovery observer client'), observer: cp.runtimeObserver },
203
+ };
204
+ const hostConfig = { schemaVersion: 1, statePath: join(resources.stateRoot, 'host-authority.json'),
205
+ controlDatabasePath: ledgerPath, trustPath, grant: { id: `host-${resources.installationId}`, notBefore: now,
206
+ expiresAt: expiry, maximumReloads: Math.min(jobs.maxSubmissions, 1_000), owner: reviews.owner,
207
+ profile: { name: manifest.targetProfile, path: profilePath }, packages,
208
+ coordinatorId: adoption.handoff.coordinatorId, hostDeploymentInputs: adoption.hostDeploymentInputs,
209
+ liveQualification: adoption.liveQualification }, template: hostTemplate };
210
+ const resolverSource = json(hostConfig);
211
+ add(resolverPath, hostConfig);
212
+ add(hostWrapperPath, { schemaVersion: 4, template: hostTemplate,
213
+ resolver: { executable: checkedPin(runtime.executables.hostAuthority, 'Host resolver'),
214
+ interpreter: checkedPin(runtime.node, 'resolver Node'), configPath: resolverPath,
215
+ configSha256: digest(resolverSource), timeoutMs: 10_000 } });
216
+ const trust = { schemaVersion: 4, installationId: resources.installationId, dshHome: home, ledger,
217
+ executor, hostPolicy: defaultHostAttestationPolicy,
218
+ hostAttestor: { id: `host-attestor-${resources.installationId}`, version: 'dsh-systemd-host-attestor-8',
219
+ ...checkedPin(runtime.executables.hostAttestor, 'Host attestor'), interpreter: checkedPin(runtime.node, 'Host Node'),
220
+ environmentAllowlist: ['DSH_SYSTEMD_HOST_ATTESTOR_CONFIG'], authority: role('host').authority, keyId: role('host').keyId,
221
+ timeoutMs: 60_000 }, catalog: resources.catalog,
222
+ releaseRegistry: { id: resources.registry.id, locator: resources.registry.locator, protocol: 'dsh', caPins: [], tokenEnvironment: null },
223
+ releaseReceiptTtlMs: 60_000, releaseAdapters,
224
+ approvalKeys: [key('approval'), key('adoption')], hostAttestationKeys: [key('host'), key('observation'), key('qualification')],
225
+ releaseKeys: phases.map(name => key(name)), releaseAuthorizationKeys: [key('release')] };
226
+ // Local file registries carry no CA or token fields on disk. The trust
227
+ // loader normalizes both to []/null after applying the schema-4 contract.
228
+ add(trustPath, { ...trust, releaseRegistry: { id: resources.registry.id, locator: resources.registry.locator, protocol: 'dsh' } });
229
+ if (new Set(Object.keys(files)).size !== rsiAuthorityRoles.length + 5 + phases.length + 2 + 1)
230
+ fail('generated config path collision');
231
+ return { files, directories: [...directories].sort(), trust };
232
+ }
233
+ //# sourceMappingURL=rsi-authority-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsi-authority-config.js","sourceRoot":"","sources":["../src/rsi-authority-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ export declare const rsiAuthorityRoles: readonly ["approval", "release", "adoption", "observation", "qualification", "host", "pr", "review", "merge", "build", "sign", "publish", "registry-verify", "catalog-admission"];
2
+ type Role = typeof rsiAuthorityRoles[number];
3
+ export interface RsiAuthorityIdentity {
4
+ authority: string;
5
+ keyId: string;
6
+ keyPath: string;
7
+ publicKeyPem: string;
8
+ }
9
+ export interface RsiAuthorityResources {
10
+ schemaVersion: 1;
11
+ root: string;
12
+ installationId: string;
13
+ ledgerId: string;
14
+ identities: Record<Role, RsiAuthorityIdentity>;
15
+ registry: {
16
+ id: string;
17
+ root: string;
18
+ locator: string;
19
+ };
20
+ catalog: {
21
+ id: string;
22
+ path: string;
23
+ };
24
+ stateRoot: string;
25
+ configRoot: string;
26
+ }
27
+ /** Caller holds the DSH_HOME lifecycle lock. This creates identities and local
28
+ * storage, not grants; owner-bound authorization is configured separately. */
29
+ export declare function prepareRsiAuthorityResources(input: {
30
+ dshHome: string;
31
+ profile: string;
32
+ signal?: AbortSignal;
33
+ existingOnly?: boolean;
34
+ }): Promise<RsiAuthorityResources>;
35
+ export {};
36
+ //# sourceMappingURL=rsi-authority-resources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsi-authority-resources.d.ts","sourceRoot":"","sources":["../src/rsi-authority-resources.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,iBAAiB,mLACyE,CAAA;AACvG,KAAK,IAAI,GAAG,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAA;AAC5C,MAAM,WAAW,oBAAoB;IAAG,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE;AACjH,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;IACxE,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAA;IAC9C,QAAQ,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IACvD,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IACrC,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CACtC;AAyDD;8EAC8E;AAC9E,wBAAsB,4BAA4B,CAAC,KAAK,EAAE;IACxD,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAC/E,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAiDjC"}