@xemahq/biomes-platform-ms365 0.6.4 → 0.8.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.
@@ -6,6 +6,7 @@ export declare const SUBSCRIPTION_RENEWAL_SKEW_MS: number;
6
6
  export interface GraphClientConfig {
7
7
  readonly accessToken: string;
8
8
  readonly baseUrl?: string;
9
+ readonly signal?: AbortSignal;
9
10
  }
10
11
  export interface CreateSubscriptionInput {
11
12
  readonly resource: string;
@@ -16,6 +17,7 @@ export interface CreateSubscriptionInput {
16
17
  export declare class GraphClient {
17
18
  private readonly baseUrl;
18
19
  private readonly accessToken;
20
+ private readonly signal;
19
21
  constructor(config: GraphClientConfig);
20
22
  getMessage(userId: string, messageId: string, options?: {
21
23
  readonly expandAttachments?: boolean;
@@ -31,6 +33,7 @@ export declare class GraphClient {
31
33
  private requestAbsoluteJson;
32
34
  private fetchWithTimeout;
33
35
  private fetchAbsolute;
36
+ private rethrowIfAborted;
34
37
  private toAdapterError;
35
38
  }
36
39
  //# sourceMappingURL=graph-client.d.ts.map
@@ -35,7 +35,7 @@ export interface GraphMessageReader {
35
35
  listAttachments(userId: string, messageId: string): Promise<Result<GraphAttachmentCollection>>;
36
36
  getAttachment(userId: string, messageId: string, attachmentId: string): Promise<Result<GraphFileAttachment>>;
37
37
  }
38
- export type GraphMessageReaderFactory = (accessToken: string) => GraphMessageReader;
38
+ export type GraphMessageReaderFactory = (accessToken: string, signal?: AbortSignal) => GraphMessageReader;
39
39
  export interface FetchMessageOptions {
40
40
  readonly mailbox: string;
41
41
  readonly messageId: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xemahq/biomes-platform-ms365",
3
- "version": "0.6.4",
3
+ "version": "0.8.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/xema-dev/xema-connectors.git",
@@ -14,7 +14,9 @@
14
14
  },
15
15
  "main": "dist/connector-adapters/index.js",
16
16
  "files": [
17
- "dist",
17
+ "dist/connector-adapters/index.js",
18
+ "dist/**/*.d.ts",
19
+ "dist/THIRD-PARTY-NOTICES.txt",
18
20
  "install-schema",
19
21
  "xema-biome.json",
20
22
  "contributions"
@@ -26,17 +28,23 @@
26
28
  },
27
29
  "./package.json": "./package.json"
28
30
  },
29
- "dependencies": {
30
- "@xemahq/biome-sdk": "^18.3.0",
31
- "@xemahq/contracts": "^0.51.0"
32
- },
33
31
  "devDependencies": {
34
32
  "@types/node": "25.2.3",
33
+ "@xemahq/biome-sdk": "^20.0.0",
34
+ "@xemahq/contracts": "^0.77.0",
35
35
  "typescript": "5.9.3"
36
36
  },
37
+ "xemaBundled": {
38
+ "@xemahq/biome-sdk": "20.0.0",
39
+ "@xemahq/contracts": "0.77.0",
40
+ "zod": "4.6.5"
41
+ },
37
42
  "scripts": {
38
- "build": "tsc -p tsconfig.json",
43
+ "build": "tsc -p tsconfig.json && node ../../tooling/bundle/bundle-adapter.mjs",
39
44
  "typecheck": "tsc --noEmit",
40
45
  "test": "node --test ./tests/**/*.test.mjs"
46
+ },
47
+ "xemaRelease": {
48
+ "sourceDigest": "sha256:c91837ba49c12fb74206859ec79989627dbb3d39b23ca61026fc7902a7ebefbc"
41
49
  }
42
- }
50
+ }
package/xema-biome.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xemahq/biomes-platform-ms365",
3
- "version": "0.6.4",
3
+ "version": "0.8.0",
4
4
  "xema": {
5
5
  "id": "ms365-connector",
6
6
  "displayName": "Microsoft 365 Connector",
@@ -17,7 +17,7 @@
17
17
  "bundleSource": {
18
18
  "kind": "npm",
19
19
  "name": "@xemahq/biomes-platform-ms365",
20
- "version": "0.6.4"
20
+ "version": "0.8.0"
21
21
  },
22
22
  "trustTier": "first-party",
23
23
  "connectorRequirements": [
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/connector-adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,sBAAsB,EAG5B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EASL,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EAExB,MAAM,6BAA6B,CAAC;AAiHrC,eAAO,MAAM,kCAAkC,sDAG9C,CAAC;AAOF,eAAO,MAAM,gCAAgC,2DAE5C,CAAC;AA8KF,eAAO,MAAM,sBAAsB,EAAE,sBAkCnC,CAAC;AAEH,QAAA,MAAM,iBAAiB,EAAE,SAAS,sBAAsB,EAA6B,CAAC;AACtF,eAAe,iBAAiB,CAAC;AAuBjC,eAAO,MAAM,kBAAkB,EAAE,kBAoEhC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,SAAS,mBAAmB,EAgB9D,CAAC;AAsDF,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,0BAA0B,EAC1B,UAAU,EACV,0BAA0B,EAC1B,iBAAiB,GAClB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAI9D,OAAO,EACL,6BAA6B,EAC7B,iBAAiB,EACjB,sBAAsB,EACtB,0BAA0B,EAC1B,cAAc,EACd,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,GACxB,MAAM,2BAA2B,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/connector-adapters/index.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"graph-client.d.ts","sourceRoot":"","sources":["../../src/graph/graph-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAE/E,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EACV,yBAAyB,EACzB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,SAAS,EACV,MAAM,kBAAkB,CAAC;AA4B1B,eAAO,MAAM,4BAA4B,QAAoB,CAAC;AAC9D,eAAO,MAAM,4BAA4B,QAAqB,CAAC;AAE/D,MAAM,WAAW,iBAAiB;IAEhC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,uBAAuB;IAEtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IAEjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,QAAQ,CAAC,UAAU,CAAC,EAAE,eAAe,CAAC;CACvC;AAOD,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,MAAM,EAAE,iBAAiB;IAiB/B,UAAU,CACd,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;QAAE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;KAAO,GACrD,OAAO,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAoClC,eAAe,CACnB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;IAyBvC,aAAa,CACjB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAyBjC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAanC,kBAAkB,CACtB,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAqB/B,iBAAiB,CACrB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAkB/B,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IA0BjE,eAAe,CACnB,MAAM,EAAE,MAAM,EACd,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;YAe3B,WAAW;YAQX,mBAAmB;IAqBjC,OAAO,CAAC,gBAAgB;YAQV,aAAa;YAwBb,cAAc;CAoB7B"}
@@ -1,144 +0,0 @@
1
- import { adapterError, err, ok } from '@xemahq/biome-sdk/adapter';
2
- import { GraphChangeType } from './graph-types.js';
3
- const GRAPH_BASE_URL = 'https://graph.microsoft.com/v1.0';
4
- const REQUEST_TIMEOUT_MS = 15_000;
5
- export const MAX_SUBSCRIPTION_LIFETIME_MS = 4_230 * 60 * 1000;
6
- export const SUBSCRIPTION_RENEWAL_SKEW_MS = 6 * 60 * 60 * 1000;
7
- export class GraphClient {
8
- baseUrl;
9
- accessToken;
10
- constructor(config) {
11
- if (!config.accessToken) {
12
- throw new Error('GraphClient requires a non-empty accessToken');
13
- }
14
- this.accessToken = config.accessToken;
15
- this.baseUrl = (config.baseUrl ?? GRAPH_BASE_URL).replace(/\/+$/, '');
16
- }
17
- async getMessage(userId, messageId, options = {}) {
18
- if (!userId || !messageId) {
19
- return err(adapterError('malformed-payload', 'getMessage requires userId and messageId'));
20
- }
21
- const select = '$select=id,conversationId,internetMessageId,subject,receivedDateTime,sentDateTime,from,sender,toRecipients,ccRecipients,bccRecipients,body,bodyPreview,categories,hasAttachments,internetMessageHeaders';
22
- const expand = options.expandAttachments === false ? '' : '&$expand=attachments';
23
- const path = `users/${encodeURIComponent(userId)}/messages/${encodeURIComponent(messageId)}?${select}${expand}`;
24
- return this.requestJson('GET', path);
25
- }
26
- async listAttachments(userId, messageId) {
27
- if (!userId || !messageId) {
28
- return err(adapterError('malformed-payload', 'listAttachments requires userId and messageId'));
29
- }
30
- const path = `users/${encodeURIComponent(userId)}/messages/${encodeURIComponent(messageId)}` +
31
- '/attachments?$select=id,name,contentType,size,isInline,contentId';
32
- return this.requestJson('GET', path);
33
- }
34
- async getAttachment(userId, messageId, attachmentId) {
35
- if (!userId || !messageId || !attachmentId) {
36
- return err(adapterError('malformed-payload', 'getAttachment requires userId, messageId and attachmentId'));
37
- }
38
- const path = `users/${encodeURIComponent(userId)}/messages/${encodeURIComponent(messageId)}` +
39
- `/attachments/${encodeURIComponent(attachmentId)}`;
40
- return this.requestJson('GET', path);
41
- }
42
- async getMe() {
43
- return this.requestJson('GET', 'me?$select=mail,userPrincipalName');
44
- }
45
- async createSubscription(input) {
46
- const expirationDateTime = new Date(Date.now() + MAX_SUBSCRIPTION_LIFETIME_MS).toISOString();
47
- const body = {
48
- changeType: input.changeType ?? GraphChangeType.CREATED,
49
- notificationUrl: input.notificationUrl,
50
- resource: input.resource,
51
- expirationDateTime,
52
- clientState: input.clientState,
53
- };
54
- return this.requestJson('POST', 'subscriptions', body);
55
- }
56
- async renewSubscription(subscriptionId) {
57
- if (!subscriptionId) {
58
- return err(adapterError('malformed-payload', 'renewSubscription requires subscriptionId'));
59
- }
60
- const expirationDateTime = new Date(Date.now() + MAX_SUBSCRIPTION_LIFETIME_MS).toISOString();
61
- return this.requestJson('PATCH', `subscriptions/${encodeURIComponent(subscriptionId)}`, { expirationDateTime });
62
- }
63
- async deleteSubscription(subscriptionId) {
64
- if (!subscriptionId) {
65
- return err(adapterError('malformed-payload', 'deleteSubscription requires subscriptionId'));
66
- }
67
- const response = await this.fetchWithTimeout('DELETE', `subscriptions/${encodeURIComponent(subscriptionId)}`);
68
- if (!response) {
69
- return err(adapterError('upstream-unavailable', 'graph subscription delete: network error'));
70
- }
71
- if (!response.ok && response.status !== 404) {
72
- return err(await this.toAdapterError(response, 'subscription delete'));
73
- }
74
- return ok(undefined);
75
- }
76
- async getMessageDelta(userId, deltaOrNextLink) {
77
- if (!userId) {
78
- return err(adapterError('malformed-payload', 'getMessageDelta requires userId'));
79
- }
80
- if (deltaOrNextLink) {
81
- return this.requestAbsoluteJson('GET', deltaOrNextLink);
82
- }
83
- const path = `users/${encodeURIComponent(userId)}/mailFolders('inbox')/messages/delta`;
84
- return this.requestJson('GET', path);
85
- }
86
- async requestJson(method, path, body) {
87
- return this.requestAbsoluteJson(method, `${this.baseUrl}/${path}`, body);
88
- }
89
- async requestAbsoluteJson(method, url, body) {
90
- const response = await this.fetchAbsolute(method, url, body);
91
- if (!response) {
92
- return err(adapterError('upstream-unavailable', `graph ${method} ${url}: network error / timeout`));
93
- }
94
- if (!response.ok) {
95
- return err(await this.toAdapterError(response, `${method} ${url}`));
96
- }
97
- const json = (await response.json().catch(() => null));
98
- if (json === null) {
99
- return err(adapterError('upstream-unavailable', `graph ${method} ${url}: empty/invalid JSON`));
100
- }
101
- return ok(json);
102
- }
103
- fetchWithTimeout(method, path, body) {
104
- return this.fetchAbsolute(method, `${this.baseUrl}/${path}`, body);
105
- }
106
- async fetchAbsolute(method, url, body) {
107
- const headers = {
108
- Authorization: `Bearer ${this.accessToken}`,
109
- Accept: 'application/json',
110
- };
111
- if (body !== undefined) {
112
- headers['Content-Type'] = 'application/json';
113
- }
114
- try {
115
- return await fetch(url, {
116
- method,
117
- headers,
118
- ...(body === undefined ? {} : { body: JSON.stringify(body) }),
119
- signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),
120
- });
121
- }
122
- catch {
123
- return null;
124
- }
125
- }
126
- async toAdapterError(response, context) {
127
- const text = await response.text().catch(() => '');
128
- const snippet = text.slice(0, 300);
129
- if (response.status === 401 || response.status === 403) {
130
- return adapterError('unauthorized', `graph ${context}: HTTP ${response.status} — ${snippet}`);
131
- }
132
- if (response.status === 404) {
133
- return adapterError('not-found', `graph ${context}: HTTP 404 — ${snippet}`);
134
- }
135
- if (response.status === 429) {
136
- const retryAfter = Number(response.headers.get('retry-after') ?? '');
137
- return adapterError('rate-limited', `graph ${context}: HTTP 429`, {
138
- ...(Number.isFinite(retryAfter) ? { retryAfterSec: retryAfter } : {}),
139
- });
140
- }
141
- return adapterError('upstream-unavailable', `graph ${context}: HTTP ${response.status} — ${snippet}`);
142
- }
143
- }
144
- //# sourceMappingURL=graph-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"graph-client.js","sourceRoot":"","sources":["../../src/graph/graph-client.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"graph-types.d.ts","sourceRoot":"","sources":["../../src/graph/graph-types.ts"],"names":[],"mappings":"AAqBA,oBAAY,eAAe;IACzB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,OAAO,YAAY;CACpB;AAGD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,8BAA8B,CAAC,EAAE,MAAM,CAAC;IACjD,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAE9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,CAAC,EAAE;QACtB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;QAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;KAC/B,CAAC;IACF,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAGD,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,KAAK,EAAE,SAAS,uBAAuB,EAAE,CAAC;CACpD;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,iBAAiB,CAAC;CAC3C;AAED,MAAM,WAAW,aAAa;IAE5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAS5B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAGD,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,KAAK,EAAE,SAAS,mBAAmB,EAAE,CAAC;CAChD;AAGD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IAClD,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IAClD,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IACnD,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAEtD,QAAQ,CAAC,sBAAsB,CAAC,EAAE,aAAa,CAAC;QAC9C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IACrC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAGD,MAAM,WAAW,SAAS;IAExB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE9B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,KAAK,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAEhD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAEpC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CACtC"}
@@ -1,7 +0,0 @@
1
- export var GraphChangeType;
2
- (function (GraphChangeType) {
3
- GraphChangeType["CREATED"] = "created";
4
- GraphChangeType["UPDATED"] = "updated";
5
- GraphChangeType["DELETED"] = "deleted";
6
- })(GraphChangeType || (GraphChangeType = {}));
7
- //# sourceMappingURL=graph-types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"graph-types.js","sourceRoot":"","sources":["../../src/graph/graph-types.ts"],"names":[],"mappings":"AAqBA,MAAM,CAAN,IAAY,eAIX;AAJD,WAAY,eAAe;IACzB,sCAAmB,CAAA;IACnB,sCAAmB,CAAA;IACnB,sCAAmB,CAAA;AACrB,CAAC,EAJW,eAAe,KAAf,eAAe,QAI1B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"mail-envelope.d.ts","sourceRoot":"","sources":["../../src/graph/mail-envelope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAM,KAAK,cAAc,EAAE,KAAK,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAIjF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAgB7D,eAAO,MAAM,wBAAwB,YAAY,CAAC;AAGlD,eAAO,MAAM,UAAU;;;CAGb,CAAC;AAEX,MAAM,WAAW,wBAAwB;IAKvC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;CAC/D;AAOD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,oBAAoB,EAC7B,OAAO,GAAE,wBAA6B,GACrC,MAAM,CAAC,cAAc,CAAC,CAcxB"}
@@ -1,23 +0,0 @@
1
- import { ok } from '@xemahq/biome-sdk/adapter';
2
- import { normalizeGraphMessage } from './message-normalizer.js';
3
- export const MAIL_ENTITY_KIND_MESSAGE = 'MESSAGE';
4
- export const MAIL_EVENT = {
5
- MESSAGE_RECEIVED: 'mail.message.received',
6
- MESSAGE_SENT: 'mail.message.sent',
7
- };
8
- export function buildMailEnvelope(message, options = {}) {
9
- const normalized = normalizeGraphMessage(message);
10
- if (!normalized.ok) {
11
- return normalized;
12
- }
13
- const payload = normalized.value;
14
- const envelope = {
15
- entityKind: MAIL_ENTITY_KIND_MESSAGE,
16
- event: options.event ?? MAIL_EVENT.MESSAGE_RECEIVED,
17
- payload: payload,
18
- externalId: payload.messageId,
19
- ...(payload.threadId === undefined ? {} : { externalSpaceKey: payload.threadId }),
20
- };
21
- return ok(envelope);
22
- }
23
- //# sourceMappingURL=mail-envelope.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mail-envelope.js","sourceRoot":"","sources":["../../src/graph/mail-envelope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAoC,MAAM,2BAA2B,CAAC;AAEjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAkBhE,MAAM,CAAC,MAAM,wBAAwB,GAAG,SAAS,CAAC;AAGlD,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,gBAAgB,EAAE,uBAAuB;IACzC,YAAY,EAAE,mBAAmB;CACzB,CAAC;AAeX,MAAM,UAAU,iBAAiB,CAC/B,OAA6B,EAC7B,UAAoC,EAAE;IAEtC,MAAM,UAAU,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;QACnB,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC;IACjC,MAAM,QAAQ,GAAmB;QAC/B,UAAU,EAAE,wBAAwB;QACpC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC,gBAAgB;QACnD,OAAO,EAAE,OAAuD;QAChE,UAAU,EAAE,OAAO,CAAC,SAAS;QAC7B,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;KAClF,CAAC;IACF,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC;AACtB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"message-fetch.d.ts","sourceRoot":"","sources":["../../src/graph/message-fetch.ts"],"names":[],"mappings":"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"}
@@ -1,161 +0,0 @@
1
- import { adapterError, err, ok, } from '@xemahq/biome-sdk/adapter';
2
- import { normalizeGraphMessage } from './message-normalizer.js';
3
- import { clampAttachmentSizeLimit, collectAttachmentParts, nonEmpty, optional, optionalArray, } from './message-parts.js';
4
- export { DEFAULT_ATTACHMENT_SIZE_LIMIT } from './message-parts.js';
5
- export const MS365_FETCH_MESSAGE_ACTION = 'fetch-message';
6
- const MAILBOX_HINT_KEY = 'mailboxUserId';
7
- const BODY_CONTENT_TYPE_HTML = 'html';
8
- function readBody(message, messageId) {
9
- const body = message.body;
10
- const content = body && typeof body === 'object' && typeof body.content === 'string'
11
- ? body.content
12
- : undefined;
13
- if (content === undefined) {
14
- return err(adapterError('upstream-unavailable', `graph fetch-message: message ${messageId} came back with no body.content — ` +
15
- 'refusing to return a body-less message'));
16
- }
17
- return ok((body?.contentType ?? '').toLowerCase() === BODY_CONTENT_TYPE_HTML
18
- ? { bodyHtml: content }
19
- : { bodyText: content });
20
- }
21
- async function materializeAttachments(client, options, message) {
22
- if (message.hasAttachments === false) {
23
- return ok([]);
24
- }
25
- const listed = await client.listAttachments(options.mailbox, options.messageId);
26
- if (!listed.ok) {
27
- return err(listed.error);
28
- }
29
- const out = [];
30
- for (const part of collectAttachmentParts(listed.value.value)) {
31
- const meta = {
32
- attachmentId: part.attachmentId,
33
- filename: part.filename,
34
- contentType: part.contentType,
35
- size: part.size,
36
- ...optional('contentId', part.contentId),
37
- };
38
- if (!options.includeAttachments) {
39
- out.push(meta);
40
- continue;
41
- }
42
- if (part.size > options.attachmentSizeLimit) {
43
- out.push({ ...meta, skipped: true });
44
- continue;
45
- }
46
- const fetched = await client.getAttachment(options.mailbox, options.messageId, part.attachmentId);
47
- if (!fetched.ok) {
48
- return err(fetched.error);
49
- }
50
- const bytes = fetched.value.contentBytes;
51
- if (typeof bytes !== 'string') {
52
- return err(adapterError('upstream-unavailable', `graph fetch-message: the attachment GET for "${part.filename}" ` +
53
- `(attachment ${part.attachmentId}) of message ${options.messageId} returned no contentBytes`));
54
- }
55
- out.push({ ...meta, base64: bytes });
56
- }
57
- return ok(out);
58
- }
59
- export async function fetchGraphMessage(client, options) {
60
- const fetched = await client.getMessage(options.mailbox, options.messageId, {
61
- expandAttachments: false,
62
- });
63
- if (!fetched.ok) {
64
- return err(fetched.error);
65
- }
66
- const message = fetched.value;
67
- const canonical = normalizeGraphMessage(message);
68
- if (!canonical.ok) {
69
- return err(canonical.error);
70
- }
71
- const body = readBody(message, options.messageId);
72
- if (!body.ok) {
73
- return err(body.error);
74
- }
75
- const attachments = await materializeAttachments(client, options, message);
76
- if (!attachments.ok) {
77
- return err(attachments.error);
78
- }
79
- const projection = canonical.value;
80
- return ok({
81
- mailbox: options.mailbox,
82
- messageId: projection.messageId,
83
- from: projection.from,
84
- to: projection.to,
85
- subject: projection.subject,
86
- receivedAt: projection.receivedAt,
87
- ...optional('threadId', projection.threadId),
88
- ...optionalArray('cc', projection.cc ?? []),
89
- ...optionalArray('bcc', projection.bcc ?? []),
90
- ...optional('bodyText', body.value.bodyText),
91
- ...optional('bodyHtml', body.value.bodyHtml),
92
- ...optional('headers', projection.headers),
93
- ...optionalArray('labels', projection.labels ?? []),
94
- ...optional('snippet', nonEmpty(message.bodyPreview)),
95
- attachments: attachments.value,
96
- });
97
- }
98
- export function resolveMailbox(params, hints) {
99
- const explicit = typeof params['userId'] === 'string' ? params['userId'].trim() : '';
100
- if (explicit.length > 0) {
101
- return explicit;
102
- }
103
- const bound = hints[MAILBOX_HINT_KEY]?.trim() ?? '';
104
- return bound.length > 0 ? bound : undefined;
105
- }
106
- export function makeFetchMessageAction(factory) {
107
- return {
108
- action: MS365_FETCH_MESSAGE_ACTION,
109
- schema: {
110
- type: 'object',
111
- properties: {
112
- messageId: {
113
- type: 'string',
114
- description: 'The Graph message id to fetch (from intake, a notification, or a delta).',
115
- },
116
- userId: {
117
- type: 'string',
118
- description: 'Mailbox user id or UPN to read from. Defaults to the mailbox this connection is bound to.',
119
- },
120
- includeAttachments: {
121
- type: 'boolean',
122
- description: 'Return attachment bytes (base64) under attachments[].base64 (default false — the manifest always ships).',
123
- },
124
- attachmentSizeLimit: {
125
- type: 'number',
126
- description: 'Per-attachment byte cap; an oversize part is flagged skipped with its metadata, never dropped.',
127
- },
128
- },
129
- required: ['messageId'],
130
- },
131
- execute(input) {
132
- const accessToken = nonEmpty(input.credential.accessToken);
133
- if (accessToken === undefined) {
134
- return Promise.resolve(err(adapterError('unauthorized', 'graph fetch-message: the resolved credential carries no access token')));
135
- }
136
- const params = input.params;
137
- const messageId = typeof params['messageId'] === 'string' ? params['messageId'].trim() : '';
138
- if (messageId.length === 0) {
139
- return Promise.resolve(err(adapterError('malformed-payload', 'graph fetch-message: "messageId" is required')));
140
- }
141
- const mailbox = resolveMailbox(params, input.credential.providerHints);
142
- if (mailbox === undefined) {
143
- return Promise.resolve(err(adapterError('malformed-payload', 'graph fetch-message: no mailbox to read from — pass "userId", or bind this ' +
144
- 'connection to a mailbox (Graph addresses mail as /users/{id}; there is no ' +
145
- 'self-reference to fall back to)')));
146
- }
147
- return fetchGraphMessage(factory(accessToken), {
148
- mailbox,
149
- messageId,
150
- includeAttachments: params['includeAttachments'] === true,
151
- attachmentSizeLimit: clampAttachmentSizeLimit(params['attachmentSizeLimit']),
152
- }).then((result) => result.ok
153
- ? ok({
154
- externalId: result.value.messageId,
155
- outputs: result.value,
156
- })
157
- : result);
158
- },
159
- };
160
- }
161
- //# sourceMappingURL=message-fetch.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"message-fetch.js","sourceRoot":"","sources":["../../src/graph/message-fetch.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"message-normalizer.d.ts","sourceRoot":"","sources":["../../src/graph/message-normalizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAS/E,OAAO,KAAK,EAAE,oBAAoB,EAAkB,MAAM,kBAAkB,CAAC;AAoB7E,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,uBAAuB,EAAE,CAAC;CAClD;AAUD,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,oBAAoB,GAC5B,MAAM,CAAC,oBAAoB,CAAC,CA4E9B"}
@@ -1,113 +0,0 @@
1
- import { adapterError, err, ok } from '@xemahq/biome-sdk/adapter';
2
- import { collectAttachmentParts, nonEmpty, optional, optionalArray, } from './message-parts.js';
3
- export function normalizeGraphMessage(message) {
4
- if (!message || typeof message !== 'object') {
5
- return err(adapterError('malformed-payload', 'graph message resource is not an object'));
6
- }
7
- const messageId = nonEmpty(message.id);
8
- if (!messageId) {
9
- return err(adapterError('malformed-payload', 'graph message: id required'));
10
- }
11
- const from = recipientAddress(message.from) ?? recipientAddress(message.sender);
12
- if (!from) {
13
- return err(adapterError('malformed-payload', 'graph message: from.emailAddress.address (or sender) required', { path: 'from.emailAddress.address' }));
14
- }
15
- const to = recipientAddresses(message.toRecipients);
16
- if (to.length === 0) {
17
- return err(adapterError('malformed-payload', 'graph message: at least one toRecipients[].emailAddress.address required', { path: 'toRecipients' }));
18
- }
19
- const subject = typeof message.subject === 'string' ? message.subject : '';
20
- const receivedAt = resolveReceivedAt(message);
21
- if (!receivedAt) {
22
- return err(adapterError('malformed-payload', 'graph message: receivedDateTime or sentDateTime required', { path: 'receivedDateTime' }));
23
- }
24
- const cc = recipientAddresses(message.ccRecipients);
25
- const bcc = recipientAddresses(message.bccRecipients);
26
- const { bodyText, bodyHtml } = splitBody(message);
27
- const headers = normalizeHeaders(message);
28
- const labels = normalizeLabels(message.categories);
29
- const attachments = normalizeAttachments(message);
30
- const canonical = {
31
- messageId,
32
- from,
33
- to,
34
- subject,
35
- receivedAt,
36
- ...optional('threadId', nonEmpty(message.conversationId)),
37
- ...optionalArray('cc', cc),
38
- ...optionalArray('bcc', bcc),
39
- ...optional('bodyText', bodyText),
40
- ...optional('bodyHtml', bodyHtml),
41
- ...optional('headers', headers),
42
- ...optionalArray('labels', labels),
43
- ...optionalArray('attachments', attachments),
44
- };
45
- return ok(canonical);
46
- }
47
- function resolveReceivedAt(message) {
48
- return nonEmpty(message.receivedDateTime) ?? nonEmpty(message.sentDateTime);
49
- }
50
- function splitBody(message) {
51
- const body = message.body;
52
- if (body && typeof body === 'object') {
53
- const content = typeof body.content === 'string' ? body.content : undefined;
54
- if (content !== undefined && content.length > 0) {
55
- const contentType = (body.contentType ?? '').toLowerCase();
56
- if (contentType === 'html') {
57
- return { bodyHtml: content };
58
- }
59
- return { bodyText: content };
60
- }
61
- }
62
- const preview = nonEmpty(message.bodyPreview);
63
- return preview ? { bodyText: preview } : {};
64
- }
65
- function normalizeHeaders(message) {
66
- const out = {};
67
- const internetMessageId = nonEmpty(message.internetMessageId);
68
- if (internetMessageId) {
69
- out['message-id'] = internetMessageId;
70
- }
71
- for (const header of message.internetMessageHeaders ?? []) {
72
- const name = nonEmpty(header?.name);
73
- const value = typeof header?.value === 'string' ? header.value : undefined;
74
- if (name && value !== undefined) {
75
- out[name.toLowerCase()] = value;
76
- }
77
- }
78
- return Object.keys(out).length > 0 ? out : undefined;
79
- }
80
- function normalizeLabels(categories) {
81
- if (!Array.isArray(categories)) {
82
- return [];
83
- }
84
- return categories.filter((c) => typeof c === 'string' && c.length > 0);
85
- }
86
- function normalizeAttachments(message) {
87
- return collectAttachmentParts(message.attachments).map((part) => ({
88
- filename: part.filename,
89
- contentType: part.contentType,
90
- size: part.size,
91
- ...optional('contentId', part.contentId),
92
- }));
93
- }
94
- function recipientAddress(recipient) {
95
- if (!recipient || typeof recipient !== 'object') {
96
- return undefined;
97
- }
98
- return nonEmpty(recipient.emailAddress?.address);
99
- }
100
- function recipientAddresses(recipients) {
101
- if (!Array.isArray(recipients)) {
102
- return [];
103
- }
104
- const out = [];
105
- for (const recipient of recipients) {
106
- const address = recipientAddress(recipient);
107
- if (address) {
108
- out.push(address);
109
- }
110
- }
111
- return out;
112
- }
113
- //# sourceMappingURL=message-normalizer.js.map