@particle-academy/gmail-inbox-js 0.0.0 → 0.2.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,431 @@
1
+ import { ServiceDescriptor, PreparedRequest, ConnectorMode, ConnectorFaker, RequestedMode, Transport, ConnectorResult, TriggerDescriptor, CursorReadSpec, DeliveryDecode, LeaseDeclaration, OidcJwtScheme, InboundDelivery, Jwk, WebhookVerification } from '@particle-academy/fancy-connector-core';
2
+
3
+ /**
4
+ * GENERATED FILE — do not edit.
5
+ *
6
+ * Emitted from provider/manifest.json by weaver's generator.
7
+ * A hand-edit here is destroyed by the next protocol sync, which is worse than
8
+ * being rejected, because it works until it silently does not. Fix
9
+ * provider/manifest.json (or weaver's template/) and regenerate:
10
+ *
11
+ * npm run provider -- gmail_inbox
12
+ */
13
+ /**
14
+ * Gmail Inbox, as one service descriptor shared by every Gmail Inbox
15
+ * operation.
16
+ *
17
+ * @particle-academy/fancy-connector-core carries what is true of ALL
18
+ * connectors. This carries what is true of Gmail Inbox: its base URL, its auth
19
+ * scheme, its idempotency header, and its faker.
20
+ *
21
+ * ## The sandbox trap, written down where it is used
22
+ *
23
+ * Gmail has no sandbox. Every read reaches the connected account's real mail.
24
+ * The faker is the only way to develop against it without touching a real
25
+ * mailbox.
26
+ */
27
+
28
+ /**
29
+ * The connector API version this package was GENERATED against.
30
+ *
31
+ * A literal, never imported. An imported constant lets an upgrade rewrite the
32
+ * very claim it exists to detect, after which the copy agrees with itself
33
+ * forever.
34
+ */
35
+ declare const CONNECTOR_API_VERSION = 1;
36
+ declare const GMAIL_INBOX_BASE_URLS: {
37
+ readonly live: "https://gmail.googleapis.com";
38
+ };
39
+ /** Credential keys a remote call cannot proceed without. */
40
+ declare const GMAIL_INBOX_REQUIRES: readonly ["accessToken", "refreshToken", "clientId", "clientSecret"];
41
+ /**
42
+ * Apply Gmail Inbox's auth scheme to an outgoing request.
43
+ *
44
+ *
45
+ *
46
+ * The mode is passed in because for some providers auth and estate are the
47
+ * same decision expressed in the URL; here it is unused, and saying so is
48
+ * cheaper than wondering later whether it was forgotten.
49
+ */
50
+ declare function gmailInboxAuthorize(credentials: Record<string, string | undefined>, request: PreparedRequest, _mode: ConnectorMode): void;
51
+ /** The Gmail Inbox service, for the TypeScript runtime. */
52
+ declare const GMAIL_INBOX: ServiceDescriptor;
53
+
54
+ /**
55
+ * GENERATED FILE — do not edit.
56
+ *
57
+ * Emitted from provider/fixtures/ by weaver's generator.
58
+ * A hand-edit here is destroyed by the next protocol sync, which is worse than
59
+ * being rejected, because it works until it silently does not. Fix
60
+ * provider/fixtures/ (or weaver's template/) and regenerate:
61
+ *
62
+ * npm run provider -- gmail_inbox
63
+ */
64
+ /**
65
+ * The Gmail Inbox faker.
66
+ *
67
+ * Shapes, not behaviour: the goal is that a downstream node sees the field
68
+ * NAMES Gmail Inbox actually publishes, so an author can wire {{ $json.data.id
69
+ * }} against a fake and have it keep working against the real thing.
70
+ *
71
+ * Deterministic — same inputs, same output. A faker returning a fresh uuid
72
+ * every call cannot be asserted on, so its fixtures degrade to "it did not
73
+ * throw", which is the assertion that catches nothing.
74
+ */
75
+
76
+ declare const gmailInboxFaker: ConnectorFaker;
77
+
78
+ /**
79
+ * GENERATED FILE — do not edit.
80
+ *
81
+ * Emitted from provider/actions/history-list.json by weaver's generator.
82
+ * A hand-edit here is destroyed by the next protocol sync, which is worse than
83
+ * being rejected, because it works until it silently does not. Fix
84
+ * provider/actions/history-list.json (or weaver's template/) and regenerate:
85
+ *
86
+ * npm run provider -- gmail_inbox
87
+ */
88
+ /**
89
+ * List what changed in a mailbox since a history id: messages added or
90
+ * deleted, labels added or removed.
91
+ *
92
+ * GET /gmail/v1/users/{userId}/history —
93
+ * https://developers.google.com/workspace/gmail/api/reference/rest/v1/users.history/list
94
+ *
95
+ * Notice what is NOT here: no key, no base URL, no mode check, no retry loop,
96
+ * no fake/real branch. This describes the request; callConnector resolves the
97
+ * connection, picks the estate, and either calls Gmail Inbox or calls the
98
+ * faker.
99
+ */
100
+
101
+ declare const HISTORY_LIST_OPERATION = "history_list";
102
+ type HistoryListOptions = {
103
+ /** The node's resolved config. Keys: userId, startHistoryId, historyTypes, labelId, maxResults, pageToken. */
104
+ config: Record<string, unknown>;
105
+ credentials?: Record<string, string | undefined>;
106
+ mode?: RequestedMode;
107
+ connectionId?: string | null;
108
+ input?: unknown;
109
+ attempts?: number;
110
+ /** Override the transport. The only way to exercise this without a network. */
111
+ transport?: Transport;
112
+ };
113
+ declare function gmailInboxHistoryList(options: HistoryListOptions): Promise<ConnectorResult>;
114
+
115
+ /**
116
+ * GENERATED FILE — do not edit.
117
+ *
118
+ * Emitted from provider/actions/label-list.json by weaver's generator.
119
+ * A hand-edit here is destroyed by the next protocol sync, which is worse than
120
+ * being rejected, because it works until it silently does not. Fix
121
+ * provider/actions/label-list.json (or weaver's template/) and regenerate:
122
+ *
123
+ * npm run provider -- gmail_inbox
124
+ */
125
+ /**
126
+ * List every label on the mailbox, system and user-created.
127
+ *
128
+ * GET /gmail/v1/users/{userId}/labels —
129
+ * https://developers.google.com/workspace/gmail/api/reference/rest/v1/users.labels/list
130
+ *
131
+ * Notice what is NOT here: no key, no base URL, no mode check, no retry loop,
132
+ * no fake/real branch. This describes the request; callConnector resolves the
133
+ * connection, picks the estate, and either calls Gmail Inbox or calls the
134
+ * faker.
135
+ */
136
+
137
+ declare const LABEL_LIST_OPERATION = "label_list";
138
+ type LabelListOptions = {
139
+ /** The node's resolved config. Keys: userId. */
140
+ config: Record<string, unknown>;
141
+ credentials?: Record<string, string | undefined>;
142
+ mode?: RequestedMode;
143
+ connectionId?: string | null;
144
+ input?: unknown;
145
+ attempts?: number;
146
+ /** Override the transport. The only way to exercise this without a network. */
147
+ transport?: Transport;
148
+ };
149
+ declare function gmailInboxLabelList(options: LabelListOptions): Promise<ConnectorResult>;
150
+
151
+ /**
152
+ * GENERATED FILE — do not edit.
153
+ *
154
+ * Emitted from provider/actions/mailbox-stop.json by weaver's generator.
155
+ * A hand-edit here is destroyed by the next protocol sync, which is worse than
156
+ * being rejected, because it works until it silently does not. Fix
157
+ * provider/actions/mailbox-stop.json (or weaver's template/) and regenerate:
158
+ *
159
+ * npm run provider -- gmail_inbox
160
+ */
161
+ /**
162
+ * Turn off push notifications for a mailbox.
163
+ *
164
+ * POST /gmail/v1/users/{userId}/stop —
165
+ * https://developers.google.com/workspace/gmail/api/reference/rest/v1/users/stop
166
+ *
167
+ * Notice what is NOT here: no key, no base URL, no mode check, no retry loop,
168
+ * no fake/real branch. This describes the request; callConnector resolves the
169
+ * connection, picks the estate, and either calls Gmail Inbox or calls the
170
+ * faker.
171
+ */
172
+
173
+ declare const MAILBOX_STOP_OPERATION = "mailbox_stop";
174
+ type MailboxStopOptions = {
175
+ /** The node's resolved config. Keys: userId. */
176
+ config: Record<string, unknown>;
177
+ credentials?: Record<string, string | undefined>;
178
+ mode?: RequestedMode;
179
+ connectionId?: string | null;
180
+ input?: unknown;
181
+ attempts?: number;
182
+ /** Override the transport. The only way to exercise this without a network. */
183
+ transport?: Transport;
184
+ };
185
+ declare function gmailInboxMailboxStop(options: MailboxStopOptions): Promise<ConnectorResult>;
186
+
187
+ /**
188
+ * GENERATED FILE — do not edit.
189
+ *
190
+ * Emitted from provider/actions/mailbox-watch.json by weaver's generator.
191
+ * A hand-edit here is destroyed by the next protocol sync, which is worse than
192
+ * being rejected, because it works until it silently does not. Fix
193
+ * provider/actions/mailbox-watch.json (or weaver's template/) and regenerate:
194
+ *
195
+ * npm run provider -- gmail_inbox
196
+ */
197
+ /**
198
+ * Start (or renew) push notifications for a mailbox to a Cloud Pub/Sub topic.
199
+ *
200
+ * POST /gmail/v1/users/{userId}/watch —
201
+ * https://developers.google.com/workspace/gmail/api/reference/rest/v1/users/watch
202
+ *
203
+ * Notice what is NOT here: no key, no base URL, no mode check, no retry loop,
204
+ * no fake/real branch. This describes the request; callConnector resolves the
205
+ * connection, picks the estate, and either calls Gmail Inbox or calls the
206
+ * faker.
207
+ */
208
+
209
+ declare const MAILBOX_WATCH_OPERATION = "mailbox_watch";
210
+ type MailboxWatchOptions = {
211
+ /** The node's resolved config. Keys: userId, topicName, labelIds, labelFilterBehavior. */
212
+ config: Record<string, unknown>;
213
+ credentials?: Record<string, string | undefined>;
214
+ mode?: RequestedMode;
215
+ connectionId?: string | null;
216
+ input?: unknown;
217
+ attempts?: number;
218
+ /** Override the transport. The only way to exercise this without a network. */
219
+ transport?: Transport;
220
+ };
221
+ declare function gmailInboxMailboxWatch(options: MailboxWatchOptions): Promise<ConnectorResult>;
222
+
223
+ /**
224
+ * GENERATED FILE — do not edit.
225
+ *
226
+ * Emitted from provider/actions/message-get.json by weaver's generator.
227
+ * A hand-edit here is destroyed by the next protocol sync, which is worse than
228
+ * being rejected, because it works until it silently does not. Fix
229
+ * provider/actions/message-get.json (or weaver's template/) and regenerate:
230
+ *
231
+ * npm run provider -- gmail_inbox
232
+ */
233
+ /**
234
+ * Read one message's headers and preview. The body's plain/HTML text is NOT
235
+ * decoded -- see the raw payload for that.
236
+ *
237
+ * GET /gmail/v1/users/{userId}/messages/{id} —
238
+ * https://developers.google.com/workspace/gmail/api/reference/rest/v1/users.messages/get
239
+ *
240
+ * Notice what is NOT here: no key, no base URL, no mode check, no retry loop,
241
+ * no fake/real branch. This describes the request; callConnector resolves the
242
+ * connection, picks the estate, and either calls Gmail Inbox or calls the
243
+ * faker.
244
+ */
245
+
246
+ declare const MESSAGE_GET_OPERATION = "message_get";
247
+ type MessageGetOptions = {
248
+ /** The node's resolved config. Keys: userId, id. */
249
+ config: Record<string, unknown>;
250
+ credentials?: Record<string, string | undefined>;
251
+ mode?: RequestedMode;
252
+ connectionId?: string | null;
253
+ input?: unknown;
254
+ attempts?: number;
255
+ /** Override the transport. The only way to exercise this without a network. */
256
+ transport?: Transport;
257
+ };
258
+ declare function gmailInboxMessageGet(options: MessageGetOptions): Promise<ConnectorResult>;
259
+
260
+ /**
261
+ * GENERATED FILE — do not edit.
262
+ *
263
+ * Emitted from provider/actions/message-list.json by weaver's generator.
264
+ * A hand-edit here is destroyed by the next protocol sync, which is worse than
265
+ * being rejected, because it works until it silently does not. Fix
266
+ * provider/actions/message-list.json (or weaver's template/) and regenerate:
267
+ *
268
+ * npm run provider -- gmail_inbox
269
+ */
270
+ /**
271
+ * List message ids matching a search, newest first.
272
+ *
273
+ * GET /gmail/v1/users/{userId}/messages —
274
+ * https://developers.google.com/workspace/gmail/api/reference/rest/v1/users.messages/list
275
+ *
276
+ * Notice what is NOT here: no key, no base URL, no mode check, no retry loop,
277
+ * no fake/real branch. This describes the request; callConnector resolves the
278
+ * connection, picks the estate, and either calls Gmail Inbox or calls the
279
+ * faker.
280
+ */
281
+
282
+ declare const MESSAGE_LIST_OPERATION = "message_list";
283
+ type MessageListOptions = {
284
+ /** The node's resolved config. Keys: userId, q, labelId, includeSpamTrash, maxResults, pageToken. */
285
+ config: Record<string, unknown>;
286
+ credentials?: Record<string, string | undefined>;
287
+ mode?: RequestedMode;
288
+ connectionId?: string | null;
289
+ input?: unknown;
290
+ attempts?: number;
291
+ /** Override the transport. The only way to exercise this without a network. */
292
+ transport?: Transport;
293
+ };
294
+ declare function gmailInboxMessageList(options: MessageListOptions): Promise<ConnectorResult>;
295
+
296
+ /**
297
+ * GENERATED FILE — do not edit.
298
+ *
299
+ * Emitted from provider/actions/thread-get.json by weaver's generator.
300
+ * A hand-edit here is destroyed by the next protocol sync, which is worse than
301
+ * being rejected, because it works until it silently does not. Fix
302
+ * provider/actions/thread-get.json (or weaver's template/) and regenerate:
303
+ *
304
+ * npm run provider -- gmail_inbox
305
+ */
306
+ /**
307
+ * Read every message in a conversation thread, oldest first.
308
+ *
309
+ * GET /gmail/v1/users/{userId}/threads/{id} —
310
+ * https://developers.google.com/workspace/gmail/api/reference/rest/v1/users.threads/get
311
+ *
312
+ * Notice what is NOT here: no key, no base URL, no mode check, no retry loop,
313
+ * no fake/real branch. This describes the request; callConnector resolves the
314
+ * connection, picks the estate, and either calls Gmail Inbox or calls the
315
+ * faker.
316
+ */
317
+
318
+ declare const THREAD_GET_OPERATION = "thread_get";
319
+ type ThreadGetOptions = {
320
+ /** The node's resolved config. Keys: userId, id. */
321
+ config: Record<string, unknown>;
322
+ credentials?: Record<string, string | undefined>;
323
+ mode?: RequestedMode;
324
+ connectionId?: string | null;
325
+ input?: unknown;
326
+ attempts?: number;
327
+ /** Override the transport. The only way to exercise this without a network. */
328
+ transport?: Transport;
329
+ };
330
+ declare function gmailInboxThreadGet(options: ThreadGetOptions): Promise<ConnectorResult>;
331
+
332
+ /**
333
+ * GENERATED FILE — do not edit.
334
+ *
335
+ * Emitted from provider/triggers/message-received.json by weaver's generator.
336
+ * A hand-edit here is destroyed by the next protocol sync, which is worse than
337
+ * being rejected, because it works until it silently does not. Fix
338
+ * provider/triggers/message-received.json (or weaver's template/) and regenerate:
339
+ *
340
+ * npm run provider -- gmail_inbox
341
+ */
342
+ /**
343
+ * Gmail Inbox's subscription trigger — the delivery contract.
344
+ *
345
+ * Kept beside the service descriptor rather than inside a node, because the
346
+ * way a delivery is verified is a fact about GMAIL INBOX. Two Gmail Inbox
347
+ * triggers must not be able to disagree about how a delivery is verified.
348
+ *
349
+ * A SUBSCRIPTION: Gmail Inbox stops delivering unless somebody renews it,
350
+ * forever, and if nobody does the workflow stops firing with no error
351
+ * anywhere. The lease below says where the expiry is read from and how early
352
+ * to renew; the host runs ONE renewal scheduler for every expiring trigger.
353
+ */
354
+
355
+ /**
356
+ * How Gmail Inbox's push is authenticated: a bearer token in `Authorization`,
357
+ * signed by the provider, whose issuer must be one of these and whose
358
+ * principal claim must EQUAL the service account the host configured. The
359
+ * keys, the audience and the principal are the HOST's, passed to verify.
360
+ */
361
+ declare const GMAIL_INBOX_MESSAGE_RECEIVED_OIDC_SCHEME: OidcJwtScheme;
362
+ /**
363
+ * The lease this subscription carries: where the provider's expiry sits in the
364
+ * `mailbox_watch` response (`expiration`, epoch-ms), how early the host
365
+ * renews, and what it calls when the lease is due. The host builds the value
366
+ * with the core's `leaseFromResponse` and runs one scheduler for every
367
+ * expiring trigger.
368
+ */
369
+ declare const GMAIL_INBOX_MESSAGE_RECEIVED_LEASE: LeaseDeclaration;
370
+ /**
371
+ * Which of this package's actions create, renew and stop the subscription.
372
+ * `renew` is null where the provider cannot renew and the host calls create
373
+ * again — after stopping the old one, and after re-listing, because
374
+ * notifications during the gap are gone.
375
+ */
376
+ declare const GMAIL_INBOX_MESSAGE_RECEIVED_SUBSCRIPTION: {
377
+ readonly create: "mailbox_watch";
378
+ readonly renew: "mailbox_watch";
379
+ readonly stop: "mailbox_stop";
380
+ };
381
+ declare const GMAIL_INBOX_MESSAGE_RECEIVED_DECODE: DeliveryDecode;
382
+ declare const GMAIL_INBOX_MESSAGE_RECEIVED: TriggerDescriptor;
383
+ /**
384
+ * Where the follow-up read's cursor goes and comes from. The HOST stores it:
385
+ * seeded from the `mailbox_watch` response's `historyId`, advanced to
386
+ * `cursor.next` after each successful run, and filled into this trigger's
387
+ * config on every run.
388
+ */
389
+ declare const GMAIL_INBOX_MESSAGE_RECEIVED_CURSOR: CursorReadSpec;
390
+ /**
391
+ * Read what changed since the HOST's stored cursor: `history_list` from
392
+ * `config.startHistoryId`, every page, `history` concatenated, published under
393
+ * `history` with `cursor: {used, next}`. Persist `cursor.next` once the run
394
+ * succeeds. A lapsed cursor (cursor-expired) or too many pages
395
+ * (cursor-overflow) is refused BY NAME with the bounded resync query, and a
396
+ * missing one (cursor-missing) calls nothing. In fake mode with no stored
397
+ * cursor the read is faked from a placeholder, so the node runs on a canvas.
398
+ */
399
+ declare function readGmailInboxMessageReceivedAfter(event: unknown, config: Record<string, unknown>, options?: {
400
+ credentials?: Record<string, string | undefined>;
401
+ transport?: Transport;
402
+ }): Promise<Record<string, unknown>>;
403
+ /**
404
+ * Verify one inbound Gmail Inbox delivery.
405
+ *
406
+ * The host calls this BEFORE starting a run. The body proves nothing here: the
407
+ * delivery is authenticated by the bearer token in its header. `keys` are the
408
+ * provider's signing keys (its JWKS `keys`), fetched and cached by the HOST;
409
+ * nothing in this package fetches them. `pushAudience` and
410
+ * `pushServiceAccount` are the connection's, and both are REQUIRED: an
411
+ * unchecked audience accepts every token the provider signs for anyone, and an
412
+ * unchecked principal accepts a stranger's subscription aimed at your URL. Any
413
+ * of the three missing refuses every delivery.
414
+ */
415
+ declare function verifyGmailInboxDelivery(delivery: InboundDelivery, expected: {
416
+ keys: readonly Jwk[];
417
+ pushAudience: string | undefined;
418
+ pushServiceAccount: string | undefined;
419
+ }, now?: number): Promise<WebhookVerification>;
420
+ /**
421
+ * Read one VERIFIED Gmail Inbox delivery.
422
+ *
423
+ * The body is not plain JSON: it is pubsub-push, the provider's envelope,
424
+ * unwrapped to the message it carries. The host calls this AFTER
425
+ * `verifyGmailInboxDelivery` has accepted the delivery, with the SAME raw
426
+ * bytes, and starts the run with what it returns. A body that cannot be read
427
+ * is refused by name, never passed on.
428
+ */
429
+ declare function decodeGmailInboxDelivery(raw: Uint8Array | string): unknown;
430
+
431
+ export { CONNECTOR_API_VERSION, GMAIL_INBOX, GMAIL_INBOX_BASE_URLS, GMAIL_INBOX_MESSAGE_RECEIVED, GMAIL_INBOX_MESSAGE_RECEIVED_CURSOR, GMAIL_INBOX_MESSAGE_RECEIVED_DECODE, GMAIL_INBOX_MESSAGE_RECEIVED_LEASE, GMAIL_INBOX_MESSAGE_RECEIVED_OIDC_SCHEME, GMAIL_INBOX_MESSAGE_RECEIVED_SUBSCRIPTION, GMAIL_INBOX_REQUIRES, HISTORY_LIST_OPERATION, type HistoryListOptions, LABEL_LIST_OPERATION, type LabelListOptions, MAILBOX_STOP_OPERATION, MAILBOX_WATCH_OPERATION, MESSAGE_GET_OPERATION, MESSAGE_LIST_OPERATION, type MailboxStopOptions, type MailboxWatchOptions, type MessageGetOptions, type MessageListOptions, THREAD_GET_OPERATION, type ThreadGetOptions, decodeGmailInboxDelivery, gmailInboxAuthorize, gmailInboxFaker, gmailInboxHistoryList, gmailInboxLabelList, gmailInboxMailboxStop, gmailInboxMailboxWatch, gmailInboxMessageGet, gmailInboxMessageList, gmailInboxThreadGet, readGmailInboxMessageReceivedAfter, verifyGmailInboxDelivery };
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { CONNECTOR_API_VERSION, GMAIL_INBOX, GMAIL_INBOX_BASE_URLS, GMAIL_INBOX_MESSAGE_RECEIVED, GMAIL_INBOX_MESSAGE_RECEIVED_CURSOR, GMAIL_INBOX_MESSAGE_RECEIVED_DECODE, GMAIL_INBOX_MESSAGE_RECEIVED_LEASE, GMAIL_INBOX_MESSAGE_RECEIVED_OIDC_SCHEME, GMAIL_INBOX_MESSAGE_RECEIVED_SUBSCRIPTION, GMAIL_INBOX_REQUIRES, HISTORY_LIST_OPERATION, LABEL_LIST_OPERATION, MAILBOX_STOP_OPERATION, MAILBOX_WATCH_OPERATION, MESSAGE_GET_OPERATION, MESSAGE_LIST_OPERATION, THREAD_GET_OPERATION, decodeGmailInboxDelivery, gmailInboxAuthorize, gmailInboxFaker, gmailInboxHistoryList, gmailInboxLabelList, gmailInboxMailboxStop, gmailInboxMailboxWatch, gmailInboxMessageGet, gmailInboxMessageList, gmailInboxThreadGet, readGmailInboxMessageReceivedAfter, verifyGmailInboxDelivery } from './chunk-2PSRTESV.js';
2
+ //# sourceMappingURL=index.js.map
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
package/package.json CHANGED
@@ -1,18 +1,90 @@
1
1
  {
2
2
  "name": "@particle-academy/gmail-inbox-js",
3
- "version": "0.0.0",
4
- "description": "A placeholder that claims the name @particle-academy/gmail-inbox-js; the real release follows through Fancy-Friends/gmail-inbox's publish.yml with provenance. Do not install this version.",
5
- "license": "MIT",
3
+ "version": "0.2.0",
4
+ "description": "Gmail Inbox for Node — the service descriptor, its faker, its webhook verification, and one function per operation. Plain HTTP on @particle-academy/fancy-connector-core; no vendor SDK.",
6
5
  "repository": {
7
6
  "type": "git",
8
7
  "url": "git+https://github.com/Fancy-Friends/gmail-inbox.git",
9
8
  "directory": "packages/js"
10
9
  },
11
10
  "homepage": "https://github.com/Fancy-Friends/gmail-inbox#readme",
11
+ "bugs": "https://github.com/Fancy-Friends/gmail-inbox/issues",
12
+ "type": "module",
13
+ "main": "./dist/index.cjs",
14
+ "module": "./dist/index.js",
15
+ "types": "./dist/index.d.ts",
16
+ "exports": {
17
+ ".": {
18
+ "import": {
19
+ "types": "./dist/index.d.ts",
20
+ "default": "./dist/index.js"
21
+ },
22
+ "require": {
23
+ "types": "./dist/index.d.cts",
24
+ "default": "./dist/index.cjs"
25
+ }
26
+ },
27
+ "./flow": {
28
+ "import": {
29
+ "types": "./dist/flow.d.ts",
30
+ "default": "./dist/flow.js"
31
+ },
32
+ "require": {
33
+ "types": "./dist/flow.d.cts",
34
+ "default": "./dist/flow.cjs"
35
+ }
36
+ },
37
+ "./package.json": "./package.json"
38
+ },
39
+ "files": [
40
+ "dist",
41
+ "art",
42
+ "README.md",
43
+ "CHANGELOG.md",
44
+ "LICENSE"
45
+ ],
46
+ "scripts": {
47
+ "build": "tsup",
48
+ "lint": "tsc --noEmit",
49
+ "test": "node --import tsx --test tests/*.test.ts",
50
+ "prepublishOnly": "tsup"
51
+ },
52
+ "dependencies": {
53
+ "@particle-academy/fancy-connector-core": ">=0.14.0 <2.0"
54
+ },
55
+ "peerDependencies": {
56
+ "@particle-academy/fancy-flow": ">=0.47.1 <2.0",
57
+ "@particle-academy/gmail-inbox-ui": ">=0.2.0 <0.3.0"
58
+ },
59
+ "peerDependenciesMeta": {
60
+ "@particle-academy/fancy-flow": {
61
+ "optional": true
62
+ },
63
+ "@particle-academy/gmail-inbox-ui": {
64
+ "optional": true
65
+ }
66
+ },
67
+ "devDependencies": {
68
+ "@particle-academy/fancy-flow": ">=0.47.1 <2.0",
69
+ "@types/node": "^26.2.0",
70
+ "tsup": "^8.5.0",
71
+ "tsx": "^4.19.0",
72
+ "typescript": "^5.8.0"
73
+ },
12
74
  "publishConfig": {
13
75
  "access": "public"
14
76
  },
15
- "files": [
16
- "README.md"
17
- ]
77
+ "keywords": [
78
+ "gmail_inbox",
79
+ "email",
80
+ "connector",
81
+ "api",
82
+ "fancy-ui",
83
+ "particle-academy"
84
+ ],
85
+ "license": "MIT",
86
+ "sideEffects": false,
87
+ "engines": {
88
+ "node": ">=22"
89
+ }
18
90
  }