A simple yet powerful HTTP metadata and assets provider for NFT collections using Symfony

Overview

Safe NFT Metadata Provider

A simple yet powerful HTTP metadata and assets provider for NFT collections using Symfony.

Disclaimer

This project was created for educational purposes, please refer to the LICENCE file for further information.

Main features

  • hide metadata for unminted tokens
  • update the total supply in many ways (manually, OpenSea API, Web3 or even your own implementation...)
  • shuffle a range of tokens without messing around with your original metadata (e.g. owning a half-minted collection? We have you covered! Keep you tokens safe with a zero-downtime solution and keep snipers away)
  • powerful collection management tools built-in (shuffle tokens, update metadata, etc.)
  • customizable to fit your needs
  • easy and strong deployment options (ranging from the newbie to the expert)
  • multiple storage options (local, S3 or your own implementation...)
  • open-source (for everyone, forever)

Meant for decentralization

This solution provides a fair minting experience for everyone. Use it during the minting stage, then move your collection back to a decentralized storage using the included tools.

YouTube tutorials

Deployment suggestions

We suggest deploying this app using DigitalOcean, behind a strong CDN network like CloudFlare.

By using the following referral link you will be given a 100$ credit on DigitalOcean: https://m.do.co/c/bcc172152095

You can also do a one-click deployment on DigitalOcean:

Deploy to DO

Comments
  • Runetime logs error?

    Runetime logs error?

    Hi, followed the youtube guide step by step, the only difference is that i chose Amsterdam instead of Frankfurt.. So everything is deployed and running but Digitalocean app cant open the url for the json files, cant view them. When it requests get files this is what the logs show: [metadata-provider] [2022-04-15 09:49:42] {"message":"Matched route \"get_metadata\".","context":{"route":"get_metadata","route_parameters":{"_route":"get_metadata","_format":"json","_controller":"App\\Controller\\MetadataController","tokenId":"1"},"request_uri":"http://nftslots-app-7b5lb.ondigitalocean.app/metadata/1.json","method":"GET"},"level":200,"level_name":"INFO","channel":"request","datetime":"2022-04-15T09:49:42.341699+00:00","extra":{}} [metadata-provider] [2022-04-15 09:49:42] {"message":"Checking for authenticator support.","context":{"firewall_name":"main","authenticators":0},"level":100,"level_name":"DEBUG","channel":"security","datetime":"2022-04-15T09:49:42.342362+00:00","extra":{}} [metadata-provider] [2022-04-15 09:49:42] {"message":"Lock acquired, now computing item \"cached_total_supply_provider.total_supply\"","context":{"key":"cached_total_supply_provider.total_supply"},"level":200,"level_name":"INFO","channel":"cache","datetime":"2022-04-15T09:49:42.405764+00:00","extra":{}} [metadata-provider] [2022-04-15 09:49:42] {"message":"Uncaught PHP Exception Exception: \"msgData must be a unprefixed hex value.\" at /workspace/vendor/digitaldonkey/ethereum-php/src/Abi.php line 93","context":{"exception":{"class":"Exception","message":"msgData must be a unprefixed hex value.","code":0,"file":"/workspace/vendor/digitaldonkey/ethereum-php/src/Abi.php:93"}},"level":500,"level_name":"CRITICAL","channel":"request","datetime":"2022-04-15T09:49:42.801227+00:00","extra":{}} [metadata-provider] [2022-04-15 09:49:42] 10.244.7.85 - - [15/Apr/2022:09:49:42 +0000] "GET /metadata/1.json HTTP/1.1" 500 135 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36

    Also noticed the runtime log keeps running - 408 - logs, is that some kind of error? Never ending loop: [metadata-provider] [2022-04-15 09:46:40] 10.244.25.171 - - [15/Apr/2022:09:46:39 +0000] "-" 408 - "-" "- [metadata-provider] [2022-04-15 09:46:50] 10.244.5.132 - - [15/Apr/2022:09:46:49 +0000] "-" 408 - "-" "- [metadata-provider] [2022-04-15 09:46:50] 10.244.25.171 - - [15/Apr/2022:09:46:49 +0000] "-" 408 - "-" "- [metadata-provider] [2022-04-15 09:47:00] 10.244.5.132 - - [15/Apr/2022:09:46:59 +0000] "-" 408 - "-" "- [metadata-provider] [2022-04-15 09:47:00] 10.244.25.171 - - [15/Apr/2022:09:46:59 +0000] "-" 408 - "-" "- [metadata-provider] [2022-04-15 09:47:10] 10.244.5.132 - - [15/Apr/2022:09:47:09 +0000] "-" 408 - "-" "- [metadata-provider] [2022-04-15 09:47:10] 10.244.25.171 - - [15/Apr/2022:09:47:09 +0000] "-" 408 - "-" "- [metadata-provider] [2022-04-15 09:47:20] 10.244.5.132 - - [15/Apr/2022:09:47:19 +0000] "-" 408 - "-" "- [metadata-provider] [2022-04-15 09:47:20] 10.244.25.171 - - [15/Apr/2022:09:47:19 +0000] "-" 408 - "-" "- [metadata-provider] [2022-04-15 09:47:30] 10.244.5.132 - - [15/Apr/2022:09:47:29 +0000] "-" 408 - "-" "- [metadata-provider] [2022-04-15 09:47:30] 10.244.25.171 - - [15/Apr/2022:09:47:29 +0000] "-" 408 - "-" "- [metadata-provider] [2022-04-15 09:47:40] 10.244.5.132 - - [15/Apr/2022:09:47:39 +0000] "-" 408 - "-" "- [metadata-provider] [2022-04-15 09:47:40] 10.244.25.171 - - [15/Apr/2022:09:47:39 +0000] "-" 408 - "-" "- [metadata-provider] [2022-04-15 09:47:50] 10.244.5.132 - - [15/Apr/2022:09:47:49 +0000] "-" 408 - "-" "- [metadata-provider] [2022-04-15 09:47:50] 10.244.25.171 - - [15/Apr/2022:09:47:49 +0000] "-" 408 - "-" "- [metadata-provider] [2022-04-15 09:48:00] 10.244.5.132 - - [15/Apr/2022:09:47:59 +0000] "-" 408 - "-" "- [metadata-provider] [2022-04-15 09:48:00] 10.244.25.171 - - [15/Apr/2022:09:47:59 +0000] "-" 408 - "-" "- [metadata-provider] [2022-04-15 09:48:10] 10.244.5.132 - - [15/Apr/2022:09:48:09 +0000] "-" 408 - "-" "- [metadata-provider] [2022-04-15 09:48:10] 10.244.25.171 - - [15/Apr/2022:09:48:09 +0000] "-" 408 - "-" "- [metadata-provider] [2022-04-15 09:48:20] 10.244.5.132 - - [15/Apr/2022:09:48:19 +0000] "-" 408 - "-" "- [metadata-provider] [2022-04-15 09:48:20] 10.244.25.171 - - [15/Apr/2022:09:48:19 +0000] "-" 408 - "-" "- [metadata-provider] [2022-04-15 09:48:30] 10.244.5.132 - - [15/Apr/2022:09:48:29 +0000] "-" 408 - "-" "- [metadata-provider] [2022-04-15 09:48:30] 10.244.25.171 - - [15/Apr/2022:09:48:29 +0000] "-" 408 - "-" "- [metadata-provider] [2022-04-15 09:48:40] 10.244.5.132 - - [15/Apr/2022:09:48:39 +0000] "-" 408 - "-" "- [metadata-provider] [2022-04-15 09:48:40] 10.244.25.171 - - [15/Apr/2022:09:48:39 +0000] "-" 408 - "-" "- [metadata-provider] [2022-04-15 09:48:50] 10.244.5.132 - - [15/Apr/2022:09:48:49 +0000] "-" 408 - "-" "- [metadata-provider] [2022-04-15 09:48:50] 10.244.25.171 - - [15/Apr/2022:09:48:49 +0000] "-" 408 - "-" "-

    Please help me.

    opened by M1lfsh4k3 11
  • v2 beta Issues when copying data from private to public

    v2 beta Issues when copying data from private to public

    I've check on my environment variable to see if all of the values we're in the same format but throws an error when copying the data from private to public folder

    [metadata-provider] [2022-06-10 10:45:37] $ node dist/index.js
    [metadata-provider] [2022-06-10 10:45:38] Revealing "Asset" for token 1...
    [metadata-provider] [2022-06-10 10:45:38] Error copying "Asset" for token 1.
    [metadata-provider] [2022-06-10 10:45:38] NoSuchKey: null
    [metadata-provider] [2022-06-10 10:45:38]     at Request.extractError (/workspace/node_modules/aws-sdk/lib/services/s3.js:711:35)
    [metadata-provider] [2022-06-10 10:45:38]     at Request.callListeners (/workspace/node_modules/aws-sdk/lib/sequential_executor.js:106:20)
    [metadata-provider] [2022-06-10 10:45:38]     at Request.emit (/workspace/node_modules/aws-sdk/lib/sequential_executor.js:78:10)
    [metadata-provider] [2022-06-10 10:45:38]     at Request.emit (/workspace/node_modules/aws-sdk/lib/request.js:686:14)
    [metadata-provider] [2022-06-10 10:45:38]     at Request.transition (/workspace/node_modules/aws-sdk/lib/request.js:22:10)
    [metadata-provider] [2022-06-10 10:45:38]     at AcceptorStateMachine.runTo (/workspace/node_modules/aws-sdk/lib/state_machine.js:14:12)
    [metadata-provider] [2022-06-10 10:45:38]     at /workspace/node_modules/aws-sdk/lib/state_machine.js:26:10
    [metadata-provider] [2022-06-10 10:45:38]     at Request.<anonymous> (/workspace/node_modules/aws-sdk/lib/request.js:38:9)
    [metadata-provider] [2022-06-10 10:45:38]     at Request.<anonymous> (/workspace/node_modules/aws-sdk/lib/request.js:688:12)
    [metadata-provider] [2022-06-10 10:45:38]     at Request.callListeners (/workspace/node_modules/aws-sdk/lib/sequential_executor.js:116:18) {
    [metadata-provider] [2022-06-10 10:45:38]   code: 'NoSuchKey',
    [metadata-provider] [2022-06-10 10:45:38]   region: null,
    [metadata-provider] [2022-06-10 10:45:38]   time: 2022-06-10T10:45:38.984Z,
    [metadata-provider] [2022-06-10 10:45:38]   requestId: 'tx00000000000002b0fca2c-0062a320d2-319989f1-nyc3c',
    [metadata-provider] [2022-06-10 10:45:38]   extendedRequestId: undefined,
    [metadata-provider] [2022-06-10 10:45:38]   cfId: undefined,
    [metadata-provider] [2022-06-10 10:45:38]   statusCode: 404,
    [metadata-provider] [2022-06-10 10:45:38]   retryable: false,
    [metadata-provider] [2022-06-10 10:45:38]   retryDelay: 74.05141726685349
    [metadata-provider] [2022-06-10 10:45:38] }
    [metadata-provider] [2022-06-10 10:45:39] Revealing "Metadata" for token 1...
    [metadata-provider] [2022-06-10 10:45:39] Error copying "Metadata" for token 1.
    [metadata-provider] [2022-06-10 10:45:39] NoSuchKey: null
    [metadata-provider] [2022-06-10 10:45:39]     at Request.extractError (/workspace/node_modules/aws-sdk/lib/services/s3.js:711:35)
    [metadata-provider] [2022-06-10 10:45:39]     at Request.callListeners (/workspace/node_modules/aws-sdk/lib/sequential_executor.js:106:20)
    [metadata-provider] [2022-06-10 10:45:39]     at Request.emit (/workspace/node_modules/aws-sdk/lib/sequential_executor.js:78:10)
    [metadata-provider] [2022-06-10 10:45:39]     at Request.emit (/workspace/node_modules/aws-sdk/lib/request.js:686:14)
    [metadata-provider] [2022-06-10 10:45:39]     at Request.transition (/workspace/node_modules/aws-sdk/lib/request.js:22:10)
    [metadata-provider] [2022-06-10 10:45:39]     at AcceptorStateMachine.runTo (/workspace/node_modules/aws-sdk/lib/state_machine.js:14:12)
    [metadata-provider] [2022-06-10 10:45:39]     at /workspace/node_modules/aws-sdk/lib/state_machine.js:26:10
    [metadata-provider] [2022-06-10 10:45:39]     at Request.<anonymous> (/workspace/node_modules/aws-sdk/lib/request.js:38:9)
    [metadata-provider] [2022-06-10 10:45:39]     at Request.<anonymous> (/workspace/node_modules/aws-sdk/lib/request.js:688:12)
    [metadata-provider] [2022-06-10 10:45:39]     at Request.callListeners (/workspace/node_modules/aws-sdk/lib/sequential_executor.js:116:18) {
    [metadata-provider] [2022-06-10 10:45:39]   code: 'NoSuchKey',
    [metadata-provider] [2022-06-10 10:45:39]   region: null,
    [metadata-provider] [2022-06-10 10:45:39]   time: 2022-06-10T10:45:39.040Z,
    [metadata-provider] [2022-06-10 10:45:39]   requestId: 'tx0000000000000a3e87e0b-0062a320d3-3199e787-nyc3c',
    [metadata-provider] [2022-06-10 10:45:39]   extendedRequestId: undefined,
    [metadata-provider] [2022-06-10 10:45:39]   cfId: undefined,
    [metadata-provider] [2022-06-10 10:45:39]   statusCode: 404,
    [metadata-provider] [2022-06-10 10:45:39]   retryable: false,
    [metadata-provider] [2022-06-10 10:45:39]   retryDelay: 59.67148001329863
    [metadata-provider] [2022-06-10 10:45:39] }
    

    image folder structure image

    opened by gabmacinas 9
  • Error when deploying to Digital Ocean

    Error when deploying to Digital Ocean

    After hitting "Deploy to Digital Ocean" the website shows "error when trying to create the app" and gives the option to start over. Start-over takes you to a wizard with the basic information of the app; the app deploys successfully but all the env variables are lost... I'd assume it's just a matter of versioning?

    bug 
    opened by jvel07 7
  • Is this necessary?

    Is this necessary?

    I'm confused. Why would you have to hide the metadata prior to it being revealed?

    1. Couldn't you just create a list of metadata for the revealed URI and NOT upload the revealed metadata until you'r ready to reveal your collection? 2.Use the art engine to generate new metadata and upload that to IPFS, then point your URI to the uploaded metadata which would just be a list of jason files depending on your total supply? 3.Just not upload the revealed metadata.

    Couldn't you just login to etherscan and use the contract function to change the reveal URI?

    Is this process intended for people who have not done any of the previous steps or am I missing some sort of compatibility issues when communicating with truffle/hardhat and the dapp?

    Sorry, just trying to understand why this is important. After the reveal, it's really up to the holder what they want to do with the NFT they have minted and showing rarity to the public is kinda important to display publicly that you do plan on awarding those who minted during the whitelist or presale.

    opened by Erickx0 4
  • Add COLLECTION_FIRST_INDEX env variable for a better isValidTokenId

    Add COLLECTION_FIRST_INDEX env variable for a better isValidTokenId

    Hi,

    The isValidTokenId does not work for collection whose first token ID is 0 because of the $tokenId > 0 check. Since more and more collections are starting to use ERC721A and the token count starts with 0 I think it adding a COLLECTION_FIRST_INDEX variable is useful.

    This PR adds a COLLECTION_FIRST_INDEX with a default value of 1. The idea was to avoid hard-coding the values 0 or 1 as a first index that is why I made a generic variable that will work with any value. If you think the approach or the variable naming needs improvement let me know.

    opened by narghev 3
  • Not compatible with ERC721A

    Not compatible with ERC721A

    I have tested this and it works well with ERC721 and tokens starting at 1 but if it is ERC721A and token ids start at 0 it doesn't read the supply for some reason. Always returns hidden for 0 and the rest are errors.

    invalid 
    opened by R-qanawati 3
  • URI for json and image is generating extra slashes

    URI for json and image is generating extra slashes

    Hi team, first and foremost thank you for your help with this! When looking at the json metadata, I noticed the image URI has extra slashes and causes the link to break.

    For example: "image":http://app-dada.ondigitalocean.app/asset/1.png

    I would love to tip you ETH if you can help resolve this ASAP. Thank you!

    duplicate 
    opened by CXZII 3
  • 500 Internal Server Error

    500 Internal Server Error

    I am getting this error. I have deployed this exactly how the video shows and I think may be an issue with the app connecting with spaces. I have verified all files are in Spaces and I can connect through cyberduck. With that being said, I also checked the 16 variables and verify S3_FS_DRIVER_BUCKET_NAME field. Before I had just the name. This time, I tried with a / following the bucket name. That didn't work either.

    [metadata-provider] [2022-02-20 22:09:51] DOCUMENT_ROOT changed to 'public/' [metadata-provider] [2022-02-20 22:09:51] Assuming 512MB of RAM [metadata-provider] [2022-02-20 22:09:51] PHP memory_limit is 128M Bytes [metadata-provider] [2022-02-20 22:09:52] Starting php-fpm with 4 workers... [metadata-provider] [2022-02-20 22:09:53] Starting httpd... [metadata-provider] [2022-02-20 22:09:54] Application ready for connections on port 8080. [metadata-provider] [2022-02-20 22:10:48] - - [20/Feb/2022:22:10:47 +0000] "-" 408 - "-" "- [metadata-provider] [2022-02-20 22:10:58] - - [20/Feb/2022:22:10:57 +0000] "-" 408 - "-" "- [metadata-provider] [2022-02-20 22:11:08] - - [20/Feb/2022:22:11:07 +0000] "-" 408 - "-" "- [metadata-provider] [2022-02-20 22:11:18] - - [20/Feb/2022:22:11:17 +0000] "-" 408 - "-" "- [metadata-provider] [2022-02-20 22:11:28] - - [20/Feb/2022:22:11:27 +0000] "-" 408 - "-" "- [metadata-provider] [2022-02-20 22:11:31] {"message":"Matched route "root".","context":{"route":"root","route_parameters":{"_route":"root","_controller":"App\Controller\RootController"},"request_uri":"http://MYURI.ondigitalocean.app/","method":"GET"},"level":200,"level_name":"INFO","channel":"request","datetime":"2022-02-20T22:11:30.789357+00:00","extra":{}} [metadata-provider] [2022-02-20 22:11:31] {"message":"Checking for authenticator support.","context":{"firewall_name":"main","authenticators":0},"level":100,"level_name":"DEBUG","channel":"security","datetime":"2022-02-20T22:11:30.860677+00:00","extra":{}} [metadata-provider] [2022-02-20 22:11:31] {"message":"Deprecated: Implicit conversion from float 86980.96499999508 to int loses precision","context":{"exception":{"class":"ErrorException","message":"Deprecated: Implicit conversion from float 86980.96499999508 to int loses precision","code":0,"file":"/workspace/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php:143"}},"level":200,"level_name":"INFO","channel":"php","datetime":"2022-02-20T22:11:31.041866+00:00","extra":{}} [metadata-provider] [2022-02-20 22:11:31] {"message":"Deprecated: Implicit conversion from float 178986.78900000674 to int loses precision","context":{"exception":{"class":"ErrorException","message":"Deprecated: Implicit conversion from float 178986.78900000674 to int loses precision","code":0,"file":"/workspace/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php:143"}},"level":200,"level_name":"INFO","channel":"php","datetime":"2022-02-20T22:11:31.139344+00:00","extra":{}} [metadata-provider] [2022-02-20 22:11:31] {"message":"Uncaught PHP Exception Aws\S3\Exception\S3Exception: "Error executing "GetObject" on "[BUCKET]%2F/abi.json"; AWS HTTP error: cURL error 6: Could not resolve host: [bucket]%2F (see https://curl.haxx.se/libcurl/c/libcurl-errors.html)" at /workspace/vendor/aws/aws-sdk-php/src/WrappedHttpHandler.php line 195","context":{"exception":{"class":"Aws\S3\Exception\S3Exception","message":"Error executing "GetObject" on "[bucket]%2F/abi.json"; AWS HTTP error: cURL error 6: Could not resolve host: [bucket]%2F (see https://curl.haxx.se/libcurl/c/libcurl-errors.html)","code":0,"file":"/workspace/vendor/aws/aws-sdk-php/src/WrappedHttpHandler.php:195","previous":{"class":"GuzzleHttp\Exception\ConnectException","message":"cURL error 6: Could not resolve host: [bucket]%2F (see https://curl.haxx.se/libcurl/c/libcurl-errors.html)","code":0,"file":"/workspace/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php:200"}}},"level":500,"level_name":"CRITICAL","channel":"request","datetime":"2022-02-20T22:11:31.330508+00:00","extra":{}} [metadata-provider] [2022-02-20 22:11:32] - - [20/Feb/2022:22:11:30 +0000] "GET / HTTP/1.1" 500 831 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36 [metadata-provider] [2022-02-20 22:11:38] - - [20/Feb/2022:22:11:37 +0000] "-" 408 - "-" "-

    feedback requested 
    opened by alcivarv 3
  • Hidden metadata fails with 500 Internal Server Error

    Hidden metadata fails with 500 Internal Server Error

    Hey guys! Just updating here. There is an issue with the hidden metadata file structure. It basically fails with this error when you poll the metadata of an unminted NFT:

    {"type":"https://tools.ietf.org/html/rfc2616#section-10","title":"An error occurred","status":500,"detail":"Internal Server Error"}

    For minted ones it works great!! I followed all the video instructions as well. The folder in the space for hidden metadata is called "hidden" and inside there are the hidden.json and hidden.png files.

    I also pulled these logs. You can see a "Syntax Error".

    [metadata-provider] [2022-02-13 05:48:56] {"message":"Uncaught PHP Exception Nette\Utils\JsonException: "Syntax error" at /workspace/vendor/nette/utils/src/Utils/Json.php line 58","context":{"exception":{"class":"Nette\Utils\JsonException","message":"Syntax error","code":4,"file":"/workspace/vendor/nette/utils/src/Utils/Json.php:58"}},"level":500,"level_name":"CRITICAL","channel":"request","datetime":"2022-02-13T05:48:56.011170+00:00","extra":{}}

    opened by nalonsoxcode 3
  • Misformed URL when replacing image URI

    Misformed URL when replacing image URI

    Hello! Great app. Issue with URL replacement

    Looks like the PHP is replacing the image parameter in the json metadata with extra characters. Specifically here’s an example output

    http:\/\/mydigital-app.ondigitalocean.app\/asset\/1.png

    and the \/ now means that the image link isn't getting parsed correctly by the browser (goes to //asset//1.png instead of /asset/1.png

    I couldn’t see an obvious place where this occurs, so wasn’t sure if it’s a Symfony routing thing? Maybe in UriUpdater.php? Thanks I’m advance for any help

    [EDIT] Still no luck, but I've been trying to isolate where this happens and it seems to be in a couple of places, but main one is CollectionManager.php with the function

         * @return array<string, mixed>
         */
        public function getMetadata(int $tokenId, string $assetUri = null): array
        {
            $metadata = $this->collectionFilesystemDriver->getMetadata($this->getMappedTokenId($tokenId));
    
            foreach ($this->metadataUpdaters as $metadataUpdater) {
                $metadataUpdater->updateMetadata(
                    $metadata,
                    $tokenId,
                    $assetUri ?? $this->urlGenerator->generate(
                        RouteName::GET_ASSET,
                        [
                            'tokenId' => $tokenId,
                            '_format' => $this->collectionFilesystemDriver->getAssetsExtension(),
                        ],
                        UrlGeneratorInterface::ABSOLUTE_URL,
                    ),
                );
            }
    
            return $metadata;
        }
    

    urlGenerator and generate() from from Symfony and I have no idea why RouteName::GET_ASSET would add those additional slashes - but perhaps something weird going on with GET_ASSET?

    Any help appreciated.

    opened by kokako-loon 2
  • Is there a way to mitigate a DDoS attack via the App

    Is there a way to mitigate a DDoS attack via the App

    The server responded Http Error 500 since my app was bombarded by a ton of request, tried upgrading the App to a bigger plan but it doesn't help either. tried also contacting support but they said that they have security implementations as well but it didn't help too

    opened by fumulutanapay 2
Releases(2.0.1)
  • 2.0.1(Aug 16, 2022)

    From now on, one-click deployments will always point to the latest stable release. Each major version has its own dedicated branch so it's also possible to deploy older versions.

    This release doesn't include any code change.

    What's Changed

    • Pointing to stable branch instead of main by @liarco in https://github.com/hashlips-lab/safe-nft-metadata-provider/pull/55
    • Bumping version number to 2.0.1 by @liarco in https://github.com/hashlips-lab/safe-nft-metadata-provider/pull/56

    Full Changelog: https://github.com/hashlips-lab/safe-nft-metadata-provider/compare/2.0.0...2.0.1

    Source code(tar.gz)
    Source code(zip)
  • 1.0.1(Aug 16, 2022)

    ⚠️ This release is meant for people who want to continue using v1, but it won't be maintained anymore. If you can, I highly recommend using the latest major version instead. ⚠️

    What's Changed

    • Adding the first video tutorial to the README file by @liarco in https://github.com/hashlips-lab/safe-nft-metadata-provider/pull/18
    • Adding YouTube video to README file by @liarco in https://github.com/hashlips-lab/safe-nft-metadata-provider/pull/19
    • Updating dependencies for improved security by @liarco in https://github.com/hashlips-lab/safe-nft-metadata-provider/pull/21
    • Fixing broken template validation when trying to update non-string values by @liarco in https://github.com/hashlips-lab/safe-nft-metadata-provider/pull/25
    • Fixing assets extension in exported metadata by @liarco in https://github.com/hashlips-lab/safe-nft-metadata-provider/pull/27
    • Creating a dedicated branch for v1 by @liarco in https://github.com/hashlips-lab/safe-nft-metadata-provider/pull/54

    Full Changelog: https://github.com/hashlips-lab/safe-nft-metadata-provider/compare/1.0.0...1.0.1

    Source code(tar.gz)
    Source code(zip)
  • 2.0.0(Aug 11, 2022)

    What's Changed

    • Adding the first video tutorial to the README file by @liarco in https://github.com/hashlips-lab/safe-nft-metadata-provider/pull/18
    • Adding YouTube video to README file by @liarco in https://github.com/hashlips-lab/safe-nft-metadata-provider/pull/19
    • Updating dependencies for improved security by @liarco in https://github.com/hashlips-lab/safe-nft-metadata-provider/pull/21
    • Fixing broken template validation when trying to update non-string values by @liarco in https://github.com/hashlips-lab/safe-nft-metadata-provider/pull/25
    • Fixing assets extension in exported metadata by @liarco in https://github.com/hashlips-lab/safe-nft-metadata-provider/pull/27
    • Removing ref code from README.md by @liarco in https://github.com/hashlips-lab/safe-nft-metadata-provider/pull/45
    • Version 2.0.0 by @liarco in https://github.com/hashlips-lab/safe-nft-metadata-provider/pull/48
    • Updating deployment references for v2 by @liarco in https://github.com/hashlips-lab/safe-nft-metadata-provider/pull/52
    • Cleaning up README.md by @liarco in https://github.com/hashlips-lab/safe-nft-metadata-provider/pull/53

    Full Changelog: https://github.com/hashlips-lab/safe-nft-metadata-provider/compare/1.0.0...2.0.0

    Source code(tar.gz)
    Source code(zip)
  • 1.0.0(Feb 5, 2022)

    What's Changed

    • New implementation by @liarco in https://github.com/hashlips-lab/safe-nft-metadata-provider/pull/1
    • Improving build commands implementation by @liarco in https://github.com/hashlips-lab/safe-nft-metadata-provider/pull/2
    • Implementing custom pages by @liarco in https://github.com/hashlips-lab/safe-nft-metadata-provider/pull/3
    • Replacing the TotalSypplyController with a dedicated CLI command by @liarco in https://github.com/hashlips-lab/safe-nft-metadata-provider/pull/4
    • Removing unused dependencies and fixing total supply cache by @liarco in https://github.com/hashlips-lab/safe-nft-metadata-provider/pull/5
    • Update README.md by @liarco in https://github.com/hashlips-lab/safe-nft-metadata-provider/pull/6
    • Adding full support for assets' extension by @liarco in https://github.com/hashlips-lab/safe-nft-metadata-provider/pull/7
    • Enabling "deploy on push" feature in App Platform template by @liarco in https://github.com/hashlips-lab/safe-nft-metadata-provider/pull/8
    • Better naming (build -> export) by @liarco in https://github.com/hashlips-lab/safe-nft-metadata-provider/pull/9
    • Making the example metadata updater generic by @liarco in https://github.com/hashlips-lab/safe-nft-metadata-provider/pull/10
    • Adding a security flag to mark the collection as revealed by @liarco in https://github.com/hashlips-lab/safe-nft-metadata-provider/pull/11
    • Fixing broken DO deployment template by @liarco in https://github.com/hashlips-lab/safe-nft-metadata-provider/pull/12
    • HashLips rebranding by @liarco in https://github.com/hashlips-lab/safe-nft-metadata-provider/pull/13
    • Improving export performances by @liarco in https://github.com/hashlips-lab/safe-nft-metadata-provider/pull/14
    • Implementing code-less metadata updater and updating dependencies by @liarco in https://github.com/hashlips-lab/safe-nft-metadata-provider/pull/15
    • Fixing DigitalOcean template by @liarco in https://github.com/hashlips-lab/safe-nft-metadata-provider/pull/16
    • Enabling DigitalOcean deployment without advanced GitHub authentication by @liarco in https://github.com/hashlips-lab/safe-nft-metadata-provider/pull/17

    New Contributors

    • @liarco made their first contribution in https://github.com/hashlips-lab/safe-nft-metadata-provider/pull/1

    Full Changelog: https://github.com/hashlips-lab/safe-nft-metadata-provider/commits/1.0.0

    Source code(tar.gz)
    Source code(zip)
