@seedprotocol/feed 0.7.9-next.1177.ga3e08ed → 0.7.9-next.1306.g4ff6582
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/README.md +7 -2
- package/dist/bootstrap.d.ts +7 -7
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/cache/CacheManager.d.ts +14 -12
- package/dist/cache/CacheManager.d.ts.map +1 -1
- package/dist/cache/FileCache.d.ts +0 -2
- package/dist/cache/FileCache.d.ts.map +1 -1
- package/dist/cache/MemoryCache.d.ts +2 -8
- package/dist/cache/MemoryCache.d.ts.map +1 -1
- package/dist/cache/config.d.ts +0 -2
- package/dist/cache/config.d.ts.map +1 -1
- package/dist/cache/types.d.ts +8 -13
- package/dist/cache/types.d.ts.map +1 -1
- package/dist/config.d.ts +4 -7
- package/dist/config.d.ts.map +1 -1
- package/dist/debug.d.ts +4 -0
- package/dist/debug.d.ts.map +1 -0
- package/dist/getFeedItems.d.ts +13 -2
- package/dist/getFeedItems.d.ts.map +1 -1
- package/dist/index.d.ts +10 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +527 -639
- package/dist/index.js.map +1 -1
- package/dist/services/arweaveImageService.d.ts +8 -5
- package/dist/services/arweaveImageService.d.ts.map +1 -1
- package/dist/types.d.ts +6 -24
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/etag.d.ts +0 -4
- package/dist/utils/etag.d.ts.map +1 -1
- package/package.json +5 -7
- package/dist/feedFieldStorageModel.d.ts +0 -3
- package/dist/feedFieldStorageModel.d.ts.map +0 -1
- package/dist/hydrateArweaveRichText.d.ts +0 -2
- package/dist/hydrateArweaveRichText.d.ts.map +0 -1
- package/dist/imageRelationEnrichment.d.ts +0 -2
- package/dist/imageRelationEnrichment.d.ts.map +0 -1
- package/dist/listRelationKey.d.ts +0 -2
- package/dist/listRelationKey.d.ts.map +0 -1
- package/dist/parseEasPropertyMetadataForFeed.d.ts +0 -3
- package/dist/parseEasPropertyMetadataForFeed.d.ts.map +0 -1
- package/dist/utils/arweaveUrl.d.ts +0 -2
- package/dist/utils/arweaveUrl.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -76,8 +76,13 @@ Item links in the feed can point to EASScan attestation pages. Set these environ
|
|
|
76
76
|
|
|
77
77
|
- `EAS_CHAIN_ID` - Chain the feed reads attestations from (e.g. `8453` for Base). Sets both the EAS indexer and the default explorer for item links. Default: `11155420` (Optimism Sepolia).
|
|
78
78
|
- `FEED_ITEM_URL_BASE` - Base URL for attestation links. Item URLs use `{base}/attestation/view/{uid}`. Default: the EAS explorer of `EAS_CHAIN_ID` (e.g. `https://base.easscan.org`), or `https://easscan.org` for chains without a known explorer.
|
|
79
|
-
- `FEED_ITEM_URL_PATH` - Path segment (default: `attestation/view`)
|
|
80
|
-
|
|
79
|
+
- `FEED_ITEM_URL_PATH` - Path segment (default: `attestation/view`), used with `FEED_ITEM_URL_BASE` or its default.
|
|
80
|
+
|
|
81
|
+
### Items and pages
|
|
82
|
+
|
|
83
|
+
- `FEED_PAGE_SIZE` - Items per page (default: `25`).
|
|
84
|
+
- `FEED_INCLUDE_DATA_URI_HTML_ITEMS` - `true` keeps items whose rich text embeds `data:image/` URIs. Default: such items are left out of the feed.
|
|
85
|
+
- `CACHE_MAX_AGE` - Seconds a checked collection is served by `@seedprotocol/query` with no indexer request (default `0`). See the [query README](https://github.com/JournoLabs/seed-protocol-sdk/blob/main/packages/query/README.md).
|
|
81
86
|
|
|
82
87
|
### Example .env
|
|
83
88
|
|
package/dist/bootstrap.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
export type InitializeFeedPlatformOptions = {
|
|
2
2
|
arweaveDomain?: string;
|
|
3
3
|
};
|
|
4
|
-
/**
|
|
4
|
+
/**
|
|
5
|
+
* Make EAS and Arweave usable for feed generation (via `initializeQueryPlatform`). Clients a host
|
|
6
|
+
* app or the SDK already registered are kept; otherwise the Node EAS and Arweave clients are
|
|
7
|
+
* registered. `arweaveDomain` sets the Arweave host.
|
|
8
|
+
*/
|
|
5
9
|
export declare function initializeFeedPlatform(options?: InitializeFeedPlatformOptions): Promise<void>;
|
|
6
|
-
/**
|
|
7
|
-
export declare
|
|
8
|
-
export declare function getClient(): Promise<{
|
|
9
|
-
isInitialized: () => boolean;
|
|
10
|
-
}>;
|
|
11
|
-
export declare function teardownSeedClient(): Promise<void>;
|
|
10
|
+
/** Lets the next initializeFeedPlatform call run again (tests). Registered clients stay. */
|
|
11
|
+
export declare function teardownFeedPlatform(): Promise<void>;
|
|
12
12
|
export { DEFAULT_ARWEAVE_HOST } from '@seedprotocol/arweave';
|
|
13
13
|
//# sourceMappingURL=bootstrap.d.ts.map
|
package/dist/bootstrap.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,6BAA6B,GAAG;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,CAAA;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,CAAC,EAAE,6BAA6B,GACtC,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,4FAA4F;AAC5F,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAE1D;AAED,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type { CachedFeedContent, CacheConfig, CacheContentKeyOptions, CacheStats } from './types';
|
|
1
|
+
import type { CachedFeedContent, CacheConfig, CacheContentKeyOptions } from './types';
|
|
3
2
|
import type { ImageMetadata } from '../types';
|
|
4
3
|
import type { FeedFormat } from '../types';
|
|
5
4
|
/**
|
|
@@ -10,18 +9,21 @@ export declare class CacheManager {
|
|
|
10
9
|
private memoryCache;
|
|
11
10
|
private fileCache;
|
|
12
11
|
private config;
|
|
13
|
-
private stats;
|
|
14
12
|
constructor(config: CacheConfig);
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
13
|
+
getConfig(): CacheConfig;
|
|
14
|
+
/**
|
|
15
|
+
* The cached body for this key, unexpired. With `fingerprint`, only an entry built from the same
|
|
16
|
+
* inputs (see CachedFeedContent.fingerprint); without, any entry (e.g. a stale fallback).
|
|
17
|
+
*/
|
|
18
|
+
getFeedContent(schemaName: string, format: FeedFormat, contentKeyOptions?: CacheContentKeyOptions, fingerprint?: string): Promise<CachedFeedContent | null>;
|
|
19
|
+
/** Stores a body with the ETag and fingerprint the caller computed; returns the stored entry. */
|
|
20
|
+
setFeedContent(schemaName: string, format: FeedFormat, body: {
|
|
21
|
+
content: string;
|
|
22
|
+
contentType: string;
|
|
23
|
+
etag: string;
|
|
24
|
+
fingerprint: string;
|
|
25
|
+
}, contentKeyOptions?: CacheContentKeyOptions): Promise<CachedFeedContent | null>;
|
|
23
26
|
getImageMetadata(transactionId: string): Promise<ImageMetadata | null>;
|
|
24
27
|
setImageMetadata(transactionId: string, metadata: ImageMetadata): Promise<void>;
|
|
25
|
-
resetStats(): void;
|
|
26
28
|
}
|
|
27
29
|
//# sourceMappingURL=CacheManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CacheManager.d.ts","sourceRoot":"","sources":["../../src/cache/CacheManager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CacheManager.d.ts","sourceRoot":"","sources":["../../src/cache/CacheManager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EACX,sBAAsB,EACvB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,MAAM,CAAc;gBAEhB,MAAM,EAAE,WAAW;IAM/B,SAAS,IAAI,WAAW;IAIxB;;;OAGG;IACG,cAAc,CAClB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,UAAU,EAClB,iBAAiB,CAAC,EAAE,sBAAsB,EAC1C,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAuBpC,iGAAiG;IAC3F,cAAc,CAClB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EACjF,iBAAiB,CAAC,EAAE,sBAAsB,GACzC,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IA0B9B,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAwBtE,gBAAgB,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;CAatF"}
|
|
@@ -14,10 +14,8 @@ export declare class FileCache {
|
|
|
14
14
|
getFeedContent(schemaName: string, format: string, contentKeyOptions?: CacheContentKeyOptions): Promise<CachedFeedContent | null>;
|
|
15
15
|
setFeedContent(schemaName: string, format: string, content: CachedFeedContent, contentKeyOptions?: CacheContentKeyOptions): Promise<void>;
|
|
16
16
|
clearFeedContent(schemaName: string, format: string, contentKeyOptions?: CacheContentKeyOptions): Promise<void>;
|
|
17
|
-
clearAllContentCache(schemaName: string): Promise<void>;
|
|
18
17
|
getImageMetadata(transactionId: string): Promise<ImageMetadata | null>;
|
|
19
18
|
setImageMetadata(transactionId: string, metadata: ImageMetadata): Promise<void>;
|
|
20
19
|
clearImageMetadata(transactionId: string): Promise<void>;
|
|
21
|
-
clearAll(): Promise<void>;
|
|
22
20
|
}
|
|
23
21
|
//# sourceMappingURL=FileCache.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileCache.d.ts","sourceRoot":"","sources":["../../src/cache/FileCache.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,sBAAsB,EAAuB,MAAM,SAAS,CAAC;AAE3G,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAc;gBAEhB,MAAM,EAAE,WAAW;YAQjB,cAAc;IAU5B,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,oBAAoB;YAKd,sBAAsB;IAW9B,cAAc,CAClB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,iBAAiB,CAAC,EAAE,sBAAsB,GACzC,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAyB9B,cAAc,CAClB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,iBAAiB,EAC1B,iBAAiB,CAAC,EAAE,sBAAsB,GACzC,OAAO,CAAC,IAAI,CAAC;IAaV,gBAAgB,CACpB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,iBAAiB,CAAC,EAAE,sBAAsB,GACzC,OAAO,CAAC,IAAI,CAAC;IAcV,
|
|
1
|
+
{"version":3,"file":"FileCache.d.ts","sourceRoot":"","sources":["../../src/cache/FileCache.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,sBAAsB,EAAuB,MAAM,SAAS,CAAC;AAE3G,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAc;gBAEhB,MAAM,EAAE,WAAW;YAQjB,cAAc;IAU5B,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,oBAAoB;YAKd,sBAAsB;IAW9B,cAAc,CAClB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,iBAAiB,CAAC,EAAE,sBAAsB,GACzC,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAyB9B,cAAc,CAClB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,iBAAiB,EAC1B,iBAAiB,CAAC,EAAE,sBAAsB,GACzC,OAAO,CAAC,IAAI,CAAC;IAaV,gBAAgB,CACpB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,iBAAiB,CAAC,EAAE,sBAAsB,GACzC,OAAO,CAAC,IAAI,CAAC;IAcV,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAsBtE,gBAAgB,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB/E,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAW/D"}
|
|
@@ -10,15 +10,9 @@ export declare class MemoryCache {
|
|
|
10
10
|
private config;
|
|
11
11
|
constructor(config: CacheConfig);
|
|
12
12
|
getFeedContent(schemaName: string, format: string, contentKeyOptions?: CacheContentKeyOptions): CachedFeedContent | null;
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
/** Stores an entry as it is (ETag, lastModified and expiry kept), e.g. one read from disk. */
|
|
14
|
+
putFeedContent(schemaName: string, format: string, cached: CachedFeedContent, contentKeyOptions?: CacheContentKeyOptions): void;
|
|
15
15
|
getImageMetadata(transactionId: string): ImageMetadata | null;
|
|
16
16
|
setImageMetadata(transactionId: string, metadata: ImageMetadata): void;
|
|
17
|
-
clearAll(): void;
|
|
18
|
-
updateConfig(config: Partial<CacheConfig>): void;
|
|
19
|
-
getStats(): {
|
|
20
|
-
feedContentCount: number;
|
|
21
|
-
imageMetadataCount: number;
|
|
22
|
-
};
|
|
23
17
|
}
|
|
24
18
|
//# sourceMappingURL=MemoryCache.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemoryCache.d.ts","sourceRoot":"","sources":["../../src/cache/MemoryCache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,sBAAsB,EAAuB,MAAM,SAAS,CAAC;AAE3G,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"MemoryCache.d.ts","sourceRoot":"","sources":["../../src/cache/MemoryCache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,sBAAsB,EAAuB,MAAM,SAAS,CAAC;AAE3G,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,gBAAgB,CAA6C;IACrE,OAAO,CAAC,kBAAkB,CAA+C;IACzE,OAAO,CAAC,MAAM,CAAc;gBAEhB,MAAM,EAAE,WAAW;IAI/B,cAAc,CACZ,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,iBAAiB,CAAC,EAAE,sBAAsB,GACzC,iBAAiB,GAAG,IAAI;IAgB3B,8FAA8F;IAC9F,cAAc,CACZ,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,iBAAiB,EACzB,iBAAiB,CAAC,EAAE,sBAAsB,GACzC,IAAI;IAIP,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAe7D,gBAAgB,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;CAavE"}
|
package/dist/cache/config.d.ts
CHANGED
|
@@ -7,8 +7,6 @@ import type { CacheConfig } from './types';
|
|
|
7
7
|
* In development (NODE_ENV=development), cache is disabled by default unless CACHE_ENABLED='true'.
|
|
8
8
|
* - CACHE_TTL: Cache time-to-live in seconds (default: 3600)
|
|
9
9
|
* - CACHE_DIR: Directory for cache files (default: './cache')
|
|
10
|
-
* - CACHE_BACKGROUND_REFRESH: Enable background refresh (default: 'false')
|
|
11
|
-
* - CACHE_REFRESH_INTERVAL: Background refresh interval in seconds (default: 300)
|
|
12
10
|
*/
|
|
13
11
|
export declare function loadCacheConfig(): CacheConfig;
|
|
14
12
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/cache/config.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAuB,MAAM,SAAS,CAAC;AAEhE
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/cache/config.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAuB,MAAM,SAAS,CAAC;AAEhE;;;;;;;;GAQG;AACH,wBAAgB,eAAe,IAAI,WAAW,CAkE7C"}
|
package/dist/cache/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { FeedItem, ImageMetadata } from '../types';
|
|
2
2
|
/**
|
|
3
3
|
* Cached image metadata for an Arweave transaction ID
|
|
4
4
|
*/
|
|
@@ -16,6 +16,12 @@ export interface CachedFeedContent {
|
|
|
16
16
|
etag: string;
|
|
17
17
|
lastModified: number;
|
|
18
18
|
expiresAt: number;
|
|
19
|
+
/**
|
|
20
|
+
* What the body was built from (query's collection ETag when known, site config, cache-bust
|
|
21
|
+
* value; see feedFingerprint). A read that passes a fingerprint only gets an entry built from
|
|
22
|
+
* the same inputs. Entries written before fingerprints existed have none and never match.
|
|
23
|
+
*/
|
|
24
|
+
fingerprint?: string;
|
|
19
25
|
}
|
|
20
26
|
/**
|
|
21
27
|
* Image metadata cache configuration
|
|
@@ -34,8 +40,6 @@ export interface CacheConfig {
|
|
|
34
40
|
ttl: number;
|
|
35
41
|
cacheDir: string;
|
|
36
42
|
enabled: boolean;
|
|
37
|
-
backgroundRefresh: boolean;
|
|
38
|
-
refreshInterval: number;
|
|
39
43
|
imageMetadata?: ImageMetadataConfig;
|
|
40
44
|
pageTtl?: number;
|
|
41
45
|
archiveTtl?: number;
|
|
@@ -51,14 +55,5 @@ export interface CacheContentKeyOptions {
|
|
|
51
55
|
};
|
|
52
56
|
}
|
|
53
57
|
export declare function buildContentKey(schemaName: string, format: string, options?: CacheContentKeyOptions): string;
|
|
54
|
-
|
|
55
|
-
* Cache statistics for monitoring
|
|
56
|
-
*/
|
|
57
|
-
export interface CacheStats {
|
|
58
|
-
hits: number;
|
|
59
|
-
misses: number;
|
|
60
|
-
refreshes: number;
|
|
61
|
-
errors: number;
|
|
62
|
-
}
|
|
63
|
-
export type { GraphQLItem };
|
|
58
|
+
export type { FeedItem };
|
|
64
59
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cache/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cache/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,aAAa,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,mBAAmB,CAAA;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3C;AAED,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,sBAAsB,GAC/B,MAAM,CAQR;AAED,YAAY,EAAE,QAAQ,EAAE,CAAC"}
|
package/dist/config.d.ts
CHANGED
|
@@ -28,19 +28,16 @@ export declare function resetSiteConfig(): void;
|
|
|
28
28
|
* - FEED_ITEM_URL_BASE: Base URL for attestation links (e.g. https://base.easscan.org).
|
|
29
29
|
* Item links use {base}/attestation/view/{uid}. Default: the EAS explorer of the configured
|
|
30
30
|
* chain (`EAS_CHAIN_ID`, or the SDK / publish chain in-process), else 'https://easscan.org'.
|
|
31
|
-
* - FEED_ITEM_URL_PATH: Path segment for attestation links (default: 'attestation/view')
|
|
32
|
-
*
|
|
33
|
-
* -
|
|
34
|
-
*
|
|
35
|
-
* - FEED_PAGE_SIZE: Items per page for paged feeds (default: 25).
|
|
31
|
+
* - FEED_ITEM_URL_PATH: Path segment for attestation links (default: 'attestation/view'), with
|
|
32
|
+
* FEED_ITEM_URL_BASE or its default.
|
|
33
|
+
* - FEED_PAGE_SIZE: Items per page for paged feeds (default: 25; a value that isn't a positive
|
|
34
|
+
* integer gives the default).
|
|
36
35
|
* - FEED_INCLUDE_DATA_URI_HTML_ITEMS: When 'true', include items whose body/html contain embedded data-URI images.
|
|
37
36
|
* Default: false (omit such items to avoid huge RSS payloads).
|
|
38
37
|
*/
|
|
39
38
|
export declare function loadFeedConfig(): {
|
|
40
39
|
itemUrlBase: string;
|
|
41
40
|
itemUrlPath: string;
|
|
42
|
-
siteUrl: string;
|
|
43
|
-
expandRelations: boolean;
|
|
44
41
|
pageSize: number;
|
|
45
42
|
richTextDataUriImages: 'omit_items' | 'include_items';
|
|
46
43
|
};
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,GAAG;IACtE,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;CACrD,CAAC;AAEF,kEAAkE;AAClE,eAAO,MAAM,mBAAmB,EAAE,UAYjC,CAAC;AAWF;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,CAAC,EAAE,mBAAmB,EAC/B,IAAI,GAAE,UAAuB,GAC5B,UAAU,CAoBZ;AAED,mFAAmF;AACnF,wBAAgB,aAAa,IAAI,UAAU,CAE1C;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,mBAAmB,GAAG,UAAU,CAGxE;AAED,4DAA4D;AAC5D,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AAED
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,GAAG;IACtE,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;CACrD,CAAC;AAEF,kEAAkE;AAClE,eAAO,MAAM,mBAAmB,EAAE,UAYjC,CAAC;AAWF;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,CAAC,EAAE,mBAAmB,EAC/B,IAAI,GAAE,UAAuB,GAC5B,UAAU,CAoBZ;AAED,mFAAmF;AACnF,wBAAgB,aAAa,IAAI,UAAU,CAE1C;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,mBAAmB,GAAG,UAAU,CAGxE;AAED,4DAA4D;AAC5D,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,IAAI;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,qBAAqB,EAAE,YAAY,GAAG,eAAe,CAAC;CACvD,CAcA"}
|
package/dist/debug.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../src/debug.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,uGAAuG;AACvG,eAAO,MAAM,SAAS,gBAAoB,CAAA"}
|
package/dist/getFeedItems.d.ts
CHANGED
|
@@ -1,12 +1,23 @@
|
|
|
1
1
|
type SetFeedItemDefaultsOptions = {
|
|
2
|
-
itemUrlBase
|
|
2
|
+
itemUrlBase: string;
|
|
3
3
|
itemUrlPath: string;
|
|
4
|
-
siteUrl: string;
|
|
5
4
|
};
|
|
6
5
|
/**
|
|
7
6
|
* Set default values for feed items (title, link, guid, pubDate, dual-case keys).
|
|
8
7
|
*/
|
|
9
8
|
export declare const setFeedItemDefaults: (item: Record<string, unknown>, seedUid: string, schemaName: string, options: SetFeedItemDefaultsOptions) => void;
|
|
9
|
+
/**
|
|
10
|
+
* Feed items for a page of the schema, with query's collection ETag when the collection cache
|
|
11
|
+
* answered (skip 0, cache enabled): it changes whenever a listed seed or what it was built from
|
|
12
|
+
* changes, so the feed can tell whether a cached body is still current.
|
|
13
|
+
*/
|
|
14
|
+
export declare const fetchFeedItemsBySchemaName: (schemaName: string, options?: {
|
|
15
|
+
limit?: number;
|
|
16
|
+
skip?: number;
|
|
17
|
+
}) => Promise<{
|
|
18
|
+
items: Record<string, unknown>[];
|
|
19
|
+
etag?: string;
|
|
20
|
+
}>;
|
|
10
21
|
export declare const getFeedItemsBySchemaName: (schemaName: string, options?: {
|
|
11
22
|
limit?: number;
|
|
12
23
|
skip?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getFeedItems.d.ts","sourceRoot":"","sources":["../src/getFeedItems.ts"],"names":[],"mappings":"AASA,KAAK,0BAA0B,GAAG;IAChC,WAAW,
|
|
1
|
+
{"version":3,"file":"getFeedItems.d.ts","sourceRoot":"","sources":["../src/getFeedItems.ts"],"names":[],"mappings":"AASA,KAAK,0BAA0B,GAAG;IAChC,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAkBD;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAC9B,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,SAAS,MAAM,EACf,YAAY,MAAM,EAClB,SAAS,0BAA0B,KAClC,IAqGF,CAAA;AAsJD;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,GACrC,YAAY,MAAM,EAClB,UAAU;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,KAC1C,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAa7D,CAAA;AAED,eAAO,MAAM,wBAAwB,GACnC,YAAY,MAAM,EAClB,UAAU;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,KAC1C,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAC2B,CAAA;AAE/D,eAAO,MAAM,gCAAgC,GAC3C,YAAY,MAAM,EAClB,MAAM,MAAM,EACZ,OAAO,MAAM,KACZ,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAQnC,CAAA"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
|
-
export { getFeedItemsBySchemaName, getFeedItemsBySchemaNameForMonth } from './getFeedItems';
|
|
1
|
+
export { fetchFeedItemsBySchemaName, getFeedItemsBySchemaName, getFeedItemsBySchemaNameForMonth, } from './getFeedItems';
|
|
2
2
|
export { loadFeedConfig, DEFAULT_SITE_CONFIG, getSiteConfig, setSiteConfig, resetSiteConfig, resolveSiteConfig, type SiteConfigOverrides, } from './config';
|
|
3
3
|
export { parseRssString, type ParsedRssChannel } from './consume/parseRss';
|
|
4
|
-
export type { FeedConfig, FeedFormat,
|
|
5
|
-
export { initializeFeedPlatform,
|
|
4
|
+
export type { FeedConfig, FeedFormat, FeedItem } from './types';
|
|
5
|
+
export { initializeFeedPlatform, teardownFeedPlatform, DEFAULT_ARWEAVE_HOST, } from './bootstrap';
|
|
6
6
|
export { classifyMediaRef, normalizeFeedItemFields, getFeedItemStringField, isEasAttestationExplorerUrl, resolveSeedRssImageRelationRef, resolveSeedRssImageRelationFromItem, SEED_RSS_IMAGE_RELATION_FIELD_KEYS, } from '@seedprotocol/arweave';
|
|
7
7
|
export type { FeedFieldManifest, FeedFieldDescriptor, FeedFieldRole, ClassifyMediaRefOptions, MediaRefClassification, ResolveMediaRefResult, ResolveMediaRefOptions, NormalizedMediaField, NormalizedHtmlField, NormalizedTextField, NormalizedFeedFieldValue, SeedRssImageRelationRef, } from '@seedprotocol/arweave';
|
|
8
|
-
import type { FeedFormat,
|
|
8
|
+
import type { FeedFormat, FeedItem, TransformOptions } from './types';
|
|
9
9
|
export type { TransformOptions } from './types';
|
|
10
10
|
import { type SiteConfigOverrides } from './config';
|
|
11
|
-
export { enrichImageSeedCloneForFeed } from './imageRelationEnrichment';
|
|
12
11
|
export { pickFeedItemContent, pickFeedItemDescription, feedItemRichTextContainsDataUriImage, filterItemsByRichTextDataUriImagePolicy, } from './pickFeedItemRichText';
|
|
13
|
-
export { FEED_RICH_BODY_STORAGE_SCHEMAS, isFeedRichBodyStorageSchema, } from './feedFieldStorageModel';
|
|
14
12
|
/**
|
|
15
13
|
* Reset cache manager (useful for testing)
|
|
16
14
|
*/
|
|
@@ -25,7 +23,7 @@ export interface FeedArchiveLink {
|
|
|
25
23
|
rel: string;
|
|
26
24
|
href: string;
|
|
27
25
|
}
|
|
28
|
-
export declare const createFeed: (items:
|
|
26
|
+
export declare const createFeed: (items: FeedItem[], schemaName: string, format: FeedFormat, cacheBust?: string, pagination?: FeedPaginationOptions, archiveLinks?: FeedArchiveLink[], isArchive?: boolean, transformOverrides?: Partial<TransformOptions>, siteConfigOverrides?: SiteConfigOverrides) => Promise<string>;
|
|
29
27
|
/**
|
|
30
28
|
* Main route handler for feed generation.
|
|
31
29
|
*
|
|
@@ -35,6 +33,10 @@ export declare const createFeed: (items: GraphQLItem[], schemaName: string, form
|
|
|
35
33
|
* - /posts/atom → Atom feed of posts
|
|
36
34
|
* - /identities/json → JSON feed of identities
|
|
37
35
|
* - /posts/rss?v=1234567890 → RSS feed with cache busting parameter
|
|
36
|
+
*
|
|
37
|
+
* Page 1 asks `@seedprotocol/query` on every request (one round when its collection is cached,
|
|
38
|
+
* none within `CACHE_MAX_AGE`) and rebuilds only when the collection changed; its Cache-Control
|
|
39
|
+
* max-age is `CACHE_MAX_AGE`. Later pages are cached for `CACHE_PAGE_TTL`.
|
|
38
40
|
*/
|
|
39
41
|
export declare function handleFeedRequest(collectionSegment: string, formatSegment: string, ifNoneMatch?: string | null, cacheBust?: string, page?: number, siteConfigOverrides?: SiteConfigOverrides): Promise<Response>;
|
|
40
42
|
/**
|
|
@@ -42,7 +44,7 @@ export declare function handleFeedRequest(collectionSegment: string, formatSegme
|
|
|
42
44
|
*
|
|
43
45
|
* URL Pattern: /:collection/archive/:year/:month/:format
|
|
44
46
|
* Examples:
|
|
45
|
-
* - /posts/archive/2024/02/rss → RSS feed of posts from February 2024
|
|
47
|
+
* - /posts/archive/2024/02/rss → RSS feed of posts from February 2024 (UTC)
|
|
46
48
|
*/
|
|
47
49
|
export declare function handleArchiveFeedRequest(collectionSegment: string, year: number, month: number, formatSegment: string, ifNoneMatch?: string | null, cacheBust?: string, siteConfigOverrides?: SiteConfigOverrides): Promise<Response>;
|
|
48
50
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,EACxB,gCAAgC,GACjC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,KAAK,mBAAmB,GACzB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3E,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,sBAAsB,EACtB,2BAA2B,EAC3B,8BAA8B,EAC9B,mCAAmC,EACnC,kCAAkC,GACnC,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,EACb,uBAAuB,EACvB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAA6B,MAAM,SAAS,CAAC;AAEjG,YAAY,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAKhD,OAAO,EAAqC,KAAK,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAavF,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,oCAAoC,EACpC,uCAAuC,GACxC,MAAM,wBAAwB,CAAC;AA2MhC;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAgND,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;CACb;AAED,eAAO,MAAM,UAAU,GACrB,OAAO,QAAQ,EAAE,EACjB,YAAY,MAAM,EAClB,QAAQ,UAAU,EAClB,YAAY,MAAM,EAClB,aAAa,qBAAqB,EAClC,eAAe,eAAe,EAAE,EAChC,YAAY,OAAO,EACnB,qBAAqB,OAAO,CAAC,gBAAgB,CAAC,EAC9C,sBAAsB,mBAAmB,KACxC,OAAO,CAAC,MAAM,CAkQhB,CAAA;AAqKD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,iBAAiB,CACrC,iBAAiB,EAAE,MAAM,EACzB,aAAa,EAAE,MAAM,EACrB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,EAC3B,SAAS,CAAC,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE,MAAM,EACb,mBAAmB,CAAC,EAAE,mBAAmB,GACxC,OAAO,CAAC,QAAQ,CAAC,CAwDnB;AAED;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAC5C,iBAAiB,EAAE,MAAM,EACzB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,EACrB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,EAC3B,SAAS,CAAC,EAAE,MAAM,EAClB,mBAAmB,CAAC,EAAE,mBAAmB,GACxC,OAAO,CAAC,QAAQ,CAAC,CA4DnB"}
|