@stackfactor/client-api 1.2.1 → 1.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/lib/axiosClient.d.ts.map +1 -1
- package/dist/cjs/lib/axiosClient.js +51 -5
- package/dist/cjs/lib/axiosClient.js.map +1 -1
- package/dist/cjs/lib/integrationConfiguration.d.ts +41 -0
- package/dist/cjs/lib/integrationConfiguration.d.ts.map +1 -1
- package/dist/cjs/lib/integrationConfiguration.js +84 -1
- package/dist/cjs/lib/integrationConfiguration.js.map +1 -1
- package/dist/esm/lib/axiosClient.d.ts.map +1 -1
- package/dist/esm/lib/axiosClient.js +51 -5
- package/dist/esm/lib/axiosClient.js.map +1 -1
- package/dist/esm/lib/integrationConfiguration.d.ts +41 -0
- package/dist/esm/lib/integrationConfiguration.d.ts.map +1 -1
- package/dist/esm/lib/integrationConfiguration.js +80 -0
- package/dist/esm/lib/integrationConfiguration.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"axiosClient.d.ts","sourceRoot":"","sources":["../../../src/lib/axiosClient.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,UAAU,EAAiB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"axiosClient.d.ts","sourceRoot":"","sources":["../../../src/lib/axiosClient.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,UAAU,EAAiB,MAAM,OAAO,CAAC;AAsBzD,eAAO,MAAM,MAAM,+BAGjB,CAAC;AAoDH;;;;GAIG;AACH,eAAO,MAAM,aAAa,GAAI,OAAO,UAAU,KAAG,MA2BjD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,UAAU,KAAG,MAIhD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAC9B,OAAO,UAAU,KAChB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAKnC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAC5B,qBAAqB,OAAO,EAC5B,OAAO,UAAU,KAChB,OAMF,CAAC"}
|
|
@@ -45,6 +45,54 @@ exports.client = axios_1.default.create({
|
|
|
45
45
|
baseURL: baseUrl,
|
|
46
46
|
withCredentials: true,
|
|
47
47
|
});
|
|
48
|
+
//Fields whose value must never be echoed back to the screen. A validation error on
|
|
49
|
+
//one of these used to render the value the user typed — so a rejected password was
|
|
50
|
+
//printed in the error message under it.
|
|
51
|
+
const REDACTED_FIELDS = [
|
|
52
|
+
"password",
|
|
53
|
+
"newpassword",
|
|
54
|
+
"currentpassword",
|
|
55
|
+
"token",
|
|
56
|
+
"secret",
|
|
57
|
+
"authorization",
|
|
58
|
+
"apikey",
|
|
59
|
+
"accesstoken",
|
|
60
|
+
"refreshtoken",
|
|
61
|
+
];
|
|
62
|
+
//Long values (a pasted document, a base64 blob) would bury the message they are meant
|
|
63
|
+
//to illustrate.
|
|
64
|
+
const MAX_VALUE_LENGTH = 60;
|
|
65
|
+
/**
|
|
66
|
+
* Renders one validation error as a sentence: the server's message, then the field it
|
|
67
|
+
* is about and the value that was rejected.
|
|
68
|
+
*
|
|
69
|
+
* The value matters — "must be at least 4 characters long" is a lot less useful when
|
|
70
|
+
* you cannot see what you typed — but only when it is safe and short enough to help.
|
|
71
|
+
*/
|
|
72
|
+
const validationErrorToString = (item) => {
|
|
73
|
+
//express-validator 7 reports the field as `path`; 6 reported it as `param`. Reading
|
|
74
|
+
//only one of them is how this message came to read "param undefined".
|
|
75
|
+
const field = item.path ?? item.param;
|
|
76
|
+
const message = item.msg ?? "Invalid value";
|
|
77
|
+
if (!field) {
|
|
78
|
+
return message;
|
|
79
|
+
}
|
|
80
|
+
const redacted = REDACTED_FIELDS.indexOf(field.toLowerCase()) >= 0;
|
|
81
|
+
let value = null;
|
|
82
|
+
if (!redacted && item.value !== null && item.value !== undefined) {
|
|
83
|
+
value =
|
|
84
|
+
typeof item.value === "object"
|
|
85
|
+
? JSON.stringify(item.value)
|
|
86
|
+
: String(item.value);
|
|
87
|
+
if (value.length === 0) {
|
|
88
|
+
value = null;
|
|
89
|
+
}
|
|
90
|
+
else if (value.length > MAX_VALUE_LENGTH) {
|
|
91
|
+
value = `${value.slice(0, MAX_VALUE_LENGTH)}…`;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return `${message} (${field}${value === null ? "" : `: "${value}"`})`;
|
|
95
|
+
};
|
|
48
96
|
/**
|
|
49
97
|
* Returns the error as a string
|
|
50
98
|
* @param {AxiosError} error
|
|
@@ -54,13 +102,11 @@ const errorToString = (error) => {
|
|
|
54
102
|
try {
|
|
55
103
|
if (error != null) {
|
|
56
104
|
if (error.response?.data) {
|
|
57
|
-
let asString = "";
|
|
58
105
|
const responseData = error.response.data;
|
|
59
106
|
if (Array.isArray(responseData.errors)) {
|
|
60
|
-
responseData.errors
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
return asString;
|
|
107
|
+
return responseData.errors
|
|
108
|
+
.map((item) => validationErrorToString(item))
|
|
109
|
+
.join("; ");
|
|
64
110
|
}
|
|
65
111
|
else if (responseData.error) {
|
|
66
112
|
return responseData.error;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"axiosClient.js","sourceRoot":"","sources":["../../../src/lib/axiosClient.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAAyD;AACzD,iDAA+C;AAC/C,kDAAoC;
|
|
1
|
+
{"version":3,"file":"axiosClient.js","sourceRoot":"","sources":["../../../src/lib/axiosClient.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAAyD;AACzD,iDAA+C;AAC/C,kDAAoC;AAkBpC,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;AAEtB,QAAA,MAAM,GAAG,eAAK,CAAC,MAAM,CAAC;IACjC,OAAO,EAAE,OAAO;IAChB,eAAe,EAAE,IAAI;CACtB,CAAC,CAAC;AAEH,mFAAmF;AACnF,mFAAmF;AACnF,wCAAwC;AACxC,MAAM,eAAe,GAAG;IACtB,UAAU;IACV,aAAa;IACb,iBAAiB;IACjB,OAAO;IACP,QAAQ;IACR,eAAe;IACf,QAAQ;IACR,aAAa;IACb,cAAc;CACf,CAAC;AAEF,sFAAsF;AACtF,gBAAgB;AAChB,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAE5B;;;;;;GAMG;AACH,MAAM,uBAAuB,GAAG,CAAC,IAAmB,EAAU,EAAE;IAC9D,oFAAoF;IACpF,sEAAsE;IACtE,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC;IACtC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,IAAI,eAAe,CAAC;IAC5C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC;IACnE,IAAI,KAAK,GAAkB,IAAI,CAAC;IAChC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACjE,KAAK;YACH,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;gBAC5B,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC5B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,KAAK,GAAG,IAAI,CAAC;QACf,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,GAAG,gBAAgB,EAAE,CAAC;YAC3C,KAAK,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC;QACjD,CAAC;IACH,CAAC;IACD,OAAO,GAAG,OAAO,KAAK,KAAK,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,GAAG,CAAC;AACxE,CAAC,CAAC;AAEF;;;;GAIG;AACI,MAAM,aAAa,GAAG,CAAC,KAAiB,EAAU,EAAE;IACzD,IAAI,CAAC;QACH,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YAClB,IAAI,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;gBACzB,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,IAA2B,CAAC;gBAChE,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;oBACvC,OAAO,YAAY,CAAC,MAAM;yBACvB,GAAG,CAAC,CAAC,IAAmB,EAAE,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;yBAC3D,IAAI,CAAC,IAAI,CAAC,CAAC;gBAChB,CAAC;qBAAM,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC;oBAC9B,OAAO,YAAY,CAAC,KAAK,CAAC;gBAC5B,CAAC;qBAAM,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC;oBAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBAC7C,CAAC;qBAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;oBACrC,OAAO,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;gBAC9C,CAAC;qBAAM,CAAC;oBACN,OAAO,YAAY,CAAC,QAAQ,EAAE,CAAC;gBACjC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACzD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,eAAe,CAAC;QACzB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,eAAe,CAAC;IACzB,CAAC;AACH,CAAC,CAAC;AA3BW,QAAA,aAAa,iBA2BxB;AAEF;;;;GAIG;AACI,MAAM,YAAY,GAAG,CAAC,KAAiB,EAAU,EAAE;IACxD,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC/B,CAAC;;QAAM,OAAO,4BAAa,CAAC,mBAAmB,CAAC;AAClD,CAAC,CAAC;AAJW,QAAA,YAAY,gBAIvB;AAEF;;;;GAIG;AACI,MAAM,mBAAmB,GAAG,CACjC,KAAiB,EACoB,EAAE;IACvC,OAAO;QACL,MAAM,EAAE,IAAA,oBAAY,EAAC,KAAK,CAAC;QAC3B,OAAO,EAAE,IAAA,qBAAa,EAAC,KAAK,CAAC;KAC9B,CAAC;AACJ,CAAC,CAAC;AAPW,QAAA,mBAAmB,uBAO9B;AAEF;;;;;GAKG;AACI,MAAM,iBAAiB,GAAG,CAC/B,mBAA4B,EAC5B,KAAiB,EACR,EAAE;IACX,IAAI,IAAA,oBAAY,EAAC,KAAK,CAAC,KAAK,4BAAa,CAAC,YAAY,EAAE,CAAC;QACvD,OAAO,mBAAmB,CAAC;IAC7B,CAAC;SAAM,CAAC;QACN,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AATW,QAAA,iBAAiB,qBAS5B"}
|
|
@@ -34,4 +34,45 @@ export declare const setIntegrationEnabled: (id: string, enabled: boolean, token
|
|
|
34
34
|
* @returns {Promise<object>}
|
|
35
35
|
*/
|
|
36
36
|
export declare const testIntegrationConfiguration: (id: string, type: number, configuration: object, token: string) => Promise<object>;
|
|
37
|
+
/**
|
|
38
|
+
* Get this organization's webhook endpoint for an integration, creating one if it does not have
|
|
39
|
+
* one yet.
|
|
40
|
+
*
|
|
41
|
+
* The returned `endpoint` is the first segment of every webhook URL for this organization and
|
|
42
|
+
* integration: `{backend}/webhooks/{endpoint}/{integrationId}/{path}`. It is per organization, so
|
|
43
|
+
* there is no single URL for an integration — each has its own.
|
|
44
|
+
*
|
|
45
|
+
* A POST rather than a GET because the first call for an organization WRITES: it generates the
|
|
46
|
+
* secret half. It is idempotent from then on, so a configuration screen may call it on every load.
|
|
47
|
+
* @param {String} id The id of the integration whose endpoint is wanted
|
|
48
|
+
* @param {String} token Authorization token
|
|
49
|
+
* @returns {Promise<object>} `{ _id, endpoint }`
|
|
50
|
+
*/
|
|
51
|
+
export declare const getWebhookEndpoint: (id: string, token: string) => Promise<object>;
|
|
52
|
+
/**
|
|
53
|
+
* Replace this organization's webhook endpoint secret for an integration.
|
|
54
|
+
*
|
|
55
|
+
* ⚠️ Destructive beyond StackFactor. The previous URL is configured in whichever outside system
|
|
56
|
+
* calls it, so rotating stops those deliveries until someone updates it there. Use
|
|
57
|
+
* {@link getWebhookEndpoint} to obtain an endpoint; use this only when one has leaked.
|
|
58
|
+
* @param {String} id The id of the integration whose endpoint should be replaced
|
|
59
|
+
* @param {String} token Authorization token
|
|
60
|
+
* @returns {Promise<object>} `{ _id, endpoint }` carrying the NEW endpoint
|
|
61
|
+
*/
|
|
62
|
+
export declare const rotateWebhookEndpoint: (id: string, token: string) => Promise<object>;
|
|
63
|
+
/**
|
|
64
|
+
* Set the user that this organization's tokenless webhook deliveries act as.
|
|
65
|
+
*
|
|
66
|
+
* A webhook authenticated by a provider signature, or by possession of its URL alone, carries no
|
|
67
|
+
* token — so it proves where the request came from but names nobody. This is the identity such
|
|
68
|
+
* deliveries run with, supplying both permissions and an audit subject. Deliveries that DO carry a
|
|
69
|
+
* token ignore it and act as that token's owner.
|
|
70
|
+
*
|
|
71
|
+
* Passing null clears it, which stops those deliveries rather than running them as nobody.
|
|
72
|
+
* @param {String} id The id of the integration
|
|
73
|
+
* @param {String|null} userId A user in this organization, or null to clear
|
|
74
|
+
* @param {String} token Authorization token
|
|
75
|
+
* @returns {Promise<object>} `{ _id, dispatchUserId }`
|
|
76
|
+
*/
|
|
77
|
+
export declare const setWebhookDispatchUser: (id: string, userId: string | null, token: string) => Promise<object>;
|
|
37
78
|
//# sourceMappingURL=integrationConfiguration.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integrationConfiguration.d.ts","sourceRoot":"","sources":["../../../src/lib/integrationConfiguration.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B,GACvC,KAAK,MAAM,EAAE,EACb,OAAO,MAAM,EAAE,EACf,OAAO,MAAM,KACZ,OAAO,CAAC,MAAM,CAmBhB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B,GACvC,IAAI,MAAM,EACV,MAAM,MAAM,EACZ,eAAe,MAAM,EACrB,OAAO,MAAM,KACZ,OAAO,CAAC,MAAM,CAsBhB,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,GAChC,IAAI,MAAM,EACV,SAAS,OAAO,EAChB,OAAO,MAAM,KACZ,OAAO,CAAC,MAAM,CAiBhB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B,GACvC,IAAI,MAAM,EACV,MAAM,MAAM,EACZ,eAAe,MAAM,EACrB,OAAO,MAAM,KACZ,OAAO,CAAC,MAAM,CAsBhB,CAAC"}
|
|
1
|
+
{"version":3,"file":"integrationConfiguration.d.ts","sourceRoot":"","sources":["../../../src/lib/integrationConfiguration.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B,GACvC,KAAK,MAAM,EAAE,EACb,OAAO,MAAM,EAAE,EACf,OAAO,MAAM,KACZ,OAAO,CAAC,MAAM,CAmBhB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B,GACvC,IAAI,MAAM,EACV,MAAM,MAAM,EACZ,eAAe,MAAM,EACrB,OAAO,MAAM,KACZ,OAAO,CAAC,MAAM,CAsBhB,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,GAChC,IAAI,MAAM,EACV,SAAS,OAAO,EAChB,OAAO,MAAM,KACZ,OAAO,CAAC,MAAM,CAiBhB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B,GACvC,IAAI,MAAM,EACV,MAAM,MAAM,EACZ,eAAe,MAAM,EACrB,OAAO,MAAM,KACZ,OAAO,CAAC,MAAM,CAsBhB,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,kBAAkB,GAC7B,IAAI,MAAM,EACV,OAAO,MAAM,KACZ,OAAO,CAAC,MAAM,CAiBhB,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,GAChC,IAAI,MAAM,EACV,OAAO,MAAM,KACZ,OAAO,CAAC,MAAM,CAiBhB,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,sBAAsB,GACjC,IAAI,MAAM,EACV,QAAQ,MAAM,GAAG,IAAI,EACrB,OAAO,MAAM,KACZ,OAAO,CAAC,MAAM,CAiBhB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.testIntegrationConfiguration = exports.setIntegrationEnabled = exports.saveIntegrationConfiguration = exports.getIntegrationsConfiguration = void 0;
|
|
3
|
+
exports.setWebhookDispatchUser = exports.rotateWebhookEndpoint = exports.getWebhookEndpoint = exports.testIntegrationConfiguration = exports.setIntegrationEnabled = exports.saveIntegrationConfiguration = exports.getIntegrationsConfiguration = void 0;
|
|
4
4
|
const axiosClient_js_1 = require("./axiosClient.js");
|
|
5
5
|
/**
|
|
6
6
|
* Get the integration configuration
|
|
@@ -107,4 +107,87 @@ const testIntegrationConfiguration = (id, type, configuration, token) => {
|
|
|
107
107
|
});
|
|
108
108
|
};
|
|
109
109
|
exports.testIntegrationConfiguration = testIntegrationConfiguration;
|
|
110
|
+
/**
|
|
111
|
+
* Get this organization's webhook endpoint for an integration, creating one if it does not have
|
|
112
|
+
* one yet.
|
|
113
|
+
*
|
|
114
|
+
* The returned `endpoint` is the first segment of every webhook URL for this organization and
|
|
115
|
+
* integration: `{backend}/webhooks/{endpoint}/{integrationId}/{path}`. It is per organization, so
|
|
116
|
+
* there is no single URL for an integration — each has its own.
|
|
117
|
+
*
|
|
118
|
+
* A POST rather than a GET because the first call for an organization WRITES: it generates the
|
|
119
|
+
* secret half. It is idempotent from then on, so a configuration screen may call it on every load.
|
|
120
|
+
* @param {String} id The id of the integration whose endpoint is wanted
|
|
121
|
+
* @param {String} token Authorization token
|
|
122
|
+
* @returns {Promise<object>} `{ _id, endpoint }`
|
|
123
|
+
*/
|
|
124
|
+
const getWebhookEndpoint = (id, token) => {
|
|
125
|
+
return new Promise((resolve, reject) => {
|
|
126
|
+
const request = axiosClient_js_1.client.post(`/api/v1/integrationsconfiguration/webhookendpoint`, { id: id }, {
|
|
127
|
+
headers: { authorization: token },
|
|
128
|
+
});
|
|
129
|
+
request
|
|
130
|
+
.then((response) => {
|
|
131
|
+
resolve(response.data);
|
|
132
|
+
})
|
|
133
|
+
.catch((error) => {
|
|
134
|
+
reject(error);
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
};
|
|
138
|
+
exports.getWebhookEndpoint = getWebhookEndpoint;
|
|
139
|
+
/**
|
|
140
|
+
* Replace this organization's webhook endpoint secret for an integration.
|
|
141
|
+
*
|
|
142
|
+
* ⚠️ Destructive beyond StackFactor. The previous URL is configured in whichever outside system
|
|
143
|
+
* calls it, so rotating stops those deliveries until someone updates it there. Use
|
|
144
|
+
* {@link getWebhookEndpoint} to obtain an endpoint; use this only when one has leaked.
|
|
145
|
+
* @param {String} id The id of the integration whose endpoint should be replaced
|
|
146
|
+
* @param {String} token Authorization token
|
|
147
|
+
* @returns {Promise<object>} `{ _id, endpoint }` carrying the NEW endpoint
|
|
148
|
+
*/
|
|
149
|
+
const rotateWebhookEndpoint = (id, token) => {
|
|
150
|
+
return new Promise((resolve, reject) => {
|
|
151
|
+
const request = axiosClient_js_1.client.put(`/api/v1/integrationsconfiguration/webhookendpoint/rotate`, { id: id }, {
|
|
152
|
+
headers: { authorization: token },
|
|
153
|
+
});
|
|
154
|
+
request
|
|
155
|
+
.then((response) => {
|
|
156
|
+
resolve(response.data);
|
|
157
|
+
})
|
|
158
|
+
.catch((error) => {
|
|
159
|
+
reject(error);
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
};
|
|
163
|
+
exports.rotateWebhookEndpoint = rotateWebhookEndpoint;
|
|
164
|
+
/**
|
|
165
|
+
* Set the user that this organization's tokenless webhook deliveries act as.
|
|
166
|
+
*
|
|
167
|
+
* A webhook authenticated by a provider signature, or by possession of its URL alone, carries no
|
|
168
|
+
* token — so it proves where the request came from but names nobody. This is the identity such
|
|
169
|
+
* deliveries run with, supplying both permissions and an audit subject. Deliveries that DO carry a
|
|
170
|
+
* token ignore it and act as that token's owner.
|
|
171
|
+
*
|
|
172
|
+
* Passing null clears it, which stops those deliveries rather than running them as nobody.
|
|
173
|
+
* @param {String} id The id of the integration
|
|
174
|
+
* @param {String|null} userId A user in this organization, or null to clear
|
|
175
|
+
* @param {String} token Authorization token
|
|
176
|
+
* @returns {Promise<object>} `{ _id, dispatchUserId }`
|
|
177
|
+
*/
|
|
178
|
+
const setWebhookDispatchUser = (id, userId, token) => {
|
|
179
|
+
return new Promise((resolve, reject) => {
|
|
180
|
+
const request = axiosClient_js_1.client.put(`/api/v1/integrationsconfiguration/webhookdispatchuser`, { id: id, userId: userId }, {
|
|
181
|
+
headers: { authorization: token },
|
|
182
|
+
});
|
|
183
|
+
request
|
|
184
|
+
.then((response) => {
|
|
185
|
+
resolve(response.data);
|
|
186
|
+
})
|
|
187
|
+
.catch((error) => {
|
|
188
|
+
reject(error);
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
};
|
|
192
|
+
exports.setWebhookDispatchUser = setWebhookDispatchUser;
|
|
110
193
|
//# sourceMappingURL=integrationConfiguration.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integrationConfiguration.js","sourceRoot":"","sources":["../../../src/lib/integrationConfiguration.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"integrationConfiguration.js","sourceRoot":"","sources":["../../../src/lib/integrationConfiguration.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"axiosClient.d.ts","sourceRoot":"","sources":["../../../src/lib/axiosClient.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,UAAU,EAAiB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"axiosClient.d.ts","sourceRoot":"","sources":["../../../src/lib/axiosClient.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,UAAU,EAAiB,MAAM,OAAO,CAAC;AAsBzD,eAAO,MAAM,MAAM,+BAGjB,CAAC;AAoDH;;;;GAIG;AACH,eAAO,MAAM,aAAa,GAAI,OAAO,UAAU,KAAG,MA2BjD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,UAAU,KAAG,MAIhD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAC9B,OAAO,UAAU,KAChB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAKnC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAC5B,qBAAqB,OAAO,EAC5B,OAAO,UAAU,KAChB,OAMF,CAAC"}
|
|
@@ -6,6 +6,54 @@ export const client = axios.create({
|
|
|
6
6
|
baseURL: baseUrl,
|
|
7
7
|
withCredentials: true,
|
|
8
8
|
});
|
|
9
|
+
//Fields whose value must never be echoed back to the screen. A validation error on
|
|
10
|
+
//one of these used to render the value the user typed — so a rejected password was
|
|
11
|
+
//printed in the error message under it.
|
|
12
|
+
const REDACTED_FIELDS = [
|
|
13
|
+
"password",
|
|
14
|
+
"newpassword",
|
|
15
|
+
"currentpassword",
|
|
16
|
+
"token",
|
|
17
|
+
"secret",
|
|
18
|
+
"authorization",
|
|
19
|
+
"apikey",
|
|
20
|
+
"accesstoken",
|
|
21
|
+
"refreshtoken",
|
|
22
|
+
];
|
|
23
|
+
//Long values (a pasted document, a base64 blob) would bury the message they are meant
|
|
24
|
+
//to illustrate.
|
|
25
|
+
const MAX_VALUE_LENGTH = 60;
|
|
26
|
+
/**
|
|
27
|
+
* Renders one validation error as a sentence: the server's message, then the field it
|
|
28
|
+
* is about and the value that was rejected.
|
|
29
|
+
*
|
|
30
|
+
* The value matters — "must be at least 4 characters long" is a lot less useful when
|
|
31
|
+
* you cannot see what you typed — but only when it is safe and short enough to help.
|
|
32
|
+
*/
|
|
33
|
+
const validationErrorToString = (item) => {
|
|
34
|
+
//express-validator 7 reports the field as `path`; 6 reported it as `param`. Reading
|
|
35
|
+
//only one of them is how this message came to read "param undefined".
|
|
36
|
+
const field = item.path ?? item.param;
|
|
37
|
+
const message = item.msg ?? "Invalid value";
|
|
38
|
+
if (!field) {
|
|
39
|
+
return message;
|
|
40
|
+
}
|
|
41
|
+
const redacted = REDACTED_FIELDS.indexOf(field.toLowerCase()) >= 0;
|
|
42
|
+
let value = null;
|
|
43
|
+
if (!redacted && item.value !== null && item.value !== undefined) {
|
|
44
|
+
value =
|
|
45
|
+
typeof item.value === "object"
|
|
46
|
+
? JSON.stringify(item.value)
|
|
47
|
+
: String(item.value);
|
|
48
|
+
if (value.length === 0) {
|
|
49
|
+
value = null;
|
|
50
|
+
}
|
|
51
|
+
else if (value.length > MAX_VALUE_LENGTH) {
|
|
52
|
+
value = `${value.slice(0, MAX_VALUE_LENGTH)}…`;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return `${message} (${field}${value === null ? "" : `: "${value}"`})`;
|
|
56
|
+
};
|
|
9
57
|
/**
|
|
10
58
|
* Returns the error as a string
|
|
11
59
|
* @param {AxiosError} error
|
|
@@ -15,13 +63,11 @@ export const errorToString = (error) => {
|
|
|
15
63
|
try {
|
|
16
64
|
if (error != null) {
|
|
17
65
|
if (error.response?.data) {
|
|
18
|
-
let asString = "";
|
|
19
66
|
const responseData = error.response.data;
|
|
20
67
|
if (Array.isArray(responseData.errors)) {
|
|
21
|
-
responseData.errors
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
return asString;
|
|
68
|
+
return responseData.errors
|
|
69
|
+
.map((item) => validationErrorToString(item))
|
|
70
|
+
.join("; ");
|
|
25
71
|
}
|
|
26
72
|
else if (responseData.error) {
|
|
27
73
|
return responseData.error;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"axiosClient.js","sourceRoot":"","sources":["../../../src/lib/axiosClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAoC,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"axiosClient.js","sourceRoot":"","sources":["../../../src/lib/axiosClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,4 +34,45 @@ export declare const setIntegrationEnabled: (id: string, enabled: boolean, token
|
|
|
34
34
|
* @returns {Promise<object>}
|
|
35
35
|
*/
|
|
36
36
|
export declare const testIntegrationConfiguration: (id: string, type: number, configuration: object, token: string) => Promise<object>;
|
|
37
|
+
/**
|
|
38
|
+
* Get this organization's webhook endpoint for an integration, creating one if it does not have
|
|
39
|
+
* one yet.
|
|
40
|
+
*
|
|
41
|
+
* The returned `endpoint` is the first segment of every webhook URL for this organization and
|
|
42
|
+
* integration: `{backend}/webhooks/{endpoint}/{integrationId}/{path}`. It is per organization, so
|
|
43
|
+
* there is no single URL for an integration — each has its own.
|
|
44
|
+
*
|
|
45
|
+
* A POST rather than a GET because the first call for an organization WRITES: it generates the
|
|
46
|
+
* secret half. It is idempotent from then on, so a configuration screen may call it on every load.
|
|
47
|
+
* @param {String} id The id of the integration whose endpoint is wanted
|
|
48
|
+
* @param {String} token Authorization token
|
|
49
|
+
* @returns {Promise<object>} `{ _id, endpoint }`
|
|
50
|
+
*/
|
|
51
|
+
export declare const getWebhookEndpoint: (id: string, token: string) => Promise<object>;
|
|
52
|
+
/**
|
|
53
|
+
* Replace this organization's webhook endpoint secret for an integration.
|
|
54
|
+
*
|
|
55
|
+
* ⚠️ Destructive beyond StackFactor. The previous URL is configured in whichever outside system
|
|
56
|
+
* calls it, so rotating stops those deliveries until someone updates it there. Use
|
|
57
|
+
* {@link getWebhookEndpoint} to obtain an endpoint; use this only when one has leaked.
|
|
58
|
+
* @param {String} id The id of the integration whose endpoint should be replaced
|
|
59
|
+
* @param {String} token Authorization token
|
|
60
|
+
* @returns {Promise<object>} `{ _id, endpoint }` carrying the NEW endpoint
|
|
61
|
+
*/
|
|
62
|
+
export declare const rotateWebhookEndpoint: (id: string, token: string) => Promise<object>;
|
|
63
|
+
/**
|
|
64
|
+
* Set the user that this organization's tokenless webhook deliveries act as.
|
|
65
|
+
*
|
|
66
|
+
* A webhook authenticated by a provider signature, or by possession of its URL alone, carries no
|
|
67
|
+
* token — so it proves where the request came from but names nobody. This is the identity such
|
|
68
|
+
* deliveries run with, supplying both permissions and an audit subject. Deliveries that DO carry a
|
|
69
|
+
* token ignore it and act as that token's owner.
|
|
70
|
+
*
|
|
71
|
+
* Passing null clears it, which stops those deliveries rather than running them as nobody.
|
|
72
|
+
* @param {String} id The id of the integration
|
|
73
|
+
* @param {String|null} userId A user in this organization, or null to clear
|
|
74
|
+
* @param {String} token Authorization token
|
|
75
|
+
* @returns {Promise<object>} `{ _id, dispatchUserId }`
|
|
76
|
+
*/
|
|
77
|
+
export declare const setWebhookDispatchUser: (id: string, userId: string | null, token: string) => Promise<object>;
|
|
37
78
|
//# sourceMappingURL=integrationConfiguration.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integrationConfiguration.d.ts","sourceRoot":"","sources":["../../../src/lib/integrationConfiguration.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B,GACvC,KAAK,MAAM,EAAE,EACb,OAAO,MAAM,EAAE,EACf,OAAO,MAAM,KACZ,OAAO,CAAC,MAAM,CAmBhB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B,GACvC,IAAI,MAAM,EACV,MAAM,MAAM,EACZ,eAAe,MAAM,EACrB,OAAO,MAAM,KACZ,OAAO,CAAC,MAAM,CAsBhB,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,GAChC,IAAI,MAAM,EACV,SAAS,OAAO,EAChB,OAAO,MAAM,KACZ,OAAO,CAAC,MAAM,CAiBhB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B,GACvC,IAAI,MAAM,EACV,MAAM,MAAM,EACZ,eAAe,MAAM,EACrB,OAAO,MAAM,KACZ,OAAO,CAAC,MAAM,CAsBhB,CAAC"}
|
|
1
|
+
{"version":3,"file":"integrationConfiguration.d.ts","sourceRoot":"","sources":["../../../src/lib/integrationConfiguration.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B,GACvC,KAAK,MAAM,EAAE,EACb,OAAO,MAAM,EAAE,EACf,OAAO,MAAM,KACZ,OAAO,CAAC,MAAM,CAmBhB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B,GACvC,IAAI,MAAM,EACV,MAAM,MAAM,EACZ,eAAe,MAAM,EACrB,OAAO,MAAM,KACZ,OAAO,CAAC,MAAM,CAsBhB,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,GAChC,IAAI,MAAM,EACV,SAAS,OAAO,EAChB,OAAO,MAAM,KACZ,OAAO,CAAC,MAAM,CAiBhB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B,GACvC,IAAI,MAAM,EACV,MAAM,MAAM,EACZ,eAAe,MAAM,EACrB,OAAO,MAAM,KACZ,OAAO,CAAC,MAAM,CAsBhB,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,kBAAkB,GAC7B,IAAI,MAAM,EACV,OAAO,MAAM,KACZ,OAAO,CAAC,MAAM,CAiBhB,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,GAChC,IAAI,MAAM,EACV,OAAO,MAAM,KACZ,OAAO,CAAC,MAAM,CAiBhB,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,sBAAsB,GACjC,IAAI,MAAM,EACV,QAAQ,MAAM,GAAG,IAAI,EACrB,OAAO,MAAM,KACZ,OAAO,CAAC,MAAM,CAiBhB,CAAC"}
|
|
@@ -100,4 +100,84 @@ export const testIntegrationConfiguration = (id, type, configuration, token) =>
|
|
|
100
100
|
});
|
|
101
101
|
});
|
|
102
102
|
};
|
|
103
|
+
/**
|
|
104
|
+
* Get this organization's webhook endpoint for an integration, creating one if it does not have
|
|
105
|
+
* one yet.
|
|
106
|
+
*
|
|
107
|
+
* The returned `endpoint` is the first segment of every webhook URL for this organization and
|
|
108
|
+
* integration: `{backend}/webhooks/{endpoint}/{integrationId}/{path}`. It is per organization, so
|
|
109
|
+
* there is no single URL for an integration — each has its own.
|
|
110
|
+
*
|
|
111
|
+
* A POST rather than a GET because the first call for an organization WRITES: it generates the
|
|
112
|
+
* secret half. It is idempotent from then on, so a configuration screen may call it on every load.
|
|
113
|
+
* @param {String} id The id of the integration whose endpoint is wanted
|
|
114
|
+
* @param {String} token Authorization token
|
|
115
|
+
* @returns {Promise<object>} `{ _id, endpoint }`
|
|
116
|
+
*/
|
|
117
|
+
export const getWebhookEndpoint = (id, token) => {
|
|
118
|
+
return new Promise((resolve, reject) => {
|
|
119
|
+
const request = client.post(`/api/v1/integrationsconfiguration/webhookendpoint`, { id: id }, {
|
|
120
|
+
headers: { authorization: token },
|
|
121
|
+
});
|
|
122
|
+
request
|
|
123
|
+
.then((response) => {
|
|
124
|
+
resolve(response.data);
|
|
125
|
+
})
|
|
126
|
+
.catch((error) => {
|
|
127
|
+
reject(error);
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
};
|
|
131
|
+
/**
|
|
132
|
+
* Replace this organization's webhook endpoint secret for an integration.
|
|
133
|
+
*
|
|
134
|
+
* ⚠️ Destructive beyond StackFactor. The previous URL is configured in whichever outside system
|
|
135
|
+
* calls it, so rotating stops those deliveries until someone updates it there. Use
|
|
136
|
+
* {@link getWebhookEndpoint} to obtain an endpoint; use this only when one has leaked.
|
|
137
|
+
* @param {String} id The id of the integration whose endpoint should be replaced
|
|
138
|
+
* @param {String} token Authorization token
|
|
139
|
+
* @returns {Promise<object>} `{ _id, endpoint }` carrying the NEW endpoint
|
|
140
|
+
*/
|
|
141
|
+
export const rotateWebhookEndpoint = (id, token) => {
|
|
142
|
+
return new Promise((resolve, reject) => {
|
|
143
|
+
const request = client.put(`/api/v1/integrationsconfiguration/webhookendpoint/rotate`, { id: id }, {
|
|
144
|
+
headers: { authorization: token },
|
|
145
|
+
});
|
|
146
|
+
request
|
|
147
|
+
.then((response) => {
|
|
148
|
+
resolve(response.data);
|
|
149
|
+
})
|
|
150
|
+
.catch((error) => {
|
|
151
|
+
reject(error);
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
};
|
|
155
|
+
/**
|
|
156
|
+
* Set the user that this organization's tokenless webhook deliveries act as.
|
|
157
|
+
*
|
|
158
|
+
* A webhook authenticated by a provider signature, or by possession of its URL alone, carries no
|
|
159
|
+
* token — so it proves where the request came from but names nobody. This is the identity such
|
|
160
|
+
* deliveries run with, supplying both permissions and an audit subject. Deliveries that DO carry a
|
|
161
|
+
* token ignore it and act as that token's owner.
|
|
162
|
+
*
|
|
163
|
+
* Passing null clears it, which stops those deliveries rather than running them as nobody.
|
|
164
|
+
* @param {String} id The id of the integration
|
|
165
|
+
* @param {String|null} userId A user in this organization, or null to clear
|
|
166
|
+
* @param {String} token Authorization token
|
|
167
|
+
* @returns {Promise<object>} `{ _id, dispatchUserId }`
|
|
168
|
+
*/
|
|
169
|
+
export const setWebhookDispatchUser = (id, userId, token) => {
|
|
170
|
+
return new Promise((resolve, reject) => {
|
|
171
|
+
const request = client.put(`/api/v1/integrationsconfiguration/webhookdispatchuser`, { id: id, userId: userId }, {
|
|
172
|
+
headers: { authorization: token },
|
|
173
|
+
});
|
|
174
|
+
request
|
|
175
|
+
.then((response) => {
|
|
176
|
+
resolve(response.data);
|
|
177
|
+
})
|
|
178
|
+
.catch((error) => {
|
|
179
|
+
reject(error);
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
};
|
|
103
183
|
//# sourceMappingURL=integrationConfiguration.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integrationConfiguration.js","sourceRoot":"","sources":["../../../src/lib/integrationConfiguration.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"integrationConfiguration.js","sourceRoot":"","sources":["../../../src/lib/integrationConfiguration.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stackfactor/client-api",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.3",
|
|
4
4
|
"description": "Node.js library for the StackFactor API",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"prepublishOnly": "npm run build",
|
|
31
31
|
"test": "jest",
|
|
32
32
|
"lint": "eslint 'src/**/*.{ts,tsx}'",
|
|
33
|
-
"ar-auth": "npm config set @stackfactor:registry https://us-central1-npm.pkg.dev/virtual-development-team/sf-devenv-npm-private/; TOKEN=$(gcloud auth print-access-token 2>/dev/null || curl -sfH 'Metadata-Flavor: Google' http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token | sed -n 's/.*\"access_token\":\"\\([^\"]*\\)\".*/\\1/p'); test -n \"$TOKEN\" || { echo 'ar-auth: no credential — run: gcloud auth login' >&2; exit 1; }; npm config set //us-central1-npm.pkg.dev/virtual-development-team/:_authToken \"$TOKEN\"; echo 'ar-auth: Artifact Registry scope + token configured'",
|
|
33
|
+
"ar-auth": "npm config set @stackfactor:registry https://us-central1-npm.pkg.dev/virtual-development-team/sf-devenv-npm-private/; TOKEN=$(gcloud auth print-access-token 2>/dev/null || curl -sfH 'Metadata-Flavor: Google' http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token | sed -n 's/.*\"access_token\":\"\\([^\"]*\\)\".*/\\1/p'); test -n \"$TOKEN\" || { echo 'ar-auth: no credential — run: gcloud auth login' >&2; exit 1; }; npm config set //us-central1-npm.pkg.dev/virtual-development-team/sf-devenv-npm-private/:_authToken \"$TOKEN\"; npm config set //us-central1-npm.pkg.dev/virtual-development-team/:_authToken \"$TOKEN\"; echo 'ar-auth: Artifact Registry scope + token configured'",
|
|
34
34
|
"reinstall": "npm run ar-auth && npm ci",
|
|
35
35
|
"work:start": "bash scripts/work-start.sh",
|
|
36
36
|
"work:commit": "bash scripts/work-commit.sh",
|