@bigfootai/sdk 1.9.0 → 1.11.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/dist/index.d.ts +163 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +142 -14
- package/dist/index.js.map +1 -1
- package/dist/index.test.js +38 -0
- package/dist/index.test.js.map +1 -1
- package/dist/logging-redaction.test.d.ts +2 -0
- package/dist/logging-redaction.test.d.ts.map +1 -0
- package/dist/logging-redaction.test.js +82 -0
- package/dist/logging-redaction.test.js.map +1 -0
- package/dist/mount.test.d.ts +2 -0
- package/dist/mount.test.d.ts.map +1 -0
- package/dist/mount.test.js +59 -0
- package/dist/mount.test.js.map +1 -0
- package/dist/upsert-message.test.d.ts +2 -0
- package/dist/upsert-message.test.d.ts.map +1 -0
- package/dist/upsert-message.test.js +119 -0
- package/dist/upsert-message.test.js.map +1 -0
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,48 @@
|
|
|
1
|
-
import { type AuthCheckResult, type AuthRefreshProviderResponse, type Calendar, type ConnectedProvider, type ConnectedProviderRegistration, type Credential, type Email, type EmailFilter, type ExecuteFunctionProviderRequest, type ExecuteFunctionProviderResponse, type ExecuteQueryProviderRequest, type ExecuteQueryProviderResponse, type ExternalNote, type ExternalObjectWithUrl, type ExternalTagReferenceRequest, type InsightFilter, type LinkSubscriptionProviderRequest, type LinkSubscriptionProviderResponse, type ResolveFunctionInputsProviderRequest, type ResolveFunctionInputsProviderResponse, type StandardSyncResponse, type SyncCalendarProviderRequest, type SyncExternalIdLinksProviderRequest, type SyncTableMetadataProviderRequest, type SyncTableProviderRequest, type Table, type Tag, type TagInsightResponse, type Transcription, type TranscriptionFilter, type UpsertNotesProviderRequest, type UpsertTableProviderRequest } from '@bigfootai/bigfoot-types';
|
|
1
|
+
import { type AuthCheckResult, type AuthRefreshProviderResponse, type Calendar, type ConnectedProvider, type ConnectedProviderRegistration, type Credential, type Email, type EmailFilter, type ExecuteFunctionProviderRequest, type ExecuteFunctionProviderResponse, type ExecuteQueryProviderRequest, type ExecuteQueryProviderResponse, type ExternalNote, type ExternalObjectWithUrl, type ExternalTagReferenceRequest, type InsightFilter, type LinkSubscriptionProviderRequest, type LinkSubscriptionProviderResponse, type Message, type ResolveFunctionInputsProviderRequest, type ResolveFunctionInputsProviderResponse, type StandardSyncResponse, type SyncCalendarProviderRequest, type SyncExternalIdLinksProviderRequest, type SyncTableMetadataProviderRequest, type SyncTableProviderRequest, type Table, type Tag, type TagInsightResponse, type TagType, type Transcription, type TranscriptionFilter, type UpsertMessageProviderRequest, type UpsertNotesProviderRequest, type UpsertTableProviderRequest } from '@bigfootai/bigfoot-types';
|
|
2
2
|
import { type Express } from 'express';
|
|
3
3
|
import { CredentialsExpiredError, ValidationError } from './errors.js';
|
|
4
|
+
/**
|
|
5
|
+
* Redaction paths applied to every log record. Each sensitive field name is
|
|
6
|
+
* matched at the top level and up to two levels of nesting, which covers the
|
|
7
|
+
* shapes actually logged (`{ credential }`, `{ connectedProvider: { credential } }`,
|
|
8
|
+
* `{ req: { headers } }`). The whole `credential` object is redacted rather
|
|
9
|
+
* than its individual fields, so a credential shape that gains a new token
|
|
10
|
+
* field later is still covered.
|
|
11
|
+
*/
|
|
12
|
+
export declare const LOG_REDACT_PATHS: string[];
|
|
4
13
|
export declare const logger: import("pino").Logger<never, boolean>;
|
|
5
14
|
export type Logger = typeof logger;
|
|
15
|
+
/**
|
|
16
|
+
* Drops the query string from a request URL. Used for logging: the OAuth
|
|
17
|
+
* callback carries the authorization code and state there.
|
|
18
|
+
*/
|
|
19
|
+
export declare const stripQueryString: (url: string | undefined) => string | undefined;
|
|
20
|
+
/**
|
|
21
|
+
* The envelope generation this SDK serves: 2 means StandardSyncResponse. The platform's provider
|
|
22
|
+
* monitor reads it (with sdkVersion) from /api/v1/hello to build its version-drift table.
|
|
23
|
+
*/
|
|
24
|
+
export declare const SDK_CONTRACT_VERSION = "2";
|
|
25
|
+
export declare function readSdkVersion(): string;
|
|
26
|
+
/**
|
|
27
|
+
* Serializes a request for logging, replacing pino's default request
|
|
28
|
+
* serializer.
|
|
29
|
+
*
|
|
30
|
+
* The default emits the full URL and every request header, both of which carry
|
|
31
|
+
* credentials in this service: the OAuth callback receives the authorization
|
|
32
|
+
* code and `state` on its query string, and the platform authenticates with an
|
|
33
|
+
* `Authorization: Bearer` header. This emits only what is needed to trace a
|
|
34
|
+
* request — correlation id, method, and path — so no credential is ever handed
|
|
35
|
+
* to the logger in the first place.
|
|
36
|
+
*/
|
|
37
|
+
export declare const serializeRequestForLog: (req: {
|
|
38
|
+
id?: unknown;
|
|
39
|
+
method?: string;
|
|
40
|
+
url?: string;
|
|
41
|
+
}) => {
|
|
42
|
+
id: unknown;
|
|
43
|
+
method: string;
|
|
44
|
+
url: string;
|
|
45
|
+
};
|
|
6
46
|
export type AuthConnectResult = {
|
|
7
47
|
type: 'redirect';
|
|
8
48
|
url: string;
|
|
@@ -65,6 +105,51 @@ interface LinkMethods {
|
|
|
65
105
|
*/
|
|
66
106
|
link(logger: Logger, credential: Credential, application: string, request: LinkSubscriptionProviderRequest): Promise<LinkSubscriptionProviderResponse>;
|
|
67
107
|
}
|
|
108
|
+
/**
|
|
109
|
+
* Thread sync shapes. These mirror `ThreadSyncScope`, `ThreadFilter`,
|
|
110
|
+
* `SyncThreadProviderRequest` and `SyncThreadItem` in `@bigfootai/bigfoot-types`
|
|
111
|
+
* and should be replaced by the shared imports once a types release carrying
|
|
112
|
+
* the thread sync types is published.
|
|
113
|
+
*/
|
|
114
|
+
export interface ThreadSyncScope {
|
|
115
|
+
/** Provider-native id of the channel the scope reads from. */
|
|
116
|
+
channelExternalId?: string;
|
|
117
|
+
/** Earliest message date to fetch for this scope (epoch ms). */
|
|
118
|
+
dateStart?: number;
|
|
119
|
+
/** Maximum messages for this scope; used by channel backfills. */
|
|
120
|
+
limit?: number;
|
|
121
|
+
/** Noded tag id a channel scope belongs to; round-tripped for attribution. */
|
|
122
|
+
tagId?: string;
|
|
123
|
+
/** Composite external id of the thread root a thread scope reads. */
|
|
124
|
+
threadExternalId?: string;
|
|
125
|
+
}
|
|
126
|
+
export interface ThreadFilter {
|
|
127
|
+
/** Opaque cursor from the previous page; the provider owns the format. */
|
|
128
|
+
cursor?: string;
|
|
129
|
+
dateEnd?: number;
|
|
130
|
+
dateStart?: number;
|
|
131
|
+
/** Overall message budget for one call; the provider may return fewer with hasMore. */
|
|
132
|
+
limit?: number;
|
|
133
|
+
scopes: ThreadSyncScope[];
|
|
134
|
+
}
|
|
135
|
+
export interface SyncThreadProviderRequest {
|
|
136
|
+
connectedProvider: ConnectedProvider;
|
|
137
|
+
threadFilter: ThreadFilter;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* One thread of messages returned by a provider's /sync/thread endpoint.
|
|
141
|
+
* Messages carry composite external ids and threadIds pointing at the thread
|
|
142
|
+
* root, in the same shape the provider uses for direct message ingestion.
|
|
143
|
+
*/
|
|
144
|
+
export interface SyncThreadItem {
|
|
145
|
+
/** Provider-native id of the channel this thread lives in. */
|
|
146
|
+
channelExternalId?: string;
|
|
147
|
+
/** Composite external id of the thread root. */
|
|
148
|
+
externalId: string;
|
|
149
|
+
messages: Message[];
|
|
150
|
+
/** The tag id echoed back from the channel scope this thread came from. */
|
|
151
|
+
tagId?: string;
|
|
152
|
+
}
|
|
68
153
|
interface SyncMethods {
|
|
69
154
|
/**
|
|
70
155
|
* Get calendar information from the provider.
|
|
@@ -120,6 +205,16 @@ interface SyncMethods {
|
|
|
120
205
|
* @param request The request to get the table data.
|
|
121
206
|
*/
|
|
122
207
|
table(logger: Logger, credential: Credential, request: SyncTableProviderRequest): Promise<StandardSyncResponse<Table>>;
|
|
208
|
+
/**
|
|
209
|
+
* Get message threads from the provider. The filter's scopes name the
|
|
210
|
+
* channels and subscribed thread roots to read; the provider returns
|
|
211
|
+
* thread-shaped items carrying messages in the standard Message shape.
|
|
212
|
+
*
|
|
213
|
+
* @param logger The logger to use for logging.
|
|
214
|
+
* @param credential The credentials to use to authenticate with the provider.
|
|
215
|
+
* @param filter The scopes, date window, cursor and budget for this page.
|
|
216
|
+
*/
|
|
217
|
+
thread(logger: Logger, credential: Credential, filter: ThreadFilter): Promise<StandardSyncResponse<SyncThreadItem>>;
|
|
123
218
|
/**
|
|
124
219
|
* Get the transcriptions from the provider.
|
|
125
220
|
*
|
|
@@ -148,6 +243,62 @@ interface UpsertMethods {
|
|
|
148
243
|
* @param request The request to upsert the data.
|
|
149
244
|
*/
|
|
150
245
|
notes(logger: Logger, credential: Credential, request: UpsertNotesProviderRequest): Promise<ExternalNote[]>;
|
|
246
|
+
/**
|
|
247
|
+
* Deliver a message through the provider, for example posting to a Slack
|
|
248
|
+
* channel or DM. The platform calls this when a user approves a message
|
|
249
|
+
* recommendation for a provider application whose `externalStorage` is true.
|
|
250
|
+
* `request.message.to.externalId` names the destination in the provider's
|
|
251
|
+
* terms; `bodyDocument` is the ProseMirror JSON and `bodyHtml` the HTML body.
|
|
252
|
+
*
|
|
253
|
+
* @returns The message as stored by the provider. The platform copies
|
|
254
|
+
* `externalId` and `uri` from the result onto its own record.
|
|
255
|
+
*/
|
|
256
|
+
message(logger: Logger, credential: Credential, request: UpsertMessageProviderRequest): Promise<Message>;
|
|
257
|
+
}
|
|
258
|
+
/** A person the platform wants notified. `credential` identifies which connected account to reach them through. */
|
|
259
|
+
export interface WebhookPersonRecipient {
|
|
260
|
+
_id: string;
|
|
261
|
+
email: string | null;
|
|
262
|
+
credential: Pick<Credential, 'email' | 'instanceId' | 'instanceUrl' | 'profile'>;
|
|
263
|
+
}
|
|
264
|
+
/** A tag (channel, topic, account) with an external id link into the provider. */
|
|
265
|
+
export interface WebhookTagRecipient {
|
|
266
|
+
_id: string;
|
|
267
|
+
alias: string;
|
|
268
|
+
email: string | null;
|
|
269
|
+
externalId: string;
|
|
270
|
+
tagType: TagType;
|
|
271
|
+
tagSubType?: string | null;
|
|
272
|
+
url?: string | null;
|
|
273
|
+
credential: Pick<Credential, 'instanceId'>;
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Payload of `POST /webhook`, sent by the platform's notification agent to
|
|
277
|
+
* every provider application that declares a matching `webhookSubscriptions`
|
|
278
|
+
* type. `message.htmlContent` is the notification body.
|
|
279
|
+
*/
|
|
280
|
+
export interface ProviderWebhookRequest {
|
|
281
|
+
type: 'notification' | 'record_change';
|
|
282
|
+
thread: {
|
|
283
|
+
_id: string;
|
|
284
|
+
subject?: string | null;
|
|
285
|
+
};
|
|
286
|
+
message: {
|
|
287
|
+
_id: string;
|
|
288
|
+
htmlContent?: string | null;
|
|
289
|
+
};
|
|
290
|
+
peopleRecipients: WebhookPersonRecipient[];
|
|
291
|
+
tagRecipients: WebhookTagRecipient[];
|
|
292
|
+
}
|
|
293
|
+
interface WebhookMethods {
|
|
294
|
+
/**
|
|
295
|
+
* Receive a platform notification and fan it out inside the provider
|
|
296
|
+
* (DM the people, post to the linked channels). Called for provider
|
|
297
|
+
* applications with `webhookSubscriptions: [{ type: 'notification' }]`.
|
|
298
|
+
* Return once delivery has been attempted; failures should be logged and
|
|
299
|
+
* thrown so the platform can record them.
|
|
300
|
+
*/
|
|
301
|
+
notification(logger: Logger, request: ProviderWebhookRequest): Promise<void>;
|
|
151
302
|
}
|
|
152
303
|
interface TagMethods {
|
|
153
304
|
/**
|
|
@@ -200,7 +351,7 @@ interface QueryMethods {
|
|
|
200
351
|
*/
|
|
201
352
|
execute(logger: Logger, credential: Credential, request: ExecuteQueryProviderRequest): Promise<ExecuteQueryProviderResponse>;
|
|
202
353
|
}
|
|
203
|
-
interface StartServerOptions {
|
|
354
|
+
export interface StartServerOptions {
|
|
204
355
|
auth?: Partial<AuthMethods>;
|
|
205
356
|
function?: Partial<FunctionMethods>;
|
|
206
357
|
link?: Partial<LinkMethods>;
|
|
@@ -208,6 +359,16 @@ interface StartServerOptions {
|
|
|
208
359
|
sync?: Partial<SyncMethods>;
|
|
209
360
|
tag?: Partial<TagMethods>;
|
|
210
361
|
upsert?: Partial<UpsertMethods>;
|
|
362
|
+
webhook?: Partial<WebhookMethods>;
|
|
363
|
+
/**
|
|
364
|
+
* Mount provider-owned routes on the Express app before the SDK's body
|
|
365
|
+
* parsers and platform-key middleware run. Use it for routers that verify
|
|
366
|
+
* their own request signatures over the raw body and are called by a third
|
|
367
|
+
* party rather than the platform, such as Slack Bolt's `ExpressReceiver`
|
|
368
|
+
* router. Anything mounted here is reachable without the platform key, so
|
|
369
|
+
* mount only routes that authenticate callers themselves.
|
|
370
|
+
*/
|
|
371
|
+
mount?: (app: Express) => void;
|
|
211
372
|
}
|
|
212
373
|
export declare function createApp(options: StartServerOptions): Express;
|
|
213
374
|
export declare function startServer(options: StartServerOptions): Promise<Express>;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,KAAK,eAAe,EAEpB,KAAK,2BAA2B,EAChC,KAAK,QAAQ,EACb,KAAK,iBAAiB,EACtB,KAAK,6BAA6B,EAClC,KAAK,UAAU,EACf,KAAK,KAAK,EACV,KAAK,WAAW,EAChB,KAAK,8BAA8B,EACnC,KAAK,+BAA+B,EACpC,KAAK,2BAA2B,EAChC,KAAK,4BAA4B,EACjC,KAAK,YAAY,EACjB,KAAK,qBAAqB,EAC1B,KAAK,2BAA2B,EAOhC,KAAK,aAAa,EAClB,KAAK,+BAA+B,EACpC,KAAK,gCAAgC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ProcessingStage, } from '@bigfootai/bigfoot-types';
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
2
3
|
import bodyParser from 'body-parser';
|
|
3
4
|
import express from 'express';
|
|
4
5
|
import { pino } from 'pino';
|
|
@@ -6,12 +7,98 @@ import { pinoHttp } from 'pino-http';
|
|
|
6
7
|
import { CredentialsExpiredError, ValidationError, errorHandler } from './errors.js';
|
|
7
8
|
import { getConnectionErrorHtml } from './html.js';
|
|
8
9
|
import { createPlatformAuthMiddleware, resolvePlatformKey } from './platform-auth.js';
|
|
9
|
-
|
|
10
|
+
/**
|
|
11
|
+
* Field names whose values must never appear in log output in clear text.
|
|
12
|
+
*
|
|
13
|
+
* This is defence in depth, not the primary control. The primary control is
|
|
14
|
+
* that no log statement in this SDK passes a credential to the logger in the
|
|
15
|
+
* first place, and that the HTTP request serializer emits only method and
|
|
16
|
+
* path. Redaction is the backstop: if a future log statement — here or in a
|
|
17
|
+
* provider built on this SDK — ever includes one of these fields, pino masks
|
|
18
|
+
* the value before it reaches the log store rather than relying on every
|
|
19
|
+
* author to remember.
|
|
20
|
+
*/
|
|
21
|
+
const SENSITIVE_FIELD_NAMES = [
|
|
22
|
+
'access_token',
|
|
23
|
+
'accessToken',
|
|
24
|
+
'api_key',
|
|
25
|
+
'apiKey',
|
|
26
|
+
'authorization',
|
|
27
|
+
'client_secret',
|
|
28
|
+
'clientSecret',
|
|
29
|
+
'cookie',
|
|
30
|
+
'id_token',
|
|
31
|
+
'idToken',
|
|
32
|
+
'password',
|
|
33
|
+
'refresh_token',
|
|
34
|
+
'refreshToken',
|
|
35
|
+
'secret',
|
|
36
|
+
'token',
|
|
37
|
+
];
|
|
38
|
+
/**
|
|
39
|
+
* Redaction paths applied to every log record. Each sensitive field name is
|
|
40
|
+
* matched at the top level and up to two levels of nesting, which covers the
|
|
41
|
+
* shapes actually logged (`{ credential }`, `{ connectedProvider: { credential } }`,
|
|
42
|
+
* `{ req: { headers } }`). The whole `credential` object is redacted rather
|
|
43
|
+
* than its individual fields, so a credential shape that gains a new token
|
|
44
|
+
* field later is still covered.
|
|
45
|
+
*/
|
|
46
|
+
export const LOG_REDACT_PATHS = [
|
|
47
|
+
...SENSITIVE_FIELD_NAMES,
|
|
48
|
+
...SENSITIVE_FIELD_NAMES.map((field) => `*.${field}`),
|
|
49
|
+
...SENSITIVE_FIELD_NAMES.map((field) => `*.*.${field}`),
|
|
50
|
+
'credential',
|
|
51
|
+
'*.credential',
|
|
52
|
+
'req.headers.authorization',
|
|
53
|
+
'req.headers.cookie',
|
|
54
|
+
];
|
|
55
|
+
export const logger = pino({
|
|
56
|
+
redact: {
|
|
57
|
+
censor: '[Redacted]',
|
|
58
|
+
paths: LOG_REDACT_PATHS,
|
|
59
|
+
},
|
|
60
|
+
});
|
|
10
61
|
/**
|
|
11
62
|
* Drops the query string from a request URL. Used for logging: the OAuth
|
|
12
63
|
* callback carries the authorization code and state there.
|
|
13
64
|
*/
|
|
14
|
-
const stripQueryString = (url) => url?.split('?')[0];
|
|
65
|
+
export const stripQueryString = (url) => url?.split('?')[0];
|
|
66
|
+
/**
|
|
67
|
+
* The envelope generation this SDK serves: 2 means StandardSyncResponse. The platform's provider
|
|
68
|
+
* monitor reads it (with sdkVersion) from /api/v1/hello to build its version-drift table.
|
|
69
|
+
*/
|
|
70
|
+
export const SDK_CONTRACT_VERSION = '2';
|
|
71
|
+
export function readSdkVersion() {
|
|
72
|
+
try {
|
|
73
|
+
const packageDefinition = createRequire(import.meta.url)('../package.json');
|
|
74
|
+
if (typeof packageDefinition === 'object' &&
|
|
75
|
+
packageDefinition !== null &&
|
|
76
|
+
'version' in packageDefinition &&
|
|
77
|
+
typeof packageDefinition.version === 'string') {
|
|
78
|
+
return packageDefinition.version;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
// The package.json is unreadable in this runtime layout; report unknown below.
|
|
83
|
+
}
|
|
84
|
+
return 'unknown';
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Serializes a request for logging, replacing pino's default request
|
|
88
|
+
* serializer.
|
|
89
|
+
*
|
|
90
|
+
* The default emits the full URL and every request header, both of which carry
|
|
91
|
+
* credentials in this service: the OAuth callback receives the authorization
|
|
92
|
+
* code and `state` on its query string, and the platform authenticates with an
|
|
93
|
+
* `Authorization: Bearer` header. This emits only what is needed to trace a
|
|
94
|
+
* request — correlation id, method, and path — so no credential is ever handed
|
|
95
|
+
* to the logger in the first place.
|
|
96
|
+
*/
|
|
97
|
+
export const serializeRequestForLog = (req) => ({
|
|
98
|
+
id: req.id,
|
|
99
|
+
method: req.method,
|
|
100
|
+
url: stripQueryString(req.url),
|
|
101
|
+
});
|
|
15
102
|
export function createApp(options) {
|
|
16
103
|
const app = express();
|
|
17
104
|
// Expose static files, for provider images, etc.
|
|
@@ -27,19 +114,13 @@ export function createApp(options) {
|
|
|
27
114
|
},
|
|
28
115
|
logger: logger,
|
|
29
116
|
serializers: {
|
|
30
|
-
|
|
31
|
-
// URL and every request header. Both carry credentials here: the
|
|
32
|
-
// OAuth callback receives the authorization code and state on its
|
|
33
|
-
// query string, and the platform authenticates with an
|
|
34
|
-
// `Authorization: Bearer` header. Neither may reach the log store,
|
|
35
|
-
// so this emits only what is useful for tracing a request.
|
|
36
|
-
req: (req) => ({
|
|
37
|
-
id: req.id,
|
|
38
|
-
method: req.method,
|
|
39
|
-
url: stripQueryString(req.url),
|
|
40
|
-
}),
|
|
117
|
+
req: serializeRequestForLog,
|
|
41
118
|
},
|
|
42
119
|
}));
|
|
120
|
+
// Provider-owned routers that verify their own signatures need the raw
|
|
121
|
+
// body, so they are mounted before the SDK's parsers and before the
|
|
122
|
+
// platform-key middleware. See `StartServerOptions.mount`.
|
|
123
|
+
options.mount?.(app);
|
|
43
124
|
app.use(express.json({
|
|
44
125
|
limit: '50mb',
|
|
45
126
|
}));
|
|
@@ -55,7 +136,11 @@ export function createApp(options) {
|
|
|
55
136
|
app.use(createPlatformAuthMiddleware(platformKey));
|
|
56
137
|
}
|
|
57
138
|
app.get('/api/v1/hello', (req, res) => {
|
|
58
|
-
res.
|
|
139
|
+
res.json({
|
|
140
|
+
contractVersion: SDK_CONTRACT_VERSION,
|
|
141
|
+
message: 'You look nice today :)',
|
|
142
|
+
sdkVersion: readSdkVersion(),
|
|
143
|
+
});
|
|
59
144
|
});
|
|
60
145
|
app.get('/auth/callback', async (req, res) => {
|
|
61
146
|
const queryParams = new URLSearchParams(req.query);
|
|
@@ -206,6 +291,19 @@ export function createApp(options) {
|
|
|
206
291
|
}
|
|
207
292
|
res.send(await options.sync.table(req.log, body.connectedProvider.credential, body));
|
|
208
293
|
});
|
|
294
|
+
app.post('/sync/thread', async (req, res) => {
|
|
295
|
+
if (!req.body) {
|
|
296
|
+
throw new ValidationError('A body must be provided in the request');
|
|
297
|
+
}
|
|
298
|
+
const body = req.body;
|
|
299
|
+
if (!body.connectedProvider || !body.connectedProvider.credential) {
|
|
300
|
+
throw new ValidationError('body.connectedProvider.credential must not be null');
|
|
301
|
+
}
|
|
302
|
+
if (!body.threadFilter) {
|
|
303
|
+
throw new ValidationError('body.threadFilter must not be null');
|
|
304
|
+
}
|
|
305
|
+
res.send(await options.sync.thread(req.log, body.connectedProvider.credential, body.threadFilter));
|
|
306
|
+
});
|
|
209
307
|
app.post('/sync/transcription', async (req, res) => {
|
|
210
308
|
if (!req.body) {
|
|
211
309
|
throw new ValidationError('A body must be provided in the request');
|
|
@@ -290,6 +388,36 @@ export function createApp(options) {
|
|
|
290
388
|
}
|
|
291
389
|
res.send(await options.upsert.notes(req.log, body.connectedProvider.credential, body));
|
|
292
390
|
});
|
|
391
|
+
app.post('/upsert/message', async (req, res) => {
|
|
392
|
+
if (!req.body) {
|
|
393
|
+
throw new ValidationError('A body must be provided in the request');
|
|
394
|
+
}
|
|
395
|
+
const body = req.body;
|
|
396
|
+
if (!body.connectedProvider || !body.connectedProvider.credential) {
|
|
397
|
+
throw new ValidationError('body.connectedProvider.credential must not be null');
|
|
398
|
+
}
|
|
399
|
+
if (!body.message) {
|
|
400
|
+
throw new ValidationError('body.message must be provided in the request');
|
|
401
|
+
}
|
|
402
|
+
if (!options.upsert?.message) {
|
|
403
|
+
throw new ValidationError('This provider does not support sending messages');
|
|
404
|
+
}
|
|
405
|
+
res.send(await options.upsert.message(req.log, body.connectedProvider.credential, body));
|
|
406
|
+
});
|
|
407
|
+
app.post('/webhook', async (req, res) => {
|
|
408
|
+
if (!req.body) {
|
|
409
|
+
throw new ValidationError('A body must be provided in the request');
|
|
410
|
+
}
|
|
411
|
+
const body = req.body;
|
|
412
|
+
if (body.type !== 'notification' && body.type !== 'record_change') {
|
|
413
|
+
throw new ValidationError('body.type must be "notification" or "record_change"');
|
|
414
|
+
}
|
|
415
|
+
if (!options.webhook?.notification) {
|
|
416
|
+
throw new ValidationError('This provider does not accept webhooks');
|
|
417
|
+
}
|
|
418
|
+
await options.webhook.notification(req.log, body);
|
|
419
|
+
res.status(204).end();
|
|
420
|
+
});
|
|
293
421
|
app.post('/install/function/inputs', async (req, res) => {
|
|
294
422
|
if (!req.body) {
|
|
295
423
|
throw new ValidationError('A body must be provided in the request');
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.test.js
CHANGED
|
@@ -142,4 +142,42 @@ describe('/auth/callback scope check integration', () => {
|
|
|
142
142
|
expect(response.text).not.toContain('window.close');
|
|
143
143
|
});
|
|
144
144
|
});
|
|
145
|
+
describe('POST /sync/thread', () => {
|
|
146
|
+
it('passes the thread filter to sync.thread and returns its response', async () => {
|
|
147
|
+
const app = createApp({
|
|
148
|
+
sync: {
|
|
149
|
+
thread: async (_logger, _credential, filter) => ({
|
|
150
|
+
items: [
|
|
151
|
+
{
|
|
152
|
+
channelExternalId: 'C1',
|
|
153
|
+
externalId: 'C1:100.1',
|
|
154
|
+
messages: [],
|
|
155
|
+
tagId: filter.scopes[0]?.tagId,
|
|
156
|
+
},
|
|
157
|
+
],
|
|
158
|
+
metadata: {},
|
|
159
|
+
pagination: { hasMore: false, pageSize: 0 },
|
|
160
|
+
}),
|
|
161
|
+
},
|
|
162
|
+
});
|
|
163
|
+
const response = await supertest(app)
|
|
164
|
+
.post('/sync/thread')
|
|
165
|
+
.send({
|
|
166
|
+
connectedProvider: makeConnectedProvider(),
|
|
167
|
+
threadFilter: { scopes: [{ channelExternalId: 'C1', tagId: 'tag-1' }] },
|
|
168
|
+
})
|
|
169
|
+
.expect(200);
|
|
170
|
+
expect(response.body.items[0].externalId).toBe('C1:100.1');
|
|
171
|
+
expect(response.body.items[0].tagId).toBe('tag-1');
|
|
172
|
+
expect(response.body.pagination.hasMore).toBe(false);
|
|
173
|
+
});
|
|
174
|
+
it('returns 400 when threadFilter is missing', async () => {
|
|
175
|
+
const app = createApp({
|
|
176
|
+
sync: {
|
|
177
|
+
thread: async () => ({ items: [], metadata: {}, pagination: { hasMore: false, pageSize: 0 } }),
|
|
178
|
+
},
|
|
179
|
+
});
|
|
180
|
+
await supertest(app).post('/sync/thread').send({ connectedProvider: makeConnectedProvider() }).expect(400);
|
|
181
|
+
});
|
|
182
|
+
});
|
|
145
183
|
//# sourceMappingURL=index.test.js.map
|
package/dist/index.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,0EAA0E;AAC1E,4EAA4E;AAC5E,kCAAkC;AAClC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,GAAG,MAAM,CAAC;AAEhD,SAAS,qBAAqB;IAC7B,OAAO;QACN,WAAW,EAAE,UAAU;QACvB,YAAY,EAAE,oBAAoB;QAClC,UAAU,EAAE;YACX,WAAW,EAAE,mBAAmB;YAChC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ;YACjC,KAAK,EAAE,kBAAkB;YACzB,OAAO,EAAE,EAAE;SACX;QACD,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;QACvB,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;QACvB,QAAQ,EAAE,QAAQ;KAClB,CAAC;AACH,CAAC;AAED,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,GAAG,GAAG,SAAS,CAAC;YACrB,IAAI,EAAE;gBACL,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,WAAW;oBAC7C,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;gBACzB,CAAC;aACD;SACD,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC;aACnC,IAAI,CAAC,aAAa,CAAC;aACnB,IAAI,CAAC,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,EAAE,CAAC;aACpD,MAAM,CAAC,GAAG,CAAC,CAAC;QAEd,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4EAA4E,EAAE,KAAK,IAAI,EAAE;QAC3F,MAAM,GAAG,GAAG,SAAS,CAAC;YACrB,IAAI,EAAE;gBACL,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,WAAW;oBAC7C,OAAO;wBACN,OAAO,EAAE,mDAAmD;wBAC5D,MAAM,EAAE,gBAAgB;qBACxB,CAAC;gBACH,CAAC;aACD;SACD,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC;aACnC,IAAI,CAAC,aAAa,CAAC;aACnB,IAAI,CAAC,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,EAAE,CAAC;aACpD,MAAM,CAAC,GAAG,CAAC,CAAC;QAEd,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;YAC7B,MAAM,EAAE;gBACP,OAAO,EAAE,mDAAmD;gBAC5D,MAAM,EAAE,gBAAgB;aACxB;SACD,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,GAAG,GAAG,SAAS,CAAC;YACrB,IAAI,EAAE;gBACL,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,WAAW;oBAC7C,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;gBACzB,CAAC;aACD;SACD,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAE9G,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,GAAG,GAAG,SAAS,CAAC;YACrB,IAAI,EAAE;gBACL,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,WAAW;oBAC7C,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;gBACzB,CAAC;aACD;SACD,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC;aACnC,IAAI,CAAC,aAAa,CAAC;aACnB,IAAI,CAAC,EAAE,iBAAiB,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC;aAC/F,MAAM,CAAC,GAAG,CAAC,CAAC;QAEd,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,GAAG,GAAG,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAEpC,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC;aACnC,IAAI,CAAC,aAAa,CAAC;aACnB,IAAI,CAAC,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,EAAE,CAAC;aACpD,MAAM,CAAC,GAAG,CAAC,CAAC;QAEd,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QAClF,IAAI,mBAAuC,CAAC;QAC5C,IAAI,mBAAuC,CAAC;QAE5C,MAAM,GAAG,GAAG,SAAS,CAAC;YACrB,IAAI,EAAE;gBACL,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU;oBAC3C,mBAAmB,GAAG,WAAW,CAAC;oBAClC,mBAAmB,GAAG,UAAU,CAAC,WAAW,CAAC;oBAC7C,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;gBACzB,CAAC;aACD;SACD,CAAC,CAAC;QAEH,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAE1G,MAAM,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7C,MAAM,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,wCAAwC,EAAE,GAAG,EAAE;IACvD,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QACrF,MAAM,GAAG,GAAG,SAAS,CAAC;YACrB,IAAI,EAAE;gBACL,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW;oBACxC,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;oBACvE,OAAO;wBACN,YAAY;wBACZ,UAAU,EAAE;4BACX,WAAW,EAAE,KAAK;4BAClB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ;4BACjC,KAAK,EAAE,kBAAkB;4BACzB,OAAO,EAAE,EAAE;yBACX;wBACD,YAAY,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE;qBAC7D,CAAC;gBACH,CAAC;gBACD,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,WAAW;oBAC7C,OAAO;wBACN,OAAO,EAAE,yBAAyB;wBAClC,MAAM,EAAE,gBAAgB;qBACxB,CAAC;gBACH,CAAC;aACD;SACD,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC;aACnC,GAAG,CAAC,gBAAgB,CAAC;aACrB,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;aACjD,MAAM,CAAC,GAAG,CAAC,CAAC;QAEd,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC/D,8DAA8D;QAC9D,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;QACjF,MAAM,GAAG,GAAG,SAAS,CAAC;YACrB,IAAI,EAAE;gBACL,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;oBAChD,KAAK,EAAE;wBACN;4BACC,iBAAiB,EAAE,IAAI;4BACvB,UAAU,EAAE,UAAU;4BACtB,QAAQ,EAAE,EAAE;4BACZ,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK;yBAC9B;qBACD;oBACD,QAAQ,EAAE,EAAE;oBACZ,UAAU,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE;iBAC3C,CAAC;aACF;SACD,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC;aACnC,IAAI,CAAC,cAAc,CAAC;aACpB,IAAI,CAAC;YACL,iBAAiB,EAAE,qBAAqB,EAAE;YAC1C,YAAY,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE;SACvE,CAAC;aACD,MAAM,CAAC,GAAG,CAAC,CAAC;QAEd,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3D,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,GAAG,GAAG,SAAS,CAAC;YACrB,IAAI,EAAE;gBACL,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;aAC9F;SACD,CAAC,CAAC;QAEH,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5G,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logging-redaction.test.d.ts","sourceRoot":"","sources":["../src/logging-redaction.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { pino } from 'pino';
|
|
2
|
+
import { describe, expect, it } from 'vitest';
|
|
3
|
+
import { LOG_REDACT_PATHS, serializeRequestForLog, stripQueryString } from './index.js';
|
|
4
|
+
/**
|
|
5
|
+
* Evidence for ASVS 7.1.1 / CASA 6.5.1: credentials must not reach the log
|
|
6
|
+
* store. Two independent controls are asserted here.
|
|
7
|
+
*
|
|
8
|
+
* 1. Avoidance — the request serializer never hands the URL query string or
|
|
9
|
+
* the request headers to the logger, so authorization codes and bearer
|
|
10
|
+
* tokens are not logged even in principle.
|
|
11
|
+
* 2. Redaction — every log record passes through pino's redaction paths, so a
|
|
12
|
+
* credential included by some future log statement is masked rather than
|
|
13
|
+
* written in clear text.
|
|
14
|
+
*/
|
|
15
|
+
/** Captures log output using the same configuration the SDK logger runs with. */
|
|
16
|
+
const captureLogOutput = (log) => {
|
|
17
|
+
const chunks = [];
|
|
18
|
+
const logger = pino({
|
|
19
|
+
redact: { censor: '[Redacted]', paths: LOG_REDACT_PATHS },
|
|
20
|
+
serializers: { req: serializeRequestForLog },
|
|
21
|
+
}, { write: (chunk) => chunks.push(chunk) });
|
|
22
|
+
log(logger);
|
|
23
|
+
return chunks.join('');
|
|
24
|
+
};
|
|
25
|
+
describe('stripQueryString', () => {
|
|
26
|
+
it('removes the query string, where the OAuth authorization code travels', () => {
|
|
27
|
+
expect(stripQueryString('/auth/callback?code=4/0AY0e-g7&state=abc.calendar')).toBe('/auth/callback');
|
|
28
|
+
});
|
|
29
|
+
it('leaves a URL with no query string untouched', () => {
|
|
30
|
+
expect(stripQueryString('/sync/email')).toBe('/sync/email');
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
describe('serializeRequestForLog', () => {
|
|
34
|
+
it('emits only correlation id, method and path', () => {
|
|
35
|
+
expect(serializeRequestForLog({
|
|
36
|
+
id: 7,
|
|
37
|
+
method: 'GET',
|
|
38
|
+
url: '/auth/callback?code=4/0AY0e-g7&state=abc.calendar',
|
|
39
|
+
})).toEqual({ id: 7, method: 'GET', url: '/auth/callback' });
|
|
40
|
+
});
|
|
41
|
+
// The default pino serializer includes a `headers` object. Ours must not,
|
|
42
|
+
// because the platform authenticates with an Authorization header.
|
|
43
|
+
it('does not carry request headers through to the log record', () => {
|
|
44
|
+
const serialized = serializeRequestForLog({ id: 1, method: 'POST', url: '/sync/email' });
|
|
45
|
+
expect(serialized).not.toHaveProperty('headers');
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
describe('log redaction', () => {
|
|
49
|
+
it('masks OAuth tokens at the top level and when nested', () => {
|
|
50
|
+
const output = captureLogOutput((logger) => logger.info({
|
|
51
|
+
accessToken: 'ya29.a0AfH6SMB-top-level',
|
|
52
|
+
connectedProvider: { credential: { accessToken: 'ya29.a0AfH6SMB-nested', refreshToken: '1//04-nested' } },
|
|
53
|
+
settings: { apiKey: 'bigfoot-api-key-value' },
|
|
54
|
+
}, 'credential handling'));
|
|
55
|
+
expect(output).not.toContain('ya29.a0AfH6SMB-top-level');
|
|
56
|
+
expect(output).not.toContain('ya29.a0AfH6SMB-nested');
|
|
57
|
+
expect(output).not.toContain('1//04-nested');
|
|
58
|
+
expect(output).not.toContain('bigfoot-api-key-value');
|
|
59
|
+
expect(output).toContain('[Redacted]');
|
|
60
|
+
});
|
|
61
|
+
it('masks the Authorization header if a request record ever carries one', () => {
|
|
62
|
+
const output = captureLogOutput((logger) => logger.info({ req: { headers: { authorization: 'Bearer platform-key-value' } } }, 'request'));
|
|
63
|
+
expect(output).not.toContain('platform-key-value');
|
|
64
|
+
});
|
|
65
|
+
// The end-to-end shape: an OAuth callback carrying a live authorization code
|
|
66
|
+
// and state, logged exactly as the running service would log it.
|
|
67
|
+
it('writes no authorization code, state, or bearer token for an OAuth callback', () => {
|
|
68
|
+
const output = captureLogOutput((logger) => logger.info({
|
|
69
|
+
req: {
|
|
70
|
+
headers: { authorization: 'Bearer platform-key-value' },
|
|
71
|
+
id: 1,
|
|
72
|
+
method: 'GET',
|
|
73
|
+
url: '/auth/callback?code=4/0AY0e-g7SECRETCODE&state=9f2c1e44-1b3a-4c7d-9e10-abc.calendar',
|
|
74
|
+
},
|
|
75
|
+
}, 'request completed'));
|
|
76
|
+
expect(output).not.toContain('4/0AY0e-g7SECRETCODE');
|
|
77
|
+
expect(output).not.toContain('9f2c1e44-1b3a-4c7d-9e10');
|
|
78
|
+
expect(output).not.toContain('platform-key-value');
|
|
79
|
+
expect(output).toContain('"url":"/auth/callback"');
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
//# sourceMappingURL=logging-redaction.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logging-redaction.test.js","sourceRoot":"","sources":["../src/logging-redaction.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mount.test.d.ts","sourceRoot":"","sources":["../src/mount.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import express from 'express';
|
|
2
|
+
import supertest from 'supertest';
|
|
3
|
+
import { afterAll, beforeAll, describe, expect, it } from 'vitest';
|
|
4
|
+
import { createApp } from './index.js';
|
|
5
|
+
import { ALLOW_UNAUTHENTICATED_VAR, BIGFOOT_API_KEY_VAR } from './platform-auth.js';
|
|
6
|
+
// Runs with the platform key ENABLED to prove that mounted routes are reachable
|
|
7
|
+
// without it while SDK routes still require it.
|
|
8
|
+
const originalKey = process.env[BIGFOOT_API_KEY_VAR];
|
|
9
|
+
const originalAllow = process.env[ALLOW_UNAUTHENTICATED_VAR];
|
|
10
|
+
beforeAll(() => {
|
|
11
|
+
process.env[BIGFOOT_API_KEY_VAR] = 'platform-key';
|
|
12
|
+
delete process.env[ALLOW_UNAUTHENTICATED_VAR];
|
|
13
|
+
});
|
|
14
|
+
afterAll(() => {
|
|
15
|
+
if (originalKey === undefined)
|
|
16
|
+
delete process.env[BIGFOOT_API_KEY_VAR];
|
|
17
|
+
else
|
|
18
|
+
process.env[BIGFOOT_API_KEY_VAR] = originalKey;
|
|
19
|
+
if (originalAllow === undefined)
|
|
20
|
+
delete process.env[ALLOW_UNAUTHENTICATED_VAR];
|
|
21
|
+
else
|
|
22
|
+
process.env[ALLOW_UNAUTHENTICATED_VAR] = originalAllow;
|
|
23
|
+
});
|
|
24
|
+
describe('StartServerOptions.mount', () => {
|
|
25
|
+
it('mounts provider routes before body parsing and before the platform-key check', async () => {
|
|
26
|
+
const seen = {};
|
|
27
|
+
const router = express.Router();
|
|
28
|
+
// Simulates a receiver that verifies a signature over the raw body: it
|
|
29
|
+
// must observe an unconsumed stream, so express.json must not have run yet.
|
|
30
|
+
router.post('/slack/events', (req, res) => {
|
|
31
|
+
let raw = '';
|
|
32
|
+
req.on('data', (chunk) => {
|
|
33
|
+
raw += chunk.toString();
|
|
34
|
+
});
|
|
35
|
+
req.on('end', () => {
|
|
36
|
+
seen.rawBodyLength = raw.length;
|
|
37
|
+
seen.parsedBody = req.body;
|
|
38
|
+
res.status(200).send('ok');
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
const app = createApp({
|
|
42
|
+
mount: (expressApp) => {
|
|
43
|
+
expressApp.use(router);
|
|
44
|
+
},
|
|
45
|
+
upsert: { message: async () => ({}) },
|
|
46
|
+
});
|
|
47
|
+
await supertest(app)
|
|
48
|
+
.post('/slack/events')
|
|
49
|
+
.set('Content-Type', 'application/json')
|
|
50
|
+
.send('{"type":"event"}')
|
|
51
|
+
.expect(200);
|
|
52
|
+
expect(seen.rawBodyLength).toBe('{"type":"event"}'.length);
|
|
53
|
+
expect(seen.parsedBody).toBeUndefined();
|
|
54
|
+
// SDK routes remain protected by the platform key.
|
|
55
|
+
await supertest(app).post('/upsert/message').send({}).expect(401);
|
|
56
|
+
await supertest(app).post('/upsert/message').set('Authorization', 'Bearer platform-key').send({}).expect(400);
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=mount.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mount.test.js","sourceRoot":"","sources":["../src/mount.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upsert-message.test.d.ts","sourceRoot":"","sources":["../src/upsert-message.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import supertest from 'supertest';
|
|
2
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
3
|
+
import { createApp } from './index.js';
|
|
4
|
+
import { ALLOW_UNAUTHENTICATED_VAR } from './platform-auth.js';
|
|
5
|
+
// Handler behaviour only; the platform-key check is covered in platform-auth.test.ts
|
|
6
|
+
// and the mount ordering in mount.test.ts.
|
|
7
|
+
process.env[ALLOW_UNAUTHENTICATED_VAR] = 'true';
|
|
8
|
+
function makeConnectedProvider() {
|
|
9
|
+
return {
|
|
10
|
+
application: 'platform',
|
|
11
|
+
connectionId: 'test-connection-id',
|
|
12
|
+
credential: {
|
|
13
|
+
accessToken: 'xoxb-test',
|
|
14
|
+
dateExpiry: 0,
|
|
15
|
+
email: 'test@example.com',
|
|
16
|
+
instanceId: 'T123',
|
|
17
|
+
instanceUrl: 'https://acme.slack.com',
|
|
18
|
+
profile: {},
|
|
19
|
+
},
|
|
20
|
+
dateCreated: Date.now(),
|
|
21
|
+
dateUpdated: Date.now(),
|
|
22
|
+
provider: 'slack',
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
const message = {
|
|
26
|
+
_id: 'msg-1',
|
|
27
|
+
blockType: 'message',
|
|
28
|
+
bodyHtml: '<p>Hello</p>',
|
|
29
|
+
bodyDocument: '{"type":"doc","content":[]}',
|
|
30
|
+
to: { externalId: 'C123' },
|
|
31
|
+
};
|
|
32
|
+
describe('POST /upsert/message', () => {
|
|
33
|
+
it('passes the credential and request to upsert.message and returns its result', async () => {
|
|
34
|
+
const upsertMessage = vi.fn().mockResolvedValue({
|
|
35
|
+
...message,
|
|
36
|
+
externalId: '1700000000.000100',
|
|
37
|
+
uri: 'https://acme.slack.com/archives/C123/p1700000000000100',
|
|
38
|
+
});
|
|
39
|
+
const app = createApp({ upsert: { message: upsertMessage } });
|
|
40
|
+
const response = await supertest(app)
|
|
41
|
+
.post('/upsert/message')
|
|
42
|
+
.send({ connectedProvider: makeConnectedProvider(), message })
|
|
43
|
+
.expect(200);
|
|
44
|
+
expect(response.body.externalId).toBe('1700000000.000100');
|
|
45
|
+
expect(upsertMessage).toHaveBeenCalledTimes(1);
|
|
46
|
+
const [, credential, request] = upsertMessage.mock.calls[0];
|
|
47
|
+
expect(credential.accessToken).toBe('xoxb-test');
|
|
48
|
+
expect(request.message.to.externalId).toBe('C123');
|
|
49
|
+
});
|
|
50
|
+
it('returns 400 when the credential is missing', async () => {
|
|
51
|
+
const app = createApp({ upsert: { message: vi.fn() } });
|
|
52
|
+
const response = await supertest(app)
|
|
53
|
+
.post('/upsert/message')
|
|
54
|
+
.send({ connectedProvider: { provider: 'slack' }, message })
|
|
55
|
+
.expect(400);
|
|
56
|
+
expect(response.body.detail).toMatch(/credential/);
|
|
57
|
+
});
|
|
58
|
+
it('returns 400 when the message is missing', async () => {
|
|
59
|
+
const app = createApp({ upsert: { message: vi.fn() } });
|
|
60
|
+
const response = await supertest(app)
|
|
61
|
+
.post('/upsert/message')
|
|
62
|
+
.send({ connectedProvider: makeConnectedProvider() })
|
|
63
|
+
.expect(400);
|
|
64
|
+
expect(response.body.detail).toMatch(/message/);
|
|
65
|
+
});
|
|
66
|
+
it('returns 400 when the provider does not implement message sending', async () => {
|
|
67
|
+
const app = createApp({ upsert: {} });
|
|
68
|
+
const response = await supertest(app)
|
|
69
|
+
.post('/upsert/message')
|
|
70
|
+
.send({ connectedProvider: makeConnectedProvider(), message })
|
|
71
|
+
.expect(400);
|
|
72
|
+
expect(response.body.detail).toMatch(/does not support sending messages/);
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
describe('POST /webhook', () => {
|
|
76
|
+
const payload = {
|
|
77
|
+
type: 'notification',
|
|
78
|
+
thread: { _id: 'thread-1', subject: 'Renewal risk' },
|
|
79
|
+
message: { _id: 'm-1', htmlContent: '<p>Acme flagged churn risk.</p>' },
|
|
80
|
+
peopleRecipients: [
|
|
81
|
+
{
|
|
82
|
+
_id: 'tag-p',
|
|
83
|
+
email: 'joan@acme.test',
|
|
84
|
+
credential: { email: 'joan@acme.test', instanceId: 'T123', instanceUrl: 'https://acme.slack.com', profile: {} },
|
|
85
|
+
},
|
|
86
|
+
],
|
|
87
|
+
tagRecipients: [
|
|
88
|
+
{
|
|
89
|
+
_id: 'tag-c',
|
|
90
|
+
alias: '#acme',
|
|
91
|
+
email: null,
|
|
92
|
+
externalId: 'C123',
|
|
93
|
+
tagType: 'topic',
|
|
94
|
+
credential: { instanceId: 'T123' },
|
|
95
|
+
},
|
|
96
|
+
],
|
|
97
|
+
};
|
|
98
|
+
it('hands the payload to webhook.notification and answers 204', async () => {
|
|
99
|
+
const notification = vi.fn().mockResolvedValue(undefined);
|
|
100
|
+
const app = createApp({ webhook: { notification } });
|
|
101
|
+
await supertest(app).post('/webhook').send(payload).expect(204);
|
|
102
|
+
expect(notification).toHaveBeenCalledTimes(1);
|
|
103
|
+
expect(notification.mock.calls[0][1].tagRecipients[0].externalId).toBe('C123');
|
|
104
|
+
});
|
|
105
|
+
it('rejects unknown webhook types', async () => {
|
|
106
|
+
const app = createApp({ webhook: { notification: vi.fn() } });
|
|
107
|
+
const response = await supertest(app)
|
|
108
|
+
.post('/webhook')
|
|
109
|
+
.send({ ...payload, type: 'other' })
|
|
110
|
+
.expect(400);
|
|
111
|
+
expect(response.body.detail).toMatch(/body.type/);
|
|
112
|
+
});
|
|
113
|
+
it('returns 400 when the provider does not accept webhooks', async () => {
|
|
114
|
+
const app = createApp({});
|
|
115
|
+
const response = await supertest(app).post('/webhook').send(payload).expect(400);
|
|
116
|
+
expect(response.body.detail).toMatch(/does not accept webhooks/);
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
//# sourceMappingURL=upsert-message.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upsert-message.test.js","sourceRoot":"","sources":["../src/upsert-message.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bigfootai/sdk",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.11.0",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist",
|
|
7
7
|
"LICENSE",
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
],
|
|
10
10
|
"main": "dist/index.js",
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@bigfootai/bigfoot-types": "^5.4.
|
|
12
|
+
"@bigfootai/bigfoot-types": "^5.4.296",
|
|
13
13
|
"body-parser": "^2.2.2",
|
|
14
14
|
"express": "^5.0.1",
|
|
15
15
|
"pino": "^9.9.0",
|