@kwiz/node 1.0.32 → 1.0.36

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 (53) hide show
  1. package/dist/SPO/common.js +2 -3
  2. package/dist/SPO/common.js.map +1 -1
  3. package/dist/auth/discovery.js +5 -4
  4. package/dist/auth/discovery.js.map +1 -1
  5. package/dist/auth/msal.js +2 -3
  6. package/dist/auth/msal.js.map +1 -1
  7. package/dist/axios.js +3 -4
  8. package/dist/axios.js.map +1 -1
  9. package/dist/exports-index.d.ts +3 -0
  10. package/dist/exports-index.js +3 -0
  11. package/dist/exports-index.js.map +1 -1
  12. package/dist/get-with-cache.js +1 -2
  13. package/dist/get-with-cache.js.map +1 -1
  14. package/dist/graph/graph.js +3 -3
  15. package/dist/graph/graph.js.map +1 -1
  16. package/dist/next-js/api.d.ts +4 -0
  17. package/dist/next-js/api.js +41 -0
  18. package/dist/next-js/api.js.map +1 -0
  19. package/dist/next-js/api.responses.d.ts +22 -0
  20. package/dist/next-js/api.responses.js +25 -0
  21. package/dist/next-js/api.responses.js.map +1 -0
  22. package/dist/next-js/exports-index.d.ts +2 -0
  23. package/dist/next-js/exports-index.js +19 -0
  24. package/dist/next-js/exports-index.js.map +1 -0
  25. package/dist/sf/actions.d.ts +25 -0
  26. package/dist/sf/actions.js +251 -0
  27. package/dist/sf/actions.js.map +1 -0
  28. package/dist/sf/connections.d.ts +10 -0
  29. package/dist/sf/connections.js +108 -0
  30. package/dist/sf/connections.js.map +1 -0
  31. package/dist/sf/constants.d.ts +17 -0
  32. package/dist/sf/constants.js +21 -0
  33. package/dist/sf/constants.js.map +1 -0
  34. package/dist/sf/exports-index.d.ts +4 -0
  35. package/dist/sf/exports-index.js +21 -0
  36. package/dist/sf/exports-index.js.map +1 -0
  37. package/dist/sf/types.d.ts +146 -0
  38. package/dist/sf/types.js +65 -0
  39. package/dist/sf/types.js.map +1 -0
  40. package/dist/storage/common.js +1 -2
  41. package/dist/storage/common.js.map +1 -1
  42. package/dist/storage/odata.js +10 -5
  43. package/dist/storage/odata.js.map +1 -1
  44. package/dist/storage/table-storage.d.ts +2 -0
  45. package/dist/storage/table-storage.js +17 -15
  46. package/dist/storage/table-storage.js.map +1 -1
  47. package/dist/utilities/email.d.ts +16 -0
  48. package/dist/utilities/email.js +46 -0
  49. package/dist/utilities/email.js.map +1 -0
  50. package/dist/utilities/exports-index.d.ts +1 -0
  51. package/dist/utilities/exports-index.js +18 -0
  52. package/dist/utilities/exports-index.js.map +1 -0
  53. package/package.json +24 -5
