@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,13 @@
1
+ import type { SyncMappingImplementation } from '@vibesdotdev/sync/mapping';
2
+ declare class ProjectsNotionSyncMapping implements SyncMappingImplementation {
3
+ toCanonical(input: Parameters<SyncMappingImplementation['toCanonical']>[0]): {
4
+ canonicalKey: string;
5
+ data: Record<string, string>;
6
+ };
7
+ fromCanonical(input: Parameters<SyncMappingImplementation['fromCanonical']>[0]): {
8
+ data: Record<string, string>;
9
+ };
10
+ }
11
+ declare const _default: import("@vibesdotdev/kernel").RuntimeImplementationWrapper<typeof ProjectsNotionSyncMapping>;
12
+ export default _default;
13
+ //# sourceMappingURL=projects.notion.sync-mapping.impl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.notion.sync-mapping.impl.d.ts","sourceRoot":"","sources":["../../src/sync/projects.notion.sync-mapping.impl.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAM3E,cAAM,yBAA0B,YAAW,yBAAyB;IACnE,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,yBAAyB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;;;;IAS1E,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,yBAAyB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;;;CAW9E;;AAED,wBAIG"}
@@ -0,0 +1,26 @@
1
+ import { createRuntimeImplementation } from '@vibesdotdev/kernel';
2
+ import { clearDestinationContentWhenSourceOmitsIt, projectNotionRecord } from "./notion-record-projection.js";
3
+ class ProjectsNotionSyncMapping {
4
+ toCanonical(input) {
5
+ return {
6
+ canonicalKey: input.record.canonicalKey,
7
+ data: projectNotionRecord(input.record.data, input.record.canonicalKey, {
8
+ profile: 'Projects to Notion'
9
+ })
10
+ };
11
+ }
12
+ fromCanonical(input) {
13
+ const projected = projectNotionRecord(input.record.data, input.record.canonicalKey, {
14
+ profile: 'Projects to Notion'
15
+ });
16
+ return {
17
+ data: clearDestinationContentWhenSourceOmitsIt(projected, input.destinationRecord?.data)
18
+ };
19
+ }
20
+ }
21
+ export default createRuntimeImplementation({
22
+ kind: 'sync/mapping',
23
+ id: 'projects.notion@1',
24
+ implementation: ProjectsNotionSyncMapping
25
+ });
26
+ //# sourceMappingURL=projects.notion.sync-mapping.impl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.notion.sync-mapping.impl.js","sourceRoot":"","sources":["../../src/sync/projects.notion.sync-mapping.impl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAElE,OAAO,EACN,wCAAwC,EACxC,mBAAmB,EACnB,MAAM,+BAA+B,CAAC;AAEvC,MAAM,yBAAyB;IAC9B,WAAW,CAAC,KAA8D;QACzE,OAAO;YACN,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,YAAY;YACvC,IAAI,EAAE,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE;gBACvE,OAAO,EAAE,oBAAoB;aAC7B,CAAC;SACF,CAAC;IACH,CAAC;IAED,aAAa,CAAC,KAAgE;QAC7E,MAAM,SAAS,GAAG,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE;YACnF,OAAO,EAAE,oBAAoB;SAC7B,CAAC,CAAC;QACH,OAAO;YACN,IAAI,EAAE,wCAAwC,CAC7C,SAAS,EACT,KAAK,CAAC,iBAAiB,EAAE,IAAI,CAC7B;SACD,CAAC;IACH,CAAC;CACD;AAED,eAAe,2BAA2B,CAAC;IAC1C,IAAI,EAAE,cAAc;IACpB,EAAE,EAAE,mBAAmB;IACvB,cAAc,EAAE,yBAAyB;CACzC,CAAC,CAAC"}
@@ -0,0 +1,15 @@
1
+ export declare const WORK_NOTION_SYNC_MAPPING: {
2
+ readonly profile: "work.notion";
3
+ readonly version: "1";
4
+ };
5
+ declare const descriptor: {
6
+ id: string;
7
+ kind: "sync/mapping";
8
+ profile: "work.notion";
9
+ version: "1";
10
+ name: string;
11
+ description: string;
12
+ enabled: true;
13
+ };
14
+ export default descriptor;
15
+ //# sourceMappingURL=work.notion.sync-mapping.descriptor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work.notion.sync-mapping.descriptor.d.ts","sourceRoot":"","sources":["../../src/sync/work.notion.sync-mapping.descriptor.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,wBAAwB;;;CAGL,CAAC;AAEjC,QAAA,MAAM,UAAU;;;;;;;;CASiB,CAAC;AAElC,eAAe,UAAU,CAAC"}
@@ -0,0 +1,15 @@
1
+ export const WORK_NOTION_SYNC_MAPPING = {
2
+ profile: 'work.notion',
3
+ version: '1'
4
+ };
5
+ const descriptor = {
6
+ id: 'work.notion@1',
7
+ kind: 'sync/mapping',
8
+ profile: WORK_NOTION_SYNC_MAPPING.profile,
9
+ version: WORK_NOTION_SYNC_MAPPING.version,
10
+ name: 'Vibes Work to Notion projection',
11
+ description: 'Normalizes Work items and explicitly configured Notion rows to title, optional content, required status, and required priority semantics.',
12
+ enabled: true
13
+ };
14
+ export default descriptor;
15
+ //# sourceMappingURL=work.notion.sync-mapping.descriptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work.notion.sync-mapping.descriptor.js","sourceRoot":"","sources":["../../src/sync/work.notion.sync-mapping.descriptor.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACvC,OAAO,EAAE,aAAa;IACtB,OAAO,EAAE,GAAG;CACmB,CAAC;AAEjC,MAAM,UAAU,GAAG;IAClB,EAAE,EAAE,eAAe;IACnB,IAAI,EAAE,cAAuB;IAC7B,OAAO,EAAE,wBAAwB,CAAC,OAAO;IACzC,OAAO,EAAE,wBAAwB,CAAC,OAAO;IACzC,IAAI,EAAE,iCAAiC;IACvC,WAAW,EACV,2IAA2I;IAC5I,OAAO,EAAE,IAAI;CACmB,CAAC;AAElC,eAAe,UAAU,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { SyncMappingImplementation } from '@vibesdotdev/sync/mapping';
2
+ declare class WorkNotionSyncMapping implements SyncMappingImplementation {
3
+ toCanonical(input: Parameters<SyncMappingImplementation['toCanonical']>[0]): {
4
+ canonicalKey: string;
5
+ data: Record<string, string>;
6
+ };
7
+ fromCanonical(input: Parameters<SyncMappingImplementation['fromCanonical']>[0]): {
8
+ data: Record<string, string>;
9
+ };
10
+ }
11
+ declare const _default: import("@vibesdotdev/kernel").RuntimeImplementationWrapper<typeof WorkNotionSyncMapping>;
12
+ export default _default;
13
+ //# sourceMappingURL=work.notion.sync-mapping.impl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work.notion.sync-mapping.impl.d.ts","sourceRoot":"","sources":["../../src/sync/work.notion.sync-mapping.impl.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AA4C3E,cAAM,qBAAsB,YAAW,yBAAyB;IAC/D,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,yBAAyB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;;;;IAQ1E,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,yBAAyB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;;;CAU9E;;AAED,wBAIG"}
@@ -0,0 +1,63 @@
1
+ import { JsonObjectSchema } from "../schemas/json.js";
2
+ import { CapabilityError } from '@vibesdotdev/kernel';
3
+ import * as z from 'zod/v4';
4
+ import { contract } from "../schemas/operations.js";
5
+ import { createRuntimeImplementation } from '@vibesdotdev/kernel';
6
+ import { VIBES_PRODUCT_STATUS_VALUES, workItemStatusToProductStatus } from '@vibesdotdev/shared/schemas';
7
+ import { clearDestinationContentWhenSourceOmitsIt, projectNotionRecord } from "./notion-record-projection.js";
8
+ /** Statuses this mapping accepts: the canonical values plus the legacy 'review' spelling. */
9
+ const RECOGNIZED_WORK_STATUSES = new Set([...VIBES_PRODUCT_STATUS_VALUES, 'review']);
10
+ const WORK_PRIORITIES = new Set(['low', 'medium', 'high', 'urgent']);
11
+ function assertNotionWorkProperties(input) {
12
+ if (input.endpoint.descriptor.provider !== 'notion')
13
+ return;
14
+ for (const property of ['statusProperty', 'priorityProperty']) {
15
+ const value = input.endpoint.endpoint.options[property];
16
+ if (!z.string().trim().min(1).safeParse(value).success) {
17
+ throw new CapabilityError('Work to Notion mapping requires explicit Notion .', 'INVALID_INPUT', { reason: 'notion-sync-invalid' });
18
+ }
19
+ }
20
+ }
21
+ function workProjection(data, canonicalKey) {
22
+ const projected = projectNotionRecord(contract(JsonObjectSchema).parse(data), canonicalKey, {
23
+ profile: 'Work to Notion',
24
+ optionalFields: ['status', 'priority']
25
+ });
26
+ if (!projected.status) {
27
+ throw new CapabilityError("Work to Notion mapping requires non-empty canonical 'status'.", 'INVALID_INPUT', { reason: 'notion-sync-invalid' });
28
+ }
29
+ if (!projected.priority) {
30
+ throw new CapabilityError("Work to Notion mapping requires non-empty canonical 'priority'.", 'INVALID_INPUT', { reason: 'notion-sync-invalid' });
31
+ }
32
+ if (projected.status && !RECOGNIZED_WORK_STATUSES.has(projected.status)) {
33
+ throw new CapabilityError('Work to Notion mapping does not recognize status .', 'INVALID_INPUT', { reason: 'notion-sync-invalid' });
34
+ }
35
+ // Spelling normalization (review → in_review) delegates to the shared lifecycle map.
36
+ projected.status = workItemStatusToProductStatus(projected.status);
37
+ if (projected.priority && !WORK_PRIORITIES.has(projected.priority)) {
38
+ throw new CapabilityError('Work to Notion mapping does not recognize priority .', 'INVALID_INPUT', { reason: 'notion-sync-invalid' });
39
+ }
40
+ return projected;
41
+ }
42
+ class WorkNotionSyncMapping {
43
+ toCanonical(input) {
44
+ assertNotionWorkProperties(input);
45
+ return {
46
+ canonicalKey: input.record.canonicalKey,
47
+ data: workProjection(input.record.data, input.record.canonicalKey)
48
+ };
49
+ }
50
+ fromCanonical(input) {
51
+ assertNotionWorkProperties(input);
52
+ const projected = workProjection(input.record.data, input.record.canonicalKey);
53
+ return {
54
+ data: clearDestinationContentWhenSourceOmitsIt(projected, input.destinationRecord?.data)
55
+ };
56
+ }
57
+ }
58
+ export default createRuntimeImplementation({
59
+ kind: 'sync/mapping',
60
+ id: 'work.notion@1',
61
+ implementation: WorkNotionSyncMapping
62
+ });
63
+ //# sourceMappingURL=work.notion.sync-mapping.impl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work.notion.sync-mapping.impl.js","sourceRoot":"","sources":["../../src/sync/work.notion.sync-mapping.impl.ts"],"names":[],"mappings":"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"}