@ewanc26/atproto 0.2.10 → 0.2.12

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.
@@ -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;AAGnD,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,CA8B3B;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,CAqB3F;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"}
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;
@@ -1 +1 @@
1
- {"version":3,"file":"documents.d.ts","sourceRoot":"","sources":["../src/documents.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAEX,4BAA4B,EAC5B,oBAAoB,EACpB,yBAAyB,EAIzB,QAAQ,EACR,MAAM,YAAY,CAAC;AAiEpB,wBAAsB,iBAAiB,CACtC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,OAAO,KAAK,GACpB,OAAO,CAAC,4BAA4B,CAAC,CAwDvC;AAED,wBAAsB,cAAc,CACnC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,OAAO,KAAK,GACpB,OAAO,CAAC,yBAAyB,CAAC,CAuEpC;AAED,wBAAsB,oBAAoB,CACzC,GAAG,EAAE,MAAM,EACX,KAAK,SAAI,EACT,OAAO,CAAC,EAAE,OAAO,KAAK,GACpB,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAGjC;AAED,wBAAsB,cAAc,CACnC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,OAAO,KAAK,GACpB,OAAO,CAAC;IAAE,KAAK,EAAE,QAAQ,EAAE,CAAA;CAAE,CAAC,CAiBhC"}
1
+ {"version":3,"file":"documents.d.ts","sourceRoot":"","sources":["../src/documents.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAEX,4BAA4B,EAC5B,oBAAoB,EACpB,yBAAyB,EAIzB,QAAQ,EACR,MAAM,YAAY,CAAC;AAiEpB,wBAAsB,iBAAiB,CACtC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,OAAO,KAAK,GACpB,OAAO,CAAC,4BAA4B,CAAC,CAwDvC;AAED,wBAAsB,cAAc,CACnC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,OAAO,KAAK,GACpB,OAAO,CAAC,yBAAyB,CAAC,CAuEpC;AAED,wBAAsB,oBAAoB,CACzC,GAAG,EAAE,MAAM,EACX,KAAK,SAAI,EACT,OAAO,CAAC,EAAE,OAAO,KAAK,GACpB,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAGjC;AAED,wBAAsB,cAAc,CACnC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,OAAO,KAAK,GACpB,OAAO,CAAC;IAAE,KAAK,EAAE,QAAQ,EAAE,CAAA;CAAE,CAAC,CAkBhC"}
package/dist/documents.js CHANGED
@@ -163,6 +163,7 @@ export async function fetchBlogPosts(did, fetchFn) {
163
163
  tags: doc.tags,
164
164
  coverImage: doc.coverImage,
165
165
  textContent: doc.textContent,
166
+ content: doc.content,
166
167
  updatedAt: doc.updatedAt
167
168
  }));
