mirror of
https://github.com/anyproto/anytype-kotlin.git
synced 2025-06-08 05:47:05 +09:00
DROID-2362 Protocol | MW 0.33.0-rc6 (#1047)
This commit is contained in:
parent
13736ac909
commit
9ebf417a0a
4 changed files with 595 additions and 1 deletions
|
@ -1,5 +1,5 @@
|
|||
[versions]
|
||||
middlewareVersion = "v0.33.0-rc2"
|
||||
middlewareVersion = "v0.33.0-rc6"
|
||||
kotlinVersion = '1.9.22'
|
||||
|
||||
androidxCoreVersion = "1.12.0"
|
||||
|
|
|
@ -93,6 +93,33 @@ message Rpc {
|
|||
}
|
||||
|
||||
message Space {
|
||||
message LeaveApprove {
|
||||
message Request {
|
||||
string spaceId = 1;
|
||||
repeated string identities = 2;
|
||||
}
|
||||
|
||||
message Response {
|
||||
Error error = 1;
|
||||
|
||||
message Error {
|
||||
Code code = 1;
|
||||
string description = 2;
|
||||
|
||||
enum Code {
|
||||
NULL = 0;
|
||||
UNKNOWN_ERROR = 1;
|
||||
BAD_INPUT = 2;
|
||||
|
||||
NO_SUCH_SPACE = 101;
|
||||
SPACE_IS_DELETED = 102;
|
||||
REQUEST_FAILED = 103;
|
||||
NO_APPROVE_REQUESTS = 104;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
message InviteGenerate {
|
||||
message Request {
|
||||
string spaceId = 1;
|
||||
|
@ -557,6 +584,7 @@ message Rpc {
|
|||
UNKNOWN_ERROR = 1;
|
||||
BAD_INPUT = 2;
|
||||
|
||||
APP_TOKEN_NOT_FOUND_IN_THE_CURRENT_ACCOUNT = 101; // means the client logged into another account or the account directory has been cleaned
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -633,6 +661,7 @@ message Rpc {
|
|||
FAILED_TO_STOP_RUNNING_NODE = 104;
|
||||
FAILED_TO_WRITE_CONFIG = 105;
|
||||
FAILED_TO_CREATE_LOCAL_REPO = 106;
|
||||
ACCOUNT_CREATION_IS_CANCELED = 107;
|
||||
|
||||
CONFIG_FILE_NOT_FOUND = 200;
|
||||
CONFIG_FILE_INVALID = 201;
|
||||
|
@ -758,6 +787,7 @@ message Rpc {
|
|||
ANOTHER_ANYTYPE_PROCESS_IS_RUNNING = 108;
|
||||
FAILED_TO_FETCH_REMOTE_NODE_HAS_INCOMPATIBLE_PROTO_VERSION = 110;
|
||||
ACCOUNT_IS_DELETED = 111;
|
||||
ACCOUNT_LOAD_IS_CANCELED = 112;
|
||||
|
||||
CONFIG_FILE_NOT_FOUND = 200;
|
||||
CONFIG_FILE_INVALID = 201;
|
||||
|
@ -6355,6 +6385,445 @@ message Rpc {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A Membership is a bundle of several "Features"
|
||||
* every user should have one and only one tier
|
||||
* users can not have N tiers (no combining)
|
||||
*/
|
||||
message Membership {
|
||||
/**
|
||||
* Get the current status of the membership
|
||||
* including the tier, status, dates, etc
|
||||
* WARNING: this can be cached by Anytype heart
|
||||
*/
|
||||
message GetStatus {
|
||||
message Request {
|
||||
// pass true to force the cache update
|
||||
// by default this is false
|
||||
bool noCache = 1;
|
||||
}
|
||||
|
||||
message Response {
|
||||
Error error = 1;
|
||||
|
||||
anytype.model.Membership data = 2;
|
||||
|
||||
message Error {
|
||||
Code code = 1;
|
||||
string description = 2;
|
||||
|
||||
enum Code {
|
||||
NULL = 0;
|
||||
UNKNOWN_ERROR = 1;
|
||||
BAD_INPUT = 2;
|
||||
|
||||
NOT_LOGGED_IN = 3;
|
||||
PAYMENT_NODE_ERROR = 4;
|
||||
CACHE_ERROR = 5;
|
||||
|
||||
MEMBERSHIP_NOT_FOUND = 6;
|
||||
MEMBERSHIP_WRONG_STATE = 7;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the requested name is valid for the requested tier
|
||||
* before requesting a payment link and paying
|
||||
*/
|
||||
message IsNameValid {
|
||||
message Request {
|
||||
uint32 requestedTier = 1;
|
||||
|
||||
// full name including .any suffix
|
||||
string requestedAnyName = 2;
|
||||
}
|
||||
|
||||
message Response {
|
||||
Error error = 1;
|
||||
|
||||
message Error {
|
||||
Code code = 1;
|
||||
string description = 2;
|
||||
|
||||
enum Code {
|
||||
NULL = 0;
|
||||
UNKNOWN_ERROR = 1;
|
||||
BAD_INPUT = 2;
|
||||
|
||||
TOO_SHORT = 3;
|
||||
TOO_LONG = 4;
|
||||
HAS_INVALID_CHARS = 5;
|
||||
TIER_FEATURES_NO_NAME = 6;
|
||||
// if everything is fine - "name is already taken" check should be done in the NS
|
||||
// see IsNameAvailable()
|
||||
TIER_NOT_FOUND = 7;
|
||||
|
||||
NOT_LOGGED_IN = 8;
|
||||
PAYMENT_NODE_ERROR = 9;
|
||||
CACHE_ERROR = 10;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate a link to the payment provider
|
||||
* where user can pay for the membership
|
||||
*/
|
||||
message GetPaymentUrl {
|
||||
message Request {
|
||||
uint32 requestedTier = 1;
|
||||
|
||||
anytype.model.Membership.PaymentMethod paymentMethod = 2;
|
||||
|
||||
// if empty - then no name requested
|
||||
// if non-empty - PP node will register that name on behalf of the user
|
||||
string requestedAnyName = 3;
|
||||
}
|
||||
|
||||
message Response {
|
||||
Error error = 1;
|
||||
|
||||
// will feature current billing ID
|
||||
// stripe.com/?client_reference_id=1234
|
||||
string paymentUrl = 2;
|
||||
|
||||
message Error {
|
||||
Code code = 1;
|
||||
string description = 2;
|
||||
|
||||
enum Code {
|
||||
NULL = 0;
|
||||
UNKNOWN_ERROR = 1;
|
||||
BAD_INPUT = 2;
|
||||
|
||||
NOT_LOGGED_IN = 3;
|
||||
PAYMENT_NODE_ERROR = 4;
|
||||
CACHE_ERROR = 5;
|
||||
|
||||
TIER_NOT_FOUND = 6;
|
||||
TIER_INVALID = 7;
|
||||
PAYMENT_METHOD_INVALID = 8;
|
||||
BAD_ANYNAME = 9;
|
||||
MEMBERSHIP_ALREADY_EXISTS = 10;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate a link to the portal where user can:
|
||||
* a) change his billing details
|
||||
* b) see payment info, invoices, etc
|
||||
* c) cancel membership
|
||||
*/
|
||||
message GetPortalLinkUrl {
|
||||
message Request {
|
||||
|
||||
}
|
||||
|
||||
message Response {
|
||||
Error error = 1;
|
||||
|
||||
string portalUrl = 2;
|
||||
|
||||
message Error {
|
||||
Code code = 1;
|
||||
string description = 2;
|
||||
|
||||
enum Code {
|
||||
NULL = 0;
|
||||
UNKNOWN_ERROR = 1;
|
||||
BAD_INPUT = 2;
|
||||
|
||||
NOT_LOGGED_IN = 3;
|
||||
PAYMENT_NODE_ERROR = 4;
|
||||
CACHE_ERROR = 5;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
message Finalize {
|
||||
message Request {
|
||||
// if empty - then no name requested
|
||||
// if non-empty - PP node will register that name on behalf of the user
|
||||
string requestedAnyName = 1;
|
||||
}
|
||||
|
||||
message Response {
|
||||
Error error = 1;
|
||||
|
||||
message Error {
|
||||
Code code = 1;
|
||||
string description = 2;
|
||||
|
||||
enum Code {
|
||||
NULL = 0;
|
||||
UNKNOWN_ERROR = 1;
|
||||
BAD_INPUT = 2;
|
||||
|
||||
NOT_LOGGED_IN = 3;
|
||||
PAYMENT_NODE_ERROR = 4;
|
||||
CACHE_ERROR = 5;
|
||||
|
||||
MEMBERSHIP_NOT_FOUND = 6;
|
||||
MEMBERSHIP_WRONG_STATE = 7;
|
||||
|
||||
BAD_ANYNAME = 8;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Send an e-mail with verification code to the user
|
||||
* can be called multiple times but with some timeout (N seconds) between calls
|
||||
*/
|
||||
message GetVerificationEmail {
|
||||
message Request {
|
||||
string email = 1;
|
||||
|
||||
bool subscribeToNewsletter = 2;
|
||||
}
|
||||
|
||||
message Response {
|
||||
Error error = 1;
|
||||
|
||||
message Error {
|
||||
Code code = 1;
|
||||
string description = 2;
|
||||
|
||||
enum Code {
|
||||
NULL = 0;
|
||||
UNKNOWN_ERROR = 1;
|
||||
BAD_INPUT = 2;
|
||||
|
||||
NOT_LOGGED_IN = 3;
|
||||
PAYMENT_NODE_ERROR = 4;
|
||||
CACHE_ERROR = 5;
|
||||
|
||||
EMAIL_WRONG_FORMAT = 6;
|
||||
EMAIL_ALREADY_VERIFIED = 7;
|
||||
EMAIL_ALREDY_SENT = 8;
|
||||
EMAIL_FAILED_TO_SEND = 9;
|
||||
|
||||
MEMBERSHIP_ALREADY_EXISTS = 10;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify the e-mail address of the user
|
||||
* need a correct code that was sent to the user when calling GetVerificationEmail
|
||||
*/
|
||||
message VerifyEmailCode {
|
||||
message Request {
|
||||
string code = 1;
|
||||
}
|
||||
|
||||
message Response {
|
||||
Error error = 1;
|
||||
|
||||
message Error {
|
||||
Code code = 1;
|
||||
string description = 2;
|
||||
|
||||
enum Code {
|
||||
NULL = 0;
|
||||
UNKNOWN_ERROR = 1;
|
||||
BAD_INPUT = 2;
|
||||
|
||||
NOT_LOGGED_IN = 3;
|
||||
PAYMENT_NODE_ERROR = 4;
|
||||
CACHE_ERROR = 5;
|
||||
|
||||
EMAIL_ALREADY_VERIFIED = 6;
|
||||
CODE_EXPIRED = 7;
|
||||
CODE_WRONG = 8;
|
||||
|
||||
MEMBERSHIP_NOT_FOUND = 9;
|
||||
MEMBERSHIP_ALREADY_ACTIVE = 10;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tiers can change on the backend so if you want to show users the latest data
|
||||
* you can call this method to get the latest tiers
|
||||
*/
|
||||
message Tiers {
|
||||
message Get {
|
||||
message Request {
|
||||
// pass true to force the cache update
|
||||
// by default this is false
|
||||
bool noCache = 1;
|
||||
|
||||
string locale = 2;
|
||||
}
|
||||
|
||||
message Response {
|
||||
Error error = 1;
|
||||
repeated anytype.model.MembershipTierData tiers = 2;
|
||||
|
||||
message Error {
|
||||
Code code = 1;
|
||||
string description = 2;
|
||||
|
||||
enum Code {
|
||||
NULL = 0;
|
||||
UNKNOWN_ERROR = 1;
|
||||
BAD_INPUT = 2;
|
||||
|
||||
NOT_LOGGED_IN = 3;
|
||||
PAYMENT_NODE_ERROR = 4;
|
||||
CACHE_ERROR = 5;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
message NameService {
|
||||
message ResolveName {
|
||||
message Request {
|
||||
// including ".any" suffix
|
||||
string fullName = 1;
|
||||
}
|
||||
|
||||
message Response {
|
||||
Error error = 1;
|
||||
|
||||
bool available = 2;
|
||||
|
||||
// EOA -> SCW -> name
|
||||
// This field is non-empty only if name is "already registered"
|
||||
string ownerScwEthAddress = 3;
|
||||
|
||||
// This field is non-empty only if name is "already registered"
|
||||
string ownerEthAddress = 4;
|
||||
|
||||
// A content hash attached to this name
|
||||
// This field is non-empty only if name is "already registered"
|
||||
string ownerAnyAddress = 5;
|
||||
|
||||
// A SpaceId attached to this name
|
||||
// This field is non-empty only if name is "already registered"
|
||||
string spaceId = 6;
|
||||
|
||||
// A timestamp when this name expires
|
||||
int64 nameExpires = 7;
|
||||
|
||||
message Error {
|
||||
Code code = 1;
|
||||
string description = 2;
|
||||
|
||||
enum Code {
|
||||
NULL = 0;
|
||||
UNKNOWN_ERROR = 1;
|
||||
BAD_INPUT = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
message ResolveAnyId {
|
||||
message Request {
|
||||
string anyId = 1;
|
||||
}
|
||||
|
||||
message Response {
|
||||
Error error = 1;
|
||||
|
||||
bool found = 2;
|
||||
|
||||
// including ".any" suffix
|
||||
string fullName = 3;
|
||||
|
||||
message Error {
|
||||
Code code = 1;
|
||||
string description = 2;
|
||||
|
||||
enum Code {
|
||||
NULL = 0;
|
||||
UNKNOWN_ERROR = 1;
|
||||
BAD_INPUT = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
message ResolveSpaceId {
|
||||
message Request {
|
||||
string spaceId = 1;
|
||||
}
|
||||
|
||||
message Response {
|
||||
Error error = 1;
|
||||
|
||||
bool found = 2;
|
||||
|
||||
// including ".any" suffix
|
||||
string fullName = 3;
|
||||
|
||||
message Error {
|
||||
Code code = 1;
|
||||
string description = 2;
|
||||
|
||||
enum Code {
|
||||
NULL = 0;
|
||||
UNKNOWN_ERROR = 1;
|
||||
BAD_INPUT = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
message UserAccount {
|
||||
message Get {
|
||||
message Request {
|
||||
|
||||
}
|
||||
|
||||
message Response {
|
||||
Error error = 1;
|
||||
|
||||
// this will use ReverseResolve to get current name
|
||||
// user can buy many names, but
|
||||
// only 1 name can be set as "current": ETH address <-> name
|
||||
string anyNameAttached = 2;
|
||||
|
||||
// Number of names that the user can reserve
|
||||
uint64 namesCountLeft = 3;
|
||||
|
||||
// Number of operations: update name, add new data, etc
|
||||
uint64 operationsCountLeft = 4;
|
||||
|
||||
// TODO: all operations list
|
||||
|
||||
message Error {
|
||||
Code code = 1;
|
||||
string description = 2;
|
||||
|
||||
enum Code {
|
||||
NULL = 0;
|
||||
UNKNOWN_ERROR = 1;
|
||||
BAD_INPUT = 2;
|
||||
NOT_LOGGED_IN = 3;
|
||||
BAD_NAME_RESOLVE = 4;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
message Broadcast {
|
||||
message PayloadEvent {
|
||||
message Request {
|
||||
|
@ -6380,6 +6849,8 @@ message Rpc {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
message Empty {
|
||||
|
||||
}
|
||||
|
|
|
@ -100,6 +100,8 @@ message Event {
|
|||
Notification.Update notificationUpdate = 115;
|
||||
|
||||
Payload.Broadcast payloadBroadcast = 116;
|
||||
|
||||
Membership.Update membershipUpdate = 117;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1034,6 +1036,12 @@ message Event {
|
|||
}
|
||||
}
|
||||
|
||||
message Membership {
|
||||
message Update {
|
||||
anytype.model.Membership data = 1;
|
||||
}
|
||||
}
|
||||
|
||||
message Notification {
|
||||
message Send {
|
||||
anytype.model.Notification notification = 1;
|
||||
|
|
|
@ -985,6 +985,7 @@ message Notification {
|
|||
model.Import.Type importType = 3;
|
||||
string spaceId = 4;
|
||||
string name = 5;
|
||||
string spaceName = 6;
|
||||
}
|
||||
|
||||
message Export {
|
||||
|
@ -1002,6 +1003,7 @@ message Notification {
|
|||
model.Import.ErrorCode errorCode = 2;
|
||||
string spaceId = 3;
|
||||
string name = 4;
|
||||
string spaceName = 5;
|
||||
}
|
||||
|
||||
message RequestToJoin {
|
||||
|
@ -1115,6 +1117,7 @@ message IdentityProfile {
|
|||
string iconCid = 3;
|
||||
repeated FileEncryptionKey iconEncryptionKeys = 4;
|
||||
string description = 5;
|
||||
string globalName = 6;
|
||||
}
|
||||
|
||||
message FileInfo {
|
||||
|
@ -1153,3 +1156,115 @@ message ManifestInfo {
|
|||
repeated string categories = 11;
|
||||
string language = 12;
|
||||
}
|
||||
|
||||
message Membership {
|
||||
enum Tier {
|
||||
TierNewUser = 0;
|
||||
// "free" tier
|
||||
TierExplorer = 1;
|
||||
// this tier can be used just for testing in debug mode
|
||||
// it will still create an active subscription, but with NO features
|
||||
TierBuilder1WeekTEST = 2;
|
||||
// this tier can be used just for testing in debug mode
|
||||
// it will still create an active subscription, but with NO features
|
||||
TierCoCreator1WeekTEST = 3;
|
||||
TierBuilder = 4;
|
||||
TierCoCreator = 5;
|
||||
}
|
||||
|
||||
enum Status {
|
||||
StatusUnknown = 0;
|
||||
// please wait a bit more
|
||||
StatusPending = 1;
|
||||
StatusActive = 2;
|
||||
// in some cases we need to finalize the process:
|
||||
// - if user has bought membership directly without first calling
|
||||
// the BuySubscription method
|
||||
//
|
||||
// in this case please call Finalize to finish the process
|
||||
StatusPendingRequiresFinalization = 3;
|
||||
}
|
||||
|
||||
enum PaymentMethod {
|
||||
MethodCard = 0; // Stripe
|
||||
MethodCrypto = 1;
|
||||
MethodApplePay = 2;
|
||||
MethodGooglePay = 3;
|
||||
MethodAppleInapp = 4;
|
||||
MethodGoogleInapp = 5;
|
||||
}
|
||||
|
||||
// it was Tier before, changed to int32 to allow dynamic values
|
||||
uint32 tier = 1;
|
||||
Status status = 2;
|
||||
uint64 dateStarted = 3;
|
||||
uint64 dateEnds = 4;
|
||||
bool isAutoRenew = 5;
|
||||
PaymentMethod paymentMethod = 6;
|
||||
// can be empty if user did not ask for any name
|
||||
string requestedAnyName = 7;
|
||||
// if the email was verified by the user or set during the checkout - it will be here
|
||||
string userEmail = 8;
|
||||
bool subscribeToNewsletter = 9;
|
||||
}
|
||||
|
||||
message MembershipTierData {
|
||||
enum PeriodType {
|
||||
PeriodTypeUnknown = 0;
|
||||
PeriodTypeUnlimited = 1;
|
||||
PeriodTypeDays = 2;
|
||||
PeriodTypeWeeks = 3;
|
||||
PeriodTypeMonths = 4;
|
||||
PeriodTypeYears = 5;
|
||||
}
|
||||
|
||||
enum FeatureId {
|
||||
Unknown = 0;
|
||||
StorageGBs = 1;
|
||||
Invites = 2;
|
||||
SpaceWriters = 3;
|
||||
SpaceReaders = 4;
|
||||
SharedSpaces = 5;
|
||||
}
|
||||
|
||||
message Feature {
|
||||
FeatureId featureId = 1;
|
||||
|
||||
// usually feature has uint value
|
||||
// like "storage" - 120
|
||||
uint32 valueUint = 2;
|
||||
|
||||
// in case feature will have string value
|
||||
string valueStr = 3;
|
||||
}
|
||||
|
||||
// this is a unique ID of the tier
|
||||
// you should hardcode this in your app and provide icon, graphics, etc for each tier
|
||||
// (even for old/historical/inactive/hidden tiers)
|
||||
uint32 id = 1;
|
||||
// localazied name of the tier
|
||||
string name = 2;
|
||||
// just a short technical description
|
||||
// you don't have to use it, you can use your own UI-friendly texts
|
||||
string description = 3;
|
||||
// can you buy it (ON ALL PLATFORMS, without clarification)?
|
||||
bool isActive = 4;
|
||||
// is this tier for debugging only?
|
||||
bool isTest = 5;
|
||||
// hidden tiers are only visible once user got them
|
||||
bool isHiddenTier = 6;
|
||||
// how long is the period of the subscription
|
||||
PeriodType periodType = 7;
|
||||
// i.e. "5 days" or "3 years"
|
||||
uint32 periodValue = 8;
|
||||
// this one is a price we use ONLY on Stripe platform
|
||||
uint32 priceStripeUsdCents = 9;
|
||||
// number of ANY NS names that this tier includes
|
||||
// (not counted as a "feature" and not in the features list)
|
||||
uint32 anyNamesCountIncluded = 10;
|
||||
// somename.any - len of 8
|
||||
uint32 anyNameMinLength = 11;
|
||||
// each tier has a set of features
|
||||
// the key is FeatureId
|
||||
repeated Feature features = 12;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue