Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
canifa_note
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Vũ Hoàng Anh
canifa_note
Commits
94ce1e53
Commit
94ce1e53
authored
Apr 27, 2026
by
boojack
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
chore(settings): show build commit in version info
parent
e2c60845
Changes
10
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
54 additions
and
7 deletions
+54
-7
main.go
cmd/memos/main.go
+1
-0
profile.go
internal/profile/profile.go
+2
-0
instance_service.proto
proto/api/v1/instance_service.proto
+3
-0
instance_service.pb.go
proto/gen/api/v1/instance_service.pb.go
+13
-3
openapi.yaml
proto/gen/openapi.yaml
+3
-0
instance_service.go
server/router/api/v1/instance_service.go
+1
-0
instance_service_test.go
server/router/api/v1/test/instance_service_test.go
+3
-0
test_helper.go
server/router/api/v1/test/test_helper.go
+1
-0
Setting.tsx
web/src/pages/Setting.tsx
+19
-3
instance_service_pb.ts
web/src/types/proto/api/v1/instance_service_pb.ts
+8
-1
No files found.
cmd/memos/main.go
View file @
94ce1e53
...
@@ -37,6 +37,7 @@ var (
...
@@ -37,6 +37,7 @@ var (
InstanceURL
:
viper
.
GetString
(
"instance-url"
),
InstanceURL
:
viper
.
GetString
(
"instance-url"
),
}
}
instanceProfile
.
Version
=
version
.
GetCurrentVersion
()
instanceProfile
.
Version
=
version
.
GetCurrentVersion
()
instanceProfile
.
Commit
=
version
.
Commit
webhook
.
AllowPrivateIPs
=
viper
.
GetBool
(
"allow-private-webhooks"
)
webhook
.
AllowPrivateIPs
=
viper
.
GetBool
(
"allow-private-webhooks"
)
if
err
:=
instanceProfile
.
Validate
();
err
!=
nil
{
if
err
:=
instanceProfile
.
Validate
();
err
!=
nil
{
...
...
internal/profile/profile.go
View file @
94ce1e53
...
@@ -30,6 +30,8 @@ type Profile struct {
...
@@ -30,6 +30,8 @@ type Profile struct {
Driver
string
Driver
string
// Version is the current version of server
// Version is the current version of server
Version
string
Version
string
// Commit is the current build commit of server
Commit
string
// InstanceURL is the url of your memos instance.
// InstanceURL is the url of your memos instance.
InstanceURL
string
InstanceURL
string
}
}
...
...
proto/api/v1/instance_service.proto
View file @
94ce1e53
...
@@ -48,6 +48,9 @@ message InstanceProfile {
...
@@ -48,6 +48,9 @@ message InstanceProfile {
// The first administrator who set up this instance.
// The first administrator who set up this instance.
// When null, instance requires initial setup (creating the first admin account).
// When null, instance requires initial setup (creating the first admin account).
User
admin
=
7
;
User
admin
=
7
;
// Commit is the current build commit of instance.
string
commit
=
8
;
}
}
// Request for instance profile.
// Request for instance profile.
...
...
proto/gen/api/v1/instance_service.pb.go
View file @
94ce1e53
...
@@ -210,6 +210,8 @@ type InstanceProfile struct {
...
@@ -210,6 +210,8 @@ type InstanceProfile struct {
// The first administrator who set up this instance.
// The first administrator who set up this instance.
// When null, instance requires initial setup (creating the first admin account).
// When null, instance requires initial setup (creating the first admin account).
Admin
*
User
`protobuf:"bytes,7,opt,name=admin,proto3" json:"admin,omitempty"`
Admin
*
User
`protobuf:"bytes,7,opt,name=admin,proto3" json:"admin,omitempty"`
// Commit is the current build commit of instance.
Commit
string
`protobuf:"bytes,8,opt,name=commit,proto3" json:"commit,omitempty"`
unknownFields
protoimpl
.
UnknownFields
unknownFields
protoimpl
.
UnknownFields
sizeCache
protoimpl
.
SizeCache
sizeCache
protoimpl
.
SizeCache
}
}
...
@@ -272,6 +274,13 @@ func (x *InstanceProfile) GetAdmin() *User {
...
@@ -272,6 +274,13 @@ func (x *InstanceProfile) GetAdmin() *User {
return
nil
return
nil
}
}
func
(
x
*
InstanceProfile
)
GetCommit
()
string
{
if
x
!=
nil
{
return
x
.
Commit
}
return
""
}
// Request for instance profile.
// Request for instance profile.
type
GetInstanceProfileRequest
struct
{
type
GetInstanceProfileRequest
struct
{
state
protoimpl
.
MessageState
`protogen:"open.v1"`
state
protoimpl
.
MessageState
`protogen:"open.v1"`
...
@@ -1377,12 +1386,13 @@ var File_api_v1_instance_service_proto protoreflect.FileDescriptor
...
@@ -1377,12 +1386,13 @@ var File_api_v1_instance_service_proto protoreflect.FileDescriptor
const
file_api_v1_instance_service_proto_rawDesc
=
""
+
const
file_api_v1_instance_service_proto_rawDesc
=
""
+
"
\n
"
+
"
\n
"
+
"
\x1d
api/v1/instance_service.proto
\x12\f
memos.api.v1
\x1a\x19
api/v1/user_service.proto
\x1a\x1c
google/api/annotations.proto
\x1a\x17
google/api/client.proto
\x1a\x1f
google/api/field_behavior.proto
\x1a\x19
google/api/resource.proto
\x1a
google/protobuf/field_mask.proto
\x1a\x17
google/type/color.proto
\"\x
8c
\x01\n
"
+
"
\x1d
api/v1/instance_service.proto
\x12\f
memos.api.v1
\x1a\x19
api/v1/user_service.proto
\x1a\x1c
google/api/annotations.proto
\x1a\x17
google/api/client.proto
\x1a\x1f
google/api/field_behavior.proto
\x1a\x19
google/api/resource.proto
\x1a
google/protobuf/field_mask.proto
\x1a\x17
google/type/color.proto
\"\x
a4
\x01\n
"
+
"
\x0f
InstanceProfile
\x12\x18\n
"
+
"
\x0f
InstanceProfile
\x12\x18\n
"
+
"
\a
version
\x18\x02
\x01
(
\t
R
\a
version
\x12\x12\n
"
+
"
\a
version
\x18\x02
\x01
(
\t
R
\a
version
\x12\x12\n
"
+
"
\x04
demo
\x18\x03
\x01
(
\b
R
\x04
demo
\x12
!
\n
"
+
"
\x04
demo
\x18\x03
\x01
(
\b
R
\x04
demo
\x12
!
\n
"
+
"
\f
instance_url
\x18\x06
\x01
(
\t
R
\v
instanceUrl
\x12
(
\n
"
+
"
\f
instance_url
\x18\x06
\x01
(
\t
R
\v
instanceUrl
\x12
(
\n
"
+
"
\x05
admin
\x18\a
\x01
(
\v
2
\x12
.memos.api.v1.UserR
\x05
admin
\"\x1b\n
"
+
"
\x05
admin
\x18\a
\x01
(
\v
2
\x12
.memos.api.v1.UserR
\x05
admin
\x12\x16\n
"
+
"
\x06
commit
\x18\b
\x01
(
\t
R
\x06
commit
\"\x1b\n
"
+
"
\x19
GetInstanceProfileRequest
\"\xe6\x19\n
"
+
"
\x19
GetInstanceProfileRequest
\"\xe6\x19\n
"
+
"
\x0f
InstanceSetting
\x12\x17\n
"
+
"
\x0f
InstanceSetting
\x12\x17\n
"
+
"
\x04
name
\x18\x01
\x01
(
\t
B
\x03\xe0
A
\b
R
\x04
name
\x12
W
\n
"
+
"
\x04
name
\x18\x01
\x01
(
\t
B
\x03\xe0
A
\b
R
\x04
name
\x12
W
\n
"
+
...
...
proto/gen/openapi.yaml
View file @
94ce1e53
...
@@ -2530,6 +2530,9 @@ components:
...
@@ -2530,6 +2530,9 @@ components:
description
:
|-
description
:
|-
The first administrator who set up this instance.
The first administrator who set up this instance.
When null, instance requires initial setup (creating the first admin account).
When null, instance requires initial setup (creating the first admin account).
commit
:
type
:
string
description
:
Commit is the current build commit of instance.
description
:
Instance profile message containing basic instance information.
description
:
Instance profile message containing basic instance information.
InstanceSetting
:
InstanceSetting
:
type
:
object
type
:
object
...
...
server/router/api/v1/instance_service.go
View file @
94ce1e53
...
@@ -30,6 +30,7 @@ func (s *APIV1Service) GetInstanceProfile(ctx context.Context, _ *v1pb.GetInstan
...
@@ -30,6 +30,7 @@ func (s *APIV1Service) GetInstanceProfile(ctx context.Context, _ *v1pb.GetInstan
Demo
:
s
.
Profile
.
Demo
,
Demo
:
s
.
Profile
.
Demo
,
InstanceUrl
:
s
.
Profile
.
InstanceURL
,
InstanceUrl
:
s
.
Profile
.
InstanceURL
,
Admin
:
admin
,
// nil when not initialized
Admin
:
admin
,
// nil when not initialized
Commit
:
s
.
Profile
.
Commit
,
}
}
return
instanceProfile
,
nil
return
instanceProfile
,
nil
}
}
...
...
server/router/api/v1/test/instance_service_test.go
View file @
94ce1e53
...
@@ -29,6 +29,7 @@ func TestGetInstanceProfile(t *testing.T) {
...
@@ -29,6 +29,7 @@ func TestGetInstanceProfile(t *testing.T) {
// Verify the response contains expected data
// Verify the response contains expected data
require
.
Equal
(
t
,
"test-1.0.0"
,
resp
.
Version
)
require
.
Equal
(
t
,
"test-1.0.0"
,
resp
.
Version
)
require
.
Equal
(
t
,
"test-commit"
,
resp
.
Commit
)
require
.
True
(
t
,
resp
.
Demo
)
require
.
True
(
t
,
resp
.
Demo
)
require
.
Equal
(
t
,
"http://localhost:8080"
,
resp
.
InstanceUrl
)
require
.
Equal
(
t
,
"http://localhost:8080"
,
resp
.
InstanceUrl
)
...
@@ -56,6 +57,7 @@ func TestGetInstanceProfile(t *testing.T) {
...
@@ -56,6 +57,7 @@ func TestGetInstanceProfile(t *testing.T) {
// Verify the response contains expected data with initialized flag
// Verify the response contains expected data with initialized flag
require
.
Equal
(
t
,
"test-1.0.0"
,
resp
.
Version
)
require
.
Equal
(
t
,
"test-1.0.0"
,
resp
.
Version
)
require
.
Equal
(
t
,
"test-commit"
,
resp
.
Commit
)
require
.
True
(
t
,
resp
.
Demo
)
require
.
True
(
t
,
resp
.
Demo
)
require
.
Equal
(
t
,
"http://localhost:8080"
,
resp
.
InstanceUrl
)
require
.
Equal
(
t
,
"http://localhost:8080"
,
resp
.
InstanceUrl
)
...
@@ -102,6 +104,7 @@ func TestGetInstanceProfile_Concurrency(t *testing.T) {
...
@@ -102,6 +104,7 @@ func TestGetInstanceProfile_Concurrency(t *testing.T) {
case
resp
:=
<-
results
:
case
resp
:=
<-
results
:
require
.
NotNil
(
t
,
resp
)
require
.
NotNil
(
t
,
resp
)
require
.
Equal
(
t
,
"test-1.0.0"
,
resp
.
Version
)
require
.
Equal
(
t
,
"test-1.0.0"
,
resp
.
Version
)
require
.
Equal
(
t
,
"test-commit"
,
resp
.
Commit
)
require
.
True
(
t
,
resp
.
Demo
)
require
.
True
(
t
,
resp
.
Demo
)
require
.
Equal
(
t
,
"http://localhost:8080"
,
resp
.
InstanceUrl
)
require
.
Equal
(
t
,
"http://localhost:8080"
,
resp
.
InstanceUrl
)
require
.
NotNil
(
t
,
resp
.
Admin
)
require
.
NotNil
(
t
,
resp
.
Admin
)
...
...
server/router/api/v1/test/test_helper.go
View file @
94ce1e53
...
@@ -32,6 +32,7 @@ func NewTestService(t *testing.T) *TestService {
...
@@ -32,6 +32,7 @@ func NewTestService(t *testing.T) *TestService {
testProfile
:=
&
profile
.
Profile
{
testProfile
:=
&
profile
.
Profile
{
Demo
:
true
,
Demo
:
true
,
Version
:
"test-1.0.0"
,
Version
:
"test-1.0.0"
,
Commit
:
"test-commit"
,
InstanceURL
:
"http://localhost:8080"
,
InstanceURL
:
"http://localhost:8080"
,
Driver
:
"sqlite"
,
Driver
:
"sqlite"
,
DSN
:
":memory:"
,
DSN
:
":memory:"
,
...
...
web/src/pages/Setting.tsx
View file @
94ce1e53
...
@@ -37,6 +37,9 @@ type SettingSection = "my-account" | "preference" | "webhook" | "member" | "syst
...
@@ -37,6 +37,9 @@ type SettingSection = "my-account" | "preference" | "webhook" | "member" | "syst
const
BASIC_SECTIONS
:
SettingSection
[]
=
[
"my-account"
,
"preference"
,
"webhook"
];
const
BASIC_SECTIONS
:
SettingSection
[]
=
[
"my-account"
,
"preference"
,
"webhook"
];
const
ADMIN_SECTIONS
:
SettingSection
[]
=
[
"member"
,
"system"
,
"memo"
,
"tags"
,
"storage"
,
"sso"
,
"ai"
];
const
ADMIN_SECTIONS
:
SettingSection
[]
=
[
"member"
,
"system"
,
"memo"
,
"tags"
,
"storage"
,
"sso"
,
"ai"
];
const
GITHUB_COMMIT_URL_PREFIX
=
"https://github.com/usememos/memos/commit/"
;
const
isCommitSha
=
(
commit
:
string
)
=>
/^
[
0-9a-f
]{7,40}
$/i
.
test
(
commit
);
const
SECTION_ICON_MAP
:
Record
<
SettingSection
,
LucideIcon
>
=
{
const
SECTION_ICON_MAP
:
Record
<
SettingSection
,
LucideIcon
>
=
{
"my-account"
:
UserIcon
,
"my-account"
:
UserIcon
,
...
@@ -72,6 +75,7 @@ const Setting = () => {
...
@@ -72,6 +75,7 @@ const Setting = () => {
const
{
profile
,
fetchSetting
}
=
useInstance
();
const
{
profile
,
fetchSetting
}
=
useInstance
();
const
[
selectedSection
,
setSelectedSection
]
=
useState
<
SettingSection
>
(
"my-account"
);
const
[
selectedSection
,
setSelectedSection
]
=
useState
<
SettingSection
>
(
"my-account"
);
const
isHost
=
user
?.
role
===
User_Role
.
ADMIN
;
const
isHost
=
user
?.
role
===
User_Role
.
ADMIN
;
const
commitUrl
=
isCommitSha
(
profile
.
commit
)
?
`
${
GITHUB_COMMIT_URL_PREFIX
}${
profile
.
commit
}
`
:
""
;
const
settingsSectionList
=
useMemo
(()
=>
{
const
settingsSectionList
=
useMemo
(()
=>
{
return
isHost
?
[...
BASIC_SECTIONS
,
...
ADMIN_SECTIONS
]
:
[...
BASIC_SECTIONS
];
return
isHost
?
[...
BASIC_SECTIONS
,
...
ADMIN_SECTIONS
]
:
[...
BASIC_SECTIONS
];
...
@@ -131,9 +135,21 @@ const Setting = () => {
...
@@ -131,9 +135,21 @@ const Setting = () => {
onClick=
{
()
=>
handleSectionSelectorItemClick
(
item
)
}
onClick=
{
()
=>
handleSectionSelectorItemClick
(
item
)
}
/>
/>
))
}
))
}
<
span
className=
"px-3 mt-2 opacity-70 text-sm"
>
<
div
className=
"px-3 mt-2 opacity-70 text-sm leading-5"
>
{
t
(
"setting.version"
)
}
: v
{
profile
.
version
}
{
t
(
"setting.version"
)
}
:
{
profile
.
version
}
{
profile
.
commit
&&
(
<
span
className=
"block font-mono break-all"
>
Commit:
{
" "
}
{
commitUrl
?
(
<
a
className=
"underline hover:text-foreground"
href=
{
commitUrl
}
target=
"_blank"
rel=
"noreferrer"
>
{
profile
.
commit
}
</
a
>
)
:
(
profile
.
commit
)
}
</
span
>
</
span
>
)
}
</
div
>
</
div
>
</
div
>
</>
</>
)
}
)
}
...
...
web/src/types/proto/api/v1/instance_service_pb.ts
View file @
94ce1e53
...
@@ -20,7 +20,7 @@ import type { Message } from "@bufbuild/protobuf";
...
@@ -20,7 +20,7 @@ import type { Message } from "@bufbuild/protobuf";
* Describes the file api/v1/instance_service.proto.
* Describes the file api/v1/instance_service.proto.
*/
*/
export
const
file_api_v1_instance_service
:
GenFile
=
/*@__PURE__*/
export
const
file_api_v1_instance_service
:
GenFile
=
/*@__PURE__*/
fileDesc
(
"Ch1hcGkvdjEvaW5zdGFuY2Vfc2VydmljZS5wcm90bxIMbWVtb3MuYXBpLnYxI
mkKD0luc3RhbmNlUHJvZmlsZRIPCgd2ZXJzaW9uGAIgASgJEgwKBGRlbW8YAyABKAgSFAoMaW5zdGFuY2VfdXJsGAYgASgJEiEKBWFkbWluGAcgASgLMhIubWVtb3MuYXBpLnYxLlVzZXIiGwoZR2V0SW5zdGFuY2VQcm9maWxlUmVxdWVzdCKhFAoPSW5zdGFuY2VTZXR0aW5nEhEKBG5hbWUYASABKAlCA+BBCBJHCg9nZW5lcmFsX3NldHRpbmcYAiABKAsyLC5tZW1vcy5hcGkudjEuSW5zdGFuY2VTZXR0aW5nLkdlbmVyYWxTZXR0aW5nSAASRwoPc3RvcmFnZV9zZXR0aW5nGAMgASgLMiwubWVtb3MuYXBpLnYxLkluc3RhbmNlU2V0dGluZy5TdG9yYWdlU2V0dGluZ0gAElAKFG1lbW9fcmVsYXRlZF9zZXR0aW5nGAQgASgLMjAubWVtb3MuYXBpLnYxLkluc3RhbmNlU2V0dGluZy5NZW1vUmVsYXRlZFNldHRpbmdIABJBCgx0YWdzX3NldHRpbmcYBSABKAsyKS5tZW1vcy5hcGkudjEuSW5zdGFuY2VTZXR0aW5nLlRhZ3NTZXR0aW5nSAASUQoUbm90aWZpY2F0aW9uX3NldHRpbmcYBiABKAsyMS5tZW1vcy5hcGkudjEuSW5zdGFuY2VTZXR0aW5nLk5vdGlmaWNhdGlvblNldHRpbmdIABI9CgphaV9zZXR0aW5nGAcgASgLMicubWVtb3MuYXBpLnYxLkluc3RhbmNlU2V0dGluZy5BSVNldHRpbmdIABqHAwoOR2VuZXJhbFNldHRpbmcSIgoaZGlzYWxsb3dfdXNlcl9yZWdpc3RyYXRpb24YAiABKAgSHgoWZGlzYWxsb3dfcGFzc3dvcmRfYXV0aBgDIAEoCBIZChFhZGRpdGlvbmFsX3NjcmlwdBgEIAEoCRIYChBhZGRpdGlvbmFsX3N0eWxlGAUgASgJElIKDmN1c3RvbV9wcm9maWxlGAYgASgLMjoubWVtb3MuYXBpLnYxLkluc3RhbmNlU2V0dGluZy5HZW5lcmFsU2V0dGluZy5DdXN0b21Qcm9maWxlEh0KFXdlZWtfc3RhcnRfZGF5X29mZnNldBgHIAEoBRIgChhkaXNhbGxvd19jaGFuZ2VfdXNlcm5hbWUYCCABKAgSIAoYZGlzYWxsb3dfY2hhbmdlX25pY2tuYW1lGAkgASgIGkUKDUN1c3RvbVByb2ZpbGUSDQoFdGl0bGUYASABKAkSEwoLZGVzY3JpcHRpb24YAiABKAkSEAoIbG9nb191cmwYAyABKAkaugMKDlN0b3JhZ2VTZXR0aW5nEk4KDHN0b3JhZ2VfdHlwZRgBIAEoDjI4Lm1lbW9zLmFwaS52MS5JbnN0YW5jZVNldHRpbmcuU3RvcmFnZVNldHRpbmcuU3RvcmFnZVR5cGUSGQoRZmlsZXBhdGhfdGVtcGxhdGUYAiABKAkSHAoUdXBsb2FkX3NpemVfbGltaXRfbWIYAyABKAMSSAoJczNfY29uZmlnGAQgASgLMjUubWVtb3MuYXBpLnYxLkluc3RhbmNlU2V0dGluZy5TdG9yYWdlU2V0dGluZy5TM0NvbmZpZxqGAQoIUzNDb25maWcSFQoNYWNjZXNzX2tleV9pZBgBIAEoCRIZChFhY2Nlc3Nfa2V5X3NlY3JldBgCIAEoCRIQCghlbmRwb2ludBgDIAEoCRIOCgZyZWdpb24YBCABKAkSDgoGYnVja2V0GAUgASgJEhYKDnVzZV9wYXRoX3N0eWxlGAYgASgIIkwKC1N0b3JhZ2VUeXBlEhwKGFNUT1JBR0VfVFlQRV9VTlNQRUNJRklFRBAAEgwKCERBVEFCQVNFEAESCQoFTE9DQUwQAhIGCgJTMxADGocBChJNZW1vUmVsYXRlZFNldHRpbmcSHAoUY29udGVudF9sZW5ndGhfbGltaXQYAyABKAUSIAoYZW5hYmxlX2RvdWJsZV9jbGlja19lZGl0GAQgASgIEhEKCXJlYWN0aW9ucxgHIAMoCUoECAIQA1IYZGlzcGxheV93aXRoX3VwZGF0ZV90aW1lGlEKC1RhZ01ldGFkYXRhEiwKEGJhY2tncm91bmRfY29sb3IYASABKAsyEi5nb29nbGUudHlwZS5Db2xvchIUCgxibHVyX2NvbnRlbnQYAiABKAgaqAEKC1RhZ3NTZXR0aW5nEkEKBHRhZ3MYASADKAsyMy5tZW1vcy5hcGkudjEuSW5zdGFuY2VTZXR0aW5nLlRhZ3NTZXR0aW5nLlRhZ3NFbnRyeRpWCglUYWdzRW50cnkSCwoDa2V5GAEgASgJEjgKBXZhbHVlGAIgASgLMikubWVtb3MuYXBpLnYxLkluc3RhbmNlU2V0dGluZy5UYWdNZXRhZGF0YToCOAEatQIKE05vdGlmaWNhdGlvblNldHRpbmcSTQoFZW1haWwYASABKAsyPi5tZW1vcy5hcGkudjEuSW5zdGFuY2VTZXR0aW5nLk5vdGlmaWNhdGlvblNldHRpbmcuRW1haWxTZXR0aW5nGs4BCgxFbWFpbFNldHRpbmcSDwoHZW5hYmxlZBgBIAEoCBIRCglzbXRwX2hvc3QYAiABKAkSEQoJc210cF9wb3J0GAMgASgFEhUKDXNtdHBfdXNlcm5hbWUYBCABKAkSFQoNc210cF9wYXNzd29yZBgFIAEoCRISCgpmcm9tX2VtYWlsGAYgASgJEhEKCWZyb21fbmFtZRgHIAEoCRIQCghyZXBseV90bxgIIAEoCRIPCgd1c2VfdGxzGAkgASgIEg8KB3VzZV9zc2wYCiABKAgaTgoJQUlTZXR0aW5nEkEKCXByb3ZpZGVycxgBIAMoCzIuLm1lbW9zLmFwaS52MS5JbnN0YW5jZVNldHRpbmcuQUlQcm92aWRlckNvbmZpZxrGAQoQQUlQcm92aWRlckNvbmZpZxIKCgJpZBgBIAEoCRINCgV0aXRsZRgCIAEoCRI6CgR0eXBlGAMgASgOMiwubWVtb3MuYXBpLnYxLkluc3RhbmNlU2V0dGluZy5BSVByb3ZpZGVyVHlwZRIQCghlbmRwb2ludBgEIAEoCRIUCgdhcGlfa2V5GAUgASgJQgPgQQQSGAoLYXBpX2tleV9zZXQYCCABKAhCA+BBAxIZCgxhcGlfa2V5X2hpbnQYCSABKAlCA+BBAyJqCgNLZXkSEwoPS0VZX1VOU1BFQ0lGSUVEEAASCwoHR0VORVJBTBABEgsKB1NUT1JBR0UQAhIQCgxNRU1PX1JFTEFURUQQAxIICgRUQUdTEAQSEAoMTk9USUZJQ0FUSU9OEAUSBgoCQUkQBiJKCg5BSVByb3ZpZGVyVHlwZRIgChxBSV9QUk9WSURFUl9UWVBFX1VOU1BFQ0lGSUVEEAASCgoGT1BFTkFJEAESCgoGR0VNSU5JEAI6YepBXgocbWVtb3MuYXBpLnYxL0luc3RhbmNlU2V0dGluZxIbaW5zdGFuY2Uvc2V0dGluZ3Mve3NldHRpbmd9KhBpbnN0YW5jZVNldHRpbmdzMg9pbnN0YW5jZVNldHRpbmdCBwoFdmFsdWUiTwoZR2V0SW5zdGFuY2VTZXR0aW5nUmVxdWVzdBIyCgRuYW1lGAEgASgJQiTgQQL6QR4KHG1lbW9zLmFwaS52MS9JbnN0YW5jZVNldHRpbmciiQEKHFVwZGF0ZUluc3RhbmNlU2V0dGluZ1JlcXVlc3QSMwoHc2V0dGluZxgBIAEoCzIdLm1lbW9zLmFwaS52MS5JbnN0YW5jZVNldHRpbmdCA+BBAhI0Cgt1cGRhdGVfbWFzaxgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2tCA+BBATLbAwoPSW5zdGFuY2VTZXJ2aWNlEn4KEkdldEluc3RhbmNlUHJvZmlsZRInLm1lbW9zLmFwaS52MS5HZXRJbnN0YW5jZVByb2ZpbGVSZXF1ZXN0Gh0ubWVtb3MuYXBpLnYxLkluc3RhbmNlUHJvZmlsZSIggtPkkwIaEhgvYXBpL3YxL2luc3RhbmNlL3Byb2ZpbGUSjwEKEkdldEluc3RhbmNlU2V0dGluZxInLm1lbW9zLmFwaS52MS5HZXRJbnN0YW5jZVNldHRpbmdSZXF1ZXN0Gh0ubWVtb3MuYXBpLnYxLkluc3RhbmNlU2V0dGluZyIx2kEEbmFtZYLT5JMCJBIiL2FwaS92MS97bmFtZT1pbnN0YW5jZS9zZXR0aW5ncy8qfRK1AQoVVXBkYXRlSW5zdGFuY2VTZXR0aW5nEioubWVtb3MuYXBpLnYxLlVwZGF0ZUluc3RhbmNlU2V0dGluZ1JlcXVlc3QaHS5tZW1vcy5hcGkudjEuSW5zdGFuY2VTZXR0aW5nIlHaQRNzZXR0aW5nLHVwZGF0ZV9tYXNrgtPkkwI1OgdzZXR0aW5nMiovYXBpL3YxL3tzZXR0aW5nLm5hbWU9aW5zdGFuY2Uvc2V0dGluZ3MvKn1CrAEKEGNvbS5tZW1vcy5hcGkudjFCFEluc3RhbmNlU2VydmljZVByb3RvUAFaMGdpdGh1Yi5jb20vdXNlbWVtb3MvbWVtb3MvcHJvdG8vZ2VuL2FwaS92MTthcGl2MaICA01BWKoCDE1lbW9zLkFwaS5WMcoCDE1lbW9zXEFwaVxWMeICGE1lbW9zXEFwaVxWMVxHUEJNZXRhZGF0YeoCDk1lbW9zOjpBcGk6OlYxYgZwcm90bzM
"
,
[
file_api_v1_user_service
,
file_google_api_annotations
,
file_google_api_client
,
file_google_api_field_behavior
,
file_google_api_resource
,
file_google_protobuf_field_mask
,
file_google_type_color
]);
fileDesc
(
"Ch1hcGkvdjEvaW5zdGFuY2Vfc2VydmljZS5wcm90bxIMbWVtb3MuYXBpLnYxI
nkKD0luc3RhbmNlUHJvZmlsZRIPCgd2ZXJzaW9uGAIgASgJEgwKBGRlbW8YAyABKAgSFAoMaW5zdGFuY2VfdXJsGAYgASgJEiEKBWFkbWluGAcgASgLMhIubWVtb3MuYXBpLnYxLlVzZXISDgoGY29tbWl0GAggASgJIhsKGUdldEluc3RhbmNlUHJvZmlsZVJlcXVlc3QioRQKD0luc3RhbmNlU2V0dGluZxIRCgRuYW1lGAEgASgJQgPgQQgSRwoPZ2VuZXJhbF9zZXR0aW5nGAIgASgLMiwubWVtb3MuYXBpLnYxLkluc3RhbmNlU2V0dGluZy5HZW5lcmFsU2V0dGluZ0gAEkcKD3N0b3JhZ2Vfc2V0dGluZxgDIAEoCzIsLm1lbW9zLmFwaS52MS5JbnN0YW5jZVNldHRpbmcuU3RvcmFnZVNldHRpbmdIABJQChRtZW1vX3JlbGF0ZWRfc2V0dGluZxgEIAEoCzIwLm1lbW9zLmFwaS52MS5JbnN0YW5jZVNldHRpbmcuTWVtb1JlbGF0ZWRTZXR0aW5nSAASQQoMdGFnc19zZXR0aW5nGAUgASgLMikubWVtb3MuYXBpLnYxLkluc3RhbmNlU2V0dGluZy5UYWdzU2V0dGluZ0gAElEKFG5vdGlmaWNhdGlvbl9zZXR0aW5nGAYgASgLMjEubWVtb3MuYXBpLnYxLkluc3RhbmNlU2V0dGluZy5Ob3RpZmljYXRpb25TZXR0aW5nSAASPQoKYWlfc2V0dGluZxgHIAEoCzInLm1lbW9zLmFwaS52MS5JbnN0YW5jZVNldHRpbmcuQUlTZXR0aW5nSAAahwMKDkdlbmVyYWxTZXR0aW5nEiIKGmRpc2FsbG93X3VzZXJfcmVnaXN0cmF0aW9uGAIgASgIEh4KFmRpc2FsbG93X3Bhc3N3b3JkX2F1dGgYAyABKAgSGQoRYWRkaXRpb25hbF9zY3JpcHQYBCABKAkSGAoQYWRkaXRpb25hbF9zdHlsZRgFIAEoCRJSCg5jdXN0b21fcHJvZmlsZRgGIAEoCzI6Lm1lbW9zLmFwaS52MS5JbnN0YW5jZVNldHRpbmcuR2VuZXJhbFNldHRpbmcuQ3VzdG9tUHJvZmlsZRIdChV3ZWVrX3N0YXJ0X2RheV9vZmZzZXQYByABKAUSIAoYZGlzYWxsb3dfY2hhbmdlX3VzZXJuYW1lGAggASgIEiAKGGRpc2FsbG93X2NoYW5nZV9uaWNrbmFtZRgJIAEoCBpFCg1DdXN0b21Qcm9maWxlEg0KBXRpdGxlGAEgASgJEhMKC2Rlc2NyaXB0aW9uGAIgASgJEhAKCGxvZ29fdXJsGAMgASgJGroDCg5TdG9yYWdlU2V0dGluZxJOCgxzdG9yYWdlX3R5cGUYASABKA4yOC5tZW1vcy5hcGkudjEuSW5zdGFuY2VTZXR0aW5nLlN0b3JhZ2VTZXR0aW5nLlN0b3JhZ2VUeXBlEhkKEWZpbGVwYXRoX3RlbXBsYXRlGAIgASgJEhwKFHVwbG9hZF9zaXplX2xpbWl0X21iGAMgASgDEkgKCXMzX2NvbmZpZxgEIAEoCzI1Lm1lbW9zLmFwaS52MS5JbnN0YW5jZVNldHRpbmcuU3RvcmFnZVNldHRpbmcuUzNDb25maWcahgEKCFMzQ29uZmlnEhUKDWFjY2Vzc19rZXlfaWQYASABKAkSGQoRYWNjZXNzX2tleV9zZWNyZXQYAiABKAkSEAoIZW5kcG9pbnQYAyABKAkSDgoGcmVnaW9uGAQgASgJEg4KBmJ1Y2tldBgFIAEoCRIWCg51c2VfcGF0aF9zdHlsZRgGIAEoCCJMCgtTdG9yYWdlVHlwZRIcChhTVE9SQUdFX1RZUEVfVU5TUEVDSUZJRUQQABIMCghEQVRBQkFTRRABEgkKBUxPQ0FMEAISBgoCUzMQAxqHAQoSTWVtb1JlbGF0ZWRTZXR0aW5nEhwKFGNvbnRlbnRfbGVuZ3RoX2xpbWl0GAMgASgFEiAKGGVuYWJsZV9kb3VibGVfY2xpY2tfZWRpdBgEIAEoCBIRCglyZWFjdGlvbnMYByADKAlKBAgCEANSGGRpc3BsYXlfd2l0aF91cGRhdGVfdGltZRpRCgtUYWdNZXRhZGF0YRIsChBiYWNrZ3JvdW5kX2NvbG9yGAEgASgLMhIuZ29vZ2xlLnR5cGUuQ29sb3ISFAoMYmx1cl9jb250ZW50GAIgASgIGqgBCgtUYWdzU2V0dGluZxJBCgR0YWdzGAEgAygLMjMubWVtb3MuYXBpLnYxLkluc3RhbmNlU2V0dGluZy5UYWdzU2V0dGluZy5UYWdzRW50cnkaVgoJVGFnc0VudHJ5EgsKA2tleRgBIAEoCRI4CgV2YWx1ZRgCIAEoCzIpLm1lbW9zLmFwaS52MS5JbnN0YW5jZVNldHRpbmcuVGFnTWV0YWRhdGE6AjgBGrUCChNOb3RpZmljYXRpb25TZXR0aW5nEk0KBWVtYWlsGAEgASgLMj4ubWVtb3MuYXBpLnYxLkluc3RhbmNlU2V0dGluZy5Ob3RpZmljYXRpb25TZXR0aW5nLkVtYWlsU2V0dGluZxrOAQoMRW1haWxTZXR0aW5nEg8KB2VuYWJsZWQYASABKAgSEQoJc210cF9ob3N0GAIgASgJEhEKCXNtdHBfcG9ydBgDIAEoBRIVCg1zbXRwX3VzZXJuYW1lGAQgASgJEhUKDXNtdHBfcGFzc3dvcmQYBSABKAkSEgoKZnJvbV9lbWFpbBgGIAEoCRIRCglmcm9tX25hbWUYByABKAkSEAoIcmVwbHlfdG8YCCABKAkSDwoHdXNlX3RscxgJIAEoCBIPCgd1c2Vfc3NsGAogASgIGk4KCUFJU2V0dGluZxJBCglwcm92aWRlcnMYASADKAsyLi5tZW1vcy5hcGkudjEuSW5zdGFuY2VTZXR0aW5nLkFJUHJvdmlkZXJDb25maWcaxgEKEEFJUHJvdmlkZXJDb25maWcSCgoCaWQYASABKAkSDQoFdGl0bGUYAiABKAkSOgoEdHlwZRgDIAEoDjIsLm1lbW9zLmFwaS52MS5JbnN0YW5jZVNldHRpbmcuQUlQcm92aWRlclR5cGUSEAoIZW5kcG9pbnQYBCABKAkSFAoHYXBpX2tleRgFIAEoCUID4EEEEhgKC2FwaV9rZXlfc2V0GAggASgIQgPgQQMSGQoMYXBpX2tleV9oaW50GAkgASgJQgPgQQMiagoDS2V5EhMKD0tFWV9VTlNQRUNJRklFRBAAEgsKB0dFTkVSQUwQARILCgdTVE9SQUdFEAISEAoMTUVNT19SRUxBVEVEEAMSCAoEVEFHUxAEEhAKDE5PVElGSUNBVElPThAFEgYKAkFJEAYiSgoOQUlQcm92aWRlclR5cGUSIAocQUlfUFJPVklERVJfVFlQRV9VTlNQRUNJRklFRBAAEgoKBk9QRU5BSRABEgoKBkdFTUlOSRACOmHqQV4KHG1lbW9zLmFwaS52MS9JbnN0YW5jZVNldHRpbmcSG2luc3RhbmNlL3NldHRpbmdzL3tzZXR0aW5nfSoQaW5zdGFuY2VTZXR0aW5nczIPaW5zdGFuY2VTZXR0aW5nQgcKBXZhbHVlIk8KGUdldEluc3RhbmNlU2V0dGluZ1JlcXVlc3QSMgoEbmFtZRgBIAEoCUIk4EEC+kEeChxtZW1vcy5hcGkudjEvSW5zdGFuY2VTZXR0aW5nIokBChxVcGRhdGVJbnN0YW5jZVNldHRpbmdSZXF1ZXN0EjMKB3NldHRpbmcYASABKAsyHS5tZW1vcy5hcGkudjEuSW5zdGFuY2VTZXR0aW5nQgPgQQISNAoLdXBkYXRlX21hc2sYAiABKAsyGi5nb29nbGUucHJvdG9idWYuRmllbGRNYXNrQgPgQQEy2wMKD0luc3RhbmNlU2VydmljZRJ+ChJHZXRJbnN0YW5jZVByb2ZpbGUSJy5tZW1vcy5hcGkudjEuR2V0SW5zdGFuY2VQcm9maWxlUmVxdWVzdBodLm1lbW9zLmFwaS52MS5JbnN0YW5jZVByb2ZpbGUiIILT5JMCGhIYL2FwaS92MS9pbnN0YW5jZS9wcm9maWxlEo8BChJHZXRJbnN0YW5jZVNldHRpbmcSJy5tZW1vcy5hcGkudjEuR2V0SW5zdGFuY2VTZXR0aW5nUmVxdWVzdBodLm1lbW9zLmFwaS52MS5JbnN0YW5jZVNldHRpbmciMdpBBG5hbWWC0+STAiQSIi9hcGkvdjEve25hbWU9aW5zdGFuY2Uvc2V0dGluZ3MvKn0StQEKFVVwZGF0ZUluc3RhbmNlU2V0dGluZxIqLm1lbW9zLmFwaS52MS5VcGRhdGVJbnN0YW5jZVNldHRpbmdSZXF1ZXN0Gh0ubWVtb3MuYXBpLnYxLkluc3RhbmNlU2V0dGluZyJR2kETc2V0dGluZyx1cGRhdGVfbWFza4LT5JMCNToHc2V0dGluZzIqL2FwaS92MS97c2V0dGluZy5uYW1lPWluc3RhbmNlL3NldHRpbmdzLyp9QqwBChBjb20ubWVtb3MuYXBpLnYxQhRJbnN0YW5jZVNlcnZpY2VQcm90b1ABWjBnaXRodWIuY29tL3VzZW1lbW9zL21lbW9zL3Byb3RvL2dlbi9hcGkvdjE7YXBpdjGiAgNNQViqAgxNZW1vcy5BcGkuVjHKAgxNZW1vc1xBcGlcVjHiAhhNZW1vc1xBcGlcVjFcR1BCTWV0YWRhdGHqAg5NZW1vczo6QXBpOjpWMWIGcHJvdG8z
"
,
[
file_api_v1_user_service
,
file_google_api_annotations
,
file_google_api_client
,
file_google_api_field_behavior
,
file_google_api_resource
,
file_google_protobuf_field_mask
,
file_google_type_color
]);
/**
/**
* Instance profile message containing basic instance information.
* Instance profile message containing basic instance information.
...
@@ -56,6 +56,13 @@ export type InstanceProfile = Message<"memos.api.v1.InstanceProfile"> & {
...
@@ -56,6 +56,13 @@ export type InstanceProfile = Message<"memos.api.v1.InstanceProfile"> & {
* @generated from field: memos.api.v1.User admin = 7;
* @generated from field: memos.api.v1.User admin = 7;
*/
*/
admin
?:
User
|
undefined
;
admin
?:
User
|
undefined
;
/**
* Commit is the current build commit of instance.
*
* @generated from field: string commit = 8;
*/
commit
:
string
;
};
};
/**
/**
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment