emdash-plugin-relink 0.2.2

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 (99) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/CONTRIBUTING.md +21 -0
  3. package/LICENSE +167 -0
  4. package/LICENSES/MIT-legacy.txt +21 -0
  5. package/README.md +95 -0
  6. package/THIRD_PARTY_NOTICES.md +19 -0
  7. package/dist/admin/app.d.ts +9 -0
  8. package/dist/admin/app.d.ts.map +1 -0
  9. package/dist/admin/app.js +333 -0
  10. package/dist/admin/app.js.map +1 -0
  11. package/dist/admin/client.d.ts +9 -0
  12. package/dist/admin/client.d.ts.map +1 -0
  13. package/dist/admin/client.js +22 -0
  14. package/dist/admin/client.js.map +1 -0
  15. package/dist/admin/i18n.d.ts +8 -0
  16. package/dist/admin/i18n.d.ts.map +1 -0
  17. package/dist/admin/i18n.js +35 -0
  18. package/dist/admin/i18n.js.map +1 -0
  19. package/dist/admin/index.d.ts +18 -0
  20. package/dist/admin/index.d.ts.map +1 -0
  21. package/dist/admin/index.js +22 -0
  22. package/dist/admin/index.js.map +1 -0
  23. package/dist/admin/messages.d.ts +270 -0
  24. package/dist/admin/messages.d.ts.map +1 -0
  25. package/dist/admin/messages.js +269 -0
  26. package/dist/admin/messages.js.map +1 -0
  27. package/dist/admin/styles.css +330 -0
  28. package/dist/core/api.d.ts +559 -0
  29. package/dist/core/api.d.ts.map +1 -0
  30. package/dist/core/api.js +76 -0
  31. package/dist/core/api.js.map +1 -0
  32. package/dist/core/engine.d.ts +30 -0
  33. package/dist/core/engine.d.ts.map +1 -0
  34. package/dist/core/engine.js +392 -0
  35. package/dist/core/engine.js.map +1 -0
  36. package/dist/core/extract.d.ts +11 -0
  37. package/dist/core/extract.d.ts.map +1 -0
  38. package/dist/core/extract.js +99 -0
  39. package/dist/core/extract.js.map +1 -0
  40. package/dist/core/html.d.ts +12 -0
  41. package/dist/core/html.d.ts.map +1 -0
  42. package/dist/core/html.js +103 -0
  43. package/dist/core/html.js.map +1 -0
  44. package/dist/core/http.d.ts +22 -0
  45. package/dist/core/http.d.ts.map +1 -0
  46. package/dist/core/http.js +217 -0
  47. package/dist/core/http.js.map +1 -0
  48. package/dist/core/index.d.ts +10 -0
  49. package/dist/core/index.d.ts.map +1 -0
  50. package/dist/core/index.js +10 -0
  51. package/dist/core/index.js.map +1 -0
  52. package/dist/core/paths.d.ts +4 -0
  53. package/dist/core/paths.d.ts.map +1 -0
  54. package/dist/core/paths.js +38 -0
  55. package/dist/core/paths.js.map +1 -0
  56. package/dist/core/providers.d.ts +32 -0
  57. package/dist/core/providers.d.ts.map +1 -0
  58. package/dist/core/providers.js +198 -0
  59. package/dist/core/providers.js.map +1 -0
  60. package/dist/core/schema.d.ts +526 -0
  61. package/dist/core/schema.d.ts.map +1 -0
  62. package/dist/core/schema.js +238 -0
  63. package/dist/core/schema.js.map +1 -0
  64. package/dist/core/storage.d.ts +47 -0
  65. package/dist/core/storage.d.ts.map +1 -0
  66. package/dist/core/storage.js +89 -0
  67. package/dist/core/storage.js.map +1 -0
  68. package/dist/core/url.d.ts +7 -0
  69. package/dist/core/url.d.ts.map +1 -0
  70. package/dist/core/url.js +62 -0
  71. package/dist/core/url.js.map +1 -0
  72. package/dist/index.d.ts +8 -0
  73. package/dist/index.d.ts.map +1 -0
  74. package/dist/index.js +16 -0
  75. package/dist/index.js.map +1 -0
  76. package/dist/integration.d.ts +5 -0
  77. package/dist/integration.d.ts.map +1 -0
  78. package/dist/integration.js +29 -0
  79. package/dist/integration.js.map +1 -0
  80. package/dist/metadata.d.ts +14 -0
  81. package/dist/metadata.d.ts.map +1 -0
  82. package/dist/metadata.js +6 -0
  83. package/dist/metadata.js.map +1 -0
  84. package/dist/middleware.d.ts +8 -0
  85. package/dist/middleware.d.ts.map +1 -0
  86. package/dist/middleware.js +97 -0
  87. package/dist/middleware.js.map +1 -0
  88. package/dist/plugin.d.ts +13 -0
  89. package/dist/plugin.d.ts.map +1 -0
  90. package/dist/plugin.js +260 -0
  91. package/dist/plugin.js.map +1 -0
  92. package/docs/architecture.md +50 -0
  93. package/docs/configuration.md +37 -0
  94. package/docs/installation.md +71 -0
  95. package/docs/licensing.md +42 -0
  96. package/docs/recovery.md +27 -0
  97. package/docs/testing.md +31 -0
  98. package/docs/translations.md +24 -0
  99. package/package.json +124 -0
