Browse Source

constantly recheck on home screen if not registered

Trent Larson 7 months ago
parent
commit
751c066bd0
  1. 44
      src/libs/endorserServer.ts
  2. 40
      src/views/AccountViewView.vue
  3. 29
      src/views/HomeView.vue

44
src/libs/endorserServer.ts

@ -1,9 +1,15 @@
import { Axios, AxiosResponse, RawAxiosRequestHeaders } from "axios";
import {
Axios,
AxiosRequestConfig,
AxiosResponse,
RawAxiosRequestHeaders,
} from "axios";
import * as didJwt from "did-jwt";
import { LRUCache } from "lru-cache";
import * as R from "ramda";
import { IIdentifier } from "@veramo/core";
import { DEFAULT_IMAGE_API_SERVER } from "@/constants/app";
import { Contact } from "@/db/tables/contacts";
import { accessToken, SimpleSigner } from "@/libs/crypto";
import { NonsensitiveDexie } from "@/db/index";
@ -1007,3 +1013,39 @@ export async function setVisibilityUtil(
return { error: "Check connectivity and try again." };
}
}
/**
* Fetches rate limits from the Endorser server.
*
* @param apiServer endorser server URL string
* @param axios Axios instance
* @param {IIdentifier} identity - The identity object to check rate limits for.
* @returns {Promise<AxiosResponse>} The Axios response object.
*/
export async function fetchEndorserRateLimits(
apiServer: string,
axios: Axios,
identity: IIdentifier,
) {
const url = `${apiServer}/api/report/rateLimits`;
const headers = await getHeaders(identity);
return await axios.get(url, { headers } as AxiosRequestConfig);
}
/**
* Fetches rate limits from the image server.
*
* @param apiServer image server URL string
* @param axios Axios instance
* @param {IIdentifier} identity - The identity object to check rate limits for.
* @returns {Promise<AxiosResponse>} The Axios response object.
*/
export async function fetchImageRateLimits(
apiServer: string,
axios: Axios,
identity: IIdentifier,
) {
const url = DEFAULT_IMAGE_API_SERVER + "/image-limits";
const headers = await getHeaders(identity);
return await axios.get(url, { headers } as AxiosRequestConfig);
}

40
src/views/AccountViewView.vue

@ -612,7 +612,7 @@
</template>
<script lang="ts">
import { AxiosError, AxiosRequestConfig } from "axios";
import { AxiosError } from "axios";
import Dexie from "dexie";
import "dexie-export-import";
import { ImportProgress } from "dexie-export-import/dist/import";
@ -637,6 +637,8 @@ import {
ErrorResponse,
EndorserRateLimits,
ImageRateLimits,
fetchEndorserRateLimits,
fetchImageRateLimits,
} from "@/libs/endorserServer";
import { Buffer } from "buffer/";
import EntityIcon from "@/components/EntityIcon.vue";
@ -1202,7 +1204,11 @@ export default class AccountViewView extends Vue {
this.limitsMessage = "";
try {
const resp = await this.fetchEndorserRateLimits(identity);
const resp = await fetchEndorserRateLimits(
this.apiServer,
this.axios,
identity,
);
if (resp.status === 200) {
this.endorserLimits = resp.data;
if (!this.isRegistered) {
@ -1226,7 +1232,11 @@ export default class AccountViewView extends Vue {
);
}
}
const imageResp = await this.fetchImageRateLimits(identity);
const imageResp = await fetchImageRateLimits(
this.apiServer,
this.axios,
identity,
);
if (imageResp.status === 200) {
this.imageLimits = imageResp.data;
}
@ -1249,30 +1259,6 @@ export default class AccountViewView extends Vue {
this.loadingLimits = false;
}
/**
* Fetches rate limits from the Endorser server.
*
* @param {IIdentifier} identity - The identity object to check rate limits for.
* @returns {Promise<AxiosResponse>} The Axios response object.
*/
private async fetchEndorserRateLimits(identity: IIdentifier) {
const url = `${this.apiServer}/api/report/rateLimits`;
const headers = await this.getHeaders(identity);
return await this.axios.get(url, { headers } as AxiosRequestConfig);
}
/**
* Fetches rate limits from the image server.
*
* @param {IIdentifier} identity - The identity object to check rate limits for.
* @returns {Promise<AxiosResponse>} The Axios response object.
*/
private async fetchImageRateLimits(identity: IIdentifier) {
const url = DEFAULT_IMAGE_API_SERVER + "/image-limits";
const headers = await this.getHeaders(identity);
return await this.axios.get(url, { headers } as AxiosRequestConfig);
}
/**
* Handles errors that occur while fetching rate limits.
*

29
src/views/HomeView.vue

@ -300,6 +300,7 @@
import { UAParser } from "ua-parser-js";
import { IIdentifier } from "@veramo/core";
import { Component, Vue } from "vue-facing-decorator";
import { Router } from "vue-router";
import EntityIcon from "@/components/EntityIcon.vue";
import GiftedDialog from "@/components/GiftedDialog.vue";
@ -323,6 +324,7 @@ import {
contactForDid,
containsNonHiddenDid,
didInfoForContact,
fetchEndorserRateLimits,
getPlanFromCache,
GiverReceiverInputInfo,
GiveSummaryRecord,
@ -378,7 +380,7 @@ export default class HomeView extends Vue {
showShortcutBvc = false;
userAgentInfo = new UAParser(); // see https://docs.uaparser.js.org/v2/api/ua-parser-js/get-os.html
public async getIdentity(activeDid: string) {
public async getIdentity(activeDid: string): Promise<IIdentifier | null> {
await accountsDB.open();
const account = (await accountsDB.accounts
.where("did")
@ -424,8 +426,29 @@ export default class HomeView extends Vue {
this.isCreatingIdentifier = false;
}
// this returns a Promise but we don't need to wait for it
// someone may have have registered after sharing contact info
if (!this.isRegistered && this.activeDid) {
const identity = await this.getIdentity(this.activeDid);
try {
const resp = await fetchEndorserRateLimits(
this.apiServer,
this.axios,
identity as IIdentifier,
);
if (resp.status === 200) {
// we just needed to know that they're registered
await db.open();
db.settings.update(MASTER_SETTINGS_KEY, {
isRegistered: true,
});
this.isRegistered = true;
}
} catch (e) {
// ignore the error... just keep us unregistered
}
}
// this returns a Promise but we don't need to wait for it
await this.updateAllFeed();
// eslint-disable-next-line @typescript-eslint/no-explicit-any
@ -713,7 +736,7 @@ export default class HomeView extends Vue {
const route = {
path: "/claim/" + encodeURIComponent(jwtId),
};
this.$router.push(route);
(this.$router as Router).push(route);
}
displayAmount(code: string, amt: number) {

Loading…
Cancel
Save