@opensecret/react 0.1.9 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -15180,7 +15180,7 @@ const mm = [
15180
15180
  "c4285443b87b9b12a6cea3bef1064ec060f652b235a297095975af8f134e5ed65f92d70d4616fdec80af9dff48bb9f35"
15181
15181
  ];
15182
15182
  function wm(r, e) {
15183
- const t = (e == null ? void 0 : e.pcr0Values) || mm, n = (e == null ? void 0 : e.pcr0DevValues) || bm;
15183
+ const t = [...(e == null ? void 0 : e.pcr0Values) || [], ...mm], n = [...(e == null ? void 0 : e.pcr0DevValues) || [], ...bm];
15184
15184
  return t.includes(r) ? {
15185
15185
  isMatch: !0,
15186
15186
  text: "PCR0 matches a known good value"
@@ -159,4 +159,4 @@ ${e.join(`
159
159
 
160
160
  `))}}catch(q){console.error("Decryption error:",q,"Data:",j),console.log("Skipping corrupted chunk")}finally{console.groupEnd()}}}b.close()}});return new Response($,{headers:d.headers,status:d.status,statusText:d.statusText})}return d}catch(s){throw console.error("Error during fetch process:",s),s}}}function im(r){const e=r.indexOf(`
161
161
 
162
- `);return e===-1?null:r.slice(0,e+2)}const sm=["eeddbb58f57c38894d6d5af5e575fbe791c5bf3bbcfb5df8da8cfcf0c2e1da1913108e6a762112444740b88c163d7f4b","74ed417f88cb0ca76c4a3d10f278bd010f1d3f95eafb254d4732511bb50e404507a4049b779c5230137e4091a5582271","9043fcab93b972d3c14ad2dc8fa78ca7ad374fc937c02435681772a003f7a72876bc4d578089b5c4cf3fe9b480f1aabb","52c3595b151d93d8b159c257301bfd5aa6f49210de0c55a6cd6df5ebeee44e4206cab950500f5d188f7fa14e6d900b75","91cb67311e910cce68cd5b7d0de77aa40610d87c6681439b44c46c3ff786ae643956ab2c812478a1da8745b259f07a45","859065ac81b81d3735130ba08b8af72a7256b603fefb74faabae25ed28cca6edcaa7c10ea32b5948d675c18a9b0f2b1d","acd82a7d3943e23e95a9dc3ce0b0107ea358d6287f9e3afa245622f7c7e3e0a66142a928b6efcc02f594a95366d3a99d"],om=["62c0407056217a4c10764ed9045694c29fa93255d3cc04c2f989cdd9a1f8050c8b169714c71f1118ebce2fcc9951d1a9","cb95519905443f9f66f05f63c548b61ad1561a27fd5717b69285861aaea3c3063fe12a2571773b67fea3c6c11b4d8ec6","deb5895831b5e4286f5a2dcf5e9c27383821446f8df2b465f141d10743599be20ba3bb381ce063bf7139cc89f7f61d4c","70ba26c6af1ec3b57ce80e1adcc0ee96d70224d4c7a078f427895cdf68e1c30f09b5ac4c456588d872f3f21ff77c036b","669404ea71435b8f498b48db7816a5c2ab1d258b1a77685b11d84d15a73189504d79c4dee13a658de9f4a0cbfc39cfe8","a791bf92c25ffdfd372660e460a0e238c6778c090672df6509ae4bc065cf8668b6baac6b6a11d554af53ee0ff0172ad5","c4285443b87b9b12a6cea3bef1064ec060f652b235a297095975af8f134e5ed65f92d70d4616fdec80af9dff48bb9f35"];function am(r,e){const t=(e==null?void 0:e.pcr0Values)||sm,n=(e==null?void 0:e.pcr0DevValues)||om;return t.includes(r)?{isMatch:!0,text:"PCR0 matches a known good value"}:n.includes(r)?{isMatch:!0,text:"PCR0 matches development enclave"}:{isMatch:!1,text:"PCR0 does not match a known good value"}}const wf=Tc,G0="641a0321a3e244efe456463195d606317ed7cdcc3c1756e09893f3c68f79bb5b";function z0(r){return Array.from(r).map(e=>e.toString(16).padStart(2,"0")).join("")}async function cm(r){const e=await crypto.subtle.digest("SHA-256",r);return z0(new Uint8Array(e))}async function xf(r,e,t){console.log("Raw timestamp:",r.timestamp),console.log("Date object:",new Date(r.timestamp));const n=Array.from(r.pcrs.entries()).map(([w,E])=>({id:w,value:z0(E)})).filter(w=>!w.value.match(/^0+$/)),i=n.find(w=>w.id===0),s=i?am(i.value,t):null,o=[...e,r.certificate].map(w=>{const E=new ji(w);return{subject:E.subject,notBefore:E.notBefore.toLocaleString(),notAfter:E.notAfter.toLocaleString(),pem:E.toString("pem"),isRoot:E.subject==="C=US, O=Amazon, OU=AWS, CN=aws.nitro-enclaves"}}),c=new TextDecoder,u=new ji(e[0]),d=await cm(u.rawData);return{moduleId:r.module_id,publicKey:r.public_key?$r(r.public_key):null,timestamp:new Date(r.timestamp).toLocaleDateString("en-US",{year:"numeric",month:"long",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:"short"}),digest:r.digest,pcrs:n,certificates:o,userData:r.user_data?c.decode(r.user_data):null,nonce:r.nonce?c.decode(r.nonce):null,cert0hash:d,validatedPcr0Hash:s}}const Af=Ze.createContext({auth:{loading:!0,user:void 0},signIn:async()=>{},signUp:async()=>{},signOut:async()=>{},get:P0,put:R0,list:U0,del:j0,verifyEmail:D0,requestNewVerificationCode:jc,requestNewVerificationEmail:jc,refetchUser:async()=>{},changePassword:V0,refreshAccessToken:Rc,requestPasswordReset:$0,confirmPasswordReset:M0,initiateGitHubAuth:async()=>({auth_url:"",csrf_token:""}),handleGitHubCallback:async()=>{},initiateGoogleAuth:async()=>({auth_url:"",csrf_token:""}),handleGoogleCallback:async()=>{},getPrivateKey:L0,getPublicKey:F0,signMessage:H0,aiCustomFetch:async()=>new Response,apiUrl:"",pcrConfig:{},getAttestation:Bo,authenticate:Nc,parseAttestationForView:xf,awsRootCertDer:wf,expectedRootCertHash:G0,getAttestationDocument:async()=>{throw new Error("getAttestationDocument called outside of OpenSecretProvider")}});function lm({children:r,apiUrl:e,pcrConfig:t={}}){const[n,i]=Ze.useState({loading:!0,user:void 0}),[s,o]=Ze.useState();Ze.useEffect(()=>{if(!e||e.trim()==="")throw new Error("OpenSecretProvider requires a non-empty apiUrl. Please provide a valid API endpoint URL.");K1(e)},[e]),Ze.useEffect(()=>{n.user?o(()=>nm()):o(void 0)},[n.user]);async function c(){const k=window.localStorage.getItem("access_token"),B=window.localStorage.getItem("refresh_token");if(!k||!B){i({loading:!1,user:void 0});return}try{const j=await q1();i({loading:!1,user:j})}catch(j){console.error("Failed to fetch user:",j),i({loading:!1,user:void 0})}}Ze.useEffect(()=>{c()},[]);async function u(k,B){console.log("Signing in");try{const{access_token:j,refresh_token:q}=await Z1(k,B);window.localStorage.setItem("access_token",j),window.localStorage.setItem("refresh_token",q),await c()}catch(j){throw console.error(j),j}}async function d(k,B,j,q){try{const{access_token:Oe,refresh_token:Le}=await W1(k,B,j,q);window.localStorage.setItem("access_token",Oe),window.localStorage.setItem("refresh_token",Le),await c()}catch(Oe){throw console.error(Oe),Oe}}async function w(){const k=window.localStorage.getItem("refresh_token");if(k)try{await Y1(k)}catch(B){console.error("Error during logout:",B)}localStorage.removeItem("access_token"),localStorage.removeItem("refresh_token"),sessionStorage.removeItem("sessionKey"),sessionStorage.removeItem("sessionId"),i({loading:!1,user:void 0})}const T={auth:n,signIn:u,signOut:w,signUp:d,get:P0,put:R0,list:U0,del:j0,refetchUser:c,verifyEmail:D0,requestNewVerificationCode:jc,requestNewVerificationEmail:jc,changePassword:V0,refreshAccessToken:Rc,requestPasswordReset:$0,confirmPasswordReset:M0,initiateGitHubAuth:async k=>{try{return await Q1(k)}catch(B){throw console.error("Failed to initiate GitHub auth:",B),B}},handleGitHubCallback:async(k,B,j)=>{try{const{access_token:q,refresh_token:Oe}=await em(k,B,j);window.localStorage.setItem("access_token",q),window.localStorage.setItem("refresh_token",Oe),await c()}catch(q){throw console.error("GitHub callback error:",q),q}},initiateGoogleAuth:async k=>{try{return await tm(k)}catch(B){throw console.error("Failed to initiate Google auth:",B),B}},handleGoogleCallback:async(k,B,j)=>{try{const{access_token:q,refresh_token:Oe}=await rm(k,B,j);window.localStorage.setItem("access_token",q),window.localStorage.setItem("refresh_token",Oe),await c()}catch(q){throw console.error("Google callback error:",q),q}},getPrivateKey:L0,getPublicKey:F0,signMessage:H0,aiCustomFetch:s||(async()=>new Response),apiUrl:e,pcrConfig:t,getAttestation:Bo,authenticate:Nc,parseAttestationForView:xf,awsRootCertDer:wf,expectedRootCertHash:G0,getAttestationDocument:async()=>{const k=window.crypto.randomUUID(),B=await fetch(`${e}/attestation/${k}`);if(!B.ok)throw new Error("Failed to fetch attestation document");const j=await B.json(),q=await Nc(j.attestation_document,wf,k);return xf(q,q.cabundle,t)}};return ty.jsx(Af.Provider,{value:T,children:r})}function um(){const r=Ze.useContext(Af);if(!r)throw new Error("useOpenSecret must be used within an OpenSecretProvider");return r}function fm(){const r=new Uint8Array(32);return crypto.getRandomValues(r),Array.from(r,e=>e.toString(16).padStart(2,"0")).join("")}async function hm(r){const t=new TextEncoder().encode(r),n=await crypto.subtle.digest("SHA-256",t);return Array.from(new Uint8Array(n)).map(s=>s.toString(16).padStart(2,"0")).join("")}Je.OpenSecretContext=Af,Je.OpenSecretProvider=lm,Je.generateSecureSecret=fm,Je.hashSecret=hm,Je.useOpenSecret=um,Object.defineProperty(Je,Symbol.toStringTag,{value:"Module"})});
162
+ `);return e===-1?null:r.slice(0,e+2)}const sm=["eeddbb58f57c38894d6d5af5e575fbe791c5bf3bbcfb5df8da8cfcf0c2e1da1913108e6a762112444740b88c163d7f4b","74ed417f88cb0ca76c4a3d10f278bd010f1d3f95eafb254d4732511bb50e404507a4049b779c5230137e4091a5582271","9043fcab93b972d3c14ad2dc8fa78ca7ad374fc937c02435681772a003f7a72876bc4d578089b5c4cf3fe9b480f1aabb","52c3595b151d93d8b159c257301bfd5aa6f49210de0c55a6cd6df5ebeee44e4206cab950500f5d188f7fa14e6d900b75","91cb67311e910cce68cd5b7d0de77aa40610d87c6681439b44c46c3ff786ae643956ab2c812478a1da8745b259f07a45","859065ac81b81d3735130ba08b8af72a7256b603fefb74faabae25ed28cca6edcaa7c10ea32b5948d675c18a9b0f2b1d","acd82a7d3943e23e95a9dc3ce0b0107ea358d6287f9e3afa245622f7c7e3e0a66142a928b6efcc02f594a95366d3a99d"],om=["62c0407056217a4c10764ed9045694c29fa93255d3cc04c2f989cdd9a1f8050c8b169714c71f1118ebce2fcc9951d1a9","cb95519905443f9f66f05f63c548b61ad1561a27fd5717b69285861aaea3c3063fe12a2571773b67fea3c6c11b4d8ec6","deb5895831b5e4286f5a2dcf5e9c27383821446f8df2b465f141d10743599be20ba3bb381ce063bf7139cc89f7f61d4c","70ba26c6af1ec3b57ce80e1adcc0ee96d70224d4c7a078f427895cdf68e1c30f09b5ac4c456588d872f3f21ff77c036b","669404ea71435b8f498b48db7816a5c2ab1d258b1a77685b11d84d15a73189504d79c4dee13a658de9f4a0cbfc39cfe8","a791bf92c25ffdfd372660e460a0e238c6778c090672df6509ae4bc065cf8668b6baac6b6a11d554af53ee0ff0172ad5","c4285443b87b9b12a6cea3bef1064ec060f652b235a297095975af8f134e5ed65f92d70d4616fdec80af9dff48bb9f35"];function am(r,e){const t=[...(e==null?void 0:e.pcr0Values)||[],...sm],n=[...(e==null?void 0:e.pcr0DevValues)||[],...om];return t.includes(r)?{isMatch:!0,text:"PCR0 matches a known good value"}:n.includes(r)?{isMatch:!0,text:"PCR0 matches development enclave"}:{isMatch:!1,text:"PCR0 does not match a known good value"}}const wf=Tc,G0="641a0321a3e244efe456463195d606317ed7cdcc3c1756e09893f3c68f79bb5b";function z0(r){return Array.from(r).map(e=>e.toString(16).padStart(2,"0")).join("")}async function cm(r){const e=await crypto.subtle.digest("SHA-256",r);return z0(new Uint8Array(e))}async function xf(r,e,t){console.log("Raw timestamp:",r.timestamp),console.log("Date object:",new Date(r.timestamp));const n=Array.from(r.pcrs.entries()).map(([w,E])=>({id:w,value:z0(E)})).filter(w=>!w.value.match(/^0+$/)),i=n.find(w=>w.id===0),s=i?am(i.value,t):null,o=[...e,r.certificate].map(w=>{const E=new ji(w);return{subject:E.subject,notBefore:E.notBefore.toLocaleString(),notAfter:E.notAfter.toLocaleString(),pem:E.toString("pem"),isRoot:E.subject==="C=US, O=Amazon, OU=AWS, CN=aws.nitro-enclaves"}}),c=new TextDecoder,u=new ji(e[0]),d=await cm(u.rawData);return{moduleId:r.module_id,publicKey:r.public_key?$r(r.public_key):null,timestamp:new Date(r.timestamp).toLocaleDateString("en-US",{year:"numeric",month:"long",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:"short"}),digest:r.digest,pcrs:n,certificates:o,userData:r.user_data?c.decode(r.user_data):null,nonce:r.nonce?c.decode(r.nonce):null,cert0hash:d,validatedPcr0Hash:s}}const Af=Ze.createContext({auth:{loading:!0,user:void 0},signIn:async()=>{},signUp:async()=>{},signOut:async()=>{},get:P0,put:R0,list:U0,del:j0,verifyEmail:D0,requestNewVerificationCode:jc,requestNewVerificationEmail:jc,refetchUser:async()=>{},changePassword:V0,refreshAccessToken:Rc,requestPasswordReset:$0,confirmPasswordReset:M0,initiateGitHubAuth:async()=>({auth_url:"",csrf_token:""}),handleGitHubCallback:async()=>{},initiateGoogleAuth:async()=>({auth_url:"",csrf_token:""}),handleGoogleCallback:async()=>{},getPrivateKey:L0,getPublicKey:F0,signMessage:H0,aiCustomFetch:async()=>new Response,apiUrl:"",pcrConfig:{},getAttestation:Bo,authenticate:Nc,parseAttestationForView:xf,awsRootCertDer:wf,expectedRootCertHash:G0,getAttestationDocument:async()=>{throw new Error("getAttestationDocument called outside of OpenSecretProvider")}});function lm({children:r,apiUrl:e,pcrConfig:t={}}){const[n,i]=Ze.useState({loading:!0,user:void 0}),[s,o]=Ze.useState();Ze.useEffect(()=>{if(!e||e.trim()==="")throw new Error("OpenSecretProvider requires a non-empty apiUrl. Please provide a valid API endpoint URL.");K1(e)},[e]),Ze.useEffect(()=>{n.user?o(()=>nm()):o(void 0)},[n.user]);async function c(){const k=window.localStorage.getItem("access_token"),B=window.localStorage.getItem("refresh_token");if(!k||!B){i({loading:!1,user:void 0});return}try{const j=await q1();i({loading:!1,user:j})}catch(j){console.error("Failed to fetch user:",j),i({loading:!1,user:void 0})}}Ze.useEffect(()=>{c()},[]);async function u(k,B){console.log("Signing in");try{const{access_token:j,refresh_token:q}=await Z1(k,B);window.localStorage.setItem("access_token",j),window.localStorage.setItem("refresh_token",q),await c()}catch(j){throw console.error(j),j}}async function d(k,B,j,q){try{const{access_token:Oe,refresh_token:Le}=await W1(k,B,j,q);window.localStorage.setItem("access_token",Oe),window.localStorage.setItem("refresh_token",Le),await c()}catch(Oe){throw console.error(Oe),Oe}}async function w(){const k=window.localStorage.getItem("refresh_token");if(k)try{await Y1(k)}catch(B){console.error("Error during logout:",B)}localStorage.removeItem("access_token"),localStorage.removeItem("refresh_token"),sessionStorage.removeItem("sessionKey"),sessionStorage.removeItem("sessionId"),i({loading:!1,user:void 0})}const T={auth:n,signIn:u,signOut:w,signUp:d,get:P0,put:R0,list:U0,del:j0,refetchUser:c,verifyEmail:D0,requestNewVerificationCode:jc,requestNewVerificationEmail:jc,changePassword:V0,refreshAccessToken:Rc,requestPasswordReset:$0,confirmPasswordReset:M0,initiateGitHubAuth:async k=>{try{return await Q1(k)}catch(B){throw console.error("Failed to initiate GitHub auth:",B),B}},handleGitHubCallback:async(k,B,j)=>{try{const{access_token:q,refresh_token:Oe}=await em(k,B,j);window.localStorage.setItem("access_token",q),window.localStorage.setItem("refresh_token",Oe),await c()}catch(q){throw console.error("GitHub callback error:",q),q}},initiateGoogleAuth:async k=>{try{return await tm(k)}catch(B){throw console.error("Failed to initiate Google auth:",B),B}},handleGoogleCallback:async(k,B,j)=>{try{const{access_token:q,refresh_token:Oe}=await rm(k,B,j);window.localStorage.setItem("access_token",q),window.localStorage.setItem("refresh_token",Oe),await c()}catch(q){throw console.error("Google callback error:",q),q}},getPrivateKey:L0,getPublicKey:F0,signMessage:H0,aiCustomFetch:s||(async()=>new Response),apiUrl:e,pcrConfig:t,getAttestation:Bo,authenticate:Nc,parseAttestationForView:xf,awsRootCertDer:wf,expectedRootCertHash:G0,getAttestationDocument:async()=>{const k=window.crypto.randomUUID(),B=await fetch(`${e}/attestation/${k}`);if(!B.ok)throw new Error("Failed to fetch attestation document");const j=await B.json(),q=await Nc(j.attestation_document,wf,k);return xf(q,q.cabundle,t)}};return ty.jsx(Af.Provider,{value:T,children:r})}function um(){const r=Ze.useContext(Af);if(!r)throw new Error("useOpenSecret must be used within an OpenSecretProvider");return r}function fm(){const r=new Uint8Array(32);return crypto.getRandomValues(r),Array.from(r,e=>e.toString(16).padStart(2,"0")).join("")}async function hm(r){const t=new TextEncoder().encode(r),n=await crypto.subtle.digest("SHA-256",t);return Array.from(new Uint8Array(n)).map(s=>s.toString(16).padStart(2,"0")).join("")}Je.OpenSecretContext=Af,Je.OpenSecretProvider=lm,Je.generateSecureSecret=fm,Je.hashSecret=hm,Je.useOpenSecret=um,Object.defineProperty(Je,Symbol.toStringTag,{value:"Module"})});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opensecret/react",
3
- "version": "0.1.9",
3
+ "version": "0.2.0",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "files": [