168
169
  return { posts };
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
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';
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, ToolkitUseMalachite, ToolkitUseJasper, ToolkitUseBismuth, ToolkitUseOpal, ToolkitUseTourmaline, ToolkitUseTool, ToolkitUseRecord } from './types.js';
2
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';
@@ -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,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"}
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,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EAChB,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"}
@@ -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"}
@@ -0,0 +1,270 @@
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
+ /** Public Jetstream instances operated by Bluesky */
10
+ export const JETSTREAM_INSTANCES = {
11
+ 'us-east-1': 'wss://jetstream1.us-east.bsky.network',
12
+ 'us-east-2': 'wss://jetstream2.us-east.bsky.network',
13
+ 'us-west-1': 'wss://jetstream1.us-west.bsky.network',
14
+ 'us-west-2': 'wss://jetstream2.us-west.bsky.network',
15
+ };
16
+ /** Default instance to use */
17
+ const DEFAULT_INSTANCE = 'us-west-2';
18
+ /** Reconnection settings */
19
+ const RECONNECT_DELAY_MS = 1000;
20
+ const MAX_RECONNECT_DELAY_MS = 30000;
21
+ const CURSOR_BUFFER_US = 5_000_000; // 5 seconds in microseconds
22
+ /**
23
+ * Client for connecting to AT Protocol Jetstream real-time event stream.
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * const client = new JetstreamClient({
28
+ * wantedCollections: ['app.bsky.feed.post'],
29
+ * wantedDids: ['did:plc:...'],
30
+ * });
31
+ *
32
+ * client.onEvent((event) => {
33
+ * console.log('Received event:', event.kind, event.commit?.collection);
34
+ * });
35
+ *
36
+ * client.connect();
37
+ * ```
38
+ */
39
+ export class JetstreamClient {
40
+ ws = null;
41
+ url;
42
+ options;
43
+ eventHandlers = new Set();
44
+ errorHandlers = new Set();
45
+ stateHandlers = new Set();
46
+ reconnectAttempts = 0;
47
+ cursor;
48
+ isConnecting = false;
49
+ shouldReconnect = true;
50
+ reconnectTimeout = null;
51
+ _connectionState = 'disconnected';
52
+ constructor(options = {}) {
53
+ this.url = options.url || JETSTREAM_INSTANCES[DEFAULT_INSTANCE];
54
+ this.options = options;
55
+ this.cursor = options.cursor;
56
+ }
57
+ /** Current connection state */
58
+ get connectionState() {
59
+ return this._connectionState;
60
+ }
61
+ /** Get current cursor (last seen time_us) */
62
+ getCursor() {
63
+ return this.cursor;
64
+ }
65
+ /** Connect to Jetstream and start receiving events */
66
+ connect() {
67
+ if (this.ws?.readyState === WebSocket.OPEN || this.isConnecting) {
68
+ return;
69
+ }
70
+ this.isConnecting = true;
71
+ this.shouldReconnect = true;
72
+ this.setState('connecting');
73
+ const wsUrl = this.buildUrl();
74
+ try {
75
+ this.ws = new WebSocket(wsUrl);
76
+ }
77
+ catch (err) {
78
+ this.isConnecting = false;
79
+ this.handleError(new Error(`Failed to create WebSocket: ${err}`));
80
+ this.scheduleReconnect();
81
+ return;
82
+ }
83
+ this.ws.onopen = () => {
84
+ this.isConnecting = false;
85
+ this.reconnectAttempts = 0;
86
+ this.setState('connected');
87
+ };
88
+ this.ws.onmessage = (event) => {
89
+ try {
90
+ const data = JSON.parse(event.data.toString());
91
+ this.cursor = data.time_us;
92
+ this.eventHandlers.forEach((handler) => {
93
+ try {
94
+ handler(data);
95
+ }
96
+ catch (err) {
97
+ console.error('[Jetstream] Handler error:', err);
98
+ }
99
+ });
100
+ }
101
+ catch (err) {
102
+ console.error('[Jetstream] Failed to parse message:', err);
103
+ }
104
+ };
105
+ this.ws.onerror = () => {
106
+ this.isConnecting = false;
107
+ this.handleError(new Error('WebSocket error'));
108
+ };
109
+ this.ws.onclose = (event) => {
110
+ this.isConnecting = false;
111
+ if (this.shouldReconnect) {
112
+ this.setState('reconnecting');
113
+ this.scheduleReconnect();
114
+ }
115
+ else {
116
+ this.setState('disconnected');
117
+ }
118
+ };
119
+ }
120
+ /** Disconnect from Jetstream */
121
+ disconnect() {
122
+ this.shouldReconnect = false;
123
+ if (this.reconnectTimeout) {
124
+ clearTimeout(this.reconnectTimeout);
125
+ this.reconnectTimeout = null;
126
+ }
127
+ if (this.ws) {
128
+ this.ws.close();
129
+ this.ws = null;
130
+ }
131
+ this.setState('disconnected');
132
+ }
133
+ /** Subscribe to events */
134
+ onEvent(handler) {
135
+ this.eventHandlers.add(handler);
136
+ return () => this.eventHandlers.delete(handler);
137
+ }
138
+ /** Subscribe to errors */
139
+ onError(handler) {
140
+ this.errorHandlers.add(handler);
141
+ return () => this.errorHandlers.delete(handler);
142
+ }
143
+ /** Subscribe to connection state changes */
144
+ onStateChange(handler) {
145
+ this.stateHandlers.add(handler);
146
+ return () => this.stateHandlers.delete(handler);
147
+ }
148
+ /** Update subscription filters after connecting */
149
+ updateFilters(options) {
150
+ this.options = { ...this.options, ...options };
151
+ if (this.ws?.readyState === WebSocket.OPEN) {
152
+ const message = {
153
+ type: 'options_update',
154
+ payload: {
155
+ wantedCollections: this.options.wantedCollections ?? [],
156
+ wantedDids: this.options.wantedDids ?? [],
157
+ maxMessageSizeBytes: this.options.maxMessageSizeBytes ?? 0,
158
+ },
159
+ };
160
+ this.ws.send(JSON.stringify(message));
161
+ }
162
+ }
163
+ /** Set cursor for replay */
164
+ setCursor(cursor) {
165
+ this.cursor = cursor;
166
+ }
167
+ buildUrl() {
168
+ const params = new URLSearchParams();
169
+ if (this.options.wantedCollections?.length) {
170
+ for (const collection of this.options.wantedCollections) {
171
+ params.append('wantedCollections', collection);
172
+ }
173
+ }
174
+ if (this.options.wantedDids?.length) {
175
+ for (const did of this.options.wantedDids) {
176
+ params.append('wantedDids', did);
177
+ }
178
+ }
179
+ if (this.options.maxMessageSizeBytes) {
180
+ params.set('maxMessageSizeBytes', String(this.options.maxMessageSizeBytes));
181
+ }
182
+ if (this.options.compress) {
183
+ params.set('compress', 'true');
184
+ }
185
+ if (this.options.requireHello) {
186
+ params.set('requireHello', 'true');
187
+ }
188
+ // Use cursor with buffer for gapless replay
189
+ if (this.cursor) {
190
+ const bufferedCursor = Math.max(0, this.cursor - CURSOR_BUFFER_US);
191
+ params.set('cursor', String(bufferedCursor));
192
+ }
193
+ const queryString = params.toString();
194
+ return queryString ? `${this.url}/subscribe?${queryString}` : `${this.url}/subscribe`;
195
+ }
196
+ setState(state) {
197
+ this._connectionState = state;
198
+ this.stateHandlers.forEach((handler) => {
199
+ try {
200
+ handler(state);
201
+ }
202
+ catch (err) {
203
+ console.error('[Jetstream] State handler error:', err);
204
+ }
205
+ });
206
+ }
207
+ handleError(error) {
208
+ this.errorHandlers.forEach((handler) => {
209
+ try {
210
+ handler(error);
211
+ }
212
+ catch (err) {
213
+ console.error('[Jetstream] Error handler error:', err);
214
+ }
215
+ });
216
+ }
217
+ scheduleReconnect() {
218
+ const delay = Math.min(RECONNECT_DELAY_MS * Math.pow(2, this.reconnectAttempts), MAX_RECONNECT_DELAY_MS);
219
+ this.reconnectAttempts++;
220
+ this.reconnectTimeout = setTimeout(() => {
221
+ this.connect();
222
+ }, delay);
223
+ }
224
+ }
225
+ /**
226
+ * Create a Jetstream client for a specific DID's data.
227
+ * Filters events to only include records from the specified DID.
228
+ */
229
+ export function createDidJetstreamClient(did, options = {}) {
230
+ return new JetstreamClient({
231
+ ...options,
232
+ wantedDids: [did],
233
+ });
234
+ }
235
+ /**
236
+ * Create a Jetstream client for specific collections.
237
+ * Receives events for all DIDs but only for the specified collections.
238
+ */
239
+ export function createCollectionJetstreamClient(collections, options = {}) {
240
+ return new JetstreamClient({
241
+ ...options,
242
+ wantedCollections: collections,
243
+ });
244
+ }
245
+ /**
246
+ * Create a Jetstream client for the full firehose (all collections, all DIDs).
247
+ * Use with caution - this receives a high volume of events.
248
+ */
249
+ export function createFullFirehoseClient(options = {}) {
250
+ return new JetstreamClient(options);
251
+ }
252
+ /**
253
+ * Get the current time as a Unix microseconds cursor.
254
+ * Useful for starting live-tail mode.
255
+ */
256
+ export function getCurrentCursor() {
257
+ return Date.now() * 1000;
258
+ }
259
+ /**
260
+ * Convert a Unix timestamp (ms) to Jetstream cursor (microseconds).
261
+ */
262
+ export function timestampToCursor(timestampMs) {
263
+ return timestampMs * 1000;
264
+ }
265
+ /**
266
+ * Convert a Jetstream cursor (microseconds) to Unix timestamp (ms).
267
+ */
268
+ export function cursorToTimestamp(cursor) {
269
+ return Math.floor(cursor / 1000);
270
+ }
@@ -5,6 +5,7 @@ export declare function searchDeezerArtwork(trackName: string, artistName: strin
5
5
  export declare function searchLastFmArtwork(trackName: string, artistName: string, releaseName?: string): Promise<string | null>;
6
6
  /**
7
7
  * Cascading artwork search: Cover Art Archive → MusicBrainz+CAA → iTunes → Last.fm
8
+ * Each step is bounded by ARTWORK_TIMEOUT to prevent serverless function timeouts.
8
9
  */
9
10
  export declare function findArtwork(trackName: string, artistName: string, releaseName?: string, releaseMbId?: string, fetchFn?: typeof fetch): Promise<string | null>;
10
11
  //# sourceMappingURL=musicbrainz.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"musicbrainz.d.ts","sourceRoot":"","sources":["../src/musicbrainz.ts"],"names":[],"mappings":"AAiBA,wBAAsB,wBAAwB,CAC7C,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiBxB;AAkCD,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,GAAE,GAAG,GAAG,GAAG,GAAG,IAAU,GAAG,MAAM,CAE1F;AAED,wBAAsB,mBAAmB,CACxC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAuBxB;AAED,wBAAsB,mBAAmB,CACxC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAGxB;AAED,wBAAsB,mBAAmB,CACxC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA2BxB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAChC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,EACpB,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,OAAO,KAAK,GACpB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA+BxB"}
1
+ {"version":3,"file":"musicbrainz.d.ts","sourceRoot":"","sources":["../src/musicbrainz.ts"],"names":[],"mappings":"AAyCA,wBAAsB,wBAAwB,CAC7C,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiBxB;AAkCD,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,GAAE,GAAG,GAAG,GAAG,GAAG,IAAU,GAAG,MAAM,CAG1F;AAED,wBAAsB,mBAAmB,CACxC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAuBxB;AAED,wBAAsB,mBAAmB,CACxC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAGxB;AAED,wBAAsB,mBAAmB,CACxC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA2BxB;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAChC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,EACpB,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,OAAO,KAAK,GACpB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA+BxB"}
@@ -1,4 +1,22 @@
1
1
  import { cache } from './cache.js';
2
+ /** Timeout for individual artwork API calls (ms). */
3
+ const ARTWORK_TIMEOUT = 5_000;
4
+ /**
5
+ * Wraps a promise with a timeout. Rejects with a TimeoutError if the promise
6
+ * doesn't settle within `ms` milliseconds.
7
+ */
8
+ function withTimeout(promise, ms) {
9
+ return new Promise((resolve, reject) => {
10
+ const timer = setTimeout(() => reject(new Error(`Timeout after ${ms}ms`)), ms);
11
+ promise.then((value) => { clearTimeout(timer); resolve(value); }, (err) => { clearTimeout(timer); reject(err); });
12
+ });
13
+ }
14
+ // Teal stores MusicBrainz IDs as URI strings (`mbid:<uuid>`), while Cover Art
15
+ // Archive release URLs still require the raw UUID path segment.
16
+ function toMusicBrainzUuid(value) {
17
+ const match = value.match(/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i);
18
+ return match?.[0].toLowerCase() ?? null;
19
+ }
2
20
  export async function searchMusicBrainzRelease(trackName, artistName, releaseName) {
3
21
  const cacheKey = `mb:release:${trackName}:${artistName}:${releaseName || 'none'}`;
4
22
  const cached = cache.get(cacheKey);
@@ -67,7 +85,8 @@ async function searchByTrackName(trackName, artistName) {
67
85
  }
68
86
  }
69
87
  export function buildCoverArtUrl(releaseMbId, size = 500) {
70
- return `https://coverartarchive.org/release/${releaseMbId}/front-${size}`;
88
+ const mbid = toMusicBrainzUuid(releaseMbId) ?? releaseMbId;
89
+ return `https://coverartarchive.org/release/${mbid}/front-${size}`;
71
90
  }
72
91
  export async function searchiTunesArtwork(trackName, artistName, releaseName) {
73
92
  const cacheKey = `itunes:artwork:${trackName}:${artistName}:${releaseName || 'none'}`;
@@ -140,6 +159,7 @@ export async function searchLastFmArtwork(trackName, artistName, releaseName) {
140
159
  }
141
160
  /**
142
161
  * Cascading artwork search: Cover Art Archive → MusicBrainz+CAA → iTunes → Last.fm
162
+ * Each step is bounded by ARTWORK_TIMEOUT to prevent serverless function timeouts.
143
163
  */
144
164
  export async function findArtwork(trackName, artistName, releaseName, releaseMbId, fetchFn) {
145
165
  const _fetch = fetchFn || globalThis.fetch;
@@ -147,7 +167,7 @@ export async function findArtwork(trackName, artistName, releaseName, releaseMbI
147
167
  if (releaseMbId) {
148
168
  const caaUrl = buildCoverArtUrl(releaseMbId, 500);
149
169
  try {
150
- const res = await _fetch(caaUrl, { method: 'HEAD' });
170
+ const res = await withTimeout(_fetch(caaUrl, { method: 'HEAD' }), ARTWORK_TIMEOUT);
151
171
  if (res.ok)
152
172
  return caaUrl;
153
173
  }
@@ -158,7 +178,7 @@ export async function findArtwork(trackName, artistName, releaseName, releaseMbI
158
178
  if (mbId) {
159
179
  const caaUrl = buildCoverArtUrl(mbId, 500);
160
180
  try {
161
- const res = await _fetch(caaUrl, { method: 'HEAD' });
181
+ const res = await withTimeout(_fetch(caaUrl, { method: 'HEAD' }), ARTWORK_TIMEOUT);
162
182
  if (res.ok)
163
183
  return caaUrl;
164
184
  }
package/dist/types.d.ts CHANGED
@@ -98,6 +98,7 @@ export interface BlogPost {
98
98
  tags?: string[];
99
99
  coverImage?: string;
100
100
  textContent?: string;
101
+ content?: unknown;
101
102
  updatedAt?: string;
102
103
  }
103
104
  export interface BlogPostsData {
@@ -393,4 +394,33 @@ export interface SifaPublication {
393
394
  publishedAt?: string;
394
395
  uri: string;
395
396
  }
397
+ export interface ToolkitUseMalachite {
398
+ $type: 'click.croft.tools.malachite';
399
+ recordsImported?: number;
400
+ mode?: string;
401
+ }
402
+ export interface ToolkitUseJasper {
403
+ $type: 'click.croft.tools.jasper';
404
+ recordsImported?: number;
405
+ }
406
+ export interface ToolkitUseBismuth {
407
+ $type: 'click.croft.tools.bismuth';
408
+ documentsConverted?: number;
409
+ }
410
+ export interface ToolkitUseOpal {
411
+ $type: 'click.croft.tools.opal';
412
+ postsImported?: number;
413
+ }
414
+ export interface ToolkitUseTourmaline {
415
+ $type: 'click.croft.tools.tourmaline';
416
+ scrobblesAnalyzed?: number;
417
+ sharedToBluesky?: boolean;
418
+ }
419
+ export type ToolkitUseTool = ToolkitUseMalachite | ToolkitUseJasper | ToolkitUseBismuth | ToolkitUseOpal | ToolkitUseTourmaline;
420
+ export interface ToolkitUseRecord {
421
+ $type: 'click.croft.toolkit.use';
422
+ tool: ToolkitUseTool;
423
+ createdAt: string;
424
+ context?: string;
425
+ }
396
426
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ewanc26/atproto",
3
- "version": "0.2.10",
3
+ "version": "0.2.12",
4
4
  "description": "AT Protocol service layer extracted from ewancroft.uk",
5
5
  "author": "Ewan Croft",
6
6
  "license": "AGPL-3.0-only",
@@ -35,16 +35,16 @@
35
35
  },
36
36
  "main": "./dist/index.js",
37
37
  "types": "./dist/index.d.ts",
38
- "scripts": {
39
- "build": "tsc --project tsconfig.json",
40
- "dev": "tsc --project tsconfig.json --watch",
41
- "check": "tsc --noEmit"
42
- },
43
38
  "peerDependencies": {
44
39
  "@atproto/api": ">=0.13.0"
45
40
  },
46
41
  "devDependencies": {
47
42
  "@atproto/api": "^0.19.3",
48
43
  "typescript": "^5.9.3"
44
+ },
45
+ "scripts": {
46
+ "build": "tsc --project tsconfig.json",
47
+ "dev": "tsc --project tsconfig.json --watch",
48
+ "check": "tsc --noEmit"
49
49
  }
50
- }
50
+ }
package/src/agents.ts CHANGED
@@ -2,6 +2,26 @@ import { AtpAgent } from '@atproto/api';
2
2
  import type { ResolvedIdentity } from './types.js';
3
3
  import { cache } from './cache.js';
4
4
 
5
+ /** Default timeout for individual AT Protocol XRPC calls (ms). */
6
+ const XRPC_TIMEOUT = 8_000;
7
+
8
+ /** Default timeout for identity resolution (ms). */
9
+ const IDENTITY_TIMEOUT = 5_000;
10
+
11
+ /**
12
+ * Wraps a promise with a timeout. Rejects with a TimeoutError if the promise
13
+ * doesn't settle within `ms` milliseconds.
14
+ */
15
+ function withTimeout<T>(promise: Promise<T>, ms: number): Promise<T> {
16
+ return new Promise<T>((resolve, reject) => {
17
+ const timer = setTimeout(() => reject(new Error(`Timeout after ${ms}ms`)), ms);
18
+ promise.then(
19
+ (value) => { clearTimeout(timer); resolve(value); },
20
+ (err) => { clearTimeout(timer); reject(err); }
21
+ );
22
+ });
23
+ }
24
+
5
25
  export function createAgent(service: string, fetchFn?: typeof fetch): AtpAgent {
6
26
  const wrappedFetch = fetchFn
7
27
  ? async (url: URL | RequestInfo, init?: RequestInit) => {
@@ -40,8 +60,11 @@ export async function resolveIdentity(
40
60
  if (cached) return cached;
41
61
 
42
62
  const _fetch = fetchFn ?? globalThis.fetch;
43
- const response = await _fetch(
44
- `https://slingshot.microcosm.blue/xrpc/com.bad-example.identity.resolveMiniDoc?identifier=${encodeURIComponent(did)}`
63
+ const response = await withTimeout(
64
+ _fetch(
65
+ `https://slingshot.microcosm.blue/xrpc/com.bad-example.identity.resolveMiniDoc?identifier=${encodeURIComponent(did)}`
66
+ ),
67
+ IDENTITY_TIMEOUT
45
68
  );
46
69
 
47
70
  if (!response.ok) {
@@ -71,7 +94,10 @@ export async function getPublicAgent(did: string, fetchFn?: typeof fetch): Promi
71
94
 
72
95
  try {
73
96
  try {
74
- const response = await constellationAgent.getProfile({ actor: did });
97
+ const response = await withTimeout(
98
+ constellationAgent.getProfile({ actor: did }),
99
+ XRPC_TIMEOUT
100
+ );
75
101
  if (response.success) {
76
102
  resolvedAgent = constellationAgent;
77
103
  return resolvedAgent;
@@ -113,7 +139,7 @@ export async function withFallback<T>(
113
139
  for (const getAgent of agents) {
114
140
  try {
115
141
  const agent = await getAgent();
116
- return await operation(agent);
142
+ return await withTimeout(operation(agent), XRPC_TIMEOUT);
117
143
  } catch (error) {
118
144
  lastError = error;
119
145
  }
package/src/documents.ts CHANGED
@@ -239,6 +239,7 @@ export async function fetchBlogPosts(
239
239
  tags: doc.tags,
240
240
  coverImage: doc.coverImage,
241
241
  textContent: doc.textContent,
242
+ content: doc.content,
242
243
  updatedAt: doc.updatedAt
243
244
  }));
244
245
  return { posts };
package/src/index.ts CHANGED
@@ -51,7 +51,14 @@ export type {
51
51
  SifaHonor,
52
52
  SifaCourse,
53
53
  SifaPublication,
54
- SifaPublicationAuthor
54
+ SifaPublicationAuthor,
55
+ ToolkitUseMalachite,
56
+ ToolkitUseJasper,
57
+ ToolkitUseBismuth,
58
+ ToolkitUseOpal,
59
+ ToolkitUseTourmaline,
60
+ ToolkitUseTool,
61
+ ToolkitUseRecord
55
62
  } from './types.js';
56
63
 
57
64
  export {
@@ -1,5 +1,22 @@
1
1
  import { cache } from './cache.js';
2
2
 
3
+ /** Timeout for individual artwork API calls (ms). */
4
+ const ARTWORK_TIMEOUT = 5_000;
5
+
6
+ /**
7
+ * Wraps a promise with a timeout. Rejects with a TimeoutError if the promise
8
+ * doesn't settle within `ms` milliseconds.
9
+ */
10
+ function withTimeout<T>(promise: Promise<T>, ms: number): Promise<T> {
11
+ return new Promise<T>((resolve, reject) => {
12
+ const timer = setTimeout(() => reject(new Error(`Timeout after ${ms}ms`)), ms);
13
+ promise.then(
14
+ (value) => { clearTimeout(timer); resolve(value); },
15
+ (err) => { clearTimeout(timer); reject(err); }
16
+ );
17
+ });
18
+ }
19
+
3
20
  interface MusicBrainzRelease {
4
21
  id: string;
5
22
  score: number;
@@ -15,6 +32,13 @@ interface iTunesSearchResponse {
15
32
  results: Array<{ artworkUrl100?: string }>;
16
33
  }
17
34
 
35
+ // Teal stores MusicBrainz IDs as URI strings (`mbid:<uuid>`), while Cover Art
36
+ // Archive release URLs still require the raw UUID path segment.
37
+ function toMusicBrainzUuid(value: string): string | null {
38
+ const match = value.match(/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i);
39
+ return match?.[0].toLowerCase() ?? null;
40
+ }
41
+
18
42
  export async function searchMusicBrainzRelease(
19
43
  trackName: string,
20
44
  artistName: string,
@@ -71,7 +95,8 @@ async function searchByTrackName(trackName: string, artistName: string): Promise
71
95
  }
72
96
 
73
97
  export function buildCoverArtUrl(releaseMbId: string, size: 250 | 500 | 1200 = 500): string {
74
- return `https://coverartarchive.org/release/${releaseMbId}/front-${size}`;
98
+ const mbid = toMusicBrainzUuid(releaseMbId) ?? releaseMbId;
99
+ return `https://coverartarchive.org/release/${mbid}/front-${size}`;
75
100
  }
76
101
 
77
102
  export async function searchiTunesArtwork(
@@ -147,6 +172,7 @@ export async function searchLastFmArtwork(
147
172
 
148
173
  /**
149
174
  * Cascading artwork search: Cover Art Archive → MusicBrainz+CAA → iTunes → Last.fm
175
+ * Each step is bounded by ARTWORK_TIMEOUT to prevent serverless function timeouts.
150
176
  */
151
177
  export async function findArtwork(
152
178
  trackName: string,
@@ -161,7 +187,7 @@ export async function findArtwork(
161
187
  if (releaseMbId) {
162
188
  const caaUrl = buildCoverArtUrl(releaseMbId, 500);
163
189
  try {
164
- const res = await _fetch(caaUrl, { method: 'HEAD' });
190
+ const res = await withTimeout(_fetch(caaUrl, { method: 'HEAD' }), ARTWORK_TIMEOUT);
165
191
  if (res.ok) return caaUrl;
166
192
  } catch { /* continue */ }
167
193
  }
@@ -171,7 +197,7 @@ export async function findArtwork(
171
197
  if (mbId) {
172
198
  const caaUrl = buildCoverArtUrl(mbId, 500);
173
199
  try {
174
- const res = await _fetch(caaUrl, { method: 'HEAD' });
200
+ const res = await withTimeout(_fetch(caaUrl, { method: 'HEAD' }), ARTWORK_TIMEOUT);
175
201
  if (res.ok) return caaUrl;
176
202
  } catch { /* continue */ }
177
203
  }
package/src/types.ts CHANGED
@@ -111,6 +111,7 @@ export interface BlogPost {
111
111
  tags?: string[];
112
112
  coverImage?: string;
113
113
  textContent?: string;
114
+ content?: unknown;
114
115
  updatedAt?: string;
115
116
  }
116
117
 
@@ -449,3 +450,46 @@ export interface SifaPublication {
449
450
  publishedAt?: string;
450
451
  uri: string;
451
452
  }
453
+
454
+ // Croft Click Toolkit Use Types
455
+
456
+ export interface ToolkitUseMalachite {
457
+ $type: 'click.croft.tools.malachite';
458
+ recordsImported?: number;
459
+ mode?: string;
460
+ }
461
+
462
+ export interface ToolkitUseJasper {
463
+ $type: 'click.croft.tools.jasper';
464
+ recordsImported?: number;
465
+ }
466
+
467
+ export interface ToolkitUseBismuth {
468
+ $type: 'click.croft.tools.bismuth';
469
+ documentsConverted?: number;
470
+ }
471
+
472
+ export interface ToolkitUseOpal {
473
+ $type: 'click.croft.tools.opal';
474
+ postsImported?: number;
475
+ }
476
+
477
+ export interface ToolkitUseTourmaline {
478
+ $type: 'click.croft.tools.tourmaline';
479
+ scrobblesAnalyzed?: number;
480
+ sharedToBluesky?: boolean;
481
+ }
482
+
483
+ export type ToolkitUseTool =
484
+ | ToolkitUseMalachite
485
+ | ToolkitUseJasper
486
+ | ToolkitUseBismuth
487
+ | ToolkitUseOpal
488
+ | ToolkitUseTourmaline;
489
+
490
+ export interface ToolkitUseRecord {
491
+ $type: 'click.croft.toolkit.use';
492
+ tool: ToolkitUseTool;
493
+ createdAt: string;
494
+ context?: string;
495
+ }