Friendiiverse/App/ApiTransform.js

170 lines
3.6 KiB
JavaScript

/*
var TransSchemas = {
Mastodon: {
Account: {
"__": "Author",
"url": "Url",
"avatar": "Picture",
"header": "Banner",
},
Instance: {
"thumbnail": "Banner",
},
Status: {
"__": "Note",
"account": {"__": "Account"},
"content": "Content",
"created_at": "Time",
"url": "Url",
},
},
};
*/
var ApiSchema = {
__All__: {
//ServerId: {
// __All__: "id",
//},
// NOTE: objects that embed cross-server data (e.g. a renote), might get this value assigned wrong for our needs (???)
ServerSoftware: {
__All__: {__EvalSet__: "TypeOld"},
},
},
Note: {
Content: {
Mastodon: "content",
Misskey: "text",
},
Profile: {
__: "Profile",
Mastodon: "account",
Misskey: "user",
},
Quoting: {
__: "Note",
Mastodon: "reblog",
Misskey: "renote",
},
Time: {
Mastodon: "created_at",
Misskey: "createdAt",
},
Url: {
__All__: {__OldOr__: ["url", "uri"]},
},
},
Profile: {
Avatar: {}, // would "Character" be better?
Banner: {
Mastodon: {__OldOr__: ["header", "thumbnail"]},
Misskey: "bannerUrl",
},
Description: {
Mastodon: {__OldOr__: ["note", "description"]},
Misskey: "description",
},
Icon: {
Mastodon: "avatar",
Misskey: {__OldOr__: ["avatarUrl", "iconUrl"]},
},
Name: {
Mastodon: {__OldOr__: ["display_name", "title"]},
Misskey: "name",
},
//ServerUsername: {
// __All__: "username",
//},
Type: { // user, bot, group, channel:[normal, server]
Mastodon: {__EvalSet__: `
if (TreeOld.bot) 'Bot';
else
if (TreeOld.group) 'Group';
`},
Misskey: {__EvalSet__: `
if (TreeOld.isBot) 'Bot';
`},
},
Url: {
__All__: {__OldOr__: ["url", "uri"]},
Mastodon: "url",
},
},
};
var ApiEndpoints = {
FetchNotes: {
Mastodon(Profile) {
// Must actually get the id by calling GET api/v1/accounts/lookup?acct=USERNAME, the provided one is glitchy
return `GET api/v1/accounts/${Profile.__TreeOld__.id}/statuses`;
},
Misskey(Profile) {
return {
Method: "POST api/users/notes",
Data: {"userId": Profile.Id},
};
},
},
ServerInfo: {
Mastodon: "GET api/v1/instance",
Misskey: {
Method: "POST api/meta",
Data: {"detail": true},
},
},
ServerTimeline: {
Mastodon: "GET api/v1/timelines/public",
Misskey: "POST api/notes/local-timeline",
},
};
var WebEndpoints = {
Note: {
Misskey(Note) {
//return `SERVER_URL/notes/${Note.ServerId}`;
return `SERVER_URL/notes/${Note.__TreeOld__.id}`;
},
},
Profile: {
Misskey(Profile) {
var Host = Profile.__TreeOld__.host;
//return `SERVER_URL/@${Profile.ServerUsername}`;
return `SERVER_URL/@${Profile.__TreeOld__.username}`;
},
},
};
function ApiTransform(Data, FromSource, DestType) {
var DataFinal = JsonTransformB(Data, ApiSchema, ApiSchema[DestType], FromSource);
LogDebug([Data, DestType, FromSource, DataFinal]);
return DataFinal;
};
function GetWebUrl(Data, Type) {
return (TryStr(Data.Url)
? Data.Url
: WebEndpoints[Type][Data.ServerSoftware](Data)
);
//return Data.Url || WebEndpoints[Type][Data.ServerSoftware](Data);
};
/*
var TransParsers = {
Mastodon: {
Account(Data) {
//return JsonTransformA(Data, TransSchemas.Mastodon.Author, TransSchemas.Mastodon);
return JsonTransformB(Data, ApiSchema, ApiSchema.Profile, 'Mastodon');
},
Instance(Data) {
return JsonTransformA(Data, TransSchemas.Mastodon.Instance, TransSchemas.Mastodon);
},
Status(Data) {
//return JsonTransformA(Data, TransSchemas.Mastodon.Status, TransSchemas.Mastodon);
return JsonTransformB(Data, ApiSchema, ApiSchema.Note, 'Mastodon');
},
},
Misskey: {
},
};
*/