@ewanc26/atproto 0.2.9 → 0.2.11
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/dist/agents.d.ts.map +1 -1
- package/dist/agents.js +17 -3
- package/dist/fetch.d.ts +7 -1
- package/dist/fetch.d.ts.map +1 -1
- package/dist/fetch.js +231 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/jetstream.d.ts +100 -0
- package/dist/jetstream.d.ts.map +1 -0
- package/dist/jetstream.js +270 -0
- package/dist/musicbrainz.d.ts +1 -0
- package/dist/musicbrainz.d.ts.map +1 -1
- package/dist/musicbrainz.js +15 -2
- package/dist/types.d.ts +65 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/agents.ts +30 -4
- package/src/fetch.ts +296 -1
- package/src/index.ts +15 -2
- package/src/musicbrainz.ts +20 -2
- package/src/types.ts +72 -0
package/dist/agents.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAuBnD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,GAAG,QAAQ,CAqB7E;AAED,eAAO,MAAM,kBAAkB,UAAsD,CAAC;AACtF,eAAO,MAAM,YAAY,UAA6C,CAAC;AAKvE,wBAAsB,eAAe,CACpC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,OAAO,KAAK,GACpB,OAAO,CAAC,gBAAgB,CAAC,CAiC3B;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,CAwB3F;AAED,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,CAKxF;AAED,wBAAsB,YAAY,CAAC,CAAC,EACnC,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,EAC1C,WAAW,UAAQ,EACnB,OAAO,CAAC,EAAE,OAAO,KAAK,GACpB,OAAO,CAAC,CAAC,CAAC,CAkBZ;AAED,wBAAgB,WAAW,IAAI,IAAI,CAGlC"}
|
package/dist/agents.js
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
import { AtpAgent } from '@atproto/api';
|
|
2
2
|
import { cache } from './cache.js';
|
|
3
|
+
/** Default timeout for individual AT Protocol XRPC calls (ms). */
|
|
4
|
+
const XRPC_TIMEOUT = 8_000;
|
|
5
|
+
/** Default timeout for identity resolution (ms). */
|
|
6
|
+
const IDENTITY_TIMEOUT = 5_000;
|
|
7
|
+
/**
|
|
8
|
+
* Wraps a promise with a timeout. Rejects with a TimeoutError if the promise
|
|
9
|
+
* doesn't settle within `ms` milliseconds.
|
|
10
|
+
*/
|
|
11
|
+
function withTimeout(promise, ms) {
|
|
12
|
+
return new Promise((resolve, reject) => {
|
|
13
|
+
const timer = setTimeout(() => reject(new Error(`Timeout after ${ms}ms`)), ms);
|
|
14
|
+
promise.then((value) => { clearTimeout(timer); resolve(value); }, (err) => { clearTimeout(timer); reject(err); });
|
|
15
|
+
});
|
|
16
|
+
}
|
|
3
17
|
export function createAgent(service, fetchFn) {
|
|
4
18
|
const wrappedFetch = fetchFn
|
|
5
19
|
? async (url, init) => {
|
|
@@ -31,7 +45,7 @@ export async function resolveIdentity(did, fetchFn) {
|
|
|
31
45
|
if (cached)
|
|
32
46
|
return cached;
|
|
33
47
|
const _fetch = fetchFn ?? globalThis.fetch;
|
|
34
|
-
const response = await _fetch(`https://slingshot.microcosm.blue/xrpc/com.bad-example.identity.resolveMiniDoc?identifier=${encodeURIComponent(did)}`);
|
|
48
|
+
const response = await withTimeout(_fetch(`https://slingshot.microcosm.blue/xrpc/com.bad-example.identity.resolveMiniDoc?identifier=${encodeURIComponent(did)}`), IDENTITY_TIMEOUT);
|
|
35
49
|
if (!response.ok) {
|
|
36
50
|
throw new Error(`Failed to resolve identifier via Slingshot: ${response.status} ${response.statusText}`);
|
|
37
51
|
}
|
|
@@ -54,7 +68,7 @@ export async function getPublicAgent(did, fetchFn) {
|
|
|
54
68
|
return resolvedAgent;
|
|
55
69
|
try {
|
|
56
70
|
try {
|
|
57
|
-
const response = await constellationAgent.getProfile({ actor: did });
|
|
71
|
+
const response = await withTimeout(constellationAgent.getProfile({ actor: did }), XRPC_TIMEOUT);
|
|
58
72
|
if (response.success) {
|
|
59
73
|
resolvedAgent = constellationAgent;
|
|
60
74
|
return resolvedAgent;
|
|
@@ -88,7 +102,7 @@ export async function withFallback(did, operation, usePDSFirst = false, fetchFn)
|
|
|
88
102
|
for (const getAgent of agents) {
|
|
89
103
|
try {
|
|
90
104
|
const agent = await getAgent();
|
|
91
|
-
return await operation(agent);
|
|
105
|
+
return await withTimeout(operation(agent), XRPC_TIMEOUT);
|
|
92
106
|
}
|
|
93
107
|
catch (error) {
|
|
94
108
|
lastError = error;
|
package/dist/fetch.d.ts
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
1
|
-
import type { ProfileData, SiteInfoData, LinkData, MusicStatusData, KibunStatusData, TangledReposData, PopfeedReview, SifaProfileData, SifaSkill, SifaProject, SifaLanguage, SifaCertification, SifaExternalAccount } from './types.js';
|
|
1
|
+
import type { ProfileData, SiteInfoData, LinkData, MusicStatusData, KibunStatusData, TangledReposData, PopfeedReview, SifaProfileData, SifaSkill, SifaProject, SifaLanguage, SifaCertification, SifaExternalAccount, SifaPosition, SifaEducation, SifaVolunteering, SifaHonor, SifaCourse, SifaPublication } from './types.js';
|
|
2
2
|
export declare function fetchProfile(did: string, fetchFn?: typeof fetch): Promise<ProfileData>;
|
|
3
3
|
export declare function fetchSiteInfo(did: string, fetchFn?: typeof fetch): Promise<SiteInfoData | null>;
|
|
4
4
|
export declare function fetchLinks(did: string, fetchFn?: typeof fetch): Promise<LinkData | null>;
|
|
5
5
|
export declare function fetchMusicStatus(did: string, fetchFn?: typeof fetch): Promise<MusicStatusData | null>;
|
|
6
6
|
export declare function fetchKibunStatus(did: string, fetchFn?: typeof fetch): Promise<KibunStatusData | null>;
|
|
7
7
|
export declare function fetchRecentPopfeedReviews(did: string, limit?: number, fetchFn?: typeof fetch): Promise<PopfeedReview[]>;
|
|
8
|
+
export declare function fetchSifaPositions(did: string, fetchFn?: typeof fetch): Promise<SifaPosition[]>;
|
|
9
|
+
export declare function fetchSifaEducation(did: string, fetchFn?: typeof fetch): Promise<SifaEducation[]>;
|
|
10
|
+
export declare function fetchSifaVolunteering(did: string, fetchFn?: typeof fetch): Promise<SifaVolunteering[]>;
|
|
11
|
+
export declare function fetchSifaHonors(did: string, fetchFn?: typeof fetch): Promise<SifaHonor[]>;
|
|
12
|
+
export declare function fetchSifaCourses(did: string, fetchFn?: typeof fetch): Promise<SifaCourse[]>;
|
|
13
|
+
export declare function fetchSifaPublications(did: string, fetchFn?: typeof fetch): Promise<SifaPublication[]>;
|
|
8
14
|
export declare function fetchTangledRepos(did: string, fetchFn?: typeof fetch): Promise<TangledReposData | null>;
|
|
9
15
|
export declare function fetchSifaProfile(did: string, fetchFn?: typeof fetch): Promise<SifaProfileData | null>;
|
|
10
16
|
export declare function fetchSifaSkills(did: string, fetchFn?: typeof fetch): Promise<SifaSkill[]>;
|
package/dist/fetch.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../src/fetch.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACX,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,eAAe,EACf,eAAe,EAEf,gBAAgB,EAChB,aAAa,EAGb,eAAe,EACf,SAAS,EACT,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,MAAM,YAAY,CAAC;AAEpB,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,CAgD5F;AAED,wBAAsB,aAAa,CAClC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,OAAO,KAAK,GACpB,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAgC9B;AAED,wBAAsB,UAAU,CAC/B,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,OAAO,KAAK,GACpB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CA2B1B;AAED,wBAAsB,gBAAgB,CACrC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,OAAO,KAAK,GACpB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAkIjC;AAED,wBAAsB,gBAAgB,CACrC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,OAAO,KAAK,GACpB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAmCjC;AAED,wBAAsB,yBAAyB,CAC9C,GAAG,EAAE,MAAM,EACX,KAAK,SAAI,EACT,OAAO,CAAC,EAAE,OAAO,KAAK,GACpB,OAAO,CAAC,aAAa,EAAE,CAAC,CAgD1B;AAED,wBAAsB,iBAAiB,CACtC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,OAAO,KAAK,GACpB,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CA2ClC;AAID,wBAAsB,gBAAgB,CACrC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,OAAO,KAAK,GACpB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAqCjC;AAED,wBAAsB,eAAe,CACpC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,OAAO,KAAK,GACpB,OAAO,CAAC,SAAS,EAAE,CAAC,CAkCtB;AAED,wBAAsB,iBAAiB,CACtC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,OAAO,KAAK,GACpB,OAAO,CAAC,WAAW,EAAE,CAAC,CA0CxB;AAED,wBAAsB,kBAAkB,CACvC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,OAAO,KAAK,GACpB,OAAO,CAAC,YAAY,EAAE,CAAC,CAkCzB;AAED,wBAAsB,uBAAuB,CAC5C,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,OAAO,KAAK,GACpB,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAyC9B;AAED,wBAAsB,yBAAyB,CAC9C,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,OAAO,KAAK,GACpB,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAqChC"}
|
|
1
|
+
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../src/fetch.ts"],"names":[],"mappings":"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"}
|
package/dist/fetch.js
CHANGED
|
@@ -283,6 +283,237 @@ export async function fetchRecentPopfeedReviews(did, limit = 5, fetchFn) {
|
|
|
283
283
|
return [];
|
|
284
284
|
}
|
|
285
285
|
}
|
|
286
|
+
export async function fetchSifaPositions(did, fetchFn) {
|
|
287
|
+
const cacheKey = `sifa:positions:${did}`;
|
|
288
|
+
const cached = cache.get(cacheKey);
|
|
289
|
+
if (cached)
|
|
290
|
+
return cached;
|
|
291
|
+
try {
|
|
292
|
+
const records = await withFallback(did, async (agent) => {
|
|
293
|
+
const response = await agent.com.atproto.repo.listRecords({
|
|
294
|
+
repo: did,
|
|
295
|
+
collection: 'id.sifa.profile.position',
|
|
296
|
+
limit: 100
|
|
297
|
+
});
|
|
298
|
+
return response.data.records;
|
|
299
|
+
}, true, fetchFn);
|
|
300
|
+
const data = records.map((record) => {
|
|
301
|
+
const value = record.value;
|
|
302
|
+
return {
|
|
303
|
+
company: value.company,
|
|
304
|
+
companyDid: value.companyDid,
|
|
305
|
+
title: value.title,
|
|
306
|
+
description: value.description,
|
|
307
|
+
employmentType: value.employmentType,
|
|
308
|
+
workplaceType: value.workplaceType,
|
|
309
|
+
location: value.location,
|
|
310
|
+
startedAt: value.startedAt,
|
|
311
|
+
endedAt: value.endedAt,
|
|
312
|
+
skills: value.skills,
|
|
313
|
+
isPrimary: value.isPrimary,
|
|
314
|
+
uri: record.uri
|
|
315
|
+
};
|
|
316
|
+
});
|
|
317
|
+
data.sort((a, b) => {
|
|
318
|
+
if (!a.startedAt)
|
|
319
|
+
return 1;
|
|
320
|
+
if (!b.startedAt)
|
|
321
|
+
return -1;
|
|
322
|
+
return new Date(b.startedAt).getTime() - new Date(a.startedAt).getTime();
|
|
323
|
+
});
|
|
324
|
+
cache.set(cacheKey, data);
|
|
325
|
+
return data;
|
|
326
|
+
}
|
|
327
|
+
catch {
|
|
328
|
+
return [];
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
export async function fetchSifaEducation(did, fetchFn) {
|
|
332
|
+
const cacheKey = `sifa:education:${did}`;
|
|
333
|
+
const cached = cache.get(cacheKey);
|
|
334
|
+
if (cached)
|
|
335
|
+
return cached;
|
|
336
|
+
try {
|
|
337
|
+
const records = await withFallback(did, async (agent) => {
|
|
338
|
+
const response = await agent.com.atproto.repo.listRecords({
|
|
339
|
+
repo: did,
|
|
340
|
+
collection: 'id.sifa.profile.education',
|
|
341
|
+
limit: 100
|
|
342
|
+
});
|
|
343
|
+
return response.data.records;
|
|
344
|
+
}, true, fetchFn);
|
|
345
|
+
const data = records.map((record) => {
|
|
346
|
+
const value = record.value;
|
|
347
|
+
return {
|
|
348
|
+
institution: value.institution,
|
|
349
|
+
institutionDid: value.institutionDid,
|
|
350
|
+
degree: value.degree,
|
|
351
|
+
fieldOfStudy: value.fieldOfStudy,
|
|
352
|
+
grade: value.grade,
|
|
353
|
+
activities: value.activities,
|
|
354
|
+
description: value.description,
|
|
355
|
+
location: value.location,
|
|
356
|
+
startedAt: value.startedAt,
|
|
357
|
+
endedAt: value.endedAt,
|
|
358
|
+
uri: record.uri
|
|
359
|
+
};
|
|
360
|
+
});
|
|
361
|
+
data.sort((a, b) => {
|
|
362
|
+
const aEnd = a.endedAt ? new Date(a.endedAt).getTime() : Date.now();
|
|
363
|
+
const bEnd = b.endedAt ? new Date(b.endedAt).getTime() : Date.now();
|
|
364
|
+
return bEnd - aEnd;
|
|
365
|
+
});
|
|
366
|
+
cache.set(cacheKey, data);
|
|
367
|
+
return data;
|
|
368
|
+
}
|
|
369
|
+
catch {
|
|
370
|
+
return [];
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
export async function fetchSifaVolunteering(did, fetchFn) {
|
|
374
|
+
const cacheKey = `sifa:volunteering:${did}`;
|
|
375
|
+
const cached = cache.get(cacheKey);
|
|
376
|
+
if (cached)
|
|
377
|
+
return cached;
|
|
378
|
+
try {
|
|
379
|
+
const records = await withFallback(did, async (agent) => {
|
|
380
|
+
const response = await agent.com.atproto.repo.listRecords({
|
|
381
|
+
repo: did,
|
|
382
|
+
collection: 'id.sifa.profile.volunteering',
|
|
383
|
+
limit: 100
|
|
384
|
+
});
|
|
385
|
+
return response.data.records;
|
|
386
|
+
}, true, fetchFn);
|
|
387
|
+
const data = records.map((record) => {
|
|
388
|
+
const value = record.value;
|
|
389
|
+
return {
|
|
390
|
+
organization: value.organization,
|
|
391
|
+
organizationDid: value.organizationDid,
|
|
392
|
+
role: value.role,
|
|
393
|
+
cause: value.cause,
|
|
394
|
+
description: value.description,
|
|
395
|
+
startedAt: value.startedAt,
|
|
396
|
+
endedAt: value.endedAt,
|
|
397
|
+
uri: record.uri
|
|
398
|
+
};
|
|
399
|
+
});
|
|
400
|
+
cache.set(cacheKey, data);
|
|
401
|
+
return data;
|
|
402
|
+
}
|
|
403
|
+
catch {
|
|
404
|
+
return [];
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
export async function fetchSifaHonors(did, fetchFn) {
|
|
408
|
+
const cacheKey = `sifa:honors:${did}`;
|
|
409
|
+
const cached = cache.get(cacheKey);
|
|
410
|
+
if (cached)
|
|
411
|
+
return cached;
|
|
412
|
+
try {
|
|
413
|
+
const records = await withFallback(did, async (agent) => {
|
|
414
|
+
const response = await agent.com.atproto.repo.listRecords({
|
|
415
|
+
repo: did,
|
|
416
|
+
collection: 'id.sifa.profile.honor',
|
|
417
|
+
limit: 100
|
|
418
|
+
});
|
|
419
|
+
return response.data.records;
|
|
420
|
+
}, true, fetchFn);
|
|
421
|
+
const data = records.map((record) => {
|
|
422
|
+
const value = record.value;
|
|
423
|
+
return {
|
|
424
|
+
title: value.title,
|
|
425
|
+
issuer: value.issuer,
|
|
426
|
+
issuerDid: value.issuerDid,
|
|
427
|
+
description: value.description,
|
|
428
|
+
awardedAt: value.awardedAt,
|
|
429
|
+
uri: record.uri
|
|
430
|
+
};
|
|
431
|
+
});
|
|
432
|
+
data.sort((a, b) => {
|
|
433
|
+
if (!a.awardedAt)
|
|
434
|
+
return 1;
|
|
435
|
+
if (!b.awardedAt)
|
|
436
|
+
return -1;
|
|
437
|
+
return new Date(b.awardedAt).getTime() - new Date(a.awardedAt).getTime();
|
|
438
|
+
});
|
|
439
|
+
cache.set(cacheKey, data);
|
|
440
|
+
return data;
|
|
441
|
+
}
|
|
442
|
+
catch {
|
|
443
|
+
return [];
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
export async function fetchSifaCourses(did, fetchFn) {
|
|
447
|
+
const cacheKey = `sifa:courses:${did}`;
|
|
448
|
+
const cached = cache.get(cacheKey);
|
|
449
|
+
if (cached)
|
|
450
|
+
return cached;
|
|
451
|
+
try {
|
|
452
|
+
const records = await withFallback(did, async (agent) => {
|
|
453
|
+
const response = await agent.com.atproto.repo.listRecords({
|
|
454
|
+
repo: did,
|
|
455
|
+
collection: 'id.sifa.profile.course',
|
|
456
|
+
limit: 100
|
|
457
|
+
});
|
|
458
|
+
return response.data.records;
|
|
459
|
+
}, true, fetchFn);
|
|
460
|
+
const data = records.map((record) => {
|
|
461
|
+
const value = record.value;
|
|
462
|
+
return {
|
|
463
|
+
name: value.name,
|
|
464
|
+
number: value.number,
|
|
465
|
+
institution: value.institution,
|
|
466
|
+
education: value.education,
|
|
467
|
+
uri: record.uri
|
|
468
|
+
};
|
|
469
|
+
});
|
|
470
|
+
cache.set(cacheKey, data);
|
|
471
|
+
return data;
|
|
472
|
+
}
|
|
473
|
+
catch {
|
|
474
|
+
return [];
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
export async function fetchSifaPublications(did, fetchFn) {
|
|
478
|
+
const cacheKey = `sifa:publications:${did}`;
|
|
479
|
+
const cached = cache.get(cacheKey);
|
|
480
|
+
if (cached)
|
|
481
|
+
return cached;
|
|
482
|
+
try {
|
|
483
|
+
const records = await withFallback(did, async (agent) => {
|
|
484
|
+
const response = await agent.com.atproto.repo.listRecords({
|
|
485
|
+
repo: did,
|
|
486
|
+
collection: 'id.sifa.profile.publication',
|
|
487
|
+
limit: 100
|
|
488
|
+
});
|
|
489
|
+
return response.data.records;
|
|
490
|
+
}, true, fetchFn);
|
|
491
|
+
const data = records.map((record) => {
|
|
492
|
+
const value = record.value;
|
|
493
|
+
return {
|
|
494
|
+
title: value.title,
|
|
495
|
+
publisher: value.publisher,
|
|
496
|
+
url: value.url,
|
|
497
|
+
description: value.description,
|
|
498
|
+
authors: value.authors,
|
|
499
|
+
publishedAt: value.publishedAt,
|
|
500
|
+
uri: record.uri
|
|
501
|
+
};
|
|
502
|
+
});
|
|
503
|
+
data.sort((a, b) => {
|
|
504
|
+
if (!a.publishedAt)
|
|
505
|
+
return 1;
|
|
506
|
+
if (!b.publishedAt)
|
|
507
|
+
return -1;
|
|
508
|
+
return new Date(b.publishedAt).getTime() - new Date(a.publishedAt).getTime();
|
|
509
|
+
});
|
|
510
|
+
cache.set(cacheKey, data);
|
|
511
|
+
return data;
|
|
512
|
+
}
|
|
513
|
+
catch {
|
|
514
|
+
return [];
|
|
515
|
+
}
|
|
516
|
+
}
|
|
286
517
|
export async function fetchTangledRepos(did, fetchFn) {
|
|
287
518
|
const cacheKey = `tangled:${did}`;
|
|
288
519
|
const cached = cache.get(cacheKey);
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export type { PopfeedReview, PopfeedCreativeWorkType, PopfeedMainCreditRole, ProfileData, StatusData, SiteInfoData, LinkData, LinkCard, BlueskyPost, BlogPost, BlogPostsData, PostAuthor, ExternalLink, Facet, Technology, License, BasedOnItem, RelatedService, Repository, Credit, SectionLicense, ResolvedIdentity, CacheEntry, MusicStatusData, MusicArtist, KibunStatusData, TangledRepo, TangledReposData, StandardSitePublication, StandardSitePublicationsData, StandardSiteDocument, StandardSiteDocumentsData, StandardSiteBasicTheme, StandardSiteThemeColor, SifaProfileData, SifaSkill, SifaProject, SifaLanguage, SifaCertification, SifaExternalAccount, SifaLocation } from './types.js';
|
|
2
|
-
export { fetchProfile, fetchSiteInfo, fetchLinks, fetchMusicStatus, fetchKibunStatus, fetchTangledRepos, fetchRecentPopfeedReviews, fetchSifaProfile, fetchSifaSkills, fetchSifaProjects, fetchSifaLanguages, fetchSifaCertifications, fetchSifaExternalAccounts } from './fetch.js';
|
|
1
|
+
export type { PopfeedReview, PopfeedCreativeWorkType, PopfeedMainCreditRole, ProfileData, StatusData, SiteInfoData, LinkData, LinkCard, BlueskyPost, BlogPost, BlogPostsData, PostAuthor, ExternalLink, Facet, Technology, License, BasedOnItem, RelatedService, Repository, Credit, SectionLicense, ResolvedIdentity, CacheEntry, MusicStatusData, MusicArtist, KibunStatusData, TangledRepo, TangledReposData, StandardSitePublication, StandardSitePublicationsData, StandardSiteDocument, StandardSiteDocumentsData, StandardSiteBasicTheme, StandardSiteThemeColor, SifaProfileData, SifaSkill, SifaProject, SifaLanguage, SifaCertification, SifaExternalAccount, SifaLocation, SifaPosition, SifaEducation, SifaVolunteering, SifaHonor, SifaCourse, SifaPublication, SifaPublicationAuthor } from './types.js';
|
|
2
|
+
export { fetchProfile, fetchSiteInfo, fetchLinks, fetchMusicStatus, fetchKibunStatus, fetchTangledRepos, fetchRecentPopfeedReviews, fetchSifaProfile, fetchSifaSkills, fetchSifaProjects, fetchSifaLanguages, fetchSifaCertifications, fetchSifaExternalAccounts, fetchSifaPositions, fetchSifaEducation, fetchSifaVolunteering, fetchSifaHonors, fetchSifaCourses, fetchSifaPublications } from './fetch.js';
|
|
3
3
|
export { fetchPublications, fetchDocuments, fetchRecentDocuments, fetchBlogPosts } from './documents.js';
|
|
4
4
|
export { fetchLatestBlueskyPost, fetchPostFromUri } from './posts.js';
|
|
5
5
|
export { buildPdsBlobUrl, extractCidFromImageObject, extractImageUrlsFromValue } from './media.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,YAAY,EACX,aAAa,EACb,uBAAuB,EACvB,qBAAqB,EACrB,WAAW,EACX,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,aAAa,EACb,UAAU,EACV,YAAY,EACZ,KAAK,EACL,UAAU,EACV,OAAO,EACP,WAAW,EACX,cAAc,EACd,UAAU,EACV,MAAM,EACN,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,WAAW,EACX,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,uBAAuB,EACvB,4BAA4B,EAC5B,oBAAoB,EACpB,yBAAyB,EACzB,sBAAsB,EACtB,sBAAsB,EACtB,eAAe,EACf,SAAS,EACT,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,YAAY,EACZ,MAAM,YAAY,CAAC;AAEpB,OAAO,EACN,YAAY,EACZ,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,yBAAyB,EACzB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,EACvB,yBAAyB,EACzB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACN,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,cAAc,EACd,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEtE,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAEnG,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAErJ,OAAO,EACN,wBAAwB,EACxB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,gCAAgC,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAEvF,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC7E,YAAY,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,YAAY,EACX,aAAa,EACb,uBAAuB,EACvB,qBAAqB,EACrB,WAAW,EACX,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,aAAa,EACb,UAAU,EACV,YAAY,EACZ,KAAK,EACL,UAAU,EACV,OAAO,EACP,WAAW,EACX,cAAc,EACd,UAAU,EACV,MAAM,EACN,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,WAAW,EACX,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,uBAAuB,EACvB,4BAA4B,EAC5B,oBAAoB,EACpB,yBAAyB,EACzB,sBAAsB,EACtB,sBAAsB,EACtB,eAAe,EACf,SAAS,EACT,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,SAAS,EACT,UAAU,EACV,eAAe,EACf,qBAAqB,EACrB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACN,YAAY,EACZ,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,yBAAyB,EACzB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,EACvB,yBAAyB,EACzB,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACrB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACN,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,cAAc,EACd,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEtE,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAEnG,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAErJ,OAAO,EACN,wBAAwB,EACxB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,gCAAgC,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAEvF,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC7E,YAAY,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Key API difference from the app's src/lib/services/atproto:
|
|
3
3
|
// All functions that previously read PUBLIC_ATPROTO_DID from the environment
|
|
4
4
|
// now accept `did: string` as their first argument.
|
|
5
|
-
export { fetchProfile, fetchSiteInfo, fetchLinks, fetchMusicStatus, fetchKibunStatus, fetchTangledRepos, fetchRecentPopfeedReviews, fetchSifaProfile, fetchSifaSkills, fetchSifaProjects, fetchSifaLanguages, fetchSifaCertifications, fetchSifaExternalAccounts } from './fetch.js';
|
|
5
|
+
export { fetchProfile, fetchSiteInfo, fetchLinks, fetchMusicStatus, fetchKibunStatus, fetchTangledRepos, fetchRecentPopfeedReviews, fetchSifaProfile, fetchSifaSkills, fetchSifaProjects, fetchSifaLanguages, fetchSifaCertifications, fetchSifaExternalAccounts, fetchSifaPositions, fetchSifaEducation, fetchSifaVolunteering, fetchSifaHonors, fetchSifaCourses, fetchSifaPublications } from './fetch.js';
|
|
6
6
|
export { fetchPublications, fetchDocuments, fetchRecentDocuments, fetchBlogPosts } from './documents.js';
|
|
7
7
|
export { fetchLatestBlueskyPost, fetchPostFromUri } from './posts.js';
|
|
8
8
|
export { buildPdsBlobUrl, extractCidFromImageObject, extractImageUrlsFromValue } from './media.js';
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Jetstream WebSocket client for AT Protocol real-time event streaming.
|
|
3
|
+
*
|
|
4
|
+
* Jetstream is a simplified JSON event stream that converts the CBOR-encoded
|
|
5
|
+
* AT Protocol firehose into lightweight, friendly JSON objects.
|
|
6
|
+
*
|
|
7
|
+
* @see https://github.com/bluesky-social/jetstream
|
|
8
|
+
*/
|
|
9
|
+
import type { JetstreamOptions, JetstreamEventHandler, JetstreamErrorHandler, JetstreamConnectionState } from './types.js';
|
|
10
|
+
/** Public Jetstream instances operated by Bluesky */
|
|
11
|
+
export declare const JETSTREAM_INSTANCES: {
|
|
12
|
+
readonly 'us-east-1': "wss://jetstream1.us-east.bsky.network";
|
|
13
|
+
readonly 'us-east-2': "wss://jetstream2.us-east.bsky.network";
|
|
14
|
+
readonly 'us-west-1': "wss://jetstream1.us-west.bsky.network";
|
|
15
|
+
readonly 'us-west-2': "wss://jetstream2.us-west.bsky.network";
|
|
16
|
+
};
|
|
17
|
+
export type JetstreamInstance = keyof typeof JETSTREAM_INSTANCES;
|
|
18
|
+
/**
|
|
19
|
+
* Client for connecting to AT Protocol Jetstream real-time event stream.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* const client = new JetstreamClient({
|
|
24
|
+
* wantedCollections: ['app.bsky.feed.post'],
|
|
25
|
+
* wantedDids: ['did:plc:...'],
|
|
26
|
+
* });
|
|
27
|
+
*
|
|
28
|
+
* client.onEvent((event) => {
|
|
29
|
+
* console.log('Received event:', event.kind, event.commit?.collection);
|
|
30
|
+
* });
|
|
31
|
+
*
|
|
32
|
+
* client.connect();
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare class JetstreamClient {
|
|
36
|
+
private ws;
|
|
37
|
+
private url;
|
|
38
|
+
private options;
|
|
39
|
+
private eventHandlers;
|
|
40
|
+
private errorHandlers;
|
|
41
|
+
private stateHandlers;
|
|
42
|
+
private reconnectAttempts;
|
|
43
|
+
private cursor;
|
|
44
|
+
private isConnecting;
|
|
45
|
+
private shouldReconnect;
|
|
46
|
+
private reconnectTimeout;
|
|
47
|
+
private _connectionState;
|
|
48
|
+
constructor(options?: JetstreamOptions);
|
|
49
|
+
/** Current connection state */
|
|
50
|
+
get connectionState(): JetstreamConnectionState;
|
|
51
|
+
/** Get current cursor (last seen time_us) */
|
|
52
|
+
getCursor(): number | undefined;
|
|
53
|
+
/** Connect to Jetstream and start receiving events */
|
|
54
|
+
connect(): void;
|
|
55
|
+
/** Disconnect from Jetstream */
|
|
56
|
+
disconnect(): void;
|
|
57
|
+
/** Subscribe to events */
|
|
58
|
+
onEvent(handler: JetstreamEventHandler): () => void;
|
|
59
|
+
/** Subscribe to errors */
|
|
60
|
+
onError(handler: JetstreamErrorHandler): () => void;
|
|
61
|
+
/** Subscribe to connection state changes */
|
|
62
|
+
onStateChange(handler: (state: JetstreamConnectionState) => void): () => void;
|
|
63
|
+
/** Update subscription filters after connecting */
|
|
64
|
+
updateFilters(options: Partial<JetstreamOptions>): void;
|
|
65
|
+
/** Set cursor for replay */
|
|
66
|
+
setCursor(cursor: number): void;
|
|
67
|
+
private buildUrl;
|
|
68
|
+
private setState;
|
|
69
|
+
private handleError;
|
|
70
|
+
private scheduleReconnect;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Create a Jetstream client for a specific DID's data.
|
|
74
|
+
* Filters events to only include records from the specified DID.
|
|
75
|
+
*/
|
|
76
|
+
export declare function createDidJetstreamClient(did: string, options?: Omit<JetstreamOptions, 'wantedDids'>): JetstreamClient;
|
|
77
|
+
/**
|
|
78
|
+
* Create a Jetstream client for specific collections.
|
|
79
|
+
* Receives events for all DIDs but only for the specified collections.
|
|
80
|
+
*/
|
|
81
|
+
export declare function createCollectionJetstreamClient(collections: string[], options?: Omit<JetstreamOptions, 'wantedCollections'>): JetstreamClient;
|
|
82
|
+
/**
|
|
83
|
+
* Create a Jetstream client for the full firehose (all collections, all DIDs).
|
|
84
|
+
* Use with caution - this receives a high volume of events.
|
|
85
|
+
*/
|
|
86
|
+
export declare function createFullFirehoseClient(options?: JetstreamOptions): JetstreamClient;
|
|
87
|
+
/**
|
|
88
|
+
* Get the current time as a Unix microseconds cursor.
|
|
89
|
+
* Useful for starting live-tail mode.
|
|
90
|
+
*/
|
|
91
|
+
export declare function getCurrentCursor(): number;
|
|
92
|
+
/**
|
|
93
|
+
* Convert a Unix timestamp (ms) to Jetstream cursor (microseconds).
|
|
94
|
+
*/
|
|
95
|
+
export declare function timestampToCursor(timestampMs: number): number;
|
|
96
|
+
/**
|
|
97
|
+
* Convert a Jetstream cursor (microseconds) to Unix timestamp (ms).
|
|
98
|
+
*/
|
|
99
|
+
export declare function cursorToTimestamp(cursor: number): number;
|
|
100
|
+
//# sourceMappingURL=jetstream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jetstream.d.ts","sourceRoot":"","sources":["../src/jetstream.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAEX,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,wBAAwB,EACxB,MAAM,YAAY,CAAC;AAEpB,qDAAqD;AACrD,eAAO,MAAM,mBAAmB;;;;;CAKtB,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG,MAAM,OAAO,mBAAmB,CAAC;AAUjE;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,eAAe;IAC3B,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,aAAa,CAAyC;IAC9D,OAAO,CAAC,aAAa,CAAyC;IAC9D,OAAO,CAAC,aAAa,CAA6D;IAClF,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,gBAAgB,CAA8C;IACtE,OAAO,CAAC,gBAAgB,CAA4C;gBAExD,OAAO,GAAE,gBAAqB;IAM1C,+BAA+B;IAC/B,IAAI,eAAe,IAAI,wBAAwB,CAE9C;IAED,6CAA6C;IAC7C,SAAS,IAAI,MAAM,GAAG,SAAS;IAI/B,sDAAsD;IACtD,OAAO,IAAI,IAAI;IA0Df,gCAAgC;IAChC,UAAU,IAAI,IAAI;IAalB,0BAA0B;IAC1B,OAAO,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,IAAI;IAKnD,0BAA0B;IAC1B,OAAO,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,IAAI;IAKnD,4CAA4C;IAC5C,aAAa,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,IAAI,GAAG,MAAM,IAAI;IAK7E,mDAAmD;IACnD,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAgBvD,4BAA4B;IAC5B,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B,OAAO,CAAC,QAAQ;IAqChB,OAAO,CAAC,QAAQ;IAWhB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,iBAAiB;CAWzB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACvC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,IAAI,CAAC,gBAAgB,EAAE,YAAY,CAAM,GAChD,eAAe,CAKjB;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,CAC9C,WAAW,EAAE,MAAM,EAAE,EACrB,OAAO,GAAE,IAAI,CAAC,gBAAgB,EAAE,mBAAmB,CAAM,GACvD,eAAe,CAKjB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,GAAE,gBAAqB,GAAG,eAAe,CAExF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAExD"}
|