@notionhq/client 5.29.0 → 5.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/README.md +2 -2
  2. package/build/package.json +22 -14
  3. package/build/src/Client.d.ts +3 -5
  4. package/build/src/Client.d.ts.map +1 -1
  5. package/build/src/Client.js +0 -1
  6. package/build/src/Client.js.map +1 -1
  7. package/build/src/api-endpoint-methods.d.ts.map +1 -1
  8. package/build/src/api-endpoint-methods.js +34 -1
  9. package/build/src/api-endpoint-methods.js.map +1 -1
  10. package/build/src/api-endpoints/agents.d.ts.map +1 -1
  11. package/build/src/api-endpoints/agents.js.map +1 -1
  12. package/build/src/api-endpoints/blocks.d.ts.map +1 -1
  13. package/build/src/api-endpoints/blocks.js.map +1 -1
  14. package/build/src/api-endpoints/comments.d.ts.map +1 -1
  15. package/build/src/api-endpoints/comments.js.map +1 -1
  16. package/build/src/api-endpoints/common.d.ts.map +1 -1
  17. package/build/src/api-endpoints/common.js.map +1 -1
  18. package/build/src/api-endpoints/data-sources.d.ts.map +1 -1
  19. package/build/src/api-endpoints/data-sources.js.map +1 -1
  20. package/build/src/api-endpoints/databases.d.ts.map +1 -1
  21. package/build/src/api-endpoints/databases.js.map +1 -1
  22. package/build/src/api-endpoints/pages.d.ts.map +1 -1
  23. package/build/src/api-endpoints/pages.js.map +1 -1
  24. package/build/src/api-endpoints/views.d.ts.map +1 -1
  25. package/build/src/api-endpoints/views.js.map +1 -1
  26. package/build/src/errors.js.map +1 -1
  27. package/build/src/helpers.d.ts.map +1 -1
  28. package/build/src/helpers.js.map +1 -1
  29. package/build/src/index.d.ts +9 -5
  30. package/build/src/index.d.ts.map +1 -1
  31. package/build/src/index.js +4 -1
  32. package/build/src/index.js.map +1 -1
  33. package/build/src/meeting-notes.d.ts +3 -6
  34. package/build/src/meeting-notes.d.ts.map +1 -1
  35. package/build/src/meeting-notes.js +0 -27
  36. package/build/src/meeting-notes.js.map +1 -1
  37. package/build/src/webhooks.d.ts +1 -2
  38. package/build/src/webhooks.d.ts.map +1 -1
  39. package/build/src/webhooks.js +18 -58
  40. package/build/src/webhooks.js.map +1 -1
  41. package/package.json +22 -14
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAoQH,mCAA4C;AAAnC,gGAAA,OAAO,OAAU;AAC1B,qCAA4C;AAAnC,mGAAA,QAAQ,OAAA;AACjB,mCAeiB;AAZf,sGAAA,YAAY,OAAA;AACZ,yGAAA,eAAe,OAAA;AAGf,0GAAA,gBAAgB,OAAA;AAChB,kHAAA,wBAAwB,OAAA;AACxB,6GAAA,mBAAmB,OAAA;AACnB,mHAAA,yBAAyB,OAAA;AACzB,qHAAA,2BAA2B,OAAA;AAC3B,gBAAgB;AAChB,6GAAA,mBAAmB,OAAA;AACnB,6GAAA,mBAAmB,OAAA;AAGrB,yCAOoB;AANlB,6GAAA,gBAAgB,OAAA;AAChB,+GAAA,kBAAkB,OAAA;AAClB,gHAAA,mBAAmB,OAAA;AACnB,2HAAA,8BAA8B,OAAA;AAC9B,uHAAA,0BAA0B,OAAA;AAC1B,kHAAA,qBAAqB,OAAA;AAEvB,qCAmBkB;AAlBhB,8GAAA,mBAAmB,OAAA;AACnB,8GAAA,mBAAmB,OAAA;AACnB,qHAAA,0BAA0B,OAAA;AAC1B,qHAAA,0BAA0B,OAAA;AAC1B,mHAAA,wBAAwB,OAAA;AACxB,mHAAA,wBAAwB,OAAA;AACxB,sGAAA,WAAW,OAAA;AACX,2GAAA,gBAAgB,OAAA;AAChB,yGAAA,cAAc,OAAA;AACd,qGAAA,UAAU,OAAA;AACV,qGAAA,UAAU,OAAA;AACV,wGAAA,aAAa,OAAA;AACb,qGAAA,UAAU,OAAA;AACV,iHAAA,sBAAsB,OAAA;AACtB,0GAAA,eAAe,OAAA;AACf,4GAAA,iBAAiB,OAAA;AACjB,wGAAA,aAAa,OAAA;AACb,yGAAA,cAAc,OAAA;AAMhB,uCAAuE;AAA9D,kHAAA,sBAAsB,OAAA;AAAE,8GAAA,kBAAkB,OAAA;AAWnD,iDAAkE;AAAzD,iIAAA,gCAAgC,OAAA","sourcesContent":["/**\n * index.ts\n *\n * This file is the entry point for the Notion SDK.\n * It exports the Client class and all the API endpoints.\n *\n * @packageDocumentation\n */\n\nimport type { RichTextItemResponseCommon } from \"./api-endpoints\"\n\nexport type {\n GetPluginDirectoryParameters,\n GetPluginDirectoryResponse,\n GetSkillDirectoryParameters,\n GetSkillDirectoryResponse,\n ListSkillsPluginsParameters,\n ListSkillsPluginsResponse,\n UploadSkillParameters,\n UploadSkillResponse,\n AgentBatchParameters,\n AgentBatchResponse,\n ApiColor,\n AppendBlockChildrenParameters,\n AppendBlockChildrenResponse,\n AudioBlockObjectResponse,\n BlockObjectRequest,\n BlockObjectResponse,\n BookmarkBlockObjectResponse,\n BotUserObjectResponse,\n BreadcrumbBlockObjectResponse,\n BulletedListItemBlockObjectResponse,\n ButtonPropertyItemObjectResponse,\n CalloutBlockObjectResponse,\n CancelSessionParameters,\n CancelSessionResponse,\n CheckboxPropertyItemObjectResponse,\n ChildDatabaseBlockObjectResponse,\n ChildPageBlockObjectResponse,\n CodeBlockObjectResponse,\n ColumnBlockObjectResponse,\n ColumnListBlockObjectResponse,\n CommentObjectResponse,\n CompleteFileUploadParameters,\n CompleteFileUploadResponse,\n CreateCommentParameters,\n CreateCommentResponse,\n CreateDatabaseParameters,\n CreateDatabaseResponse,\n CreateDataSourceParameters,\n CreateDataSourceResponse,\n CreateViewParameters,\n CreateViewResponse,\n CreateViewQueryParameters,\n CreateViewQueryResponse,\n DashboardRowResponse,\n DashboardWidgetResponse,\n CreatedByPropertyItemObjectResponse,\n CreatedTimePropertyItemObjectResponse,\n CreateFileUploadParameters,\n CreateFileUploadResponse,\n CreatePageParameters,\n CreatePageResponse,\n DatabaseObjectResponse,\n DataSourceObjectResponse,\n DataSourceViewObjectResponse,\n DatePropertyItemObjectResponse,\n DeleteAgentParameters,\n DeleteAgentResponse,\n DeleteBlockParameters,\n DeleteBlockResponse,\n DeleteCommentParameters,\n DeleteCommentResponse,\n DeletedViewQueryResponse,\n DeleteViewParameters,\n DeleteViewResponse,\n DeleteViewQueryParameters,\n DeleteViewQueryResponse,\n DividerBlockObjectResponse,\n EmailPropertyItemObjectResponse,\n EmbedBlockObjectResponse,\n EquationBlockObjectResponse,\n EquationRichTextItemResponse,\n FileBlockObjectResponse,\n FilesPropertyItemObjectResponse,\n FileUploadObjectResponse,\n FormulaPropertyItemObjectResponse,\n GetAsyncTaskParameters,\n GetAsyncTaskResponse,\n GetAgentParameters,\n GetAgentResponse,\n GetBlockParameters,\n GetBlockResponse,\n GetCommentParameters,\n GetCommentResponse,\n GetDatabaseParameters,\n GetDatabaseResponse,\n GetDataSourceParameters,\n GetDataSourceResponse,\n GetFileUploadParameters,\n GetFileUploadResponse,\n GetInsightsParameters,\n GetInsightsResponse,\n GetPageParameters,\n GetPagePropertyParameters,\n GetPagePropertyResponse,\n GetPageResponse,\n GetSelfParameters,\n GetSelfResponse,\n GetUserParameters,\n GetUserResponse,\n GetViewParameters,\n GetViewResponse,\n GetViewQueryResultsParameters,\n GetViewQueryResultsResponse,\n GroupObjectResponse,\n Heading1BlockObjectResponse,\n Heading2BlockObjectResponse,\n Heading3BlockObjectResponse,\n ImageBlockObjectResponse,\n LastEditedByPropertyItemObjectResponse,\n LastEditedTimePropertyItemObjectResponse,\n LinkPreviewBlockObjectResponse,\n LinkToPageBlockObjectResponse,\n ListBlockChildrenParameters,\n ListBlockChildrenResponse,\n ListCommentsParameters,\n ListCommentsResponse,\n ListCustomEmojisParameters,\n ListCustomEmojisResponse,\n CustomEmojiResponse,\n ListDatabaseViewsParameters,\n ListDatabaseViewsResponse,\n ListFileUploadsParameters,\n ListFileUploadsResponse,\n ListUsersParameters,\n ListUsersResponse,\n MeetingNotesBlockObjectResponse,\n MentionRichTextItemResponse,\n MovePageParameters,\n MovePageResponse,\n MultiSelectPropertyItemObjectResponse,\n NumberedListItemBlockObjectResponse,\n NumberPropertyItemObjectResponse,\n OauthIntrospectParameters,\n OauthIntrospectResponse,\n OauthRevokeParameters,\n OauthRevokeResponse,\n OauthTokenParameters,\n OauthTokenResponse,\n PageMarkdownResponse,\n PageObjectResponse,\n PageWriteNotificationsSchema,\n ParagraphBlockObjectResponse,\n PartialBlockObjectResponse,\n PartialCommentObjectResponse,\n PartialDatabaseObjectResponse,\n PartialDataSourceObjectResponse,\n PartialDataSourceViewObjectResponse,\n PartialPageObjectResponse,\n PartialUserObjectResponse,\n PdfBlockObjectResponse,\n PeoplePropertyItemObjectResponse,\n PersonUserObjectResponse,\n PhoneNumberPropertyItemObjectResponse,\n PropertyItemListResponse,\n PropertyItemObjectResponse,\n PublicApiAsyncTaskStatusResultJsonValue,\n QueryDataSourceParameters,\n QueryDataSourceResponse,\n QueryAgentsParameters,\n QueryAgentsResponse,\n QuerySessionEventsParameters,\n QuerySessionEventsResponse,\n QuerySessionsParameters,\n QuerySessionsResponse,\n QuoteBlockObjectResponse,\n RelationPropertyItemObjectResponse,\n RetrieveSessionParameters,\n RetrieveSessionResponse,\n RichTextItemResponse,\n RichTextItemResponseCommon,\n RichTextPropertyItemObjectResponse,\n RollupPropertyItemObjectResponse,\n SearchParameters,\n SearchResponse,\n SelectPropertyItemObjectResponse,\n SendFileUploadParameters,\n SendFileUploadResponse,\n SessionAgentIdFilter,\n SessionIdFilter,\n SessionNestedFilter,\n SessionStatusFilter,\n SessionTimestampFilter,\n StatusPropertyItemObjectResponse,\n SyncedBlockBlockObjectResponse,\n TableBlockObjectResponse,\n TableOfContentsBlockObjectResponse,\n TableRowBlockObjectResponse,\n TemplateBlockObjectResponse,\n TextRichTextItemResponse,\n TitlePropertyItemObjectResponse,\n ToDoBlockObjectResponse,\n ToggleBlockObjectResponse,\n TranscriptionBlockObjectResponse,\n UniqueIdPropertyItemObjectResponse,\n UnsupportedBlockObjectResponse,\n UpdateBlockParameters,\n UpdateBlockResponse,\n UpdateAgentCreditLimitParameters,\n UpdateAgentCreditLimitResponse,\n UpdateAgentStatusParameters,\n UpdateAgentStatusResponse,\n UpdateCommentParameters,\n UpdateCommentResponse,\n UpdateDatabaseParameters,\n UpdateDatabaseResponse,\n UpdateDataSourceParameters,\n UpdateDataSourceResponse,\n UpdatePageParameters,\n UpdatePageResponse,\n UpdateSessionParameters,\n UpdateSessionResponse,\n UpdateSessionStreamParameters,\n UpdateSessionStreamResponse,\n UpdateViewParameters,\n UpdateViewResponse,\n UrlPropertyItemObjectResponse,\n UserObjectResponse,\n ViewQueryResponse,\n VerificationPropertyItemObjectResponse,\n VideoBlockObjectResponse,\n // Webhook payload types\n BaseWebhookPayload,\n CommentCreatedWebhookPayload,\n CommentDeletedWebhookPayload,\n CommentUpdatedWebhookPayload,\n DataSourceContentUpdatedWebhookPayload,\n DataSourceCreatedWebhookPayload,\n DataSourceDeletedWebhookPayload,\n DataSourceMovedWebhookPayload,\n DataSourceSchemaUpdatedWebhookPayload,\n DataSourceUndeletedWebhookPayload,\n DatabaseContentUpdatedWebhookPayload,\n DatabaseCreatedWebhookPayload,\n DatabaseDeletedWebhookPayload,\n DatabaseMovedWebhookPayload,\n DatabaseSchemaUpdatedWebhookPayload,\n DatabaseUndeletedWebhookPayload,\n FileUploadCompletedWebhookPayload,\n FileUploadCreatedWebhookPayload,\n FileUploadExpiredWebhookPayload,\n FileUploadUploadFailedWebhookPayload,\n PageContentUpdatedWebhookPayload,\n PageCreatedWebhookPayload,\n PageDeletedWebhookPayload,\n PageLockedWebhookPayload,\n PageMovedWebhookPayload,\n PagePropertiesUpdatedWebhookPayload,\n PageTranscriptionBlockTranscriptDeletedWebhookPayload,\n PageUndeletedWebhookPayload,\n PageUnlockedWebhookPayload,\n ViewCreatedWebhookPayload,\n ViewDeletedWebhookPayload,\n ViewUpdatedWebhookPayload,\n} from \"./api-endpoints\"\nexport type AnnotationResponse = RichTextItemResponseCommon[\"annotations\"]\nexport { default as Client } from \"./Client\"\nexport { LogLevel, Logger } from \"./logging\"\nexport {\n // Error codes\n NotionErrorCode,\n APIErrorCode,\n ClientErrorCode,\n // Error types\n NotionClientError,\n APIResponseError,\n UnknownHTTPResponseError,\n RequestTimeoutError,\n InvalidPathParameterError,\n BrowserTokenNotAllowedError,\n // Error helpers\n isNotionClientError,\n isHTTPResponseError,\n} from \"./errors\"\nexport type { RetryOptions } from \"./Client\"\nexport {\n DEFAULT_BASE_URL,\n DEFAULT_TIMEOUT_MS,\n DEFAULT_MAX_RETRIES,\n DEFAULT_INITIAL_RETRY_DELAY_MS,\n DEFAULT_MAX_RETRY_DELAY_MS,\n MIN_VIEW_COLUMN_WIDTH,\n} from \"./constants\"\nexport {\n collectPaginatedAPI,\n iteratePaginatedAPI,\n collectDataSourceTemplates,\n iterateDataSourceTemplates,\n iterateAllDataSourceRows,\n collectAllDataSourceRows,\n isFullBlock,\n isFullDataSource,\n isFullDatabase,\n isFullPage,\n isFullUser,\n isFullComment,\n isFullView,\n isFullPageOrDataSource,\n extractNotionId,\n extractDatabaseId,\n extractPageId,\n extractBlockId,\n} from \"./helpers\"\nexport type {\n FullDataSourceQueryArgs,\n FullDataSourceQueryFilter,\n} from \"./helpers\"\nexport { verifyWebhookSignature, signWebhookPayload } from \"./webhooks\"\nexport type { VerifyWebhookSignatureArgs } from \"./webhooks\"\nexport type { QueryMeetingNotesResponse } from \"./api-endpoints/meeting-notes\"\nexport type {\n QueryMeetingNotesParameters,\n MeetingNotesCombinatorFilter,\n MeetingNotesFilterNode,\n MeetingNotesPropertyFilter,\n MeetingNotesPropertyName,\n MeetingNotesSort,\n} from \"./meeting-notes\"\nexport { meetingNotesFilterableProperties } from \"./meeting-notes\"\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;;AA0RH,mCAA4C;AAAnC,iHAAA,OAAO,OAAU;AAC1B,qCAAiD;AAAxC,mGAAA,QAAQ,OAAA;AACjB,mCAeiB;AAZf,sGAAA,YAAY,OAAA;AACZ,yGAAA,eAAe,OAAA;AAGf,0GAAA,gBAAgB,OAAA;AAChB,kHAAA,wBAAwB,OAAA;AACxB,6GAAA,mBAAmB,OAAA;AACnB,mHAAA,yBAAyB,OAAA;AACzB,qHAAA,2BAA2B,OAAA;AAC3B,gBAAgB;AAChB,6GAAA,mBAAmB,OAAA;AACnB,6GAAA,mBAAmB,OAAA;AAGrB,yCAOoB;AANlB,6GAAA,gBAAgB,OAAA;AAChB,+GAAA,kBAAkB,OAAA;AAClB,gHAAA,mBAAmB,OAAA;AACnB,2HAAA,8BAA8B,OAAA;AAC9B,uHAAA,0BAA0B,OAAA;AAC1B,kHAAA,qBAAqB,OAAA;AAEvB,qCAmBkB;AAlBhB,8GAAA,mBAAmB,OAAA;AACnB,8GAAA,mBAAmB,OAAA;AACnB,qHAAA,0BAA0B,OAAA;AAC1B,qHAAA,0BAA0B,OAAA;AAC1B,mHAAA,wBAAwB,OAAA;AACxB,mHAAA,wBAAwB,OAAA;AACxB,sGAAA,WAAW,OAAA;AACX,2GAAA,gBAAgB,OAAA;AAChB,yGAAA,cAAc,OAAA;AACd,qGAAA,UAAU,OAAA;AACV,qGAAA,UAAU,OAAA;AACV,wGAAA,aAAa,OAAA;AACb,qGAAA,UAAU,OAAA;AACV,iHAAA,sBAAsB,OAAA;AACtB,0GAAA,eAAe,OAAA;AACf,4GAAA,iBAAiB,OAAA;AACjB,wGAAA,aAAa,OAAA;AACb,yGAAA,cAAc,OAAA;AAMhB,uCAAuE;AAA9D,kHAAA,sBAAsB,OAAA;AAAE,8GAAA,kBAAkB,OAAA;AAWnD,iDAAkE;AAAzD,iIAAA,gCAAgC,OAAA","sourcesContent":["/**\n * index.ts\n *\n * This file is the entry point for the Notion SDK.\n * It exports the Client class and all the API endpoints.\n *\n * @packageDocumentation\n */\n\nimport type {\n QueryDataSourceParameters,\n RichTextItemResponseCommon,\n} from \"./api-endpoints\"\n\nexport type {\n GetPluginDirectoryParameters,\n GetPluginDirectoryResponse,\n GetSkillDirectoryParameters,\n GetSkillDirectoryResponse,\n ListSkillsPluginsParameters,\n ListSkillsPluginsResponse,\n UploadSkillParameters,\n UploadSkillResponse,\n AgentBatchParameters,\n AgentBatchResponse,\n ApiColor,\n AppendBlockChildrenParameters,\n AppendBlockChildrenResponse,\n AudioBlockObjectResponse,\n BlockObjectRequest,\n BlockObjectResponse,\n BookmarkBlockObjectResponse,\n BotUserObjectResponse,\n BreadcrumbBlockObjectResponse,\n BulletedListItemBlockObjectResponse,\n ButtonPropertyItemObjectResponse,\n CalloutBlockObjectResponse,\n CancelSessionParameters,\n CancelSessionResponse,\n CheckboxPropertyItemObjectResponse,\n ChildDatabaseBlockObjectResponse,\n ChildPageBlockObjectResponse,\n CodeBlockObjectResponse,\n ColumnBlockObjectResponse,\n ColumnListBlockObjectResponse,\n CommentObjectResponse,\n CompleteFileUploadParameters,\n CompleteFileUploadResponse,\n CreateCommentParameters,\n CreateCommentResponse,\n CreateDatabaseParameters,\n CreateDatabaseResponse,\n CreateDataSourceParameters,\n CreateDataSourceResponse,\n CreateViewParameters,\n CreateViewResponse,\n CreateViewQueryParameters,\n CreateViewQueryResponse,\n DashboardRowResponse,\n DashboardWidgetResponse,\n CreatedByPropertyItemObjectResponse,\n CreatedTimePropertyItemObjectResponse,\n CreateFileUploadParameters,\n CreateFileUploadResponse,\n CreatePageParameters,\n CreatePageResponse,\n DatabaseObjectResponse,\n DataSourceObjectResponse,\n DataSourceViewObjectResponse,\n DatePropertyItemObjectResponse,\n DateRequest,\n DateResponse,\n DeleteAgentParameters,\n DeleteAgentResponse,\n DeleteBlockParameters,\n DeleteBlockResponse,\n DeleteCommentParameters,\n DeleteCommentResponse,\n DeletedViewQueryResponse,\n DeleteViewParameters,\n DeleteViewResponse,\n DeleteViewQueryParameters,\n DeleteViewQueryResponse,\n DividerBlockObjectResponse,\n EmailPropertyItemObjectResponse,\n EmbedBlockObjectResponse,\n EquationBlockObjectResponse,\n EquationRichTextItemResponse,\n FileBlockObjectResponse,\n FilesPropertyItemObjectResponse,\n FileUploadObjectResponse,\n FormulaPropertyItemObjectResponse,\n GetAsyncTaskParameters,\n GetAsyncTaskResponse,\n GetAgentParameters,\n GetAgentResponse,\n GetBlockParameters,\n GetBlockResponse,\n GetCommentParameters,\n GetCommentResponse,\n GetDatabaseParameters,\n GetDatabaseResponse,\n GetDataSourceParameters,\n GetDataSourceResponse,\n GetFileUploadParameters,\n GetFileUploadResponse,\n GetInsightsParameters,\n GetInsightsResponse,\n GetPageParameters,\n GetPagePropertyParameters,\n GetPagePropertyResponse,\n GetPageResponse,\n GetSelfParameters,\n GetSelfResponse,\n GetUserParameters,\n GetUserResponse,\n GetViewParameters,\n GetViewResponse,\n GetViewQueryResultsParameters,\n GetViewQueryResultsResponse,\n GroupObjectResponse,\n Heading1BlockObjectResponse,\n Heading2BlockObjectResponse,\n Heading3BlockObjectResponse,\n ImageBlockObjectResponse,\n LastEditedByPropertyItemObjectResponse,\n LastEditedTimePropertyItemObjectResponse,\n LinkPreviewBlockObjectResponse,\n LinkToPageBlockObjectResponse,\n ListBlockChildrenParameters,\n ListBlockChildrenResponse,\n ListCommentsParameters,\n ListCommentsResponse,\n ListCustomEmojisParameters,\n ListCustomEmojisResponse,\n CustomEmojiResponse,\n ListDatabaseViewsParameters,\n ListDatabaseViewsResponse,\n ListFileUploadsParameters,\n ListFileUploadsResponse,\n ListUsersParameters,\n ListUsersResponse,\n MeetingNotesBlockObjectResponse,\n MentionRichTextItemResponse,\n MovePageParameters,\n MovePageResponse,\n MultiSelectPropertyItemObjectResponse,\n NumberedListItemBlockObjectResponse,\n NumberPropertyItemObjectResponse,\n OauthIntrospectParameters,\n OauthIntrospectResponse,\n OauthRevokeParameters,\n OauthRevokeResponse,\n OauthTokenParameters,\n OauthTokenResponse,\n PageIconRequest,\n PageIconResponse,\n PageMarkdownResponse,\n PageObjectResponse,\n PageWriteNotificationsSchema,\n ParagraphBlockObjectResponse,\n PartialBlockObjectResponse,\n PartialCommentObjectResponse,\n PartialDatabaseObjectResponse,\n PartialDataSourceObjectResponse,\n PartialDataSourceViewObjectResponse,\n PartialPageObjectResponse,\n PartialUserObjectResponse,\n PdfBlockObjectResponse,\n PeoplePropertyItemObjectResponse,\n PersonUserObjectResponse,\n PhoneNumberPropertyItemObjectResponse,\n PropertyConfigurationRequest,\n PropertyFilter,\n PropertyItemListResponse,\n PropertyItemObjectResponse,\n PublicApiAsyncTaskStatusResultJsonValue,\n QueryDataSourceParameters,\n QueryDataSourceResponse,\n QueryAgentsParameters,\n QueryAgentsResponse,\n QuerySessionEventsParameters,\n QuerySessionEventsResponse,\n QuerySessionsParameters,\n QuerySessionsResponse,\n QuoteBlockObjectResponse,\n RelationPropertyItemObjectResponse,\n RetrieveSessionParameters,\n RetrieveSessionResponse,\n RichTextItemRequest,\n RichTextItemResponse,\n RichTextItemResponseCommon,\n RichTextPropertyItemObjectResponse,\n RollupPropertyItemObjectResponse,\n SearchParameters,\n SearchResponse,\n SelectPropertyItemObjectResponse,\n SendFileUploadParameters,\n SendFileUploadResponse,\n SessionAgentIdFilter,\n SessionIdFilter,\n SessionNestedFilter,\n SessionStatusFilter,\n SessionTimestampFilter,\n StatusPropertyItemObjectResponse,\n SyncedBlockBlockObjectResponse,\n TableBlockObjectResponse,\n TableOfContentsBlockObjectResponse,\n TableRowBlockObjectResponse,\n TemplateBlockObjectResponse,\n TextRichTextItemResponse,\n TimestampFilter,\n TitlePropertyItemObjectResponse,\n ToDoBlockObjectResponse,\n ToggleBlockObjectResponse,\n TranscriptionBlockObjectResponse,\n UniqueIdPropertyItemObjectResponse,\n UnsupportedBlockObjectResponse,\n UpdateBlockParameters,\n UpdateBlockResponse,\n UpdateAgentCreditLimitParameters,\n UpdateAgentCreditLimitResponse,\n UpdateAgentStatusParameters,\n UpdateAgentStatusResponse,\n UpdateCommentParameters,\n UpdateCommentResponse,\n UpdateDatabaseParameters,\n UpdateDatabaseResponse,\n UpdateDataSourceParameters,\n UpdateDataSourceResponse,\n UpdatePageParameters,\n UpdatePageResponse,\n UpdateSessionParameters,\n UpdateSessionResponse,\n UpdateSessionStreamParameters,\n UpdateSessionStreamResponse,\n UpdateViewParameters,\n UpdateViewResponse,\n UrlPropertyItemObjectResponse,\n UserObjectResponse,\n ViewQueryResponse,\n VerificationPropertyItemObjectResponse,\n VideoBlockObjectResponse,\n // Webhook payload types\n BaseWebhookPayload,\n CommentCreatedWebhookPayload,\n CommentDeletedWebhookPayload,\n CommentUpdatedWebhookPayload,\n DataSourceContentUpdatedWebhookPayload,\n DataSourceCreatedWebhookPayload,\n DataSourceDeletedWebhookPayload,\n DataSourceMovedWebhookPayload,\n DataSourceSchemaUpdatedWebhookPayload,\n DataSourceUndeletedWebhookPayload,\n DatabaseContentUpdatedWebhookPayload,\n DatabaseCreatedWebhookPayload,\n DatabaseDeletedWebhookPayload,\n DatabaseMovedWebhookPayload,\n DatabaseSchemaUpdatedWebhookPayload,\n DatabaseUndeletedWebhookPayload,\n FileUploadCompletedWebhookPayload,\n FileUploadCreatedWebhookPayload,\n FileUploadExpiredWebhookPayload,\n FileUploadUploadFailedWebhookPayload,\n PageContentUpdatedWebhookPayload,\n PageCreatedWebhookPayload,\n PageDeletedWebhookPayload,\n PageLockedWebhookPayload,\n PageMovedWebhookPayload,\n PagePropertiesUpdatedWebhookPayload,\n PageTranscriptionBlockTranscriptDeletedWebhookPayload,\n PageUndeletedWebhookPayload,\n PageUnlockedWebhookPayload,\n ViewCreatedWebhookPayload,\n ViewDeletedWebhookPayload,\n ViewUpdatedWebhookPayload,\n} from \"./api-endpoints\"\nexport type AnnotationResponse = RichTextItemResponseCommon[\"annotations\"]\n\n/** A data source query filter, including compound `and` and `or` groups. */\nexport type QueryDataSourceFilter = NonNullable<\n QueryDataSourceParameters[\"filter\"]\n>\n\n/** One sort in a data source query's `sorts` array. */\nexport type QueryDataSourceSort = NonNullable<\n QueryDataSourceParameters[\"sorts\"]\n>[number]\n\nexport { default as Client } from \"./Client\"\nexport { LogLevel, type Logger } from \"./logging\"\nexport {\n // Error codes\n type NotionErrorCode,\n APIErrorCode,\n ClientErrorCode,\n // Error types\n type NotionClientError,\n APIResponseError,\n UnknownHTTPResponseError,\n RequestTimeoutError,\n InvalidPathParameterError,\n BrowserTokenNotAllowedError,\n // Error helpers\n isNotionClientError,\n isHTTPResponseError,\n} from \"./errors\"\nexport type { ClientOptions, RetryOptions } from \"./Client\"\nexport {\n DEFAULT_BASE_URL,\n DEFAULT_TIMEOUT_MS,\n DEFAULT_MAX_RETRIES,\n DEFAULT_INITIAL_RETRY_DELAY_MS,\n DEFAULT_MAX_RETRY_DELAY_MS,\n MIN_VIEW_COLUMN_WIDTH,\n} from \"./constants\"\nexport {\n collectPaginatedAPI,\n iteratePaginatedAPI,\n collectDataSourceTemplates,\n iterateDataSourceTemplates,\n iterateAllDataSourceRows,\n collectAllDataSourceRows,\n isFullBlock,\n isFullDataSource,\n isFullDatabase,\n isFullPage,\n isFullUser,\n isFullComment,\n isFullView,\n isFullPageOrDataSource,\n extractNotionId,\n extractDatabaseId,\n extractPageId,\n extractBlockId,\n} from \"./helpers\"\nexport type {\n FullDataSourceQueryArgs,\n FullDataSourceQueryFilter,\n} from \"./helpers\"\nexport { verifyWebhookSignature, signWebhookPayload } from \"./webhooks\"\nexport type { VerifyWebhookSignatureArgs } from \"./webhooks\"\nexport type { QueryMeetingNotesResponse } from \"./api-endpoints/meeting-notes\"\nexport type {\n QueryMeetingNotesParameters,\n MeetingNotesCombinatorFilter,\n MeetingNotesFilterNode,\n MeetingNotesPropertyFilter,\n MeetingNotesPropertyName,\n MeetingNotesSort,\n} from \"./meeting-notes\"\nexport { meetingNotesFilterableProperties } from \"./meeting-notes\"\n"]}
@@ -1,12 +1,9 @@
1
1
  import type { QueryMeetingNotesParameters as ApiQueryMeetingNotesParameters } from "./api-endpoints/meeting-notes";