Owner
HashLips Lab
We come together to have fun, educate and build on the blockchain.
HashLips Lab
Zenscrape package is a simple PHP HTTP client-provider that makes it easy to parsing site-pages

Zenscrape package is a simple PHP HTTP client-provider that makes it easy to parsing site-pages

Andrei 3 Jan 17, 2022
Declarative HTTP Clients using Guzzle HTTP Library and PHP 8 Attributes

Waffler How to install? $ composer require waffler/waffler This package requires PHP 8 or above. How to test? $ composer phpunit Quick start For our e

Waffler 3 Aug 26, 2022
The HttpClient component provides powerful methods to fetch HTTP resources synchronously or asynchronously.

HttpClient component The HttpClient component provides powerful methods to fetch HTTP resources synchronously or asynchronously. Resources Documentati

Symfony 1.7k Jan 6, 2023
PHP Curl - This package can send HTTP requests to a given site using Curl.

PHP Curl This package can send HTTP requests to a given site using Curl. It provides functions that can take several types of parameters to configure

Mehmet Can 1 Oct 27, 2022
A simple PHP Toolkit to parallel generate combinations, save and use the generated terms to brute force attack via the http protocol.

Brutal A simple PHP Toolkit to parallel generate combinations, save and use the generated terms to apply brute force attack via the http protocol. Bru

