@xquik/tweetclaw 1.6.19 → 1.6.21

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/request.js CHANGED
@@ -67,15 +67,23 @@ const PROHIBITED_PATH_PATTERNS = [
67
67
  ['POST', /^\/api\/v1\/x\/accounts\/[^/]+\/reauth\/?$/u],
68
68
  ];
69
69
  const SUPPORT_TICKET_METHODS = new Set(['GET', 'PATCH', 'POST']);
70
+ function normalizeProhibitedPath(path) {
71
+ let end = path.length;
72
+ while (end > 1 && path.charAt(end - 1) === '/') {
73
+ end -= 1;
74
+ }
75
+ return end === path.length ? path : path.slice(0, end);
76
+ }
70
77
  function isSupportTicketPath(method, path) {
71
78
  return SUPPORT_TICKET_METHODS.has(method)
72
79
  && (path === SUPPORT_TICKETS_PREFIX || path.startsWith(`${SUPPORT_TICKETS_PREFIX}/`));
73
80
  }
74
81
  function isProhibitedRequest(method, path) {
75
82
  const upperMethod = method.toUpperCase();
76
- const matchesStaticPath = PROHIBITED_PATHS.some(([blockedMethod, blockedPath]) => upperMethod === blockedMethod && path === blockedPath);
77
- const matchesPattern = PROHIBITED_PATH_PATTERNS.some(([blockedMethod, pattern]) => upperMethod === blockedMethod && pattern.test(path));
78
- return matchesStaticPath || matchesPattern || isSupportTicketPath(upperMethod, path);
83
+ const normalizedPath = normalizeProhibitedPath(path);
84
+ const matchesStaticPath = PROHIBITED_PATHS.some(([blockedMethod, blockedPath]) => upperMethod === blockedMethod && normalizedPath === blockedPath);
85
+ const matchesPattern = PROHIBITED_PATH_PATTERNS.some(([blockedMethod, pattern]) => upperMethod === blockedMethod && pattern.test(normalizedPath));
86
+ return matchesStaticPath || matchesPattern || isSupportTicketPath(upperMethod, normalizedPath);
79
87
  }
