@vibesdotdev/integrations-notion 0.0.0-stage → 1.0.0-rc.1

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,557 @@
1
+ import { settle, settleNow } from '@vibesdotdev/kernel';
2
+ import { valueFreeFailure } from '@vibesdotdev/kernel';
3
+ import { CapabilityError } from '@vibesdotdev/kernel';
4
+ import * as z from 'zod/v4';
5
+ import { JsonObjectSchema, JsonValueSchema } from "../schemas/json.js";
6
+ import { contract } from "../schemas/operations.js";
7
+ import { NotionSyncOptionsSchema, RichTextSchema } from "../schemas/sync.js";
8
+ import { createRuntimeImplementation } from '@vibesdotdev/kernel/factory';
9
+ import { getVibesNotionClient } from "../client/helper.js";
10
+ const ENDPOINT_ID = 'sync.endpoint.notion.pages';
11
+ const MAX_COMPLETED_OPERATION_RECEIPTS = 1_024;
12
+ function rememberCompletedOperation(cache, key, value) {
13
+ cache.delete(key);
14
+ cache.set(key, value);
15
+ while (cache.size > MAX_COMPLETED_OPERATION_RECEIPTS) {
16
+ const oldestKey = cache.keys().next().value;
17
+ if (oldestKey === undefined)
18
+ return;
19
+ cache.delete(oldestKey);
20
+ }
21
+ }
22
+ const SEMANTIC_PROPERTY_MAPPINGS = [
23
+ {
24
+ dataKey: 'contentText',
25
+ optionKey: 'contentProperty',
26
+ defaultName: 'Content',
27
+ allowedTypes: ['rich_text'],
28
+ sourceKeys: ['contentText', 'description', 'content']
29
+ },
30
+ {
31
+ dataKey: 'contentType',
32
+ optionKey: 'contentTypeProperty',
33
+ allowedTypes: ['select', 'rich_text'],
34
+ sourceKeys: ['contentType']
35
+ },
36
+ {
37
+ dataKey: 'projectId',
38
+ optionKey: 'projectIdProperty',
39
+ allowedTypes: ['rich_text'],
40
+ sourceKeys: ['projectId']
41
+ },
42
+ {
43
+ dataKey: 'status',
44
+ optionKey: 'statusProperty',
45
+ allowedTypes: ['status', 'select'],
46
+ sourceKeys: ['status']
47
+ },
48
+ {
49
+ dataKey: 'priority',
50
+ optionKey: 'priorityProperty',
51
+ allowedTypes: ['select', 'rich_text'],
52
+ sourceKeys: ['priority']
53
+ }
54
+ ];
55
+ function asRecord(value) {
56
+ const parsed = JsonObjectSchema.safeParse(value);
57
+ return parsed.success ? parsed.data : null;
58
+ }
59
+ function richText(value) {
60
+ const parsed = contract(RichTextSchema).parse(value);
61
+ return parsed.map(part => part.plain_text ?? part.text?.content ?? '').join('');
62
+ }
63
+ function optionPropertyName(options, key, defaultName) {
64
+ const value = options[key];
65
+ if (value === undefined)
66
+ return { name: defaultName, explicit: false };
67
+ if (!z.string().trim().min(1).safeParse(value).success) {
68
+ throw new CapabilityError('Notion sync option must be a non-empty property name.', 'INVALID_INPUT', { reason: 'notion-sync-invalid' });
69
+ }
70
+ return { name: value.trim(), explicit: true };
71
+ }
72
+ function propertyText(page, name) {
73
+ const property = page.properties[name];
74
+ const value = asRecord(property?.value);
75
+ if (!value)
76
+ return '';
77
+ if (property.type === 'title')
78
+ return richText(value.title);
79
+ if (property.type === 'rich_text')
80
+ return richText(value.rich_text);
81
+ if (property.type === 'url')
82
+ return z.string().parse(value.url);
83
+ if (property.type === 'select') {
84
+ const selected = asRecord(value.select);
85
+ return contract(z.string().optional()).parse(selected?.name) ?? '';
86
+ }
87
+ if (property.type === 'status') {
88
+ const status = asRecord(value.status);
89
+ return contract(z.string().optional()).parse(status?.name) ?? '';
90
+ }
91
+ return '';
92
+ }
93
+ function canonicalKeyIdentity(page, configuredProperty) {
94
+ if (configuredProperty && !page.properties[configuredProperty]) {
95
+ throw new CapabilityError('Notion sync key property was not found.', 'INVALID_INPUT', { reason: 'notion-sync-invalid' });
96
+ }
97
+ const names = configuredProperty
98
+ ? [configuredProperty]
99
+ : ['External Key', 'Canonical Key', 'Vibes Tracking ID', 'Vibes Project ID'];
100
+ let observedPropertyName;
101
+ for (const name of names) {
102
+ const property = page.properties[name];
103
+ if (!property)
104
+ continue;
105
+ observedPropertyName ??= name;
106
+ if (property.type !== 'rich_text') {
107
+ throw new CapabilityError('Notion sync key property must be rich_text, received .', 'INVALID_INPUT', { reason: 'notion-sync-invalid' });
108
+ }
109
+ const value = propertyText(page, name).trim();
110
+ if (!value)
111
+ continue;
112
+ if (name === 'Vibes Tracking ID')
113
+ return { key: `work:${value}`, propertyName: name };
114
+ if (name === 'Vibes Project ID')
115
+ return { key: `project:${value}`, propertyName: name };
116
+ return { key: value, propertyName: name };
117
+ }
118
+ return { key: `notion:page:${page.id}`, propertyName: observedPropertyName };
119
+ }
120
+ function stableJson(value) {
121
+ if (Array.isArray(value))
122
+ return `[${value.map(stableJson).join(',')}]`;
123
+ const object = JsonObjectSchema.safeParse(value);
124
+ if (object.success)
125
+ return `{${Object.entries(object.data).sort(([a], [b]) => a.localeCompare(b)).map(([key, nested]) => `${JSON.stringify(key)}:${stableJson(nested)}`).join(',')}}`;
126
+ return JSON.stringify(value);
127
+ }
128
+ function stable(value) {
129
+ return stableJson(contract(JsonValueSchema).parse(JSON.parse(JSON.stringify(value))));
130
+ }
131
+ async function sha256(value) {
132
+ const digest = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(stable(value)));
133
+ return Array.from(new Uint8Array(digest), byte => byte.toString(16).padStart(2, '0')).join('');
134
+ }
135
+ function textFromRecord(record, keys) {
136
+ const data = asRecord(record.data);
137
+ for (const key of keys) {
138
+ const value = data?.[key];
139
+ const parsed = z.string().safeParse(value);
140
+ if (parsed.success)
141
+ return parsed.data;
142
+ }
143
+ return undefined;
144
+ }
145
+ function semanticProjection(page, options, keyPropertyName) {
146
+ const data = {};
147
+ const titleOption = optionPropertyName(options, 'titleProperty');
148
+ const titleProperty = titleOption.name
149
+ ? page.properties[titleOption.name]
150
+ : Object.values(page.properties).find((property) => property.type === 'title');
151
+ if (!titleProperty || titleProperty.type !== 'title') {
152
+ throw new CapabilityError('Notion semantic projection requires with type title.', 'INVALID_INPUT', { reason: 'notion-sync-invalid' });
153
+ }
154
+ const titleName = titleOption.name ??
155
+ Object.entries(page.properties).find(([, property]) => property === titleProperty)?.[0];
156
+ if (!titleName)
157
+ throw new CapabilityError('Notion semantic projection could not identify its title property.', 'INVALID_INPUT', { reason: 'notion-sync-invalid' });
158
+ if (titleName === keyPropertyName) {
159
+ throw new CapabilityError('Notion title property cannot also be the sync key property.', 'INVALID_INPUT', { reason: 'notion-sync-invalid' });
160
+ }
161
+ data.title = propertyText(page, titleName);
162
+ const usedNames = new Set([titleName, keyPropertyName].filter((name) => Boolean(name)));
163
+ for (const mapping of SEMANTIC_PROPERTY_MAPPINGS) {
164
+ const configured = optionPropertyName(options, mapping.optionKey, mapping.defaultName);
165
+ if (!configured.name)
166
+ continue;
167
+ const property = page.properties[configured.name];
168
+ if (!property) {
169
+ if (configured.explicit) {
170
+ throw new CapabilityError('Notion property configured by was not found.', 'INVALID_INPUT', { reason: 'notion-sync-invalid' });
171
+ }
172
+ continue;
173
+ }
174
+ if (usedNames.has(configured.name)) {
175
+ throw new CapabilityError('Notion property is assigned to more than one sync field.', 'INVALID_INPUT', { reason: 'notion-sync-invalid' });
176
+ }
177
+ if (!mapping.allowedTypes.includes(contract(z.string()).parse(property.type))) {
178
+ throw new CapabilityError('Notion property for must be , received .', 'INVALID_INPUT', { reason: 'notion-sync-invalid' });
179
+ }
180
+ usedNames.add(configured.name);
181
+ data[mapping.dataKey] = propertyText(page, configured.name);
182
+ }
183
+ return data;
184
+ }
185
+ function resolveTargetMapping(dataSource, options) {
186
+ const titleOption = optionPropertyName(options, 'titleProperty');
187
+ const titleProperty = titleOption.name
188
+ ? dataSource.properties.find((property) => property.name === titleOption.name)
189
+ : dataSource.properties.find((property) => property.type === 'title');
190
+ if (!titleProperty || titleProperty.type !== 'title') {
191
+ throw new CapabilityError('Notion target requires with type title.', 'INVALID_INPUT', { reason: 'notion-sync-invalid' });
192
+ }
193
+ const keyOption = optionPropertyName(options, 'canonicalKeyProperty', 'External Key');
194
+ const keyName = keyOption.name ?? 'External Key';
195
+ const keyProperty = dataSource.properties.find((property) => property.name === keyName);
196
+ if (!keyProperty || keyProperty.type !== 'rich_text') {
197
+ throw new CapabilityError('Notion target requires rich-text property.', 'INVALID_INPUT', { reason: 'notion-sync-invalid' });
198
+ }
199
+ const usedNames = new Set([titleProperty.name, keyName]);
200
+ if (usedNames.size !== 2) {
201
+ throw new CapabilityError('Notion title property cannot also be the sync key property.', 'INVALID_INPUT', { reason: 'notion-sync-invalid' });
202
+ }
203
+ const semantic = [];
204
+ for (const mapping of SEMANTIC_PROPERTY_MAPPINGS) {
205
+ const configured = optionPropertyName(options, mapping.optionKey, mapping.defaultName);
206
+ if (!configured.name)
207
+ continue;
208
+ const property = dataSource.properties.find((candidate) => candidate.name === configured.name);
209
+ if (!property) {
210
+ if (configured.explicit) {
211
+ throw new CapabilityError('Notion property configured by was not found.', 'INVALID_INPUT', { reason: 'notion-sync-invalid' });
212
+ }
213
+ continue;
214
+ }
215
+ if (usedNames.has(property.name)) {
216
+ throw new CapabilityError('Notion property is assigned to more than one sync field.', 'INVALID_INPUT', { reason: 'notion-sync-invalid' });
217
+ }
218
+ if (!mapping.allowedTypes.includes(property.type)) {
219
+ throw new CapabilityError('Notion property for must be , received .', 'INVALID_INPUT', { reason: 'notion-sync-invalid' });
220
+ }
221
+ usedNames.add(property.name);
222
+ semantic.push({
223
+ name: property.name,
224
+ type: property.type,
225
+ dataKey: mapping.dataKey,
226
+ sourceKeys: mapping.sourceKeys
227
+ });
228
+ }
229
+ return { titleName: titleProperty.name, keyName, semantic };
230
+ }
231
+ function notionWriteValue(type, value) {
232
+ const text = value.length === 0
233
+ ? [{ text: { content: '' } }]
234
+ : Array.from({ length: Math.ceil(value.length / 2000) }, (_, index) => ({
235
+ text: { content: value.slice(index * 2000, (index + 1) * 2000) }
236
+ }));
237
+ if (type === 'title')
238
+ return { title: text };
239
+ if (type === 'rich_text')
240
+ return { rich_text: text };
241
+ if (type === 'select')
242
+ return { select: value ? { name: value } : null };
243
+ if (type === 'status')
244
+ return { status: value ? { name: value } : null };
245
+ throw new CapabilityError('Notion sync cannot write unsupported property type .', 'INVALID_INPUT', { reason: 'notion-sync-invalid' });
246
+ }
247
+ function providerKeyValue(propertyName, canonicalKey) {
248
+ if (propertyName === 'Vibes Tracking ID') {
249
+ if (!canonicalKey.startsWith('work:')) {
250
+ throw new CapabilityError("Canonical key must start with 'work:' for Vibes Tracking ID.", 'INVALID_INPUT', { reason: 'notion-sync-invalid' });
251
+ }
252
+ return canonicalKey.slice('work:'.length);
253
+ }
254
+ if (propertyName === 'Vibes Project ID') {
255
+ if (!canonicalKey.startsWith('project:')) {
256
+ throw new CapabilityError("Canonical key must start with 'project:' for Vibes Project ID.", 'INVALID_INPUT', { reason: 'notion-sync-invalid' });
257
+ }
258
+ return canonicalKey.slice('project:'.length);
259
+ }
260
+ return canonicalKey;
261
+ }
262
+ function projectionScopeKey(actorScope, bindingId, containerId) {
263
+ const values = [
264
+ actorScope.actor.kind,
265
+ actorScope.actor.id,
266
+ actorScope.scope.kind,
267
+ actorScope.scope.id,
268
+ bindingId,
269
+ containerId
270
+ ];
271
+ return values.map((value) => `${value.length}:${value}`).join('');
272
+ }
273
+ function pageRevision(page) {
274
+ return page.updatedAt || page.createdAt || page.id;
275
+ }
276
+ function operationSignature(operation) {
277
+ return stable({
278
+ type: operation.type,
279
+ canonicalKey: operation.canonicalKey,
280
+ from: operation.from,
281
+ to: operation.to,
282
+ record: operation.record,
283
+ destinationRecord: operation.destinationRecord
284
+ });
285
+ }
286
+ function operationCacheKey(input, operationId) {
287
+ return `${projectionScopeKey(input.actorScope, input.bindingId, input.containerId)}${operationId.length}:${operationId}`;
288
+ }
289
+ function desiredStateMatches(page, operation, targetMapping, options) {
290
+ if (operation.type === 'archive' || operation.type === 'delete')
291
+ return page.inTrash;
292
+ if (page.inTrash)
293
+ return false;
294
+ const current = semanticProjection(page, options, targetMapping.keyName);
295
+ const expected = {
296
+ title: textFromRecord(operation.record, ['title', 'name', 'summary']) ?? operation.canonicalKey
297
+ };
298
+ for (const semantic of targetMapping.semantic) {
299
+ const value = textFromRecord(operation.record, semantic.sourceKeys);
300
+ if (value !== undefined)
301
+ expected[semantic.dataKey] = value;
302
+ }
303
+ return Object.entries(expected).every(([key, value]) => current[key] === value);
304
+ }
305
+ async function findFreshPageByKey(notion, dataSourceId, keyName, canonicalKey) {
306
+ const result = await notion.dataSources.query({
307
+ dataSourceId,
308
+ filter: {
309
+ property: keyName,
310
+ rich_text: { equals: providerKeyValue(keyName, canonicalKey) }
311
+ },
312
+ pageSize: 2
313
+ });
314
+ if (result.hasMore || result.pages.length > 1) {
315
+ throw new CapabilityError('Notion data source contains multiple pages for canonical key .', 'INVALID_INPUT', { reason: 'notion-sync-duplicate-key' });
316
+ }
317
+ return result.pages[0] ?? null;
318
+ }
319
+ export class NotionSyncEndpoint {
320
+ resolveClient;
321
+ pageIdsByScope = new Map();
322
+ completedOperations = new Map();
323
+ constructor(resolveClient) {
324
+ this.resolveClient = resolveClient;
325
+ }
326
+ async pull(input) {
327
+ const options = contract(NotionSyncOptionsSchema).parse(input.options);
328
+ const notion = await this.resolveClient();
329
+ const result = await notion.pull({
330
+ dataSourceId: input.containerId,
331
+ pageSize: Math.max(1, Math.min(input.limit, 100)),
332
+ startCursor: input.cursor
333
+ });
334
+ const configuredKey = optionPropertyName(options, 'canonicalKeyProperty').name;
335
+ const records = [];
336
+ const batchKeys = new Set();
337
+ const scopeKey = projectionScopeKey(input.actorScope, input.bindingId, input.containerId);
338
+ const observedPageIds = input.cursor
339
+ ? new Map(this.pageIdsByScope.get(scopeKey) ?? [])
340
+ : new Map();
341
+ for (const page of result.pages) {
342
+ const identity = canonicalKeyIdentity(page, configuredKey);
343
+ const key = identity.key;
344
+ if (batchKeys.has(key)) {
345
+ throw new CapabilityError('Notion data source returned a duplicate canonical key.', 'INVALID_INPUT', { reason: 'notion-sync-duplicate-key' });
346
+ }
347
+ const previouslyObserved = observedPageIds.get(key);
348
+ if (previouslyObserved && previouslyObserved.id !== page.id) {
349
+ throw new CapabilityError('Notion data source returned canonical key for both and during one scan.', 'INVALID_INPUT', { reason: 'notion-sync-duplicate-key' });
350
+ }
351
+ batchKeys.add(key);
352
+ observedPageIds.set(key, { id: page.id, revision: pageRevision(page) });
353
+ const data = semanticProjection(page, options, identity.propertyName);
354
+ records.push({
355
+ id: page.id,
356
+ canonicalKey: key,
357
+ revision: page.updatedAt || page.createdAt || page.id,
358
+ contentHash: await sha256(data),
359
+ updatedAt: page.updatedAt || page.createdAt || new Date(0).toISOString(),
360
+ deleted: page.inTrash,
361
+ data,
362
+ metadata: { endpointId: ENDPOINT_ID, provider: 'notion', url: page.url }
363
+ });
364
+ }
365
+ this.pageIdsByScope.set(scopeKey, observedPageIds);
366
+ return { records, cursor: result.nextCursor, hasMore: result.hasMore };
367
+ }
368
+ async apply(input) {
369
+ const options = contract(NotionSyncOptionsSchema).parse(input.options);
370
+ const notion = await this.resolveClient();
371
+ const dataSource = await notion.dataSources.get(input.containerId);
372
+ if (!dataSource) {
373
+ return input.operations.map((operation) => ({
374
+ canonicalKey: operation.canonicalKey,
375
+ success: false,
376
+ outcome: 'rejected', error: 'Notion data source was not found.'
377
+ }));
378
+ }
379
+ const resolvedMapping = settleNow(() => resolveTargetMapping(dataSource, options));
380
+ if (!resolvedMapping.ok) {
381
+ const cause = new CapabilityError('Notion target mapping was rejected.', 'INVALID_INPUT', { reason: 'notion-sync-mapping-invalid', cause: valueFreeFailure(resolvedMapping.cause) });
382
+ return input.operations.map(operation => ({ canonicalKey: operation.canonicalKey, success: false, outcome: 'rejected', error: cause.message, cause }));
383
+ }
384
+ const targetMapping = resolvedMapping.value;
385
+ const results = [];
386
+ const scopeKey = projectionScopeKey(input.actorScope, input.bindingId, input.containerId);
387
+ let pages = this.pageIdsByScope.get(scopeKey);
388
+ for (const operation of input.operations) {
389
+ let mutationAttempted = false;
390
+ let cacheKey;
391
+ let signature;
392
+ const attempted = await settle(async () => {
393
+ signature = operationSignature(operation);
394
+ cacheKey = operation.operationId
395
+ ? operationCacheKey(input, operation.operationId)
396
+ : undefined;
397
+ const completed = cacheKey ? this.completedOperations.get(cacheKey) : undefined;
398
+ if (completed) {
399
+ if (completed.signature !== signature) {
400
+ throw new CapabilityError('Notion operation id was reused for different mutation content.', 'CONFLICT', { reason: 'notion-sync-operation-reused' });
401
+ }
402
+ results.push(completed.result);
403
+ return;
404
+ }
405
+ const observed = pages?.get(operation.canonicalKey);
406
+ if (observed &&
407
+ operation.destinationRecord &&
408
+ observed.id !== operation.destinationRecord.id) {
409
+ throw new CapabilityError('Notion destination identity changed for : staged , observed .', 'INVALID_INPUT', { reason: 'notion-sync-identity-changed' });
410
+ }
411
+ const expectedPageId = operation.destinationRecord?.id ?? observed?.id;
412
+ const expectedRevision = operation.destinationRecord?.revision ?? observed?.revision;
413
+ const page = expectedPageId
414
+ ? await notion.pages.get(expectedPageId)
415
+ : await findFreshPageByKey(notion, input.containerId, targetMapping.keyName, operation.canonicalKey);
416
+ if (expectedPageId && !page) {
417
+ if (operation.type === 'delete') {
418
+ results.push({
419
+ canonicalKey: operation.canonicalKey,
420
+ success: false,
421
+ outcome: 'unknown',
422
+ error: 'Notion page is absent; deletion cannot be attributed to this operation.'
423
+ });
424
+ return;
425
+ }
426
+ throw new CapabilityError('Notion page disappeared after projection planning; refusing .', 'INVALID_INPUT', { reason: 'notion-sync-invalid' });
427
+ }
428
+ if (page) {
429
+ if (page.parentDataSourceId !== input.containerId) {
430
+ throw new CapabilityError('Notion page belongs to data source , not .', 'INVALID_INPUT', { reason: 'notion-sync-identity-changed' });
431
+ }
432
+ const freshIdentity = canonicalKeyIdentity(page, targetMapping.keyName);
433
+ if (freshIdentity.key !== operation.canonicalKey) {
434
+ throw new CapabilityError('Notion page now belongs to canonical key , not .', 'INVALID_INPUT', { reason: 'notion-sync-identity-changed' });
435
+ }
436
+ if (!expectedPageId &&
437
+ (operation.type === 'archive' || operation.type === 'delete')) {
438
+ throw new CapabilityError('Cannot Notion page without an observed provider page.', 'INVALID_INPUT', { reason: 'notion-sync-unobserved-write' });
439
+ }
440
+ if (desiredStateMatches(page, operation, targetMapping, options)) {
441
+ const result = {
442
+ canonicalKey: operation.canonicalKey,
443
+ success: true,
444
+ outcome: 'applied',
445
+ recordId: page.id,
446
+ revision: pageRevision(page)
447
+ };
448
+ if (cacheKey) {
449
+ rememberCompletedOperation(this.completedOperations, cacheKey, { signature, result });
450
+ }
451
+ results.push(result);
452
+ return;
453
+ }
454
+ if (expectedRevision && pageRevision(page) !== expectedRevision) {
455
+ throw new CapabilityError('Notion page revision changed from to ; refusing stale .', 'INVALID_INPUT', { reason: 'notion-sync-revision-changed' });
456
+ }
457
+ if (!expectedPageId) {
458
+ throw new CapabilityError('Notion canonical key appeared after projection planning with different content; refusing create.', 'INVALID_INPUT', { reason: 'notion-sync-invalid' });
459
+ }
460
+ }
461
+ if (operation.type === 'delete' || operation.type === 'archive') {
462
+ if (!page) {
463
+ throw new CapabilityError('Cannot Notion page without an observed provider page.', 'INVALID_INPUT', { reason: 'notion-sync-unobserved-write' });
464
+ }
465
+ mutationAttempted = true;
466
+ const updated = await notion.pages.update(page.id, { inTrash: true });
467
+ const writablePages = pages ?? new Map();
468
+ writablePages.set(operation.canonicalKey, {
469
+ id: updated.id,
470
+ revision: pageRevision(updated)
471
+ });
472
+ this.pageIdsByScope.set(scopeKey, writablePages);
473
+ pages = writablePages;
474
+ const result = {
475
+ canonicalKey: operation.canonicalKey,
476
+ success: true,
477
+ outcome: 'applied',
478
+ recordId: updated.id,
479
+ revision: pageRevision(updated)
480
+ };
481
+ if (cacheKey) {
482
+ rememberCompletedOperation(this.completedOperations, cacheKey, { signature, result });
483
+ }
484
+ results.push(result);
485
+ return;
486
+ }
487
+ const title = textFromRecord(operation.record, ['title', 'name', 'summary']) ?? operation.canonicalKey;
488
+ const propertyEntries = [
489
+ [targetMapping.titleName, notionWriteValue('title', title)],
490
+ [
491
+ targetMapping.keyName,
492
+ notionWriteValue('rich_text', providerKeyValue(targetMapping.keyName, operation.canonicalKey))
493
+ ]
494
+ ];
495
+ for (const semantic of targetMapping.semantic) {
496
+ const value = textFromRecord(operation.record, semantic.sourceKeys);
497
+ if (value === undefined)
498
+ continue;
499
+ propertyEntries.push([semantic.name, notionWriteValue(semantic.type, value)]);
500
+ }
501
+ const properties = Object.fromEntries(propertyEntries);
502
+ mutationAttempted = true;
503
+ const updated = page
504
+ ? await notion.pages.update(page.id, { properties, inTrash: false })
505
+ : await notion.pages.create({ parentDataSourceId: input.containerId, properties });
506
+ const writablePageIds = pages ?? new Map();
507
+ writablePageIds.set(operation.canonicalKey, {
508
+ id: updated.id,
509
+ revision: pageRevision(updated)
510
+ });
511
+ this.pageIdsByScope.set(scopeKey, writablePageIds);
512
+ pages = writablePageIds;
513
+ const result = {
514
+ canonicalKey: operation.canonicalKey,
515
+ success: true,
516
+ outcome: 'applied',
517
+ recordId: updated.id,
518
+ revision: pageRevision(updated)
519
+ };
520
+ if (cacheKey) {
521
+ rememberCompletedOperation(this.completedOperations, cacheKey, { signature, result });
522
+ }
523
+ results.push(result);
524
+ });
525
+ if (!attempted.ok) {
526
+ const cause = attempted.cause;
527
+ const failure = cause instanceof CapabilityError ? cause : new CapabilityError('Notion mutation did not complete.', 'INTERNAL', { reason: mutationAttempted ? 'notion-sync-mutation-unknown' : 'notion-sync-mutation-rejected', cause: valueFreeFailure(cause) });
528
+ const result = {
529
+ canonicalKey: operation.canonicalKey,
530
+ success: false,
531
+ outcome: mutationAttempted ? 'unknown' : 'rejected',
532
+ error: failure.message,
533
+ cause: failure
534
+ };
535
+ if (mutationAttempted && cacheKey && signature) {
536
+ // Do not collapse an accepted-before-response-loss mutation into a
537
+ // rejection. Reconciliation may later prove convergence, but this
538
+ // operation receipt remains unknown until the control plane adjudicates it.
539
+ rememberCompletedOperation(this.completedOperations, cacheKey, { signature, result });
540
+ }
541
+ results.push(result);
542
+ }
543
+ }
544
+ return results;
545
+ }
546
+ }
547
+ class RuntimeNotionSyncEndpoint extends NotionSyncEndpoint {
548
+ constructor(_descriptor, context) {
549
+ super(() => getVibesNotionClient(context.runtime));
550
+ }
551
+ }
552
+ export default createRuntimeImplementation({
553
+ kind: 'sync/endpoint',
554
+ id: ENDPOINT_ID,
555
+ implementation: RuntimeNotionSyncEndpoint
556
+ });
557
+ //# sourceMappingURL=notion.sync-endpoint.impl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notion.sync-endpoint.impl.js","sourceRoot":"","sources":["../../src/sync/notion.sync-endpoint.impl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAmC,MAAM,oBAAoB,CAAC;AACxG,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,cAAc,EAAoF,MAAM,oBAAoB,CAAC;AAE/J,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAQ1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAW3D,MAAM,WAAW,GAAG,4BAA4B,CAAC;AACjD,MAAM,gCAAgC,GAAG,KAAK,CAAC;AA+B/C,SAAS,0BAA0B,CAClC,KAA4C,EAC5C,GAAW,EACX,KAA+B;IAE/B,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAClB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACtB,OAAO,KAAK,CAAC,IAAI,GAAG,gCAAgC,EAAE,CAAC;QACtD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAC5C,IAAI,SAAS,KAAK,SAAS;YAAE,OAAO;QACpC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACzB,CAAC;AACF,CAAC;AAkBD,MAAM,0BAA0B,GAA8B;IAC7D;QACC,OAAO,EAAE,aAAa;QACtB,SAAS,EAAE,iBAAiB;QAC5B,WAAW,EAAE,SAAS;QACtB,YAAY,EAAE,CAAC,WAAW,CAAC;QAC3B,UAAU,EAAE,CAAC,aAAa,EAAE,aAAa,EAAE,SAAS,CAAC;KACrD;IACD;QACC,OAAO,EAAE,aAAa;QACtB,SAAS,EAAE,qBAAqB;QAChC,YAAY,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC;QACrC,UAAU,EAAE,CAAC,aAAa,CAAC;KAC3B;IACD;QACC,OAAO,EAAE,WAAW;QACpB,SAAS,EAAE,mBAAmB;QAC9B,YAAY,EAAE,CAAC,WAAW,CAAC;QAC3B,UAAU,EAAE,CAAC,WAAW,CAAC;KACzB;IACD;QACC,OAAO,EAAE,QAAQ;QACjB,SAAS,EAAE,gBAAgB;QAC3B,YAAY,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;QAClC,UAAU,EAAE,CAAC,QAAQ,CAAC;KACtB;IACD;QACC,OAAO,EAAE,UAAU;QACnB,SAAS,EAAE,kBAAkB;QAC7B,YAAY,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC;QACrC,UAAU,EAAE,CAAC,UAAU,CAAC;KACxB;CACD,CAAC;AAEF,SAAS,QAAQ,CAAC,KAAc;IAC/B,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACjD,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5C,CAAC;AACD,SAAS,QAAQ,CAAC,KAAc;IAC/B,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrD,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,kBAAkB,CAC1B,OAA0B,EAC1B,GAA4B,EAC5B,WAAoB;IAEpB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACvE,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;QACxD,MAAM,IAAI,eAAe,CAAC,wDAAwD,EAAE,eAAe,EAAE,EAAC,MAAM,EAAC,qBAAqB,EAAC,CAAC,CAAC;IACtI,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC/C,CAAC;AAED,SAAS,YAAY,CAAC,IAAgB,EAAE,IAAY;IACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC5D,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACpE,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK;QAAE,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChE,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACxC,OAAO,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IACpE,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACtC,OAAO,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IAClE,CAAC;IACD,OAAO,EAAE,CAAC;AACX,CAAC;AAED,SAAS,oBAAoB,CAC5B,IAAgB,EAChB,kBAA2B;IAE3B,IAAI,kBAAkB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,eAAe,CAAC,0CAA0C,EAAE,eAAe,EAAE,EAAC,MAAM,EAAC,qBAAqB,EAAC,CAAC,CAAC;IACxH,CAAC;IACD,MAAM,KAAK,GAAG,kBAAkB;QAC/B,CAAC,CAAC,CAAC,kBAAkB,CAAC;QACtB,CAAC,CAAC,CAAC,cAAc,EAAE,eAAe,EAAE,mBAAmB,EAAE,kBAAkB,CAAC,CAAC;IAC9E,IAAI,oBAAwC,CAAC;IAC7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ;YAAE,SAAS;QACxB,oBAAoB,KAAK,IAAI,CAAC;QAC9B,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACnC,MAAM,IAAI,eAAe,CAAC,yDAAyD,EAAE,eAAe,EAAE,EAAC,MAAM,EAAC,qBAAqB,EAAC,CAAC,CAAC;QACvI,CAAC;QACD,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,IAAI,IAAI,KAAK,mBAAmB;YAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,KAAK,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;QACtF,IAAI,IAAI,KAAK,kBAAkB;YAAE,OAAO,EAAE,GAAG,EAAE,WAAW,KAAK,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;QACxF,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAC3C,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,eAAe,IAAI,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,oBAAoB,EAAE,CAAC;AAC9E,CAAC;AAED,SAAS,UAAU,CAAC,KAAgB;IACnC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IACxE,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACjD,IAAI,MAAM,CAAC,OAAO;QAAE,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAC,MAAM,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IACpL,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AACD,SAAS,MAAM,CAAC,KAAqB;IACpC,OAAO,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACvF,CAAC;AACD,KAAK,UAAU,MAAM,CAAC,KAAqB;IAC1C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7F,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC/F,CAAC;AAED,SAAS,cAAc,CAAC,MAA4B,EAAE,IAAc;IACnE,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACnC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;QAC1B,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,MAAM,CAAC,OAAO;YAAE,OAAO,MAAM,CAAC,IAAI,CAAC;IACxC,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,SAAS,kBAAkB,CAC1B,IAAgB,EAChB,OAA0B,EAC1B,eAAwB;IAExB,MAAM,IAAI,GAAmB,EAAE,CAAC;IAChC,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IACjE,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI;QACrC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC;QACnC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;IAChF,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAEtD,MAAM,IAAI,eAAe,CAAC,uDAAuD,EAAE,eAAe,EAAE,EAAC,MAAM,EAAC,qBAAqB,EAAC,CAAC,CAAC;IACrI,CAAC;IACD,MAAM,SAAS,GACd,WAAW,CAAC,IAAI;QAChB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,QAAQ,KAAK,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACzF,IAAI,CAAC,SAAS;QACb,MAAM,IAAI,eAAe,CAAC,mEAAmE,EAAE,eAAe,EAAE,EAAC,MAAM,EAAC,qBAAqB,EAAC,CAAC,CAAC;IACjJ,IAAI,SAAS,KAAK,eAAe,EAAE,CAAC;QACnC,MAAM,IAAI,eAAe,CAAC,8DAA8D,EAAE,eAAe,EAAE,EAAC,MAAM,EAAC,qBAAqB,EAAC,CAAC,CAAC;IAC5I,CAAC;IACD,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAE3C,MAAM,SAAS,GAAG,IAAI,GAAG,CACxB,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAC5E,CAAC;IACF,KAAK,MAAM,OAAO,IAAI,0BAA0B,EAAE,CAAC;QAClD,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;QACvF,IAAI,CAAC,UAAU,CAAC,IAAI;YAAE,SAAS;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;gBACzB,MAAM,IAAI,eAAe,CAAC,gDAAgD,EAAE,eAAe,EAAE,EAAC,MAAM,EAAC,qBAAqB,EAAC,CAAC,CAAC;YAC9H,CAAC;YACD,SAAS;QACV,CAAC;QACD,IAAI,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,eAAe,CAAC,2DAA2D,EAAE,eAAe,EAAE,EAAC,MAAM,EAAC,qBAAqB,EAAC,CAAC,CAAC;QACzI,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAC/E,MAAM,IAAI,eAAe,CAAC,4CAA4C,EAAE,eAAe,EAAE,EAAC,MAAM,EAAC,qBAAqB,EAAC,CAAC,CAAC;QAC1H,CAAC;QACD,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAeD,SAAS,oBAAoB,CAC5B,UAA4B,EAC5B,OAA0B;IAE1B,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IACjE,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI;QACrC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,CAAC;QAC9E,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;IACvE,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAEtD,MAAM,IAAI,eAAe,CAAC,0CAA0C,EAAE,eAAe,EAAE,EAAC,MAAM,EAAC,qBAAqB,EAAC,CAAC,CAAC;IACxH,CAAC;IACD,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,EAAE,sBAAsB,EAAE,cAAc,CAAC,CAAC;IACtF,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,IAAI,cAAc,CAAC;IACjD,MAAM,WAAW,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;IACxF,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QACtD,MAAM,IAAI,eAAe,CAAC,6CAA6C,EAAE,eAAe,EAAE,EAAC,MAAM,EAAC,qBAAqB,EAAC,CAAC,CAAC;IAC3H,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACzD,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,eAAe,CAAC,8DAA8D,EAAE,eAAe,EAAE,EAAC,MAAM,EAAC,qBAAqB,EAAC,CAAC,CAAC;IAC5I,CAAC;IACD,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAC7C,KAAK,MAAM,OAAO,IAAI,0BAA0B,EAAE,CAAC;QAClD,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;QACvF,IAAI,CAAC,UAAU,CAAC,IAAI;YAAE,SAAS;QAC/B,MAAM,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/F,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;gBACzB,MAAM,IAAI,eAAe,CAAC,gDAAgD,EAAE,eAAe,EAAE,EAAC,MAAM,EAAC,qBAAqB,EAAC,CAAC,CAAC;YAC9H,CAAC;YACD,SAAS;QACV,CAAC;QACD,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,eAAe,CAAC,2DAA2D,EAAE,eAAe,EAAE,EAAC,MAAM,EAAC,qBAAqB,EAAC,CAAC,CAAC;QACzI,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,eAAe,CAAC,4CAA4C,EAAE,eAAe,EAAE,EAAC,MAAM,EAAC,qBAAqB,EAAC,CAAC,CAAC;QAC1H,CAAC;QACD,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7B,QAAQ,CAAC,IAAI,CAAC;YACb,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,UAAU,EAAE,OAAO,CAAC,UAAU;SAC9B,CAAC,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAC7D,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAwB,EAAE,KAAa;IAChE,MAAM,IAAI,GACT,KAAK,CAAC,MAAM,KAAK,CAAC;QACjB,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC;QAC7B,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YACtE,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE;SAChE,CAAC,CAAC,CAAC;IACP,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC7C,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACrD,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACzE,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACzE,MAAM,IAAI,eAAe,CAAC,sDAAsD,EAAE,eAAe,EAAE,EAAC,MAAM,EAAC,qBAAqB,EAAC,CAAC,CAAC;AACpI,CAAC;AAED,SAAS,gBAAgB,CAAC,YAAoB,EAAE,YAAoB;IACnE,IAAI,YAAY,KAAK,mBAAmB,EAAE,CAAC;QAC1C,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,eAAe,CAAC,+DAA+D,EAAE,eAAe,EAAE,EAAC,MAAM,EAAC,qBAAqB,EAAC,CAAC,CAAC;QAC7I,CAAC;QACD,OAAO,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,YAAY,KAAK,kBAAkB,EAAE,CAAC;QACzC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,eAAe,CAAC,iEAAiE,EAAE,eAAe,EAAE,EAAC,MAAM,EAAC,qBAAqB,EAAC,CAAC,CAAC;QAC/I,CAAC;QACD,OAAO,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,YAAY,CAAC;AACrB,CAAC;AAED,SAAS,kBAAkB,CAC1B,UAA+C,EAC/C,SAAiB,EACjB,WAAmB;IAEnB,MAAM,MAAM,GAAG;QACd,UAAU,CAAC,KAAK,CAAC,IAAI;QACrB,UAAU,CAAC,KAAK,CAAC,EAAE;QACnB,UAAU,CAAC,KAAK,CAAC,IAAI;QACrB,UAAU,CAAC,KAAK,CAAC,EAAE;QACnB,SAAS;QACT,WAAW;KACX,CAAC;IACF,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,YAAY,CAAC,IAAgB;IACrC,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,EAAE,CAAC;AACpD,CAAC;AAED,SAAS,kBAAkB,CAAC,SAAuD;IAClF,OAAO,MAAM,CAAC;QACb,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,YAAY,EAAE,SAAS,CAAC,YAAY;QACpC,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,EAAE,EAAE,SAAS,CAAC,EAAE;QAChB,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,iBAAiB,EAAE,SAAS,CAAC,iBAAiB;KAC9C,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,KAA6B,EAAE,WAAmB;IAC5E,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC,MAAM,IAAI,WAAW,EAAE,CAAC;AAC1H,CAAC;AAED,SAAS,mBAAmB,CAC3B,IAAgB,EAChB,SAAuD,EACvD,aAA4B,EAC5B,OAA0B;IAE1B,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC;IACrF,IAAI,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC/B,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IACzE,MAAM,QAAQ,GAAmB;QAChC,KAAK,EAAE,cAAc,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,IAAI,SAAS,CAAC,YAAY;KACtE,CAAC;IAC3B,KAAK,MAAM,QAAQ,IAAI,aAAa,CAAC,QAAQ,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,cAAc,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;QACpE,IAAI,KAAK,KAAK,SAAS;YAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;IAC7D,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC;AACjF,CAAC;AAED,KAAK,UAAU,kBAAkB,CAChC,MAA4B,EAC5B,YAAoB,EACpB,OAAe,EACf,YAAoB;IAEpB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC;QAC7C,YAAY;QACZ,MAAM,EAAE;YACP,QAAQ,EAAE,OAAO;YACjB,SAAS,EAAE,EAAE,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE;SAC9D;QACD,QAAQ,EAAE,CAAC;KACX,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,eAAe,CAAC,iEAAiE,EAAE,eAAe,EAAE,EAAC,MAAM,EAAC,2BAA2B,EAAC,CAAC,CAAC;IACrJ,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAChC,CAAC;AAED,MAAM,OAAO,kBAAkB;IAID;IAHrB,cAAc,GAAG,IAAI,GAAG,EAA2C,CAAC;IACpE,mBAAmB,GAAG,IAAI,GAAG,EAAoC,CAAC;IAE1E,YAA6B,aAAsC;QAAtC,kBAAa,GAAb,aAAa,CAAyB;IAAG,CAAC;IAEvE,KAAK,CAAC,IAAI,CAAC,KAA4B;QACvC,MAAM,OAAO,GAAG,QAAQ,CAAC,uBAAuB,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC;YAChC,YAAY,EAAE,KAAK,CAAC,WAAW;YAC/B,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACjD,WAAW,EAAE,KAAK,CAAC,MAAM;SACzB,CAAC,CAAC;QACH,MAAM,aAAa,GAAG,kBAAkB,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC,IAAI,CAAC;QAC/E,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;QACpC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;QAC1F,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM;YACnC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YAClD,CAAC,CAAC,IAAI,GAAG,EAA8B,CAAC;QACzC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YAC3D,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;YACzB,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,MAAM,IAAI,eAAe,CAAC,wDAAwD,EAAE,eAAe,EAAE,EAAC,MAAM,EAAC,2BAA2B,EAAC,CAAC,CAAC;YAC5I,CAAC;YACD,MAAM,kBAAkB,GAAG,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACpD,IAAI,kBAAkB,IAAI,kBAAkB,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC;gBAC7D,MAAM,IAAI,eAAe,CAAC,6EAA6E,EAAE,eAAe,EAAE,EAAC,MAAM,EAAC,2BAA2B,EAAC,CAAC,CAAC;YACjK,CAAC;YACD,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnB,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACxE,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;YACtE,OAAO,CAAC,IAAI,CAAC;gBACZ,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,YAAY,EAAE,GAAG;gBACjB,QAAQ,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,EAAE;gBACrD,WAAW,EAAE,MAAM,MAAM,CAAC,IAAI,CAAC;gBAC/B,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;gBACxE,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,IAAI;gBACJ,QAAQ,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;aACxE,CAAC,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QACnD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,KAA6B;QACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,uBAAuB,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC1C,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACnE,IAAI,CAAC,UAAU,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;gBAC3C,YAAY,EAAE,SAAS,CAAC,YAAY;gBACpC,OAAO,EAAE,KAAK;gBACd,OAAO,EAAC,UAAU,EAAE,KAAK,EAAC,mCAAmC;aAC7D,CAAC,CAAC,CAAC;QACL,CAAC;QACD,MAAM,eAAe,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,UAAU,EAAC,OAAO,CAAC,CAAC,CAAC;QAClF,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC,qCAAqC,EAAC,eAAe,EAAC,EAAC,MAAM,EAAC,6BAA6B,EAAC,KAAK,EAAC,gBAAgB,CAAC,eAAe,CAAC,KAAK,CAAC,EAAC,CAAC,CAAC;YAC9K,OAAO,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAC,YAAY,EAAC,SAAS,CAAC,YAAY,EAAC,OAAO,EAAC,KAAK,EAAC,OAAO,EAAC,UAAU,EAAC,KAAK,EAAC,KAAK,CAAC,OAAO,EAAC,KAAK,EAAC,CAAC,CAAC,CAAC;QAC9I,CAAC;QACD,MAAM,aAAa,GAAG,eAAe,CAAC,KAAK,CAAC;QAE5C,MAAM,OAAO,GAAsD,EAAE,CAAC;QACtE,MAAM,QAAQ,GAAG,kBAAkB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;QAC1F,IAAI,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9C,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YAC1C,IAAI,iBAAiB,GAAG,KAAK,CAAC;YAC9B,IAAI,QAA4B,CAAC;YACjC,IAAI,SAA6B,CAAC;YAClC,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,KAAK,IAAI,EAAE;gBACzC,SAAS,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;gBAC1C,QAAQ,GAAG,SAAS,CAAC,WAAW;oBAC/B,CAAC,CAAC,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC,WAAW,CAAC;oBACjD,CAAC,CAAC,SAAS,CAAC;gBACb,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAChF,IAAI,SAAS,EAAE,CAAC;oBACf,IAAI,SAAS,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;wBACvC,MAAM,IAAI,eAAe,CAAC,gEAAgE,EAAE,UAAU,EAAE,EAAC,MAAM,EAAC,8BAA8B,EAAC,CAAC,CAAC;oBAClJ,CAAC;oBACD,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;oBAC/B,OAAO;gBACR,CAAC;gBACD,MAAM,QAAQ,GAAG,KAAK,EAAE,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;gBACpD,IACC,QAAQ;oBACR,SAAS,CAAC,iBAAiB;oBAC3B,QAAQ,CAAC,EAAE,KAAK,SAAS,CAAC,iBAAiB,CAAC,EAAE,EAC7C,CAAC;oBACF,MAAM,IAAI,eAAe,CAAC,+DAA+D,EAAE,eAAe,EAAE,EAAC,MAAM,EAAC,8BAA8B,EAAC,CAAC,CAAC;gBACtJ,CAAC;gBACD,MAAM,cAAc,GAAG,SAAS,CAAC,iBAAiB,EAAE,EAAE,IAAI,QAAQ,EAAE,EAAE,CAAC;gBACvE,MAAM,gBAAgB,GAAG,SAAS,CAAC,iBAAiB,EAAE,QAAQ,IAAI,QAAQ,EAAE,QAAQ,CAAC;gBACrF,MAAM,IAAI,GAAG,cAAc;oBAC1B,CAAC,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC;oBACxC,CAAC,CAAC,MAAM,kBAAkB,CACxB,MAAM,EACN,KAAK,CAAC,WAAW,EACjB,aAAa,CAAC,OAAO,EACrB,SAAS,CAAC,YAAY,CACtB,CAAC;gBACJ,IAAI,cAAc,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC7B,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;wBACjC,OAAO,CAAC,IAAI,CAAC;4BACZ,YAAY,EAAE,SAAS,CAAC,YAAY;4BACpC,OAAO,EAAE,KAAK;4BACd,OAAO,EAAE,SAAS;4BAClB,KAAK,EAAE,yEAAyE;yBAChF,CAAC,CAAC;wBACH,OAAO;oBACR,CAAC;oBACD,MAAM,IAAI,eAAe,CAAC,gEAAgE,EAAE,eAAe,EAAE,EAAC,MAAM,EAAC,qBAAqB,EAAC,CAAC,CAAC;gBAC9I,CAAC;gBACD,IAAI,IAAI,EAAE,CAAC;oBACV,IAAI,IAAI,CAAC,kBAAkB,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC;wBACnD,MAAM,IAAI,eAAe,CAAC,6CAA6C,EAAE,eAAe,EAAE,EAAC,MAAM,EAAC,8BAA8B,EAAC,CAAC,CAAC;oBACpI,CAAC;oBACD,MAAM,aAAa,GAAG,oBAAoB,CAAC,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;oBACxE,IAAI,aAAa,CAAC,GAAG,KAAK,SAAS,CAAC,YAAY,EAAE,CAAC;wBAClD,MAAM,IAAI,eAAe,CAAC,mDAAmD,EAAE,eAAe,EAAE,EAAC,MAAM,EAAC,8BAA8B,EAAC,CAAC,CAAC;oBAC1I,CAAC;oBACD,IACC,CAAC,cAAc;wBACf,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC,EAC5D,CAAC;wBACF,MAAM,IAAI,eAAe,CAAC,yDAAyD,EAAE,eAAe,EAAE,EAAC,MAAM,EAAC,8BAA8B,EAAC,CAAC,CAAC;oBAChJ,CAAC;oBACD,IAAI,mBAAmB,CAAC,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,CAAC;wBAClE,MAAM,MAAM,GAAoB;4BAC/B,YAAY,EAAE,SAAS,CAAC,YAAY;4BACpC,OAAO,EAAE,IAAI;4BACb,OAAO,EAAE,SAAS;4BAClB,QAAQ,EAAE,IAAI,CAAC,EAAE;4BACjB,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC;yBAC5B,CAAC;wBACF,IAAI,QAAQ,EAAE,CAAC;4BACd,0BAA0B,CAAC,IAAI,CAAC,mBAAmB,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;wBACvF,CAAC;wBACD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBACrB,OAAO;oBACR,CAAC;oBACD,IAAI,gBAAgB,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,gBAAgB,EAAE,CAAC;wBACjE,MAAM,IAAI,eAAe,CAAC,2DAA2D,EAAE,eAAe,EAAE,EAAC,MAAM,EAAC,8BAA8B,EAAC,CAAC,CAAC;oBAClJ,CAAC;oBACD,IAAI,CAAC,cAAc,EAAE,CAAC;wBACrB,MAAM,IAAI,eAAe,CAAC,mGAAmG,EAAE,eAAe,EAAE,EAAC,MAAM,EAAC,qBAAqB,EAAC,CAAC,CAAC;oBACjL,CAAC;gBACF,CAAC;gBACD,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBACjE,IAAI,CAAC,IAAI,EAAE,CAAC;wBACX,MAAM,IAAI,eAAe,CAAC,yDAAyD,EAAE,eAAe,EAAE,EAAC,MAAM,EAAC,8BAA8B,EAAC,CAAC,CAAC;oBAChJ,CAAC;oBACD,iBAAiB,GAAG,IAAI,CAAC;oBACzB,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;oBACtE,MAAM,aAAa,GAAG,KAAK,IAAI,IAAI,GAAG,EAA8B,CAAC;oBACrE,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE;wBACzC,EAAE,EAAE,OAAO,CAAC,EAAE;wBACd,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC;qBAC/B,CAAC,CAAC;oBACH,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;oBACjD,KAAK,GAAG,aAAa,CAAC;oBACtB,MAAM,MAAM,GAAoB;wBAC/B,YAAY,EAAE,SAAS,CAAC,YAAY;wBACpC,OAAO,EAAE,IAAI;wBACb,OAAO,EAAE,SAAS;wBAClB,QAAQ,EAAE,OAAO,CAAC,EAAE;wBACpB,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC;qBAC/B,CAAC;oBACF,IAAI,QAAQ,EAAE,CAAC;wBACd,0BAA0B,CAAC,IAAI,CAAC,mBAAmB,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;oBACvF,CAAC;oBACD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACrB,OAAO;gBACR,CAAC;gBACD,MAAM,KAAK,GACV,cAAc,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,IAAI,SAAS,CAAC,YAAY,CAAC;gBAC1F,MAAM,eAAe,GAAgC;oBACpD,CAAC,aAAa,CAAC,SAAS,EAAE,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;oBAC3D;wBACC,aAAa,CAAC,OAAO;wBACrB,gBAAgB,CACf,WAAW,EACX,gBAAgB,CAAC,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,YAAY,CAAC,CAC/D;qBACD;iBACD,CAAC;gBACF,KAAK,MAAM,QAAQ,IAAI,aAAa,CAAC,QAAQ,EAAE,CAAC;oBAC/C,MAAM,KAAK,GAAG,cAAc,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;oBACpE,IAAI,KAAK,KAAK,SAAS;wBAAE,SAAS;oBAClC,eAAe,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC/E,CAAC;gBACD,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;gBACvD,iBAAiB,GAAG,IAAI,CAAC;gBACzB,MAAM,OAAO,GAAG,IAAI;oBACnB,CAAC,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;oBACpE,CAAC,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,kBAAkB,EAAE,KAAK,CAAC,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;gBACpF,MAAM,eAAe,GAAG,KAAK,IAAI,IAAI,GAAG,EAA8B,CAAC;gBACvE,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE;oBAC3C,EAAE,EAAE,OAAO,CAAC,EAAE;oBACd,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC;iBAC/B,CAAC,CAAC;gBACH,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;gBACnD,KAAK,GAAG,eAAe,CAAC;gBAExB,MAAM,MAAM,GAA+C;oBAC1D,YAAY,EAAE,SAAS,CAAC,YAAY;oBACpC,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,SAAS;oBAClB,QAAQ,EAAE,OAAO,CAAC,EAAE;oBACpB,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC;iBAC/B,CAAC;gBACF,IAAI,QAAQ,EAAE,CAAC;oBACd,0BAA0B,CAAC,IAAI,CAAC,mBAAmB,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;gBACvF,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtB,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;gBACnB,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;gBAC9B,MAAM,OAAO,GAAG,KAAK,YAAY,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC,mCAAmC,EAAE,UAAU,EAAE,EAAC,MAAM,EAAC,iBAAiB,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,+BAA+B,EAAC,KAAK,EAAC,gBAAgB,CAAC,KAAK,CAAC,EAAC,CAAC,CAAC;gBAC7P,MAAM,MAAM,GAA+C;oBAC1D,YAAY,EAAE,SAAS,CAAC,YAAY;oBACpC,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;oBACnD,KAAK,EAAE,OAAO,CAAC,OAAO;oBAC1B,KAAK,EAAE,OAAO;iBACV,CAAC;gBACF,IAAI,iBAAiB,IAAI,QAAQ,IAAI,SAAS,EAAE,CAAC;oBAChD,mEAAmE;oBACnE,kEAAkE;oBAClE,4EAA4E;oBAC5E,0BAA0B,CAAC,IAAI,CAAC,mBAAmB,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;gBACvF,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtB,CAAC;QACF,CAAC;QACD,OAAO,OAAO,CAAC;IAChB,CAAC;CACD;AAED,MAAM,yBAA0B,SAAQ,kBAAkB;IACzD,YAAY,WAA8B,EAAE,OAAkC;QAC7E,KAAK,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IACpD,CAAC;CACD;AAED,eAAe,2BAA2B,CAAC;IAC1C,IAAI,EAAE,eAAe;IACrB,EAAE,EAAE,WAAW;IACf,cAAc,EAAE,yBAAyB;CACzC,CAAC,CAAC"}
@@ -0,0 +1,15 @@
1
+ export declare const PROJECTS_NOTION_SYNC_MAPPING: {
2
+ readonly profile: "projects.notion";
3
+ readonly version: "1";
4
+ };
5
+ declare const descriptor: {
6
+ id: string;
7
+ kind: "sync/mapping";
8
+ profile: "projects.notion";
9
+ version: "1";
10
+ name: string;
11
+ description: string;
12
+ enabled: true;
13
+ };
14
+ export default descriptor;
15
+ //# sourceMappingURL=projects.notion.sync-mapping.descriptor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.notion.sync-mapping.descriptor.d.ts","sourceRoot":"","sources":["../../src/sync/projects.notion.sync-mapping.descriptor.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,4BAA4B;;;CAGT,CAAC;AAEjC,QAAA,MAAM,UAAU;;;;;;;;CASiB,CAAC;AAElC,eAAe,UAAU,CAAC"}
@@ -0,0 +1,15 @@
1
+ export const PROJECTS_NOTION_SYNC_MAPPING = {
2
+ profile: 'projects.notion',
3
+ version: '1'
4
+ };
5
+ const descriptor = {
6
+ id: 'projects.notion@1',
7
+ kind: 'sync/mapping',
8
+ profile: PROJECTS_NOTION_SYNC_MAPPING.profile,
9
+ version: PROJECTS_NOTION_SYNC_MAPPING.version,
10
+ name: 'Vibes Projects to Notion projection',
11
+ description: 'Normalizes Project records and Notion rows to title and optional content semantics.',
12
+ enabled: true
13
+ };
14
+ export default descriptor;
15
+ //# sourceMappingURL=projects.notion.sync-mapping.descriptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.notion.sync-mapping.descriptor.js","sourceRoot":"","sources":["../../src/sync/projects.notion.sync-mapping.descriptor.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC3C,OAAO,EAAE,iBAAiB;IAC1B,OAAO,EAAE,GAAG;CACmB,CAAC;AAEjC,MAAM,UAAU,GAAG;IAClB,EAAE,EAAE,mBAAmB;IACvB,IAAI,EAAE,cAAuB;IAC7B,OAAO,EAAE,4BAA4B,CAAC,OAAO;IAC7C,OAAO,EAAE,4BAA4B,CAAC,OAAO;IAC7C,IAAI,EAAE,qCAAqC;IAC3C,WAAW,EACV,qFAAqF;IACtF,OAAO,EAAE,IAAI;CACmB,CAAC;AAElC,eAAe,UAAU,CAAC"}