|
1 | | -import { v2 } from "@govtechsg/open-attestation"; |
| 1 | +import { utils, v2, v3 } from "@govtechsg/open-attestation"; |
2 | 2 | import fetch from "node-fetch"; |
3 | 3 | import { info, success } from "signale"; |
4 | 4 | import { highlight } from "../../utils"; |
@@ -37,37 +37,28 @@ export const getConfigWithUpdatedForms = ({ |
37 | 37 | dnsTransferableRecord, |
38 | 38 | }: UpdatedForms): ConfigFile => { |
39 | 39 | const { wallet, forms } = configFile; |
40 | | - const { encryptedJson } = wallet; |
41 | | - const { address } = JSON.parse(encryptedJson); |
42 | 40 |
|
43 | 41 | const updatedForms = forms.map((form: Form) => { |
44 | | - if (form.type === "VERIFIABLE_DOCUMENT") { |
45 | | - const updatedIssuers = form.defaults.issuers.map((issuer) => { |
46 | | - if (issuer.identityProof) { |
47 | | - if (issuer.identityProof.type === "DNS-TXT") { |
48 | | - issuer.documentStore = documentStoreAddress; |
49 | | - issuer.identityProof.location = dnsVerifiable; |
50 | | - } else if (issuer.identityProof.type === "DID" || issuer.identityProof.type === "DNS-DID") { |
51 | | - issuer.id = `did:ethr:0x${address}`; |
52 | | - issuer.identityProof.location = dnsDid; |
53 | | - issuer.identityProof.key = `did:ethr:0x${address}#controller`; |
54 | | - if (issuer.revocation) { |
55 | | - issuer.revocation.type = "NONE" as v2.RevocationType; |
56 | | - } |
57 | | - } |
58 | | - } |
59 | | - return issuer; |
| 42 | + if (utils.isRawV3Document(form.defaults)) { |
| 43 | + utils.updateFormV3({ |
| 44 | + wallet, |
| 45 | + form, |
| 46 | + documentStoreAddress, |
| 47 | + tokenRegistryAddress, |
| 48 | + dnsVerifiable: dnsVerifiable || "", |
| 49 | + dnsDid: dnsDid || "", |
| 50 | + dnsTransferableRecord: dnsTransferableRecord || "", |
60 | 51 | }); |
61 | | - form.defaults.issuers = updatedIssuers; |
62 | | - } |
63 | | - |
64 | | - if (form.type === "TRANSFERABLE_RECORD") { |
65 | | - const updatedIssuers = form.defaults.issuers.map((issuer) => { |
66 | | - issuer.tokenRegistry = tokenRegistryAddress; |
67 | | - if (issuer.identityProof?.location) issuer.identityProof.location = dnsTransferableRecord; |
68 | | - return issuer; |
| 52 | + } else { |
| 53 | + utils.updateFormV2({ |
| 54 | + wallet, |
| 55 | + form, |
| 56 | + documentStoreAddress, |
| 57 | + tokenRegistryAddress, |
| 58 | + dnsVerifiable: dnsVerifiable || "", |
| 59 | + dnsDid: dnsDid || "", |
| 60 | + dnsTransferableRecord: dnsTransferableRecord || "", |
69 | 61 | }); |
70 | | - form.defaults.issuers = updatedIssuers; |
71 | 62 | } |
72 | 63 |
|
73 | 64 | return form; |
@@ -124,14 +115,30 @@ export const getDocumentStoreAddress = async (encryptedWalletPath: string): Prom |
124 | 115 | }; |
125 | 116 |
|
126 | 117 | export const validate = (forms: Form[]): boolean => { |
127 | | - const isValidForm = forms.some((form: Form) => { |
128 | | - const isValidFormType = form.type === "TRANSFERABLE_RECORD" && "VERIFIABLE_DOCUMENT"; |
129 | | - const isValidIdentityProofType = form.defaults.issuers.some( |
130 | | - (issuer) => issuer.identityProof?.type === "DNS-TXT" && "DNS-DID" && "DID" |
131 | | - ); |
132 | | - |
| 118 | + const isValidForm = forms.map((form: Form) => { |
| 119 | + const formTypeCheckList = ["TRANSFERABLE_RECORD", "VERIFIABLE_DOCUMENT"]; |
| 120 | + const isValidFormType = formTypeCheckList.includes(form.type); |
| 121 | + let isValidIdentityProofType: boolean; |
| 122 | + |
| 123 | + const identityProofTypeCheckList = ["DNS-TXT", "DNS-DID", "DID"]; |
| 124 | + // test for v2/v3 form defaults |
| 125 | + if (utils.isRawV3Document(form.defaults)) { |
| 126 | + const v3Defaults = form.defaults as v3.OpenAttestationDocument; |
| 127 | + isValidIdentityProofType = identityProofTypeCheckList.includes( |
| 128 | + v3Defaults.openAttestationMetadata.identityProof.type |
| 129 | + ); |
| 130 | + } else { |
| 131 | + const v2Defaults = form.defaults as v2.OpenAttestationDocument; |
| 132 | + isValidIdentityProofType = v2Defaults.issuers.some((issuer) => { |
| 133 | + const identityProofType = issuer.identityProof?.type; |
| 134 | + if (identityProofType) { |
| 135 | + return identityProofTypeCheckList.includes(identityProofType); |
| 136 | + } |
| 137 | + return false; |
| 138 | + }); |
| 139 | + } |
133 | 140 | return isValidFormType && isValidIdentityProofType; |
134 | 141 | }); |
135 | | - |
136 | | - return isValidForm; |
| 142 | + const anyInvalidForm = !isValidForm.some((validForm: boolean) => validForm === false); |
| 143 | + return anyInvalidForm; |
137 | 144 | }; |
0 commit comments