diff --git a/project.yaml b/project.yaml
index addf166..64601fa 100644
--- a/project.yaml
+++ b/project.yaml
@@ -7,7 +7,6 @@
- contacts v1 :
- .1 remove 'copy' until it works
- - .5 switch to prod server
- .5 Add page to show seed.
- 01 Provide a way to import the non-sensitive data.
- 01 Provide way to share your contact info.
diff --git a/src/constants/app.ts b/src/constants/app.ts
index 60be120..94e0d5c 100644
--- a/src/constants/app.ts
+++ b/src/constants/app.ts
@@ -2,8 +2,11 @@
* Generic strings that could be used throughout the app.
*/
export enum AppString {
- APP_NAME = "KickStart with Time",
- VERSION = "0.1",
- DEFAULT_ENDORSER_API_SERVER = "https://test.endorser.ch:8000",
- //DEFAULT_ENDORSER_API_SERVER = "http://localhost:3000",
+ APP_NAME = "Kick-Start with Time",
+
+ PROD_ENDORSER_API_SERVER = "https://endorser.ch:3000",
+ TEST_ENDORSER_API_SERVER = "https://test.endorser.ch:8000",
+ LOCAL_ENDORSER_API_SERVER = "http://localhost:3000",
+
+ DEFAULT_ENDORSER_API_SERVER = TEST_ENDORSER_API_SERVER,
}
diff --git a/src/db/index.ts b/src/db/index.ts
index 6806b60..bcb3806 100644
--- a/src/db/index.ts
+++ b/src/db/index.ts
@@ -7,6 +7,7 @@ import {
Settings,
SettingsSchema,
} from "./tables/settings";
+import { AppString } from "@/constants/app";
// a separate DB because the seed is super-sensitive data
type SensitiveTables = {
@@ -57,5 +58,8 @@ db.version(1).stores(NonsensitiveSchemas);
// initialize, a la https://dexie.org/docs/Tutorial/Design#the-populate-event
db.on("populate", function () {
// ensure there's an initial entry for settings
- db.settings.add({ id: MASTER_SETTINGS_KEY });
+ db.settings.add({
+ id: MASTER_SETTINGS_KEY,
+ apiServer: AppString.DEFAULT_ENDORSER_API_SERVER,
+ });
});
diff --git a/src/db/tables/settings.ts b/src/db/tables/settings.ts
index a2233ec..a7671c2 100644
--- a/src/db/tables/settings.ts
+++ b/src/db/tables/settings.ts
@@ -2,6 +2,7 @@
export type Settings = {
id: number; // there's only one entry: MASTER_SETTINGS_KEY
activeDid?: string;
+ apiServer?: string;
firstName?: string;
lastName?: string;
showContactGivesInline?: boolean;
diff --git a/src/main.ts b/src/main.ts
index cdb751d..c3bec57 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -21,6 +21,7 @@ import {
faEye,
faEyeSlash,
faFileLines,
+ faFloppyDisk,
faFolderOpen,
faHand,
faHouseChimney,
@@ -53,6 +54,7 @@ library.add(
faEye,
faEyeSlash,
faFileLines,
+ faFloppyDisk,
faFolderOpen,
faHand,
faHouseChimney,
diff --git a/src/test/index.ts b/src/test/index.ts
index 2403a9f..4f622b3 100644
--- a/src/test/index.ts
+++ b/src/test/index.ts
@@ -49,7 +49,8 @@ export async function testServerRegisterUser() {
// Make the xhr request payload
const payload = JSON.stringify({ jwtEncoded: vcJwt });
- const endorserApiServer = AppString.DEFAULT_ENDORSER_API_SERVER;
+ const endorserApiServer =
+ settings?.apiServer || AppString.TEST_ENDORSER_API_SERVER;
const url = endorserApiServer + "/api/claim";
const headers = {
"Content-Type": "application/json",
diff --git a/src/views/AccountViewView.vue b/src/views/AccountViewView.vue
index 9a9f87e..7a387a8 100644
--- a/src/views/AccountViewView.vue
+++ b/src/views/AccountViewView.vue
@@ -248,6 +248,40 @@
+
+ Claim Server
+
+
+
+
+
+
+
Switch Account
@@ -302,7 +336,11 @@ interface RateLimits {
@Component
export default class AccountViewView extends Vue {
+ Constants = AppString;
+
activeDid = "";
+ apiServer = "";
+ apiServerInput = "";
derivationPath = "";
firstName = "";
lastName = "";
@@ -345,6 +383,8 @@ export default class AccountViewView extends Vue {
await db.open();
const settings = await db.settings.get(MASTER_SETTINGS_KEY);
this.activeDid = settings?.activeDid || "";
+ this.apiServer = settings?.apiServer || "";
+ this.apiServerInput = settings?.apiServer || "";
this.firstName = settings?.firstName || "";
this.lastName = settings?.lastName || "";
this.showContactGives = !!settings?.showContactGivesInline;
@@ -433,8 +473,7 @@ export default class AccountViewView extends Vue {
}
async checkLimits() {
- const endorserApiServer = AppString.DEFAULT_ENDORSER_API_SERVER;
- const url = endorserApiServer + "/api/report/rateLimits";
+ const url = this.apiServer + "/api/report/rateLimits";
await accountsDB.open();
const accounts = await accountsDB.accounts.toArray();
const account = R.find((acc) => acc.did === this.activeDid, accounts);
@@ -491,6 +530,18 @@ export default class AccountViewView extends Vue {
};
}
+ async onClickSaveApiServer() {
+ await db.open();
+ db.settings.update(MASTER_SETTINGS_KEY, {
+ apiServer: this.apiServerInput,
+ });
+ this.apiServer = this.apiServerInput;
+ }
+
+ setApiServerInput(value) {
+ this.apiServerInput = value;
+ }
+
alertMessage = "";
alertTitle = "";
isAlertVisible = false;
diff --git a/src/views/ContactAmountsView.vue b/src/views/ContactAmountsView.vue
index e422c18..18a5df9 100644
--- a/src/views/ContactAmountsView.vue
+++ b/src/views/ContactAmountsView.vue
@@ -144,6 +144,7 @@ import { AxiosError } from "axios";
@Options({})
export default class ContactsView extends Vue {
activeDid = "";
+ apiServer = "";
contact: Contact | null = null;
giveRecords: Array = [];
@@ -155,6 +156,7 @@ export default class ContactsView extends Vue {
const settings = await db.settings.get(MASTER_SETTINGS_KEY);
this.activeDid = settings?.activeDid || "";
+ this.apiServer = settings?.apiServer || "";
if (this.activeDid && this.contact) {
this.loadGives(this.activeDid, this.contact);
@@ -168,14 +170,12 @@ export default class ContactsView extends Vue {
const account = R.find((acc) => acc.did === activeDid, accounts);
const identity = JSON.parse(account?.identity || "undefined");
- const endorserApiServer = AppString.DEFAULT_ENDORSER_API_SERVER;
-
// load all the time I have given to them
try {
let result = [];
const url =
- endorserApiServer +
+ this.apiServer +
"/api/v2/report/gives?agentDid=" +
encodeURIComponent(identity.did) +
"&recipientDid=" +
@@ -201,7 +201,7 @@ export default class ContactsView extends Vue {
}
const url2 =
- endorserApiServer +
+ this.apiServer +
"/api/v2/report/gives?agentDid=" +
encodeURIComponent(contact.did) +
"&recipientDid=" +
@@ -282,8 +282,7 @@ export default class ContactsView extends Vue {
// Make the xhr request payload
const payload = JSON.stringify({ jwtEncoded: vcJwt });
- const endorserApiServer = AppString.DEFAULT_ENDORSER_API_SERVER;
- const url = endorserApiServer + "/api/v2/claim";
+ const url = this.apiServer + "/api/v2/claim";
const token = await accessToken(identity);
const headers = {
"Content-Type": "application/json",
diff --git a/src/views/ContactsView.vue b/src/views/ContactsView.vue
index 508c598..c92e7d9 100644
--- a/src/views/ContactsView.vue
+++ b/src/views/ContactsView.vue
@@ -271,6 +271,7 @@ const Buffer = require("buffer/").Buffer;
})
export default class ContactsView extends Vue {
activeDid = "";
+ apiServer = "";
contacts: Array = [];
contactInput = "";
// { "did:...": concatenated-descriptions } entry for each contact
@@ -296,6 +297,7 @@ export default class ContactsView extends Vue {
await db.open();
const settings = await db.settings.get(MASTER_SETTINGS_KEY);
this.activeDid = settings?.activeDid || "";
+ this.apiServer = settings?.apiServer || "";
this.showGiveNumbers = !!settings?.showContactGivesInline;
if (this.showGiveNumbers) {
@@ -321,12 +323,10 @@ export default class ContactsView extends Vue {
return;
}
- const endorserApiServer = AppString.DEFAULT_ENDORSER_API_SERVER;
-
// load all the time I have given
try {
const url =
- endorserApiServer +
+ this.apiServer +
"/api/v2/report/gives?agentDid=" +
encodeURIComponent(identity.did);
const token = await accessToken(identity);
@@ -335,7 +335,7 @@ export default class ContactsView extends Vue {
Authorization: "Bearer " + token,
};
const resp = await this.axios.get(url, { headers });
- console.log("All gifts you've given:", resp.data);
+ //console.log("All gifts you've given:", resp.data);
if (resp.status === 200) {
const contactDescriptions: Record = {};
const contactConfirmed: Record = {};
@@ -381,7 +381,7 @@ export default class ContactsView extends Vue {
// load all the time I have received
try {
const url =
- endorserApiServer +
+ this.apiServer +
"/api/v2/report/gives?recipientDid=" +
encodeURIComponent(identity.did);
const token = await accessToken(identity);
@@ -390,7 +390,7 @@ export default class ContactsView extends Vue {
Authorization: "Bearer " + token,
};
const resp = await this.axios.get(url, { headers });
- console.log("All gifts you've recieved:", resp.data);
+ //console.log("All gifts you've recieved:", resp.data);
if (resp.status === 200) {
const contactDescriptions: Record = {};
const contactConfirmed: Record = {};
@@ -520,8 +520,7 @@ export default class ContactsView extends Vue {
// Make the xhr request payload
const payload = JSON.stringify({ jwtEncoded: vcJwt });
- const endorserApiServer = AppString.DEFAULT_ENDORSER_API_SERVER;
- const url = endorserApiServer + "/api/v2/claim";
+ const url = this.apiServer + "/api/v2/claim";
const token = await accessToken(identity);
const headers = {
"Content-Type": "application/json",
@@ -561,9 +560,8 @@ export default class ContactsView extends Vue {
}
async setVisibility(contact: Contact, visibility: boolean) {
- const endorserApiServer = AppString.DEFAULT_ENDORSER_API_SERVER;
const url =
- endorserApiServer +
+ this.apiServer +
"/api/report/" +
(visibility ? "canSeeMe" : "cannotSeeMe");
await accountsDB.open();
@@ -601,9 +599,8 @@ export default class ContactsView extends Vue {
}
async checkVisibility(contact: Contact) {
- const endorserApiServer = AppString.DEFAULT_ENDORSER_API_SERVER;
const url =
- endorserApiServer +
+ this.apiServer +
"/api/report/canDidExplicitlySeeMe?did=" +
encodeURIComponent(contact.did);
await accountsDB.open();
@@ -774,8 +771,7 @@ export default class ContactsView extends Vue {
// Make the xhr request payload
const payload = JSON.stringify({ jwtEncoded: vcJwt });
- const endorserApiServer = AppString.DEFAULT_ENDORSER_API_SERVER;
- const url = endorserApiServer + "/api/v2/claim";
+ const url = this.apiServer + "/api/v2/claim";
const token = await accessToken(identity);
const headers = {
"Content-Type": "application/json",
diff --git a/src/views/NewEditProjectView.vue b/src/views/NewEditProjectView.vue
index e2f16cd..9013cab 100644
--- a/src/views/NewEditProjectView.vue
+++ b/src/views/NewEditProjectView.vue
@@ -101,6 +101,7 @@ interface VerifiableCredential {
})
export default class NewEditProjectView extends Vue {
activeDid = "";
+ apiServer = "";
projectName = "";
description = "";
errorMessage = "";
@@ -116,6 +117,7 @@ export default class NewEditProjectView extends Vue {
await db.open();
const settings = await db.settings.get(MASTER_SETTINGS_KEY);
this.activeDid = settings?.activeDid || "";
+ this.apiServer = settings?.apiServer || "";
if (this.projectId) {
await accountsDB.open();
@@ -132,9 +134,8 @@ export default class NewEditProjectView extends Vue {
}
async LoadProject(identity: IIdentifier) {
- const endorserApiServer = AppString.DEFAULT_ENDORSER_API_SERVER;
const url =
- endorserApiServer +
+ this.apiServer +
"/api/claim/byHandle/" +
encodeURIComponent(this.projectId);
const token = await accessToken(identity);
@@ -191,8 +192,7 @@ export default class NewEditProjectView extends Vue {
// Make the xhr request payload
const payload = JSON.stringify({ jwtEncoded: vcJwt });
- const endorserApiServer = AppString.DEFAULT_ENDORSER_API_SERVER;
- const url = endorserApiServer + "/api/v2/claim";
+ const url = this.apiServer + "/api/v2/claim";
const token = await accessToken(identity);
const headers = {
"Content-Type": "application/json",
diff --git a/src/views/ProjectViewView.vue b/src/views/ProjectViewView.vue
index b9dca89..88eaf94 100644
--- a/src/views/ProjectViewView.vue
+++ b/src/views/ProjectViewView.vue
@@ -161,6 +161,7 @@ import { IIdentifier } from "@veramo/core";
components: {},
})
export default class ProjectViewView extends Vue {
+ apiServer = "";
expanded = false;
name = "";
description = "";
@@ -188,9 +189,10 @@ export default class ProjectViewView extends Vue {
}
async LoadProject(identity: IIdentifier) {
- const endorserApiServer = AppString.DEFAULT_ENDORSER_API_SERVER;
- // eslint-disable-next-line prettier/prettier
- const url = endorserApiServer + "/api/claim/byHandle/" + encodeURIComponent(this.projectId);
+ const url =
+ this.apiServer +
+ "/api/claim/byHandle/" +
+ encodeURIComponent(this.projectId);
const token = await accessToken(identity);
const headers = {
"Content-Type": "application/json",
@@ -232,6 +234,7 @@ export default class ProjectViewView extends Vue {
await db.open();
const settings = await db.settings.get(MASTER_SETTINGS_KEY);
const activeDid = settings?.activeDid || "";
+ this.apiServer = settings?.apiServer || "";
await accountsDB.open();
const num_accounts = await accountsDB.accounts.count();
diff --git a/src/views/ProjectsView.vue b/src/views/ProjectsView.vue
index a808725..fd41f51 100644
--- a/src/views/ProjectsView.vue
+++ b/src/views/ProjectsView.vue
@@ -114,6 +114,7 @@ import { IIdentifier } from "@veramo/core";
components: {},
})
export default class ProjectsView extends Vue {
+ apiServer = "";
projects: { handleId: string; name: string; description: string }[] = [];
onClickLoadProject(id: string) {
@@ -127,8 +128,7 @@ export default class ProjectsView extends Vue {
}
async LoadProjects(identity: IIdentifier) {
- const endorserApiServer = AppString.DEFAULT_ENDORSER_API_SERVER;
- const url = endorserApiServer + "/api/v2/report/plansByIssuer";
+ const url = this.apiServer + "/api/v2/report/plansByIssuer";
const token = await accessToken(identity);
const headers = {
"Content-Type": "application/json",
@@ -161,6 +161,7 @@ export default class ProjectsView extends Vue {
await db.open();
const settings = await db.settings.get(MASTER_SETTINGS_KEY);
const activeDid = settings?.activeDid || "";
+ this.apiServer = settings?.apiServer || "";
await accountsDB.open();
const num_accounts = await accountsDB.accounts.count();