@awolve/myoffice 2.19.0 → 2.20.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.
package/README.md CHANGED
@@ -128,6 +128,24 @@ myoffice mail list --json
128
128
 
129
129
  Run `myoffice --help` for all commands.
130
130
 
131
+ ## Library use
132
+
133
+ From v2.20.0 a long-running Node or Bun process can call Graph with the same login as the CLI, without spawning it:
134
+
135
+ ```ts
136
+ import { graphRequest, GraphError } from '@awolve/myoffice/graph';
137
+
138
+ try {
139
+ const inbox = await graphRequest<{ unreadItemCount: number }>('/me/mailFolders/inbox?$select=unreadItemCount');
140
+ } catch (e) {
141
+ if (e instanceof GraphError && (e.status === 429 || e.status === 503)) {
142
+ // back off for e.retryAfter seconds (undefined when Graph sent no Retry-After)
143
+ }
144
+ }
145
+ ```
146
+
147
+ `graphRequest` accepts a path under `https://graph.microsoft.com/v1.0` or a full Graph URL (an `@odata.nextLink` or `@odata.deltaLink` as returned). Also exported: `getAccessToken`, `isAuthenticated`, `getCurrentUser`, `parseRetryAfter`.
148
+
131
149
  ## Azure AD App Registration
132
150
 
