@agent-network-protocol/dsh-anp-identity 0.1.6 → 0.1.8
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/BOUNDARY.md +30 -5
- package/PUBLICATION.md +181 -0
- package/README.md +73 -1
- package/README.zh.md +44 -1
- package/V7-MANAGEMENT.md +18 -0
- package/cordis.patch.yml +9 -0
- package/examples/fresh-bootstrap.cordis.patch.yml +38 -0
- package/lib/authorization-types.d.ts +6 -0
- package/lib/authorization-types.d.ts.map +1 -1
- package/lib/authorization.d.ts.map +1 -1
- package/lib/authorization.js +23 -6
- package/lib/authorization.js.map +1 -1
- package/lib/catalog.d.ts +3 -1
- package/lib/catalog.d.ts.map +1 -1
- package/lib/catalog.js +15 -3
- package/lib/catalog.js.map +1 -1
- package/lib/client/controller.d.ts +18 -0
- package/lib/client/controller.d.ts.map +1 -1
- package/lib/client/controller.js +89 -5
- package/lib/client/controller.js.map +1 -1
- package/lib/client/views.d.ts.map +1 -1
- package/lib/client/views.js +37 -6
- package/lib/client/views.js.map +1 -1
- package/lib/client-metadata.d.ts +3 -0
- package/lib/client-metadata.d.ts.map +1 -0
- package/lib/client-metadata.js +11 -0
- package/lib/client-metadata.js.map +1 -0
- package/lib/client.js +260 -14
- package/lib/client.js.map +4 -4
- package/lib/host-management-secret.d.ts +41 -0
- package/lib/host-management-secret.d.ts.map +1 -0
- package/lib/host-management-secret.js +92 -0
- package/lib/host-management-secret.js.map +1 -0
- package/lib/index.d.ts +73 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +331 -22
- package/lib/index.js.map +1 -1
- package/lib/initial-registration-proof.d.ts +13 -0
- package/lib/initial-registration-proof.d.ts.map +1 -0
- package/lib/initial-registration-proof.js +48 -0
- package/lib/initial-registration-proof.js.map +1 -0
- package/lib/installed-consumer.d.ts +25 -0
- package/lib/installed-consumer.d.ts.map +1 -0
- package/lib/installed-consumer.js +66 -0
- package/lib/installed-consumer.js.map +1 -0
- package/lib/management-credentials.d.ts +15 -0
- package/lib/management-credentials.d.ts.map +1 -0
- package/lib/management-credentials.js +126 -0
- package/lib/management-credentials.js.map +1 -0
- package/lib/management-driver.d.ts +83 -0
- package/lib/management-driver.d.ts.map +1 -0
- package/lib/management-driver.js +405 -0
- package/lib/management-driver.js.map +1 -0
- package/lib/management-remote.d.ts +27 -1
- package/lib/management-remote.d.ts.map +1 -1
- package/lib/management-remote.js +69 -3
- package/lib/management-remote.js.map +1 -1
- package/lib/management-types.d.ts +7 -0
- package/lib/management-types.d.ts.map +1 -1
- package/lib/pap-callback.d.ts +110 -0
- package/lib/pap-callback.d.ts.map +1 -0
- package/lib/pap-callback.js +51 -0
- package/lib/pap-callback.js.map +1 -0
- package/lib/protocol-bootstrap.d.ts +24 -0
- package/lib/protocol-bootstrap.d.ts.map +1 -0
- package/lib/protocol-bootstrap.js +34 -0
- package/lib/protocol-bootstrap.js.map +1 -0
- package/lib/protocol-client.d.ts +137 -0
- package/lib/protocol-client.d.ts.map +1 -0
- package/lib/protocol-client.js +11 -0
- package/lib/protocol-client.js.map +1 -0
- package/lib/provider-api.d.ts +6 -2
- package/lib/provider-api.d.ts.map +1 -1
- package/lib/provider-api.js.map +1 -1
- package/lib/publication-http.d.ts +19 -0
- package/lib/publication-http.d.ts.map +1 -0
- package/lib/publication-http.js +183 -0
- package/lib/publication-http.js.map +1 -0
- package/lib/publication-types.d.ts +161 -0
- package/lib/publication-types.d.ts.map +1 -0
- package/lib/publication-types.js +35 -0
- package/lib/publication-types.js.map +1 -0
- package/lib/publication.d.ts +21 -0
- package/lib/publication.d.ts.map +1 -0
- package/lib/publication.js +235 -0
- package/lib/publication.js.map +1 -0
- package/lib/registration-bootstrap.d.ts +56 -0
- package/lib/registration-bootstrap.d.ts.map +1 -0
- package/lib/registration-bootstrap.js +523 -0
- package/lib/registration-bootstrap.js.map +1 -0
- package/lib/registration-service-settings.d.ts +12 -0
- package/lib/registration-service-settings.d.ts.map +1 -0
- package/lib/registration-service-settings.js +124 -0
- package/lib/registration-service-settings.js.map +1 -0
- package/lib/registration-service-types.d.ts +11 -0
- package/lib/registration-service-types.d.ts.map +1 -0
- package/lib/registration-service-types.js +3 -0
- package/lib/registration-service-types.js.map +1 -0
- package/lib/remote.d.ts.map +1 -1
- package/lib/remote.js +11 -2
- package/lib/remote.js.map +1 -1
- package/lib/target-policy.d.ts +35 -0
- package/lib/target-policy.d.ts.map +1 -0
- package/lib/target-policy.js +319 -0
- package/lib/target-policy.js.map +1 -0
- package/lib/user-client.d.ts +6 -0
- package/lib/user-client.d.ts.map +1 -1
- package/lib/user-client.js.map +1 -1
- package/lib/user-operation.d.ts.map +1 -1
- package/lib/user-operation.js +9 -0
- package/lib/user-operation.js.map +1 -1
- package/lib/user-service.d.ts +8 -1
- package/lib/user-service.d.ts.map +1 -1
- package/lib/user-service.js +58 -4
- package/lib/user-service.js.map +1 -1
- package/package.json +51 -29
|
@@ -0,0 +1,523 @@
|
|
|
1
|
+
import { DEFAULT_REGISTRATION_ORIGIN } from './registration-service-types.js';
|
|
2
|
+
import { createHash, randomUUID } from 'node:crypto';
|
|
3
|
+
import { lstat, mkdir, open, readFile, readdir, realpath, rename, unlink } from 'node:fs/promises';
|
|
4
|
+
import { readFileSync } from 'node:fs';
|
|
5
|
+
import { isAbsolute, join } from 'node:path';
|
|
6
|
+
import { setTimeout } from 'node:timers/promises';
|
|
7
|
+
import lockfile from 'proper-lockfile';
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
import { EncryptedManagementCredentialBroker } from './management-credentials.js';
|
|
10
|
+
import { exactHttps, parsePublicJson, publicationRedirectUri } from './publication-http.js';
|
|
11
|
+
import { PublicationCapabilitiesSchema } from './publication-types.js';
|
|
12
|
+
import { PROTOCOL_BOOTSTRAP_CONSUMER } from './protocol-bootstrap.js';
|
|
13
|
+
import { syncDirectory } from './sync-directory.js';
|
|
14
|
+
import { identityClientVersionHeader } from './client-metadata.js';
|
|
15
|
+
export const RegistrationBootstrapConfigSchema = z.object({
|
|
16
|
+
id: z.string().regex(/^[A-Za-z0-9_-]{1,64}$/u),
|
|
17
|
+
requestId: z.string().min(1).max(128),
|
|
18
|
+
stateRoot: z.string().refine(isAbsolute),
|
|
19
|
+
origin: z.string().refine(value => { try {
|
|
20
|
+
return new URL(exactHttps(value)).origin === value;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return false;
|
|
24
|
+
} }).default(DEFAULT_REGISTRATION_ORIGIN),
|
|
25
|
+
email: z.string().email().max(254).transform(value => value.trim().toLowerCase()).optional(),
|
|
26
|
+
phone: z.string().regex(/^\+[1-9][0-9]{6,14}$/u).optional(),
|
|
27
|
+
clientName: z.string().trim().min(1).max(128),
|
|
28
|
+
capabilities: PublicationCapabilitiesSchema.default({ mcpMachine: true, papSession: false, papAccount: false }),
|
|
29
|
+
redirectUris: z.array(z.string().max(2048)).max(8).default([]),
|
|
30
|
+
managementAudience: z.string().min(1).max(256).default('awiki-user-service'),
|
|
31
|
+
pollIntervalMs: z.number().int().min(100).max(60000).default(5000),
|
|
32
|
+
providerReadyTimeoutMs: z.number().int().min(1000).max(60000).default(10000),
|
|
33
|
+
}).strict().superRefine((value, context) => {
|
|
34
|
+
if (Boolean(value.email) === Boolean(value.phone)) {
|
|
35
|
+
context.addIssue({ code: 'custom', message: 'Select exactly one registration contact method' });
|
|
36
|
+
}
|
|
37
|
+
if (value.capabilities.papAccount && value.redirectUris.length === 0
|
|
38
|
+
|| new Set(value.redirectUris).size !== value.redirectUris.length) {
|
|
39
|
+
context.addIssue({ code: 'custom', message: 'Invalid protocol callback configuration', path: ['redirectUris'] });
|
|
40
|
+
}
|
|
41
|
+
for (const uri of value.redirectUris) {
|
|
42
|
+
try {
|
|
43
|
+
publicationRedirectUri(uri, value.capabilities);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
context.addIssue({ code: 'custom', message: 'Invalid protocol callback configuration', path: ['redirectUris'] });
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
const JournalSchema = z.object({
|
|
51
|
+
schema: z.literal(1), fingerprint: z.string().regex(/^[a-f0-9]{64}$/u),
|
|
52
|
+
emailAttempted: z.boolean(), phoneAttempted: z.boolean().default(false), phoneDelivered: z.boolean().default(false),
|
|
53
|
+
registerStarted: z.boolean(), registered: z.boolean(),
|
|
54
|
+
webOperationId: z.string().uuid().optional(),
|
|
55
|
+
}).strict();
|
|
56
|
+
const digest = (value) => createHash('sha256').update(value).digest('hex');
|
|
57
|
+
class BootstrapUpgradeRequired extends Error {
|
|
58
|
+
registrationRejected;
|
|
59
|
+
code = 'client_upgrade_required';
|
|
60
|
+
constructor(registrationRejected) {
|
|
61
|
+
super('The identity client requires an admission upgrade.');
|
|
62
|
+
this.registrationRejected = registrationRejected;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
class BootstrapCredentialStateUnavailable extends Error {
|
|
66
|
+
code = 'credential_unavailable';
|
|
67
|
+
constructor() { super('The management credential state is unavailable.'); }
|
|
68
|
+
}
|
|
69
|
+
async function responseObject(response, maximum, cancelPeer) {
|
|
70
|
+
const reader = response.body?.getReader();
|
|
71
|
+
const chunks = [];
|
|
72
|
+
let size = 0;
|
|
73
|
+
try {
|
|
74
|
+
while (reader) {
|
|
75
|
+
const part = await reader.read();
|
|
76
|
+
if (part.done)
|
|
77
|
+
break;
|
|
78
|
+
size += part.value.length;
|
|
79
|
+
if (size > maximum)
|
|
80
|
+
throw new Error('bootstrap_response_unavailable');
|
|
81
|
+
chunks.push(part.value);
|
|
82
|
+
}
|
|
83
|
+
const value = parsePublicJson(new TextDecoder('utf-8', { fatal: true }).decode(Buffer.concat(chunks)));
|
|
84
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
85
|
+
throw new Error('bootstrap_response_unavailable');
|
|
86
|
+
return value;
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
cancelPeer?.();
|
|
90
|
+
throw error;
|
|
91
|
+
}
|
|
92
|
+
finally {
|
|
93
|
+
await reader?.cancel();
|
|
94
|
+
reader?.releaseLock();
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
function clientVersionHeader() {
|
|
98
|
+
return identityClientVersionHeader(JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8')));
|
|
99
|
+
}
|
|
100
|
+
/** Install the configured manager-owned flow. Its caller supplies the actual management facade and Context.
|
|
101
|
+
* @param options - Non-secret configuration, actual Host management authority and optional HTTP transport.
|
|
102
|
+
* @returns A safe status projection and quiescent disposer.
|
|
103
|
+
*/
|
|
104
|
+
export function startRegistrationBootstrap(options) {
|
|
105
|
+
const config = RegistrationBootstrapConfigSchema.parse(options.config);
|
|
106
|
+
const controller = new AbortController();
|
|
107
|
+
const header = clientVersionHeader();
|
|
108
|
+
const fingerprint = digest(JSON.stringify(config));
|
|
109
|
+
const startedAt = Date.now();
|
|
110
|
+
let view = { id: config.id, requestId: config.requestId, phase: 'awaiting_approval', origin: config.origin, clientVersion: header };
|
|
111
|
+
let secret;
|
|
112
|
+
let broker;
|
|
113
|
+
let root;
|
|
114
|
+
let brokerRoot;
|
|
115
|
+
let providerFence;
|
|
116
|
+
let pinnedReference;
|
|
117
|
+
let manager = options.manager;
|
|
118
|
+
let backend;
|
|
119
|
+
let otpCode;
|
|
120
|
+
const assertManagerActive = () => {
|
|
121
|
+
controller.signal.throwIfAborted();
|
|
122
|
+
// This assertion retains the real manager Loader identity; it never accepts a caller string.
|
|
123
|
+
options.service.acquireManagement(options.context);
|
|
124
|
+
};
|
|
125
|
+
const assertActive = () => { assertManagerActive(); providerFence?.(); };
|
|
126
|
+
const update = (phase, reason) => {
|
|
127
|
+
view = { ...view, phase };
|
|
128
|
+
delete view.reason;
|
|
129
|
+
if (reason)
|
|
130
|
+
view.reason = reason;
|
|
131
|
+
};
|
|
132
|
+
const send = async (input, init) => {
|
|
133
|
+
assertActive();
|
|
134
|
+
const request = new Request(input, init);
|
|
135
|
+
if (new URL(request.url).origin !== config.origin)
|
|
136
|
+
throw new Error('bootstrap_origin_mismatch');
|
|
137
|
+
request.headers.set('X-AWiki-Client-Version', header);
|
|
138
|
+
const isRegister = request.method === 'POST' && new URL(request.url).pathname === '/user-service/v1/did-auth/rpc'
|
|
139
|
+
&& (await request.clone().json()).method === 'register';
|
|
140
|
+
assertActive();
|
|
141
|
+
const reply = await (options.fetch ?? fetch)(new Request(request, {
|
|
142
|
+
redirect: 'manual', signal: AbortSignal.any([request.signal, controller.signal]),
|
|
143
|
+
}));
|
|
144
|
+
try {
|
|
145
|
+
assertActive();
|
|
146
|
+
if ((reply.headers.get('content-type') ?? '').startsWith('application/json')) {
|
|
147
|
+
const envelope = await responseObject(reply.clone(), 131072, () => { void reply.body?.cancel().catch(() => { }); });
|
|
148
|
+
assertActive();
|
|
149
|
+
const error = envelope.error;
|
|
150
|
+
if (error?.data?.awiki_code === 'client.upgrade_required') {
|
|
151
|
+
await reply.body?.cancel();
|
|
152
|
+
throw new BootstrapUpgradeRequired(isRegister);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
assertActive();
|
|
156
|
+
return reply;
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
await reply.body?.cancel();
|
|
160
|
+
throw error;
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
const json = async (request) => {
|
|
164
|
+
const response = await send(request);
|
|
165
|
+
if (response.status !== 200 || response.redirected || !(response.headers.get('content-type') ?? '').startsWith('application/json')) {
|
|
166
|
+
await response.body?.cancel();
|
|
167
|
+
throw new Error(config.phone ? 'bootstrap_phone_unavailable' : 'bootstrap_email_unavailable');
|
|
168
|
+
}
|
|
169
|
+
const value = await responseObject(response, 32768);
|
|
170
|
+
assertActive();
|
|
171
|
+
return value;
|
|
172
|
+
};
|
|
173
|
+
const setup = async () => {
|
|
174
|
+
if (root)
|
|
175
|
+
return;
|
|
176
|
+
await mkdir(config.stateRoot, { recursive: true, mode: 0o700 });
|
|
177
|
+
assertActive();
|
|
178
|
+
const base = await realpath(config.stateRoot);
|
|
179
|
+
assertActive();
|
|
180
|
+
if ((await lstat(base)).mode & 0o077)
|
|
181
|
+
throw new Error('bootstrap_state_unavailable');
|
|
182
|
+
root = join(base, 'registration-bootstrap', digest(config.id));
|
|
183
|
+
await mkdir(root, { recursive: true, mode: 0o700 });
|
|
184
|
+
assertActive();
|
|
185
|
+
const rootInfo = await lstat(root);
|
|
186
|
+
if (!rootInfo.isDirectory() || rootInfo.isSymbolicLink())
|
|
187
|
+
throw new Error('bootstrap_state_unavailable');
|
|
188
|
+
brokerRoot = join(root, 'credentials');
|
|
189
|
+
await mkdir(brokerRoot, { recursive: true, mode: 0o700 });
|
|
190
|
+
assertActive();
|
|
191
|
+
const brokerInfo = await lstat(brokerRoot);
|
|
192
|
+
if (!brokerInfo.isDirectory() || brokerInfo.isSymbolicLink())
|
|
193
|
+
throw new Error('bootstrap_state_unavailable');
|
|
194
|
+
const { createHostManagementSecret } = await import('./host-management-secret.js');
|
|
195
|
+
assertActive();
|
|
196
|
+
secret = createHostManagementSecret({
|
|
197
|
+
context: { get credentials() { return options.context.get('credentials'); } },
|
|
198
|
+
stateRoot: brokerRoot, bootstrapId: config.id, assertActive,
|
|
199
|
+
hasExistingCiphertext: async () => {
|
|
200
|
+
try {
|
|
201
|
+
const info = await lstat(brokerRoot);
|
|
202
|
+
if (!info.isDirectory() || info.isSymbolicLink())
|
|
203
|
+
return true;
|
|
204
|
+
const entries = await readdir(brokerRoot, { withFileTypes: true });
|
|
205
|
+
return entries.some(entry => !(entry.isDirectory() && /^[a-f0-9]{64}\.json\.lock$/u.test(entry.name)));
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
if (error.code === 'ENOENT')
|
|
209
|
+
return false;
|
|
210
|
+
throw error;
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
});
|
|
214
|
+
broker = new EncryptedManagementCredentialBroker(brokerRoot, () => secret.getKey());
|
|
215
|
+
};
|
|
216
|
+
const establishKey = async (requireExisting) => {
|
|
217
|
+
const marker = join(brokerRoot, '.key-established');
|
|
218
|
+
if (requireExisting) {
|
|
219
|
+
try {
|
|
220
|
+
const info = await lstat(marker);
|
|
221
|
+
assertActive();
|
|
222
|
+
if (!info.isFile() || info.isSymbolicLink() || (info.mode & 0o077))
|
|
223
|
+
throw new BootstrapCredentialStateUnavailable();
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
throw new BootstrapCredentialStateUnavailable();
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
const key = await secret.getKey();
|
|
230
|
+
try {
|
|
231
|
+
assertActive();
|
|
232
|
+
}
|
|
233
|
+
finally {
|
|
234
|
+
key.fill(0);
|
|
235
|
+
}
|
|
236
|
+
let file;
|
|
237
|
+
try {
|
|
238
|
+
file = await open(marker, 'wx', 0o600);
|
|
239
|
+
}
|
|
240
|
+
catch (error) {
|
|
241
|
+
if (error.code !== 'EEXIST')
|
|
242
|
+
throw error;
|
|
243
|
+
const info = await lstat(marker);
|
|
244
|
+
if (!info.isFile() || info.isSymbolicLink() || (info.mode & 0o077))
|
|
245
|
+
throw new Error('bootstrap_state_unavailable');
|
|
246
|
+
assertActive();
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
try {
|
|
250
|
+
assertActive();
|
|
251
|
+
await file.writeFile('1\n');
|
|
252
|
+
assertActive();
|
|
253
|
+
await file.sync();
|
|
254
|
+
assertActive();
|
|
255
|
+
}
|
|
256
|
+
finally {
|
|
257
|
+
await file.close();
|
|
258
|
+
}
|
|
259
|
+
await syncDirectory(brokerRoot);
|
|
260
|
+
assertActive();
|
|
261
|
+
};
|
|
262
|
+
const journal = async () => {
|
|
263
|
+
try {
|
|
264
|
+
const path = join(root, 'state.json');
|
|
265
|
+
const info = await lstat(path);
|
|
266
|
+
if (!info.isFile() || info.isSymbolicLink() || (info.mode & 0o077) || info.size > 16384)
|
|
267
|
+
throw new Error('bootstrap_state_unavailable');
|
|
268
|
+
const value = JournalSchema.parse(JSON.parse(await readFile(path, 'utf8')));
|
|
269
|
+
assertActive();
|
|
270
|
+
if (value.fingerprint !== fingerprint)
|
|
271
|
+
throw new Error('bootstrap_configuration_changed');
|
|
272
|
+
return value;
|
|
273
|
+
}
|
|
274
|
+
catch (error) {
|
|
275
|
+
if (error.code !== 'ENOENT')
|
|
276
|
+
throw error;
|
|
277
|
+
return { schema: 1, fingerprint, emailAttempted: false, phoneAttempted: false, phoneDelivered: false, registerStarted: false, registered: false };
|
|
278
|
+
}
|
|
279
|
+
};
|
|
280
|
+
const save = async (value) => {
|
|
281
|
+
assertActive();
|
|
282
|
+
const temporary = join(root, 'state-' + randomUUID());
|
|
283
|
+
const handle = await open(temporary, 'wx', 0o600);
|
|
284
|
+
try {
|
|
285
|
+
assertActive();
|
|
286
|
+
await handle.writeFile(JSON.stringify(value));
|
|
287
|
+
assertActive();
|
|
288
|
+
await handle.sync();
|
|
289
|
+
assertActive();
|
|
290
|
+
}
|
|
291
|
+
finally {
|
|
292
|
+
await handle.close();
|
|
293
|
+
}
|
|
294
|
+
try {
|
|
295
|
+
assertActive();
|
|
296
|
+
await rename(temporary, join(root, 'state.json'));
|
|
297
|
+
assertActive();
|
|
298
|
+
await syncDirectory(root);
|
|
299
|
+
assertActive();
|
|
300
|
+
}
|
|
301
|
+
finally {
|
|
302
|
+
await unlink(temporary).catch(() => { });
|
|
303
|
+
}
|
|
304
|
+
};
|
|
305
|
+
const step = async () => {
|
|
306
|
+
assertActive();
|
|
307
|
+
let review;
|
|
308
|
+
try {
|
|
309
|
+
review = await manager.getRequest(config.requestId);
|
|
310
|
+
}
|
|
311
|
+
catch (error) {
|
|
312
|
+
const code = error.code;
|
|
313
|
+
if (code === 'invalid_request' || code === 'provider_unavailable' && !providerFence && Date.now() - startedAt < config.providerReadyTimeoutMs) {
|
|
314
|
+
update('awaiting_approval', code === 'provider_unavailable' ? 'approval_unavailable' : undefined);
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
throw error;
|
|
318
|
+
}
|
|
319
|
+
assertActive();
|
|
320
|
+
const request = review.request;
|
|
321
|
+
if (request.kind !== 'create' || request.caller.consumer !== PROTOCOL_BOOTSTRAP_CONSUMER || request.parameters.usage !== 'protocol') {
|
|
322
|
+
update('blocked', 'invalid_configuration');
|
|
323
|
+
return;
|
|
324
|
+
}
|
|
325
|
+
if (request.status === 'pending' || request.status === 'approved' && (request.executionStatus === 'running' || request.executionStatus === 'unknown')) {
|
|
326
|
+
update('awaiting_approval');
|
|
327
|
+
return;
|
|
328
|
+
}
|
|
329
|
+
if (request.status !== 'approved' || request.executionStatus !== 'succeeded' || !request.result) {
|
|
330
|
+
update('blocked', 'approval_denied');
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
const reference = structuredClone(request.result.reference);
|
|
334
|
+
if (!providerFence) {
|
|
335
|
+
providerFence = await options.service.pinManagementContext(options.context, reference, assertManagerActive);
|
|
336
|
+
pinnedReference = structuredClone(reference);
|
|
337
|
+
manager = options.service.acquireManagement(options.context, providerFence);
|
|
338
|
+
}
|
|
339
|
+
assertActive();
|
|
340
|
+
if (pinnedReference.storeId !== reference.storeId || pinnedReference.identityId !== reference.identityId
|
|
341
|
+
|| pinnedReference.did !== reference.did) {
|
|
342
|
+
update('blocked', 'invalid_configuration');
|
|
343
|
+
return;
|
|
344
|
+
}
|
|
345
|
+
const domain = request.parameters.domain;
|
|
346
|
+
const fullHandle = request.parameters.handle;
|
|
347
|
+
const suffix = '.' + domain;
|
|
348
|
+
if (!fullHandle || !fullHandle.endsWith(suffix) || !/^[a-z0-9][a-z0-9_-]*$/u.test(fullHandle.slice(0, -suffix.length))) {
|
|
349
|
+
update('blocked', 'invalid_configuration');
|
|
350
|
+
return;
|
|
351
|
+
}
|
|
352
|
+
const handle = fullHandle.slice(0, -suffix.length);
|
|
353
|
+
view.reference = reference;
|
|
354
|
+
await setup();
|
|
355
|
+
assertActive();
|
|
356
|
+
let release;
|
|
357
|
+
try {
|
|
358
|
+
release = await lockfile.lock(root, { realpath: false, retries: 0 });
|
|
359
|
+
}
|
|
360
|
+
catch (error) {
|
|
361
|
+
if (error.code === 'ELOCKED')
|
|
362
|
+
return;
|
|
363
|
+
throw error;
|
|
364
|
+
}
|
|
365
|
+
try {
|
|
366
|
+
assertActive();
|
|
367
|
+
const state = await journal();
|
|
368
|
+
await establishKey(state.emailAttempted || state.phoneAttempted || state.registerStarted || state.registered);
|
|
369
|
+
if (!state.registered) {
|
|
370
|
+
if (state.registerStarted) {
|
|
371
|
+
update('registration_uncertain');
|
|
372
|
+
return;
|
|
373
|
+
}
|
|
374
|
+
if (config.phone) {
|
|
375
|
+
if (!state.phoneAttempted) {
|
|
376
|
+
state.phoneAttempted = true;
|
|
377
|
+
await save(state);
|
|
378
|
+
const id = randomUUID();
|
|
379
|
+
const receipt = await json(new Request(config.origin + '/user-service/v1/handle/rpc', { method: 'POST',
|
|
380
|
+
signal: AbortSignal.timeout(15000), headers: { 'content-type': 'application/json' },
|
|
381
|
+
body: JSON.stringify({ jsonrpc: '2.0', id, method: 'send_otp', params: {
|
|
382
|
+
phone: config.phone, purpose: 'awiki.identity.register.v1', handle, domain, full_handle: fullHandle,
|
|
383
|
+
} }) }));
|
|
384
|
+
const result = receipt.result;
|
|
385
|
+
if (receipt.jsonrpc !== '2.0' || receipt.id !== id || receipt.error || result?.ok !== true) {
|
|
386
|
+
throw new Error('bootstrap_phone_unavailable');
|
|
387
|
+
}
|
|
388
|
+
state.phoneDelivered = true;
|
|
389
|
+
await save(state);
|
|
390
|
+
}
|
|
391
|
+
if (!state.phoneDelivered)
|
|
392
|
+
throw new Error('bootstrap_phone_unavailable');
|
|
393
|
+
update('awaiting_phone_verification');
|
|
394
|
+
if (!otpCode)
|
|
395
|
+
return;
|
|
396
|
+
}
|
|
397
|
+
else {
|
|
398
|
+
const statusUrl = new URL(config.origin + '/user-service/v1/auth/email-status');
|
|
399
|
+
statusUrl.searchParams.set('email', config.email);
|
|
400
|
+
statusUrl.searchParams.set('handle', fullHandle);
|
|
401
|
+
const verified = await json(new Request(statusUrl, { signal: AbortSignal.timeout(15000), cache: 'no-store' }));
|
|
402
|
+
if (typeof verified.verified !== 'boolean')
|
|
403
|
+
throw new Error('bootstrap_email_unavailable');
|
|
404
|
+
if (!verified.verified) {
|
|
405
|
+
update('awaiting_email_verification');
|
|
406
|
+
if (!state.emailAttempted) {
|
|
407
|
+
state.emailAttempted = true;
|
|
408
|
+
await save(state);
|
|
409
|
+
await json(new Request(config.origin + '/user-service/v1/auth/email-send', { method: 'POST',
|
|
410
|
+
signal: AbortSignal.timeout(15000), headers: { 'content-type': 'application/json' },
|
|
411
|
+
body: JSON.stringify({ email: config.email, handle: fullHandle }) }));
|
|
412
|
+
}
|
|
413
|
+
return;
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
if (reference.did.startsWith('did:web:'))
|
|
417
|
+
state.webOperationId ??= randomUUID();
|
|
418
|
+
state.registerStarted = true;
|
|
419
|
+
await save(state);
|
|
420
|
+
update('registering');
|
|
421
|
+
let registrationActive = true;
|
|
422
|
+
const assertInitialRegistration = () => {
|
|
423
|
+
assertActive();
|
|
424
|
+
if (!registrationActive || !state.registerStarted || state.registered || view.phase !== 'registering')
|
|
425
|
+
throw new Error('bootstrap_registration_unavailable');
|
|
426
|
+
};
|
|
427
|
+
try {
|
|
428
|
+
await options.service.registerLocalIdentity(options.context, { reference, origin: config.origin, credentials: broker, fetch: send,
|
|
429
|
+
assertActive: assertInitialRegistration,
|
|
430
|
+
handleDomain: domain, managementAudience: config.managementAudience,
|
|
431
|
+
registration: { handle, ...(config.phone ? { phone: config.phone, otp_code: otpCode } : { email: config.email }),
|
|
432
|
+
...(state.webOperationId ? { registration_operation_id: state.webOperationId } : {}) } });
|
|
433
|
+
state.registered = true;
|
|
434
|
+
await save(state);
|
|
435
|
+
}
|
|
436
|
+
catch (error) {
|
|
437
|
+
if (error instanceof BootstrapUpgradeRequired && error.registrationRejected) {
|
|
438
|
+
state.registerStarted = false;
|
|
439
|
+
await save(state);
|
|
440
|
+
update('blocked', 'client_upgrade_required');
|
|
441
|
+
return;
|
|
442
|
+
}
|
|
443
|
+
update('registration_uncertain', error instanceof BootstrapUpgradeRequired ? 'client_upgrade_required' : undefined);
|
|
444
|
+
return;
|
|
445
|
+
}
|
|
446
|
+
finally {
|
|
447
|
+
registrationActive = false;
|
|
448
|
+
otpCode = undefined;
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
assertActive();
|
|
452
|
+
update('publishing');
|
|
453
|
+
if (!backend) {
|
|
454
|
+
const candidate = await options.service.configureManagedPublicationBackend(options.context, 'bootstrap-' + config.id, { reference, origin: config.origin, credentials: broker, fetch: send });
|
|
455
|
+
try {
|
|
456
|
+
assertActive();
|
|
457
|
+
}
|
|
458
|
+
catch (error) {
|
|
459
|
+
candidate.dispose();
|
|
460
|
+
throw error;
|
|
461
|
+
}
|
|
462
|
+
backend = candidate;
|
|
463
|
+
}
|
|
464
|
+
assertActive();
|
|
465
|
+
const current = await manager.publicationStatus(reference);
|
|
466
|
+
assertActive();
|
|
467
|
+
const published = await manager.publishIdentity({ reference, config: {
|
|
468
|
+
backend: backend.backend, documentId: backend.documentId, clientName: config.clientName, capabilities: config.capabilities,
|
|
469
|
+
redirectUris: config.redirectUris, activeKid: current.algorithm === 'ES256' && current.keyId ? current.keyId : reference.did + '#oauth',
|
|
470
|
+
} });
|
|
471
|
+
if (!published.clientId || new URL(exactHttps(published.clientId, true)).origin !== config.origin)
|
|
472
|
+
throw new Error('bootstrap_publication_failed');
|
|
473
|
+
if (published.state !== 'published' || published.did !== reference.did || published.algorithm !== 'ES256'
|
|
474
|
+
|| JSON.stringify(published.capabilities) !== JSON.stringify(config.capabilities))
|
|
475
|
+
throw new Error('bootstrap_publication_failed');
|
|
476
|
+
assertActive();
|
|
477
|
+
view.clientId = published.clientId;
|
|
478
|
+
update('published');
|
|
479
|
+
}
|
|
480
|
+
finally {
|
|
481
|
+
await release();
|
|
482
|
+
}
|
|
483
|
+
};
|
|
484
|
+
const pending = (async () => {
|
|
485
|
+
try {
|
|
486
|
+
while (!controller.signal.aborted) {
|
|
487
|
+
await step();
|
|
488
|
+
if (view.phase === 'blocked' || view.phase === 'published' || view.phase === 'registration_uncertain')
|
|
489
|
+
return;
|
|
490
|
+
await setTimeout(config.pollIntervalMs, undefined, { signal: controller.signal });
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
catch (error) {
|
|
494
|
+
if (controller.signal.aborted)
|
|
495
|
+
return;
|
|
496
|
+
const code = error.code;
|
|
497
|
+
update('blocked', code === 'client_upgrade_required' ? 'client_upgrade_required'
|
|
498
|
+
: code === 'credential_unavailable' ? 'credential_unavailable'
|
|
499
|
+
: error.message === 'bootstrap_email_unavailable' ? 'email_unavailable'
|
|
500
|
+
: error.message === 'bootstrap_phone_unavailable' ? 'phone_unavailable'
|
|
501
|
+
: view.phase === 'publishing' ? 'publication_failed' : 'provider_unavailable');
|
|
502
|
+
}
|
|
503
|
+
})();
|
|
504
|
+
return {
|
|
505
|
+
submitOtp(code) {
|
|
506
|
+
assertActive();
|
|
507
|
+
if (!config.phone || view.phase !== 'awaiting_phone_verification' || otpCode !== undefined || !/^[0-9]{6}$/u.test(code)) {
|
|
508
|
+
throw new Error('bootstrap_otp_unavailable');
|
|
509
|
+
}
|
|
510
|
+
otpCode = code;
|
|
511
|
+
},
|
|
512
|
+
status: () => structuredClone(view),
|
|
513
|
+
async dispose() {
|
|
514
|
+
controller.abort();
|
|
515
|
+
otpCode = undefined;
|
|
516
|
+
secret?.dispose();
|
|
517
|
+
backend?.dispose();
|
|
518
|
+
await pending;
|
|
519
|
+
update('disposed');
|
|
520
|
+
},
|
|
521
|
+
};
|
|
522
|
+
}
|
|
523
|
+
//# sourceMappingURL=registration-bootstrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registration-bootstrap.js","sourceRoot":"","sources":["../src/registration-bootstrap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type RegistrationServiceSettings, type UpdateRegistrationServiceSettings } from './registration-service-types.js';
|
|
2
|
+
export declare function registrationOrigin(value: string): string;
|
|
3
|
+
/** Host-owned preferences and immutable per-flow origin pins, never credentials. */
|
|
4
|
+
export declare class RegistrationServiceSettingsStore {
|
|
5
|
+
private readonly root;
|
|
6
|
+
constructor(stateRoot: string);
|
|
7
|
+
private transaction;
|
|
8
|
+
read(assertActive: () => void): Promise<RegistrationServiceSettings>;
|
|
9
|
+
update(input: UpdateRegistrationServiceSettings, assertActive: () => void): Promise<RegistrationServiceSettings>;
|
|
10
|
+
pin(key: string, fingerprint: string, assertActive: () => void): Promise<string>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=registration-service-settings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registration-service-settings.d.ts","sourceRoot":"","sources":["../src/registration-service-settings.ts"],"names":[],"mappings":"AAMA,OAAO,EAA+B,KAAK,2BAA2B,EAAE,KAAK,iCAAiC,EAAE,MAAM,iCAAiC,CAAC;AAExJ,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOxD;AAWD,oFAAoF;AACpF,qBAAa,gCAAgC;IAC3C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;gBAClB,SAAS,EAAE,MAAM;YACf,WAAW;IAmCzB,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAGpE,MAAM,CAAC,KAAK,EAAE,iCAAiC,EAAE,YAAY,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAShH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;CAajF"}
|