crewly 1.4.1 → 1.4.3
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/config/skills/orchestrator/reply-gchat/execute.sh +4 -4
- package/dist/backend/backend/src/controllers/messaging/messenger.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/messaging/messenger.routes.js +86 -3
- package/dist/backend/backend/src/controllers/messaging/messenger.routes.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/adapters/google-chat-messenger.adapter.d.ts +212 -24
- package/dist/backend/backend/src/services/messaging/adapters/google-chat-messenger.adapter.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/adapters/google-chat-messenger.adapter.js +705 -85
- package/dist/backend/backend/src/services/messaging/adapters/google-chat-messenger.adapter.js.map +1 -1
- package/frontend/dist/assets/{index-e8162966.js → index-c35cdbc5.js} +195 -195
- package/frontend/dist/assets/{index-60a9e4ea.css → index-f1dc9f80.css} +1 -1
- package/frontend/dist/index.html +2 -2
- package/package.json +1 -1
|
@@ -115,11 +115,11 @@ fi
|
|
|
115
115
|
|
|
116
116
|
# Build JSON body
|
|
117
117
|
if [ -n "$THREAD_NAME" ]; then
|
|
118
|
-
BODY=$(jq -n --arg
|
|
119
|
-
'{
|
|
118
|
+
BODY=$(jq -n --arg channel "$SPACE" --arg text "$TEXT" --arg threadId "$THREAD_NAME" \
|
|
119
|
+
'{channel: $channel, text: $text, threadId: $threadId}')
|
|
120
120
|
else
|
|
121
|
-
BODY=$(jq -n --arg
|
|
122
|
-
'{
|
|
121
|
+
BODY=$(jq -n --arg channel "$SPACE" --arg text "$TEXT" \
|
|
122
|
+
'{channel: $channel, text: $text}')
|
|
123
123
|
fi
|
|
124
124
|
|
|
125
125
|
api_call POST "/messengers/google-chat/send" "$BODY"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messenger.routes.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/messaging/messenger.routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAmC,MAAM,SAAS,CAAC;AA+ClE;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,
|
|
1
|
+
{"version":3,"file":"messenger.routes.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/messaging/messenger.routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAmC,MAAM,SAAS,CAAC;AA+ClE;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CA2K9C"}
|
|
@@ -112,19 +112,102 @@ export function createMessengerRouter() {
|
|
|
112
112
|
res.status(404).json({ success: false, error: `Unsupported platform: ${platform}` });
|
|
113
113
|
return;
|
|
114
114
|
}
|
|
115
|
-
const channel = String(req.body?.channel || '');
|
|
115
|
+
const channel = String(req.body?.channel || req.body?.space || '');
|
|
116
116
|
const text = String(req.body?.text || '');
|
|
117
117
|
if (!channel || !text) {
|
|
118
|
-
res.status(400).json({ success: false, error: 'channel and text are required' });
|
|
118
|
+
res.status(400).json({ success: false, error: 'channel (or space) and text are required' });
|
|
119
119
|
return;
|
|
120
120
|
}
|
|
121
|
-
|
|
121
|
+
const threadId = req.body?.threadId || req.body?.threadName || undefined;
|
|
122
|
+
await adapter.sendMessage(channel, text, { threadId });
|
|
122
123
|
res.json({ success: true, message: 'Message sent' });
|
|
123
124
|
}
|
|
124
125
|
catch (error) {
|
|
125
126
|
next(error);
|
|
126
127
|
}
|
|
127
128
|
});
|
|
129
|
+
// ===========================================================================
|
|
130
|
+
// Google Chat–specific routes
|
|
131
|
+
// ===========================================================================
|
|
132
|
+
/**
|
|
133
|
+
* POST /google-chat/reaction
|
|
134
|
+
* Add an emoji reaction to a Google Chat message.
|
|
135
|
+
*/
|
|
136
|
+
router.post('/google-chat/reaction', async (req, res, next) => {
|
|
137
|
+
try {
|
|
138
|
+
const adapter = registry.get('google-chat');
|
|
139
|
+
if (!adapter) {
|
|
140
|
+
res.status(404).json({ success: false, error: 'Google Chat adapter not registered' });
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
const messageName = String(req.body?.messageName || '');
|
|
144
|
+
const emoji = String(req.body?.emoji || '');
|
|
145
|
+
if (!messageName || !emoji) {
|
|
146
|
+
res.status(400).json({ success: false, error: 'messageName and emoji are required' });
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
await adapter.addReaction(messageName, emoji);
|
|
150
|
+
res.json({ success: true, message: 'Reaction added' });
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
next(error);
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
/**
|
|
157
|
+
* GET /google-chat/status
|
|
158
|
+
* Get live Google Chat adapter status (Pub/Sub pull details).
|
|
159
|
+
*/
|
|
160
|
+
router.get('/google-chat/status', (_req, res) => {
|
|
161
|
+
const adapter = registry.get('google-chat');
|
|
162
|
+
if (!adapter) {
|
|
163
|
+
res.status(404).json({ success: false, error: 'Google Chat adapter not registered' });
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
const status = adapter.getStatus();
|
|
167
|
+
res.json({ success: true, data: status.details || {} });
|
|
168
|
+
});
|
|
169
|
+
/**
|
|
170
|
+
* POST /google-chat/pull
|
|
171
|
+
* Manually trigger a Pub/Sub pull (for debugging / UI).
|
|
172
|
+
*/
|
|
173
|
+
router.post('/google-chat/pull', async (req, res, next) => {
|
|
174
|
+
try {
|
|
175
|
+
const adapter = registry.get('google-chat');
|
|
176
|
+
if (!adapter) {
|
|
177
|
+
res.status(404).json({ success: false, error: 'Google Chat adapter not registered' });
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
const count = await adapter.pullMessages();
|
|
181
|
+
res.json({ success: true, messagesReceived: count });
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
next(error);
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
/**
|
|
188
|
+
* POST /google-chat/test-send
|
|
189
|
+
* Send a test message to a Google Chat space (for connection verification).
|
|
190
|
+
*/
|
|
191
|
+
router.post('/google-chat/test-send', async (req, res, next) => {
|
|
192
|
+
try {
|
|
193
|
+
const adapter = registry.get('google-chat');
|
|
194
|
+
if (!adapter) {
|
|
195
|
+
res.status(404).json({ success: false, error: 'Google Chat adapter not registered' });
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
const space = String(req.body?.space || '');
|
|
199
|
+
const text = String(req.body?.text || 'Test message from Crewly');
|
|
200
|
+
if (!space) {
|
|
201
|
+
res.status(400).json({ success: false, error: 'space is required' });
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
await adapter.sendMessage(space, text);
|
|
205
|
+
res.json({ success: true, message: 'Test message sent' });
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
next(error);
|
|
209
|
+
}
|
|
210
|
+
});
|
|
128
211
|
return router;
|
|
129
212
|
}
|
|
130
213
|
//# sourceMappingURL=messenger.routes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messenger.routes.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/messaging/messenger.routes.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"messenger.routes.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/messaging/messenger.routes.ts"],"names":[],"mappings":"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"}
|
package/dist/backend/backend/src/services/messaging/adapters/google-chat-messenger.adapter.d.ts
CHANGED
|
@@ -1,47 +1,109 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Google Chat Messenger Adapter
|
|
3
3
|
*
|
|
4
|
-
* Messenger adapter for Google Chat
|
|
5
|
-
*
|
|
6
|
-
* the Chat API
|
|
4
|
+
* Messenger adapter for Google Chat supporting three connection modes:
|
|
5
|
+
* 1. **Webhook mode** — post messages via an incoming webhook URL (send-only)
|
|
6
|
+
* 2. **Service account mode** — send messages via the Chat API (send-only)
|
|
7
|
+
* 3. **Pub/Sub mode** — pull incoming messages from a Cloud Pub/Sub subscription
|
|
8
|
+
* and reply via the Chat API (bidirectional, thread-aware)
|
|
9
|
+
*
|
|
10
|
+
* In Pub/Sub mode, a Google Chat App is configured to publish events to a
|
|
11
|
+
* Pub/Sub topic. Crewly pulls from the subscription, processes MESSAGE events,
|
|
12
|
+
* and replies in the same thread via the Chat API.
|
|
7
13
|
*
|
|
8
14
|
* @module services/messaging/adapters/google-chat-messenger.adapter
|
|
9
15
|
*/
|
|
10
|
-
import { MessengerAdapter, MessengerPlatform } from '../messenger-adapter.interface.js';
|
|
16
|
+
import { MessengerAdapter, MessengerPlatform, IncomingMessage } from '../messenger-adapter.interface.js';
|
|
17
|
+
/** Authentication mode — how OAuth2 tokens are obtained */
|
|
18
|
+
export type GoogleChatAuthMode = 'service_account' | 'adc';
|
|
11
19
|
/**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
20
|
+
* ADC (Application Default Credentials) JSON file shape.
|
|
21
|
+
* Created by `gcloud auth application-default login`.
|
|
22
|
+
*/
|
|
23
|
+
interface AdcCredentials {
|
|
24
|
+
client_id: string;
|
|
25
|
+
client_secret: string;
|
|
26
|
+
refresh_token: string;
|
|
27
|
+
type: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Callback type for incoming messages from Pub/Sub pull.
|
|
31
|
+
*/
|
|
32
|
+
export type GoogleChatIncomingCallback = (msg: IncomingMessage) => void;
|
|
33
|
+
/**
|
|
34
|
+
* Messenger adapter for Google Chat with Pub/Sub support.
|
|
17
35
|
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
36
|
+
* Supports webhook, service-account, and pubsub modes.
|
|
37
|
+
* Pub/Sub mode enables bidirectional communication with thread tracking.
|
|
20
38
|
*/
|
|
21
39
|
export declare class GoogleChatMessengerAdapter implements MessengerAdapter {
|
|
22
40
|
readonly platform: MessengerPlatform;
|
|
41
|
+
/** Current connection mode */
|
|
42
|
+
private mode;
|
|
23
43
|
/** Webhook URL for posting messages (webhook mode) */
|
|
24
44
|
private webhookUrl;
|
|
25
|
-
/** Service account key JSON
|
|
45
|
+
/** Service account key JSON string */
|
|
26
46
|
private serviceAccountKey;
|
|
27
|
-
/**
|
|
47
|
+
/** Authentication mode: service_account (JWT) or adc (refresh token) */
|
|
48
|
+
private authMode;
|
|
49
|
+
/** ADC credentials (parsed from application_default_credentials.json) */
|
|
50
|
+
private adcCredentials;
|
|
51
|
+
/** Access token obtained from service account or ADC (cached) */
|
|
28
52
|
private accessToken;
|
|
29
53
|
/** Access token expiry timestamp */
|
|
30
54
|
private tokenExpiresAt;
|
|
55
|
+
/** OAuth2 scopes for the current mode */
|
|
56
|
+
private tokenScopes;
|
|
57
|
+
/** Pending token refresh promise to deduplicate concurrent requests (RL2) */
|
|
58
|
+
private pendingTokenRefresh;
|
|
59
|
+
/** Full Pub/Sub subscription resource name (e.g. projects/PROJECT/subscriptions/SUB) */
|
|
60
|
+
private subscriptionName;
|
|
61
|
+
/** GCP project ID (for Pub/Sub mode) */
|
|
62
|
+
private projectId;
|
|
63
|
+
/** Pub/Sub pull interval timer */
|
|
64
|
+
private pullIntervalTimer;
|
|
65
|
+
/** Callback for incoming messages */
|
|
66
|
+
private onIncomingMessage;
|
|
67
|
+
/** Service account email for impersonation (ADC mode) */
|
|
68
|
+
private serviceAccountEmail;
|
|
69
|
+
/** Impersonated SA token (separate from user ADC token) */
|
|
70
|
+
private saAccessToken;
|
|
71
|
+
/** Impersonated SA token expiry timestamp */
|
|
72
|
+
private saTokenExpiresAt;
|
|
31
73
|
/**
|
|
32
|
-
*
|
|
74
|
+
* Recent send deduplication cache.
|
|
75
|
+
* Key: `${space}:${threadId}:${contentPrefix}`, value: timestamp (epoch ms).
|
|
76
|
+
* Prevents the same message being sent twice within DEDUP_WINDOW_MS (e.g. when
|
|
77
|
+
* both the auto-route and a manual reply-gchat call fire for the same response).
|
|
78
|
+
*/
|
|
79
|
+
private recentSends;
|
|
80
|
+
/** Deduplication window in milliseconds */
|
|
81
|
+
private static readonly DEDUP_WINDOW_MS;
|
|
82
|
+
/** Consecutive pull failure count */
|
|
83
|
+
private consecutiveFailures;
|
|
84
|
+
/** Whether the pull loop is paused due to failures */
|
|
85
|
+
private pullPaused;
|
|
86
|
+
/** Timestamp of the last successful pull (epoch ms) */
|
|
87
|
+
private lastPullAt;
|
|
88
|
+
/**
|
|
89
|
+
* Initialize the adapter with the provided credentials.
|
|
90
|
+
*
|
|
91
|
+
* Detects mode based on provided config fields:
|
|
92
|
+
* - `webhookUrl` → webhook mode
|
|
93
|
+
* - `serviceAccountKey` + `projectId` + `subscriptionName` → pubsub mode
|
|
94
|
+
* - `serviceAccountKey` alone → service-account mode
|
|
33
95
|
*
|
|
34
|
-
* @param config -
|
|
35
|
-
* @throws Error if
|
|
96
|
+
* @param config - Configuration object with credentials
|
|
97
|
+
* @throws Error if credentials are invalid or missing
|
|
36
98
|
*/
|
|
37
99
|
initialize(config: Record<string, unknown>): Promise<void>;
|
|
38
100
|
/**
|
|
39
101
|
* Send a text message to a Google Chat space.
|
|
40
102
|
*
|
|
41
103
|
* In webhook mode, the `channel` parameter is ignored (webhook URL determines the space).
|
|
42
|
-
* In service
|
|
104
|
+
* In service-account/pubsub mode, `channel` is the space name (e.g., "spaces/AAAA...").
|
|
43
105
|
*
|
|
44
|
-
* @param channel - Google Chat space name (used in service
|
|
106
|
+
* @param channel - Google Chat space name (used in service-account/pubsub mode)
|
|
45
107
|
* @param text - Message content
|
|
46
108
|
* @param options - Optional send options (threadId for threaded replies)
|
|
47
109
|
* @throws Error if adapter is not initialized or send fails
|
|
@@ -52,7 +114,7 @@ export declare class GoogleChatMessengerAdapter implements MessengerAdapter {
|
|
|
52
114
|
/**
|
|
53
115
|
* Get the current connection status.
|
|
54
116
|
*
|
|
55
|
-
* @returns Status object with connected flag and
|
|
117
|
+
* @returns Status object with connected flag, platform, and mode details
|
|
56
118
|
*/
|
|
57
119
|
getStatus(): {
|
|
58
120
|
connected: boolean;
|
|
@@ -60,19 +122,53 @@ export declare class GoogleChatMessengerAdapter implements MessengerAdapter {
|
|
|
60
122
|
details?: Record<string, unknown>;
|
|
61
123
|
};
|
|
62
124
|
/**
|
|
63
|
-
* Disconnect by clearing stored credentials.
|
|
125
|
+
* Disconnect by clearing stored credentials and stopping the pull loop.
|
|
64
126
|
*/
|
|
65
127
|
disconnect(): Promise<void>;
|
|
66
128
|
/**
|
|
67
129
|
* Add an emoji reaction to a Google Chat message.
|
|
68
130
|
*
|
|
69
|
-
* Only works in service
|
|
131
|
+
* Only works in service-account/pubsub mode — webhook mode does not support the
|
|
70
132
|
* reactions API. Calls `spaces.messages.reactions.create`.
|
|
71
133
|
*
|
|
72
134
|
* @param messageName - Full message resource name (e.g., "spaces/xxx/messages/yyy")
|
|
73
135
|
* @param emoji - Unicode emoji character (e.g., "👀", "✅")
|
|
74
136
|
*/
|
|
75
137
|
addReaction(messageName: string, emoji: string): Promise<void>;
|
|
138
|
+
/**
|
|
139
|
+
* Start the Pub/Sub pull loop that periodically fetches messages.
|
|
140
|
+
*/
|
|
141
|
+
private startPubSubPull;
|
|
142
|
+
/**
|
|
143
|
+
* Stop the Pub/Sub pull loop.
|
|
144
|
+
*/
|
|
145
|
+
private stopPubSubPull;
|
|
146
|
+
/**
|
|
147
|
+
* Pull messages from the Pub/Sub subscription, process them, and acknowledge.
|
|
148
|
+
*
|
|
149
|
+
* Each message is a base64-encoded Google Chat event JSON. Only MESSAGE-type
|
|
150
|
+
* events are forwarded to the incoming message callback. All messages are
|
|
151
|
+
* acknowledged regardless of type to prevent redelivery.
|
|
152
|
+
*/
|
|
153
|
+
pullMessages(): Promise<number>;
|
|
154
|
+
/**
|
|
155
|
+
* Process a Google Chat event and forward MESSAGE events to the callback.
|
|
156
|
+
*
|
|
157
|
+
* Supports two payload formats:
|
|
158
|
+
* - **Legacy (v1)**: `{ type: 'MESSAGE', message: { text, sender, thread }, space }`
|
|
159
|
+
* - **v2**: `{ commonEventObject: {...}, chat: { messagePayload: { message: {...}, space: {...} } } }`
|
|
160
|
+
*
|
|
161
|
+
* Both formats are normalized into the same IncomingMessage shape.
|
|
162
|
+
*
|
|
163
|
+
* @param event - Parsed Google Chat event payload (legacy or v2)
|
|
164
|
+
*/
|
|
165
|
+
private processChatEvent;
|
|
166
|
+
/**
|
|
167
|
+
* Acknowledge processed messages to prevent redelivery.
|
|
168
|
+
*
|
|
169
|
+
* @param ackIds - Array of ack IDs from the pull response
|
|
170
|
+
*/
|
|
171
|
+
private acknowledgeMessages;
|
|
76
172
|
/**
|
|
77
173
|
* Send a message via incoming webhook URL.
|
|
78
174
|
*
|
|
@@ -83,18 +179,110 @@ export declare class GoogleChatMessengerAdapter implements MessengerAdapter {
|
|
|
83
179
|
/**
|
|
84
180
|
* Send a message via the Google Chat REST API using service account credentials.
|
|
85
181
|
*
|
|
182
|
+
* When a threadId (thread name) is provided, the reply is posted to the same
|
|
183
|
+
* thread. This enables conversational thread tracking for Pub/Sub mode.
|
|
184
|
+
*
|
|
86
185
|
* @param space - Space name (e.g., "spaces/AAAA...")
|
|
87
186
|
* @param text - Message text
|
|
88
|
-
* @param
|
|
187
|
+
* @param threadName - Optional full thread name (e.g., "spaces/SPACE/threads/THREAD")
|
|
89
188
|
*/
|
|
90
189
|
private sendViaApi;
|
|
190
|
+
/**
|
|
191
|
+
* Split a message into chunks that fit within Google Chat's character limit.
|
|
192
|
+
*
|
|
193
|
+
* Splits on double-newline paragraph boundaries when possible. Falls back to
|
|
194
|
+
* single-newline, then hard truncation at maxLength.
|
|
195
|
+
*
|
|
196
|
+
* @param text - The full message text to split
|
|
197
|
+
* @param maxLength - Maximum characters per chunk (default 4000)
|
|
198
|
+
* @returns Array of text chunks, each within maxLength
|
|
199
|
+
*/
|
|
200
|
+
static splitMessage(text: string, maxLength?: number): string[];
|
|
91
201
|
/**
|
|
92
202
|
* Get a valid access token, refreshing if needed.
|
|
93
203
|
*
|
|
94
|
-
* Uses
|
|
204
|
+
* Uses JWT-based OAuth2 for service accounts, or refresh_token flow for ADC.
|
|
205
|
+
* The scope includes Pub/Sub when in pubsub mode.
|
|
95
206
|
*
|
|
96
207
|
* @returns Valid access token string
|
|
97
208
|
*/
|
|
98
|
-
|
|
209
|
+
getAccessToken(): Promise<string>;
|
|
210
|
+
/**
|
|
211
|
+
* Perform the actual token refresh.
|
|
212
|
+
*
|
|
213
|
+
* Dispatches to the appropriate flow based on authMode:
|
|
214
|
+
* - `service_account`: JWT-based OAuth2 flow with SA private key
|
|
215
|
+
* - `adc`: Refresh token flow using ADC credentials
|
|
216
|
+
*
|
|
217
|
+
* @returns Fresh access token string
|
|
218
|
+
*/
|
|
219
|
+
private refreshAccessToken;
|
|
220
|
+
/**
|
|
221
|
+
* Refresh access token via JWT-based OAuth2 flow (service account).
|
|
222
|
+
*
|
|
223
|
+
* @returns Fresh access token string
|
|
224
|
+
*/
|
|
225
|
+
private refreshAccessTokenViaJwt;
|
|
226
|
+
/**
|
|
227
|
+
* Refresh access token via ADC (Application Default Credentials).
|
|
228
|
+
*
|
|
229
|
+
* Uses the refresh_token from the ADC JSON file to obtain a new access token
|
|
230
|
+
* from Google's OAuth2 token endpoint. This supports credentials created by
|
|
231
|
+
* `gcloud auth application-default login`.
|
|
232
|
+
*
|
|
233
|
+
* When `serviceAccountEmail` is configured, the ADC user token is used to
|
|
234
|
+
* impersonate the service account via the IAM Credentials API, producing a
|
|
235
|
+
* token with `chat.bot` and `pubsub` scopes that the Chat API accepts.
|
|
236
|
+
*
|
|
237
|
+
* @returns Fresh access token string (impersonated SA token if configured, else user token)
|
|
238
|
+
*/
|
|
239
|
+
private refreshAccessTokenViaAdc;
|
|
240
|
+
/**
|
|
241
|
+
* Impersonate a service account using the IAM Credentials API.
|
|
242
|
+
*
|
|
243
|
+
* Uses the user's ADC access token to call `generateAccessToken` on the
|
|
244
|
+
* target service account, producing a token with `chat.bot` and `pubsub`
|
|
245
|
+
* scopes. The user must have the `Service Account Token Creator` IAM role.
|
|
246
|
+
*
|
|
247
|
+
* @param userToken - ADC user access token for authorization
|
|
248
|
+
* @returns Impersonated service account access token
|
|
249
|
+
* @throws Error if impersonation fails (e.g., missing IAM role)
|
|
250
|
+
*/
|
|
251
|
+
private impersonateServiceAccount;
|
|
252
|
+
/**
|
|
253
|
+
* Build auth headers for Google API requests.
|
|
254
|
+
*
|
|
255
|
+
* When using ADC auth mode, adds x-goog-user-project header to set the
|
|
256
|
+
* billing/quota project. Without this header, ADC requests fail with
|
|
257
|
+
* 403 PERMISSION_DENIED because Google cannot determine which project
|
|
258
|
+
* should be billed for the API usage.
|
|
259
|
+
*
|
|
260
|
+
* @param token - OAuth2 access token
|
|
261
|
+
* @returns Headers object with Authorization, Content-Type, and optional quota project
|
|
262
|
+
*/
|
|
263
|
+
private getAuthHeaders;
|
|
264
|
+
/**
|
|
265
|
+
* Validate a service account key JSON string.
|
|
266
|
+
*
|
|
267
|
+
* @param key - JSON string of the service account key
|
|
268
|
+
* @throws Error if the key is invalid
|
|
269
|
+
*/
|
|
270
|
+
private validateServiceAccountKey;
|
|
271
|
+
/**
|
|
272
|
+
* Load ADC (Application Default Credentials) from the filesystem.
|
|
273
|
+
*
|
|
274
|
+
* Checks (in order):
|
|
275
|
+
* 1. `GOOGLE_APPLICATION_CREDENTIALS` environment variable (custom path)
|
|
276
|
+
* 2. Default gcloud ADC path: `~/.config/gcloud/application_default_credentials.json`
|
|
277
|
+
*
|
|
278
|
+
* @returns Parsed ADC credentials
|
|
279
|
+
* @throws Error if the ADC file is not found or invalid
|
|
280
|
+
*/
|
|
281
|
+
loadAdcCredentials(): Promise<AdcCredentials>;
|
|
282
|
+
/**
|
|
283
|
+
* Reset all internal state to defaults.
|
|
284
|
+
*/
|
|
285
|
+
private resetState;
|
|
99
286
|
}
|
|
287
|
+
export {};
|
|
100
288
|
//# sourceMappingURL=google-chat-messenger.adapter.d.ts.map
|
package/dist/backend/backend/src/services/messaging/adapters/google-chat-messenger.adapter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google-chat-messenger.adapter.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/messaging/adapters/google-chat-messenger.adapter.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"google-chat-messenger.adapter.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/messaging/adapters/google-chat-messenger.adapter.ts"],"names":[],"mappings":"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"}
|