133
151
  1. Go to [Azure Portal](https://portal.azure.com) > Azure Active Directory > App registrations
package/dist/cli.js CHANGED
File without changes
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Library entry: `import { graphRequest, GraphError } from '@awolve/myoffice/graph'`.
3
+ *
4
+ * For long-running callers that need Graph with the signed-in user's
5
+ * delegated login but not a process per call — the Cortex mail feed
6
+ * (cortex-services spec 011) is the first. Keep this surface small: every
7
+ * export here is a promise to callers outside this repo.
8
+ */
9
+ export { graphRequest, GraphError, parseRetryAfter } from './utils/graph-client.js';
10
+ export type { GraphRequestOptions } from './utils/graph-client.js';
11
+ export { getAccessToken, isAuthenticated, getCurrentUser } from './auth/index.js';
12
+ //# sourceMappingURL=graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../src/graph.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACpF,YAAY,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/graph.js ADDED
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Library entry: `import { graphRequest, GraphError } from '@awolve/myoffice/graph'`.
3
+ *
4
+ * For long-running callers that need Graph with the signed-in user's
5
+ * delegated login but not a process per call — the Cortex mail feed
6
+ * (cortex-services spec 011) is the first. Keep this surface small: every
7
+ * export here is a promise to callers outside this repo.
8
+ */
9
+ export { graphRequest, GraphError, parseRetryAfter } from './utils/graph-client.js';
10
+ export { getAccessToken, isAuthenticated, getCurrentUser } from './auth/index.js';
11
+ //# sourceMappingURL=graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../src/graph.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAEpF,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC"}
@@ -3,6 +3,35 @@ export interface GraphRequestOptions {
3
3
  body?: unknown;
4
4
  headers?: Record<string, string>;
5
5
  }
6
+ /**
7
+ * A failed Graph call. The message keeps the long-standing
8
+ * `Graph API error (<status>): <message>` form, which callers (Cortex Web's
9
+ * error classifier among them) match on, and adds what a background caller
10
+ * needs to back off properly: the status and Graph's `Retry-After`.
11
+ */
12
+ export declare class GraphError extends Error {
13
+ readonly status: number;
14
+ /** Graph's `code`, e.g. `ErrorItemNotFound` or `syncStateNotFound`, when it sent one. */
15
+ readonly code?: string;
16
+ /** Seconds to wait before retrying, from the `Retry-After` header; undefined when absent. */
17
+ readonly retryAfter?: number;
18
+ constructor(status: number, message: string, code?: string, retryAfter?: number);
19
+ }
20
+ /** `Retry-After` is either delay-seconds or an HTTP date (RFC 9110 §10.2.3). */
21
+ export declare function parseRetryAfter(value: string | null, now?: number): number | undefined;
22
+ /** Builds the GraphError for a non-OK response, reading its body once. */
23
+ export declare function toGraphError(response: Response): Promise<GraphError>;
24
+ /**
25
+ * A path under the v1.0 root, or an absolute URL as Graph hands back in
26
+ * `@odata.nextLink` / `@odata.deltaLink`. An absolute URL must be https on
27
+ * Graph's own host: the request carries the user's bearer token, so any other
28
+ * host would receive it.
29
+ */
30
+ export declare function resolveGraphUrl(path: string): string;
31
+ /**
32
+ * `path` is relative to the v1.0 root (`/me/messages`), or an absolute Graph
33
+ * URL on graph.microsoft.com (see resolveGraphUrl).
34
+ */
6
35
  export declare function graphRequest<T>(path: string, options?: GraphRequestOptions): Promise<T>;
7
36
  export interface GraphUploadOptions {
8
37
  contentType?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"graph-client.d.ts","sourceRoot":"","sources":["../../src/utils/graph-client.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC7C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,wBAAsB,YAAY,CAAC,CAAC,EAClC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,CAAC,CAAC,CAmCZ;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,WAAW,CAAC,CAAC,EACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GAAG,UAAU,EAC5B,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,CAAC,CAAC,CA6BZ;AAWD,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GAAG,UAAU,EAC5B,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GACrD,OAAO,CAAC,CAAC,CAAC,CA2DZ;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA2BjE;AAED,wBAAsB,SAAS,CAAC,CAAC,EAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAClC,OAAO,CAAC,CAAC,EAAE,CAAC,CAoBd"}
1
+ {"version":3,"file":"graph-client.d.ts","sourceRoot":"","sources":["../../src/utils/graph-client.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC7C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED;;;;;GAKG;AACH,qBAAa,UAAW,SAAQ,KAAK;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,yFAAyF;IACzF,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,6FAA6F;IAC7F,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;gBAEjB,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;CAOhF;AAED,gFAAgF;AAChF,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,GAAE,MAAmB,GAAG,MAAM,GAAG,SAAS,CAOlG;AAED,0EAA0E;AAC1E,wBAAsB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAc1E;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOpD;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAClC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,CAAC,CAAC,CA0BZ;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,WAAW,CAAC,CAAC,EACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GAAG,UAAU,EAC5B,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,CAAC,CAAC,CAmBZ;AAWD,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GAAG,UAAU,EAC5B,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GACrD,OAAO,CAAC,CAAC,CAAC,CA2DZ;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBjE;AAED,wBAAsB,SAAS,CAAC,CAAC,EAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAClC,OAAO,CAAC,CAAC,EAAE,CAAC,CAoBd"}
@@ -1,9 +1,76 @@
1
1
  import { getAccessToken } from '../auth/index.js';
2
2
  const GRAPH_BASE_URL = 'https://graph.microsoft.com/v1.0';
3
+ /**
4
+ * A failed Graph call. The message keeps the long-standing
5
+ * `Graph API error (<status>): <message>` form, which callers (Cortex Web's
6
+ * error classifier among them) match on, and adds what a background caller
7
+ * needs to back off properly: the status and Graph's `Retry-After`.
8
+ */
9
+ export class GraphError extends Error {
10
+ status;
11
+ /** Graph's `code`, e.g. `ErrorItemNotFound` or `syncStateNotFound`, when it sent one. */
12
+ code;
13
+ /** Seconds to wait before retrying, from the `Retry-After` header; undefined when absent. */
14
+ retryAfter;
15
+ constructor(status, message, code, retryAfter) {
16
+ super(`Graph API error (${status}): ${message}`);
17
+ this.name = 'GraphError';
18
+ this.status = status;
19
+ this.code = code;
20
+ this.retryAfter = retryAfter;
21
+ }
22
+ }
23
+ /** `Retry-After` is either delay-seconds or an HTTP date (RFC 9110 §10.2.3). */
24
+ export function parseRetryAfter(value, now = Date.now()) {
25
+ if (!value)
26
+ return undefined;
27
+ const trimmed = value.trim();
28
+ if (/^\d+$/.test(trimmed))
29
+ return Number(trimmed);
30
+ const at = Date.parse(trimmed);
31
+ if (Number.isNaN(at))
32
+ return undefined;
33
+ return Math.max(0, Math.ceil((at - now) / 1000));
34
+ }
35
+ /** Builds the GraphError for a non-OK response, reading its body once. */
36
+ export async function toGraphError(response) {
37
+ const errorText = await response.text();
38
+ let errorMessage = errorText;
39
+ let code;
40
+ try {
41
+ const errorJson = JSON.parse(errorText);
42
+ errorMessage = errorJson.error?.message || errorText;
43
+ code = errorJson.error?.code;
44
+ }
45
+ catch {
46
+ // Not JSON: keep the raw text as the message.
47
+ }
48
+ return new GraphError(response.status, errorMessage, code, parseRetryAfter(response.headers.get('retry-after')));
49
+ }
50
+ /**
51
+ * A path under the v1.0 root, or an absolute URL as Graph hands back in
52
+ * `@odata.nextLink` / `@odata.deltaLink`. An absolute URL must be https on
53
+ * Graph's own host: the request carries the user's bearer token, so any other
54
+ * host would receive it.
55
+ */
56
+ export function resolveGraphUrl(path) {
57
+ if (!/^[a-z][a-z0-9+.-]*:/i.test(path))
58
+ return `${GRAPH_BASE_URL}${path}`;
59
+ const url = new URL(path);
60
+ if (url.protocol !== 'https:' || url.hostname.toLowerCase() !== new URL(GRAPH_BASE_URL).hostname) {
61
+ throw new Error(`Refusing to send the Graph token to ${url.protocol}//${url.hostname}`);
62
+ }
63
+ return url.toString();
64
+ }
65
+ /**
66
+ * `path` is relative to the v1.0 root (`/me/messages`), or an absolute Graph
67
+ * URL on graph.microsoft.com (see resolveGraphUrl).
68
+ */
3
69
  export async function graphRequest(path, options = {}) {
4
70
  const { method = 'GET', body, headers = {} } = options;
5
71
  const accessToken = await getAccessToken();
6
- const response = await fetch(`${GRAPH_BASE_URL}${path}`, {
72
+ const url = resolveGraphUrl(path);
73
+ const response = await fetch(url, {
7
74
  method,
8
75
  headers: {
9
76
  Authorization: `Bearer ${accessToken}`,
@@ -13,16 +80,7 @@ export async function graphRequest(path, options = {}) {
13
80
  body: body ? JSON.stringify(body) : undefined,
14
81
  });
15
82
  if (!response.ok) {
16
- const errorText = await response.text();
17
- let errorMessage;
18
- try {
19
- const errorJson = JSON.parse(errorText);
20
- errorMessage = errorJson.error?.message || errorText;
21
- }
22
- catch {
23
- errorMessage = errorText;
24
- }
25
- throw new Error(`Graph API error (${response.status}): ${errorMessage}`);
83
+ throw await toGraphError(response);
26
84
  }
27
85
  // Handle 204 No Content and 202 Accepted (e.g., sendMail)
28
86
  if (response.status === 204 || response.status === 202) {
@@ -42,16 +100,7 @@ export async function graphUpload(path, content, options = {}) {
42
100
  body: content,
43
101
  });
44
102
  if (!response.ok) {
45
- const errorText = await response.text();
46
- let errorMessage;
47
- try {
48
- const errorJson = JSON.parse(errorText);
49
- errorMessage = errorJson.error?.message || errorText;
50
- }
51
- catch {
52
- errorMessage = errorText;
53
- }
54
- throw new Error(`Graph API error (${response.status}): ${errorMessage}`);
103
+ throw await toGraphError(response);
55
104
  }
56
105
  return response.json();
57
106
  }
@@ -121,16 +170,7 @@ export async function graphDownload(path) {
121
170
  redirect: 'follow',
122
171
  });
123
172
  if (!response.ok) {
124
- const errorText = await response.text();
125
- let errorMessage;
126
- try {
127
- const errorJson = JSON.parse(errorText);
128
- errorMessage = errorJson.error?.message || errorText;
129
- }
130
- catch {
131
- errorMessage = errorText;
132
- }
133
- throw new Error(`Graph API error (${response.status}): ${errorMessage}`);
173
+ throw await toGraphError(response);
134
174
  }
135
175
  const arrayBuffer = await response.arrayBuffer();
136
176
  return Buffer.from(arrayBuffer);
@@ -1 +1 @@
1
- {"version":3,"file":"graph-client.js","sourceRoot":"","sources":["../../src/utils/graph-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"graph-client.js","sourceRoot":"","sources":["../../src/utils/graph-client.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,9 +1,17 @@
1
1
  {
2
2
  "name": "@awolve/myoffice",
3
- "version": "2.19.0",
3
+ "version": "2.20.0",
4
4
  "description": "CLI for personal Microsoft 365 access - email, calendar, tasks, OneDrive, Teams, Planner",
5
5
  "type": "module",
6
6
  "main": "dist/cli.js",
7
+ "exports": {
8
+ ".": "./dist/cli.js",
9
+ "./graph": {
10
+ "types": "./dist/graph.d.ts",
11
+ "default": "./dist/graph.js"
12
+ },
13
+ "./package.json": "./package.json"
14
+ },
7
15
  "bin": {
8
16
  "myoffice": "dist/cli.js"
9
17
  },
@@ -14,7 +22,7 @@
14
22
  },
15
23
  "scripts": {
16
24
  "build": "tsc",
17
- "test": "node --import tsx --test tests/signature.test.ts tests/calendar-forward.test.ts tests/mail-filter.test.ts",
25
+ "test": "node --import tsx --test tests/signature.test.ts tests/calendar-forward.test.ts tests/mail-filter.test.ts tests/graph-error.test.ts",
18
26
  "prepublishOnly": "npm run build",
19
27
  "postinstall": "echo '\n✅ @awolve/myoffice installed!\n\nRun: myoffice --help\nOr: npx @awolve/myoffice --help\n'",
20
28
  "start": "node dist/cli.js",