@@ -0,0 +1,559 @@
1
+ import { z } from "zod";
2
+ import type { LinkRecord, Settings } from "./schema.js";
3
+ export declare const viewSchema: z.ZodEnum<{
4
+ grokipedia: "grokipedia";
5
+ all: "all";
6
+ problems: "problems";
7
+ archives: "archives";
8
+ reviews: "reviews";
9
+ history: "history";
10
+ }>;
11
+ export declare const listQuerySchema: z.ZodObject<{
12
+ view: z.ZodDefault<z.ZodEnum<{
13
+ grokipedia: "grokipedia";
14
+ all: "all";
15
+ problems: "problems";
16
+ archives: "archives";
17
+ reviews: "reviews";
18
+ history: "history";
19
+ }>>;
20
+ search: z.ZodDefault<z.ZodString>;
21
+ domain: z.ZodDefault<z.ZodString>;
22
+ collection: z.ZodDefault<z.ZodString>;
23
+ contentId: z.ZodDefault<z.ZodString>;
24
+ language: z.ZodDefault<z.ZodString>;
25
+ state: z.ZodDefault<z.ZodEnum<{
26
+ "": "";
27
+ healthy: "healthy";
28
+ broken: "broken";
29
+ unverifiable: "unverifiable";
30
+ excluded: "excluded";
31
+ pending: "pending";
32
+ }>>;
33
+ reviewBefore: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
34
+ offset: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
35
+ limit: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
36
+ }, z.core.$strip>;
37
+ export type ListQuery = z.infer<typeof listQuerySchema>;
38
+ export declare const summarySchema: z.ZodObject<{
39
+ attention: z.ZodNumber;
40
+ archives: z.ZodNumber;
41
+ reviews: z.ZodNumber;
42
+ unverifiable: z.ZodNumber;
43
+ }, z.core.$strip>;
44
+ export declare const snapshotSchema: z.ZodObject<{
45
+ links: z.ZodArray<z.ZodObject<{
46
+ schemaVersion: z.ZodLiteral<1>;
47
+ id: z.ZodString;
48
+ url: z.ZodURL;
49
+ host: z.ZodString;
50
+ createdAt: z.ZodNumber;
51
+ updatedAt: z.ZodNumber;
52
+ nextCheckAt: z.ZodNumber;
53
+ firstFailureAt: z.ZodNullable<z.ZodNumber>;
54
+ lastFailureAt: z.ZodNullable<z.ZodNumber>;
55
+ failures: z.ZodNumber;
56
+ recoveryAt: z.ZodNullable<z.ZodNumber>;
57
+ lastCheck: z.ZodNullable<z.ZodDiscriminatedUnion<[z.ZodObject<{
58
+ status: z.ZodNumber;
59
+ contentType: z.ZodString;
60
+ evidence: z.ZodNullable<z.ZodObject<{
61
+ title: z.ZodString;
62
+ language: z.ZodString;
63
+ canonical: z.ZodString;
64
+ introduction: z.ZodString;
65
+ anchors: z.ZodArray<z.ZodString>;
66
+ sourceUrls: z.ZodArray<z.ZodString>;
67
+ disambiguation: z.ZodBoolean;
68
+ }, z.core.$strip>>;
69
+ checkedAt: z.ZodNumber;
70
+ finalUrl: z.ZodURL;
71
+ kind: z.ZodLiteral<"healthy">;
72
+ }, z.core.$strip>, z.ZodObject<{
73
+ status: z.ZodNullable<z.ZodNumber>;
74
+ reason: z.ZodEnum<{
75
+ "not-found": "not-found";
76
+ "server-error": "server-error";
77
+ dns: "dns";
78
+ timeout: "timeout";
79
+ connection: "connection";
80
+ "redirect-loop": "redirect-loop";
81
+ }>;
82
+ checkedAt: z.ZodNumber;
83
+ finalUrl: z.ZodURL;
84
+ kind: z.ZodLiteral<"broken">;
85
+ }, z.core.$strip>, z.ZodObject<{
86
+ status: z.ZodNullable<z.ZodNumber>;
87
+ reason: z.ZodEnum<{
88
+ authentication: "authentication";
89
+ blocked: "blocked";
90
+ "rate-limited": "rate-limited";
91
+ "unsafe-url": "unsafe-url";
92
+ "soft-error": "soft-error";
93
+ "network-outage": "network-outage";
94
+ "unsupported-response": "unsupported-response";
95
+ "response-too-large": "response-too-large";
96
+ }>;
97
+ retryAt: z.ZodNullable<z.ZodNumber>;
98
+ checkedAt: z.ZodNumber;
99
+ finalUrl: z.ZodURL;
100
+ kind: z.ZodLiteral<"unverifiable">;
101
+ }, z.core.$strip>], "kind">>;
102
+ replacement: z.ZodNullable<z.ZodDiscriminatedUnion<[z.ZodObject<{
103
+ kind: z.ZodLiteral<"archive">;
104
+ url: z.ZodURL;
105
+ verifiedAt: z.ZodNumber;
106
+ snapshotAt: z.ZodNumber;
107
+ reason: z.ZodLiteral<"confirmed-failures">;
108
+ fragments: z.ZodArray<z.ZodString>;
109
+ evidence: z.ZodNullable<z.ZodObject<{
110
+ title: z.ZodString;
111
+ language: z.ZodString;
112
+ canonical: z.ZodString;
113
+ introduction: z.ZodString;
114
+ anchors: z.ZodArray<z.ZodString>;
115
+ sourceUrls: z.ZodArray<z.ZodString>;
116
+ disambiguation: z.ZodBoolean;
117
+ }, z.core.$strip>>;
118
+ }, z.core.$strip>, z.ZodObject<{
119
+ kind: z.ZodLiteral<"grokipedia">;
120
+ url: z.ZodURL;
121
+ verifiedAt: z.ZodNumber;
122
+ reason: z.ZodLiteral<"identity-language-match">;
123
+ fragments: z.ZodArray<z.ZodString>;
124
+ evidence: z.ZodObject<{
125
+ title: z.ZodString;
126
+ language: z.ZodString;
127
+ canonical: z.ZodString;
128
+ introduction: z.ZodString;
129
+ anchors: z.ZodArray<z.ZodString>;
130
+ sourceUrls: z.ZodArray<z.ZodString>;
131
+ disambiguation: z.ZodBoolean;
132
+ }, z.core.$strip>;
133
+ }, z.core.$strip>, z.ZodObject<{
134
+ kind: z.ZodLiteral<"manual">;
135
+ url: z.ZodURL;
136
+ verifiedAt: z.ZodNumber;
137
+ reason: z.ZodLiteral<"editor-override">;
138
+ }, z.core.$strip>], "kind">>;
139
+ review: z.ZodNullable<z.ZodObject<{
140
+ dueAt: z.ZodNumber;
141
+ reason: z.ZodEnum<{
142
+ unverifiable: "unverifiable";
143
+ "archive-active": "archive-active";
144
+ "archive-missing": "archive-missing";
145
+ "archive-unavailable": "archive-unavailable";
146
+ "grokipedia-ambiguous": "grokipedia-ambiguous";
147
+ "replacement-failed": "replacement-failed";
148
+ "manual-review": "manual-review";
149
+ }>;
150
+ }, z.core.$strip>>;
151
+ excluded: z.ZodBoolean;
152
+ automaticDisabled: z.ZodBoolean;
153
+ active: z.ZodBoolean;
154
+ archiveRetryAt: z.ZodNullable<z.ZodNumber>;
155
+ grokipediaChecked: z.ZodBoolean;
156
+ }, z.core.$strip>>;
157
+ occurrences: z.ZodArray<z.ZodObject<{
158
+ schemaVersion: z.ZodLiteral<1>;
159
+ id: z.ZodString;
160
+ linkId: z.ZodString;
161
+ originalUrl: z.ZodURL;
162
+ collection: z.ZodString;
163
+ contentId: z.ZodString;
164
+ slug: z.ZodString;
165
+ locale: z.ZodString;
166
+ title: z.ZodString;
167
+ path: z.ZodString;
168
+ text: z.ZodString;
169
+ pagePath: z.ZodString;
170
+ generation: z.ZodString;
171
+ }, z.core.$strip>>;
172
+ history: z.ZodArray<z.ZodObject<{
173
+ schemaVersion: z.ZodLiteral<1>;
174
+ id: z.ZodString;
175
+ linkId: z.ZodString;
176
+ originalUrl: z.ZodOptional<z.ZodURL>;
177
+ at: z.ZodNumber;
178
+ event: z.ZodEnum<{
179
+ excluded: "excluded";
180
+ checked: "checked";
181
+ "archive-applied": "archive-applied";
182
+ "grokipedia-applied": "grokipedia-applied";
183
+ "original-restored": "original-restored";
184
+ "replacement-unavailable": "replacement-unavailable";
185
+ included: "included";
186
+ override: "override";
187
+ undo: "undo";
188
+ rescheduled: "rescheduled";
189
+ }>;
190
+ result: z.ZodNullable<z.ZodDiscriminatedUnion<[z.ZodObject<{
191
+ status: z.ZodNumber;
192
+ contentType: z.ZodString;
193
+ evidence: z.ZodNullable<z.ZodObject<{
194
+ title: z.ZodString;
195
+ language: z.ZodString;
196
+ canonical: z.ZodString;
197
+ introduction: z.ZodString;
198
+ anchors: z.ZodArray<z.ZodString>;
199
+ sourceUrls: z.ZodArray<z.ZodString>;
200
+ disambiguation: z.ZodBoolean;
201
+ }, z.core.$strip>>;
202
+ checkedAt: z.ZodNumber;
203
+ finalUrl: z.ZodURL;
204
+ kind: z.ZodLiteral<"healthy">;
205
+ }, z.core.$strip>, z.ZodObject<{
206
+ status: z.ZodNullable<z.ZodNumber>;
207
+ reason: z.ZodEnum<{
208
+ "not-found": "not-found";
209
+ "server-error": "server-error";
210
+ dns: "dns";
211
+ timeout: "timeout";
212
+ connection: "connection";
213
+ "redirect-loop": "redirect-loop";
214
+ }>;
215
+ checkedAt: z.ZodNumber;
216
+ finalUrl: z.ZodURL;
217
+ kind: z.ZodLiteral<"broken">;
218
+ }, z.core.$strip>, z.ZodObject<{
219
+ status: z.ZodNullable<z.ZodNumber>;
220
+ reason: z.ZodEnum<{
221
+ authentication: "authentication";
222
+ blocked: "blocked";
223
+ "rate-limited": "rate-limited";
224
+ "unsafe-url": "unsafe-url";
225
+ "soft-error": "soft-error";
226
+ "network-outage": "network-outage";
227
+ "unsupported-response": "unsupported-response";
228
+ "response-too-large": "response-too-large";
229
+ }>;
230
+ retryAt: z.ZodNullable<z.ZodNumber>;
231
+ checkedAt: z.ZodNumber;
232
+ finalUrl: z.ZodURL;
233
+ kind: z.ZodLiteral<"unverifiable">;
234
+ }, z.core.$strip>], "kind">>;
235
+ destination: z.ZodNullable<z.ZodString>;
236
+ replacement: z.ZodNullable<z.ZodDiscriminatedUnion<[z.ZodObject<{
237
+ kind: z.ZodLiteral<"archive">;
238
+ url: z.ZodURL;
239
+ verifiedAt: z.ZodNumber;
240
+ snapshotAt: z.ZodNumber;
241
+ reason: z.ZodLiteral<"confirmed-failures">;
242
+ fragments: z.ZodArray<z.ZodString>;
243
+ evidence: z.ZodNullable<z.ZodObject<{
244
+ title: z.ZodString;
245
+ language: z.ZodString;
246
+ canonical: z.ZodString;
247
+ introduction: z.ZodString;
248
+ anchors: z.ZodArray<z.ZodString>;
249
+ sourceUrls: z.ZodArray<z.ZodString>;
250
+ disambiguation: z.ZodBoolean;
251
+ }, z.core.$strip>>;
252
+ }, z.core.$strip>, z.ZodObject<{
253
+ kind: z.ZodLiteral<"grokipedia">;
254
+ url: z.ZodURL;
255
+ verifiedAt: z.ZodNumber;
256
+ reason: z.ZodLiteral<"identity-language-match">;
257
+ fragments: z.ZodArray<z.ZodString>;
258
+ evidence: z.ZodObject<{
259
+ title: z.ZodString;
260
+ language: z.ZodString;
261
+ canonical: z.ZodString;
262
+ introduction: z.ZodString;
263
+ anchors: z.ZodArray<z.ZodString>;
264
+ sourceUrls: z.ZodArray<z.ZodString>;
265
+ disambiguation: z.ZodBoolean;
266
+ }, z.core.$strip>;
267
+ }, z.core.$strip>, z.ZodObject<{
268
+ kind: z.ZodLiteral<"manual">;
269
+ url: z.ZodURL;
270
+ verifiedAt: z.ZodNumber;
271
+ reason: z.ZodLiteral<"editor-override">;
272
+ }, z.core.$strip>], "kind">>;
273
+ }, z.core.$strip>>;
274
+ total: z.ZodNumber;
275
+ summary: z.ZodObject<{
276
+ attention: z.ZodNumber;
277
+ archives: z.ZodNumber;
278
+ reviews: z.ZodNumber;
279
+ unverifiable: z.ZodNumber;
280
+ }, z.core.$strip>;
281
+ settings: z.ZodObject<{
282
+ enabled: z.ZodDefault<z.ZodBoolean>;
283
+ archiveEnabled: z.ZodDefault<z.ZodBoolean>;
284
+ grokipediaEnabled: z.ZodDefault<z.ZodBoolean>;
285
+ direction: z.ZodDefault<z.ZodEnum<{
286
+ auto: "auto";
287
+ ltr: "ltr";
288
+ rtl: "rtl";
289
+ }>>;
290
+ healthyDays: z.ZodDefault<z.ZodNumber>;
291
+ reviewDays: z.ZodDefault<z.ZodNumber>;
292
+ archiveRetryDays: z.ZodDefault<z.ZodNumber>;
293
+ timeoutMs: z.ZodDefault<z.ZodNumber>;
294
+ batchSize: z.ZodDefault<z.ZodNumber>;
295
+ excludedDomains: z.ZodDefault<z.ZodArray<z.ZodString>>;
296
+ }, z.core.$strip>;
297
+ worker: z.ZodObject<{
298
+ schemaVersion: z.ZodLiteral<1>;
299
+ scan: z.ZodNullable<z.ZodObject<{
300
+ sourceIndex: z.ZodNumber;
301
+ cursor: z.ZodNullable<z.ZodString>;
302
+ generation: z.ZodString;
303
+ startedAt: z.ZodNumber;
304
+ }, z.core.$strip>>;
305
+ nextScanAt: z.ZodNumber;
306
+ lastStartedAt: z.ZodNullable<z.ZodNumber>;
307
+ lastCompletedAt: z.ZodNullable<z.ZodNumber>;
308
+ lastError: z.ZodNullable<z.ZodEnum<{
309
+ content: "content";
310
+ storage: "storage";
311
+ network: "network";
312
+ }>>;
313
+ processed: z.ZodNumber;
314
+ }, z.core.$strip>;
315
+ scheduled: z.ZodBoolean;
316
+ nextRunAt: z.ZodNullable<z.ZodNumber>;
317
+ pendingCommands: z.ZodNumber;
318
+ canManage: z.ZodBoolean;
319
+ }, z.core.$strip>;
320
+ export type AdminSnapshot = z.infer<typeof snapshotSchema>;
321
+ export declare const detailSchema: z.ZodObject<{
322
+ link: z.ZodNullable<z.ZodObject<{
323
+ schemaVersion: z.ZodLiteral<1>;
324
+ id: z.ZodString;
325
+ url: z.ZodURL;
326
+ host: z.ZodString;
327
+ createdAt: z.ZodNumber;
328
+ updatedAt: z.ZodNumber;
329
+ nextCheckAt: z.ZodNumber;
330
+ firstFailureAt: z.ZodNullable<z.ZodNumber>;
331
+ lastFailureAt: z.ZodNullable<z.ZodNumber>;
332
+ failures: z.ZodNumber;
333
+ recoveryAt: z.ZodNullable<z.ZodNumber>;
334
+ lastCheck: z.ZodNullable<z.ZodDiscriminatedUnion<[z.ZodObject<{
335
+ status: z.ZodNumber;
336
+ contentType: z.ZodString;
337
+ evidence: z.ZodNullable<z.ZodObject<{
338
+ title: z.ZodString;
339
+ language: z.ZodString;
340
+ canonical: z.ZodString;
341
+ introduction: z.ZodString;
342
+ anchors: z.ZodArray<z.ZodString>;
343
+ sourceUrls: z.ZodArray<z.ZodString>;
344
+ disambiguation: z.ZodBoolean;
345
+ }, z.core.$strip>>;
346
+ checkedAt: z.ZodNumber;
347
+ finalUrl: z.ZodURL;
348
+ kind: z.ZodLiteral<"healthy">;
349
+ }, z.core.$strip>, z.ZodObject<{
350
+ status: z.ZodNullable<z.ZodNumber>;
351
+ reason: z.ZodEnum<{
352
+ "not-found": "not-found";
353
+ "server-error": "server-error";
354
+ dns: "dns";
355
+ timeout: "timeout";
356
+ connection: "connection";
357
+ "redirect-loop": "redirect-loop";
358
+ }>;
359
+ checkedAt: z.ZodNumber;
360
+ finalUrl: z.ZodURL;
361
+ kind: z.ZodLiteral<"broken">;
362
+ }, z.core.$strip>, z.ZodObject<{
363
+ status: z.ZodNullable<z.ZodNumber>;
364
+ reason: z.ZodEnum<{
365
+ authentication: "authentication";
366
+ blocked: "blocked";
367
+ "rate-limited": "rate-limited";
368
+ "unsafe-url": "unsafe-url";
369
+ "soft-error": "soft-error";
370
+ "network-outage": "network-outage";
371
+ "unsupported-response": "unsupported-response";
372
+ "response-too-large": "response-too-large";
373
+ }>;
374
+ retryAt: z.ZodNullable<z.ZodNumber>;
375
+ checkedAt: z.ZodNumber;
376
+ finalUrl: z.ZodURL;
377
+ kind: z.ZodLiteral<"unverifiable">;
378
+ }, z.core.$strip>], "kind">>;
379
+ replacement: z.ZodNullable<z.ZodDiscriminatedUnion<[z.ZodObject<{
380
+ kind: z.ZodLiteral<"archive">;
381
+ url: z.ZodURL;
382
+ verifiedAt: z.ZodNumber;
383
+ snapshotAt: z.ZodNumber;
384
+ reason: z.ZodLiteral<"confirmed-failures">;
385
+ fragments: z.ZodArray<z.ZodString>;
386
+ evidence: z.ZodNullable<z.ZodObject<{
387
+ title: z.ZodString;
388
+ language: z.ZodString;
389
+ canonical: z.ZodString;
390
+ introduction: z.ZodString;
391
+ anchors: z.ZodArray<z.ZodString>;
392
+ sourceUrls: z.ZodArray<z.ZodString>;
393
+ disambiguation: z.ZodBoolean;
394
+ }, z.core.$strip>>;
395
+ }, z.core.$strip>, z.ZodObject<{
396
+ kind: z.ZodLiteral<"grokipedia">;
397
+ url: z.ZodURL;
398
+ verifiedAt: z.ZodNumber;
399
+ reason: z.ZodLiteral<"identity-language-match">;
400
+ fragments: z.ZodArray<z.ZodString>;
401
+ evidence: z.ZodObject<{
402
+ title: z.ZodString;
403
+ language: z.ZodString;
404
+ canonical: z.ZodString;
405
+ introduction: z.ZodString;
406
+ anchors: z.ZodArray<z.ZodString>;
407
+ sourceUrls: z.ZodArray<z.ZodString>;
408
+ disambiguation: z.ZodBoolean;
409
+ }, z.core.$strip>;
410
+ }, z.core.$strip>, z.ZodObject<{
411
+ kind: z.ZodLiteral<"manual">;
412
+ url: z.ZodURL;
413
+ verifiedAt: z.ZodNumber;
414
+ reason: z.ZodLiteral<"editor-override">;
415
+ }, z.core.$strip>], "kind">>;
416
+ review: z.ZodNullable<z.ZodObject<{
417
+ dueAt: z.ZodNumber;
418
+ reason: z.ZodEnum<{
419
+ unverifiable: "unverifiable";
420
+ "archive-active": "archive-active";
421
+ "archive-missing": "archive-missing";
422
+ "archive-unavailable": "archive-unavailable";
423
+ "grokipedia-ambiguous": "grokipedia-ambiguous";
424
+ "replacement-failed": "replacement-failed";
425
+ "manual-review": "manual-review";
426
+ }>;
427
+ }, z.core.$strip>>;
428
+ excluded: z.ZodBoolean;
429
+ automaticDisabled: z.ZodBoolean;
430
+ active: z.ZodBoolean;
431
+ archiveRetryAt: z.ZodNullable<z.ZodNumber>;
432
+ grokipediaChecked: z.ZodBoolean;
433
+ }, z.core.$strip>>;
434
+ occurrences: z.ZodArray<z.ZodObject<{
435
+ schemaVersion: z.ZodLiteral<1>;
436
+ id: z.ZodString;
437
+ linkId: z.ZodString;
438
+ originalUrl: z.ZodURL;
439
+ collection: z.ZodString;
440
+ contentId: z.ZodString;
441
+ slug: z.ZodString;
442
+ locale: z.ZodString;
443
+ title: z.ZodString;
444
+ path: z.ZodString;
445
+ text: z.ZodString;
446
+ pagePath: z.ZodString;
447
+ generation: z.ZodString;
448
+ }, z.core.$strip>>;
449
+ history: z.ZodArray<z.ZodObject<{
450
+ schemaVersion: z.ZodLiteral<1>;
451
+ id: z.ZodString;
452
+ linkId: z.ZodString;
453
+ originalUrl: z.ZodOptional<z.ZodURL>;
454
+ at: z.ZodNumber;
455
+ event: z.ZodEnum<{
456
+ excluded: "excluded";
457
+ checked: "checked";
458
+ "archive-applied": "archive-applied";
459
+ "grokipedia-applied": "grokipedia-applied";
460
+ "original-restored": "original-restored";
461
+ "replacement-unavailable": "replacement-unavailable";
462
+ included: "included";
463
+ override: "override";
464
+ undo: "undo";
465
+ rescheduled: "rescheduled";
466
+ }>;
467
+ result: z.ZodNullable<z.ZodDiscriminatedUnion<[z.ZodObject<{
468
+ status: z.ZodNumber;
469
+ contentType: z.ZodString;
470
+ evidence: z.ZodNullable<z.ZodObject<{
471
+ title: z.ZodString;
472
+ language: z.ZodString;
473
+ canonical: z.ZodString;
474
+ introduction: z.ZodString;
475
+ anchors: z.ZodArray<z.ZodString>;
476
+ sourceUrls: z.ZodArray<z.ZodString>;
477
+ disambiguation: z.ZodBoolean;
478
+ }, z.core.$strip>>;
479
+ checkedAt: z.ZodNumber;
480
+ finalUrl: z.ZodURL;
481
+ kind: z.ZodLiteral<"healthy">;
482
+ }, z.core.$strip>, z.ZodObject<{
483
+ status: z.ZodNullable<z.ZodNumber>;
484
+ reason: z.ZodEnum<{
485
+ "not-found": "not-found";
486
+ "server-error": "server-error";
487
+ dns: "dns";
488
+ timeout: "timeout";
489
+ connection: "connection";
490
+ "redirect-loop": "redirect-loop";
491
+ }>;
492
+ checkedAt: z.ZodNumber;
493
+ finalUrl: z.ZodURL;
494
+ kind: z.ZodLiteral<"broken">;
495
+ }, z.core.$strip>, z.ZodObject<{
496
+ status: z.ZodNullable<z.ZodNumber>;
497
+ reason: z.ZodEnum<{
498
+ authentication: "authentication";
499
+ blocked: "blocked";
500
+ "rate-limited": "rate-limited";
501
+ "unsafe-url": "unsafe-url";
502
+ "soft-error": "soft-error";
503
+ "network-outage": "network-outage";
504
+ "unsupported-response": "unsupported-response";
505
+ "response-too-large": "response-too-large";
506
+ }>;
507
+ retryAt: z.ZodNullable<z.ZodNumber>;
508
+ checkedAt: z.ZodNumber;
509
+ finalUrl: z.ZodURL;
510
+ kind: z.ZodLiteral<"unverifiable">;
511
+ }, z.core.$strip>], "kind">>;
512
+ destination: z.ZodNullable<z.ZodString>;
513
+ replacement: z.ZodNullable<z.ZodDiscriminatedUnion<[z.ZodObject<{
514
+ kind: z.ZodLiteral<"archive">;
515
+ url: z.ZodURL;
516
+ verifiedAt: z.ZodNumber;
517
+ snapshotAt: z.ZodNumber;
518
+ reason: z.ZodLiteral<"confirmed-failures">;
519
+ fragments: z.ZodArray<z.ZodString>;
520
+ evidence: z.ZodNullable<z.ZodObject<{
521
+ title: z.ZodString;
522
+ language: z.ZodString;
523
+ canonical: z.ZodString;
524
+ introduction: z.ZodString;
525
+ anchors: z.ZodArray<z.ZodString>;
526
+ sourceUrls: z.ZodArray<z.ZodString>;
527
+ disambiguation: z.ZodBoolean;
528
+ }, z.core.$strip>>;
529
+ }, z.core.$strip>, z.ZodObject<{
530
+ kind: z.ZodLiteral<"grokipedia">;
531
+ url: z.ZodURL;
532
+ verifiedAt: z.ZodNumber;
533
+ reason: z.ZodLiteral<"identity-language-match">;
534
+ fragments: z.ZodArray<z.ZodString>;
535
+ evidence: z.ZodObject<{
536
+ title: z.ZodString;
537
+ language: z.ZodString;
538
+ canonical: z.ZodString;
539
+ introduction: z.ZodString;
540
+ anchors: z.ZodArray<z.ZodString>;
541
+ sourceUrls: z.ZodArray<z.ZodString>;
542
+ disambiguation: z.ZodBoolean;
543
+ }, z.core.$strip>;
544
+ }, z.core.$strip>, z.ZodObject<{
545
+ kind: z.ZodLiteral<"manual">;
546
+ url: z.ZodURL;
547
+ verifiedAt: z.ZodNumber;
548
+ reason: z.ZodLiteral<"editor-override">;
549
+ }, z.core.$strip>], "kind">>;
550
+ }, z.core.$strip>>;
551
+ }, z.core.$strip>;
552
+ export type LinkDetail = z.infer<typeof detailSchema>;
553
+ export declare const projectionSchema: z.ZodObject<{
554
+ rules: z.ZodArray<z.ZodTuple<[z.ZodURL, z.ZodURL], null>>;
555
+ }, z.core.$strip>;
556
+ export declare function effectiveDestination(link: LinkRecord, original: string, settings: Settings): string;
557
+ /** Spreadsheet applications must not interpret URL or editor text as formulas. */
558
+ export declare function csvCell(value: string): string;
559
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/core/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGxD,eAAO,MAAM,UAAU;;;;;;;EAOrB,CAAC;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;iBAa1B,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AACxD,eAAO,MAAM,aAAa;;;;;iBAKxB,CAAC;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAYzB,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAC3D,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAIvB,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AACtD,eAAO,MAAM,gBAAgB;;iBAE3B,CAAC;AAEH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ,GACjB,MAAM,CAgBR;AAED,kFAAkF;AAClF,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAG7C"}
@@ -0,0 +1,76 @@
1
+ import { z } from "zod";
2
+ import { historySchema, linkSchema, occurrenceSchema, settingsSchema, stateSchema, } from "./schema.js";
3
+ import { domainExcluded } from "./url.js";
4
+ export const viewSchema = z.enum([
5
+ "all",
6
+ "problems",
7
+ "archives",
8
+ "reviews",
9
+ "grokipedia",
10
+ "history",
11
+ ]);
12
+ export const listQuerySchema = z.object({
13
+ view: viewSchema.default("all"),
14
+ search: z.string().max(500).default(""),
15
+ domain: z.string().max(253).default(""),
16
+ collection: z.string().max(100).default(""),
17
+ contentId: z.string().max(100).default(""),
18
+ language: z.string().max(30).default(""),
19
+ state: z
20
+ .enum(["", "pending", "healthy", "broken", "unverifiable", "excluded"])
21
+ .default(""),
22
+ reviewBefore: z.coerce.number().nonnegative().optional(),
23
+ offset: z.coerce.number().int().nonnegative().default(0),
24
+ limit: z.coerce.number().int().min(1).max(100).default(50),
25
+ });
26
+ export const summarySchema = z.object({
27
+ attention: z.number(),
28
+ archives: z.number(),
29
+ reviews: z.number(),
30
+ unverifiable: z.number(),
31
+ });
32
+ export const snapshotSchema = z.object({
33
+ links: z.array(linkSchema),
34
+ occurrences: z.array(occurrenceSchema),
35
+ history: z.array(historySchema),
36
+ total: z.number(),
37
+ summary: summarySchema,
38
+ settings: settingsSchema,
39
+ worker: stateSchema,
40
+ scheduled: z.boolean(),
41
+ nextRunAt: z.number().nullable(),
42
+ pendingCommands: z.number(),
43
+ canManage: z.boolean(),
44
+ });
45
+ export const detailSchema = z.object({
46
+ link: linkSchema.nullable(),
47
+ occurrences: z.array(occurrenceSchema),
48
+ history: z.array(historySchema),
49
+ });
50
+ export const projectionSchema = z.object({
51
+ rules: z.array(z.tuple([z.url(), z.url()])),
52
+ });
53
+ export function effectiveDestination(link, original, settings) {
54
+ const rule = link.replacement;
55
+ if (!rule ||
56
+ !settings.enabled ||
57
+ link.excluded ||
58
+ !link.active ||
59
+ domainExcluded(link.host, settings.excludedDomains))
60
+ return original;
61
+ if (rule.kind === "archive" && !settings.archiveEnabled)
62
+ return original;
63
+ if (rule.kind === "grokipedia" && !settings.grokipediaEnabled)
64
+ return original;
65
+ if (rule.kind === "manual")
66
+ return rule.url;
67
+ if (!rule.fragments.includes(new URL(original).hash))
68
+ return original;
69
+ return `${rule.url}${new URL(original).hash}`;
70
+ }
71
+ /** Spreadsheet applications must not interpret URL or editor text as formulas. */
72
+ export function csvCell(value) {
73
+ const safe = /^[\s]*[=+@-]/u.test(value) ? `'${value}` : value;
74
+ return `"${safe.replaceAll('"', '""')}"`;
75
+ }
76
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/core/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { ContentAccess } from "emdash";
2
+ import { LinkChecker } from "./http.js";
3
+ import type { HttpTransport } from "./http.js";
4
+ import type { ArchiveProvider, EncyclopediaProvider } from "./providers.js";
5
+ import type { LinkRecord, ResolvedOptions, Settings } from "./schema.js";
6
+ import type { RelinkStore } from "./storage.js";
7
+ export declare function newLink(id: string, url: string, now: number): LinkRecord;
8
+ export interface EngineDependencies {
9
+ store: RelinkStore;
10
+ content: ContentAccess;
11
+ transport: HttpTransport;
12
+ options: ResolvedOptions;
13
+ clock?: () => number;
14
+ archive?: ArchiveProvider;
15
+ encyclopedia?: EncyclopediaProvider;
16
+ }
17
+ /** Invoke tick only through EmDash's single, atomically claimed recurring job. */
18
+ export declare class RelinkEngine {
19
+ private readonly dependencies;
20
+ private readonly clock;
21
+ constructor(dependencies: EngineDependencies);
22
+ private get store();
23
+ tick(): Promise<void>;
24
+ private event;
25
+ private processCommands;
26
+ private apply;
27
+ private scanBatch;
28
+ checkLink(link: LinkRecord, settings: Settings, checker: LinkChecker): Promise<void>;
29
+ }
30
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/core/engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAE5C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/C,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAE5E,OAAO,KAAK,EAGV,UAAU,EACV,eAAe,EACf,QAAQ,EAET,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,CAsBxE;AACD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,aAAa,CAAC;IACvB,SAAS,EAAE,aAAa,CAAC;IACzB,OAAO,EAAE,eAAe,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,YAAY,CAAC,EAAE,oBAAoB,CAAC;CACrC;AAED,kFAAkF;AAClF,qBAAa,YAAY;IAEX,OAAO,CAAC,QAAQ,CAAC,YAAY;IADzC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;gBACR,YAAY,EAAE,kBAAkB;IAG7D,OAAO,KAAK,KAAK,GAEhB;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAyCb,KAAK;YAkBL,eAAe;YAaf,KAAK;YAgEL,SAAS;IAwFjB,SAAS,CACb,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC;CAwJjB"}