@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.
Files changed (116) hide show
  1. package/BOUNDARY.md +30 -5
  2. package/PUBLICATION.md +181 -0
  3. package/README.md +73 -1
  4. package/README.zh.md +44 -1
  5. package/V7-MANAGEMENT.md +18 -0
  6. package/cordis.patch.yml +9 -0
  7. package/examples/fresh-bootstrap.cordis.patch.yml +38 -0
  8. package/lib/authorization-types.d.ts +6 -0
  9. package/lib/authorization-types.d.ts.map +1 -1
  10. package/lib/authorization.d.ts.map +1 -1
  11. package/lib/authorization.js +23 -6
  12. package/lib/authorization.js.map +1 -1
  13. package/lib/catalog.d.ts +3 -1
  14. package/lib/catalog.d.ts.map +1 -1
  15. package/lib/catalog.js +15 -3
  16. package/lib/catalog.js.map +1 -1
  17. package/lib/client/controller.d.ts +18 -0
  18. package/lib/client/controller.d.ts.map +1 -1
  19. package/lib/client/controller.js +89 -5
  20. package/lib/client/controller.js.map +1 -1
  21. package/lib/client/views.d.ts.map +1 -1
  22. package/lib/client/views.js +37 -6
  23. package/lib/client/views.js.map +1 -1
  24. package/lib/client-metadata.d.ts +3 -0
  25. package/lib/client-metadata.d.ts.map +1 -0
  26. package/lib/client-metadata.js +11 -0
  27. package/lib/client-metadata.js.map +1 -0
  28. package/lib/client.js +260 -14
  29. package/lib/client.js.map +4 -4
  30. package/lib/host-management-secret.d.ts +41 -0
  31. package/lib/host-management-secret.d.ts.map +1 -0
  32. package/lib/host-management-secret.js +92 -0
  33. package/lib/host-management-secret.js.map +1 -0
  34. package/lib/index.d.ts +73 -3
  35. package/lib/index.d.ts.map +1 -1
  36. package/lib/index.js +331 -22
  37. package/lib/index.js.map +1 -1
  38. package/lib/initial-registration-proof.d.ts +13 -0
  39. package/lib/initial-registration-proof.d.ts.map +1 -0
  40. package/lib/initial-registration-proof.js +48 -0
  41. package/lib/initial-registration-proof.js.map +1 -0
  42. package/lib/installed-consumer.d.ts +25 -0
  43. package/lib/installed-consumer.d.ts.map +1 -0
  44. package/lib/installed-consumer.js +66 -0
  45. package/lib/installed-consumer.js.map +1 -0
  46. package/lib/management-credentials.d.ts +15 -0
  47. package/lib/management-credentials.d.ts.map +1 -0
  48. package/lib/management-credentials.js +126 -0
  49. package/lib/management-credentials.js.map +1 -0
  50. package/lib/management-driver.d.ts +83 -0
  51. package/lib/management-driver.d.ts.map +1 -0
  52. package/lib/management-driver.js +405 -0
  53. package/lib/management-driver.js.map +1 -0
  54. package/lib/management-remote.d.ts +27 -1
  55. package/lib/management-remote.d.ts.map +1 -1
  56. package/lib/management-remote.js +69 -3
  57. package/lib/management-remote.js.map +1 -1
  58. package/lib/management-types.d.ts +7 -0
  59. package/lib/management-types.d.ts.map +1 -1
  60. package/lib/pap-callback.d.ts +110 -0
  61. package/lib/pap-callback.d.ts.map +1 -0
  62. package/lib/pap-callback.js +51 -0
  63. package/lib/pap-callback.js.map +1 -0
  64. package/lib/protocol-bootstrap.d.ts +24 -0
  65. package/lib/protocol-bootstrap.d.ts.map +1 -0
  66. package/lib/protocol-bootstrap.js +34 -0
  67. package/lib/protocol-bootstrap.js.map +1 -0
  68. package/lib/protocol-client.d.ts +137 -0
  69. package/lib/protocol-client.d.ts.map +1 -0
  70. package/lib/protocol-client.js +11 -0
  71. package/lib/protocol-client.js.map +1 -0
  72. package/lib/provider-api.d.ts +6 -2
  73. package/lib/provider-api.d.ts.map +1 -1
  74. package/lib/provider-api.js.map +1 -1
  75. package/lib/publication-http.d.ts +19 -0
  76. package/lib/publication-http.d.ts.map +1 -0
  77. package/lib/publication-http.js +183 -0
  78. package/lib/publication-http.js.map +1 -0
  79. package/lib/publication-types.d.ts +161 -0
  80. package/lib/publication-types.d.ts.map +1 -0
  81. package/lib/publication-types.js +35 -0
  82. package/lib/publication-types.js.map +1 -0
  83. package/lib/publication.d.ts +21 -0
  84. package/lib/publication.d.ts.map +1 -0
  85. package/lib/publication.js +235 -0
  86. package/lib/publication.js.map +1 -0
  87. package/lib/registration-bootstrap.d.ts +56 -0
  88. package/lib/registration-bootstrap.d.ts.map +1 -0
  89. package/lib/registration-bootstrap.js +523 -0
  90. package/lib/registration-bootstrap.js.map +1 -0
  91. package/lib/registration-service-settings.d.ts +12 -0
  92. package/lib/registration-service-settings.d.ts.map +1 -0
  93. package/lib/registration-service-settings.js +124 -0
  94. package/lib/registration-service-settings.js.map +1 -0
  95. package/lib/registration-service-types.d.ts +11 -0
  96. package/lib/registration-service-types.d.ts.map +1 -0
  97. package/lib/registration-service-types.js +3 -0
  98. package/lib/registration-service-types.js.map +1 -0
  99. package/lib/remote.d.ts.map +1 -1
  100. package/lib/remote.js +11 -2
  101. package/lib/remote.js.map +1 -1
  102. package/lib/target-policy.d.ts +35 -0
  103. package/lib/target-policy.d.ts.map +1 -0
  104. package/lib/target-policy.js +319 -0
  105. package/lib/target-policy.js.map +1 -0
  106. package/lib/user-client.d.ts +6 -0
  107. package/lib/user-client.d.ts.map +1 -1
  108. package/lib/user-client.js.map +1 -1
  109. package/lib/user-operation.d.ts.map +1 -1
  110. package/lib/user-operation.js +9 -0
  111. package/lib/user-operation.js.map +1 -1
  112. package/lib/user-service.d.ts +8 -1
  113. package/lib/user-service.d.ts.map +1 -1
  114. package/lib/user-service.js +58 -4
  115. package/lib/user-service.js.map +1 -1
  116. 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"}