2
2
  export declare const meetingNotesFilterableProperties: readonly ["title", "created_time", "last_edited_time", "created_by", "last_edited_by", "attendees"];
3
- declare const meetingNotesTextFilterOperators: readonly ["string_is", "string_is_not", "string_contains", "string_does_not_contain", "string_starts_with", "string_ends_with", "is_empty", "is_not_empty"];
4
- declare const meetingNotesDateFilterOperators: readonly ["date_is", "date_is_before", "date_is_after", "date_is_on_or_before", "date_is_on_or_after", "date_is_within", "date_is_relative_to", "is_empty", "is_not_empty"];
5
- declare const meetingNotesPersonFilterOperators: readonly ["person_contains", "person_does_not_contain", "is_empty", "is_not_empty"];
6
3
  export type MeetingNotesPropertyName = (typeof meetingNotesFilterableProperties)[number];
7
- type MeetingNotesTextFilterOperator = (typeof meetingNotesTextFilterOperators)[number];
8
- type MeetingNotesDateFilterOperator = (typeof meetingNotesDateFilterOperators)[number];
9
- type MeetingNotesPersonFilterOperator = (typeof meetingNotesPersonFilterOperators)[number];
4
+ type MeetingNotesTextFilterOperator = "string_is" | "string_is_not" | "string_contains" | "string_does_not_contain" | "string_starts_with" | "string_ends_with" | "is_empty" | "is_not_empty";
5
+ type MeetingNotesDateFilterOperator = "date_is" | "date_is_before" | "date_is_after" | "date_is_on_or_before" | "date_is_on_or_after" | "date_is_within" | "date_is_relative_to" | "is_empty" | "is_not_empty";
6
+ type MeetingNotesPersonFilterOperator = "person_contains" | "person_does_not_contain" | "is_empty" | "is_not_empty";
10
7
  type MeetingNotesNoValueFilter<TOperator extends string> = {
11
8
  operator: TOperator;
12
9
  };
