Moving all of my Emacs-related files into their own directory at the root of this repository.
		
			
				
	
	
		
			56 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			EmacsLisp
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			EmacsLisp
		
	
	
	
	
	
;;; ynab.el --- Functions for YNAB's API -*- lexical-binding: t -*-
 | 
						|
;; Author: William Carroll <wpcarro@gmail.com>
 | 
						|
 | 
						|
;;; Commentary:
 | 
						|
;; I'm not sure what the outcome of this project is.  I'm just writing some
 | 
						|
;; Elisp at the moment to document some of my cursory interactions with YNAB's
 | 
						|
;; API.
 | 
						|
 | 
						|
;;; Code:
 | 
						|
 | 
						|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 | 
						|
;; Dependencies
 | 
						|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 | 
						|
 | 
						|
(require 'json)
 | 
						|
(require 'a)
 | 
						|
(require 'request)
 | 
						|
 | 
						|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 | 
						|
;; Library
 | 
						|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 | 
						|
 | 
						|
(defvar ynab/api-url "https://api.youneedabudget.com/v1/"
 | 
						|
  "The URL of the YNAB API.")
 | 
						|
 | 
						|
(defun ynab/get-secret (name)
 | 
						|
  "Fetch and decrypt the secret for YNAB at NAME in the password store."
 | 
						|
  (password-store-get (format "%s/%s" "finance/youneedabudget.com" name)))
 | 
						|
 | 
						|
(defvar ynab/personal-access-token
 | 
						|
  (ynab/get-secret "personal-access-token")
 | 
						|
  "My personal access token to YNAB's API.")
 | 
						|
 | 
						|
(defvar ynab/budget-id
 | 
						|
  (ynab/get-secret "budget-id")
 | 
						|
  "The ID of my current budget on YNAB.")
 | 
						|
 | 
						|
(defvar ynab/account-id
 | 
						|
  (ynab/get-secret "account-id")
 | 
						|
  "The ID of my current budget on YNAB.")
 | 
						|
 | 
						|
(defun ynab/url-for-endpoint (endpoint)
 | 
						|
  "Return the URL for the YNAB ENDPOINT.
 | 
						|
This will resolve any variables in the form of {variable_name} using a prefined
 | 
						|
scope object."
 | 
						|
  (format "%s%s" ynab/api-url endpoint))
 | 
						|
 | 
						|
(macros/comment
 | 
						|
 ;; TODO: Use these this map to resolve variables in an endpoint URL like
 | 
						|
 ;; '/budgets/{budget_id}/'.
 | 
						|
 '((budget_id . (ynab/get-secret "budget-id"))
 | 
						|
   (account_id . (ynab/get-secret "account-id")))
 | 
						|
 (request (ynab/url-for-endpoint "/budgets/{budget_id}/transactions")))
 | 
						|
 | 
						|
(provide 'ynab)
 | 
						|
;;; ynab.el ends here
 |