2.5.0-alpha.2 • Published 1 year ago

@synvox/core v2.5.0-alpha.2

Weekly downloads
47
License
MIT
Repository
github
Last release
1 year ago

@synvox/core

Core is a middleware for express that creates restful endpoints automatically. In development, Core will read your database schema and store its structure in a JSON file. It uses this information to create endpoints to read and write to these tables.

Authentication

const core = new Core((req, res) => {
  return {
    async getUser() {
      return await findUser(req.headers.authorization);
    },
  };
});

app.use("/api", core.router());

Core will create a context for each request. This context is created from the req and res objects and should provide enough information about the client sending the request, including information about the entity they are authenticating as.

You can use any type of authentication library here to populate the context object.

Authorization

const core = new Core((req, res) => {
  return {
    async getUser() {
      return await findUser(req.headers.authorization);
    },
  };
});

core.table({
  tableName: "users",
  async policy(stmt, context, mode) {
    const user = await context.getUser();
    stmt.where(`users.id`, user.id);
  },
});

app.use("/api", core.router());

// GET /api/users -> 200

Core tables have a policy method, where you can modify the query with the context defined earlier. In this case every query to users will now have where users.id = ? appended with user.id added as a binding.

A request's mode is also given which is "insert" | "read" | "update" | "delete". You can use this to create common authorization schemes like a twitter clone:

const core = new Core((req, res) => {
  return {
    async getUser() {
      return await findUser(req.headers.authorization);
    },
  };
});

core.table({
  tableName: "tweets",
  async policy(stmt, context, mode) {
    if (mode === "update") throw new NotAuthorizedError();

    if (mode !== "read") {
      const user = await context.getUser();
      stmt.where(`users.id`, user.id);
    }
  },
  async defaultParams(context, mode) {
    const user = await context.getUser();
    switch(mode){
      case: 'insert':
        return {
          userId: user.id
        }
      default:
        return {}
    }
  },
});

app.use("/api", core.router());

// POST /api/tweets { body: 'Hello World' } -> 200
// PUT /api/tweets/:id { body: 'Update' } -> 401
// GET /api/tweets/:id -> 200

Querying

const core = new Core((req, res) => {
  return {
    async getUser() {
      return await findUser(req.headers.authorization);
    },
  };
});

core.table({
  tableName: "people",
});

app.use("/api", core.router());

If a client requests

GET /api/products?name=Paper

Core will build a query like:

select
  products.name,
  products.price
from products
where products.name = ?
order by products.id
limit ?

Filters for each column on persons are avalible as a query param. Additionally, if you need to query given multiple values, use bracket notation: ?id[]=1&id[]=2.

2.5.0-alpha.83

1 year ago

2.5.0-alpha.82

1 year ago

2.5.0-alpha.81

2 years ago

2.5.0-alpha.80

2 years ago

2.5.0-alpha.79

2 years ago

2.5.0-alpha.78

2 years ago

2.5.0-alpha.77

2 years ago

2.5.0-alpha.72

2 years ago

2.5.0-alpha.71

2 years ago

2.5.0-alpha.75

2 years ago

2.5.0-alpha.70

2 years ago

2.5.0-alpha.69

2 years ago

2.5.0-alpha.67

2 years ago

2.5.0-alpha.66

2 years ago

2.5.0-alpha.65

2 years ago

2.5.0-alpha.63

2 years ago

2.5.0-alpha.60

2 years ago

2.5.0-alpha.59

2 years ago

2.5.0-alpha.58

2 years ago

2.5.0-alpha.57

2 years ago

2.5.0-alpha.56

2 years ago

2.5.0-alpha.55

2 years ago

2.5.0-alpha.24

3 years ago

2.5.0-alpha.23

3 years ago

2.5.0-alpha.22

3 years ago

2.5.0-alpha.21

3 years ago

2.5.0-alpha.20

3 years ago

2.5.0-alpha.19

3 years ago

2.5.0-alpha.18

3 years ago

2.5.0-alpha.17

3 years ago

2.5.0-alpha.16

3 years ago

2.5.0-alpha.15

3 years ago

2.5.0-alpha.14

3 years ago

2.5.0-alpha.13

3 years ago

2.5.0-alpha.12

3 years ago

2.5.0-alpha.11

3 years ago

2.5.0-alpha.10

3 years ago

2.5.0-alpha.7

3 years ago

2.5.0-alpha.5

3 years ago

2.5.0-alpha.3

3 years ago

2.5.0-alpha.4

3 years ago

2.5.0-alpha.1

3 years ago

2.5.0-alpha.0

3 years ago

2.5.0-alpha.2

3 years ago

2.4.0

3 years ago

2.3.2

3 years ago

2.3.1

3 years ago

2.1.1-2

3 years ago

2.1.1-1

3 years ago

2.1.1-4

3 years ago

2.1.1-3

3 years ago

2.1.1-6

3 years ago

2.1.1-5

3 years ago

2.3.1-alpha.1

3 years ago

2.3.1-alpha.2

3 years ago

2.3.1-alpha.0

3 years ago

2.3.1-alpha.5

3 years ago

2.3.1-alpha.6

3 years ago

2.3.1-alpha.3

3 years ago

2.3.1-alpha.4

3 years ago

2.3.1-alpha.7

3 years ago

2.1.1-0

3 years ago

2.1.0

3 years ago

2.0.0

3 years ago

2.0.0-19

3 years ago

2.0.0-20

3 years ago

2.0.0-18

3 years ago

2.0.0-17

3 years ago

2.0.0-16

3 years ago

2.0.0-15

3 years ago

2.0.0-13

3 years ago

2.0.0-12

3 years ago

2.0.0-11

3 years ago

2.0.0-10

3 years ago

2.0.0-6

3 years ago

2.0.0-9

3 years ago

2.0.0-8

3 years ago

2.0.0-7

3 years ago

2.0.0-5

3 years ago

2.0.0-4

3 years ago

2.0.0-3

3 years ago

2.0.0-2

3 years ago

2.0.0-1

3 years ago

2.0.0-0

3 years ago

1.0.0

3 years ago

1.0.0-12

3 years ago

1.0.0-11

3 years ago

1.0.0-9

3 years ago

1.0.0-8

3 years ago

1.0.0-10

3 years ago

1.0.0-7

3 years ago

1.0.0-5

3 years ago

1.0.0-6

3 years ago

1.0.0-4

3 years ago

1.0.0-1

3 years ago

1.0.0-3

3 years ago

1.0.0-2

3 years ago

1.0.0-0

3 years ago

0.12.0

3 years ago

0.10.0

3 years ago

0.9.11

3 years ago

0.9.10

3 years ago

0.9.9

4 years ago

0.9.8

4 years ago

0.9.7

4 years ago

0.9.6

4 years ago

0.9.5

4 years ago

0.9.4

4 years ago

0.9.3

4 years ago

0.9.2

4 years ago

0.9.1

4 years ago

0.9.0

4 years ago

0.8.14

4 years ago

0.8.13

4 years ago

0.8.12

4 years ago

0.8.9

4 years ago

0.8.8

4 years ago

0.8.11

4 years ago

0.8.10

4 years ago

0.8.7

4 years ago

0.8.6

4 years ago

0.8.5

4 years ago

0.8.4

4 years ago

0.8.3

4 years ago

0.8.2

4 years ago

0.8.1

4 years ago

0.8.0

4 years ago

0.7.0

4 years ago

0.6.3

4 years ago

0.6.2

4 years ago

0.6.1

4 years ago

0.6.0

4 years ago

0.5.1

4 years ago

0.5.0

4 years ago

0.4.0

4 years ago

0.3.0

4 years ago

0.2.1

4 years ago

0.2.0

4 years ago

0.1.0

4 years ago

0.0.4

4 years ago

0.0.3

4 years ago

0.0.2

4 years ago

0.0.1

4 years ago