Commit Graph

41 Commits

Author SHA1 Message Date
liuyi
5b315bfc81 fix(server): only returns active subscriptions (#6590) 2024-04-17 16:19:34 +08:00
forehalo
e1c292b8b5 feat(server): support registering ai early access users (#6565) 2024-04-16 13:54:08 +00:00
darkskygit
677c4711df feat: unsplash api proxy (#6572) 2024-04-16 13:33:07 +00:00
darkskygit
1b0864eb60 feat: check quota correctly (#6561) 2024-04-16 09:41:48 +00:00
darkskygit
2336638996 fix: cannot query chat history (#6539) 2024-04-12 12:16:43 +00:00
darkskygit
fc51b68674 fix: pick copilot provider depend on model (#6540) 2024-04-12 12:01:39 +00:00
darkskygit
e77475aca5 feat: detailed copilot histories (#6523) 2024-04-12 08:39:32 +00:00
fundon
13b39fc5f3 feat(core): ai images (#6506) 2024-04-12 03:58:33 +00:00
DarkSky
db1206dbd5 fix: re-create session should skip rewrite messages (#6513) 2024-04-11 12:22:45 +08:00
darkskygit
9f349a2300 feat: text to image impl (#6437)
fix CLOUD-18
fix CLOUD-28
fix CLOUD-29
2024-04-10 12:13:39 +00:00
darkskygit
7c38a54f81 feat: copilot controller (#6272)
fix CLOUD-27
2024-04-10 11:58:40 +00:00
darkskygit
e6a576551a feat: add copilot impl (#6230)
fix CLOUD-22
fix CLOUD-24
2024-04-10 11:15:32 +00:00
darkskygit
46a368d7f1 feat: add session impl (#6254) 2024-04-10 11:15:25 +00:00
forehalo
b01a8bb2ab fix(server): give s3 client a default request timeout (#6483) 2024-04-08 08:41:55 +00:00
liuyi
edef9b2735 fix(server): only auto apply coupon in pro subscription (#6452) 2024-04-03 17:13:18 +08:00
darkskygit
3c01d944fb feat: add prompt service (#6241)
fix CLOUD-19
2024-04-02 07:04:54 +00:00
darkskygit
593161dccb feat: basic copilot plugin implement (#6229)
fix CLOUD-25
2024-04-02 07:04:49 +00:00
forehalo
1a1af83375 test(server): auth tests (#6135) 2024-03-26 02:24:17 +00:00
EYHN
f2adbdaba4 style: enable import-x/no-duplicates (#6279) 2024-03-25 03:55:33 +00:00
Brooooooklyn
10af0ab48d feat(server): support ai plan (#6216) 2024-03-22 08:39:18 +00:00
Brooooooklyn
aecc523663 fix(server): avoid error when other prices added but logic is not released (#6191) 2024-03-22 08:39:12 +00:00
liuyi
06a5b2e5a5 fix(server): wrong google oauth param (#6227) 2024-03-20 17:45:22 +08:00
DarkSky
da32682afb fix(server): handle expired lock re-release & external locker injection (#6145) 2024-03-19 02:16:47 +00:00
liuyi
4702c1a9ca fix(server): inject correct locker to request scope mutex (#6140) 2024-03-19 02:16:35 +00:00
DarkSky
f18133af82 fix(server): wrap read-modify-write apis with distributed lock (#6142) 2024-03-19 02:16:24 +00:00
liuyi
e94be8968b fix(server): hotfix (#6161) 2024-03-18 10:41:11 +08:00
LongYinan
bc465f9704 Revert "fix(server): wrap read-modify-write apis with distributed lock (#5979)"
This reverts commit 34f892b05b.
2024-03-15 16:55:48 +08:00
DarkSky
34f892b05b fix(server): wrap read-modify-write apis with distributed lock (#5979) 2024-03-15 13:31:11 +08:00
liuyi
f2ec81b2d0 feat(server): user connected accounts migration (#6103) 2024-03-13 09:28:52 +00:00
liuyi
573528be41 fix(server): user can not signup through oauth if ever invited (#6101) 2024-03-13 07:50:11 +00:00
liuyi
fb3a0e7b8f refactor(server): auth (#5895)
Remove `next-auth` and implement our own Authorization/Authentication system from scratch.

## Server

- [x] tokens
  - [x] function
  - [x] encryption

- [x] AuthController
  - [x] /api/auth/sign-in
  - [x] /api/auth/sign-out
  - [x] /api/auth/session
  - [x] /api/auth/session (WE SUPPORT MULTI-ACCOUNT!)

- [x] OAuthPlugin
  - [x] OAuthController
  - [x] /oauth/login
  - [x] /oauth/callback
  - [x] Providers
    - [x] Google
    - [x] GitHub

## Client

- [x] useSession
- [x] cloudSignIn
- [x] cloudSignOut

## NOTE:

Tests will be adding in the future
2024-03-12 10:00:09 +00:00
DarkSky
3432f355b0 feat: backend module awareness & optional request (#5909) 2024-02-28 08:29:37 +00:00
liuyi
4d421a324f refactor(server): import prisma from @prisma/client (#5863) 2024-02-22 07:46:57 +00:00
liuyi
296d47f102 refactor(server): separate s3 & r2 storage to plugin (#5805) 2024-02-05 15:10:09 +00:00
liuyi
d9c2dc8dfb fix(server): apply env overrides after all config merged (#5795) 2024-02-04 06:38:31 +00:00
liuyi
bef266ae3b refactor(server): reorganize server configs (#5753) 2024-02-02 08:32:07 +00:00
LongYinan
e26d978b26 fix(server): resolve cherry-pick issue 2024-01-31 22:00:20 +08:00
liuyi
e3b8d0dba4 feat(server): allow pass coupon to checkout session (#5749) 2024-01-31 21:34:22 +08:00
liuyi
26db1d436d refactor(server): server errors (#5741)
standardize the error raising in both GraphQL Resolvers and Controllers.

Now, All user aware errors should be throwed with `HttpException`'s variants, for example `NotFoundException`.

> Directly throwing `GraphQLError` are forbidden.
The GraphQL errorFormatter will handle it automatically and set `code`, `status` in error extensions.

At the same time, the frontend `GraphQLError` should be imported from `@affine/graphql`, which introduce a better error extensions type.

----
controller example:
```js
@Get('/docs/${id}')
doc() {
  // ...
  // imported from '@nestjs/common'
  throw new NotFoundException('Doc is not found.');
  // ...
}
```
the above will response as:
```
status: 404 Not Found
{
  "message": "Doc is not found.",
  "statusCode": 404,
  "error": "Not Found"
}
```

resolver example:
```js
@Mutation()
invite() {
  // ...
  throw new PayloadTooLargeException('Workspace seats is full.')
  // ...
}
```

the above will response as:
```
status: 200 Ok
{
  "data": null,
  "errors": [
    {
      "message": "Workspace seats is full.",
      "extensions": {
        "code": 404,
        "status": "Not Found"
      }
    }
  ]
}
```

for frontend GraphQLError user-friend, a helper function introduced:

```js
import { findGraphQLError } from '@affine/graphql'

fetch(query)
  .catch(errOrArr => {
    const e = findGraphQLError(errOrArr, e => e.extensions.code === 404)
    if (e) {
      // handle
    }
})
```
2024-01-31 08:43:03 +00:00
liuyi
151a53c575 fix(server): disable payment module requirements temporarily (#5683) 2024-01-24 03:17:21 +00:00
liuyi
e516e0db23 refactor(server): plugin modules (#5630)
- [x] separates modules into `fundamental`, `core`, `plugins`
- [x] optional modules with `@OptionalModule` decorator to install modules with requirements met(`requires`, `if`)
- [x] `module.contributesTo` defines optional features that will be enabled if module registered
- [x] `AFFiNE.plugins.use('payment', {})` to enable a optional/plugin module
- [x] `PaymentModule` is the first plugin module
- [x] GraphQLSchema will not be generated for non-included modules
- [x] Frontend can use `ServerConfigType` query to detect which features are enabled
- [x] override existing provider globally
2024-01-22 07:40:28 +00:00