@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.
- package/CHANGELOG.md +75 -0
- package/LICENSE +21 -0
- package/README.md +189 -2
- package/art/fancified.svg +26 -0
- package/dist/chunk-2PSRTESV.js +550 -0
- package/dist/chunk-2PSRTESV.js.map +1 -0
- package/dist/flow.cjs +676 -0
- package/dist/flow.cjs.map +1 -0
- package/dist/flow.d.cts +33 -0
- package/dist/flow.d.ts +33 -0
- package/dist/flow.js +131 -0
- package/dist/flow.js.map +1 -0
- package/dist/index.cjs +580 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +431 -0
- package/dist/index.d.ts +431 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/package.json +78 -6
package/dist/index.d.ts
ADDED
|
@@ -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.
|
|
4
|
-
"description": "
|
|
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
|
-
"
|
|
16
|
-
"
|
|
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
|
}
|