@@ -0,0 +1,251 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.sfGetUserName = sfGetUserName;
13
+ exports.sfIsConnectionValid = sfIsConnectionValid;
14
+ exports.sfGetFields = sfGetFields;
15
+ exports.sfGetRecords = sfGetRecords;
16
+ exports.sfGetOrgInfo = sfGetOrgInfo;
17
+ exports.sfGetObjects = sfGetObjects;
18
+ exports.sfCreateItem = sfCreateItem;
19
+ exports.sfGetField = sfGetField;
20
+ exports.sfAddField = sfAddField;
21
+ exports.sfUpdateField = sfUpdateField;
22
+ exports.sfSetFieldPermissions = sfSetFieldPermissions;
23
+ exports.sfAttachFile = sfAttachFile;
24
+ const common_1 = require("@kwiz/common");
25
+ const constants_1 = require("./constants");
26
+ const types_1 = require("./types");
27
+ function sfGetUserName(conn) {
28
+ return __awaiter(this, void 0, void 0, function* () {
29
+ var _a;
30
+ try {
31
+ let userId = (_a = conn.userInfo) === null || _a === void 0 ? void 0 : _a.id;
32
+ if ((0, common_1.isNullOrEmptyString)(userId)) {
33
+ const identity = yield conn.identity();
34
+ //console.log(identity);
35
+ if ((0, common_1.isNotEmptyString)(identity.display_name))
36
+ return identity.display_name;
37
+ userId = identity.user_id;
38
+ }
39
+ const ui = yield conn.query("SELECT Name FROM User WHERE Id = '" + userId + "'");
40
+ return ui.records[0].Name;
41
+ }
42
+ catch (e) {
43
+ console.error(e);
44
+ return types_1.sf_unknown_user;
45
+ }
46
+ });
47
+ }
48
+ function sfIsConnectionValid(conn) {
49
+ return __awaiter(this, void 0, void 0, function* () {
50
+ const userName = yield sfGetUserName(conn);
51
+ return userName !== types_1.sf_unknown_user;
52
+ });
53
+ }
54
+ function sfGetFields(conn, entity) {
55
+ return __awaiter(this, void 0, void 0, function* () {
56
+ const ent = yield conn.sobject(entity).describe();
57
+ return ent.fields;
58
+ });
59
+ }
60
+ function sfGetRecords(conn_1, entity_1) {
61
+ return __awaiter(this, arguments, void 0, function* (conn, entity, select = ["Id, Name"], accessAsAppInstanceUrl) {
62
+ const records = yield conn.query(`SELECT ${select.join(', ')} FROM ${entity}`);
63
+ return records;
64
+ });
65
+ }
66
+ function sfGetOrgInfo(conn) {
67
+ return __awaiter(this, void 0, void 0, function* () {
68
+ const result = yield (conn === null || conn === void 0 ? void 0 : conn.query("SELECT Id, Name FROM Organization LIMIT 1"));
69
+ return {
70
+ instanceUrl: conn.instanceUrl,
71
+ orgId: result.records[0].Id,
72
+ orgName: result.records[0].Name
73
+ };
74
+ });
75
+ }
76
+ function sfGetObjects(conn) {
77
+ return __awaiter(this, void 0, void 0, function* () {
78
+ const objects = yield conn.describeGlobal();
79
+ //console.log(objects);
80
+ return objects.sobjects;
81
+ });
82
+ }
83
+ function sfCreateItem(conn, entity, values) {
84
+ return __awaiter(this, void 0, void 0, function* () {
85
+ try {
86
+ const sObject = conn.sobject(entity);
87
+ const result = yield sObject.create(values, {
88
+ headers: {
89
+ //bypass duplicate check
90
+ 'Sforce-Duplicate-Rule-Header': 'allowSave=true'
91
+ }
92
+ });
93
+ //console.log(result);
94
+ return result;
95
+ }
96
+ catch (e) {
97
+ const typedError = e;
98
+ return {
99
+ success: false,
100
+ errors: [{
101
+ errorCode: typedError.errorCode || "unknown error",
102
+ message: typedError.message || (0, common_1.GetError)(e) || "unexpected error"
103
+ }]
104
+ };
105
+ }
106
+ });
107
+ }
108
+ function sfGetField(conn, entity, name) {
109
+ return __awaiter(this, void 0, void 0, function* () {
110
+ return conn.metadata.read("CustomField", `${entity}.${name}`);
111
+ });
112
+ }
113
+ function sfAddField(conn, info) {
114
+ return __awaiter(this, void 0, void 0, function* () {
115
+ try {
116
+ if (!info.fullName.endsWith(constants_1.sf_custom_field_name_suffix))
117
+ info.fullName = `${info.fullName}${constants_1.sf_custom_field_name_suffix}`;
118
+ const result = yield conn.metadata.create("CustomField", info);
119
+ //set visibiliy on new field
120
+ //console.log(result);
121
+ return result;
122
+ }
123
+ catch (e) {
124
+ const typedError = e;
125
+ return {
126
+ success: false,
127
+ fullName: info.fullName,
128
+ errors: [{
129
+ statusCode: typedError.errorCode || "unknown error",
130
+ message: typedError.message || (0, common_1.GetError)(e) || "unexpected error",
131
+ extendedErrorDetails: [], fields: []
132
+ }]
133
+ };
134
+ }
135
+ });
136
+ }
137
+ function sfUpdateField(conn, info) {
138
+ return __awaiter(this, void 0, void 0, function* () {
139
+ const field = yield conn.metadata.read("CustomField", info.fullName);
140
+ if (!field)
141
+ return {
142
+ success: false,
143
+ fullName: info.fullName,
144
+ errors: [{ statusCode: "FIELD_NOT_FOUND", message: `Could not find field ${info.fullName}`, extendedErrorDetails: [], fields: [] }]
145
+ };
146
+ if ((0, common_1.isNullOrUndefined)(info.type))
147
+ info.type = field.type;
148
+ if ((0, common_1.isNullOrEmptyString)(info.label))
149
+ info.label = field.label;
150
+ else if (field.type !== info.type)
151
+ return {
152
+ success: false,
153
+ fullName: info.fullName,
154
+ errors: [{ statusCode: "DO_NOT_CHANGE_TYPE", message: "Do not change field type - data loss risk", extendedErrorDetails: [], fields: [] }]
155
+ };
156
+ const result = yield conn.metadata.update("CustomField", info);
157
+ //console.log(result);
158
+ return result;
159
+ });
160
+ }
161
+ function sfSetFieldPermissions(conn, fieldName) {
162
+ return __awaiter(this, void 0, void 0, function* () {
163
+ try {
164
+ //set visibiliy on new field
165
+ const result = yield (conn === null || conn === void 0 ? void 0 : conn.query("SELECT Id, Name FROM Profile"));
166
+ const chunks = (0, common_1.chunkArray)([...types_1.sf_builtin_profiles, ...result.records.map(r => r.Name)], types_1.sf_throttle);
167
+ //no need to check anything - just run the update
168
+ yield (0, common_1.forEachAsync)(chunks, (names) => __awaiter(this, void 0, void 0, function* () {
169
+ yield conn.metadata.update("Profile", names.map(name => ({
170
+ fullName: name,
171
+ fieldPermissions: [{
172
+ editable: true,
173
+ field: fieldName,
174
+ readable: true
175
+ }]
176
+ })));
177
+ }));
178
+ //can check - but no need... faster to just update
179
+ // await forEachAsync(chunks, async names => {
180
+ // let chunkProfiles = await conn!.metadata.read("Profile", names);
181
+ // chunkProfiles = chunkProfiles.filter(p => {
182
+ // if (isNullOrEmptyString(p.fullName)
183
+ // || isNullOrEmptyArray(p.fieldPermissions))
184
+ // return false;//skip system accounts
185
+ // const existing = firstOrNull(p.fieldPermissions, fp => fp.field === fieldName);
186
+ // if (existing && existing.editable && existing.readable)
187
+ // return false;//skip accounts that already have permissions set
188
+ // else {
189
+ // //make the change...
190
+ // if (existing) {
191
+ // existing.editable = true;
192
+ // existing.readable = true;
193
+ // }
194
+ // else p.fieldPermissions.push({
195
+ // editable: true,
196
+ // field: fieldName,
197
+ // readable: true
198
+ // });
199
+ // return true;
200
+ // }
201
+ // });
202
+ // if (isNotEmptyArray(chunkProfiles)) {
203
+ // await conn!.metadata.update("Profile", chunkProfiles.map(p => ({
204
+ // fullName: p.fullName,
205
+ // fieldPermissions: p.fieldPermissions
206
+ // })));
207
+ // profilesToUpdate.push(...chunkProfiles);
208
+ // }
209
+ // });
210
+ return { success: true };
211
+ }
212
+ catch (e) {
213
+ const typedError = e;
214
+ return {
215
+ success: false,
216
+ error: {
217
+ statusCode: typedError.errorCode || "unknown error",
218
+ message: typedError.message || (0, common_1.GetError)(e) || "unexpected error"
219
+ }
220
+ };
221
+ }
222
+ });
223
+ }
224
+ function sfAttachFile(conn, itemId, file) {
225
+ return __awaiter(this, void 0, void 0, function* () {
226
+ const base64Marker = 'base64,';
227
+ const base64 = (file.base64.indexOf(base64Marker) >= 0)
228
+ ? file.base64.slice(file.base64.indexOf(base64Marker) + base64Marker.length)
229
+ : file.base64;
230
+ const res = yield conn.sobject('ContentVersion').create({
231
+ PathOnClient: file.filename,
232
+ Title: file.filename,
233
+ VersionData: base64
234
+ // Add other fields as needed, e.g., Origin: 'C' for Chatter files
235
+ });
236
+ if (res.success) {
237
+ //wait for it to be committed - get it from DB
238
+ const docId = yield conn.sobject('ContentVersion').retrieve(res.id); // await conn?.query(`SELECT contentdocumentid FROM ContentVersion where id = '${res.id}'`);
239
+ //use it to make the link
240
+ const linkRes = yield conn.sobject('ContentDocumentLink').create({
241
+ ContentDocumentId: docId.ContentDocumentId,
242
+ LinkedEntityId: itemId,
243
+ ShareType: 'V', // 'V' for Viewer, 'C' for Collaborator, 'I' for Inferred
244
+ Visibility: 'AllUsers'
245
+ });
246
+ return linkRes.success;
247
+ }
248
+ return false;
249
+ });
250
+ }
251
+ //# sourceMappingURL=actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/sf/actions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { Connection } from "@jsforce/jsforce-node";
2
+ import { isf_cfg, isf_user_token } from "./types";
3
+ export declare function sf_conn_app(cfg: isf_cfg, instanceUrl: string): Promise<Connection<import("@jsforce/jsforce-node").Schema>>;
4
+ export declare function sf_conn_user(cfg: isf_cfg, userToken: isf_user_token): Promise<Connection<import("@jsforce/jsforce-node").Schema>>;
5
+ /** your redirect page will get an authorization code. call sf_oauth2_authorize to exchange for an access token.
6
+ * look for query params: code, error, error_description, state
7
+ */
8
+ export declare function sf_signin_redirect(cfg: isf_cfg, state: string, sandbox?: boolean): Promise<string>;
9
+ /** complete the user sign in flow, use the code to get an access token */
10
+ export declare function sf_oauth2_authorize(cfg: isf_cfg, authorizationCode: string, sandbox?: boolean): Promise<isf_user_token>;
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.sf_conn_app = sf_conn_app;
13
+ exports.sf_conn_user = sf_conn_user;
14
+ exports.sf_signin_redirect = sf_signin_redirect;
15
+ exports.sf_oauth2_authorize = sf_oauth2_authorize;
16
+ const jsforce_node_1 = require("@jsforce/jsforce-node");
17
+ const common_1 = require("@kwiz/common");
18
+ const actions_1 = require("./actions");
19
+ const types_1 = require("./types");
20
+ const useInstanceForLogin = true; //this is the preferred method
21
+ function getOauth2Config(cfg, instanceUrl) {
22
+ const loginUrl = useInstanceForLogin
23
+ ? instanceUrl
24
+ : instanceUrl.includes('.sandbox.my.salesforce.com') ? types_1.sf_instances.sandbox : types_1.sf_instances.default;
25
+ return {
26
+ clientId: cfg.clientId,
27
+ clientSecret: cfg.clientSecret,
28
+ redirectUri: cfg.redirectUri,
29
+ loginUrl: loginUrl
30
+ };
31
+ }
32
+ function hasTokenError(t) {
33
+ return (0, common_1.isNotEmptyString)(t.error);
34
+ }
35
+ function sf_conn_app(cfg, instanceUrl) {
36
+ return __awaiter(this, void 0, void 0, function* () {
37
+ try {
38
+ const oauth2Config = getOauth2Config(cfg, instanceUrl);
39
+ //get app only token
40
+ const buffer = Buffer.from(`${oauth2Config.clientId}:${oauth2Config.clientSecret}`, 'utf8');
41
+ const base64EncodedString = buffer.toString('base64');
42
+ const token = yield fetch(`${instanceUrl}/services/oauth2/token`, {
43
+ method: "POST",
44
+ headers: {
45
+ Authorization: `Basic ${base64EncodedString}`,
46
+ 'Content-Type': 'application/x-www-form-urlencoded'
47
+ },
48
+ body: `grant_type=client_credentials`
49
+ });
50
+ //get the token response
51
+ const token_json = (yield token.json());
52
+ if (hasTokenError(token_json)) {
53
+ throw token_json;
54
+ }
55
+ //configure the connection
56
+ const conn = new jsforce_node_1.Connection({
57
+ instanceUrl: token_json.instance_url,
58
+ accessToken: token_json.access_token
59
+ });
60
+ return conn;
61
+ }
62
+ catch (e) {
63
+ console.error(e);
64
+ return null;
65
+ }
66
+ });
67
+ }
68
+ function sf_conn_user(cfg, userToken) {
69
+ return __awaiter(this, void 0, void 0, function* () {
70
+ if (cfg && userToken) {
71
+ const conn = new jsforce_node_1.default.Connection({
72
+ oauth2: getOauth2Config(cfg, userToken.instanceUrl),
73
+ instanceUrl: userToken.instanceUrl,
74
+ accessToken: userToken.accessToken,
75
+ });
76
+ return conn;
77
+ }
78
+ return null;
79
+ });
80
+ }
81
+ /** your redirect page will get an authorization code. call sf_oauth2_authorize to exchange for an access token.
82
+ * look for query params: code, error, error_description, state
83
+ */
84
+ function sf_signin_redirect(cfg, state, sandbox) {
85
+ return __awaiter(this, void 0, void 0, function* () {
86
+ const redirectUrl = new jsforce_node_1.default.OAuth2(getOauth2Config(cfg, sandbox ? types_1.sf_instances.sandbox : types_1.sf_instances.default)).getAuthorizationUrl({
87
+ //which page the user came from
88
+ state: (0, common_1.jsonStringify)(state)
89
+ });
90
+ return redirectUrl;
91
+ });
92
+ }
93
+ /** complete the user sign in flow, use the code to get an access token */
94
+ function sf_oauth2_authorize(cfg, authorizationCode, sandbox) {
95
+ return __awaiter(this, void 0, void 0, function* () {
96
+ const conn = new jsforce_node_1.default.Connection({
97
+ oauth2: getOauth2Config(cfg, sandbox ? types_1.sf_instances.sandbox : types_1.sf_instances.default)
98
+ });
99
+ yield conn.authorize(authorizationCode);
100
+ const userName = yield (0, actions_1.sfGetUserName)(conn);
101
+ return ({
102
+ accessToken: conn.accessToken,
103
+ instanceUrl: conn.instanceUrl,
104
+ userName
105
+ });
106
+ });
107
+ }
108
+ //# sourceMappingURL=connections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connections.js","sourceRoot":"","sources":["../../src/sf/connections.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export declare const sf_custom_field_name_suffix = "__c";
2
+ export declare const sf_metadata_field_type_info: {
3
+ Text: string;
4
+ Checkbox: string;
5
+ Currency: string;
6
+ Date: string;
7
+ DateTime: string;
8
+ Email: string;
9
+ Number: string;
10
+ Phone: string;
11
+ Picklist: string;
12
+ MultiselectPicklist: string;
13
+ TextArea: string;
14
+ Url: string;
15
+ Percent: string;
16
+ Html: string;
17
+ };
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sf_metadata_field_type_info = exports.sf_custom_field_name_suffix = void 0;
4
+ exports.sf_custom_field_name_suffix = '__c';
5
+ exports.sf_metadata_field_type_info = {
6
+ Text: 'Text',
7
+ Checkbox: 'Checkbox',
8
+ Currency: 'Currency',
9
+ Date: 'Date',
10
+ DateTime: 'DateTime',
11
+ Email: 'Email',
12
+ Number: 'Number',
13
+ Phone: 'Phone',
14
+ Picklist: 'Picklist',
15
+ MultiselectPicklist: 'MultiselectPicklist',
16
+ TextArea: 'TextArea',
17
+ Url: 'Url',
18
+ Percent: 'Percent',
19
+ Html: 'Html'
20
+ };
21
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/sf/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,2BAA2B,GAAG,KAAK,CAAC;AAEpC,QAAA,2BAA2B,GAAG;IACvC,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,UAAU;IACpB,mBAAmB,EAAE,qBAAqB;IAC1C,QAAQ,EAAE,UAAU;IACpB,GAAG,EAAE,KAAK;IACV,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,MAAM;CACf,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './actions';
2
+ export * from './connections';
3
+ export * from './constants';
4
+ export * from './types';
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./actions"), exports);
18
+ __exportStar(require("./connections"), exports);
19
+ __exportStar(require("./constants"), exports);
20
+ __exportStar(require("./types"), exports);
21
+ //# sourceMappingURL=exports-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exports-index.js","sourceRoot":"","sources":["../../src/sf/exports-index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAA0B;AAC1B,gDAA8B;AAC9B,8CAA4B;AAC5B,0CAAwB"}
@@ -0,0 +1,146 @@
1
+ import { Connection, Field, Schema } from "@jsforce/jsforce-node";
2
+ import { ValueSet } from "@jsforce/jsforce-node/lib/api/metadata";
3
+ import { DescribeGlobalSObjectResult } from "@jsforce/jsforce-node/lib/api/soap/schema";
4
+ import { sf_metadata_field_type_info } from "./constants";
5
+ export declare const sf_unknown_user = "Unknown User";
6
+ export declare const sf_throttle = 10;
7
+ export declare const sf_instances: {
8
+ default: string;
9
+ sandbox: string;
10
+ };
11
+ export declare const sf_builtin_profiles: string[];
12
+ export declare const sf_known_entities: {
13
+ Lead: {
14
+ Label: string;
15
+ };
16
+ Account: {
17
+ Label: string;
18
+ };
19
+ };
20
+ export declare const sf_known_entities_arr: ({
21
+ Label: string;
22
+ key: string;
23
+ } | {
24
+ Label: string;
25
+ key: string;
26
+ })[];
27
+ export type sf_known_entities_type = keyof typeof sf_known_entities;
28
+ export type sf_field_value_types = string | boolean | number | Date;
29
+ export interface isf_cfg {
30
+ clientId: string;
31
+ clientSecret: string;
32
+ redirectUri: string;
33
+ }
34
+ export interface isf_user_token {
35
+ instanceUrl: string;
36
+ accessToken: string;
37
+ userName: string;
38
+ }
39
+ export type sf_conn = Connection<Schema>;
40
+ export interface iSFContext {
41
+ /** instance url */
42
+ instanceUrl: string;
43
+ }
44
+ export interface iSFEntityContext extends iSFContext {
45
+ /** entity name */
46
+ entity: string;
47
+ }
48
+ export declare function isSFContext(ctx: any): ctx is iSFContext;
49
+ export declare function isSFEntityContext(ctx: any): ctx is iSFEntityContext;
50
+ export interface iSFEntity extends DescribeGlobalSObjectResult {
51
+ }
52
+ export interface iSFOrgInfo {
53
+ instanceUrl: string;
54
+ orgId: string;
55
+ orgName: string;
56
+ }
57
+ export interface iPicklistValue {
58
+ active: boolean;
59
+ defaultValue: boolean;
60
+ label: string;
61
+ /** https://salesforce.stackexchange.com/questions/201775/picklists-validfor-attribute */
62
+ validFor: string;
63
+ value: string;
64
+ }
65
+ export declare const sf_field_ex_type_info: {
66
+ textarea: string;
67
+ string: string;
68
+ picklist: string;
69
+ multipicklist: string;
70
+ email: string;
71
+ phone: string;
72
+ url: string;
73
+ int: string;
74
+ double: string;
75
+ currency: string;
76
+ boolean: string;
77
+ date: string;
78
+ datetime: string;
79
+ percent: string;
80
+ };
81
+ export type sf_field_ex_types = keyof typeof sf_field_ex_type_info;
82
+ export type sf_field_ex = (Omit<Field, "picklistValues" | "type"> & {
83
+ picklistValues?: iPicklistValue[];
84
+ type: sf_field_ex_types;
85
+ extraTypeInfo?: "personname" | "imageurl" | "plaintextarea" | "richtextarea";
86
+ });
87
+ export interface iSFDesignerProps {
88
+ ctx: iSFContext;
89
+ container: HTMLDivElement;
90
+ onRendered?: () => void;
91
+ }
92
+ export interface iSFBaseEntity<type = string> {
93
+ attributes: {
94
+ type: type;
95
+ url: string;
96
+ };
97
+ }
98
+ export type sf_metadata_field_types = keyof typeof sf_metadata_field_type_info;
99
+ export interface sf_metadata_field_base {
100
+ /**`${entity}.${name}` */
101
+ fullName: string;
102
+ label: string;
103
+ required: boolean;
104
+ description?: string;
105
+ inlineHelpText?: string;
106
+ }
107
+ export interface sf_metadata_field_text extends sf_metadata_field_base {
108
+ type: "Text";
109
+ /** 128 */
110
+ length: number;
111
+ }
112
+ export interface sf_metadata_field_textarea extends sf_metadata_field_base {
113
+ type: "TextArea";
114
+ }
115
+ export interface sf_metadata_field_html extends sf_metadata_field_base {
116
+ type: "Html";
117
+ /** 512 */
118
+ length: number;
119
+ /** 10 */
120
+ visibleLines: number;
121
+ }
122
+ export interface sf_metadata_field_numeric extends sf_metadata_field_base {
123
+ type: "Number" | "Currency" | "Percent";
124
+ precision: number;
125
+ scale: number;
126
+ }
127
+ export interface sf_metadata_field_checkbox extends sf_metadata_field_base {
128
+ type: "Checkbox";
129
+ defaultValue: boolean;
130
+ }
131
+ export interface sf_metadata_field_list extends sf_metadata_field_base {
132
+ type: "Picklist";
133
+ valueSet: Omit<ValueSet, "valueSettings"> & Required<Pick<ValueSet, 'valueSetDefinition'>>;
134
+ }
135
+ export interface sf_metadata_field_multiList extends sf_metadata_field_base {
136
+ type: "MultiselectPicklist";
137
+ valueSet: Omit<ValueSet, "valueSettings"> & Required<Pick<ValueSet, 'valueSetDefinition'>>;
138
+ /** 10 */
139
+ visibleLines: number;
140
+ }
141
+ type basicFieldTypes = Exclude<sf_metadata_field_types, "Text" | "TextArea" | "Html" | "Number" | "Currency" | "Percent" | "Checkbox" | "Picklist" | "MultiselectPicklist">;
142
+ export interface sf_metadata_field_basic extends sf_metadata_field_base {
143
+ type: basicFieldTypes;
144
+ }
145
+ export type sf_metadata_field_type = sf_metadata_field_text | sf_metadata_field_textarea | sf_metadata_field_html | sf_metadata_field_checkbox | sf_metadata_field_list | sf_metadata_field_multiList | sf_metadata_field_basic | sf_metadata_field_numeric;
146
+ export {};