sweetlink 0.2.0 → 0.2.2

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.
Files changed (233) hide show
  1. package/CHANGELOG.md +21 -2
  2. package/LICENSE +1 -1
  3. package/README.md +6 -6
  4. package/dist/daemon/src/cli.d.ts +3 -0
  5. package/dist/daemon/src/cli.d.ts.map +1 -0
  6. package/dist/daemon/src/cli.js +14 -0
  7. package/dist/daemon/src/cli.js.map +1 -0
  8. package/dist/daemon/src/codename.d.ts.map +1 -1
  9. package/dist/daemon/src/codename.js +11 -11
  10. package/dist/daemon/src/codename.js.map +1 -1
  11. package/dist/daemon/src/index.d.ts +1 -1
  12. package/dist/daemon/src/index.js +143 -128
  13. package/dist/daemon/src/index.js.map +1 -1
  14. package/dist/shared/src/env.d.ts.map +1 -1
  15. package/dist/shared/src/env.js +12 -12
  16. package/dist/shared/src/env.js.map +1 -1
  17. package/dist/shared/src/index.d.ts +30 -30
  18. package/dist/shared/src/index.d.ts.map +1 -1
  19. package/dist/shared/src/index.js +17 -17
  20. package/dist/shared/src/index.js.map +1 -1
  21. package/dist/shared/src/node.d.ts +1 -1
  22. package/dist/shared/src/node.d.ts.map +1 -1
  23. package/dist/shared/src/node.js +18 -18
  24. package/dist/shared/src/node.js.map +1 -1
  25. package/dist/src/codex.d.ts +1 -1
  26. package/dist/src/codex.js +19 -19
  27. package/dist/src/codex.js.map +1 -1
  28. package/dist/src/commands/click.d.ts +1 -1
  29. package/dist/src/commands/click.d.ts.map +1 -1
  30. package/dist/src/commands/click.js +32 -24
  31. package/dist/src/commands/click.js.map +1 -1
  32. package/dist/src/commands/run-js.d.ts +1 -1
  33. package/dist/src/commands/run-js.d.ts.map +1 -1
  34. package/dist/src/commands/run-js.js +10 -10
  35. package/dist/src/commands/run-js.js.map +1 -1
  36. package/dist/src/commands/trust-ca.d.ts +1 -1
  37. package/dist/src/commands/trust-ca.js +15 -15
  38. package/dist/src/core/config-file.d.ts.map +1 -1
  39. package/dist/src/core/config-file.js +49 -41
  40. package/dist/src/core/config-file.js.map +1 -1
  41. package/dist/src/core/config.d.ts +2 -2
  42. package/dist/src/core/config.d.ts.map +1 -1
  43. package/dist/src/core/config.js +22 -18
  44. package/dist/src/core/config.js.map +1 -1
  45. package/dist/src/core/dev-bootstrap.d.ts +1 -1
  46. package/dist/src/core/dev-bootstrap.d.ts.map +1 -1
  47. package/dist/src/core/dev-bootstrap.js +12 -12
  48. package/dist/src/core/dev-bootstrap.js.map +1 -1
  49. package/dist/src/core/env.d.ts +1 -1
  50. package/dist/src/core/env.d.ts.map +1 -1
  51. package/dist/src/core/env.js +3 -3
  52. package/dist/src/core/env.js.map +1 -1
  53. package/dist/src/devtools-registry.d.ts.map +1 -1
  54. package/dist/src/devtools-registry.js +48 -46
  55. package/dist/src/devtools-registry.js.map +1 -1
  56. package/dist/src/env.d.ts +1 -1
  57. package/dist/src/env.js +1 -1
  58. package/dist/src/http.d.ts.map +1 -1
  59. package/dist/src/http.js +7 -6
  60. package/dist/src/http.js.map +1 -1
  61. package/dist/src/index.d.ts +7 -7
  62. package/dist/src/index.d.ts.map +1 -1
  63. package/dist/src/index.js +399 -367
  64. package/dist/src/index.js.map +1 -1
  65. package/dist/src/runtime/browser/client.d.ts +5 -4
  66. package/dist/src/runtime/browser/client.d.ts.map +1 -1
  67. package/dist/src/runtime/browser/client.js +79 -72
  68. package/dist/src/runtime/browser/client.js.map +1 -1
  69. package/dist/src/runtime/browser/commands/index.d.ts +2 -2
  70. package/dist/src/runtime/browser/commands/index.js +17 -17
  71. package/dist/src/runtime/browser/commands/index.js.map +1 -1
  72. package/dist/src/runtime/browser/dom-to-image-loader.d.ts.map +1 -1
  73. package/dist/src/runtime/browser/dom-to-image-loader.js +7 -7
  74. package/dist/src/runtime/browser/dom-to-image-loader.js.map +1 -1
  75. package/dist/src/runtime/browser/index.d.ts +3 -3
  76. package/dist/src/runtime/browser/index.js +2 -2
  77. package/dist/src/runtime/browser/module-loader.js +2 -2
  78. package/dist/src/runtime/browser/screenshot/hooks.d.ts +5 -5
  79. package/dist/src/runtime/browser/screenshot/hooks.d.ts.map +1 -1
  80. package/dist/src/runtime/browser/screenshot/hooks.js +32 -29
  81. package/dist/src/runtime/browser/screenshot/hooks.js.map +1 -1
  82. package/dist/src/runtime/browser/screenshot/index.d.ts +3 -3
  83. package/dist/src/runtime/browser/screenshot/index.d.ts.map +1 -1
  84. package/dist/src/runtime/browser/screenshot/index.js +17 -15
  85. package/dist/src/runtime/browser/screenshot/index.js.map +1 -1
  86. package/dist/src/runtime/browser/screenshot/renderers/dom-to-image.d.ts +1 -1
  87. package/dist/src/runtime/browser/screenshot/renderers/dom-to-image.js +13 -13
  88. package/dist/src/runtime/browser/screenshot/renderers/dom-to-image.js.map +1 -1
  89. package/dist/src/runtime/browser/screenshot/renderers/html2canvas.d.ts +1 -1
  90. package/dist/src/runtime/browser/screenshot/renderers/html2canvas.d.ts.map +1 -1
  91. package/dist/src/runtime/browser/screenshot/renderers/html2canvas.js +24 -24
  92. package/dist/src/runtime/browser/screenshot/renderers/html2canvas.js.map +1 -1
  93. package/dist/src/runtime/browser/screenshot/targets.d.ts +2 -2
  94. package/dist/src/runtime/browser/screenshot/targets.js +9 -9
  95. package/dist/src/runtime/browser/screenshot/utils.d.ts +1 -1
  96. package/dist/src/runtime/browser/screenshot/utils.d.ts.map +1 -1
  97. package/dist/src/runtime/browser/screenshot/utils.js +73 -71
  98. package/dist/src/runtime/browser/screenshot/utils.js.map +1 -1
  99. package/dist/src/runtime/browser/selector-discovery.d.ts +1 -1
  100. package/dist/src/runtime/browser/selector-discovery.d.ts.map +1 -1
  101. package/dist/src/runtime/browser/selector-discovery.js +24 -22
  102. package/dist/src/runtime/browser/selector-discovery.js.map +1 -1
  103. package/dist/src/runtime/browser/storage/session-storage.d.ts +10 -5
  104. package/dist/src/runtime/browser/storage/session-storage.d.ts.map +1 -1
  105. package/dist/src/runtime/browser/storage/session-storage.js +12 -10
  106. package/dist/src/runtime/browser/storage/session-storage.js.map +1 -1
  107. package/dist/src/runtime/browser/types.d.ts +7 -7
  108. package/dist/src/runtime/browser/types.js +1 -1
  109. package/dist/src/runtime/browser/utils/console.d.ts +1 -1
  110. package/dist/src/runtime/browser/utils/console.js +16 -16
  111. package/dist/src/runtime/browser/utils/console.js.map +1 -1
  112. package/dist/src/runtime/browser/utils/environment.js +2 -2
  113. package/dist/src/runtime/browser/utils/errors.d.ts.map +1 -1
  114. package/dist/src/runtime/browser/utils/errors.js +11 -11
  115. package/dist/src/runtime/browser/utils/number.d.ts.map +1 -1
  116. package/dist/src/runtime/browser/utils/number.js.map +1 -1
  117. package/dist/src/runtime/browser/utils/object.d.ts.map +1 -1
  118. package/dist/src/runtime/browser/utils/object.js +2 -2
  119. package/dist/src/runtime/browser/utils/object.js.map +1 -1
  120. package/dist/src/runtime/browser/utils/sanitize.js +2 -2
  121. package/dist/src/runtime/browser/utils/time.d.ts.map +1 -1
  122. package/dist/src/runtime/browser/utils/time.js +1 -1
  123. package/dist/src/runtime/chrome/cookies.d.ts +4 -4
  124. package/dist/src/runtime/chrome/cookies.d.ts.map +1 -1
  125. package/dist/src/runtime/chrome/cookies.js +31 -31
  126. package/dist/src/runtime/chrome/cookies.js.map +1 -1
  127. package/dist/src/runtime/chrome/deep-link.d.ts +1 -1
  128. package/dist/src/runtime/chrome/deep-link.d.ts.map +1 -1
  129. package/dist/src/runtime/chrome/deep-link.js +46 -36
  130. package/dist/src/runtime/chrome/deep-link.js.map +1 -1
  131. package/dist/src/runtime/chrome/diagnostics.d.ts.map +1 -1
  132. package/dist/src/runtime/chrome/diagnostics.js +13 -11
  133. package/dist/src/runtime/chrome/diagnostics.js.map +1 -1
  134. package/dist/src/runtime/chrome/focus.d.ts.map +1 -1
  135. package/dist/src/runtime/chrome/focus.js +5 -5
  136. package/dist/src/runtime/chrome/focus.js.map +1 -1
  137. package/dist/src/runtime/chrome/launch.d.ts.map +1 -1
  138. package/dist/src/runtime/chrome/launch.js +30 -30
  139. package/dist/src/runtime/chrome/launch.js.map +1 -1
  140. package/dist/src/runtime/chrome/puppeteer.d.ts +2 -2
  141. package/dist/src/runtime/chrome/puppeteer.d.ts.map +1 -1
  142. package/dist/src/runtime/chrome/puppeteer.js +16 -11
  143. package/dist/src/runtime/chrome/puppeteer.js.map +1 -1
  144. package/dist/src/runtime/chrome/reuse.d.ts.map +1 -1
  145. package/dist/src/runtime/chrome/reuse.js +38 -35
  146. package/dist/src/runtime/chrome/reuse.js.map +1 -1
  147. package/dist/src/runtime/chrome/session.d.ts +1 -1
  148. package/dist/src/runtime/chrome/session.d.ts.map +1 -1
  149. package/dist/src/runtime/chrome/session.js +12 -10
  150. package/dist/src/runtime/chrome/session.js.map +1 -1
  151. package/dist/src/runtime/chrome.d.ts +8 -8
  152. package/dist/src/runtime/chrome.js +8 -8
  153. package/dist/src/runtime/cookies.d.ts +1 -16
  154. package/dist/src/runtime/cookies.d.ts.map +1 -1
  155. package/dist/src/runtime/cookies.js +175 -286
  156. package/dist/src/runtime/cookies.js.map +1 -1
  157. package/dist/src/runtime/devstack.d.ts +1 -1
  158. package/dist/src/runtime/devstack.d.ts.map +1 -1
  159. package/dist/src/runtime/devstack.js +31 -28
  160. package/dist/src/runtime/devstack.js.map +1 -1
  161. package/dist/src/runtime/devtools/background.js +22 -22
  162. package/dist/src/runtime/devtools/cdp.d.ts +3 -3
  163. package/dist/src/runtime/devtools/cdp.d.ts.map +1 -1
  164. package/dist/src/runtime/devtools/cdp.js +59 -55
  165. package/dist/src/runtime/devtools/cdp.js.map +1 -1
  166. package/dist/src/runtime/devtools/config.d.ts.map +1 -1
  167. package/dist/src/runtime/devtools/config.js +15 -15
  168. package/dist/src/runtime/devtools/config.js.map +1 -1
  169. package/dist/src/runtime/devtools/constants.d.ts.map +1 -1
  170. package/dist/src/runtime/devtools/constants.js +18 -10
  171. package/dist/src/runtime/devtools/constants.js.map +1 -1
  172. package/dist/src/runtime/devtools/diagnostics.d.ts +4 -4
  173. package/dist/src/runtime/devtools/diagnostics.d.ts.map +1 -1
  174. package/dist/src/runtime/devtools/diagnostics.js +40 -38
  175. package/dist/src/runtime/devtools/diagnostics.js.map +1 -1
  176. package/dist/src/runtime/devtools/oauth.d.ts +1 -1
  177. package/dist/src/runtime/devtools/oauth.d.ts.map +1 -1
  178. package/dist/src/runtime/devtools/oauth.js +35 -28
  179. package/dist/src/runtime/devtools/oauth.js.map +1 -1
  180. package/dist/src/runtime/devtools/types.d.ts +3 -3
  181. package/dist/src/runtime/devtools/types.d.ts.map +1 -1
  182. package/dist/src/runtime/devtools.d.ts +7 -7
  183. package/dist/src/runtime/devtools.js +7 -7
  184. package/dist/src/runtime/next-devtools.d.ts.map +1 -1
  185. package/dist/src/runtime/next-devtools.js +12 -12
  186. package/dist/src/runtime/next-devtools.js.map +1 -1
  187. package/dist/src/runtime/screenshot.d.ts +9 -9
  188. package/dist/src/runtime/screenshot.d.ts.map +1 -1
  189. package/dist/src/runtime/screenshot.js +65 -46
  190. package/dist/src/runtime/screenshot.js.map +1 -1
  191. package/dist/src/runtime/scripts.d.ts +1 -1
  192. package/dist/src/runtime/scripts.d.ts.map +1 -1
  193. package/dist/src/runtime/scripts.js +28 -28
  194. package/dist/src/runtime/scripts.js.map +1 -1
  195. package/dist/src/runtime/session.d.ts +6 -6
  196. package/dist/src/runtime/session.d.ts.map +1 -1
  197. package/dist/src/runtime/session.js +35 -35
  198. package/dist/src/runtime/session.js.map +1 -1
  199. package/dist/src/runtime/smoke.d.ts +3 -3
  200. package/dist/src/runtime/smoke.d.ts.map +1 -1
  201. package/dist/src/runtime/smoke.js +85 -79
  202. package/dist/src/runtime/smoke.js.map +1 -1
  203. package/dist/src/runtime/url.d.ts +2 -2
  204. package/dist/src/runtime/url.d.ts.map +1 -1
  205. package/dist/src/runtime/url.js +20 -20
  206. package/dist/src/runtime/url.js.map +1 -1
  207. package/dist/src/screenshot-hooks.d.ts +1 -1
  208. package/dist/src/screenshot-hooks.d.ts.map +1 -1
  209. package/dist/src/screenshot-hooks.js +12 -12
  210. package/dist/src/screenshot-hooks.js.map +1 -1
  211. package/dist/src/shared/env.d.ts.map +1 -1
  212. package/dist/src/shared/env.js +11 -11
  213. package/dist/src/shared/env.js.map +1 -1
  214. package/dist/src/shared/index.d.ts +30 -30
  215. package/dist/src/shared/index.d.ts.map +1 -1
  216. package/dist/src/shared/index.js +17 -17
  217. package/dist/src/shared/index.js.map +1 -1
  218. package/dist/src/shared/node.d.ts +1 -1
  219. package/dist/src/shared/node.d.ts.map +1 -1
  220. package/dist/src/shared/node.js +18 -18
  221. package/dist/src/shared/node.js.map +1 -1
  222. package/dist/src/token.d.ts +1 -1
  223. package/dist/src/token.d.ts.map +1 -1
  224. package/dist/src/token.js +16 -16
  225. package/dist/src/token.js.map +1 -1
  226. package/dist/src/types.d.ts +1 -1
  227. package/dist/src/util/app-label.js +4 -4
  228. package/dist/src/util/errors.d.ts.map +1 -1
  229. package/dist/src/util/errors.js +12 -10
  230. package/dist/src/util/errors.js.map +1 -1
  231. package/dist/src/util/path.js +2 -2
  232. package/dist/src/util/regex.js +4 -4
  233. package/package.json +53 -45
