@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.
Files changed (119) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +114 -0
  3. package/lib/adapter/convertLoadSubsetOptions.d.ts +18 -0
  4. package/lib/adapter/convertLoadSubsetOptions.d.ts.map +1 -0
  5. package/lib/adapter/convertLoadSubsetOptions.js +144 -0
  6. package/lib/adapter/convertLoadSubsetOptions.js.map +1 -0
  7. package/lib/adapter/convertLoadSubsetOptions.test.d.ts +2 -0
  8. package/lib/adapter/convertLoadSubsetOptions.test.d.ts.map +1 -0
  9. package/lib/adapter/convertLoadSubsetOptions.test.js +54 -0
  10. package/lib/adapter/convertLoadSubsetOptions.test.js.map +1 -0
  11. package/lib/adapter/createSalesforceOntologyBackendAdapter.d.ts +13 -0
  12. package/lib/adapter/createSalesforceOntologyBackendAdapter.d.ts.map +1 -0
  13. package/lib/adapter/createSalesforceOntologyBackendAdapter.js +90 -0
  14. package/lib/adapter/createSalesforceOntologyBackendAdapter.js.map +1 -0
  15. package/lib/adapter/createSalesforceOntologyBackendAdapter.test.d.ts +2 -0
  16. package/lib/adapter/createSalesforceOntologyBackendAdapter.test.d.ts.map +1 -0
  17. package/lib/adapter/createSalesforceOntologyBackendAdapter.test.js +142 -0
  18. package/lib/adapter/createSalesforceOntologyBackendAdapter.test.js.map +1 -0
  19. package/lib/adapter/index.d.ts +5 -0
  20. package/lib/adapter/index.d.ts.map +1 -0
  21. package/lib/adapter/index.js +5 -0
  22. package/lib/adapter/index.js.map +1 -0
  23. package/lib/adapter/objectCollectionOptions.d.ts +32 -0
  24. package/lib/adapter/objectCollectionOptions.d.ts.map +1 -0
  25. package/lib/adapter/objectCollectionOptions.js +139 -0
  26. package/lib/adapter/objectCollectionOptions.js.map +1 -0
  27. package/lib/adapter/salesforceCodec.d.ts +10 -0
  28. package/lib/adapter/salesforceCodec.d.ts.map +1 -0
  29. package/lib/adapter/salesforceCodec.js +201 -0
  30. package/lib/adapter/salesforceCodec.js.map +1 -0
  31. package/lib/adapter/salesforceCodec.test.d.ts +2 -0
  32. package/lib/adapter/salesforceCodec.test.d.ts.map +1 -0
  33. package/lib/adapter/salesforceCodec.test.js +57 -0
  34. package/lib/adapter/salesforceCodec.test.js.map +1 -0
  35. package/lib/config/index.d.ts +24 -0
  36. package/lib/config/index.d.ts.map +1 -0
  37. package/lib/config/index.js +178 -0
  38. package/lib/config/index.js.map +1 -0
  39. package/lib/config/index.test.d.ts +2 -0
  40. package/lib/config/index.test.d.ts.map +1 -0
  41. package/lib/config/index.test.js +139 -0
  42. package/lib/config/index.test.js.map +1 -0
  43. package/lib/connection.d.ts +33 -0
  44. package/lib/connection.d.ts.map +1 -0
  45. package/lib/connection.js +240 -0
  46. package/lib/connection.js.map +1 -0
  47. package/lib/connection.test.d.ts +2 -0
  48. package/lib/connection.test.d.ts.map +1 -0
  49. package/lib/connection.test.js +150 -0
  50. package/lib/connection.test.js.map +1 -0
  51. package/lib/index.d.ts +5 -0
  52. package/lib/index.d.ts.map +1 -0
  53. package/lib/index.js +5 -0
  54. package/lib/index.js.map +1 -0
  55. package/lib/installation/createSalesforceBackendInstallation.d.ts +28 -0
  56. package/lib/installation/createSalesforceBackendInstallation.d.ts.map +1 -0
  57. package/lib/installation/createSalesforceBackendInstallation.js +77 -0
  58. package/lib/installation/createSalesforceBackendInstallation.js.map +1 -0
  59. package/lib/installation/createSalesforceBackendInstallation.test.d.ts +2 -0
  60. package/lib/installation/createSalesforceBackendInstallation.test.d.ts.map +1 -0
  61. package/lib/installation/createSalesforceBackendInstallation.test.js +34 -0
  62. package/lib/installation/createSalesforceBackendInstallation.test.js.map +1 -0
  63. package/lib/installation/index.d.ts +2 -0
  64. package/lib/installation/index.d.ts.map +1 -0
  65. package/lib/installation/index.js +2 -0
  66. package/lib/installation/index.js.map +1 -0
  67. package/lib/meta/actionTypeCollectionOptions.d.ts +10 -0
  68. package/lib/meta/actionTypeCollectionOptions.d.ts.map +1 -0
  69. package/lib/meta/actionTypeCollectionOptions.js +51 -0
  70. package/lib/meta/actionTypeCollectionOptions.js.map +1 -0
  71. package/lib/meta/convertMetaActionType.d.ts +12 -0
  72. package/lib/meta/convertMetaActionType.d.ts.map +1 -0
  73. package/lib/meta/convertMetaActionType.js +28 -0
  74. package/lib/meta/convertMetaActionType.js.map +1 -0
  75. package/lib/meta/convertMetaActionType.test.d.ts +2 -0
  76. package/lib/meta/convertMetaActionType.test.d.ts.map +1 -0
  77. package/lib/meta/convertMetaActionType.test.js +76 -0
  78. package/lib/meta/convertMetaActionType.test.js.map +1 -0
  79. package/lib/meta/convertMetaLinkType.d.ts +9 -0
  80. package/lib/meta/convertMetaLinkType.d.ts.map +1 -0
  81. package/lib/meta/convertMetaLinkType.js +55 -0
  82. package/lib/meta/convertMetaLinkType.js.map +1 -0
  83. package/lib/meta/convertMetaObjectType.d.ts +4 -0
  84. package/lib/meta/convertMetaObjectType.d.ts.map +1 -0
  85. package/lib/meta/convertMetaObjectType.js +45 -0
  86. package/lib/meta/convertMetaObjectType.js.map +1 -0
  87. package/lib/meta/convertMetaObjectType.test.d.ts +2 -0
  88. package/lib/meta/convertMetaObjectType.test.d.ts.map +1 -0
  89. package/lib/meta/convertMetaObjectType.test.js +179 -0
  90. package/lib/meta/convertMetaObjectType.test.js.map +1 -0
  91. package/lib/meta/convertMetaTypeDef.d.ts +13 -0
  92. package/lib/meta/convertMetaTypeDef.d.ts.map +1 -0
  93. package/lib/meta/convertMetaTypeDef.js +163 -0
  94. package/lib/meta/convertMetaTypeDef.js.map +1 -0
  95. package/lib/meta/createSalesforceMetaOntologyBackendAdapter.d.ts +14 -0
  96. package/lib/meta/createSalesforceMetaOntologyBackendAdapter.d.ts.map +1 -0
  97. package/lib/meta/createSalesforceMetaOntologyBackendAdapter.js +42 -0
  98. package/lib/meta/createSalesforceMetaOntologyBackendAdapter.js.map +1 -0
  99. package/lib/meta/entityCollectionOptions.d.ts +27 -0
  100. package/lib/meta/entityCollectionOptions.d.ts.map +1 -0
  101. package/lib/meta/entityCollectionOptions.js +80 -0
  102. package/lib/meta/entityCollectionOptions.js.map +1 -0
  103. package/lib/meta/index.d.ts +7 -0
  104. package/lib/meta/index.d.ts.map +1 -0
  105. package/lib/meta/index.js +7 -0
  106. package/lib/meta/index.js.map +1 -0
  107. package/lib/meta/queryFunctionTypeCollectionOptions.d.ts +7 -0
  108. package/lib/meta/queryFunctionTypeCollectionOptions.d.ts.map +1 -0
  109. package/lib/meta/queryFunctionTypeCollectionOptions.js +16 -0
  110. package/lib/meta/queryFunctionTypeCollectionOptions.js.map +1 -0
  111. package/lib/utils/AsyncIterable.d.ts +3 -0
  112. package/lib/utils/AsyncIterable.d.ts.map +1 -0
  113. package/lib/utils/AsyncIterable.js +26 -0
  114. package/lib/utils/AsyncIterable.js.map +1 -0
  115. package/lib/utils/ids.d.ts +10 -0
  116. package/lib/utils/ids.d.ts.map +1 -0
  117. package/lib/utils/ids.js +20 -0
  118. package/lib/utils/ids.js.map +1 -0
  119. 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":"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"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ export * from "@party-stack/salesforce-client";
2
+ export * from "./adapter/index.js";
3
+ export * from "./connection.js";
4
+ export * from "./installation/index.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -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
@@ -0,0 +1,5 @@
1
+ export * from "@party-stack/salesforce-client";
2
+ export * from "./adapter/index.js";
3
+ export * from "./connection.js";
4
+ export * from "./installation/index.js";
5
+ //# sourceMappingURL=index.js.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=createSalesforceBackendInstallation.test.d.ts.map
@@ -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,2 @@
1
+ export { createSalesforceBackendInstallation, createSalesforceOntologyRoute, } from "./createSalesforceBackendInstallation.js";
2
+ //# sourceMappingURL=index.js.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=convertMetaActionType.test.d.ts.map
@@ -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"}