@cowprotocol/app-data
Advanced tools
Comparing version 1.1.0 to 1.2.2
import * as v0_1_0 from './v0.1.0'; | ||
import * as v0_10_0 from './v0.10.0'; | ||
import * as v0_11_0 from './v0.11.0'; | ||
import * as v0_2_0 from './v0.2.0'; | ||
@@ -11,4 +12,4 @@ import * as v0_3_0 from './v0.3.0'; | ||
import * as v0_9_0 from './v0.9.0'; | ||
export * as latest from './v0.10.0'; | ||
export declare const LATEST_APP_DATA_VERSION = "0.10.0"; | ||
export * as latest from './v0.11.0'; | ||
export declare const LATEST_APP_DATA_VERSION = "0.11.0"; | ||
export declare const LATEST_QUOTE_METADATA_VERSION = "0.3.0"; | ||
@@ -20,4 +21,5 @@ export declare const LATEST_REFERRER_METADATA_VERSION = "0.2.0"; | ||
export declare const LATEST_SIGNER_METADATA_VERSION = "0.1.0"; | ||
export type LatestAppDataDocVersion = v0_10_0.AppDataRootSchema; | ||
export type AnyAppDataDocVersion = v0_10_0.AppDataRootSchema | v0_9_0.AppDataRootSchema | v0_8_0.AppDataRootSchema | v0_7_0.AppDataRootSchema | v0_6_0.AppDataRootSchema | v0_5_0.AppDataRootSchema | v0_4_0.AppDataRootSchema | v0_3_0.AppDataRootSchema | v0_2_0.AppDataRootSchema | v0_1_0.AppDataRootSchema; | ||
export { v0_10_0, v0_9_0, v0_8_0, v0_7_0, v0_6_0, v0_5_0, v0_4_0, v0_3_0, v0_2_0, v0_1_0 }; | ||
export declare const LATEST_WIDGET_METADATA_VERSION = "0.1.0"; | ||
export type LatestAppDataDocVersion = v0_11_0.AppDataRootSchema; | ||
export type AnyAppDataDocVersion = v0_11_0.AppDataRootSchema | v0_10_0.AppDataRootSchema | v0_9_0.AppDataRootSchema | v0_8_0.AppDataRootSchema | v0_7_0.AppDataRootSchema | v0_6_0.AppDataRootSchema | v0_5_0.AppDataRootSchema | v0_4_0.AppDataRootSchema | v0_3_0.AppDataRootSchema | v0_2_0.AppDataRootSchema | v0_1_0.AppDataRootSchema; | ||
export { v0_11_0, v0_10_0, v0_9_0, v0_8_0, v0_7_0, v0_6_0, v0_5_0, v0_4_0, v0_3_0, v0_2_0, v0_1_0 }; |
@@ -1,2 +0,2 @@ | ||
class e extends Error{}const r=function({version:e,multicodec:r,hashingAlgorithm:t,hashingLength:n,multihashHex:o}){try{return Promise.resolve(import("ethers/lib/utils")).then(function({arrayify:i}){const s=i(o),c=Uint8Array.from([e,r,t,n]);var u=new Uint8Array(c.length+s.length);return u.set(c),u.set(s,c.length),u})}catch(e){return Promise.reject(e)}},t=function(r,t){try{if(!r)throw new e("Error getting CID from appDataHex: "+t);return Promise.resolve()}catch(e){return Promise.reject(e)}},n=function(e){return Promise.resolve(function(e){try{return Promise.resolve(r({version:1,multicodec:112,hashingAlgorithm:18,hashingLength:32,multihashHex:e})).then(function(e){return Promise.resolve(import("multiformats/cid")).then(function({CID:r}){return r.decode(e).toV0().toString()})})}catch(e){return Promise.reject(e)}}(e)).then(function(r){return t(r,e),r})},o=function(e){return Promise.resolve(function(e){try{return Promise.resolve(r({version:1,multicodec:85,hashingAlgorithm:27,hashingLength:32,multihashHex:e})).then(function(e){return Promise.resolve(import("multiformats/bases/base16")).then(function({base16:r}){return r.encode(e)})})}catch(e){return Promise.reject(e)}}(e)).then(function(r){return t(r,e),r})},i=function(e){return Promise.resolve(s(e)).then(function(e){const{digest:r}=e.multihash;return`0x${Buffer.from(r).toString("hex")}`})},s=function(e){try{return Promise.resolve(import("multiformats/cid")).then(function({CID:r}){return Promise.resolve(function(e){try{let r;const t=function(){if(e[0]===c)return Promise.resolve(import("multiformats/bases/base16")).then(function({base16:e}){return r=1,e})}();return Promise.resolve(t&&t.then?t.then(function(e){return r?e:void 0}):r?t:void 0)}catch(e){return Promise.reject(e)}}(e)).then(function(t){return r.parse(e,t)})})}catch(e){return Promise.reject(e)}},c="f",u=function(e){try{return Promise.resolve(import("json-stringify-deterministic")).then(function({default:r}){return r(e)})}catch(e){return Promise.reject(e)}},a=function(e){try{if(!/^\d+\.\d+\.\d+$/.test(e))throw new Error(`AppData version ${e} is not a valid version`);return Promise.resolve(function(r,t){try{var n=Promise.resolve(import(`../schemas/v${e}.json`))}catch(e){return t()}return n&&n.then?n.then(void 0,t):n}(0,function(){throw new Error(`AppData version ${e} doesn't exist`)}))}catch(e){return Promise.reject(e)}},h=function(e){try{const{version:r}=e;return Promise.resolve(function(t,n){try{var o=Promise.resolve(m()).then(function(t){return Promise.resolve(f(t,r)).then(function(r){return{success:!!r(e),errors:r.errors?t.errorsText(r.errors):void 0}})})}catch(e){return n(e)}return o&&o.then?o.then(void 0,n):o}(0,function(e){if(e instanceof Error)return{success:!1,errors:e.message};throw e}))}catch(e){return Promise.reject(e)}},f=function(e,r){try{let t=v[r];return t||(t=l(e,r),v[r]=t),Promise.resolve(t)}catch(e){return Promise.reject(e)}},l=function(e,r){try{let t=e.getSchema(r);const n=function(){if(!t)return Promise.resolve(a(r)).then(function(n){e.addSchema(n,r),t=e.getSchema(r)})}();return Promise.resolve(n&&n.then?n.then(function(){return t}):t)}catch(e){return Promise.reject(e)}},m=function(){try{return p||(p=import("ajv").then(({default:e})=>new e)),Promise.resolve(p)}catch(e){return Promise.reject(e)}};let p,v={};const P=function(e){try{const r="string"==typeof e?e:u(e);return Promise.resolve(import("ipfs-only-hash")).then(function({of:e}){return e(r,{cidVersion:0})})}catch(e){return Promise.reject(e)}},d=function(e){try{return Promise.resolve(import("ethers/lib/utils")).then(function({keccak256:r,toUtf8Bytes:t}){return Promise.resolve(r(t(e))).then(o)})}catch(e){return Promise.reject(e)}},y=function(r,t){try{function n(n){const[o,s]="string"==typeof r?n:[r,n];return Promise.resolve(h(o)).then(function(r){if(!r?.success)throw new e(`Invalid appData provided: ${r?.errors}`);return function(r,n){try{var o=Promise.resolve(t(s)).then(function(r){return Promise.resolve(i(r)).then(function(t){if(!t)throw new e(`Could not extract appDataHex from calculated cid ${r}`);return{cid:r,appDataHex:t}})})}catch(e){return n(e)}return o&&o.then?o.then(void 0,n):o}(0,function(r){const t=r;throw console.error("Failed to calculate appDataHex",t),new e(`Failed to calculate appDataHex: ${t.message}`)})})}return Promise.resolve("string"==typeof r?n("string"==typeof r?[JSON.parse(r),r]:u(r)):Promise.resolve("string"==typeof r?[JSON.parse(r),r]:u(r)).then(n))}catch(o){return Promise.reject(o)}},_=function(e){try{const r=JSON.stringify(e);return y(r,P)}catch(e){return Promise.reject(e)}},g=function(e){return y(e,d)},D=function(e){try{return Promise.resolve(i(e))}catch(e){return Promise.reject(e)}},j=function(e,r="https://cloudflare-ipfs.com/ipfs"){try{return Promise.resolve(import("cross-fetch")).then(function({default:t}){return Promise.resolve(t(`${r}/${e}`)).then(function(e){return Promise.resolve(e.json())})})}catch(e){return Promise.reject(e)}},w=function(r,t,n){try{return Promise.resolve(function(o,i){try{var s=Promise.resolve(r(t)).then(function(r){if(!r)throw new e("Error getting serialized CID");return j(r,n)})}catch(e){return i(e)}return s&&s.then?s.then(void 0,i):s}(0,function(r){throw new e(`Error decoding AppData: appDataHex=${t}, message=${r.message}`)}))}catch(e){return Promise.reject(e)}},x=function(e,r){return w(n,e,r)},A=function(e,r){return w(o,e,r)};var H={__proto__:null},S={__proto__:null},C={__proto__:null},$={__proto__:null},T={__proto__:null},b={__proto__:null},I={__proto__:null},E={__proto__:null},F={__proto__:null},L={__proto__:null};const O="0.10.0",k="0.3.0",J="0.2.0",N="0.3.0",U="0.2.0",B="0.1.0",M="0.1.0",V=function(e){try{return Promise.resolve({...z,...e,version:"0.10.0"})}catch(e){return Promise.reject(e)}},z={appCode:"CoW Swap",metadata:{},version:"0.10.0"},K=function(r){try{return Promise.resolve(function(e,t){try{var n=Promise.resolve(a(r))}catch(e){return t(e)}return n&&n.then?n.then(void 0,t):n}(0,function(r){throw new e(r.message)}))}catch(e){return Promise.reject(e)}},W=function(r,t){return Promise.resolve(function(r,{writeUri:t="https://api.pinata.cloud",pinataApiKey:n="",pinataApiSecret:o=""}){try{return Promise.resolve(import("cross-fetch")).then(function({default:i}){if(!n||!o)throw new e("You need to pass IPFS api credentials.");return Promise.resolve(u({pinataContent:r,pinataMetadata:{name:"appData"}})).then(function(e){return Promise.resolve(i(`${t}/pinning/pinJSONToIPFS`,{method:"POST",body:e,headers:{"Content-Type":"application/json",pinata_api_key:n,pinata_secret_api_key:o}})).then(function(e){return Promise.resolve(e.json()).then(function(r){if(200!==e.status)throw new Error(r.error.details||r.error);return r})})})})}catch(e){return Promise.reject(e)}}(r,t)).then(function({IpfsHash:e}){return Promise.resolve(i(e)).then(function(r){return{appData:r,cid:e}})})};class Y{constructor(){this.getAppDataSchema=K,this.generateAppDataDoc=V,this.validateAppDataDoc=h,this.appDataToCid=g,this.appDataHexToCid=o,this.cidToAppDataHex=D,this.fetchDocFromCid=j,this.fetchDocFromAppDataHex=A,this.uploadMetadataDocToIpfsLegacy=W,this.appDataToCidLegacy=_,this.appDataHexToCidLegacy=n,this.fetchDocFromAppDataHexLegacy=x}}export{O as LATEST_APP_DATA_VERSION,B as LATEST_HOOKS_METADATA_VERSION,N as LATEST_ORDER_CLASS_METADATA_VERSION,k as LATEST_QUOTE_METADATA_VERSION,J as LATEST_REFERRER_METADATA_VERSION,M as LATEST_SIGNER_METADATA_VERSION,U as LATEST_UTM_METADATA_VERSION,Y as MetadataApi,S as latest,u as stringifyDeterministic,S as v0_10_0,H as v0_1_0,C as v0_2_0,$ as v0_3_0,T as v0_4_0,b as v0_5_0,I as v0_6_0,E as v0_7_0,F as v0_8_0,L as v0_9_0}; | ||
class e extends Error{}const r=function({version:e,multicodec:r,hashingAlgorithm:t,hashingLength:n,multihashHex:o}){try{return Promise.resolve(import("ethers/lib/utils")).then(function(i){const{arrayify:s}=i.default||i,c=s(o),u=Uint8Array.from([e,r,t,n]);var a=new Uint8Array(u.length+c.length);return a.set(u),a.set(c,u.length),a})}catch(e){return Promise.reject(e)}},t=function(r,t){try{if(!r)throw new e("Error getting CID from appDataHex: "+t);return Promise.resolve()}catch(e){return Promise.reject(e)}},n=function(e){return Promise.resolve(function(e){try{return Promise.resolve(r({version:1,multicodec:112,hashingAlgorithm:18,hashingLength:32,multihashHex:e})).then(function(e){return Promise.resolve(import("multiformats/cid")).then(function({CID:r}){return r.decode(e).toV0().toString()})})}catch(e){return Promise.reject(e)}}(e)).then(function(r){return t(r,e),r})},o=function(e){return Promise.resolve(function(e){try{return Promise.resolve(r({version:1,multicodec:85,hashingAlgorithm:27,hashingLength:32,multihashHex:e})).then(function(e){return Promise.resolve(import("multiformats/bases/base16")).then(function({base16:r}){return r.encode(e)})})}catch(e){return Promise.reject(e)}}(e)).then(function(r){return t(r,e),r})},i=function(e){return Promise.resolve(s(e)).then(function(e){const{digest:r}=e.multihash;return`0x${Buffer.from(r).toString("hex")}`})},s=function(e){try{return Promise.resolve(import("multiformats/cid")).then(function({CID:r}){return Promise.resolve(function(e){try{let r;const t=function(){if(e[0]===c)return Promise.resolve(import("multiformats/bases/base16")).then(function({base16:e}){return r=1,e})}();return Promise.resolve(t&&t.then?t.then(function(e){return r?e:void 0}):r?t:void 0)}catch(e){return Promise.reject(e)}}(e)).then(function(t){return r.parse(e,t)})})}catch(e){return Promise.reject(e)}},c="f",u=function(e){try{return Promise.resolve(import("json-stringify-deterministic")).then(function({default:r}){return r(e)})}catch(e){return Promise.reject(e)}},a=function(e){try{if(!/^\d+\.\d+\.\d+$/.test(e))throw new Error(`AppData version ${e} is not a valid version`);return Promise.resolve(function(r,t){try{var n=Promise.resolve(import(`../schemas/v${e}.json`))}catch(e){return t()}return n&&n.then?n.then(void 0,t):n}(0,function(){throw new Error(`AppData version ${e} doesn't exist`)}))}catch(e){return Promise.reject(e)}},h=function(e){try{const{version:r}=e;return Promise.resolve(function(t,n){try{var o=Promise.resolve(m()).then(function(t){return Promise.resolve(l(t,r)).then(function(r){return{success:!!r(e),errors:r.errors?t.errorsText(r.errors):void 0}})})}catch(e){return n(e)}return o&&o.then?o.then(void 0,n):o}(0,function(e){if(e instanceof Error)return{success:!1,errors:e.message};throw e}))}catch(e){return Promise.reject(e)}},l=function(e,r){try{let t=v[r];return t||(t=f(e,r),v[r]=t),Promise.resolve(t)}catch(e){return Promise.reject(e)}},f=function(e,r){try{let t=e.getSchema(r);const n=function(){if(!t)return Promise.resolve(a(r)).then(function(n){e.addSchema(n,r),t=e.getSchema(r)})}();return Promise.resolve(n&&n.then?n.then(function(){return t}):t)}catch(e){return Promise.reject(e)}},m=function(){try{return p||(p=import("ajv").then(({default:e})=>new e)),Promise.resolve(p)}catch(e){return Promise.reject(e)}};let p,v={};const P=function(e){try{const r="string"==typeof e?e:u(e);return Promise.resolve(import("ipfs-only-hash")).then(function({of:e}){return e(r,{cidVersion:0})})}catch(e){return Promise.reject(e)}},d=function(e){try{return Promise.resolve(import("ethers/lib/utils")).then(function(r){const{keccak256:t,toUtf8Bytes:n}=r.default||r;return Promise.resolve(t(n(e))).then(o)})}catch(e){return Promise.reject(e)}},y=function(r,t){try{function n(n){const[o,s]="string"==typeof r?n:[r,n];return Promise.resolve(h(o)).then(function(r){if(!r?.success)throw new e(`Invalid appData provided: ${r?.errors}`);return function(r,n){try{var o=Promise.resolve(t(s)).then(function(r){return Promise.resolve(i(r)).then(function(t){if(!t)throw new e(`Could not extract appDataHex from calculated cid ${r}`);return{cid:r,appDataHex:t,appDataContent:s}})})}catch(e){return n(e)}return o&&o.then?o.then(void 0,n):o}(0,function(r){const t=r;throw console.error("Failed to calculate appDataHex",t),new e(`Failed to calculate appDataHex: ${t.message}`)})})}return Promise.resolve("string"==typeof r?n("string"==typeof r?[JSON.parse(r),r]:u(r)):Promise.resolve("string"==typeof r?[JSON.parse(r),r]:u(r)).then(n))}catch(o){return Promise.reject(o)}},_=function(e){try{const r=JSON.stringify(e);return y(r,P)}catch(e){return Promise.reject(e)}},g=function(e){return y(e,d)},D=function(e){try{return Promise.resolve(i(e))}catch(e){return Promise.reject(e)}},j=function(e,r="https://cloudflare-ipfs.com/ipfs"){try{return Promise.resolve(import("cross-fetch")).then(function({default:t}){return Promise.resolve(t(`${r}/${e}`)).then(function(e){return Promise.resolve(e.json())})})}catch(e){return Promise.reject(e)}},w=function(r,t,n){try{return Promise.resolve(function(o,i){try{var s=Promise.resolve(r(t)).then(function(r){if(!r)throw new e("Error getting serialized CID");return j(r,n)})}catch(e){return i(e)}return s&&s.then?s.then(void 0,i):s}(0,function(r){throw new e(`Error decoding AppData: appDataHex=${t}, message=${r.message}`)}))}catch(e){return Promise.reject(e)}},x=function(e,r){return w(n,e,r)},A=function(e,r){return w(o,e,r)};var C={__proto__:null},H={__proto__:null},S={__proto__:null},$={__proto__:null},T={__proto__:null},b={__proto__:null},I={__proto__:null},E={__proto__:null},F={__proto__:null},L={__proto__:null},O={__proto__:null};const k="0.11.0",J="0.3.0",N="0.2.0",U="0.3.0",B="0.2.0",M="0.1.0",V="0.1.0",z="0.1.0",K=function(e){try{return Promise.resolve({...W,...e,version:"0.11.0"})}catch(e){return Promise.reject(e)}},W={appCode:"CoW Swap",metadata:{},version:"0.11.0"},Y=function(r){try{return Promise.resolve(function(e,t){try{var n=Promise.resolve(a(r))}catch(e){return t(e)}return n&&n.then?n.then(void 0,t):n}(0,function(r){throw new e(r.message)}))}catch(e){return Promise.reject(e)}},q=function(r,t){return Promise.resolve(function(r,{writeUri:t="https://api.pinata.cloud",pinataApiKey:n="",pinataApiSecret:o=""}){try{return Promise.resolve(import("cross-fetch")).then(function({default:i}){if(!n||!o)throw new e("You need to pass IPFS api credentials.");return Promise.resolve(u({pinataContent:r,pinataMetadata:{name:"appData"}})).then(function(e){return Promise.resolve(i(`${t}/pinning/pinJSONToIPFS`,{method:"POST",body:e,headers:{"Content-Type":"application/json",pinata_api_key:n,pinata_secret_api_key:o}})).then(function(e){return Promise.resolve(e.json()).then(function(r){if(200!==e.status)throw new Error(r.error.details||r.error);return r})})})})}catch(e){return Promise.reject(e)}}(r,t)).then(function({IpfsHash:e}){return Promise.resolve(i(e)).then(function(r){return{appData:r,cid:e}})})};class G{constructor(){this.getAppDataSchema=Y,this.generateAppDataDoc=K,this.validateAppDataDoc=h,this.appDataToCid=g,this.appDataHexToCid=o,this.cidToAppDataHex=D,this.fetchDocFromCid=j,this.fetchDocFromAppDataHex=A,this.uploadMetadataDocToIpfsLegacy=q,this.appDataToCidLegacy=_,this.appDataHexToCidLegacy=n,this.fetchDocFromAppDataHexLegacy=x}}export{k as LATEST_APP_DATA_VERSION,M as LATEST_HOOKS_METADATA_VERSION,U as LATEST_ORDER_CLASS_METADATA_VERSION,J as LATEST_QUOTE_METADATA_VERSION,N as LATEST_REFERRER_METADATA_VERSION,V as LATEST_SIGNER_METADATA_VERSION,B as LATEST_UTM_METADATA_VERSION,z as LATEST_WIDGET_METADATA_VERSION,G as MetadataApi,S as latest,u as stringifyDeterministic,H as v0_10_0,S as v0_11_0,C as v0_1_0,$ as v0_2_0,T as v0_3_0,b as v0_4_0,I as v0_5_0,E as v0_6_0,F as v0_7_0,L as v0_8_0,O as v0_9_0}; | ||
//# sourceMappingURL=index.module.js.map |
@@ -10,2 +10,6 @@ import { latest } from './generatedTypes'; | ||
/** | ||
* Full appData content. It will be a the exact string that if hashed using keccak-256 you would get the returned appDataHex | ||
*/ | ||
appDataContent: string; | ||
/** | ||
* appData hex for CoW Orders. Its value is the multihash part of the IPFS CID, therefore it points to a IPFS document. | ||
@@ -12,0 +16,0 @@ * Because its just the multihash, it doesn't have any infomation regarding the encoding and hashing algorithm. These parts are implicit. |
{ | ||
"name": "@cowprotocol/app-data", | ||
"version": "1.1.0", | ||
"version": "1.2.2", | ||
"description": "CowProtocol AppData schema definitions", | ||
@@ -5,0 +5,0 @@ "type": "module", |
@@ -39,3 +39,3 @@ # @cowprotocol/app-data | ||
const { cid, appDataHex } = await metadataApi.appDataToCid(appDataDoc) | ||
const { cid, appDataHex, appDataContent } = await metadataApi.appDataToCid(appDataDoc) | ||
@@ -136,1 +136,34 @@ // 💡🐮 You should use appDataHex as the appData value in the CoW Order. "cid" Identifies the metadata associated to the CoW order in IPFS | ||
``` | ||
# Contribute | ||
Fork the repo so you can create a new PR. Then: | ||
1. Add a new version for the schema using the [semver](https://semver.org/) convention | ||
- Just duplicate the latest version i.e. `src/schemas/<old-version>.json` to `src/schemas/<new-version>.json` | ||
2. If you are adding a new meta-data | ||
- We create one directory per schema, so we can keep track of all versions. Create the directory and initial schema definition: `<meta-data-name>/v0.1.0.json` | ||
- Add it to the main schema you just created in step 1: `"$ref": "<meta-data-name>/v0.1.0.json#"`. | ||
- Example: https://github.com/cowprotocol/app-data/pull/44/files#diff-7f7a61b478245dfda004f64bd68ac55ef68cbeb5d6d90d77e1cdbd2b7e1212b8R56 | ||
3. If you are modifying an existing meta-data | ||
- Version it using the [semver](https://semver.org/) convention | ||
- You will need to create the new file for the meta-data schema: `<meta-data-name>/<new-version>.json` | ||
- Update it in the main schema you just created in step 1: Set it to `"<meta-data-name>": { "$ref": "<meta-data-name>/<new-version>.json#" }` | ||
- 🚨 IMPORTANT: Don't forget to add the exported constant with the latest version in: | ||
- https://github.com/cowprotocol/app-data/blob/widget-metadata/src/scripts/compile.ts#L68 | ||
4. Generate the typescript types | ||
- Run `yarn build` | ||
4. Make a test focusing on the new or modified meta-data: | ||
- https://github.com/cowprotocol/app-data/pull/44/files#diff-e755a2ecce42f09829d5c7dc1de8853d1d00ef56eaadc2709601c87b9be8ddfbR556 | ||
- Don't forget to use the right version of the schema in your test: https://github.com/cowprotocol/app-data/pull/44/files#diff-e755a2ecce42f09829d5c7dc1de8853d1d00ef56eaadc2709601c87b9be8ddfbR11 | ||
5. Create the PR and document it together with the motivation for the changes |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
188127
48
1257
168