@stoneforge/quarry 1.13.0 → 1.14.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.
- package/dist/api/quarry-api.d.ts +9 -1
- package/dist/api/quarry-api.d.ts.map +1 -1
- package/dist/api/quarry-api.js +21 -2
- package/dist/api/quarry-api.js.map +1 -1
- package/dist/api/types.d.ts +8 -1
- package/dist/api/types.d.ts.map +1 -1
- package/dist/api/types.js.map +1 -1
- package/dist/cli/commands/auto-link-helper.d.ts.map +1 -1
- package/dist/cli/commands/auto-link-helper.js +1 -0
- package/dist/cli/commands/auto-link-helper.js.map +1 -1
- package/dist/cli/commands/crud.d.ts +2 -0
- package/dist/cli/commands/crud.d.ts.map +1 -1
- package/dist/cli/commands/crud.js +100 -10
- package/dist/cli/commands/crud.js.map +1 -1
- package/dist/cli/commands/docs.js +2 -2
- package/dist/cli/commands/docs.js.map +1 -1
- package/dist/cli/commands/document.js +1 -1
- package/dist/cli/commands/document.js.map +1 -1
- package/dist/cli/commands/entity.js +1 -1
- package/dist/cli/commands/entity.js.map +1 -1
- package/dist/cli/commands/external-sync.d.ts +6 -5
- package/dist/cli/commands/external-sync.d.ts.map +1 -1
- package/dist/cli/commands/external-sync.js +1032 -180
- package/dist/cli/commands/external-sync.js.map +1 -1
- package/dist/cli/commands/library.js +1 -1
- package/dist/cli/commands/library.js.map +1 -1
- package/dist/cli/commands/message.js +2 -2
- package/dist/cli/commands/message.js.map +1 -1
- package/dist/cli/commands/serve.d.ts.map +1 -1
- package/dist/cli/commands/serve.js +2 -0
- package/dist/cli/commands/serve.js.map +1 -1
- package/dist/cli/commands/task.d.ts.map +1 -1
- package/dist/cli/commands/task.js +7 -4
- package/dist/cli/commands/task.js.map +1 -1
- package/dist/cli/commands/team.js +1 -1
- package/dist/cli/commands/team.js.map +1 -1
- package/dist/cli/commands/workflow.js +1 -1
- package/dist/cli/commands/workflow.js.map +1 -1
- package/dist/cli/utils/progress.d.ts +30 -0
- package/dist/cli/utils/progress.d.ts.map +1 -0
- package/dist/cli/utils/progress.js +47 -0
- package/dist/cli/utils/progress.js.map +1 -0
- package/dist/config/config.d.ts.map +1 -1
- package/dist/config/config.js +6 -0
- package/dist/config/config.js.map +1 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +1 -0
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/file.d.ts.map +1 -1
- package/dist/config/file.js +10 -0
- package/dist/config/file.js.map +1 -1
- package/dist/config/merge.d.ts.map +1 -1
- package/dist/config/merge.js +7 -1
- package/dist/config/merge.js.map +1 -1
- package/dist/config/types.d.ts +7 -2
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +3 -0
- package/dist/config/types.js.map +1 -1
- package/dist/config/validation.d.ts.map +1 -1
- package/dist/config/validation.js +13 -0
- package/dist/config/validation.js.map +1 -1
- package/dist/external-sync/adapters/document-sync-adapter.d.ts +150 -0
- package/dist/external-sync/adapters/document-sync-adapter.d.ts.map +1 -0
- package/dist/external-sync/adapters/document-sync-adapter.js +325 -0
- package/dist/external-sync/adapters/document-sync-adapter.js.map +1 -0
- package/dist/external-sync/index.d.ts +3 -0
- package/dist/external-sync/index.d.ts.map +1 -1
- package/dist/external-sync/index.js +4 -0
- package/dist/external-sync/index.js.map +1 -1
- package/dist/external-sync/provider-registry.d.ts +7 -3
- package/dist/external-sync/provider-registry.d.ts.map +1 -1
- package/dist/external-sync/provider-registry.js +20 -3
- package/dist/external-sync/provider-registry.js.map +1 -1
- package/dist/external-sync/providers/folder/folder-document-adapter.d.ts +97 -0
- package/dist/external-sync/providers/folder/folder-document-adapter.d.ts.map +1 -0
- package/dist/external-sync/providers/folder/folder-document-adapter.js +261 -0
- package/dist/external-sync/providers/folder/folder-document-adapter.js.map +1 -0
- package/dist/external-sync/providers/folder/folder-fs.d.ts +146 -0
- package/dist/external-sync/providers/folder/folder-fs.d.ts.map +1 -0
- package/dist/external-sync/providers/folder/folder-fs.js +300 -0
- package/dist/external-sync/providers/folder/folder-fs.js.map +1 -0
- package/dist/external-sync/providers/folder/folder-provider.d.ts +28 -0
- package/dist/external-sync/providers/folder/folder-provider.d.ts.map +1 -0
- package/dist/external-sync/providers/folder/folder-provider.js +87 -0
- package/dist/external-sync/providers/folder/folder-provider.js.map +1 -0
- package/dist/external-sync/providers/folder/index.d.ts +11 -0
- package/dist/external-sync/providers/folder/index.d.ts.map +1 -0
- package/dist/external-sync/providers/folder/index.js +13 -0
- package/dist/external-sync/providers/folder/index.js.map +1 -0
- package/dist/external-sync/providers/index.d.ts +4 -0
- package/dist/external-sync/providers/index.d.ts.map +1 -1
- package/dist/external-sync/providers/index.js +5 -0
- package/dist/external-sync/providers/index.js.map +1 -1
- package/dist/external-sync/providers/notion/index.d.ts +19 -0
- package/dist/external-sync/providers/notion/index.d.ts.map +1 -0
- package/dist/external-sync/providers/notion/index.js +20 -0
- package/dist/external-sync/providers/notion/index.js.map +1 -0
- package/dist/external-sync/providers/notion/notion-api.d.ts +253 -0
- package/dist/external-sync/providers/notion/notion-api.d.ts.map +1 -0
- package/dist/external-sync/providers/notion/notion-api.js +492 -0
- package/dist/external-sync/providers/notion/notion-api.js.map +1 -0
- package/dist/external-sync/providers/notion/notion-blocks.d.ts +93 -0
- package/dist/external-sync/providers/notion/notion-blocks.d.ts.map +1 -0
- package/dist/external-sync/providers/notion/notion-blocks.js +773 -0
- package/dist/external-sync/providers/notion/notion-blocks.js.map +1 -0
- package/dist/external-sync/providers/notion/notion-document-adapter.d.ts +176 -0
- package/dist/external-sync/providers/notion/notion-document-adapter.d.ts.map +1 -0
- package/dist/external-sync/providers/notion/notion-document-adapter.js +413 -0
- package/dist/external-sync/providers/notion/notion-document-adapter.js.map +1 -0
- package/dist/external-sync/providers/notion/notion-provider.d.ts +57 -0
- package/dist/external-sync/providers/notion/notion-provider.d.ts.map +1 -0
- package/dist/external-sync/providers/notion/notion-provider.js +159 -0
- package/dist/external-sync/providers/notion/notion-provider.js.map +1 -0
- package/dist/external-sync/providers/notion/notion-types.d.ts +388 -0
- package/dist/external-sync/providers/notion/notion-types.d.ts.map +1 -0
- package/dist/external-sync/providers/notion/notion-types.js +47 -0
- package/dist/external-sync/providers/notion/notion-types.js.map +1 -0
- package/dist/external-sync/sync-engine.d.ts +70 -4
- package/dist/external-sync/sync-engine.d.ts.map +1 -1
- package/dist/external-sync/sync-engine.js +436 -67
- package/dist/external-sync/sync-engine.js.map +1 -1
- package/dist/server/index.js +8 -8
- package/dist/server/index.js.map +1 -1
- package/package.json +4 -12
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Notion REST API Client
|
|
3
|
+
*
|
|
4
|
+
* Pure fetch-based client for Notion page and block operations.
|
|
5
|
+
* Supports Bearer token authentication, rate limit handling with Retry-After,
|
|
6
|
+
* automatic retry on transient server errors (502/503/504) with exponential backoff,
|
|
7
|
+
* cursor-based pagination, and typed error responses.
|
|
8
|
+
*
|
|
9
|
+
* No external dependencies — uses only the standard fetch API.
|
|
10
|
+
*
|
|
11
|
+
* @see https://developers.notion.com/reference
|
|
12
|
+
*/
|
|
13
|
+
import type { NotionPage, NotionBlock, NotionBlockInput, NotionDatabaseQueryResponse, NotionErrorResponse, NotionDatabase, NotionUpdateDatabaseInput } from './notion-types.js';
|
|
14
|
+
/**
|
|
15
|
+
* Configuration for creating a NotionApiClient.
|
|
16
|
+
*/
|
|
17
|
+
export interface NotionApiClientOptions {
|
|
18
|
+
/** Notion integration token (internal integration or OAuth token) */
|
|
19
|
+
token: string;
|
|
20
|
+
/** Notion API version header (default: "2022-06-28") */
|
|
21
|
+
notionVersion?: string;
|
|
22
|
+
/** Maximum number of automatic retries on retryable responses: 429, 502, 503, 504 (default: 3) */
|
|
23
|
+
maxRetries?: number;
|
|
24
|
+
/** Rate limit warning threshold — log a warning after a 429 (default: true) */
|
|
25
|
+
warnOnRateLimit?: boolean;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Rate limit state tracked from 429 responses.
|
|
29
|
+
*/
|
|
30
|
+
export interface RateLimitState {
|
|
31
|
+
/** Whether the client has been rate limited at least once */
|
|
32
|
+
readonly wasRateLimited: boolean;
|
|
33
|
+
/** The most recent Retry-After value in seconds (from last 429 response) */
|
|
34
|
+
readonly lastRetryAfterSeconds: number | null;
|
|
35
|
+
/** Total number of 429 responses received */
|
|
36
|
+
readonly totalRateLimitHits: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Typed error for Notion API failures.
|
|
40
|
+
* Wraps fetch errors with status code, Notion error code, and message.
|
|
41
|
+
*/
|
|
42
|
+
export declare class NotionApiError extends Error {
|
|
43
|
+
/** HTTP status code from Notion's response */
|
|
44
|
+
readonly status: number;
|
|
45
|
+
/** Notion-specific error code (e.g., "validation_error", "object_not_found") */
|
|
46
|
+
readonly code: string;
|
|
47
|
+
/** Parsed error body from Notion (if available) */
|
|
48
|
+
readonly responseBody: NotionErrorResponse | null;
|
|
49
|
+
constructor(message: string, status: number, code?: string, responseBody?: NotionErrorResponse | null, cause?: Error);
|
|
50
|
+
/**
|
|
51
|
+
* Whether this error is due to rate limiting (429 Too Many Requests).
|
|
52
|
+
*/
|
|
53
|
+
get isRateLimited(): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Whether this error is transient and can be retried.
|
|
56
|
+
* Includes rate limiting (429) and server errors (502, 503, 504).
|
|
57
|
+
*/
|
|
58
|
+
get isRetryable(): boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Whether this error is due to authentication failure.
|
|
61
|
+
*/
|
|
62
|
+
get isAuthError(): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Whether this error is a not-found response.
|
|
65
|
+
*/
|
|
66
|
+
get isNotFound(): boolean;
|
|
67
|
+
/**
|
|
68
|
+
* Whether this is a validation error.
|
|
69
|
+
*/
|
|
70
|
+
get isValidationError(): boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Returns a JSON-serializable representation of the error.
|
|
73
|
+
*/
|
|
74
|
+
toJSON(): {
|
|
75
|
+
name: string;
|
|
76
|
+
message: string;
|
|
77
|
+
status: number;
|
|
78
|
+
code: string;
|
|
79
|
+
responseBody: NotionErrorResponse | null;
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Type guard for NotionApiError.
|
|
84
|
+
*/
|
|
85
|
+
export declare function isNotionApiError(error: unknown): error is NotionApiError;
|
|
86
|
+
/** Maximum number of blocks per Notion API request (POST /pages or PATCH /blocks/{id}/children) */
|
|
87
|
+
declare const NOTION_BLOCK_BATCH_SIZE = 100;
|
|
88
|
+
/** Number of concurrent block delete requests (kept under Notion's 3 req/s rate limit with headroom) */
|
|
89
|
+
declare const CONCURRENT_BLOCK_DELETES = 8;
|
|
90
|
+
/**
|
|
91
|
+
* Fetch-based Notion REST API client for page and block operations.
|
|
92
|
+
*
|
|
93
|
+
* Features:
|
|
94
|
+
* - Bearer token authentication (internal integrations or OAuth)
|
|
95
|
+
* - Notion-Version header for API versioning
|
|
96
|
+
* - Automatic retry on 429 (Too Many Requests) with Retry-After
|
|
97
|
+
* - Automatic retry on 502/503/504 (server errors) with exponential backoff
|
|
98
|
+
* - Cursor-based pagination for list endpoints
|
|
99
|
+
* - Typed errors with Notion error codes
|
|
100
|
+
*
|
|
101
|
+
* @example
|
|
102
|
+
* ```typescript
|
|
103
|
+
* const client = new NotionApiClient({ token: 'ntn_...' });
|
|
104
|
+
* const page = await client.getPage('page-uuid');
|
|
105
|
+
* const blocks = await client.getBlocks('page-uuid');
|
|
106
|
+
* ```
|
|
107
|
+
*/
|
|
108
|
+
export declare class NotionApiClient {
|
|
109
|
+
private readonly token;
|
|
110
|
+
private readonly notionVersion;
|
|
111
|
+
private readonly maxRetries;
|
|
112
|
+
private readonly warnOnRateLimit;
|
|
113
|
+
/** Rate limit state tracked from 429 responses */
|
|
114
|
+
private rateLimitState;
|
|
115
|
+
constructor(options: NotionApiClientOptions);
|
|
116
|
+
/**
|
|
117
|
+
* Returns the current rate limit state.
|
|
118
|
+
*/
|
|
119
|
+
getRateLimitState(): RateLimitState;
|
|
120
|
+
/**
|
|
121
|
+
* Retrieve a page by ID.
|
|
122
|
+
*
|
|
123
|
+
* GET /pages/{page_id}
|
|
124
|
+
*
|
|
125
|
+
* @see https://developers.notion.com/reference/retrieve-a-page
|
|
126
|
+
*/
|
|
127
|
+
getPage(pageId: string): Promise<NotionPage>;
|
|
128
|
+
/**
|
|
129
|
+
* Retrieve a database by ID.
|
|
130
|
+
*
|
|
131
|
+
* GET /databases/{database_id}
|
|
132
|
+
*
|
|
133
|
+
* Returns the database schema including all property definitions.
|
|
134
|
+
* Used for discovering the title property name and checking which
|
|
135
|
+
* properties (Category, Tags) exist before creating pages.
|
|
136
|
+
*
|
|
137
|
+
* @see https://developers.notion.com/reference/retrieve-a-database
|
|
138
|
+
*/
|
|
139
|
+
getDatabase(databaseId: string): Promise<NotionDatabase>;
|
|
140
|
+
/**
|
|
141
|
+
* Update a database schema (add or modify properties).
|
|
142
|
+
*
|
|
143
|
+
* PATCH /databases/{database_id}
|
|
144
|
+
*
|
|
145
|
+
* Used to auto-create missing properties (e.g., Category as select,
|
|
146
|
+
* Tags as multi_select) when they don't exist in the database schema.
|
|
147
|
+
*
|
|
148
|
+
* @see https://developers.notion.com/reference/update-a-database
|
|
149
|
+
*/
|
|
150
|
+
updateDatabase(databaseId: string, updates: NotionUpdateDatabaseInput): Promise<NotionDatabase>;
|
|
151
|
+
/**
|
|
152
|
+
* Retrieve all block children for a given block (or page).
|
|
153
|
+
* Automatically paginates through all results.
|
|
154
|
+
*
|
|
155
|
+
* GET /blocks/{block_id}/children
|
|
156
|
+
*
|
|
157
|
+
* @see https://developers.notion.com/reference/get-block-children
|
|
158
|
+
*/
|
|
159
|
+
getBlocks(blockId: string): Promise<NotionBlock[]>;
|
|
160
|
+
/**
|
|
161
|
+
* Create a new page in a database or as a child of another page.
|
|
162
|
+
*
|
|
163
|
+
* POST /pages
|
|
164
|
+
*
|
|
165
|
+
* @see https://developers.notion.com/reference/post-page
|
|
166
|
+
*/
|
|
167
|
+
createPage(databaseId: string, properties: Record<string, unknown>, children?: readonly NotionBlockInput[]): Promise<NotionPage>;
|
|
168
|
+
/**
|
|
169
|
+
* Update page properties.
|
|
170
|
+
*
|
|
171
|
+
* PATCH /pages/{page_id}
|
|
172
|
+
*
|
|
173
|
+
* @see https://developers.notion.com/reference/patch-page
|
|
174
|
+
*/
|
|
175
|
+
updatePage(pageId: string, properties: Record<string, unknown>): Promise<NotionPage>;
|
|
176
|
+
/**
|
|
177
|
+
* Replace all content blocks of a page.
|
|
178
|
+
*
|
|
179
|
+
* This is a two-step operation:
|
|
180
|
+
* 1. Delete all existing top-level block children
|
|
181
|
+
* 2. Append new block children in batches of 100 (Notion's per-request limit)
|
|
182
|
+
*
|
|
183
|
+
* CAUTION: This is not atomic. If step 2 fails, the page may have partial content.
|
|
184
|
+
*
|
|
185
|
+
* @see https://developers.notion.com/reference/delete-a-block
|
|
186
|
+
* @see https://developers.notion.com/reference/patch-block-children
|
|
187
|
+
*/
|
|
188
|
+
updatePageContent(pageId: string, blocks: readonly NotionBlockInput[]): Promise<NotionBlock[]>;
|
|
189
|
+
/**
|
|
190
|
+
* Append block children to a page or block.
|
|
191
|
+
*
|
|
192
|
+
* Respects Notion's 100-block-per-request limit by batching automatically.
|
|
193
|
+
* Block order is preserved across batches.
|
|
194
|
+
*
|
|
195
|
+
* PATCH /blocks/{block_id}/children
|
|
196
|
+
*
|
|
197
|
+
* @param blockId - The page or block ID to append children to
|
|
198
|
+
* @param blocks - The blocks to append
|
|
199
|
+
* @returns All appended blocks
|
|
200
|
+
*
|
|
201
|
+
* @see https://developers.notion.com/reference/patch-block-children
|
|
202
|
+
*/
|
|
203
|
+
appendBlocks(blockId: string, blocks: readonly NotionBlockInput[]): Promise<NotionBlock[]>;
|
|
204
|
+
/**
|
|
205
|
+
* Query a database with optional filter and cursor-based pagination.
|
|
206
|
+
*
|
|
207
|
+
* POST /databases/{database_id}/query
|
|
208
|
+
*
|
|
209
|
+
* When no cursor is provided and the result has more pages, this method
|
|
210
|
+
* returns only the first page. Callers can use `next_cursor` to fetch
|
|
211
|
+
* additional pages, or use `queryDatabaseAll()` to auto-paginate.
|
|
212
|
+
*
|
|
213
|
+
* @see https://developers.notion.com/reference/post-database-query
|
|
214
|
+
*/
|
|
215
|
+
queryDatabase(databaseId: string, filter?: Record<string, unknown>, cursor?: string): Promise<NotionDatabaseQueryResponse>;
|
|
216
|
+
/**
|
|
217
|
+
* Query a database and automatically paginate through all results.
|
|
218
|
+
*
|
|
219
|
+
* This is a convenience wrapper around `queryDatabase()` that follows
|
|
220
|
+
* `next_cursor` until all pages have been fetched.
|
|
221
|
+
*
|
|
222
|
+
* @param databaseId - The database to query.
|
|
223
|
+
* @param filter - Optional Notion filter object.
|
|
224
|
+
* @returns All pages matching the query.
|
|
225
|
+
*/
|
|
226
|
+
queryDatabaseAll(databaseId: string, filter?: Record<string, unknown>): Promise<NotionPage[]>;
|
|
227
|
+
/**
|
|
228
|
+
* Performs an HTTP request to the Notion API with automatic retry on retryable errors.
|
|
229
|
+
*
|
|
230
|
+
* Retry strategy:
|
|
231
|
+
* - 429 (rate limited): Uses Retry-After header value (existing behavior)
|
|
232
|
+
* - 502/503/504 (server errors): Uses exponential backoff starting at 1s (1s, 2s, 4s, ...)
|
|
233
|
+
*/
|
|
234
|
+
private request;
|
|
235
|
+
/**
|
|
236
|
+
* Executes a single HTTP request to the Notion API (no retry logic).
|
|
237
|
+
*/
|
|
238
|
+
private executeRequest;
|
|
239
|
+
/**
|
|
240
|
+
* Handles non-OK responses by throwing a NotionApiError.
|
|
241
|
+
*/
|
|
242
|
+
private handleErrorResponse;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Parses the Retry-After value from a NotionApiError's response body or falls back to default.
|
|
246
|
+
*/
|
|
247
|
+
declare function parseRetryAfterFromError(err: NotionApiError): number;
|
|
248
|
+
/**
|
|
249
|
+
* Promise-based sleep utility.
|
|
250
|
+
*/
|
|
251
|
+
declare function sleep(ms: number): Promise<void>;
|
|
252
|
+
export { sleep, parseRetryAfterFromError, NOTION_BLOCK_BATCH_SIZE, CONCURRENT_BLOCK_DELETES };
|
|
253
|
+
//# sourceMappingURL=notion-api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notion-api.d.ts","sourceRoot":"","sources":["../../../../src/external-sync/providers/notion/notion-api.ts"],"names":[],"mappings":"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"}
|