diff --git a/.github/actions/notify-slack-publish-status/action.yml b/.github/actions/notify-slack-publish-status/action.yml index 3a0160bca2..cf955af038 100644 --- a/.github/actions/notify-slack-publish-status/action.yml +++ b/.github/actions/notify-slack-publish-status/action.yml @@ -6,6 +6,9 @@ inputs: description: 'Message to send to Slack' required: true default: '' + webhook-url: + description: 'Slack incoming webhook URL' + required: true runs: using: 'node20' main: 'index.js' diff --git a/.github/actions/notify-slack-publish-status/index.js b/.github/actions/notify-slack-publish-status/index.js index b7cf9e8528..f3db3597ce 100644 --- a/.github/actions/notify-slack-publish-status/index.js +++ b/.github/actions/notify-slack-publish-status/index.js @@ -1,5 +1,5 @@ const core = require('@actions/core'); -const webhook = process.env.SDK_PUBLISH_SLACK_WEBHOOK; +const webhook = core.getInput('webhook-url'); const run = async () => { if (webhook) { diff --git a/.github/scripts/process-tutorials.sh b/.github/scripts/process-tutorials.sh index a723fdd400..3201bd223f 100755 --- a/.github/scripts/process-tutorials.sh +++ b/.github/scripts/process-tutorials.sh @@ -17,7 +17,7 @@ for PRODUCT in "${PRODUCTS[@]}"; do echo "Processing tutorials for $PRODUCT..." # Create _tutorials directory in docs repo if it doesn't exist - TUTORIALS_DIR="$DOCS_REPO_DIR/docs/main/example/zkEVM/$PRODUCT-examples/_tutorials" + TUTORIALS_DIR="$DOCS_REPO_DIR/docs/main/build/typescript/usage-guides/$PRODUCT" mkdir -p "$TUTORIALS_DIR" # Get all example apps for this product @@ -42,7 +42,7 @@ for PRODUCT in "${PRODUCTS[@]}"; do JSON_FILE="$EXAMPLES_ROOT/_parsed/${PRODUCT}-examples.json" if [ -f "$JSON_FILE" ]; then # Create directory for JSON file if it doesn't exist - JSON_DIR="$DOCS_REPO_DIR/docs/main/example/zkEVM/$PRODUCT-examples" + JSON_DIR="$DOCS_REPO_DIR/docs/main/build/typescript/usage-guides/$PRODUCT" mkdir -p "$JSON_DIR" # Copy JSON file diff --git a/.github/workflows/publish-docs.yaml b/.github/workflows/publish-docs.yaml index e8c84d9ff3..1a56e84371 100644 --- a/.github/workflows/publish-docs.yaml +++ b/.github/workflows/publish-docs.yaml @@ -127,9 +127,11 @@ jobs: uses: ./.github/actions/notify-slack-publish-status with: message: "✅ SDK reference documents published successfully - https://docs.immutable.com/sdk-references/ts-immutable-sdk/${{ env.VERSION }}/\n\n>*`${{ env.GITHUB_USER }}` Please ensure you and the team updated all Sample Code + Guides on the to reflect the change.*" - + webhook-url: ${{ secrets.SDK_PUBLISH_SLACK_WEBHOOK }} + - name: Notify SDK Slack Docs Publish Failure if: ${{ failure() && steps.docs_version_check.conclusion == 'success' }} uses: ./.github/actions/notify-slack-publish-status with: message: "❌ Failed to publish SDK reference documents. Please check the logs for more details." + webhook-url: ${{ secrets.SDK_PUBLISH_SLACK_WEBHOOK }} diff --git a/.github/workflows/publish-example-tutorials.yaml b/.github/workflows/publish-example-tutorials.yaml index 3727104444..a9e80f132e 100644 --- a/.github/workflows/publish-example-tutorials.yaml +++ b/.github/workflows/publish-example-tutorials.yaml @@ -25,7 +25,6 @@ jobs: uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 with: fetch-depth: 0 - ref: main - name: Checkout Docs Repo uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 @@ -33,7 +32,7 @@ jobs: repository: immutable/docs token: ${{ secrets.TS_IMMUTABLE_SDK_GITHUB_TOKEN }} path: imx-docs - ref: main + ref: DVR-295-docs-restructure - name: Setup environment variables run: | @@ -59,21 +58,39 @@ jobs: ./.github/scripts/process-tutorials.sh shell: bash - - name: Commit and Push Changes to Docs Repo + - name: Create Pull Request in Docs Repo + id: create_pr run: | cd "$CLONE_DIR" - # Check if there are changes to commit - if git status --porcelain | grep -q .; then - # Add all changes - git add . - - # Commit the changes - git commit -m "Update example app tutorials from SDK repo" - - # Push to the target branch - git push -u origin main - echo "Successfully pushed example app tutorial changes to docs repo" - else + if ! git status --porcelain | grep -q .; then echo "No changes to commit" + echo "pr_url=" >> $GITHUB_OUTPUT + exit 0 fi - shell: bash \ No newline at end of file + + BRANCH_NAME="chore/ts-sdk-docs-update-${{ github.run_id }}" + git checkout -b $BRANCH_NAME + + git add . + git commit -m "chore: example app usage guide updated" + git push -u origin $BRANCH_NAME + echo "Successfully pushed changes to docs repo on branch $BRANCH_NAME" + + PR_URL=$(gh pr create \ + --title "auto(ts-immutable-sdk): example app usage guide updated" \ + --body "Automated PR from ts-immutable-sdk to update tutorials. This is safe for anyone to approve and merge." \ + --base DVR-295-docs-restructure \ + --repo immutable/docs) + + echo "Successfully created PR in docs repo: $PR_URL" + echo "pr_url=${PR_URL}" >> $GITHUB_OUTPUT + env: + GITHUB_TOKEN: ${{ secrets.TS_IMMUTABLE_SDK_GITHUB_TOKEN }} + shell: bash + + - name: Notify Slack + if: steps.create_pr.outputs.pr_url != '' + uses: ./.github/actions/notify-slack-publish-status + with: + message: 'New automated TS SDK sample app tutorials PR is ready for review: ${{ steps.create_pr.outputs.pr_url }}' + webhook-url: ${{ secrets.SDK_DOCS_TUTORIALS_SLACK_WEBHOOK }} \ No newline at end of file diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index 7b1e16a107..a6bd615110 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -156,12 +156,14 @@ jobs: uses: ./.github/actions/notify-slack-publish-status with: message: "✅ ${{ github.triggering_actor }} successfully published SDK packages @ version ${{steps.release.outputs.RELEASE_NAME}} to NPM.\n\nhttps://www.npmjs.com/package/@imtbl/sdk/v/${{steps.release.outputs.RELEASE_NAME}}" + webhook-url: ${{ secrets.SDK_PUBLISH_SLACK_WEBHOOK }} - name: Notify SDK Slack Publish Failure if: ${{ failure() && (steps.npm_release.conclusion == 'failure') && env.DRY_RUN == 'false' }} uses: ./.github/actions/notify-slack-publish-status with: message: "❌ Failed to publish SDK version ${{steps.release.outputs.RELEASE_NAME}} to NPM. ${{ github.triggering_actor }} please check the logs for more details." + webhook-url: ${{ secrets.SDK_PUBLISH_SLACK_WEBHOOK }} - name: Wait for NPM @latest Update id: wait_for_npm_update diff --git a/examples/_parsed/checkout-examples.json b/examples/_parsed/checkout-examples.json index d954efa7dd..c52125318f 100644 --- a/examples/_parsed/checkout-examples.json +++ b/examples/_parsed/checkout-examples.json @@ -19,6 +19,7 @@ ], "product": "Checkout", "programming_language": "TypeScript", + "deprecated": false, "sidebar_order": 1 } }, @@ -44,6 +45,7 @@ ], "product": "Checkout", "programming_language": "TypeScript", + "deprecated": false, "sidebar_order": 4 } }, @@ -68,6 +70,7 @@ ], "product": "Checkout", "programming_language": "TypeScript", + "deprecated": false, "sidebar_order": 3 } }, @@ -92,6 +95,7 @@ ], "product": "Checkout", "programming_language": "TypeScript", + "deprecated": false, "sidebar_order": 2 } } diff --git a/examples/_parsed/contracts-examples.json b/examples/_parsed/contracts-examples.json index 38c21872df..adb958b715 100644 --- a/examples/_parsed/contracts-examples.json +++ b/examples/_parsed/contracts-examples.json @@ -20,6 +20,7 @@ ], "product": "Contracts", "programming_language": "TypeScript", + "deprecated": false, "sidebar_order": 1 } } diff --git a/examples/_parsed/orderbook-examples.json b/examples/_parsed/orderbook-examples.json index 0324c4a69f..02f2da6c20 100644 --- a/examples/_parsed/orderbook-examples.json +++ b/examples/_parsed/orderbook-examples.json @@ -23,6 +23,7 @@ ], "product": "Orderbook", "programming_language": "TypeScript", + "deprecated": false, "sidebar_order": 2 } }, @@ -49,6 +50,7 @@ ], "product": "Orderbook", "programming_language": "TypeScript", + "deprecated": false, "sidebar_order": 3 } }, @@ -74,6 +76,7 @@ ], "product": "Orderbook", "programming_language": "TypeScript", + "deprecated": false, "sidebar_order": 1 } }, @@ -99,6 +102,7 @@ ], "product": "Orderbook", "programming_language": "TypeScript", + "deprecated": false, "sidebar_order": 5 } }, @@ -125,6 +129,7 @@ ], "product": "Orderbook", "programming_language": "TypeScript", + "deprecated": false, "sidebar_order": 6 } }, @@ -150,6 +155,7 @@ ], "product": "Orderbook", "programming_language": "TypeScript", + "deprecated": false, "sidebar_order": 4 } } diff --git a/examples/_parsed/passport-examples.json b/examples/_parsed/passport-examples.json index 8d372e579a..3d1e650e7c 100644 --- a/examples/_parsed/passport-examples.json +++ b/examples/_parsed/passport-examples.json @@ -2,24 +2,29 @@ "logged-in-user-with-nextjs": { "tutorial": "logged-in-user-with-nextjs.md", "metadata": { - "title": "User Information after Logging In with NextJS", - "description": "Example of retrieving and displaying user data after authentication with Immutable Passport in a NextJS application", + "title": "Logged-in User with NextJS", + "description": "Example app demonstrating how to access user information and manage linked addresses after a user has logged in with Immutable Passport in a NextJS application", "keywords": [ "Immutable", "SDK", "Passport", "NextJS", + "Authentication", "User Info", "Linked Addresses", - "Tokens" + "Token Verification", + "Wallet Linking" ], "tech_stack": [ "NextJS", + "React", "TypeScript", - "React" + "Ethereum", + "MetaMask" ], "product": "Passport", "programming_language": "TypeScript", + "deprecated": false, "sidebar_order": 3 } }, @@ -46,6 +51,7 @@ ], "product": "Passport", "programming_language": "TypeScript", + "deprecated": false, "sidebar_order": 2 } }, @@ -73,6 +79,7 @@ ], "product": "Passport", "programming_language": "TypeScript", + "deprecated": false, "sidebar_order": 1 } }, @@ -98,6 +105,7 @@ ], "product": "Passport", "programming_language": "TypeScript", + "deprecated": true, "sidebar_order": 7 } }, @@ -126,6 +134,7 @@ ], "product": "Passport", "programming_language": "TypeScript", + "deprecated": false, "sidebar_order": 4 } }, @@ -150,6 +159,7 @@ ], "product": "Passport", "programming_language": "TypeScript", + "deprecated": false, "sidebar_order": 6 } }, @@ -173,6 +183,7 @@ ], "product": "Passport", "programming_language": "TypeScript", + "deprecated": false, "sidebar_order": 5 } } diff --git a/examples/checkout/sdk-connect-with-nextjs/metadata.json b/examples/checkout/sdk-connect-with-nextjs/metadata.json index 5b28a19569..933e2073c4 100644 --- a/examples/checkout/sdk-connect-with-nextjs/metadata.json +++ b/examples/checkout/sdk-connect-with-nextjs/metadata.json @@ -4,5 +4,6 @@ "keywords": ["Immutable", "SDK", "Checkout", "MetaMask", "Web3", "Connect Wallet"], "tech_stack": ["Next.js", "TypeScript", "Ethers.js"], "product": "Checkout", - "programming_language": "TypeScript" + "programming_language": "TypeScript", + "deprecated": false } \ No newline at end of file diff --git a/examples/checkout/sdk-gas-estimation-with-nextjs/metadata.json b/examples/checkout/sdk-gas-estimation-with-nextjs/metadata.json index 6f4e05ef49..b9e6f2e050 100644 --- a/examples/checkout/sdk-gas-estimation-with-nextjs/metadata.json +++ b/examples/checkout/sdk-gas-estimation-with-nextjs/metadata.json @@ -4,5 +4,6 @@ "keywords": ["Immutable", "SDK", "Gas Estimation", "Checkout", "MetaMask", "Next.js", "Swap", "Bridge"], "tech_stack": ["Next.js", "TypeScript", "ethers.js"], "product": "Checkout", - "programming_language": "TypeScript" + "programming_language": "TypeScript", + "deprecated": false } \ No newline at end of file diff --git a/examples/checkout/sdk-switch-network-with-nextjs/metadata.json b/examples/checkout/sdk-switch-network-with-nextjs/metadata.json index 64dc4cdf71..cf1dbfaa36 100644 --- a/examples/checkout/sdk-switch-network-with-nextjs/metadata.json +++ b/examples/checkout/sdk-switch-network-with-nextjs/metadata.json @@ -4,5 +4,6 @@ "keywords": ["Immutable", "SDK", "MetaMask", "Network Switching", "Checkout", "Wallet Connection"], "tech_stack": ["Next.js", "TypeScript", "React", "Ethers.js"], "product": "Checkout", - "programming_language": "TypeScript" + "programming_language": "TypeScript", + "deprecated": false } \ No newline at end of file diff --git a/examples/checkout/sdk-wallet-balance-with-nextjs/metadata.json b/examples/checkout/sdk-wallet-balance-with-nextjs/metadata.json index 55ad983f07..0836248223 100644 --- a/examples/checkout/sdk-wallet-balance-with-nextjs/metadata.json +++ b/examples/checkout/sdk-wallet-balance-with-nextjs/metadata.json @@ -4,5 +4,6 @@ "keywords": ["Immutable", "SDK", "Wallet", "Balance", "MetaMask", "Token", "NextJS"], "tech_stack": ["NextJS", "TypeScript", "ethers.js"], "product": "Checkout", - "programming_language": "TypeScript" + "programming_language": "TypeScript", + "deprecated": false } \ No newline at end of file diff --git a/examples/contracts/contract-interaction-with-viem/metadata.json b/examples/contracts/contract-interaction-with-viem/metadata.json index 608d276769..b20cc28331 100644 --- a/examples/contracts/contract-interaction-with-viem/metadata.json +++ b/examples/contracts/contract-interaction-with-viem/metadata.json @@ -16,5 +16,6 @@ "Immutable Contracts" ], "product": "Contracts", - "programming_language": "TypeScript" + "programming_language": "TypeScript", + "deprecated": false } \ No newline at end of file diff --git a/examples/orderbook/create-bid-with-nextjs/metadata.json b/examples/orderbook/create-bid-with-nextjs/metadata.json index 0171f7c9bc..b1440f6320 100644 --- a/examples/orderbook/create-bid-with-nextjs/metadata.json +++ b/examples/orderbook/create-bid-with-nextjs/metadata.json @@ -4,5 +4,6 @@ "keywords": ["Immutable", "SDK", "Orderbook", "Create Bid", "ERC721", "ERC1155", "Next.js"], "tech_stack": ["Next.js", "TypeScript", "React", "Immutable SDK", "Passport SDK", "Orderbook SDK"], "product": "Orderbook", - "programming_language": "TypeScript" + "programming_language": "TypeScript", + "deprecated": false } \ No newline at end of file diff --git a/examples/orderbook/create-collection-bid-with-nextjs/metadata.json b/examples/orderbook/create-collection-bid-with-nextjs/metadata.json index 1474ad7107..cd60498f58 100644 --- a/examples/orderbook/create-collection-bid-with-nextjs/metadata.json +++ b/examples/orderbook/create-collection-bid-with-nextjs/metadata.json @@ -4,5 +4,6 @@ "keywords": ["Immutable", "SDK", "Orderbook", "Collection Bid", "ERC721", "ERC1155", "Next.js"], "tech_stack": ["Next.js", "React", "TypeScript", "Immutable SDK", "Passport"], "product": "Orderbook", - "programming_language": "TypeScript" + "programming_language": "TypeScript", + "deprecated": false } \ No newline at end of file diff --git a/examples/orderbook/create-listing-with-nextjs/metadata.json b/examples/orderbook/create-listing-with-nextjs/metadata.json index 8cbd58c48d..265a9eb91a 100644 --- a/examples/orderbook/create-listing-with-nextjs/metadata.json +++ b/examples/orderbook/create-listing-with-nextjs/metadata.json @@ -4,5 +4,6 @@ "keywords": ["Immutable", "SDK", "Orderbook", "Create Listing", "ERC721", "ERC1155", "Next.js"], "tech_stack": ["Next.js", "TypeScript", "Immutable SDK", "ethers.js"], "product": "Orderbook", - "programming_language": "TypeScript" + "programming_language": "TypeScript", + "deprecated": false } \ No newline at end of file diff --git a/examples/orderbook/fulfill-bid-with-nextjs/metadata.json b/examples/orderbook/fulfill-bid-with-nextjs/metadata.json index 3f7d2a43f3..b530cf6516 100644 --- a/examples/orderbook/fulfill-bid-with-nextjs/metadata.json +++ b/examples/orderbook/fulfill-bid-with-nextjs/metadata.json @@ -4,5 +4,6 @@ "keywords": ["Immutable", "SDK", "Orderbook", "Fulfill Bid", "ERC721", "ERC1155", "Next.js"], "tech_stack": ["Next.js", "TypeScript", "Immutable SDK", "Ethers.js"], "product": "Orderbook", - "programming_language": "TypeScript" + "programming_language": "TypeScript", + "deprecated": false } \ No newline at end of file diff --git a/examples/orderbook/fulfill-collection-bid-with-nextjs/metadata.json b/examples/orderbook/fulfill-collection-bid-with-nextjs/metadata.json index 471bd744d1..fdc662467a 100644 --- a/examples/orderbook/fulfill-collection-bid-with-nextjs/metadata.json +++ b/examples/orderbook/fulfill-collection-bid-with-nextjs/metadata.json @@ -4,5 +4,6 @@ "keywords": ["Immutable", "SDK", "Orderbook", "Collection Bid", "Fulfill", "ERC721", "ERC1155", "Next.js"], "tech_stack": ["Next.js", "React", "TypeScript", "Immutable SDK"], "product": "Orderbook", - "programming_language": "TypeScript" + "programming_language": "TypeScript", + "deprecated": false } \ No newline at end of file diff --git a/examples/orderbook/fulfill-listing-with-nextjs/metadata.json b/examples/orderbook/fulfill-listing-with-nextjs/metadata.json index 5dd227ad35..3aac8ecbe0 100644 --- a/examples/orderbook/fulfill-listing-with-nextjs/metadata.json +++ b/examples/orderbook/fulfill-listing-with-nextjs/metadata.json @@ -4,5 +4,6 @@ "keywords": ["Immutable", "SDK", "Orderbook", "Listing", "Fulfill", "ERC721", "ERC1155", "Next.js"], "tech_stack": ["Next.js", "TypeScript", "ethers"], "product": "Orderbook", - "programming_language": "TypeScript" + "programming_language": "TypeScript", + "deprecated": false } \ No newline at end of file diff --git a/examples/passport/logged-in-user-with-nextjs/metadata.json b/examples/passport/logged-in-user-with-nextjs/metadata.json index 148126bf02..720cdf12aa 100644 --- a/examples/passport/logged-in-user-with-nextjs/metadata.json +++ b/examples/passport/logged-in-user-with-nextjs/metadata.json @@ -4,5 +4,6 @@ "keywords": ["Immutable", "SDK", "Passport", "NextJS", "Authentication", "User Info", "Linked Addresses", "Token Verification", "Wallet Linking"], "tech_stack": ["NextJS", "React", "TypeScript", "Ethereum", "MetaMask"], "product": "Passport", - "programming_language": "TypeScript" + "programming_language": "TypeScript", + "deprecated": false } \ No newline at end of file diff --git a/examples/passport/login-with-nextjs/metadata.json b/examples/passport/login-with-nextjs/metadata.json index 3d4589a55a..0c2a2690ad 100644 --- a/examples/passport/login-with-nextjs/metadata.json +++ b/examples/passport/login-with-nextjs/metadata.json @@ -4,5 +4,6 @@ "keywords": ["Immutable", "SDK", "Passport", "Login", "Logout", "Authentication", "Identity", "Silent Logout", "Redirect Logout"], "tech_stack": ["NextJS", "TypeScript", "React"], "product": "Passport", - "programming_language": "TypeScript" + "programming_language": "TypeScript", + "deprecated": false } \ No newline at end of file diff --git a/examples/passport/setup-with-nextjs/metadata.json b/examples/passport/setup-with-nextjs/metadata.json index 395c869d6b..3cf32c20ea 100644 --- a/examples/passport/setup-with-nextjs/metadata.json +++ b/examples/passport/setup-with-nextjs/metadata.json @@ -4,5 +4,6 @@ "keywords": ["Immutable", "SDK", "Passport", "Setup", "Configuration", "Authentication", "Next.js", "Overlays", "Scopes", "Silent Logout"], "tech_stack": ["Next.js", "TypeScript", "Biom3"], "product": "Passport", - "programming_language": "TypeScript" + "programming_language": "TypeScript", + "deprecated": false } \ No newline at end of file diff --git a/examples/passport/telegram-mini-app/metadata.json b/examples/passport/telegram-mini-app/metadata.json index 3977af47b0..2b296bd7f4 100644 --- a/examples/passport/telegram-mini-app/metadata.json +++ b/examples/passport/telegram-mini-app/metadata.json @@ -4,5 +4,6 @@ "keywords": ["Immutable", "SDK", "Passport", "Telegram", "Mini App", "Device Flow Authentication", "NFT Transfers"], "tech_stack": ["Next.js", "TypeScript", "Telegram SDK", "Ethers.js"], "product": "Passport", - "programming_language": "TypeScript" + "programming_language": "TypeScript", + "deprecated": true } \ No newline at end of file diff --git a/examples/passport/wallets-connect-with-nextjs/metadata.json b/examples/passport/wallets-connect-with-nextjs/metadata.json index 134e842252..4d9fffc34a 100644 --- a/examples/passport/wallets-connect-with-nextjs/metadata.json +++ b/examples/passport/wallets-connect-with-nextjs/metadata.json @@ -4,5 +4,6 @@ "keywords": ["Immutable", "SDK", "Passport", "EIP-1193", "ethers.js", "Wagmi", "Wallet Connect", "Next.js"], "tech_stack": ["Next.js", "React", "TypeScript", "ethers.js", "Wagmi", "Tailwind CSS"], "product": "Passport", - "programming_language": "TypeScript" + "programming_language": "TypeScript", + "deprecated": false } \ No newline at end of file diff --git a/examples/passport/wallets-signing-with-nextjs/metadata.json b/examples/passport/wallets-signing-with-nextjs/metadata.json index 9a9d4883ee..3f743dd85d 100644 --- a/examples/passport/wallets-signing-with-nextjs/metadata.json +++ b/examples/passport/wallets-signing-with-nextjs/metadata.json @@ -4,5 +4,6 @@ "keywords": ["Immutable", "SDK", "Passport", "Sign Message", "EIP-712", "ERC-191", "Next.js"], "tech_stack": ["Next.js", "TypeScript", "Ethers.js"], "product": "Passport", - "programming_language": "TypeScript" + "programming_language": "TypeScript", + "deprecated": false } \ No newline at end of file diff --git a/examples/passport/wallets-transactions-with-nextjs/metadata.json b/examples/passport/wallets-transactions-with-nextjs/metadata.json index 821b37c2c4..7a8172e280 100644 --- a/examples/passport/wallets-transactions-with-nextjs/metadata.json +++ b/examples/passport/wallets-transactions-with-nextjs/metadata.json @@ -4,5 +4,6 @@ "keywords": ["Immutable", "SDK", "Passport", "Wallet Connection", "Transaction Execution", "zkEVM"], "tech_stack": ["Next.js", "TypeScript", "ethers.js"], "product": "Passport", - "programming_language": "TypeScript" + "programming_language": "TypeScript", + "deprecated": false } \ No newline at end of file