@particle-academy/gmail-inbox-ui 0.1.0 → 0.3.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 +57 -0
- package/README.md +53 -1
- package/dist/index.cjs +362 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +71 -1
- package/dist/index.d.ts +71 -1
- package/dist/index.js +343 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/service.ts","../src/kinds/label-list.ts","../src/kinds/message-get.ts","../src/kinds/message-list.ts","../src/kinds/thread-get.ts","../src/index.ts"],"names":["defineConnectorKind","summarize"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * GENERATED FILE — do not edit.\n *\n * Emitted from provider/manifest.json by weaver's generator.\n * A hand-edit here is destroyed by the next protocol sync, which is worse than\n * being rejected, because it works until it silently does not. Fix\n * provider/manifest.json (or weaver's template/) and regenerate:\n *\n * npm run provider -- gmail_inbox\n */\n\n/**\n * Gmail Inbox's identity on the authoring surface, shared by every Gmail Inbox\n * node.\n *\n * This file must import nothing from the js package: a PHP or Python project\n * installs the ui package and never that one, and the import would be a\n * dangling module the moment it did.\n *\n * ## The sandbox trap\n *\n * Gmail has no sandbox. Every read reaches the connected account's real mail.\n * The faker is the only way to develop against it without touching a real\n * mailbox.\n */\n\nimport type { ConnectorDomain, ConnectorMeta } from \"@particle-academy/fancy-flow/connectors\";\n\n/**\n * The connector API version this package was GENERATED against.\n *\n * A literal, never imported — an imported constant lets an upgrade rewrite the\n * very claim it exists to detect.\n */\nexport const CONNECTOR_API_VERSION = 1;\n\n/** The parts of a connector's identity that belong to the SERVICE, not the node. */\nexport const GMAIL_INBOX_SERVICE = {\n service: \"gmail_inbox\",\n serviceTitle: \"Gmail Inbox\",\n domain: \"email\",\n sandbox: \"none\",\n} as const satisfies Pick<ConnectorMeta, \"service\" | \"serviceTitle\" | \"domain\" | \"sandbox\">;\n\n/**\n * Every connector domain weaver knows, pinned against fancy-flow's union.\n *\n * A closed set copied into three codebases stays correct only while something\n * MAKES it: this line fails to compile the moment weaver carries a value\n * fancy-flow does not, including the values no provider uses yet.\n */\nconst WEAVER_DOMAINS: readonly ConnectorDomain[] = [\n \"payments\",\n \"commerce\",\n \"messaging\",\n \"email\",\n \"crm\",\n \"support\",\n \"storage\",\n \"calendar\",\n \"productivity\",\n \"database\",\n \"devtools\",\n \"analytics\",\n \"marketing\",\n \"ai\",\n \"forms\",\n \"hr\",\n \"geo\"\n];\nvoid WEAVER_DOMAINS;\n\n/** The credentials a Gmail Inbox connection holds. */\nexport const GMAIL_INBOX_CREDENTIALS = [\n {\n \"key\": \"clientId\",\n \"label\": \"OAuth client ID\",\n \"scope\": \"provider\",\n \"secret\": false,\n \"help\": \"A DIFFERENT OAuth app than `gmail`'s, from Google Cloud Console -> APIs & Services -> Credentials. This one requests a restricted scope and carries Google's annual CASA assessment; `gmail`'s does not. Do not reuse the same client for both.\"\n },\n {\n \"key\": \"clientSecret\",\n \"label\": \"OAuth client secret\",\n \"scope\": \"provider\",\n \"secret\": true,\n \"help\": \"The client secret for the same OAuth app. One value for the whole installation.\"\n },\n {\n \"key\": \"accessToken\",\n \"label\": \"Access token\",\n \"scope\": \"account\",\n \"secret\": true,\n \"help\": \"Per connected Google account, and it expires after ONE HOUR. The host refreshes it with the refresh token.\"\n },\n {\n \"key\": \"refreshToken\",\n \"label\": \"Refresh token\",\n \"scope\": \"account\",\n \"secret\": true,\n \"help\": \"Per connected Google account. Google issues one only when the consent request asks for offline access; without it the connection dies within the hour.\"\n }\n] as const;\n\n/**\n * The OAuth2 exchange Gmail Inbox requires — DECLARED here, performed by the\n * host.\n *\n * A consent screen needs a browser, a redirect URI and somewhere to persist\n * the result, and all three belong to the host; a package that ran the dance\n * itself would have to own a web server. So this says precisely enough for a\n * host to do it.\n *\n * The access token lasts 3600 seconds. A host that never refreshes will work\n * all afternoon and be broken by morning, which is why the lifetime is stated\n * rather than left to be discovered.\n *\n * Its refresh tokens do NOT rotate: the same one is reusable, so a refresh may\n * safely be retried and may run concurrently. That is stated rather than\n * assumed because the opposite — a provider that spends the token and revokes\n * the grant on a replay — looks identical until it happens.\n */\nexport const GMAIL_INBOX_OAUTH = {\n \"flow\": \"authorization_code\",\n \"authorizeUrl\": \"https://accounts.google.com/o/oauth2/v2/auth\",\n \"tokenUrl\": \"https://oauth2.googleapis.com/token\",\n \"scopes\": [\n \"https://www.googleapis.com/auth/gmail.readonly\"\n ],\n \"accessTokenCredential\": \"accessToken\",\n \"refreshTokenCredential\": \"refreshToken\",\n \"refreshTokenRotates\": false,\n \"accessTokenTtlSeconds\": 3600\n} as const;\n\n/** Build a Gmail Inbox node's connector metadata from the operation it performs. */\nexport function gmailInboxMeta(\n role: ConnectorMeta[\"role\"],\n operation: string,\n docs: string,\n): ConnectorMeta {\n return { ...GMAIL_INBOX_SERVICE, role, operation, docs };\n}\n","/**\n * GENERATED FILE — do not edit.\n *\n * Emitted from provider/actions/label-list.json by weaver's generator.\n * A hand-edit here is destroyed by the next protocol sync, which is worse than\n * being rejected, because it works until it silently does not. Fix\n * provider/actions/label-list.json (or weaver's template/) and regenerate:\n *\n * npm run provider -- gmail_inbox\n */\n\n/**\n * List Gmail labels — List every label on the mailbox, system and\n * user-created.\n *\n * https://developers.google.com/workspace/gmail/api/reference/rest/v1/users.labels/list\n */\n\nimport type { NodeKindDefinition } from \"@particle-academy/fancy-flow/engine\";\nimport { defineConnectorKind, summarize, type OutputField } from \"@particle-academy/fancy-flow/connectors\";\nimport { gmailInboxMeta } from \"../service.js\";\n\nexport const GMAIL_INBOX_LABEL_LIST_KIND = \"@particle-academy/gmail_inbox_label_list\";\nexport const GMAIL_INBOX_LABEL_LIST_OPERATION = \"label_list\";\n\nexport const GMAIL_INBOX_LABEL_LIST_META = gmailInboxMeta(\"action\", \"list labels\", \"https://developers.google.com/workspace/gmail/api/reference/rest/v1/users.labels/list\");\n\n/**\n * What this node emits — the \"ingredients\" a downstream node can reference.\n *\n * fancy-flow reads `outputShape` off the kind and offers it in the variable\n * picker, so declaring it is the whole of the work: an author configuring the\n * next node picks `{{ $json.data.id }}` off a list instead of typing a path\n * and hoping.\n */\nexport const GMAIL_INBOX_LABEL_LIST_OUTPUT: OutputField[] = [\n {\n \"path\": \"data.labels\",\n \"type\": \"array\",\n \"description\": \"Each with id, name and type (system or user). messagesTotal/messagesUnread/threadsTotal/threadsUnread are part of Label's schema but not confirmed present on every list row -- read one label with labels.get if a count comes back missing.\"\n }\n];\n\nexport const gmailInboxLabelListKind: NodeKindDefinition = defineConnectorKind(GMAIL_INBOX_LABEL_LIST_META, {\n name: GMAIL_INBOX_LABEL_LIST_KIND,\n aliases: [\"gmail_inbox_label_list\"],\n label: \"List Gmail labels\",\n description: \"List every label on the mailbox, system and user-created.\",\n inputs: [{ id: \"in\" }],\n outputs: [{ id: \"out\" }],\n sideEffects: \"none\",\n outputShape: GMAIL_INBOX_LABEL_LIST_OUTPUT,\n configSchema: [\n {\n \"type\": \"text\",\n \"key\": \"userId\",\n \"label\": \"Mailbox\",\n \"required\": true,\n \"default\": \"me\"\n }\n ],\n defaultConfig: {\n \"mode\": \"auto\"\n },\n renderBody: ({ config }) =>\n summarize(GMAIL_INBOX_LABEL_LIST_META, config as Record<string, unknown>, \"list labels\"),\n});\n","/**\n * GENERATED FILE — do not edit.\n *\n * Emitted from provider/actions/message-get.json by weaver's generator.\n * A hand-edit here is destroyed by the next protocol sync, which is worse than\n * being rejected, because it works until it silently does not. Fix\n * provider/actions/message-get.json (or weaver's template/) and regenerate:\n *\n * npm run provider -- gmail_inbox\n */\n\n/**\n * Gmail message — Read one message's headers and preview. The body's\n * plain/HTML text is NOT decoded -- see the raw payload for that.\n *\n * https://developers.google.com/workspace/gmail/api/reference/rest/v1/users.messages/get\n */\n\nimport type { NodeKindDefinition } from \"@particle-academy/fancy-flow/engine\";\nimport { defineConnectorKind, summarize, type OutputField } from \"@particle-academy/fancy-flow/connectors\";\nimport { gmailInboxMeta } from \"../service.js\";\n\nexport const GMAIL_INBOX_MESSAGE_GET_KIND = \"@particle-academy/gmail_inbox_message_get\";\nexport const GMAIL_INBOX_MESSAGE_GET_OPERATION = \"message_get\";\n\nexport const GMAIL_INBOX_MESSAGE_GET_META = gmailInboxMeta(\"action\", \"read a message\", \"https://developers.google.com/workspace/gmail/api/reference/rest/v1/users.messages/get\");\n\n/**\n * What this node emits — the \"ingredients\" a downstream node can reference.\n *\n * fancy-flow reads `outputShape` off the kind and offers it in the variable\n * picker, so declaring it is the whole of the work: an author configuring the\n * next node picks `{{ $json.data.id }}` off a list instead of typing a path\n * and hoping.\n */\nexport const GMAIL_INBOX_MESSAGE_GET_OUTPUT: OutputField[] = [\n {\n \"path\": \"data.id\",\n \"type\": \"string\",\n \"description\": \"The message id.\"\n },\n {\n \"path\": \"data.threadId\",\n \"type\": \"string\",\n \"description\": \"The thread this message belongs to.\"\n },\n {\n \"path\": \"data.labelIds\",\n \"type\": \"array\",\n \"description\": \"System and user label ids currently on this message.\"\n },\n {\n \"path\": \"data.snippet\",\n \"type\": \"string\",\n \"description\": \"Gmail's own short plain-text preview of the body -- a few hundred characters, not the whole message.\"\n },\n {\n \"path\": \"data.internalDate\",\n \"type\": \"string\",\n \"description\": \"Unix epoch MILLISECONDS, as a string -- when Gmail received it, which can differ from the Date header.\"\n },\n {\n \"path\": \"data.payload.headers\",\n \"type\": \"array\",\n \"description\": \"Every RFC 2822 header as { name, value }, unparsed. From/To/Subject/Date live here.\"\n },\n {\n \"path\": \"data.payload\",\n \"type\": \"unknown\",\n \"description\": \"The full MIME tree, raw -- mimeType, body (base64url in body.data for a leaf part), and nested parts for a multipart message. Decode it yourself for plain-text or HTML content; this connector does not flatten it.\"\n },\n {\n \"path\": \"mode\",\n \"type\": \"string\",\n \"description\": \"Which estate this ran against. Google has no sandbox, so: fake or live.\"\n }\n];\n\nexport const gmailInboxMessageGetKind: NodeKindDefinition = defineConnectorKind(GMAIL_INBOX_MESSAGE_GET_META, {\n name: GMAIL_INBOX_MESSAGE_GET_KIND,\n aliases: [\"gmail_inbox_message_get\"],\n label: \"Gmail message\",\n description: \"Read one message's headers and preview. The body's plain/HTML text is NOT decoded -- see the raw payload for that.\",\n inputs: [{ id: \"in\" }],\n outputs: [{ id: \"out\" }],\n sideEffects: \"none\",\n outputShape: GMAIL_INBOX_MESSAGE_GET_OUTPUT,\n configSchema: [\n {\n \"type\": \"text\",\n \"key\": \"userId\",\n \"label\": \"Mailbox\",\n \"required\": true,\n \"default\": \"me\"\n },\n {\n \"type\": \"text\",\n \"key\": \"id\",\n \"label\": \"Message ID\",\n \"required\": true,\n \"description\": \"From message_list, or another node's output.\"\n }\n ],\n defaultConfig: {\n \"mode\": \"auto\"\n },\n renderBody: ({ config }) =>\n summarize(GMAIL_INBOX_MESSAGE_GET_META, config as Record<string, unknown>, \"read a message\"),\n});\n","/**\n * GENERATED FILE — do not edit.\n *\n * Emitted from provider/actions/message-list.json by weaver's generator.\n * A hand-edit here is destroyed by the next protocol sync, which is worse than\n * being rejected, because it works until it silently does not. Fix\n * provider/actions/message-list.json (or weaver's template/) and regenerate:\n *\n * npm run provider -- gmail_inbox\n */\n\n/**\n * List Gmail messages — List message ids matching a search, newest first.\n *\n * https://developers.google.com/workspace/gmail/api/reference/rest/v1/users.messages/list\n */\n\nimport type { NodeKindDefinition } from \"@particle-academy/fancy-flow/engine\";\nimport { defineConnectorKind, summarize, type OutputField } from \"@particle-academy/fancy-flow/connectors\";\nimport { gmailInboxMeta } from \"../service.js\";\n\nexport const GMAIL_INBOX_MESSAGE_LIST_KIND = \"@particle-academy/gmail_inbox_message_list\";\nexport const GMAIL_INBOX_MESSAGE_LIST_OPERATION = \"message_list\";\n\nexport const GMAIL_INBOX_MESSAGE_LIST_META = gmailInboxMeta(\"action\", \"list messages\", \"https://developers.google.com/workspace/gmail/api/reference/rest/v1/users.messages/list\");\n\n/**\n * What this node emits — the \"ingredients\" a downstream node can reference.\n *\n * fancy-flow reads `outputShape` off the kind and offers it in the variable\n * picker, so declaring it is the whole of the work: an author configuring the\n * next node picks `{{ $json.data.id }}` off a list instead of typing a path\n * and hoping.\n */\nexport const GMAIL_INBOX_MESSAGE_LIST_OUTPUT: OutputField[] = [\n {\n \"path\": \"data.messages\",\n \"type\": \"array\",\n \"description\": \"Each row is { id, threadId } only. Read a message's content with message_get.\"\n },\n {\n \"path\": \"data.nextPageToken\",\n \"type\": \"string\",\n \"description\": \"Present when there is another page.\"\n },\n {\n \"path\": \"data.resultSizeEstimate\",\n \"type\": \"number\",\n \"description\": \"Gmail's own word for it: an ESTIMATE, not an exact count.\"\n },\n {\n \"path\": \"mode\",\n \"type\": \"string\",\n \"description\": \"Which estate this ran against. Google has no sandbox, so: fake or live.\"\n }\n];\n\nexport const gmailInboxMessageListKind: NodeKindDefinition = defineConnectorKind(GMAIL_INBOX_MESSAGE_LIST_META, {\n name: GMAIL_INBOX_MESSAGE_LIST_KIND,\n aliases: [\"gmail_inbox_message_list\"],\n label: \"List Gmail messages\",\n description: \"List message ids matching a search, newest first.\",\n inputs: [{ id: \"in\" }],\n outputs: [{ id: \"out\" }],\n sideEffects: \"none\",\n outputShape: GMAIL_INBOX_MESSAGE_LIST_OUTPUT,\n configSchema: [\n {\n \"type\": \"text\",\n \"key\": \"userId\",\n \"label\": \"Mailbox\",\n \"required\": true,\n \"default\": \"me\",\n \"description\": \"`me` is the connected account and is almost always what you want.\"\n },\n {\n \"type\": \"text\",\n \"key\": \"q\",\n \"label\": \"Search\",\n \"description\": \"Gmail's own search syntax, exactly as typed into the Gmail search box -- e.g. \\\"from:ada@example.test has:attachment newer_than:7d\\\". Leave blank to list everything.\"\n },\n {\n \"type\": \"text\",\n \"key\": \"labelId\",\n \"label\": \"Label ID\",\n \"description\": \"Only messages with this label -- e.g. INBOX, or a label_list id. Gmail's own query parameter accepts several, repeated; this connector offers one for now -- combine more in the search field above instead, using Gmail's own label: search operator.\"\n },\n {\n \"type\": \"switch\",\n \"key\": \"includeSpamTrash\",\n \"label\": \"Include spam and trash\",\n \"default\": false\n },\n {\n \"type\": \"number\",\n \"key\": \"maxResults\",\n \"label\": \"Page size\",\n \"min\": 1,\n \"max\": 500,\n \"default\": 100,\n \"description\": \"Gmail's own maximum is 500.\"\n },\n {\n \"type\": \"text\",\n \"key\": \"pageToken\",\n \"label\": \"Page token\",\n \"description\": \"From a previous page's nextPageToken.\"\n }\n ],\n defaultConfig: {\n \"mode\": \"auto\"\n },\n renderBody: ({ config }) =>\n summarize(GMAIL_INBOX_MESSAGE_LIST_META, config as Record<string, unknown>, \"list messages\"),\n});\n","/**\n * GENERATED FILE — do not edit.\n *\n * Emitted from provider/actions/thread-get.json by weaver's generator.\n * A hand-edit here is destroyed by the next protocol sync, which is worse than\n * being rejected, because it works until it silently does not. Fix\n * provider/actions/thread-get.json (or weaver's template/) and regenerate:\n *\n * npm run provider -- gmail_inbox\n */\n\n/**\n * Gmail thread — Read every message in a conversation thread, oldest first.\n *\n * https://developers.google.com/workspace/gmail/api/reference/rest/v1/users.threads/get\n */\n\nimport type { NodeKindDefinition } from \"@particle-academy/fancy-flow/engine\";\nimport { defineConnectorKind, summarize, type OutputField } from \"@particle-academy/fancy-flow/connectors\";\nimport { gmailInboxMeta } from \"../service.js\";\n\nexport const GMAIL_INBOX_THREAD_GET_KIND = \"@particle-academy/gmail_inbox_thread_get\";\nexport const GMAIL_INBOX_THREAD_GET_OPERATION = \"thread_get\";\n\nexport const GMAIL_INBOX_THREAD_GET_META = gmailInboxMeta(\"action\", \"read a thread\", \"https://developers.google.com/workspace/gmail/api/reference/rest/v1/users.threads/get\");\n\n/**\n * What this node emits — the \"ingredients\" a downstream node can reference.\n *\n * fancy-flow reads `outputShape` off the kind and offers it in the variable\n * picker, so declaring it is the whole of the work: an author configuring the\n * next node picks `{{ $json.data.id }}` off a list instead of typing a path\n * and hoping.\n */\nexport const GMAIL_INBOX_THREAD_GET_OUTPUT: OutputField[] = [\n {\n \"path\": \"data.id\",\n \"type\": \"string\",\n \"description\": \"The thread id.\"\n },\n {\n \"path\": \"data.historyId\",\n \"type\": \"string\",\n \"description\": \"Gmail's change-tracking cursor as of this read.\"\n },\n {\n \"path\": \"data.messages\",\n \"type\": \"array\",\n \"description\": \"Every message in the thread, oldest first, each shaped like message_get's output.\"\n },\n {\n \"path\": \"mode\",\n \"type\": \"string\",\n \"description\": \"Which estate this ran against. Google has no sandbox, so: fake or live.\"\n }\n];\n\nexport const gmailInboxThreadGetKind: NodeKindDefinition = defineConnectorKind(GMAIL_INBOX_THREAD_GET_META, {\n name: GMAIL_INBOX_THREAD_GET_KIND,\n aliases: [\"gmail_inbox_thread_get\"],\n label: \"Gmail thread\",\n description: \"Read every message in a conversation thread, oldest first.\",\n inputs: [{ id: \"in\" }],\n outputs: [{ id: \"out\" }],\n sideEffects: \"none\",\n outputShape: GMAIL_INBOX_THREAD_GET_OUTPUT,\n configSchema: [\n {\n \"type\": \"text\",\n \"key\": \"userId\",\n \"label\": \"Mailbox\",\n \"required\": true,\n \"default\": \"me\"\n },\n {\n \"type\": \"text\",\n \"key\": \"id\",\n \"label\": \"Thread ID\",\n \"required\": true,\n \"description\": \"A message's threadId, from message_list or message_get.\"\n }\n ],\n defaultConfig: {\n \"mode\": \"auto\"\n },\n renderBody: ({ config }) =>\n summarize(GMAIL_INBOX_THREAD_GET_META, config as Record<string, unknown>, \"read a thread\"),\n});\n","/**\n * GENERATED FILE — do not edit.\n *\n * Emitted from provider/manifest.json by weaver's generator.\n * A hand-edit here is destroyed by the next protocol sync, which is worse than\n * being rejected, because it works until it silently does not. Fix\n * provider/manifest.json (or weaver's template/) and regenerate:\n *\n * npm run provider -- gmail_inbox\n */\n\n/**\n * Gmail Inbox's node kinds for fancy-flow.\n *\n * Install this on every host. The TypeScript executors live in the js\n * package's `./flow` subpath; PHP and Python hosts run their own and need only\n * this.\n */\n\nexport * from \"./service.js\";\nexport * from \"./kinds/label-list.js\";\nexport * from \"./kinds/message-get.js\";\nexport * from \"./kinds/message-list.js\";\nexport * from \"./kinds/thread-get.js\";\n\nimport type { NodeKindDefinition } from \"@particle-academy/fancy-flow/engine\";\nimport { gmailInboxLabelListKind } from \"./kinds/label-list.js\";\nimport { gmailInboxMessageGetKind } from \"./kinds/message-get.js\";\nimport { gmailInboxMessageListKind } from \"./kinds/message-list.js\";\nimport { gmailInboxThreadGetKind } from \"./kinds/thread-get.js\";\n\n/** Every Gmail Inbox kind, for a host that registers the lot. */\nexport const GMAIL_INBOX_KINDS: NodeKindDefinition[] = [\n gmailInboxLabelListKind,\n gmailInboxMessageGetKind,\n gmailInboxMessageListKind,\n gmailInboxThreadGetKind,\n];\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/service.ts","../src/kinds/history-list.ts","../src/kinds/label-list.ts","../src/kinds/mailbox-stop.ts","../src/kinds/mailbox-watch.ts","../src/kinds/message-get.ts","../src/kinds/message-list.ts","../src/kinds/thread-get.ts","../src/kinds/message-received.ts","../src/index.ts"],"names":["defineConnectorKind","summarize"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * GENERATED FILE — do not edit.\n *\n * Emitted from provider/manifest.json by weaver's generator.\n * A hand-edit here is destroyed by the next protocol sync, which is worse than\n * being rejected, because it works until it silently does not. Fix\n * provider/manifest.json (or weaver's template/) and regenerate:\n *\n * npm run provider -- gmail_inbox\n */\n\n/**\n * Gmail Inbox's identity on the authoring surface, shared by every Gmail Inbox\n * node.\n *\n * This file must import nothing from the js package: a PHP or Python project\n * installs the ui package and never that one, and the import would be a\n * dangling module the moment it did.\n *\n * ## The sandbox trap\n *\n * Gmail has no sandbox. Every read reaches the connected account's real mail.\n * The faker is the only way to develop against it without touching a real\n * mailbox.\n */\n\nimport type { ConnectorDomain, ConnectorMeta } from \"@particle-academy/fancy-flow/connectors\";\n\n/**\n * The connector API version this package was GENERATED against.\n *\n * A literal, never imported — an imported constant lets an upgrade rewrite the\n * very claim it exists to detect.\n */\nexport const CONNECTOR_API_VERSION = 1;\n\n/** The parts of a connector's identity that belong to the SERVICE, not the node. */\nexport const GMAIL_INBOX_SERVICE = {\n service: \"gmail_inbox\",\n serviceTitle: \"Gmail Inbox\",\n domain: \"email\",\n sandbox: \"none\",\n} as const satisfies Pick<ConnectorMeta, \"service\" | \"serviceTitle\" | \"domain\" | \"sandbox\">;\n\n/**\n * Every connector domain weaver knows, pinned against fancy-flow's union.\n *\n * A closed set copied into three codebases stays correct only while something\n * MAKES it: this line fails to compile the moment weaver carries a value\n * fancy-flow does not, including the values no provider uses yet.\n */\nconst WEAVER_DOMAINS: readonly ConnectorDomain[] = [\n \"payments\",\n \"commerce\",\n \"messaging\",\n \"email\",\n \"crm\",\n \"support\",\n \"storage\",\n \"calendar\",\n \"productivity\",\n \"database\",\n \"devtools\",\n \"analytics\",\n \"marketing\",\n \"ai\",\n \"forms\",\n \"hr\",\n \"geo\"\n];\nvoid WEAVER_DOMAINS;\n\n/** The credentials a Gmail Inbox connection holds. */\nexport const GMAIL_INBOX_CREDENTIALS = [\n {\n \"key\": \"clientId\",\n \"label\": \"OAuth client ID\",\n \"scope\": \"provider\",\n \"secret\": false,\n \"help\": \"A DIFFERENT OAuth app than `gmail`'s, from Google Cloud Console -> APIs & Services -> Credentials. This one requests a restricted scope and carries Google's annual CASA assessment; `gmail`'s does not. Do not reuse the same client for both.\"\n },\n {\n \"key\": \"clientSecret\",\n \"label\": \"OAuth client secret\",\n \"scope\": \"provider\",\n \"secret\": true,\n \"help\": \"The client secret for the same OAuth app. One value for the whole installation.\"\n },\n {\n \"key\": \"accessToken\",\n \"label\": \"Access token\",\n \"scope\": \"account\",\n \"secret\": true,\n \"help\": \"Per connected Google account, and it expires after ONE HOUR. The host refreshes it with the refresh token.\"\n },\n {\n \"key\": \"refreshToken\",\n \"label\": \"Refresh token\",\n \"scope\": \"account\",\n \"secret\": true,\n \"help\": \"Per connected Google account. Google issues one only when the consent request asks for offline access; without it the connection dies within the hour.\"\n },\n {\n \"key\": \"pushAudience\",\n \"label\": \"Push audience\",\n \"scope\": \"provider\",\n \"secret\": false,\n \"optional\": true,\n \"help\": \"The audience set on the Pub/Sub PUSH subscription (normally the endpoint URL your host mounts for message_received). Every push's Google-signed token must name it; an unchecked audience accepts any token Google signs for anyone. Needed only for the message_received trigger.\"\n },\n {\n \"key\": \"pushServiceAccount\",\n \"label\": \"Push service account\",\n \"scope\": \"provider\",\n \"secret\": false,\n \"optional\": true,\n \"help\": \"The service account the push subscription authenticates as (its email). Every push's token must be for exactly this account: a stranger's subscription aimed at your URL carries a token Google signed correctly, and only this check refuses it. Needed only for message_received.\"\n }\n] as const;\n\n/**\n * The OAuth2 exchange Gmail Inbox requires — DECLARED here, performed by the\n * host.\n *\n * A consent screen needs a browser, a redirect URI and somewhere to persist\n * the result, and all three belong to the host; a package that ran the dance\n * itself would have to own a web server. So this says precisely enough for a\n * host to do it.\n *\n * The access token lasts 3600 seconds. A host that never refreshes will work\n * all afternoon and be broken by morning, which is why the lifetime is stated\n * rather than left to be discovered.\n *\n * Its refresh tokens do NOT rotate: the same one is reusable, so a refresh may\n * safely be retried and may run concurrently. That is stated rather than\n * assumed because the opposite — a provider that spends the token and revokes\n * the grant on a replay — looks identical until it happens.\n */\nexport const GMAIL_INBOX_OAUTH = {\n \"flow\": \"authorization_code\",\n \"authorizeUrl\": \"https://accounts.google.com/o/oauth2/v2/auth\",\n \"tokenUrl\": \"https://oauth2.googleapis.com/token\",\n \"scopes\": [\n \"https://www.googleapis.com/auth/gmail.readonly\"\n ],\n \"accessTokenCredential\": \"accessToken\",\n \"refreshTokenCredential\": \"refreshToken\",\n \"refreshTokenRotates\": false,\n \"accessTokenTtlSeconds\": 3600\n} as const;\n\n/** Build a Gmail Inbox node's connector metadata from the operation it performs. */\nexport function gmailInboxMeta(\n role: ConnectorMeta[\"role\"],\n operation: string,\n docs: string,\n): ConnectorMeta {\n return { ...GMAIL_INBOX_SERVICE, role, operation, docs };\n}\n","/**\n * GENERATED FILE — do not edit.\n *\n * Emitted from provider/actions/history-list.json by weaver's generator.\n * A hand-edit here is destroyed by the next protocol sync, which is worse than\n * being rejected, because it works until it silently does not. Fix\n * provider/actions/history-list.json (or weaver's template/) and regenerate:\n *\n * npm run provider -- gmail_inbox\n */\n\n/**\n * List Gmail mailbox history — List what changed in a mailbox since a history\n * id: messages added or deleted, labels added or removed.\n *\n * https://developers.google.com/workspace/gmail/api/reference/rest/v1/users.history/list\n */\n\nimport type { NodeKindDefinition } from \"@particle-academy/fancy-flow/engine\";\nimport { defineConnectorKind, summarize, type OutputField } from \"@particle-academy/fancy-flow/connectors\";\nimport { gmailInboxMeta } from \"../service.js\";\n\nexport const GMAIL_INBOX_HISTORY_LIST_KIND = \"@particle-academy/gmail_inbox_history_list\";\nexport const GMAIL_INBOX_HISTORY_LIST_OPERATION = \"history_list\";\n\nexport const GMAIL_INBOX_HISTORY_LIST_META = gmailInboxMeta(\"action\", \"list mailbox history\", \"https://developers.google.com/workspace/gmail/api/reference/rest/v1/users.history/list\");\n\n/**\n * What this node emits — the \"ingredients\" a downstream node can reference.\n *\n * fancy-flow reads `outputShape` off the kind and offers it in the variable\n * picker, so declaring it is the whole of the work: an author configuring the\n * next node picks `{{ $json.data.id }}` off a list instead of typing a path\n * and hoping.\n */\nexport const GMAIL_INBOX_HISTORY_LIST_OUTPUT: OutputField[] = [\n {\n \"path\": \"data.history\",\n \"type\": \"array\",\n \"description\": \"History records, oldest first. Each has an id and messagesAdded / messagesDeleted / labelsAdded / labelsRemoved; a message there carries only id and threadId: read its content with message_get.\"\n },\n {\n \"path\": \"data.historyId\",\n \"type\": \"string\",\n \"description\": \"The mailbox's CURRENT history id. Store it as the next start ONLY when there is no nextPageToken.\"\n },\n {\n \"path\": \"data.nextPageToken\",\n \"type\": \"string\",\n \"description\": \"Present when there is another page.\"\n },\n {\n \"path\": \"mode\",\n \"type\": \"string\",\n \"description\": \"Which estate this ran against. Google has no sandbox, so: fake or live.\"\n }\n];\n\nexport const gmailInboxHistoryListKind: NodeKindDefinition = defineConnectorKind(GMAIL_INBOX_HISTORY_LIST_META, {\n name: GMAIL_INBOX_HISTORY_LIST_KIND,\n aliases: [\"gmail_inbox_history_list\"],\n label: \"List Gmail mailbox history\",\n description: \"List what changed in a mailbox since a history id: messages added or deleted, labels added or removed.\",\n inputs: [{ id: \"in\" }],\n outputs: [{ id: \"out\" }],\n sideEffects: \"none\",\n outputShape: GMAIL_INBOX_HISTORY_LIST_OUTPUT,\n configSchema: [\n {\n \"type\": \"text\",\n \"key\": \"userId\",\n \"label\": \"Mailbox\",\n \"required\": true,\n \"default\": \"me\",\n \"description\": \"`me` is the connected account and is almost always what you want.\"\n },\n {\n \"type\": \"text\",\n \"key\": \"startHistoryId\",\n \"label\": \"Start history id\",\n \"required\": true,\n \"description\": \"Changes AFTER this id. Take it from a watch, a message, or a previous list's historyId. Out of Gmail's range (typically older than a week) it answers 404.\"\n },\n {\n \"type\": \"select\",\n \"key\": \"historyTypes\",\n \"label\": \"Only this kind of change\",\n \"description\": \"Blank: every kind. messageAdded is new mail (and sent mail and drafts, unless a label narrows it).\",\n \"options\": [\n {\n \"value\": \"messageAdded\",\n \"label\": \"Messages added\"\n },\n {\n \"value\": \"messageDeleted\",\n \"label\": \"Messages deleted\"\n },\n {\n \"value\": \"labelAdded\",\n \"label\": \"Labels added\"\n },\n {\n \"value\": \"labelRemoved\",\n \"label\": \"Labels removed\"\n }\n ]\n },\n {\n \"type\": \"text\",\n \"key\": \"labelId\",\n \"label\": \"Only this label\",\n \"description\": \"Only messages with this label, e.g. INBOX for received mail.\"\n },\n {\n \"type\": \"number\",\n \"key\": \"maxResults\",\n \"label\": \"Page size\",\n \"min\": 1,\n \"max\": 500,\n \"default\": 100,\n \"description\": \"Gmail's own maximum is 500.\"\n },\n {\n \"type\": \"text\",\n \"key\": \"pageToken\",\n \"label\": \"Page token\",\n \"description\": \"From a previous page's nextPageToken.\"\n }\n ],\n defaultConfig: {\n \"mode\": \"auto\"\n },\n renderBody: ({ config }) =>\n summarize(GMAIL_INBOX_HISTORY_LIST_META, config as Record<string, unknown>, \"list mailbox history\"),\n});\n","/**\n * GENERATED FILE — do not edit.\n *\n * Emitted from provider/actions/label-list.json by weaver's generator.\n * A hand-edit here is destroyed by the next protocol sync, which is worse than\n * being rejected, because it works until it silently does not. Fix\n * provider/actions/label-list.json (or weaver's template/) and regenerate:\n *\n * npm run provider -- gmail_inbox\n */\n\n/**\n * List Gmail labels — List every label on the mailbox, system and\n * user-created.\n *\n * https://developers.google.com/workspace/gmail/api/reference/rest/v1/users.labels/list\n */\n\nimport type { NodeKindDefinition } from \"@particle-academy/fancy-flow/engine\";\nimport { defineConnectorKind, summarize, type OutputField } from \"@particle-academy/fancy-flow/connectors\";\nimport { gmailInboxMeta } from \"../service.js\";\n\nexport const GMAIL_INBOX_LABEL_LIST_KIND = \"@particle-academy/gmail_inbox_label_list\";\nexport const GMAIL_INBOX_LABEL_LIST_OPERATION = \"label_list\";\n\nexport const GMAIL_INBOX_LABEL_LIST_META = gmailInboxMeta(\"action\", \"list labels\", \"https://developers.google.com/workspace/gmail/api/reference/rest/v1/users.labels/list\");\n\n/**\n * What this node emits — the \"ingredients\" a downstream node can reference.\n *\n * fancy-flow reads `outputShape` off the kind and offers it in the variable\n * picker, so declaring it is the whole of the work: an author configuring the\n * next node picks `{{ $json.data.id }}` off a list instead of typing a path\n * and hoping.\n */\nexport const GMAIL_INBOX_LABEL_LIST_OUTPUT: OutputField[] = [\n {\n \"path\": \"data.labels\",\n \"type\": \"array\",\n \"description\": \"Each with id, name and type (system or user). messagesTotal/messagesUnread/threadsTotal/threadsUnread are part of Label's schema but not confirmed present on every list row -- read one label with labels.get if a count comes back missing.\"\n }\n];\n\nexport const gmailInboxLabelListKind: NodeKindDefinition = defineConnectorKind(GMAIL_INBOX_LABEL_LIST_META, {\n name: GMAIL_INBOX_LABEL_LIST_KIND,\n aliases: [\"gmail_inbox_label_list\"],\n label: \"List Gmail labels\",\n description: \"List every label on the mailbox, system and user-created.\",\n inputs: [{ id: \"in\" }],\n outputs: [{ id: \"out\" }],\n sideEffects: \"none\",\n outputShape: GMAIL_INBOX_LABEL_LIST_OUTPUT,\n configSchema: [\n {\n \"type\": \"text\",\n \"key\": \"userId\",\n \"label\": \"Mailbox\",\n \"required\": true,\n \"default\": \"me\"\n }\n ],\n defaultConfig: {\n \"mode\": \"auto\"\n },\n renderBody: ({ config }) =>\n summarize(GMAIL_INBOX_LABEL_LIST_META, config as Record<string, unknown>, \"list labels\"),\n});\n","/**\n * GENERATED FILE — do not edit.\n *\n * Emitted from provider/actions/mailbox-stop.json by weaver's generator.\n * A hand-edit here is destroyed by the next protocol sync, which is worse than\n * being rejected, because it works until it silently does not. Fix\n * provider/actions/mailbox-stop.json (or weaver's template/) and regenerate:\n *\n * npm run provider -- gmail_inbox\n */\n\n/**\n * Stop watching a Gmail mailbox — Turn off push notifications for a mailbox.\n *\n * https://developers.google.com/workspace/gmail/api/reference/rest/v1/users/stop\n */\n\nimport type { NodeKindDefinition } from \"@particle-academy/fancy-flow/engine\";\nimport { defineConnectorKind, summarize, type OutputField } from \"@particle-academy/fancy-flow/connectors\";\nimport { gmailInboxMeta } from \"../service.js\";\n\nexport const GMAIL_INBOX_MAILBOX_STOP_KIND = \"@particle-academy/gmail_inbox_mailbox_stop\";\nexport const GMAIL_INBOX_MAILBOX_STOP_OPERATION = \"mailbox_stop\";\n\nexport const GMAIL_INBOX_MAILBOX_STOP_META = gmailInboxMeta(\"action\", \"stop watching\", \"https://developers.google.com/workspace/gmail/api/reference/rest/v1/users/stop\");\n\n/**\n * What this node emits — the \"ingredients\" a downstream node can reference.\n *\n * fancy-flow reads `outputShape` off the kind and offers it in the variable\n * picker, so declaring it is the whole of the work: an author configuring the\n * next node picks `{{ $json.data.id }}` off a list instead of typing a path\n * and hoping.\n */\nexport const GMAIL_INBOX_MAILBOX_STOP_OUTPUT: OutputField[] = [\n {\n \"path\": \"mode\",\n \"type\": \"string\",\n \"description\": \"Which estate this ran against. Google has no sandbox, so: fake or live.\"\n }\n];\n\nexport const gmailInboxMailboxStopKind: NodeKindDefinition = defineConnectorKind(GMAIL_INBOX_MAILBOX_STOP_META, {\n name: GMAIL_INBOX_MAILBOX_STOP_KIND,\n aliases: [\"gmail_inbox_mailbox_stop\"],\n label: \"Stop watching a Gmail mailbox\",\n description: \"Turn off push notifications for a mailbox.\",\n inputs: [{ id: \"in\" }],\n outputs: [{ id: \"out\" }],\n sideEffects: \"idempotent\",\n outputShape: GMAIL_INBOX_MAILBOX_STOP_OUTPUT,\n configSchema: [\n {\n \"type\": \"text\",\n \"key\": \"userId\",\n \"label\": \"Mailbox\",\n \"required\": true,\n \"default\": \"me\",\n \"description\": \"`me` is the connected account and is almost always what you want.\"\n }\n ],\n defaultConfig: {\n \"mode\": \"auto\"\n },\n renderBody: ({ config }) =>\n summarize(GMAIL_INBOX_MAILBOX_STOP_META, config as Record<string, unknown>, \"stop watching\"),\n});\n","/**\n * GENERATED FILE — do not edit.\n *\n * Emitted from provider/actions/mailbox-watch.json by weaver's generator.\n * A hand-edit here is destroyed by the next protocol sync, which is worse than\n * being rejected, because it works until it silently does not. Fix\n * provider/actions/mailbox-watch.json (or weaver's template/) and regenerate:\n *\n * npm run provider -- gmail_inbox\n */\n\n/**\n * Watch a Gmail mailbox — Start (or renew) push notifications for a mailbox to\n * a Cloud Pub/Sub topic.\n *\n * https://developers.google.com/workspace/gmail/api/reference/rest/v1/users/watch\n */\n\nimport type { NodeKindDefinition } from \"@particle-academy/fancy-flow/engine\";\nimport { defineConnectorKind, summarize, type OutputField } from \"@particle-academy/fancy-flow/connectors\";\nimport { gmailInboxMeta } from \"../service.js\";\n\nexport const GMAIL_INBOX_MAILBOX_WATCH_KIND = \"@particle-academy/gmail_inbox_mailbox_watch\";\nexport const GMAIL_INBOX_MAILBOX_WATCH_OPERATION = \"mailbox_watch\";\n\nexport const GMAIL_INBOX_MAILBOX_WATCH_META = gmailInboxMeta(\"action\", \"watch a mailbox\", \"https://developers.google.com/workspace/gmail/api/reference/rest/v1/users/watch\");\n\n/**\n * What this node emits — the \"ingredients\" a downstream node can reference.\n *\n * fancy-flow reads `outputShape` off the kind and offers it in the variable\n * picker, so declaring it is the whole of the work: an author configuring the\n * next node picks `{{ $json.data.id }}` off a list instead of typing a path\n * and hoping.\n */\nexport const GMAIL_INBOX_MAILBOX_WATCH_OUTPUT: OutputField[] = [\n {\n \"path\": \"data.historyId\",\n \"type\": \"string\",\n \"description\": \"The mailbox's CURRENT history id: seed the trigger's stored cursor from it.\"\n },\n {\n \"path\": \"data.expiration\",\n \"type\": \"string\",\n \"description\": \"When Gmail stops pushing, in epoch MILLISECONDS. Renew before it; Google recommends daily.\"\n },\n {\n \"path\": \"mode\",\n \"type\": \"string\",\n \"description\": \"Which estate this ran against. Google has no sandbox, so: fake or live.\"\n }\n];\n\nexport const gmailInboxMailboxWatchKind: NodeKindDefinition = defineConnectorKind(GMAIL_INBOX_MAILBOX_WATCH_META, {\n name: GMAIL_INBOX_MAILBOX_WATCH_KIND,\n aliases: [\"gmail_inbox_mailbox_watch\"],\n label: \"Watch a Gmail mailbox\",\n description: \"Start (or renew) push notifications for a mailbox to a Cloud Pub/Sub topic.\",\n inputs: [{ id: \"in\" }],\n outputs: [{ id: \"out\" }],\n sideEffects: \"idempotent\",\n outputShape: GMAIL_INBOX_MAILBOX_WATCH_OUTPUT,\n configSchema: [\n {\n \"type\": \"text\",\n \"key\": \"userId\",\n \"label\": \"Mailbox\",\n \"required\": true,\n \"default\": \"me\",\n \"description\": \"`me` is the connected account and is almost always what you want.\"\n },\n {\n \"type\": \"text\",\n \"key\": \"topicName\",\n \"label\": \"Pub/Sub topic\",\n \"required\": true,\n \"placeholder\": \"projects/my-project/topics/gmail-push\",\n \"description\": \"The full topic name, in YOUR app's own Google Cloud project: Google requires its project id to match the project whose OAuth client makes this call. One topic serves every mailbox.\"\n },\n {\n \"type\": \"text\",\n \"key\": \"labelIds\",\n \"label\": \"Only these labels\",\n \"description\": \"Comma-separated label ids to restrict notifications to (e.g. INBOX). Blank: every change is pushed.\"\n },\n {\n \"type\": \"select\",\n \"key\": \"labelFilterBehavior\",\n \"label\": \"Label filter\",\n \"description\": \"Whether the labels above are the ONLY ones notified (include) or the ones NOT notified (exclude).\",\n \"options\": [\n {\n \"value\": \"include\",\n \"label\": \"Only these labels\"\n },\n {\n \"value\": \"exclude\",\n \"label\": \"Every label except these\"\n }\n ]\n }\n ],\n defaultConfig: {\n \"mode\": \"auto\"\n },\n renderBody: ({ config }) =>\n summarize(GMAIL_INBOX_MAILBOX_WATCH_META, config as Record<string, unknown>, \"watch a mailbox\"),\n});\n","/**\n * GENERATED FILE — do not edit.\n *\n * Emitted from provider/actions/message-get.json by weaver's generator.\n * A hand-edit here is destroyed by the next protocol sync, which is worse than\n * being rejected, because it works until it silently does not. Fix\n * provider/actions/message-get.json (or weaver's template/) and regenerate:\n *\n * npm run provider -- gmail_inbox\n */\n\n/**\n * Gmail message — Read one message's headers and preview. The body's\n * plain/HTML text is NOT decoded -- see the raw payload for that.\n *\n * https://developers.google.com/workspace/gmail/api/reference/rest/v1/users.messages/get\n */\n\nimport type { NodeKindDefinition } from \"@particle-academy/fancy-flow/engine\";\nimport { defineConnectorKind, summarize, type OutputField } from \"@particle-academy/fancy-flow/connectors\";\nimport { gmailInboxMeta } from \"../service.js\";\n\nexport const GMAIL_INBOX_MESSAGE_GET_KIND = \"@particle-academy/gmail_inbox_message_get\";\nexport const GMAIL_INBOX_MESSAGE_GET_OPERATION = \"message_get\";\n\nexport const GMAIL_INBOX_MESSAGE_GET_META = gmailInboxMeta(\"action\", \"read a message\", \"https://developers.google.com/workspace/gmail/api/reference/rest/v1/users.messages/get\");\n\n/**\n * What this node emits — the \"ingredients\" a downstream node can reference.\n *\n * fancy-flow reads `outputShape` off the kind and offers it in the variable\n * picker, so declaring it is the whole of the work: an author configuring the\n * next node picks `{{ $json.data.id }}` off a list instead of typing a path\n * and hoping.\n */\nexport const GMAIL_INBOX_MESSAGE_GET_OUTPUT: OutputField[] = [\n {\n \"path\": \"data.id\",\n \"type\": \"string\",\n \"description\": \"The message id.\"\n },\n {\n \"path\": \"data.threadId\",\n \"type\": \"string\",\n \"description\": \"The thread this message belongs to.\"\n },\n {\n \"path\": \"data.labelIds\",\n \"type\": \"array\",\n \"description\": \"System and user label ids currently on this message.\"\n },\n {\n \"path\": \"data.snippet\",\n \"type\": \"string\",\n \"description\": \"Gmail's own short plain-text preview of the body -- a few hundred characters, not the whole message.\"\n },\n {\n \"path\": \"data.internalDate\",\n \"type\": \"string\",\n \"description\": \"Unix epoch MILLISECONDS, as a string -- when Gmail received it, which can differ from the Date header.\"\n },\n {\n \"path\": \"data.payload.headers\",\n \"type\": \"array\",\n \"description\": \"Every RFC 2822 header as { name, value }, unparsed. From/To/Subject/Date live here.\"\n },\n {\n \"path\": \"data.payload\",\n \"type\": \"unknown\",\n \"description\": \"The full MIME tree, raw -- mimeType, body (base64url in body.data for a leaf part), and nested parts for a multipart message. Decode it yourself for plain-text or HTML content; this connector does not flatten it.\"\n },\n {\n \"path\": \"mode\",\n \"type\": \"string\",\n \"description\": \"Which estate this ran against. Google has no sandbox, so: fake or live.\"\n }\n];\n\nexport const gmailInboxMessageGetKind: NodeKindDefinition = defineConnectorKind(GMAIL_INBOX_MESSAGE_GET_META, {\n name: GMAIL_INBOX_MESSAGE_GET_KIND,\n aliases: [\"gmail_inbox_message_get\"],\n label: \"Gmail message\",\n description: \"Read one message's headers and preview. The body's plain/HTML text is NOT decoded -- see the raw payload for that.\",\n inputs: [{ id: \"in\" }],\n outputs: [{ id: \"out\" }],\n sideEffects: \"none\",\n outputShape: GMAIL_INBOX_MESSAGE_GET_OUTPUT,\n configSchema: [\n {\n \"type\": \"text\",\n \"key\": \"userId\",\n \"label\": \"Mailbox\",\n \"required\": true,\n \"default\": \"me\"\n },\n {\n \"type\": \"text\",\n \"key\": \"id\",\n \"label\": \"Message ID\",\n \"required\": true,\n \"description\": \"From message_list, or another node's output.\"\n }\n ],\n defaultConfig: {\n \"mode\": \"auto\"\n },\n renderBody: ({ config }) =>\n summarize(GMAIL_INBOX_MESSAGE_GET_META, config as Record<string, unknown>, \"read a message\"),\n});\n","/**\n * GENERATED FILE — do not edit.\n *\n * Emitted from provider/actions/message-list.json by weaver's generator.\n * A hand-edit here is destroyed by the next protocol sync, which is worse than\n * being rejected, because it works until it silently does not. Fix\n * provider/actions/message-list.json (or weaver's template/) and regenerate:\n *\n * npm run provider -- gmail_inbox\n */\n\n/**\n * List Gmail messages — List message ids matching a search, newest first.\n *\n * https://developers.google.com/workspace/gmail/api/reference/rest/v1/users.messages/list\n */\n\nimport type { NodeKindDefinition } from \"@particle-academy/fancy-flow/engine\";\nimport { defineConnectorKind, summarize, type OutputField } from \"@particle-academy/fancy-flow/connectors\";\nimport { gmailInboxMeta } from \"../service.js\";\n\nexport const GMAIL_INBOX_MESSAGE_LIST_KIND = \"@particle-academy/gmail_inbox_message_list\";\nexport const GMAIL_INBOX_MESSAGE_LIST_OPERATION = \"message_list\";\n\nexport const GMAIL_INBOX_MESSAGE_LIST_META = gmailInboxMeta(\"action\", \"list messages\", \"https://developers.google.com/workspace/gmail/api/reference/rest/v1/users.messages/list\");\n\n/**\n * What this node emits — the \"ingredients\" a downstream node can reference.\n *\n * fancy-flow reads `outputShape` off the kind and offers it in the variable\n * picker, so declaring it is the whole of the work: an author configuring the\n * next node picks `{{ $json.data.id }}` off a list instead of typing a path\n * and hoping.\n */\nexport const GMAIL_INBOX_MESSAGE_LIST_OUTPUT: OutputField[] = [\n {\n \"path\": \"data.messages\",\n \"type\": \"array\",\n \"description\": \"Each row is { id, threadId } only. Read a message's content with message_get.\"\n },\n {\n \"path\": \"data.nextPageToken\",\n \"type\": \"string\",\n \"description\": \"Present when there is another page.\"\n },\n {\n \"path\": \"data.resultSizeEstimate\",\n \"type\": \"number\",\n \"description\": \"Gmail's own word for it: an ESTIMATE, not an exact count.\"\n },\n {\n \"path\": \"mode\",\n \"type\": \"string\",\n \"description\": \"Which estate this ran against. Google has no sandbox, so: fake or live.\"\n }\n];\n\nexport const gmailInboxMessageListKind: NodeKindDefinition = defineConnectorKind(GMAIL_INBOX_MESSAGE_LIST_META, {\n name: GMAIL_INBOX_MESSAGE_LIST_KIND,\n aliases: [\"gmail_inbox_message_list\"],\n label: \"List Gmail messages\",\n description: \"List message ids matching a search, newest first.\",\n inputs: [{ id: \"in\" }],\n outputs: [{ id: \"out\" }],\n sideEffects: \"none\",\n outputShape: GMAIL_INBOX_MESSAGE_LIST_OUTPUT,\n configSchema: [\n {\n \"type\": \"text\",\n \"key\": \"userId\",\n \"label\": \"Mailbox\",\n \"required\": true,\n \"default\": \"me\",\n \"description\": \"`me` is the connected account and is almost always what you want.\"\n },\n {\n \"type\": \"text\",\n \"key\": \"q\",\n \"label\": \"Search\",\n \"description\": \"Gmail's own search syntax, exactly as typed into the Gmail search box -- e.g. \\\"from:ada@example.test has:attachment newer_than:7d\\\". Leave blank to list everything.\"\n },\n {\n \"type\": \"text\",\n \"key\": \"labelId\",\n \"label\": \"Label ID\",\n \"description\": \"Only messages with this label -- e.g. INBOX, or a label_list id. Gmail's own query parameter accepts several, repeated; this connector offers one for now -- combine more in the search field above instead, using Gmail's own label: search operator.\"\n },\n {\n \"type\": \"switch\",\n \"key\": \"includeSpamTrash\",\n \"label\": \"Include spam and trash\",\n \"default\": false\n },\n {\n \"type\": \"number\",\n \"key\": \"maxResults\",\n \"label\": \"Page size\",\n \"min\": 1,\n \"max\": 500,\n \"default\": 100,\n \"description\": \"Gmail's own maximum is 500.\"\n },\n {\n \"type\": \"text\",\n \"key\": \"pageToken\",\n \"label\": \"Page token\",\n \"description\": \"From a previous page's nextPageToken.\"\n }\n ],\n defaultConfig: {\n \"mode\": \"auto\"\n },\n renderBody: ({ config }) =>\n summarize(GMAIL_INBOX_MESSAGE_LIST_META, config as Record<string, unknown>, \"list messages\"),\n});\n","/**\n * GENERATED FILE — do not edit.\n *\n * Emitted from provider/actions/thread-get.json by weaver's generator.\n * A hand-edit here is destroyed by the next protocol sync, which is worse than\n * being rejected, because it works until it silently does not. Fix\n * provider/actions/thread-get.json (or weaver's template/) and regenerate:\n *\n * npm run provider -- gmail_inbox\n */\n\n/**\n * Gmail thread — Read every message in a conversation thread, oldest first.\n *\n * https://developers.google.com/workspace/gmail/api/reference/rest/v1/users.threads/get\n */\n\nimport type { NodeKindDefinition } from \"@particle-academy/fancy-flow/engine\";\nimport { defineConnectorKind, summarize, type OutputField } from \"@particle-academy/fancy-flow/connectors\";\nimport { gmailInboxMeta } from \"../service.js\";\n\nexport const GMAIL_INBOX_THREAD_GET_KIND = \"@particle-academy/gmail_inbox_thread_get\";\nexport const GMAIL_INBOX_THREAD_GET_OPERATION = \"thread_get\";\n\nexport const GMAIL_INBOX_THREAD_GET_META = gmailInboxMeta(\"action\", \"read a thread\", \"https://developers.google.com/workspace/gmail/api/reference/rest/v1/users.threads/get\");\n\n/**\n * What this node emits — the \"ingredients\" a downstream node can reference.\n *\n * fancy-flow reads `outputShape` off the kind and offers it in the variable\n * picker, so declaring it is the whole of the work: an author configuring the\n * next node picks `{{ $json.data.id }}` off a list instead of typing a path\n * and hoping.\n */\nexport const GMAIL_INBOX_THREAD_GET_OUTPUT: OutputField[] = [\n {\n \"path\": \"data.id\",\n \"type\": \"string\",\n \"description\": \"The thread id.\"\n },\n {\n \"path\": \"data.historyId\",\n \"type\": \"string\",\n \"description\": \"Gmail's change-tracking cursor as of this read.\"\n },\n {\n \"path\": \"data.messages\",\n \"type\": \"array\",\n \"description\": \"Every message in the thread, oldest first, each shaped like message_get's output.\"\n },\n {\n \"path\": \"mode\",\n \"type\": \"string\",\n \"description\": \"Which estate this ran against. Google has no sandbox, so: fake or live.\"\n }\n];\n\nexport const gmailInboxThreadGetKind: NodeKindDefinition = defineConnectorKind(GMAIL_INBOX_THREAD_GET_META, {\n name: GMAIL_INBOX_THREAD_GET_KIND,\n aliases: [\"gmail_inbox_thread_get\"],\n label: \"Gmail thread\",\n description: \"Read every message in a conversation thread, oldest first.\",\n inputs: [{ id: \"in\" }],\n outputs: [{ id: \"out\" }],\n sideEffects: \"none\",\n outputShape: GMAIL_INBOX_THREAD_GET_OUTPUT,\n configSchema: [\n {\n \"type\": \"text\",\n \"key\": \"userId\",\n \"label\": \"Mailbox\",\n \"required\": true,\n \"default\": \"me\"\n },\n {\n \"type\": \"text\",\n \"key\": \"id\",\n \"label\": \"Thread ID\",\n \"required\": true,\n \"description\": \"A message's threadId, from message_list or message_get.\"\n }\n ],\n defaultConfig: {\n \"mode\": \"auto\"\n },\n renderBody: ({ config }) =>\n summarize(GMAIL_INBOX_THREAD_GET_META, config as Record<string, unknown>, \"read a thread\"),\n});\n","/**\n * GENERATED FILE — do not edit.\n *\n * Emitted from provider/triggers/message-received.json by weaver's generator.\n * A hand-edit here is destroyed by the next protocol sync, which is worse than\n * being rejected, because it works until it silently does not. Fix\n * provider/triggers/message-received.json (or weaver's template/) and regenerate:\n *\n * npm run provider -- gmail_inbox\n */\n\n/**\n * Gmail message received — Start when new mail arrives in a watched mailbox,\n * with every new message since the last run.\n *\n * https://developers.google.com/workspace/gmail/api/guides/push\n *\n * Delivery: subscription. In YOUR app's Google Cloud project (the one owning\n * the OAuth client): create a Pub/Sub topic, grant publish on it to\n * gmail-api-push@system.gserviceaccount.com, and create a PUSH subscription to\n * the route your host mounts for this trigger, with authentication on (a\n * service account you choose; the endpoint URL as the audience). Put that\n * audience and service account on the connection as pushAudience and\n * pushServiceAccount, and fetch Google's signing keys for verification. Then\n * call mailbox_watch with the topic for each mailbox and store its historyId\n * as the trigger's cursor (startHistoryId); renew the watch daily. ONE topic\n * serves every mailbox: route each push by its emailAddress, and only after\n * the token verifies, to a mailbox you watched; drop an unmapped address with\n * a 2xx. Persist cursor.next when a run succeeds. On cursor-expired or\n * cursor-overflow, watch again for a fresh historyId FIRST, then list with\n * message_list using the resyncQuery, and match it against the mail you\n * already handled. This trigger never changes read state.\n */\n\nimport type { NodeKindDefinition } from \"@particle-academy/fancy-flow/engine\";\nimport { defineConnectorKind, summarize, type OutputField } from \"@particle-academy/fancy-flow/connectors\";\nimport { gmailInboxMeta } from \"../service.js\";\n\nexport const GMAIL_INBOX_MESSAGE_RECEIVED_TRIGGER_KIND = \"@particle-academy/gmail_inbox_message_received_trigger\";\nexport const GMAIL_INBOX_MESSAGE_RECEIVED_TRIGGER_OPERATION = \"message_received\";\n\nexport const GMAIL_INBOX_MESSAGE_RECEIVED_TRIGGER_META = gmailInboxMeta(\"trigger\", \"new mail\", \"https://developers.google.com/workspace/gmail/api/guides/push\");\n\n/**\n * What this node emits — the \"ingredients\" a downstream node can reference.\n *\n * fancy-flow reads `outputShape` off the kind and offers it in the variable\n * picker, so declaring it is the whole of the work: an author configuring the\n * next node picks `{{ $json.data.id }}` off a list instead of typing a path\n * and hoping.\n */\nexport const GMAIL_INBOX_MESSAGE_RECEIVED_TRIGGER_OUTPUT: OutputField[] = [\n {\n \"path\": \"messageId\",\n \"type\": \"string\",\n \"description\": \"Pub/Sub's id for this push. The same push may be delivered more than once.\"\n },\n {\n \"path\": \"publishTime\",\n \"type\": \"string\",\n \"description\": \"When Pub/Sub published it.\"\n },\n {\n \"path\": \"data.emailAddress\",\n \"type\": \"string\",\n \"description\": \"The mailbox. The ONLY routing key, and only after verification.\"\n },\n {\n \"path\": \"data.historyId\",\n \"type\": \"number\",\n \"description\": \"The mailbox's new position, as Gmail pushed it. The read below starts from the STORED cursor, not this.\"\n },\n {\n \"path\": \"history.history\",\n \"type\": \"array\",\n \"description\": \"Every change since the stored cursor, all pages, oldest first. New mail is history[].messagesAdded[].message {id, threadId}: read each with message_get.\"\n },\n {\n \"path\": \"history.historyId\",\n \"type\": \"string\",\n \"description\": \"The mailbox's position after the read.\"\n },\n {\n \"path\": \"history.nextPageToken\",\n \"type\": \"string\",\n \"description\": \"Always absent here: every page was read.\"\n },\n {\n \"path\": \"cursor.used\",\n \"type\": \"string\",\n \"description\": \"The stored cursor this read started from.\"\n },\n {\n \"path\": \"cursor.next\",\n \"type\": \"string\",\n \"description\": \"The cursor to store once this run succeeds (null: keep the one used).\"\n }\n];\n\nexport const gmailInboxMessageReceivedTriggerKind: NodeKindDefinition = defineConnectorKind(GMAIL_INBOX_MESSAGE_RECEIVED_TRIGGER_META, {\n name: GMAIL_INBOX_MESSAGE_RECEIVED_TRIGGER_KIND,\n aliases: [\"gmail_inbox_message_received_trigger\"],\n label: \"Gmail message received\",\n description: \"Start when new mail arrives in a watched mailbox, with every new message since the last run.\",\n inputs: [],\n outputs: [{ id: \"out\" }],\n sideEffects: \"none\",\n outputShape: GMAIL_INBOX_MESSAGE_RECEIVED_TRIGGER_OUTPUT,\n configSchema: [\n {\n \"type\": \"text\",\n \"key\": \"startHistoryId\",\n \"label\": \"Stored cursor\",\n \"description\": \"The host fills this on every run from the cursor it stored: seeded from mailbox_watch's historyId, then cursor.next after each successful run.\"\n },\n {\n \"type\": \"number\",\n \"key\": \"resyncWindowDays\",\n \"label\": \"Resync window (days)\",\n \"min\": 1,\n \"max\": 30,\n \"description\": \"How far back the host re-lists after a lapse, never the whole mailbox.\"\n },\n {\n \"type\": \"text\",\n \"key\": \"labelId\",\n \"label\": \"Only this label\",\n \"description\": \"INBOX: received mail only. Blank: every label, including sent mail and drafts.\"\n },\n {\n \"type\": \"select\",\n \"key\": \"historyTypes\",\n \"label\": \"Only this kind of change\",\n \"options\": [\n {\n \"value\": \"messageAdded\",\n \"label\": \"New messages\"\n },\n {\n \"value\": \"messageDeleted\",\n \"label\": \"Deleted messages\"\n },\n {\n \"value\": \"labelAdded\",\n \"label\": \"Labels added\"\n },\n {\n \"value\": \"labelRemoved\",\n \"label\": \"Labels removed\"\n }\n ]\n }\n ],\n defaultConfig: {\n \"mode\": \"auto\",\n \"resyncWindowDays\": 7,\n \"labelId\": \"INBOX\",\n \"historyTypes\": \"messageAdded\"\n },\n renderBody: ({ config }) =>\n summarize(GMAIL_INBOX_MESSAGE_RECEIVED_TRIGGER_META, config as Record<string, unknown>, \"new mail\"),\n});\n","/**\n * GENERATED FILE — do not edit.\n *\n * Emitted from provider/manifest.json by weaver's generator.\n * A hand-edit here is destroyed by the next protocol sync, which is worse than\n * being rejected, because it works until it silently does not. Fix\n * provider/manifest.json (or weaver's template/) and regenerate:\n *\n * npm run provider -- gmail_inbox\n */\n\n/**\n * Gmail Inbox's node kinds for fancy-flow.\n *\n * Install this on every host. The TypeScript executors live in the js\n * package's `./flow` subpath; PHP and Python hosts run their own and need only\n * this.\n */\n\nexport * from \"./service.js\";\nexport * from \"./kinds/history-list.js\";\nexport * from \"./kinds/label-list.js\";\nexport * from \"./kinds/mailbox-stop.js\";\nexport * from \"./kinds/mailbox-watch.js\";\nexport * from \"./kinds/message-get.js\";\nexport * from \"./kinds/message-list.js\";\nexport * from \"./kinds/thread-get.js\";\nexport * from \"./kinds/message-received.js\";\n\nimport type { NodeKindDefinition } from \"@particle-academy/fancy-flow/engine\";\nimport { gmailInboxHistoryListKind } from \"./kinds/history-list.js\";\nimport { gmailInboxLabelListKind } from \"./kinds/label-list.js\";\nimport { gmailInboxMailboxStopKind } from \"./kinds/mailbox-stop.js\";\nimport { gmailInboxMailboxWatchKind } from \"./kinds/mailbox-watch.js\";\nimport { gmailInboxMessageGetKind } from \"./kinds/message-get.js\";\nimport { gmailInboxMessageListKind } from \"./kinds/message-list.js\";\nimport { gmailInboxThreadGetKind } from \"./kinds/thread-get.js\";\nimport { gmailInboxMessageReceivedTriggerKind } from \"./kinds/message-received.js\";\n\n/** Every Gmail Inbox kind, for a host that registers the lot. */\nexport const GMAIL_INBOX_KINDS: NodeKindDefinition[] = [\n gmailInboxHistoryListKind,\n gmailInboxLabelListKind,\n gmailInboxMailboxStopKind,\n gmailInboxMailboxWatchKind,\n gmailInboxMessageGetKind,\n gmailInboxMessageListKind,\n gmailInboxThreadGetKind,\n gmailInboxMessageReceivedTriggerKind,\n];\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -66,6 +66,20 @@ declare const GMAIL_INBOX_CREDENTIALS: readonly [{
|
|
|
66
66
|
readonly scope: "account";
|
|
67
67
|
readonly secret: true;
|
|
68
68
|
readonly help: "Per connected Google account. Google issues one only when the consent request asks for offline access; without it the connection dies within the hour.";
|
|
69
|
+
}, {
|
|
70
|
+
readonly key: "pushAudience";
|
|
71
|
+
readonly label: "Push audience";
|
|
72
|
+
readonly scope: "provider";
|
|
73
|
+
readonly secret: false;
|
|
74
|
+
readonly optional: true;
|
|
75
|
+
readonly help: "The audience set on the Pub/Sub PUSH subscription (normally the endpoint URL your host mounts for message_received). Every push's Google-signed token must name it; an unchecked audience accepts any token Google signs for anyone. Needed only for the message_received trigger.";
|
|
76
|
+
}, {
|
|
77
|
+
readonly key: "pushServiceAccount";
|
|
78
|
+
readonly label: "Push service account";
|
|
79
|
+
readonly scope: "provider";
|
|
80
|
+
readonly secret: false;
|
|
81
|
+
readonly optional: true;
|
|
82
|
+
readonly help: "The service account the push subscription authenticates as (its email). Every push's token must be for exactly this account: a stranger's subscription aimed at your URL carries a token Google signed correctly, and only this check refuses it. Needed only for message_received.";
|
|
69
83
|
}];
|
|
70
84
|
/**
|
|
71
85
|
* The OAuth2 exchange Gmail Inbox requires — DECLARED here, performed by the
|
|
@@ -98,6 +112,20 @@ declare const GMAIL_INBOX_OAUTH: {
|
|
|
98
112
|
/** Build a Gmail Inbox node's connector metadata from the operation it performs. */
|
|
99
113
|
declare function gmailInboxMeta(role: ConnectorMeta["role"], operation: string, docs: string): ConnectorMeta;
|
|
100
114
|
|
|
115
|
+
declare const GMAIL_INBOX_HISTORY_LIST_KIND = "@particle-academy/gmail_inbox_history_list";
|
|
116
|
+
declare const GMAIL_INBOX_HISTORY_LIST_OPERATION = "history_list";
|
|
117
|
+
declare const GMAIL_INBOX_HISTORY_LIST_META: _particle_academy_fancy_flow_connectors.ConnectorMeta;
|
|
118
|
+
/**
|
|
119
|
+
* What this node emits — the "ingredients" a downstream node can reference.
|
|
120
|
+
*
|
|
121
|
+
* fancy-flow reads `outputShape` off the kind and offers it in the variable
|
|
122
|
+
* picker, so declaring it is the whole of the work: an author configuring the
|
|
123
|
+
* next node picks `{{ $json.data.id }}` off a list instead of typing a path
|
|
124
|
+
* and hoping.
|
|
125
|
+
*/
|
|
126
|
+
declare const GMAIL_INBOX_HISTORY_LIST_OUTPUT: OutputField[];
|
|
127
|
+
declare const gmailInboxHistoryListKind: NodeKindDefinition;
|
|
128
|
+
|
|
101
129
|
declare const GMAIL_INBOX_LABEL_LIST_KIND = "@particle-academy/gmail_inbox_label_list";
|
|
102
130
|
declare const GMAIL_INBOX_LABEL_LIST_OPERATION = "label_list";
|
|
103
131
|
declare const GMAIL_INBOX_LABEL_LIST_META: _particle_academy_fancy_flow_connectors.ConnectorMeta;
|
|
@@ -112,6 +140,34 @@ declare const GMAIL_INBOX_LABEL_LIST_META: _particle_academy_fancy_flow_connecto
|
|
|
112
140
|
declare const GMAIL_INBOX_LABEL_LIST_OUTPUT: OutputField[];
|
|
113
141
|
declare const gmailInboxLabelListKind: NodeKindDefinition;
|
|
114
142
|
|
|
143
|
+
declare const GMAIL_INBOX_MAILBOX_STOP_KIND = "@particle-academy/gmail_inbox_mailbox_stop";
|
|
144
|
+
declare const GMAIL_INBOX_MAILBOX_STOP_OPERATION = "mailbox_stop";
|
|
145
|
+
declare const GMAIL_INBOX_MAILBOX_STOP_META: _particle_academy_fancy_flow_connectors.ConnectorMeta;
|
|
146
|
+
/**
|
|
147
|
+
* What this node emits — the "ingredients" a downstream node can reference.
|
|
148
|
+
*
|
|
149
|
+
* fancy-flow reads `outputShape` off the kind and offers it in the variable
|
|
150
|
+
* picker, so declaring it is the whole of the work: an author configuring the
|
|
151
|
+
* next node picks `{{ $json.data.id }}` off a list instead of typing a path
|
|
152
|
+
* and hoping.
|
|
153
|
+
*/
|
|
154
|
+
declare const GMAIL_INBOX_MAILBOX_STOP_OUTPUT: OutputField[];
|
|
155
|
+
declare const gmailInboxMailboxStopKind: NodeKindDefinition;
|
|
156
|
+
|
|
157
|
+
declare const GMAIL_INBOX_MAILBOX_WATCH_KIND = "@particle-academy/gmail_inbox_mailbox_watch";
|
|
158
|
+
declare const GMAIL_INBOX_MAILBOX_WATCH_OPERATION = "mailbox_watch";
|
|
159
|
+
declare const GMAIL_INBOX_MAILBOX_WATCH_META: _particle_academy_fancy_flow_connectors.ConnectorMeta;
|
|
160
|
+
/**
|
|
161
|
+
* What this node emits — the "ingredients" a downstream node can reference.
|
|
162
|
+
*
|
|
163
|
+
* fancy-flow reads `outputShape` off the kind and offers it in the variable
|
|
164
|
+
* picker, so declaring it is the whole of the work: an author configuring the
|
|
165
|
+
* next node picks `{{ $json.data.id }}` off a list instead of typing a path
|
|
166
|
+
* and hoping.
|
|
167
|
+
*/
|
|
168
|
+
declare const GMAIL_INBOX_MAILBOX_WATCH_OUTPUT: OutputField[];
|
|
169
|
+
declare const gmailInboxMailboxWatchKind: NodeKindDefinition;
|
|
170
|
+
|
|
115
171
|
declare const GMAIL_INBOX_MESSAGE_GET_KIND = "@particle-academy/gmail_inbox_message_get";
|
|
116
172
|
declare const GMAIL_INBOX_MESSAGE_GET_OPERATION = "message_get";
|
|
117
173
|
declare const GMAIL_INBOX_MESSAGE_GET_META: _particle_academy_fancy_flow_connectors.ConnectorMeta;
|
|
@@ -154,6 +210,20 @@ declare const GMAIL_INBOX_THREAD_GET_META: _particle_academy_fancy_flow_connecto
|
|
|
154
210
|
declare const GMAIL_INBOX_THREAD_GET_OUTPUT: OutputField[];
|
|
155
211
|
declare const gmailInboxThreadGetKind: NodeKindDefinition;
|
|
156
212
|
|
|
213
|
+
declare const GMAIL_INBOX_MESSAGE_RECEIVED_TRIGGER_KIND = "@particle-academy/gmail_inbox_message_received_trigger";
|
|
214
|
+
declare const GMAIL_INBOX_MESSAGE_RECEIVED_TRIGGER_OPERATION = "message_received";
|
|
215
|
+
declare const GMAIL_INBOX_MESSAGE_RECEIVED_TRIGGER_META: _particle_academy_fancy_flow_connectors.ConnectorMeta;
|
|
216
|
+
/**
|
|
217
|
+
* What this node emits — the "ingredients" a downstream node can reference.
|
|
218
|
+
*
|
|
219
|
+
* fancy-flow reads `outputShape` off the kind and offers it in the variable
|
|
220
|
+
* picker, so declaring it is the whole of the work: an author configuring the
|
|
221
|
+
* next node picks `{{ $json.data.id }}` off a list instead of typing a path
|
|
222
|
+
* and hoping.
|
|
223
|
+
*/
|
|
224
|
+
declare const GMAIL_INBOX_MESSAGE_RECEIVED_TRIGGER_OUTPUT: OutputField[];
|
|
225
|
+
declare const gmailInboxMessageReceivedTriggerKind: NodeKindDefinition;
|
|
226
|
+
|
|
157
227
|
/**
|
|
158
228
|
* GENERATED FILE — do not edit.
|
|
159
229
|
*
|
|
@@ -175,4 +245,4 @@ declare const gmailInboxThreadGetKind: NodeKindDefinition;
|
|
|
175
245
|
/** Every Gmail Inbox kind, for a host that registers the lot. */
|
|
176
246
|
declare const GMAIL_INBOX_KINDS: NodeKindDefinition[];
|
|
177
247
|
|
|
178
|
-
export { CONNECTOR_API_VERSION, GMAIL_INBOX_CREDENTIALS, GMAIL_INBOX_KINDS, GMAIL_INBOX_LABEL_LIST_KIND, GMAIL_INBOX_LABEL_LIST_META, GMAIL_INBOX_LABEL_LIST_OPERATION, GMAIL_INBOX_LABEL_LIST_OUTPUT, GMAIL_INBOX_MESSAGE_GET_KIND, GMAIL_INBOX_MESSAGE_GET_META, GMAIL_INBOX_MESSAGE_GET_OPERATION, GMAIL_INBOX_MESSAGE_GET_OUTPUT, GMAIL_INBOX_MESSAGE_LIST_KIND, GMAIL_INBOX_MESSAGE_LIST_META, GMAIL_INBOX_MESSAGE_LIST_OPERATION, GMAIL_INBOX_MESSAGE_LIST_OUTPUT, GMAIL_INBOX_OAUTH, GMAIL_INBOX_SERVICE, GMAIL_INBOX_THREAD_GET_KIND, GMAIL_INBOX_THREAD_GET_META, GMAIL_INBOX_THREAD_GET_OPERATION, GMAIL_INBOX_THREAD_GET_OUTPUT, gmailInboxLabelListKind, gmailInboxMessageGetKind, gmailInboxMessageListKind, gmailInboxMeta, gmailInboxThreadGetKind };
|
|
248
|
+
export { CONNECTOR_API_VERSION, GMAIL_INBOX_CREDENTIALS, GMAIL_INBOX_HISTORY_LIST_KIND, GMAIL_INBOX_HISTORY_LIST_META, GMAIL_INBOX_HISTORY_LIST_OPERATION, GMAIL_INBOX_HISTORY_LIST_OUTPUT, GMAIL_INBOX_KINDS, GMAIL_INBOX_LABEL_LIST_KIND, GMAIL_INBOX_LABEL_LIST_META, GMAIL_INBOX_LABEL_LIST_OPERATION, GMAIL_INBOX_LABEL_LIST_OUTPUT, GMAIL_INBOX_MAILBOX_STOP_KIND, GMAIL_INBOX_MAILBOX_STOP_META, GMAIL_INBOX_MAILBOX_STOP_OPERATION, GMAIL_INBOX_MAILBOX_STOP_OUTPUT, GMAIL_INBOX_MAILBOX_WATCH_KIND, GMAIL_INBOX_MAILBOX_WATCH_META, GMAIL_INBOX_MAILBOX_WATCH_OPERATION, GMAIL_INBOX_MAILBOX_WATCH_OUTPUT, GMAIL_INBOX_MESSAGE_GET_KIND, GMAIL_INBOX_MESSAGE_GET_META, GMAIL_INBOX_MESSAGE_GET_OPERATION, GMAIL_INBOX_MESSAGE_GET_OUTPUT, GMAIL_INBOX_MESSAGE_LIST_KIND, GMAIL_INBOX_MESSAGE_LIST_META, GMAIL_INBOX_MESSAGE_LIST_OPERATION, GMAIL_INBOX_MESSAGE_LIST_OUTPUT, GMAIL_INBOX_MESSAGE_RECEIVED_TRIGGER_KIND, GMAIL_INBOX_MESSAGE_RECEIVED_TRIGGER_META, GMAIL_INBOX_MESSAGE_RECEIVED_TRIGGER_OPERATION, GMAIL_INBOX_MESSAGE_RECEIVED_TRIGGER_OUTPUT, GMAIL_INBOX_OAUTH, GMAIL_INBOX_SERVICE, GMAIL_INBOX_THREAD_GET_KIND, GMAIL_INBOX_THREAD_GET_META, GMAIL_INBOX_THREAD_GET_OPERATION, GMAIL_INBOX_THREAD_GET_OUTPUT, gmailInboxHistoryListKind, gmailInboxLabelListKind, gmailInboxMailboxStopKind, gmailInboxMailboxWatchKind, gmailInboxMessageGetKind, gmailInboxMessageListKind, gmailInboxMessageReceivedTriggerKind, gmailInboxMeta, gmailInboxThreadGetKind };
|
package/dist/index.d.ts
CHANGED
|
@@ -66,6 +66,20 @@ declare const GMAIL_INBOX_CREDENTIALS: readonly [{
|
|
|
66
66
|
readonly scope: "account";
|
|
67
67
|
readonly secret: true;
|
|
68
68
|
readonly help: "Per connected Google account. Google issues one only when the consent request asks for offline access; without it the connection dies within the hour.";
|
|
69
|
+
}, {
|
|
70
|
+
readonly key: "pushAudience";
|
|
71
|
+
readonly label: "Push audience";
|
|
72
|
+
readonly scope: "provider";
|
|
73
|
+
readonly secret: false;
|
|
74
|
+
readonly optional: true;
|
|
75
|
+
readonly help: "The audience set on the Pub/Sub PUSH subscription (normally the endpoint URL your host mounts for message_received). Every push's Google-signed token must name it; an unchecked audience accepts any token Google signs for anyone. Needed only for the message_received trigger.";
|
|
76
|
+
}, {
|
|
77
|
+
readonly key: "pushServiceAccount";
|
|
78
|
+
readonly label: "Push service account";
|
|
79
|
+
readonly scope: "provider";
|
|
80
|
+
readonly secret: false;
|
|
81
|
+
readonly optional: true;
|
|
82
|
+
readonly help: "The service account the push subscription authenticates as (its email). Every push's token must be for exactly this account: a stranger's subscription aimed at your URL carries a token Google signed correctly, and only this check refuses it. Needed only for message_received.";
|
|
69
83
|
}];
|
|
70
84
|
/**
|
|
71
85
|
* The OAuth2 exchange Gmail Inbox requires — DECLARED here, performed by the
|
|
@@ -98,6 +112,20 @@ declare const GMAIL_INBOX_OAUTH: {
|
|
|
98
112
|
/** Build a Gmail Inbox node's connector metadata from the operation it performs. */
|
|
99
113
|
declare function gmailInboxMeta(role: ConnectorMeta["role"], operation: string, docs: string): ConnectorMeta;
|
|
100
114
|
|
|
115
|
+
declare const GMAIL_INBOX_HISTORY_LIST_KIND = "@particle-academy/gmail_inbox_history_list";
|
|
116
|
+
declare const GMAIL_INBOX_HISTORY_LIST_OPERATION = "history_list";
|
|
117
|
+
declare const GMAIL_INBOX_HISTORY_LIST_META: _particle_academy_fancy_flow_connectors.ConnectorMeta;
|
|
118
|
+
/**
|
|
119
|
+
* What this node emits — the "ingredients" a downstream node can reference.
|
|
120
|
+
*
|
|
121
|
+
* fancy-flow reads `outputShape` off the kind and offers it in the variable
|
|
122
|
+
* picker, so declaring it is the whole of the work: an author configuring the
|
|
123
|
+
* next node picks `{{ $json.data.id }}` off a list instead of typing a path
|
|
124
|
+
* and hoping.
|
|
125
|
+
*/
|
|
126
|
+
declare const GMAIL_INBOX_HISTORY_LIST_OUTPUT: OutputField[];
|
|
127
|
+
declare const gmailInboxHistoryListKind: NodeKindDefinition;
|
|
128
|
+
|
|
101
129
|
declare const GMAIL_INBOX_LABEL_LIST_KIND = "@particle-academy/gmail_inbox_label_list";
|
|
102
130
|
declare const GMAIL_INBOX_LABEL_LIST_OPERATION = "label_list";
|
|
103
131
|
declare const GMAIL_INBOX_LABEL_LIST_META: _particle_academy_fancy_flow_connectors.ConnectorMeta;
|
|
@@ -112,6 +140,34 @@ declare const GMAIL_INBOX_LABEL_LIST_META: _particle_academy_fancy_flow_connecto
|
|
|
112
140
|
declare const GMAIL_INBOX_LABEL_LIST_OUTPUT: OutputField[];
|
|
113
141
|
declare const gmailInboxLabelListKind: NodeKindDefinition;
|
|
114
142
|
|
|
143
|
+
declare const GMAIL_INBOX_MAILBOX_STOP_KIND = "@particle-academy/gmail_inbox_mailbox_stop";
|
|
144
|
+
declare const GMAIL_INBOX_MAILBOX_STOP_OPERATION = "mailbox_stop";
|
|
145
|
+
declare const GMAIL_INBOX_MAILBOX_STOP_META: _particle_academy_fancy_flow_connectors.ConnectorMeta;
|
|
146
|
+
/**
|
|
147
|
+
* What this node emits — the "ingredients" a downstream node can reference.
|
|
148
|
+
*
|
|
149
|
+
* fancy-flow reads `outputShape` off the kind and offers it in the variable
|
|
150
|
+
* picker, so declaring it is the whole of the work: an author configuring the
|
|
151
|
+
* next node picks `{{ $json.data.id }}` off a list instead of typing a path
|
|
152
|
+
* and hoping.
|
|
153
|
+
*/
|
|
154
|
+
declare const GMAIL_INBOX_MAILBOX_STOP_OUTPUT: OutputField[];
|
|
155
|
+
declare const gmailInboxMailboxStopKind: NodeKindDefinition;
|
|
156
|
+
|
|
157
|
+
declare const GMAIL_INBOX_MAILBOX_WATCH_KIND = "@particle-academy/gmail_inbox_mailbox_watch";
|
|
158
|
+
declare const GMAIL_INBOX_MAILBOX_WATCH_OPERATION = "mailbox_watch";
|
|
159
|
+
declare const GMAIL_INBOX_MAILBOX_WATCH_META: _particle_academy_fancy_flow_connectors.ConnectorMeta;
|
|
160
|
+
/**
|
|
161
|
+
* What this node emits — the "ingredients" a downstream node can reference.
|
|
162
|
+
*
|
|
163
|
+
* fancy-flow reads `outputShape` off the kind and offers it in the variable
|
|
164
|
+
* picker, so declaring it is the whole of the work: an author configuring the
|
|
165
|
+
* next node picks `{{ $json.data.id }}` off a list instead of typing a path
|
|
166
|
+
* and hoping.
|
|
167
|
+
*/
|
|
168
|
+
declare const GMAIL_INBOX_MAILBOX_WATCH_OUTPUT: OutputField[];
|
|
169
|
+
declare const gmailInboxMailboxWatchKind: NodeKindDefinition;
|
|
170
|
+
|
|
115
171
|
declare const GMAIL_INBOX_MESSAGE_GET_KIND = "@particle-academy/gmail_inbox_message_get";
|
|
116
172
|
declare const GMAIL_INBOX_MESSAGE_GET_OPERATION = "message_get";
|
|
117
173
|
declare const GMAIL_INBOX_MESSAGE_GET_META: _particle_academy_fancy_flow_connectors.ConnectorMeta;
|
|
@@ -154,6 +210,20 @@ declare const GMAIL_INBOX_THREAD_GET_META: _particle_academy_fancy_flow_connecto
|
|
|
154
210
|
declare const GMAIL_INBOX_THREAD_GET_OUTPUT: OutputField[];
|
|
155
211
|
declare const gmailInboxThreadGetKind: NodeKindDefinition;
|
|
156
212
|
|
|
213
|
+
declare const GMAIL_INBOX_MESSAGE_RECEIVED_TRIGGER_KIND = "@particle-academy/gmail_inbox_message_received_trigger";
|
|
214
|
+
declare const GMAIL_INBOX_MESSAGE_RECEIVED_TRIGGER_OPERATION = "message_received";
|
|
215
|
+
declare const GMAIL_INBOX_MESSAGE_RECEIVED_TRIGGER_META: _particle_academy_fancy_flow_connectors.ConnectorMeta;
|
|
216
|
+
/**
|
|
217
|
+
* What this node emits — the "ingredients" a downstream node can reference.
|
|
218
|
+
*
|
|
219
|
+
* fancy-flow reads `outputShape` off the kind and offers it in the variable
|
|
220
|
+
* picker, so declaring it is the whole of the work: an author configuring the
|
|
221
|
+
* next node picks `{{ $json.data.id }}` off a list instead of typing a path
|
|
222
|
+
* and hoping.
|
|
223
|
+
*/
|
|
224
|
+
declare const GMAIL_INBOX_MESSAGE_RECEIVED_TRIGGER_OUTPUT: OutputField[];
|
|
225
|
+
declare const gmailInboxMessageReceivedTriggerKind: NodeKindDefinition;
|
|
226
|
+
|
|
157
227
|
/**
|
|
158
228
|
* GENERATED FILE — do not edit.
|
|
159
229
|
*
|
|
@@ -175,4 +245,4 @@ declare const gmailInboxThreadGetKind: NodeKindDefinition;
|
|
|
175
245
|
/** Every Gmail Inbox kind, for a host that registers the lot. */
|
|
176
246
|
declare const GMAIL_INBOX_KINDS: NodeKindDefinition[];
|
|
177
247
|
|
|
178
|
-
export { CONNECTOR_API_VERSION, GMAIL_INBOX_CREDENTIALS, GMAIL_INBOX_KINDS, GMAIL_INBOX_LABEL_LIST_KIND, GMAIL_INBOX_LABEL_LIST_META, GMAIL_INBOX_LABEL_LIST_OPERATION, GMAIL_INBOX_LABEL_LIST_OUTPUT, GMAIL_INBOX_MESSAGE_GET_KIND, GMAIL_INBOX_MESSAGE_GET_META, GMAIL_INBOX_MESSAGE_GET_OPERATION, GMAIL_INBOX_MESSAGE_GET_OUTPUT, GMAIL_INBOX_MESSAGE_LIST_KIND, GMAIL_INBOX_MESSAGE_LIST_META, GMAIL_INBOX_MESSAGE_LIST_OPERATION, GMAIL_INBOX_MESSAGE_LIST_OUTPUT, GMAIL_INBOX_OAUTH, GMAIL_INBOX_SERVICE, GMAIL_INBOX_THREAD_GET_KIND, GMAIL_INBOX_THREAD_GET_META, GMAIL_INBOX_THREAD_GET_OPERATION, GMAIL_INBOX_THREAD_GET_OUTPUT, gmailInboxLabelListKind, gmailInboxMessageGetKind, gmailInboxMessageListKind, gmailInboxMeta, gmailInboxThreadGetKind };
|
|
248
|
+
export { CONNECTOR_API_VERSION, GMAIL_INBOX_CREDENTIALS, GMAIL_INBOX_HISTORY_LIST_KIND, GMAIL_INBOX_HISTORY_LIST_META, GMAIL_INBOX_HISTORY_LIST_OPERATION, GMAIL_INBOX_HISTORY_LIST_OUTPUT, GMAIL_INBOX_KINDS, GMAIL_INBOX_LABEL_LIST_KIND, GMAIL_INBOX_LABEL_LIST_META, GMAIL_INBOX_LABEL_LIST_OPERATION, GMAIL_INBOX_LABEL_LIST_OUTPUT, GMAIL_INBOX_MAILBOX_STOP_KIND, GMAIL_INBOX_MAILBOX_STOP_META, GMAIL_INBOX_MAILBOX_STOP_OPERATION, GMAIL_INBOX_MAILBOX_STOP_OUTPUT, GMAIL_INBOX_MAILBOX_WATCH_KIND, GMAIL_INBOX_MAILBOX_WATCH_META, GMAIL_INBOX_MAILBOX_WATCH_OPERATION, GMAIL_INBOX_MAILBOX_WATCH_OUTPUT, GMAIL_INBOX_MESSAGE_GET_KIND, GMAIL_INBOX_MESSAGE_GET_META, GMAIL_INBOX_MESSAGE_GET_OPERATION, GMAIL_INBOX_MESSAGE_GET_OUTPUT, GMAIL_INBOX_MESSAGE_LIST_KIND, GMAIL_INBOX_MESSAGE_LIST_META, GMAIL_INBOX_MESSAGE_LIST_OPERATION, GMAIL_INBOX_MESSAGE_LIST_OUTPUT, GMAIL_INBOX_MESSAGE_RECEIVED_TRIGGER_KIND, GMAIL_INBOX_MESSAGE_RECEIVED_TRIGGER_META, GMAIL_INBOX_MESSAGE_RECEIVED_TRIGGER_OPERATION, GMAIL_INBOX_MESSAGE_RECEIVED_TRIGGER_OUTPUT, GMAIL_INBOX_OAUTH, GMAIL_INBOX_SERVICE, GMAIL_INBOX_THREAD_GET_KIND, GMAIL_INBOX_THREAD_GET_META, GMAIL_INBOX_THREAD_GET_OPERATION, GMAIL_INBOX_THREAD_GET_OUTPUT, gmailInboxHistoryListKind, gmailInboxLabelListKind, gmailInboxMailboxStopKind, gmailInboxMailboxWatchKind, gmailInboxMessageGetKind, gmailInboxMessageListKind, gmailInboxMessageReceivedTriggerKind, gmailInboxMeta, gmailInboxThreadGetKind };
|