diff --git a/code/allapp/allapp-go/biz/handler/auth/login_service.go b/code/allapp/allapp-go/biz/handler/auth/login_service.go
index 57a4ed56..431356ad 100644
--- a/code/allapp/allapp-go/biz/handler/auth/login_service.go
+++ b/code/allapp/allapp-go/biz/handler/auth/login_service.go
@@ -3,65 +3,289 @@
package auth
import (
+ "allapp/biz/model/auth"
+ "allapp/conf"
"allapp/db"
"allapp/db/repo"
- "allapp/logx"
+ "allapp/utils"
+ "allapp/utils/errorx"
+ "allapp/utils/httpx"
+ "allapp/utils/idgen"
"allapp/utils/jwtx"
"allapp/utils/response"
"context"
-
- "allapp/biz/model/auth"
+ "fmt"
"github.com/cloudwego/hertz/pkg/app"
"github.com/cloudwego/hertz/pkg/protocol/consts"
)
-// LoginDefault .
-// @router /auth/login/default [POST]
-func LoginDefault(ctx context.Context, c *app.RequestContext) {
- var err error
- var req auth.LoginDefaultReq
- err = c.BindAndValidate(&req)
- if err != nil {
+// LoginQq QQ 登录
+// @router /auth/login/qq [POST]
+func LoginQq(ctx context.Context, c *app.RequestContext) {
+ var req auth.LoginQqReq
+ if err := c.BindAndValidate(&req); err != nil {
c.String(consts.StatusBadRequest, err.Error())
return
}
- // 登录
- account := req.Account
- password := req.Password
+ resp := &auth.LoginResp{}
+ openid := req.Openid
+ nickname := req.Username
+ avatar := req.Avatar
- params := repo.GetUserForLoginParams{
- Account: account,
- Password: password,
- }
- loginUser, err := db.Queries.GetUserForLogin(ctx, params)
+ // ---------- 通用逻辑:查询用户 ----------
+ user, err := db.Queries.FindUserByOpenID(ctx, repo.FindUserByOpenIDParams{
+ Openid: openid,
+ Type: 1,
+ })
+
+ isExist := true
if err != nil {
- response.Fail(c).Message("账号或密码错误!").Send()
+ if errorx.IsNotFound(err) {
+ isExist = false
+ } else {
+ errorx.AddError(c, err)
+ return
+ }
+ }
+
+ if isExist {
+ if user.Status == 0 {
+ response.Fail(c).Message("账号已被禁用").Send()
+ return
+ }
+
+ _ = db.Queries.UpdateUserLastLoginTime(ctx, user.UserID)
+ token, _ := jwtx.CreateToken(user.UserID)
+
+ resp.Token = token
+ resp.UserId = user.UserID
+ resp.Username = user.Username
+ resp.Avatar = user.Avatar
+ response.Success(c).Data(resp).Send()
return
}
- // 异步更新登录事件
- go func(userID int64) {
- err = db.Queries.UpdateUserLoginLastTime(ctx, userID)
- if err != nil {
- logx.CtxError(ctx, "更新用户登录时间失败,UserID=%d, err=%v", loginUser.ID, err)
+ // ---------- 用户不存在 → 注册 ----------
+ registerUser(ctx, c, openid, nickname, avatar, 1)
+}
+
+// LoginWx 微信登录
+// @router /auth/login/wx [POST]
+func LoginWx(ctx context.Context, c *app.RequestContext) {
+ var req auth.LoginWxReq
+ if err := c.BindAndValidate(&req); err != nil {
+ c.String(consts.StatusBadRequest, err.Error())
+ return
+ }
+
+ resp := &auth.LoginResp{}
+ openid := ""
+ nickname := ""
+ avatar := ""
+ accessToken := ""
+
+ // 微信登录:code换access_token + openid
+ status, body, err := httpx.Get(ctx, "https://api.weixin.qq.com/sns/oauth2/access_token", map[string][]any{
+ "appid": {conf.GetConf().Wx.AppId},
+ "secret": {conf.GetConf().Wx.AppSecret},
+ "code": {req.Code},
+ "grant_type": {"authorization_code"},
+ })
+
+ if err != nil || status != 200 {
+ errorx.AddError(c, fmt.Errorf("获取 openid 失败: %w, body: %s", err, body))
+ return
+ }
+
+ accessMap, err := httpx.JSONStringToMap(body)
+
+ if err != nil {
+ errorx.AddError(c, fmt.Errorf("解析 access_token 失败: %w", err))
+ return
+ }
+
+ accessTokenVal, ok1 := accessMap["access_token"].(string)
+ openidVal, ok2 := accessMap["openid"].(string)
+ if !ok1 || !ok2 || accessTokenVal == "" || openidVal == "" {
+ errorx.AddError(c, fmt.Errorf("access_token 或 openid 不存在, body: %s", body))
+ return
+ }
+ openid = openidVal
+ accessToken = accessTokenVal
+
+ // ---------- 通用逻辑:查询用户 ----------
+ user, err := db.Queries.FindUserByOpenID(ctx, repo.FindUserByOpenIDParams{
+ Openid: openid,
+ Type: 0,
+ })
+
+ // 是否已注册
+ isExist := true
+
+ if err != nil {
+ if errorx.IsNotFound(err) {
+ isExist = false
+ } else {
+ errorx.AddError(c, err)
+ return
}
- }(loginUser.ID)
+ }
- // 包装数据
- token, err := jwtx.CreateAccessToken(loginUser.ID)
- refreshToken, err := jwtx.CreateRefreshToken(loginUser.ID)
+ if isExist {
+ if user.Status == 0 {
+ response.Fail(c).Message("账号已被禁用").Send()
+ return
+ }
- resp := new(auth.LoginDefaultResp)
+ _ = db.Queries.UpdateUserLastLoginTime(ctx, user.UserID)
+ token, _ := jwtx.CreateToken(user.UserID)
- resp.Token = token
- resp.RefreshToken = refreshToken
- resp.UserId = loginUser.ID
- resp.Gender = loginUser.Gender.Int32
- resp.SeqNo = loginUser.SeqNo.Int32
- resp.Username = loginUser.Username.String
+ resp.Token = token
+ resp.UserId = user.UserID
+ resp.Username = user.Username
+ resp.Avatar = user.Avatar
+ response.Success(c).Data(resp).Send()
+ return
+ }
+ // ---------- 用户不存在 → 注册 ----------
+ // 用 access_token 获取用户信息
+ status, body, err = httpx.Get(ctx, "https://api.weixin.qq.com/sns/userinfo", map[string][]any{
+ "access_token": {accessToken},
+ "openid": {openid},
+ })
+ if err != nil || status != 200 {
+ errorx.AddError(c, fmt.Errorf("获取用户信息失败: %w, body: %s", err, body))
+ return
+ }
+ userMap, err := httpx.JSONStringToMap(body)
+ if err != nil {
+ errorx.AddError(c, fmt.Errorf("解析用户信息失败: %w", err))
+ return
+ }
+ nickname, _ = userMap["nickname"].(string)
+ avatar, _ = userMap["headimgurl"].(string)
+
+ registerUser(ctx, c, openid, nickname, avatar, 0) // 0 = 微信
+}
+
+// registerUser 注册通用函数
+func registerUser(ctx context.Context, c *app.RequestContext, openid, nickname, avatar string, loginType int32) {
+ userId := idgen.NextId()
+ spaceId := idgen.NextId()
+
+ if nickname == "" {
+ nickname = fmt.Sprintf("用户_%d", userId)
+ }
+ if avatar == "" {
+ avatar = "https://default-avatar-url.com/default.png"
+ }
+
+ err := db.WithTx(ctx, func(q *repo.Queries) error {
+ // 生成唯一邀请码
+ var inviteCode string
+ for {
+ code := utils.GenerateCode(6)
+ _, err := q.FindSpaceByInviteCode(ctx, code)
+ if errorx.IsNotFound(err) {
+ inviteCode = code
+ break
+ } else if err != nil {
+ return err
+ }
+ }
+
+ // 插入空间
+ if err := q.InsertSpace(ctx, repo.InsertSpaceParams{
+ ID: spaceId,
+ InviteCode: inviteCode,
+ }); err != nil {
+ return err
+ }
+
+ // 插入空间用户
+ if err := q.InsertSpaceUser(ctx, repo.InsertSpaceUserParams{
+ ID: idgen.NextId(),
+ SpaceID: spaceId,
+ UserID: userId,
+ }); err != nil {
+ return err
+ }
+
+ // 插入用户
+ if err := q.InsertUser(ctx, repo.InsertUserParams{
+ ID: userId,
+ Username: nickname,
+ Avatar: avatar,
+ Status: 1,
+ }); err != nil {
+ return err
+ }
+
+ // 插入第三方登录信息
+ if err := q.InsertUserOAuth(ctx, repo.InsertUserOAuthParams{
+ ID: idgen.NextId(),
+ UserID: userId,
+ Type: loginType,
+ Openid: openid,
+ }); err != nil {
+ return err
+ }
+
+ // 初始化记账分类
+ if err := initMoneyCategoryTx(ctx, q, userId); err != nil {
+ return fmt.Errorf("初始化记账分类失败: %w", err)
+ }
+
+ return nil
+ })
+
+ if err != nil {
+ errorx.AddError(c, err)
+ return
+ }
+
+ token, _ := jwtx.CreateToken(userId)
+ resp := &auth.LoginResp{
+ Token: token,
+ UserId: userId,
+ Username: nickname,
+ Avatar: avatar,
+ }
response.Success(c).Data(resp).Send()
}
+
+func initMoneyCategoryTx(ctx context.Context, q *repo.Queries, userId int64) error {
+ sysCategories, err := q.ListMoneySysCategory(ctx)
+ if err != nil {
+ return err
+ }
+ if len(sysCategories) == 0 {
+ return nil
+ }
+
+ userCategories := make([]repo.BatchInsertMoneyUserCategoriesParams, 0, len(sysCategories))
+ for _, sysCat := range sysCategories {
+ userCategories = append(userCategories, repo.BatchInsertMoneyUserCategoriesParams{
+ ID: idgen.NextId(),
+ UserID: userId,
+ Name: sysCat.Name,
+ Icon: sysCat.Icon,
+ Type: sysCat.Type,
+ SortNumber: sysCat.SortNumber,
+ })
+ }
+
+ if err := q.DeleteMoneyCategoryByUserId(ctx, userId); err != nil {
+ return err
+ }
+
+ if _, err := q.BatchInsertMoneyUserCategories(ctx, userCategories); err != nil {
+ return err
+ }
+
+ return nil
+}
diff --git a/code/allapp/allapp-go/biz/handler/auth/register_service.go b/code/allapp/allapp-go/biz/handler/auth/register_service.go
deleted file mode 100644
index e8983e4c..00000000
--- a/code/allapp/allapp-go/biz/handler/auth/register_service.go
+++ /dev/null
@@ -1,138 +0,0 @@
-// Code generated by hertz generator.
-
-package auth
-
-import (
- auth "allapp/biz/model/auth"
- "allapp/db"
- "allapp/db/repo"
- "allapp/utils"
- "allapp/utils/errorx"
- "allapp/utils/idgen"
- "allapp/utils/pgtypex"
- "allapp/utils/response"
- "context"
-
- "github.com/cloudwego/hertz/pkg/app"
- "github.com/cloudwego/hertz/pkg/protocol/consts"
- "github.com/jackc/pgx/v5"
-)
-
-// RegisterDefault .
-// @router /auth/register/default [POST]
-func RegisterDefault(ctx context.Context, c *app.RequestContext) {
- var err error
- var req auth.RegisterDefaultReq
- err = c.BindAndValidate(&req)
- if err != nil {
- c.String(consts.StatusBadRequest, err.Error())
- return
- }
-
- account := req.Account
- password := req.Password
-
- _, err = db.Queries.GetUserByAccount(ctx, account)
- if err != nil {
- if errorx.IsNotFound(err) {
- // 忽略
- } else {
- errorx.AddError(c, err)
- return
- }
- } else {
- response.Fail(c).Message("该账号已被注册").Send()
- return
- }
-
- // 开启事务
- tx, err := db.DB.BeginTx(ctx, pgx.TxOptions{})
- if err != nil {
- errorx.AddError(c, err)
- return
- }
-
- defer func() {
- if err != nil {
- err := tx.Rollback(ctx)
- if err != nil {
- return
- }
- } else {
- err := tx.Commit(ctx)
- if err != nil {
- return
- }
- }
- }()
-
- generateCode, err := utils.GenerateCode(8)
- if err != nil {
- errorx.AddError(c, err)
- return
- }
-
- // 插入用户
- params := repo.InsertUserParams{
- ID: idgen.NextId(),
- Account: account,
- Password: password,
- Username: pgtypex.StringToText("a_" + generateCode),
- }
-
- insert, err := db.Queries.WithTx(tx).InsertUser(ctx, params)
- if err != nil || insert == 0 {
- errorx.AddError(c, err)
- return
- }
-
- // 初始化用户分类
- err = InitMoneyCategoryTx(ctx, tx, params.ID)
- if err != nil {
- errorx.AddError(c, err)
- return
- }
-
- // 注册成功
- response.Success(c).Message("注册成功").Send()
-}
-
-func InitMoneyCategoryTx(
- ctx context.Context,
- tx pgx.Tx,
- userId int64,
-) error {
-
- q := db.Queries.WithTx(tx)
-
- sysCategories, err := q.ListMoneySysCategory(ctx)
- if err != nil {
- return err
- }
- if len(sysCategories) == 0 {
- return nil
- }
-
- userCategories := make([]repo.BatchInsertMoneyUserCategoriesParams, 0, len(sysCategories))
- for _, sysCat := range sysCategories {
- userCategories = append(userCategories, repo.BatchInsertMoneyUserCategoriesParams{
- ID: idgen.NextId(),
- UserID: userId,
- Name: sysCat.Name,
- Icon: sysCat.Icon,
- Type: sysCat.Type,
- SortNumber: sysCat.SortNumber,
- })
- }
-
- // ⚠️ 注意:这里是 DeleteMoneyCategoryByUserId,不是 ById(你代码里疑似写错)
- if err := q.DeleteMoneyCategoryByUserId(ctx, userId); err != nil {
- return err
- }
-
- if _, err := q.BatchInsertMoneyUserCategories(ctx, userCategories); err != nil {
- return err
- }
-
- return nil
-}
diff --git a/code/allapp/allapp-go/biz/handler/auth/token_service.go b/code/allapp/allapp-go/biz/handler/auth/token_service.go
deleted file mode 100644
index 90a4f5c9..00000000
--- a/code/allapp/allapp-go/biz/handler/auth/token_service.go
+++ /dev/null
@@ -1,60 +0,0 @@
-// Code generated by hertz generator.
-
-package auth
-
-import (
- "allapp/utils/errorx"
- "allapp/utils/jwtx"
- "allapp/utils/response"
- "context"
-
- auth "allapp/biz/model/auth"
-
- "github.com/cloudwego/hertz/pkg/app"
- "github.com/cloudwego/hertz/pkg/protocol/consts"
-)
-
-// RefreshAccessToken .
-// @router /auth/refresh/token [GET]
-func RefreshAccessToken(ctx context.Context, c *app.RequestContext) {
- var err error
- var req auth.RefreshAccessTokenReq
- err = c.BindAndValidate(&req)
- if err != nil {
- c.String(consts.StatusBadRequest, err.Error())
- return
- }
-
- refreshToken := string(c.GetHeader("refreshToken"))
- if refreshToken == "" {
- response.Fail(c).
- Code(response.HttpCode.Unauthorized).
- Send()
- return
- }
-
- tokenResult := jwtx.VerifyToken(refreshToken)
-
- if !tokenResult.IsValid || tokenResult.IsExpired {
- // Refresh Token 无效或过期,需要重新登录
- response.Fail(c).
- Code(response.HttpCode.Unauthorized).
- Send()
- return
- }
-
- userID := tokenResult.Claims.UserID
- // 生成新的 Access Token
- newAccessToken, err := jwtx.CreateAccessToken(userID)
- if err != nil {
- errorx.AddError(c, err)
- return
- }
-
- resp := new(auth.RefreshAccessTokenResp)
- resp.AccessToken = newAccessToken
-
- response.Success(c).
- Data(resp).
- Send()
-}
diff --git a/code/allapp/allapp-go/biz/handler/space/space_service.go b/code/allapp/allapp-go/biz/handler/space/space_service.go
index bcfb5844..6643469c 100644
--- a/code/allapp/allapp-go/biz/handler/space/space_service.go
+++ b/code/allapp/allapp-go/biz/handler/space/space_service.go
@@ -6,9 +6,7 @@ import (
"allapp/biz/router/middleware"
"allapp/db"
"allapp/db/repo"
- "allapp/utils"
"allapp/utils/errorx"
- "allapp/utils/idgen"
"allapp/utils/response"
"context"
@@ -18,105 +16,6 @@ import (
"github.com/cloudwego/hertz/pkg/protocol/consts"
)
-// CreateSpace .
-// @router /space/create [POST]
-func CreateSpace(ctx context.Context, c *app.RequestContext) {
- var err error
- var req space.CreateSpaceParams
- err = c.BindAndValidate(&req)
- if err != nil {
- c.String(consts.StatusBadRequest, err.Error())
- return
- }
-
- userID := middleware.GetUserID(ctx)
-
- // 检查该用户是否已经加入空间了
- _, err = db.Queries.GetSpaceByUserId(ctx, userID)
-
- if err != nil {
- if errorx.IsNotFound(err) {
- // 忽略
- } else {
- errorx.AddError(c, err)
- return
- }
- } else {
- response.Fail(c).Message("请先退出已加入的空间").Send()
- return
- }
-
- // 生成邀请码
- var inviteCode string
-
- for {
- // 生成邀请码
- code, err := utils.GenerateCode(6)
- if err != nil {
- errorx.AddError(c, err)
- return
- }
-
- // 检查数据库是否存在
- _, err = db.Queries.GetSpaceByInviteCode(ctx, code)
- if err != nil {
- if errorx.IsNotFound(err) {
- // 不存在,唯一,直接使用
- inviteCode = code
- break
- } else {
- // 系统错误
- errorx.AddError(c, err)
- return
- }
- }
-
- // 如果存在,继续循环重新生成
- }
-
- spaceId := idgen.NextId()
-
- err = db.WithTx(ctx, func(q *repo.Queries) error {
- // 创建空间
- params := repo.InsertSpaceParams{
- ID: spaceId,
- InviteCode: inviteCode,
- }
-
- err = q.InsertSpace(ctx, params)
-
- if err != nil {
- return err
- }
- // 将创建用户默认添加到该空间内
- userParams := repo.InsertSpaceUserParams{
- ID: idgen.NextId(),
- SpaceID: spaceId,
- UserID: userID,
- Role: 0,
- }
- err := q.InsertSpaceUser(ctx, userParams)
-
- if err != nil {
- return err
- }
-
- return nil
- })
-
- if err != nil {
- errorx.AddError(c, err)
- return
- }
-
- resp := &space.CreateSpaceResult{
- Id: spaceId,
- InviteCode: inviteCode,
- }
-
- response.Success(c).Data(resp).Send()
-}
-
// DissolveSpace .
// @router /space/dissolve [POST]
func DissolveSpace(ctx context.Context, c *app.RequestContext) {
diff --git a/code/allapp/allapp-go/biz/handler/space/space_user_service.go b/code/allapp/allapp-go/biz/handler/space/space_user_service.go
index cfd9ba2a..0bc1a4e6 100644
--- a/code/allapp/allapp-go/biz/handler/space/space_user_service.go
+++ b/code/allapp/allapp-go/biz/handler/space/space_user_service.go
@@ -177,7 +177,7 @@ func JoinSpace(ctx context.Context, c *app.RequestContext) {
}
// 检查验证码是否有效
- spaceByCode, err := db.Queries.GetSpaceByInviteCode(ctx, inviteCode)
+ spaceByCode, err := db.Queries.FindSpaceByInviteCode(ctx, inviteCode)
if err != nil {
if errorx.IsNotFound(err) {
diff --git a/code/allapp/allapp-go/biz/model/auth/auth.pb.go b/code/allapp/allapp-go/biz/model/auth/auth.pb.go
index 277a34c6..f3061d50 100644
--- a/code/allapp/allapp-go/biz/model/auth/auth.pb.go
+++ b/code/allapp/allapp-go/biz/model/auth/auth.pb.go
@@ -1,7 +1,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.28.0
-// protoc v4.25.3
+// protoc v6.33.1
// source: auth.proto
package auth
@@ -21,18 +21,18 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
-// 登录请求
-type LoginDefaultReq struct {
+type LoginQqReq struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- Account string `protobuf:"bytes,1,opt,name=Account,proto3" form:"account" json:"account" vd:"$!=''"`
- Password string `protobuf:"bytes,2,opt,name=Password,proto3" form:"password" json:"password" vd:"$!=''"`
+ Openid string `protobuf:"bytes,1,opt,name=openid,proto3" form:"openid" json:"openid" query:"openid"`
+ Username string `protobuf:"bytes,2,opt,name=username,proto3" form:"username" json:"username" query:"username"`
+ Avatar string `protobuf:"bytes,3,opt,name=avatar,proto3" form:"avatar" json:"avatar" query:"avatar"`
}
-func (x *LoginDefaultReq) Reset() {
- *x = LoginDefaultReq{}
+func (x *LoginQqReq) Reset() {
+ *x = LoginQqReq{}
if protoimpl.UnsafeEnabled {
mi := &file_auth_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -40,13 +40,13 @@ func (x *LoginDefaultReq) Reset() {
}
}
-func (x *LoginDefaultReq) String() string {
+func (x *LoginQqReq) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*LoginDefaultReq) ProtoMessage() {}
+func (*LoginQqReq) ProtoMessage() {}
-func (x *LoginDefaultReq) ProtoReflect() protoreflect.Message {
+func (x *LoginQqReq) ProtoReflect() protoreflect.Message {
mi := &file_auth_proto_msgTypes[0]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -58,41 +58,42 @@ func (x *LoginDefaultReq) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use LoginDefaultReq.ProtoReflect.Descriptor instead.
-func (*LoginDefaultReq) Descriptor() ([]byte, []int) {
+// Deprecated: Use LoginQqReq.ProtoReflect.Descriptor instead.
+func (*LoginQqReq) Descriptor() ([]byte, []int) {
return file_auth_proto_rawDescGZIP(), []int{0}
}
-func (x *LoginDefaultReq) GetAccount() string {
+func (x *LoginQqReq) GetOpenid() string {
if x != nil {
- return x.Account
+ return x.Openid
}
return ""
}
-func (x *LoginDefaultReq) GetPassword() string {
+func (x *LoginQqReq) GetUsername() string {
if x != nil {
- return x.Password
+ return x.Username
}
return ""
}
-// 登录响应
-type LoginDefaultResp struct {
+func (x *LoginQqReq) GetAvatar() string {
+ if x != nil {
+ return x.Avatar
+ }
+ return ""
+}
+
+type LoginWxReq struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- Token string `protobuf:"bytes,1,opt,name=Token,proto3" form:"token" json:"token"`
- RefreshToken string `protobuf:"bytes,2,opt,name=RefreshToken,proto3" form:"refreshToken" json:"refreshToken"`
- UserId int64 `protobuf:"varint,3,opt,name=UserId,proto3" form:"userId" json:"userId"`
- Username string `protobuf:"bytes,4,opt,name=Username,proto3" form:"username" json:"username"`
- SeqNo int32 `protobuf:"varint,5,opt,name=SeqNo,proto3" form:"seqNo" json:"seqNo"`
- Gender int32 `protobuf:"varint,6,opt,name=Gender,proto3" form:"gender" json:"gender"`
+ Code string `protobuf:"bytes,1,opt,name=code,proto3" form:"code" json:"code" query:"code"`
}
-func (x *LoginDefaultResp) Reset() {
- *x = LoginDefaultResp{}
+func (x *LoginWxReq) Reset() {
+ *x = LoginWxReq{}
if protoimpl.UnsafeEnabled {
mi := &file_auth_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -100,13 +101,13 @@ func (x *LoginDefaultResp) Reset() {
}
}
-func (x *LoginDefaultResp) String() string {
+func (x *LoginWxReq) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*LoginDefaultResp) ProtoMessage() {}
+func (*LoginWxReq) ProtoMessage() {}
-func (x *LoginDefaultResp) ProtoReflect() protoreflect.Message {
+func (x *LoginWxReq) ProtoReflect() protoreflect.Message {
mi := &file_auth_proto_msgTypes[1]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -118,65 +119,36 @@ func (x *LoginDefaultResp) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use LoginDefaultResp.ProtoReflect.Descriptor instead.
-func (*LoginDefaultResp) Descriptor() ([]byte, []int) {
+// Deprecated: Use LoginWxReq.ProtoReflect.Descriptor instead.
+func (*LoginWxReq) Descriptor() ([]byte, []int) {
return file_auth_proto_rawDescGZIP(), []int{1}
}
-func (x *LoginDefaultResp) GetToken() string {
+func (x *LoginWxReq) GetCode() string {
if x != nil {
- return x.Token
+ return x.Code
}
return ""
}
-func (x *LoginDefaultResp) GetRefreshToken() string {
- if x != nil {
- return x.RefreshToken
- }
- return ""
-}
-
-func (x *LoginDefaultResp) GetUserId() int64 {
- if x != nil {
- return x.UserId
- }
- return 0
-}
-
-func (x *LoginDefaultResp) GetUsername() string {
- if x != nil {
- return x.Username
- }
- return ""
-}
-
-func (x *LoginDefaultResp) GetSeqNo() int32 {
- if x != nil {
- return x.SeqNo
- }
- return 0
-}
-
-func (x *LoginDefaultResp) GetGender() int32 {
- if x != nil {
- return x.Gender
- }
- return 0
-}
-
-// 注册请求
-type RegisterDefaultReq struct {
+// 登录响应
+type LoginResp struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- Account string `protobuf:"bytes,1,opt,name=Account,proto3" form:"account" json:"account" vd:"$!=''"`
- Password string `protobuf:"bytes,2,opt,name=Password,proto3" form:"password" json:"password" vd:"$!=''"`
+ // JWT
+ Token string `protobuf:"bytes,1,opt,name=token,proto3" form:"token" json:"token"`
+ // 用户ID
+ UserId int64 `protobuf:"varint,2,opt,name=userId,proto3" form:"userId" json:"userId"`
+ // 昵称
+ Username string `protobuf:"bytes,3,opt,name=username,proto3" form:"username" json:"username"`
+ // 头像
+ Avatar string `protobuf:"bytes,4,opt,name=avatar,proto3" form:"avatar" json:"avatar"`
}
-func (x *RegisterDefaultReq) Reset() {
- *x = RegisterDefaultReq{}
+func (x *LoginResp) Reset() {
+ *x = LoginResp{}
if protoimpl.UnsafeEnabled {
mi := &file_auth_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -184,13 +156,13 @@ func (x *RegisterDefaultReq) Reset() {
}
}
-func (x *RegisterDefaultReq) String() string {
+func (x *LoginResp) String() string {
return protoimpl.X.MessageStringOf(x)
}
-func (*RegisterDefaultReq) ProtoMessage() {}
+func (*LoginResp) ProtoMessage() {}
-func (x *RegisterDefaultReq) ProtoReflect() protoreflect.Message {
+func (x *LoginResp) ProtoReflect() protoreflect.Message {
mi := &file_auth_proto_msgTypes[2]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -202,147 +174,35 @@ func (x *RegisterDefaultReq) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
-// Deprecated: Use RegisterDefaultReq.ProtoReflect.Descriptor instead.
-func (*RegisterDefaultReq) Descriptor() ([]byte, []int) {
+// Deprecated: Use LoginResp.ProtoReflect.Descriptor instead.
+func (*LoginResp) Descriptor() ([]byte, []int) {
return file_auth_proto_rawDescGZIP(), []int{2}
}
-func (x *RegisterDefaultReq) GetAccount() string {
+func (x *LoginResp) GetToken() string {
if x != nil {
- return x.Account
+ return x.Token
}
return ""
}
-func (x *RegisterDefaultReq) GetPassword() string {
+func (x *LoginResp) GetUserId() int64 {
if x != nil {
- return x.Password
+ return x.UserId
+ }
+ return 0
+}
+
+func (x *LoginResp) GetUsername() string {
+ if x != nil {
+ return x.Username
}
return ""
}
-// 注册响应
-type RegisterDefaultResp struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-}
-
-func (x *RegisterDefaultResp) Reset() {
- *x = RegisterDefaultResp{}
- if protoimpl.UnsafeEnabled {
- mi := &file_auth_proto_msgTypes[3]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *RegisterDefaultResp) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*RegisterDefaultResp) ProtoMessage() {}
-
-func (x *RegisterDefaultResp) ProtoReflect() protoreflect.Message {
- mi := &file_auth_proto_msgTypes[3]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use RegisterDefaultResp.ProtoReflect.Descriptor instead.
-func (*RegisterDefaultResp) Descriptor() ([]byte, []int) {
- return file_auth_proto_rawDescGZIP(), []int{3}
-}
-
-// 刷新 access token 请求
-type RefreshAccessTokenReq struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-}
-
-func (x *RefreshAccessTokenReq) Reset() {
- *x = RefreshAccessTokenReq{}
- if protoimpl.UnsafeEnabled {
- mi := &file_auth_proto_msgTypes[4]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *RefreshAccessTokenReq) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*RefreshAccessTokenReq) ProtoMessage() {}
-
-func (x *RefreshAccessTokenReq) ProtoReflect() protoreflect.Message {
- mi := &file_auth_proto_msgTypes[4]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use RefreshAccessTokenReq.ProtoReflect.Descriptor instead.
-func (*RefreshAccessTokenReq) Descriptor() ([]byte, []int) {
- return file_auth_proto_rawDescGZIP(), []int{4}
-}
-
-// 刷新 access token 响应
-type RefreshAccessTokenResp struct {
- state protoimpl.MessageState
- sizeCache protoimpl.SizeCache
- unknownFields protoimpl.UnknownFields
-
- AccessToken string `protobuf:"bytes,1,opt,name=AccessToken,proto3" form:"accessToken" json:"accessToken"`
-}
-
-func (x *RefreshAccessTokenResp) Reset() {
- *x = RefreshAccessTokenResp{}
- if protoimpl.UnsafeEnabled {
- mi := &file_auth_proto_msgTypes[5]
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- ms.StoreMessageInfo(mi)
- }
-}
-
-func (x *RefreshAccessTokenResp) String() string {
- return protoimpl.X.MessageStringOf(x)
-}
-
-func (*RefreshAccessTokenResp) ProtoMessage() {}
-
-func (x *RefreshAccessTokenResp) ProtoReflect() protoreflect.Message {
- mi := &file_auth_proto_msgTypes[5]
- if protoimpl.UnsafeEnabled && x != nil {
- ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
- if ms.LoadMessageInfo() == nil {
- ms.StoreMessageInfo(mi)
- }
- return ms
- }
- return mi.MessageOf(x)
-}
-
-// Deprecated: Use RefreshAccessTokenResp.ProtoReflect.Descriptor instead.
-func (*RefreshAccessTokenResp) Descriptor() ([]byte, []int) {
- return file_auth_proto_rawDescGZIP(), []int{5}
-}
-
-func (x *RefreshAccessTokenResp) GetAccessToken() string {
+func (x *LoginResp) GetAvatar() string {
if x != nil {
- return x.AccessToken
+ return x.Avatar
}
return ""
}
@@ -351,70 +211,36 @@ var File_auth_proto protoreflect.FileDescriptor
var file_auth_proto_rawDesc = []byte{
0x0a, 0x0a, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x04, 0x61, 0x75,
- 0x74, 0x68, 0x1a, 0x09, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x74, 0x0a,
- 0x0f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x71,
- 0x12, 0x2e, 0x0a, 0x07, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x09, 0x42, 0x14, 0xca, 0xbb, 0x18, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0xda, 0xbb,
- 0x18, 0x05, 0x24, 0x21, 0x3d, 0x27, 0x27, 0x52, 0x07, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
- 0x12, 0x31, 0x0a, 0x08, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01,
- 0x28, 0x09, 0x42, 0x15, 0xca, 0xbb, 0x18, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64,
- 0xda, 0xbb, 0x18, 0x05, 0x24, 0x21, 0x3d, 0x27, 0x27, 0x52, 0x08, 0x50, 0x61, 0x73, 0x73, 0x77,
- 0x6f, 0x72, 0x64, 0x22, 0xfc, 0x01, 0x0a, 0x10, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x44, 0x65, 0x66,
- 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1f, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65,
- 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x09, 0xca, 0xbb, 0x18, 0x05, 0x74, 0x6f, 0x6b,
- 0x65, 0x6e, 0x52, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x34, 0x0a, 0x0c, 0x52, 0x65, 0x66,
- 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42,
- 0x10, 0xca, 0xbb, 0x18, 0x0c, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65,
- 0x6e, 0x52, 0x0c, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12,
- 0x22, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x42,
- 0x0a, 0xca, 0xbb, 0x18, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x52, 0x06, 0x55, 0x73, 0x65,
- 0x72, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18,
- 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xca, 0xbb, 0x18, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e,
- 0x61, 0x6d, 0x65, 0x52, 0x08, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a,
- 0x05, 0x53, 0x65, 0x71, 0x4e, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x42, 0x09, 0xca, 0xbb,
- 0x18, 0x05, 0x73, 0x65, 0x71, 0x4e, 0x6f, 0x52, 0x05, 0x53, 0x65, 0x71, 0x4e, 0x6f, 0x12, 0x22,
- 0x0a, 0x06, 0x47, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x42, 0x0a,
- 0xca, 0xbb, 0x18, 0x06, 0x67, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x52, 0x06, 0x47, 0x65, 0x6e, 0x64,
- 0x65, 0x72, 0x22, 0x77, 0x0a, 0x12, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x44, 0x65,
- 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x71, 0x12, 0x2e, 0x0a, 0x07, 0x41, 0x63, 0x63, 0x6f,
- 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x14, 0xca, 0xbb, 0x18, 0x07, 0x61,
- 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0xda, 0xbb, 0x18, 0x05, 0x24, 0x21, 0x3d, 0x27, 0x27, 0x52,
- 0x07, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x31, 0x0a, 0x08, 0x50, 0x61, 0x73, 0x73,
- 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x15, 0xca, 0xbb, 0x18, 0x08,
- 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0xda, 0xbb, 0x18, 0x05, 0x24, 0x21, 0x3d, 0x27,
- 0x27, 0x52, 0x08, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x15, 0x0a, 0x13, 0x52,
- 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65,
- 0x73, 0x70, 0x22, 0x17, 0x0a, 0x15, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x41, 0x63, 0x63,
- 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x22, 0x4b, 0x0a, 0x16, 0x52,
- 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65,
- 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x31, 0x0a, 0x0b, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54,
- 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0f, 0xca, 0xbb, 0x18, 0x0b,
- 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x0b, 0x41, 0x63, 0x63,
- 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x32, 0x66, 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x69,
- 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x56, 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x69,
- 0x6e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x15, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e,
- 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x71, 0x1a,
- 0x16, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x44, 0x65, 0x66, 0x61,
- 0x75, 0x6c, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x17, 0xd2, 0xc1, 0x18, 0x13, 0x2f, 0x61, 0x75,
- 0x74, 0x68, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x2f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
- 0x32, 0x75, 0x0a, 0x0f, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76,
- 0x69, 0x63, 0x65, 0x12, 0x62, 0x0a, 0x0f, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x44,
- 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x52, 0x65,
- 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x71,
- 0x1a, 0x19, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72,
- 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x1a, 0xd2, 0xc1, 0x18,
- 0x16, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x2f,
- 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x32, 0x78, 0x0a, 0x0c, 0x54, 0x6f, 0x6b, 0x65, 0x6e,
- 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x68, 0x0a, 0x12, 0x52, 0x65, 0x66, 0x72, 0x65,
- 0x73, 0x68, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1b, 0x2e,
- 0x61, 0x75, 0x74, 0x68, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x41, 0x63, 0x63, 0x65,
- 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x61, 0x75, 0x74,
- 0x68, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54,
- 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x17, 0xca, 0xc1, 0x18, 0x13, 0x2f, 0x61,
- 0x75, 0x74, 0x68, 0x2f, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x2f, 0x74, 0x6f, 0x6b, 0x65,
- 0x6e, 0x42, 0x21, 0x5a, 0x1f, 0x63, 0x6e, 0x2f, 0x6f, 0x6e, 0x65, 0x61, 0x6f, 0x2f, 0x62, 0x61,
- 0x73, 0x65, 0x2d, 0x67, 0x6f, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f,
- 0x61, 0x75, 0x74, 0x68, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x74, 0x68, 0x1a, 0x09, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x58, 0x0a,
+ 0x0a, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x51, 0x71, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x6f,
+ 0x70, 0x65, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x70, 0x65,
+ 0x6e, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12,
+ 0x16, 0x0a, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x22, 0x20, 0x0a, 0x0a, 0x4c, 0x6f, 0x67, 0x69, 0x6e,
+ 0x57, 0x78, 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x9e, 0x01, 0x0a, 0x09, 0x4c, 0x6f,
+ 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1f, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x09, 0xca, 0xbb, 0x18, 0x05, 0x74, 0x6f, 0x6b, 0x65,
+ 0x6e, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x22, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72,
+ 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x42, 0x0a, 0xca, 0xbb, 0x18, 0x06, 0x75, 0x73,
+ 0x65, 0x72, 0x49, 0x64, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x08,
+ 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c,
+ 0xca, 0xbb, 0x18, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x08, 0x75, 0x73,
+ 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72,
+ 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xca, 0xbb, 0x18, 0x06, 0x61, 0x76, 0x61, 0x74,
+ 0x61, 0x72, 0x52, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x32, 0x92, 0x01, 0x0a, 0x0c, 0x4c,
+ 0x6f, 0x67, 0x69, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x4c,
+ 0x6f, 0x67, 0x69, 0x6e, 0x51, 0x71, 0x12, 0x10, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x4c, 0x6f,
+ 0x67, 0x69, 0x6e, 0x51, 0x71, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e,
+ 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x12, 0xd2, 0xc1, 0x18, 0x0e, 0x2f,
+ 0x61, 0x75, 0x74, 0x68, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x2f, 0x71, 0x71, 0x12, 0x40, 0x0a,
+ 0x07, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x57, 0x78, 0x12, 0x10, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e,
+ 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x57, 0x78, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x61, 0x75, 0x74,
+ 0x68, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x12, 0xd2, 0xc1, 0x18,
+ 0x0e, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x2f, 0x77, 0x78, 0x42,
+ 0x17, 0x5a, 0x15, 0x61, 0x6c, 0x6c, 0x61, 0x70, 0x70, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x6d, 0x6f,
+ 0x64, 0x65, 0x6c, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@@ -429,24 +255,19 @@ func file_auth_proto_rawDescGZIP() []byte {
return file_auth_proto_rawDescData
}
-var file_auth_proto_msgTypes = make([]protoimpl.MessageInfo, 6)
+var file_auth_proto_msgTypes = make([]protoimpl.MessageInfo, 3)
var file_auth_proto_goTypes = []interface{}{
- (*LoginDefaultReq)(nil), // 0: auth.LoginDefaultReq
- (*LoginDefaultResp)(nil), // 1: auth.LoginDefaultResp
- (*RegisterDefaultReq)(nil), // 2: auth.RegisterDefaultReq
- (*RegisterDefaultResp)(nil), // 3: auth.RegisterDefaultResp
- (*RefreshAccessTokenReq)(nil), // 4: auth.RefreshAccessTokenReq
- (*RefreshAccessTokenResp)(nil), // 5: auth.RefreshAccessTokenResp
+ (*LoginQqReq)(nil), // 0: auth.LoginQqReq
+ (*LoginWxReq)(nil), // 1: auth.LoginWxReq
+ (*LoginResp)(nil), // 2: auth.LoginResp
}
var file_auth_proto_depIdxs = []int32{
- 0, // 0: auth.LoginService.LoginDefault:input_type -> auth.LoginDefaultReq
- 2, // 1: auth.RegisterService.RegisterDefault:input_type -> auth.RegisterDefaultReq
- 4, // 2: auth.TokenService.RefreshAccessToken:input_type -> auth.RefreshAccessTokenReq
- 1, // 3: auth.LoginService.LoginDefault:output_type -> auth.LoginDefaultResp
- 3, // 4: auth.RegisterService.RegisterDefault:output_type -> auth.RegisterDefaultResp
- 5, // 5: auth.TokenService.RefreshAccessToken:output_type -> auth.RefreshAccessTokenResp
- 3, // [3:6] is the sub-list for method output_type
- 0, // [0:3] is the sub-list for method input_type
+ 0, // 0: auth.LoginService.LoginQq:input_type -> auth.LoginQqReq
+ 1, // 1: auth.LoginService.LoginWx:input_type -> auth.LoginWxReq
+ 2, // 2: auth.LoginService.LoginQq:output_type -> auth.LoginResp
+ 2, // 3: auth.LoginService.LoginWx:output_type -> auth.LoginResp
+ 2, // [2:4] is the sub-list for method output_type
+ 0, // [0:2] is the sub-list for method input_type
0, // [0:0] is the sub-list for extension type_name
0, // [0:0] is the sub-list for extension extendee
0, // [0:0] is the sub-list for field type_name
@@ -459,7 +280,7 @@ func file_auth_proto_init() {
}
if !protoimpl.UnsafeEnabled {
file_auth_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*LoginDefaultReq); i {
+ switch v := v.(*LoginQqReq); i {
case 0:
return &v.state
case 1:
@@ -471,7 +292,7 @@ func file_auth_proto_init() {
}
}
file_auth_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*LoginDefaultResp); i {
+ switch v := v.(*LoginWxReq); i {
case 0:
return &v.state
case 1:
@@ -483,43 +304,7 @@ func file_auth_proto_init() {
}
}
file_auth_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*RegisterDefaultReq); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_auth_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*RegisterDefaultResp); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_auth_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*RefreshAccessTokenReq); i {
- case 0:
- return &v.state
- case 1:
- return &v.sizeCache
- case 2:
- return &v.unknownFields
- default:
- return nil
- }
- }
- file_auth_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*RefreshAccessTokenResp); i {
+ switch v := v.(*LoginResp); i {
case 0:
return &v.state
case 1:
@@ -537,9 +322,9 @@ func file_auth_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_auth_proto_rawDesc,
NumEnums: 0,
- NumMessages: 6,
+ NumMessages: 3,
NumExtensions: 0,
- NumServices: 3,
+ NumServices: 1,
},
GoTypes: file_auth_proto_goTypes,
DependencyIndexes: file_auth_proto_depIdxs,
diff --git a/code/allapp/allapp-go/biz/model/space/space.pb.go b/code/allapp/allapp-go/biz/model/space/space.pb.go
index aa424f7b..6c875e34 100644
--- a/code/allapp/allapp-go/biz/model/space/space.pb.go
+++ b/code/allapp/allapp-go/biz/model/space/space.pb.go
@@ -1,7 +1,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.28.0
-// protoc v4.25.3
+// protoc v6.33.1
// source: space.proto
package space
@@ -28,86 +28,77 @@ var file_space_proto_rawDesc = []byte{
0x17, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70,
0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f,
0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73,
- 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0xc2, 0x01, 0x0a, 0x0c, 0x53, 0x70, 0x61, 0x63, 0x65,
- 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x54, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74,
- 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x18, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x43,
- 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73,
- 0x1a, 0x18, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53,
- 0x70, 0x61, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x11, 0xd2, 0xc1, 0x18, 0x0d,
- 0x2f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x5c, 0x0a,
- 0x0d, 0x44, 0x69, 0x73, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a,
- 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x53,
- 0x70, 0x61, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x1a, 0x2e, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65,
- 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x13, 0xd2, 0xc1, 0x18, 0x0f, 0x2f, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x2f, 0x64, 0x69, 0x73, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x32, 0xdc, 0x03, 0x0a, 0x10,
- 0x53, 0x70, 0x61, 0x63, 0x65, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
- 0x12, 0x59, 0x0a, 0x0c, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65,
- 0x12, 0x19, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72,
- 0x53, 0x70, 0x61, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x19, 0x2e, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65,
- 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x13, 0xca, 0xc1, 0x18, 0x0f, 0x2f, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x67, 0x65, 0x74, 0x12, 0x51, 0x0a, 0x09, 0x45,
- 0x78, 0x69, 0x74, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x16, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x2e, 0x45, 0x78, 0x69, 0x74, 0x53, 0x70, 0x61, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73,
- 0x1a, 0x16, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x45, 0x78, 0x69, 0x74, 0x53, 0x70, 0x61,
- 0x63, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x14, 0xd2, 0xc1, 0x18, 0x10, 0x2f, 0x73,
- 0x70, 0x61, 0x63, 0x65, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x65, 0x78, 0x69, 0x74, 0x12, 0x60,
- 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x70, 0x61, 0x63, 0x65, 0x55, 0x73, 0x65, 0x72, 0x73,
- 0x12, 0x1b, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x70, 0x61,
- 0x63, 0x65, 0x55, 0x73, 0x65, 0x72, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x1b, 0x2e,
- 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x70, 0x61, 0x63, 0x65, 0x55,
- 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x14, 0xd2, 0xc1, 0x18, 0x10,
- 0x2f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x6c, 0x69, 0x73, 0x74,
- 0x12, 0x65, 0x0a, 0x0f, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x55,
- 0x73, 0x65, 0x72, 0x12, 0x1c, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x6d, 0x6f,
- 0x76, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d,
- 0x73, 0x1a, 0x1c, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65,
- 0x53, 0x70, 0x61, 0x63, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22,
- 0x16, 0xd2, 0xc1, 0x18, 0x12, 0x2f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x75, 0x73, 0x65, 0x72,
- 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x51, 0x0a, 0x09, 0x4a, 0x6f, 0x69, 0x6e, 0x53,
- 0x70, 0x61, 0x63, 0x65, 0x12, 0x16, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4a, 0x6f, 0x69,
- 0x6e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x16, 0x2e, 0x73,
- 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4a, 0x6f, 0x69, 0x6e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65,
- 0x73, 0x75, 0x6c, 0x74, 0x22, 0x14, 0xd2, 0xc1, 0x18, 0x10, 0x2f, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x6a, 0x6f, 0x69, 0x6e, 0x42, 0x22, 0x5a, 0x20, 0x63, 0x6e,
- 0x2f, 0x6f, 0x6e, 0x65, 0x61, 0x6f, 0x2f, 0x62, 0x61, 0x73, 0x65, 0x2d, 0x67, 0x6f, 0x2f, 0x62,
- 0x69, 0x7a, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x62, 0x06,
- 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x6c, 0x0a, 0x0c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x53,
+ 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5c, 0x0a, 0x0d, 0x44, 0x69, 0x73, 0x73, 0x6f, 0x6c,
+ 0x76, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e,
+ 0x44, 0x69, 0x73, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x50, 0x61, 0x72,
+ 0x61, 0x6d, 0x73, 0x1a, 0x1a, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x73,
+ 0x6f, 0x6c, 0x76, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22,
+ 0x13, 0xd2, 0xc1, 0x18, 0x0f, 0x2f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x64, 0x69, 0x73, 0x73,
+ 0x6f, 0x6c, 0x76, 0x65, 0x32, 0xdc, 0x03, 0x0a, 0x10, 0x53, 0x70, 0x61, 0x63, 0x65, 0x55, 0x73,
+ 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x59, 0x0a, 0x0c, 0x67, 0x65, 0x74,
+ 0x55, 0x73, 0x65, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x19, 0x2e, 0x73, 0x70, 0x61, 0x63,
+ 0x65, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x50, 0x61,
+ 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x19, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x47, 0x65, 0x74,
+ 0x55, 0x73, 0x65, 0x72, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22,
+ 0x13, 0xca, 0xc1, 0x18, 0x0f, 0x2f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x75, 0x73, 0x65, 0x72,
+ 0x2f, 0x67, 0x65, 0x74, 0x12, 0x51, 0x0a, 0x09, 0x45, 0x78, 0x69, 0x74, 0x53, 0x70, 0x61, 0x63,
+ 0x65, 0x12, 0x16, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x45, 0x78, 0x69, 0x74, 0x53, 0x70,
+ 0x61, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x16, 0x2e, 0x73, 0x70, 0x61, 0x63,
+ 0x65, 0x2e, 0x45, 0x78, 0x69, 0x74, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c,
+ 0x74, 0x22, 0x14, 0xd2, 0xc1, 0x18, 0x10, 0x2f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x75, 0x73,
+ 0x65, 0x72, 0x2f, 0x65, 0x78, 0x69, 0x74, 0x12, 0x60, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x53,
+ 0x70, 0x61, 0x63, 0x65, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x1b, 0x2e, 0x73, 0x70, 0x61, 0x63,
+ 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x70, 0x61, 0x63, 0x65, 0x55, 0x73, 0x65, 0x72, 0x73,
+ 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x1b, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4c,
+ 0x69, 0x73, 0x74, 0x53, 0x70, 0x61, 0x63, 0x65, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73,
+ 0x75, 0x6c, 0x74, 0x22, 0x14, 0xd2, 0xc1, 0x18, 0x10, 0x2f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f,
+ 0x75, 0x73, 0x65, 0x72, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x65, 0x0a, 0x0f, 0x52, 0x65, 0x6d,
+ 0x6f, 0x76, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1c, 0x2e, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65,
+ 0x55, 0x73, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x1c, 0x2e, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x55, 0x73,
+ 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x16, 0xd2, 0xc1, 0x18, 0x12, 0x2f, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65,
+ 0x12, 0x51, 0x0a, 0x09, 0x4a, 0x6f, 0x69, 0x6e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x16, 0x2e,
+ 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4a, 0x6f, 0x69, 0x6e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x50,
+ 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x16, 0x2e, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4a, 0x6f,
+ 0x69, 0x6e, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x14, 0xd2,
+ 0xc1, 0x18, 0x10, 0x2f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x6a,
+ 0x6f, 0x69, 0x6e, 0x42, 0x18, 0x5a, 0x16, 0x61, 0x6c, 0x6c, 0x61, 0x70, 0x70, 0x2f, 0x62, 0x69,
+ 0x7a, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x62, 0x06, 0x70,
+ 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var file_space_proto_goTypes = []interface{}{
- (*CreateSpaceParams)(nil), // 0: space.CreateSpaceParams
- (*DissolveSpaceParams)(nil), // 1: space.DissolveSpaceParams
- (*GetUserSpaceParams)(nil), // 2: space.GetUserSpaceParams
- (*ExitSpaceParams)(nil), // 3: space.ExitSpaceParams
- (*ListSpaceUsersParams)(nil), // 4: space.ListSpaceUsersParams
- (*RemoveSpaceUserParams)(nil), // 5: space.RemoveSpaceUserParams
- (*JoinSpaceParams)(nil), // 6: space.JoinSpaceParams
- (*DissolveSpaceResult)(nil), // 7: space.DissolveSpaceResult
- (*GetUserSpaceResult)(nil), // 8: space.GetUserSpaceResult
- (*ExitSpaceResult)(nil), // 9: space.ExitSpaceResult
- (*ListSpaceUsersResult)(nil), // 10: space.ListSpaceUsersResult
- (*RemoveSpaceUserResult)(nil), // 11: space.RemoveSpaceUserResult
- (*JoinSpaceResult)(nil), // 12: space.JoinSpaceResult
+ (*DissolveSpaceParams)(nil), // 0: space.DissolveSpaceParams
+ (*GetUserSpaceParams)(nil), // 1: space.GetUserSpaceParams
+ (*ExitSpaceParams)(nil), // 2: space.ExitSpaceParams
+ (*ListSpaceUsersParams)(nil), // 3: space.ListSpaceUsersParams
+ (*RemoveSpaceUserParams)(nil), // 4: space.RemoveSpaceUserParams
+ (*JoinSpaceParams)(nil), // 5: space.JoinSpaceParams
+ (*DissolveSpaceResult)(nil), // 6: space.DissolveSpaceResult
+ (*GetUserSpaceResult)(nil), // 7: space.GetUserSpaceResult
+ (*ExitSpaceResult)(nil), // 8: space.ExitSpaceResult
+ (*ListSpaceUsersResult)(nil), // 9: space.ListSpaceUsersResult
+ (*RemoveSpaceUserResult)(nil), // 10: space.RemoveSpaceUserResult
+ (*JoinSpaceResult)(nil), // 11: space.JoinSpaceResult
}
var file_space_proto_depIdxs = []int32{
- 0, // 0: space.SpaceService.CreateSpace:input_type -> space.CreateSpaceParams
- 1, // 1: space.SpaceService.DissolveSpace:input_type -> space.DissolveSpaceParams
- 2, // 2: space.SpaceUserService.getUserSpace:input_type -> space.GetUserSpaceParams
- 3, // 3: space.SpaceUserService.ExitSpace:input_type -> space.ExitSpaceParams
- 4, // 4: space.SpaceUserService.ListSpaceUsers:input_type -> space.ListSpaceUsersParams
- 5, // 5: space.SpaceUserService.RemoveSpaceUser:input_type -> space.RemoveSpaceUserParams
- 6, // 6: space.SpaceUserService.JoinSpace:input_type -> space.JoinSpaceParams
- 0, // 7: space.SpaceService.CreateSpace:output_type -> space.CreateSpaceParams
- 7, // 8: space.SpaceService.DissolveSpace:output_type -> space.DissolveSpaceResult
- 8, // 9: space.SpaceUserService.getUserSpace:output_type -> space.GetUserSpaceResult
- 9, // 10: space.SpaceUserService.ExitSpace:output_type -> space.ExitSpaceResult
- 10, // 11: space.SpaceUserService.ListSpaceUsers:output_type -> space.ListSpaceUsersResult
- 11, // 12: space.SpaceUserService.RemoveSpaceUser:output_type -> space.RemoveSpaceUserResult
- 12, // 13: space.SpaceUserService.JoinSpace:output_type -> space.JoinSpaceResult
- 7, // [7:14] is the sub-list for method output_type
- 0, // [0:7] is the sub-list for method input_type
+ 0, // 0: space.SpaceService.DissolveSpace:input_type -> space.DissolveSpaceParams
+ 1, // 1: space.SpaceUserService.getUserSpace:input_type -> space.GetUserSpaceParams
+ 2, // 2: space.SpaceUserService.ExitSpace:input_type -> space.ExitSpaceParams
+ 3, // 3: space.SpaceUserService.ListSpaceUsers:input_type -> space.ListSpaceUsersParams
+ 4, // 4: space.SpaceUserService.RemoveSpaceUser:input_type -> space.RemoveSpaceUserParams
+ 5, // 5: space.SpaceUserService.JoinSpace:input_type -> space.JoinSpaceParams
+ 6, // 6: space.SpaceService.DissolveSpace:output_type -> space.DissolveSpaceResult
+ 7, // 7: space.SpaceUserService.getUserSpace:output_type -> space.GetUserSpaceResult
+ 8, // 8: space.SpaceUserService.ExitSpace:output_type -> space.ExitSpaceResult
+ 9, // 9: space.SpaceUserService.ListSpaceUsers:output_type -> space.ListSpaceUsersResult
+ 10, // 10: space.SpaceUserService.RemoveSpaceUser:output_type -> space.RemoveSpaceUserResult
+ 11, // 11: space.SpaceUserService.JoinSpace:output_type -> space.JoinSpaceResult
+ 6, // [6:12] is the sub-list for method output_type
+ 0, // [0:6] is the sub-list for method input_type
0, // [0:0] is the sub-list for extension type_name
0, // [0:0] is the sub-list for extension extendee
0, // [0:0] is the sub-list for field type_name
diff --git a/code/allapp/allapp-go/biz/model/space/space_types.pb.go b/code/allapp/allapp-go/biz/model/space/space_types.pb.go
index 0ae10dec..2d53ce81 100644
--- a/code/allapp/allapp-go/biz/model/space/space_types.pb.go
+++ b/code/allapp/allapp-go/biz/model/space/space_types.pb.go
@@ -1,7 +1,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.28.0
-// protoc v4.25.3
+// protoc v6.33.1
// source: space/space_types.proto
package space
@@ -207,10 +207,9 @@ var file_space_space_types_proto_rawDesc = []byte{
0x64, 0x65, 0x52, 0x0a, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x15,
0x0a, 0x13, 0x44, 0x69, 0x73, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x50,
0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x15, 0x0a, 0x13, 0x44, 0x69, 0x73, 0x73, 0x6f, 0x6c, 0x76,
- 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x42, 0x22, 0x5a, 0x20,
- 0x63, 0x6e, 0x2f, 0x6f, 0x6e, 0x65, 0x61, 0x6f, 0x2f, 0x62, 0x61, 0x73, 0x65, 0x2d, 0x67, 0x6f,
- 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x42, 0x18, 0x5a, 0x16,
+ 0x61, 0x6c, 0x6c, 0x61, 0x70, 0x70, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c,
+ 0x2f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
diff --git a/code/allapp/allapp-go/biz/model/space/space_user_types.pb.go b/code/allapp/allapp-go/biz/model/space/space_user_types.pb.go
index 574ade09..d355d059 100644
--- a/code/allapp/allapp-go/biz/model/space/space_user_types.pb.go
+++ b/code/allapp/allapp-go/biz/model/space/space_user_types.pb.go
@@ -1,7 +1,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.28.0
-// protoc v4.25.3
+// protoc v6.33.1
// source: space/space_user_types.proto
package space
@@ -588,9 +588,9 @@ var file_space_space_user_types_proto_rawDesc = []byte{
0x5f, 0x63, 0x6f, 0x64, 0x65, 0x52, 0x0a, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x64,
0x65, 0x12, 0x1c, 0x0a, 0x04, 0x52, 0x6f, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x42,
0x08, 0xca, 0xbb, 0x18, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x52, 0x6f, 0x6c, 0x65, 0x42,
- 0x22, 0x5a, 0x20, 0x63, 0x6e, 0x2f, 0x6f, 0x6e, 0x65, 0x61, 0x6f, 0x2f, 0x62, 0x61, 0x73, 0x65,
- 0x2d, 0x67, 0x6f, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x18, 0x5a, 0x16, 0x61, 0x6c, 0x6c, 0x61, 0x70, 0x70, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x6d, 0x6f,
+ 0x64, 0x65, 0x6c, 0x2f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+ 0x33,
}
var (
diff --git a/code/allapp/allapp-go/biz/router/auth/auth.go b/code/allapp/allapp-go/biz/router/auth/auth.go
index 774957bc..9f15aae2 100644
--- a/code/allapp/allapp-go/biz/router/auth/auth.go
+++ b/code/allapp/allapp-go/biz/router/auth/auth.go
@@ -21,15 +21,8 @@ func Register(r *server.Hertz) {
_auth := root.Group("/auth", _authMw()...)
{
_login := _auth.Group("/login", _loginMw()...)
- _login.POST("/default", append(_logindefaultMw(), auth.LoginDefault)...)
- }
- {
- _refresh := _auth.Group("/refresh", _refreshMw()...)
- _refresh.GET("/token", append(_refreshaccesstokenMw(), auth.RefreshAccessToken)...)
- }
- {
- _register := _auth.Group("/register", _registerMw()...)
- _register.POST("/default", append(_registerdefaultMw(), auth.RegisterDefault)...)
+ _login.POST("/qq", append(_loginqqMw(), auth.LoginQq)...)
+ _login.POST("/wx", append(_loginwxMw(), auth.LoginWx)...)
}
}
}
diff --git a/code/allapp/allapp-go/biz/router/auth/middleware.go b/code/allapp/allapp-go/biz/router/auth/middleware.go
index acfd187a..fca3ed86 100644
--- a/code/allapp/allapp-go/biz/router/auth/middleware.go
+++ b/code/allapp/allapp-go/biz/router/auth/middleware.go
@@ -45,3 +45,18 @@ func _refreshMw() []app.HandlerFunc {
// your code...
return nil
}
+
+func _loginthirdpartyMw() []app.HandlerFunc {
+ // your code...
+ return nil
+}
+
+func _loginqqMw() []app.HandlerFunc {
+ // your code...
+ return nil
+}
+
+func _loginwxMw() []app.HandlerFunc {
+ // your code...
+ return nil
+}
diff --git a/code/allapp/allapp-go/biz/router/middleware/auth.go b/code/allapp/allapp-go/biz/router/middleware/auth.go
index cb5559ae..1c85b677 100644
--- a/code/allapp/allapp-go/biz/router/middleware/auth.go
+++ b/code/allapp/allapp-go/biz/router/middleware/auth.go
@@ -43,11 +43,11 @@ func Auth() app.HandlerFunc {
return
}
- verifyToken := jwtx.VerifyToken(token)
+ verifyToken, flag := jwtx.VerifyToken(token)
- if verifyToken.IsValid {
+ if flag {
user := &ContextUser{
- UserID: verifyToken.Claims.UserID,
+ UserID: verifyToken.UserID,
SpaceID: 0,
}
if spaceId != "" {
diff --git a/code/allapp/allapp-go/biz/router/space/space.go b/code/allapp/allapp-go/biz/router/space/space.go
index bc84a7b9..8794bf5d 100644
--- a/code/allapp/allapp-go/biz/router/space/space.go
+++ b/code/allapp/allapp-go/biz/router/space/space.go
@@ -19,7 +19,6 @@ func Register(r *server.Hertz) {
root := r.Group("/", rootMw()...)
{
_space := root.Group("/space", _spaceMw()...)
- _space.POST("/create", append(_createspaceMw(), space.CreateSpace)...)
_space.POST("/dissolve", append(_dissolvespaceMw(), space.DissolveSpace)...)
{
_user := _space.Group("/user", _userMw()...)
diff --git a/code/allapp/allapp-go/conf/conf.go b/code/allapp/allapp-go/conf/conf.go
index 5cb2992c..04f8ec44 100644
--- a/code/allapp/allapp-go/conf/conf.go
+++ b/code/allapp/allapp-go/conf/conf.go
@@ -1,11 +1,12 @@
package conf
import (
- "github.com/spf13/viper"
"os"
"path/filepath"
"sync"
"time"
+
+ "github.com/spf13/viper"
)
var (
@@ -21,6 +22,7 @@ type Config struct {
Snowflake SnowflakeConfig `mapstructure:"snowflake" yaml:"snowflake"`
Pgsql PgsqlConfig `mapstructure:"pgsql" yaml:"pgsql"`
Log LogConfig `mapstructure:"log" yaml:"log"`
+ Wx WxConfig `mapstructure:"wx" yaml:"wx"`
}
type ServerConfig struct {
@@ -29,9 +31,8 @@ type ServerConfig struct {
}
type JwtConfig struct {
- Secret string `mapstructure:"secret" yaml:"secret"`
- AccessExpiry time.Duration `mapstructure:"access_expiry" yaml:"access_expiry"`
- RefreshExpiry time.Duration `mapstructure:"refresh_expiry" yaml:"refresh_expiry"`
+ Secret string `mapstructure:"secret" yaml:"secret"`
+ AccessExpiry time.Duration `mapstructure:"access_expiry" yaml:"access_expiry"`
}
type SnowflakeConfig struct {
@@ -61,6 +62,11 @@ type LogConfig struct {
Compress bool `mapstructure:"compress" yaml:"compress"`
}
+type WxConfig struct {
+ AppId string `mapstructure:"app_id" yaml:"app_id"`
+ AppSecret string `mapstructure:"app_secret" yaml:"app_secret"`
+}
+
func GetConf() *Config {
once.Do(initConf)
return conf
diff --git a/code/allapp/allapp-go/conf/dev/conf.yaml b/code/allapp/allapp-go/conf/dev/conf.yaml
index 38516cfd..5c066a2c 100644
--- a/code/allapp/allapp-go/conf/dev/conf.yaml
+++ b/code/allapp/allapp-go/conf/dev/conf.yaml
@@ -5,7 +5,6 @@ server:
jwt:
secret: 3Bde3BGEbYqtqyEUzW3ry8jKFcaPH17fRmTmqE7MDr05Lwj95uruRKrrkb44TJ4s
access_expiry: -1
- refresh_expiry: -1
snowflake:
datacenter_id: 1
@@ -29,4 +28,8 @@ log:
max_size: 10
max_backups: 30
max_age: 7
- compress: true
\ No newline at end of file
+ compress: true
+
+wx:
+ app_id: wxdab3e21a1f7e392f
+ app_secret: 0895443c6fedfc21cb92c9cd60de2a26
diff --git a/code/allapp/allapp-go/db/queries/space.sql b/code/allapp/allapp-go/db/queries/space.sql
index d18911a7..8d6ba46c 100644
--- a/code/allapp/allapp-go/db/queries/space.sql
+++ b/code/allapp/allapp-go/db/queries/space.sql
@@ -18,7 +18,6 @@ FROM space s
ON s.id = m.space_id
WHERE m.user_id = $1;
--- 根据验证码获取空间
--- name: GetSpaceByInviteCode :one
+-- name: FindSpaceByInviteCode :one
SELECT * FROM space WHERE invite_code = $1;
diff --git a/code/allapp/allapp-go/db/queries/user.sql b/code/allapp/allapp-go/db/queries/user.sql
new file mode 100644
index 00000000..eb6a321e
--- /dev/null
+++ b/code/allapp/allapp-go/db/queries/user.sql
@@ -0,0 +1,32 @@
+-- name: FindUserByOpenID :one
+SELECT
+ u.id AS user_id,
+ u.username,
+ u.avatar,
+ u.status,
+ o.type AS login_type,
+ o.openid
+FROM user_oauth o
+ JOIN "user" u ON u.id = o.user_id
+WHERE o.openid = $1
+ AND o.type = $2
+LIMIT 1;
+
+-- name: InsertUser :exec
+INSERT INTO "user" (
+ id,
+ username,
+ avatar,
+ status,
+ create_time,
+ update_time,
+ last_login_time
+) VALUES (
+ $1, $2, $3,$4, NOW(), NOW(),now()
+ )
+RETURNING id;
+
+-- name: UpdateUserLastLoginTime :exec
+UPDATE "user"
+SET last_login_time = NOW()
+WHERE id = $1;
diff --git a/code/allapp/allapp-go/db/queries/user_info.sql b/code/allapp/allapp-go/db/queries/user_info.sql
index b3f1248a..bd5aff45 100644
--- a/code/allapp/allapp-go/db/queries/user_info.sql
+++ b/code/allapp/allapp-go/db/queries/user_info.sql
@@ -1,8 +1,3 @@
--- 插入用户并返回刚创建的记录
--- name: InsertUser :execrows
-INSERT INTO user_info (id, account, password,username)
-VALUES ($1, $2, $3,$4);
-
-- 根据 ID 查询单条用户记录
-- name: GetUserById :one
SELECT *
diff --git a/code/allapp/allapp-go/db/queries/user_oauth.sql b/code/allapp/allapp-go/db/queries/user_oauth.sql
new file mode 100644
index 00000000..c8cabfcc
--- /dev/null
+++ b/code/allapp/allapp-go/db/queries/user_oauth.sql
@@ -0,0 +1,13 @@
+-- name: InsertUserOAuth :exec
+INSERT INTO user_oauth (
+ id,
+ user_id,
+ type,
+ openid,
+ create_time,
+ update_time
+) VALUES (
+ $1, $2, $3, $4, NOW(), NOW()
+);
+
+
diff --git a/code/allapp/allapp-go/db/repo/models.go b/code/allapp/allapp-go/db/repo/models.go
index 27104c83..d2af97eb 100644
--- a/code/allapp/allapp-go/db/repo/models.go
+++ b/code/allapp/allapp-go/db/repo/models.go
@@ -38,34 +38,32 @@ type MoneyUserCategory struct {
CreateTime pgtype.Timestamp
}
-// 共享空间(一个空间包含多个成员)
type Space struct {
- // 空间ID
- ID int64
- // 空间名称
- Name pgtype.Text
- // 空间邀请码
+ ID int64
+ Name pgtype.Text
InviteCode string
- // 空间创建时间
CreateTime pgtype.Timestamp
- // 空间更新时间
UpdateTime pgtype.Timestamp
}
-// 共享空间成员表
type SpaceUser struct {
- // 主键ID
- ID int64
- // 所属空间ID
- SpaceID int64
- // 用户ID(唯一,每用户只加入一个空间)
- UserID int64
- // 成员角色:0创建者 1管理员 2普通
- Role int32
- // 加入空间时间
+ ID int64
+ SpaceID int64
+ UserID int64
+ Role int32
JoinTime pgtype.Timestamp
}
+type User struct {
+ ID int64
+ Username string
+ Avatar string
+ Status int32
+ LastLoginTime pgtype.Timestamptz
+ CreateTime pgtype.Timestamptz
+ UpdateTime pgtype.Timestamptz
+}
+
type UserInfo struct {
ID int64
SeqNo pgtype.Int4
@@ -79,3 +77,13 @@ type UserInfo struct {
ActiveTime pgtype.Timestamp
LastLoginTime pgtype.Timestamp
}
+
+type UserOauth struct {
+ ID int64
+ UserID int64
+ Type int32
+ Openid string
+ Unionid pgtype.Text
+ CreateTime pgtype.Timestamptz
+ UpdateTime pgtype.Timestamptz
+}
diff --git a/code/allapp/allapp-go/db/repo/space.sql.go b/code/allapp/allapp-go/db/repo/space.sql.go
index abe5fa9e..7541576c 100644
--- a/code/allapp/allapp-go/db/repo/space.sql.go
+++ b/code/allapp/allapp-go/db/repo/space.sql.go
@@ -19,13 +19,12 @@ func (q *Queries) DeleteSpace(ctx context.Context, id int64) error {
return err
}
-const getSpaceById = `-- name: GetSpaceById :one
-SELECT id, name, invite_code, create_time, update_time FROM space WHERE id = $1
+const findSpaceByInviteCode = `-- name: FindSpaceByInviteCode :one
+SELECT id, name, invite_code, create_time, update_time FROM space WHERE invite_code = $1
`
-// 根据id获取分享空间信息
-func (q *Queries) GetSpaceById(ctx context.Context, id int64) (Space, error) {
- row := q.db.QueryRow(ctx, getSpaceById, id)
+func (q *Queries) FindSpaceByInviteCode(ctx context.Context, inviteCode string) (Space, error) {
+ row := q.db.QueryRow(ctx, findSpaceByInviteCode, inviteCode)
var i Space
err := row.Scan(
&i.ID,
@@ -37,13 +36,13 @@ func (q *Queries) GetSpaceById(ctx context.Context, id int64) (Space, error) {
return i, err
}
-const getSpaceByInviteCode = `-- name: GetSpaceByInviteCode :one
-SELECT id, name, invite_code, create_time, update_time FROM space WHERE invite_code = $1
+const getSpaceById = `-- name: GetSpaceById :one
+SELECT id, name, invite_code, create_time, update_time FROM space WHERE id = $1
`
-// 根据验证码获取空间
-func (q *Queries) GetSpaceByInviteCode(ctx context.Context, inviteCode string) (Space, error) {
- row := q.db.QueryRow(ctx, getSpaceByInviteCode, inviteCode)
+// 根据id获取分享空间信息
+func (q *Queries) GetSpaceById(ctx context.Context, id int64) (Space, error) {
+ row := q.db.QueryRow(ctx, getSpaceById, id)
var i Space
err := row.Scan(
&i.ID,
diff --git a/code/allapp/allapp-go/db/repo/user.sql.go b/code/allapp/allapp-go/db/repo/user.sql.go
new file mode 100644
index 00000000..cd0d92f1
--- /dev/null
+++ b/code/allapp/allapp-go/db/repo/user.sql.go
@@ -0,0 +1,95 @@
+// Code generated by sqlc. DO NOT EDIT.
+// versions:
+// sqlc v1.30.0
+// source: user.sql
+
+package repo
+
+import (
+ "context"
+)
+
+const findUserByOpenID = `-- name: FindUserByOpenID :one
+SELECT
+ u.id AS user_id,
+ u.username,
+ u.avatar,
+ u.status,
+ o.type AS login_type,
+ o.openid
+FROM user_oauth o
+ JOIN "user" u ON u.id = o.user_id
+WHERE o.openid = $1
+ AND o.type = $2
+LIMIT 1
+`
+
+type FindUserByOpenIDParams struct {
+ Openid string
+ Type int32
+}
+
+type FindUserByOpenIDRow struct {
+ UserID int64
+ Username string
+ Avatar string
+ Status int32
+ LoginType int32
+ Openid string
+}
+
+func (q *Queries) FindUserByOpenID(ctx context.Context, arg FindUserByOpenIDParams) (FindUserByOpenIDRow, error) {
+ row := q.db.QueryRow(ctx, findUserByOpenID, arg.Openid, arg.Type)
+ var i FindUserByOpenIDRow
+ err := row.Scan(
+ &i.UserID,
+ &i.Username,
+ &i.Avatar,
+ &i.Status,
+ &i.LoginType,
+ &i.Openid,
+ )
+ return i, err
+}
+
+const insertUser = `-- name: InsertUser :exec
+INSERT INTO "user" (
+ id,
+ username,
+ avatar,
+ status,
+ create_time,
+ update_time
+) VALUES (
+ $1, $2, $3,$4, NOW(), NOW()
+ )
+RETURNING id
+`
+
+type InsertUserParams struct {
+ ID int64
+ Username string
+ Avatar string
+ Status int32
+}
+
+func (q *Queries) InsertUser(ctx context.Context, arg InsertUserParams) error {
+ _, err := q.db.Exec(ctx, insertUser,
+ arg.ID,
+ arg.Username,
+ arg.Avatar,
+ arg.Status,
+ )
+ return err
+}
+
+const updateUserLastLoginTime = `-- name: UpdateUserLastLoginTime :exec
+UPDATE "user"
+SET last_login_time = NOW()
+WHERE id = $1
+`
+
+func (q *Queries) UpdateUserLastLoginTime(ctx context.Context, id int64) error {
+ _, err := q.db.Exec(ctx, updateUserLastLoginTime, id)
+ return err
+}
diff --git a/code/allapp/allapp-go/db/repo/user_info.sql.go b/code/allapp/allapp-go/db/repo/user_info.sql.go
index b4f22221..eb875aaf 100644
--- a/code/allapp/allapp-go/db/repo/user_info.sql.go
+++ b/code/allapp/allapp-go/db/repo/user_info.sql.go
@@ -7,8 +7,6 @@ package repo
import (
"context"
-
- "github.com/jackc/pgx/v5/pgtype"
)
const getUserByAccount = `-- name: GetUserByAccount :one
@@ -95,32 +93,6 @@ func (q *Queries) GetUserForLogin(ctx context.Context, arg GetUserForLoginParams
return i, err
}
-const insertUser = `-- name: InsertUser :execrows
-INSERT INTO user_info (id, account, password,username)
-VALUES ($1, $2, $3,$4)
-`
-
-type InsertUserParams struct {
- ID int64
- Account string
- Password string
- Username pgtype.Text
-}
-
-// 插入用户并返回刚创建的记录
-func (q *Queries) InsertUser(ctx context.Context, arg InsertUserParams) (int64, error) {
- result, err := q.db.Exec(ctx, insertUser,
- arg.ID,
- arg.Account,
- arg.Password,
- arg.Username,
- )
- if err != nil {
- return 0, err
- }
- return result.RowsAffected(), nil
-}
-
const updateUserActiveTime = `-- name: UpdateUserActiveTime :exec
UPDATE user_info
SET active_time = now()
diff --git a/code/allapp/allapp-go/db/repo/user_oauth.sql.go b/code/allapp/allapp-go/db/repo/user_oauth.sql.go
new file mode 100644
index 00000000..771e0a74
--- /dev/null
+++ b/code/allapp/allapp-go/db/repo/user_oauth.sql.go
@@ -0,0 +1,40 @@
+// Code generated by sqlc. DO NOT EDIT.
+// versions:
+// sqlc v1.30.0
+// source: user_oauth.sql
+
+package repo
+
+import (
+ "context"
+)
+
+const insertUserOAuth = `-- name: InsertUserOAuth :exec
+INSERT INTO user_oauth (
+ id,
+ user_id,
+ type,
+ openid,
+ create_time,
+ update_time
+) VALUES (
+ $1, $2, $3, $4, NOW(), NOW()
+)
+`
+
+type InsertUserOAuthParams struct {
+ ID int64
+ UserID int64
+ Type int32
+ Openid string
+}
+
+func (q *Queries) InsertUserOAuth(ctx context.Context, arg InsertUserOAuthParams) error {
+ _, err := q.db.Exec(ctx, insertUserOAuth,
+ arg.ID,
+ arg.UserID,
+ arg.Type,
+ arg.Openid,
+ )
+ return err
+}
diff --git a/code/allapp/allapp-go/db/schema.sql b/code/allapp/allapp-go/db/schema.sql
index 176a8481..c072a598 100644
--- a/code/allapp/allapp-go/db/schema.sql
+++ b/code/allapp/allapp-go/db/schema.sql
@@ -12,6 +12,25 @@ CREATE TABLE user_info (
last_login_time TIMESTAMP
);
+CREATE TABLE "user" (
+ "id" int8 NOT NULL,
+ "username" varchar(255) NOT NULL ,
+ "avatar" varchar(255) NOT NULL ,
+ "status" int4 NOT NULL DEFAULT 1,
+ "last_login_time" timestamptz(6),
+ "create_time" timestamptz(6),
+ "update_time" timestamptz(6)
+);
+
+CREATE TABLE "user_oauth" (
+ "id" int8 NOT NULL,
+ "user_id" int8 NOT NULL,
+ "type" int4 NOT NULL,
+ "openid" varchar(255) COLLATE "pg_catalog"."default" NOT NULL,
+ "create_time" timestamptz(6) NOT NULL,
+ "update_time" timestamptz(6) NOT NULL
+);
+
CREATE TABLE money_record(
id BIGINT PRIMARY KEY,
category_id BIGINT NOT NULL,
@@ -51,18 +70,9 @@ CREATE TABLE space (
update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
--- 注释
-COMMENT ON TABLE space IS '共享空间(一个空间包含多个成员)';
-COMMENT ON COLUMN space.id IS '空间ID';
-COMMENT ON COLUMN space.name IS '空间名称';
-COMMENT ON COLUMN space.invite_code IS '空间邀请码';
-COMMENT ON COLUMN space.create_time IS '空间创建时间';
-COMMENT ON COLUMN space.update_time IS '空间更新时间';
-
ALTER TABLE space
ADD CONSTRAINT space_invite_code_key UNIQUE (invite_code);
-
-- 空间成员表(每个用户只能加入一个空间)
CREATE TABLE space_user (
id BIGSERIAL PRIMARY KEY,
@@ -72,10 +82,3 @@ CREATE TABLE space_user (
join_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
--- 注释
-COMMENT ON TABLE space_user IS '共享空间成员表';
-COMMENT ON COLUMN space_user.id IS '主键ID';
-COMMENT ON COLUMN space_user.space_id IS '所属空间ID';
-COMMENT ON COLUMN space_user.user_id IS '用户ID(唯一,每用户只加入一个空间)';
-COMMENT ON COLUMN space_user.role IS '成员角色:0创建者 1管理员 2普通';
-COMMENT ON COLUMN space_user.join_time IS '加入空间时间';
diff --git a/code/allapp/allapp-go/idl/auth.proto b/code/allapp/allapp-go/idl/auth.proto
index 4b61af07..aed8f591 100644
--- a/code/allapp/allapp-go/idl/auth.proto
+++ b/code/allapp/allapp-go/idl/auth.proto
@@ -6,56 +6,34 @@ option go_package = "auth";
import "api.proto";
-// 登录请求
-message LoginDefaultReq {
- string Account = 1 [(api.body)="account", (api.vd)="$!=''"];
- string Password = 2 [(api.body)="password", (api.vd)="$!=''"];
+message LoginQqReq {
+ string openid = 1;
+ string username = 2;
+ string avatar = 3;
+}
+
+message LoginWxReq {
+ string code = 1;
}
// 登录响应
-message LoginDefaultResp {
- string Token = 1 [(api.body)="token"];
- string RefreshToken = 2 [(api.body)="refreshToken"];
- int64 UserId = 3 [(api.body)="userId"];
- string Username = 4 [(api.body)="username"];
- int32 SeqNo = 5 [(api.body)="seqNo"];
- int32 Gender = 6 [(api.body)="gender"];
-}
-
-// 注册请求
-message RegisterDefaultReq {
- string Account = 1 [(api.body)="account", (api.vd)="$!=''"];
- string Password = 2 [(api.body)="password", (api.vd)="$!=''"];
-}
-
-// 注册响应
-message RegisterDefaultResp {}
-
-// 刷新 access token 请求
-message RefreshAccessTokenReq {}
-
-// 刷新 access token 响应
-message RefreshAccessTokenResp {
- string AccessToken = 1 [(api.body)="accessToken"];
+message LoginResp {
+ // JWT
+ string token = 1 [(api.body)="token"];
+ // 用户ID
+ int64 userId = 2 [(api.body)="userId"];
+ // 昵称
+ string username = 3 [(api.body)="username"];
+ // 头像
+ string avatar = 4 [(api.body)="avatar"];
}
// 登录服务
service LoginService {
- rpc LoginDefault(LoginDefaultReq) returns(LoginDefaultResp) {
- option (api.post) = "/auth/login/default";
+ rpc LoginQq(LoginQqReq) returns (LoginResp) {
+ option (api.post) = "/auth/login/qq";
}
-}
-
-// 注册服务
-service RegisterService {
- rpc RegisterDefault(RegisterDefaultReq) returns(RegisterDefaultResp) {
- option (api.post) = "/auth/register/default";
- }
-}
-
-// token 服务
-service TokenService {
- rpc RefreshAccessToken(RefreshAccessTokenReq) returns(RefreshAccessTokenResp) {
- option (api.get) = "/auth/refresh/token";
+ rpc LoginWx(LoginWxReq) returns (LoginResp) {
+ option (api.post) = "/auth/login/wx";
}
}
diff --git a/code/allapp/allapp-go/idl/space/space.proto b/code/allapp/allapp-go/idl/space/space.proto
index f5d584df..b638fa10 100644
--- a/code/allapp/allapp-go/idl/space/space.proto
+++ b/code/allapp/allapp-go/idl/space/space.proto
@@ -10,10 +10,6 @@ import "space/space_types.proto";
import "space/space_user_types.proto";
service SpaceService {
- rpc CreateSpace(CreateSpaceParams) returns (CreateSpaceParams){
- option (api.post) = '/space/create';
- };
-
rpc DissolveSpace(DissolveSpaceParams) returns (DissolveSpaceResult){
option (api.post) = '/space/dissolve';
};
diff --git a/code/allapp/allapp-go/utils/httpx/index.go b/code/allapp/allapp-go/utils/httpx/index.go
new file mode 100644
index 00000000..6829b808
--- /dev/null
+++ b/code/allapp/allapp-go/utils/httpx/index.go
@@ -0,0 +1,165 @@
+package httpx
+
+import (
+ "context"
+ "encoding/json"
+ "fmt"
+ "net/url"
+ "sync"
+ "time"
+
+ "github.com/cloudwego/hertz/pkg/app/client"
+ "github.com/cloudwego/hertz/pkg/protocol"
+ "github.com/cloudwego/hertz/pkg/protocol/consts"
+)
+
+var (
+ once sync.Once
+ clientInstance *HertzClient
+)
+
+// HertzClient 定义
+type HertzClient struct {
+ Client *client.Client
+ Timeout time.Duration
+ Header map[string]string
+}
+
+// Init 初始化单例
+func Init() {
+ once.Do(func() {
+ c, _ := client.NewClient()
+ clientInstance = &HertzClient{
+ Client: c,
+ Timeout: 5 * time.Second,
+ Header: make(map[string]string),
+ }
+ })
+}
+
+// SetHeader 设置默认 header
+func SetHeader(key, value string) {
+ if clientInstance == nil {
+ Init()
+ }
+ clientInstance.Header[key] = value
+}
+
+// 支持 value 为任意类型
+func buildQueryString(query map[string][]any) string {
+ if len(query) == 0 {
+ return ""
+ }
+
+ values := url.Values{}
+ for k, arr := range query {
+ for _, v := range arr {
+ values.Add(k, fmt.Sprintf("%v", v)) // 自动转 string
+ }
+ }
+ return values.Encode()
+}
+
+func Get(ctx context.Context, urlStr string, query map[string][]any) (int, string, error) {
+ if clientInstance == nil {
+ Init()
+ }
+ h := clientInstance
+ req := &protocol.Request{}
+ res := &protocol.Response{}
+
+ req.Header.SetMethod(consts.MethodGet)
+ req.SetRequestURI(urlStr)
+ if qs := buildQueryString(query); qs != "" {
+ req.SetQueryString(qs)
+ }
+
+ for k, v := range h.Header {
+ req.Header.Set(k, v)
+ }
+
+ ctx, cancel := context.WithTimeout(ctx, h.Timeout)
+ defer cancel()
+
+ err := h.Client.Do(ctx, req, res)
+ if err != nil {
+ return 0, "", err
+ }
+
+ return res.StatusCode(), string(res.Body()), nil
+}
+
+func PostJSON(ctx context.Context, urlStr string, query map[string][]any, payload any) (int, string, error) {
+ if clientInstance == nil {
+ Init()
+ }
+ h := clientInstance
+ req := &protocol.Request{}
+ res := &protocol.Response{}
+
+ req.Header.SetMethod(consts.MethodPost)
+ req.Header.SetContentTypeBytes([]byte("application/json"))
+ req.SetRequestURI(urlStr)
+ if qs := buildQueryString(query); qs != "" {
+ req.SetQueryString(qs)
+ }
+
+ data, err := json.Marshal(payload)
+ if err != nil {
+ return 0, "", fmt.Errorf("marshal json error: %w", err)
+ }
+ req.SetBody(data)
+
+ for k, v := range h.Header {
+ req.Header.Set(k, v)
+ }
+
+ ctx, cancel := context.WithTimeout(ctx, h.Timeout)
+ defer cancel()
+
+ err = h.Client.Do(ctx, req, res)
+ if err != nil {
+ return 0, "", err
+ }
+
+ return res.StatusCode(), string(res.Body()), nil
+}
+
+func PostForm(ctx context.Context, urlStr string, query map[string][]any, form map[string]string) (int, string, error) {
+ if clientInstance == nil {
+ Init()
+ }
+ h := clientInstance
+ req := &protocol.Request{}
+ res := &protocol.Response{}
+
+ req.Header.SetMethod(consts.MethodPost)
+ req.SetRequestURI(urlStr)
+ if qs := buildQueryString(query); qs != "" {
+ req.SetQueryString(qs)
+ }
+
+ req.SetFormData(form)
+
+ for k, v := range h.Header {
+ req.Header.Set(k, v)
+ }
+
+ ctx, cancel := context.WithTimeout(ctx, h.Timeout)
+ defer cancel()
+
+ err := h.Client.Do(ctx, req, res)
+ if err != nil {
+ return 0, "", err
+ }
+
+ return res.StatusCode(), string(res.Body()), nil
+}
+
+func JSONStringToMap(jsonStr string) (map[string]interface{}, error) {
+ var result map[string]interface{}
+ if err := json.Unmarshal([]byte(jsonStr), &result); err != nil {
+ return nil, err
+ }
+ return result, nil
+}
diff --git a/code/allapp/allapp-go/utils/index.go b/code/allapp/allapp-go/utils/index.go
index f2de3a69..35a9b6f7 100644
--- a/code/allapp/allapp-go/utils/index.go
+++ b/code/allapp/allapp-go/utils/index.go
@@ -6,17 +6,22 @@ import (
)
// GenerateCode 生成指定长度的随机邀请码(大写字母+数字)
-func GenerateCode(length int) (string, error) {
+// 不会返回错误,如果随机失败,会自动重试
+func GenerateCode(length int) string {
const charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
code := make([]byte, length)
for i := 0; i < length; i++ {
- num, err := rand.Int(rand.Reader, big.NewInt(int64(len(charset))))
- if err != nil {
- return "", err
+ for {
+ num, err := rand.Int(rand.Reader, big.NewInt(int64(len(charset))))
+ if err != nil {
+ // 随机失败,重试
+ continue
+ }
+ code[i] = charset[num.Int64()]
+ break
}
- code[i] = charset[num.Int64()]
}
- return string(code), nil
+ return string(code)
}
diff --git a/code/allapp/allapp-go/utils/jwtx/jwt.go b/code/allapp/allapp-go/utils/jwtx/jwt.go
index ef76f7e7..a3133a60 100644
--- a/code/allapp/allapp-go/utils/jwtx/jwt.go
+++ b/code/allapp/allapp-go/utils/jwtx/jwt.go
@@ -13,16 +13,9 @@ type CustomClaims struct {
jwt.RegisteredClaims
}
-type TokenResult struct {
- Claims *CustomClaims
- IsValid bool
- IsExpired bool
-}
-
type jwtManager struct {
- secret string
- accessExpiry time.Duration
- refreshExpiry time.Duration
+ secret string
+ tokenExpiry time.Duration
}
var (
@@ -30,76 +23,59 @@ var (
once sync.Once
)
-// InitJwt 初始化全局 JWT 配置,只能调用一次
+// InitJwt 初始化全局 JWT 配置
func InitJwt() {
once.Do(func() {
manager = &jwtManager{
- secret: conf.GetConf().JWT.Secret,
- accessExpiry: conf.GetConf().JWT.AccessExpiry,
- refreshExpiry: conf.GetConf().JWT.RefreshExpiry,
+ secret: conf.GetConf().JWT.Secret,
+ tokenExpiry: conf.GetConf().JWT.AccessExpiry, // 直接当唯一 token
}
})
}
-// CreateAccessToken 全局函数创建 Access Token
-func CreateAccessToken(userID int64) (string, error) {
- return manager.createToken(userID, manager.accessExpiry)
+// CreateToken 创建 JWT
+func CreateToken(userID int64) (string, error) {
+ if manager == nil {
+ return "", jwt.ErrTokenInvalidClaims
+ }
+ return manager.createToken(userID)
}
-// CreateRefreshToken 全局函数创建 Refresh Token
-func CreateRefreshToken(userID int64) (string, error) {
- return manager.createToken(userID, manager.refreshExpiry)
-}
-
-// VerifyToken 全局函数验证 Token
-func VerifyToken(tokenString string) TokenResult {
- result := TokenResult{IsValid: false, IsExpired: false}
-
+// VerifyToken 校验 JWT(合法 or 不合法)
+func VerifyToken(tokenString string) (*CustomClaims, bool) {
if tokenString == "" || manager == nil {
- return result
+ return nil, false
}
token, err := jwt.ParseWithClaims(tokenString, &CustomClaims{}, func(token *jwt.Token) (interface{}, error) {
return []byte(manager.secret), nil
})
- if token == nil {
- return result
+ if err != nil || !token.Valid {
+ return nil, false
}
claims, ok := token.Claims.(*CustomClaims)
if !ok {
- return result
+ return nil, false
}
- if err != nil || !token.Valid {
- return result
- }
-
- result.Claims = claims
- result.IsValid = true
- if claims.ExpiresAt != nil && time.Now().After(claims.ExpiresAt.Time) {
- result.IsExpired = true
- }
- return result
+ return claims, true
}
-// 内部方法,生成 Token
-func (j *jwtManager) createToken(userID int64, expiry time.Duration) (string, error) {
+func (j *jwtManager) createToken(userID int64) (string, error) {
+ now := time.Now()
+
claims := &CustomClaims{
UserID: userID,
RegisteredClaims: jwt.RegisteredClaims{
- IssuedAt: jwt.NewNumericDate(time.Now()),
+ IssuedAt: jwt.NewNumericDate(now),
},
}
- switch {
- case expiry > 0:
- claims.ExpiresAt = jwt.NewNumericDate(time.Now().Add(expiry))
- case expiry == -1:
- claims.ExpiresAt = nil // 永不过期
- default:
- claims.ExpiresAt = jwt.NewNumericDate(time.Now().Add(time.Hour))
+ // 只有大于 0 才设置过期时间
+ if j.tokenExpiry > 0 {
+ claims.ExpiresAt = jwt.NewNumericDate(now.Add(j.tokenExpiry))
}
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
diff --git a/code/allapp/allapp-go/utils/pgtypex/pgtypex.go b/code/allapp/allapp-go/utils/pgtypex/pgtypex.go
index d981dbb6..2c04b123 100644
--- a/code/allapp/allapp-go/utils/pgtypex/pgtypex.go
+++ b/code/allapp/allapp-go/utils/pgtypex/pgtypex.go
@@ -135,3 +135,10 @@ func DateToString(d pgtype.Date) string {
}
return d.Time.Format("2006-01-02")
}
+
+func Int32ToPgInt4(value int32) pgtype.Int4 {
+ return pgtype.Int4{
+ Int32: value,
+ Valid: true,
+ }
+}
diff --git a/code/allapp/allapp-rn/.env b/code/allapp/allapp-rn/.env
new file mode 100644
index 00000000..511c27a4
--- /dev/null
+++ b/code/allapp/allapp-rn/.env
@@ -0,0 +1 @@
+EXPO_PUBLIC_QQ_ID=102826474
\ No newline at end of file
diff --git a/code/allapp/allapp-rn/app.json b/code/allapp/allapp-rn/app.json
index 8b1b44e1..26c0d9f3 100644
--- a/code/allapp/allapp-rn/app.json
+++ b/code/allapp/allapp-rn/app.json
@@ -9,7 +9,8 @@
"newArchEnabled": true,
"scheme": [
"oneao",
- "tencent102826474"
+ "tencent102826474",
+ "wxdab3e21a1f7e392f"
],
"splash": {
"image": "./assets/splash-icon.png",
@@ -32,6 +33,7 @@
"favicon": "./assets/favicon.png"
},
"plugins": [
+ "./plugins/withAndroidSignature",
"expo-router",
"expo-font",
[
@@ -39,6 +41,16 @@
{
"appId": "102826474"
}
+ ],
+ "expo-wechat",
+ [
+ "expo-build-properties",
+ {
+ "android": {
+ "usesCleartextTraffic": true,
+ "extraProguardRules": "-keep class com.tencent.mm.opensdk.** { *; }\n-keep class com.tencent.wxop.** { *; }\n-keep class com.tencent.mm.sdk.** { *; }"
+ }
+ }
]
]
}
diff --git a/code/allapp/allapp-rn/babel.config.js b/code/allapp/allapp-rn/babel.config.js
index c771c108..275b9697 100644
--- a/code/allapp/allapp-rn/babel.config.js
+++ b/code/allapp/allapp-rn/babel.config.js
@@ -4,17 +4,6 @@ module.exports = function (api) {
presets: [
['babel-preset-expo', { jsxImportSource: 'nativewind' }],
'nativewind/babel',
- ],
- plugins: [
- [
- 'module-resolver',
- {
- root: ['./src'],
- alias: {
- '@': './src',
- },
- },
- ],
- ],
+ ]
}
}
diff --git a/code/allapp/allapp-rn/credentials/credentials.json b/code/allapp/allapp-rn/credentials/credentials.json
new file mode 100644
index 00000000..4f43db65
--- /dev/null
+++ b/code/allapp/allapp-rn/credentials/credentials.json
@@ -0,0 +1,17 @@
+{
+ "android": {
+ "keystore": {
+ "keystorePath": "credentials/oneao-android.keystore",
+ "keystorePassword": "zhang520..",
+ "keyAlias": "oneao-android",
+ "keyPassword": "zhang520.."
+ }
+ },
+ "ios": {
+ "provisioningProfilePath": "ios/certs/profile.mobileprovision",
+ "distributionCertificate": {
+ "path": "ios/certs/dist-cert.p12",
+ "password": "password"
+ }
+ }
+}
diff --git a/code/allapp/allapp-rn/credentials/oneao-android.keystore b/code/allapp/allapp-rn/credentials/oneao-android.keystore
new file mode 100644
index 00000000..05b3583c
Binary files /dev/null and b/code/allapp/allapp-rn/credentials/oneao-android.keystore differ
diff --git a/code/allapp/allapp-rn/package.json b/code/allapp/allapp-rn/package.json
index a9a9fde4..a4999952 100644
--- a/code/allapp/allapp-rn/package.json
+++ b/code/allapp/allapp-rn/package.json
@@ -17,27 +17,26 @@
"@gluestack/ui-next-adapter": "^3.0.3",
"@legendapp/motion": "2.4.0",
"@react-native-async-storage/async-storage": "2.2.0",
- "@react-native-community/datetimepicker": "8.4.4",
- "@react-native-segmented-control/segmented-control": "2.5.7",
- "@react-navigation/drawer": "^7.7.9",
+ "@react-navigation/drawer": "^7.5.0",
"@yz1311/react-native-wheel-picker": "^0.4.5",
"alova": "^3.3.4",
"axios": "^1.13.2",
"big.js": "^7.0.1",
"dayjs": "^1.11.19",
- "expo": "~54.0.23",
- "expo-blur": "~15.0.7",
- "expo-clipboard": "~8.0.7",
- "expo-constants": "~18.0.10",
- "expo-font": "~14.0.9",
- "expo-linear-gradient": "~15.0.7",
- "expo-linking": "~8.0.8",
- "expo-qq": "^0.1.5",
- "expo-router": "~6.0.17",
- "expo-splash-screen": "~31.0.10",
- "expo-status-bar": "~3.0.8",
+ "expo": "~54.0.32",
+ "expo-blur": "~15.0.8",
+ "expo-build-properties": "~1.0.10",
+ "expo-clipboard": "~8.0.8",
+ "expo-constants": "~18.0.13",
+ "expo-font": "~14.0.11",
+ "expo-linear-gradient": "~15.0.8",
+ "expo-linking": "~8.0.11",
+ "expo-qq": "^0.1.6",
+ "expo-router": "~6.0.22",
+ "expo-splash-screen": "~31.0.13",
+ "expo-status-bar": "~3.0.9",
+ "expo-wechat": "^0.2.6",
"lucide-react-native": "^0.510.0",
- "moment": "^2.30.1",
"nativewind": "^4.2.1",
"react": "19.1.0",
"react-dom": "19.1.0",
@@ -61,9 +60,11 @@
},
"devDependencies": {
"@antfu/eslint-config": "^6.2.0",
+ "@babel/plugin-transform-react-jsx": "^7.28.6",
"@types/big.js": "^6.2.2",
"@types/react": "~19.1.0",
"babel-plugin-module-resolver": "^5.0.2",
+ "babel-preset-expo": "^54.0.10",
"baseline-browser-mapping": "^2.9.14",
"eslint": "^9.38.0",
"react-native-iconfont-cli": "^2.2.4",
diff --git a/code/allapp/allapp-rn/plugins/withAndroidSignature.js b/code/allapp/allapp-rn/plugins/withAndroidSignature.js
new file mode 100644
index 00000000..61af8bad
--- /dev/null
+++ b/code/allapp/allapp-rn/plugins/withAndroidSignature.js
@@ -0,0 +1,47 @@
+// plugins/withAndroidSignature.js
+
+const fs = require('node:fs')
+const path = require('node:path')
+const { withAppBuildGradle } = require('expo/config-plugins')
+
+module.exports = function withAndroidSignature(config) {
+ return withAppBuildGradle(config, (config) => {
+ if (config.modResults.language === 'groovy') {
+ config.modResults.contents = setAndroidSignature(config.modResults.contents)
+ }
+ else {
+ throw new Error('如果不是 groovy,则无法在 app/build.gradle 中设置 signingConfigs')
+ }
+ return config
+ })
+}
+
+function setAndroidSignature(appBuildGradle) {
+ if (!fs.existsSync(path.resolve(__dirname, '../credentials/credentials.json'))) {
+ console.warn('警告:没有设置正式版本的 Android Keystore 文件,因为 credentials.json 不存在。')
+ return appBuildGradle
+ }
+ const info = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../credentials/credentials.json'), { encoding: 'utf8' }))
+
+ // 使用正则表达式插入签名信息
+ let output = appBuildGradle.replace(
+ /(signingConfigs\s*\{)/,
+ `$1
+ release {
+ storeFile file(${JSON.stringify(path.resolve(__dirname, '../credentials/oneao-android.keystore'))})
+ storePassword ${JSON.stringify(info.android.keystore.keystorePassword)}
+ keyAlias ${JSON.stringify(info.android.keystore.keyAlias)}
+ keyPassword ${JSON.stringify(info.android.keystore.keyPassword)}
+ }`,
+ )
+
+ // 使用正则表达式替换 signingConfig
+ output = output.replace(
+ /(release\s*\{)[^}]*?signingConfig\s+signingConfigs\.debug/,
+ `$1
+ signingConfig signingConfigs.release
+`,
+ )
+
+ return output
+}
diff --git a/code/allapp/allapp-rn/pnpm-lock.yaml b/code/allapp/allapp-rn/pnpm-lock.yaml
index f559fdea..92b49902 100644
--- a/code/allapp/allapp-rn/pnpm-lock.yaml
+++ b/code/allapp/allapp-rn/pnpm-lock.yaml
@@ -29,14 +29,8 @@ importers:
'@react-native-async-storage/async-storage':
specifier: 2.2.0
version: 2.2.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))
- '@react-native-community/datetimepicker':
- specifier: 8.4.4
- version: 8.4.4(expo@54.0.23)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
- '@react-native-segmented-control/segmented-control':
- specifier: 2.5.7
- version: 2.5.7(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
'@react-navigation/drawer':
- specifier: ^7.7.9
+ specifier: ^7.5.0
version: 7.7.9(@react-navigation/native@7.1.19(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-gesture-handler@2.28.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-reanimated@4.1.5(@babel/core@7.28.5)(react-native-worklets@0.5.1(@babel/core@7.28.5)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-screens@4.16.0(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
'@yz1311/react-native-wheel-picker':
specifier: ^0.4.5
@@ -54,44 +48,47 @@ importers:
specifier: ^1.11.19
version: 1.11.19
expo:
- specifier: ~54.0.23
- version: 54.0.23(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.17)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ specifier: ~54.0.32
+ version: 54.0.32(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
expo-blur:
- specifier: ~15.0.7
- version: 15.0.7(expo@54.0.23)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ specifier: ~15.0.8
+ version: 15.0.8(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ expo-build-properties:
+ specifier: ~1.0.10
+ version: 1.0.10(expo@54.0.32)
expo-clipboard:
- specifier: ~8.0.7
- version: 8.0.7(expo@54.0.23)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
- expo-constants:
- specifier: ~18.0.10
- version: 18.0.10(expo@54.0.23)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))
- expo-font:
- specifier: ~14.0.9
- version: 14.0.9(expo@54.0.23)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
- expo-linear-gradient:
- specifier: ~15.0.7
- version: 15.0.7(expo@54.0.23)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
- expo-linking:
specifier: ~8.0.8
- version: 8.0.8(expo@54.0.23)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ version: 8.0.8(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ expo-constants:
+ specifier: ~18.0.13
+ version: 18.0.13(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))
+ expo-font:
+ specifier: ~14.0.11
+ version: 14.0.11(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ expo-linear-gradient:
+ specifier: ~15.0.8
+ version: 15.0.8(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ expo-linking:
+ specifier: ~8.0.11
+ version: 8.0.11(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
expo-qq:
- specifier: ^0.1.5
- version: 0.1.5(expo@54.0.23)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ specifier: ^0.1.6
+ version: 0.1.6(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
expo-router:
- specifier: ~6.0.17
- version: 6.0.17(349aaac499003fc399e184fbbadde92f)
+ specifier: ~6.0.22
+ version: 6.0.22(9f92a432648b6fec77143fe8d4a0fa6a)
expo-splash-screen:
- specifier: ~31.0.10
- version: 31.0.10(expo@54.0.23)
+ specifier: ~31.0.13
+ version: 31.0.13(expo@54.0.32)
expo-status-bar:
- specifier: ~3.0.8
- version: 3.0.8(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ specifier: ~3.0.9
+ version: 3.0.9(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ expo-wechat:
+ specifier: ^0.2.6
+ version: 0.2.6(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
lucide-react-native:
specifier: ^0.510.0
version: 0.510.0(react-native-svg@15.12.1(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
- moment:
- specifier: ^2.30.1
- version: 2.30.1
nativewind:
specifier: ^4.2.1
version: 4.2.1(react-native-reanimated@4.1.5(@babel/core@7.28.5)(react-native-worklets@0.5.1(@babel/core@7.28.5)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-svg@15.12.1(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(tailwindcss@3.4.18(yaml@2.8.1))
@@ -156,6 +153,9 @@ importers:
'@antfu/eslint-config':
specifier: ^6.2.0
version: 6.2.0(@vue/compiler-sfc@3.5.24)(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@babel/plugin-transform-react-jsx':
+ specifier: ^7.28.6
+ version: 7.28.6(@babel/core@7.28.5)
'@types/big.js':
specifier: ^6.2.2
version: 6.2.2
@@ -165,6 +165,9 @@ importers:
babel-plugin-module-resolver:
specifier: ^5.0.2
version: 5.0.2
+ babel-preset-expo:
+ specifier: ^54.0.10
+ version: 54.0.10(@babel/core@7.28.5)(@babel/runtime@7.28.4)(expo@54.0.32)(react-refresh@0.14.2)
baseline-browser-mapping:
specifier: ^2.9.14
version: 2.9.14
@@ -272,6 +275,10 @@ packages:
resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
engines: {node: '>=6.9.0'}
+ '@babel/code-frame@7.28.6':
+ resolution: {integrity: sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==}
+ engines: {node: '>=6.9.0'}
+
'@babel/compat-data@7.28.5':
resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==}
engines: {node: '>=6.9.0'}
@@ -284,6 +291,10 @@ packages:
resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==}
engines: {node: '>=6.9.0'}
+ '@babel/generator@7.28.6':
+ resolution: {integrity: sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==}
+ engines: {node: '>=6.9.0'}
+
'@babel/helper-annotate-as-pure@7.27.3':
resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==}
engines: {node: '>=6.9.0'}
@@ -321,6 +332,10 @@ packages:
resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
engines: {node: '>=6.9.0'}
+ '@babel/helper-module-imports@7.28.6':
+ resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==}
+ engines: {node: '>=6.9.0'}
+
'@babel/helper-module-transforms@7.28.3':
resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==}
engines: {node: '>=6.9.0'}
@@ -335,6 +350,10 @@ packages:
resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==}
engines: {node: '>=6.9.0'}
+ '@babel/helper-plugin-utils@7.28.6':
+ resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==}
+ engines: {node: '>=6.9.0'}
+
'@babel/helper-remap-async-to-generator@7.27.1':
resolution: {integrity: sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==}
engines: {node: '>=6.9.0'}
@@ -380,6 +399,11 @@ packages:
engines: {node: '>=6.0.0'}
hasBin: true
+ '@babel/parser@7.28.6':
+ resolution: {integrity: sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
'@babel/plugin-proposal-decorators@7.28.0':
resolution: {integrity: sha512-zOiZqvANjWDUaUS9xMxbMcK/Zccztbe/6ikvUXaG9nsPH3w6qh5UaPGAnirI/WhIbZ8m3OHU0ReyPrknG+ZKeg==}
engines: {node: '>=6.9.0'}
@@ -458,6 +482,12 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-syntax-jsx@7.28.6':
+ resolution: {integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-syntax-logical-assignment-operators@7.10.4':
resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
peerDependencies:
@@ -680,8 +710,8 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-react-jsx@7.27.1':
- resolution: {integrity: sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==}
+ '@babel/plugin-transform-react-jsx@7.28.6':
+ resolution: {integrity: sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
@@ -760,14 +790,26 @@ packages:
resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
engines: {node: '>=6.9.0'}
+ '@babel/template@7.28.6':
+ resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==}
+ engines: {node: '>=6.9.0'}
+
'@babel/traverse@7.28.5':
resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==}
engines: {node: '>=6.9.0'}
+ '@babel/traverse@7.28.6':
+ resolution: {integrity: sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==}
+ engines: {node: '>=6.9.0'}
+
'@babel/types@7.28.5':
resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==}
engines: {node: '>=6.9.0'}
+ '@babel/types@7.28.6':
+ resolution: {integrity: sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==}
+ engines: {node: '>=6.9.0'}
+
'@clack/core@0.5.0':
resolution: {integrity: sha512-p3y0FIOwaYRUPRcMO7+dlmLh8PSRcrjuTndsiA0WAFbWES0mLZlrjVoBRZ9DzkPFJZG6KGkJmoEAY0ZcVWTkow==}
@@ -847,8 +889,8 @@ packages:
resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@expo/cli@54.0.16':
- resolution: {integrity: sha512-hY/OdRaJMs5WsVPuVSZ+RLH3VObJmL/pv5CGCHEZHN2PxZjSZSdctyKV8UcFBXTF0yIKNAJ9XLs1dlNYXHh4Cw==}
+ '@expo/cli@54.0.22':
+ resolution: {integrity: sha512-BTH2FCczhJLfj1cpfcKrzhKnvRLTOztgW4bVloKDqH+G3ZSohWLRFNAIz56XtdjPxBbi2/qWhGBAkl7kBon/Jw==}
hasBin: true
peerDependencies:
expo: '*'
@@ -860,23 +902,23 @@ packages:
react-native:
optional: true
- '@expo/code-signing-certificates@0.0.5':
- resolution: {integrity: sha512-BNhXkY1bblxKZpltzAx98G2Egj9g1Q+JRcvR7E99DOj862FTCX+ZPsAUtPTr7aHxwtrL7+fL3r0JSmM9kBm+Bw==}
+ '@expo/code-signing-certificates@0.0.6':
+ resolution: {integrity: sha512-iNe0puxwBNEcuua9gmTGzq+SuMDa0iATai1FlFTMHJ/vUmKvN/V//drXoLJkVb5i5H3iE/n/qIJxyoBnXouD0w==}
- '@expo/config-plugins@54.0.2':
- resolution: {integrity: sha512-jD4qxFcURQUVsUFGMcbo63a/AnviK8WUGard+yrdQE3ZrB/aurn68SlApjirQQLEizhjI5Ar2ufqflOBlNpyPg==}
+ '@expo/config-plugins@54.0.4':
+ resolution: {integrity: sha512-g2yXGICdoOw5i3LkQSDxl2Q5AlQCrG7oniu0pCPPO+UxGb7He4AFqSvPSy8HpRUj55io17hT62FTjYRD+d6j3Q==}
- '@expo/config-types@54.0.8':
- resolution: {integrity: sha512-lyIn/x/Yz0SgHL7IGWtgTLg6TJWC9vL7489++0hzCHZ4iGjVcfZmPTUfiragZ3HycFFj899qN0jlhl49IHa94A==}
+ '@expo/config-types@54.0.10':
+ resolution: {integrity: sha512-/J16SC2an1LdtCZ67xhSkGXpALYUVUNyZws7v+PVsFZxClYehDSoKLqyRaGkpHlYrCc08bS0RF5E0JV6g50psA==}
- '@expo/config@12.0.10':
- resolution: {integrity: sha512-lJMof5Nqakq1DxGYlghYB/ogSBjmv4Fxn1ovyDmcjlRsQdFCXgu06gEUogkhPtc9wBt9WlTTfqENln5HHyLW6w==}
+ '@expo/config@12.0.13':
+ resolution: {integrity: sha512-Cu52arBa4vSaupIWsF0h7F/Cg//N374nYb7HAxV0I4KceKA7x2UXpYaHOL7EEYYvp7tZdThBjvGpVmr8ScIvaQ==}
- '@expo/devcert@1.2.0':
- resolution: {integrity: sha512-Uilcv3xGELD5t/b0eM4cxBFEKQRIivB3v7i+VhWLV/gL98aw810unLKKJbGAxAIhY6Ipyz8ChWibFsKFXYwstA==}
+ '@expo/devcert@1.2.1':
+ resolution: {integrity: sha512-qC4eaxmKMTmJC2ahwyui6ud8f3W60Ss7pMkpBq40Hu3zyiAaugPXnZ24145U7K36qO9UHdZUVxsCvIpz2RYYCA==}
- '@expo/devtools@0.1.7':
- resolution: {integrity: sha512-dfIa9qMyXN+0RfU6SN4rKeXZyzKWsnz6xBSDccjL4IRiE+fQ0t84zg0yxgN4t/WK2JU5v6v4fby7W7Crv9gJvA==}
+ '@expo/devtools@0.1.8':
+ resolution: {integrity: sha512-SVLxbuanDjJPgc0sy3EfXUMLb/tXzp6XIHkhtPVmTWJAp+FOr6+5SeiCfJrCzZFet0Ifyke2vX3sFcKwEvCXwQ==}
peerDependencies:
react: '*'
react-native: '*'
@@ -886,32 +928,24 @@ packages:
react-native:
optional: true
- '@expo/env@2.0.7':
- resolution: {integrity: sha512-BNETbLEohk3HQ2LxwwezpG8pq+h7Fs7/vAMP3eAtFT1BCpprLYoBBFZH7gW4aqGfqOcVP4Lc91j014verrYNGg==}
+ '@expo/env@2.0.8':
+ resolution: {integrity: sha512-5VQD6GT8HIMRaSaB5JFtOXuvfDVU80YtZIuUT/GDhUF782usIXY13Tn3IdDz1Tm/lqA9qnRZQ1BF4t7LlvdJPA==}
- '@expo/fingerprint@0.15.3':
- resolution: {integrity: sha512-8YPJpEYlmV171fi+t+cSLMX1nC5ngY9j2FiN70dHldLpd6Ct6ouGhk96svJ4BQZwsqwII2pokwzrDAwqo4Z0FQ==}
+ '@expo/fingerprint@0.15.4':
+ resolution: {integrity: sha512-eYlxcrGdR2/j2M6pEDXo9zU9KXXF1vhP+V+Tl+lyY+bU8lnzrN6c637mz6Ye3em2ANy8hhUR03Raf8VsT9Ogng==}
hasBin: true
'@expo/html-elements@0.12.5':
resolution: {integrity: sha512-28KWO88YKykKU7ke5sEQs5TivFRMs1Aktz13xxgqAf5rTgb+lka0VKVt3W2fG7ksbUQ407rtUqz7SEAq298NvQ==}
- '@expo/image-utils@0.8.7':
- resolution: {integrity: sha512-SXOww4Wq3RVXLyOaXiCCuQFguCDh8mmaHBv54h/R29wGl4jRY8GEyQEx8SypV/iHt1FbzsU/X3Qbcd9afm2W2w==}
+ '@expo/image-utils@0.8.8':
+ resolution: {integrity: sha512-HHHaG4J4nKjTtVa1GG9PCh763xlETScfEyNxxOvfTRr8IKPJckjTyqSLEtdJoFNJ1vqiABEjW7tqGhqGibZLeA==}
- '@expo/json-file@10.0.7':
- resolution: {integrity: sha512-z2OTC0XNO6riZu98EjdNHC05l51ySeTto6GP7oSQrCvQgG9ARBwD1YvMQaVZ9wU7p/4LzSf1O7tckL3B45fPpw==}
+ '@expo/json-file@10.0.8':
+ resolution: {integrity: sha512-9LOTh1PgKizD1VXfGQ88LtDH0lRwq9lsTb4aichWTWSWqy3Ugfkhfm3BhzBIkJJfQQ5iJu3m/BoRlEIjoCGcnQ==}
- '@expo/mcp-tunnel@0.1.0':
- resolution: {integrity: sha512-rJ6hl0GnIZj9+ssaJvFsC7fwyrmndcGz+RGFzu+0gnlm78X01957yjtHgjcmnQAgL5hWEOR6pkT0ijY5nU5AWw==}
- peerDependencies:
- '@modelcontextprotocol/sdk': ^1.13.2
- peerDependenciesMeta:
- '@modelcontextprotocol/sdk':
- optional: true
-
- '@expo/metro-config@54.0.9':
- resolution: {integrity: sha512-CRI4WgFXrQ2Owyr8q0liEBJveUIF9DcYAKadMRsJV7NxGNBdrIIKzKvqreDfsGiRqivbLsw6UoNb3UE7/SvPfg==}
+ '@expo/metro-config@54.0.14':
+ resolution: {integrity: sha512-hxpLyDfOR4L23tJ9W1IbJJsG7k4lv2sotohBm/kTYyiG+pe1SYCAWsRmgk+H42o/wWf/HQjE5k45S5TomGLxNA==}
peerDependencies:
expo: '*'
peerDependenciesMeta:
@@ -929,27 +963,24 @@ packages:
react-dom:
optional: true
- '@expo/metro@54.1.0':
- resolution: {integrity: sha512-MgdeRNT/LH0v1wcO0TZp9Qn8zEF0X2ACI0wliPtv5kXVbXWI+yK9GyrstwLAiTXlULKVIg3HVSCCvmLu0M3tnw==}
+ '@expo/metro@54.2.0':
+ resolution: {integrity: sha512-h68TNZPGsk6swMmLm9nRSnE2UXm48rWwgcbtAHVMikXvbxdS41NDHHeqg1rcQ9AbznDRp6SQVC2MVpDnsRKU1w==}
- '@expo/osascript@2.3.7':
- resolution: {integrity: sha512-IClSOXxR0YUFxIriUJVqyYki7lLMIHrrzOaP01yxAL1G8pj2DWV5eW1y5jSzIcIfSCNhtGsshGd1tU/AYup5iQ==}
+ '@expo/osascript@2.3.8':
+ resolution: {integrity: sha512-/TuOZvSG7Nn0I8c+FcEaoHeBO07yu6vwDgk7rZVvAXoeAK5rkA09jRyjYsZo+0tMEFaToBeywA6pj50Mb3ny9w==}
engines: {node: '>=12'}
- '@expo/package-manager@1.9.8':
- resolution: {integrity: sha512-4/I6OWquKXYnzo38pkISHCOCOXxfeEmu4uDoERq1Ei/9Ur/s9y3kLbAamEkitUkDC7gHk1INxRWEfFNzGbmOrA==}
+ '@expo/package-manager@1.9.10':
+ resolution: {integrity: sha512-axJm+NOj3jVxep49va/+L3KkF3YW/dkV+RwzqUJedZrv4LeTqOG4rhrCaCPXHTvLqCTDKu6j0Xyd28N7mnxsGA==}
- '@expo/plist@0.4.7':
- resolution: {integrity: sha512-dGxqHPvCZKeRKDU1sJZMmuyVtcASuSYh1LPFVaM1DuffqPL36n6FMEL0iUqq2Tx3xhWk8wCnWl34IKplUjJDdA==}
+ '@expo/plist@0.4.8':
+ resolution: {integrity: sha512-pfNtErGGzzRwHP+5+RqswzPDKkZrx+Cli0mzjQaus1ZWFsog5ibL+nVT3NcporW51o8ggnt7x813vtRbPiyOrQ==}
- '@expo/prebuild-config@54.0.6':
- resolution: {integrity: sha512-xowuMmyPNy+WTNq+YX0m0EFO/Knc68swjThk4dKivgZa8zI1UjvFXOBIOp8RX4ljCXLzwxQJM5oBBTvyn+59ZA==}
+ '@expo/prebuild-config@54.0.8':
+ resolution: {integrity: sha512-EA7N4dloty2t5Rde+HP0IEE+nkAQiu4A/+QGZGT9mFnZ5KKjPPkqSyYcRvP5bhQE10D+tvz6X0ngZpulbMdbsg==}
peerDependencies:
expo: '*'
- '@expo/schema-utils@0.1.7':
- resolution: {integrity: sha512-jWHoSuwRb5ZczjahrychMJ3GWZu54jK9ulNdh1d4OzAEq672K9E5yOlnlBsfIHWHGzUAT+0CL7Yt1INiXTz68g==}
-
'@expo/schema-utils@0.1.8':
resolution: {integrity: sha512-9I6ZqvnAvKKDiO+ZF8BpQQFYWXOJvTAL5L/227RUbWG1OVZDInFifzCBiqAZ3b67NRfeAgpgvbA7rejsqhY62A==}
@@ -1044,6 +1075,14 @@ packages:
'@internationalized/string@3.2.7':
resolution: {integrity: sha512-D4OHBjrinH+PFZPvfCXvG28n2LSykWcJ7GIioQL+ok0LON15SdfoUssoHzzOUmVZLbRoREsQXVzA6r8JKsbP6A==}
+ '@isaacs/balanced-match@4.0.1':
+ resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==}
+ engines: {node: 20 || >=22}
+
+ '@isaacs/brace-expansion@5.0.0':
+ resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==}
+ engines: {node: 20 || >=22}
+
'@isaacs/cliui@8.0.2':
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
engines: {node: '>=12'}
@@ -1648,25 +1687,6 @@ packages:
peerDependencies:
react-native: ^0.0.0-0 || >=0.65 <1.0
- '@react-native-community/datetimepicker@8.4.4':
- resolution: {integrity: sha512-bc4ZixEHxZC9/qf5gbdYvIJiLZ5CLmEsC3j+Yhe1D1KC/3QhaIfGDVdUcid0PdlSoGOSEq4VlB93AWyetEyBSQ==}
- peerDependencies:
- expo: '>=52.0.0'
- react: '*'
- react-native: '*'
- react-native-windows: '*'
- peerDependenciesMeta:
- expo:
- optional: true
- react-native-windows:
- optional: true
-
- '@react-native-segmented-control/segmented-control@2.5.7':
- resolution: {integrity: sha512-l84YeVX8xAU3lvOJSvV4nK/NbGhIm2gBfveYolwaoCbRp+/SLXtc6mYrQmM9ScXNwU14mnzjQTpTHWl5YPnkzQ==}
- peerDependencies:
- react: '>=16.0'
- react-native: '>=0.62'
-
'@react-native/assets-registry@0.81.5':
resolution: {integrity: sha512-705B6x/5Kxm1RKRvSv0ADYWm5JOnoiQ1ufW7h8uu2E6G9Of/eE6hP/Ivw3U5jI16ERqZxiKQwk34VJbB0niX9w==}
engines: {node: '>= 20.19.4'}
@@ -2356,6 +2376,9 @@ packages:
ajv@6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+ ajv@8.17.1:
+ resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
+
alova@3.3.4:
resolution: {integrity: sha512-UKKqXdvf8aQ4C7m3brO77YWe5CDz8N59PdAUz7M8gowKUUXTutbk0Vk5DRBrCe0hMUyyNMUhdCZ38llGxCViyQ==}
engines: {node: '>= 18.0.0'}
@@ -2491,8 +2514,8 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0 || ^8.0.0-0
- babel-preset-expo@54.0.7:
- resolution: {integrity: sha512-JENWk0bvxW4I1ftveO8GRtX2t2TH6N4Z0TPvIHxroZ/4SswUfyNsUNbbP7Fm4erj3ar/JHGri5kTZ+s3xdjHZw==}
+ babel-preset-expo@54.0.10:
+ resolution: {integrity: sha512-wTt7POavLFypLcPW/uC5v8y+mtQKDJiyGLzYCjqr9tx0Qc3vCXcDKk1iCFIj/++Iy5CWhhTflEa7VvVPNWeCfw==}
peerDependencies:
'@babel/runtime': ^7.20.0
expo: '*'
@@ -3260,91 +3283,96 @@ packages:
exec-async@2.2.0:
resolution: {integrity: sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw==}
- expo-asset@12.0.9:
- resolution: {integrity: sha512-vrdRoyhGhBmd0nJcssTSk1Ypx3Mbn/eXaaBCQVkL0MJ8IOZpAObAjfD5CTy8+8RofcHEQdh3wwZVCs7crvfOeg==}
+ expo-asset@12.0.12:
+ resolution: {integrity: sha512-CsXFCQbx2fElSMn0lyTdRIyKlSXOal6ilLJd+yeZ6xaC7I9AICQgscY5nj0QcwgA+KYYCCEQEBndMsmj7drOWQ==}
peerDependencies:
expo: '*'
react: '*'
react-native: '*'
- expo-blur@15.0.7:
- resolution: {integrity: sha512-SugQQbQd+zRPy8z2G5qDD4NqhcD7srBF7fN7O7yq6q7ZFK59VWvpDxtMoUkmSfdxgqONsrBN/rLdk00USADrMg==}
+ expo-blur@15.0.8:
+ resolution: {integrity: sha512-rWyE1NBRZEu9WD+X+5l7gyPRszw7n12cW3IRNAb5i6KFzaBp8cxqT5oeaphJapqURvcqhkOZn2k5EtBSbsuU7w==}
peerDependencies:
expo: '*'
react: '*'
react-native: '*'
- expo-clipboard@8.0.7:
- resolution: {integrity: sha512-zvlfFV+wB2QQrQnHWlo0EKHAkdi2tycLtE+EXFUWTPZYkgu1XcH+aiKfd4ul7Z0SDF+1IuwoiW9AA9eO35aj3Q==}
+ expo-build-properties@1.0.10:
+ resolution: {integrity: sha512-mFCZbrbrv0AP5RB151tAoRzwRJelqM7bCJzCkxpu+owOyH+p/rFC/q7H5q8B9EpVWj8etaIuszR+gKwohpmu1Q==}
+ peerDependencies:
+ expo: '*'
+
+ expo-clipboard@8.0.8:
+ resolution: {integrity: sha512-VKoBkHIpZZDJTB0jRO4/PZskHdMNOEz3P/41tmM6fDuODMpqhvyWK053X0ebspkxiawJX9lX33JXHBCvVsTTOA==}
peerDependencies:
expo: '*'
react: '*'
react-native: '*'
- expo-constants@18.0.10:
- resolution: {integrity: sha512-Rhtv+X974k0Cahmvx6p7ER5+pNhBC0XbP1lRviL2J1Xl4sT2FBaIuIxF/0I0CbhOsySf0ksqc5caFweAy9Ewiw==}
+ expo-constants@18.0.13:
+ resolution: {integrity: sha512-FnZn12E1dRYKDHlAdIyNFhBurKTS3F9CrfrBDJI5m3D7U17KBHMQ6JEfYlSj7LG7t+Ulr+IKaj58L1k5gBwTcQ==}
peerDependencies:
expo: '*'
react-native: '*'
- expo-file-system@19.0.17:
- resolution: {integrity: sha512-WwaS01SUFrxBnExn87pg0sCTJjZpf2KAOzfImG0o8yhkU7fbYpihpl/oocXBEsNbj58a8hVt1Y4CVV5c1tzu/g==}
+ expo-file-system@19.0.21:
+ resolution: {integrity: sha512-s3DlrDdiscBHtab/6W1osrjGL+C2bvoInPJD7sOwmxfJ5Woynv2oc+Fz1/xVXaE/V7HE/+xrHC/H45tu6lZzzg==}
peerDependencies:
expo: '*'
react-native: '*'
- expo-font@14.0.9:
- resolution: {integrity: sha512-xCoQbR/36qqB6tew/LQ6GWICpaBmHLhg/Loix5Rku/0ZtNaXMJv08M9o1AcrdiGTn/Xf/BnLu6DgS45cWQEHZg==}
+ expo-font@14.0.11:
+ resolution: {integrity: sha512-ga0q61ny4s/kr4k8JX9hVH69exVSIfcIc19+qZ7gt71Mqtm7xy2c6kwsPTCyhBW2Ro5yXTT8EaZOpuRi35rHbg==}
peerDependencies:
expo: '*'
react: '*'
react-native: '*'
- expo-keep-awake@15.0.7:
- resolution: {integrity: sha512-CgBNcWVPnrIVII5G54QDqoE125l+zmqR4HR8q+MQaCfHet+dYpS5vX5zii/RMayzGN4jPgA4XYIQ28ePKFjHoA==}
+ expo-keep-awake@15.0.8:
+ resolution: {integrity: sha512-YK9M1VrnoH1vLJiQzChZgzDvVimVoriibiDIFLbQMpjYBnvyfUeHJcin/Gx1a+XgupNXy92EQJLgI/9ZuXajYQ==}
peerDependencies:
expo: '*'
react: '*'
- expo-linear-gradient@15.0.7:
- resolution: {integrity: sha512-yF+y+9Shpr/OQFfy/wglB/0bykFMbwHBTuMRa5Of/r2P1wbkcacx8rg0JsUWkXH/rn2i2iWdubyqlxSJa3ggZA==}
+ expo-linear-gradient@15.0.8:
+ resolution: {integrity: sha512-V2d8Wjn0VzhPHO+rrSBtcl+Fo+jUUccdlmQ6OoL9/XQB7Qk3d9lYrqKDJyccwDxmQT10JdST3Tmf2K52NLc3kw==}
peerDependencies:
expo: '*'
react: '*'
react-native: '*'
- expo-linking@8.0.8:
- resolution: {integrity: sha512-MyeMcbFDKhXh4sDD1EHwd0uxFQNAc6VCrwBkNvvvufUsTYFq3glTA9Y8a+x78CPpjNqwNAamu74yIaIz7IEJyg==}
+ expo-linking@8.0.11:
+ resolution: {integrity: sha512-+VSaNL5om3kOp/SSKO5qe6cFgfSIWnnQDSbA7XLs3ECkYzXRquk5unxNS3pg7eK5kNUmQ4kgLI7MhTggAEUBLA==}
peerDependencies:
react: '*'
react-native: '*'
- expo-modules-autolinking@3.0.21:
- resolution: {integrity: sha512-pOtPDLln3Ju8DW1zRW4OwZ702YqZ8g+kM/tEY1sWfv22kWUtxkvK+ytRDRpRdnKEnC28okbhWqeMnmVkSFzP6Q==}
+ expo-modules-autolinking@3.0.24:
+ resolution: {integrity: sha512-TP+6HTwhL7orDvsz2VzauyQlXJcAWyU3ANsZ7JGL4DQu8XaZv/A41ZchbtAYLfozNA2Ya1Hzmhx65hXryBMjaQ==}
hasBin: true
- expo-modules-core@3.0.25:
- resolution: {integrity: sha512-0P8PT8UV6c5/+p8zeVM/FXvBgn/ErtGcMaasqUgbzzBUg94ktbkIrij9t9reGCrir03BYt/Bcpv+EQtYC8JOug==}
+ expo-modules-core@3.0.29:
+ resolution: {integrity: sha512-LzipcjGqk8gvkrOUf7O2mejNWugPkf3lmd9GkqL9WuNyeN2fRwU0Dn77e3ZUKI3k6sI+DNwjkq4Nu9fNN9WS7Q==}
peerDependencies:
react: '*'
react-native: '*'
- expo-qq@0.1.5:
- resolution: {integrity: sha512-wEL+QOJpjSIJ0QdHcl726elSnIZryt/0QpVuZhcY5h9Iaq5iGMssdgRQtk2aCyvMhFnUpGxP9ckVSJsqcUvwgg==}
+ expo-qq@0.1.6:
+ resolution: {integrity: sha512-aHy6J/qJOQmFb7X+IazakPYcrUWxIwfyo8qoNTFCsje5sp8t+10R2hFV9fZTEwEjrW75TK2LoOyxcFvoXjK4FQ==}
peerDependencies:
expo: '*'
react: '*'
react-native: '*'
- expo-router@6.0.17:
- resolution: {integrity: sha512-2n0lTidH2H+dOjk/Lu+krKIgK7b1qQ3O/9RWmf9P5IEuFiu7BSUgSDc+g69bUEElTnca8FR+zPTyk15kMXHrXg==}
+ expo-router@6.0.22:
+ resolution: {integrity: sha512-6eOwobaVZQRsSQv0IoWwVlPbJru1zbreVsuPFIWwk7HApENStU2MggrceHXJqXjGho+FKeXxUop/gqOFDzpOMg==}
peerDependencies:
'@expo/metro-runtime': ^6.1.2
'@react-navigation/drawer': ^7.5.0
'@testing-library/react-native': '>= 12.0.0'
expo: '*'
- expo-constants: ^18.0.11
- expo-linking: ^8.0.10
+ expo-constants: ^18.0.13
+ expo-linking: ^8.0.11
react: '*'
react-dom: '*'
react-native: '*'
@@ -3353,7 +3381,7 @@ packages:
react-native-safe-area-context: '>= 5.4.0'
react-native-screens: '*'
react-native-web: '*'
- react-server-dom-webpack: ~19.0.1 || ~19.1.2 || ~19.2.1
+ react-server-dom-webpack: ~19.0.3 || ~19.1.4 || ~19.2.3
peerDependenciesMeta:
'@react-navigation/drawer':
optional: true
@@ -3370,27 +3398,30 @@ packages:
react-server-dom-webpack:
optional: true
- expo-server@1.0.4:
- resolution: {integrity: sha512-IN06r3oPxFh3plSXdvBL7dx0x6k+0/g0bgxJlNISs6qL5Z+gyPuWS750dpTzOeu37KyBG0RcyO9cXUKzjYgd4A==}
- engines: {node: '>=20.16.0'}
-
expo-server@1.0.5:
resolution: {integrity: sha512-IGR++flYH70rhLyeXF0Phle56/k4cee87WeQ4mamS+MkVAVP+dDlOHf2nN06Z9Y2KhU0Gp1k+y61KkghF7HdhA==}
engines: {node: '>=20.16.0'}
- expo-splash-screen@31.0.10:
- resolution: {integrity: sha512-i6g9IK798mae4yvflstQ1HkgahIJ6exzTCTw4vEdxV0J2SwiW3Tj+CwRjf0te7Zsb+7dDQhBTmGZwdv00VER2A==}
+ expo-splash-screen@31.0.13:
+ resolution: {integrity: sha512-1epJLC1cDlwwj089R2h8cxaU5uk4ONVAC+vzGiTZH4YARQhL4Stlz1MbR6yAS173GMosvkE6CAeihR7oIbCkDA==}
peerDependencies:
expo: '*'
- expo-status-bar@3.0.8:
- resolution: {integrity: sha512-L248XKPhum7tvREoS1VfE0H6dPCaGtoUWzRsUv7hGKdiB4cus33Rc0sxkWkoQ77wE8stlnUlL5lvmT0oqZ3ZBw==}
+ expo-status-bar@3.0.9:
+ resolution: {integrity: sha512-xyYyVg6V1/SSOZWh4Ni3U129XHCnFHBTcUo0dhWtFDrZbNp/duw5AGsQfb2sVeU0gxWHXSY1+5F0jnKYC7WuOw==}
peerDependencies:
react: '*'
react-native: '*'
- expo@54.0.23:
- resolution: {integrity: sha512-b4uQoiRwQ6nwqsT2709RS15CWYNGF3eJtyr1KyLw9WuMAK7u4jjofkhRiO0+3o1C2NbV+WooyYTOZGubQQMBaQ==}
+ expo-wechat@0.2.6:
+ resolution: {integrity: sha512-hLWFPDqSKwEgG8Jm0cTthyQftD/ip9xjJLQUEd+fJJVq8YEiEt0gJCCgCEMbr1SrEjoK4TUlkG/HETZobNReuQ==}
+ peerDependencies:
+ expo: '*'
+ react: '*'
+ react-native: '*'
+
+ expo@54.0.32:
+ resolution: {integrity: sha512-yL9eTxiQ/QKKggVDAWO5CLjUl6IS0lPYgEvC3QM4q4fxd6rs7ks3DnbXSGVU3KNFoY/7cRNYihvd0LKYP+MCXA==}
hasBin: true
peerDependencies:
'@expo/dom-webview': '*'
@@ -3425,6 +3456,9 @@ packages:
fast-levenshtein@2.0.6:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+ fast-uri@3.1.0:
+ resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==}
+
fastq@1.19.1:
resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
@@ -3594,6 +3628,10 @@ packages:
resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
hasBin: true
+ glob@13.0.0:
+ resolution: {integrity: sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==}
+ engines: {node: 20 || >=22}
+
glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
deprecated: Glob versions prior to v9 are no longer supported
@@ -3878,6 +3916,9 @@ packages:
json-schema-traverse@0.4.1:
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+ json-schema-traverse@1.0.0:
+ resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
+
json-stable-stringify-without-jsonify@1.0.1:
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
@@ -4101,6 +4142,10 @@ packages:
lru-cache@10.4.3:
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
+ lru-cache@11.2.4:
+ resolution: {integrity: sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==}
+ engines: {node: 20 || >=22}
+
lru-cache@5.1.1:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
@@ -4189,117 +4234,59 @@ packages:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'}
- metro-babel-transformer@0.83.2:
- resolution: {integrity: sha512-rirY1QMFlA1uxH3ZiNauBninwTioOgwChnRdDcbB4tgRZ+bGX9DiXoh9QdpppiaVKXdJsII932OwWXGGV4+Nlw==}
- engines: {node: '>=20.19.4'}
-
metro-babel-transformer@0.83.3:
resolution: {integrity: sha512-1vxlvj2yY24ES1O5RsSIvg4a4WeL7PFXgKOHvXTXiW0deLvQr28ExXj6LjwCCDZ4YZLhq6HddLpZnX4dEdSq5g==}
engines: {node: '>=20.19.4'}
- metro-cache-key@0.83.2:
- resolution: {integrity: sha512-3EMG/GkGKYoTaf5RqguGLSWRqGTwO7NQ0qXKmNBjr0y6qD9s3VBXYlwB+MszGtmOKsqE9q3FPrE5Nd9Ipv7rZw==}
- engines: {node: '>=20.19.4'}
-
metro-cache-key@0.83.3:
resolution: {integrity: sha512-59ZO049jKzSmvBmG/B5bZ6/dztP0ilp0o988nc6dpaDsU05Cl1c/lRf+yx8m9WW/JVgbmfO5MziBU559XjI5Zw==}
engines: {node: '>=20.19.4'}
- metro-cache@0.83.2:
- resolution: {integrity: sha512-Z43IodutUZeIS7OTH+yQFjc59QlFJ6s5OvM8p2AP9alr0+F8UKr8ADzFzoGKoHefZSKGa4bJx7MZJLF6GwPDHQ==}
- engines: {node: '>=20.19.4'}
-
metro-cache@0.83.3:
resolution: {integrity: sha512-3jo65X515mQJvKqK3vWRblxDEcgY55Sk3w4xa6LlfEXgQ9g1WgMh9m4qVZVwgcHoLy0a2HENTPCCX4Pk6s8c8Q==}
engines: {node: '>=20.19.4'}
- metro-config@0.83.2:
- resolution: {integrity: sha512-1FjCcdBe3e3D08gSSiU9u3Vtxd7alGH3x/DNFqWDFf5NouX4kLgbVloDDClr1UrLz62c0fHh2Vfr9ecmrOZp+g==}
- engines: {node: '>=20.19.4'}
-
metro-config@0.83.3:
resolution: {integrity: sha512-mTel7ipT0yNjKILIan04bkJkuCzUUkm2SeEaTads8VfEecCh+ltXchdq6DovXJqzQAXuR2P9cxZB47Lg4klriA==}
engines: {node: '>=20.19.4'}
- metro-core@0.83.2:
- resolution: {integrity: sha512-8DRb0O82Br0IW77cNgKMLYWUkx48lWxUkvNUxVISyMkcNwE/9ywf1MYQUE88HaKwSrqne6kFgCSA/UWZoUT0Iw==}
- engines: {node: '>=20.19.4'}
-
metro-core@0.83.3:
resolution: {integrity: sha512-M+X59lm7oBmJZamc96usuF1kusd5YimqG/q97g4Ac7slnJ3YiGglW5CsOlicTR5EWf8MQFxxjDoB6ytTqRe8Hw==}
engines: {node: '>=20.19.4'}
- metro-file-map@0.83.2:
- resolution: {integrity: sha512-cMSWnEqZrp/dzZIEd7DEDdk72PXz6w5NOKriJoDN9p1TDQ5nAYrY2lHi8d6mwbcGLoSlWmpPyny9HZYFfPWcGQ==}
- engines: {node: '>=20.19.4'}
-
metro-file-map@0.83.3:
resolution: {integrity: sha512-jg5AcyE0Q9Xbbu/4NAwwZkmQn7doJCKGW0SLeSJmzNB9Z24jBe0AL2PHNMy4eu0JiKtNWHz9IiONGZWq7hjVTA==}
engines: {node: '>=20.19.4'}
- metro-minify-terser@0.83.2:
- resolution: {integrity: sha512-zvIxnh7U0JQ7vT4quasKsijId3dOAWgq+ip2jF/8TMrPUqQabGrs04L2dd0haQJ+PA+d4VvK/bPOY8X/vL2PWw==}
- engines: {node: '>=20.19.4'}
-
metro-minify-terser@0.83.3:
resolution: {integrity: sha512-O2BmfWj6FSfzBLrNCXt/rr2VYZdX5i6444QJU0fFoc7Ljg+Q+iqebwE3K0eTvkI6TRjELsXk1cjU+fXwAR4OjQ==}
engines: {node: '>=20.19.4'}
- metro-resolver@0.83.2:
- resolution: {integrity: sha512-Yf5mjyuiRE/Y+KvqfsZxrbHDA15NZxyfg8pIk0qg47LfAJhpMVEX+36e6ZRBq7KVBqy6VDX5Sq55iHGM4xSm7Q==}
- engines: {node: '>=20.19.4'}
-
metro-resolver@0.83.3:
resolution: {integrity: sha512-0js+zwI5flFxb1ktmR///bxHYg7OLpRpWZlBBruYG8OKYxeMP7SV0xQ/o/hUelrEMdK4LJzqVtHAhBm25LVfAQ==}
engines: {node: '>=20.19.4'}
- metro-runtime@0.83.2:
- resolution: {integrity: sha512-nnsPtgRvFbNKwemqs0FuyFDzXLl+ezuFsUXDbX8o0SXOfsOPijqiQrf3kuafO1Zx1aUWf4NOrKJMAQP5EEHg9A==}
- engines: {node: '>=20.19.4'}
-
metro-runtime@0.83.3:
resolution: {integrity: sha512-JHCJb9ebr9rfJ+LcssFYA2x1qPYuSD/bbePupIGhpMrsla7RCwC/VL3yJ9cSU+nUhU4c9Ixxy8tBta+JbDeZWw==}
engines: {node: '>=20.19.4'}
- metro-source-map@0.83.2:
- resolution: {integrity: sha512-5FL/6BSQvshIKjXOennt9upFngq2lFvDakZn5LfauIVq8+L4sxXewIlSTcxAtzbtjAIaXeOSVMtCJ5DdfCt9AA==}
- engines: {node: '>=20.19.4'}
-
metro-source-map@0.83.3:
resolution: {integrity: sha512-xkC3qwUBh2psVZgVavo8+r2C9Igkk3DibiOXSAht1aYRRcztEZNFtAMtfSB7sdO2iFMx2Mlyu++cBxz/fhdzQg==}
engines: {node: '>=20.19.4'}
- metro-symbolicate@0.83.2:
- resolution: {integrity: sha512-KoU9BLwxxED6n33KYuQQuc5bXkIxF3fSwlc3ouxrrdLWwhu64muYZNQrukkWzhVKRNFIXW7X2iM8JXpi2heIPw==}
- engines: {node: '>=20.19.4'}
- hasBin: true
-
metro-symbolicate@0.83.3:
resolution: {integrity: sha512-F/YChgKd6KbFK3eUR5HdUsfBqVsanf5lNTwFd4Ca7uuxnHgBC3kR/Hba/RGkenR3pZaGNp5Bu9ZqqP52Wyhomw==}
engines: {node: '>=20.19.4'}
hasBin: true
- metro-transform-plugins@0.83.2:
- resolution: {integrity: sha512-5WlW25WKPkiJk2yA9d8bMuZrgW7vfA4f4MBb9ZeHbTB3eIAoNN8vS8NENgG/X/90vpTB06X66OBvxhT3nHwP6A==}
- engines: {node: '>=20.19.4'}
-
metro-transform-plugins@0.83.3:
resolution: {integrity: sha512-eRGoKJU6jmqOakBMH5kUB7VitEWiNrDzBHpYbkBXW7C5fUGeOd2CyqrosEzbMK5VMiZYyOcNFEphvxk3OXey2A==}
engines: {node: '>=20.19.4'}
- metro-transform-worker@0.83.2:
- resolution: {integrity: sha512-G5DsIg+cMZ2KNfrdLnWMvtppb3+Rp1GMyj7Bvd9GgYc/8gRmvq1XVEF9XuO87Shhb03kFhGqMTgZerz3hZ1v4Q==}
- engines: {node: '>=20.19.4'}
-
metro-transform-worker@0.83.3:
resolution: {integrity: sha512-Ztekew9t/gOIMZX1tvJOgX7KlSLL5kWykl0Iwu2cL2vKMKVALRl1hysyhUw0vjpAvLFx+Kfq9VLjnHIkW32fPA==}
engines: {node: '>=20.19.4'}
- metro@0.83.2:
- resolution: {integrity: sha512-HQgs9H1FyVbRptNSMy/ImchTTE5vS2MSqLoOo7hbDoBq6hPPZokwJvBMwrYSxdjQZmLXz2JFZtdvS+ZfgTc9yw==}
- engines: {node: '>=20.19.4'}
- hasBin: true
-
metro@0.83.3:
resolution: {integrity: sha512-+rP+/GieOzkt97hSJ0MrPOuAH/jpaS21ZDvL9DJ35QYRDlQcwzcvUlGUf79AnQxq/2NPiS/AULhhM4TKutIt8Q==}
engines: {node: '>=20.19.4'}
@@ -4417,6 +4404,10 @@ packages:
resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==}
engines: {node: '>=4'}
+ minimatch@10.1.1:
+ resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==}
+ engines: {node: 20 || >=22}
+
minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
@@ -4508,8 +4499,8 @@ packages:
encoding:
optional: true
- node-forge@1.3.1:
- resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==}
+ node-forge@1.3.3:
+ resolution: {integrity: sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==}
engines: {node: '>= 6.13.0'}
node-int64@0.4.0:
@@ -4532,10 +4523,6 @@ packages:
nullthrows@1.1.1:
resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==}
- ob1@0.83.2:
- resolution: {integrity: sha512-XlK3w4M+dwd1g1gvHzVbxiXEbUllRONEgcF2uEO0zm4nxa0eKlh41c6N65q1xbiDOeKKda1tvNOAD33fNjyvCg==}
- engines: {node: '>=20.19.4'}
-
ob1@0.83.3:
resolution: {integrity: sha512-egUxXCDwoWG06NGCS5s5AdcpnumHKJlfd3HH06P3m9TEMwwScfcY35wpQxbm9oHof+dM/lVH9Rfyu1elTVelSA==}
engines: {node: '>=20.19.4'}
@@ -4668,6 +4655,10 @@ packages:
resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
engines: {node: '>=16 || 14 >=14.18'}
+ path-scurry@2.0.1:
+ resolution: {integrity: sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==}
+ engines: {node: 20 || >=22}
+
path-type@4.0.0:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'}
@@ -5386,6 +5377,11 @@ packages:
engines: {node: '>=16 || 14 >=14.17'}
hasBin: true
+ sucrase@3.35.1:
+ resolution: {integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==}
+ engines: {node: '>=16 || 14 >=14.17'}
+ hasBin: true
+
supports-color@5.5.0:
resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
engines: {node: '>=4'}
@@ -5442,6 +5438,7 @@ packages:
tar@7.5.2:
resolution: {integrity: sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==}
engines: {node: '>=18'}
+ deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exhorbitant rates) by contacting i@izs.me
temp-dir@2.0.0:
resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==}
@@ -5834,14 +5831,6 @@ packages:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
- zod-to-json-schema@3.24.6:
- resolution: {integrity: sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==}
- peerDependencies:
- zod: ^3.24.1
-
- zod@3.25.76:
- resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==}
-
zustand@5.0.8:
resolution: {integrity: sha512-gyPKpIaxY9XcO2vSMrLbiER7QMAMGOQZVRdJ6Zi782jkbzZygq5GI9nG8g+sMgitRtndwaBSl7uiqC49o1SSiw==}
engines: {node: '>=12.20.0'}
@@ -5938,6 +5927,12 @@ snapshots:
js-tokens: 4.0.0
picocolors: 1.1.1
+ '@babel/code-frame@7.28.6':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.28.5
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
+
'@babel/compat-data@7.28.5': {}
'@babel/core@7.28.5':
@@ -5963,14 +5958,22 @@ snapshots:
'@babel/generator@7.28.5':
dependencies:
'@babel/parser': 7.28.5
- '@babel/types': 7.28.5
+ '@babel/types': 7.28.6
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+ jsesc: 3.1.0
+
+ '@babel/generator@7.28.6':
+ dependencies:
+ '@babel/parser': 7.28.6
+ '@babel/types': 7.28.6
'@jridgewell/gen-mapping': 0.3.13
'@jridgewell/trace-mapping': 0.3.31
jsesc: 3.1.0
'@babel/helper-annotate-as-pure@7.27.3':
dependencies:
- '@babel/types': 7.28.5
+ '@babel/types': 7.28.6
'@babel/helper-compilation-targets@7.27.2':
dependencies:
@@ -6015,8 +6018,8 @@ snapshots:
'@babel/helper-member-expression-to-functions@7.28.5':
dependencies:
- '@babel/traverse': 7.28.5
- '@babel/types': 7.28.5
+ '@babel/traverse': 7.28.6
+ '@babel/types': 7.28.6
transitivePeerDependencies:
- supports-color
@@ -6027,6 +6030,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/helper-module-imports@7.28.6':
+ dependencies:
+ '@babel/traverse': 7.28.6
+ '@babel/types': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)':
dependencies:
'@babel/core': 7.28.5
@@ -6038,16 +6048,18 @@ snapshots:
'@babel/helper-optimise-call-expression@7.27.1':
dependencies:
- '@babel/types': 7.28.5
+ '@babel/types': 7.28.6
'@babel/helper-plugin-utils@7.27.1': {}
+ '@babel/helper-plugin-utils@7.28.6': {}
+
'@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.28.5)':
dependencies:
'@babel/core': 7.28.5
'@babel/helper-annotate-as-pure': 7.27.3
'@babel/helper-wrap-function': 7.28.3
- '@babel/traverse': 7.28.5
+ '@babel/traverse': 7.28.6
transitivePeerDependencies:
- supports-color
@@ -6056,14 +6068,14 @@ snapshots:
'@babel/core': 7.28.5
'@babel/helper-member-expression-to-functions': 7.28.5
'@babel/helper-optimise-call-expression': 7.27.1
- '@babel/traverse': 7.28.5
+ '@babel/traverse': 7.28.6
transitivePeerDependencies:
- supports-color
'@babel/helper-skip-transparent-expression-wrappers@7.27.1':
dependencies:
- '@babel/traverse': 7.28.5
- '@babel/types': 7.28.5
+ '@babel/traverse': 7.28.6
+ '@babel/types': 7.28.6
transitivePeerDependencies:
- supports-color
@@ -6075,16 +6087,16 @@ snapshots:
'@babel/helper-wrap-function@7.28.3':
dependencies:
- '@babel/template': 7.27.2
- '@babel/traverse': 7.28.5
- '@babel/types': 7.28.5
+ '@babel/template': 7.28.6
+ '@babel/traverse': 7.28.6
+ '@babel/types': 7.28.6
transitivePeerDependencies:
- supports-color
'@babel/helpers@7.28.4':
dependencies:
'@babel/template': 7.27.2
- '@babel/types': 7.28.5
+ '@babel/types': 7.28.6
'@babel/highlight@7.25.9':
dependencies:
@@ -6095,7 +6107,11 @@ snapshots:
'@babel/parser@7.28.5':
dependencies:
- '@babel/types': 7.28.5
+ '@babel/types': 7.28.6
+
+ '@babel/parser@7.28.6':
+ dependencies:
+ '@babel/types': 7.28.6
'@babel/plugin-proposal-decorators@7.28.0(@babel/core@7.28.5)':
dependencies:
@@ -6171,6 +6187,11 @@ snapshots:
'@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.28.6
+
'@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.28.5)':
dependencies:
'@babel/core': 7.28.5
@@ -6226,7 +6247,7 @@ snapshots:
'@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
'@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.5)
- '@babel/traverse': 7.28.5
+ '@babel/traverse': 7.28.6
transitivePeerDependencies:
- supports-color
@@ -6276,13 +6297,13 @@ snapshots:
dependencies:
'@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/template': 7.27.2
+ '@babel/template': 7.28.6
'@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.28.5)':
dependencies:
'@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/traverse': 7.28.5
+ '@babel/traverse': 7.28.6
transitivePeerDependencies:
- supports-color
@@ -6310,7 +6331,7 @@ snapshots:
'@babel/core': 7.28.5
'@babel/helper-compilation-targets': 7.27.2
'@babel/helper-plugin-utils': 7.27.1
- '@babel/traverse': 7.28.5
+ '@babel/traverse': 7.28.6
transitivePeerDependencies:
- supports-color
@@ -6355,7 +6376,7 @@ snapshots:
'@babel/helper-plugin-utils': 7.27.1
'@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.5)
'@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.5)
- '@babel/traverse': 7.28.5
+ '@babel/traverse': 7.28.6
transitivePeerDependencies:
- supports-color
@@ -6402,7 +6423,7 @@ snapshots:
'@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.28.5)':
dependencies:
'@babel/core': 7.28.5
- '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.28.5)
transitivePeerDependencies:
- supports-color
@@ -6416,14 +6437,14 @@ snapshots:
'@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.5)':
+ '@babel/plugin-transform-react-jsx@7.28.6(@babel/core@7.28.5)':
dependencies:
'@babel/core': 7.28.5
'@babel/helper-annotate-as-pure': 7.27.3
- '@babel/helper-module-imports': 7.27.1
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5)
- '@babel/types': 7.28.5
+ '@babel/helper-module-imports': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.28.5)
+ '@babel/types': 7.28.6
transitivePeerDependencies:
- supports-color
@@ -6496,7 +6517,7 @@ snapshots:
'@babel/helper-plugin-utils': 7.27.1
'@babel/helper-validator-option': 7.27.1
'@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.28.5)
- '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.28.5)
'@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.28.5)
'@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.28.5)
transitivePeerDependencies:
@@ -6519,7 +6540,13 @@ snapshots:
dependencies:
'@babel/code-frame': 7.27.1
'@babel/parser': 7.28.5
- '@babel/types': 7.28.5
+ '@babel/types': 7.28.6
+
+ '@babel/template@7.28.6':
+ dependencies:
+ '@babel/code-frame': 7.28.6
+ '@babel/parser': 7.28.6
+ '@babel/types': 7.28.6
'@babel/traverse@7.28.5':
dependencies:
@@ -6533,11 +6560,28 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/traverse@7.28.6':
+ dependencies:
+ '@babel/code-frame': 7.28.6
+ '@babel/generator': 7.28.6
+ '@babel/helper-globals': 7.28.0
+ '@babel/parser': 7.28.6
+ '@babel/template': 7.28.6
+ '@babel/types': 7.28.6
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/types@7.28.5':
dependencies:
'@babel/helper-string-parser': 7.27.1
'@babel/helper-validator-identifier': 7.28.5
+ '@babel/types@7.28.6':
+ dependencies:
+ '@babel/helper-string-parser': 7.27.1
+ '@babel/helper-validator-identifier': 7.28.5
+
'@clack/core@0.5.0':
dependencies:
picocolors: 1.1.1
@@ -6643,24 +6687,23 @@ snapshots:
'@eslint/core': 0.17.0
levn: 0.4.1
- '@expo/cli@54.0.16(expo-router@6.0.17)(expo@54.0.23)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))':
+ '@expo/cli@54.0.22(expo-router@6.0.22)(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))':
dependencies:
'@0no-co/graphql.web': 1.2.0
- '@expo/code-signing-certificates': 0.0.5
- '@expo/config': 12.0.10
- '@expo/config-plugins': 54.0.2
- '@expo/devcert': 1.2.0
- '@expo/env': 2.0.7
- '@expo/image-utils': 0.8.7
- '@expo/json-file': 10.0.7
- '@expo/mcp-tunnel': 0.1.0
- '@expo/metro': 54.1.0
- '@expo/metro-config': 54.0.9(expo@54.0.23)
- '@expo/osascript': 2.3.7
- '@expo/package-manager': 1.9.8
- '@expo/plist': 0.4.7
- '@expo/prebuild-config': 54.0.6(expo@54.0.23)
- '@expo/schema-utils': 0.1.7
+ '@expo/code-signing-certificates': 0.0.6
+ '@expo/config': 12.0.13
+ '@expo/config-plugins': 54.0.4
+ '@expo/devcert': 1.2.1
+ '@expo/env': 2.0.8
+ '@expo/image-utils': 0.8.8
+ '@expo/json-file': 10.0.8
+ '@expo/metro': 54.2.0
+ '@expo/metro-config': 54.0.14(expo@54.0.32)
+ '@expo/osascript': 2.3.8
+ '@expo/package-manager': 1.9.10
+ '@expo/plist': 0.4.8
+ '@expo/prebuild-config': 54.0.8(expo@54.0.32)
+ '@expo/schema-utils': 0.1.8
'@expo/spawn-async': 1.7.2
'@expo/ws-tunnel': 1.0.6
'@expo/xcpretty': 4.3.2
@@ -6678,14 +6721,14 @@ snapshots:
connect: 3.7.0
debug: 4.4.3
env-editor: 0.4.2
- expo: 54.0.23(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.17)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
- expo-server: 1.0.4
+ expo: 54.0.32(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ expo-server: 1.0.5
freeport-async: 2.0.0
getenv: 2.0.0
- glob: 10.4.5
+ glob: 13.0.0
lan-network: 0.1.7
minimatch: 9.0.5
- node-forge: 1.3.1
+ node-forge: 1.3.3
npm-package-arg: 11.0.3
ora: 3.4.0
picomatch: 3.0.1
@@ -6711,30 +6754,28 @@ snapshots:
wrap-ansi: 7.0.0
ws: 8.18.3
optionalDependencies:
- expo-router: 6.0.17(349aaac499003fc399e184fbbadde92f)
+ expo-router: 6.0.22(9f92a432648b6fec77143fe8d4a0fa6a)
react-native: 0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0)
transitivePeerDependencies:
- - '@modelcontextprotocol/sdk'
- bufferutil
- graphql
- supports-color
- utf-8-validate
- '@expo/code-signing-certificates@0.0.5':
+ '@expo/code-signing-certificates@0.0.6':
dependencies:
- node-forge: 1.3.1
- nullthrows: 1.1.1
+ node-forge: 1.3.3
- '@expo/config-plugins@54.0.2':
+ '@expo/config-plugins@54.0.4':
dependencies:
- '@expo/config-types': 54.0.8
- '@expo/json-file': 10.0.7
- '@expo/plist': 0.4.7
+ '@expo/config-types': 54.0.10
+ '@expo/json-file': 10.0.8
+ '@expo/plist': 0.4.8
'@expo/sdk-runtime-versions': 1.0.0
chalk: 4.1.2
debug: 4.4.3
getenv: 2.0.0
- glob: 10.4.5
+ glob: 13.0.0
resolve-from: 5.0.0
semver: 7.7.3
slash: 3.0.0
@@ -6744,42 +6785,41 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@expo/config-types@54.0.8': {}
+ '@expo/config-types@54.0.10': {}
- '@expo/config@12.0.10':
+ '@expo/config@12.0.13':
dependencies:
'@babel/code-frame': 7.10.4
- '@expo/config-plugins': 54.0.2
- '@expo/config-types': 54.0.8
- '@expo/json-file': 10.0.7
+ '@expo/config-plugins': 54.0.4
+ '@expo/config-types': 54.0.10
+ '@expo/json-file': 10.0.8
deepmerge: 4.3.1
getenv: 2.0.0
- glob: 10.4.5
+ glob: 13.0.0
require-from-string: 2.0.2
resolve-from: 5.0.0
resolve-workspace-root: 2.0.0
semver: 7.7.3
slugify: 1.6.6
- sucrase: 3.35.0
+ sucrase: 3.35.1
transitivePeerDependencies:
- supports-color
- '@expo/devcert@1.2.0':
+ '@expo/devcert@1.2.1':
dependencies:
'@expo/sudo-prompt': 9.3.2
debug: 3.2.7
- glob: 10.4.5
transitivePeerDependencies:
- supports-color
- '@expo/devtools@0.1.7(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)':
+ '@expo/devtools@0.1.8(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)':
dependencies:
chalk: 4.1.2
optionalDependencies:
react: 19.1.0
react-native: 0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0)
- '@expo/env@2.0.7':
+ '@expo/env@2.0.8':
dependencies:
chalk: 4.1.2
debug: 4.4.3
@@ -6789,14 +6829,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@expo/fingerprint@0.15.3':
+ '@expo/fingerprint@0.15.4':
dependencies:
'@expo/spawn-async': 1.7.2
arg: 5.0.2
chalk: 4.1.2
debug: 4.4.3
getenv: 2.0.0
- glob: 10.4.5
+ glob: 13.0.0
ignore: 5.3.2
minimatch: 9.0.5
p-limit: 3.1.0
@@ -6807,7 +6847,7 @@ snapshots:
'@expo/html-elements@0.12.5': {}
- '@expo/image-utils@0.8.7':
+ '@expo/image-utils@0.8.8':
dependencies:
'@expo/spawn-async': 1.7.2
chalk: 4.1.2
@@ -6820,29 +6860,20 @@ snapshots:
temp-dir: 2.0.0
unique-string: 2.0.0
- '@expo/json-file@10.0.7':
+ '@expo/json-file@10.0.8':
dependencies:
'@babel/code-frame': 7.10.4
json5: 2.2.3
- '@expo/mcp-tunnel@0.1.0':
+ '@expo/metro-config@54.0.14(expo@54.0.32)':
dependencies:
- ws: 8.18.3
- zod: 3.25.76
- zod-to-json-schema: 3.24.6(zod@3.25.76)
- transitivePeerDependencies:
- - bufferutil
- - utf-8-validate
-
- '@expo/metro-config@54.0.9(expo@54.0.23)':
- dependencies:
- '@babel/code-frame': 7.27.1
+ '@babel/code-frame': 7.28.6
'@babel/core': 7.28.5
- '@babel/generator': 7.28.5
- '@expo/config': 12.0.10
- '@expo/env': 2.0.7
- '@expo/json-file': 10.0.7
- '@expo/metro': 54.1.0
+ '@babel/generator': 7.28.6
+ '@expo/config': 12.0.13
+ '@expo/env': 2.0.8
+ '@expo/json-file': 10.0.8
+ '@expo/metro': 54.2.0
'@expo/spawn-async': 1.7.2
browserslist: 4.28.0
chalk: 4.1.2
@@ -6850,7 +6881,7 @@ snapshots:
dotenv: 16.4.7
dotenv-expand: 11.0.7
getenv: 2.0.0
- glob: 10.4.5
+ glob: 13.0.0
hermes-parser: 0.29.1
jsc-safe-url: 0.2.4
lightningcss: 1.30.2
@@ -6858,16 +6889,16 @@ snapshots:
postcss: 8.4.49
resolve-from: 5.0.0
optionalDependencies:
- expo: 54.0.23(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.17)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ expo: 54.0.32(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
transitivePeerDependencies:
- bufferutil
- supports-color
- utf-8-validate
- '@expo/metro-runtime@6.1.2(expo@54.0.23)(react-dom@19.1.0(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)':
+ '@expo/metro-runtime@6.1.2(expo@54.0.32)(react-dom@19.1.0(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)':
dependencies:
anser: 1.4.10
- expo: 54.0.23(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.17)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ expo: 54.0.32(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
pretty-format: 29.7.0
react: 19.1.0
react-native: 0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0)
@@ -6876,63 +6907,63 @@ snapshots:
optionalDependencies:
react-dom: 19.1.0(react@19.1.0)
- '@expo/metro@54.1.0':
+ '@expo/metro@54.2.0':
dependencies:
- metro: 0.83.2
- metro-babel-transformer: 0.83.2
- metro-cache: 0.83.2
- metro-cache-key: 0.83.2
- metro-config: 0.83.2
- metro-core: 0.83.2
- metro-file-map: 0.83.2
- metro-resolver: 0.83.2
- metro-runtime: 0.83.2
- metro-source-map: 0.83.2
- metro-transform-plugins: 0.83.2
- metro-transform-worker: 0.83.2
+ metro: 0.83.3
+ metro-babel-transformer: 0.83.3
+ metro-cache: 0.83.3
+ metro-cache-key: 0.83.3
+ metro-config: 0.83.3
+ metro-core: 0.83.3
+ metro-file-map: 0.83.3
+ metro-minify-terser: 0.83.3
+ metro-resolver: 0.83.3
+ metro-runtime: 0.83.3
+ metro-source-map: 0.83.3
+ metro-symbolicate: 0.83.3
+ metro-transform-plugins: 0.83.3
+ metro-transform-worker: 0.83.3
transitivePeerDependencies:
- bufferutil
- supports-color
- utf-8-validate
- '@expo/osascript@2.3.7':
+ '@expo/osascript@2.3.8':
dependencies:
'@expo/spawn-async': 1.7.2
exec-async: 2.2.0
- '@expo/package-manager@1.9.8':
+ '@expo/package-manager@1.9.10':
dependencies:
- '@expo/json-file': 10.0.7
+ '@expo/json-file': 10.0.8
'@expo/spawn-async': 1.7.2
chalk: 4.1.2
npm-package-arg: 11.0.3
ora: 3.4.0
resolve-workspace-root: 2.0.0
- '@expo/plist@0.4.7':
+ '@expo/plist@0.4.8':
dependencies:
'@xmldom/xmldom': 0.8.11
base64-js: 1.5.1
xmlbuilder: 15.1.1
- '@expo/prebuild-config@54.0.6(expo@54.0.23)':
+ '@expo/prebuild-config@54.0.8(expo@54.0.32)':
dependencies:
- '@expo/config': 12.0.10
- '@expo/config-plugins': 54.0.2
- '@expo/config-types': 54.0.8
- '@expo/image-utils': 0.8.7
- '@expo/json-file': 10.0.7
+ '@expo/config': 12.0.13
+ '@expo/config-plugins': 54.0.4
+ '@expo/config-types': 54.0.10
+ '@expo/image-utils': 0.8.8
+ '@expo/json-file': 10.0.8
'@react-native/normalize-colors': 0.81.5
debug: 4.4.3
- expo: 54.0.23(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.17)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ expo: 54.0.32(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
resolve-from: 5.0.0
semver: 7.7.3
xml2js: 0.6.0
transitivePeerDependencies:
- supports-color
- '@expo/schema-utils@0.1.7': {}
-
'@expo/schema-utils@0.1.8': {}
'@expo/sdk-runtime-versions@1.0.0': {}
@@ -6943,9 +6974,9 @@ snapshots:
'@expo/sudo-prompt@9.3.2': {}
- '@expo/vector-icons@15.0.3(expo-font@14.0.9(expo@54.0.23)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)':
+ '@expo/vector-icons@15.0.3(expo-font@14.0.11(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)':
dependencies:
- expo-font: 14.0.9(expo@54.0.23)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ expo-font: 14.0.11(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
react: 19.1.0
react-native: 0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0)
@@ -7039,6 +7070,12 @@ snapshots:
dependencies:
'@swc/helpers': 0.5.17
+ '@isaacs/balanced-match@4.0.1': {}
+
+ '@isaacs/brace-expansion@5.0.0':
+ dependencies:
+ '@isaacs/balanced-match': 4.0.1
+
'@isaacs/cliui@8.0.2':
dependencies:
string-width: 5.1.2
@@ -7957,24 +7994,11 @@ snapshots:
merge-options: 3.0.4
react-native: 0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0)
- '@react-native-community/datetimepicker@8.4.4(expo@54.0.23)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)':
- dependencies:
- invariant: 2.2.4
- react: 19.1.0
- react-native: 0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0)
- optionalDependencies:
- expo: 54.0.23(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.17)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
-
- '@react-native-segmented-control/segmented-control@2.5.7(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)':
- dependencies:
- react: 19.1.0
- react-native: 0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0)
-
'@react-native/assets-registry@0.81.5': {}
'@react-native/babel-plugin-codegen@0.81.5(@babel/core@7.28.5)':
dependencies:
- '@babel/traverse': 7.28.5
+ '@babel/traverse': 7.28.6
'@react-native/codegen': 0.81.5(@babel/core@7.28.5)
transitivePeerDependencies:
- '@babel/core'
@@ -8012,7 +8036,7 @@ snapshots:
'@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.28.5)
'@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.28.5)
'@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.28.5)
- '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.28.5)
'@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.5)
'@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.5)
'@babel/plugin-transform-regenerator': 7.28.4(@babel/core@7.28.5)
@@ -8022,7 +8046,7 @@ snapshots:
'@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.28.5)
'@babel/plugin-transform-typescript': 7.28.5(@babel/core@7.28.5)
'@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.5)
- '@babel/template': 7.27.2
+ '@babel/template': 7.28.6
'@react-native/babel-plugin-codegen': 0.81.5(@babel/core@7.28.5)
babel-plugin-syntax-hermes-parser: 0.29.1
babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.28.5)
@@ -8654,23 +8678,23 @@ snapshots:
'@types/babel__core@7.20.5':
dependencies:
'@babel/parser': 7.28.5
- '@babel/types': 7.28.5
+ '@babel/types': 7.28.6
'@types/babel__generator': 7.27.0
'@types/babel__template': 7.4.4
'@types/babel__traverse': 7.28.0
'@types/babel__generator@7.27.0':
dependencies:
- '@babel/types': 7.28.5
+ '@babel/types': 7.28.6
'@types/babel__template@7.4.4':
dependencies:
'@babel/parser': 7.28.5
- '@babel/types': 7.28.5
+ '@babel/types': 7.28.6
'@types/babel__traverse@7.28.0':
dependencies:
- '@babel/types': 7.28.5
+ '@babel/types': 7.28.6
'@types/big.js@6.2.2': {}
@@ -8841,7 +8865,7 @@ snapshots:
'@vue/compiler-core@3.5.24':
dependencies:
- '@babel/parser': 7.28.5
+ '@babel/parser': 7.28.6
'@vue/shared': 3.5.24
entities: 4.5.0
estree-walker: 2.0.2
@@ -8854,7 +8878,7 @@ snapshots:
'@vue/compiler-sfc@3.5.24':
dependencies:
- '@babel/parser': 7.28.5
+ '@babel/parser': 7.28.6
'@vue/compiler-core': 3.5.24
'@vue/compiler-dom': 3.5.24
'@vue/compiler-ssr': 3.5.24
@@ -8905,6 +8929,13 @@ snapshots:
json-schema-traverse: 0.4.1
uri-js: 4.4.1
+ ajv@8.17.1:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-uri: 3.1.0
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
+
alova@3.3.4:
dependencies:
'@alova/shared': 1.3.1
@@ -9005,7 +9036,7 @@ snapshots:
babel-plugin-jest-hoist@29.6.3:
dependencies:
'@babel/template': 7.27.2
- '@babel/types': 7.28.5
+ '@babel/types': 7.28.6
'@types/babel__core': 7.20.5
'@types/babel__traverse': 7.28.0
@@ -9043,7 +9074,7 @@ snapshots:
babel-plugin-react-compiler@1.0.0:
dependencies:
- '@babel/types': 7.28.5
+ '@babel/types': 7.28.6
babel-plugin-react-native-web@0.21.2: {}
@@ -9076,7 +9107,7 @@ snapshots:
'@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.5)
'@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.5)
- babel-preset-expo@54.0.7(@babel/core@7.28.5)(@babel/runtime@7.28.4)(expo@54.0.23)(react-refresh@0.14.2):
+ babel-preset-expo@54.0.10(@babel/core@7.28.5)(@babel/runtime@7.28.4)(expo@54.0.32)(react-refresh@0.14.2):
dependencies:
'@babel/helper-module-imports': 7.27.1
'@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.28.5)
@@ -9103,7 +9134,7 @@ snapshots:
resolve-from: 5.0.0
optionalDependencies:
'@babel/runtime': 7.28.4
- expo: 54.0.23(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.17)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ expo: 54.0.32(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
transitivePeerDependencies:
- '@babel/core'
- supports-color
@@ -9886,63 +9917,69 @@ snapshots:
exec-async@2.2.0: {}
- expo-asset@12.0.9(expo@54.0.23)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
+ expo-asset@12.0.12(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
dependencies:
- '@expo/image-utils': 0.8.7
- expo: 54.0.23(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.17)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
- expo-constants: 18.0.10(expo@54.0.23)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))
+ '@expo/image-utils': 0.8.8
+ expo: 54.0.32(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ expo-constants: 18.0.13(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))
react: 19.1.0
react-native: 0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0)
transitivePeerDependencies:
- supports-color
- expo-blur@15.0.7(expo@54.0.23)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
+ expo-blur@15.0.8(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
dependencies:
- expo: 54.0.23(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.17)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ expo: 54.0.32(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
react: 19.1.0
react-native: 0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0)
- expo-clipboard@8.0.7(expo@54.0.23)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
+ expo-build-properties@1.0.10(expo@54.0.32):
dependencies:
- expo: 54.0.23(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.17)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ ajv: 8.17.1
+ expo: 54.0.32(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ semver: 7.7.3
+
+ expo-clipboard@8.0.8(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
+ dependencies:
+ expo: 54.0.32(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
react: 19.1.0
react-native: 0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0)
- expo-constants@18.0.10(expo@54.0.23)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0)):
+ expo-constants@18.0.13(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0)):
dependencies:
- '@expo/config': 12.0.10
- '@expo/env': 2.0.7
- expo: 54.0.23(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.17)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ '@expo/config': 12.0.13
+ '@expo/env': 2.0.8
+ expo: 54.0.32(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
react-native: 0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0)
transitivePeerDependencies:
- supports-color
- expo-file-system@19.0.17(expo@54.0.23)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0)):
+ expo-file-system@19.0.21(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0)):
dependencies:
- expo: 54.0.23(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.17)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ expo: 54.0.32(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
react-native: 0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0)
- expo-font@14.0.9(expo@54.0.23)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
+ expo-font@14.0.11(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
dependencies:
- expo: 54.0.23(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.17)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ expo: 54.0.32(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
fontfaceobserver: 2.3.0
react: 19.1.0
react-native: 0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0)
- expo-keep-awake@15.0.7(expo@54.0.23)(react@19.1.0):
+ expo-keep-awake@15.0.8(expo@54.0.32)(react@19.1.0):
dependencies:
- expo: 54.0.23(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.17)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ expo: 54.0.32(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
react: 19.1.0
- expo-linear-gradient@15.0.7(expo@54.0.23)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
+ expo-linear-gradient@15.0.8(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
dependencies:
- expo: 54.0.23(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.17)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ expo: 54.0.32(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
react: 19.1.0
react-native: 0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0)
- expo-linking@8.0.8(expo@54.0.23)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
+ expo-linking@8.0.11(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
dependencies:
- expo-constants: 18.0.10(expo@54.0.23)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))
+ expo-constants: 18.0.13(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))
invariant: 2.2.4
react: 19.1.0
react-native: 0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0)
@@ -9950,7 +9987,7 @@ snapshots:
- expo
- supports-color
- expo-modules-autolinking@3.0.21:
+ expo-modules-autolinking@3.0.24:
dependencies:
'@expo/spawn-async': 1.7.2
chalk: 4.1.2
@@ -9958,21 +9995,21 @@ snapshots:
require-from-string: 2.0.2
resolve-from: 5.0.0
- expo-modules-core@3.0.25(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
+ expo-modules-core@3.0.29(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
dependencies:
invariant: 2.2.4
react: 19.1.0
react-native: 0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0)
- expo-qq@0.1.5(expo@54.0.23)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
+ expo-qq@0.1.6(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
dependencies:
- expo: 54.0.23(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.17)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ expo: 54.0.32(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
react: 19.1.0
react-native: 0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0)
- expo-router@6.0.17(349aaac499003fc399e184fbbadde92f):
+ expo-router@6.0.22(9f92a432648b6fec77143fe8d4a0fa6a):
dependencies:
- '@expo/metro-runtime': 6.1.2(expo@54.0.23)(react-dom@19.1.0(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ '@expo/metro-runtime': 6.1.2(expo@54.0.32)(react-dom@19.1.0(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
'@expo/schema-utils': 0.1.8
'@radix-ui/react-slot': 1.2.0(@types/react@19.1.17)(react@19.1.0)
'@radix-ui/react-tabs': 1.1.13(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
@@ -9982,9 +10019,9 @@ snapshots:
client-only: 0.0.1
debug: 4.4.3
escape-string-regexp: 4.0.0
- expo: 54.0.23(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.17)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
- expo-constants: 18.0.10(expo@54.0.23)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))
- expo-linking: 8.0.8(expo@54.0.23)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ expo: 54.0.32(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ expo-constants: 18.0.13(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))
+ expo-linking: 8.0.11(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
expo-server: 1.0.5
fast-deep-equal: 3.1.3
invariant: 2.2.4
@@ -10014,53 +10051,56 @@ snapshots:
- '@types/react-dom'
- supports-color
- expo-server@1.0.4: {}
-
expo-server@1.0.5: {}
- expo-splash-screen@31.0.10(expo@54.0.23):
+ expo-splash-screen@31.0.13(expo@54.0.32):
dependencies:
- '@expo/prebuild-config': 54.0.6(expo@54.0.23)
- expo: 54.0.23(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.17)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ '@expo/prebuild-config': 54.0.8(expo@54.0.32)
+ expo: 54.0.32(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
transitivePeerDependencies:
- supports-color
- expo-status-bar@3.0.8(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
+ expo-status-bar@3.0.9(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
dependencies:
react: 19.1.0
react-native: 0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0)
react-native-is-edge-to-edge: 1.2.1(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
- expo@54.0.23(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.17)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
+ expo-wechat@0.2.6(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
+ dependencies:
+ expo: 54.0.32(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ react: 19.1.0
+ react-native: 0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0)
+
+ expo@54.0.32(@babel/core@7.28.5)(@expo/metro-runtime@6.1.2)(expo-router@6.0.22)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
dependencies:
'@babel/runtime': 7.28.4
- '@expo/cli': 54.0.16(expo-router@6.0.17)(expo@54.0.23)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))
- '@expo/config': 12.0.10
- '@expo/config-plugins': 54.0.2
- '@expo/devtools': 0.1.7(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
- '@expo/fingerprint': 0.15.3
- '@expo/metro': 54.1.0
- '@expo/metro-config': 54.0.9(expo@54.0.23)
- '@expo/vector-icons': 15.0.3(expo-font@14.0.9(expo@54.0.23)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ '@expo/cli': 54.0.22(expo-router@6.0.22)(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))
+ '@expo/config': 12.0.13
+ '@expo/config-plugins': 54.0.4
+ '@expo/devtools': 0.1.8(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ '@expo/fingerprint': 0.15.4
+ '@expo/metro': 54.2.0
+ '@expo/metro-config': 54.0.14(expo@54.0.32)
+ '@expo/vector-icons': 15.0.3(expo-font@14.0.11(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
'@ungap/structured-clone': 1.3.0
- babel-preset-expo: 54.0.7(@babel/core@7.28.5)(@babel/runtime@7.28.4)(expo@54.0.23)(react-refresh@0.14.2)
- expo-asset: 12.0.9(expo@54.0.23)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
- expo-constants: 18.0.10(expo@54.0.23)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))
- expo-file-system: 19.0.17(expo@54.0.23)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))
- expo-font: 14.0.9(expo@54.0.23)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
- expo-keep-awake: 15.0.7(expo@54.0.23)(react@19.1.0)
- expo-modules-autolinking: 3.0.21
- expo-modules-core: 3.0.25(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ babel-preset-expo: 54.0.10(@babel/core@7.28.5)(@babel/runtime@7.28.4)(expo@54.0.32)(react-refresh@0.14.2)
+ expo-asset: 12.0.12(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ expo-constants: 18.0.13(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))
+ expo-file-system: 19.0.21(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))
+ expo-font: 14.0.11(expo@54.0.32)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ expo-keep-awake: 15.0.8(expo@54.0.32)(react@19.1.0)
+ expo-modules-autolinking: 3.0.24
+ expo-modules-core: 3.0.29(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
pretty-format: 29.7.0
react: 19.1.0
react-native: 0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0)
react-refresh: 0.14.2
whatwg-url-without-unicode: 8.0.0-3
optionalDependencies:
- '@expo/metro-runtime': 6.1.2(expo@54.0.23)(react-dom@19.1.0(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ '@expo/metro-runtime': 6.1.2(expo@54.0.32)(react-dom@19.1.0(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
transitivePeerDependencies:
- '@babel/core'
- - '@modelcontextprotocol/sdk'
- bufferutil
- expo-router
- graphql
@@ -10085,6 +10125,8 @@ snapshots:
fast-levenshtein@2.0.6: {}
+ fast-uri@3.1.0: {}
+
fastq@1.19.1:
dependencies:
reusify: 1.1.0
@@ -10263,6 +10305,12 @@ snapshots:
package-json-from-dist: 1.0.1
path-scurry: 1.11.1
+ glob@13.0.0:
+ dependencies:
+ minimatch: 10.1.1
+ minipass: 7.1.2
+ path-scurry: 2.0.1
+
glob@7.2.3:
dependencies:
fs.realpath: 1.0.0
@@ -10559,6 +10607,8 @@ snapshots:
json-schema-traverse@0.4.1: {}
+ json-schema-traverse@1.0.0: {}
+
json-stable-stringify-without-jsonify@1.0.1: {}
json5@2.2.3: {}
@@ -10739,6 +10789,8 @@ snapshots:
lru-cache@10.4.3: {}
+ lru-cache@11.2.4: {}
+
lru-cache@5.1.1:
dependencies:
yallist: 3.1.1
@@ -10894,15 +10946,6 @@ snapshots:
merge2@1.4.1: {}
- metro-babel-transformer@0.83.2:
- dependencies:
- '@babel/core': 7.28.5
- flow-enums-runtime: 0.0.6
- hermes-parser: 0.32.0
- nullthrows: 1.1.1
- transitivePeerDependencies:
- - supports-color
-
metro-babel-transformer@0.83.3:
dependencies:
'@babel/core': 7.28.5
@@ -10912,23 +10955,10 @@ snapshots:
transitivePeerDependencies:
- supports-color
- metro-cache-key@0.83.2:
- dependencies:
- flow-enums-runtime: 0.0.6
-
metro-cache-key@0.83.3:
dependencies:
flow-enums-runtime: 0.0.6
- metro-cache@0.83.2:
- dependencies:
- exponential-backoff: 3.1.3
- flow-enums-runtime: 0.0.6
- https-proxy-agent: 7.0.6
- metro-core: 0.83.2
- transitivePeerDependencies:
- - supports-color
-
metro-cache@0.83.3:
dependencies:
exponential-backoff: 3.1.3
@@ -10938,21 +10968,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- metro-config@0.83.2:
- dependencies:
- connect: 3.7.0
- flow-enums-runtime: 0.0.6
- jest-validate: 29.7.0
- metro: 0.83.2
- metro-cache: 0.83.2
- metro-core: 0.83.2
- metro-runtime: 0.83.2
- yaml: 2.8.1
- transitivePeerDependencies:
- - bufferutil
- - supports-color
- - utf-8-validate
-
metro-config@0.83.3:
dependencies:
connect: 3.7.0
@@ -10968,32 +10983,12 @@ snapshots:
- supports-color
- utf-8-validate
- metro-core@0.83.2:
- dependencies:
- flow-enums-runtime: 0.0.6
- lodash.throttle: 4.1.1
- metro-resolver: 0.83.2
-
metro-core@0.83.3:
dependencies:
flow-enums-runtime: 0.0.6
lodash.throttle: 4.1.1
metro-resolver: 0.83.3
- metro-file-map@0.83.2:
- dependencies:
- debug: 4.4.3
- fb-watchman: 2.0.2
- flow-enums-runtime: 0.0.6
- graceful-fs: 4.2.11
- invariant: 2.2.4
- jest-worker: 29.7.0
- micromatch: 4.0.8
- nullthrows: 1.1.1
- walker: 1.0.8
- transitivePeerDependencies:
- - supports-color
-
metro-file-map@0.83.3:
dependencies:
debug: 4.4.3
@@ -11008,53 +11003,24 @@ snapshots:
transitivePeerDependencies:
- supports-color
- metro-minify-terser@0.83.2:
- dependencies:
- flow-enums-runtime: 0.0.6
- terser: 5.44.1
-
metro-minify-terser@0.83.3:
dependencies:
flow-enums-runtime: 0.0.6
terser: 5.44.1
- metro-resolver@0.83.2:
- dependencies:
- flow-enums-runtime: 0.0.6
-
metro-resolver@0.83.3:
dependencies:
flow-enums-runtime: 0.0.6
- metro-runtime@0.83.2:
- dependencies:
- '@babel/runtime': 7.28.4
- flow-enums-runtime: 0.0.6
-
metro-runtime@0.83.3:
dependencies:
'@babel/runtime': 7.28.4
flow-enums-runtime: 0.0.6
- metro-source-map@0.83.2:
- dependencies:
- '@babel/traverse': 7.28.5
- '@babel/traverse--for-generate-function-map': '@babel/traverse@7.28.5'
- '@babel/types': 7.28.5
- flow-enums-runtime: 0.0.6
- invariant: 2.2.4
- metro-symbolicate: 0.83.2
- nullthrows: 1.1.1
- ob1: 0.83.2
- source-map: 0.5.7
- vlq: 1.0.1
- transitivePeerDependencies:
- - supports-color
-
metro-source-map@0.83.3:
dependencies:
'@babel/traverse': 7.28.5
- '@babel/traverse--for-generate-function-map': '@babel/traverse@7.28.5'
+ '@babel/traverse--for-generate-function-map': '@babel/traverse@7.28.6'
'@babel/types': 7.28.5
flow-enums-runtime: 0.0.6
invariant: 2.2.4
@@ -11066,17 +11032,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- metro-symbolicate@0.83.2:
- dependencies:
- flow-enums-runtime: 0.0.6
- invariant: 2.2.4
- metro-source-map: 0.83.2
- nullthrows: 1.1.1
- source-map: 0.5.7
- vlq: 1.0.1
- transitivePeerDependencies:
- - supports-color
-
metro-symbolicate@0.83.3:
dependencies:
flow-enums-runtime: 0.0.6
@@ -11088,54 +11043,23 @@ snapshots:
transitivePeerDependencies:
- supports-color
- metro-transform-plugins@0.83.2:
- dependencies:
- '@babel/core': 7.28.5
- '@babel/generator': 7.28.5
- '@babel/template': 7.27.2
- '@babel/traverse': 7.28.5
- flow-enums-runtime: 0.0.6
- nullthrows: 1.1.1
- transitivePeerDependencies:
- - supports-color
-
metro-transform-plugins@0.83.3:
dependencies:
'@babel/core': 7.28.5
- '@babel/generator': 7.28.5
- '@babel/template': 7.27.2
- '@babel/traverse': 7.28.5
+ '@babel/generator': 7.28.6
+ '@babel/template': 7.28.6
+ '@babel/traverse': 7.28.6
flow-enums-runtime: 0.0.6
nullthrows: 1.1.1
transitivePeerDependencies:
- supports-color
- metro-transform-worker@0.83.2:
- dependencies:
- '@babel/core': 7.28.5
- '@babel/generator': 7.28.5
- '@babel/parser': 7.28.5
- '@babel/types': 7.28.5
- flow-enums-runtime: 0.0.6
- metro: 0.83.2
- metro-babel-transformer: 0.83.2
- metro-cache: 0.83.2
- metro-cache-key: 0.83.2
- metro-minify-terser: 0.83.2
- metro-source-map: 0.83.2
- metro-transform-plugins: 0.83.2
- nullthrows: 1.1.1
- transitivePeerDependencies:
- - bufferutil
- - supports-color
- - utf-8-validate
-
metro-transform-worker@0.83.3:
dependencies:
'@babel/core': 7.28.5
- '@babel/generator': 7.28.5
- '@babel/parser': 7.28.5
- '@babel/types': 7.28.5
+ '@babel/generator': 7.28.6
+ '@babel/parser': 7.28.6
+ '@babel/types': 7.28.6
flow-enums-runtime: 0.0.6
metro: 0.83.3
metro-babel-transformer: 0.83.3
@@ -11150,53 +11074,6 @@ snapshots:
- supports-color
- utf-8-validate
- metro@0.83.2:
- dependencies:
- '@babel/code-frame': 7.27.1
- '@babel/core': 7.28.5
- '@babel/generator': 7.28.5
- '@babel/parser': 7.28.5
- '@babel/template': 7.27.2
- '@babel/traverse': 7.28.5
- '@babel/types': 7.28.5
- accepts: 1.3.8
- chalk: 4.1.2
- ci-info: 2.0.0
- connect: 3.7.0
- debug: 4.4.3
- error-stack-parser: 2.1.4
- flow-enums-runtime: 0.0.6
- graceful-fs: 4.2.11
- hermes-parser: 0.32.0
- image-size: 1.2.1
- invariant: 2.2.4
- jest-worker: 29.7.0
- jsc-safe-url: 0.2.4
- lodash.throttle: 4.1.1
- metro-babel-transformer: 0.83.2
- metro-cache: 0.83.2
- metro-cache-key: 0.83.2
- metro-config: 0.83.2
- metro-core: 0.83.2
- metro-file-map: 0.83.2
- metro-resolver: 0.83.2
- metro-runtime: 0.83.2
- metro-source-map: 0.83.2
- metro-symbolicate: 0.83.2
- metro-transform-plugins: 0.83.2
- metro-transform-worker: 0.83.2
- mime-types: 2.1.35
- nullthrows: 1.1.1
- serialize-error: 2.1.0
- source-map: 0.5.7
- throat: 5.0.0
- ws: 7.5.10
- yargs: 17.7.2
- transitivePeerDependencies:
- - bufferutil
- - supports-color
- - utf-8-validate
-
metro@0.83.3:
dependencies:
'@babel/code-frame': 7.27.1
@@ -11204,8 +11081,8 @@ snapshots:
'@babel/generator': 7.28.5
'@babel/parser': 7.28.5
'@babel/template': 7.27.2
- '@babel/traverse': 7.28.5
- '@babel/types': 7.28.5
+ '@babel/traverse': 7.28.6
+ '@babel/types': 7.28.6
accepts: 1.3.8
chalk: 4.1.2
ci-info: 2.0.0
@@ -11459,6 +11336,10 @@ snapshots:
mimic-fn@1.2.0: {}
+ minimatch@10.1.1:
+ dependencies:
+ '@isaacs/brace-expansion': 5.0.0
+
minimatch@3.1.2:
dependencies:
brace-expansion: 1.1.12
@@ -11541,7 +11422,7 @@ snapshots:
dependencies:
whatwg-url: 5.0.0
- node-forge@1.3.1: {}
+ node-forge@1.3.3: {}
node-int64@0.4.0: {}
@@ -11562,10 +11443,6 @@ snapshots:
nullthrows@1.1.1: {}
- ob1@0.83.2:
- dependencies:
- flow-enums-runtime: 0.0.6
-
ob1@0.83.3:
dependencies:
flow-enums-runtime: 0.0.6
@@ -11691,6 +11568,11 @@ snapshots:
lru-cache: 10.4.3
minipass: 7.1.2
+ path-scurry@2.0.1:
+ dependencies:
+ lru-cache: 11.2.4
+ minipass: 7.1.2
+
path-type@4.0.0: {}
pathe@2.0.3: {}
@@ -12507,6 +12389,16 @@ snapshots:
pirates: 4.0.7
ts-interface-checker: 0.1.13
+ sucrase@3.35.1:
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ commander: 4.1.1
+ lines-and-columns: 1.2.4
+ mz: 2.7.0
+ pirates: 4.0.7
+ tinyglobby: 0.2.15
+ ts-interface-checker: 0.1.13
+
supports-color@5.5.0:
dependencies:
has-flag: 3.0.0
@@ -12925,12 +12817,6 @@ snapshots:
yocto-queue@0.1.0: {}
- zod-to-json-schema@3.24.6(zod@3.25.76):
- dependencies:
- zod: 3.25.76
-
- zod@3.25.76: {}
-
zustand@5.0.8(@types/react@19.1.17)(react@19.1.0)(use-sync-external-store@1.6.0(react@19.1.0)):
optionalDependencies:
'@types/react': 19.1.17
diff --git a/code/allapp/allapp-rn/src/app/(tabs)/_layout.tsx b/code/allapp/allapp-rn/src/app/(tabs)/_layout.tsx
index ecc7d722..f1426720 100644
--- a/code/allapp/allapp-rn/src/app/(tabs)/_layout.tsx
+++ b/code/allapp/allapp-rn/src/app/(tabs)/_layout.tsx
@@ -1,47 +1,27 @@
-import type { TabbarItem } from '@/components/custom/Tabbar'
-import CustomTabbar from '@/components/custom/Tabbar'
-import { toast } from '@/utils/toast'
-
-export const unstable_settings = {
- initialRouteName: 'money/index',
-}
+import { TabSlot } from 'expo-router/ui'
+import { Text, View } from 'react-native'
export default function TabsLayout() {
- const tabbarOptions: TabbarItem[] = [
- {
- name: 'money',
- href: '/money',
- icon: 'CircleDollarSign',
- },
- {
- name: 'love',
- href: '/love',
- icon: 'Heart',
- },
- {
- name: 'app',
- icon: 'LayoutGrid',
- activeIcon: 'Smile',
- iconSize: 26,
- onPress: () => {
- toast.show({
- title: '该功能尚未开发,请尽情期待!',
- })
- },
- },
- {
- name: 'chat',
- href: '/chat',
- icon: 'MessageCircle',
- },
- {
- name: 'user',
- href: '/user',
- icon: 'CircleUserRound',
- },
- ]
-
return (
-
+
+
+
+
+
+
+
+
+
+
+
)
}
diff --git a/code/allapp/allapp-rn/src/app/(tabs)/_layout2.tsx b/code/allapp/allapp-rn/src/app/(tabs)/_layout2.tsx
new file mode 100644
index 00000000..e69de29b
diff --git a/code/allapp/allapp-rn/src/app/(tabs)/user/index.tsx b/code/allapp/allapp-rn/src/app/(tabs)/user/index.tsx
index c3707e9b..d3f4bfcf 100644
--- a/code/allapp/allapp-rn/src/app/(tabs)/user/index.tsx
+++ b/code/allapp/allapp-rn/src/app/(tabs)/user/index.tsx
@@ -13,11 +13,11 @@ export default function User() {
return (
-
+
{userStore.userInfo?.username}
diff --git a/code/allapp/allapp-rn/src/app/auth/index.tsx b/code/allapp/allapp-rn/src/app/auth/index.tsx
index 19cc2145..76cb17f7 100644
--- a/code/allapp/allapp-rn/src/app/auth/index.tsx
+++ b/code/allapp/allapp-rn/src/app/auth/index.tsx
@@ -1,94 +1,263 @@
import { useEvent } from 'expo'
import ExpoQQ from 'expo-qq'
import { useRouter } from 'expo-router'
-import { useEffect } from 'react'
+import ExpoWeChat from 'expo-wechat'
+import { useEffect, useState } from 'react'
import { Image, Text, View } from 'react-native'
+import { AButton, ACheckbox } from '@/components/common/ao'
import CustomHeader from '@/components/custom/Header'
-import { Button, ButtonText } from '@/components/ui/button'
+import { IconQq, IconWeixin } from '@/components/iconfont'
+import { loginQqApi, loginWxApi } from '@/request/api/auth'
+import { useUserStore } from '@/store/user'
+import { toast } from '@/utils/toast'
+
+export default function LoginScreen() {
+ const [loading, setLoading] = useState(false)
+ const [isAgree, setIsAgree] = useState(true)
+ const [form, setForm] = useState({
+ type: 0,
+ openid: '',
+ code: '',
+ })
-export default function AuthIndex() {
const router = useRouter()
+ const userStore = useUserStore()
- function toPath(url: string) {
- router.push(url)
+ const onLoginFinished = useEvent(ExpoQQ, 'onLoginFinished')
+ const onGetUserInfo = useEvent(ExpoQQ, 'onGetUserInfo')
+ const authResult = useEvent(ExpoWeChat, 'onAuthResult')
+
+ async function onQQLogin() {
+ setLoading(true)
+ setForm(val => ({
+ ...val,
+ type: 1,
+ }))
+ await ExpoQQ.login(['get_user_info'])
}
- // /// 监听登录结果,你也可以使用ExpoQQ.addListener('onLoginFinished', callback)来实现,但请不要忘记移除监听
- // const onSendLoginFinished = useEvent(ExpoQQ, 'onGetUserInfo')
- // const onLoginFinished = useEvent(ExpoQQ, 'onLoginFinished')
+ async function onWeChatLogin() {
+ setLoading(true)
- // useEffect(() => {
- // console.log(onSendLoginFinished)
- // }, [onSendLoginFinished])
+ // 检查微信是否安装
+ const isInstalled = await ExpoWeChat.isWXAppInstalled()
+ if (!isInstalled) {
+ toast.show({
+ title: onLoginFinished?.errorMessage || '请先安装微信',
+ })
+ setLoading(false)
+ return
+ }
- // /// 国内应用需要在用户接受隐私协议后再初始化
- // useEffect(() => {
- // const init = async () => {
- // await ExpoQQ.init('102826474', 'universal link')
- // }
- // init()
- // }, [])
+ setForm(val => ({
+ ...val,
+ type: 0,
+ }))
- // useEffect(() => {
- // if (!onLoginFinished || !onLoginFinished.success)
- // return
+ ExpoWeChat.sendAuthRequest('snsapi_userinfo', 'state123')
+ }
- // const fetchUserInfo = async () => {
- // try {
- // // 1️⃣ 确认 SDK 已经拿到 token
- // const tokenInfo = await ExpoQQ.getLoginTokenInfo()
- // console.log('tokenInfo', tokenInfo)
+ useEffect(() => {
+ ExpoQQ.init('102826474', '')
+ ExpoWeChat.registerApp('wxdab3e21a1f7e392f', '')
+ }, [])
- // // 2️⃣ 再请求用户信息
- // await ExpoQQ.sendGetUserInfoReq()
- // }
- // catch (e) {
- // console.error('QQ 登录未完成', e)
- // }
- // }
+ useEffect(() => {
+ if (!onLoginFinished) {
+ return
+ }
- // fetchUserInfo()
- // }, [onLoginFinished])
+ if (!onLoginFinished.success) {
+ toast.show({
+ title: onLoginFinished?.errorMessage || '授权失败,请检查手机是否安装 QQ 或确认授权',
+ })
+ setLoading(false)
+ return
+ }
- // /// 调用qq登陆
- // const loginByQQ = async () => {
- // await ExpoQQ.login(['get_user_info'])
- // }
+ const fetchUserInfo = async () => {
+ try {
+ const tokenInfo = await ExpoQQ.getLoginTokenInfo()
+ if (!tokenInfo.openId) {
+ toast.show({
+ title: tokenInfo?.errorMessage || '授权失败,请检查手机是否安装 QQ 或确认授权',
+ })
+ setLoading(false)
+ return
+ }
+
+ setForm(val => ({
+ ...val,
+ openid: String(tokenInfo.openId),
+ }))
+
+ await ExpoQQ.sendGetUserInfoReq()
+ }
+ catch (e) {
+ console.error('QQ 登录未完成', e)
+ setLoading(false)
+ }
+ }
+
+ fetchUserInfo()
+ }, [onLoginFinished])
+
+ // QQ登录
+ useEffect(() => {
+ const handleLogin = async () => {
+ if (!onGetUserInfo)
+ return
+
+ try {
+ const loginRes = await loginQqApi({
+ openid: form.openid,
+ username: onGetUserInfo.nickname || '',
+ avatar: onGetUserInfo.figureurlQq_2 || onGetUserInfo.figureurl_2,
+ })
+
+ if (loginRes.isSuccess) {
+ userStore.setUserInfo({
+ token: loginRes.data.token,
+ id: loginRes.data.userId,
+ username: loginRes.data.username,
+ avatar: loginRes.data.avatar,
+ })
+
+ console.log(loginRes.data.token)
+
+ router.push('/')
+ }
+ }
+ catch (err) {
+ console.error('登录接口出错', err)
+ }
+ finally {
+ setLoading(false)
+ }
+ }
+
+ handleLogin()
+ }, [onGetUserInfo])
+
+ // 微信登录
+ useEffect(() => {
+ if (!authResult)
+ return
+
+ const handleLogin = async () => {
+ if (authResult.errorCode === 0) {
+ try {
+ const loginRes = await loginWxApi({
+ code: authResult.code,
+ })
+
+ if (loginRes.isSuccess) {
+ userStore.setUserInfo({
+ token: loginRes.data.token,
+ id: loginRes.data.userId,
+ username: loginRes.data.username,
+ avatar: loginRes.data.avatar,
+ })
+
+ router.push('/')
+ }
+ }
+ catch (err) {
+ console.error('登录接口出错', err)
+ }
+ finally {
+ setLoading(false)
+ }
+ }
+ else {
+ console.log('授权失败:', authResult.errorMessage)
+ setLoading(false)
+ }
+ }
+
+ handleLogin()
+ }, [authResult])
+
+ function testLogin() {
+ // eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjo3NjY3ODU5ODIxNjUwNjEsImlhdCI6MTc2OTM0ODI0Nn0.17ZNaHD3HSLM8dVn_JQK-gvsG9MKj47IRYV9D4xZkzs
+
+ userStore.setUserInfo({
+ token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjo3NjY3ODU5ODIxNjUwNjEsImlhdCI6MTc2OTM0ODI0Nn0.17ZNaHD3HSLM8dVn_JQK-gvsG9MKj47IRYV9D4xZkzs',
+ id: 766785982165061,
+ username: 'Zhang',
+ avatar: 'http://thirdqq.qlogo.cn/ek_qqapp/AQHVialeUibE42oV8RvTTVZ4tyRlPYeJrUibWTwtCPfV68E4rSzn9cw00GkXQ3QDTiawwhjoqQb7/100',
+ })
+
+ router.push('/')
+ }
return (
-
+
-
-
-
+
-
-
- ONEAO
+
+ Welcome to OneAO
+
-
- toPath('/auth/login')}>
- 登录
-
+
+
+ }
+ loading={loading}
+ onPress={onWeChatLogin}
+ >
+ WeChat
+
- toPath('/auth/register')}>
- 注册
-
-
+
+ }
+ loading={loading}
+ onPress={onQQLogin}
+ >
+ QQ
+
+
+
+ }
+ loading={loading}
+ onPress={testLogin}
+ >
+ 模拟登录
+
+
+
+
+
+ 登录即表示你同意我们的
+ 用户协议
+ 和
+ 隐私政策
+
+ )}
+ onChange={(val) => {
+ setIsAgree(val)
+ }}
+ />
-
)
}
diff --git a/code/allapp/allapp-rn/src/app/money/category/setting/components/EditCategory.tsx b/code/allapp/allapp-rn/src/app/money/category/setting/components/EditCategory.tsx
index d1866b3f..ab74f3cb 100644
--- a/code/allapp/allapp-rn/src/app/money/category/setting/components/EditCategory.tsx
+++ b/code/allapp/allapp-rn/src/app/money/category/setting/components/EditCategory.tsx
@@ -157,7 +157,6 @@ export default function CreateCategory({
data={flatListData}
keyExtractor={([groupName]) => groupName}
renderItem={renderGroup}
- initialNumToRender={1}
/>
)
diff --git a/code/allapp/allapp-rn/src/components/common/ao/Button.tsx b/code/allapp/allapp-rn/src/components/common/ao/Button.tsx
index 45918f3c..5dd4bb90 100644
--- a/code/allapp/allapp-rn/src/components/common/ao/Button.tsx
+++ b/code/allapp/allapp-rn/src/components/common/ao/Button.tsx
@@ -1,15 +1,13 @@
-import type { icons } from 'lucide-react-native'
import type { ViewStyle } from 'react-native'
-import type { LucideIconProps } from './LucideIcon'
import React from 'react'
+import { View } from 'react-native'
import {
ButtonSpinner,
ButtonText,
Button as NativeButton,
} from '@/components/ui/button'
-import LucideIcon from './LucideIcon'
-type IconProp = (LucideIconProps & { icon: keyof typeof icons }) | React.ReactNode
+type IconProp = React.ReactNode | (() => React.ReactNode)
interface CustomButtonProps {
children?: React.ReactNode
@@ -21,7 +19,6 @@ interface CustomButtonProps {
action?: 'primary' | 'secondary' | 'positive' | 'negative' | 'default'
variant?: 'solid' | 'outline' | 'link'
size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'
-
leftIcon?: IconProp
rightIcon?: IconProp
}
@@ -41,31 +38,39 @@ const Button: React.FC = ({
}) => {
const isDisabled = disabled || loading
const hasChildren = !!children
- const renderLeftIcon = () => {
- if (loading)
- return
- if (!leftIcon)
+ const renderIcon = (
+ icon?: IconProp,
+ position: 'left' | 'right' = 'left',
+ ) => {
+ if (!icon)
return null
- if (React.isValidElement(leftIcon)) {
- return {leftIcon}
+ if (loading && position === 'left') {
+ const spinnerColor = variant === 'outline'
+ ? 'rgba(0,0,0,0.6)'
+ : 'rgba(255,255,255,0.9)'
+ return (
+
+
+
+ )
}
- const { icon, ...props } = leftIcon as LucideIconProps & { icon: keyof typeof icons }
- return
- }
+ const node = typeof icon === 'function'
+ ? icon()
+ : icon
- const renderRightIcon = () => {
- if (!rightIcon)
- return null
-
- if (React.isValidElement(rightIcon)) {
- return {rightIcon}
- }
-
- const { icon, ...props } = rightIcon as LucideIconProps & { icon: keyof typeof icons }
- return
+ return (
+
+ {node}
+
+ )
}
return (
@@ -78,13 +83,9 @@ const Button: React.FC = ({
variant={variant}
size={size}
>
- {renderLeftIcon()}
- {
- children && (
- {children}
- )
- }
- {renderRightIcon()}
+ {renderIcon(leftIcon, 'left')}
+ {children && {children} }
+ {renderIcon(rightIcon, 'right')}
)
}
diff --git a/code/allapp/allapp-rn/src/components/common/ao/Checkbox.tsx b/code/allapp/allapp-rn/src/components/common/ao/Checkbox.tsx
index fd18b4f8..38c22911 100644
--- a/code/allapp/allapp-rn/src/components/common/ao/Checkbox.tsx
+++ b/code/allapp/allapp-rn/src/components/common/ao/Checkbox.tsx
@@ -11,33 +11,36 @@ import { CheckIcon } from '@/components/ui/icon'
interface CustomCheckboxProps {
value?: string
- isChecked: boolean
- onChange: (checked: boolean) => void
- label: React.ReactNode
+ checked?: boolean
+ onChange?: (checked: boolean) => void
+ label?: React.ReactNode
className?: string
style?: ViewStyle
disabled?: boolean
icon?: React.ElementType
+ size?: 'sm' | 'md' | 'lg'
}
const Checkbox: React.FC = ({
value,
- isChecked,
+ checked,
onChange,
label,
className,
style,
disabled,
icon,
+ size,
}) => {
return (
diff --git a/code/allapp/allapp-rn/src/components/ui/avatar/index.tsx b/code/allapp/allapp-rn/src/components/ui/avatar/index.tsx
index 20acba7d..32534ebb 100644
--- a/code/allapp/allapp-rn/src/components/ui/avatar/index.tsx
+++ b/code/allapp/allapp-rn/src/components/ui/avatar/index.tsx
@@ -1,24 +1,21 @@
-'use client';
-import React from 'react';
-import { createAvatar } from '@gluestack-ui/core/avatar/creator';
+'use client'
+import type { VariantProps } from '@gluestack-ui/utils/nativewind-utils'
+import { createAvatar } from '@gluestack-ui/core/avatar/creator'
-import { View, Text, Image, Platform } from 'react-native';
+import { tva, useStyleContext, withStyleContext } from '@gluestack-ui/utils/nativewind-utils'
-import { tva } from '@gluestack-ui/utils/nativewind-utils';
-import {
- withStyleContext,
- useStyleContext,
-} from '@gluestack-ui/utils/nativewind-utils';
-const SCOPE = 'AVATAR';
-import type { VariantProps } from '@gluestack-ui/utils/nativewind-utils';
+import React from 'react'
+import { Image, Platform, Text, View } from 'react-native'
+
+const SCOPE = 'AVATAR'
const UIAvatar = createAvatar({
Root: withStyleContext(View, SCOPE),
Badge: View,
Group: View,
- Image: Image,
+ Image,
FallbackText: Text,
-});
+})
const avatarStyle = tva({
base: 'rounded-full justify-center items-center relative bg-primary-600 group-[.avatar-group]/avatar-group:-ml-2.5',
@@ -32,7 +29,7 @@ const avatarStyle = tva({
'2xl': 'w-32 h-32',
},
},
-});
+})
const avatarFallbackTextStyle = tva({
base: 'text-typography-0 font-semibold overflow-hidden text-transform:uppercase web:cursor-default',
@@ -47,11 +44,11 @@ const avatarFallbackTextStyle = tva({
'2xl': 'text-5xl',
},
},
-});
+})
const avatarGroupStyle = tva({
base: 'group/avatar-group flex-row-reverse relative avatar-group',
-});
+})
const avatarBadgeStyle = tva({
base: 'w-5 h-5 bg-success-500 rounded-full absolute right-0 bottom-0 border-background-0 border-2',
@@ -65,22 +62,22 @@ const avatarBadgeStyle = tva({
'2xl': 'w-8 h-8',
},
},
-});
+})
const avatarImageStyle = tva({
base: 'h-full w-full rounded-full absolute',
-});
+})
type IAvatarProps = Omit<
React.ComponentPropsWithoutRef,
'context'
-> &
- VariantProps;
+>
+& VariantProps
const Avatar = React.forwardRef<
React.ComponentRef,
IAvatarProps
->(function Avatar({ className, size = 'md', ...props }, ref) {
+>(({ className, size = 'md', ...props }, ref) => {
return (
- );
-});
+ )
+})
-type IAvatarBadgeProps = React.ComponentPropsWithoutRef &
- VariantProps;
+type IAvatarBadgeProps = React.ComponentPropsWithoutRef
+ & VariantProps
const AvatarBadge = React.forwardRef<
React.ComponentRef,
IAvatarBadgeProps
->(function AvatarBadge({ className, size, ...props }, ref) {
- const { size: parentSize } = useStyleContext(SCOPE);
+>(({ className, size, ...props }, ref) => {
+ const { size: parentSize } = useStyleContext(SCOPE)
return (
- );
-});
+ )
+})
type IAvatarFallbackTextProps = React.ComponentPropsWithoutRef<
typeof UIAvatar.FallbackText
-> &
- VariantProps;
+>
+& VariantProps
const AvatarFallbackText = React.forwardRef<
React.ComponentRef,
IAvatarFallbackTextProps
->(function AvatarFallbackText({ className, size, ...props }, ref) {
- const { size: parentSize } = useStyleContext(SCOPE);
+>(({ className, size, ...props }, ref) => {
+ const { size: parentSize } = useStyleContext(SCOPE)
return (
- );
-});
+ )
+})
-type IAvatarImageProps = React.ComponentPropsWithoutRef &
- VariantProps;
+type IAvatarImageProps = React.ComponentPropsWithoutRef
+ & VariantProps
const AvatarImage = React.forwardRef<
React.ComponentRef,
IAvatarImageProps
->(function AvatarImage({ className, ...props }, ref) {
+>(({ className, ...props }, ref) => {
return (
- );
-});
+ )
+})
-type IAvatarGroupProps = React.ComponentPropsWithoutRef &
- VariantProps;
+type IAvatarGroupProps = React.ComponentPropsWithoutRef
+ & VariantProps
const AvatarGroup = React.forwardRef<
React.ComponentRef,
IAvatarGroupProps
->(function AvatarGroup({ className, ...props }, ref) {
+>(({ className, ...props }, ref) => {
return (
- );
-});
+ )
+})
-export { Avatar, AvatarBadge, AvatarFallbackText, AvatarImage, AvatarGroup };
+export { Avatar, AvatarBadge, AvatarFallbackText, AvatarGroup, AvatarImage }
diff --git a/code/allapp/allapp-rn/src/request/api/auth.ts b/code/allapp/allapp-rn/src/request/api/auth.ts
index ff111604..4c29e034 100644
--- a/code/allapp/allapp-rn/src/request/api/auth.ts
+++ b/code/allapp/allapp-rn/src/request/api/auth.ts
@@ -1,12 +1,12 @@
-import type { LoginDefaultParams, LoginDefaultResult, RegisterDefaultParams } from '@/types/auth'
+import type { LoginQqParams, LoginResult, LoginWxParams } from '@/types/auth'
import alovaInstance from '../index'
const API_PREFIX = '/auth'
-export function registerDefaultApi(params: RegisterDefaultParams) {
- return alovaInstance.Post>(`${API_PREFIX}/register/default`, params)
+export function loginQqApi(params: LoginQqParams) {
+ return alovaInstance.Post>(`${API_PREFIX}/login/qq`, params)
}
-export function loginDefaultApi(params: LoginDefaultParams) {
- return alovaInstance.Post>(`${API_PREFIX}/login/default`, params)
+export function loginWxApi(params: LoginWxParams) {
+ return alovaInstance.Post>(`${API_PREFIX}/login/wx`, params)
}
diff --git a/code/allapp/allapp-rn/src/request/index.ts b/code/allapp/allapp-rn/src/request/index.ts
index 476eb11d..9c71bff7 100644
--- a/code/allapp/allapp-rn/src/request/index.ts
+++ b/code/allapp/allapp-rn/src/request/index.ts
@@ -1,6 +1,5 @@
import type { Method } from 'alova'
import type { AxiosError } from 'axios'
-import type { RefreshTokenResult } from '@/types/auth'
import { axiosRequestAdapter } from '@alova/adapter-axios'
import { createAlova } from 'alova'
import { useNavStore } from '@/store/navigation'
@@ -11,14 +10,13 @@ import { toast } from '@/utils/toast'
enum HttpCode {
Success = 200,
Unauthorized = 401,
- RefreshToken = 402,
Fail = 500,
}
+// 仅保留「无需登录」接口
const WhiteList = [
'/auth/login/**',
'/auth/register/**',
- '/auth/refresh/token',
]
function isWhiteListed(url: string) {
@@ -32,13 +30,14 @@ function isWhiteListed(url: string) {
}
const alovaInstance = createAlova({
- // baseURL: 'http://192.168.5.6:8086/app',
- baseURL: 'http://192.168.1.137:8086/app',
+ baseURL: 'http://192.168.5.6:8086/app',
+ // baseURL: 'http://192.168.1.137:8086/app',
requestAdapter: axiosRequestAdapter(),
timeout: 5000,
cacheFor: null,
+
responded: {
- onSuccess: async (response, method: Method) => {
+ onSuccess: async (response, _method: Method) => {
const resData = response.data as ResponseData
const result = {
@@ -46,116 +45,78 @@ const alovaInstance = createAlova({
isSuccess: resData.code === HttpCode.Success,
}
- // Access Token 失效 → 重新登录
+ /**
+ * 登录态失效:
+ * - 清空本地状态
+ * - 跳转登录页
+ * - 不做 token 刷新、不重试请求
+ */
if (resData.code === HttpCode.Unauthorized) {
+ useUserStore.getState().clear()
useNavStore.getState().navigateToAuth()
- return
- }
-
- // Access Token 过期但 Refresh Token 有效 → 刷新 token 并重试
- if (resData.code === HttpCode.RefreshToken) {
- try {
- const refreshToken = useUserStore.getState().userInfo?.refreshToken
- if (!refreshToken) {
- useNavStore.getState().navigateToAuth()
- return
- }
-
- // 调用刷新接口
- const res = await alovaInstance.Get>('/auth/refresh/token', {
- headers: { refreshToken },
- }).send()
-
- const newToken = res.data.refreshToken
-
- // 更新 store
- useUserStore.getState().setUserInfo({
- ...useUserStore.getState().userInfo!,
- token: newToken,
- })
-
- // 重试原请求
- method.config.headers.token = newToken
- const retryResult = await method.send()
-
- return retryResult
- }
- catch (err) {
- return Promise.reject(err)
- }
+ return Promise.reject(new Error('登录已失效'))
}
return result
},
- onError: (error: AxiosError, _method) => {
- console.log(error.status)
- switch (error.status) {
+ onError: (error: AxiosError) => {
+ const status = error.status
+
+ switch (status) {
case 400:
- toast.show({
- title: '请求错误,请检查输入参数',
- })
+ toast.show({ title: '请求错误,请检查输入参数' })
break
case 401:
- toast.show({
- title: '未授权,请重新登录',
- })
+ toast.show({ title: '未授权,请重新登录' })
break
case 403:
- toast.show({
- title: '没有权限访问该资源',
- })
+ toast.show({ title: '没有权限访问该资源' })
break
case 404:
- toast.show({
- title: '请求丢失啦,请稍后再试!',
- })
+ toast.show({ title: '请求丢失啦,请稍后再试!' })
break
case 500:
- toast.show({
- title: '服务器出错啦,请稍后重试',
- })
+ toast.show({ title: '服务器出错啦,请稍后重试' })
break
case 502:
- toast.show({
- title: '网关错误,请稍后重试',
- })
+ toast.show({ title: '网关错误,请稍后重试' })
break
case 503:
- toast.show({
- title: '服务暂不可用,请稍后再试',
- })
+ toast.show({ title: '服务暂不可用,请稍后再试' })
break
case 504:
- toast.show({
- title: '网关超时,请稍后再试',
- })
+ toast.show({ title: '网关超时,请稍后再试' })
break
default:
- toast.show({
- title: `服务器出错啦,请稍后重试`,
- })
+ toast.show({ title: '服务器出错啦,请稍后重试' })
break
}
+
return Promise.reject(error)
},
},
+
beforeRequest(method) {
+ // 白名单接口直接放行
if (isWhiteListed(method.url))
return
- if (!useUserStore.getState().isLoggedIn()) {
+ const userStore = useUserStore.getState()
+
+ // 未登录直接拦截
+ if (!userStore.isLoggedIn()) {
useNavStore.getState().navigateToAuth()
return Promise.reject(new Error('未登录'))
}
- method.config.headers.token = useUserStore.getState().userInfo?.token ?? ''
+ // 注入 JWT
+ method.config.headers.token = userStore.userInfo!.token
+ // 注入 space 信息(如果存在)
const userSpace = useSpaceStore.getState().userSpace
- if (userSpace !== null) {
- const spaceID = userSpace.space_id
-
- method.config.headers['x-space-id'] = spaceID
+ if (userSpace) {
+ method.config.headers['x-space-id'] = userSpace.space_id
}
},
})
diff --git a/code/allapp/allapp-rn/src/store/user.ts b/code/allapp/allapp-rn/src/store/user.ts
index 86dac85a..642d7efc 100644
--- a/code/allapp/allapp-rn/src/store/user.ts
+++ b/code/allapp/allapp-rn/src/store/user.ts
@@ -26,7 +26,7 @@ const useUserStore = create()(
set({ userInfo: null, userSpace: null })
},
- isLoggedIn: () => !!get().userInfo?.token,
+ isLoggedIn: () => Boolean(get().userInfo?.token),
}),
{
name: 'user-storage',
diff --git a/code/allapp/allapp-rn/src/types/auth.ts b/code/allapp/allapp-rn/src/types/auth.ts
index 65118857..18512d35 100644
--- a/code/allapp/allapp-rn/src/types/auth.ts
+++ b/code/allapp/allapp-rn/src/types/auth.ts
@@ -1,22 +1,16 @@
-export interface RefreshTokenResult {
- refreshToken: string
+export interface LoginQqParams {
+ openid: string
+ username: string
+ avatar: string
}
-export interface RegisterDefaultParams {
- account: string
- password: string
+export interface LoginWxParams {
+ code: string
}
-export interface LoginDefaultParams {
- account: string
- password: string
-}
-
-export interface LoginDefaultResult {
+export interface LoginResult {
token: string
- refreshToken: string
userId: number
username: string
- seqNo: number
- gender: number
+ avatar: string
}
diff --git a/code/allapp/allapp-rn/src/types/global.d.ts b/code/allapp/allapp-rn/src/types/global.d.ts
index 6b4e5962..b038a71f 100644
--- a/code/allapp/allapp-rn/src/types/global.d.ts
+++ b/code/allapp/allapp-rn/src/types/global.d.ts
@@ -10,14 +10,10 @@ declare global {
}
interface UserInfo {
- account: string
id: number
- seqNo: number
- username: string
- gender: number
- token?: string
- refreshToken?: string
- rememberMe?: boolean
+ token: string
+ username?: string
+ avatar?: string
}
interface UserSpace {
diff --git a/code/allapp/allapp-rn/test.html b/code/allapp/allapp-rn/test.html
new file mode 100644
index 00000000..2f9a1cfa
--- /dev/null
+++ b/code/allapp/allapp-rn/test.html
@@ -0,0 +1,147 @@
+
+
+
+
+
+ Bottom Nav Demo
+
+
+
+
+
+
+ 当前工具内容区域
+
+
+
+
+
视图切换
+
工具设置
+
导出数据
+
清空记录
+
+
+
+
+ ←
+
+
+ 记账 · 本月
+ ▾
+
+
+ ⋯
+
+
+
+
+
+
diff --git a/hz.txt b/hz.txt
index d90cafdd..610c72a7 100644
--- a/hz.txt
+++ b/hz.txt
@@ -4,4 +4,4 @@
https://www.bootstrapmb.com/item/14502/preview
-111
\ No newline at end of file
+sqlc generate -f sqlc.yaml
\ No newline at end of file