npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

notion-backup-md

v0.0.3

Published

Notion exporter meant to be used as part of a GitHub workflow, Fork in notion-backup project

Downloads

74

Readme

notion-backup

NOTE: The original author established two output formats, but I removed the html format output due to storage capacity restrictions on GitHub Actions.

This is a very simple tool to export a workspace from Notion, designed to work as part of a GitHub workflow.

It reads NOTION_TOKEN and NOTION_SPACE_ID from the environment, and outputs the export to both html and markdown directories in the current working directory, as well as to html.zip and markdown.zip.

Obtaining tokens

Automatically downloading backups from Notion requires two unique authentication tokens and your individual space ID which must be obtained for the script to work.

  1. Log into your Notion account in your browser of choice if you haven't done so already.
  2. Open a new tab in your browser and open the development tools. This is usually easiest done by right-click and selecting Inspect Element (Chrome, Edge, Safari) or Inspect (Firefox). Switch to the Network tab.
  3. Open https://notion.so/f/. You must use this specific subdirectory to obtain the right cookies.
  4. Insert getSpaces into the search filter of the Network tab. This should give you one result. Click on it.
  5. In the Preview tab, look for the key space. There you should find a list of all the workspaces you have access to. Unless you're part of shared workspaces there should only be one.
  6. Copy the UUID of the workspace you want to backup (e.g. 6e560115-7a65-4f65-bb04-1825b43748f1). This is your NOTION_SPACE_ID.
  7. Switch to the Application (Chrome, Edge) or Storage (Firefox, Safari) tab on the top.
  8. In the left sidebar, select Cookies -> https://www.notion.so (Chrome, Edge, Firefox) or Cookies – https://www.notion.so (Safari).
  9. Copy the value of token_v2 as your NOTION_TOKEN and the value of file_token as your NOTION_FILE_TOKEN.
  10. Set the three environment variables as secrets for actions in your GitHub repository.

NOTE: if you log out of your account or your session expires naturally, the NOTION_TOKEN and NOTION_FILE_TOKEN will get invalidated and the backup will fail. In this case you need to obtain new tokens by repeating this process. There is currently no practical way to automize this until Notion decide to add a backup endpoint to their official API, at which point this script will be able to use a proper authentication token.

Setup

This assumes you are looking to set this up to back up Notion to GitHub.

  1. Obtain the required values for the environment variables as explained above.
  2. Create a repo for your backup. You probably want it private.
  3. Set the NOTION_TOKEN, NOTION_FILE_TOKEN and NOTION_SPACE_ID environment variables as secrets in your GitHub repo.
  4. Give Actions write access to your repository: Settings > Actions > General > Workflow permissions > choose Read and write permissions
  5. Install the following under .github/workflows/whatever.yml in your repo.
  6. Configure the frequency by changing the cron value. You can use Crontab.guru.
  7. Push and control your backup workflow from the Actions tab of your repository Github page.
name: "Notion backup"

on:
  push:
    branches:
      - master
  schedule:
    -   cron: "0 */4 * * *"

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

jobs:
  backup:
    runs-on: ubuntu-latest
    name: Backup
    timeout-minutes: 15
    steps:
      - uses: actions/checkout@v3

      - uses: actions/setup-node@v2
        with:
          node-version: '18'

      - name: Delete previous backup
        run: rm -rf markdown html *.zip

      - name: Setup dependencies
        run: npm install -g notion-backup-md

      - name: Run backup
        run: notion-backup
        env:
          NOTION_TOKEN: ${{ secrets.NOTION_TOKEN }}
          NOTION_FILE_TOKEN: ${{ secrets.NOTION_FILE_TOKEN }}
          NOTION_SPACE_ID: ${{ secrets.NOTION_SPACE_ID }}
          NODE_OPTIONS: "--max-http-header-size 15000"

      - name: Delete zips
        run: |
          rm -f *.zip
          rm -f markdown/*-Part*.zip
          rm -f html/*-Part*.zip

      - name: Commit changes
        run: |
          git config user.name github-actions
          git config user.email [email protected]
          git add .
          git commit -m "Automated snapshot"
          git push

LFS Support

You won't be able to backup files exceeding a size of 100MB unless you enable Git LFS. Add a file named .gitattributes at the root of your repository and add the following. If you want to support other file types, just add a new line for that file type.

*.zip filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.jpg filter=lfs diff=lfs merge=lfs -text
*.jpeg filter=lfs diff=lfs merge=lfs -text
*.psd filter=lfs diff=lfs merge=lfs -text