@polpo-ai/connect-server 0.15.136 → 0.15.138
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/memory-store.d.ts +11 -2
- package/dist/memory-store.d.ts.map +1 -1
- package/dist/memory-store.js +44 -2
- package/dist/memory-store.js.map +1 -1
- package/dist/secrets.d.ts +19 -0
- package/dist/secrets.d.ts.map +1 -1
- package/dist/secrets.js +43 -0
- package/dist/secrets.js.map +1 -1
- package/dist/service.d.ts +44 -3
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +650 -65
- package/dist/service.js.map +1 -1
- package/package.json +3 -2
package/dist/memory-store.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import { type ConnectStore, type ConnectionListFilter, type ConnectionRecord, type OAuthStateRecord } from "@polpo-ai/connect";
|
|
2
|
-
export declare class MemoryConnectStore implements ConnectStore {
|
|
1
|
+
import { type ConnectStore, type ConnectionLink, type ConnectionLinkListFilter, type ConnectionLinkStore, type ConnectionListFilter, type ConnectionRecord, type ConnectionSetupSession, type ConnectionSetupSessionStore, type OAuthStateRecord } from "@polpo-ai/connect";
|
|
2
|
+
export declare class MemoryConnectStore implements ConnectStore, ConnectionLinkStore, ConnectionSetupSessionStore {
|
|
3
3
|
private readonly connections;
|
|
4
4
|
private readonly oauthStates;
|
|
5
|
+
private readonly links;
|
|
6
|
+
private readonly setupSessions;
|
|
5
7
|
listConnections(filter?: ConnectionListFilter): Promise<ConnectionRecord[]>;
|
|
6
8
|
getConnection(id: string): Promise<ConnectionRecord | null>;
|
|
7
9
|
upsertConnection(record: ConnectionRecord): Promise<ConnectionRecord>;
|
|
@@ -9,5 +11,12 @@ export declare class MemoryConnectStore implements ConnectStore {
|
|
|
9
11
|
deleteConnection(id: string): Promise<void>;
|
|
10
12
|
saveOAuthState(record: OAuthStateRecord): Promise<void>;
|
|
11
13
|
consumeOAuthState(state: string): Promise<OAuthStateRecord | null>;
|
|
14
|
+
listConnectionLinks(filter?: ConnectionLinkListFilter): Promise<ConnectionLink[]>;
|
|
15
|
+
getConnectionLink(id: string): Promise<ConnectionLink | null>;
|
|
16
|
+
upsertConnectionLink(link: ConnectionLink): Promise<ConnectionLink>;
|
|
17
|
+
updateConnectionLink(id: string, patch: Partial<Omit<ConnectionLink, "id" | "createdAt">>): Promise<ConnectionLink>;
|
|
18
|
+
saveConnectionSetupSession(session: ConnectionSetupSession): Promise<void>;
|
|
19
|
+
getConnectionSetupSession(id: string): Promise<ConnectionSetupSession | null>;
|
|
20
|
+
consumeConnectionSetupSession(id: string, consumedAt: string): Promise<ConnectionSetupSession | null>;
|
|
12
21
|
}
|
|
13
22
|
//# sourceMappingURL=memory-store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-store.d.ts","sourceRoot":"","sources":["../src/memory-store.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"memory-store.d.ts","sourceRoot":"","sources":["../src/memory-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,2BAA2B,EAChC,KAAK,gBAAgB,EACtB,MAAM,mBAAmB,CAAC;AAE3B,qBAAa,kBAAmB,YAAW,YAAY,EAAE,mBAAmB,EAAE,2BAA2B;IACvG,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuC;IACnE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuC;IACnE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqC;IAC3D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA6C;IAErE,eAAe,CAAC,MAAM,GAAE,oBAAyB,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAI/E,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAK3D,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAKrE,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,GAAG,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAQnH,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvD,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAMlE,mBAAmB,CAAC,MAAM,GAAE,wBAA6B,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAQrF,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAK7D,oBAAoB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAKnE,oBAAoB,CACxB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,GAAG,WAAW,CAAC,CAAC,GACvD,OAAO,CAAC,cAAc,CAAC;IAQpB,0BAA0B,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1E,yBAAyB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC;IAK7E,6BAA6B,CACjC,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC;CAO1C"}
|
package/dist/memory-store.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import { ConnectError } from "@polpo-ai/connect";
|
|
1
|
+
import { ConnectError, } from "@polpo-ai/connect";
|
|
2
2
|
export class MemoryConnectStore {
|
|
3
3
|
connections = new Map();
|
|
4
4
|
oauthStates = new Map();
|
|
5
|
+
links = new Map();
|
|
6
|
+
setupSessions = new Map();
|
|
5
7
|
async listConnections(filter = {}) {
|
|
6
8
|
return [...this.connections.values()].filter((connection) => matchesFilter(connection, filter)).map(clone);
|
|
7
9
|
}
|
|
@@ -32,6 +34,43 @@ export class MemoryConnectStore {
|
|
|
32
34
|
this.oauthStates.delete(state);
|
|
33
35
|
return record ? clone(record) : null;
|
|
34
36
|
}
|
|
37
|
+
async listConnectionLinks(filter = {}) {
|
|
38
|
+
return [...this.links.values()].filter((link) => (!filter.connectionId || link.connectionId === filter.connectionId)
|
|
39
|
+
&& (!filter.projectId || link.projectId === filter.projectId)
|
|
40
|
+
&& (!filter.status || link.status === filter.status))
|
|
41
|
+
.map(clone);
|
|
42
|
+
}
|
|
43
|
+
async getConnectionLink(id) {
|
|
44
|
+
const link = this.links.get(id);
|
|
45
|
+
return link ? clone(link) : null;
|
|
46
|
+
}
|
|
47
|
+
async upsertConnectionLink(link) {
|
|
48
|
+
this.links.set(link.id, clone(link));
|
|
49
|
+
return clone(link);
|
|
50
|
+
}
|
|
51
|
+
async updateConnectionLink(id, patch) {
|
|
52
|
+
const existing = this.links.get(id);
|
|
53
|
+
if (!existing)
|
|
54
|
+
throw new ConnectError("connection_not_found", `Connection link not found: ${id}`);
|
|
55
|
+
const updated = { ...existing, ...patch, id, createdAt: existing.createdAt };
|
|
56
|
+
this.links.set(id, clone(updated));
|
|
57
|
+
return clone(updated);
|
|
58
|
+
}
|
|
59
|
+
async saveConnectionSetupSession(session) {
|
|
60
|
+
this.setupSessions.set(session.id, clone(session));
|
|
61
|
+
}
|
|
62
|
+
async getConnectionSetupSession(id) {
|
|
63
|
+
const session = this.setupSessions.get(id);
|
|
64
|
+
return session ? clone(session) : null;
|
|
65
|
+
}
|
|
66
|
+
async consumeConnectionSetupSession(id, consumedAt) {
|
|
67
|
+
const session = this.setupSessions.get(id);
|
|
68
|
+
if (!session || session.consumedAt)
|
|
69
|
+
return null;
|
|
70
|
+
const consumed = { ...session, consumedAt };
|
|
71
|
+
this.setupSessions.set(id, clone(consumed));
|
|
72
|
+
return clone(session);
|
|
73
|
+
}
|
|
35
74
|
}
|
|
36
75
|
function matchesFilter(connection, filter) {
|
|
37
76
|
if (filter.providerId && connection.providerId !== filter.providerId)
|
|
@@ -42,7 +81,10 @@ function matchesFilter(connection, filter) {
|
|
|
42
81
|
return false;
|
|
43
82
|
if (filter.status && connection.status !== filter.status)
|
|
44
83
|
return false;
|
|
45
|
-
if (filter.owner && (connection.owner?.type !== filter.owner.type
|
|
84
|
+
if (filter.owner && (connection.owner?.type !== filter.owner.type
|
|
85
|
+
|| connection.owner.id !== filter.owner.id
|
|
86
|
+
|| (filter.owner.type === "external_user"
|
|
87
|
+
&& (connection.owner.type !== "external_user" || connection.owner.namespace !== filter.owner.namespace))))
|
|
46
88
|
return false;
|
|
47
89
|
return true;
|
|
48
90
|
}
|
package/dist/memory-store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-store.js","sourceRoot":"","sources":["../src/memory-store.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"memory-store.js","sourceRoot":"","sources":["../src/memory-store.ts"],"names":[],"mappings":"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"}
|
package/dist/secrets.d.ts
CHANGED
|
@@ -4,10 +4,29 @@ export interface ConnectionSecretStore {
|
|
|
4
4
|
getSecret(ref: string): Promise<StoredConnectionSecret | null>;
|
|
5
5
|
deleteSecret(ref: string): Promise<void>;
|
|
6
6
|
}
|
|
7
|
+
export interface VersionedConnectionSecret {
|
|
8
|
+
secret: StoredConnectionSecret;
|
|
9
|
+
version: string;
|
|
10
|
+
}
|
|
11
|
+
export interface VersionedConnectionSecretStore extends ConnectionSecretStore {
|
|
12
|
+
getVersioned(ref: string): Promise<VersionedConnectionSecret | null>;
|
|
13
|
+
compareAndSet(ref: string, version: string, secret: StoredConnectionSecret): Promise<boolean>;
|
|
14
|
+
}
|
|
15
|
+
export interface TokenRefreshCoordinator {
|
|
16
|
+
runExclusive<T>(connectionId: string, fn: () => Promise<T>): Promise<T>;
|
|
17
|
+
}
|
|
7
18
|
export declare class MemoryConnectionSecretStore implements ConnectionSecretStore {
|
|
8
19
|
private readonly records;
|
|
20
|
+
private readonly versions;
|
|
9
21
|
setSecret(ref: string, secret: StoredConnectionSecret): Promise<void>;
|
|
10
22
|
getSecret(ref: string): Promise<StoredConnectionSecret | null>;
|
|
11
23
|
deleteSecret(ref: string): Promise<void>;
|
|
24
|
+
getVersioned(ref: string): Promise<VersionedConnectionSecret | null>;
|
|
25
|
+
compareAndSet(ref: string, version: string, secret: StoredConnectionSecret): Promise<boolean>;
|
|
26
|
+
}
|
|
27
|
+
export declare class MemoryTokenRefreshCoordinator implements TokenRefreshCoordinator {
|
|
28
|
+
private readonly tails;
|
|
29
|
+
runExclusive<T>(connectionId: string, fn: () => Promise<T>): Promise<T>;
|
|
12
30
|
}
|
|
31
|
+
export declare function isVersionedConnectionSecretStore(store: ConnectionSecretStore): store is VersionedConnectionSecretStore;
|
|
13
32
|
//# sourceMappingURL=secrets.d.ts.map
|
package/dist/secrets.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../src/secrets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAEhE,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAAC;IAC/D,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAED,qBAAa,2BAA4B,YAAW,qBAAqB;IACvE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6C;
|
|
1
|
+
{"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../src/secrets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAEhE,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAAC;IAC/D,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,sBAAsB,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,8BAA+B,SAAQ,qBAAqB;IAC3E,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAAC;IACrE,aAAa,CACX,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAAC,OAAO,CAAC,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACtC,YAAY,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACzE;AAED,qBAAa,2BAA4B,YAAW,qBAAqB;IACvE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6C;IACrE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IAEhD,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrE,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC;IAK9D,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC;IASpE,aAAa,CACjB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAAC,OAAO,CAAC;CAOpB;AAED,qBAAa,6BAA8B,YAAW,uBAAuB;IAC3E,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoC;IAEpD,YAAY,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAc9E;AAED,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,qBAAqB,GAC3B,KAAK,IAAI,8BAA8B,CAIzC"}
|
package/dist/secrets.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
export class MemoryConnectionSecretStore {
|
|
2
2
|
records = new Map();
|
|
3
|
+
versions = new Map();
|
|
3
4
|
async setSecret(ref, secret) {
|
|
4
5
|
this.records.set(ref, clone(secret));
|
|
6
|
+
this.versions.set(ref, (this.versions.get(ref) ?? 0) + 1);
|
|
5
7
|
}
|
|
6
8
|
async getSecret(ref) {
|
|
7
9
|
const secret = this.records.get(ref);
|
|
@@ -9,7 +11,48 @@ export class MemoryConnectionSecretStore {
|
|
|
9
11
|
}
|
|
10
12
|
async deleteSecret(ref) {
|
|
11
13
|
this.records.delete(ref);
|
|
14
|
+
this.versions.set(ref, (this.versions.get(ref) ?? 0) + 1);
|
|
12
15
|
}
|
|
16
|
+
async getVersioned(ref) {
|
|
17
|
+
const secret = this.records.get(ref);
|
|
18
|
+
if (!secret)
|
|
19
|
+
return null;
|
|
20
|
+
return {
|
|
21
|
+
secret: clone(secret),
|
|
22
|
+
version: String(this.versions.get(ref) ?? 0),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
async compareAndSet(ref, version, secret) {
|
|
26
|
+
if (!this.records.has(ref) || String(this.versions.get(ref) ?? 0) !== version) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
await this.setSecret(ref, secret);
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export class MemoryTokenRefreshCoordinator {
|
|
34
|
+
tails = new Map();
|
|
35
|
+
async runExclusive(connectionId, fn) {
|
|
36
|
+
const predecessor = this.tails.get(connectionId) ?? Promise.resolve();
|
|
37
|
+
let release;
|
|
38
|
+
const gate = new Promise((resolve) => { release = resolve; });
|
|
39
|
+
const tail = predecessor.catch(() => undefined).then(() => gate);
|
|
40
|
+
this.tails.set(connectionId, tail);
|
|
41
|
+
await predecessor.catch(() => undefined);
|
|
42
|
+
try {
|
|
43
|
+
return await fn();
|
|
44
|
+
}
|
|
45
|
+
finally {
|
|
46
|
+
release();
|
|
47
|
+
if (this.tails.get(connectionId) === tail)
|
|
48
|
+
this.tails.delete(connectionId);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
export function isVersionedConnectionSecretStore(store) {
|
|
53
|
+
const candidate = store;
|
|
54
|
+
return typeof candidate.getVersioned === "function"
|
|
55
|
+
&& typeof candidate.compareAndSet === "function";
|
|
13
56
|
}
|
|
14
57
|
function clone(value) {
|
|
15
58
|
return JSON.parse(JSON.stringify(value));
|
package/dist/secrets.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../src/secrets.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../src/secrets.ts"],"names":[],"mappings":"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"}
|
package/dist/service.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { type ConnectPolicy, type ConnectStore, type ConnectSubject, type ConnectionRecord, type ConnectorProviderDefinition, type McpConnectionAuth, type McpConnectionTransport, type ResolvedConnectionCredential, type RuntimeToken } from "@polpo-ai/connect";
|
|
2
|
-
import type
|
|
1
|
+
import { type ConnectPolicy, type ConnectStore, type ConnectSubject, type ConnectionAudience, type ConnectionBindingAttributes, type ConnectionLinkStore, type ConnectionLink, type ConnectionLinkListFilter, type ConnectionOwner, type ConnectionRecord, type ConnectionSetupSession, type ConnectionSetupSessionStore, type ConnectorProviderDefinition, type McpConnectionAuth, type McpConnectionTransport, type OAuthClientResolver, type ResolvedConnectionCredential, type RuntimeToken } from "@polpo-ai/connect";
|
|
2
|
+
import { type ConnectionRequest, type ConnectionResponse } from "@polpo-ai/core";
|
|
3
|
+
import { type ConnectionSecretStore, type TokenRefreshCoordinator } from "./secrets.js";
|
|
3
4
|
export interface CreateConnectServiceOptions {
|
|
4
5
|
providers: readonly ConnectorProviderDefinition[];
|
|
5
6
|
store: ConnectStore;
|
|
@@ -10,6 +11,13 @@ export interface CreateConnectServiceOptions {
|
|
|
10
11
|
tokenRefreshSkewMs?: number;
|
|
11
12
|
oauthStateTtlMs?: number;
|
|
12
13
|
allowInsecureLocalMcpUrls?: boolean;
|
|
14
|
+
refreshCoordinator?: TokenRefreshCoordinator;
|
|
15
|
+
resolveHostname?: (hostname: string) => Promise<readonly string[]>;
|
|
16
|
+
oauthClients?: OAuthClientResolver;
|
|
17
|
+
setupSessions?: ConnectionSetupSessionStore;
|
|
18
|
+
links?: ConnectionLinkStore;
|
|
19
|
+
setupSessionTtlMs?: number;
|
|
20
|
+
allowedReturnUrlOrigins?: readonly string[];
|
|
13
21
|
}
|
|
14
22
|
export interface CreateApiKeyConnectionInput {
|
|
15
23
|
providerId: string;
|
|
@@ -39,12 +47,13 @@ export interface CreateMcpConnectionInput {
|
|
|
39
47
|
export interface StartOAuthInput {
|
|
40
48
|
providerId: string;
|
|
41
49
|
scopes?: string[];
|
|
42
|
-
subject?:
|
|
50
|
+
subject?: ConnectionOwner;
|
|
43
51
|
redirectUri: string;
|
|
44
52
|
projectId?: string;
|
|
45
53
|
orgId?: string;
|
|
46
54
|
connectionName?: string;
|
|
47
55
|
metadata?: Record<string, unknown>;
|
|
56
|
+
oauthClientMode?: "managed" | "customer" | "instance";
|
|
48
57
|
}
|
|
49
58
|
export interface StartOAuthResult {
|
|
50
59
|
authorizationUrl: string;
|
|
@@ -68,15 +77,47 @@ export type ResolveConnectionCredentialInput = GetTokenInput;
|
|
|
68
77
|
export interface RevokeConnectionInput {
|
|
69
78
|
connectionId: string;
|
|
70
79
|
}
|
|
80
|
+
export interface ConnectionGatewayRequestInput extends GetTokenInput {
|
|
81
|
+
request: ConnectionRequest;
|
|
82
|
+
signal?: AbortSignal;
|
|
83
|
+
}
|
|
84
|
+
export interface CreateConnectionSetupSessionInput {
|
|
85
|
+
providerId: string;
|
|
86
|
+
projectId: string;
|
|
87
|
+
orgId?: string;
|
|
88
|
+
audience: ConnectionAudience;
|
|
89
|
+
subject: ConnectionOwner;
|
|
90
|
+
binding?: ConnectionBindingAttributes;
|
|
91
|
+
scopes?: string[];
|
|
92
|
+
returnUrl: string;
|
|
93
|
+
oauthClientMode: "managed" | "customer" | "instance";
|
|
94
|
+
metadata?: Record<string, unknown>;
|
|
95
|
+
}
|
|
96
|
+
export interface StartOAuthSetupInput {
|
|
97
|
+
setupSessionId: string;
|
|
98
|
+
}
|
|
99
|
+
export interface LinkConnectionInput {
|
|
100
|
+
connectionId: string;
|
|
101
|
+
projectId: string;
|
|
102
|
+
}
|
|
103
|
+
export interface UnlinkConnectionInput {
|
|
104
|
+
linkId: string;
|
|
105
|
+
}
|
|
71
106
|
export interface ConnectService {
|
|
72
107
|
listProviders(): ConnectorProviderDefinition[];
|
|
73
108
|
listConnections(filter?: Parameters<ConnectStore["listConnections"]>[0]): Promise<ConnectionRecord[]>;
|
|
109
|
+
listConnectionLinks(filter?: ConnectionLinkListFilter): Promise<ConnectionLink[]>;
|
|
110
|
+
linkConnection(input: LinkConnectionInput): Promise<ConnectionLink>;
|
|
111
|
+
unlinkConnection(input: UnlinkConnectionInput): Promise<ConnectionLink>;
|
|
74
112
|
createApiKeyConnection(input: CreateApiKeyConnectionInput): Promise<ConnectionRecord>;
|
|
75
113
|
createMcpConnection(input: CreateMcpConnectionInput): Promise<ConnectionRecord>;
|
|
114
|
+
createSetupSession(input: CreateConnectionSetupSessionInput): Promise<ConnectionSetupSession>;
|
|
115
|
+
startOAuthSetup(input: StartOAuthSetupInput): Promise<StartOAuthResult>;
|
|
76
116
|
startOAuth(input: StartOAuthInput): Promise<StartOAuthResult>;
|
|
77
117
|
completeOAuth(input: CompleteOAuthInput): Promise<ConnectionRecord>;
|
|
78
118
|
resolveCredential(input: ResolveConnectionCredentialInput): Promise<ResolvedConnectionCredential>;
|
|
79
119
|
getToken(input: GetTokenInput): Promise<RuntimeToken>;
|
|
120
|
+
request<T = unknown>(input: ConnectionGatewayRequestInput): Promise<ConnectionResponse<T>>;
|
|
80
121
|
revokeConnection(input: RevokeConnectionInput): Promise<ConnectionRecord>;
|
|
81
122
|
}
|
|
82
123
|
export declare function createConnectService(options: CreateConnectServiceOptions): ConnectService;
|
package/dist/service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
|
package/dist/service.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import { ConnectError, assertAllowedScopes, assertGrantedScopes, createConnectorRegistry, normalizeScopes, } from "@polpo-ai/connect";
|
|
1
|
+
import { ConnectError, assertConnectorRedirectAllowed, assertAllowedScopes, assertGrantedScopes, connectorHostnameIsUnsafe, createConnectorRegistry, normalizeScopes, resolveConnectorHttpRequest, } from "@polpo-ai/connect";
|
|
2
|
+
import { ConnectionSelectionError, } from "@polpo-ai/core";
|
|
3
|
+
import { lookup } from "node:dns/promises";
|
|
4
|
+
import { MemoryTokenRefreshCoordinator, isVersionedConnectionSecretStore, } from "./secrets.js";
|
|
2
5
|
import { createOpaqueToken, createPkcePair, parseScopes, toFormBody } from "./oauth.js";
|
|
3
6
|
export function createConnectService(options) {
|
|
4
7
|
const registry = createConnectorRegistry(options.providers);
|
|
@@ -6,6 +9,97 @@ export function createConnectService(options) {
|
|
|
6
9
|
const now = options.now ?? (() => new Date());
|
|
7
10
|
const tokenRefreshSkewMs = options.tokenRefreshSkewMs ?? 60_000;
|
|
8
11
|
const oauthStateTtlMs = options.oauthStateTtlMs ?? 10 * 60_000;
|
|
12
|
+
const setupSessionTtlMs = options.setupSessionTtlMs ?? 10 * 60_000;
|
|
13
|
+
const refreshCoordinator = options.refreshCoordinator ?? new MemoryTokenRefreshCoordinator();
|
|
14
|
+
const resolveHostname = options.resolveHostname ?? (async (hostname) => (await lookup(hostname, { all: true, verbatim: true })).map((entry) => entry.address));
|
|
15
|
+
const resolveOAuthClient = async (input) => {
|
|
16
|
+
if (options.oauthClients) {
|
|
17
|
+
const client = await options.oauthClients.resolve({
|
|
18
|
+
providerId: input.provider.id,
|
|
19
|
+
...(input.projectId ? { projectId: input.projectId } : {}),
|
|
20
|
+
...(input.orgId ? { orgId: input.orgId } : {}),
|
|
21
|
+
mode: input.mode ?? "managed",
|
|
22
|
+
});
|
|
23
|
+
if (input.redirectUri)
|
|
24
|
+
assertOAuthClient(input.provider.id, input.redirectUri, client);
|
|
25
|
+
else if (client.providerId !== input.provider.id) {
|
|
26
|
+
throw new ConnectError("invalid_provider", "OAuth Client provider does not match Connector");
|
|
27
|
+
}
|
|
28
|
+
return client;
|
|
29
|
+
}
|
|
30
|
+
if (input.provider.auth.type !== "oauth2" || !input.provider.auth.clientId) {
|
|
31
|
+
throw new ConnectError("invalid_provider", `OAuth provider "${input.provider.id}" is missing an OAuth Client resolver`);
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
id: `legacy:${input.provider.id}`,
|
|
35
|
+
providerId: input.provider.id,
|
|
36
|
+
clientId: input.provider.auth.clientId,
|
|
37
|
+
clientSecret: input.provider.auth.clientSecret,
|
|
38
|
+
redirectUris: [input.redirectUri],
|
|
39
|
+
owner: { type: "instance", id: "legacy" },
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
const beginOAuth = async (input) => {
|
|
43
|
+
if (input.provider.auth.type !== "oauth2") {
|
|
44
|
+
throw new ConnectError("unsupported_auth", `Provider "${input.provider.id}" does not use OAuth2 auth`);
|
|
45
|
+
}
|
|
46
|
+
assertOAuthClient(input.provider.id, input.redirectUri, input.client);
|
|
47
|
+
const auth = input.provider.auth;
|
|
48
|
+
const requestedScopes = assertAllowedScopes(input.provider, input.scopes ?? auth.defaultScopes);
|
|
49
|
+
const state = createOpaqueToken();
|
|
50
|
+
const pkce = auth.supportsPkce === false ? undefined : createPkcePair();
|
|
51
|
+
const expiresAt = new Date(now().getTime() + oauthStateTtlMs).toISOString();
|
|
52
|
+
await options.store.saveOAuthState({
|
|
53
|
+
state,
|
|
54
|
+
providerId: input.provider.id,
|
|
55
|
+
subject: input.subject,
|
|
56
|
+
requestedScopes,
|
|
57
|
+
redirectUri: input.redirectUri,
|
|
58
|
+
codeVerifier: pkce?.verifier,
|
|
59
|
+
codeChallenge: pkce?.challenge,
|
|
60
|
+
projectId: input.projectId,
|
|
61
|
+
orgId: input.orgId,
|
|
62
|
+
connectionName: input.connectionName,
|
|
63
|
+
expiresAt,
|
|
64
|
+
createdAt: now().toISOString(),
|
|
65
|
+
metadata: input.metadata,
|
|
66
|
+
oauthClientId: input.client.id,
|
|
67
|
+
audience: input.audience,
|
|
68
|
+
binding: input.binding,
|
|
69
|
+
returnUrl: input.returnUrl,
|
|
70
|
+
});
|
|
71
|
+
const url = new URL(auth.authorizationUrl);
|
|
72
|
+
url.searchParams.set("response_type", "code");
|
|
73
|
+
url.searchParams.set("client_id", input.client.clientId);
|
|
74
|
+
url.searchParams.set("redirect_uri", input.redirectUri);
|
|
75
|
+
url.searchParams.set("state", state);
|
|
76
|
+
if (requestedScopes.length > 0)
|
|
77
|
+
url.searchParams.set("scope", requestedScopes.join(" "));
|
|
78
|
+
if (pkce) {
|
|
79
|
+
url.searchParams.set("code_challenge", pkce.challenge);
|
|
80
|
+
url.searchParams.set("code_challenge_method", "S256");
|
|
81
|
+
}
|
|
82
|
+
for (const [key, value] of Object.entries(auth.extraAuthorizeParams ?? {})) {
|
|
83
|
+
url.searchParams.set(key, value);
|
|
84
|
+
}
|
|
85
|
+
return { authorizationUrl: url.toString(), state, expiresAt };
|
|
86
|
+
};
|
|
87
|
+
const oauthAuthForConnection = async (provider, oauthClientId) => {
|
|
88
|
+
if (provider.auth.type !== "oauth2") {
|
|
89
|
+
throw new ConnectError("unsupported_auth", `Provider "${provider.id}" does not use OAuth2 auth`);
|
|
90
|
+
}
|
|
91
|
+
if (!oauthClientId || oauthClientId.startsWith("legacy:"))
|
|
92
|
+
return provider.auth;
|
|
93
|
+
const client = await options.oauthClients?.resolveById(oauthClientId);
|
|
94
|
+
if (!client || client.providerId !== provider.id) {
|
|
95
|
+
throw new ConnectError("refresh_unavailable", "OAuth Client is unavailable during token refresh");
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
...provider.auth,
|
|
99
|
+
clientId: client.clientId,
|
|
100
|
+
clientSecret: client.clientSecret,
|
|
101
|
+
};
|
|
102
|
+
};
|
|
9
103
|
return {
|
|
10
104
|
listProviders() {
|
|
11
105
|
return registry.list();
|
|
@@ -13,6 +107,52 @@ export function createConnectService(options) {
|
|
|
13
107
|
listConnections(filter) {
|
|
14
108
|
return options.store.listConnections(filter);
|
|
15
109
|
},
|
|
110
|
+
async listConnectionLinks(filter) {
|
|
111
|
+
if (!options.links) {
|
|
112
|
+
throw new ConnectError("setup_invalid", "Connection link storage is not configured on this host");
|
|
113
|
+
}
|
|
114
|
+
return options.links.listConnectionLinks(filter);
|
|
115
|
+
},
|
|
116
|
+
async linkConnection(input) {
|
|
117
|
+
if (!options.links) {
|
|
118
|
+
throw new ConnectError("setup_invalid", "Connection link storage is not configured on this host");
|
|
119
|
+
}
|
|
120
|
+
const connectionId = requiredText("connectionId", input.connectionId);
|
|
121
|
+
const projectId = requiredText("projectId", input.projectId);
|
|
122
|
+
const connection = await options.store.getConnection(connectionId);
|
|
123
|
+
if (!connection || connection.status !== "active") {
|
|
124
|
+
throw new ConnectError("connection_not_found", `Active Connection not found: ${connectionId}`);
|
|
125
|
+
}
|
|
126
|
+
const existing = (await options.links.listConnectionLinks({ connectionId, projectId }))
|
|
127
|
+
.find((link) => link.status === "active");
|
|
128
|
+
if (existing)
|
|
129
|
+
return existing;
|
|
130
|
+
const timestamp = now().toISOString();
|
|
131
|
+
return options.links.upsertConnectionLink({
|
|
132
|
+
id: createId("connlink"),
|
|
133
|
+
connectionId,
|
|
134
|
+
projectId,
|
|
135
|
+
status: "active",
|
|
136
|
+
createdAt: timestamp,
|
|
137
|
+
updatedAt: timestamp,
|
|
138
|
+
});
|
|
139
|
+
},
|
|
140
|
+
async unlinkConnection(input) {
|
|
141
|
+
if (!options.links) {
|
|
142
|
+
throw new ConnectError("setup_invalid", "Connection link storage is not configured on this host");
|
|
143
|
+
}
|
|
144
|
+
const linkId = requiredText("linkId", input.linkId);
|
|
145
|
+
const link = await options.links.getConnectionLink(linkId);
|
|
146
|
+
if (!link) {
|
|
147
|
+
throw new ConnectError("connection_not_found", `Connection link not found: ${linkId}`);
|
|
148
|
+
}
|
|
149
|
+
if (link.status === "revoked")
|
|
150
|
+
return link;
|
|
151
|
+
return options.links.updateConnectionLink(linkId, {
|
|
152
|
+
status: "revoked",
|
|
153
|
+
updatedAt: now().toISOString(),
|
|
154
|
+
});
|
|
155
|
+
},
|
|
16
156
|
async createApiKeyConnection(input) {
|
|
17
157
|
const provider = registry.require(input.providerId);
|
|
18
158
|
if (provider.auth.type !== "api_key") {
|
|
@@ -96,49 +236,101 @@ export function createConnectService(options) {
|
|
|
96
236
|
metadata,
|
|
97
237
|
});
|
|
98
238
|
},
|
|
99
|
-
async
|
|
100
|
-
|
|
239
|
+
async createSetupSession(input) {
|
|
240
|
+
if (!options.setupSessions || !options.oauthClients) {
|
|
241
|
+
throw new ConnectError("setup_invalid", "Connection setup sessions are not configured on this host");
|
|
242
|
+
}
|
|
243
|
+
const provider = registry.require(requiredText("providerId", input.providerId));
|
|
101
244
|
if (provider.auth.type !== "oauth2") {
|
|
102
245
|
throw new ConnectError("unsupported_auth", `Provider "${provider.id}" does not use OAuth2 auth`);
|
|
103
246
|
}
|
|
104
|
-
const
|
|
105
|
-
if (!
|
|
106
|
-
throw new ConnectError("
|
|
247
|
+
const projectId = requiredText("projectId", input.projectId);
|
|
248
|
+
if (!["personal", "shared", "end_user"].includes(input.audience)) {
|
|
249
|
+
throw new ConnectError("setup_invalid", "Connection setup audience is invalid");
|
|
107
250
|
}
|
|
108
|
-
const
|
|
109
|
-
const
|
|
110
|
-
const
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
251
|
+
const returnUrl = normalizeReturnUrl(input.returnUrl, options.allowedReturnUrlOrigins);
|
|
252
|
+
const scopes = assertAllowedScopes(provider, input.scopes ?? provider.auth.defaultScopes);
|
|
253
|
+
const client = await resolveOAuthClient({
|
|
254
|
+
provider,
|
|
255
|
+
projectId,
|
|
256
|
+
...(input.orgId ? { orgId: requiredText("orgId", input.orgId) } : {}),
|
|
257
|
+
redirectUri: "",
|
|
258
|
+
mode: input.oauthClientMode,
|
|
259
|
+
});
|
|
260
|
+
if (client.redirectUris.length === 0) {
|
|
261
|
+
throw new ConnectError("setup_invalid", "OAuth Client has no registered redirect URI");
|
|
262
|
+
}
|
|
263
|
+
const timestamp = now().toISOString();
|
|
264
|
+
const setup = {
|
|
265
|
+
id: createId("connsetup"),
|
|
114
266
|
providerId: provider.id,
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
267
|
+
oauthClientId: client.id,
|
|
268
|
+
projectId,
|
|
269
|
+
...(input.orgId ? { orgId: requiredText("orgId", input.orgId) } : {}),
|
|
270
|
+
audience: input.audience,
|
|
271
|
+
subject: normalizeConnectionOwner(input.subject),
|
|
272
|
+
...(input.binding ? { binding: normalizeConnectionBinding(input.binding) } : {}),
|
|
273
|
+
scopes,
|
|
274
|
+
returnUrl,
|
|
275
|
+
expiresAt: new Date(now().getTime() + setupSessionTtlMs).toISOString(),
|
|
276
|
+
createdAt: timestamp,
|
|
277
|
+
...(input.metadata ? { metadata: input.metadata } : {}),
|
|
278
|
+
};
|
|
279
|
+
await options.setupSessions.saveConnectionSetupSession(setup);
|
|
280
|
+
return setup;
|
|
281
|
+
},
|
|
282
|
+
async startOAuthSetup(input) {
|
|
283
|
+
if (!options.setupSessions || !options.oauthClients) {
|
|
284
|
+
throw new ConnectError("setup_invalid", "Connection setup sessions are not configured on this host");
|
|
285
|
+
}
|
|
286
|
+
const setupSessionId = requiredText("setupSessionId", input.setupSessionId);
|
|
287
|
+
const existing = await options.setupSessions.getConnectionSetupSession(setupSessionId);
|
|
288
|
+
if (!existing) {
|
|
289
|
+
throw new ConnectError("setup_invalid", "Connection setup session was not found");
|
|
290
|
+
}
|
|
291
|
+
if (existing.consumedAt) {
|
|
292
|
+
throw new ConnectError("setup_consumed", "Connection setup session has already been used");
|
|
293
|
+
}
|
|
294
|
+
if (new Date(existing.expiresAt).getTime() <= now().getTime()) {
|
|
295
|
+
throw new ConnectError("setup_expired", "Connection setup session has expired");
|
|
296
|
+
}
|
|
297
|
+
const setup = await options.setupSessions.consumeConnectionSetupSession(setupSessionId, now().toISOString());
|
|
298
|
+
if (!setup) {
|
|
299
|
+
throw new ConnectError("setup_consumed", "Connection setup session has already been used");
|
|
300
|
+
}
|
|
301
|
+
const provider = registry.require(setup.providerId);
|
|
302
|
+
const client = await options.oauthClients.resolveById(setup.oauthClientId);
|
|
303
|
+
if (!client || client.providerId !== provider.id) {
|
|
304
|
+
throw new ConnectError("setup_invalid", "Connection setup OAuth Client is unavailable");
|
|
305
|
+
}
|
|
306
|
+
const redirectUri = client.redirectUris[0];
|
|
307
|
+
return beginOAuth({
|
|
308
|
+
provider,
|
|
309
|
+
client,
|
|
310
|
+
scopes: setup.scopes,
|
|
311
|
+
subject: setup.subject,
|
|
312
|
+
redirectUri,
|
|
313
|
+
projectId: setup.projectId,
|
|
314
|
+
orgId: setup.orgId,
|
|
315
|
+
metadata: setup.metadata,
|
|
316
|
+
audience: setup.audience,
|
|
317
|
+
binding: setup.binding,
|
|
318
|
+
returnUrl: setup.returnUrl,
|
|
319
|
+
});
|
|
320
|
+
},
|
|
321
|
+
async startOAuth(input) {
|
|
322
|
+
const provider = registry.require(input.providerId);
|
|
323
|
+
if (provider.auth.type !== "oauth2") {
|
|
324
|
+
throw new ConnectError("unsupported_auth", `Provider "${provider.id}" does not use OAuth2 auth`);
|
|
325
|
+
}
|
|
326
|
+
const client = await resolveOAuthClient({
|
|
327
|
+
provider,
|
|
120
328
|
projectId: input.projectId,
|
|
121
329
|
orgId: input.orgId,
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
createdAt: now().toISOString(),
|
|
125
|
-
metadata: input.metadata,
|
|
330
|
+
redirectUri: input.redirectUri,
|
|
331
|
+
mode: input.oauthClientMode,
|
|
126
332
|
});
|
|
127
|
-
|
|
128
|
-
url.searchParams.set("response_type", "code");
|
|
129
|
-
url.searchParams.set("client_id", auth.clientId);
|
|
130
|
-
url.searchParams.set("redirect_uri", input.redirectUri);
|
|
131
|
-
url.searchParams.set("state", state);
|
|
132
|
-
if (requestedScopes.length > 0)
|
|
133
|
-
url.searchParams.set("scope", requestedScopes.join(" "));
|
|
134
|
-
if (pkce) {
|
|
135
|
-
url.searchParams.set("code_challenge", pkce.challenge);
|
|
136
|
-
url.searchParams.set("code_challenge_method", "S256");
|
|
137
|
-
}
|
|
138
|
-
for (const [key, value] of Object.entries(auth.extraAuthorizeParams ?? {})) {
|
|
139
|
-
url.searchParams.set(key, value);
|
|
140
|
-
}
|
|
141
|
-
return { authorizationUrl: url.toString(), state, expiresAt };
|
|
333
|
+
return beginOAuth({ ...input, provider, client });
|
|
142
334
|
},
|
|
143
335
|
async completeOAuth(input) {
|
|
144
336
|
const state = await options.store.consumeOAuthState(input.state);
|
|
@@ -160,29 +352,73 @@ export function createConnectService(options) {
|
|
|
160
352
|
if (provider.auth.type !== "oauth2") {
|
|
161
353
|
throw new ConnectError("unsupported_auth", `Provider "${provider.id}" does not use OAuth2 auth`);
|
|
162
354
|
}
|
|
163
|
-
|
|
355
|
+
let oauthAuth = provider.auth;
|
|
356
|
+
if (state.oauthClientId && !state.oauthClientId.startsWith("legacy:")) {
|
|
357
|
+
const client = await options.oauthClients?.resolveById(state.oauthClientId);
|
|
358
|
+
if (!client || client.providerId !== provider.id) {
|
|
359
|
+
throw new ConnectError("setup_invalid", "OAuth Client is unavailable during callback");
|
|
360
|
+
}
|
|
361
|
+
assertOAuthClient(provider.id, state.redirectUri, client);
|
|
362
|
+
oauthAuth = {
|
|
363
|
+
...provider.auth,
|
|
364
|
+
clientId: client.clientId,
|
|
365
|
+
clientSecret: client.clientSecret,
|
|
366
|
+
};
|
|
367
|
+
}
|
|
368
|
+
const tokenSet = await exchangeCode(fetchImpl, oauthAuth, input.code, state.redirectUri, state.codeVerifier);
|
|
164
369
|
const grantedScopes = assertAllowedScopes(provider, parseScopes(tokenSet.scope, state.requestedScopes));
|
|
165
370
|
assertGrantedScopes(grantedScopes, state.requestedScopes);
|
|
166
371
|
const id = createId("conn");
|
|
167
372
|
const secretRef = createId("connsec");
|
|
168
373
|
const tokens = normalizeTokenSet(tokenSet, grantedScopes, now());
|
|
169
374
|
await options.secrets.setSecret(secretRef, { kind: "oauth2", tokens });
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
375
|
+
let connection;
|
|
376
|
+
try {
|
|
377
|
+
connection = await options.store.upsertConnection({
|
|
378
|
+
id,
|
|
379
|
+
providerId: provider.id,
|
|
380
|
+
name: state.connectionName,
|
|
381
|
+
projectId: state.audience ? undefined : state.projectId,
|
|
382
|
+
orgId: state.orgId,
|
|
383
|
+
owner: state.subject,
|
|
384
|
+
audience: state.audience,
|
|
385
|
+
oauthClientId: state.oauthClientId,
|
|
386
|
+
binding: state.binding,
|
|
387
|
+
authType: "oauth2",
|
|
388
|
+
status: "active",
|
|
389
|
+
grantedScopes,
|
|
390
|
+
secretRef,
|
|
391
|
+
tokenExpiresAt: tokens.expiresAt,
|
|
392
|
+
createdAt: now().toISOString(),
|
|
393
|
+
updatedAt: now().toISOString(),
|
|
394
|
+
metadata: state.metadata,
|
|
395
|
+
});
|
|
396
|
+
if (state.audience && state.projectId) {
|
|
397
|
+
if (!options.links) {
|
|
398
|
+
throw new ConnectError("setup_invalid", "Connection link storage is not configured on this host");
|
|
399
|
+
}
|
|
400
|
+
await options.links.upsertConnectionLink({
|
|
401
|
+
id: createId("connlink"),
|
|
402
|
+
connectionId: connection.id,
|
|
403
|
+
projectId: state.projectId,
|
|
404
|
+
status: "active",
|
|
405
|
+
createdAt: now().toISOString(),
|
|
406
|
+
updatedAt: now().toISOString(),
|
|
407
|
+
});
|
|
408
|
+
}
|
|
409
|
+
return connection;
|
|
410
|
+
}
|
|
411
|
+
catch (error) {
|
|
412
|
+
await options.secrets.deleteSecret(secretRef).catch(() => undefined);
|
|
413
|
+
if (connection) {
|
|
414
|
+
await options.store.updateConnection(connection.id, {
|
|
415
|
+
status: "error",
|
|
416
|
+
secretRef: undefined,
|
|
417
|
+
updatedAt: now().toISOString(),
|
|
418
|
+
}).catch(() => undefined);
|
|
419
|
+
}
|
|
420
|
+
throw error;
|
|
421
|
+
}
|
|
186
422
|
},
|
|
187
423
|
async resolveCredential(input) {
|
|
188
424
|
const connection = await options.store.getConnection(input.connectionId);
|
|
@@ -214,7 +450,7 @@ export function createConnectService(options) {
|
|
|
214
450
|
}
|
|
215
451
|
throw new ConnectError("secret_not_found", `Connection has no secret reference: ${connection.id}`);
|
|
216
452
|
}
|
|
217
|
-
|
|
453
|
+
let secret = await options.secrets.getSecret(connection.secretRef);
|
|
218
454
|
if (!secret) {
|
|
219
455
|
throw new ConnectError("secret_not_found", `Connection secret not found: ${connection.secretRef}`);
|
|
220
456
|
}
|
|
@@ -248,19 +484,63 @@ export function createConnectService(options) {
|
|
|
248
484
|
}
|
|
249
485
|
let tokens = secret.tokens;
|
|
250
486
|
if (input.forceRefresh || shouldRefresh(tokens, now(), tokenRefreshSkewMs)) {
|
|
251
|
-
const
|
|
252
|
-
|
|
253
|
-
|
|
487
|
+
const initialTokens = tokens;
|
|
488
|
+
try {
|
|
489
|
+
tokens = await refreshCoordinator.runExclusive(connection.id, async () => {
|
|
490
|
+
const versionedStore = isVersionedConnectionSecretStore(options.secrets)
|
|
491
|
+
? options.secrets
|
|
492
|
+
: undefined;
|
|
493
|
+
const snapshot = versionedStore
|
|
494
|
+
? await versionedStore.getVersioned(connection.secretRef)
|
|
495
|
+
: undefined;
|
|
496
|
+
const latestSecret = snapshot?.secret
|
|
497
|
+
?? await options.secrets.getSecret(connection.secretRef);
|
|
498
|
+
if (latestSecret?.kind !== "oauth2" || !latestSecret.tokens?.accessToken) {
|
|
499
|
+
throw new ConnectError("token_not_available", "Connection does not contain an OAuth access token");
|
|
500
|
+
}
|
|
501
|
+
const latestTokens = latestSecret.tokens;
|
|
502
|
+
const refreshedByAnotherCaller = latestTokens.accessToken !== initialTokens.accessToken
|
|
503
|
+
|| latestTokens.refreshToken !== initialTokens.refreshToken
|
|
504
|
+
|| latestTokens.expiresAt !== initialTokens.expiresAt;
|
|
505
|
+
if (refreshedByAnotherCaller
|
|
506
|
+
|| (!input.forceRefresh && !shouldRefresh(latestTokens, now(), tokenRefreshSkewMs))) {
|
|
507
|
+
secret = latestSecret;
|
|
508
|
+
return latestTokens;
|
|
509
|
+
}
|
|
510
|
+
const provider = registry.require(connection.providerId);
|
|
511
|
+
const oauthAuth = await oauthAuthForConnection(provider, connection.oauthClientId);
|
|
512
|
+
if (!latestTokens.refreshToken) {
|
|
513
|
+
throw new ConnectError("token_not_available", "OAuth access token is expired and no refresh token is available");
|
|
514
|
+
}
|
|
515
|
+
const refreshed = await refreshToken(fetchImpl, oauthAuth, latestTokens.refreshToken, connection.grantedScopes, now());
|
|
516
|
+
const nextSecret = { ...latestSecret, tokens: refreshed };
|
|
517
|
+
if (versionedStore && snapshot) {
|
|
518
|
+
const written = await versionedStore.compareAndSet(connection.secretRef, snapshot.version, nextSecret);
|
|
519
|
+
if (!written) {
|
|
520
|
+
const winner = await versionedStore.getVersioned(connection.secretRef);
|
|
521
|
+
if (winner?.secret.kind !== "oauth2" || !winner.secret.tokens?.accessToken) {
|
|
522
|
+
throw new ConnectError("refresh_unavailable", "OAuth token refresh lost a write race without a valid winner");
|
|
523
|
+
}
|
|
524
|
+
secret = winner.secret;
|
|
525
|
+
return winner.secret.tokens;
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
else {
|
|
529
|
+
await options.secrets.setSecret(connection.secretRef, nextSecret);
|
|
530
|
+
}
|
|
531
|
+
secret = nextSecret;
|
|
532
|
+
await options.store.updateConnection(connection.id, {
|
|
533
|
+
tokenExpiresAt: refreshed.expiresAt,
|
|
534
|
+
updatedAt: now().toISOString(),
|
|
535
|
+
});
|
|
536
|
+
return refreshed;
|
|
537
|
+
});
|
|
254
538
|
}
|
|
255
|
-
|
|
256
|
-
|
|
539
|
+
catch (error) {
|
|
540
|
+
if (error instanceof ConnectError)
|
|
541
|
+
throw error;
|
|
542
|
+
throw new ConnectError("refresh_unavailable", "OAuth token refresh could not be coordinated");
|
|
257
543
|
}
|
|
258
|
-
tokens = await refreshToken(fetchImpl, provider.auth, tokens.refreshToken, connection.grantedScopes, now());
|
|
259
|
-
await options.secrets.setSecret(connection.secretRef, { ...secret, tokens });
|
|
260
|
-
await options.store.updateConnection(connection.id, {
|
|
261
|
-
tokenExpiresAt: tokens.expiresAt,
|
|
262
|
-
updatedAt: now().toISOString(),
|
|
263
|
-
});
|
|
264
544
|
}
|
|
265
545
|
return {
|
|
266
546
|
kind: "oauth2",
|
|
@@ -308,6 +588,108 @@ export function createConnectService(options) {
|
|
|
308
588
|
providerId: credential.providerId,
|
|
309
589
|
};
|
|
310
590
|
},
|
|
591
|
+
async request(input) {
|
|
592
|
+
const connection = await options.store.getConnection(input.connectionId);
|
|
593
|
+
if (!connection) {
|
|
594
|
+
throw new ConnectError("connection_not_found", `Connection not found: ${input.connectionId}`);
|
|
595
|
+
}
|
|
596
|
+
const provider = registry.require(connection.providerId);
|
|
597
|
+
if (!provider.http) {
|
|
598
|
+
throw new ConnectError("policy_denied", `Provider "${provider.id}" does not expose an HTTP gateway policy`);
|
|
599
|
+
}
|
|
600
|
+
let resolvedRequest;
|
|
601
|
+
try {
|
|
602
|
+
resolvedRequest = resolveConnectorHttpRequest(provider.http, input.request);
|
|
603
|
+
}
|
|
604
|
+
catch (error) {
|
|
605
|
+
if (error instanceof ConnectionSelectionError) {
|
|
606
|
+
throw new ConnectError("policy_denied", error.message, {
|
|
607
|
+
status: error.status,
|
|
608
|
+
details: { code: error.code },
|
|
609
|
+
});
|
|
610
|
+
}
|
|
611
|
+
throw error;
|
|
612
|
+
}
|
|
613
|
+
const credential = await this.resolveCredential(input);
|
|
614
|
+
const authValue = credential.kind === "api_key"
|
|
615
|
+
? credential.value
|
|
616
|
+
: credential.kind === "oauth2" || credential.kind === "mcp"
|
|
617
|
+
? credential.accessToken
|
|
618
|
+
: undefined;
|
|
619
|
+
const tokenType = credential.kind === "oauth2" || credential.kind === "mcp"
|
|
620
|
+
? credential.tokenType ?? "Bearer"
|
|
621
|
+
: "Bearer";
|
|
622
|
+
let url = new URL(resolvedRequest.url);
|
|
623
|
+
const headers = new Headers(resolvedRequest.headers);
|
|
624
|
+
if (authValue) {
|
|
625
|
+
if (provider.http.auth.mode === "bearer") {
|
|
626
|
+
headers.set("authorization", `${tokenType} ${authValue}`);
|
|
627
|
+
}
|
|
628
|
+
else if (provider.http.auth.mode === "header") {
|
|
629
|
+
headers.set(provider.http.auth.name, authValue);
|
|
630
|
+
}
|
|
631
|
+
else {
|
|
632
|
+
url.searchParams.set(provider.http.auth.name, authValue);
|
|
633
|
+
}
|
|
634
|
+
}
|
|
635
|
+
if (resolvedRequest.idempotencyKey) {
|
|
636
|
+
headers.set("idempotency-key", resolvedRequest.idempotencyKey);
|
|
637
|
+
}
|
|
638
|
+
const body = resolvedRequest.body === undefined
|
|
639
|
+
? undefined
|
|
640
|
+
: JSON.stringify(resolvedRequest.body);
|
|
641
|
+
if (body !== undefined && !headers.has("content-type")) {
|
|
642
|
+
headers.set("content-type", "application/json");
|
|
643
|
+
}
|
|
644
|
+
for (let redirectCount = 0; redirectCount <= 3; redirectCount += 1) {
|
|
645
|
+
await assertPublicDns(url.hostname, resolveHostname);
|
|
646
|
+
const response = await fetchWithTimeout(fetchImpl, url, {
|
|
647
|
+
method: resolvedRequest.method,
|
|
648
|
+
headers,
|
|
649
|
+
body,
|
|
650
|
+
redirect: "manual",
|
|
651
|
+
}, resolvedRequest.timeoutMs, input.signal);
|
|
652
|
+
if (response.status >= 300 && response.status < 400) {
|
|
653
|
+
const location = response.headers.get("location");
|
|
654
|
+
if (!location) {
|
|
655
|
+
throw new ConnectError("http_error", "Provider returned a redirect without a location");
|
|
656
|
+
}
|
|
657
|
+
if (redirectCount === 3) {
|
|
658
|
+
throw new ConnectError("http_error", "Provider exceeded the Connector redirect limit");
|
|
659
|
+
}
|
|
660
|
+
if (resolvedRequest.method !== "GET"
|
|
661
|
+
&& resolvedRequest.method !== "HEAD"
|
|
662
|
+
&& response.status !== 307
|
|
663
|
+
&& response.status !== 308) {
|
|
664
|
+
throw new ConnectError("http_error", "Provider attempted an unsafe method-changing redirect");
|
|
665
|
+
}
|
|
666
|
+
try {
|
|
667
|
+
url = new URL(assertConnectorRedirectAllowed(provider.http, new URL(location, url).toString()));
|
|
668
|
+
}
|
|
669
|
+
catch (error) {
|
|
670
|
+
if (error instanceof ConnectionSelectionError) {
|
|
671
|
+
throw new ConnectError("http_error", "Provider redirect was denied by policy", {
|
|
672
|
+
details: { category: "redirect_denied" },
|
|
673
|
+
});
|
|
674
|
+
}
|
|
675
|
+
throw error;
|
|
676
|
+
}
|
|
677
|
+
continue;
|
|
678
|
+
}
|
|
679
|
+
const responseBytes = await readResponseBytes(response, resolvedRequest.maxResponseBytes);
|
|
680
|
+
const responseHeaders = sanitizedResponseHeaders(response.headers);
|
|
681
|
+
const requestId = response.headers.get("x-request-id")
|
|
682
|
+
?? response.headers.get("request-id")
|
|
683
|
+
?? undefined;
|
|
684
|
+
return {
|
|
685
|
+
status: response.status,
|
|
686
|
+
headers: Object.freeze(responseHeaders),
|
|
687
|
+
body: parseResponseBody(responseBytes, response.headers.get("content-type")),
|
|
688
|
+
...(requestId ? { requestId } : {}),
|
|
689
|
+
};
|
|
690
|
+
}
|
|
691
|
+
throw new ConnectError("http_error", "Provider request did not produce a response");
|
|
692
|
+
},
|
|
311
693
|
async revokeConnection(input) {
|
|
312
694
|
const connection = await options.store.getConnection(input.connectionId);
|
|
313
695
|
if (!connection) {
|
|
@@ -324,6 +706,209 @@ export function createConnectService(options) {
|
|
|
324
706
|
},
|
|
325
707
|
};
|
|
326
708
|
}
|
|
709
|
+
function assertOAuthClient(providerId, redirectUri, client) {
|
|
710
|
+
if (!client
|
|
711
|
+
|| client.providerId !== providerId
|
|
712
|
+
|| typeof client.clientId !== "string"
|
|
713
|
+
|| !client.clientId.trim()) {
|
|
714
|
+
throw new ConnectError("invalid_provider", "OAuth Client does not match Connector");
|
|
715
|
+
}
|
|
716
|
+
if (!client.redirectUris.includes(redirectUri)) {
|
|
717
|
+
throw new ConnectError("invalid_request", "OAuth redirect URI is not registered for the selected OAuth Client");
|
|
718
|
+
}
|
|
719
|
+
}
|
|
720
|
+
function requiredText(name, value) {
|
|
721
|
+
if (typeof value !== "string" || !value.trim() || value.length > 512) {
|
|
722
|
+
throw new ConnectError("setup_invalid", `Connection setup ${name} is invalid`);
|
|
723
|
+
}
|
|
724
|
+
return value.trim();
|
|
725
|
+
}
|
|
726
|
+
function normalizeReturnUrl(value, allowedOrigins) {
|
|
727
|
+
let url;
|
|
728
|
+
try {
|
|
729
|
+
url = new URL(value);
|
|
730
|
+
}
|
|
731
|
+
catch {
|
|
732
|
+
throw new ConnectError("setup_invalid", "Connection setup return URL is invalid");
|
|
733
|
+
}
|
|
734
|
+
if (url.protocol !== "https:"
|
|
735
|
+
|| url.username
|
|
736
|
+
|| url.password
|
|
737
|
+
|| url.hash
|
|
738
|
+
|| !allowedOrigins?.includes(url.origin)) {
|
|
739
|
+
throw new ConnectError("setup_invalid", "Connection setup return URL is not on an allowed HTTPS origin");
|
|
740
|
+
}
|
|
741
|
+
return url.toString();
|
|
742
|
+
}
|
|
743
|
+
function normalizeConnectionOwner(owner) {
|
|
744
|
+
if (!owner || typeof owner !== "object" || Array.isArray(owner)) {
|
|
745
|
+
throw new ConnectError("setup_invalid", "Connection setup owner is invalid");
|
|
746
|
+
}
|
|
747
|
+
const record = owner;
|
|
748
|
+
const allowed = record.type === "external_user"
|
|
749
|
+
? ["type", "namespace", "id"]
|
|
750
|
+
: ["type", "id"];
|
|
751
|
+
if (Object.keys(record).some((key) => !allowed.includes(key))) {
|
|
752
|
+
throw new ConnectError("setup_invalid", "Connection setup owner has unsupported fields");
|
|
753
|
+
}
|
|
754
|
+
if (!["user", "project", "org", "external_user", "service"].includes(String(record.type))) {
|
|
755
|
+
throw new ConnectError("setup_invalid", "Connection setup owner type is invalid");
|
|
756
|
+
}
|
|
757
|
+
const id = requiredText("owner.id", record.id);
|
|
758
|
+
if (record.type === "external_user") {
|
|
759
|
+
return {
|
|
760
|
+
type: "external_user",
|
|
761
|
+
namespace: requiredText("owner.namespace", record.namespace),
|
|
762
|
+
id,
|
|
763
|
+
};
|
|
764
|
+
}
|
|
765
|
+
return { type: record.type, id };
|
|
766
|
+
}
|
|
767
|
+
function normalizeConnectionBinding(binding) {
|
|
768
|
+
if (!binding || typeof binding !== "object" || Array.isArray(binding)) {
|
|
769
|
+
throw new ConnectError("setup_invalid", "Connection setup binding is invalid");
|
|
770
|
+
}
|
|
771
|
+
const unsupported = Object.keys(binding).filter((key) => !["principal", "tenant", "resource", "scopeEpoch"].includes(key));
|
|
772
|
+
if (unsupported.length > 0) {
|
|
773
|
+
throw new ConnectError("setup_invalid", "Connection setup binding has unsupported fields");
|
|
774
|
+
}
|
|
775
|
+
const normalizePart = (name, value, fields) => {
|
|
776
|
+
if (value === undefined)
|
|
777
|
+
return undefined;
|
|
778
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
779
|
+
throw new ConnectError("setup_invalid", `Connection setup binding ${name} is invalid`);
|
|
780
|
+
}
|
|
781
|
+
if (Object.keys(value).some((key) => !fields.includes(key))) {
|
|
782
|
+
throw new ConnectError("setup_invalid", `Connection setup binding ${name} has unsupported fields`);
|
|
783
|
+
}
|
|
784
|
+
return Object.fromEntries(fields.map((field) => [
|
|
785
|
+
field,
|
|
786
|
+
requiredText(`binding.${name}.${field}`, value[field]),
|
|
787
|
+
]));
|
|
788
|
+
};
|
|
789
|
+
return {
|
|
790
|
+
...(binding.principal ? {
|
|
791
|
+
principal: normalizePart("principal", binding.principal, ["type", "id"]),
|
|
792
|
+
} : {}),
|
|
793
|
+
...(binding.tenant ? {
|
|
794
|
+
tenant: normalizePart("tenant", binding.tenant, ["namespace", "id"]),
|
|
795
|
+
} : {}),
|
|
796
|
+
...(binding.resource ? {
|
|
797
|
+
resource: normalizePart("resource", binding.resource, ["namespace", "type", "id"]),
|
|
798
|
+
} : {}),
|
|
799
|
+
...(binding.scopeEpoch === undefined
|
|
800
|
+
? {}
|
|
801
|
+
: { scopeEpoch: requiredText("binding.scopeEpoch", binding.scopeEpoch) }),
|
|
802
|
+
};
|
|
803
|
+
}
|
|
804
|
+
async function assertPublicDns(hostname, resolveHostname) {
|
|
805
|
+
let addresses;
|
|
806
|
+
try {
|
|
807
|
+
addresses = await resolveHostname(hostname);
|
|
808
|
+
}
|
|
809
|
+
catch {
|
|
810
|
+
throw new ConnectError("http_error", "Provider hostname could not be resolved", {
|
|
811
|
+
details: { category: "dns_failed" },
|
|
812
|
+
});
|
|
813
|
+
}
|
|
814
|
+
if (addresses.length === 0 || addresses.some(connectorHostnameIsUnsafe)) {
|
|
815
|
+
throw new ConnectError("http_error", "Provider hostname resolved to a forbidden network", {
|
|
816
|
+
details: { category: "network_denied" },
|
|
817
|
+
});
|
|
818
|
+
}
|
|
819
|
+
}
|
|
820
|
+
async function fetchWithTimeout(fetchImpl, url, init, timeoutMs, signal) {
|
|
821
|
+
const controller = new AbortController();
|
|
822
|
+
const onAbort = () => controller.abort(signal?.reason);
|
|
823
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
824
|
+
const timeout = setTimeout(() => controller.abort(new Error("connection_gateway_timeout")), timeoutMs);
|
|
825
|
+
try {
|
|
826
|
+
return await fetchImpl(url, { ...init, signal: controller.signal });
|
|
827
|
+
}
|
|
828
|
+
catch (error) {
|
|
829
|
+
throw new ConnectError("http_error", controller.signal.aborted
|
|
830
|
+
? "Provider request was aborted or timed out"
|
|
831
|
+
: "Provider request failed", {
|
|
832
|
+
details: {
|
|
833
|
+
category: controller.signal.aborted ? "aborted" : "transport_failed",
|
|
834
|
+
retryable: true,
|
|
835
|
+
},
|
|
836
|
+
});
|
|
837
|
+
}
|
|
838
|
+
finally {
|
|
839
|
+
clearTimeout(timeout);
|
|
840
|
+
signal?.removeEventListener("abort", onAbort);
|
|
841
|
+
}
|
|
842
|
+
}
|
|
843
|
+
async function readResponseBytes(response, maximum) {
|
|
844
|
+
const declared = Number(response.headers.get("content-length"));
|
|
845
|
+
if (Number.isFinite(declared) && declared > maximum) {
|
|
846
|
+
throw new ConnectError("http_error", "Provider response exceeds the Connector limit", {
|
|
847
|
+
details: { category: "response_too_large" },
|
|
848
|
+
});
|
|
849
|
+
}
|
|
850
|
+
if (!response.body)
|
|
851
|
+
return new Uint8Array();
|
|
852
|
+
const reader = response.body.getReader();
|
|
853
|
+
const chunks = [];
|
|
854
|
+
let total = 0;
|
|
855
|
+
while (true) {
|
|
856
|
+
const { done, value } = await reader.read();
|
|
857
|
+
if (done)
|
|
858
|
+
break;
|
|
859
|
+
total += value.byteLength;
|
|
860
|
+
if (total > maximum) {
|
|
861
|
+
await reader.cancel();
|
|
862
|
+
throw new ConnectError("http_error", "Provider response exceeds the Connector limit", {
|
|
863
|
+
details: { category: "response_too_large" },
|
|
864
|
+
});
|
|
865
|
+
}
|
|
866
|
+
chunks.push(value);
|
|
867
|
+
}
|
|
868
|
+
const result = new Uint8Array(total);
|
|
869
|
+
let offset = 0;
|
|
870
|
+
for (const chunk of chunks) {
|
|
871
|
+
result.set(chunk, offset);
|
|
872
|
+
offset += chunk.byteLength;
|
|
873
|
+
}
|
|
874
|
+
return result;
|
|
875
|
+
}
|
|
876
|
+
function parseResponseBody(bytes, contentType) {
|
|
877
|
+
if (bytes.byteLength === 0)
|
|
878
|
+
return null;
|
|
879
|
+
const normalizedType = contentType?.split(";", 1)[0]?.trim().toLowerCase();
|
|
880
|
+
if (normalizedType === "application/json" || normalizedType?.endsWith("+json")) {
|
|
881
|
+
try {
|
|
882
|
+
return JSON.parse(new TextDecoder().decode(bytes));
|
|
883
|
+
}
|
|
884
|
+
catch {
|
|
885
|
+
throw new ConnectError("http_error", "Provider returned malformed JSON", {
|
|
886
|
+
details: { category: "invalid_response" },
|
|
887
|
+
});
|
|
888
|
+
}
|
|
889
|
+
}
|
|
890
|
+
if (normalizedType?.startsWith("text/") || normalizedType === undefined) {
|
|
891
|
+
return new TextDecoder().decode(bytes);
|
|
892
|
+
}
|
|
893
|
+
return {
|
|
894
|
+
encoding: "base64",
|
|
895
|
+
contentType: normalizedType ?? "application/octet-stream",
|
|
896
|
+
data: Buffer.from(bytes).toString("base64"),
|
|
897
|
+
};
|
|
898
|
+
}
|
|
899
|
+
function sanitizedResponseHeaders(headers) {
|
|
900
|
+
const safe = {};
|
|
901
|
+
for (const [name, value] of headers) {
|
|
902
|
+
const normalized = name.toLowerCase();
|
|
903
|
+
if (normalized === "authorization"
|
|
904
|
+
|| normalized === "proxy-authorization"
|
|
905
|
+
|| normalized === "set-cookie"
|
|
906
|
+
|| normalized === "cookie")
|
|
907
|
+
continue;
|
|
908
|
+
safe[normalized] = value;
|
|
909
|
+
}
|
|
910
|
+
return safe;
|
|
911
|
+
}
|
|
327
912
|
async function exchangeCode(fetchImpl, auth, code, redirectUri, codeVerifier) {
|
|
328
913
|
return requestToken(fetchImpl, auth.tokenUrl, {
|
|
329
914
|
grant_type: "authorization_code",
|
package/dist/service.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@polpo-ai/connect-server",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.138",
|
|
4
4
|
"description": "Server-side Polpo Connect primitives for OAuth, API-key connections, token refresh, and policy checks",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -17,7 +17,8 @@
|
|
|
17
17
|
"README.md"
|
|
18
18
|
],
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@polpo-ai/connect": "0.15.
|
|
20
|
+
"@polpo-ai/connect": "0.15.138",
|
|
21
|
+
"@polpo-ai/core": "0.15.138"
|
|
21
22
|
},
|
|
22
23
|
"devDependencies": {
|
|
23
24
|
"typescript": "^5.7.3",
|