Jean Carlo de Souza 4 Jul 28, 2021
A simple script i made that generate a valid http(s) proxy in json format with its geo-location info

Gev Proxy Generator GPG is a simple PHP script that generate a proxy using free services on the web, the proxy is HTTP(s) and it generate it in json f

gev 1 Nov 15, 2021
A HTTP Cache for Guzzle 6. It's a simple Middleware to be added in the HandlerStack.

A HTTP Cache for Guzzle 6. It's a simple Middleware to be added in the HandlerStack.

Kevin Robatel 371 Dec 17, 2022
Simple HTTP cURL client for PHP 7.1+ based on PSR-18

Simple HTTP cURL client for PHP 7.1+ based on PSR-18 Installation composer require sunrise/http-client-curl QuickStart composer require sunrise/http-f

Sunrise // PHP 15 Sep 5, 2022
A simple OOP wrapper to work with HTTP headers in PHP

Headers This package is to allow you to create HTTP Headers in PHP, in a simple and reliable way. Installation composer require http-php/headers Usage

null 5 Aug 9, 2022
Requests for PHP is a humble HTTP request library. It simplifies how you interact with other sites and takes away all your worries.

Requests for PHP Requests is a HTTP library written in PHP, for human beings. It is roughly based on the API from the excellent Requests Python librar

