Documentation ¶
Index ¶
- Constants
- Variables
- func AttrGetComment(attr TextAttr) string
- func AttrGetHighlight(attr TextAttr) string
- func AttrGetLink(attr TextAttr) string
- func AttrGetPageID(attr TextAttr) string
- func AttrGetType(attr TextAttr) string
- func AttrGetUserID(attr TextAttr) string
- func Dump(w io.Writer, page *Page)
- func DumpToString(page *Page) string
- func ExtractNoDashIDFromNotionURL(uri string) string
- func ForEachBlock(blocks []*Block, cb func(*Block))
- func FormatDate(d *Date) string
- func GetFileContentType(file *os.File) (contentType string, err error)
- func GetUserNameByID(page *Page, userID string) string
- func IsErrPageNotFound(err error) bool
- func IsValidDashID(id string) bool
- func IsValidNoDashID(id string) bool
- func Logf(format string, args ...interface{})
- func MaybePanic(format string, args ...interface{})
- func Now() int64
- func ParseRecordMap(recordMap *RecordMap) error
- func PrettyPrintJSJsonit(js []byte) []byte
- func PrettyPrintJSStd(js []byte) []byte
- func SafeName(s string) string
- func TextSpansToString(blocks []*TextSpan) string
- func ToDashID(id string) string
- func ToNoDashID(id string) string
- type Activity
- type AliasPointer
- type Author
- type Block
- func (b *Block) BlockByID(nid *NotionID) *Block
- func (b *Block) CollectionByID(nid *NotionID) *Collection
- func (b *Block) CollectionViewByID(nid *NotionID) *CollectionView
- func (b *Block) CreatedOn() time.Time
- func (b *Block) EmbedUploadedFileOps(client *Client, userID, fileID, fileURL string) (*Block, []*Operation)
- func (b *Block) FixCollectionID() string
- func (b *Block) FormatAlias() *FormatAlias
- func (b *Block) FormatBookmark() *FormatBookmark
- func (b *Block) FormatBulletedList() *FormatBulletedList
- func (b *Block) FormatCallout() *FormatCallout
- func (b *Block) FormatColumn() *FormatColumn
- func (b *Block) FormatEmbed() *FormatEmbed
- func (b *Block) FormatHeader() *FormatHeader
- func (b *Block) FormatImage() *FormatImage
- func (b *Block) FormatNumberedList() *FormatNumberedList
- func (b *Block) FormatPage() *FormatPage
- func (b *Block) FormatText() *FormatText
- func (b *Block) FormatToggle() *FormatToggle
- func (b *Block) FormatVideo() *FormatVideo
- func (b *Block) GetCaption() []*TextSpan
- func (b *Block) GetNotionID() *NotionID
- func (b *Block) GetParentNotionID() *NotionID
- func (b *Block) GetProperty(name string) []*TextSpan
- func (b *Block) GetTitle() []*TextSpan
- func (b *Block) IsCode() bool
- func (b *Block) IsEmbeddedType() bool
- func (b *Block) IsImage() bool
- func (b *Block) IsLinkToPage() bool
- func (b *Block) IsPage() bool
- func (b *Block) IsSubPage() bool
- func (b *Block) LastEditedOn() time.Time
- func (b *Block) ListAfterContentOp(id, afterID string) *Operation
- func (b *Block) ListAfterFileIDsOp(fileID string) *Operation
- func (b *Block) ListRemoveContentOp(id string) *Operation
- func (b *Block) NotionUserByID(nid *NotionID) *NotionUser
- func (b *Block) Prop(key string) (interface{}, bool)
- func (b *Block) PropAsString(key string) (string, bool)
- func (b *Block) SetTitleOp(title string) *Operation
- func (b *Block) UpdateEmbeddedFileOps(userID, fileID, fileURL string) []*Operation
- func (b *Block) UpdateFormatOp(params interface{}) *Operation
- func (b *Block) UpdateOp(block *Block) *Operation
- func (b *Block) UpdatePropertiesOp(source string) *Operation
- type CachedPage
- type CachingClient
- func (c *CachingClient) DownloadFile(uri string, block *Block) (*DownloadFileResponse, error)
- func (c *CachingClient) DownloadPage(pageID string) (*Page, error)
- func (c *CachingClient) DownloadPagesRecursively(startPageID string, afterDownload func(*DownloadInfo) error) ([]*Page, error)
- func (c *CachingClient) GetPageIDs() []string
- func (c *CachingClient) PreLoadCache()
- type CachingPolicy
- type Client
- func (c *Client) CreateEmailUser(email string) (*NotionUser, error)
- func (c *Client) DownloadFile(uri string, block *Block) (*DownloadFileResponse, error)
- func (c *Client) DownloadPage(pageID string) (*Page, error)
- func (c *Client) DownloadURL(uri string) (*DownloadFileResponse, error)
- func (c *Client) ExportPages(id string, exportType string, recursive bool) ([]byte, error)
- func (c *Client) GetActivityLog(spaceID string, startingAfterID string, navBlockID string, limit int) (*GetActivityLogResponse, error)
- func (c *Client) GetBlockRecords(ids []string) ([]*Block, error)
- func (c *Client) GetSignedURLs(urls []string, block *Block) (*GetSignedURLsResponse, error)
- func (c *Client) GetSubscriptionData(spaceID string) (*SubscriptionData, error)
- func (c *Client) LoadCachedPageChunk(pageID string, chunkNo int, cur *cursor) (*LoadCachedPageChunkResponse, error)
- func (c *Client) LoadUserContent() (*LoadUserResponse, error)
- func (c *Client) QueryCollection(req QueryCollectionRequest, query *Query) (*QueryCollectionResponse, error)
- func (c *Client) RequestPageExportURL(id string, exportType string, recursive bool) (string, error)
- func (c *Client) SetNewRecordOp(userID string, parent *Block, recordType string) (newBlock *Block, operation *Operation)
- func (c *Client) SubmitTransaction(ops []*Operation) error
- func (c *Client) SyncRecordValues(req syncRecordRequest) (*SyncRecordValuesResponse, error)
- func (c *Client) UploadFile(file *os.File) (fileID, fileURL string, err error)
- type Collection
- type CollectionColumnOption
- type CollectionFormat
- type CollectionGroupResults
- type CollectionPageProperty
- type CollectionView
- type ColumnFormula
- type ColumnInfo
- type ColumnSchema
- type Comment
- type CopiedFromPointer
- type Date
- type Discussion
- type DownloadFileResponse
- type DownloadInfo
- type DriveProperties
- type DriveStatus
- type Edit
- type ErrPageNotFound
- type FormatAlias
- type FormatBookmark
- type FormatBulletedList
- type FormatCallout
- type FormatCode
- type FormatCodepen
- type FormatCollectionView
- type FormatColumn
- type FormatDrive
- type FormatEmbed
- type FormatFigma
- type FormatHeader
- type FormatImage
- type FormatMaps
- type FormatNumberedList
- type FormatPDF
- type FormatPage
- type FormatTable
- type FormatTableOfContents
- type FormatText
- type FormatToggle
- type FormatVideo
- type FormulaArg
- type GetActivityLogResponse
- type GetSignedURLsResponse
- type GetUploadFileUrlResponse
- type LoadCachedPageChunkResponse
- type LoadUserResponse
- type LoaderReducer
- type NotionID
- type NotionUser
- type Operation
- type Page
- func (p *Page) BlockByID(nid *NotionID) *Block
- func (p *Page) CollectionByID(nid *NotionID) *Collection
- func (p *Page) CollectionViewByID(nid *NotionID) *CollectionView
- func (p *Page) CommentByID(nid *NotionID) *Comment
- func (p *Page) DiscussionByID(nid *NotionID) *Discussion
- func (p *Page) ForEachBlock(cb func(*Block))
- func (p *Page) GetNotionID() *NotionID
- func (p *Page) GetSubPages() []*NotionID
- func (p *Page) IsRoot(block *Block) bool
- func (p *Page) IsSubPage(block *Block) bool
- func (p *Page) NotionURL() string
- func (p *Page) NotionUserByID(nid *NotionID) *NotionUser
- func (p *Page) Root() *Block
- func (p *Page) SetFormat(args map[string]interface{}) error
- func (p *Page) SetTitle(s string) error
- func (p *Page) SpaceByID(nid *NotionID) *Space
- type Permission
- type Pointer
- type PointerWithVersion
- type Query
- type QueryAggregate
- type QueryAggregation
- type QueryCollectionRequest
- type QueryCollectionResponse
- type QuerySort
- type Record
- type RecordMap
- type ReducerCollectionGroupResults
- type ReducerResults
- type Reminder
- type RequestCacheEntry
- type Space
- type SpacePermissionGroups
- type SpacePermissions
- type SubscriptionData
- type SubscriptionDataAddress
- type SubscriptionDataCredits
- type SubscriptionDataSpaceUsers
- type SyncRecordValuesResponse
- type TableProperty
- type TableRow
- type TableView
- type TextAttr
- type TextSpan
- type UserRoot
- type UserSettings
Constants ¶
const ( // BlockAudio is audio embed (e.g. an mp3 file) BlockAudio = "audio" // BlockBookmark is a bookmark block BlockBookmark = "bookmark" // BlockBreadcrumb is breadcrumb block BlockBreadcrumb = "breadcrumb" // BlockBulletedList is a bulleted list block BlockBulletedList = "bulleted_list" // BlockCode is a code block BlockCode = "code" // BlockCodepen is embedded codepen block BlockCodepen = "codepen" // BlockCallout is a callout BlockCallout = "callout" // BlockColumn is a child of TypeColumnList BlockColumn = "column" // BlockColumnList is for multi-column. Number of columns is // number of content blocks of type TypeColumn BlockColumnList = "column_list" // BlockCollectionView is a collection view block for inline collections BlockCollectionView = "collection_view" // BlockCollectionViewPage is a page that is a collection BlockCollectionViewPage = "collection_view_page" // BlockComment is a comment block BlockComment = "comment" // BlockDivider is a divider block BlockDivider = "divider" // BlockDrive is embedded Google Drive file BlockDrive = "drive" // BlockEmbed is a generic oembed link BlockEmbed = "embed" // BlockEquation is TeX equation block BlockEquation = "equation" // BlockFactory represents a factory block BlockFactory = "factory" // BlockFigma represents figma embed BlockFigma = "figma" // BlockFile is an embedded file BlockFile = "file" // BlockGist is embedded gist block BlockGist = "gist" // BlockHeader is a header block BlockHeader = "header" // BlockImage is an image block BlockImage = "image" // BlockMaps is embedded Google Map block BlockMaps = "maps" // BlockNumberedList is a numbered list block BlockNumberedList = "numbered_list" // BlockPDF is an embedded pdf file BlockPDF = "pdf" // BlockPage is a notion Page BlockPage = "page" // BlockQuote is a quote block BlockQuote = "quote" // BlockSubHeader is a header block BlockSubHeader = "sub_header" // BlockSubSubHeader BlockSubSubHeader = "sub_sub_header" // BlockTableOfContents is table of contents BlockTableOfContents = "table_of_contents" // BlockText is a text block BlockText = "text" // BlockTodo is a todo block BlockTodo = "to_do" // BlockToggle is a toggle block BlockToggle = "toggle" // BlockTweet is embedded gist block BlockTweet = "tweet" // BlockVideo is youtube video embed BlockVideo = "video" BlockCopyIndicator = "copy_indicator" BlockLinkToCollection = "link_to_collection" BlockLinkToPage = "link_to_page" BlockMiro = "miro" BlockAlias = "alias" BlockTransclusionReference = "transclusion_reference" )
const ( // value of Permission.Type PermissionUser = "user_permission" PermissionPublic = "public_permission" )
const ( // TODO: those are probably CollectionViewType // CollectionViewTypeTable is a table block CollectionViewTypeTable = "table" // CollectionViewTypeTable is a lists block CollectionViewTypeList = "list" )
const ( // PermissionTypeUser describes permissions for a user PermissionTypeUser = "user_permission" // PermissionTypePublic describes permissions for public PermissionTypePublic = "public_permission" )
const ( ColumnTypeCheckbox = "checkbox" ColumnTypeCreatedBy = "created_by" ColumnTypeCreatedTime = "created_time" ColumnTypeDate = "date" ColumnTypeEmail = "email" ColumnTypeFile = "file" ColumnTypeFormula = "formula" ColumnTypeLastEditedBy = "last_edited_by" ColumnTypeLastEditedTime = "last_edited_time" ColumnTypeMultiSelect = "multi_select" ColumnTypeNumber = "number" ColumnTypePerson = "person" ColumnTypePhoneNumber = "phone_number" ColumnTypeRelation = "relation" ColumnTypeRollup = "rollup" ColumnTypeSelect = "select" ColumnTypeText = "text" ColumnTypeTitle = "title" ColumnTypeURL = "url" )
for Schema.Type
const ( // those are Record.Type and determine the type of Record.Value TableSpace = "space" TableActivity = "activity" TableBlock = "block" TableNotionUser = "notion_user" TableUserRoot = "user_root" TableUserSettings = "user_settings" TableCollection = "collection" TableCollectionView = "collection_view" TableComment = "comment" TableDiscussion = "discussion" )
const ( // RoleReader represents a reader RoleReader = "reader" // RoleEditor represents an editor RoleEditor = "editor" )
const ( // DateTypeDate represents a date in Date.Type DateTypeDate = "date" // DateTypeDateTime represents a datetime in Date.Type DateTypeDateTime = "datetime" )
const ( ExportTypeMarkdown = "markdown" ExportTypeHTML = "html" )
const ( // AttrBold represents bold block AttrBold = "b" // AttrCode represents code block AttrCode = "c" // AttrItalic represents italic block AttrItalic = "i" // AttrStrikeThrought represents strikethrough block AttrStrikeThrought = "s" // AttrComment represents a comment block AttrComment = "m" // AttrLink represnts a link (url) AttrLink = "a" // AttrUser represents an id of a user AttrUser = "u" // AttrHighlight represents text high-light AttrHighlight = "h" // AttrDate represents a date AttrDate = "d" // AtttrPage represents a link to a Notion page AttrPage = "p" )
const ( CommandSet = "set" CommandUpdate = "update" CommandListAfter = "listAfter" CommandListRemove = "listRemove" )
Command Types
const (
// key in LoaderReducer.Reducers map
ReducerCollectionGroupResultsName = "collection_group_results"
)
const (
// TextSpanSpecial is what Notion uses for text to represent @user and @date blocks
TextSpanSpecial = "‣"
)
Variables ¶
var ( // PanicOnFailures will force panics on unexpected situations. // This is for debugging PanicOnFailures bool // TODO: maybe a logger io.Writer instead? // LogFunc allows intercepting debug logs LogFunc func(format string, args ...interface{}) )
var (
PrettyPrintJS = PrettyPrintJSJsonit
)
Functions ¶
func AttrGetComment ¶
func AttrGetHighlight ¶
func AttrGetLink ¶
func AttrGetPageID ¶
func AttrGetType ¶
func AttrGetUserID ¶
func DumpToString ¶
DumpToString returns a simple representation of Page as a string. A debugging helper.
func ExtractNoDashIDFromNotionURL ¶
ExtractNoDashIDFromNotionURL tries to extract notion page id from notion URL, e.g. given: https://www.notion.so/Advanced-web-spidering-with-Puppeteer-ea07db1b9bff415ab180b0525f3898f6 returns ea07db1b9bff415ab180b0525f3898f6 returns "" if didn't detect valid notion id in the url
func ForEachBlock ¶
ForEachBlock traverses the tree of blocks and calls cb on every block in depth-first order. To traverse every blocks in a Page, do: ForEachBlock([]*notionapi.Block{page.Root}, cb)
func FormatDate ¶
FormatDate provides default formatting for Date TODO: add time zone, maybe
func GetFileContentType ¶
GetFileContentType tries to figure out the content type of the file using http detection
func GetUserNameByID ¶
GetUserNameByID returns a full user name given user id it's a helper function
func IsErrPageNotFound ¶
IsErrPageNotFound returns true if err is an instance of ErrPageNotFound
func IsValidDashID ¶
IsValidDashID returns true if id looks like a valid Notion dash id
func IsValidNoDashID ¶
IsValidNoDashID returns true if id looks like a valid Notion no dash id
func Logf ¶
func Logf(format string, args ...interface{})
Logf is for debug logging, will log using LogFunc (if set)
func MaybePanic ¶
func MaybePanic(format string, args ...interface{})
MaybePanic will panic if PanicOnFailures is true
func ParseRecordMap ¶
func PrettyPrintJSJsonit ¶
TODO: doesn't work with some of Notion json responses? pretty-print if valid JSON. If not, return unchanged about 4x faster than naive version using json.Unmarshal() + json.Marshal()
func PrettyPrintJSStd ¶
pretty-print if valid JSON. If not, return unchanged about 4x faster than naive version using json.Unmarshal() + json.Marshal()
func TextSpansToString ¶
TextSpansToString returns flattened content of inline blocks, without formatting
func ToDashID ¶
ToDashID convert id in format bb760e2dd6794b64b2a903005b21870a to bb760e2d-d679-4b64-b2a9-03005b21870a If id is not in that format, we leave it untouched.
func ToNoDashID ¶
ToNoDashID converts 2131b10c-ebf6-4938-a127-7089ff02dbe4 to 2131b10cebf64938a1277089ff02dbe4. If not in expected format, we leave it untouched
Types ¶
type Activity ¶
type Activity struct { Role string `json:"role"` ID string `json:"id"` SpaceID string `json:"space_id"` StartTime string `json:"start_time"` EndTime string `json:"end_time"` Type string `json:"type"` Version int `json:"version"` ParentID string `json:"parent_id"` ParentTable string `json:"parent_table"` NavigableBlockID string `json:"navigable_block_id"` // If the edit was to a block inside a collection or collection row CollectionID string `json:"collection_id"` CollectionRowID string `json:"collection_row_id"` Edits []Edit `json:"edits"` Index int `json:"index"` Invalid bool `json:"invalid"` RawJSON map[string]interface{} `json:"-"` }
Activity represents a Notion activity (ie. event)
type AliasPointer ¶
type Block ¶
type Block struct { // values that come from JSON // a unique ID of the block ID string `json:"id"` // if false, the page is deleted Alive bool `json:"alive"` // List of block ids for that make up content of this block // Use Content to get corresponding block (they are in the same order) ContentIDs []string `json:"content,omitempty"` CopiedFrom string `json:"copied_from,omitempty"` CollectionID string `json:"collection_id,omitempty"` // for BlockCollectionView // ID of the user who created this block CreatedBy string `json:"created_by"` CreatedTime int64 `json:"created_time"` CreatedByTable string `json:"created_by_table"` // e.g. "notion_user" CreatedByID string `json:"created_by_id"` // e.g. "bb760e2d-d679-4b64-b2a9-03005b21870a", // ID of the user who last edited this block LastEditedBy string `json:"last_edited_by"` LastEditedTime int64 `json:"last_edited_time"` LastEditedByTable string `json:"last_edited_by_table"` // e.g. "notion_user" LastEditedByID string `json:"last_edited_by_id"` // e.g. "bb760e2d-d679-4b64-b2a9-03005b21870a" // List of block ids with discussion content DiscussionIDs []string `json:"discussion,omitempty"` // those ids seem to map to storage in s3 // https://s3-us-west-2.amazonaws.com/secure.notion-static.com/${id}/${name} FileIDs []string `json:"file_ids,omitempty"` // TODO: don't know what this means IgnoreBlockCount bool `json:"ignore_block_count,omitempty"` // ID of parent Block ParentID string `json:"parent_id"` ParentTable string `json:"parent_table"` // not always available Permissions *[]Permission `json:"permissions,omitempty"` Properties map[string]interface{} `json:"properties,omitempty"` SpaceID string `json:"space_id"` // type of the block e.g. TypeText, TypePage etc. Type string `json:"type"` // blocks are versioned Version int64 `json:"version"` // for BlockCollectionView ViewIDs []string `json:"view_ids,omitempty"` // Parent of this block Parent *Block `json:"-"` // maps ContentIDs array to Block type Content []*Block `json:"-"` // this is for some types like TypePage, TypeText, TypeHeader etc. InlineContent []*TextSpan `json:"-"` // for BlockPage Title string `json:"-"` // For BlockTodo, a checked state IsChecked bool `json:"-"` // for BlockBookmark Description string `json:"-"` Link string `json:"-"` // for BlockBookmark it's the url of the page // for BlockGist it's the url for the gist // for BlockImage it's url of the image. Sometimes you need to use DownloadFile() // to get this image // for BlockFile it's url of the file // for BlockEmbed it's url of the embed Source string `json:"-"` // for BlockFile FileSize string `json:"-"` // for BlockCode Code string `json:"-"` CodeLanguage string `json:"-"` // for BlockCollectionView. There can be multiple views // those correspond to ViewIDs TableViews []*TableView `json:"-"` // for BlockCollectionView without "collection_id" use ID from the CollectionPointer Format struct { CollectionPointer struct { ID string `json:"id"` SpaceID string `json:"spaceId"` Table string `json:"table"` } `json:"collection_pointer"` PageIcon string `json:"page_icon"` } `json:"format"` Page *Page `json:"-"` // RawJSON represents Block as RawJSON map[string]interface{} `json:"-"` // contains filtered or unexported fields }
Block describes a block
func (*Block) CollectionByID ¶
func (b *Block) CollectionByID(nid *NotionID) *Collection
func (*Block) CollectionViewByID ¶
func (b *Block) CollectionViewByID(nid *NotionID) *CollectionView
func (*Block) EmbedUploadedFileOps ¶
func (b *Block) EmbedUploadedFileOps(client *Client, userID, fileID, fileURL string) (*Block, []*Operation)
EmbedFile creates a set of operations to embed a file into a block
func (*Block) FixCollectionID ¶
func (*Block) FormatAlias ¶
func (b *Block) FormatAlias() *FormatAlias
func (*Block) FormatBookmark ¶
func (b *Block) FormatBookmark() *FormatBookmark
func (*Block) FormatBulletedList ¶
func (b *Block) FormatBulletedList() *FormatBulletedList
func (*Block) FormatCallout ¶
func (b *Block) FormatCallout() *FormatCallout
func (*Block) FormatColumn ¶
func (b *Block) FormatColumn() *FormatColumn
func (*Block) FormatEmbed ¶
func (b *Block) FormatEmbed() *FormatEmbed
func (*Block) FormatHeader ¶
func (b *Block) FormatHeader() *FormatHeader
func (*Block) FormatImage ¶
func (b *Block) FormatImage() *FormatImage
func (*Block) FormatNumberedList ¶
func (b *Block) FormatNumberedList() *FormatNumberedList
func (*Block) FormatPage ¶
func (b *Block) FormatPage() *FormatPage
FormatPage returns decoded format property for BlockPage TODO: maybe separate FormatCollectionViewPage
func (*Block) FormatText ¶
func (b *Block) FormatText() *FormatText
func (*Block) FormatToggle ¶
func (b *Block) FormatToggle() *FormatToggle
func (*Block) FormatVideo ¶
func (b *Block) FormatVideo() *FormatVideo
func (*Block) GetCaption ¶
func (*Block) GetNotionID ¶
func (*Block) GetParentNotionID ¶
func (*Block) GetProperty ¶
func (*Block) IsEmbeddedType ¶
IsEmbeddedType returns true if block represents an embedded type
func (*Block) IsLinkToPage ¶
IsLinkToPage returns true if block element is a link to a page (as opposed to embedded page)
func (*Block) IsPage ¶
IsPage returns true if block represents a page (either a sub-page or a link to a page)
func (*Block) IsSubPage ¶
IsSubPage returns true if this is a sub-page (as opposed to link to a page that is not a child of that page)
func (*Block) LastEditedOn ¶
LastEditedOn returns the time the page was last updated
func (*Block) ListAfterContentOp ¶
ListAfterContentOp creates an operation to list a child block block after another one if afterID is empty the block will be listed as the last one
func (*Block) ListAfterFileIDsOp ¶
ListAfterFileIDsOp creates an operation to set the file ID
func (*Block) ListRemoveContentOp ¶
ListRemoveContentOp creates an operation to remove a record from the block
func (*Block) NotionUserByID ¶
func (b *Block) NotionUserByID(nid *NotionID) *NotionUser
func (*Block) SetTitleOp ¶
SetTitleOp creates an Operation to set the title property
func (*Block) UpdateEmbeddedFileOps ¶
UpdateEmbeddedFileOps creates a set of operations to update an existing embedded file
func (*Block) UpdateFormatOp ¶
TODO: Make the input more strict UpdateFormatOp creates an operation to update the block's format
func (*Block) UpdateOp ¶
TODO: Make this work somehow for all of Block's fields UpdateOp creates an operation to update the block
func (*Block) UpdatePropertiesOp ¶
TODO: Generalize this for the other fields UpdatePropertiesOp creates an op to update the block's properties
type CachedPage ¶
type CachingClient ¶
type CachingClient struct { CacheDir string // you can set it to over-ride location of where we store cached files // if not set, it'll be filepath.Join(CacheDir, "files") CacheDirFiles string Client *Client Policy CachingPolicy // disable pretty-printing of json responses saved in the cache NoPrettyPrintResponse bool // maps no-dash id to info about a page IdToCachedPage map[string]*CachedPage DownloadedCount int FromCacheCount int DownloadedFilesCount int FilesFromCacheCount int RequestsFromCache int RequestsFromServer int RequestsWrittenToCache int // contains filtered or unexported fields }
CachingClient implements optimized (cached) downloading of pages. Cache of pages is stored in CacheDir. We return pages from cache. If RedownloadNewerVersions is true, we'll re-download latest version of the page (as opposed to returning possibly outdated version from cache). We do it more efficiently than just blindly re-downloading.
func NewCachingClient ¶
func NewCachingClient(cacheDir string, client *Client) (*CachingClient, error)
func (*CachingClient) DownloadFile ¶
func (c *CachingClient) DownloadFile(uri string, block *Block) (*DownloadFileResponse, error)
DownloadFile downloads a file refered by block with a given blockID and a parent table we cache the file
func (*CachingClient) DownloadPage ¶
func (c *CachingClient) DownloadPage(pageID string) (*Page, error)
func (*CachingClient) DownloadPagesRecursively ¶
func (c *CachingClient) DownloadPagesRecursively(startPageID string, afterDownload func(*DownloadInfo) error) ([]*Page, error)
func (*CachingClient) GetPageIDs ¶
func (c *CachingClient) GetPageIDs() []string
GetPageIDs returns ids of pages in the cache
func (*CachingClient) PreLoadCache ¶
func (c *CachingClient) PreLoadCache()
PreLoadCache will preload all pages in the cache. It does so concurrently (which is not allowed in general) so should be faster
type CachingPolicy ¶
type CachingPolicy int
const ( // PolicyCacheOnly - will only read from cache, no calling Notion server PolicyCacheOnly CachingPolicy = iota // PolicyDownloadNewer - will only download from Notion server if there is a newer version of the page PolicyDownloadNewer // PolicyDownloadAlways - will always download from Notion server (and update the cache with updated version) PolicyDownloadAlways )
type Client ¶
type Client struct { // AuthToken allows accessing non-public pages. AuthToken string // HTTPClient allows over-riding http.Client HTTPClient *http.Client // Logger is used to log requests and responses for debugging. // By default is not set. Logger io.Writer // DebugLog enables debug logging DebugLog bool // MinRequestDelay is for controlling rate limiting. it's 333 ms by default // because https://developers.notion.com/reference/errors#rate-limits // says rate limit is, on average, 3 requests per second MinRequestDelay time.Duration // contains filtered or unexported fields }
Client is client for invoking Notion API
func (*Client) CreateEmailUser ¶
func (c *Client) CreateEmailUser(email string) (*NotionUser, error)
CreateEmailUser invites a new user through his email address
func (*Client) DownloadFile ¶
func (c *Client) DownloadFile(uri string, block *Block) (*DownloadFileResponse, error)
DownloadFile downloads a file stored in Notion referenced by a block with a given id and of a given block with a given parent table (data present in Block)
func (*Client) DownloadPage ¶
DownloadPage returns Notion page data given its id
func (*Client) DownloadURL ¶
func (c *Client) DownloadURL(uri string) (*DownloadFileResponse, error)
DownloadURL downloads a given url with possibly authenticated client
func (*Client) ExportPages ¶
ExportPages exports a page as html or markdown, potentially recursively
func (*Client) GetActivityLog ¶
func (c *Client) GetActivityLog(spaceID string, startingAfterID string, navBlockID string, limit int) (*GetActivityLogResponse, error)
GetActivityLog executes a raw API call /api/v3/getActivityLog. If startingAfterId is "", starts at the most recent log entry. navBlockID is the ID of a navigable block (like a page in a database)
func (*Client) GetBlockRecords ¶
GetBlockRecords emulates deprecated /api/v3/getRecordValues with /api/v3/syncRecordValues Gets Block records with given ids Used to retrieve version information for each block so that we can skip re-downloading pages that didn't change
func (*Client) GetSignedURLs ¶
func (c *Client) GetSignedURLs(urls []string, block *Block) (*GetSignedURLsResponse, error)
GetSignedURLs executes a raw API call /api/v3/getSignedFileUrls
func (*Client) GetSubscriptionData ¶
func (c *Client) GetSubscriptionData(spaceID string) (*SubscriptionData, error)
GetSubscriptionData executes a raw API call /api/v3/getSubscriptionData
func (*Client) LoadCachedPageChunk ¶
func (c *Client) LoadCachedPageChunk(pageID string, chunkNo int, cur *cursor) (*LoadCachedPageChunkResponse, error)
LoadPageChunk executes a raw API call /api/v3/loadCachedPageChunk
func (*Client) LoadUserContent ¶
func (c *Client) LoadUserContent() (*LoadUserResponse, error)
func (*Client) QueryCollection ¶
func (c *Client) QueryCollection(req QueryCollectionRequest, query *Query) (*QueryCollectionResponse, error)
QueryCollection executes a raw API call /api/v3/queryCollection
func (*Client) RequestPageExportURL ¶
RequestPageExportURL executes a raw API call to enqueue an export of pages and returns the URL to the exported data once the task is complete
func (*Client) SetNewRecordOp ¶
func (c *Client) SetNewRecordOp(userID string, parent *Block, recordType string) (newBlock *Block, operation *Operation)
TODO: Support adding new records to collections and other non-block parent tables SetNewRecordOp creates an operation to create a new record
func (*Client) SubmitTransaction ¶
func (*Client) SyncRecordValues ¶
func (c *Client) SyncRecordValues(req syncRecordRequest) (*SyncRecordValuesResponse, error)
SyncRecordValues executes a raw API call /api/v3/syncRecordValues
type Collection ¶
type Collection struct { ID string `json:"id"` Version int `json:"version"` Name interface{} `json:"name"` Schema map[string]*ColumnSchema `json:"schema"` Format *CollectionFormat `json:"format"` ParentID string `json:"parent_id"` ParentTable string `json:"parent_table"` Alive bool `json:"alive"` CopiedFrom string `json:"copied_from"` Cover string `json:"cover"` Description []interface{} `json:"description"` // TODO: are those ever present? Type string `json:"type"` FileIDs []string `json:"file_ids"` Icon string `json:"icon"` TemplatePages []string `json:"template_pages"` RawJSON map[string]interface{} `json:"-"` // contains filtered or unexported fields }
Collection describes a collection
func (*Collection) GetName ¶
func (c *Collection) GetName() string
GetName parses Name and returns as a string
type CollectionColumnOption ¶
type CollectionColumnOption struct { Color string `json:"color"` ID string `json:"id"` Value string `json:"value"` }
CollectionColumnOption describes options for ColumnTypeMultiSelect collection column
type CollectionFormat ¶
type CollectionFormat struct { CoverPosition float64 `json:"collection_cover_position"` PageProperties []*CollectionPageProperty `json:"collection_page_properties"` }
CollectionFormat describes format of a collection
type CollectionGroupResults ¶
type CollectionPageProperty ¶
type CollectionPageProperty struct { Property string `json:"property"` Visible bool `json:"visible"` }
CollectionPageProperty describes properties of a collection
type CollectionView ¶
type CollectionView struct { ID string `json:"id"` Version int64 `json:"version"` Type string `json:"type"` // "table" Format *FormatTable `json:"format"` Name string `json:"name"` ParentID string `json:"parent_id"` ParentTable string `json:"parent_table"` Query *Query `json:"query2"` Alive bool `json:"alive"` PageSort []string `json:"page_sort"` SpaceID string `json:"space_id"` // set by us RawJSON map[string]interface{} `json:"-"` }
CollectionView represents a collection view
type ColumnFormula ¶
type ColumnFormula struct { Args []FormulaArg `json:"args"` Name string `json:"name"` Operator string `json:"operator"` ResultType string `json:"result_type"` Type string `json:"type"` }
type ColumnInfo ¶
type ColumnInfo struct { // TableView that owns this column TableView *TableView // so that we can access TableRow.Columns[Index] Index int Schema *ColumnSchema Property *TableProperty }
ColumnInfo describes a schema for a given cell (column)
func (*ColumnInfo) ID ¶
func (c *ColumnInfo) ID() string
func (*ColumnInfo) Name ¶
func (c *ColumnInfo) Name() string
func (*ColumnInfo) Type ¶
func (c *ColumnInfo) Type() string
type ColumnSchema ¶
type ColumnSchema struct { Name string `json:"name"` // ColumnTypeTitle etc. Type string `json:"type"` // for Type == ColumnTypeNumber, e.g. "dollar", "number" NumberFormat string `json:"number_format"` // For Type == ColumnTypeRollup Aggregation string `json:"aggregation"` // e.g. "unique" TargetProperty string `json:"target_property"` RelationProperty string `json:"relation_property"` TargetPropertyType string `json:"target_property_type"` // for Type == ColumnTypeRelation CollectionID string `json:"collection_id"` Property string `json:"property"` // for Type == ColumnTypeFormula Formula *ColumnFormula Options []*CollectionColumnOption `json:"options"` }
ColumnSchema describes a info of a collection column
type Comment ¶
type Comment struct { ID string `json:"id"` Version int64 `json:"version"` Alive bool `json:"alive"` ParentID string `json:"parent_id"` ParentTable string `json:"parent_table"` CreatedBy string `json:"created_by"` CreatedTime int64 `json:"created_time"` Text interface{} `json:"text"` LastEditedTime int64 `json:"last_edited_time"` // set by us RawJSON map[string]interface{} `json:"-"` }
Comment describes a single comment in a discussion
type CopiedFromPointer ¶
type Date ¶
type Date struct { // "MMM DD, YYYY", "MM/DD/YYYY", "DD/MM/YYYY", "YYYY/MM/DD", "relative" DateFormat string `json:"date_format"` Reminder *Reminder `json:"reminder,omitempty"` // "2018-07-12" StartDate string `json:"start_date"` // "09:00" StartTime string `json:"start_time,omitempty"` // "2018-07-12" EndDate string `json:"end_date,omitempty"` // "09:00" EndTime string `json:"end_time,omitempty"` // "America/Los_Angeles" TimeZone *string `json:"time_zone,omitempty"` // "H:mm" for 24hr, not given for 12hr TimeFormat string `json:"time_format,omitempty"` // "date", "datetime", "datetimerange", "daterange" Type string `json:"type"` }
Date represents a date
func AttrGetDate ¶
type Discussion ¶
type Discussion struct { ID string `json:"id"` Version int64 `json:"version"` ParentID string `json:"parent_id"` ParentTable string `json:"parent_table"` Resolved bool `json:"resolved"` Comments []string `json:"comments"` // set by us RawJSON map[string]interface{} `json:"-"` }
Discussion represents a discussion
type DownloadFileResponse ¶
type DownloadFileResponse struct { URL string CacheFilePath string Data []byte Header http.Header FromCache bool }
DownloadFileResponse is a result of DownloadFile()
type DownloadInfo ¶
type DriveProperties ¶
type DriveProperties struct { FileID string `json:"file_id"` Icon string `json:"icon"` ModifiedTime int64 `json:"modified_time"` Thumbnail string `json:"thumbnail"` // url Title string `json:"title"` Trashed bool `json:"trashed"` URL string `json:"url"` UserName string `json:"user_name"` Version int `json:"version"` }
type DriveStatus ¶
type Edit ¶
type Edit struct { SpaceID string `json:"space_id"` Authors []Author `json:"authors"` Timestamp int64 `json:"timestamp"` Type string `json:"type"` Version int `json:"version"` CommentData Comment `json:"comment_data"` CommentID string `json:"comment_id"` DiscussionID string `json:"discussion_id"` BlockID string `json:"block_id"` BlockData struct { BlockValue Block `json:"block_value"` Before struct { BlockValue Block `json:"block_value"` } `json:"before"` After struct { BlockValue Block `json:"block_value"` } `json:"after"` } `json:"block_data"` CollectionID string `json:"collection_id"` CollectionRowID string `json:"collection_row_id"` }
Edit represents a Notion edit (ie. a change made during an Activity)
type ErrPageNotFound ¶
type ErrPageNotFound struct {
PageID string
}
ErrPageNotFound is returned by Client.DownloadPage if page cannot be found
type FormatAlias ¶
type FormatAlias struct {
Alias *AliasPointer `json:"alias_pointer"`
}
FormatAlias describes format for BlockAlias
type FormatBookmark ¶
type FormatBookmark struct { BlockColor string `json:"block_color"` Cover string `json:"bookmark_cover"` Icon string `json:"bookmark_icon"` }
FormatBookmark describes format for BlockBookmark
type FormatBulletedList ¶
type FormatBulletedList struct {
BlockColor string `json:"block_color"`
}
FormatBulletedList describes format for BlockBulletedList
type FormatCallout ¶
type FormatCallout struct { BlockColor string `json:"block_color"` Icon string `json:"bookmark_icon"` }
FormatCallout describes format for BlockCallout
type FormatCode ¶
type FormatCode struct {
CodeWrap bool `json:"code_wrap"`
}
FormatCode describes format for BlockCode
type FormatCodepen ¶
type FormatCodepen struct { BlockFullWidth bool `json:"block_full_width"` BlockHeight float64 `json:"block_height"` BlockPageWidth bool `json:"block_page_width"` BlockPreserveScale bool `json:"block_preserve_scale"` BlockWidth float64 `json:"block_width"` DisplaySource string `json:"display_source,omitempty"` }
type FormatCollectionView ¶
type FormatColumn ¶
type FormatColumn struct { // e.g. 0.5 for half-sized column ColumnRatio float64 `json:"column_ratio"` }
FormatColumn describes format for BlockColumn
type FormatDrive ¶
type FormatDrive struct { DriveProperties *DriveProperties `json:"drive_properties"` DriveStatus *DriveStatus `json:"drive_status"` }
type FormatEmbed ¶
type FormatEmbed struct { BlockFullWidth bool `json:"block_full_width"` BlockHeight float64 `json:"block_height"` BlockPageWidth bool `json:"block_page_width"` BlockPreserveScale bool `json:"block_preserve_scale"` BlockWidth float64 `json:"block_width"` DisplaySource string `json:"display_source"` }
FormatEmbed describes format for BlockEmbed
type FormatFigma ¶
type FormatFigma struct { BlockFullWidth bool `json:"block_full_width"` BlockHeight float64 `json:"block_height"` BlockPageWidth bool `json:"block_page_width"` BlockPreserveScale bool `json:"block_preserve_scale"` BlockWidth float64 `json:"block_width"` DisplaySource string `json:"display_source"` }
type FormatHeader ¶
type FormatHeader struct {
BlockColor string `json:"block_color,omitempty"`
}
FormatHeader describes format for BlockHeader, BlockSubHeader, BlockSubSubHeader
type FormatImage ¶
type FormatImage struct { // comes from notion API BlockAspectRatio float64 `json:"block_aspect_ratio"` BlockFullWidth bool `json:"block_full_width"` BlockHeight float64 `json:"block_height"` BlockPageWidth bool `json:"block_page_width"` BlockPreserveScale bool `json:"block_preserve_scale"` BlockWidth float64 `json:"block_width"` DisplaySource string `json:"display_source,omitempty"` }
FormatImage describes format for BlockImage
type FormatMaps ¶
type FormatMaps struct { BlockFullWidth bool `json:"block_full_width"` BlockHeight float64 `json:"block_height"` BlockPageWidth bool `json:"block_page_width"` BlockPreserveScale bool `json:"block_preserve_scale"` BlockWidth float64 `json:"block_width"` DisplaySource string `json:"display_source,omitempty"` }
type FormatNumberedList ¶
type FormatNumberedList struct {
BlockColor string `json:"block_color"`
}
FormatNumberedList describes format for BlockNumberedList
type FormatPage ¶
type FormatPage struct { // /images/page-cover/gradients_11.jpg PageCover string `json:"page_cover"` // e.g. 0.6 PageCoverPosition float64 `json:"page_cover_position"` PageFont string `json:"page_font"` PageFullWidth bool `json:"page_full_width"` // it's url like https://s3-us-west-2.amazonaws.com/secure.notion-static.com/8b3930e3-9dfe-4ba7-a845-a8ff69154f2a/favicon-256.png // or emoji like "✉️" PageIcon string `json:"page_icon"` PageSmallText bool `json:"page_small_text"` BlockColor string `json:"block_color"` BlockLocked bool `json:"block_locked"` BlockLockedBy string `json:"block_locked_by"` CopiedFromPointer *CopiedFromPointer `json:"copied_from_pointer"` // calculated by us PageCoverURL string `json:"page_cover_url,omitempty"` }
FormatPage describes format for BlockPage
type FormatTable ¶
type FormatTable struct { PageSort []string `json:"page_sort"` TableWrap bool `json:"table_wrap"` TableProperties []*TableProperty `json:"table_properties"` }
FormatTable describes format for BlockTable
type FormatTableOfContents ¶
type FormatTableOfContents struct {
BlockColor string `json:"block_color,omitempty"`
}
type FormatText ¶
type FormatText struct {
BlockColor string `json:"block_color,omitempty"`
}
FormatText describes format for BlockText
type FormatToggle ¶
type FormatToggle struct {
BlockColor string `json:"block_color"`
}
FormatToggle describes format for BlockToggle
type FormatVideo ¶
type FormatVideo struct { BlockAspectRatio float64 `json:"block_aspect_ratio"` BlockFullWidth bool `json:"block_full_width"` BlockHeight int64 `json:"block_height"` BlockPageWidth bool `json:"block_page_width"` BlockPreserveScale bool `json:"block_preserve_scale"` BlockWidth int64 `json:"block_width"` DisplaySource string `json:"display_source"` }
FormatVideo describes fromat form BlockVideo
type FormulaArg ¶
type GetActivityLogResponse ¶
type GetActivityLogResponse struct { ActivityIDs []string `json:"activityIds"` RecordMap *RecordMap `json:"recordMap"` NextID string `json:"-"` RawJSON map[string]interface{} `json:"-"` }
GetActivityLogResponse is a response to /api/v3/getActivityLog api
type GetSignedURLsResponse ¶
type GetSignedURLsResponse struct { SignedURLS []string `json:"signedUrls"` RawJSON map[string]interface{} `json:"-"` }
GetSignedURLsResponse represents response to /api/v3/getSignedFileUrls api Note: it depends on Table type in request
type GetUploadFileUrlResponse ¶
type GetUploadFileUrlResponse struct { URL string `json:"url"` SignedGetURL string `json:"signedGetUrl"` SignedPutURL string `json:"signedPutUrl"` FileID string `json:"-"` RawJSON map[string]interface{} `json:"-"` }
GetUploadFileUrlResponse is a response to POST /api/v3/getUploadFileUrl
func (*GetUploadFileUrlResponse) Parse ¶
func (r *GetUploadFileUrlResponse) Parse()
type LoadCachedPageChunkResponse ¶
type LoadCachedPageChunkResponse struct { RecordMap *RecordMap `json:"recordMap"` Cursor cursor `json:"cursor"` RawJSON map[string]interface{} `json:"-"` }
LoadPageChunkResponse is a response to /api/v3/loadPageChunk api
type LoadUserResponse ¶
type LoadUserResponse struct { ID string `json:"id"` Table string `json:"table"` Role string `json:"role"` Value json.RawMessage `json:"value"` Block *Block `json:"-"` Space *Space `json:"-"` User *NotionUser `json:"-"` RawJSON map[string]interface{} `json:"-"` }
type LoaderReducer ¶
type LoaderReducer struct { Type string `json:"type"` //"reducer" Reducers map[string]interface{} `json:"reducers"` Sort []QuerySort `json:"sort,omitempty"` Filter map[string]interface{} `json:"filter,omitempty"` SearchQuery string `json:"searchQuery"` UserTimeZone string `json:"userTimeZone"` // e.g. "America/Los_Angeles" from User.Locale }
func MakeLoaderReducer ¶
func MakeLoaderReducer(query *Query) *LoaderReducer
type NotionID ¶
func NewNotionID ¶
type NotionUser ¶
type NotionUser struct { ID string `json:"id"` Version int `json:"version"` Email string `json:"email"` GivenName string `json:"given_name"` FamilyName string `json:"family_name"` ProfilePhoto string `json:"profile_photo"` OnboardingCompleted bool `json:"onboarding_completed"` MobileOnboardingCompleted bool `json:"mobile_onboarding_completed"` ClipperOnboardingCompleted bool `json:"clipper_onboarding_completed"` Name string `json:"name"` RawJSON map[string]interface{} `json:"-"` }
type Operation ¶
type Operation struct { ID string `json:"id"` // id of the block being modified Table string `json:"table"` // "block" etc. Path []string `json:"path"` // e.g. ["properties", "title"] Command string `json:"command"` // "set", "update", "listAfter" Args interface{} `json:"args"` }
Operation describes a single operation sent
type Page ¶
type Page struct { ID string NotionID *NotionID // expose raw records for all data associated with this page BlockRecords []*Record UserRecords []*Record CollectionRecords []*Record CollectionViewRecords []*Record DiscussionRecords []*Record CommentRecords []*Record SpaceRecords []*Record // for every block of type collection_view and its view_ids // we } TableView representing that collection view_id TableViews []*TableView // contains filtered or unexported fields }
Page describes a single Notion page
func (*Page) CollectionByID ¶
func (p *Page) CollectionByID(nid *NotionID) *Collection
CollectionByID returns a collection by its id
func (*Page) CollectionViewByID ¶
func (p *Page) CollectionViewByID(nid *NotionID) *CollectionView
CollectionViewByID returns a collection view by its id
func (*Page) CommentByID ¶
CommentByID returns a comment by its id
func (*Page) DiscussionByID ¶
func (p *Page) DiscussionByID(nid *NotionID) *Discussion
DiscussionByID returns a discussion by its id
func (*Page) ForEachBlock ¶
ForEachBlock recursively calls cb for each block in the page
func (*Page) GetNotionID ¶
func (*Page) GetSubPages ¶
GetSubPages return list of ids for direct sub-pages of this page
func (*Page) IsRoot ¶
IsRoot returns true if this block is root block of the page i.e. of type BlockPage and very first block
func (*Page) IsSubPage ¶
IsSubPage returns true if a given block is BlockPage and a direct child of this page (as opposed to a link to arbitrary page)
func (*Page) NotionUserByID ¶
func (p *Page) NotionUserByID(nid *NotionID) *NotionUser
UserByID returns a user by its id
type Permission ¶
type Permission struct { Type string `json:"type"` // common to some permission types Role interface{} `json:"role"` // if Type == "user_permission" UserID *string `json:"user_id,omitempty"` AddedTimestamp int64 `json:"added_timestamp"` // if Type == "public_permission" AllowDuplicate bool `json:"allow_duplicate"` AllowSearchEngineIndexing bool `json:"allow_search_engine_indexing"` }
Permission represents user permissions o
type PointerWithVersion ¶
type Query ¶
type Query struct { Sort []QuerySort `json:"sort"` Aggregate []QueryAggregate `json:"aggregate"` Aggregations []QueryAggregation `json:"aggregations"` Filter map[string]interface{} `json:"filter"` }
type QueryAggregate ¶
type QueryAggregation ¶
type QueryCollectionRequest ¶
type QueryCollectionRequest struct { Collection struct { ID string `json:"id"` SpaceID string `json:"spaceId"` } `json:"collection"` CollectionView struct { ID string `json:"id"` SpaceID string `json:"spaceId"` } `json:"collectionView"` Loader interface{} `json:"loader"` // e.g. LoaderReducer }
/api/v3/queryCollection request
type QueryCollectionResponse ¶
type QueryCollectionResponse struct { RecordMap *RecordMap `json:"recordMap"` Result struct { Type string `json:"type"` // TODO: there's probably more ReducerResults *ReducerResults `json:"reducerResults"` } `json:"result"` RawJSON map[string]interface{} `json:"-"` }
QueryCollectionResponse is json response for /api/v3/queryCollection
type Record ¶
type Record struct { // fields returned by the server Role string `json:"role"` // polymorphic value of the record, which we decode into Block, Space etc. Value json.RawMessage `json:"value"` // fields calculated from Value based on type ID string `json:"-"` Table string `json:"-"` Activity *Activity `json:"-"` Block *Block `json:"-"` Space *Space `json:"-"` NotionUser *NotionUser `json:"-"` UserRoot *UserRoot `json:"-"` UserSettings *UserSettings `json:"-"` Collection *Collection `json:"-"` CollectionView *CollectionView `json:"-"` Comment *Comment `json:"-"` Discussion *Discussion `json:"-"` }
Record represents a polymorphic record
type RecordMap ¶
type RecordMap struct { Version int `json:"__version__"` Activities map[string]*Record `json:"activity"` Blocks map[string]*Record `json:"block"` Spaces map[string]*Record `json:"space"` NotionUsers map[string]*Record `json:"notion_user"` UsersRoot map[string]*Record `json:"user_root"` UserSettings map[string]*Record `json:"user_setting"` Collections map[string]*Record `json:"collection"` CollectionViews map[string]*Record `json:"collection_view"` Comments map[string]*Record `json:"comment"` Discussions map[string]*Record `json:"discussion"` }
RecordMap contains a collections of blocks, a space, users, and collections.
type ReducerResults ¶
type ReducerResults struct { // TODO: probably more types CollectionGroupResults *CollectionGroupResults `json:"collection_group_results"` }
type Reminder ¶
type Reminder struct { Time string `json:"time"` // e.g. "09:00" Unit string `json:"unit"` // e.g. "day" Value int64 `json:"value"` }
Reminder represents a date reminder
type RequestCacheEntry ¶
type RequestCacheEntry struct { // request info Method string URL string Body string // response Response []byte // contains filtered or unexported fields }
RequestCacheEntry has info about request (method/url/body) and response
type Space ¶
type Space struct { ID string `json:"id"` Version float64 `json:"version"` Name string `json:"name"` Domain string `json:"domain"` Permissions []*SpacePermissions `json:"permissions,omitempty"` PermissionGroups []SpacePermissionGroups `json:"permission_groups"` Icon string `json:"icon"` EmailDomains []string `json:"email_domains"` BetaEnabled bool `json:"beta_enabled"` Pages []string `json:"pages,omitempty"` DisablePublicAccess bool `json:"disable_public_access"` DisableGuests bool `json:"disable_guests"` DisableMoveToSpace bool `json:"disable_move_to_space"` DisableExport bool `json:"disable_export"` CreatedBy string `json:"created_by"` CreatedTime int64 `json:"created_time"` LastEditedBy string `json:"last_edited_by"` LastEditedTime int64 `json:"last_edited_time"` RawJSON map[string]interface{} `json:"-"` }
Space describes Notion workspace.
type SpacePermissionGroups ¶
type SpacePermissionGroups struct { ID string `json:"id"` Name string `json:"name"` UserIds []string `json:"user_ids,omitempty"` }
SpacePermissionGroups represesnts group permissions for space
type SpacePermissions ¶
type SpacePermissions struct { Role string `json:"role"` Type string `json:"type"` // e.g. "user_permission" UserID string `json:"user_id"` }
SpacePermissions represents permissions for space
type SubscriptionData ¶
type SubscriptionData struct { Type string `json:"type"` SpaceUsers []SubscriptionDataSpaceUsers `json:"spaceUsers"` Credits []SubscriptionDataCredits `json:"credits"` TotalCredit int `json:"totalCredit"` AvailableCredit int `json:"availableCredit"` CreditEnabled bool `json:"creditEnabled"` CustomerID string `json:"customerId"` CustomerName string `json:"customerName"` VatID string `json:"vatId"` IsDelinquent bool `json:"isDelinquent"` ProductID string `json:"productId"` BillingEmail string `json:"billingEmail"` Plan string `json:"plan"` PlanAmount int `json:"planAmount"` AccountBalance int `json:"accountBalance"` MonthlyPlanAmount int `json:"monthlyPlanAmount"` YearlyPlanAmount int `json:"yearlyPlanAmount"` Quantity int `json:"quantity"` Billing string `json:"billing"` Address SubscriptionDataAddress `json:"address"` Last4 string `json:"last4"` Brand string `json:"brand"` Interval string `json:"interval"` Created int64 `json:"created"` PeriodEnd int64 `json:"periodEnd"` NextInvoiceTime int64 `json:"nextInvoiceTime"` NextInvoiceAmount int `json:"nextInvoiceAmount"` IsPaid bool `json:"isPaid"` Members []interface{} `json:"members"` RawJSON map[string]interface{} `json:"-"` }
type SubscriptionDataAddress ¶
type SubscriptionDataAddress struct { Name string `json:"name"` BusinessName string `json:"businessName"` AddressLine1 string `json:"addressLine1"` AddressLine2 string `json:"addressLine2"` ZipCode string `json:"zipCode"` City string `json:"city"` State string `json:"state"` Country string `json:"country"` }
type SubscriptionDataCredits ¶
type SyncRecordValuesResponse ¶
type SyncRecordValuesResponse struct { RecordMap *RecordMap `json:"recordMap"` RawJSON map[string]interface{} `json:"-"` }
SyncRecordValuesResponse represents response to /api/v3/syncRecordValues api Note: it depends on Table type in request
type TableProperty ¶
type TableProperty struct { Width int `json:"width"` Visible bool `json:"visible"` Property string `json:"property"` }
TableProperty describes property of a table
type TableView ¶
type TableView struct { // original data Page *Page CollectionView *CollectionView Collection *Collection // easier to work representation we calculate Columns []*ColumnInfo Rows []*TableRow }
TableView represents a view of a table (Notion calls it a Collection View) Meant to be a representation that is easier to work with
func (*TableView) CellContent ¶
func (*TableView) ColumnCount ¶
type TextAttr ¶
type TextAttr = []string
TextAttr describes attributes of a span of text First element is name of the attribute (e.g. AttrLink) The rest are optional information about attribute (e.g. for AttrLink it's URL, for AttrUser it's user id etc.)
type TextSpan ¶
TextSpan describes a text with attributes
func ParseTextSpans ¶
ParseTextSpans parses content from JSON into an easier to use form
type UserRoot ¶
type UserRoot struct { Role string `json:"role"` Value struct { ID string `json:"id"` Version int `json:"version"` SpaceViews []string `json:"space_views"` LeftSpaces []string `json:"left_spaces"` SpaceViewPointers []struct { ID string `json:"id"` Table string `json:"table"` SpaceID string `json:"spaceId"` } `json:"space_view_pointers"` } `json:"value"` RawJSON map[string]interface{} `json:"-"` }
type UserSettings ¶
type UserSettings struct { ID string `json:"id"` Version int `json:"version"` Settings struct { Type string `json:"type"` Locale string `json:"locale"` Source string `json:"source"` Persona string `json:"persona"` TimeZone string `json:"time_zone"` UsedMacApp bool `json:"used_mac_app"` PreferredLocale string `json:"preferred_locale"` UsedAndroidApp bool `json:"used_android_app"` UsedWindowsApp bool `json:"used_windows_app"` StartDayOfWeek int `json:"start_day_of_week"` UsedMobileWebApp bool `json:"used_mobile_web_app"` UsedDesktopWebApp bool `json:"used_desktop_web_app"` SeenViewsIntroModal bool `json:"seen_views_intro_modal"` PreferredLocaleOrigin string `json:"preferred_locale_origin"` SeenCommentSidebarV2 bool `json:"seen_comment_sidebar_v2"` SeenPersonaCollection bool `json:"seen_persona_collection"` SeenFileAttachmentIntro bool `json:"seen_file_attachment_intro"` HiddenCollectionDescriptions []string `json:"hidden_collection_descriptions"` CreatedEvernoteGettingStarted bool `json:"created_evernote_getting_started"` } `json:"settings"` RawJSON map[string]interface{} `json:"-"` }
Source Files ¶
- activity.go
- api_createEmailUser.go
- api_getActivityLog.go
- api_getSignedFileUrls.go
- api_getSubscriptionData.go
- api_getUploadFileUrl.go
- api_loadCachedPageChunk.go
- api_loadUserContent.go
- api_queryCollection.go
- api_syncRecordValues.go
- block.go
- caching_client.go
- client.go
- collection.go
- comment.go
- constants.go
- date.go
- debug.go
- discussion.go
- download_file.go
- dump_structure.go
- export_page.go
- inline_block.go
- json.go
- page.go
- record.go
- space.go
- submit_transaction.go
- user.go
- util.go