@vibesdotdev/integrations-notion 0.0.0-stage → 1.0.0-rc.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 (139) hide show
  1. package/LICENSE +126 -0
  2. package/README.md +142 -2
  3. package/dist/client/helper.d.ts +16 -0
  4. package/dist/client/helper.d.ts.map +1 -0
  5. package/dist/client/helper.js +17 -0
  6. package/dist/client/helper.js.map +1 -0
  7. package/dist/client/index.d.ts +3 -0
  8. package/dist/client/index.d.ts.map +1 -0
  9. package/dist/client/index.js +3 -0
  10. package/dist/client/index.js.map +1 -0
  11. package/dist/client/runtime-client.d.ts +89 -0
  12. package/dist/client/runtime-client.d.ts.map +1 -0
  13. package/dist/client/runtime-client.js +130 -0
  14. package/dist/client/runtime-client.js.map +1 -0
  15. package/dist/docs/integrations-notion.docs.descriptor.d.ts +19 -0
  16. package/dist/docs/integrations-notion.docs.descriptor.d.ts.map +1 -0
  17. package/dist/docs/integrations-notion.docs.descriptor.js +62 -0
  18. package/dist/docs/integrations-notion.docs.descriptor.js.map +1 -0
  19. package/dist/index.d.ts +23 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +28 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/integrations-notion.plugin.d.ts +19 -0
  24. package/dist/integrations-notion.plugin.d.ts.map +1 -0
  25. package/dist/integrations-notion.plugin.js +37 -0
  26. package/dist/integrations-notion.plugin.js.map +1 -0
  27. package/dist/notion/index.d.ts +12 -0
  28. package/dist/notion/index.d.ts.map +1 -0
  29. package/dist/notion/index.js +13 -0
  30. package/dist/notion/index.js.map +1 -0
  31. package/dist/notion/notion-client.d.ts +119 -0
  32. package/dist/notion/notion-client.d.ts.map +1 -0
  33. package/dist/notion/notion-client.js +438 -0
  34. package/dist/notion/notion-client.js.map +1 -0
  35. package/dist/notion/notion-implementation.d.ts +72 -0
  36. package/dist/notion/notion-implementation.d.ts.map +1 -0
  37. package/dist/notion/notion-implementation.js +222 -0
  38. package/dist/notion/notion-implementation.js.map +1 -0
  39. package/dist/notion/notion-schemas.d.ts +2 -0
  40. package/dist/notion/notion-schemas.d.ts.map +1 -0
  41. package/dist/notion/notion-schemas.js +2 -0
  42. package/dist/notion/notion-schemas.js.map +1 -0
  43. package/dist/notion/system.integration.notion.descriptor.d.ts +69 -0
  44. package/dist/notion/system.integration.notion.descriptor.d.ts.map +1 -0
  45. package/dist/notion/system.integration.notion.descriptor.js +109 -0
  46. package/dist/notion/system.integration.notion.descriptor.js.map +1 -0
  47. package/dist/notion.catalog.plugin.d.ts +78 -0
  48. package/dist/notion.catalog.plugin.d.ts.map +1 -0
  49. package/dist/notion.catalog.plugin.js +21 -0
  50. package/dist/notion.catalog.plugin.js.map +1 -0
  51. package/dist/notion.client.plugin.d.ts +3 -0
  52. package/dist/notion.client.plugin.d.ts.map +1 -0
  53. package/dist/notion.client.plugin.js +49 -0
  54. package/dist/notion.client.plugin.js.map +1 -0
  55. package/dist/schemas/json.d.ts +6 -0
  56. package/dist/schemas/json.d.ts.map +1 -0
  57. package/dist/schemas/json.js +4 -0
  58. package/dist/schemas/json.js.map +1 -0
  59. package/dist/schemas/notion.d.ts +221 -0
  60. package/dist/schemas/notion.d.ts.map +1 -0
  61. package/dist/schemas/notion.js +130 -0
  62. package/dist/schemas/notion.js.map +1 -0
  63. package/dist/schemas/oauth.d.ts +63 -0
  64. package/dist/schemas/oauth.d.ts.map +1 -0
  65. package/dist/schemas/oauth.js +15 -0
  66. package/dist/schemas/oauth.js.map +1 -0
  67. package/dist/schemas/operations.d.ts +556 -0
  68. package/dist/schemas/operations.d.ts.map +1 -0
  69. package/dist/schemas/operations.js +39 -0
  70. package/dist/schemas/operations.js.map +1 -0
  71. package/dist/schemas/sync.d.ts +32 -0
  72. package/dist/schemas/sync.d.ts.map +1 -0
  73. package/dist/schemas/sync.js +12 -0
  74. package/dist/schemas/sync.js.map +1 -0
  75. package/dist/schemas/tools.d.ts +239 -0
  76. package/dist/schemas/tools.d.ts.map +1 -0
  77. package/dist/schemas/tools.js +93 -0
  78. package/dist/schemas/tools.js.map +1 -0
  79. package/dist/schemas/vendor.d.ts +150 -0
  80. package/dist/schemas/vendor.d.ts.map +1 -0
  81. package/dist/schemas/vendor.js +31 -0
  82. package/dist/schemas/vendor.js.map +1 -0
  83. package/dist/server/oauth.d.ts +17 -0
  84. package/dist/server/oauth.d.ts.map +1 -0
  85. package/dist/server/oauth.js +64 -0
  86. package/dist/server/oauth.js.map +1 -0
  87. package/dist/sync/knowledge.notion.sync-mapping.descriptor.d.ts +15 -0
  88. package/dist/sync/knowledge.notion.sync-mapping.descriptor.d.ts.map +1 -0
  89. package/dist/sync/knowledge.notion.sync-mapping.descriptor.js +15 -0
  90. package/dist/sync/knowledge.notion.sync-mapping.descriptor.js.map +1 -0
  91. package/dist/sync/knowledge.notion.sync-mapping.impl.d.ts +13 -0
  92. package/dist/sync/knowledge.notion.sync-mapping.impl.d.ts.map +1 -0
  93. package/dist/sync/knowledge.notion.sync-mapping.impl.js +27 -0
  94. package/dist/sync/knowledge.notion.sync-mapping.impl.js.map +1 -0
  95. package/dist/sync/notion-record-projection.d.ts +16 -0
  96. package/dist/sync/notion-record-projection.d.ts.map +1 -0
  97. package/dist/sync/notion-record-projection.js +50 -0
  98. package/dist/sync/notion-record-projection.js.map +1 -0
  99. package/dist/sync/notion.sync-endpoint.descriptor.d.ts +14 -0
  100. package/dist/sync/notion.sync-endpoint.descriptor.d.ts.map +1 -0
  101. package/dist/sync/notion.sync-endpoint.descriptor.js +10 -0
  102. package/dist/sync/notion.sync-endpoint.descriptor.js.map +1 -0
  103. package/dist/sync/notion.sync-endpoint.impl.d.ts +55 -0
  104. package/dist/sync/notion.sync-endpoint.impl.d.ts.map +1 -0
  105. package/dist/sync/notion.sync-endpoint.impl.js +557 -0
  106. package/dist/sync/notion.sync-endpoint.impl.js.map +1 -0
  107. package/dist/sync/projects.notion.sync-mapping.descriptor.d.ts +15 -0
  108. package/dist/sync/projects.notion.sync-mapping.descriptor.d.ts.map +1 -0
  109. package/dist/sync/projects.notion.sync-mapping.descriptor.js +15 -0
  110. package/dist/sync/projects.notion.sync-mapping.descriptor.js.map +1 -0
  111. package/dist/sync/projects.notion.sync-mapping.impl.d.ts +13 -0
  112. package/dist/sync/projects.notion.sync-mapping.impl.d.ts.map +1 -0
  113. package/dist/sync/projects.notion.sync-mapping.impl.js +26 -0
  114. package/dist/sync/projects.notion.sync-mapping.impl.js.map +1 -0
  115. package/dist/sync/work.notion.sync-mapping.descriptor.d.ts +15 -0
  116. package/dist/sync/work.notion.sync-mapping.descriptor.d.ts.map +1 -0
  117. package/dist/sync/work.notion.sync-mapping.descriptor.js +15 -0
  118. package/dist/sync/work.notion.sync-mapping.descriptor.js.map +1 -0
  119. package/dist/sync/work.notion.sync-mapping.impl.d.ts +13 -0
  120. package/dist/sync/work.notion.sync-mapping.impl.d.ts.map +1 -0
  121. package/dist/sync/work.notion.sync-mapping.impl.js +63 -0
  122. package/dist/sync/work.notion.sync-mapping.impl.js.map +1 -0
  123. package/dist/tools/descriptors.d.ts +781 -0
  124. package/dist/tools/descriptors.d.ts.map +1 -0
  125. package/dist/tools/descriptors.js +129 -0
  126. package/dist/tools/descriptors.js.map +1 -0
  127. package/dist/tools/impl.d.ts +12 -0
  128. package/dist/tools/impl.d.ts.map +1 -0
  129. package/dist/tools/impl.js +61 -0
  130. package/dist/tools/impl.js.map +1 -0
  131. package/dist/tools/index.d.ts +3 -0
  132. package/dist/tools/index.d.ts.map +1 -0
  133. package/dist/tools/index.js +3 -0
  134. package/dist/tools/index.js.map +1 -0
  135. package/dist/tools/schemas.d.ts +2 -0
  136. package/dist/tools/schemas.d.ts.map +1 -0
  137. package/dist/tools/schemas.js +2 -0
  138. package/dist/tools/schemas.js.map +1 -0
  139. package/package.json +105 -4
