ts-synology-api
TypeScript icon, indicating that this package has built-in type declarations

1.4.1 • Public • Published

ts-synology-api

Api to wrap Syno API wrote in ts, npm package's transpiled in js

import Syno from "ts-synology-api";

Coverage

  • [x] api
    • [x] auth
      • [x] key
    • [x] info
  • [x] core
    • [x] normal-user
      • [x] login-notify
  • [ ] download-station
    • [x] info
    • [x] rss
      • [x] site
      • [x] feed
    • [x] schedule
    • [x] statistic
    • [x] task
    • [ ] bt-search
  • [ ] dsm
    • [x] info
  • [ ] file-station
    • [x] info
    • [x] list

Configuration

# .env for process.env global
SYNOLOGY_URI="http[s]://ip:port"
SYNOLOGY_USER="user"
SYNOLOGY_PASS="passwd"

How Api was build

  • repository 're real path except when 're parameters
  • api request 're save in Index
  • return types 're optionals and save in Type.return
  • params types 're optionals and save in Type.params
  • body params types 're save in Type.body
  • default params 're undefined if needed, they're update with explicite params

How to test

    mkdir test-ts-synology-api && cd test-ts-synology-api
    # globaly install next and typescript
    npm i -g create-next-app typescript
    # create next app in the current folder
    create-next-app ./
    # create typescript config file
    tsc --init
    # run ur next app
    npm run dev
    # he tell u to install some dependencies
    npm install --save-dev typescript @types/react
    # clean ur app
    rm ./pages/**/*.js && rm -rf ./public ./styles
    # create ur .env file with ur config
    # run again ur app
    npm run dev
    # next ll detect ur tsconfig file and autofonfigure him
    # create ur first api file in the api folder and Enjoy 😀

Basic route

// pages/api/info/index.ts
import type { NextApiRequest, NextApiResponse } from "next";
import Syno from "ts-synology-api";

export default async (req: NextApiRequest, res: NextApiResponse) => {
  if (req.method != "GET") {
    return res.status(405).end("Method Not Allowed");
  }

  const query = await Syno.Api.Info.query();

  try {
    if (query.success && query.error?.code) {
      res.status(query.error?.code).json(query.error);
    }
    res.status(200).json(query.data);
  } catch (error) {
    console.error(error);
    res.status(500).end("");
  }
};
// pages/api/user.ts
import type { NextApiRequest, NextApiResponse } from "next";
import Syno from "ts-synology-api";
import { userParams } from "ts-synology-api/dist/core/normal-user/type.params";

export default async (req: NextApiRequest, res: NextApiResponse) => {
  if (req.method != "GET") {
    return res.status(405).end("Method Not Allowed");
  }

  const params: userParams = { _sid: (await Syno.Api.Auth.login()).data?.sid };

  const user = await Syno.Core.NormalUser.getUser(params);

  try {
    if (!user.success && user.error?.code) {
      const code = Syno.codeError(data);
      return res.status(code).json(user.error?.message || { user });
    }
    res.status(200).json(user.data);
  } catch (error) {
    console.error(error);
    res.status(500).end("");
  } finally {
    await Syno.Api.Auth.logout({ _sid: params._sid });
  }
};

Package Sidebar

Install

npm i ts-synology-api

Weekly Downloads

2

Version

1.4.1

License

MIT

Unpacked Size

162 kB

Total Files

120

Last publish

Collaborators

  • damienmillet