mirror of
https://github.com/danbulant/Nertivia-Client
synced 2026-06-20 23:01:17 +00:00
Merge pull request #20 from JasonTheKitten/fork
Allow (optionally) specifying a specific server in configs
This commit is contained in:
commit
4ea4e63aa3
12 changed files with 125 additions and 66 deletions
|
|
@ -1,16 +1,21 @@
|
||||||
import { instance, wrapper } from "./Api";
|
import { instance, wrapper } from "./Api";
|
||||||
|
|
||||||
|
const config = require('../config.js');
|
||||||
|
|
||||||
|
let domain = "";
|
||||||
|
if (config.serverURL) domain = config.serverURL+"/"
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
register(credentials) {
|
register(credentials) {
|
||||||
return wrapper(instance().post("user/register", credentials));
|
return wrapper(instance().post(domain+"user/register", credentials));
|
||||||
},
|
},
|
||||||
login(credentials) {
|
login(credentials) {
|
||||||
return wrapper(instance().post("user/login", credentials));
|
return wrapper(instance().post(domain+"user/login", credentials));
|
||||||
},
|
},
|
||||||
logout() {
|
logout() {
|
||||||
return wrapper(instance().delete("user/logout"));
|
return wrapper(instance().delete(domain+"user/logout"));
|
||||||
},
|
},
|
||||||
user() {
|
user() {
|
||||||
return wrapper(instance().get("user"));
|
return wrapper(instance().get(domain+"user"));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,20 @@
|
||||||
import { instance, wrapper } from "./Api";
|
import { instance, wrapper } from "./Api";
|
||||||
|
|
||||||
|
const config = require('../config.js');
|
||||||
|
|
||||||
|
let domain = "";
|
||||||
|
if (config.serverURL) domain = config.serverURL+"/"
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
post(friend) {
|
post(friend) {
|
||||||
return wrapper(instance().post("/user/relationship", friend));
|
return wrapper(instance().post(domain+"/user/relationship", friend));
|
||||||
},
|
},
|
||||||
put(uniqueID) {
|
put(uniqueID) {
|
||||||
return wrapper(instance().put("/user/relationship", { uniqueID }));
|
return wrapper(instance().put(domain+"/user/relationship", { uniqueID }));
|
||||||
},
|
},
|
||||||
delete(uniqueID) {
|
delete(uniqueID) {
|
||||||
return wrapper(
|
return wrapper(
|
||||||
instance().delete("/user/relationship", {
|
instance().delete(domain+"/user/relationship", {
|
||||||
data: { uniqueID }
|
data: { uniqueID }
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -1,103 +1,108 @@
|
||||||
import { instance, wrapper } from "./Api";
|
import { instance, wrapper } from "./Api";
|
||||||
|
|
||||||
|
const config = require('../config.js');
|
||||||
|
|
||||||
|
let domain = "";
|
||||||
|
if (config.serverURL) domain = config.serverURL+"/"
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
post(data) {
|
post(data) {
|
||||||
return wrapper(instance().post("/servers", data));
|
return wrapper(instance().post(domain+"/servers", data));
|
||||||
},
|
},
|
||||||
getChannels(serverID) {
|
getChannels(serverID) {
|
||||||
return wrapper(instance().get(`/servers/${serverID}/channels`));
|
return wrapper(instance().get(domain+`/servers/${serverID}/channels`));
|
||||||
},
|
},
|
||||||
|
|
||||||
postInvite(serverID) {
|
postInvite(serverID) {
|
||||||
return wrapper(instance().post(`/servers/${serverID}/invite`));
|
return wrapper(instance().post(domain+`/servers/${serverID}/invite`));
|
||||||
},
|
},
|
||||||
getInvites(serverID) {
|
getInvites(serverID) {
|
||||||
return wrapper(instance().get(`/servers/${serverID}/invites`));
|
return wrapper(instance().get(domain+`/servers/${serverID}/invites`));
|
||||||
},
|
},
|
||||||
getInviteDetail(inviteCode) {
|
getInviteDetail(inviteCode) {
|
||||||
return wrapper(instance().get(`/servers/invite/${inviteCode}`));
|
return wrapper(instance().get(domain+`/servers/invite/${inviteCode}`));
|
||||||
},
|
},
|
||||||
joinServer(inviteCode, optionalData) {
|
joinServer(inviteCode, optionalData) {
|
||||||
return wrapper(
|
return wrapper(
|
||||||
instance().post(`/servers/invite/${inviteCode}`, optionalData)
|
instance().post(domain+`/servers/invite/${inviteCode}`, optionalData)
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
joinServerById(server_id, optionalData) {
|
joinServerById(server_id, optionalData) {
|
||||||
return wrapper(
|
return wrapper(
|
||||||
instance().post(`/servers/invite/servers/${server_id}`, optionalData)
|
instance().post(domain+`/servers/invite/servers/${server_id}`, optionalData)
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
leaveServer(serverID) {
|
leaveServer(serverID) {
|
||||||
return wrapper(instance().delete(`/servers/${serverID}`));
|
return wrapper(instance().delete(domain+`/servers/${serverID}`));
|
||||||
},
|
},
|
||||||
|
|
||||||
// Admin commands
|
// Admin commands
|
||||||
updateServer(serverID, data) {
|
updateServer(serverID, data) {
|
||||||
return wrapper(instance().patch(`/servers/${serverID}`, data));
|
return wrapper(instance().patch(domain+`/servers/${serverID}`, data));
|
||||||
},
|
},
|
||||||
createChannel(serverID, name) {
|
createChannel(serverID, name) {
|
||||||
return wrapper(instance().put(`/servers/${serverID}/channels`, { name }));
|
return wrapper(instance().put(domain+`/servers/${serverID}/channels`, { name }));
|
||||||
},
|
},
|
||||||
channelPosition(serverID, channelIDArr) {
|
channelPosition(serverID, channelIDArr) {
|
||||||
return wrapper(
|
return wrapper(
|
||||||
instance().put(`/servers/${serverID}/channels/position`, {
|
instance().put(domain+`/servers/${serverID}/channels/position`, {
|
||||||
channel_position: channelIDArr
|
channel_position: channelIDArr
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
updateChannel(serverID, channelID, data) {
|
updateChannel(serverID, channelID, data) {
|
||||||
return wrapper(
|
return wrapper(
|
||||||
instance().patch(`/servers/${serverID}/channels/${channelID}`, data)
|
instance().patch(domain+`/servers/${serverID}/channels/${channelID}`, data)
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
deleteChannel(serverID, channelID) {
|
deleteChannel(serverID, channelID) {
|
||||||
return wrapper(
|
return wrapper(
|
||||||
instance().delete(`/servers/${serverID}/channels/${channelID}`)
|
instance().delete(domain+`/servers/${serverID}/channels/${channelID}`)
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
kickMember(serverID, uniqueID) {
|
kickMember(serverID, uniqueID) {
|
||||||
return wrapper(
|
return wrapper(
|
||||||
instance().delete(`/servers/${serverID}/members/${uniqueID}`)
|
instance().delete(domain+`/servers/${serverID}/members/${uniqueID}`)
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
banMember(serverID, uniqueID) {
|
banMember(serverID, uniqueID) {
|
||||||
return wrapper(instance().put(`/servers/${serverID}/bans/${uniqueID}`));
|
return wrapper(instance().put(domain+`/servers/${serverID}/bans/${uniqueID}`));
|
||||||
},
|
},
|
||||||
unBanMember(serverID, uniqueID) {
|
unBanMember(serverID, uniqueID) {
|
||||||
return wrapper(instance().delete(`/servers/${serverID}/bans/${uniqueID}`));
|
return wrapper(instance().delete(domain+`/servers/${serverID}/bans/${uniqueID}`));
|
||||||
},
|
},
|
||||||
memberBans(serverID) {
|
memberBans(serverID) {
|
||||||
return wrapper(instance().get(`/servers/${serverID}/bans`));
|
return wrapper(instance().get(domain+`/servers/${serverID}/bans`));
|
||||||
},
|
},
|
||||||
|
|
||||||
// roles
|
// roles
|
||||||
createRole(serverID, data) {
|
createRole(serverID, data) {
|
||||||
return wrapper(instance().post(`/servers/${serverID}/roles`, data));
|
return wrapper(instance().post(domain+`/servers/${serverID}/roles`, data));
|
||||||
},
|
},
|
||||||
// roles
|
// roles
|
||||||
deleteRole(serverID, roleID) {
|
deleteRole(serverID, roleID) {
|
||||||
return wrapper(instance().delete(`/servers/${serverID}/roles/${roleID}`));
|
return wrapper(instance().delete(domain+`/servers/${serverID}/roles/${roleID}`));
|
||||||
},
|
},
|
||||||
// roles
|
// roles
|
||||||
updateRole(serverID, roleID, data) {
|
updateRole(serverID, roleID, data) {
|
||||||
return wrapper(
|
return wrapper(
|
||||||
instance().patch(`/servers/${serverID}/roles/${roleID}`, data)
|
instance().patch(domain+`/servers/${serverID}/roles/${roleID}`, data)
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
updateRolesPosition(serverID, data) {
|
updateRolesPosition(serverID, data) {
|
||||||
return wrapper(instance().patch(`/servers/${serverID}/roles`, data));
|
return wrapper(instance().patch(domain+`/servers/${serverID}/roles`, data));
|
||||||
},
|
},
|
||||||
applyRoleToMember(serverID, roleID, memberID) {
|
applyRoleToMember(serverID, roleID, memberID) {
|
||||||
return wrapper(
|
return wrapper(
|
||||||
instance().patch(
|
instance().patch(
|
||||||
`/servers/${serverID}/members/${memberID}/roles/${roleID}`
|
domain+`/servers/${serverID}/members/${memberID}/roles/${roleID}`
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
removeRoleFromMember(serverID, roleID, memberID) {
|
removeRoleFromMember(serverID, roleID, memberID) {
|
||||||
return wrapper(
|
return wrapper(
|
||||||
instance().delete(
|
instance().delete(
|
||||||
`/servers/${serverID}/members/${memberID}/roles/${roleID}`
|
domain+`/servers/${serverID}/members/${memberID}/roles/${roleID}`
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,24 @@
|
||||||
import { instance, wrapper } from "./Api";
|
import { instance, wrapper } from "./Api";
|
||||||
|
|
||||||
|
const config = require('../config.js');
|
||||||
|
|
||||||
|
let domain = "";
|
||||||
|
if (config.serverURL) domain = config.serverURL+"/"
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
getTheme(id) {
|
getTheme(id) {
|
||||||
return wrapper(instance().get(`themes/${id}`));
|
return wrapper(instance().get(domain+`themes/${id}`));
|
||||||
},
|
},
|
||||||
getThemes() {
|
getThemes() {
|
||||||
return wrapper(instance().get("themes/"));
|
return wrapper(instance().get(domain+"themes/"));
|
||||||
},
|
},
|
||||||
save(data) {
|
save(data) {
|
||||||
return wrapper(instance().post(`themes/`, data));
|
return wrapper(instance().post(domain+`themes/`, data));
|
||||||
},
|
},
|
||||||
update(data, id) {
|
update(data, id) {
|
||||||
return wrapper(instance().patch(`themes/${id}`, data));
|
return wrapper(instance().patch(domain+`themes/${id}`, data));
|
||||||
},
|
},
|
||||||
delete(id) {
|
delete(id) {
|
||||||
return wrapper(instance().delete(`themes/${id}`));
|
return wrapper(instance().delete(domain+`themes/${id}`));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,12 @@
|
||||||
import { instance, wrapper } from "./Api";
|
import { instance, wrapper } from "./Api";
|
||||||
|
|
||||||
|
const config = require('../config.js');
|
||||||
|
|
||||||
|
let domain = "";
|
||||||
|
if (config.serverURL) domain = config.serverURL+"/"
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
post(channelID) {
|
post(channelID) {
|
||||||
return wrapper(instance().post(`messages/${channelID}/typing`));
|
return wrapper(instance().post(domain+`messages/${channelID}/typing`));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,15 @@
|
||||||
import { instance, wrapper } from "./Api";
|
import { instance, wrapper } from "./Api";
|
||||||
|
|
||||||
|
const config = require('../config.js');
|
||||||
|
|
||||||
|
let domain = "";
|
||||||
|
if (config.serverURL) domain = config.serverURL+"/"
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
post(uniqueID) {
|
post(uniqueID) {
|
||||||
return wrapper(instance().post(`channels/${uniqueID}`));
|
return wrapper(instance().post(domain+`channels/${uniqueID}`));
|
||||||
},
|
},
|
||||||
delete(channelID) {
|
delete(channelID) {
|
||||||
return wrapper(instance().delete(`channels/${channelID}`));
|
return wrapper(instance().delete(domain+`channels/${channelID}`));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,20 @@
|
||||||
import { instance, wrapper } from "./Api";
|
import { instance, wrapper } from "./Api";
|
||||||
|
|
||||||
|
const config = require('../config.js');
|
||||||
|
|
||||||
|
let domain = "";
|
||||||
|
if (config.serverURL) domain = config.serverURL+"/"
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
post(data) {
|
post(data) {
|
||||||
return wrapper(instance().post("/settings/emoji", data));
|
return wrapper(instance().post(domain+"/settings/emoji", data));
|
||||||
},
|
},
|
||||||
delete(emojiID) {
|
delete(emojiID) {
|
||||||
return wrapper(instance().delete(`/settings/emoji`, { data: { emojiID } }));
|
return wrapper(instance().delete(domain+`/settings/emoji`, { data: { emojiID } }));
|
||||||
},
|
},
|
||||||
put(data) {
|
put(data) {
|
||||||
return wrapper(
|
return wrapper(
|
||||||
instance().put(`/settings/emoji`, {
|
instance().put(domain+`/settings/emoji`, {
|
||||||
emojiID: data.emojiID,
|
emojiID: data.emojiID,
|
||||||
name: data.name
|
name: data.name
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -1,37 +1,42 @@
|
||||||
import { instance, wrapper } from "./Api";
|
import { instance, wrapper } from "./Api";
|
||||||
|
|
||||||
|
const config = require('../config.js');
|
||||||
|
|
||||||
|
let domain = "";
|
||||||
|
if (config.serverURL) domain = config.serverURL+"/"
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
// servers
|
// servers
|
||||||
getServersList(params) {
|
getServersList(params) {
|
||||||
return wrapper(instance().get(`explore/servers${params || ""}`));
|
return wrapper(instance().get(domain+`explore/servers${params || ""}`));
|
||||||
},
|
},
|
||||||
getServer(server_id) {
|
getServer(server_id) {
|
||||||
return wrapper(instance().get(`explore/servers/${server_id}`));
|
return wrapper(instance().get(domain+`explore/servers/${server_id}`));
|
||||||
},
|
},
|
||||||
deleteServer(server_id) {
|
deleteServer(server_id) {
|
||||||
return wrapper(instance().delete(`explore/servers/${server_id}`));
|
return wrapper(instance().delete(domain+`explore/servers/${server_id}`));
|
||||||
},
|
},
|
||||||
updateServer(server_id, data) {
|
updateServer(server_id, data) {
|
||||||
return wrapper(instance().patch(`explore/servers/${server_id}`, data));
|
return wrapper(instance().patch(domain+`explore/servers/${server_id}`, data));
|
||||||
},
|
},
|
||||||
addServersList(data) {
|
addServersList(data) {
|
||||||
return wrapper(instance().post(`explore/servers`, data));
|
return wrapper(instance().post(domain+`explore/servers`, data));
|
||||||
},
|
},
|
||||||
|
|
||||||
// themes
|
// themes
|
||||||
getThemes() {
|
getThemes() {
|
||||||
return wrapper(instance().get(`explore/themes`));
|
return wrapper(instance().get(domain+`explore/themes`));
|
||||||
},
|
},
|
||||||
getTheme(id) {
|
getTheme(id) {
|
||||||
return wrapper(instance().get(`explore/themes/${id}`));
|
return wrapper(instance().get(domain+`explore/themes/${id}`));
|
||||||
},
|
},
|
||||||
addTheme(id, data) {
|
addTheme(id, data) {
|
||||||
return wrapper(instance().post(`explore/themes/${id}`, data));
|
return wrapper(instance().post(domain+`explore/themes/${id}`, data));
|
||||||
},
|
},
|
||||||
updateTheme(id, data) {
|
updateTheme(id, data) {
|
||||||
return wrapper(instance().patch(`explore/themes/${id}`, data));
|
return wrapper(instance().patch(domain+`explore/themes/${id}`, data));
|
||||||
},
|
},
|
||||||
applyTheme(id) {
|
applyTheme(id) {
|
||||||
return wrapper(instance().get(`explore/themes/${id}/apply`));
|
return wrapper(instance().get(domain+`explore/themes/${id}/apply`));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,16 @@
|
||||||
import { instance, wrapper } from "./Api";
|
import { instance, wrapper } from "./Api";
|
||||||
|
|
||||||
|
const config = require('../config.js');
|
||||||
|
|
||||||
|
let domain = "";
|
||||||
|
if (config.serverURL) domain = config.serverURL+"/"
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
// TODO: add ?continue=id
|
// TODO: add ?continue=id
|
||||||
get(channelID, continueMessageID, beforeMessageID) {
|
get(channelID, continueMessageID, beforeMessageID) {
|
||||||
return wrapper(
|
return wrapper(
|
||||||
instance().get(
|
instance().get(
|
||||||
`messages/channels/${channelID}${
|
domain+`messages/channels/${channelID}${
|
||||||
continueMessageID
|
continueMessageID
|
||||||
? "?continue=" + continueMessageID
|
? "?continue=" + continueMessageID
|
||||||
: beforeMessageID
|
: beforeMessageID
|
||||||
|
|
@ -16,12 +22,12 @@ export default {
|
||||||
},
|
},
|
||||||
delete(messageID, channelID) {
|
delete(messageID, channelID) {
|
||||||
return wrapper(
|
return wrapper(
|
||||||
instance().delete(`messages/${messageID}/channels/${channelID}`)
|
instance().delete(domain+`messages/${messageID}/channels/${channelID}`)
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
update(messageID, channelID, data) {
|
update(messageID, channelID, data) {
|
||||||
return wrapper(
|
return wrapper(
|
||||||
instance().patch(`messages/${messageID}/channels/${channelID}`, data)
|
instance().patch(domain+`messages/${messageID}/channels/${channelID}`, data)
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
@ -43,6 +49,6 @@ export default {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
return wrapper(instance().post(url, data, config));
|
return wrapper(instance().post(domain+url, data, config));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,25 +1,30 @@
|
||||||
import { instance, wrapper } from "./Api";
|
import { instance, wrapper } from "./Api";
|
||||||
|
|
||||||
|
const config = require('../config.js');
|
||||||
|
|
||||||
|
let domain = "";
|
||||||
|
if (config.serverURL) domain = config.serverURL+"/"
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
setStatus(status) {
|
setStatus(status) {
|
||||||
return wrapper(instance().post("/settings/status", { status }));
|
return wrapper(instance().post(domain+"/settings/status", { status }));
|
||||||
},
|
},
|
||||||
GDriveURL() {
|
GDriveURL() {
|
||||||
return wrapper(instance().get("/settings/drive/url"));
|
return wrapper(instance().get(domain+"/settings/drive/url"));
|
||||||
},
|
},
|
||||||
GDriveAuth(code, token) {
|
GDriveAuth(code, token) {
|
||||||
return wrapper(instance().post("/settings/drive/auth", { code, token }));
|
return wrapper(instance().post(domain+"/settings/drive/auth", { code, token }));
|
||||||
},
|
},
|
||||||
setApperance(apperance, boolean) {
|
setApperance(apperance, boolean) {
|
||||||
return wrapper(
|
return wrapper(
|
||||||
instance().put("/settings/apperance", {
|
instance().put(domain+"/settings/apperance", {
|
||||||
[apperance]: boolean
|
[apperance]: boolean
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
setServerPositions(ServerIDArr) {
|
setServerPositions(ServerIDArr) {
|
||||||
return wrapper(
|
return wrapper(
|
||||||
instance().put("/settings/server_position", {
|
instance().put(domain+"/settings/server_position", {
|
||||||
server_position: ServerIDArr
|
server_position: ServerIDArr
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,24 @@
|
||||||
import { instance, wrapper } from "./Api";
|
import { instance, wrapper } from "./Api";
|
||||||
|
|
||||||
|
const config = require('../config.js');
|
||||||
|
|
||||||
|
let domain = "";
|
||||||
|
if (config.serverURL) domain = config.serverURL+"/"
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
get(uniqueID) {
|
get(uniqueID) {
|
||||||
return wrapper(instance().get(`user/${uniqueID}`));
|
return wrapper(instance().get(domain+`user/${uniqueID}`));
|
||||||
},
|
},
|
||||||
update(data) {
|
update(data) {
|
||||||
return wrapper(instance().patch(`user`, data));
|
return wrapper(instance().patch(domain+`user`, data));
|
||||||
},
|
},
|
||||||
getSurvey() {
|
getSurvey() {
|
||||||
return wrapper(instance().get("/user/survey"));
|
return wrapper(instance().get(domain+"/user/survey"));
|
||||||
},
|
},
|
||||||
setSurvey(data) {
|
setSurvey(data) {
|
||||||
return wrapper(instance().put("/user/survey", data));
|
return wrapper(instance().put(domain+"/user/survey", data));
|
||||||
},
|
},
|
||||||
skipSurvey() {
|
skipSurvey() {
|
||||||
return wrapper(instance().delete("/user/survey/skip"));
|
return wrapper(instance().delete(domain+"/user/survey/skip"));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,6 @@
|
||||||
module.exports = {
|
module.exports = {
|
||||||
productionSourceMap: false
|
productionSourceMap: false,
|
||||||
|
devServer: {
|
||||||
|
disableHostCheck: true
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue