@torrow/sdk-auth 0.9.1 → 0.11.0

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/node.js CHANGED
@@ -20,7 +20,9 @@ var FileTokenStorage = class _FileTokenStorage {
20
20
  try {
21
21
  const raw = await readFile(this.filePath, "utf8");
22
22
  const parsed = JSON.parse(raw);
23
- if (parsed === null || typeof parsed !== "object") return {};
23
+ if (parsed === null || typeof parsed !== "object") {
24
+ return {};
25
+ }
24
26
  const o = parsed;
25
27
  return {
26
28
  accessToken: o.accessToken?.trim() || void 0,
@@ -30,7 +32,9 @@ var FileTokenStorage = class _FileTokenStorage {
30
32
  };
31
33
  } catch (e) {
32
34
  const code = typeof e === "object" && e !== null && "code" in e ? e.code : "";
33
- if (code === "ENOENT") return {};
35
+ if (code === "ENOENT") {
36
+ return {};
37
+ }
34
38
  throw e;
35
39
  }
36
40
  }
package/dist/node.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/auth-session/file-token-storage.ts"],"sourcesContent":["/**\n * JSON-файл токенов (Node) — реализация {@link TokenStorage}.\n *\n * Канон для `examples/node` и быстрого ручного теста\n * (`TORROW_TOKEN_FILE` / `.torrow-session.json`). Поля snapshot:\n * access / refresh / `accessExpiresAtMs` / `deviceId`.\n *\n * Обычно передаётся в `TorrowAuth.connect` / `login*` как `tokenStorage`.\n */\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\nimport type { AuthTokenSnapshot, TokenStorage } from \"./types.js\";\n\nexport type OpenedFileTokenStorage = {\n tokenStorage: FileTokenStorage;\n filePath: string;\n /** Снимок сразу после `load()` (до последующих `save` сессии). */\n snapshot: AuthTokenSnapshot;\n};\n\n/**\n * JSON-файл сессии (Node): access / refresh / TTL / `deviceId`.\n *\n * @example\n * ```ts\n * const tokenStorage = new FileTokenStorage(process.env.TOKEN_FILE!);\n * const { client } = await TorrowAuth.connect({ tokenStorage, appCredentials, deviceInfo });\n * ```\n */\nexport class FileTokenStorage implements TokenStorage {\n constructor(readonly filePath: string) {}\n\n /** Создать tokenStorage и сразу прочитать файл (нет файла → пустой snapshot). */\n static async open(filePath: string): Promise<OpenedFileTokenStorage> {\n const trimmed = filePath.trim();\n if (!trimmed) {\n throw new Error(\"FileTokenStorage.open: пустой filePath\");\n }\n const tokenStorage = new FileTokenStorage(trimmed);\n const snapshot = await tokenStorage.load();\n return { tokenStorage, filePath: trimmed, snapshot };\n }\n\n async load(): Promise<AuthTokenSnapshot> {\n try {\n const raw = await readFile(this.filePath, \"utf8\");\n const parsed = JSON.parse(raw) as unknown;\n if (parsed === null || typeof parsed !== \"object\") return {};\n const o = parsed as AuthTokenSnapshot;\n return {\n accessToken: o.accessToken?.trim() || undefined,\n refreshToken: o.refreshToken?.trim() || undefined,\n accessExpiresAtMs:\n typeof o.accessExpiresAtMs === \"number\" && o.accessExpiresAtMs > 0\n ? o.accessExpiresAtMs\n : undefined,\n deviceId: o.deviceId?.trim() || undefined,\n };\n } catch (e: unknown) {\n const code =\n typeof e === \"object\" && e !== null && \"code\" in e ? (e as { code?: string }).code : \"\";\n if (code === \"ENOENT\") return {};\n throw e;\n }\n }\n\n async save(snapshot: AuthTokenSnapshot): Promise<void> {\n await mkdir(dirname(this.filePath), { recursive: true });\n const payload: AuthTokenSnapshot = {\n accessToken: snapshot.accessToken?.trim() || undefined,\n refreshToken: snapshot.refreshToken?.trim() || undefined,\n accessExpiresAtMs: snapshot.accessExpiresAtMs || undefined,\n deviceId: snapshot.deviceId?.trim() || undefined,\n };\n await writeFile(this.filePath, `${JSON.stringify(payload, null, 2)}\\n`, \"utf8\");\n }\n}\n"],"mappings":";AASA,SAAS,OAAO,UAAU,iBAAiB;AAC3C,SAAS,eAAe;AAmBjB,IAAM,mBAAN,MAAM,kBAAyC;AAAA,EACpD,YAAqB,UAAkB;AAAlB;AAAA,EAAmB;AAAA,EAAnB;AAAA;AAAA,EAGrB,aAAa,KAAK,UAAmD;AACnE,UAAM,UAAU,SAAS,KAAK;AAC9B,QAAI,CAAC,SAAS;AACZ,YAAM,IAAI,MAAM,sEAAwC;AAAA,IAC1D;AACA,UAAM,eAAe,IAAI,kBAAiB,OAAO;AACjD,UAAM,WAAW,MAAM,aAAa,KAAK;AACzC,WAAO,EAAE,cAAc,UAAU,SAAS,SAAS;AAAA,EACrD;AAAA,EAEA,MAAM,OAAmC;AACvC,QAAI;AACF,YAAM,MAAM,MAAM,SAAS,KAAK,UAAU,MAAM;AAChD,YAAM,SAAS,KAAK,MAAM,GAAG;AAC7B,UAAI,WAAW,QAAQ,OAAO,WAAW,SAAU,QAAO,CAAC;AAC3D,YAAM,IAAI;AACV,aAAO;AAAA,QACL,aAAa,EAAE,aAAa,KAAK,KAAK;AAAA,QACtC,cAAc,EAAE,cAAc,KAAK,KAAK;AAAA,QACxC,mBACE,OAAO,EAAE,sBAAsB,YAAY,EAAE,oBAAoB,IAC7D,EAAE,oBACF;AAAA,QACN,UAAU,EAAE,UAAU,KAAK,KAAK;AAAA,MAClC;AAAA,IACF,SAAS,GAAY;AACnB,YAAM,OACJ,OAAO,MAAM,YAAY,MAAM,QAAQ,UAAU,IAAK,EAAwB,OAAO;AACvF,UAAI,SAAS,SAAU,QAAO,CAAC;AAC/B,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAM,KAAK,UAA4C;AACrD,UAAM,MAAM,QAAQ,KAAK,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;AACvD,UAAM,UAA6B;AAAA,MACjC,aAAa,SAAS,aAAa,KAAK,KAAK;AAAA,MAC7C,cAAc,SAAS,cAAc,KAAK,KAAK;AAAA,MAC/C,mBAAmB,SAAS,qBAAqB;AAAA,MACjD,UAAU,SAAS,UAAU,KAAK,KAAK;AAAA,IACzC;AACA,UAAM,UAAU,KAAK,UAAU,GAAG,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAAA,GAAM,MAAM;AAAA,EAChF;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../src/auth-session/file-token-storage.ts"],"sourcesContent":["/**\n * JSON-файл токенов (Node) — реализация {@link TokenStorage}.\n *\n * Канон для `examples/node` и быстрого ручного теста\n * (`TORROW_TOKEN_FILE` / `.torrow-session.json`). Поля snapshot:\n * access / refresh / `accessExpiresAtMs` / `deviceId`.\n *\n * Обычно передаётся в `TorrowAuth.connect` / `login*` как `tokenStorage`.\n */\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\nimport type { AuthTokenSnapshot, TokenStorage } from \"./types.js\";\n\nexport type OpenedFileTokenStorage = {\n tokenStorage: FileTokenStorage;\n filePath: string;\n /** Снимок сразу после `load()` (до последующих `save` сессии). */\n snapshot: AuthTokenSnapshot;\n};\n\n/**\n * JSON-файл сессии (Node): access / refresh / TTL / `deviceId`.\n *\n * @example\n * ```ts\n * const tokenStorage = new FileTokenStorage(process.env.TOKEN_FILE!);\n * const { client } = await TorrowAuth.connect({ tokenStorage, appCredentials, deviceInfo });\n * ```\n */\nexport class FileTokenStorage implements TokenStorage {\n constructor(readonly filePath: string) {}\n\n /** Создать tokenStorage и сразу прочитать файл (нет файла → пустой snapshot). */\n static async open(filePath: string): Promise<OpenedFileTokenStorage> {\n const trimmed = filePath.trim();\n if (!trimmed) {\n throw new Error(\"FileTokenStorage.open: пустой filePath\");\n }\n const tokenStorage = new FileTokenStorage(trimmed);\n const snapshot = await tokenStorage.load();\n\n return { tokenStorage, filePath: trimmed, snapshot };\n }\n\n async load(): Promise<AuthTokenSnapshot> {\n try {\n const raw = await readFile(this.filePath, \"utf8\");\n const parsed = JSON.parse(raw) as unknown;\n if (parsed === null || typeof parsed !== \"object\") {\n return {};\n }\n const o = parsed as AuthTokenSnapshot;\n\n return {\n accessToken: o.accessToken?.trim() || undefined,\n refreshToken: o.refreshToken?.trim() || undefined,\n accessExpiresAtMs:\n typeof o.accessExpiresAtMs === \"number\" && o.accessExpiresAtMs > 0 ? o.accessExpiresAtMs : undefined,\n deviceId: o.deviceId?.trim() || undefined,\n };\n } catch (e: unknown) {\n const code = typeof e === \"object\" && e !== null && \"code\" in e ? (e as { code?: string }).code : \"\";\n if (code === \"ENOENT\") {\n return {};\n }\n throw e;\n }\n }\n\n async save(snapshot: AuthTokenSnapshot): Promise<void> {\n await mkdir(dirname(this.filePath), { recursive: true });\n const payload: AuthTokenSnapshot = {\n accessToken: snapshot.accessToken?.trim() || undefined,\n refreshToken: snapshot.refreshToken?.trim() || undefined,\n accessExpiresAtMs: snapshot.accessExpiresAtMs || undefined,\n deviceId: snapshot.deviceId?.trim() || undefined,\n };\n await writeFile(this.filePath, `${JSON.stringify(payload, null, 2)}\\n`, \"utf8\");\n }\n}\n"],"mappings":";AASA,SAAS,OAAO,UAAU,iBAAiB;AAC3C,SAAS,eAAe;AAmBjB,IAAM,mBAAN,MAAM,kBAAyC;AAAA,EACpD,YAAqB,UAAkB;AAAlB;AAAA,EAAmB;AAAA,EAAnB;AAAA;AAAA,EAGrB,aAAa,KAAK,UAAmD;AACnE,UAAM,UAAU,SAAS,KAAK;AAC9B,QAAI,CAAC,SAAS;AACZ,YAAM,IAAI,MAAM,sEAAwC;AAAA,IAC1D;AACA,UAAM,eAAe,IAAI,kBAAiB,OAAO;AACjD,UAAM,WAAW,MAAM,aAAa,KAAK;AAEzC,WAAO,EAAE,cAAc,UAAU,SAAS,SAAS;AAAA,EACrD;AAAA,EAEA,MAAM,OAAmC;AACvC,QAAI;AACF,YAAM,MAAM,MAAM,SAAS,KAAK,UAAU,MAAM;AAChD,YAAM,SAAS,KAAK,MAAM,GAAG;AAC7B,UAAI,WAAW,QAAQ,OAAO,WAAW,UAAU;AACjD,eAAO,CAAC;AAAA,MACV;AACA,YAAM,IAAI;AAEV,aAAO;AAAA,QACL,aAAa,EAAE,aAAa,KAAK,KAAK;AAAA,QACtC,cAAc,EAAE,cAAc,KAAK,KAAK;AAAA,QACxC,mBACE,OAAO,EAAE,sBAAsB,YAAY,EAAE,oBAAoB,IAAI,EAAE,oBAAoB;AAAA,QAC7F,UAAU,EAAE,UAAU,KAAK,KAAK;AAAA,MAClC;AAAA,IACF,SAAS,GAAY;AACnB,YAAM,OAAO,OAAO,MAAM,YAAY,MAAM,QAAQ,UAAU,IAAK,EAAwB,OAAO;AAClG,UAAI,SAAS,UAAU;AACrB,eAAO,CAAC;AAAA,MACV;AACA,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAM,KAAK,UAA4C;AACrD,UAAM,MAAM,QAAQ,KAAK,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;AACvD,UAAM,UAA6B;AAAA,MACjC,aAAa,SAAS,aAAa,KAAK,KAAK;AAAA,MAC7C,cAAc,SAAS,cAAc,KAAK,KAAK;AAAA,MAC/C,mBAAmB,SAAS,qBAAqB;AAAA,MACjD,UAAU,SAAS,UAAU,KAAK,KAAK;AAAA,IACzC;AACA,UAAM,UAAU,KAAK,UAAU,GAAG,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAAA,GAAM,MAAM;AAAA,EAChF;AACF;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@torrow/sdk-auth",
3
- "version": "0.9.1",
3
+ "version": "0.11.0",
4
4
  "description": "TorrowAuth session facade for @torrow/sdk-client (connect, OTP, link login, storage, 401 retry)",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "type": "module",
@@ -28,10 +28,10 @@
28
28
  "access": "public"
29
29
  },
30
30
  "peerDependencies": {
31
- "@torrow/sdk-client": "^0.9.1"
31
+ "@torrow/sdk-client": "^0.11.0"
32
32
  },
33
33
  "dependencies": {
34
- "@torrow/sdk-client": "^0.9.1"
34
+ "@torrow/sdk-client": "^0.11.0"
35
35
  },
36
36
  "scripts": {
37
37
  "build": "tsup",