@@ -1,15 +1,15 @@
1
- import { createHmac, randomUUID, timingSafeEqual } from 'node:crypto';
1
+ import { createHmac, randomUUID, timingSafeEqual } from "node:crypto";
2
2
  export const SWEETLINK_DEFAULT_PORT = 4455;
3
- export const SWEETLINK_WS_PATH = '/bridge';
3
+ export const SWEETLINK_WS_PATH = "/bridge";
4
4
  export const SWEETLINK_SESSION_EXP_SECONDS = 60 * 5; // 5 minutes
5
5
  export const SWEETLINK_CLI_EXP_SECONDS = 60 * 60; // 1 hour
6
6
  export const SWEETLINK_HEARTBEAT_INTERVAL_MS = 15_000;
7
7
  export const SWEETLINK_HEARTBEAT_TOLERANCE_MS = 45_000;
8
- export function signSweetLinkToken({ secret, scope, subject, ttlSeconds, sessionId }) {
8
+ export function signSweetLinkToken({ secret, scope, subject, ttlSeconds, sessionId, }) {
9
9
  // We encode the payload ourselves (instead of relying on a JWT lib) so both daemon and browser
10
10
  // can verify tokens without pulling in heavyweight dependencies.
11
11
  if (!secret) {
12
- throw new Error('SweetLink secret is not configured');
12
+ throw new Error("SweetLink secret is not configured");
13
13
  }
14
14
  const issuedAt = Math.floor(Date.now() / 1000);
15
15
  const payload = {
@@ -20,37 +20,37 @@ export function signSweetLinkToken({ secret, scope, subject, ttlSeconds, session
20
20
  issuedAt,
21
21
  expiresAt: issuedAt + ttlSeconds,
22
22
  };
23
- const encodedPayload = Buffer.from(JSON.stringify(payload), 'utf8').toString('base64url');
23
+ const encodedPayload = Buffer.from(JSON.stringify(payload), "utf8").toString("base64url");
24
24
  const signature = signEncodedPayload(secret, encodedPayload);
25
25
  return `${encodedPayload}.${signature}`;
26
26
  }
27
- export function verifySweetLinkToken({ secret, token, expectedScope }) {
27
+ export function verifySweetLinkToken({ secret, token, expectedScope, }) {
28
28
  if (!secret) {
29
- throw new Error('SweetLink secret is not configured');
29
+ throw new Error("SweetLink secret is not configured");
30
30
  }
31
- const [encodedPayload, providedSignature] = token.split('.', 2);
31
+ const [encodedPayload, providedSignature] = token.split(".", 2);
32
32
  if (!(encodedPayload && providedSignature)) {
33
- throw new Error('Malformed SweetLink token');
33
+ throw new Error("Malformed SweetLink token");
34
34
  }
35
35
  const expectedSignature = signEncodedPayload(secret, encodedPayload);
36
- if (!timingSafeCompare(Buffer.from(providedSignature, 'base64url'), Buffer.from(expectedSignature, 'base64url'))) {
37
- throw new Error('Invalid SweetLink token signature');
36
+ if (!timingSafeCompare(Buffer.from(providedSignature, "base64url"), Buffer.from(expectedSignature, "base64url"))) {
37
+ throw new Error("Invalid SweetLink token signature");
38
38
  }
39
- const decoded = JSON.parse(Buffer.from(encodedPayload, 'base64url').toString('utf8'));
40
- if (!decoded || typeof decoded !== 'object') {
41
- throw new Error('Invalid SweetLink token payload');
39
+ const decoded = JSON.parse(Buffer.from(encodedPayload, "base64url").toString("utf8"));
40
+ if (!decoded || typeof decoded !== "object") {
41
+ throw new Error("Invalid SweetLink token payload");
42
42
  }
43
43
  const now = Math.floor(Date.now() / 1000);
44
44
  if (decoded.expiresAt < now) {
45
- throw new Error('SweetLink token expired');
45
+ throw new Error("SweetLink token expired");
46
46
  }
47
47
  if (expectedScope && decoded.scope !== expectedScope) {
48
- throw new Error('SweetLink token scope mismatch');
48
+ throw new Error("SweetLink token scope mismatch");
49
49
  }
50
50
  return decoded;
51
51
  }
52
52
  function signEncodedPayload(secret, encodedPayload) {
53
- return createHmac('sha256', secret).update(encodedPayload).digest('base64url');
53
+ return createHmac("sha256", secret).update(encodedPayload).digest("base64url");
54
54
  }
55
55
  function timingSafeCompare(a, b) {
56
56
  if (a.length !== b.length) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shared/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shared/index.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ export interface ResolveSweetLinkSecretOptions {
4
4
  }
5
5
  export interface SweetLinkSecretResolution {
6
6
  readonly secret: string;
7
- readonly source: 'env' | 'file' | 'generated';
7
+ readonly source: "env" | "file" | "generated";
8
8
  readonly path?: string;
9
9
  }
10
10
  export declare function resolveSweetLinkSecret(options?: ResolveSweetLinkSecretOptions): Promise<SweetLinkSecretResolution>;
@@ -1 +1 @@
1
- {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/shared/node.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,WAAW,CAAC;IAC9C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAmCD,wBAAsB,sBAAsB,CAC1C,OAAO,GAAE,6BAAkC,GAC1C,OAAO,CAAC,yBAAyB,CAAC,CAmCpC;AAED,wBAAgB,6BAA6B,IAAI,MAAM,CAEtD"}
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/shared/node.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,WAAW,CAAC;IAC9C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAqCD,wBAAsB,sBAAsB,CAC1C,OAAO,GAAE,6BAAkC,GAC1C,OAAO,CAAC,yBAAyB,CAAC,CAqCpC;AAED,wBAAgB,6BAA6B,IAAI,MAAM,CAEtD"}
@@ -1,13 +1,13 @@
1
- import { randomBytes } from 'node:crypto';
2
- import { constants as fsConstants } from 'node:fs';
3
- import os from 'node:os';
4
- import path from 'node:path';
5
- import { debuglog } from 'node:util';
6
- import { sweetLinkEnv } from './env.js';
7
- const DEFAULT_SECRET_PATH = path.join(os.homedir(), '.sweetlink', 'secret.key');
8
- const FS_PROMISES_MODULE = 'node:fs/promises';
1
+ import { randomBytes } from "node:crypto";
2
+ import { constants as fsConstants } from "node:fs";
3
+ import os from "node:os";
4
+ import path from "node:path";
5
+ import { debuglog } from "node:util";
6
+ import { sweetLinkEnv } from "./env.js";
7
+ const DEFAULT_SECRET_PATH = path.join(os.homedir(), ".sweetlink", "secret.key");
8
+ const FS_PROMISES_MODULE = "node:fs/promises";
9
9
  let cachedFsPromises = null;
10
- const debug = debuglog('sweetlink');
10
+ const debug = debuglog("sweetlink");
11
11
  function ensureNodeRuntime() {
12
12
  const globalScope = globalThis;
13
13
  const nodeVersion = globalScope.process?.versions?.node;
@@ -15,9 +15,9 @@ function ensureNodeRuntime() {
15
15
  return;
16
16
  }
17
17
  if (globalScope.window !== undefined) {
18
- throw new TypeError('SweetLink secret resolution requires a Node.js runtime; detected browser-like window without Node metadata.');
18
+ throw new TypeError("SweetLink secret resolution requires a Node.js runtime; detected browser-like window without Node metadata.");
19
19
  }
20
- throw new TypeError('Node.js runtime metadata is unavailable; refusing to access SweetLink secrets.');
20
+ throw new TypeError("Node.js runtime metadata is unavailable; refusing to access SweetLink secrets.");
21
21
  }
22
22
  async function loadFsModule() {
23
23
  if (cachedFsPromises) {
@@ -30,36 +30,36 @@ async function loadFsModule() {
30
30
  export async function resolveSweetLinkSecret(options = {}) {
31
31
  const envSecret = sweetLinkEnv.secret;
32
32
  if (envSecret && envSecret.length >= 32) {
33
- return { secret: envSecret, source: 'env' };
33
+ return { secret: envSecret, source: "env" };
34
34
  }
35
35
  const secretPath = options.secretPath ?? DEFAULT_SECRET_PATH;
36
36
  try {
37
37
  const fsModule = await loadFsModule();
38
38
  const readSecretFile = async () => {
39
39
  await fsModule.access(secretPath, fsConstants.R_OK);
40
- return fsModule.readFile(secretPath, 'utf8');
40
+ return fsModule.readFile(secretPath, "utf8");
41
41
  };
42
42
  const secretFileContents = await readSecretFile();
43
43
  const fileSecret = secretFileContents.trim();
44
44
  if (fileSecret.length >= 32) {
45
- return { secret: fileSecret, source: 'file', path: secretPath };
45
+ return { secret: fileSecret, source: "file", path: secretPath };
46
46
  }
47
47
  }
48
48
  catch (error) {
49
- debug('Unable to read SweetLink secret from file; falling back to autoCreate logic.', {
49
+ debug("Unable to read SweetLink secret from file; falling back to autoCreate logic.", {
50
50
  path: secretPath,
51
51
  error,
52
52
  });
53
53
  }
54
54
  if (!options.autoCreate) {
55
- throw new Error('SWEETLINK_SECRET is not configured; provide env var or run daemon with autoCreate enabled');
55
+ throw new Error("SWEETLINK_SECRET is not configured; provide env var or run daemon with autoCreate enabled");
56
56
  }
57
- const generated = randomBytes(48).toString('base64url');
57
+ const generated = randomBytes(48).toString("base64url");
58
58
  const directory = path.dirname(secretPath);
59
59
  const { mkdir, writeFile } = await loadFsModule();
60
60
  await mkdir(directory, { recursive: true });
61
61
  await writeFile(secretPath, `${generated}\n`, { mode: 0o600 });
62
- return { secret: generated, source: 'generated', path: secretPath };
62
+ return { secret: generated, source: "generated", path: secretPath };
63
63
  }
64
64
  export function getDefaultSweetLinkSecretPath() {
65
65
  return DEFAULT_SECRET_PATH;
@@ -1 +1 @@
1
- {"version":3,"file":"node.js","sourceRoot":"","sources":["../../../src/shared/node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../../../src/shared/node.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { CliConfig } from './types.js';
1
+ import type { CliConfig } from "./types.js";
2
2
  export declare function resetCliTokenCache(): void;
3
3
  export declare function fetchCliToken(config: CliConfig): Promise<string>;
4
4
  //# sourceMappingURL=token.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/token.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAwB,SAAS,EAAE,MAAM,YAAY,CAAC;AAclE,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAoDtE"}
1
+ {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/token.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAwB,SAAS,EAAE,MAAM,YAAY,CAAC;AAalE,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAuDtE"}
package/dist/src/token.js CHANGED
@@ -1,10 +1,10 @@
1
- import { SWEETLINK_CLI_EXP_SECONDS, signSweetLinkToken } from '../shared/src/index.js';
2
- import { resolveSweetLinkSecret } from '../shared/src/node.js';
3
- import { loadDevBootstrap } from './core/dev-bootstrap.js';
4
- import { fetchJson } from './http.js';
5
- import { describeAppForPrompt } from './util/app-label.js';
6
- import { describeUnknown } from './util/errors.js';
7
- import { TRAILING_SLASH_PATTERN } from './util/regex.js';
1
+ import { SWEETLINK_CLI_EXP_SECONDS, signSweetLinkToken } from "../shared/src/index.js";
2
+ import { resolveSweetLinkSecret } from "../shared/src/node.js";
3
+ import { loadDevBootstrap } from "./core/dev-bootstrap.js";
4
+ import { fetchJson } from "./http.js";
5
+ import { describeAppForPrompt } from "./util/app-label.js";
6
+ import { describeUnknown } from "./util/errors.js";
7
+ import { TRAILING_SLASH_PATTERN } from "./util/regex.js";
8
8
  let cachedCliToken = null;
9
9
  export function resetCliTokenCache() {
10
10
  cachedCliToken = null;
@@ -18,35 +18,35 @@ export async function fetchCliToken(config) {
18
18
  const adminApiKey = config.adminApiKey ?? bootstrap?.adminApiKey ?? null;
19
19
  if (adminApiKey) {
20
20
  try {
21
- const response = await fetchJson(`${config.appBaseUrl.replace(TRAILING_SLASH_PATTERN, '')}/api/admin/sweetlink/cli-token`, {
22
- method: 'POST',
21
+ const response = await fetchJson(`${config.appBaseUrl.replace(TRAILING_SLASH_PATTERN, "")}/api/admin/sweetlink/cli-token`, {
22
+ method: "POST",
23
23
  headers: {
24
24
  Authorization: `Bearer ${adminApiKey}`,
25
- 'Content-Type': 'application/json',
25
+ "Content-Type": "application/json",
26
26
  },
27
27
  });
28
28
  cachedCliToken = {
29
29
  token: response.accessToken,
30
30
  expiresAt: response.expiresAt,
31
- source: 'api',
31
+ source: "api",
32
32
  };
33
33
  return response.accessToken;
34
34
  }
35
35
  catch (error) {
36
36
  const detail = error instanceof Error ? error.message : String(error);
37
- console.warn('[SweetLink CLI] Falling back to local secret after CLI token request failed:', detail);
37
+ console.warn("[SweetLink CLI] Falling back to local secret after CLI token request failed:", detail);
38
38
  }
39
39
  }
40
40
  try {
41
41
  const secretResolution = await resolveSweetLinkSecret();
42
42
  const token = signSweetLinkToken({
43
43
  secret: secretResolution.secret,
44
- scope: 'cli',
45
- subject: 'local-cli',
44
+ scope: "cli",
45
+ subject: "local-cli",
46
46
  ttlSeconds: SWEETLINK_CLI_EXP_SECONDS,
47
47
  });
48
48
  const expiresAt = Math.floor(Date.now() / 1000) + SWEETLINK_CLI_EXP_SECONDS;
49
- cachedCliToken = { token, expiresAt, source: 'secret' };
49
+ cachedCliToken = { token, expiresAt, source: "secret" };
50
50
  return token;
51
51
  }
52
52
  catch (error) {
@@ -54,7 +54,7 @@ export async function fetchCliToken(config) {
54
54
  const targetDescription = describeAppForPrompt(config.appLabel);
55
55
  const hint = adminApiKey
56
56
  ? `Check that your admin key is valid or ensure ${targetDescription} is running.`
57
- : 'Provide --admin-key or start the SweetLink daemon once (pnpm sweetlink) to generate the shared secret.';
57
+ : "Provide --admin-key or start the SweetLink daemon once (pnpm sweetlink) to generate the shared secret.";
58
58
  throw new Error(`Unable to resolve SweetLink CLI token. Reason: ${detail}. ${hint}`);
59
59
  }
60
60
  }
@@ -1 +1 @@
1
- {"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/token.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACvF,OAAO,EAAE,sBAAsB,EAAkC,MAAM,uBAAuB,CAAC;AAC/F,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAQzD,IAAI,cAAc,GAA0B,IAAI,CAAC;AAEjD,MAAM,UAAU,kBAAkB;IAChC,cAAc,GAAG,IAAI,CAAC;AACxB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAiB;IACnD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1C,IAAI,cAAc,IAAI,cAAc,CAAC,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;QAC1D,OAAO,cAAc,CAAC,KAAK,CAAC;IAC9B,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACnE,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,SAAS,EAAE,WAAW,IAAI,IAAI,CAAC;IAEzE,IAAI,WAAW,EAAE,CAAC;QAChB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,SAAS,CAC9B,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC,gCAAgC,EACxF;gBACE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU,WAAW,EAAE;oBACtC,cAAc,EAAE,kBAAkB;iBACnC;aACF,CACF,CAAC;YACF,cAAc,GAAG;gBACf,KAAK,EAAE,QAAQ,CAAC,WAAW;gBAC3B,SAAS,EAAE,QAAQ,CAAC,SAAS;gBAC7B,MAAM,EAAE,KAAK;aACd,CAAC;YACF,OAAO,QAAQ,CAAC,WAAW,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACtE,OAAO,CAAC,IAAI,CACV,8EAA8E,EAC9E,MAAM,CACP,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,gBAAgB,GAA8B,MAAM,sBAAsB,EAAE,CAAC;QACnF,MAAM,KAAK,GAAG,kBAAkB,CAAC;YAC/B,MAAM,EAAE,gBAAgB,CAAC,MAAM;YAC/B,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,WAAW;YACpB,UAAU,EAAE,yBAAyB;SACtC,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,yBAAyB,CAAC;QAC5E,cAAc,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QACxD,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC/E,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChE,MAAM,IAAI,GAAG,WAAW;YACtB,CAAC,CAAC,gDAAgD,iBAAiB,cAAc;YACjF,CAAC,CAAC,wGAAwG,CAAC;QAC7G,MAAM,IAAI,KAAK,CAAC,kDAAkD,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;IACvF,CAAC;AACH,CAAC"}
@@ -12,7 +12,7 @@ export interface DevBootstrapConfig {
12
12
  readonly loginPath: string | null;
13
13
  readonly redirectParam: string | null;
14
14
  }
15
- export type CachedCliTokenSource = 'secret' | 'api';
15
+ export type CachedCliTokenSource = "secret" | "api";
16
16
  export interface ServerConfig {
17
17
  readonly env: string;
18
18
  readonly start: string[] | null;
@@ -1,8 +1,8 @@
1
- import { regex } from 'arkregex';
2
- export const DEFAULT_APP_LABEL = 'your application';
3
- const LEADING_ARTICLE_PATTERN = regex.as(String.raw `^(?:the|a|an|your)\b`, 'i');
1
+ import { regex } from "arkregex";
2
+ export const DEFAULT_APP_LABEL = "your application";
3
+ const LEADING_ARTICLE_PATTERN = regex.as(String.raw `^(?:the|a|an|your)\b`, "i");
4
4
  export function normalizeAppLabel(value) {
5
- if (typeof value !== 'string') {
5
+ if (typeof value !== "string") {
6
6
  return null;
7
7
  }
8
8
  const trimmed = value.trim();
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/util/errors.ts"],"names":[],"mappings":"AAEA,kEAAkE;AAClE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAgB3E;AAED,4CAA4C;AAC5C,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,cAAc,CAE/E;AAED,yDAAyD;AACzD,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,SAAY,GAAG,MAAM,CAkB5E;AAED,qDAAqD;AACrD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAMnE"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/util/errors.ts"],"names":[],"mappings":"AAEA,kEAAkE;AAClE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAgB3E;AAED,4CAA4C;AAC5C,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,cAAc,CAM/E;AAED,yDAAyD;AACzD,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,SAAY,GAAG,MAAM,CAkB5E;AAED,qDAAqD;AACrD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAMnE"}
@@ -1,41 +1,43 @@
1
- import { sweetLinkDebug } from '../env.js';
1
+ import { sweetLinkDebug } from "../env.js";
2
2
  /** Extracts a readable message from unknown error-like values. */
3
3
  export function extractEventMessage(event, prefix) {
4
4
  const parts = [];
5
5
  if (prefix) {
6
6
  parts.push(prefix);
7
7
  }
8
- if (typeof event === 'string') {
8
+ if (typeof event === "string") {
9
9
  parts.push(event);
10
10
  }
11
11
  else if (event instanceof Error) {
12
- parts.push(event.message || event.name || 'Unknown error');
12
+ parts.push(event.message || event.name || "Unknown error");
13
13
  }
14
- else if (event && typeof event === 'object' && 'message' in event) {
14
+ else if (event && typeof event === "object" && "message" in event) {
15
15
  const message = event.message;
16
- parts.push(typeof message === 'string' ? message : JSON.stringify(message));
16
+ parts.push(typeof message === "string" ? message : JSON.stringify(message));
17
17
  }
18
18
  else {
19
19
  parts.push(String(event));
20
20
  }
21
- return parts.join(': ');
21
+ return parts.join(": ");
22
22
  }
23
23
  /** Type guard for Node errno exceptions. */
24
24
  export function isErrnoException(value) {
25
- return typeof value === 'object' && value !== null && typeof value.code === 'string';
25
+ return (typeof value === "object" &&
26
+ value !== null &&
27
+ typeof value.code === "string");
26
28
  }
27
29
  /** Formats unknown values for human-readable logging. */
28
- export function describeUnknown(value, fallback = 'unknown') {
30
+ export function describeUnknown(value, fallback = "unknown") {
29
31
  if (value === null || value === undefined) {
30
32
  return fallback;
31
33
  }
32
34
  if (value instanceof Error) {
33
35
  return value.message || value.name || fallback;
34
36
  }
35
- if (typeof value === 'string') {
37
+ if (typeof value === "string") {
36
38
  return value;
37
39
  }
38
- if (typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint') {
40
+ if (typeof value === "number" || typeof value === "boolean" || typeof value === "bigint") {
39
41
  return String(value);
40
42
  }
41
43
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/util/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,kEAAkE;AAClE,MAAM,UAAU,mBAAmB,CAAC,KAAc,EAAE,MAAe;IACjE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,MAAM,EAAE,CAAC;QACX,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;SAAM,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,IAAI,eAAe,CAAC,CAAC;IAC7D,CAAC;SAAM,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;QACpE,MAAM,OAAO,GAAI,KAA+B,CAAC,OAAO,CAAC;QACzD,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9E,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,OAAQ,KAA4B,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC/G,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,eAAe,CAAC,KAAc,EAAE,QAAQ,GAAG,SAAS;IAClE,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,IAAI,QAAQ,CAAC;IACjD,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACzF,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,KAAc;IAC3D,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO;IACT,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAChF,OAAO,CAAC,IAAI,CAAC,mBAAmB,OAAO,KAAK,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;AAChE,CAAC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/util/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,kEAAkE;AAClE,MAAM,UAAU,mBAAmB,CAAC,KAAc,EAAE,MAAe;IACjE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,MAAM,EAAE,CAAC;QACX,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;SAAM,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,IAAI,eAAe,CAAC,CAAC;IAC7D,CAAC;SAAM,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;QACpE,MAAM,OAAO,GAAI,KAA+B,CAAC,OAAO,CAAC;QACzD,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9E,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,OAAQ,KAA4B,CAAC,IAAI,KAAK,QAAQ,CACvD,CAAC;AACJ,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,eAAe,CAAC,KAAc,EAAE,QAAQ,GAAG,SAAS;IAClE,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,IAAI,QAAQ,CAAC;IACjD,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACzF,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,KAAc;IAC3D,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO;IACT,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAChF,OAAO,CAAC,IAAI,CAAC,mBAAmB,OAAO,KAAK,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;AAChE,CAAC"}
@@ -1,6 +1,6 @@
1
- import os from 'node:os';
1
+ import os from "node:os";
2
2
  /** Collapses the current home directory so paths read cleanly in logs. */
3
3
  export function formatPathForDisplay(value) {
4
- return value.replace(os.homedir(), '~');
4
+ return value.replace(os.homedir(), "~");
5
5
  }
6
6
  //# sourceMappingURL=path.js.map
@@ -1,5 +1,5 @@
1
- import { regex } from 'arkregex';
2
- export const TRAILING_SLASH_PATTERN = regex.as('/+$');
3
- export const OPTIONAL_TRAILING_SLASH_PATTERN = regex.as('/?$');
4
- export const LEADING_SLASH_PATTERN = regex.as('^/+');
1
+ import { regex } from "arkregex";
2
+ export const TRAILING_SLASH_PATTERN = regex.as("/+$");
3
+ export const OPTIONAL_TRAILING_SLASH_PATTERN = regex.as("/?$");
4
+ export const LEADING_SLASH_PATTERN = regex.as("^/+");
5
5
  //# sourceMappingURL=regex.js.map
package/package.json CHANGED
@@ -1,46 +1,35 @@
1
1
  {
2
2
  "name": "sweetlink",
3
- "version": "0.2.0",
4
- "license": "MIT",
3
+ "version": "0.2.2",
5
4
  "private": false,
6
- "type": "module",
7
5
  "description": "Controlled-browser automation CLI for SweetLink sessions.",
8
- "homepage": "https://github.com/steipete/sweetlink",
9
- "repository": {
10
- "type": "git",
11
- "url": "https://github.com/steipete/sweetlink.git",
12
- "directory": "apps/sweetlink"
13
- },
14
- "bugs": {
15
- "url": "https://github.com/steipete/sweetlink/issues"
16
- },
17
6
  "keywords": [
18
- "sweetlink",
19
7
  "automation",
20
8
  "browser",
9
+ "cli",
21
10
  "devtools",
22
- "cli"
11
+ "sweetlink"
23
12
  ],
13
+ "homepage": "https://github.com/steipete/sweetlink",
14
+ "bugs": {
15
+ "url": "https://github.com/steipete/sweetlink/issues"
16
+ },
17
+ "license": "MIT",
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "https://github.com/steipete/sweetlink.git"
21
+ },
24
22
  "bin": {
25
23
  "sweetlink": "./dist/src/index.js",
26
24
  "sweetlinkd": "./dist/daemon/src/index.js"
27
25
  },
28
- "devDependencies": {
29
- "@biomejs/biome": "^2.3.10",
30
- "@types/node": "^25.0.3",
31
- "@types/ws": "^8.18.1",
32
- "jsdom": "^27.4.0",
33
- "tsx": "^4.21.0",
34
- "typescript": "^5.9.3",
35
- "ultracite": "^6.5.0",
36
- "vitest": "^4.0.16"
37
- },
38
26
  "files": [
39
27
  "dist",
40
28
  "README.md",
41
29
  "LICENSE",
42
30
  "CHANGELOG.md"
43
31
  ],
32
+ "type": "module",
44
33
  "main": "./dist/src/index.js",
45
34
  "module": "./dist/src/index.js",
46
35
  "types": "./dist/src/index.d.ts",
@@ -59,30 +48,49 @@
59
48
  "publishConfig": {
60
49
  "access": "public"
61
50
  },
62
- "engines": {
63
- "node": ">=22.0.0",
64
- "pnpm": ">=10.16.0"
51
+ "scripts": {
52
+ "dev": "tsx src/index.ts",
53
+ "build": "tsc --project tsconfig.build.json",
54
+ "test": "vitest run --config vitest.config.ts",
55
+ "typecheck": "tsc --project tsconfig.json --noEmit",
56
+ "format": "node scripts/format.mjs --write",
57
+ "format:check": "node scripts/format.mjs",
58
+ "lint": "pnpm format:check && oxlint --deny-warnings ./src ./shared/src ./daemon/src ./tests",
59
+ "lint:fix": "pnpm format && oxlint --fix ./src ./shared/src ./daemon/src ./tests",
60
+ "standalone:post-sync": "tsx scripts/post-sync.ts",
61
+ "prepublishOnly": "pnpm run lint && pnpm run typecheck && pnpm run test && pnpm run build"
65
62
  },
66
63
  "dependencies": {
67
- "arkregex": "^0.0.5",
68
- "chrome-cookies-secure": "^3.0.0",
69
- "commander": "^14.0.2",
70
- "dotenv": "^17.2.3",
71
- "es-toolkit": "^1.43.0",
64
+ "@steipete/sweet-cookie": "0.4.1",
65
+ "arkregex": "^0.0.8",
66
+ "commander": "^15.0.0",
67
+ "dotenv": "^17.4.2",
68
+ "es-toolkit": "^1.50.0",
72
69
  "html2canvas": "^1.4.1",
73
- "playwright-core": "^1.57.0",
74
- "puppeteer": "^24.34.0",
70
+ "playwright-core": "^1.62.1",
71
+ "puppeteer-core": "^25.5.0",
75
72
  "random-word-slugs": "^0.1.7",
76
73
  "tldjs": "^2.3.2",
77
- "undici": "^7.16.0",
78
- "ws": "^8.18.3",
79
- "zod": "^4.2.1"
74
+ "undici": "^8.10.0",
75
+ "ws": "^8.21.3",
76
+ "zod": "^4.4.3"
80
77
  },
81
- "scripts": {
82
- "dev": "tsx src/index.ts",
83
- "build": "tsc --project tsconfig.build.json",
84
- "test": "vitest run --config vitest.config.ts",
85
- "lint": "biome lint ./src ./shared/src ./daemon/src ./tests",
86
- "standalone:post-sync": "tsx scripts/post-sync.ts"
87
- }
88
- }
78
+ "devDependencies": {
79
+ "@types/node": "^26.2.0",
80
+ "@types/ws": "^8.18.1",
81
+ "@typescript/native": "npm:typescript@^7.0.2",
82
+ "jsdom": "^30.0.1",
83
+ "oxfmt": "^0.62.0",
84
+ "oxlint": "^1.77.0",
85
+ "tsx": "^4.23.11",
86
+ "typescript": "npm:@typescript/typescript6@^6.0.2",
87
+ "ultracite": "^7.10.2",
88
+ "vite": "^8.2.1",
89
+ "vitest": "^4.1.10"
90
+ },
91
+ "engines": {
92
+ "node": ">=24.0.0",
93
+ "pnpm": ">=11.11.0"
94
+ },
95
+ "packageManager": "pnpm@11.11.0"
96
+ }