null 3.5k Dec 31, 2022
Record your test suite's HTTP interactions and replay them during future test runs for fast, deterministic, accurate tests.

This is a port of the VCR Ruby library to PHP. Record your test suite's HTTP interactions and replay them during future test runs for fast, determinis

php-vcr 1.1k Dec 23, 2022
Requests for PHP is a humble HTTP request library. It simplifies how you interact with other sites and takes away all your worries.

Requests for PHP Requests is a HTTP library written in PHP, for human beings. It is roughly based on the API from the excellent Requests Python librar

null 3.5k Dec 31, 2022
PHP Curl Class makes it easy to send HTTP requests and integrate with web APIs

PHP Curl Class: HTTP requests made easy PHP Curl Class makes it easy to send HTTP requests and integrate with web APIs. Installation Requirements Quic

null 3.1k Jan 5, 2023
Application for logging HTTP and DNS Requests

Request Logger Made by Adam Langley ( https://twitter.com/adamtlangley ) What is it? Request logger is a free and open source utility for logging HTTP

null 13 Nov 28, 2022
librestful is a virion for PocketMine servers that make easier, readable code and for async http requests.

librestful is a virion for PocketMine servers that make easier, readable code for async rest requests.

RedMC Network 17 Oct 31, 2022
Pushpin is a publish-subscribe server, supporting HTTP and WebSocket connections.

Pushpin and 1 million connections Pushpin is a publish-subscribe server, supporting HTTP and WebSocket connections. This repository contains instructi

Fanout 14 Jul 15, 2022
Composer package providing HTTP Methods, Status Codes and Reason Phrases for PHP

HTTP Enums For PHP 8.1 and above This package provides HTTP Methods, Status Codes and Reason Phrases as PHP 8.1+ enums All IANA registered HTTP Status

Alexander Pas 72 Dec 23, 2022
Event-driven, streaming HTTP client and server implementation for ReactPHP

HTTP Event-driven, streaming HTTP client and server implementation for ReactPHP. This HTTP library provides re-usable implementations for an HTTP clie

ReactPHP 640 Dec 29, 2022
The Library for HTTP Status Codes, Messages and Exception

This is a PHP library for HTTP status codes, messages and error exception. Within the library, HTTP status codes are available in classes based on the section they belong to. Click this link for more information.

Sabuhi Alizada 5 Sep 14, 2022