@intentsolutions/blueprint 2.5.0 → 2.6.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.
@@ -0,0 +1,413 @@
1
+ /**
2
+ * Notion API Client
3
+ * REST client for Notion API
4
+ */
5
+ const NOTION_API_URL = 'https://api.notion.com/v1';
6
+ const NOTION_VERSION = '2022-06-28';
7
+ export class NotionClient {
8
+ apiKey;
9
+ parentPageId;
10
+ databaseId;
11
+ constructor(config) {
12
+ this.apiKey = config.apiKey;
13
+ this.parentPageId = config.parentPageId;
14
+ this.databaseId = config.databaseId;
15
+ }
16
+ /**
17
+ * Make an API request
18
+ */
19
+ async request(endpoint, options = {}) {
20
+ const url = `${NOTION_API_URL}${endpoint}`;
21
+ const response = await fetch(url, {
22
+ ...options,
23
+ headers: {
24
+ 'Authorization': `Bearer ${this.apiKey}`,
25
+ 'Content-Type': 'application/json',
26
+ 'Notion-Version': NOTION_VERSION,
27
+ ...options.headers,
28
+ },
29
+ });
30
+ if (!response.ok) {
31
+ const errorBody = await response.text();
32
+ let errorMessage = `Notion API error: ${response.status} ${response.statusText}`;
33
+ try {
34
+ const errorJson = JSON.parse(errorBody);
35
+ if (errorJson.message) {
36
+ errorMessage += ` - ${errorJson.message}`;
37
+ }
38
+ }
39
+ catch {
40
+ if (errorBody)
41
+ errorMessage += ` - ${errorBody}`;
42
+ }
43
+ throw new Error(errorMessage);
44
+ }
45
+ const text = await response.text();
46
+ if (!text)
47
+ return {};
48
+ return JSON.parse(text);
49
+ }
50
+ /**
51
+ * Verify credentials and get current user (bot)
52
+ */
53
+ async verify() {
54
+ const response = await this.request('/users/me');
55
+ return response.bot;
56
+ }
57
+ /**
58
+ * Get a page by ID
59
+ */
60
+ async getPage(pageId) {
61
+ return this.request(`/pages/${pageId}`);
62
+ }
63
+ /**
64
+ * Get a database by ID
65
+ */
66
+ async getDatabase(databaseId) {
67
+ return this.request(`/databases/${databaseId}`);
68
+ }
69
+ /**
70
+ * Search for pages and databases
71
+ */
72
+ async search(query, filter) {
73
+ return this.request('/search', {
74
+ method: 'POST',
75
+ body: JSON.stringify({
76
+ query,
77
+ filter: filter ? { property: filter.property, value: filter.value } : undefined,
78
+ }),
79
+ });
80
+ }
81
+ /**
82
+ * List all pages the integration has access to
83
+ */
84
+ async listPages() {
85
+ const response = await this.search('', { property: 'object', value: 'page' });
86
+ return response.results.filter((r) => r.object === 'page');
87
+ }
88
+ /**
89
+ * List all databases the integration has access to
90
+ */
91
+ async listDatabases() {
92
+ const response = await this.search('', { property: 'object', value: 'database' });
93
+ return response.results.filter((r) => r.object === 'database');
94
+ }
95
+ /**
96
+ * Create a database
97
+ */
98
+ async createDatabase(input) {
99
+ const body = {
100
+ parent: { type: 'page_id', page_id: input.parentPageId },
101
+ title: [this.createRichText(input.title)],
102
+ properties: input.properties,
103
+ };
104
+ if (input.icon) {
105
+ body.icon = input.icon;
106
+ }
107
+ return this.request('/databases', {
108
+ method: 'POST',
109
+ body: JSON.stringify(body),
110
+ });
111
+ }
112
+ /**
113
+ * Create a page
114
+ */
115
+ async createPage(input) {
116
+ const body = {};
117
+ // Set parent
118
+ if (input.databaseId) {
119
+ body.parent = { type: 'database_id', database_id: input.databaseId };
120
+ }
121
+ else if (input.parentPageId) {
122
+ body.parent = { type: 'page_id', page_id: input.parentPageId };
123
+ }
124
+ else if (this.databaseId) {
125
+ body.parent = { type: 'database_id', database_id: this.databaseId };
126
+ }
127
+ else if (this.parentPageId) {
128
+ body.parent = { type: 'page_id', page_id: this.parentPageId };
129
+ }
130
+ else {
131
+ throw new Error('No parent page or database specified');
132
+ }
133
+ // Set properties
134
+ if (input.databaseId || this.databaseId) {
135
+ // Database page - use provided properties or default title
136
+ const props = input.properties || {
137
+ Name: { title: [this.createRichText(input.title)] },
138
+ };
139
+ // Ensure title is set
140
+ const propsRecord = props;
141
+ if (!propsRecord.Name && !propsRecord.title) {
142
+ propsRecord.Name = {
143
+ title: [this.createRichText(input.title)]
144
+ };
145
+ }
146
+ body.properties = propsRecord;
147
+ }
148
+ else {
149
+ // Page under another page - use title property
150
+ body.properties = {
151
+ title: { title: [this.createRichText(input.title)] },
152
+ };
153
+ }
154
+ // Add icon
155
+ if (input.icon) {
156
+ body.icon = input.icon;
157
+ }
158
+ // Add cover
159
+ if (input.cover) {
160
+ body.cover = input.cover;
161
+ }
162
+ // Add content blocks (children)
163
+ if (input.content && input.content.length > 0) {
164
+ body.children = input.content;
165
+ }
166
+ return this.request('/pages', {
167
+ method: 'POST',
168
+ body: JSON.stringify(body),
169
+ });
170
+ }
171
+ /**
172
+ * Append blocks to a page
173
+ */
174
+ async appendBlocks(pageId, blocks) {
175
+ // Notion limits to 100 blocks per request
176
+ const chunks = this.chunkArray(blocks, 100);
177
+ for (const chunk of chunks) {
178
+ await this.request(`/blocks/${pageId}/children`, {
179
+ method: 'PATCH',
180
+ body: JSON.stringify({ children: chunk }),
181
+ });
182
+ }
183
+ }
184
+ /**
185
+ * Create rich text object
186
+ */
187
+ createRichText(content, options) {
188
+ return {
189
+ type: 'text',
190
+ text: {
191
+ content,
192
+ link: options?.link ? { url: options.link } : null,
193
+ },
194
+ annotations: {
195
+ bold: options?.bold || false,
196
+ italic: options?.italic || false,
197
+ code: options?.code || false,
198
+ },
199
+ };
200
+ }
201
+ /**
202
+ * Create a paragraph block
203
+ */
204
+ createParagraph(text) {
205
+ return {
206
+ object: 'block',
207
+ type: 'paragraph',
208
+ paragraph: {
209
+ rich_text: [this.createRichText(text)],
210
+ },
211
+ };
212
+ }
213
+ /**
214
+ * Create a heading block
215
+ */
216
+ createHeading(text, level) {
217
+ const type = `heading_${level}`;
218
+ return {
219
+ object: 'block',
220
+ type,
221
+ [type]: {
222
+ rich_text: [this.createRichText(text)],
223
+ },
224
+ };
225
+ }
226
+ /**
227
+ * Create a bulleted list item block
228
+ */
229
+ createBulletItem(text) {
230
+ return {
231
+ object: 'block',
232
+ type: 'bulleted_list_item',
233
+ bulleted_list_item: {
234
+ rich_text: [this.createRichText(text)],
235
+ },
236
+ };
237
+ }
238
+ /**
239
+ * Create a numbered list item block
240
+ */
241
+ createNumberedItem(text) {
242
+ return {
243
+ object: 'block',
244
+ type: 'numbered_list_item',
245
+ numbered_list_item: {
246
+ rich_text: [this.createRichText(text)],
247
+ },
248
+ };
249
+ }
250
+ /**
251
+ * Create a to-do block
252
+ */
253
+ createToDo(text, checked = false) {
254
+ return {
255
+ object: 'block',
256
+ type: 'to_do',
257
+ to_do: {
258
+ rich_text: [this.createRichText(text)],
259
+ checked,
260
+ },
261
+ };
262
+ }
263
+ /**
264
+ * Create a code block
265
+ */
266
+ createCode(code, language = 'plain text') {
267
+ return {
268
+ object: 'block',
269
+ type: 'code',
270
+ code: {
271
+ rich_text: [this.createRichText(code)],
272
+ language,
273
+ },
274
+ };
275
+ }
276
+ /**
277
+ * Create a quote block
278
+ */
279
+ createQuote(text) {
280
+ return {
281
+ object: 'block',
282
+ type: 'quote',
283
+ quote: {
284
+ rich_text: [this.createRichText(text)],
285
+ },
286
+ };
287
+ }
288
+ /**
289
+ * Create a callout block
290
+ */
291
+ createCallout(text, emoji = '💡') {
292
+ return {
293
+ object: 'block',
294
+ type: 'callout',
295
+ callout: {
296
+ rich_text: [this.createRichText(text)],
297
+ icon: { type: 'emoji', emoji },
298
+ },
299
+ };
300
+ }
301
+ /**
302
+ * Create a divider block
303
+ */
304
+ createDivider() {
305
+ return {
306
+ object: 'block',
307
+ type: 'divider',
308
+ divider: {},
309
+ };
310
+ }
311
+ /**
312
+ * Create a table of contents block
313
+ */
314
+ createTableOfContents() {
315
+ return {
316
+ object: 'block',
317
+ type: 'table_of_contents',
318
+ table_of_contents: {},
319
+ };
320
+ }
321
+ /**
322
+ * Convert markdown to Notion blocks
323
+ */
324
+ markdownToBlocks(markdown) {
325
+ const blocks = [];
326
+ const lines = markdown.split('\n');
327
+ let inCodeBlock = false;
328
+ let codeContent = [];
329
+ let codeLanguage = 'plain text';
330
+ for (const line of lines) {
331
+ // Handle code blocks
332
+ if (line.startsWith('```')) {
333
+ if (inCodeBlock) {
334
+ // End code block
335
+ blocks.push(this.createCode(codeContent.join('\n'), codeLanguage));
336
+ codeContent = [];
337
+ inCodeBlock = false;
338
+ }
339
+ else {
340
+ // Start code block
341
+ inCodeBlock = true;
342
+ codeLanguage = line.slice(3).trim() || 'plain text';
343
+ }
344
+ continue;
345
+ }
346
+ if (inCodeBlock) {
347
+ codeContent.push(line);
348
+ continue;
349
+ }
350
+ // Skip empty lines
351
+ if (!line.trim()) {
352
+ continue;
353
+ }
354
+ // Headings
355
+ if (line.startsWith('### ')) {
356
+ blocks.push(this.createHeading(line.slice(4), 3));
357
+ }
358
+ else if (line.startsWith('## ')) {
359
+ blocks.push(this.createHeading(line.slice(3), 2));
360
+ }
361
+ else if (line.startsWith('# ')) {
362
+ blocks.push(this.createHeading(line.slice(2), 1));
363
+ }
364
+ // Bullet lists
365
+ else if (line.match(/^[\s]*[-*]\s+/)) {
366
+ const text = line.replace(/^[\s]*[-*]\s+/, '');
367
+ // Check for checkbox
368
+ if (text.startsWith('[ ] ')) {
369
+ blocks.push(this.createToDo(text.slice(4), false));
370
+ }
371
+ else if (text.startsWith('[x] ') || text.startsWith('[X] ')) {
372
+ blocks.push(this.createToDo(text.slice(4), true));
373
+ }
374
+ else {
375
+ blocks.push(this.createBulletItem(text));
376
+ }
377
+ }
378
+ // Numbered lists
379
+ else if (line.match(/^\d+\.\s+/)) {
380
+ const text = line.replace(/^\d+\.\s+/, '');
381
+ blocks.push(this.createNumberedItem(text));
382
+ }
383
+ // Blockquotes
384
+ else if (line.startsWith('> ')) {
385
+ blocks.push(this.createQuote(line.slice(2)));
386
+ }
387
+ // Horizontal rules
388
+ else if (line.match(/^[-*_]{3,}$/)) {
389
+ blocks.push(this.createDivider());
390
+ }
391
+ // Regular paragraphs
392
+ else {
393
+ blocks.push(this.createParagraph(line));
394
+ }
395
+ }
396
+ // Handle unclosed code block
397
+ if (inCodeBlock && codeContent.length > 0) {
398
+ blocks.push(this.createCode(codeContent.join('\n'), codeLanguage));
399
+ }
400
+ return blocks;
401
+ }
402
+ /**
403
+ * Split array into chunks
404
+ */
405
+ chunkArray(array, size) {
406
+ const chunks = [];
407
+ for (let i = 0; i < array.length; i += size) {
408
+ chunks.push(array.slice(i, i + size));
409
+ }
410
+ return chunks;
411
+ }
412
+ }
413
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/integrations/notion/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH,MAAM,cAAc,GAAG,2BAA2B,CAAC;AACnD,MAAM,cAAc,GAAG,YAAY,CAAC;AAEpC,MAAM,OAAO,YAAY;IACf,MAAM,CAAS;IACf,YAAY,CAAU;IACtB,UAAU,CAAU;IAE5B,YAAY,MAAoB;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACxC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IACtC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,OAAO,CACnB,QAAgB,EAChB,UAAuB,EAAE;QAEzB,MAAM,GAAG,GAAG,GAAG,cAAc,GAAG,QAAQ,EAAE,CAAC;QAE3C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,GAAG,OAAO;YACV,OAAO,EAAE;gBACP,eAAe,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;gBACxC,cAAc,EAAE,kBAAkB;gBAClC,gBAAgB,EAAE,cAAc;gBAChC,GAAG,OAAO,CAAC,OAAO;aACnB;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,IAAI,YAAY,GAAG,qBAAqB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YACjF,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBACxC,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;oBACtB,YAAY,IAAI,MAAM,SAAS,CAAC,OAAO,EAAE,CAAC;gBAC5C,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,SAAS;oBAAE,YAAY,IAAI,MAAM,SAAS,EAAE,CAAC;YACnD,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;QAChC,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI;YAAE,OAAO,EAAO,CAAC;QAE1B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM;QACV,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAsB,WAAW,CAAC,CAAC;QACtE,OAAO,QAAQ,CAAC,GAAG,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,MAAc;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAa,UAAU,MAAM,EAAE,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,UAAkB;QAClC,OAAO,IAAI,CAAC,OAAO,CAAiB,cAAc,UAAU,EAAE,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,MAA4C;QAGtE,OAAO,IAAI,CAAC,OAAO,CAAkD,SAAS,EAAE;YAC9E,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,KAAK;gBACL,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS;aAChF,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS;QACb,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9E,OAAO,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAmB,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;IAC9E,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa;QACjB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QAClF,OAAO,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAuB,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC;IACtF,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,KAA0B;QAC7C,MAAM,IAAI,GAA4B;YACpC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,YAAY,EAAE;YACxD,KAAK,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACzC,UAAU,EAAE,KAAK,CAAC,UAAU;SAC7B,CAAC;QAEF,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACzB,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAiB,YAAY,EAAE;YAChD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,KAAsB;QACrC,MAAM,IAAI,GAA4B,EAAE,CAAC;QAEzC,aAAa;QACb,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACrB,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC;QACvE,CAAC;aAAM,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC;QACjE,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;QACtE,CAAC;aAAM,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;QAChE,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QAED,iBAAiB;QACjB,IAAI,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACxC,2DAA2D;YAC3D,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,IAAI;gBAChC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;aACpD,CAAC;YAEF,sBAAsB;YACtB,MAAM,WAAW,GAAG,KAAgC,CAAC;YACrD,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;gBAC5C,WAAW,CAAC,IAAI,GAAG;oBACjB,KAAK,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;iBAC1C,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,+CAA+C;YAC/C,IAAI,CAAC,UAAU,GAAG;gBAChB,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;aACrD,CAAC;QACJ,CAAC;QAED,WAAW;QACX,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACzB,CAAC;QAED,YAAY;QACZ,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC3B,CAAC;QAED,gCAAgC;QAChC,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC;QAChC,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAa,QAAQ,EAAE;YACxC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,MAAc,EAAE,MAAqB;QACtD,0CAA0C;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAE5C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,MAAM,WAAW,EAAE;gBAC/C,MAAM,EAAE,OAAO;gBACf,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;aAC1C,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,OAAe,EAAE,OAK/B;QACC,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE;gBACJ,OAAO;gBACP,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI;aACnD;YACD,WAAW,EAAE;gBACX,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,KAAK;gBAC5B,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,KAAK;gBAChC,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,KAAK;aAC7B;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,IAAY;QAC1B,OAAO;YACL,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,WAAW;YACjB,SAAS,EAAE;gBACT,SAAS,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;aACvC;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,IAAY,EAAE,KAAgB;QAC1C,MAAM,IAAI,GAAG,WAAW,KAAK,EAA6C,CAAC;QAC3E,OAAO;YACL,MAAM,EAAE,OAAO;YACf,IAAI;YACJ,CAAC,IAAI,CAAC,EAAE;gBACN,SAAS,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;aACvC;SACa,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,IAAY;QAC3B,OAAO;YACL,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,oBAAoB;YAC1B,kBAAkB,EAAE;gBAClB,SAAS,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;aACvC;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,IAAY;QAC7B,OAAO;YACL,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,oBAAoB;YAC1B,kBAAkB,EAAE;gBAClB,SAAS,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;aACvC;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,IAAY,EAAE,UAAmB,KAAK;QAC/C,OAAO;YACL,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,OAAO;YACb,KAAK,EAAE;gBACL,SAAS,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBACtC,OAAO;aACR;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,IAAY,EAAE,WAAmB,YAAY;QACtD,OAAO;YACL,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE;gBACJ,SAAS,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBACtC,QAAQ;aACT;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,IAAY;QACtB,OAAO;YACL,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,OAAO;YACb,KAAK,EAAE;gBACL,SAAS,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;aACvC;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,IAAY,EAAE,QAAgB,IAAI;QAC9C,OAAO;YACL,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,SAAS;YACf,OAAO,EAAE;gBACP,SAAS,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBACtC,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;aAC/B;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO;YACL,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,EAAE;SACZ,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,qBAAqB;QACnB,OAAO;YACL,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,mBAAmB;YACzB,iBAAiB,EAAE,EAAE;SACtB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,QAAgB;QAC/B,MAAM,MAAM,GAAkB,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,IAAI,WAAW,GAAa,EAAE,CAAC;QAC/B,IAAI,YAAY,GAAG,YAAY,CAAC;QAEhC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,qBAAqB;YACrB,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3B,IAAI,WAAW,EAAE,CAAC;oBAChB,iBAAiB;oBACjB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;oBACnE,WAAW,GAAG,EAAE,CAAC;oBACjB,WAAW,GAAG,KAAK,CAAC;gBACtB,CAAC;qBAAM,CAAC;oBACN,mBAAmB;oBACnB,WAAW,GAAG,IAAI,CAAC;oBACnB,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,YAAY,CAAC;gBACtD,CAAC;gBACD,SAAS;YACX,CAAC;YAED,IAAI,WAAW,EAAE,CAAC;gBAChB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvB,SAAS;YACX,CAAC;YAED,mBAAmB;YACnB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBACjB,SAAS;YACX,CAAC;YAED,WAAW;YACX,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACpD,CAAC;iBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACpD,CAAC;iBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACpD,CAAC;YACD,eAAe;iBACV,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC;gBACrC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;gBAC/C,qBAAqB;gBACrB,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC5B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;gBACrD,CAAC;qBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC9D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;gBACpD,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;YACD,iBAAiB;iBACZ,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;gBACjC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;gBAC3C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7C,CAAC;YACD,cAAc;iBACT,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/C,CAAC;YACD,mBAAmB;iBACd,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;gBACnC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;YACpC,CAAC;YACD,qBAAqB;iBAChB,CAAC;gBACJ,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QAED,6BAA6B;QAC7B,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;QACrE,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,UAAU,CAAI,KAAU,EAAE,IAAY;QAC5C,MAAM,MAAM,GAAU,EAAE,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;YAC5C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Notion Exporter
3
+ * High-level export operations for Blueprint documents to Notion
4
+ */
5
+ import type { NotionConfig, NotionExportResult, NotionExportOptions } from './types.js';
6
+ export declare class NotionExporter {
7
+ private client;
8
+ private parentPageId?;
9
+ private databaseId?;
10
+ constructor(config: NotionConfig);
11
+ /**
12
+ * Export Blueprint documents to Notion
13
+ */
14
+ export(documents: Array<{
15
+ name: string;
16
+ content: string;
17
+ category?: string;
18
+ }>, options?: NotionExportOptions): Promise<NotionExportResult>;
19
+ /**
20
+ * Preview what would be created (dry run)
21
+ */
22
+ preview(documents: Array<{
23
+ name: string;
24
+ content: string;
25
+ category?: string;
26
+ }>, options?: NotionExportOptions): Promise<NotionExportResult>;
27
+ /**
28
+ * Create a database for documents
29
+ */
30
+ private createDocumentsDatabase;
31
+ /**
32
+ * Create a page for a document
33
+ */
34
+ private createDocumentPage;
35
+ /**
36
+ * Detect category from document name and content
37
+ */
38
+ private detectCategory;
39
+ /**
40
+ * Format category for display
41
+ */
42
+ private formatCategory;
43
+ /**
44
+ * Extract description from content
45
+ */
46
+ private extractDescription;
47
+ }
48
+ /**
49
+ * Export documents to Notion (convenience function)
50
+ */
51
+ export declare function exportToNotion(config: NotionConfig, documents: Array<{
52
+ name: string;
53
+ content: string;
54
+ category?: string;
55
+ }>, options?: NotionExportOptions): Promise<NotionExportResult>;
56
+ //# sourceMappingURL=exporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exporter.d.ts","sourceRoot":"","sources":["../../../src/integrations/notion/exporter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EACV,YAAY,EAIZ,kBAAkB,EAClB,mBAAmB,EAEpB,MAAM,YAAY,CAAC;AAGpB,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,UAAU,CAAC,CAAS;gBAEhB,MAAM,EAAE,YAAY;IAMhC;;OAEG;IACG,MAAM,CACV,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,EACtE,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,kBAAkB,CAAC;IAqD9B;;OAEG;IACG,OAAO,CACX,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,EACtE,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,kBAAkB,CAAC;IAoD9B;;OAEG;YACW,uBAAuB;IAuDrC;;OAEG;YACW,kBAAkB;IA6DhC;;OAEG;IACH,OAAO,CAAC,cAAc;IAgBtB;;OAEG;IACH,OAAO,CAAC,cAAc;IAgBtB;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAgB3B;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EACtE,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,kBAAkB,CAAC,CAG7B"}