80
88
  function validateRequestPath(method, path) {
81
89
  if (!path.startsWith(API_V1_PREFIX)) {
@@ -1 +1 @@
1
- {"version":3,"file":"request.js","sourceRoot":"","sources":["../src/request.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"request.js","sourceRoot":"","sources":["../src/request.ts"],"names":[],"mappings":"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"}
@@ -40,19 +40,29 @@ async function handleTweetclaw(options) {
40
40
  try {
41
41
  const requestInfo = resolveCatalogRequest(params, { mppMode });
42
42
  const request = createProxiedRequest(baseUrl, credential, fetchFunction);
43
- const result = await Promise.race([
44
- request(requestInfo.path, {
45
- ...(requestInfo.body === undefined ? {} : { body: requestInfo.body }),
46
- method: requestInfo.method,
47
- ...(requestInfo.query === undefined ? {} : { query: requestInfo.query }),
48
- }),
49
- new Promise((_resolve, reject) => {
50
- setTimeout(() => {
51
- reject(new Error(`Execution timed out after ${String(timeoutMs / MS_PER_SECOND)}s`));
52
- }, timeoutMs);
53
- }),
54
- ]);
55
- return successResult(result);
43
+ let rejectTimeout = (reason) => {
44
+ throw reason;
45
+ };
46
+ const timeoutPromise = new Promise((_resolve, reject) => {
47
+ rejectTimeout = reject;
48
+ });
49
+ const timeoutId = setTimeout(() => {
50
+ rejectTimeout(new Error(`Execution timed out after ${String(timeoutMs / MS_PER_SECOND)}s`));
51
+ }, timeoutMs);
52
+ try {
53
+ const result = await Promise.race([
54
+ request(requestInfo.path, {
55
+ ...(requestInfo.body === undefined ? {} : { body: requestInfo.body }),
56
+ method: requestInfo.method,
57
+ ...(requestInfo.query === undefined ? {} : { query: requestInfo.query }),
58
+ }),
59
+ timeoutPromise,
60
+ ]);
61
+ return successResult(result);
62
+ }
63
+ finally {
64
+ clearTimeout(timeoutId);
65
+ }
56
66
  }
57
67
  catch (error) {
58
68
  return errorResult(error);
@@ -1 +1 @@
1
- {"version":3,"file":"tweetclaw.js","sourceRoot":"","sources":["../../src/tools/tweetclaw.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGzD,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+B1B,CAAC;AAEH,MAAM,oBAAoB,GAAG,MAAM,CAAC;AACpC,MAAM,aAAa,GAAG,IAAI,CAAC;AAW3B,KAAK,UAAU,eAAe,CAAC,OAAmC;IAChE,MAAM,EACJ,OAAO,EACP,UAAU,EACV,aAAa,EACb,OAAO,GAAG,KAAK,EACf,MAAM,EACN,SAAS,GAAG,oBAAoB,GACjC,GAAG,OAAO,CAAC;IAEZ,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,qBAAqB,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAoB,oBAAoB,CAAC,OAAO,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;QAC1F,MAAM,MAAM,GAAY,MAAM,OAAO,CAAC,IAAI,CAAC;YACzC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE;gBACxB,GAAG,CAAC,WAAW,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC;gBACrE,MAAM,EAAE,WAAW,CAAC,MAAM;gBAC1B,GAAG,CAAC,WAAW,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,CAAC;aACzE,CAAC;YACF,IAAI,OAAO,CAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE;gBACtC,UAAU,CAAC,GAAG,EAAE;oBACd,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,MAAM,CAAC,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;gBACvF,CAAC,EAAE,SAAS,CAAC,CAAC;YAChB,CAAC,CAAC;SACH,CAAC,CAAC;QAEH,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"tweetclaw.js","sourceRoot":"","sources":["../../src/tools/tweetclaw.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGzD,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+B1B,CAAC;AAEH,MAAM,oBAAoB,GAAG,MAAM,CAAC;AACpC,MAAM,aAAa,GAAG,IAAI,CAAC;AAW3B,KAAK,UAAU,eAAe,CAAC,OAAmC;IAChE,MAAM,EACJ,OAAO,EACP,UAAU,EACV,aAAa,EACb,OAAO,GAAG,KAAK,EACf,MAAM,EACN,SAAS,GAAG,oBAAoB,GACjC,GAAG,OAAO,CAAC;IAEZ,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,qBAAqB,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAoB,oBAAoB,CAAC,OAAO,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;QAC1F,IAAI,aAAa,GAA4B,CAAC,MAAM,EAAE,EAAE;YACtD,MAAM,MAAM,CAAC;QACf,CAAC,CAAC;QACF,MAAM,cAAc,GAAG,IAAI,OAAO,CAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE;YAC7D,aAAa,GAAG,MAAM,CAAC;QACzB,CAAC,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAChC,aAAa,CAAC,IAAI,KAAK,CAAC,6BAA6B,MAAM,CAAC,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9F,CAAC,EAAE,SAAS,CAAC,CAAC;QAEd,IAAI,CAAC;YACH,MAAM,MAAM,GAAY,MAAM,OAAO,CAAC,IAAI,CAAC;gBACzC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE;oBACxB,GAAG,CAAC,WAAW,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC;oBACrE,MAAM,EAAE,WAAW,CAAC,MAAM;oBAC1B,GAAG,CAAC,WAAW,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,CAAC;iBACzE,CAAC;gBACF,cAAc;aACf,CAAC,CAAC;YAEH,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,aAAa,EAAE,CAAC"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "tweetclaw",
3
3
  "name": "TweetClaw",
4
- "version": "1.6.19",
4
+ "version": "1.6.21",
5
5
  "description": "Post tweets, reply, like, retweet, follow, DM, search, and monitor X/Twitter through structured Xquik endpoints.",
6
6
  "activation": {
7
7
  "onStartup": false,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xquik/tweetclaw",
3
- "version": "1.6.19",
3
+ "version": "1.6.21",
4
4
  "description": "Post tweets, reply, like, retweet, follow, DM & more from OpenClaw through structured Xquik endpoints.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -32,7 +32,7 @@
32
32
  },
33
33
  "install": {
34
34
  "defaultChoice": "npm",
35
- "npmSpec": "@xquik/tweetclaw@1.6.19",
35
+ "npmSpec": "@xquik/tweetclaw@1.6.21",
36
36
  "minHostVersion": ">=2026.5.4"
37
37
  }
38
38
  },
package/src/request.ts CHANGED
@@ -77,6 +77,14 @@ const PROHIBITED_PATH_PATTERNS: ReadonlyArray<readonly [string, RegExp]> = [
77
77
 
78
78
  const SUPPORT_TICKET_METHODS: ReadonlySet<string> = new Set(['GET', 'PATCH', 'POST']);
79
79
 
80
+ function normalizeProhibitedPath(path: string): string {
81
+ let end = path.length;
82
+ while (end > 1 && path.charAt(end - 1) === '/') {
83
+ end -= 1;
84
+ }
85
+ return end === path.length ? path : path.slice(0, end);
86
+ }
87
+
80
88
  function isSupportTicketPath(method: string, path: string): boolean {
81
89
  return SUPPORT_TICKET_METHODS.has(method)
82
90
  && (path === SUPPORT_TICKETS_PREFIX || path.startsWith(`${SUPPORT_TICKETS_PREFIX}/`));
@@ -84,13 +92,14 @@ function isSupportTicketPath(method: string, path: string): boolean {
84
92
 
85
93
  function isProhibitedRequest(method: string, path: string): boolean {
86
94
  const upperMethod = method.toUpperCase();
95
+ const normalizedPath = normalizeProhibitedPath(path);
87
96
  const matchesStaticPath = PROHIBITED_PATHS.some(
88
- ([blockedMethod, blockedPath]) => upperMethod === blockedMethod && path === blockedPath,
97
+ ([blockedMethod, blockedPath]) => upperMethod === blockedMethod && normalizedPath === blockedPath,
89
98
  );
90
99
  const matchesPattern = PROHIBITED_PATH_PATTERNS.some(
91
- ([blockedMethod, pattern]) => upperMethod === blockedMethod && pattern.test(path),
100
+ ([blockedMethod, pattern]) => upperMethod === blockedMethod && pattern.test(normalizedPath),
92
101
  );
93
- return matchesStaticPath || matchesPattern || isSupportTicketPath(upperMethod, path);
102
+ return matchesStaticPath || matchesPattern || isSupportTicketPath(upperMethod, normalizedPath);
94
103
  }
95
104
 
96
105
  function validateRequestPath(method: string, path: string): void {
@@ -61,20 +61,30 @@ async function handleTweetclaw(options: Readonly<TweetclawOptions>): Promise<Too
61
61
  try {
62
62
  const requestInfo = resolveCatalogRequest(params, { mppMode });
63
63
  const request: RequestFunction = createProxiedRequest(baseUrl, credential, fetchFunction);
64
- const result: unknown = await Promise.race([
65
- request(requestInfo.path, {
66
- ...(requestInfo.body === undefined ? {} : { body: requestInfo.body }),
67
- method: requestInfo.method,
68
- ...(requestInfo.query === undefined ? {} : { query: requestInfo.query }),
69
- }),
70
- new Promise<never>((_resolve, reject) => {
71
- setTimeout(() => {
72
- reject(new Error(`Execution timed out after ${String(timeoutMs / MS_PER_SECOND)}s`));
73
- }, timeoutMs);
74
- }),
75
- ]);
64
+ let rejectTimeout: (reason: Error) => void = (reason) => {
65
+ throw reason;
66
+ };
67
+ const timeoutPromise = new Promise<never>((_resolve, reject) => {
68
+ rejectTimeout = reject;
69
+ });
70
+ const timeoutId = setTimeout(() => {
71
+ rejectTimeout(new Error(`Execution timed out after ${String(timeoutMs / MS_PER_SECOND)}s`));
72
+ }, timeoutMs);
76
73
 
77
- return successResult(result);
74
+ try {
75
+ const result: unknown = await Promise.race([
76
+ request(requestInfo.path, {
77
+ ...(requestInfo.body === undefined ? {} : { body: requestInfo.body }),
78
+ method: requestInfo.method,
79
+ ...(requestInfo.query === undefined ? {} : { query: requestInfo.query }),
80
+ }),
81
+ timeoutPromise,
82
+ ]);
83
+
84
+ return successResult(result);
85
+ } finally {
86
+ clearTimeout(timeoutId);
87
+ }
78
88
  } catch (error: unknown) {
79
89
  return errorResult(error);
80
90
  }