{"locator":"npm:@open-mercato/channel-gmail","path":"@open-mercato/channel-gmail","npm":"@open-mercato/channel-gmail","github":null,"repoPath":"open-mercato/open-mercato#main/packages/channel-gmail","kind":"module","type":"official","enterprise":false,"title":"Gmail Email Channel","summary":"Connects each user Gmail account over OAuth2: sends through the Gmail API and pulls replies with History API polling.","whenToUse":"Use when sales or support staff work from Google Workspace mailboxes and their email threads should appear in the app.","whenNotToUse":"For other mail servers use channel-imap. For transactional sending only use channel-resend or channel-ses.","category":"communication","tags":["email","gmail","oauth"],"providers":[{"name":"gmail","label":"Gmail"}],"moduleIds":["channel_gmail"],"requires":[],"replaces":[],"slotConflicts":[],"renamedFrom":[],"supersededBy":null,"alternatives":[],"status":"active","listed":true,"featured":false,"license":{"spdx":"MIT","kind":"osi","mismatch":false},"version":{"latest":"0.9.0","preview":null,"publishedAt":"2026-10-09","integrity":"sha512-Jlf7ZY7+Rlg2rk3dXCJzMdRi7exhLxq8xmWQTWkVJ37fzStm0FiRVZ5HvDUasL4QlaaYbWfTLzwXWWXnX2tbiA==","installableFrom":"2026-10-09","gitRef":null,"recommended":{"0.9":null,"0.8":null,"next":null}},"identity":{"builtFrom":"verified","claimed":false,"source":"npm"},"compat":{"builtFor":{"range":"0.9.0","kind":"exact-pin","lines":["0.8","0.9"],"ranges":{"0.9":"0.9.0","0.8":"0.8.0"}},"lines":{},"verifiedOn":[],"inPresets":["0.8","0.9","next"],"ships":{"0.9":"0.9.0","0.8":"0.8.0","next":"0.10.1-develop.7701.1.87b1ad4224"}},"anatomy":{"version":"0.9.0","coverage":"partial","counts":{"entities":0,"tables":0,"migrations":0,"routes":0,"publicRoutes":0,"aclFeatures":2,"eventsEmitted":0,"eventsConsumed":0,"backendPages":0,"frontendPages":0,"widgets":1,"workers":0,"cli":0,"aiTools":0,"aiAgents":0,"extends":2},"lists":{"aclFeatures":["channel_gmail.view","channel_gmail.configure"],"eventsEmitted":[],"eventsConsumed":[],"env":["OM_CHANNEL_GMAIL_REQUEST_TIMEOUT_MS"],"hosts":["accounts.google.com","gmail.googleapis.com","oauth2.googleapis.com","www.googleapis.com"],"tables":[],"publicRoutes":[],"credentials":[{"key":"clientId","type":"text","required":true},{"key":"clientSecret","type":"secret","required":true},{"key":"scopes","type":"text","required":false}]},"callout":"ADDS 2 PERMISSIONS","diff":{"from":"0.8.0","added":{"tables":0,"routes":0,"publicRoutes":0,"aclFeatures":0,"env":[],"hosts":[]},"removed":{"tables":0,"routes":0,"aclFeatures":0}}},"signals":{"receipt":{"0.9":"untested","0.8":"untested","next":"untested"},"fit":{"0.9":"ok","0.8":"drift","next":"unknown"},"anatomy":"partial","supplyChain":{"status":"ok","reasons":[]},"hygiene":{"status":"warn","failing":["peer-exact-pin"]},"maintenance":{"status":"current","lastRelease":"2026-10-09","catchUpDays":null},"declaredVsObserved":{"status":"mismatch","notes":["Built for 0.8, 0.9; verified on no line."]}},"tier":"listed","quality":null,"agentPolicy":{"0.9":{"decision":"ask","reasons":[{"code":"NOT_VERIFIED","text":"Not yet tested in a new app on 0.9."},{"code":"IN_PRESET","text":"Nothing to install: a new app already registers channel_gmail in src/modules.ts."}]},"0.8":{"decision":"ask","reasons":[{"code":"NOT_VERIFIED","text":"Not yet tested in a new app on 0.8."},{"code":"IN_PRESET","text":"Nothing to install: a new app already registers channel_gmail in src/modules.ts."}]},"next":{"decision":"ask","reasons":[{"code":"NOT_VERIFIED","text":"Not yet tested in a new app on next."},{"code":"IN_PRESET","text":"Nothing to install: a new app already registers channel_gmail in src/modules.ts."}]}},"install":{"cli":"yarn mercato module add @open-mercato/channel-gmail@0.9.0","cmm":"npx create-mercato-module install @open-mercato/channel-gmail@0.9.0","needsAllowThirdParty":false,"moduleFlag":null},"stats":{"downloads30d":31950,"stars":null},"sigil":{"glyph":"0010002","phase":111,"publicRoutes":false},"links":{"page":"https://modules.openmercato.com/m/@open-mercato/channel-gmail","md":"https://modules.openmercato.com/m/@open-mercato/channel-gmail.md","json":"https://modules.openmercato.com/m/@open-mercato/channel-gmail.json","facts":"https://modules.openmercato.com/m/@open-mercato/channel-gmail/v/0.9.0/facts.json","npm":"https://www.npmjs.com/package/@open-mercato/channel-gmail","repo":"https://github.com/open-mercato/open-mercato","docs":"https://docs.openmercato.com/user-guide/communication-channels-gmail"},"addedAt":"2026-10-23","updatedAt":"2026-10-29T13:11:45Z","_meta":{"com.openmercato.modules/installable":{"0.9":"0.9.0","0.8":"0.8.0","next":"0.9.0"}},"screenshots":[{"src":"/shots/@open-mercato/channel-gmail-1.webp","alt":"Gmail channel settings with OAuth client ID, client secret and scopes."}],"facts":{"factsVersion":1,"extractor":{"engine":"@open-mercato/cli@0.9.0 extractModuleFacts","factsContractVersion":2,"catalog":"om-modules rentgen 1","durationMs":152},"package":{"locator":"npm:@open-mercato/channel-gmail","name":"@open-mercato/channel-gmail","version":"0.9.0","integrity":"sha512-Jlf7ZY7+Rlg2rk3dXCJzMdRi7exhLxq8xmWQTWkVJ37fzStm0FiRVZ5HvDUasL4QlaaYbWfTLzwXWWXnX2tbiA==","source":"npm-tarball","gitRef":null},"gate":{"installable":true,"needsModuleFlag":false,"reason":null,"modules":[{"id":"channel_gmail","src":true,"dist":true}]},"kind":"module","license":{"value":"MIT","kind":"osi","mismatch":false,"sources":{"packageJson":"MIT","licenseFile":null,"moduleInfo":null,"integrationTs":"MIT"}},"omPeers":{"@open-mercato/shared":"0.9.0"},"dependencies":{"@open-mercato/core":"0.9.0","@open-mercato/ui":"0.9.0","@types/mailparser":"^3.4.5","mailparser":"^3.9.17"},"agentsMd":true,"readmeExcerpt":null,"modules":[{"id":"channel_gmail","title":"Gmail Email Channel","description":"Connect per-user Gmail accounts via OAuth2. Outbound via gmail.users.messages.send; inbound via History API polling. Pairs with the Communications Hub.","requires":[],"ejectable":null,"data":{"entities":[],"migrations":{"count":0,"first":null,"last":null},"customEntities":0},"http":{"routes":[],"legacyRouteFiles":0,"authResolved":1},"security":{"aclFeatures":["channel_gmail.view","channel_gmail.configure"],"setupDefaultRoleFeatures":true},"events":{"emits":[],"subscribes":[]},"ui":{"backendPages":[],"frontendPages":[],"widgets":1,"extensionHosts":0},"background":{"workers":[],"cli":[]},"ai":{"tools":[],"agents":[]},"config":{"credentials":[{"key":"clientId","type":"text","required":true},{"key":"clientSecret","type":"secret","required":true},{"key":"scopes","type":"text","required":false}],"env":[{"name":"OM_CHANNEL_GMAIL_REQUEST_TIMEOUT_MS","src":{"file":"src/modules/channel_gmail/lib/gmail-client.ts","line":124}}]},"network":{"hosts":[{"host":"accounts.google.com","src":{"file":"src/modules/channel_gmail/lib/oauth.ts","line":65},"confidence":"high"},{"host":"gmail.googleapis.com","src":{"file":"src/modules/channel_gmail/lib/gmail-client.ts","line":19},"confidence":"high"},{"host":"oauth2.googleapis.com","src":{"file":"src/modules/channel_gmail/lib/oauth.ts","line":22},"confidence":"low"},{"host":"www.googleapis.com","src":{"file":"src/modules/channel_gmail/lib/oauth.ts","line":105},"confidence":"high"}],"undeclared":[]},"extends":[{"kind":"specialized-registry","target":"integration:channel_gmail"},{"kind":"widget","target":"profile:communication-channels:connect"}],"omImports":{"@open-mercato/core":{"modules/communication_channels/lib/adapter":["ApplyPushNotificationInput","BuildOAuthAuthorizeUrlInput","BuildOAuthAuthorizeUrlResult","ChannelAdapter","ChannelCapabilities","ChannelNativeContent","ContactHint","ConvertOutboundInput","DeleteChannelMessageInput","ExchangeOAuthCodeInput","ExchangeOAuthCodeResult","FetchHistoryInput","GetMessageStatusInput","HistoryPage","ImportHistoryInput","ImportHistoryPage","InboundMessage","MessageStatus","NormalizedInboundMessage","PushRegistration","RefreshCredentialsInput","RefreshedCredentials","RegisterPushInput","ResolveContactInput","SendMessageInput","SendMessageResult","UnregisterPushInput","VerifyWebhookInput"],"modules/communication_channels/lib/adapter-registry-singleton":["hasChannelAdapter","registerChannelAdapter"],"modules/communication_channels/lib/email-capabilities":["baseEmailCapabilities"],"modules/communication_channels/lib/email-contact":["emailResolveContact"],"modules/communication_channels/lib/email-mime":["ParsedMail","assembleRfc2822","decodeCursor","encodeCursor","escapeQuotes","generateMessageId","htmlToText","normalizeMimeInbound","referencesFromMeta","stringOrUndefined","toAddressList"],"modules/communication_channels/lib/import-history-limits":["IMPORT_HISTORY_DEFAULT_MAX_MESSAGES","IMPORT_HISTORY_DEFAULT_SINCE_DAYS","getImportHistoryMaxMessages","getImportHistoryMaxSinceDays"],"modules/communication_channels/lib/oauth-token":["OAuthTokenResponse","requestOAuthToken","tokenResponseToExpiresAt"],"modules/communication_channels/lib/provider-health":["makeClientConfigHealthCheck"],"modules/communication_channels/lib/use-connect-channel":["useConnectChannel"]},"@open-mercato/shared":{"lib/di/container":["AppContainer"],"lib/http/fetchWithTimeout":["FetchTimeoutError","fetchWithTimeout"],"lib/i18n/context":["useT"],"lib/logger":["createLogger"],"modules/integrations/types":["IntegrationBundle","IntegrationDefinition","buildIntegrationDetailWidgetSpotId"],"modules/setup":["ModuleSetupConfig"],"modules/widgets/injection":["InjectionWidgetComponentProps","InjectionWidgetModule","ModuleInjectionTable"]},"@open-mercato/ui":{"primitives/social-button":["SocialButton"]}},"collisionKeys":{"moduleId":"channel_gmail","tables":[],"aclFeatures":["channel_gmail.view","channel_gmail.configure"],"eventIds":[],"backendRoutes":[]},"publicRoutes":0,"glyph":"0010002","lint":[{"code":"peer-exact-pin","severity":"warn","message":"Peer dependencies pin Open Mercato exactly (@open-mercato/shared 0.9.0). Use a range.","anchor":"i2 §1.4","src":null},{"code":"ships-tests","severity":"info","message":"The tarball ships test files.","anchor":null,"src":null},{"code":"version-drift","severity":"info","message":"integration.ts says 0.1.0, package.json says 0.9.0.","anchor":null,"src":{"file":"src/modules/channel_gmail/integration.ts","line":5}}]}],"coverage":{"routesAuthResolved":1,"integrationTs":"expanded"},"diagnostics":[]},"receipts":[],"rules":[{"id":"LST-1","pass":true,"detail":"Descriptor is valid."},{"id":"LST-2","pass":true,"detail":"Stable version exists and is not deprecated."},{"id":"LST-3","pass":true,"detail":"src/modules and dist/modules pair found."},{"id":"LST-4","pass":true,"detail":"License: MIT."},{"id":"LST-5","pass":true,"detail":"No known malware or open critical advisory."},{"id":"LST-6","pass":true,"detail":"Name reviewed at merge."},{"id":"VER-1","pass":false,"detail":"Not yet tested in a new app on 0.9."},{"id":"VER-2","pass":true,"detail":"Fits statically on 0.9: ok."},{"id":"VER-3","pass":true,"detail":"Supply chain: ok."},{"id":"VER-4","pass":true,"detail":"No lint errors."},{"id":"VER-5","pass":true,"detail":"No repository in the descriptor to compare."}],"maintainers":["pat-lewczuk","patryk.andrzejewski","piotrkarwatka"]}
