@party-stack/salesforce-ontology 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +114 -0
- package/lib/adapter/convertLoadSubsetOptions.d.ts +18 -0
- package/lib/adapter/convertLoadSubsetOptions.d.ts.map +1 -0
- package/lib/adapter/convertLoadSubsetOptions.js +144 -0
- package/lib/adapter/convertLoadSubsetOptions.js.map +1 -0
- package/lib/adapter/convertLoadSubsetOptions.test.d.ts +2 -0
- package/lib/adapter/convertLoadSubsetOptions.test.d.ts.map +1 -0
- package/lib/adapter/convertLoadSubsetOptions.test.js +54 -0
- package/lib/adapter/convertLoadSubsetOptions.test.js.map +1 -0
- package/lib/adapter/createSalesforceOntologyBackendAdapter.d.ts +13 -0
- package/lib/adapter/createSalesforceOntologyBackendAdapter.d.ts.map +1 -0
- package/lib/adapter/createSalesforceOntologyBackendAdapter.js +90 -0
- package/lib/adapter/createSalesforceOntologyBackendAdapter.js.map +1 -0
- package/lib/adapter/createSalesforceOntologyBackendAdapter.test.d.ts +2 -0
- package/lib/adapter/createSalesforceOntologyBackendAdapter.test.d.ts.map +1 -0
- package/lib/adapter/createSalesforceOntologyBackendAdapter.test.js +142 -0
- package/lib/adapter/createSalesforceOntologyBackendAdapter.test.js.map +1 -0
- package/lib/adapter/index.d.ts +5 -0
- package/lib/adapter/index.d.ts.map +1 -0
- package/lib/adapter/index.js +5 -0
- package/lib/adapter/index.js.map +1 -0
- package/lib/adapter/objectCollectionOptions.d.ts +32 -0
- package/lib/adapter/objectCollectionOptions.d.ts.map +1 -0
- package/lib/adapter/objectCollectionOptions.js +139 -0
- package/lib/adapter/objectCollectionOptions.js.map +1 -0
- package/lib/adapter/salesforceCodec.d.ts +10 -0
- package/lib/adapter/salesforceCodec.d.ts.map +1 -0
- package/lib/adapter/salesforceCodec.js +201 -0
- package/lib/adapter/salesforceCodec.js.map +1 -0
- package/lib/adapter/salesforceCodec.test.d.ts +2 -0
- package/lib/adapter/salesforceCodec.test.d.ts.map +1 -0
- package/lib/adapter/salesforceCodec.test.js +57 -0
- package/lib/adapter/salesforceCodec.test.js.map +1 -0
- package/lib/config/index.d.ts +24 -0
- package/lib/config/index.d.ts.map +1 -0
- package/lib/config/index.js +178 -0
- package/lib/config/index.js.map +1 -0
- package/lib/config/index.test.d.ts +2 -0
- package/lib/config/index.test.d.ts.map +1 -0
- package/lib/config/index.test.js +139 -0
- package/lib/config/index.test.js.map +1 -0
- package/lib/connection.d.ts +33 -0
- package/lib/connection.d.ts.map +1 -0
- package/lib/connection.js +240 -0
- package/lib/connection.js.map +1 -0
- package/lib/connection.test.d.ts +2 -0
- package/lib/connection.test.d.ts.map +1 -0
- package/lib/connection.test.js +150 -0
- package/lib/connection.test.js.map +1 -0
- package/lib/index.d.ts +5 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +5 -0
- package/lib/index.js.map +1 -0
- package/lib/installation/createSalesforceBackendInstallation.d.ts +28 -0
- package/lib/installation/createSalesforceBackendInstallation.d.ts.map +1 -0
- package/lib/installation/createSalesforceBackendInstallation.js +77 -0
- package/lib/installation/createSalesforceBackendInstallation.js.map +1 -0
- package/lib/installation/createSalesforceBackendInstallation.test.d.ts +2 -0
- package/lib/installation/createSalesforceBackendInstallation.test.d.ts.map +1 -0
- package/lib/installation/createSalesforceBackendInstallation.test.js +34 -0
- package/lib/installation/createSalesforceBackendInstallation.test.js.map +1 -0
- package/lib/installation/index.d.ts +2 -0
- package/lib/installation/index.d.ts.map +1 -0
- package/lib/installation/index.js +2 -0
- package/lib/installation/index.js.map +1 -0
- package/lib/meta/actionTypeCollectionOptions.d.ts +10 -0
- package/lib/meta/actionTypeCollectionOptions.d.ts.map +1 -0
- package/lib/meta/actionTypeCollectionOptions.js +51 -0
- package/lib/meta/actionTypeCollectionOptions.js.map +1 -0
- package/lib/meta/convertMetaActionType.d.ts +12 -0
- package/lib/meta/convertMetaActionType.d.ts.map +1 -0
- package/lib/meta/convertMetaActionType.js +28 -0
- package/lib/meta/convertMetaActionType.js.map +1 -0
- package/lib/meta/convertMetaActionType.test.d.ts +2 -0
- package/lib/meta/convertMetaActionType.test.d.ts.map +1 -0
- package/lib/meta/convertMetaActionType.test.js +76 -0
- package/lib/meta/convertMetaActionType.test.js.map +1 -0
- package/lib/meta/convertMetaLinkType.d.ts +9 -0
- package/lib/meta/convertMetaLinkType.d.ts.map +1 -0
- package/lib/meta/convertMetaLinkType.js +55 -0
- package/lib/meta/convertMetaLinkType.js.map +1 -0
- package/lib/meta/convertMetaObjectType.d.ts +4 -0
- package/lib/meta/convertMetaObjectType.d.ts.map +1 -0
- package/lib/meta/convertMetaObjectType.js +45 -0
- package/lib/meta/convertMetaObjectType.js.map +1 -0
- package/lib/meta/convertMetaObjectType.test.d.ts +2 -0
- package/lib/meta/convertMetaObjectType.test.d.ts.map +1 -0
- package/lib/meta/convertMetaObjectType.test.js +179 -0
- package/lib/meta/convertMetaObjectType.test.js.map +1 -0
- package/lib/meta/convertMetaTypeDef.d.ts +13 -0
- package/lib/meta/convertMetaTypeDef.d.ts.map +1 -0
- package/lib/meta/convertMetaTypeDef.js +163 -0
- package/lib/meta/convertMetaTypeDef.js.map +1 -0
- package/lib/meta/createSalesforceMetaOntologyBackendAdapter.d.ts +14 -0
- package/lib/meta/createSalesforceMetaOntologyBackendAdapter.d.ts.map +1 -0
- package/lib/meta/createSalesforceMetaOntologyBackendAdapter.js +42 -0
- package/lib/meta/createSalesforceMetaOntologyBackendAdapter.js.map +1 -0
- package/lib/meta/entityCollectionOptions.d.ts +27 -0
- package/lib/meta/entityCollectionOptions.d.ts.map +1 -0
- package/lib/meta/entityCollectionOptions.js +80 -0
- package/lib/meta/entityCollectionOptions.js.map +1 -0
- package/lib/meta/index.d.ts +7 -0
- package/lib/meta/index.d.ts.map +1 -0
- package/lib/meta/index.js +7 -0
- package/lib/meta/index.js.map +1 -0
- package/lib/meta/queryFunctionTypeCollectionOptions.d.ts +7 -0
- package/lib/meta/queryFunctionTypeCollectionOptions.d.ts.map +1 -0
- package/lib/meta/queryFunctionTypeCollectionOptions.js +16 -0
- package/lib/meta/queryFunctionTypeCollectionOptions.js.map +1 -0
- package/lib/utils/AsyncIterable.d.ts +3 -0
- package/lib/utils/AsyncIterable.d.ts.map +1 -0
- package/lib/utils/AsyncIterable.js +26 -0
- package/lib/utils/AsyncIterable.js.map +1 -0
- package/lib/utils/ids.d.ts +10 -0
- package/lib/utils/ids.d.ts.map +1 -0
- package/lib/utils/ids.js +20 -0
- package/lib/utils/ids.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { createDefaultRuntime } from "@party-stack/runtime";
|
|
2
|
+
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
3
|
+
import { createSalesforceConnectionAdapter } from "./connection.js";
|
|
4
|
+
describe("createSalesforceConnectionAdapter", () => {
|
|
5
|
+
afterEach(() => {
|
|
6
|
+
vi.unstubAllGlobals();
|
|
7
|
+
});
|
|
8
|
+
it("injects bearer authority only for its Salesforce origin", async () => {
|
|
9
|
+
const fetch = vi.fn(() => Promise.resolve(new Response(null, { status: 204 })));
|
|
10
|
+
const adapter = await createSalesforceConnectionAdapter({
|
|
11
|
+
instanceUrl: "https://example.my.salesforce.com",
|
|
12
|
+
token: "access-token",
|
|
13
|
+
userId: "005000000000001",
|
|
14
|
+
})({
|
|
15
|
+
installationId: "salesforce",
|
|
16
|
+
runtime: {},
|
|
17
|
+
});
|
|
18
|
+
const [established] = await adapter.restoreConnections();
|
|
19
|
+
if (!established?.session.egress) {
|
|
20
|
+
throw new Error("Expected Salesforce egress wrapper.");
|
|
21
|
+
}
|
|
22
|
+
const egress = established.session.egress({
|
|
23
|
+
fetch,
|
|
24
|
+
createWebSocket: () => Promise.resolve({}),
|
|
25
|
+
});
|
|
26
|
+
await egress.fetch(new Request("https://example.my.salesforce.com/services/data/v65.0/sobjects"));
|
|
27
|
+
const request = fetch.mock.calls[0][0];
|
|
28
|
+
expect(request.headers.get("authorization")).toBe("Bearer access-token");
|
|
29
|
+
await expect(egress.fetch(new Request("https://attacker.example/services/data"))).rejects.toThrow('Salesforce egress not allowed for origin "https://attacker.example".');
|
|
30
|
+
expect(fetch).toHaveBeenCalledOnce();
|
|
31
|
+
});
|
|
32
|
+
it("exposes access-token authentication through the connection controller", async () => {
|
|
33
|
+
const adapter = await createSalesforceConnectionAdapter({
|
|
34
|
+
instanceUrl: "https://example.my.salesforce.com",
|
|
35
|
+
})({
|
|
36
|
+
installationId: "salesforce",
|
|
37
|
+
runtime: {},
|
|
38
|
+
});
|
|
39
|
+
const connect = vi.fn(() => Promise.resolve());
|
|
40
|
+
const authentication = adapter.createAuthenticationClient({
|
|
41
|
+
connect,
|
|
42
|
+
disconnect: () => Promise.resolve(),
|
|
43
|
+
});
|
|
44
|
+
const connection = await authentication.signIn.accessToken({
|
|
45
|
+
token: "access-token",
|
|
46
|
+
userId: "005000000000001",
|
|
47
|
+
});
|
|
48
|
+
expect(connection).toEqual({
|
|
49
|
+
userId: "005000000000001",
|
|
50
|
+
state: { status: "active" },
|
|
51
|
+
});
|
|
52
|
+
expect(connect).toHaveBeenCalledWith(expect.objectContaining({
|
|
53
|
+
connection,
|
|
54
|
+
}));
|
|
55
|
+
});
|
|
56
|
+
it("composes stored public OAuth authentication", async () => {
|
|
57
|
+
const values = new Map();
|
|
58
|
+
const runtime = {
|
|
59
|
+
...createDefaultRuntime("installation", `salesforce-oauth-${crypto.randomUUID()}`),
|
|
60
|
+
secrets: {
|
|
61
|
+
get: (key) => Promise.resolve(values.get(key)),
|
|
62
|
+
set: (key, value) => {
|
|
63
|
+
values.set(key, value);
|
|
64
|
+
return Promise.resolve();
|
|
65
|
+
},
|
|
66
|
+
delete: (key) => {
|
|
67
|
+
values.delete(key);
|
|
68
|
+
return Promise.resolve();
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
browserAuthentication: {
|
|
72
|
+
start({ redirectUrl }) {
|
|
73
|
+
return {
|
|
74
|
+
open(authorizationUrl) {
|
|
75
|
+
const state = new URL(authorizationUrl).searchParams.get("state");
|
|
76
|
+
return Promise.resolve({
|
|
77
|
+
callbackUrl: `${redirectUrl}?code=code&state=${state}`,
|
|
78
|
+
});
|
|
79
|
+
},
|
|
80
|
+
close() { },
|
|
81
|
+
};
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
const fetch = vi.fn((input) => {
|
|
86
|
+
const url = input instanceof Request
|
|
87
|
+
? input.url
|
|
88
|
+
: input instanceof URL
|
|
89
|
+
? input.toString()
|
|
90
|
+
: input;
|
|
91
|
+
return Promise.resolve(url.endsWith("/services/oauth2/userinfo")
|
|
92
|
+
? Response.json({ user_id: "005000000000001" })
|
|
93
|
+
: Response.json({
|
|
94
|
+
access_token: "access-token",
|
|
95
|
+
refresh_token: "refresh-token",
|
|
96
|
+
token_type: "Bearer",
|
|
97
|
+
expires_in: 3600,
|
|
98
|
+
}));
|
|
99
|
+
});
|
|
100
|
+
const adapter = await createSalesforceConnectionAdapter({
|
|
101
|
+
instanceUrl: "https://example.my.salesforce.com",
|
|
102
|
+
oauth: {
|
|
103
|
+
clientId: "client",
|
|
104
|
+
redirectUrl: "http://localhost:1717/oauth/callback",
|
|
105
|
+
fetch,
|
|
106
|
+
},
|
|
107
|
+
})({
|
|
108
|
+
installationId: "salesforce",
|
|
109
|
+
runtime,
|
|
110
|
+
});
|
|
111
|
+
let established;
|
|
112
|
+
const connect = vi.fn((candidate) => {
|
|
113
|
+
established = candidate;
|
|
114
|
+
return Promise.resolve();
|
|
115
|
+
});
|
|
116
|
+
const authentication = adapter.createAuthenticationClient({
|
|
117
|
+
connect,
|
|
118
|
+
disconnect: () => Promise.resolve(),
|
|
119
|
+
});
|
|
120
|
+
const connection = await authentication.signIn.oauth();
|
|
121
|
+
expect(connection.userId).toBe("005000000000001");
|
|
122
|
+
expect(connection.state.status).toBe("active");
|
|
123
|
+
expect(connect).toHaveBeenCalledWith(expect.objectContaining({
|
|
124
|
+
connection,
|
|
125
|
+
}));
|
|
126
|
+
expect([...values.values()].some((value) => value.includes("refresh-token"))).toBe(true);
|
|
127
|
+
if (!established?.session.egress) {
|
|
128
|
+
throw new Error("Expected OAuth egress wrapper.");
|
|
129
|
+
}
|
|
130
|
+
const backendFetch = vi
|
|
131
|
+
.fn()
|
|
132
|
+
.mockResolvedValueOnce(new Response(null, {
|
|
133
|
+
status: 401,
|
|
134
|
+
}))
|
|
135
|
+
.mockResolvedValueOnce(new Response(null, {
|
|
136
|
+
status: 204,
|
|
137
|
+
}));
|
|
138
|
+
const egress = established.session.egress({
|
|
139
|
+
fetch: backendFetch,
|
|
140
|
+
createWebSocket: () => Promise.resolve({}),
|
|
141
|
+
});
|
|
142
|
+
await expect(egress.fetch(new Request("https://example.my.salesforce.com/services/data/v65.0/sobjects"))).resolves.toMatchObject({
|
|
143
|
+
status: 204,
|
|
144
|
+
});
|
|
145
|
+
expect(backendFetch).toHaveBeenCalledTimes(2);
|
|
146
|
+
await adapter.cleanup?.();
|
|
147
|
+
await runtime.cleanup?.();
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
//# sourceMappingURL=connection.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.test.js","sourceRoot":"","sources":["../src/connection.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE7D,OAAO,EAAE,iCAAiC,EAAE,MAAM,iBAAiB,CAAC;AAEpE,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;IAC/C,SAAS,CAAC,GAAG,EAAE;QACX,EAAE,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACrE,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,CAA0B,GAAG,EAAE,CAC9C,OAAO,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CACvD,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,iCAAiC,CAAC;YACpD,WAAW,EAAE,mCAAmC;YAChD,KAAK,EAAE,cAAc;YACrB,MAAM,EAAE,iBAAiB;SAC5B,CAAC,CAAC;YACC,cAAc,EAAE,YAAY;YAC5B,OAAO,EAAE,EAAW;SACvB,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,kBAAkB,EAAE,CAAC;QACzD,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAC3D,CAAC;QACD,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;YACtC,KAAK;YACL,eAAe,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAe,CAAC;SAC1D,CAAC,CAAC;QAEH,MAAM,MAAM,CAAC,KAAK,CACd,IAAI,OAAO,CAAC,gEAAgE,CAAC,CAChF,CAAC;QACF,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAY,CAAC;QACnD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACzE,MAAM,MAAM,CACR,MAAM,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,wCAAwC,CAAC,CAAC,CACtE,CAAC,OAAO,CAAC,OAAO,CAAC,sEAAsE,CAAC,CAAC;QAC1F,MAAM,CAAC,KAAK,CAAC,CAAC,oBAAoB,EAAE,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACnF,MAAM,OAAO,GAAG,MAAM,iCAAiC,CAAC;YACpD,WAAW,EAAE,mCAAmC;SACnD,CAAC,CAAC;YACC,cAAc,EAAE,YAAY;YAC5B,OAAO,EAAE,EAAW;SACvB,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/C,MAAM,cAAc,GAAG,OAAO,CAAC,0BAA0B,CAAC;YACtD,OAAO;YACP,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE;SACtC,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC;YACvD,KAAK,EAAE,cAAc;YACrB,MAAM,EAAE,iBAAiB;SAC5B,CAAC,CAAC;QAEH,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC;YACvB,MAAM,EAAE,iBAAiB;YACzB,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE;SAC9B,CAAC,CAAC;QACH,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAChC,MAAM,CAAC,gBAAgB,CAAC;YACpB,UAAU;SACb,CAAC,CACL,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;QACzC,MAAM,OAAO,GAAG;YACZ,GAAG,oBAAoB,CAAC,cAAc,EAAE,oBAAoB,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;YAClF,OAAO,EAAE;gBACL,GAAG,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACtD,GAAG,EAAE,CAAC,GAAW,EAAE,KAAa,EAAE,EAAE;oBAChC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;oBACvB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;gBAC7B,CAAC;gBACD,MAAM,EAAE,CAAC,GAAW,EAAE,EAAE;oBACpB,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBACnB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;gBAC7B,CAAC;aACJ;YACD,qBAAqB,EAAE;gBACnB,KAAK,CAAC,EAAE,WAAW,EAA2B;oBAC1C,OAAO;wBACH,IAAI,CAAC,gBAAwB;4BACzB,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;4BAClE,OAAO,OAAO,CAAC,OAAO,CAAC;gCACnB,WAAW,EAAE,GAAG,WAAW,oBAAoB,KAAK,EAAE;6BACzD,CAAC,CAAC;wBACP,CAAC;wBACD,KAAK,KAAI,CAAC;qBACb,CAAC;gBACN,CAAC;aACJ;SACJ,CAAC;QACF,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,CAA0B,CAAC,KAAK,EAAE,EAAE;YACnD,MAAM,GAAG,GACL,KAAK,YAAY,OAAO;gBACpB,CAAC,CAAC,KAAK,CAAC,GAAG;gBACX,CAAC,CAAC,KAAK,YAAY,GAAG;oBACpB,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE;oBAClB,CAAC,CAAC,KAAK,CAAC;YAClB,OAAO,OAAO,CAAC,OAAO,CAClB,GAAG,CAAC,QAAQ,CAAC,2BAA2B,CAAC;gBACrC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;gBAC/C,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACV,YAAY,EAAE,cAAc;oBAC5B,aAAa,EAAE,eAAe;oBAC9B,UAAU,EAAE,QAAQ;oBACpB,UAAU,EAAE,IAAI;iBACnB,CAAC,CACX,CAAC;QACN,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,iCAAiC,CAAC;YACpD,WAAW,EAAE,mCAAmC;YAChD,KAAK,EAAE;gBACH,QAAQ,EAAE,QAAQ;gBAClB,WAAW,EAAE,sCAAsC;gBACnD,KAAK;aACR;SACJ,CAAC,CAAC;YACC,cAAc,EAAE,YAAY;YAC5B,OAAO;SACV,CAAC,CAAC;QACH,IAAI,WAEW,CAAC;QAChB,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,CACjB,CAAC,SAAgC,EAAE,EAAE;YACjC,WAAW,GAAG,SAAS,CAAC;YACxB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC7B,CAAC,CACJ,CAAC;QACF,MAAM,cAAc,GAAG,OAAO,CAAC,0BAA0B,CAAC;YACtD,OAAO;YACP,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE;SACtC,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAEvD,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAClD,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAChC,MAAM,CAAC,gBAAgB,CAAC;YACpB,UAAU;SACb,CAAC,CACL,CAAC;QACF,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzF,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CACX,gCAAgC,CACnC,CAAC;QACN,CAAC;QACD,MAAM,YAAY,GAAG,EAAE;aAClB,EAAE,EAA2B;aAC7B,qBAAqB,CAClB,IAAI,QAAQ,CAAC,IAAI,EAAE;YACf,MAAM,EAAE,GAAG;SACd,CAAC,CACL;aACA,qBAAqB,CAClB,IAAI,QAAQ,CAAC,IAAI,EAAE;YACf,MAAM,EAAE,GAAG;SACd,CAAC,CACL,CAAC;QACN,MAAM,MAAM,GACR,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;YACvB,KAAK,EAAE,YAAY;YACnB,eAAe,EAAE,GAAG,EAAE,CAClB,OAAO,CAAC,OAAO,CACX,EAAe,CAClB;SACR,CAAC,CAAC;QAEP,MAAM,MAAM,CACR,MAAM,CAAC,KAAK,CACR,IAAI,OAAO,CACP,gEAAgE,CACnE,CACJ,CACJ,CAAC,QAAQ,CAAC,aAAa,CAAC;YACrB,MAAM,EAAE,GAAG;SACd,CAAC,CAAC;QACH,MAAM,CAAC,YAAY,CAAC,CAAC,qBAAqB,CACtC,CAAC,CACJ,CAAC;QAEF,MAAM,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;QAC1B,MAAM,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;IAC9B,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC"}
|
package/lib/index.js
ADDED
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type LiveOntologyWrites, type OntologyBackendInstallation, type OntologyIR, type OntologyRoute } from "@party-stack/ontology";
|
|
2
|
+
import type { BackendConnectionAdapterProvider } from "@party-stack/connections";
|
|
3
|
+
import type { RuntimeAdapterProvider } from "@party-stack/runtime";
|
|
4
|
+
import { type CreateSalesforceConnectionAdapterOptions, type SalesforceAuthenticationClient } from "../connection.js";
|
|
5
|
+
export type SalesforceConnectionOptions = Omit<CreateSalesforceConnectionAdapterOptions, "instanceUrl" | "apiVersion">;
|
|
6
|
+
export type SalesforceOntologyRoute = (options: {
|
|
7
|
+
instanceUrl: string;
|
|
8
|
+
apiVersion: string;
|
|
9
|
+
}) => OntologyRoute;
|
|
10
|
+
export interface CreateSalesforceBackendInstallationOptions<AuthenticationClient extends object = SalesforceAuthenticationClient> {
|
|
11
|
+
installationId?: string;
|
|
12
|
+
instanceUrl: string;
|
|
13
|
+
apiVersion: string;
|
|
14
|
+
runtime: RuntimeAdapterProvider;
|
|
15
|
+
connections: SalesforceConnectionOptions | BackendConnectionAdapterProvider<AuthenticationClient>;
|
|
16
|
+
routes: readonly SalesforceOntologyRoute[];
|
|
17
|
+
createContext?: (userId: string, ontologyId: string) => Record<string, unknown>;
|
|
18
|
+
}
|
|
19
|
+
export declare function createSalesforceOntologyRoute(options: {
|
|
20
|
+
ontologyId: string;
|
|
21
|
+
ir?: OntologyIR;
|
|
22
|
+
objectTypeNames?: string[];
|
|
23
|
+
actionTypeNames?: string[];
|
|
24
|
+
persistObjects?: boolean;
|
|
25
|
+
writes?: LiveOntologyWrites;
|
|
26
|
+
}): SalesforceOntologyRoute;
|
|
27
|
+
export declare function createSalesforceBackendInstallation<AuthenticationClient extends object = SalesforceAuthenticationClient>(options: CreateSalesforceBackendInstallationOptions<AuthenticationClient>): Promise<OntologyBackendInstallation<AuthenticationClient>>;
|
|
28
|
+
//# sourceMappingURL=createSalesforceBackendInstallation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createSalesforceBackendInstallation.d.ts","sourceRoot":"","sources":["../../src/installation/createSalesforceBackendInstallation.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,KAAK,kBAAkB,EACvB,KAAK,2BAA2B,EAEhC,KAAK,UAAU,EACf,KAAK,aAAa,EACrB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EACR,gCAAgC,EAEnC,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAInE,OAAO,EAEH,KAAK,wCAAwC,EAC7C,KAAK,8BAA8B,EACtC,MAAM,kBAAkB,CAAC;AAK1B,MAAM,MAAM,2BAA2B,GAAG,IAAI,CAC1C,wCAAwC,EACxC,aAAa,GAAG,YAAY,CAC/B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,EAAE;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACtB,KAAK,aAAa,CAAC;AAEpB,MAAM,WAAW,0CAA0C,CACvD,oBAAoB,SAAS,MAAM,GAAG,8BAA8B;IAEpE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,sBAAsB,CAAC;IAChC,WAAW,EACL,2BAA2B,GAC3B,gCAAgC,CAAC,oBAAoB,CAAC,CAAC;IAC7D,MAAM,EAAE,SAAS,uBAAuB,EAAE,CAAC;IAC3C,aAAa,CAAC,EAAE,CACZ,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,KACjB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAwCD,wBAAgB,6BAA6B,CAAC,OAAO,EAAE;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,UAAU,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,MAAM,CAAC,EAAE,kBAAkB,CAAC;CAC/B,GAAG,uBAAuB,CAsC1B;AAED,wBAAgB,mCAAmC,CAC/C,oBAAoB,SAAS,MAAM,GAAG,8BAA8B,EAEpE,OAAO,EAAE,0CAA0C,CAAC,oBAAoB,CAAC,GAC1E,OAAO,CACN,2BAA2B,CAAC,oBAAoB,CAAC,CACpD,CAyBA"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { createMetaOntologyConfiguration, createOntologyBackendInstallation, } from "@party-stack/ontology";
|
|
2
|
+
import { createSalesforceClient } from "@party-stack/salesforce-client";
|
|
3
|
+
import { createSalesforceOntologyBackend, } from "../adapter/createSalesforceOntologyBackendAdapter.js";
|
|
4
|
+
import { createSalesforceConnectionAdapter, } from "../connection.js";
|
|
5
|
+
import { createSalesforceMetaOntologyBackendAdapter, } from "../meta/createSalesforceMetaOntologyBackendAdapter.js";
|
|
6
|
+
function createConnectionSalesforceClient(options) {
|
|
7
|
+
return createSalesforceClient({
|
|
8
|
+
instanceUrl: options.instanceUrl,
|
|
9
|
+
apiVersion: options.apiVersion,
|
|
10
|
+
authenticatedFetch: true,
|
|
11
|
+
fetch: (input, init) => options.egress.fetch(new Request(input, init)),
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
function configureSalesforceMeta(instanceUrl, apiVersion, objectTypeNames, actionTypeNames, options) {
|
|
15
|
+
const client = createConnectionSalesforceClient({
|
|
16
|
+
instanceUrl,
|
|
17
|
+
apiVersion,
|
|
18
|
+
egress: options.egress,
|
|
19
|
+
});
|
|
20
|
+
return createMetaOntologyConfiguration({
|
|
21
|
+
backend: () => createSalesforceMetaOntologyBackendAdapter({
|
|
22
|
+
client,
|
|
23
|
+
objectTypeNames,
|
|
24
|
+
actionTypeNames,
|
|
25
|
+
}),
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
export function createSalesforceOntologyRoute(options) {
|
|
29
|
+
return ({ instanceUrl, apiVersion }) => {
|
|
30
|
+
const route = {
|
|
31
|
+
matches: (ontologyId) => ontologyId === options.ontologyId,
|
|
32
|
+
};
|
|
33
|
+
const ir = options.ir;
|
|
34
|
+
if (ir) {
|
|
35
|
+
route.configure = ({ egress }) => {
|
|
36
|
+
const client = createConnectionSalesforceClient({
|
|
37
|
+
instanceUrl,
|
|
38
|
+
apiVersion,
|
|
39
|
+
egress,
|
|
40
|
+
});
|
|
41
|
+
return {
|
|
42
|
+
ir,
|
|
43
|
+
backend: createSalesforceOntologyBackend({
|
|
44
|
+
client,
|
|
45
|
+
}),
|
|
46
|
+
persistObjects: options.persistObjects ?? true,
|
|
47
|
+
writes: options.writes,
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
route.configureMeta = (configureOptions) => configureSalesforceMeta(instanceUrl, apiVersion, options.objectTypeNames, options.actionTypeNames, configureOptions);
|
|
53
|
+
}
|
|
54
|
+
return route;
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
export function createSalesforceBackendInstallation(options) {
|
|
58
|
+
const connectionAdapter = typeof options.connections === "function"
|
|
59
|
+
? options.connections
|
|
60
|
+
: createSalesforceConnectionAdapter({
|
|
61
|
+
...options.connections,
|
|
62
|
+
instanceUrl: options.instanceUrl,
|
|
63
|
+
apiVersion: options.apiVersion,
|
|
64
|
+
});
|
|
65
|
+
return createOntologyBackendInstallation({
|
|
66
|
+
installationId: options.installationId ??
|
|
67
|
+
`salesforce:${new URL(options.instanceUrl).origin}`,
|
|
68
|
+
connections: connectionAdapter,
|
|
69
|
+
runtime: options.runtime,
|
|
70
|
+
routes: options.routes.map((route) => route({
|
|
71
|
+
instanceUrl: options.instanceUrl,
|
|
72
|
+
apiVersion: options.apiVersion,
|
|
73
|
+
})),
|
|
74
|
+
createContext: options.createContext,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=createSalesforceBackendInstallation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createSalesforceBackendInstallation.js","sourceRoot":"","sources":["../../src/installation/createSalesforceBackendInstallation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createSalesforceBackendInstallation.test.d.ts","sourceRoot":"","sources":["../../src/installation/createSalesforceBackendInstallation.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { createSalesforceOntologyRoute } from "./createSalesforceBackendInstallation.js";
|
|
3
|
+
const ir = {
|
|
4
|
+
types: [],
|
|
5
|
+
objectTypes: [],
|
|
6
|
+
linkTypes: [],
|
|
7
|
+
actionTypes: [],
|
|
8
|
+
queryFunctionTypes: [],
|
|
9
|
+
};
|
|
10
|
+
const backend = {
|
|
11
|
+
instanceUrl: "https://example.my.salesforce.com",
|
|
12
|
+
apiVersion: "65.0",
|
|
13
|
+
};
|
|
14
|
+
describe("createSalesforceOntologyRoute", () => {
|
|
15
|
+
it("creates a scoped metadata route when IR is omitted", () => {
|
|
16
|
+
const route = createSalesforceOntologyRoute({
|
|
17
|
+
ontologyId: "salesforce:tasks",
|
|
18
|
+
objectTypeNames: ["Task", "User"],
|
|
19
|
+
})(backend);
|
|
20
|
+
expect(route.configure === undefined).toBe(true);
|
|
21
|
+
expect(route.configureMeta !== undefined).toBe(true);
|
|
22
|
+
expect(route.matches("salesforce:tasks")).toBe(true);
|
|
23
|
+
expect(route.matches("salesforce:other")).toBe(false);
|
|
24
|
+
});
|
|
25
|
+
it("defers IR metadata projection to the installation", () => {
|
|
26
|
+
const route = createSalesforceOntologyRoute({
|
|
27
|
+
ontologyId: "salesforce:tasks",
|
|
28
|
+
ir,
|
|
29
|
+
})(backend);
|
|
30
|
+
expect(route.configure !== undefined).toBe(true);
|
|
31
|
+
expect(route.configureMeta === undefined).toBe(true);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
//# sourceMappingURL=createSalesforceBackendInstallation.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createSalesforceBackendInstallation.test.js","sourceRoot":"","sources":["../../src/installation/createSalesforceBackendInstallation.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,6BAA6B,EAAE,MAAM,0CAA0C,CAAC;AAEzF,MAAM,EAAE,GAAe;IACnB,KAAK,EAAE,EAAE;IACT,WAAW,EAAE,EAAE;IACf,SAAS,EAAE,EAAE;IACb,WAAW,EAAE,EAAE;IACf,kBAAkB,EAAE,EAAE;CACzB,CAAC;AAEF,MAAM,OAAO,GAAG;IACZ,WAAW,EAAE,mCAAmC;IAChD,UAAU,EAAE,MAAM;CACrB,CAAC;AAEF,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC3C,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC1D,MAAM,KAAK,GAAG,6BAA6B,CAAC;YACxC,UAAU,EAAE,kBAAkB;YAC9B,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;SACpC,CAAC,CAAC,OAAO,CAAC,CAAC;QAEZ,MAAM,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,MAAM,CAAC,KAAK,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QACzD,MAAM,KAAK,GAAG,6BAA6B,CAAC;YACxC,UAAU,EAAE,kBAAkB;YAC9B,EAAE;SACL,CAAC,CAAC,OAAO,CAAC,CAAC;QAEZ,MAAM,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,MAAM,CAAC,KAAK,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { createSalesforceBackendInstallation, createSalesforceOntologyRoute, type CreateSalesforceBackendInstallationOptions, type SalesforceConnectionOptions, type SalesforceOntologyRoute, } from "./createSalesforceBackendInstallation.js";
|
|
2
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/installation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,mCAAmC,EACnC,6BAA6B,EAC7B,KAAK,0CAA0C,EAC/C,KAAK,2BAA2B,EAChC,KAAK,uBAAuB,GAC/B,MAAM,0CAA0C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/installation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,mCAAmC,EACnC,6BAA6B,GAIhC,MAAM,0CAA0C,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { QueryClient } from "@tanstack/query-core";
|
|
2
|
+
import type { OntologyCollectionOptions } from "@party-stack/ontology";
|
|
3
|
+
import type { SalesforceClient } from "@party-stack/salesforce-client";
|
|
4
|
+
export interface ActionTypeCollectionOpts {
|
|
5
|
+
client: SalesforceClient;
|
|
6
|
+
actionTypeNames?: string[];
|
|
7
|
+
queryClient?: QueryClient;
|
|
8
|
+
}
|
|
9
|
+
export declare function actionTypeCollectionOptions(opts: ActionTypeCollectionOpts): OntologyCollectionOptions;
|
|
10
|
+
//# sourceMappingURL=actionTypeCollectionOptions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actionTypeCollectionOptions.d.ts","sourceRoot":"","sources":["../../src/meta/actionTypeCollectionOptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,KAAK,EAAkB,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACvF,OAAO,KAAK,EACR,gBAAgB,EAInB,MAAM,gCAAgC,CAAC;AAGxC,MAAM,WAAW,wBAAwB;IACrC,MAAM,EAAE,gBAAgB,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,WAAW,CAAC;CAC7B;AAgCD,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,wBAAwB,GAAG,yBAAyB,CA0BrG"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { QueryClient } from "@tanstack/query-core";
|
|
2
|
+
import { queryCollectionOptions } from "@tanstack/query-db-collection";
|
|
3
|
+
import { convertSalesforceMetaActionType } from "./convertMetaActionType.js";
|
|
4
|
+
function normalizeFlowActionList(response) {
|
|
5
|
+
if (Array.isArray(response)) {
|
|
6
|
+
return response;
|
|
7
|
+
}
|
|
8
|
+
if (typeof response === "object" && response !== null && "actions" in response) {
|
|
9
|
+
return Array.isArray(response.actions) ? response.actions : [];
|
|
10
|
+
}
|
|
11
|
+
// Some Salesforce responses return a map of actionName -> url.
|
|
12
|
+
return Object.keys(response).map((name) => ({ name }));
|
|
13
|
+
}
|
|
14
|
+
async function listFlowActionNames(client) {
|
|
15
|
+
const response = await client.listFlowActions();
|
|
16
|
+
return normalizeFlowActionList(response).map((action) => action.name);
|
|
17
|
+
}
|
|
18
|
+
async function loadFlowActionDescribe(client, apiName) {
|
|
19
|
+
try {
|
|
20
|
+
return await client.describeFlowAction(apiName);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
// Skip inaccessible or non-autolaunched flows.
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export function actionTypeCollectionOptions(opts) {
|
|
28
|
+
return queryCollectionOptions({
|
|
29
|
+
queryClient: opts.queryClient ?? new QueryClient(),
|
|
30
|
+
getKey: (row) => row.name,
|
|
31
|
+
queryKey: [
|
|
32
|
+
"salesforce",
|
|
33
|
+
"ontology",
|
|
34
|
+
"actionTypes",
|
|
35
|
+
opts.actionTypeNames ?? "all",
|
|
36
|
+
],
|
|
37
|
+
syncMode: "on-demand",
|
|
38
|
+
queryFn: async () => {
|
|
39
|
+
const names = opts.actionTypeNames ??
|
|
40
|
+
(await listFlowActionNames(opts.client));
|
|
41
|
+
if (names.length === 0) {
|
|
42
|
+
return [];
|
|
43
|
+
}
|
|
44
|
+
const describes = await Promise.all(names.map((name) => loadFlowActionDescribe(opts.client, name)));
|
|
45
|
+
return describes
|
|
46
|
+
.filter((describe) => Boolean(describe))
|
|
47
|
+
.map(convertSalesforceMetaActionType);
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=actionTypeCollectionOptions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actionTypeCollectionOptions.js","sourceRoot":"","sources":["../../src/meta/actionTypeCollectionOptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAQvE,OAAO,EAAE,+BAA+B,EAAE,MAAM,4BAA4B,CAAC;AAQ7E,SAAS,uBAAuB,CAC5B,QAA+C;IAE/C,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,QAAQ,CAAC;IACpB,CAAC;IACD,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC;QAC7E,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IACnE,CAAC;IACD,+DAA+D;IAC/D,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,MAAwB;IACvD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,eAAe,EAAE,CAAC;IAChD,OAAO,uBAAuB,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC1E,CAAC;AAED,KAAK,UAAU,sBAAsB,CACjC,MAAwB,EACxB,OAAe;IAEf,IAAI,CAAC;QACD,OAAO,MAAM,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACL,+CAA+C;QAC/C,OAAO,SAAS,CAAC;IACrB,CAAC;AACL,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,IAA8B;IACtE,OAAO,sBAAsB,CAAiB;QAC1C,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI,WAAW,EAAE;QAClD,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI;QACzB,QAAQ,EAAE;YACN,YAAY;YACZ,UAAU;YACV,aAAa;YACb,IAAI,CAAC,eAAe,IAAI,KAAK;SAChC;QACD,QAAQ,EAAE,WAAW;QACrB,OAAO,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,KAAK,GACP,IAAI,CAAC,eAAe;gBACpB,CAAC,MAAM,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YAC7C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrB,OAAO,EAAE,CAAC;YACd,CAAC;YACD,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CACjE,CAAC;YACF,OAAO,SAAS;iBACX,MAAM,CAAC,CAAC,QAAQ,EAAiD,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;iBACtF,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAC9C,CAAC;KACJ,CAAyC,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { MetaActionType } from "@party-stack/ontology";
|
|
2
|
+
import type { SalesforceInvocableActionDescribe } from "@party-stack/salesforce-client";
|
|
3
|
+
/**
|
|
4
|
+
* Convert an autolaunched Flow describe into a Party Stack action type.
|
|
5
|
+
* Local `logic` stays empty because execution remains native to Salesforce.
|
|
6
|
+
*/
|
|
7
|
+
export declare function convertSalesforceMetaActionType(describe: SalesforceInvocableActionDescribe): MetaActionType;
|
|
8
|
+
export declare function getSalesforceFlowApiNameFromActionType(actionType: {
|
|
9
|
+
id?: string;
|
|
10
|
+
name: string;
|
|
11
|
+
}): string;
|
|
12
|
+
//# sourceMappingURL=convertMetaActionType.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convertMetaActionType.d.ts","sourceRoot":"","sources":["../../src/meta/convertMetaActionType.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,gCAAgC,CAAC;AAIxF;;;GAGG;AACH,wBAAgB,+BAA+B,CAC3C,QAAQ,EAAE,iCAAiC,GAC5C,cAAc,CAchB;AAED,wBAAgB,sCAAsC,CAAC,UAAU,EAAE;IAC/D,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CAChB,GAAG,MAAM,CAKT"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { salesforceFlowActionTypeId, toOntologyActionTypeName } from "../utils/ids.js";
|
|
2
|
+
import { convertSalesforceInvocableParameterType } from "./convertMetaTypeDef.js";
|
|
3
|
+
/**
|
|
4
|
+
* Convert an autolaunched Flow describe into a Party Stack action type.
|
|
5
|
+
* Local `logic` stays empty because execution remains native to Salesforce.
|
|
6
|
+
*/
|
|
7
|
+
export function convertSalesforceMetaActionType(describe) {
|
|
8
|
+
return {
|
|
9
|
+
id: salesforceFlowActionTypeId(describe.name),
|
|
10
|
+
name: toOntologyActionTypeName(describe.name),
|
|
11
|
+
displayName: describe.label ?? describe.name,
|
|
12
|
+
description: describe.description,
|
|
13
|
+
parameters: (describe.inputs ?? []).map((parameter) => ({
|
|
14
|
+
name: parameter.name,
|
|
15
|
+
displayName: parameter.label ?? parameter.name,
|
|
16
|
+
description: parameter.description,
|
|
17
|
+
type: convertSalesforceInvocableParameterType(parameter),
|
|
18
|
+
})),
|
|
19
|
+
logic: [],
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export function getSalesforceFlowApiNameFromActionType(actionType) {
|
|
23
|
+
if (typeof actionType.id === "string" && actionType.id.startsWith("salesforce:flow:")) {
|
|
24
|
+
return actionType.id.slice("salesforce:flow:".length);
|
|
25
|
+
}
|
|
26
|
+
return actionType.name;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=convertMetaActionType.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convertMetaActionType.js","sourceRoot":"","sources":["../../src/meta/convertMetaActionType.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AACvF,OAAO,EAAE,uCAAuC,EAAE,MAAM,yBAAyB,CAAC;AAElF;;;GAGG;AACH,MAAM,UAAU,+BAA+B,CAC3C,QAA2C;IAE3C,OAAO;QACH,EAAE,EAAE,0BAA0B,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC7C,IAAI,EAAE,wBAAwB,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC7C,WAAW,EAAE,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI;QAC5C,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,UAAU,EAAE,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YACpD,IAAI,EAAE,SAAS,CAAC,IAAI;YACpB,WAAW,EAAE,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,IAAI;YAC9C,WAAW,EAAE,SAAS,CAAC,WAAW;YAClC,IAAI,EAAE,uCAAuC,CAAC,SAAS,CAAC;SAC3D,CAAC,CAAC;QACH,KAAK,EAAE,EAAE;KACZ,CAAC;AACN,CAAC;AAED,MAAM,UAAU,sCAAsC,CAAC,UAGtD;IACG,IAAI,OAAO,UAAU,CAAC,EAAE,KAAK,QAAQ,IAAI,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACpF,OAAO,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,UAAU,CAAC,IAAI,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convertMetaActionType.test.d.ts","sourceRoot":"","sources":["../../src/meta/convertMetaActionType.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { convertSalesforceMetaActionType } from "./convertMetaActionType.js";
|
|
3
|
+
describe("convertSalesforceMetaActionType", () => {
|
|
4
|
+
it("maps Flow inputs and keeps empty local logic", () => {
|
|
5
|
+
const action = convertSalesforceMetaActionType({
|
|
6
|
+
name: "Create_Account",
|
|
7
|
+
label: "Create Account",
|
|
8
|
+
description: "Creates an account",
|
|
9
|
+
inputs: [
|
|
10
|
+
{
|
|
11
|
+
name: "accountName",
|
|
12
|
+
label: "Account Name",
|
|
13
|
+
type: "String",
|
|
14
|
+
required: true,
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
name: "ownerId",
|
|
18
|
+
label: "Owner",
|
|
19
|
+
type: "ID",
|
|
20
|
+
required: false,
|
|
21
|
+
sobjectType: "User",
|
|
22
|
+
},
|
|
23
|
+
],
|
|
24
|
+
});
|
|
25
|
+
expect(action).toEqual({
|
|
26
|
+
id: "salesforce:flow:Create_Account",
|
|
27
|
+
name: "Create_Account",
|
|
28
|
+
displayName: "Create Account",
|
|
29
|
+
description: "Creates an account",
|
|
30
|
+
parameters: [
|
|
31
|
+
{
|
|
32
|
+
name: "accountName",
|
|
33
|
+
displayName: "Account Name",
|
|
34
|
+
description: undefined,
|
|
35
|
+
type: { kind: "string", value: {} },
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: "ownerId",
|
|
39
|
+
displayName: "Owner",
|
|
40
|
+
description: undefined,
|
|
41
|
+
type: {
|
|
42
|
+
kind: "optional",
|
|
43
|
+
value: {
|
|
44
|
+
type: {
|
|
45
|
+
kind: "objectReference",
|
|
46
|
+
value: { objectType: "User" },
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
logic: [],
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
it("treats provider parameters with null types as unknown", () => {
|
|
56
|
+
const action = convertSalesforceMetaActionType({
|
|
57
|
+
name: "Provider_Flow",
|
|
58
|
+
inputs: [
|
|
59
|
+
{
|
|
60
|
+
name: "providerValue",
|
|
61
|
+
type: null,
|
|
62
|
+
},
|
|
63
|
+
],
|
|
64
|
+
});
|
|
65
|
+
expect(action.parameters[0]?.type).toEqual({
|
|
66
|
+
kind: "optional",
|
|
67
|
+
value: {
|
|
68
|
+
type: {
|
|
69
|
+
kind: "unknown",
|
|
70
|
+
value: {},
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
//# sourceMappingURL=convertMetaActionType.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convertMetaActionType.test.js","sourceRoot":"","sources":["../../src/meta/convertMetaActionType.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,+BAA+B,EAAE,MAAM,4BAA4B,CAAC;AAE7E,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC7C,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACpD,MAAM,MAAM,GAAG,+BAA+B,CAAC;YAC3C,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE,gBAAgB;YACvB,WAAW,EAAE,oBAAoB;YACjC,MAAM,EAAE;gBACJ;oBACI,IAAI,EAAE,aAAa;oBACnB,KAAK,EAAE,cAAc;oBACrB,IAAI,EAAE,QAAQ;oBACd,QAAQ,EAAE,IAAI;iBACjB;gBACD;oBACI,IAAI,EAAE,SAAS;oBACf,KAAK,EAAE,OAAO;oBACd,IAAI,EAAE,IAAI;oBACV,QAAQ,EAAE,KAAK;oBACf,WAAW,EAAE,MAAM;iBACtB;aACJ;SACJ,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACnB,EAAE,EAAE,gCAAgC;YACpC,IAAI,EAAE,gBAAgB;YACtB,WAAW,EAAE,gBAAgB;YAC7B,WAAW,EAAE,oBAAoB;YACjC,UAAU,EAAE;gBACR;oBACI,IAAI,EAAE,aAAa;oBACnB,WAAW,EAAE,cAAc;oBAC3B,WAAW,EAAE,SAAS;oBACtB,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;iBACtC;gBACD;oBACI,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,OAAO;oBACpB,WAAW,EAAE,SAAS;oBACtB,IAAI,EAAE;wBACF,IAAI,EAAE,UAAU;wBAChB,KAAK,EAAE;4BACH,IAAI,EAAE;gCACF,IAAI,EAAE,iBAAiB;gCACvB,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE;6BAChC;yBACJ;qBACJ;iBACJ;aACJ;YACD,KAAK,EAAE,EAAE;SACZ,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC7D,MAAM,MAAM,GAAG,+BAA+B,CAAC;YAC3C,IAAI,EAAE,eAAe;YACrB,MAAM,EAAE;gBACJ;oBACI,IAAI,EAAE,eAAe;oBACrB,IAAI,EAAE,IAAI;iBACb;aACJ;SACJ,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC;YACvC,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE;gBACH,IAAI,EAAE;oBACF,IAAI,EAAE,SAAS;oBACf,KAAK,EAAE,EAAE;iBACZ;aACJ;SACJ,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { MetaLinkType } from "@party-stack/ontology";
|
|
2
|
+
import type { SalesforceSObjectDescribe } from "@party-stack/salesforce-client";
|
|
3
|
+
/**
|
|
4
|
+
* Create Party Stack link types for single-target Salesforce reference fields.
|
|
5
|
+
* Polymorphic references (multiple referenceTo values) are intentionally omitted
|
|
6
|
+
* and remain scalar ID properties on the source object.
|
|
7
|
+
*/
|
|
8
|
+
export declare function convertSalesforceMetaLinkTypes(describes: SalesforceSObjectDescribe[]): MetaLinkType[];
|
|
9
|
+
//# sourceMappingURL=convertMetaLinkType.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convertMetaLinkType.d.ts","sourceRoot":"","sources":["../../src/meta/convertMetaLinkType.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAA2B,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAGzG;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,SAAS,EAAE,yBAAyB,EAAE,GAAG,YAAY,EAAE,CAarG"}
|