@xemahq/biomes-platform-imap 0.1.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,103 @@
1
+ export const DEFAULT_ATTACHMENT_SIZE_LIMIT = 5 * 1024 * 1024;
2
+ const MIN_ATTACHMENT_SIZE_LIMIT = 1024;
3
+ const MAX_ATTACHMENT_SIZE_LIMIT = 16 * 1024 * 1024;
4
+ export function clampAttachmentSizeLimit(value) {
5
+ if (typeof value !== 'number' || !Number.isFinite(value)) {
6
+ return DEFAULT_ATTACHMENT_SIZE_LIMIT;
7
+ }
8
+ return Math.max(MIN_ATTACHMENT_SIZE_LIMIT, Math.min(MAX_ATTACHMENT_SIZE_LIMIT, Math.floor(value)));
9
+ }
10
+ export function flattenAttachmentParts(node, parentId = '') {
11
+ const out = [];
12
+ const partId = node.part ?? parentId;
13
+ const disposition = node.disposition?.toLowerCase();
14
+ const filename = node.dispositionParameters?.filename ?? node.parameters?.name;
15
+ if (disposition === 'attachment' &&
16
+ filename &&
17
+ typeof node.size === 'number' &&
18
+ partId) {
19
+ out.push({
20
+ filename,
21
+ contentType: `${node.type ?? 'application'}/${node.subtype ?? 'octet-stream'}`,
22
+ size: node.size,
23
+ partId,
24
+ });
25
+ }
26
+ if (Array.isArray(node.childNodes)) {
27
+ for (const child of node.childNodes) {
28
+ out.push(...flattenAttachmentParts(child, partId));
29
+ }
30
+ }
31
+ return out;
32
+ }
33
+ function splitHeadersBody(raw) {
34
+ const match = raw.match(/\r?\n\r?\n/);
35
+ if (match?.index === undefined) {
36
+ return null;
37
+ }
38
+ return {
39
+ headers: raw.slice(0, match.index),
40
+ body: raw.slice(match.index + match[0].length),
41
+ };
42
+ }
43
+ export function extractBodies(raw) {
44
+ const out = {};
45
+ const boundaryMatch = raw.match(/boundary="?([^"\r\n;]+)/i);
46
+ if (!boundaryMatch?.[1]) {
47
+ const split = splitHeadersBody(raw);
48
+ if (split) {
49
+ out.text = split.body;
50
+ }
51
+ return out;
52
+ }
53
+ const boundary = boundaryMatch[1];
54
+ const parts = raw.split(new RegExp(`--${boundary.replace(/[/\\^$*+?.()|[\]{}]/g, '\\$&')}(?:--)?`, 'g'));
55
+ const filenames = [];
56
+ for (const part of parts) {
57
+ const split = splitHeadersBody(part);
58
+ if (!split) {
59
+ continue;
60
+ }
61
+ const { headers, body } = split;
62
+ const contentTypeMatch = headers.match(/content-type:\s*([^\r\n;]+)/i);
63
+ const contentType = contentTypeMatch?.[1]?.toLowerCase().trim();
64
+ const dispositionMatch = headers.match(/content-disposition:\s*([^\r\n;]+)/i);
65
+ const filenameMatch = headers.match(/filename="?([^"\r\n;]+)/i);
66
+ if (dispositionMatch?.[1]?.toLowerCase().includes('attachment') && filenameMatch?.[1]) {
67
+ filenames.push(filenameMatch[1]);
68
+ continue;
69
+ }
70
+ if (contentType === 'text/plain' && !out.text) {
71
+ out.text = body.trim();
72
+ }
73
+ else if (contentType === 'text/html' && !out.html) {
74
+ out.html = body.trim();
75
+ }
76
+ }
77
+ if (filenames.length > 0) {
78
+ out.attachmentFilenames = filenames;
79
+ }
80
+ return out;
81
+ }
82
+ export function extractReferences(raw) {
83
+ const blankIdx = raw.search(/\r?\n\r?\n/);
84
+ const head = blankIdx >= 0 ? raw.slice(0, blankIdx) : raw;
85
+ const match = head.match(/^references:\s*((?:.|\r?\n[ \t])+)/im);
86
+ if (!match?.[1]) {
87
+ return undefined;
88
+ }
89
+ const refs = match[1]
90
+ .replace(/\r?\n[ \t]+/g, ' ')
91
+ .split(/\s+/)
92
+ .filter((r) => r.length > 0);
93
+ return refs.length > 0 ? refs : undefined;
94
+ }
95
+ export function parseSource(raw) {
96
+ const body = extractBodies(raw);
97
+ const references = extractReferences(raw);
98
+ return {
99
+ ...body,
100
+ ...(references ? { references } : {}),
101
+ };
102
+ }
103
+ //# sourceMappingURL=imap-message-parts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imap-message-parts.js","sourceRoot":"","sources":["../../src/connector-adapters/imap-message-parts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { type ConnectorAdapterModule } from '@xemahq/biome-sdk/adapter';
2
+ import { type ConnectorDescriptor, type ProviderDescriptor } from '@xemahq/kernel-contracts/connector';
3
+ export declare const MAIL_FETCH_CAPABILITY_REF: import("@xemahq/kernel-contracts/capability").CapabilityRef;
4
+ export declare const MAIL_FETCH_BY_UID_CAPABILITY_REF: import("@xemahq/kernel-contracts/capability").CapabilityRef;
5
+ export declare const MAIL_SEARCH_CAPABILITY_REF: import("@xemahq/kernel-contracts/capability").CapabilityRef;
6
+ export declare const MAIL_MARK_CAPABILITY_REF: import("@xemahq/kernel-contracts/capability").CapabilityRef;
7
+ export declare const imapFetchAction: import("@xemahq/biome-sdk/adapter").OutboundActionHandler;
8
+ export declare const imapFetchByUidAction: import("@xemahq/biome-sdk/adapter").OutboundActionHandler;
9
+ export declare const imapSearchAction: import("@xemahq/biome-sdk/adapter").OutboundActionHandler;
10
+ export declare const imapMarkAction: import("@xemahq/biome-sdk/adapter").OutboundActionHandler;
11
+ export declare const imapProvider: ConnectorAdapterModule;
12
+ declare const connectorAdapters: readonly ConnectorAdapterModule[];
13
+ export default connectorAdapters;
14
+ export declare const providerDescriptor: ProviderDescriptor;
15
+ export declare const connectorDescriptors: readonly ConnectorDescriptor[];
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/connector-adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAQL,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EAExB,MAAM,oCAAoC,CAAC;AA2C5C,eAAO,MAAM,yBAAyB,6DAGrC,CAAC;AACF,eAAO,MAAM,gCAAgC,6DAG5C,CAAC;AACF,eAAO,MAAM,0BAA0B,6DAGtC,CAAC;AACF,eAAO,MAAM,wBAAwB,6DAGpC,CAAC;AAEF,eAAO,MAAM,eAAe,2DAAoC,CAAC;AACjE,eAAO,MAAM,oBAAoB,2DAAyC,CAAC;AAC3E,eAAO,MAAM,gBAAgB,2DAAqC,CAAC;AACnE,eAAO,MAAM,cAAc,2DAAmC,CAAC;AAiE/D,eAAO,MAAM,YAAY,EAAE,sBAazB,CAAC;AAEH,QAAA,MAAM,iBAAiB,EAAE,SAAS,sBAAsB,EAAmB,CAAC;AAC5E,eAAe,iBAAiB,CAAC;AAIjC,eAAO,MAAM,kBAAkB,EAAE,kBAWhC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,SAAS,mBAAmB,EAqC9D,CAAC"}
@@ -0,0 +1,137 @@
1
+ import { defineConnectorAdapter, } from '@xemahq/biome-sdk/adapter';
2
+ import { buildConnectorCapabilityRef } from '@xemahq/kernel-contracts/capability';
3
+ import { ConnectorAdapterKind, CredentialFieldTransform, CredentialFieldType, CredentialKind, ConnectorOnboardingKind, ProviderAppAuthKind, ProviderOrigin, } from '@xemahq/kernel-contracts/connector';
4
+ import { createImapClient } from './imap-client.factory.js';
5
+ import { IMAP_FETCH_ACTION, IMAP_FETCH_BY_UID_ACTION, IMAP_MARK_ACTION, IMAP_SEARCH_ACTION, makeFetchAction, makeFetchByUidAction, makeMarkAction, makeSearchAction, } from './imap-fetch.js';
6
+ const CONNECTOR_KEY = 'IMAP_GENERIC';
7
+ const PROVIDER_SLUG = 'imap-generic';
8
+ const MAIL_ADAPTER_KIND = 'mail';
9
+ export const MAIL_FETCH_CAPABILITY_REF = buildConnectorCapabilityRef(MAIL_ADAPTER_KIND, IMAP_FETCH_ACTION);
10
+ export const MAIL_FETCH_BY_UID_CAPABILITY_REF = buildConnectorCapabilityRef(MAIL_ADAPTER_KIND, IMAP_FETCH_BY_UID_ACTION);
11
+ export const MAIL_SEARCH_CAPABILITY_REF = buildConnectorCapabilityRef(MAIL_ADAPTER_KIND, IMAP_SEARCH_ACTION);
12
+ export const MAIL_MARK_CAPABILITY_REF = buildConnectorCapabilityRef(MAIL_ADAPTER_KIND, IMAP_MARK_ACTION);
13
+ export const imapFetchAction = makeFetchAction(createImapClient);
14
+ export const imapFetchByUidAction = makeFetchByUidAction(createImapClient);
15
+ export const imapSearchAction = makeSearchAction(createImapClient);
16
+ export const imapMarkAction = makeMarkAction(createImapClient);
17
+ const onboarding = {
18
+ provider: PROVIDER_SLUG,
19
+ displayName: 'IMAP (generic)',
20
+ description: 'Fetch mail from any IMAP server. Each connection carries its own host/port/username/password wallet — no shared app credential.',
21
+ iconName: 'Mail',
22
+ kind: ConnectorOnboardingKind.CREDENTIALS,
23
+ supportedProjectBindingAdapterKinds: [],
24
+ fields: [
25
+ {
26
+ key: 'host',
27
+ label: 'IMAP host',
28
+ type: CredentialFieldType.TEXT,
29
+ required: true,
30
+ isSecret: false,
31
+ placeholder: 'imap.example.com',
32
+ transform: CredentialFieldTransform.TRIM,
33
+ },
34
+ {
35
+ key: 'port',
36
+ label: 'Port',
37
+ type: CredentialFieldType.TEXT,
38
+ required: true,
39
+ isSecret: false,
40
+ placeholder: '993',
41
+ transform: CredentialFieldTransform.TRIM,
42
+ },
43
+ {
44
+ key: 'username',
45
+ label: 'Username',
46
+ type: CredentialFieldType.TEXT,
47
+ required: true,
48
+ isSecret: false,
49
+ transform: CredentialFieldTransform.TRIM,
50
+ },
51
+ {
52
+ key: 'password',
53
+ label: 'Password',
54
+ type: CredentialFieldType.PASSWORD,
55
+ required: true,
56
+ isSecret: true,
57
+ transform: CredentialFieldTransform.TRIM,
58
+ },
59
+ {
60
+ key: 'tlsMode',
61
+ label: 'TLS mode',
62
+ type: CredentialFieldType.TEXT,
63
+ required: false,
64
+ isSecret: false,
65
+ placeholder: 'auto | tls | starttls | plain',
66
+ hint: 'Leave as auto to pick TLS by port (993 → implicit TLS).',
67
+ transform: CredentialFieldTransform.TRIM,
68
+ },
69
+ ],
70
+ hint: 'Enter the mailbox IMAP settings. Xema fetches mail on your behalf using this wallet.',
71
+ };
72
+ export const imapProvider = defineConnectorAdapter({
73
+ adapterKind: MAIL_ADAPTER_KIND,
74
+ provider: PROVIDER_SLUG,
75
+ displayName: 'IMAP (generic)',
76
+ credentialKind: CredentialKind.ImapAuth,
77
+ resources: {},
78
+ actions: {
79
+ [IMAP_FETCH_ACTION]: imapFetchAction,
80
+ [IMAP_FETCH_BY_UID_ACTION]: imapFetchByUidAction,
81
+ [IMAP_SEARCH_ACTION]: imapSearchAction,
82
+ [IMAP_MARK_ACTION]: imapMarkAction,
83
+ },
84
+ onboarding,
85
+ });
86
+ const connectorAdapters = [imapProvider];
87
+ export default connectorAdapters;
88
+ export const providerDescriptor = {
89
+ providerKey: PROVIDER_SLUG,
90
+ displayName: 'IMAP (generic)',
91
+ description: 'Generic IMAP fetching authority. appAuthKind None — every connection carries its own mailbox wallet.',
92
+ iconName: 'Mail',
93
+ category: 'Email',
94
+ appAuthKind: ProviderAppAuthKind.None,
95
+ origin: ProviderOrigin.Biome,
96
+ allowOrgOverride: false,
97
+ appCredentialSchema: [],
98
+ };
99
+ export const connectorDescriptors = [
100
+ {
101
+ connectorKey: CONNECTOR_KEY,
102
+ displayName: 'IMAP (generic)',
103
+ description: 'Inbound mail fetch from a generic IMAP server.',
104
+ iconName: 'Mail',
105
+ providerKey: PROVIDER_SLUG,
106
+ scopes: [],
107
+ connectionCredentialKind: CredentialKind.ImapAuth,
108
+ adapterKind: MAIL_ADAPTER_KIND,
109
+ operations: [
110
+ {
111
+ capabilityRef: MAIL_FETCH_CAPABILITY_REF,
112
+ adapterKind: ConnectorAdapterKind.NativeProvider,
113
+ scopes: [],
114
+ requiresConnection: true,
115
+ },
116
+ {
117
+ capabilityRef: MAIL_FETCH_BY_UID_CAPABILITY_REF,
118
+ adapterKind: ConnectorAdapterKind.NativeProvider,
119
+ scopes: [],
120
+ requiresConnection: true,
121
+ },
122
+ {
123
+ capabilityRef: MAIL_SEARCH_CAPABILITY_REF,
124
+ adapterKind: ConnectorAdapterKind.NativeProvider,
125
+ scopes: [],
126
+ requiresConnection: true,
127
+ },
128
+ {
129
+ capabilityRef: MAIL_MARK_CAPABILITY_REF,
130
+ adapterKind: ConnectorAdapterKind.NativeProvider,
131
+ scopes: [],
132
+ requiresConnection: true,
133
+ },
134
+ ],
135
+ },
136
+ ];
137
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/connector-adapters/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "@xemahq/biomes-platform-imap",
3
+ "version": "0.1.0",
4
+ "license": "LicenseRef-Xema-BSL-1.1",
5
+ "type": "module",
6
+ "publishConfig": {
7
+ "registry": "https://registry.npmjs.org/",
8
+ "access": "public"
9
+ },
10
+ "main": "dist/connector-adapters/index.js",
11
+ "files": [
12
+ "dist",
13
+ "xema-biome.json",
14
+ "contributions"
15
+ ],
16
+ "exports": {
17
+ "./connector-adapters": {
18
+ "types": "./dist/connector-adapters/index.d.ts",
19
+ "default": "./dist/connector-adapters/index.js"
20
+ },
21
+ "./package.json": "./package.json"
22
+ },
23
+ "dependencies": {
24
+ "@xemahq/biome-sdk": "^3.0.0",
25
+ "@xemahq/kernel-contracts": "^5.1.0",
26
+ "imapflow": "^1.0.180"
27
+ },
28
+ "devDependencies": {
29
+ "@types/node": "25.2.3",
30
+ "typescript": "5.9.3"
31
+ },
32
+ "scripts": {
33
+ "build": "tsc -p tsconfig.json",
34
+ "typecheck": "tsc --noEmit",
35
+ "test": "node --test ./tests/**/*.test.mjs"
36
+ }
37
+ }
@@ -0,0 +1,121 @@
1
+ {
2
+ "name": "@xemahq/biomes-platform-imap",
3
+ "version": "0.1.0",
4
+ "xema": {
5
+ "id": "connector-imap",
6
+ "displayName": "IMAP Connector",
7
+ "display": {
8
+ "icon": "mail",
9
+ "category": "connect",
10
+ "summary": "IMAP connector — fetch, search, and flag inbound mail from a generic IMAP mailbox into Xema via the connector gateway."
11
+ },
12
+ "description": "First-party connector biome that ships vendor-neutral inbound IMAP fetch as a contributed ConnectorAdapterModule. Fetch-only over IMAP polling (no inbound webhook): it contributes three actions — `fetch` (fetch-since-marker with UIDVALIDITY-reset detection), `search`, and `mark` — projected as native-provider capabilities `connector:mail.fetch@1` / `connector:mail.search@1` / `connector:mail.mark@1`, dispatched THROUGH the connector-gateway native-action executor (the P2 seam). Owns the `imapflow` SDK (quarantined to `connector-adapters/**`). The durable IMAP cursor STORE stays the platform `imap-markers` capability the caller owns; connections authenticate with their own curated `imap_auth` wallet.",
13
+ "scope": "platform",
14
+ "target": "server",
15
+ "bundleSource": {
16
+ "kind": "npm",
17
+ "name": "@xemahq/biomes-platform-imap",
18
+ "version": "0.1.0"
19
+ },
20
+ "trustTier": "first-party",
21
+ "connectorRequirements": [
22
+ {
23
+ "adapterKind": "mail",
24
+ "purpose": "Inbound mail fetch / search / flag over a generic IMAP mailbox",
25
+ "capabilities": [
26
+ "mail.fetch",
27
+ "mail.search",
28
+ "mail.mark"
29
+ ]
30
+ }
31
+ ],
32
+ "components": [
33
+ {
34
+ "key": "connector-adapter",
35
+ "kind": "adapter",
36
+ "artifact": {
37
+ "kind": "host-module",
38
+ "path": "dist/connector-adapters/index.js"
39
+ },
40
+ "entrypoint": {
41
+ "kind": "module-export",
42
+ "module": "dist/connector-adapters/index.js",
43
+ "exportName": "default"
44
+ },
45
+ "protocol": {
46
+ "kind": "adapter",
47
+ "revision": "v1"
48
+ },
49
+ "hostAbi": {
50
+ "name": "xema-adapter-host",
51
+ "versionRange": "^1"
52
+ },
53
+ "executionModes": [
54
+ "shared-host",
55
+ "isolated"
56
+ ],
57
+ "requirements": {
58
+ "tenancy": {
59
+ "allowed": [
60
+ "org",
61
+ "project"
62
+ ],
63
+ "tenantContext": "verified"
64
+ },
65
+ "isolation": {
66
+ "minimum": "none"
67
+ },
68
+ "trust": {
69
+ "minimum": "verified"
70
+ },
71
+ "locality": {
72
+ "allowed": [
73
+ "cloud",
74
+ "customer-private"
75
+ ]
76
+ },
77
+ "state": {
78
+ "kind": "stateless"
79
+ },
80
+ "resources": {
81
+ "minimum": {
82
+ "cpu": "100m",
83
+ "memory": "64Mi",
84
+ "ephemeralStorage": "64Mi"
85
+ }
86
+ },
87
+ "runtime": {
88
+ "kind": "node",
89
+ "versionRange": ">=22 <25"
90
+ },
91
+ "io": {
92
+ "ingress": "none",
93
+ "egress": "internet",
94
+ "rawBody": false,
95
+ "devices": []
96
+ },
97
+ "scaling": {
98
+ "mode": "horizontal",
99
+ "concurrency": {
100
+ "handling": "parallel",
101
+ "maximumPerInstance": 16
102
+ },
103
+ "readiness": {
104
+ "kind": "protocol",
105
+ "initialDelaySeconds": 0
106
+ },
107
+ "drain": {
108
+ "kind": "graceful",
109
+ "maximumSeconds": 30
110
+ },
111
+ "hints": {
112
+ "cpu": "latency",
113
+ "memory": "steady",
114
+ "startup": "fast"
115
+ }
116
+ }
117
+ }
118
+ }
119
+ ]
120
+ }
121
+ }