0pflow 0.1.0-dev.9050dad → 0.1.0-dev.a318c24
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/agent.d.ts +6 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +59 -9
- package/dist/agent.js.map +1 -1
- package/dist/cli/env.js +1 -1
- package/dist/cli/env.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +101 -8
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/install.d.ts.map +1 -1
- package/dist/cli/install.js +32 -2
- package/dist/cli/install.js.map +1 -1
- package/dist/cli/mcp/tools/createApp.d.ts +1 -0
- package/dist/cli/mcp/tools/createApp.d.ts.map +1 -1
- package/dist/cli/mcp/tools/createApp.js +13 -4
- package/dist/cli/mcp/tools/createApp.js.map +1 -1
- package/dist/cli/mcp/tools/getConnectionInfo.d.ts +19 -0
- package/dist/cli/mcp/tools/getConnectionInfo.d.ts.map +1 -0
- package/dist/cli/mcp/tools/getConnectionInfo.js +117 -0
- package/dist/cli/mcp/tools/getConnectionInfo.js.map +1 -0
- package/dist/cli/mcp/tools/getRun.d.ts +22 -0
- package/dist/cli/mcp/tools/getRun.d.ts.map +1 -0
- package/dist/cli/mcp/tools/getRun.js +80 -0
- package/dist/cli/mcp/tools/getRun.js.map +1 -0
- package/dist/cli/mcp/tools/getTrace.d.ts +32 -0
- package/dist/cli/mcp/tools/getTrace.d.ts.map +1 -0
- package/dist/cli/mcp/tools/getTrace.js +104 -0
- package/dist/cli/mcp/tools/getTrace.js.map +1 -0
- package/dist/cli/mcp/tools/index.d.ts +101 -1
- package/dist/cli/mcp/tools/index.d.ts.map +1 -1
- package/dist/cli/mcp/tools/index.js +18 -0
- package/dist/cli/mcp/tools/index.js.map +1 -1
- package/dist/cli/mcp/tools/listIntegrations.d.ts +14 -0
- package/dist/cli/mcp/tools/listIntegrations.d.ts.map +1 -0
- package/dist/cli/mcp/tools/listIntegrations.js +53 -0
- package/dist/cli/mcp/tools/listIntegrations.js.map +1 -0
- package/dist/cli/mcp/tools/listRuns.d.ts +21 -0
- package/dist/cli/mcp/tools/listRuns.d.ts.map +1 -0
- package/dist/cli/mcp/tools/listRuns.js +72 -0
- package/dist/cli/mcp/tools/listRuns.js.map +1 -0
- package/dist/cli/mcp/tools/listWorkflows.d.ts +15 -0
- package/dist/cli/mcp/tools/listWorkflows.d.ts.map +1 -0
- package/dist/cli/mcp/tools/listWorkflows.js +45 -0
- package/dist/cli/mcp/tools/listWorkflows.js.map +1 -0
- package/dist/cli/mcp/tools/runNode.d.ts +17 -0
- package/dist/cli/mcp/tools/runNode.d.ts.map +1 -0
- package/dist/cli/mcp/tools/runNode.js +74 -0
- package/dist/cli/mcp/tools/runNode.js.map +1 -0
- package/dist/cli/mcp/tools/runWorkflow.d.ts +16 -0
- package/dist/cli/mcp/tools/runWorkflow.d.ts.map +1 -0
- package/dist/cli/mcp/tools/runWorkflow.js +66 -0
- package/dist/cli/mcp/tools/runWorkflow.js.map +1 -0
- package/dist/cli/mcp/tools/setupAppSchema.d.ts +1 -1
- package/dist/cli/mcp/tools/setupAppSchema.d.ts.map +1 -1
- package/dist/cli/mcp/tools/setupAppSchema.js +33 -33
- package/dist/cli/mcp/tools/setupAppSchema.js.map +1 -1
- package/dist/cli/mcp/tools/startDevUi.d.ts +15 -0
- package/dist/cli/mcp/tools/startDevUi.d.ts.map +1 -0
- package/dist/cli/mcp/tools/startDevUi.js +92 -0
- package/dist/cli/mcp/tools/startDevUi.js.map +1 -0
- package/dist/cli/mcp/tools/utils.d.ts +7 -0
- package/dist/cli/mcp/tools/utils.d.ts.map +1 -0
- package/dist/cli/mcp/tools/utils.js +28 -0
- package/dist/cli/mcp/tools/utils.js.map +1 -0
- package/dist/cli/trace.d.ts +5 -0
- package/dist/cli/trace.d.ts.map +1 -1
- package/dist/cli/trace.js +1 -1
- package/dist/cli/trace.js.map +1 -1
- package/dist/connections/cloud-auth.d.ts +46 -0
- package/dist/connections/cloud-auth.d.ts.map +1 -0
- package/dist/connections/cloud-auth.js +243 -0
- package/dist/connections/cloud-auth.js.map +1 -0
- package/dist/connections/cloud-client.d.ts +25 -0
- package/dist/connections/cloud-client.d.ts.map +1 -0
- package/dist/connections/cloud-client.js +59 -0
- package/dist/connections/cloud-client.js.map +1 -0
- package/dist/connections/cloud-integration-provider.d.ts +21 -0
- package/dist/connections/cloud-integration-provider.d.ts.map +1 -0
- package/dist/connections/cloud-integration-provider.js +26 -0
- package/dist/connections/cloud-integration-provider.js.map +1 -0
- package/dist/connections/index.d.ts +11 -0
- package/dist/connections/index.d.ts.map +1 -0
- package/dist/connections/index.js +9 -0
- package/dist/connections/index.js.map +1 -0
- package/dist/connections/integration-provider.d.ts +38 -0
- package/dist/connections/integration-provider.d.ts.map +1 -0
- package/dist/connections/integration-provider.js +20 -0
- package/dist/connections/integration-provider.js.map +1 -0
- package/dist/connections/local-integration-provider.d.ts +28 -0
- package/dist/connections/local-integration-provider.d.ts.map +1 -0
- package/dist/connections/local-integration-provider.js +54 -0
- package/dist/connections/local-integration-provider.js.map +1 -0
- package/dist/connections/nango-client.d.ts +14 -0
- package/dist/connections/nango-client.d.ts.map +1 -0
- package/dist/connections/nango-client.js +50 -0
- package/dist/connections/nango-client.js.map +1 -0
- package/dist/connections/resolver.d.ts +26 -0
- package/dist/connections/resolver.d.ts.map +1 -0
- package/dist/connections/resolver.js +44 -0
- package/dist/connections/resolver.js.map +1 -0
- package/dist/connections/schema.d.ts +6 -0
- package/dist/connections/schema.d.ts.map +1 -0
- package/dist/connections/schema.js +25 -0
- package/dist/connections/schema.js.map +1 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +4 -0
- package/dist/context.js.map +1 -1
- package/dist/dev-ui/api.d.ts +13 -0
- package/dist/dev-ui/api.d.ts.map +1 -0
- package/dist/dev-ui/api.js +237 -0
- package/dist/dev-ui/api.js.map +1 -0
- package/dist/dev-ui/dag/extractor.d.ts +19 -0
- package/dist/dev-ui/dag/extractor.d.ts.map +1 -0
- package/dist/dev-ui/dag/extractor.js +728 -0
- package/dist/dev-ui/dag/extractor.js.map +1 -0
- package/dist/dev-ui/dag/types.d.ts +42 -0
- package/dist/dev-ui/dag/types.d.ts.map +1 -0
- package/dist/dev-ui/dag/types.js +2 -0
- package/dist/dev-ui/dag/types.js.map +1 -0
- package/dist/dev-ui/dev-server.d.ts +14 -0
- package/dist/dev-ui/dev-server.d.ts.map +1 -0
- package/dist/dev-ui/dev-server.js +158 -0
- package/dist/dev-ui/dev-server.js.map +1 -0
- package/dist/dev-ui/index.d.ts +3 -0
- package/dist/dev-ui/index.d.ts.map +1 -0
- package/dist/dev-ui/index.js +2 -0
- package/dist/dev-ui/index.js.map +1 -0
- package/dist/dev-ui/watcher.d.ts +12 -0
- package/dist/dev-ui/watcher.d.ts.map +1 -0
- package/dist/dev-ui/watcher.js +162 -0
- package/dist/dev-ui/watcher.js.map +1 -0
- package/dist/dev-ui/ws.d.ts +27 -0
- package/dist/dev-ui/ws.d.ts.map +1 -0
- package/dist/dev-ui/ws.js +19 -0
- package/dist/dev-ui/ws.js.map +1 -0
- package/dist/dev-ui-client/assets/index-B5wNJx8a.js +77 -0
- package/dist/dev-ui-client/assets/index-DAKTQEvj.js +1 -0
- package/dist/dev-ui-client/assets/index-DpOZNNnF.css +1 -0
- package/dist/dev-ui-client/index.html +13 -0
- package/dist/factory.d.ts.map +1 -1
- package/dist/factory.js +25 -12
- package/dist/factory.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/node.d.ts +1 -0
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +1 -0
- package/dist/node.js.map +1 -1
- package/dist/nodes/agent/executor.d.ts +2 -0
- package/dist/nodes/agent/executor.d.ts.map +1 -1
- package/dist/nodes/agent/executor.js +11 -1
- package/dist/nodes/agent/executor.js.map +1 -1
- package/dist/types.d.ts +19 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/workflow.d.ts +22 -0
- package/dist/workflow.d.ts.map +1 -1
- package/dist/workflow.js +90 -2
- package/dist/workflow.js.map +1 -1
- package/package.json +18 -3
- package/templates/app/package.json +2 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { apiCall } from "./cloud-client.js";
|
|
2
|
+
/**
|
|
3
|
+
* IntegrationProvider backed by the 0pflow cloud server (hosted mode).
|
|
4
|
+
* All Nango operations are proxied through the server — no NANGO_SECRET_KEY needed locally.
|
|
5
|
+
*/
|
|
6
|
+
export class CloudIntegrationProvider {
|
|
7
|
+
async fetchCredentials(integrationId, connectionId) {
|
|
8
|
+
const data = (await apiCall("GET", `/api/credentials/${encodeURIComponent(integrationId)}?connection_id=${encodeURIComponent(connectionId)}`));
|
|
9
|
+
return data;
|
|
10
|
+
}
|
|
11
|
+
async listIntegrations() {
|
|
12
|
+
const data = (await apiCall("GET", "/api/integrations"));
|
|
13
|
+
return data;
|
|
14
|
+
}
|
|
15
|
+
async listConnections(integrationId) {
|
|
16
|
+
const data = (await apiCall("GET", `/api/integrations/${encodeURIComponent(integrationId)}/connections`));
|
|
17
|
+
return data;
|
|
18
|
+
}
|
|
19
|
+
async createConnectSession(integrationId) {
|
|
20
|
+
const data = (await apiCall("POST", "/api/nango/connect-session", {
|
|
21
|
+
integration_id: integrationId,
|
|
22
|
+
}));
|
|
23
|
+
return data;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=cloud-integration-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-integration-provider.js","sourceRoot":"","sources":["../../src/connections/cloud-integration-provider.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C;;;GAGG;AACH,MAAM,OAAO,wBAAwB;IACnC,KAAK,CAAC,gBAAgB,CACpB,aAAqB,EACrB,YAAoB;QAEpB,MAAM,IAAI,GAAG,CAAC,MAAM,OAAO,CACzB,KAAK,EACL,oBAAoB,kBAAkB,CAAC,aAAa,CAAC,kBAAkB,kBAAkB,CAAC,YAAY,CAAC,EAAE,CAC1G,CAA0B,CAAC;QAE5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,MAAM,IAAI,GAAG,CAAC,MAAM,OAAO,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAGrD,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,aAAqB;QAErB,MAAM,IAAI,GAAG,CAAC,MAAM,OAAO,CACzB,KAAK,EACL,qBAAqB,kBAAkB,CAAC,aAAa,CAAC,cAAc,CACrE,CAAkE,CAAC;QACpE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,oBAAoB,CACxB,aAAqB;QAErB,MAAM,IAAI,GAAG,CAAC,MAAM,OAAO,CAAC,MAAM,EAAE,4BAA4B,EAAE;YAChE,cAAc,EAAE,aAAa;SAC9B,CAAC,CAAsB,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { ensureConnectionsTable } from "./schema.js";
|
|
2
|
+
export { resolveConnectionId, upsertConnection, listConnections, deleteConnection, } from "./resolver.js";
|
|
3
|
+
export type { ConnectionMapping } from "./resolver.js";
|
|
4
|
+
export { initNango, getNango, fetchCredentials } from "./nango-client.js";
|
|
5
|
+
export type { IntegrationProvider } from "./integration-provider.js";
|
|
6
|
+
export { createIntegrationProvider } from "./integration-provider.js";
|
|
7
|
+
export { LocalIntegrationProvider, createLocalIntegrationProvider } from "./local-integration-provider.js";
|
|
8
|
+
export { CloudIntegrationProvider } from "./cloud-integration-provider.js";
|
|
9
|
+
export { getToken as getCloudToken, isAuthenticated as isCloudAuthenticated, authenticate as cloudAuthenticate, logout as cloudLogout, } from "./cloud-auth.js";
|
|
10
|
+
export { apiCall as cloudApiCall } from "./cloud-client.js";
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/connections/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1E,YAAY,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AAC3G,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EACL,QAAQ,IAAI,aAAa,EACzB,eAAe,IAAI,oBAAoB,EACvC,YAAY,IAAI,iBAAiB,EACjC,MAAM,IAAI,WAAW,GACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { ensureConnectionsTable } from "./schema.js";
|
|
2
|
+
export { resolveConnectionId, upsertConnection, listConnections, deleteConnection, } from "./resolver.js";
|
|
3
|
+
export { initNango, getNango, fetchCredentials } from "./nango-client.js";
|
|
4
|
+
export { createIntegrationProvider } from "./integration-provider.js";
|
|
5
|
+
export { LocalIntegrationProvider, createLocalIntegrationProvider } from "./local-integration-provider.js";
|
|
6
|
+
export { CloudIntegrationProvider } from "./cloud-integration-provider.js";
|
|
7
|
+
export { getToken as getCloudToken, isAuthenticated as isCloudAuthenticated, authenticate as cloudAuthenticate, logout as cloudLogout, } from "./cloud-auth.js";
|
|
8
|
+
export { apiCall as cloudApiCall } from "./cloud-client.js";
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/connections/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AAC3G,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EACL,QAAQ,IAAI,aAAa,EACzB,eAAe,IAAI,oBAAoB,EACvC,YAAY,IAAI,iBAAiB,EACjC,MAAM,IAAI,WAAW,GACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { ConnectionCredentials } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Abstraction over integration/credential operations.
|
|
4
|
+
*
|
|
5
|
+
* LocalIntegrationProvider calls Nango directly (self-hosted mode).
|
|
6
|
+
* CloudIntegrationProvider calls the 0pflow cloud server (hosted mode).
|
|
7
|
+
*
|
|
8
|
+
* Connection *mapping* (workflow/node → connection_id) is NOT part of this
|
|
9
|
+
* interface — that stays in the user's local app DB via resolver.ts.
|
|
10
|
+
*/
|
|
11
|
+
export interface IntegrationProvider {
|
|
12
|
+
/** Fetch actual credentials for a connection */
|
|
13
|
+
fetchCredentials(integrationId: string, connectionId: string): Promise<ConnectionCredentials>;
|
|
14
|
+
/** List available integrations */
|
|
15
|
+
listIntegrations(): Promise<Array<{
|
|
16
|
+
id: string;
|
|
17
|
+
provider: string;
|
|
18
|
+
}>>;
|
|
19
|
+
/** List connections for an integration */
|
|
20
|
+
listConnections(integrationId: string): Promise<Array<{
|
|
21
|
+
connection_id: string;
|
|
22
|
+
provider_config_key: string;
|
|
23
|
+
}>>;
|
|
24
|
+
/** Create a Connect session for OAuth setup */
|
|
25
|
+
createConnectSession(integrationId: string, endUserId?: string): Promise<{
|
|
26
|
+
token: string;
|
|
27
|
+
}>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Auto-detect and create the appropriate IntegrationProvider.
|
|
31
|
+
*
|
|
32
|
+
* - NANGO_SECRET_KEY set → LocalIntegrationProvider (direct Nango)
|
|
33
|
+
* - Otherwise → CloudIntegrationProvider (proxies through 0pflow cloud)
|
|
34
|
+
*
|
|
35
|
+
* Optionally pass a nangoSecretKey to override env detection.
|
|
36
|
+
*/
|
|
37
|
+
export declare function createIntegrationProvider(nangoSecretKey?: string): Promise<IntegrationProvider>;
|
|
38
|
+
//# sourceMappingURL=integration-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integration-provider.d.ts","sourceRoot":"","sources":["../../src/connections/integration-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEzD;;;;;;;;GAQG;AACH,MAAM,WAAW,mBAAmB;IAClC,gDAAgD;IAChD,gBAAgB,CACd,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAElC,kCAAkC;IAClC,gBAAgB,IAAI,OAAO,CACzB,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CACxC,CAAC;IAEF,0CAA0C;IAC1C,eAAe,CACb,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,KAAK,CAAC;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,mBAAmB,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IAE1E,+CAA+C;IAC/C,oBAAoB,CAClB,aAAa,EAAE,MAAM,EACrB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/B;AAED;;;;;;;GAOG;AACH,wBAAsB,yBAAyB,CAC7C,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,mBAAmB,CAAC,CAU9B"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-detect and create the appropriate IntegrationProvider.
|
|
3
|
+
*
|
|
4
|
+
* - NANGO_SECRET_KEY set → LocalIntegrationProvider (direct Nango)
|
|
5
|
+
* - Otherwise → CloudIntegrationProvider (proxies through 0pflow cloud)
|
|
6
|
+
*
|
|
7
|
+
* Optionally pass a nangoSecretKey to override env detection.
|
|
8
|
+
*/
|
|
9
|
+
export async function createIntegrationProvider(nangoSecretKey) {
|
|
10
|
+
const key = nangoSecretKey ?? process.env.NANGO_SECRET_KEY;
|
|
11
|
+
if (key) {
|
|
12
|
+
const { createLocalIntegrationProvider } = await import("./local-integration-provider.js");
|
|
13
|
+
return createLocalIntegrationProvider(key);
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
const { CloudIntegrationProvider } = await import("./cloud-integration-provider.js");
|
|
17
|
+
return new CloudIntegrationProvider();
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=integration-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integration-provider.js","sourceRoot":"","sources":["../../src/connections/integration-provider.ts"],"names":[],"mappings":"AAmCA;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,cAAuB;IAEvB,MAAM,GAAG,GAAG,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAE3D,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,EAAE,8BAA8B,EAAE,GAAG,MAAM,MAAM,CAAC,iCAAiC,CAAC,CAAC;QAC3F,OAAO,8BAA8B,CAAC,GAAG,CAAC,CAAC;IAC7C,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,wBAAwB,EAAE,GAAG,MAAM,MAAM,CAAC,iCAAiC,CAAC,CAAC;QACrF,OAAO,IAAI,wBAAwB,EAAE,CAAC;IACxC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { IntegrationProvider } from "./integration-provider.js";
|
|
2
|
+
import type { ConnectionCredentials } from "../types.js";
|
|
3
|
+
/**
|
|
4
|
+
* IntegrationProvider backed by a direct Nango connection (self-hosted mode).
|
|
5
|
+
* Requires NANGO_SECRET_KEY.
|
|
6
|
+
*/
|
|
7
|
+
export declare class LocalIntegrationProvider implements IntegrationProvider {
|
|
8
|
+
private nango;
|
|
9
|
+
constructor(nangoInstance: any);
|
|
10
|
+
fetchCredentials(integrationId: string, connectionId: string): Promise<ConnectionCredentials>;
|
|
11
|
+
listIntegrations(): Promise<Array<{
|
|
12
|
+
id: string;
|
|
13
|
+
provider: string;
|
|
14
|
+
}>>;
|
|
15
|
+
listConnections(integrationId: string): Promise<Array<{
|
|
16
|
+
connection_id: string;
|
|
17
|
+
provider_config_key: string;
|
|
18
|
+
}>>;
|
|
19
|
+
createConnectSession(integrationId: string, endUserId?: string): Promise<{
|
|
20
|
+
token: string;
|
|
21
|
+
}>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Create a LocalIntegrationProvider from a Nango secret key.
|
|
25
|
+
* Uses dynamic import to avoid hard dependency on @nangohq/node.
|
|
26
|
+
*/
|
|
27
|
+
export declare function createLocalIntegrationProvider(secretKey: string): Promise<LocalIntegrationProvider>;
|
|
28
|
+
//# sourceMappingURL=local-integration-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-integration-provider.d.ts","sourceRoot":"","sources":["../../src/connections/local-integration-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEzD;;;GAGG;AACH,qBAAa,wBAAyB,YAAW,mBAAmB;IAElE,OAAO,CAAC,KAAK,CAAM;gBAGP,aAAa,EAAE,GAAG;IAIxB,gBAAgB,CACpB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,qBAAqB,CAAC;IAkB3B,gBAAgB,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAUpE,eAAe,CACnB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,KAAK,CAAC;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,mBAAmB,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAQnE,oBAAoB,CACxB,aAAa,EAAE,MAAM,EACrB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAO9B;AAED;;;GAGG;AACH,wBAAsB,8BAA8B,CAClD,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,wBAAwB,CAAC,CAInC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IntegrationProvider backed by a direct Nango connection (self-hosted mode).
|
|
3
|
+
* Requires NANGO_SECRET_KEY.
|
|
4
|
+
*/
|
|
5
|
+
export class LocalIntegrationProvider {
|
|
6
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
7
|
+
nango;
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
9
|
+
constructor(nangoInstance) {
|
|
10
|
+
this.nango = nangoInstance;
|
|
11
|
+
}
|
|
12
|
+
async fetchCredentials(integrationId, connectionId) {
|
|
13
|
+
const connection = await this.nango.getConnection(integrationId, connectionId);
|
|
14
|
+
const creds = connection.credentials ?? {};
|
|
15
|
+
const token = creds.access_token ??
|
|
16
|
+
creds.api_key ??
|
|
17
|
+
creds.apiKey ??
|
|
18
|
+
creds.token ??
|
|
19
|
+
"";
|
|
20
|
+
return {
|
|
21
|
+
token,
|
|
22
|
+
connectionConfig: connection.connection_config ?? {},
|
|
23
|
+
raw: creds,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
async listIntegrations() {
|
|
27
|
+
const result = await this.nango.listIntegrations();
|
|
28
|
+
return (result.configs ?? []).map((c) => ({
|
|
29
|
+
id: c.unique_key,
|
|
30
|
+
provider: c.provider,
|
|
31
|
+
}));
|
|
32
|
+
}
|
|
33
|
+
async listConnections(integrationId) {
|
|
34
|
+
const result = await this.nango.listConnections();
|
|
35
|
+
return (result.connections ?? []).filter((c) => c.provider_config_key === integrationId);
|
|
36
|
+
}
|
|
37
|
+
async createConnectSession(integrationId, endUserId) {
|
|
38
|
+
const session = await this.nango.createConnectSession({
|
|
39
|
+
end_user: { id: endUserId ?? "dev-ui-user" },
|
|
40
|
+
allowed_integrations: [integrationId],
|
|
41
|
+
});
|
|
42
|
+
return { token: session.data.token };
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Create a LocalIntegrationProvider from a Nango secret key.
|
|
47
|
+
* Uses dynamic import to avoid hard dependency on @nangohq/node.
|
|
48
|
+
*/
|
|
49
|
+
export async function createLocalIntegrationProvider(secretKey) {
|
|
50
|
+
const { Nango } = await import("@nangohq/node");
|
|
51
|
+
const nango = new Nango({ secretKey });
|
|
52
|
+
return new LocalIntegrationProvider(nango);
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=local-integration-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-integration-provider.js","sourceRoot":"","sources":["../../src/connections/local-integration-provider.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,OAAO,wBAAwB;IACnC,8DAA8D;IACtD,KAAK,CAAM;IAEnB,8DAA8D;IAC9D,YAAY,aAAkB;QAC5B,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,gBAAgB,CACpB,aAAqB,EACrB,YAAoB;QAEpB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;QAE/E,MAAM,KAAK,GAAG,UAAU,CAAC,WAAW,IAAI,EAAE,CAAC;QAC3C,MAAM,KAAK,GACT,KAAK,CAAC,YAAY;YAClB,KAAK,CAAC,OAAO;YACb,KAAK,CAAC,MAAM;YACZ,KAAK,CAAC,KAAK;YACX,EAAE,CAAC;QAEL,OAAO;YACL,KAAK;YACL,gBAAgB,EAAE,UAAU,CAAC,iBAAiB,IAAI,EAAE;YACpD,GAAG,EAAE,KAAK;SACX,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;QACnD,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAC/B,CAAC,CAA2C,EAAE,EAAE,CAAC,CAAC;YAChD,EAAE,EAAE,CAAC,CAAC,UAAU;YAChB,QAAQ,EAAE,CAAC,CAAC,QAAQ;SACrB,CAAC,CACH,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,aAAqB;QAErB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;QAClD,OAAO,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,MAAM,CACtC,CAAC,CAAkC,EAAE,EAAE,CACrC,CAAC,CAAC,mBAAmB,KAAK,aAAa,CAC1C,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,oBAAoB,CACxB,aAAqB,EACrB,SAAkB;QAElB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC;YACpD,QAAQ,EAAE,EAAE,EAAE,EAAE,SAAS,IAAI,aAAa,EAAE;YAC5C,oBAAoB,EAAE,CAAC,aAAa,CAAC;SACtC,CAAC,CAAC;QACH,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACvC,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,SAAiB;IAEjB,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IACvC,OAAO,IAAI,wBAAwB,CAAC,KAAK,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ConnectionCredentials } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Initialize the Nango client singleton.
|
|
4
|
+
*/
|
|
5
|
+
export declare function initNango(secretKey: string): Promise<void>;
|
|
6
|
+
/**
|
|
7
|
+
* Get the Nango client instance, or null if not initialized.
|
|
8
|
+
*/
|
|
9
|
+
export declare function getNango(): any | null;
|
|
10
|
+
/**
|
|
11
|
+
* Fetch credentials for an integration connection from Nango.
|
|
12
|
+
*/
|
|
13
|
+
export declare function fetchCredentials(integrationId: string, connectionId: string): Promise<ConnectionCredentials>;
|
|
14
|
+
//# sourceMappingURL=nango-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nango-client.d.ts","sourceRoot":"","sources":["../../src/connections/nango-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAkBzD;;GAEG;AACH,wBAAsB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhE;AAED;;GAEG;AAEH,wBAAgB,QAAQ,IAAI,GAAG,GAAG,IAAI,CAErC;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,qBAAqB,CAAC,CAwBhC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// Use dynamic import to avoid hard dependency when Nango isn't configured.
|
|
2
|
+
// Stored on globalThis so it's shared across module instances (jiti vs compiled).
|
|
3
|
+
const NANGO_KEY = Symbol.for("opflow.nangoInstance");
|
|
4
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
5
|
+
function getNangoInstance() {
|
|
6
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
7
|
+
return globalThis[NANGO_KEY] ?? null;
|
|
8
|
+
}
|
|
9
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
10
|
+
function setNangoInstance(instance) {
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
12
|
+
globalThis[NANGO_KEY] = instance;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Initialize the Nango client singleton.
|
|
16
|
+
*/
|
|
17
|
+
export async function initNango(secretKey) {
|
|
18
|
+
const { Nango } = await import("@nangohq/node");
|
|
19
|
+
setNangoInstance(new Nango({ secretKey }));
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Get the Nango client instance, or null if not initialized.
|
|
23
|
+
*/
|
|
24
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
25
|
+
export function getNango() {
|
|
26
|
+
return getNangoInstance();
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Fetch credentials for an integration connection from Nango.
|
|
30
|
+
*/
|
|
31
|
+
export async function fetchCredentials(integrationId, connectionId) {
|
|
32
|
+
const nango = getNangoInstance();
|
|
33
|
+
if (!nango) {
|
|
34
|
+
throw new Error("Nango not initialized. Set NANGO_SECRET_KEY environment variable or nangoSecretKey in config.");
|
|
35
|
+
}
|
|
36
|
+
const connection = await nango.getConnection(integrationId, connectionId);
|
|
37
|
+
// Extract token from credentials based on auth type
|
|
38
|
+
const creds = connection.credentials ?? {};
|
|
39
|
+
const token = creds.access_token ??
|
|
40
|
+
creds.api_key ??
|
|
41
|
+
creds.apiKey ??
|
|
42
|
+
creds.token ??
|
|
43
|
+
"";
|
|
44
|
+
return {
|
|
45
|
+
token,
|
|
46
|
+
connectionConfig: connection.connection_config ?? {},
|
|
47
|
+
raw: creds,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=nango-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nango-client.js","sourceRoot":"","sources":["../../src/connections/nango-client.ts"],"names":[],"mappings":"AAEA,2EAA2E;AAC3E,kFAAkF;AAClF,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;AAErD,8DAA8D;AAC9D,SAAS,gBAAgB;IACvB,8DAA8D;IAC9D,OAAQ,UAAkC,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;AAChE,CAAC;AAED,8DAA8D;AAC9D,SAAS,gBAAgB,CAAC,QAAa;IACrC,8DAA8D;IAC7D,UAAkC,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC;AAC5D,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,SAAiB;IAC/C,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;IAChD,gBAAgB,CAAC,IAAI,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,8DAA8D;AAC9D,MAAM,UAAU,QAAQ;IACtB,OAAO,gBAAgB,EAAE,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,aAAqB,EACrB,YAAoB;IAEpB,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC;IACjC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,+FAA+F,CAChG,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,aAAa,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IAE1E,oDAAoD;IACpD,MAAM,KAAK,GAAG,UAAU,CAAC,WAAW,IAAI,EAAE,CAAC;IAC3C,MAAM,KAAK,GACT,KAAK,CAAC,YAAY;QAClB,KAAK,CAAC,OAAO;QACb,KAAK,CAAC,MAAM;QACZ,KAAK,CAAC,KAAK;QACX,EAAE,CAAC;IAEL,OAAO;QACL,KAAK;QACL,gBAAgB,EAAE,UAAU,CAAC,iBAAiB,IAAI,EAAE;QACpD,GAAG,EAAE,KAAK;KACX,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import pg from "pg";
|
|
2
|
+
export interface ConnectionMapping {
|
|
3
|
+
workflow_name: string;
|
|
4
|
+
node_name: string;
|
|
5
|
+
integration_id: string;
|
|
6
|
+
connection_id: string;
|
|
7
|
+
updated_at?: Date;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Resolve a connection ID for a given workflow/node/integration.
|
|
11
|
+
* Checks for an exact match first, then falls back to global defaults (* / *).
|
|
12
|
+
*/
|
|
13
|
+
export declare function resolveConnectionId(pool: pg.Pool, workflowName: string, nodeName: string, integrationId: string): Promise<string | null>;
|
|
14
|
+
/**
|
|
15
|
+
* Upsert a connection mapping.
|
|
16
|
+
*/
|
|
17
|
+
export declare function upsertConnection(pool: pg.Pool, mapping: Omit<ConnectionMapping, "updated_at">): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* List all connection mappings.
|
|
20
|
+
*/
|
|
21
|
+
export declare function listConnections(pool: pg.Pool): Promise<ConnectionMapping[]>;
|
|
22
|
+
/**
|
|
23
|
+
* Delete a connection mapping.
|
|
24
|
+
*/
|
|
25
|
+
export declare function deleteConnection(pool: pg.Pool, workflowName: string, nodeName: string, integrationId: string): Promise<void>;
|
|
26
|
+
//# sourceMappingURL=resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/connections/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,IAAI,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAcxB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,YAAY,CAAC,GAC7C,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAOjF;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC,CAQf"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve a connection ID for a given workflow/node/integration.
|
|
3
|
+
* Checks for an exact match first, then falls back to global defaults (* / *).
|
|
4
|
+
*/
|
|
5
|
+
export async function resolveConnectionId(pool, workflowName, nodeName, integrationId) {
|
|
6
|
+
const result = await pool.query(`SELECT connection_id FROM opflow_connections
|
|
7
|
+
WHERE integration_id = $1
|
|
8
|
+
AND (
|
|
9
|
+
(workflow_name = $2 AND node_name = $3)
|
|
10
|
+
OR (workflow_name = '*' AND node_name = '*')
|
|
11
|
+
)
|
|
12
|
+
ORDER BY
|
|
13
|
+
CASE WHEN workflow_name = '*' AND node_name = '*' THEN 1 ELSE 0 END
|
|
14
|
+
LIMIT 1`, [integrationId, workflowName, nodeName]);
|
|
15
|
+
return result.rows.length > 0 ? result.rows[0].connection_id : null;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Upsert a connection mapping.
|
|
19
|
+
*/
|
|
20
|
+
export async function upsertConnection(pool, mapping) {
|
|
21
|
+
await pool.query(`INSERT INTO opflow_connections (workflow_name, node_name, integration_id, connection_id, updated_at)
|
|
22
|
+
VALUES ($1, $2, $3, $4, NOW())
|
|
23
|
+
ON CONFLICT (workflow_name, node_name, integration_id)
|
|
24
|
+
DO UPDATE SET connection_id = EXCLUDED.connection_id, updated_at = NOW()`, [mapping.workflow_name, mapping.node_name, mapping.integration_id, mapping.connection_id]);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* List all connection mappings.
|
|
28
|
+
*/
|
|
29
|
+
export async function listConnections(pool) {
|
|
30
|
+
const result = await pool.query(`SELECT workflow_name, node_name, integration_id, connection_id, updated_at
|
|
31
|
+
FROM opflow_connections
|
|
32
|
+
ORDER BY workflow_name, node_name, integration_id`);
|
|
33
|
+
return result.rows;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Delete a connection mapping.
|
|
37
|
+
*/
|
|
38
|
+
export async function deleteConnection(pool, workflowName, nodeName, integrationId) {
|
|
39
|
+
await pool.query(`DELETE FROM opflow_connections
|
|
40
|
+
WHERE workflow_name = $1
|
|
41
|
+
AND node_name = $2
|
|
42
|
+
AND integration_id = $3`, [workflowName, nodeName, integrationId]);
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/connections/resolver.ts"],"names":[],"mappings":"AAUA;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAAa,EACb,YAAoB,EACpB,QAAgB,EAChB,aAAqB;IAErB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAC7B;;;;;;;;YAQQ,EACR,CAAC,aAAa,EAAE,YAAY,EAAE,QAAQ,CAAC,CACxC,CAAC;IACF,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAwB,CAAC,CAAC,CAAC,IAAI,CAAC;AAClF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAa,EACb,OAA8C;IAE9C,MAAM,IAAI,CAAC,KAAK,CACd;;;6EAGyE,EACzE,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,aAAa,CAAC,CAC1F,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAa;IACjD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAC7B;;sDAEkD,CACnD,CAAC;IACF,OAAO,MAAM,CAAC,IAA2B,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAa,EACb,YAAoB,EACpB,QAAgB,EAChB,aAAqB;IAErB,MAAM,IAAI,CAAC,KAAK,CACd;;;8BAG0B,EAC1B,CAAC,YAAY,EAAE,QAAQ,EAAE,aAAa,CAAC,CACxC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/connections/schema.ts"],"names":[],"mappings":"AAYA;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ/E"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import pg from "pg";
|
|
2
|
+
const CREATE_TABLE_SQL = `
|
|
3
|
+
CREATE TABLE IF NOT EXISTS opflow_connections (
|
|
4
|
+
workflow_name TEXT NOT NULL,
|
|
5
|
+
node_name TEXT NOT NULL,
|
|
6
|
+
integration_id TEXT NOT NULL,
|
|
7
|
+
connection_id TEXT NOT NULL,
|
|
8
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
9
|
+
PRIMARY KEY (workflow_name, node_name, integration_id)
|
|
10
|
+
)`;
|
|
11
|
+
/**
|
|
12
|
+
* Ensure the opflow_connections table exists.
|
|
13
|
+
* Creates a short-lived connection, runs the DDL, then closes it.
|
|
14
|
+
*/
|
|
15
|
+
export async function ensureConnectionsTable(databaseUrl) {
|
|
16
|
+
const client = new pg.Client({ connectionString: databaseUrl });
|
|
17
|
+
try {
|
|
18
|
+
await client.connect();
|
|
19
|
+
await client.query(CREATE_TABLE_SQL);
|
|
20
|
+
}
|
|
21
|
+
finally {
|
|
22
|
+
await client.end();
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/connections/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,MAAM,gBAAgB,GAAG;;;;;;;;EAQvB,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,WAAmB;IAC9D,MAAM,MAAM,GAAG,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,WAAW,EAAE,CAAC,CAAC;IAChE,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QACvB,MAAM,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACvC,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;IACrB,CAAC;AACH,CAAC"}
|
package/dist/context.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,eAAe,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAExE,MAAM,WAAW,cAAc;IAC7B,6DAA6D;IAC7D,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;CACrD;AAQD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,cAAmB,GAAG,eAAe,
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,eAAe,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAExE,MAAM,WAAW,cAAc;IAC7B,6DAA6D;IAC7D,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;CACrD;AAQD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,cAAmB,GAAG,eAAe,CA6BnF"}
|
package/dist/context.js
CHANGED
|
@@ -10,12 +10,16 @@ const defaultLogger = (message, level) => {
|
|
|
10
10
|
export function createWorkflowContext(options = {}) {
|
|
11
11
|
const logger = options.logger ?? defaultLogger;
|
|
12
12
|
const ctx = {
|
|
13
|
+
workflowName: "*",
|
|
13
14
|
run: async (executable, inputs) => {
|
|
14
15
|
// Validate inputs against schema
|
|
15
16
|
const validated = executable.inputSchema.parse(inputs);
|
|
16
17
|
// Execute (DBOS wrapping will be added in factory integration)
|
|
17
18
|
return executable.execute(ctx, validated);
|
|
18
19
|
},
|
|
20
|
+
getConnection: async () => {
|
|
21
|
+
throw new Error("getConnection is not available in this context. Use create0pflow() for connection management.");
|
|
22
|
+
},
|
|
19
23
|
log: (message, level = "info") => {
|
|
20
24
|
logger(message, level);
|
|
21
25
|
},
|
package/dist/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAOA,MAAM,aAAa,GAAG,CAAC,OAAe,EAAE,KAAe,EAAE,EAAE;IACzD,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CACxC,WAAW,KAAK,KAAK,OAAO,EAAE,CAC/B,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,UAA0B,EAAE;IAChE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC;IAE/C,MAAM,GAAG,GAAoB;QAC3B,GAAG,EAAE,KAAK,EACR,UAAuC,EACvC,MAAc,EACI,EAAE;YACpB,iCAAiC;YACjC,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAEvD,+DAA+D;YAC/D,OAAO,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC5C,CAAC;QAED,GAAG,EAAE,CAAC,OAAe,EAAE,QAAkB,MAAM,EAAE,EAAE;YACjD,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACzB,CAAC;KACF,CAAC;IAEF,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAOA,MAAM,aAAa,GAAG,CAAC,OAAe,EAAE,KAAe,EAAE,EAAE;IACzD,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CACxC,WAAW,KAAK,KAAK,OAAO,EAAE,CAC/B,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,UAA0B,EAAE;IAChE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC;IAE/C,MAAM,GAAG,GAAoB;QAC3B,YAAY,EAAE,GAAG;QAEjB,GAAG,EAAE,KAAK,EACR,UAAuC,EACvC,MAAc,EACI,EAAE;YACpB,iCAAiC;YACjC,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAEvD,+DAA+D;YAC/D,OAAO,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC5C,CAAC;QAED,aAAa,EAAE,KAAK,IAAI,EAAE;YACxB,MAAM,IAAI,KAAK,CACb,+FAA+F,CAChG,CAAC;QACJ,CAAC;QAED,GAAG,EAAE,CAAC,OAAe,EAAE,QAAkB,MAAM,EAAE,EAAE;YACjD,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACzB,CAAC;KACF,CAAC;IAEF,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
2
|
+
import type pg from "pg";
|
|
3
|
+
import type { IntegrationProvider } from "../connections/integration-provider.js";
|
|
4
|
+
export interface ApiContext {
|
|
5
|
+
pool: pg.Pool;
|
|
6
|
+
integrationProvider: IntegrationProvider;
|
|
7
|
+
schema: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Handle API requests. Returns true if the request was handled, false otherwise.
|
|
11
|
+
*/
|
|
12
|
+
export declare function handleApiRequest(req: IncomingMessage, res: ServerResponse, ctx: ApiContext): Promise<boolean>;
|
|
13
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/dev-ui/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAMzB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAGlF,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;IACd,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,MAAM,EAAE,MAAM,CAAC;CAChB;AA0BD;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,OAAO,CAAC,CAmPlB"}
|