@@ -0,0 +1,438 @@
1
+ import { CaughtFailureSchema, settle, valueFreeFailure } from '@vibesdotdev/kernel';
2
+ import { CapabilityError } from '@vibesdotdev/kernel';
3
+ import * as z from 'zod/v4';
4
+ import { JsonObjectSchema } from "../schemas/json.js";
5
+ import { contract, SearchInputSchema, BlockChildrenInputSchema, AppendBlockChildrenInputSchema } from "../schemas/operations.js";
6
+ import { VendorUserSchema, VendorDatabaseSchema, VendorDataSourceSchema, VendorPropertySchema, VendorPageSchema, VendorBlockSchema, VendorListSchema, VendorObjectSchema } from "../schemas/vendor.js";
7
+ import { NotionUserSchema, NotionPageSchema, NotionDatabaseSchema, NotionDataSourceSchema, NotionBlockSchema, CreateNotionPageSchema, UpdateNotionPageSchema, QueryNotionDataSourceSchema } from "../schemas/notion.js";
8
+ import { fetchWithRetry } from '@vibesdotdev/integrations/http';
9
+ const NOTION_API_BASE = 'https://api.notion.com/v1';
10
+ export const NOTION_API_VERSION = '2026-03-11';
11
+ /**
12
+ * Notion API client.
13
+ *
14
+ * Provides methods for CRUD operations on pages, databases, and blocks.
15
+ * Uses the Notion REST API with authentication via integration token.
16
+ */
17
+ export class NotionAPIClient {
18
+ apiToken;
19
+ fetchFn;
20
+ runtime;
21
+ constructor(config) {
22
+ if (!config.apiToken && !config.fetchFn) {
23
+ throw new NotionAPIError('Notion requires a token or an authenticated fetch implementation');
24
+ }
25
+ this.apiToken = config.apiToken;
26
+ this.runtime = config.runtime;
27
+ this.fetchFn = config.fetchFn ?? fetch;
28
+ }
29
+ // Users
30
+ /**
31
+ * Get the authenticated bot user's information.
32
+ */
33
+ async getMe() {
34
+ const response = await this.doRequest('/users/me');
35
+ return this.normalizeUser(response);
36
+ }
37
+ /**
38
+ * List all users in the workspace.
39
+ */
40
+ async listUsers() {
41
+ const users = [];
42
+ let hasMore = true;
43
+ let startCursor;
44
+ while (hasMore) {
45
+ const params = startCursor ? `?start_cursor=${startCursor}` : '';
46
+ const response = await this.doRequest(`/users${params}`);
47
+ const list = contract(VendorListSchema).parse(response);
48
+ const results = list.results;
49
+ for (const user of results) {
50
+ users.push(this.normalizeUser(user));
51
+ }
52
+ hasMore = list.has_more;
53
+ startCursor = list.next_cursor ?? undefined;
54
+ }
55
+ return users;
56
+ }
57
+ /**
58
+ * Get a single user by ID.
59
+ */
60
+ async getUser(userId) {
61
+ try {
62
+ const response = await this.doRequest(`/users/${userId}`);
63
+ return this.normalizeUser(response);
64
+ }
65
+ catch (error) {
66
+ if (error instanceof Error && CapabilityError.isAbsenceOf(error, 'notion/object', `/users/${userId}`)) {
67
+ return null;
68
+ }
69
+ throw error;
70
+ }
71
+ }
72
+ // Databases
73
+ /**
74
+ * Get a database by ID.
75
+ */
76
+ async getDatabase(databaseId) {
77
+ try {
78
+ const response = await this.doRequest(`/databases/${databaseId}`);
79
+ return this.normalizeDatabase(response);
80
+ }
81
+ catch (error) {
82
+ if (error instanceof Error && CapabilityError.isAbsenceOf(error, 'notion/object', `/databases/${databaseId}`)) {
83
+ return null;
84
+ }
85
+ throw error;
86
+ }
87
+ }
88
+ /**
89
+ * Get a data source by ID.
90
+ */
91
+ async getDataSource(dataSourceId) {
92
+ try {
93
+ const response = await this.doRequest(`/data_sources/${dataSourceId}`);
94
+ return this.normalizeDataSource(response);
95
+ }
96
+ catch (error) {
97
+ if (error instanceof Error && CapabilityError.isAbsenceOf(error, 'notion/object', `/data_sources/${dataSourceId}`)) {
98
+ return null;
99
+ }
100
+ throw error;
101
+ }
102
+ }
103
+ /**
104
+ * Query a data source to get pages/items.
105
+ */
106
+ async queryDataSource(input) {
107
+ input = contract(QueryNotionDataSourceSchema).parse(input);
108
+ const body = {};
109
+ if (input.filter) {
110
+ body.filter = input.filter;
111
+ }
112
+ if (input.sorts) {
113
+ body.sorts = input.sorts;
114
+ }
115
+ if (input.pageSize) {
116
+ body.page_size = input.pageSize;
117
+ }
118
+ if (input.startCursor) {
119
+ body.start_cursor = input.startCursor;
120
+ }
121
+ // This client returns normalized pages. Wiki data sources can otherwise
122
+ // include child data-source objects in the same result list.
123
+ body.result_type = 'page';
124
+ const query = async (dataSourceId) => {
125
+ const response = await this.doRequest(`/data_sources/${dataSourceId}/query`, {
126
+ method: 'POST',
127
+ body: JSON.stringify(body)
128
+ });
129
+ const list = contract(VendorListSchema).parse(response);
130
+ return {
131
+ dataSourceId,
132
+ pages: list.results.map((page) => this.normalizePage(page)),
133
+ hasMore: list.has_more,
134
+ nextCursor: list.next_cursor ?? undefined
135
+ };
136
+ };
137
+ try {
138
+ return await query(input.dataSourceId);
139
+ }
140
+ catch (error) {
141
+ // A database id answers this query with a confirmed absence; fall back to
142
+ // the database's single child data source.
143
+ if (error instanceof Error &&
144
+ CapabilityError.isAbsenceOf(error, 'notion/object', `/data_sources/${input.dataSourceId}/query`)) {
145
+ const database = await this.getDatabase(input.dataSourceId);
146
+ if (!database)
147
+ throw error;
148
+ if (database.dataSources.length !== 1) {
149
+ throw new CapabilityError('This database does not have exactly one child data source; choose one from getDatabase().', 'INVALID_INPUT', {
150
+ reason: 'notion-database-data-source-ambiguous',
151
+ retryable: false,
152
+ details: { childDataSourceCount: database.dataSources.length },
153
+ recoveryHint: 'Call getDatabase(), then pass the selected child data source id to queryDataSource.'
154
+ });
155
+ }
156
+ return query(database.dataSources[0].id);
157
+ }
158
+ throw error;
159
+ }
160
+ }
161
+ /**
162
+ * Search for data sources and pages.
163
+ */
164
+ async search(query, options) {
165
+ const input = contract(SearchInputSchema).parse({ ...options, query });
166
+ const body = {};
167
+ if (input.query) {
168
+ body.query = input.query;
169
+ }
170
+ if (input.filter) {
171
+ body.filter = { value: input.filter, property: 'object' };
172
+ }
173
+ if (input.pageSize) {
174
+ body.page_size = input.pageSize;
175
+ }
176
+ if (input.startCursor) {
177
+ body.start_cursor = input.startCursor;
178
+ }
179
+ const response = await this.doRequest('/search', {
180
+ method: 'POST',
181
+ body: JSON.stringify(body)
182
+ });
183
+ const list = contract(VendorListSchema).parse(response);
184
+ const results = list.results;
185
+ const dataSources = [];
186
+ const pages = [];
187
+ for (const result of results) {
188
+ const typed = contract(VendorObjectSchema).parse(result);
189
+ if (typed.object === 'data_source') {
190
+ dataSources.push(this.normalizeDataSource(result));
191
+ }
192
+ else if (typed.object === 'page') {
193
+ pages.push(this.normalizePage(result));
194
+ }
195
+ }
196
+ return {
197
+ dataSources,
198
+ pages,
199
+ hasMore: list.has_more,
200
+ nextCursor: list.next_cursor ?? undefined
201
+ };
202
+ }
203
+ // Pages
204
+ /**
205
+ * Get a page by ID.
206
+ */
207
+ async getPage(pageId) {
208
+ try {
209
+ const response = await this.doRequest(`/pages/${pageId}`);
210
+ return this.normalizePage(response);
211
+ }
212
+ catch (error) {
213
+ if (error instanceof Error && CapabilityError.isAbsenceOf(error, 'notion/object', `/pages/${pageId}`)) {
214
+ return null;
215
+ }
216
+ throw error;
217
+ }
218
+ }
219
+ /**
220
+ * Create a new page.
221
+ */
222
+ async createPage(input) {
223
+ input = contract(CreateNotionPageSchema).parse(input);
224
+ const parent = {};
225
+ const dataSourceId = input.parentDataSourceId ?? input.parentDatabaseId;
226
+ if (dataSourceId) {
227
+ parent.data_source_id = dataSourceId;
228
+ parent.type = 'data_source_id';
229
+ }
230
+ else if (input.parentPageId) {
231
+ parent.page_id = input.parentPageId;
232
+ parent.type = 'page_id';
233
+ }
234
+ else {
235
+ throw new NotionAPIError('Either parentDataSourceId or parentPageId is required');
236
+ }
237
+ const body = {
238
+ parent,
239
+ properties: input.properties
240
+ };
241
+ if (input.icon) {
242
+ body.icon = { emoji: input.icon };
243
+ }
244
+ if (input.children) {
245
+ body.children = input.children;
246
+ }
247
+ const response = await this.doRequest('/pages', {
248
+ method: 'POST',
249
+ body: JSON.stringify(body)
250
+ });
251
+ return this.normalizePage(response);
252
+ }
253
+ /**
254
+ * Update an existing page.
255
+ */
256
+ async updatePage(pageId, input) {
257
+ input = contract(UpdateNotionPageSchema).parse(input);
258
+ const body = {};
259
+ if (input.properties) {
260
+ body.properties = input.properties;
261
+ }
262
+ if (input.icon !== undefined) {
263
+ body.icon = input.icon ? { emoji: input.icon } : null;
264
+ }
265
+ if (input.cover !== undefined) {
266
+ body.cover = input.cover ? { external: { url: input.cover } } : null;
267
+ }
268
+ const inTrash = input.inTrash ?? input.archived;
269
+ if (inTrash !== undefined) {
270
+ body.in_trash = inTrash;
271
+ }
272
+ const response = await this.doRequest(`/pages/${pageId}`, {
273
+ method: 'PATCH',
274
+ body: JSON.stringify(body)
275
+ });
276
+ return this.normalizePage(response);
277
+ }
278
+ /**
279
+ * Move a page to the trash.
280
+ */
281
+ async archivePage(pageId) {
282
+ await this.doRequest(`/pages/${pageId}`, {
283
+ method: 'PATCH',
284
+ body: JSON.stringify({ in_trash: true })
285
+ });
286
+ }
287
+ /**
288
+ * Restore a trashed page.
289
+ */
290
+ async restorePage(pageId) {
291
+ await this.doRequest(`/pages/${pageId}`, {
292
+ method: 'PATCH',
293
+ body: JSON.stringify({ in_trash: false })
294
+ });
295
+ }
296
+ /**
297
+ * Permanently delete a page (move to trash).
298
+ * Note: Notion API doesn't support hard delete, this moves to trash.
299
+ */
300
+ async deletePage(pageId) {
301
+ await this.archivePage(pageId);
302
+ }
303
+ // Blocks (Page Content)
304
+ /**
305
+ * Get block children (content of a page or block).
306
+ */
307
+ async getBlockChildren(blockId, options) {
308
+ const input = contract(BlockChildrenInputSchema).parse({ ...options, blockId });
309
+ const params = new URLSearchParams();
310
+ if (input.pageSize) {
311
+ params.append('page_size', input.pageSize.toString());
312
+ }
313
+ if (input.startCursor) {
314
+ params.append('start_cursor', input.startCursor);
315
+ }
316
+ const response = await this.doRequest(`/blocks/${input.blockId}/children?${params.toString()}`);
317
+ const list = contract(VendorListSchema).parse(response);
318
+ const results = list.results;
319
+ const blocks = results.map((block) => this.normalizeBlock(block));
320
+ return {
321
+ blocks,
322
+ hasMore: list.has_more,
323
+ nextCursor: list.next_cursor ?? undefined
324
+ };
325
+ }
326
+ /**
327
+ * Append block children to a page or block.
328
+ */
329
+ async appendBlockChildren(blockId, children) {
330
+ const input = contract(AppendBlockChildrenInputSchema).parse({ blockId, children });
331
+ const response = await this.doRequest(`/blocks/${input.blockId}/children`, {
332
+ method: 'PATCH',
333
+ body: JSON.stringify({ children: input.children })
334
+ });
335
+ const list = contract(VendorListSchema).parse(response);
336
+ const results = list.results;
337
+ return results.map((block) => this.normalizeBlock(block));
338
+ }
339
+ // Private Helpers
340
+ async doRequest(path, options = {}) {
341
+ let response;
342
+ try {
343
+ const headers = new Headers({
344
+ 'Notion-Version': NOTION_API_VERSION,
345
+ 'Content-Type': 'application/json',
346
+ ...options.headers
347
+ });
348
+ if (this.apiToken !== undefined)
349
+ headers.set('Authorization', `Bearer ${this.apiToken}`);
350
+ response = await fetchWithRetry(this.runtime, this.fetchFn, `${NOTION_API_BASE}${path}`, {
351
+ ...options,
352
+ headers
353
+ }, { maxAttempts: options.method === undefined || options.method === 'GET' || path.endsWith('/query') || path === '/search' ? 4 : 1 });
354
+ }
355
+ catch (cause) {
356
+ if (cause instanceof CapabilityError)
357
+ throw cause;
358
+ throw new CapabilityError('Notion transport failed.', 'INTERNAL', { reason: 'notion-transport-unknown', cause: valueFreeFailure(CaughtFailureSchema.parse(cause)) });
359
+ }
360
+ if (!response.ok) {
361
+ const released = await settle(() => response.body?.cancel());
362
+ if (!released.ok) {
363
+ throw new CapabilityError('Notion response could not be released.', 'INTERNAL', {
364
+ reason: 'notion-response-release-failed',
365
+ details: { status: response.status },
366
+ cause: released.cause instanceof CapabilityError ? released.cause : valueFreeFailure(released.cause)
367
+ });
368
+ }
369
+ throw new NotionAPIError('Notion request failed.', response.status, undefined, path);
370
+ }
371
+ let data;
372
+ try {
373
+ data = await response.json();
374
+ }
375
+ catch (cause) {
376
+ if (cause instanceof CapabilityError)
377
+ throw cause;
378
+ throw new CapabilityError('Notion response is malformed.', 'INTERNAL', { reason: 'notion-response-invalid', cause: valueFreeFailure(CaughtFailureSchema.parse(cause)) });
379
+ }
380
+ return contract(JsonObjectSchema).parse(data);
381
+ }
382
+ normalizeUser(data) {
383
+ const raw = contract(VendorUserSchema).parse(data);
384
+ return contract(NotionUserSchema).parse({ id: raw.id, name: raw.name ?? '', email: raw.person?.email, avatarUrl: raw.avatar_url ?? undefined, type: raw.type ?? 'person' });
385
+ }
386
+ normalizeDatabase(data) {
387
+ const raw = contract(VendorDatabaseSchema).parse(data);
388
+ return contract(NotionDatabaseSchema).parse({
389
+ id: raw.id, name: raw.title, url: raw.url, dataSources: raw.data_sources, properties: [],
390
+ createdAt: raw.created_time ?? '', updatedAt: raw.last_edited_time ?? '',
391
+ parentPageId: raw.parent.page_id, workspaceId: raw.workspace_id, inTrash: raw.in_trash
392
+ });
393
+ }
394
+ normalizeDataSource(data) {
395
+ const raw = contract(VendorDataSourceSchema).parse(data);
396
+ const properties = Object.entries(raw.properties).map(([name, value]) => ({
397
+ ...contract(VendorPropertySchema).parse(value), name, config: value
398
+ }));
399
+ return contract(NotionDataSourceSchema).parse({
400
+ id: raw.id, name: raw.title || raw.name || '', url: raw.url, properties,
401
+ createdAt: raw.created_time ?? '', updatedAt: raw.last_edited_time ?? '',
402
+ parentDatabaseId: raw.parent.database_id, inTrash: raw.in_trash
403
+ });
404
+ }
405
+ normalizePage(data) {
406
+ const raw = contract(VendorPageSchema).parse(data);
407
+ const properties = Object.fromEntries(Object.entries(raw.properties).map(([name, value]) => {
408
+ const property = contract(z.object({ id: z.string(), type: z.string() })).parse(value);
409
+ return [name, { ...property, value }];
410
+ }));
411
+ return contract(NotionPageSchema).parse({
412
+ id: raw.id, url: raw.url, properties,
413
+ icon: raw.icon?.emoji ?? raw.icon?.external?.url, cover: raw.cover?.external?.url,
414
+ createdAt: raw.created_time ?? '', updatedAt: raw.last_edited_time ?? '',
415
+ createdBy: raw.created_by ? this.normalizeUser(raw.created_by) : undefined,
416
+ lastEditedBy: raw.last_edited_by ? this.normalizeUser(raw.last_edited_by) : undefined,
417
+ parentDataSourceId: raw.parent.data_source_id, parentDatabaseId: raw.parent.database_id,
418
+ parentPageId: raw.parent.page_id, inTrash: raw.in_trash, archived: raw.in_trash || raw.archived === true
419
+ });
420
+ }
421
+ normalizeBlock(data) {
422
+ const raw = contract(VendorBlockSchema).parse(data);
423
+ return contract(NotionBlockSchema).parse({ id: raw.id, type: raw.type, content: raw[raw.type], hasChildren: raw.has_children });
424
+ }
425
+ }
426
+ /** Compatibility constructor; failure codes and reasons belong to CapabilityError. */
427
+ export class NotionAPIError extends CapabilityError {
428
+ status;
429
+ constructor(_message, status, _vendorCode, subject) {
430
+ super('Notion request failed.', status === 404 ? 'NOT_FOUND' : status === 401 || status === 403 ? 'PERMISSION_DENIED' : 'INTERNAL', {
431
+ reason: status === 404 ? 'record-absent' : 'notion-request-failed',
432
+ details: { status: status ?? 0, kind: 'notion/object', id: subject ?? '' }
433
+ });
434
+ this.status = status;
435
+ this.name = 'NotionAPIError';
436
+ }
437
+ }
438
+ //# sourceMappingURL=notion-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notion-client.js","sourceRoot":"","sources":["../../src/notion/notion-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ import type { NotionOperationInput } from '../schemas/operations.ts';
2
+ import { type JsonObject } from '../schemas/json.ts';
3
+ import type { IntegrationOAuthAuthorization, IntegrationOAuthCompletion, IntegrationOAuthStart, IntegrationConnectionSelector, IntegrationOperationResult } from '@vibesdotdev/integrations/schemas/integration-descriptor';
4
+ import { BaseIntegrationProvider } from '@vibesdotdev/integrations/kinds/integration';
5
+ import { NotionAPIClient } from './notion-client.ts';
6
+ import { type NotionDataSource, type NotionDatabase, type NotionPage, type NotionPullOptions, type NotionPullResult } from './notion-schemas.ts';
7
+ /**
8
+ * Notion integration implementation.
9
+ *
10
+ * Provides authenticated access to the Notion API with bounded pull transport.
11
+ * Credential and config resolution is inherited from
12
+ * `BaseIntegrationProvider` (consume-don't-reimplement): the base resolver
13
+ * reads the live request orgId on every call (the provider instance is
14
+ * value-cached by the runtime, so a constructor-snapshot orgId would bleed
15
+ * org A's credentials into org B's requests) and delivers credential
16
+ * references for the Secrets request owner. NOTION_API_TOKEN is a declared
17
+ * secret reference, never a feature-owned host environment read.
18
+ */
19
+ export declare class NotionIntegration extends BaseIntegrationProvider {
20
+ startAuthorization(_input: IntegrationOAuthStart): Promise<IntegrationOAuthAuthorization>;
21
+ completeAuthorization(_input: IntegrationOAuthCompletion): Promise<void>;
22
+ invokeOperation<T = unknown>(opId: string, args?: NotionOperationInput): Promise<IntegrationOperationResult<T>>;
23
+ invokeOperationForConnection<T = unknown>(selector: Readonly<IntegrationConnectionSelector>, opId: string, args?: NotionOperationInput): Promise<IntegrationOperationResult<T>>;
24
+ private dispatch;
25
+ private dispatchClientOp;
26
+ /**
27
+ * Create a reference-bound client for the current connection. Secrets resolves
28
+ * credential values at each HTTP use, including after credential rotation.
29
+ */
30
+ getClient(selector?: Readonly<IntegrationConnectionSelector>): Promise<NotionAPIClient>;
31
+ private createClient;
32
+ /**
33
+ * Pull one cursor page from a Notion data source. If no data source id is
34
+ * passed, the provider resolves the canonical `dataSourceId` config.
35
+ * With neither configured, it performs the workspace-page-search fallback
36
+ * without exposing the credential to the caller.
37
+ *
38
+ * This is provider transport, not a claim that records were synchronized.
39
+ * Callers persist the cursor and feed the returned pages into a domain-owned
40
+ * sync endpoint and projection binding.
41
+ */
42
+ pullDataSource(options?: NotionPullOptions, selector?: Readonly<IntegrationConnectionSelector>): Promise<NotionPullResult>;
43
+ /**
44
+ * Import a single page from Notion by ID.
45
+ */
46
+ importPage(pageId: string): Promise<NotionPage | null>;
47
+ /**
48
+ * Import a database schema from Notion by ID.
49
+ */
50
+ importDatabase(databaseId: string): Promise<NotionDatabase | null>;
51
+ /** Import a data source schema from Notion by ID. */
52
+ importDataSource(dataSourceId: string): Promise<NotionDataSource | null>;
53
+ /**
54
+ * Export a local item to Notion as a page.
55
+ */
56
+ exportPage(item: {
57
+ title: string;
58
+ description?: string;
59
+ dataSourceId?: string;
60
+ /** @deprecated Use dataSourceId. */
61
+ databaseId?: string;
62
+ parentPageId?: string;
63
+ properties?: JsonObject;
64
+ }): Promise<NotionPage>;
65
+ /**
66
+ * Search for pages and data sources in the workspace.
67
+ */
68
+ search(query?: string, options?: {
69
+ filter?: 'data_source' | 'page';
70
+ }): ReturnType<NotionAPIClient['search']>;
71
+ }
72
+ //# sourceMappingURL=notion-implementation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notion-implementation.d.ts","sourceRoot":"","sources":["../../src/notion/notion-implementation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAIrE,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEvE,OAAO,KAAK,EACX,6BAA6B,EAC7B,0BAA0B,EAC1B,qBAAqB,EACrB,6BAA6B,EAC7B,0BAA0B,EAE1B,MAAM,0DAA0D,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,6CAA6C,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAEN,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,MAAM,qBAAqB,CAAC;AAE7B;;;;;;;;;;;GAWG;AACH,qBAAa,iBAAkB,SAAQ,uBAAuB;IAC9C,kBAAkB,CAChC,MAAM,EAAE,qBAAqB,GAC3B,OAAO,CAAC,6BAA6B,CAAC;IAM1B,qBAAqB,CAAC,MAAM,EAAE,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxE,eAAe,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC;IAK9H,4BAA4B,CAAC,CAAC,GAAG,OAAO,EACvC,QAAQ,EAAE,QAAQ,CAAC,6BAA6B,CAAC,EACjD,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,oBAAoB,GACzB,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC;YAS3B,QAAQ;YASR,gBAAgB;IA0B9B;;;OAGG;IACG,SAAS,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,6BAA6B,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;IAI7F,OAAO,CAAC,YAAY;IAkCpB;;;;;;;;;OASG;IACG,cAAc,CAAC,OAAO,GAAE,iBAAsB,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,6BAA6B,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAoDpI;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAK5D;;OAEG;IACG,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAKxE,qDAAqD;IAC/C,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAK9E;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE;QACtB,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,oCAAoC;QACpC,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,UAAU,CAAC,EAAE,UAAU,CAAC;KACxB,GAAG,OAAO,CAAC,UAAU,CAAC;IAgCvB;;OAEG;IACG,MAAM,CACX,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,aAAa,GAAG,MAAM,CAAA;KAAE,GAC3C,UAAU,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;CAIxC"}