@party-stack/salesforce-ontology 0.4.0 → 0.4.1
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/README.md +22 -31
- package/lib/actionMetadata.d.ts +11 -9
- package/lib/actionMetadata.d.ts.map +1 -1
- package/lib/actionMetadata.js +19 -30
- package/lib/actionMetadata.js.map +1 -1
- package/lib/adapter/convertLoadSubsetOptions.d.ts +10 -8
- package/lib/adapter/convertLoadSubsetOptions.d.ts.map +1 -1
- package/lib/adapter/convertLoadSubsetOptions.js +110 -173
- package/lib/adapter/convertLoadSubsetOptions.js.map +1 -1
- package/lib/adapter/createSalesforceOntologyBackendAdapter.d.ts +14 -12
- package/lib/adapter/createSalesforceOntologyBackendAdapter.d.ts.map +1 -1
- package/lib/adapter/createSalesforceOntologyBackendAdapter.js +124 -191
- package/lib/adapter/createSalesforceOntologyBackendAdapter.js.map +1 -1
- package/lib/adapter/index.d.ts +5 -5
- package/lib/adapter/index.js +5 -5
- package/lib/adapter/objectCollectionOptions.d.ts +22 -23
- package/lib/adapter/objectCollectionOptions.d.ts.map +1 -1
- package/lib/adapter/objectCollectionOptions.js +198 -280
- package/lib/adapter/objectCollectionOptions.js.map +1 -1
- package/lib/adapter/salesforceCodec.d.ts +6 -5
- package/lib/adapter/salesforceCodec.d.ts.map +1 -1
- package/lib/adapter/salesforceCodec.js +126 -190
- package/lib/adapter/salesforceCodec.js.map +1 -1
- package/lib/config/index.d.ts +20 -18
- package/lib/config/index.d.ts.map +1 -1
- package/lib/config/index.js +148 -192
- package/lib/config/index.js.map +1 -1
- package/lib/connection.d.ts +35 -33
- package/lib/connection.d.ts.map +1 -1
- package/lib/connection.js +243 -299
- package/lib/connection.js.map +1 -1
- package/lib/crud.d.ts +5 -3
- package/lib/crud.d.ts.map +1 -1
- package/lib/crud.js +0 -1
- package/lib/index.d.ts +10 -5
- package/lib/index.js +10 -5
- package/lib/installation/createSalesforceBackendInstallation.d.ts +28 -26
- package/lib/installation/createSalesforceBackendInstallation.d.ts.map +1 -1
- package/lib/installation/createSalesforceBackendInstallation.js +75 -85
- package/lib/installation/createSalesforceBackendInstallation.js.map +1 -1
- package/lib/installation/index.d.ts +2 -2
- package/lib/installation/index.js +2 -2
- package/lib/meta/actionTypeCollectionOptions.d.ts +10 -8
- package/lib/meta/actionTypeCollectionOptions.d.ts.map +1 -1
- package/lib/meta/actionTypeCollectionOptions.js +105 -212
- package/lib/meta/actionTypeCollectionOptions.js.map +1 -1
- package/lib/meta/convertMetaActionType.d.ts +4 -2
- package/lib/meta/convertMetaActionType.d.ts.map +1 -1
- package/lib/meta/convertMetaActionType.js +32 -32
- package/lib/meta/convertMetaActionType.js.map +1 -1
- package/lib/meta/convertMetaLinkType.d.ts +4 -2
- package/lib/meta/convertMetaLinkType.d.ts.map +1 -1
- package/lib/meta/convertMetaLinkType.js +39 -45
- package/lib/meta/convertMetaLinkType.js.map +1 -1
- package/lib/meta/convertMetaLoadSubsetOptions.d.ts +12 -10
- package/lib/meta/convertMetaLoadSubsetOptions.d.ts.map +1 -1
- package/lib/meta/convertMetaLoadSubsetOptions.js +42 -58
- package/lib/meta/convertMetaLoadSubsetOptions.js.map +1 -1
- package/lib/meta/convertMetaObjectType.d.ts +4 -2
- package/lib/meta/convertMetaObjectType.d.ts.map +1 -1
- package/lib/meta/convertMetaObjectType.js +36 -40
- package/lib/meta/convertMetaObjectType.js.map +1 -1
- package/lib/meta/convertMetaQueryFunctionType.d.ts +4 -2
- package/lib/meta/convertMetaQueryFunctionType.d.ts.map +1 -1
- package/lib/meta/convertMetaQueryFunctionType.js +27 -25
- package/lib/meta/convertMetaQueryFunctionType.js.map +1 -1
- package/lib/meta/convertMetaTypeDef.d.ts +10 -8
- package/lib/meta/convertMetaTypeDef.d.ts.map +1 -1
- package/lib/meta/convertMetaTypeDef.js +196 -188
- package/lib/meta/convertMetaTypeDef.js.map +1 -1
- package/lib/meta/createSalesforceMetaOntologyBackendAdapter.d.ts +19 -17
- package/lib/meta/createSalesforceMetaOntologyBackendAdapter.d.ts.map +1 -1
- package/lib/meta/createSalesforceMetaOntologyBackendAdapter.js +38 -40
- package/lib/meta/createSalesforceMetaOntologyBackendAdapter.js.map +1 -1
- package/lib/meta/entityCollectionOptions.d.ts +10 -8
- package/lib/meta/entityCollectionOptions.d.ts.map +1 -1
- package/lib/meta/entityCollectionOptions.js +73 -82
- package/lib/meta/entityCollectionOptions.js.map +1 -1
- package/lib/meta/index.d.ts +7 -7
- package/lib/meta/index.js +7 -7
- package/lib/meta/queryFunctionTypeCollectionOptions.d.ts +7 -5
- package/lib/meta/queryFunctionTypeCollectionOptions.d.ts.map +1 -1
- package/lib/meta/queryFunctionTypeCollectionOptions.js +53 -91
- package/lib/meta/queryFunctionTypeCollectionOptions.js.map +1 -1
- package/lib/meta/synthesizeCrudActionTypes.d.ts +4 -2
- package/lib/meta/synthesizeCrudActionTypes.d.ts.map +1 -1
- package/lib/meta/synthesizeCrudActionTypes.js +77 -116
- package/lib/meta/synthesizeCrudActionTypes.js.map +1 -1
- package/lib/standardActions.d.ts +2 -0
- package/lib/standardActions.d.ts.map +1 -1
- package/lib/standardActions.js +22 -20
- package/lib/standardActions.js.map +1 -1
- package/lib/utils/AsyncIterable.d.ts +2 -0
- package/lib/utils/AsyncIterable.d.ts.map +1 -1
- package/lib/utils/AsyncIterable.js +20 -23
- package/lib/utils/AsyncIterable.js.map +1 -1
- package/lib/utils/ids.d.ts +2 -0
- package/lib/utils/ids.d.ts.map +1 -1
- package/lib/utils/ids.js +23 -19
- package/lib/utils/ids.js.map +1 -1
- package/package.json +14 -20
- package/lib/adapter/convertLoadSubsetOptions.test.d.ts +0 -2
- package/lib/adapter/convertLoadSubsetOptions.test.d.ts.map +0 -1
- package/lib/adapter/convertLoadSubsetOptions.test.js +0 -80
- package/lib/adapter/convertLoadSubsetOptions.test.js.map +0 -1
- package/lib/adapter/createSalesforceOntologyBackendAdapter.test.d.ts +0 -2
- package/lib/adapter/createSalesforceOntologyBackendAdapter.test.d.ts.map +0 -1
- package/lib/adapter/createSalesforceOntologyBackendAdapter.test.js +0 -394
- package/lib/adapter/createSalesforceOntologyBackendAdapter.test.js.map +0 -1
- package/lib/adapter/index.d.ts.map +0 -1
- package/lib/adapter/index.js.map +0 -1
- package/lib/adapter/objectCollectionOptions.test.d.ts +0 -2
- package/lib/adapter/objectCollectionOptions.test.d.ts.map +0 -1
- package/lib/adapter/objectCollectionOptions.test.js +0 -160
- package/lib/adapter/objectCollectionOptions.test.js.map +0 -1
- package/lib/adapter/salesforceCodec.test.d.ts +0 -2
- package/lib/adapter/salesforceCodec.test.d.ts.map +0 -1
- package/lib/adapter/salesforceCodec.test.js +0 -57
- package/lib/adapter/salesforceCodec.test.js.map +0 -1
- package/lib/config/index.test.d.ts +0 -2
- package/lib/config/index.test.d.ts.map +0 -1
- package/lib/config/index.test.js +0 -177
- package/lib/config/index.test.js.map +0 -1
- package/lib/connection.test.d.ts +0 -2
- package/lib/connection.test.d.ts.map +0 -1
- package/lib/connection.test.js +0 -189
- package/lib/connection.test.js.map +0 -1
- package/lib/crud.js.map +0 -1
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/installation/createSalesforceBackendInstallation.test.d.ts +0 -2
- package/lib/installation/createSalesforceBackendInstallation.test.d.ts.map +0 -1
- package/lib/installation/createSalesforceBackendInstallation.test.js +0 -55
- package/lib/installation/createSalesforceBackendInstallation.test.js.map +0 -1
- package/lib/installation/index.d.ts.map +0 -1
- package/lib/installation/index.js.map +0 -1
- package/lib/meta/actionTypeCollectionOptions.test.d.ts +0 -2
- package/lib/meta/actionTypeCollectionOptions.test.d.ts.map +0 -1
- package/lib/meta/actionTypeCollectionOptions.test.js +0 -192
- package/lib/meta/actionTypeCollectionOptions.test.js.map +0 -1
- package/lib/meta/convertMetaActionType.test.d.ts +0 -2
- package/lib/meta/convertMetaActionType.test.d.ts.map +0 -1
- package/lib/meta/convertMetaActionType.test.js +0 -185
- package/lib/meta/convertMetaActionType.test.js.map +0 -1
- package/lib/meta/convertMetaObjectType.test.d.ts +0 -2
- package/lib/meta/convertMetaObjectType.test.d.ts.map +0 -1
- package/lib/meta/convertMetaObjectType.test.js +0 -187
- package/lib/meta/convertMetaObjectType.test.js.map +0 -1
- package/lib/meta/convertMetaQueryFunctionType.test.d.ts +0 -2
- package/lib/meta/convertMetaQueryFunctionType.test.d.ts.map +0 -1
- package/lib/meta/convertMetaQueryFunctionType.test.js +0 -58
- package/lib/meta/convertMetaQueryFunctionType.test.js.map +0 -1
- package/lib/meta/entityCollectionOptions.test.d.ts +0 -2
- package/lib/meta/entityCollectionOptions.test.d.ts.map +0 -1
- package/lib/meta/entityCollectionOptions.test.js +0 -120
- package/lib/meta/entityCollectionOptions.test.js.map +0 -1
- package/lib/meta/index.d.ts.map +0 -1
- package/lib/meta/index.js.map +0 -1
- package/lib/meta/queryFunctionTypeCollectionOptions.test.d.ts +0 -2
- package/lib/meta/queryFunctionTypeCollectionOptions.test.d.ts.map +0 -1
- package/lib/meta/queryFunctionTypeCollectionOptions.test.js +0 -71
- package/lib/meta/queryFunctionTypeCollectionOptions.test.js.map +0 -1
- package/lib/meta/synthesizeCrudActionTypes.test.d.ts +0 -2
- package/lib/meta/synthesizeCrudActionTypes.test.d.ts.map +0 -1
- package/lib/meta/synthesizeCrudActionTypes.test.js +0 -153
- package/lib/meta/synthesizeCrudActionTypes.test.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createSalesforceOntologyBackendAdapter.d.ts","
|
|
1
|
+
{"version":3,"file":"createSalesforceOntologyBackendAdapter.d.ts","names":[],"sources":["../../src/adapter/createSalesforceOntologyBackendAdapter.ts"],"mappings":";;;;wBAuFgB,uCAAuC;EACnD,QAAQ;EACR,IAAI;EACJ,0BAA0B;EAC1B;IACA;YA+JQ,uCACR,gBAAgB,0BAA0B;EAGpC,QAAQ;EACR,0BAA0B;;EAG1B,eAAe,IAAI,YAAY,SAAS,YAAY,mBAAmB,QAAQ;EAC/E,0BAA0B;;EAGhC;;wBAGY,gCACZ,gBAAgB,0BAA0B,yBAC5C,MAAM,uCAAuC,WAAW,+BAA+B"}
|
|
@@ -1,206 +1,139 @@
|
|
|
1
|
-
import { NonRetryableError, } from "@party-stack/ontology";
|
|
2
|
-
import { SalesforceApiError } from "@party-stack/salesforce-client";
|
|
3
1
|
import { getSalesforceActionMetadata } from "../actionMetadata.js";
|
|
4
|
-
import { objectCollectionOptions
|
|
2
|
+
import { objectCollectionOptions } from "./objectCollectionOptions.js";
|
|
5
3
|
import { createSalesforceCodec } from "./salesforceCodec.js";
|
|
4
|
+
import { SalesforceApiError } from "@party-stack/salesforce-client";
|
|
5
|
+
import { NonRetryableError } from "@party-stack/ontology";
|
|
6
|
+
//#region src/adapter/createSalesforceOntologyBackendAdapter.ts
|
|
6
7
|
function isNonRetryableSalesforceError(error) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
return true;
|
|
12
|
-
}
|
|
13
|
-
const code = error.errorCode?.toUpperCase();
|
|
14
|
-
return (code === "INVALID_INPUT" ||
|
|
15
|
-
code === "REQUIRED_FIELD_MISSING" ||
|
|
16
|
-
code === "FIELD_CUSTOM_VALIDATION_EXCEPTION" ||
|
|
17
|
-
code === "INSUFFICIENT_ACCESS" ||
|
|
18
|
-
code === "INSUFFICIENT_ACCESS_OR_READONLY" ||
|
|
19
|
-
code === "NOT_FOUND");
|
|
8
|
+
if (!(error instanceof SalesforceApiError)) return false;
|
|
9
|
+
if (error.statusCode === 400 || error.statusCode === 403 || error.statusCode === 404) return true;
|
|
10
|
+
const code = error.errorCode?.toUpperCase();
|
|
11
|
+
return code === "INVALID_INPUT" || code === "REQUIRED_FIELD_MISSING" || code === "FIELD_CUSTOM_VALIDATION_EXCEPTION" || code === "INSUFFICIENT_ACCESS" || code === "INSUFFICIENT_ACCESS_OR_READONLY" || code === "NOT_FOUND";
|
|
20
12
|
}
|
|
21
13
|
async function awaitInvalidation(utils) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
14
|
+
try {
|
|
15
|
+
await utils.invalidate();
|
|
16
|
+
} catch (error) {
|
|
17
|
+
throw new NonRetryableError("Salesforce accepted the action, but its collection changes could not be observed.", { cause: error });
|
|
18
|
+
}
|
|
28
19
|
}
|
|
29
20
|
async function invalidateEditedCollections(objects) {
|
|
30
|
-
|
|
31
|
-
.utils)));
|
|
21
|
+
await Promise.all(Object.values(objects).map((collection) => awaitInvalidation(collection.utils)));
|
|
32
22
|
}
|
|
33
23
|
function assertSaveSucceeded(result) {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
throw new NonRetryableError(result.errors
|
|
37
|
-
.map((error) => error.message)
|
|
38
|
-
.filter(Boolean)
|
|
39
|
-
.join("; ") ||
|
|
40
|
-
"Salesforce rejected the record write.");
|
|
24
|
+
if (result.success) return;
|
|
25
|
+
throw new NonRetryableError(result.errors.map((error) => error.message).filter(Boolean).join("; ") || "Salesforce rejected the record write.");
|
|
41
26
|
}
|
|
42
27
|
async function refreshConfirmedRecord(collection, recordId) {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
throw new NonRetryableError(`Salesforce accepted the write, but record "${recordId}" could not be observed in its collection.`, { cause: error });
|
|
55
|
-
}
|
|
28
|
+
if (!collection) return;
|
|
29
|
+
const utils = collection.utils;
|
|
30
|
+
if (recordId === void 0) {
|
|
31
|
+
await awaitInvalidation(utils);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
await utils.refreshByKey(recordId);
|
|
36
|
+
} catch (error) {
|
|
37
|
+
throw new NonRetryableError(`Salesforce accepted the write, but record "${recordId}" could not be observed in its collection.`, { cause: error });
|
|
38
|
+
}
|
|
56
39
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
throw new NonRetryableError(error instanceof Error
|
|
145
|
-
? error.message
|
|
146
|
-
: "Salesforce action invocation failed.", { cause: error });
|
|
147
|
-
}
|
|
148
|
-
throw error;
|
|
149
|
-
}
|
|
150
|
-
const result = results[0];
|
|
151
|
-
if (!result) {
|
|
152
|
-
throw new Error(`Salesforce action "${actionApiName}" returned no results.`);
|
|
153
|
-
}
|
|
154
|
-
if (!result.isSuccess) {
|
|
155
|
-
const message = result.errors?.map((entry) => entry.message).filter(Boolean).join("; ") ||
|
|
156
|
-
`Salesforce action "${actionApiName}" failed.`;
|
|
157
|
-
throw new NonRetryableError(message);
|
|
158
|
-
}
|
|
159
|
-
if (opts.live !== false) {
|
|
160
|
-
await invalidateEditedCollections(live.objects);
|
|
161
|
-
}
|
|
162
|
-
},
|
|
163
|
-
runQueryFunction: async (name, parameters) => {
|
|
164
|
-
const queryFunction = opts.ir.queryFunctionTypes.find((candidate) => candidate.name === name);
|
|
165
|
-
if (!queryFunction) {
|
|
166
|
-
throw new NonRetryableError(`Unknown Salesforce query function type "${name}".`);
|
|
167
|
-
}
|
|
168
|
-
const parameterTypes = new Map(queryFunction.parameters.map((parameter) => [
|
|
169
|
-
parameter.name,
|
|
170
|
-
parameter.type,
|
|
171
|
-
]));
|
|
172
|
-
const requestParameters = {};
|
|
173
|
-
for (const [parameterName, value] of Object.entries(parameters)) {
|
|
174
|
-
if (value === undefined)
|
|
175
|
-
continue;
|
|
176
|
-
const parameterType = parameterTypes.get(parameterName);
|
|
177
|
-
requestParameters[parameterName] =
|
|
178
|
-
parameterType
|
|
179
|
-
? encodeInvocableParameter(parameterType, value)
|
|
180
|
-
: value;
|
|
181
|
-
}
|
|
182
|
-
const results = await opts.client.invokeStandardAction(name, [requestParameters]);
|
|
183
|
-
const result = results[0];
|
|
184
|
-
if (!result) {
|
|
185
|
-
throw new Error(`Salesforce standard query "${name}" returned no results.`);
|
|
186
|
-
}
|
|
187
|
-
if (!result.isSuccess) {
|
|
188
|
-
throw new NonRetryableError(result.errors
|
|
189
|
-
?.map((entry) => entry.message)
|
|
190
|
-
.filter(Boolean)
|
|
191
|
-
.join("; ") ||
|
|
192
|
-
`Salesforce standard query "${name}" failed.`);
|
|
193
|
-
}
|
|
194
|
-
return codec.decodeValue(queryFunction.returnType, result.outputValues ?? {});
|
|
195
|
-
},
|
|
196
|
-
};
|
|
40
|
+
function createSalesforceOntologyBackendAdapter(opts) {
|
|
41
|
+
const codec = createSalesforceCodec(opts.ir);
|
|
42
|
+
const encodeInvocableParameter = (type, value) => {
|
|
43
|
+
if (type.kind === "optional") return encodeInvocableParameter(type.value.type, value);
|
|
44
|
+
if (type.kind === "list" && Array.isArray(value)) return value.map((entry) => codec.encodeValue(type.value.elementType, entry));
|
|
45
|
+
return codec.encodeValue(type, value);
|
|
46
|
+
};
|
|
47
|
+
return {
|
|
48
|
+
name: "salesforce",
|
|
49
|
+
live: opts.live !== false,
|
|
50
|
+
getCollectionOptions: (objectType) => {
|
|
51
|
+
const objectTypeDef = opts.ir.objectTypes.find((candidate) => candidate.name === objectType);
|
|
52
|
+
if (!objectTypeDef) throw new Error(`Unknown Salesforce object type "${objectType}".`);
|
|
53
|
+
return objectCollectionOptions({
|
|
54
|
+
client: opts.client,
|
|
55
|
+
objectType,
|
|
56
|
+
primaryKeyProperty: objectTypeDef.primaryKey,
|
|
57
|
+
selectedProperties: objectTypeDef.properties.map((property) => property.name),
|
|
58
|
+
subscribeToChangeEvents: opts.live === false ? void 0 : opts.subscribeToChangeEvents,
|
|
59
|
+
decodeObject: (object) => codec.decodeObject(objectType, object)
|
|
60
|
+
});
|
|
61
|
+
},
|
|
62
|
+
applyAction: async (name, parameters, live) => {
|
|
63
|
+
const actionType = opts.ir.actionTypes.find((candidate) => candidate.name === name);
|
|
64
|
+
if (!actionType) throw new NonRetryableError(`Unknown Salesforce action type "${name}".`);
|
|
65
|
+
const parameterTypes = new Map(actionType.parameters.map((parameter) => [parameter.name, parameter.type]));
|
|
66
|
+
const requestParameters = {};
|
|
67
|
+
for (const [parameterName, value] of Object.entries(parameters)) {
|
|
68
|
+
if (value === void 0) continue;
|
|
69
|
+
const parameterType = parameterTypes.get(parameterName);
|
|
70
|
+
requestParameters[parameterName] = parameterType ? encodeInvocableParameter(parameterType, value) : value;
|
|
71
|
+
}
|
|
72
|
+
const metadata = getSalesforceActionMetadata(actionType);
|
|
73
|
+
if (!metadata) throw new NonRetryableError(`Salesforce action type "${name}" is missing Salesforce metadata.`);
|
|
74
|
+
if (metadata.kind === "crud") {
|
|
75
|
+
const collection = live.objects[metadata.objectType];
|
|
76
|
+
if (metadata.operation === "create") {
|
|
77
|
+
const result = await opts.client.createRecord(metadata.objectType, requestParameters);
|
|
78
|
+
assertSaveSucceeded(result);
|
|
79
|
+
if (opts.live !== false) await refreshConfirmedRecord(collection, result.id);
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
const recordId = requestParameters.recordId;
|
|
83
|
+
if (typeof recordId !== "string" || recordId.length === 0) throw new NonRetryableError(`Salesforce ${metadata.operation} action requires recordId.`);
|
|
84
|
+
if (metadata.operation === "update") {
|
|
85
|
+
const fields = Object.fromEntries(Object.entries(requestParameters).filter(([parameterName]) => parameterName !== "recordId"));
|
|
86
|
+
const result = await opts.client.updateRecord(metadata.objectType, recordId, fields);
|
|
87
|
+
assertSaveSucceeded(result);
|
|
88
|
+
if (opts.live !== false) await refreshConfirmedRecord(collection, result.id ?? recordId);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
assertSaveSucceeded(await opts.client.deleteRecord(metadata.objectType, recordId));
|
|
92
|
+
if (opts.live !== false && collection) await collection.utils.deleteByKey(recordId);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
const actionApiName = metadata.apiName;
|
|
96
|
+
let results;
|
|
97
|
+
try {
|
|
98
|
+
results = metadata.kind === "standard" ? await opts.client.invokeStandardAction(actionApiName, [requestParameters]) : await opts.client.invokeFlowAction(actionApiName, [requestParameters]);
|
|
99
|
+
} catch (error) {
|
|
100
|
+
if (isNonRetryableSalesforceError(error)) throw new NonRetryableError(error instanceof Error ? error.message : "Salesforce action invocation failed.", { cause: error });
|
|
101
|
+
throw error;
|
|
102
|
+
}
|
|
103
|
+
const result = results[0];
|
|
104
|
+
if (!result) throw new Error(`Salesforce action "${actionApiName}" returned no results.`);
|
|
105
|
+
if (!result.isSuccess) {
|
|
106
|
+
const message = result.errors?.map((entry) => entry.message).filter(Boolean).join("; ") || `Salesforce action "${actionApiName}" failed.`;
|
|
107
|
+
throw new NonRetryableError(message);
|
|
108
|
+
}
|
|
109
|
+
if (opts.live !== false) await invalidateEditedCollections(live.objects);
|
|
110
|
+
},
|
|
111
|
+
runQueryFunction: async (name, parameters) => {
|
|
112
|
+
const queryFunction = opts.ir.queryFunctionTypes.find((candidate) => candidate.name === name);
|
|
113
|
+
if (!queryFunction) throw new NonRetryableError(`Unknown Salesforce query function type "${name}".`);
|
|
114
|
+
const parameterTypes = new Map(queryFunction.parameters.map((parameter) => [parameter.name, parameter.type]));
|
|
115
|
+
const requestParameters = {};
|
|
116
|
+
for (const [parameterName, value] of Object.entries(parameters)) {
|
|
117
|
+
if (value === void 0) continue;
|
|
118
|
+
const parameterType = parameterTypes.get(parameterName);
|
|
119
|
+
requestParameters[parameterName] = parameterType ? encodeInvocableParameter(parameterType, value) : value;
|
|
120
|
+
}
|
|
121
|
+
const result = (await opts.client.invokeStandardAction(name, [requestParameters]))[0];
|
|
122
|
+
if (!result) throw new Error(`Salesforce standard query "${name}" returned no results.`);
|
|
123
|
+
if (!result.isSuccess) throw new NonRetryableError(result.errors?.map((entry) => entry.message).filter(Boolean).join("; ") || `Salesforce standard query "${name}" failed.`);
|
|
124
|
+
return codec.decodeValue(queryFunction.returnType, result.outputValues ?? {});
|
|
125
|
+
}
|
|
126
|
+
};
|
|
197
127
|
}
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
128
|
+
function createSalesforceOntologyBackend(opts) {
|
|
129
|
+
return async (ir, context) => createSalesforceOntologyBackendAdapter({
|
|
130
|
+
ir,
|
|
131
|
+
client: "client" in opts ? opts.client : await opts.createClient(ir, context),
|
|
132
|
+
subscribeToChangeEvents: opts.subscribeToChangeEvents,
|
|
133
|
+
live: opts.live
|
|
134
|
+
});
|
|
205
135
|
}
|
|
136
|
+
//#endregion
|
|
137
|
+
export { createSalesforceOntologyBackend, createSalesforceOntologyBackendAdapter };
|
|
138
|
+
|
|
206
139
|
//# sourceMappingURL=createSalesforceOntologyBackendAdapter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createSalesforceOntologyBackendAdapter.js","sourceRoot":"","sources":["../../src/adapter/createSalesforceOntologyBackendAdapter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"createSalesforceOntologyBackendAdapter.js","names":[],"sources":["../../src/adapter/createSalesforceOntologyBackendAdapter.ts"],"sourcesContent":["import {\n NonRetryableError,\n type OntologyBackendAdapter,\n type OntologyBackendAdapterProvider,\n type OntologyIR,\n} from \"@party-stack/ontology\";\nimport { SalesforceApiError, type SalesforceClient } from \"@party-stack/salesforce-client\";\nimport { Collection } from \"@tanstack/db\";\nimport { getSalesforceActionMetadata } from \"../actionMetadata.js\";\nimport {\n objectCollectionOptions,\n type ObjectCollectionUtils,\n type SubscribeToSalesforceChangeEvents,\n} from \"./objectCollectionOptions.js\";\nimport { createSalesforceCodec } from \"./salesforceCodec.js\";\n\ntype CollectionWithUtils = Collection<Record<string, unknown>, string | number, ObjectCollectionUtils>;\n\nfunction isNonRetryableSalesforceError(error: unknown): boolean {\n if (!(error instanceof SalesforceApiError)) {\n return false;\n }\n if (error.statusCode === 400 || error.statusCode === 403 || error.statusCode === 404) {\n return true;\n }\n const code = error.errorCode?.toUpperCase();\n return (\n code === \"INVALID_INPUT\" ||\n code === \"REQUIRED_FIELD_MISSING\" ||\n code === \"FIELD_CUSTOM_VALIDATION_EXCEPTION\" ||\n code === \"INSUFFICIENT_ACCESS\" ||\n code === \"INSUFFICIENT_ACCESS_OR_READONLY\" ||\n code === \"NOT_FOUND\"\n );\n}\n\nasync function awaitInvalidation(utils: ObjectCollectionUtils): Promise<void> {\n try {\n await utils.invalidate();\n } catch (error) {\n throw new NonRetryableError(\n \"Salesforce accepted the action, but its collection changes could not be observed.\",\n { cause: error }\n );\n }\n}\n\nasync function invalidateEditedCollections(\n objects: Record<string, Collection<Record<string, unknown>>>\n): Promise<void> {\n await Promise.all(\n Object.values(objects).map((collection) =>\n awaitInvalidation((collection as CollectionWithUtils).utils)\n )\n );\n}\n\nfunction assertSaveSucceeded(result: { success: boolean; errors: Array<{ message: string }> }): void {\n if (result.success) return;\n throw new NonRetryableError(\n result.errors\n .map((error) => error.message)\n .filter(Boolean)\n .join(\"; \") || \"Salesforce rejected the record write.\"\n );\n}\n\nasync function refreshConfirmedRecord(\n collection: CollectionWithUtils | undefined,\n recordId: string | number | undefined\n): Promise<void> {\n if (!collection) return;\n const utils: ObjectCollectionUtils = collection.utils;\n if (recordId === undefined) {\n await awaitInvalidation(utils);\n return;\n }\n try {\n await utils.refreshByKey(recordId);\n } catch (error) {\n throw new NonRetryableError(\n `Salesforce accepted the write, but record \"${recordId}\" could not be observed in its collection.`,\n { cause: error }\n );\n }\n}\n\nexport function createSalesforceOntologyBackendAdapter(opts: {\n client: SalesforceClient;\n ir: OntologyIR;\n subscribeToChangeEvents?: SubscribeToSalesforceChangeEvents;\n live?: boolean;\n}): OntologyBackendAdapter {\n const codec = createSalesforceCodec(opts.ir);\n const encodeInvocableParameter = (\n type: Parameters<typeof codec.encodeValue>[0],\n value: unknown\n ): unknown => {\n if (type.kind === \"optional\") {\n return encodeInvocableParameter(type.value.type, value);\n }\n if (type.kind === \"list\" && Array.isArray(value)) {\n return value.map((entry) => codec.encodeValue(type.value.elementType, entry));\n }\n return codec.encodeValue(type, value);\n };\n\n return {\n name: \"salesforce\",\n live: opts.live !== false,\n getCollectionOptions: (objectType: string) => {\n const objectTypeDef = opts.ir.objectTypes.find((candidate) => candidate.name === objectType);\n if (!objectTypeDef) {\n throw new Error(`Unknown Salesforce object type \"${objectType}\".`);\n }\n return objectCollectionOptions({\n client: opts.client,\n objectType,\n primaryKeyProperty: objectTypeDef.primaryKey,\n selectedProperties: objectTypeDef.properties.map((property) => property.name),\n subscribeToChangeEvents: opts.live === false ? undefined : opts.subscribeToChangeEvents,\n decodeObject: (object) => codec.decodeObject(objectType, object),\n });\n },\n applyAction: async (name, parameters, live) => {\n const actionType = opts.ir.actionTypes.find((candidate) => candidate.name === name);\n if (!actionType) {\n throw new NonRetryableError(`Unknown Salesforce action type \"${name}\".`);\n }\n\n const parameterTypes = new Map(\n actionType.parameters.map((parameter) => [parameter.name, parameter.type])\n );\n const requestParameters: Record<string, unknown> = {};\n for (const [parameterName, value] of Object.entries(parameters)) {\n if (value === undefined) continue;\n const parameterType = parameterTypes.get(parameterName);\n requestParameters[parameterName] = parameterType\n ? encodeInvocableParameter(parameterType, value)\n : value;\n }\n\n const metadata = getSalesforceActionMetadata(actionType);\n if (!metadata) {\n throw new NonRetryableError(\n `Salesforce action type \"${name}\" is missing Salesforce metadata.`\n );\n }\n if (metadata.kind === \"crud\") {\n const collection = live.objects[metadata.objectType] as CollectionWithUtils | undefined;\n if (metadata.operation === \"create\") {\n const result = await opts.client.createRecord(metadata.objectType, requestParameters);\n assertSaveSucceeded(result);\n if (opts.live !== false) {\n await refreshConfirmedRecord(collection, result.id);\n }\n return;\n }\n const recordId = requestParameters.recordId;\n if (typeof recordId !== \"string\" || recordId.length === 0) {\n throw new NonRetryableError(`Salesforce ${metadata.operation} action requires recordId.`);\n }\n if (metadata.operation === \"update\") {\n const fields = Object.fromEntries(\n Object.entries(requestParameters).filter(\n ([parameterName]) => parameterName !== \"recordId\"\n )\n );\n const result = await opts.client.updateRecord(metadata.objectType, recordId, fields);\n assertSaveSucceeded(result);\n if (opts.live !== false) {\n await refreshConfirmedRecord(collection, result.id ?? recordId);\n }\n return;\n }\n assertSaveSucceeded(await opts.client.deleteRecord(metadata.objectType, recordId));\n if (opts.live !== false && collection) {\n await collection.utils.deleteByKey(recordId);\n }\n return;\n }\n\n const actionApiName = metadata.apiName;\n\n let results;\n try {\n results =\n metadata.kind === \"standard\"\n ? await opts.client.invokeStandardAction(actionApiName, [requestParameters])\n : await opts.client.invokeFlowAction(actionApiName, [requestParameters]);\n } catch (error) {\n if (isNonRetryableSalesforceError(error)) {\n throw new NonRetryableError(\n error instanceof Error ? error.message : \"Salesforce action invocation failed.\",\n { cause: error }\n );\n }\n throw error;\n }\n\n const result = results[0];\n if (!result) {\n throw new Error(`Salesforce action \"${actionApiName}\" returned no results.`);\n }\n if (!result.isSuccess) {\n const message =\n result.errors\n ?.map((entry) => entry.message)\n .filter(Boolean)\n .join(\"; \") || `Salesforce action \"${actionApiName}\" failed.`;\n throw new NonRetryableError(message);\n }\n\n if (opts.live !== false) {\n await invalidateEditedCollections(live.objects);\n }\n },\n runQueryFunction: async (name, parameters) => {\n const queryFunction = opts.ir.queryFunctionTypes.find((candidate) => candidate.name === name);\n if (!queryFunction) {\n throw new NonRetryableError(`Unknown Salesforce query function type \"${name}\".`);\n }\n const parameterTypes = new Map(\n queryFunction.parameters.map((parameter) => [parameter.name, parameter.type])\n );\n const requestParameters: Record<string, unknown> = {};\n for (const [parameterName, value] of Object.entries(parameters)) {\n if (value === undefined) continue;\n const parameterType = parameterTypes.get(parameterName);\n requestParameters[parameterName] = parameterType\n ? encodeInvocableParameter(parameterType, value)\n : value;\n }\n const results = await opts.client.invokeStandardAction(name, [requestParameters]);\n const result = results[0];\n if (!result) {\n throw new Error(`Salesforce standard query \"${name}\" returned no results.`);\n }\n if (!result.isSuccess) {\n throw new NonRetryableError(\n result.errors\n ?.map((entry) => entry.message)\n .filter(Boolean)\n .join(\"; \") || `Salesforce standard query \"${name}\" failed.`\n );\n }\n return codec.decodeValue(queryFunction.returnType, result.outputValues ?? {});\n },\n };\n}\n\nexport type CreateSalesforceOntologyBackendOptions<\n Context extends Record<string, unknown> = Record<string, unknown>,\n> = (\n | {\n client: SalesforceClient;\n subscribeToChangeEvents?: SubscribeToSalesforceChangeEvents;\n }\n | {\n createClient: (ir: OntologyIR, context: Context) => SalesforceClient | Promise<SalesforceClient>;\n subscribeToChangeEvents?: SubscribeToSalesforceChangeEvents;\n }\n) & {\n live?: boolean;\n};\n\nexport function createSalesforceOntologyBackend<\n Context extends Record<string, unknown> = Record<string, unknown>,\n>(opts: CreateSalesforceOntologyBackendOptions<Context>): OntologyBackendAdapterProvider<Context> {\n return async (ir, context) =>\n createSalesforceOntologyBackendAdapter({\n ir,\n client: \"client\" in opts ? opts.client : await opts.createClient(ir, context),\n subscribeToChangeEvents: opts.subscribeToChangeEvents,\n live: opts.live,\n });\n}\n"],"mappings":"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"}
|
package/lib/adapter/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { CompiledSoqlFilter, buildSoqlQuery, convertLoadSubsetFilter, convertLoadSubsetOrderBy, isAlwaysFalseFilter, serializeSoqlLiteral } from "./convertLoadSubsetOptions.js";
|
|
2
|
+
import { ObjectCollectionConfig, ObjectCollectionOpts, ObjectCollectionUtils, SubscribeToSalesforceChangeEvents, objectCollectionOptions } from "./objectCollectionOptions.js";
|
|
3
|
+
import { CreateSalesforceOntologyBackendOptions, createSalesforceOntologyBackend, createSalesforceOntologyBackendAdapter } from "./createSalesforceOntologyBackendAdapter.js";
|
|
4
|
+
import { SalesforceCodec, createSalesforceCodec } from "./salesforceCodec.js";
|
|
5
|
+
export { CompiledSoqlFilter, CreateSalesforceOntologyBackendOptions, ObjectCollectionConfig, ObjectCollectionOpts, ObjectCollectionUtils, SalesforceCodec, SubscribeToSalesforceChangeEvents, buildSoqlQuery, convertLoadSubsetFilter, convertLoadSubsetOrderBy, createSalesforceCodec, createSalesforceOntologyBackend, createSalesforceOntologyBackendAdapter, isAlwaysFalseFilter, objectCollectionOptions, serializeSoqlLiteral };
|
package/lib/adapter/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { buildSoqlQuery, convertLoadSubsetFilter, convertLoadSubsetOrderBy, isAlwaysFalseFilter, serializeSoqlLiteral } from "./convertLoadSubsetOptions.js";
|
|
2
|
+
import { objectCollectionOptions } from "./objectCollectionOptions.js";
|
|
3
|
+
import { createSalesforceCodec } from "./salesforceCodec.js";
|
|
4
|
+
import { createSalesforceOntologyBackend, createSalesforceOntologyBackendAdapter } from "./createSalesforceOntologyBackendAdapter.js";
|
|
5
|
+
export { buildSoqlQuery, convertLoadSubsetFilter, convertLoadSubsetOrderBy, createSalesforceCodec, createSalesforceOntologyBackend, createSalesforceOntologyBackendAdapter, isAlwaysFalseFilter, objectCollectionOptions, serializeSoqlLiteral };
|
|
@@ -1,36 +1,35 @@
|
|
|
1
|
+
import { SalesforceChangeEvent, SalesforceChangeEventSubscription, SalesforceChangeEventSubscriptionOptions, SalesforceClient } from "@party-stack/salesforce-client";
|
|
1
2
|
import { CollectionConfig, InferSchemaOutput, StandardSchema, SyncConfig, UtilsRecord } from "@tanstack/db";
|
|
2
|
-
|
|
3
|
-
type WithRequired<T, K extends keyof T> = T & {
|
|
4
|
-
[P in K]-?: T[P];
|
|
5
|
-
};
|
|
3
|
+
//#region src/adapter/objectCollectionOptions.d.ts
|
|
4
|
+
type WithRequired<T, K extends keyof T> = T & { [P in K]-?: T[P]; };
|
|
6
5
|
type SalesforceObject = Record<string, unknown>;
|
|
7
6
|
export type SubscribeToSalesforceChangeEvents = (objectType: string, listener: (event: SalesforceChangeEvent) => void, options?: SalesforceChangeEventSubscriptionOptions) => Promise<SalesforceChangeEventSubscription>;
|
|
8
7
|
export interface ObjectCollectionUtils extends UtilsRecord {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
8
|
+
/**
|
|
9
|
+
* Reset load-subset deduplication and await refetching active subsets.
|
|
10
|
+
*/
|
|
11
|
+
invalidate: () => Promise<void>;
|
|
12
|
+
/** Refetch one confirmed backend record and commit it locally. */
|
|
13
|
+
refreshByKey: (key: string | number) => Promise<void>;
|
|
14
|
+
/** Apply a confirmed backend deletion to the local collection. */
|
|
15
|
+
deleteByKey: (key: string | number) => Promise<void>;
|
|
17
16
|
}
|
|
18
17
|
export interface ObjectCollectionOpts {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
18
|
+
client: SalesforceClient;
|
|
19
|
+
objectType: string;
|
|
20
|
+
primaryKeyProperty: string;
|
|
21
|
+
selectedProperties: string[];
|
|
22
|
+
subscribeToChangeEvents?: SubscribeToSalesforceChangeEvents;
|
|
23
|
+
decodeObject?: (object: Record<string, unknown>) => Record<string, unknown>;
|
|
25
24
|
}
|
|
26
25
|
export interface ObjectCollectionConfig<TSchema extends StandardSchema<SalesforceObject>> extends ObjectCollectionOpts, Omit<CollectionConfig<InferSchemaOutput<TSchema>, string | number, TSchema>, "sync" | "syncMode" | "getKey" | "onInsert" | "onUpdate" | "onDelete"> {
|
|
27
|
-
|
|
26
|
+
schema: TSchema;
|
|
28
27
|
}
|
|
29
28
|
export declare function objectCollectionOptions<TSchema extends StandardSchema<SalesforceObject>>(config: ObjectCollectionConfig<TSchema>): WithRequired<CollectionConfig<InferSchemaOutput<TSchema>, string | number, TSchema, ObjectCollectionUtils>, "schema">;
|
|
30
29
|
export declare function objectCollectionOptions(config: ObjectCollectionOpts): {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
syncMode: "on-demand";
|
|
31
|
+
sync: SyncConfig<Record<string, unknown>, string | number>;
|
|
32
|
+
utils: ObjectCollectionUtils;
|
|
34
33
|
};
|
|
35
|
-
|
|
34
|
+
//#endregion
|
|
36
35
|
//# sourceMappingURL=objectCollectionOptions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objectCollectionOptions.d.ts","
|
|
1
|
+
{"version":3,"file":"objectCollectionOptions.d.ts","names":[],"sources":["../../src/adapter/objectCollectionOptions.ts"],"mappings":";;;KAyBK,aAAa,GAAG,gBAAgB,KAAK,OAAO,KAAK,MAAM,EAAE;KAEzD,mBAAmB;YAEZ,qCACR,oBACA,WAAW,OAAO,gCAClB,UAAU,6CACT,QAAQ;iBAEI,8BAA8B;;;;EAI3C,kBAAkB;;EAElB,eAAe,yBAAyB;;EAExC,cAAc,yBAAyB;;iBAgT1B;EACb,QAAQ;EACR;EACA;EACA;EACA,0BAA0B;EAC1B,gBAAgB,QAAQ,4BAA4B;;iBAGvC,uBAAuB,gBAAgB,eAAe,2BAE/D,sBACA,KACI,iBAAiB,kBAAkB,2BAA2B;EAGtE,QAAQ;;wBAGI,wBAAwB,gBAAgB,eAAe,mBACnE,QAAQ,uBAAuB,WAChC,aACC,iBAAiB,kBAAkB,2BAA2B,SAAS;wBAG3D,wBAAwB,QAAQ;EAC5C;EACA,MAAM,WAAW;EACjB,OAAO"}
|