@@ -1 +1 @@
1
- {"version":3,"file":"meeting-notes.d.ts","sourceRoot":"","sources":["../../src/meeting-notes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"meeting-notes.d.ts","sourceRoot":"","sources":["../../src/meeting-notes.ts"],"names":[],"mappings":"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"}
@@ -10,31 +10,4 @@ exports.meetingNotesFilterableProperties = [
10
10
  "last_edited_by",
11
11
  "attendees",
12
12
  ];
13
- const meetingNotesTextFilterOperators = [
14
- "string_is",
15
- "string_is_not",
16
- "string_contains",
17
- "string_does_not_contain",
18
- "string_starts_with",
19
- "string_ends_with",
20
- "is_empty",
21
- "is_not_empty",
22
- ];
23
- const meetingNotesDateFilterOperators = [
24
- "date_is",
25
- "date_is_before",
26
- "date_is_after",
27
- "date_is_on_or_before",
28
- "date_is_on_or_after",
29
- "date_is_within",
30
- "date_is_relative_to",
31
- "is_empty",
32
- "is_not_empty",
33
- ];
34
- const meetingNotesPersonFilterOperators = [
35
- "person_contains",
36
- "person_does_not_contain",
37
- "is_empty",
38
- "is_not_empty",
39
- ];
40
13
  //# sourceMappingURL=meeting-notes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"meeting-notes.js","sourceRoot":"","sources":["../../src/meeting-notes.ts"],"names":[],"mappings":";;;AAEA,0BAA0B;AAEb,QAAA,gCAAgC,GAAG;IAC9C,OAAO;IACP,cAAc;IACd,kBAAkB;IAClB,YAAY;IACZ,gBAAgB;IAChB,WAAW;CACH,CAAA;AAEV,MAAM,+BAA+B,GAAG;IACtC,WAAW;IACX,eAAe;IACf,iBAAiB;IACjB,yBAAyB;IACzB,oBAAoB;IACpB,kBAAkB;IAClB,UAAU;IACV,cAAc;CACN,CAAA;AAEV,MAAM,+BAA+B,GAAG;IACtC,SAAS;IACT,gBAAgB;IAChB,eAAe;IACf,sBAAsB;IACtB,qBAAqB;IACrB,gBAAgB;IAChB,qBAAqB;IACrB,UAAU;IACV,cAAc;CACN,CAAA;AAEV,MAAM,iCAAiC,GAAG;IACxC,iBAAiB;IACjB,yBAAyB;IACzB,UAAU;IACV,cAAc;CACN,CAAA","sourcesContent":["import type { QueryMeetingNotesParameters as ApiQueryMeetingNotesParameters } from \"./api-endpoints/meeting-notes\"\n\n// cspell:ignore daterange\n\nexport const meetingNotesFilterableProperties = [\n \"title\",\n \"created_time\",\n \"last_edited_time\",\n \"created_by\",\n \"last_edited_by\",\n \"attendees\",\n] as const\n\nconst meetingNotesTextFilterOperators = [\n \"string_is\",\n \"string_is_not\",\n \"string_contains\",\n \"string_does_not_contain\",\n \"string_starts_with\",\n \"string_ends_with\",\n \"is_empty\",\n \"is_not_empty\",\n] as const\n\nconst meetingNotesDateFilterOperators = [\n \"date_is\",\n \"date_is_before\",\n \"date_is_after\",\n \"date_is_on_or_before\",\n \"date_is_on_or_after\",\n \"date_is_within\",\n \"date_is_relative_to\",\n \"is_empty\",\n \"is_not_empty\",\n] as const\n\nconst meetingNotesPersonFilterOperators = [\n \"person_contains\",\n \"person_does_not_contain\",\n \"is_empty\",\n \"is_not_empty\",\n] as const\n\nexport type MeetingNotesPropertyName =\n (typeof meetingNotesFilterableProperties)[number]\n\ntype MeetingNotesTextFilterOperator =\n (typeof meetingNotesTextFilterOperators)[number]\n\ntype MeetingNotesDateFilterOperator =\n (typeof meetingNotesDateFilterOperators)[number]\n\ntype MeetingNotesPersonFilterOperator =\n (typeof meetingNotesPersonFilterOperators)[number]\n\ntype MeetingNotesNoValueFilter<TOperator extends string> = {\n operator: TOperator\n}\n\ntype MeetingNotesValueFilter<TOperator extends string, TValue> = {\n operator: TOperator\n value: TValue\n}\n\ntype MeetingNotesEmptyFilter = MeetingNotesNoValueFilter<\n \"is_empty\" | \"is_not_empty\"\n>\n\ntype MeetingNotesTextFilterValue = {\n type: \"exact\"\n value: string\n}\n\ntype MeetingNotesDatePointFilterValue = {\n type: \"relative\" | \"exact\"\n value:\n | string\n | {\n type: \"date\" | \"datetime\"\n start_date: string\n start_time?: string\n time_zone?: string\n }\n}\n\ntype MeetingNotesDateRangeFilterValue = {\n type: \"relative\" | \"exact\"\n value:\n | string\n | {\n type: \"daterange\"\n start_date: string\n end_date?: string\n }\n direction?: \"past\" | \"future\"\n unit?: \"day\" | \"week\" | \"month\" | \"year\"\n count?: number\n}\n\ntype MeetingNotesPersonOperatorValue = {\n type: \"exact\"\n value: {\n table: \"notion_user\"\n id: string\n }\n}\n\ntype MeetingNotesTextFilter =\n | MeetingNotesValueFilter<\n Exclude<\n MeetingNotesTextFilterOperator,\n MeetingNotesEmptyFilter[\"operator\"]\n >,\n MeetingNotesTextFilterValue\n >\n | MeetingNotesEmptyFilter\n\ntype MeetingNotesDateRangeOperator = \"date_is_within\" | \"date_is_relative_to\"\n\ntype MeetingNotesDateFilter =\n | MeetingNotesValueFilter<\n Exclude<\n MeetingNotesDateFilterOperator,\n MeetingNotesDateRangeOperator | MeetingNotesEmptyFilter[\"operator\"]\n >,\n MeetingNotesDatePointFilterValue\n >\n | MeetingNotesValueFilter<\n MeetingNotesDateRangeOperator,\n MeetingNotesDateRangeFilterValue\n >\n | MeetingNotesEmptyFilter\n\ntype MeetingNotesPersonFilter =\n | MeetingNotesValueFilter<\n Exclude<\n MeetingNotesPersonFilterOperator,\n MeetingNotesEmptyFilter[\"operator\"]\n >,\n MeetingNotesPersonOperatorValue | MeetingNotesPersonOperatorValue[]\n >\n | MeetingNotesEmptyFilter\n\ntype MeetingNotesPropertyFilterByProperty = {\n title: MeetingNotesTextFilter\n created_time: MeetingNotesDateFilter\n last_edited_time: MeetingNotesDateFilter\n created_by: MeetingNotesPersonFilter\n last_edited_by: MeetingNotesPersonFilter\n attendees: MeetingNotesPersonFilter\n}\n\nexport type MeetingNotesPropertyFilter = {\n [Property in keyof MeetingNotesPropertyFilterByProperty]: {\n property: Property\n filter: MeetingNotesPropertyFilterByProperty[Property]\n }\n}[keyof MeetingNotesPropertyFilterByProperty]\n\nexport type MeetingNotesFilterNode =\n | MeetingNotesCombinatorFilter\n | MeetingNotesPropertyFilter\n\nexport type MeetingNotesCombinatorFilter = {\n operator: \"and\" | \"or\"\n filters?: MeetingNotesFilterNode[]\n}\n\nexport type MeetingNotesSort = {\n property: MeetingNotesPropertyName\n direction: \"ascending\" | \"descending\"\n}\n\nexport type QueryMeetingNotesParameters = Omit<\n ApiQueryMeetingNotesParameters,\n \"filter\" | \"sort\"\n> & {\n filter?: MeetingNotesCombinatorFilter\n sort?: MeetingNotesSort[]\n}\n"]}
1
+ {"version":3,"file":"meeting-notes.js","sourceRoot":"","sources":["../../src/meeting-notes.ts"],"names":[],"mappings":";;;AAEA,0BAA0B;AAEb,QAAA,gCAAgC,GAAG;IAC9C,OAAO;IACP,cAAc;IACd,kBAAkB;IAClB,YAAY;IACZ,gBAAgB;IAChB,WAAW;CACH,CAAA","sourcesContent":["import type { QueryMeetingNotesParameters as ApiQueryMeetingNotesParameters } from \"./api-endpoints/meeting-notes\"\n\n// cspell:ignore daterange\n\nexport const meetingNotesFilterableProperties = [\n \"title\",\n \"created_time\",\n \"last_edited_time\",\n \"created_by\",\n \"last_edited_by\",\n \"attendees\",\n] as const\n\nexport type MeetingNotesPropertyName =\n (typeof meetingNotesFilterableProperties)[number]\n\ntype MeetingNotesTextFilterOperator =\n | \"string_is\"\n | \"string_is_not\"\n | \"string_contains\"\n | \"string_does_not_contain\"\n | \"string_starts_with\"\n | \"string_ends_with\"\n | \"is_empty\"\n | \"is_not_empty\"\n\ntype MeetingNotesDateFilterOperator =\n | \"date_is\"\n | \"date_is_before\"\n | \"date_is_after\"\n | \"date_is_on_or_before\"\n | \"date_is_on_or_after\"\n | \"date_is_within\"\n | \"date_is_relative_to\"\n | \"is_empty\"\n | \"is_not_empty\"\n\ntype MeetingNotesPersonFilterOperator =\n \"person_contains\" | \"person_does_not_contain\" | \"is_empty\" | \"is_not_empty\"\n\ntype MeetingNotesNoValueFilter<TOperator extends string> = {\n operator: TOperator\n}\n\ntype MeetingNotesValueFilter<TOperator extends string, TValue> = {\n operator: TOperator\n value: TValue\n}\n\ntype MeetingNotesEmptyFilter = MeetingNotesNoValueFilter<\n \"is_empty\" | \"is_not_empty\"\n>\n\ntype MeetingNotesTextFilterValue = {\n type: \"exact\"\n value: string\n}\n\ntype MeetingNotesDatePointFilterValue = {\n type: \"relative\" | \"exact\"\n value:\n | string\n | {\n type: \"date\" | \"datetime\"\n start_date: string\n start_time?: string\n time_zone?: string\n }\n}\n\ntype MeetingNotesDateRangeFilterValue = {\n type: \"relative\" | \"exact\"\n value:\n | string\n | {\n type: \"daterange\"\n start_date: string\n end_date?: string\n }\n direction?: \"past\" | \"future\"\n unit?: \"day\" | \"week\" | \"month\" | \"year\"\n count?: number\n}\n\ntype MeetingNotesPersonOperatorValue = {\n type: \"exact\"\n value: {\n table: \"notion_user\"\n id: string\n }\n}\n\ntype MeetingNotesTextFilter =\n | MeetingNotesValueFilter<\n Exclude<\n MeetingNotesTextFilterOperator,\n MeetingNotesEmptyFilter[\"operator\"]\n >,\n MeetingNotesTextFilterValue\n >\n | MeetingNotesEmptyFilter\n\ntype MeetingNotesDateRangeOperator = \"date_is_within\" | \"date_is_relative_to\"\n\ntype MeetingNotesDateFilter =\n | MeetingNotesValueFilter<\n Exclude<\n MeetingNotesDateFilterOperator,\n MeetingNotesDateRangeOperator | MeetingNotesEmptyFilter[\"operator\"]\n >,\n MeetingNotesDatePointFilterValue\n >\n | MeetingNotesValueFilter<\n MeetingNotesDateRangeOperator,\n MeetingNotesDateRangeFilterValue\n >\n | MeetingNotesEmptyFilter\n\ntype MeetingNotesPersonFilter =\n | MeetingNotesValueFilter<\n Exclude<\n MeetingNotesPersonFilterOperator,\n MeetingNotesEmptyFilter[\"operator\"]\n >,\n MeetingNotesPersonOperatorValue | MeetingNotesPersonOperatorValue[]\n >\n | MeetingNotesEmptyFilter\n\ntype MeetingNotesPropertyFilterByProperty = {\n title: MeetingNotesTextFilter\n created_time: MeetingNotesDateFilter\n last_edited_time: MeetingNotesDateFilter\n created_by: MeetingNotesPersonFilter\n last_edited_by: MeetingNotesPersonFilter\n attendees: MeetingNotesPersonFilter\n}\n\nexport type MeetingNotesPropertyFilter = {\n [Property in keyof MeetingNotesPropertyFilterByProperty]: {\n property: Property\n filter: MeetingNotesPropertyFilterByProperty[Property]\n }\n}[keyof MeetingNotesPropertyFilterByProperty]\n\nexport type MeetingNotesFilterNode =\n MeetingNotesCombinatorFilter | MeetingNotesPropertyFilter\n\nexport type MeetingNotesCombinatorFilter = {\n operator: \"and\" | \"or\"\n filters?: MeetingNotesFilterNode[]\n}\n\nexport type MeetingNotesSort = {\n property: MeetingNotesPropertyName\n direction: \"ascending\" | \"descending\"\n}\n\nexport type QueryMeetingNotesParameters = Omit<\n ApiQueryMeetingNotesParameters,\n \"filter\" | \"sort\"\n> & {\n filter?: MeetingNotesCombinatorFilter\n sort?: MeetingNotesSort[]\n}\n"]}
@@ -6,8 +6,7 @@
6
6
  * Pass the raw body as received. Parsing and re-serializing JSON can change
7
7
  * its bytes and invalidate the signature.
8
8
  *
9
- * The helpers use `globalThis.crypto.subtle` when available, then fall
10
- * back to the Web Crypto API in Node's crypto module.
9
+ * The helpers use the global Web Crypto API provided by Node.js 22 and later.
11
10
  */
12
11
  export type VerifyWebhookSignatureArgs = {
13
12
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../../src/webhooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,MAAM,MAAM,0BAA0B,GAAG;IACvC;;;;OAIG;IACH,IAAI,EAAE,MAAM,GAAG,UAAU,CAAA;IACzB;;;OAGG;IACH,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;IACpC;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,0BAA0B,GAC/B,OAAO,CAAC,OAAO,CAAC,CAoBlB;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAC7C,IAAI,EAAE,MAAM,GAAG,UAAU,CAAA;IACzB,iBAAiB,EAAE,MAAM,CAAA;CAC1B,GAAG,OAAO,CAAC,MAAM,CAAC,CAGlB"}
1
+ {"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../../src/webhooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,MAAM,MAAM,0BAA0B,GAAG;IACvC;;;;OAIG;IACH,IAAI,EAAE,MAAM,GAAG,UAAU,CAAA;IACzB;;;OAGG;IACH,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;IACpC;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,0BAA0B,GAC/B,OAAO,CAAC,OAAO,CAAC,CAyBlB;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAC7C,IAAI,EAAE,MAAM,GAAG,UAAU,CAAA;IACzB,iBAAiB,EAAE,MAAM,CAAA;CAC1B,GAAG,OAAO,CAAC,MAAM,CAAC,CAQlB"}
@@ -7,8 +7,7 @@
7
7
  * Pass the raw body as received. Parsing and re-serializing JSON can change
8
8
  * its bytes and invalidate the signature.
9
9
  *
10
- * The helpers use `globalThis.crypto.subtle` when available, then fall
11
- * back to the Web Crypto API in Node's crypto module.
10
+ * The helpers use the global Web Crypto API provided by Node.js 22 and later.
12
11
  */
13
12
  Object.defineProperty(exports, "__esModule", { value: true });
14
13
  exports.verifyWebhookSignature = verifyWebhookSignature;
@@ -38,8 +37,8 @@ async function verifyWebhookSignature(args) {
38
37
  if (!/^[0-9a-f]+$/.test(providedHex)) {
39
38
  return false;
40
39
  }
41
- const computedHex = await computeHmacSha256Hex(verificationToken, body);
42
- return timingSafeEqualHex(providedHex, computedHex);
40
+ const key = await importHmacKey(verificationToken, "verify");
41
+ return globalThis.crypto.subtle.verify("HMAC", key, hexToBytes(providedHex), bodyToBytes(body));
43
42
  }
44
43
  /**
45
44
  * Compute the value Notion would send in `X-Notion-Signature` for a
@@ -47,51 +46,18 @@ async function verifyWebhookSignature(args) {
47
46
  * without a live subscription.
48
47
  */
49
48
  async function signWebhookPayload(args) {
50
- const hex = await computeHmacSha256Hex(args.verificationToken, args.body);
51
- return `${SIGNATURE_PREFIX}${hex}`;
49
+ const key = await importHmacKey(args.verificationToken, "sign");
50
+ const signature = await globalThis.crypto.subtle.sign("HMAC", key, bodyToBytes(args.body));
51
+ return `${SIGNATURE_PREFIX}${bytesToHex(new Uint8Array(signature))}`;
52
52
  }
53
- async function computeHmacSha256Hex(key, body) {
54
- const subtle = await getSubtle();
55
- const encoder = new TextEncoder();
56
- const keyBytes = encoder.encode(key);
57
- // Copy any Uint8Array input into a fresh ArrayBuffer-backed view so
58
- // subtle.sign (which forbids SharedArrayBuffer-backed views) is
59
- // satisfied regardless of where the caller's buffer came from.
60
- const bodyBytes = typeof body === "string" ? encoder.encode(body) : Uint8Array.from(body);
61
- const cryptoKey = await subtle.importKey("raw", keyBytes, { name: "HMAC", hash: "SHA-256" }, false, ["sign"]);
62
- const signatureBuffer = await subtle.sign("HMAC", cryptoKey, bodyBytes);
63
- return bytesToHex(new Uint8Array(signatureBuffer));
53
+ async function importHmacKey(token, usage) {
54
+ return globalThis.crypto.subtle.importKey("raw", new TextEncoder().encode(token), { name: "HMAC", hash: "SHA-256" }, false, [usage]);
64
55
  }
65
- let cachedSubtle;
66
- async function getSubtle() {
67
- var _a, _b;
68
- if (cachedSubtle) {
69
- return cachedSubtle;
70
- }
71
- const fromGlobal = (_a = globalThis
72
- .crypto) === null || _a === void 0 ? void 0 : _a.subtle;
73
- if (fromGlobal) {
74
- cachedSubtle = fromGlobal;
75
- return cachedSubtle;
76
- }
77
- // Load Node's fallback only when needed so browser callers can use the
78
- // global API without loading a Node module.
79
- try {
80
- /* eslint-disable @typescript-eslint/no-var-requires */
81
- const nodeCrypto = require("crypto");
82
- /* eslint-enable @typescript-eslint/no-var-requires */
83
- if ((_b = nodeCrypto.webcrypto) === null || _b === void 0 ? void 0 : _b.subtle) {
84
- cachedSubtle = nodeCrypto.webcrypto.subtle;
85
- return cachedSubtle;
86
- }
87
- }
88
- catch {
89
- // node:crypto unavailable (e.g. a browser bundle that stubbed it).
90
- // Fall through to the error below.
91
- }
92
- throw new Error("verifyWebhookSignature requires Web Crypto support " +
93
- "(globalThis.crypto.subtle or node:crypto.webcrypto). Upgrade to " +
94
- "a runtime that provides one of them.");
56
+ function bodyToBytes(body) {
57
+ // Web Crypto requires ArrayBuffer-backed views; binary inputs may use SharedArrayBuffer.
58
+ return typeof body === "string"
59
+ ? new TextEncoder().encode(body)
60
+ : Uint8Array.from(body);
95
61
  }
96
62
  function bytesToHex(bytes) {
97
63
  let hex = "";
@@ -100,17 +66,11 @@ function bytesToHex(bytes) {
100
66
  }
101
67
  return hex;
102
68
  }
103
- // Constant-time string comparison. The inputs are already known to be
104
- // the same length (callers enforce SHA256_HEX_LENGTH), so this purely
105
- // avoids early-exit on the first differing character.
106
- function timingSafeEqualHex(a, b) {
107
- if (a.length !== b.length) {
108
- return false;
109
- }
110
- let diff = 0;
111
- for (let i = 0; i < a.length; i++) {
112
- diff |= a.charCodeAt(i) ^ b.charCodeAt(i);
69
+ function hexToBytes(hex) {
70
+ const bytes = new Uint8Array(hex.length / 2);
71
+ for (let i = 0; i < bytes.length; i++) {
72
+ bytes[i] = Number.parseInt(hex.slice(i * 2, i * 2 + 2), 16);
113
73
  }
114
- return diff === 0;
74
+ return bytes;
115
75
  }
116
76
  //# sourceMappingURL=webhooks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../src/webhooks.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Helpers for receiving and verifying Notion webhook deliveries.\n *\n * Event signatures use HMAC-SHA256 with the subscription's verification\n * token. The `X-Notion-Signature` header contains `sha256=<hex>`.\n * Pass the raw body as received. Parsing and re-serializing JSON can change\n * its bytes and invalidate the signature.\n *\n * The helpers use `globalThis.crypto.subtle` when available, then fall\n * back to the Web Crypto API in Node's crypto module.\n */\n\nconst SIGNATURE_PREFIX = \"sha256=\"\nconst SHA256_HEX_LENGTH = 64\n\nexport type VerifyWebhookSignatureArgs = {\n /**\n * The raw HTTP request body, before any parsing.\n * Pass a string for text bodies or a Uint8Array/Buffer for binary-safe\n * access. Re-serialized JSON will not verify.\n */\n body: string | Uint8Array\n /**\n * The value of the `X-Notion-Signature` request header. Verification\n * fails (returns false) if this is missing or malformed.\n */\n signature: string | null | undefined\n /**\n * The verification token configured for this webhook subscription\n * (returned by Notion when the subscription was created and surfaced\n * during the initial handshake).\n */\n verificationToken: string\n}\n\n/**\n * Verify that a webhook delivery came from Notion and has not been\n * tampered with.\n *\n * Returns `true` if the signature matches HMAC-SHA256 of the body using\n * the verification token. Returns `false` for a missing or malformed\n * signature. Crypto errors may throw.\n */\nexport async function verifyWebhookSignature(\n args: VerifyWebhookSignatureArgs\n): Promise<boolean> {\n const { body, signature, verificationToken } = args\n\n if (typeof signature !== \"string\") {\n return false\n }\n if (!signature.startsWith(SIGNATURE_PREFIX)) {\n return false\n }\n\n const providedHex = signature.slice(SIGNATURE_PREFIX.length).toLowerCase()\n if (providedHex.length !== SHA256_HEX_LENGTH) {\n return false\n }\n if (!/^[0-9a-f]+$/.test(providedHex)) {\n return false\n }\n\n const computedHex = await computeHmacSha256Hex(verificationToken, body)\n return timingSafeEqualHex(providedHex, computedHex)\n}\n\n/**\n * Compute the value Notion would send in `X-Notion-Signature` for a\n * given body and verification token. Use this to test webhook handlers\n * without a live subscription.\n */\nexport async function signWebhookPayload(args: {\n body: string | Uint8Array\n verificationToken: string\n}): Promise<string> {\n const hex = await computeHmacSha256Hex(args.verificationToken, args.body)\n return `${SIGNATURE_PREFIX}${hex}`\n}\n\nasync function computeHmacSha256Hex(\n key: string,\n body: string | Uint8Array\n): Promise<string> {\n const subtle = await getSubtle()\n\n const encoder = new TextEncoder()\n const keyBytes = encoder.encode(key)\n // Copy any Uint8Array input into a fresh ArrayBuffer-backed view so\n // subtle.sign (which forbids SharedArrayBuffer-backed views) is\n // satisfied regardless of where the caller's buffer came from.\n const bodyBytes =\n typeof body === \"string\" ? encoder.encode(body) : Uint8Array.from(body)\n\n const cryptoKey = await subtle.importKey(\n \"raw\",\n keyBytes,\n { name: \"HMAC\", hash: \"SHA-256\" },\n false,\n [\"sign\"]\n )\n const signatureBuffer = await subtle.sign(\"HMAC\", cryptoKey, bodyBytes)\n return bytesToHex(new Uint8Array(signatureBuffer))\n}\n\nlet cachedSubtle: SubtleCrypto | undefined\n\nasync function getSubtle(): Promise<SubtleCrypto> {\n if (cachedSubtle) {\n return cachedSubtle\n }\n\n const fromGlobal = (globalThis as { crypto?: { subtle?: SubtleCrypto } })\n .crypto?.subtle\n if (fromGlobal) {\n cachedSubtle = fromGlobal\n return cachedSubtle\n }\n\n // Load Node's fallback only when needed so browser callers can use the\n // global API without loading a Node module.\n try {\n /* eslint-disable @typescript-eslint/no-var-requires */\n const nodeCrypto = require(\"crypto\") as {\n webcrypto?: { subtle?: SubtleCrypto }\n }\n /* eslint-enable @typescript-eslint/no-var-requires */\n if (nodeCrypto.webcrypto?.subtle) {\n cachedSubtle = nodeCrypto.webcrypto.subtle\n return cachedSubtle\n }\n } catch {\n // node:crypto unavailable (e.g. a browser bundle that stubbed it).\n // Fall through to the error below.\n }\n\n throw new Error(\n \"verifyWebhookSignature requires Web Crypto support \" +\n \"(globalThis.crypto.subtle or node:crypto.webcrypto). Upgrade to \" +\n \"a runtime that provides one of them.\"\n )\n}\n\nfunction bytesToHex(bytes: Uint8Array): string {\n let hex = \"\"\n for (const byte of bytes) {\n hex += byte.toString(16).padStart(2, \"0\")\n }\n return hex\n}\n\n// Constant-time string comparison. The inputs are already known to be\n// the same length (callers enforce SHA256_HEX_LENGTH), so this purely\n// avoids early-exit on the first differing character.\nfunction timingSafeEqualHex(a: string, b: string): boolean {\n if (a.length !== b.length) {\n return false\n }\n let diff = 0\n for (let i = 0; i < a.length; i++) {\n diff |= a.charCodeAt(i) ^ b.charCodeAt(i)\n }\n return diff === 0\n}\n"]}
1
+ {"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../src/webhooks.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Helpers for receiving and verifying Notion webhook deliveries.\n *\n * Event signatures use HMAC-SHA256 with the subscription's verification\n * token. The `X-Notion-Signature` header contains `sha256=<hex>`.\n * Pass the raw body as received. Parsing and re-serializing JSON can change\n * its bytes and invalidate the signature.\n *\n * The helpers use the global Web Crypto API provided by Node.js 22 and later.\n */\n\nconst SIGNATURE_PREFIX = \"sha256=\"\nconst SHA256_HEX_LENGTH = 64\n\nexport type VerifyWebhookSignatureArgs = {\n /**\n * The raw HTTP request body, before any parsing.\n * Pass a string for text bodies or a Uint8Array/Buffer for binary-safe\n * access. Re-serialized JSON will not verify.\n */\n body: string | Uint8Array\n /**\n * The value of the `X-Notion-Signature` request header. Verification\n * fails (returns false) if this is missing or malformed.\n */\n signature: string | null | undefined\n /**\n * The verification token configured for this webhook subscription\n * (returned by Notion when the subscription was created and surfaced\n * during the initial handshake).\n */\n verificationToken: string\n}\n\n/**\n * Verify that a webhook delivery came from Notion and has not been\n * tampered with.\n *\n * Returns `true` if the signature matches HMAC-SHA256 of the body using\n * the verification token. Returns `false` for a missing or malformed\n * signature. Crypto errors may throw.\n */\nexport async function verifyWebhookSignature(\n args: VerifyWebhookSignatureArgs\n): Promise<boolean> {\n const { body, signature, verificationToken } = args\n\n if (typeof signature !== \"string\") {\n return false\n }\n if (!signature.startsWith(SIGNATURE_PREFIX)) {\n return false\n }\n\n const providedHex = signature.slice(SIGNATURE_PREFIX.length).toLowerCase()\n if (providedHex.length !== SHA256_HEX_LENGTH) {\n return false\n }\n if (!/^[0-9a-f]+$/.test(providedHex)) {\n return false\n }\n\n const key = await importHmacKey(verificationToken, \"verify\")\n return globalThis.crypto.subtle.verify(\n \"HMAC\",\n key,\n hexToBytes(providedHex),\n bodyToBytes(body)\n )\n}\n\n/**\n * Compute the value Notion would send in `X-Notion-Signature` for a\n * given body and verification token. Use this to test webhook handlers\n * without a live subscription.\n */\nexport async function signWebhookPayload(args: {\n body: string | Uint8Array\n verificationToken: string\n}): Promise<string> {\n const key = await importHmacKey(args.verificationToken, \"sign\")\n const signature = await globalThis.crypto.subtle.sign(\n \"HMAC\",\n key,\n bodyToBytes(args.body)\n )\n return `${SIGNATURE_PREFIX}${bytesToHex(new Uint8Array(signature))}`\n}\n\nasync function importHmacKey(\n token: string,\n usage: \"sign\" | \"verify\"\n): Promise<CryptoKey> {\n return globalThis.crypto.subtle.importKey(\n \"raw\",\n new TextEncoder().encode(token),\n { name: \"HMAC\", hash: \"SHA-256\" },\n false,\n [usage]\n )\n}\n\nfunction bodyToBytes(body: string | Uint8Array): Uint8Array<ArrayBuffer> {\n // Web Crypto requires ArrayBuffer-backed views; binary inputs may use SharedArrayBuffer.\n return typeof body === \"string\"\n ? new TextEncoder().encode(body)\n : Uint8Array.from(body)\n}\n\nfunction bytesToHex(bytes: Uint8Array): string {\n let hex = \"\"\n for (const byte of bytes) {\n hex += byte.toString(16).padStart(2, \"0\")\n }\n return hex\n}\n\nfunction hexToBytes(hex: string): Uint8Array<ArrayBuffer> {\n const bytes = new Uint8Array(hex.length / 2)\n for (let i = 0; i < bytes.length; i++) {\n bytes[i] = Number.parseInt(hex.slice(i * 2, i * 2 + 2), 16)\n }\n return bytes\n}\n"]}
package/package.json CHANGED
@@ -1,9 +1,15 @@
1
1
  {
2
2
  "name": "@notionhq/client",
3
- "version": "5.29.0",
3
+ "version": "5.30.0",
4
4
  "description": "A simple and easy to use client for the Notion API",
5
5
  "engines": {
6
- "node": ">=18"
6
+ "node": ">=22"
7
+ },
8
+ "devEngines": {
9
+ "packageManager": {
10
+ "name": "npm",
11
+ "version": ">=11.10.0"
12
+ }
7
13
  },
8
14
  "homepage": "https://developers.notion.com/docs/getting-started",
9
15
  "bugs": {
@@ -45,17 +51,19 @@
45
51
  "build/src/**"
46
52
  ],
47
53
  "devDependencies": {
48
- "@types/jest": "29.5.14",
49
- "@typescript-eslint/eslint-plugin": "7.18.0",
50
- "@typescript-eslint/parser": "7.18.0",
51
- "cspell": "8.17.1",
52
- "eslint": "8.57.1",
53
- "husky": "^9.1.7",
54
- "jest": "29.7.0",
55
- "lint-staged": "^16.2.6",
56
- "markdown-link-check": "3.13.7",
57
- "prettier": "3.3.3",
58
- "ts-jest": "29.2.5",
59
- "typescript": "5.9.2"
54
+ "@eslint/js": "10.0.1",
55
+ "@types/jest": "30.0.0",
56
+ "@typescript-eslint/eslint-plugin": "8.72.1",
57
+ "@typescript-eslint/parser": "8.72.1",
58
+ "cspell": "10.4.0",
59
+ "eslint": "10.13.0",
60
+ "globals": "17.13.0",
61
+ "husky": "9.1.7",
62
+ "jest": "30.5.2",
63
+ "lint-staged": "17.6.0",
64
+ "markdown-link-check": "3.15.0",
65
+ "prettier": "3.9.10",
66
+ "ts-jest": "29.4.15",
67
+ "typescript": "6.0.3"
60
68
  }
61
69
  }