@hardlydifficult/social 1.0.62 → 1.0.64
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 +34 -37
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +6 -21
- package/dist/types.d.ts.map +1 -1
- package/dist/x/createXSocial.d.ts +2 -2
- package/dist/x/createXSocial.d.ts.map +1 -1
- package/dist/x/createXSocial.js +29 -27
- package/dist/x/createXSocial.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -5,8 +5,8 @@ Opinionated social read client for X.
|
|
|
5
5
|
This package is intentionally narrow:
|
|
6
6
|
|
|
7
7
|
- One factory: `createSocial()`
|
|
8
|
-
- One authenticated account
|
|
9
|
-
-
|
|
8
|
+
- One authenticated account
|
|
9
|
+
- Flat verbs: `post()`, `timeline()`, `likes()`, `watchLikes()`
|
|
10
10
|
- Like watching as an async stream
|
|
11
11
|
|
|
12
12
|
## Installation
|
|
@@ -20,17 +20,14 @@ npm install @hardlydifficult/social
|
|
|
20
20
|
```ts
|
|
21
21
|
import { createSocial } from "@hardlydifficult/social";
|
|
22
22
|
|
|
23
|
-
const social = createSocial(
|
|
24
|
-
token: process.env.X_BEARER_TOKEN,
|
|
25
|
-
});
|
|
23
|
+
const social = createSocial(process.env.X_BEARER_TOKEN);
|
|
26
24
|
|
|
27
|
-
const timeline = await social.
|
|
28
|
-
const liked = await social.
|
|
29
|
-
const post = await social.
|
|
25
|
+
const timeline = await social.timeline(10);
|
|
26
|
+
const liked = await social.likes();
|
|
27
|
+
const post = await social.post("1234567890");
|
|
30
28
|
```
|
|
31
29
|
|
|
32
|
-
If you omit
|
|
33
|
-
`bearerToken` is accepted as a compatibility alias.
|
|
30
|
+
If you omit the token, the client reads `X_BEARER_TOKEN` from the environment.
|
|
34
31
|
|
|
35
32
|
## API
|
|
36
33
|
|
|
@@ -41,49 +38,48 @@ Creates the social client.
|
|
|
41
38
|
```ts
|
|
42
39
|
const social = createSocial({
|
|
43
40
|
token: process.env.X_BEARER_TOKEN,
|
|
44
|
-
|
|
41
|
+
limit: 25,
|
|
45
42
|
});
|
|
46
43
|
```
|
|
47
44
|
|
|
45
|
+
You can also pass the token directly:
|
|
46
|
+
|
|
47
|
+
```ts
|
|
48
|
+
const social = createSocial(process.env.X_BEARER_TOKEN);
|
|
49
|
+
```
|
|
50
|
+
|
|
48
51
|
Options:
|
|
49
52
|
|
|
50
53
|
- `token?: string`
|
|
51
|
-
- `bearerToken?: string`
|
|
52
|
-
- `defaultLimit?: number`
|
|
53
54
|
- `limit?: number`
|
|
54
|
-
- `maxResults?: number`
|
|
55
|
-
- `type?: "x"`
|
|
56
55
|
|
|
57
|
-
|
|
58
|
-
`type` is optional because X is the only supported provider.
|
|
59
|
-
|
|
60
|
-
### `social.posts.get(id)`
|
|
56
|
+
### `social.post(id)`
|
|
61
57
|
|
|
62
58
|
Fetch a single post.
|
|
63
59
|
|
|
64
60
|
```ts
|
|
65
|
-
const post = await social.
|
|
61
|
+
const post = await social.post("123");
|
|
66
62
|
```
|
|
67
63
|
|
|
68
|
-
### `social.
|
|
64
|
+
### `social.timeline(limit?)`
|
|
69
65
|
|
|
70
66
|
Fetch the authenticated user timeline.
|
|
71
67
|
|
|
72
68
|
```ts
|
|
73
|
-
const recent = await social.
|
|
74
|
-
const firstTen = await social.
|
|
69
|
+
const recent = await social.timeline();
|
|
70
|
+
const firstTen = await social.timeline(10);
|
|
75
71
|
```
|
|
76
72
|
|
|
77
|
-
### `social.
|
|
73
|
+
### `social.likes(limit?)`
|
|
78
74
|
|
|
79
75
|
Fetch posts liked by the authenticated user.
|
|
80
76
|
|
|
81
77
|
```ts
|
|
82
|
-
const liked = await social.
|
|
83
|
-
const latestLiked = await social.
|
|
78
|
+
const liked = await social.likes();
|
|
79
|
+
const latestLiked = await social.likes(20);
|
|
84
80
|
```
|
|
85
81
|
|
|
86
|
-
### `social.
|
|
82
|
+
### `social.watchLikes(options?)`
|
|
87
83
|
|
|
88
84
|
Returns an async stream of newly liked posts. The first poll seeds the current
|
|
89
85
|
likes and emits nothing, so iteration only yields likes discovered after the
|
|
@@ -92,7 +88,7 @@ stream starts.
|
|
|
92
88
|
```ts
|
|
93
89
|
const controller = new AbortController();
|
|
94
90
|
|
|
95
|
-
for await (const like of social.
|
|
91
|
+
for await (const like of social.watchLikes({
|
|
96
92
|
everyMs: 30_000,
|
|
97
93
|
signal: controller.signal,
|
|
98
94
|
})) {
|
|
@@ -100,31 +96,32 @@ for await (const like of social.me.watchLikes({
|
|
|
100
96
|
}
|
|
101
97
|
```
|
|
102
98
|
|
|
99
|
+
You can also pass the interval directly:
|
|
100
|
+
|
|
101
|
+
```ts
|
|
102
|
+
for await (const like of social.watchLikes(30_000)) {
|
|
103
|
+
console.log(like.post.url);
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
103
107
|
Options:
|
|
104
108
|
|
|
105
109
|
- `everyMs?: number`
|
|
106
|
-
- `pollIntervalMs?: number`
|
|
107
110
|
- `signal?: AbortSignal`
|
|
108
111
|
|
|
109
|
-
`pollIntervalMs` is accepted as a compatibility alias for `everyMs`.
|
|
110
|
-
|
|
111
112
|
## Types
|
|
112
113
|
|
|
113
114
|
Core types exported by the package:
|
|
114
115
|
|
|
116
|
+
- `CreateSocialInput`
|
|
115
117
|
- `CreateSocialOptions`
|
|
116
|
-
- `Provider`
|
|
117
|
-
- `XConfig`
|
|
118
|
-
- `SocialOptions`
|
|
119
|
-
- `SocialConfig`
|
|
120
118
|
- `Social`
|
|
121
|
-
- `SocialListOptions`
|
|
122
119
|
- `SocialPost`
|
|
123
120
|
- `SocialAuthor`
|
|
124
121
|
- `SocialPostMetrics`
|
|
125
122
|
- `LikeNotification`
|
|
123
|
+
- `WatchLikesInput`
|
|
126
124
|
- `WatchLikesOptions`
|
|
127
|
-
- `LikeWatcherOptions`
|
|
128
125
|
|
|
129
126
|
## Scope
|
|
130
127
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export type { CreateSocialOptions, LikeNotification,
|
|
2
|
-
import type {
|
|
1
|
+
export type { CreateSocialInput, CreateSocialOptions, LikeNotification, Social, SocialAuthor, SocialPost, SocialPostMetrics, WatchLikesInput, WatchLikesOptions, } from "./types.js";
|
|
2
|
+
import type { CreateSocialInput, Social } from "./types.js";
|
|
3
3
|
/**
|
|
4
4
|
* Create the opinionated social client. X is the only supported provider and
|
|
5
5
|
* token lookup falls back to X_BEARER_TOKEN automatically.
|
|
6
6
|
*/
|
|
7
|
-
export declare function createSocial(config?:
|
|
7
|
+
export declare function createSocial(config?: CreateSocialInput): Social;
|
|
8
8
|
//# 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":"AAAA,YAAY,EACV,mBAAmB,EACnB,gBAAgB,EAChB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,MAAM,EACN,YAAY,EACZ,UAAU,EACV,iBAAiB,EACjB,eAAe,EACf,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAG5D;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,GAAE,iBAAsB,GAAG,MAAM,CAEnE"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAmBA,oCAEC;AARD,2DAAqD;AAErD;;;GAGG;AACH,SAAgB,YAAY,CAAC,SAA4B,EAAE;IACzD,OAAO,IAAA,gCAAa,EAAC,MAAM,CAAC,CAAC;AAC/B,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,18 +1,8 @@
|
|
|
1
1
|
export interface CreateSocialOptions {
|
|
2
|
-
readonly type?: "x";
|
|
3
2
|
readonly token?: string;
|
|
4
|
-
readonly bearerToken?: string;
|
|
5
|
-
readonly defaultLimit?: number;
|
|
6
|
-
readonly limit?: number;
|
|
7
|
-
readonly maxResults?: number;
|
|
8
|
-
}
|
|
9
|
-
export type Provider = "x";
|
|
10
|
-
export type SocialOptions = CreateSocialOptions;
|
|
11
|
-
export type XConfig = CreateSocialOptions;
|
|
12
|
-
export type SocialConfig = CreateSocialOptions;
|
|
13
|
-
export interface SocialListOptions {
|
|
14
3
|
readonly limit?: number;
|
|
15
4
|
}
|
|
5
|
+
export type CreateSocialInput = string | CreateSocialOptions;
|
|
16
6
|
export interface SocialAuthor {
|
|
17
7
|
readonly id: string;
|
|
18
8
|
readonly username: string;
|
|
@@ -37,18 +27,13 @@ export interface LikeNotification {
|
|
|
37
27
|
}
|
|
38
28
|
export interface WatchLikesOptions {
|
|
39
29
|
readonly everyMs?: number;
|
|
40
|
-
readonly pollIntervalMs?: number;
|
|
41
30
|
readonly signal?: AbortSignal;
|
|
42
31
|
}
|
|
32
|
+
export type WatchLikesInput = number | WatchLikesOptions;
|
|
43
33
|
export interface Social {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
timeline(options?: SocialListOptions): Promise<readonly SocialPost[]>;
|
|
49
|
-
likes(options?: SocialListOptions): Promise<readonly SocialPost[]>;
|
|
50
|
-
watchLikes(options?: WatchLikesOptions): AsyncIterable<LikeNotification>;
|
|
51
|
-
};
|
|
34
|
+
post(postId: string): Promise<SocialPost | null>;
|
|
35
|
+
timeline(limit?: number): Promise<readonly SocialPost[]>;
|
|
36
|
+
likes(limit?: number): Promise<readonly SocialPost[]>;
|
|
37
|
+
watchLikes(options?: WatchLikesInput): AsyncIterable<LikeNotification>;
|
|
52
38
|
}
|
|
53
|
-
export type LikeWatcherOptions = WatchLikesOptions;
|
|
54
39
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,mBAAmB,CAAC;AAE7D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;CACrC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,iBAAiB,CAAC;AAEzD,MAAM,WAAW,MAAM;IACrB,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACjD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,UAAU,EAAE,CAAC,CAAC;IACzD,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,UAAU,EAAE,CAAC,CAAC;IACtD,UAAU,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAAC;CACxE"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { CreateSocialInput, Social } from "../types.js";
|
|
2
2
|
/** Creates the X-backed social read client with token and limit fallbacks. */
|
|
3
|
-
export declare function createXSocial(
|
|
3
|
+
export declare function createXSocial(input?: CreateSocialInput): Social;
|
|
4
4
|
//# sourceMappingURL=createXSocial.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createXSocial.d.ts","sourceRoot":"","sources":["../../src/x/createXSocial.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,
|
|
1
|
+
{"version":3,"file":"createXSocial.d.ts","sourceRoot":"","sources":["../../src/x/createXSocial.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,iBAAiB,EAEjB,MAAM,EAIP,MAAM,aAAa,CAAC;AA8BrB,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,KAAK,GAAE,iBAAsB,GAAG,MAAM,CAqEnE"}
|
package/dist/x/createXSocial.js
CHANGED
|
@@ -5,12 +5,10 @@ const date_time_1 = require("@hardlydifficult/date-time");
|
|
|
5
5
|
const DEFAULT_LIMIT = 25;
|
|
6
6
|
const DEFAULT_WATCH_INTERVAL_MS = (0, date_time_1.duration)({ minutes: 1 });
|
|
7
7
|
/** Creates the X-backed social read client with token and limit fallbacks. */
|
|
8
|
-
function createXSocial(
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
options.maxResults ??
|
|
13
|
-
DEFAULT_LIMIT;
|
|
8
|
+
function createXSocial(input = {}) {
|
|
9
|
+
const options = resolveConfig(input);
|
|
10
|
+
const token = options.token ?? process.env.X_BEARER_TOKEN ?? "";
|
|
11
|
+
const defaultLimit = options.limit ?? DEFAULT_LIMIT;
|
|
14
12
|
if (token.length === 0) {
|
|
15
13
|
throw new Error("X bearer token is required. Set X_BEARER_TOKEN.");
|
|
16
14
|
}
|
|
@@ -35,35 +33,39 @@ function createXSocial(options = {}) {
|
|
|
35
33
|
}
|
|
36
34
|
return normalizeTweet(tweet, response.includes?.users ?? []);
|
|
37
35
|
}
|
|
38
|
-
async function listTimeline(
|
|
39
|
-
const response = await request(`/users/me/timelines/reverse_chronological${buildListQuery(
|
|
36
|
+
async function listTimeline(limit = defaultLimit) {
|
|
37
|
+
const response = await request(`/users/me/timelines/reverse_chronological${buildListQuery(limit)}`);
|
|
40
38
|
return normalizeTweets(response);
|
|
41
39
|
}
|
|
42
|
-
async function listLikes(
|
|
43
|
-
const response = await request(`/users/me/liked_tweets${buildListQuery(
|
|
40
|
+
async function listLikes(limit = defaultLimit) {
|
|
41
|
+
const response = await request(`/users/me/liked_tweets${buildListQuery(limit)}`);
|
|
44
42
|
return normalizeTweets(response);
|
|
45
43
|
}
|
|
46
44
|
return {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
DEFAULT_WATCH_INTERVAL_MS,
|
|
58
|
-
signal: watchOptions.signal,
|
|
59
|
-
listLikes,
|
|
60
|
-
});
|
|
61
|
-
},
|
|
45
|
+
post: getPost,
|
|
46
|
+
timeline: listTimeline,
|
|
47
|
+
likes: listLikes,
|
|
48
|
+
watchLikes(watchOptions = {}) {
|
|
49
|
+
const options = resolveWatchLikesOptions(watchOptions);
|
|
50
|
+
return watchLikesStream({
|
|
51
|
+
everyMs: options.everyMs ?? DEFAULT_WATCH_INTERVAL_MS,
|
|
52
|
+
signal: options.signal,
|
|
53
|
+
listLikes,
|
|
54
|
+
});
|
|
62
55
|
},
|
|
63
56
|
};
|
|
64
57
|
}
|
|
65
|
-
function
|
|
66
|
-
|
|
58
|
+
function resolveConfig(input) {
|
|
59
|
+
if (typeof input === "string") {
|
|
60
|
+
return { token: input };
|
|
61
|
+
}
|
|
62
|
+
return input;
|
|
63
|
+
}
|
|
64
|
+
function resolveWatchLikesOptions(input) {
|
|
65
|
+
if (typeof input === "number") {
|
|
66
|
+
return { everyMs: input };
|
|
67
|
+
}
|
|
68
|
+
return input;
|
|
67
69
|
}
|
|
68
70
|
function buildPostQuery() {
|
|
69
71
|
const params = new URLSearchParams({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createXSocial.js","sourceRoot":"","sources":["../../src/x/createXSocial.ts"],"names":[],"mappings":";;AAwCA,
|
|
1
|
+
{"version":3,"file":"createXSocial.js","sourceRoot":"","sources":["../../src/x/createXSocial.ts"],"names":[],"mappings":"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"}
|