diff --git a/.github/workflows/deploy-staging-services.yaml b/.github/workflows/deploy-staging-services.yaml
index 5dba2ae8..c1bf2437 100644
--- a/.github/workflows/deploy-staging-services.yaml
+++ b/.github/workflows/deploy-staging-services.yaml
@@ -13,6 +13,7 @@ env:
CONTAINER_IMAGE_REPO: desci-repo-server
CONTAINER_IMAGE_MEDIA: nodes-media-server
CONTAINER_IMAGE_ISOLATED: desci-media-isolated
+ CONTAINER_IMAGE_PROXY: "reverse-proxy"
DOCKER_BUILDKIT: 1
jobs:
@@ -294,23 +295,23 @@ jobs:
run: |
# Build and tag the image
docker build \
- -t $CONTAINER_IMAGE-staging:latest \
- -t $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-staging \
- ./$CONTAINER_IMAGE
+ -t $CONTAINER_IMAGE_PROXY-staging:latest \
+ -t $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE_PROXY-staging \
+ ./$CONTAINER_IMAGE_PROXY
- name: Push (STAGING)
run: |
# Push image to AWS ECR
aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com
- docker tag $CONTAINER_IMAGE-staging:latest $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-staging:${{ github.sha }}
- docker tag $CONTAINER_IMAGE-staging:latest $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-staging:latest
- docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-staging:${{ github.sha }}
- docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-staging:latest
+ docker tag $CONTAINER_IMAGE_PROXY-staging:latest $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE_PROXY-staging:${{ github.sha }}
+ docker tag $CONTAINER_IMAGE_PROXY-staging:latest $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE_PROXY-staging:latest
+ docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE_PROXY-staging:${{ github.sha }}
+ docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE_PROXY-staging:latest
- name: Deploy to EKS (STAGING)
run: | # defaults to latest kubectl binary version
- kubectl apply -f $CONTAINER_IMAGE/deployment.yaml
- kubectl set image deployment/reverse-proxy-staging reverse-proxy-staging=$AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-staging:${{ github.sha }} --record
+ kubectl apply -f $CONTAINER_IMAGE_PROXY/deployment.yaml
+ kubectl set image deployment/reverse-proxy-staging reverse-proxy-staging=$AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE_PROXY-staging:${{ github.sha }} --record
- name: Verify EKS Deployment (STAGING)
run: |
diff --git a/desci-server/src/services/orcid.ts b/desci-server/src/services/orcid.ts
index 682eee87..6944393c 100644
--- a/desci-server/src/services/orcid.ts
+++ b/desci-server/src/services/orcid.ts
@@ -85,7 +85,21 @@ class OrcidApiService {
userId: authToken.userId,
},
});
- logger.info({ status: response.status, statusText: response.statusText, data }, 'REFRESH TOKEN RESPONSE');
+ logger.info(
+ {
+ status: response.status,
+ statusText: response.statusText,
+ data: {
+ name: data.name,
+ scope: data.scope,
+ token_type: data.token_type,
+ orcid: data.orcid,
+ refreshToken: !!data.refresh_token,
+ accessToken: !!data.access_token,
+ },
+ },
+ 'REFRESH TOKEN RESPONSE',
+ );
} else {
logger.info(
{ status: response.status, statusText: response.statusText, BODY: await response.json() },
@@ -230,13 +244,15 @@ class OrcidApiService {
const latestVersion = researchObject.versions[researchObject.versions.length - 1];
const publicationDate = new Date(parseInt(latestVersion.time) * 1000).toLocaleDateString().replaceAll('/', '-');
+ const contributorsXml = generateContributors(latestManifest.authors ?? [], orcid);
const nodeRecordPromise = this.putNodeWorkRecord({
orcid,
authToken,
uuid: nodeUuid,
- userId: user.id,
nodeVersion,
publicationDate,
+ contributorsXml,
+ userId: user.id,
manifest: latestManifest,
});
const claimRecordPromises = claims.map((claim) => {
@@ -250,6 +266,7 @@ class OrcidApiService {
publicationDate,
orcid,
authToken,
+ contributorsXml,
uuid: nodeUuid,
userId: user.id,
nodeVersion: claimedVersionNumber,
@@ -283,6 +300,7 @@ class OrcidApiService {
authToken,
orcid,
nodeVersion,
+ contributorsXml,
}: {
manifest: ResearchObjectV1;
publicationDate: string;
@@ -291,6 +309,7 @@ class OrcidApiService {
authToken: string;
orcid: string;
nodeVersion: number;
+ contributorsXml: string;
}) {
try {
const orcidPutCode = await prisma.orcidPutCodes.findUnique({
@@ -298,7 +317,7 @@ class OrcidApiService {
});
const putCode = orcidPutCode?.putcode;
- let data = generateNodeWorkRecord({ manifest, publicationDate, nodeVersion, putCode });
+ let data = generateNodeWorkRecord({ manifest, publicationDate, nodeVersion, putCode, contributorsXml });
data = data.replace(/\\"/g, '"');
const url = `${this.baseUrl}/${orcid}/work${putCode ? '/' + putCode : ''}`;
@@ -388,8 +407,10 @@ class OrcidApiService {
orcid,
claim,
nodeVersion,
+ contributorsXml,
}: {
claim: Claim;
+ contributorsXml: string;
manifest: ResearchObjectV1;
nodeVersion: number;
publicationDate: string;
@@ -410,7 +431,14 @@ class OrcidApiService {
});
const putCode = orcidPutCode?.putcode;
- let data = generateClaimWorkRecord({ nodeVersion, manifest, publicationDate, claim, putCode });
+ let data = generateClaimWorkRecord({
+ nodeVersion,
+ manifest,
+ publicationDate,
+ claim,
+ putCode,
+ contributorsXml,
+ });
data = data.replace(/\\"/g, '"');
const url = `${this.baseUrl}/${orcid}/work${putCode ? '/' + putCode : ''}`;
@@ -500,9 +528,11 @@ const generateClaimWorkRecord = ({
claim,
nodeVersion,
publicationDate,
+ contributorsXml,
}: {
manifest: ResearchObjectV1;
claim: Claim;
+ contributorsXml: string;
putCode?: string;
nodeVersion: number;
publicationDate: string;
@@ -514,9 +544,9 @@ const generateClaimWorkRecord = ({
? 'data-set'
: 'preprint';
- const description = `${claim.name} Attestation`;
+ const description = `${claim.name} availability verified`;
const [month, day, year] = publicationDate.split('-');
- const externalUrl = `${DPID_URL_OVERRIDE}/${manifest.dpid.id}/attestation/${claim.id}`;
+ const externalUrl = `${DPID_URL_OVERRIDE}/${manifest.dpid.id}/v${nodeVersion}/attestation/${claim.id}`;
const dataRoot = `${DPID_URL_OVERRIDE}/${manifest.dpid.id}/v${nodeVersion}`;
logger.info({ codeAttr, workType, publicationDate, day, month, year, externalUrl }, 'CODE ATTR');
return (
@@ -525,7 +555,6 @@ const generateClaimWorkRecord = ({
'> ' +
'' +
` ${manifest.title}
- ${description}
${description}
${workType}
@@ -548,7 +577,8 @@ const generateClaimWorkRecord = ({
part-of
- ${generateContributors(manifest.authors ?? [])}
+ ${externalUrl}
+ ${contributorsXml}
`
);
@@ -571,11 +601,13 @@ const generateNodeWorkRecord = ({
nodeVersion,
putCode,
publicationDate,
+ contributorsXml,
}: {
manifest: ResearchObjectV1;
nodeVersion: number;
putCode?: string;
publicationDate: string;
+ contributorsXml: string;
}): string => {
const codeAttr = putCode ? 'put-code="' + putCode + '"' : '';
const workType = 'preprint';
@@ -588,9 +620,7 @@ const generateNodeWorkRecord = ({
'> ' +
'' +
` ${manifest.title}
- ${manifest.description.trim() ? `${manifest.description.trim()}` : ``}
- ${manifest?.description?.trim() ? `${manifest.description}` : ``}
${workType}
${year}
@@ -605,7 +635,8 @@ const generateNodeWorkRecord = ({
self
- ${generateContributors(manifest.authors ?? [])}
+ ${dataRoot}
+ ${contributorsXml}
`
);
@@ -617,11 +648,20 @@ const generateNodeWorkRecord = ({
* @param authors[] - A list of ResearchObjectV1Author entries
* @returns {string} xml string of the constructed contributor data
*/
-const generateContributors = (authors: ResearchObjectV1Author[]): string => {
+const generateContributors = (authors: ResearchObjectV1Author[], ownerOrcid: string): string => {
+ authors.reverse();
+
+ const authorIndex = authors.findIndex((author) => author.orcid === ownerOrcid);
+ if (authorIndex !== -1 && authorIndex !== 0) {
+ const mainAuthor = authors.splice(authorIndex, 1);
+ authors.unshift(mainAuthor[0]);
+ }
+
const contributors =
authors?.length > 0
? `
${authors
+ .filter((author) => !!author.name)
.map((author, idx) => {
return `
${
diff --git a/desci-server/src/templates/emails/BaseProvider.tsx b/desci-server/src/templates/emails/BaseProvider.tsx
index 747bb1c6..7d515f2d 100644
--- a/desci-server/src/templates/emails/BaseProvider.tsx
+++ b/desci-server/src/templates/emails/BaseProvider.tsx
@@ -1,7 +1,7 @@
import { Tailwind } from '@react-email/components';
import React from 'react';
-const BaseProvider = ({ children }: { children: JSX.Element }) => {
+export const BaseProvider = ({ children }: { children: JSX.Element }) => {
return (
{
);
};
-
-export default BaseProvider;
diff --git a/desci-server/src/templates/emails/MagicCode.tsx b/desci-server/src/templates/emails/MagicCode.tsx
index f4bf2f42..81ca2dcd 100644
--- a/desci-server/src/templates/emails/MagicCode.tsx
+++ b/desci-server/src/templates/emails/MagicCode.tsx
@@ -1,16 +1,12 @@
import {
Body,
Container,
- Column,
Head,
Heading,
Html,
Preview,
- Row,
Text,
- Button,
Section,
- render,
} from '@react-email/components';
import * as React from 'react';
@@ -29,7 +25,7 @@ export const MagicCodeEmail = ({ magicCode, ip }: MagicCodeEmailProps) => (
>
- Confirm your contribution
+ Confirm your identity
diff --git a/desci-server/src/templates/emails/MainLayout.tsx b/desci-server/src/templates/emails/MainLayout.tsx
index 3c0382ce..aa411c98 100644
--- a/desci-server/src/templates/emails/MainLayout.tsx
+++ b/desci-server/src/templates/emails/MainLayout.tsx
@@ -1,27 +1,23 @@
-import { url } from 'inspector';
import {
Body,
Container,
Column,
Head,
- Heading,
Html,
Img,
Link,
- Preview,
Row,
Section,
Text,
Font,
} from '@react-email/components';
import React from 'react';
+import { BaseProvider } from './BaseProvider.js';
-import BaseProvider from './BaseProvider.js';
-
-export const emailAssetsBaseUrl = 'https://ipfs.desci.com/ipfs';
-const cubertBkg = 'bafkreih6yx7ywj7trvpp45vergrnytad7ezsku75tefyro4qrrcfrrmrt4';
-const labsLogo = 'bafkreifvb7tleo5jaidjjf6lfjxb5bpjbs2nswp47bi7zh3hxbpc6fjyf4';
+export const emailAssetsBaseUrl = 'https://pub.desci.com/ipfs';
+// const cubertBkg = 'bafkreih6yx7ywj7trvpp45vergrnytad7ezsku75tefyro4qrrcfrrmrt4';
+const labsLogo = 'bafkreie2jto3flk2r43yt545xrasftbsc2atp5eb7qcbsmhacm26k4wiz4';
const defaultFooterMsg = "If you didn't request this email, there's nothing to worry about, you can safely ignore it.";
const MainLayout = ({ children, footerMsg = defaultFooterMsg }: { children: JSX.Element; footerMsg?: string }) => {
@@ -55,11 +51,11 @@ const MainLayout = ({ children, footerMsg = defaultFooterMsg }: { children: JSX.
@@ -70,11 +66,11 @@ const MainLayout = ({ children, footerMsg = defaultFooterMsg }: { children: JSX.