@activepieces/piece-netsuite 0.0.10 → 0.0.12
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/package.json +7 -13
- package/src/index.js +5 -6
- package/src/index.js.map +1 -1
- package/src/lib/actions/get-customer.js +5 -5
- package/src/lib/actions/get-customer.js.map +1 -1
- package/src/lib/actions/get-vendor.js +5 -5
- package/src/lib/actions/get-vendor.js.map +1 -1
- package/src/lib/actions/run-suiteql.d.ts +11 -0
- package/src/lib/actions/run-suiteql.js +87 -0
- package/src/lib/actions/run-suiteql.js.map +1 -0
- package/src/lib/oauth.d.ts +1 -3
- package/src/lib/oauth.js +24 -8
- package/src/lib/oauth.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@activepieces/piece-netsuite",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.12",
|
|
4
4
|
"dependencies": {
|
|
5
5
|
"@sinclair/typebox": "0.34.11",
|
|
6
6
|
"axios": "1.8.3",
|
|
@@ -9,19 +9,13 @@
|
|
|
9
9
|
"mime-types": "2.1.35",
|
|
10
10
|
"nanoid": "3.3.8",
|
|
11
11
|
"semver": "7.6.0",
|
|
12
|
+
"socket.io-client": "4.8.1",
|
|
13
|
+
"sql-formatter": "15.6.10",
|
|
12
14
|
"zod": "3.25.76",
|
|
13
|
-
"@activepieces/pieces-common": "0.
|
|
14
|
-
"@activepieces/pieces-framework": "0.20.
|
|
15
|
-
"@activepieces/shared": "0.
|
|
16
|
-
"tslib": "2.
|
|
17
|
-
},
|
|
18
|
-
"overrides": {
|
|
19
|
-
"@tryfabric/martian": {
|
|
20
|
-
"@notionhq/client": "$@notionhq/client"
|
|
21
|
-
},
|
|
22
|
-
"vite": {
|
|
23
|
-
"rollup": "npm:@rollup/wasm-node"
|
|
24
|
-
}
|
|
15
|
+
"@activepieces/pieces-common": "0.8.1",
|
|
16
|
+
"@activepieces/pieces-framework": "0.20.2",
|
|
17
|
+
"@activepieces/shared": "0.25.2",
|
|
18
|
+
"tslib": "2.6.2"
|
|
25
19
|
},
|
|
26
20
|
"resolutions": {
|
|
27
21
|
"rollup": "npm:@rollup/wasm-node"
|
package/src/index.js
CHANGED
|
@@ -5,6 +5,7 @@ const tslib_1 = require("tslib");
|
|
|
5
5
|
const pieces_framework_1 = require("@activepieces/pieces-framework");
|
|
6
6
|
const get_vendor_1 = require("./lib/actions/get-vendor");
|
|
7
7
|
const get_customer_1 = require("./lib/actions/get-customer");
|
|
8
|
+
const run_suiteql_1 = require("./lib/actions/run-suiteql");
|
|
8
9
|
const shared_1 = require("@activepieces/shared");
|
|
9
10
|
const pieces_common_1 = require("@activepieces/pieces-common");
|
|
10
11
|
const oauth_1 = require("./lib/oauth");
|
|
@@ -41,12 +42,13 @@ exports.netsuiteAuth = pieces_framework_1.PieceAuth.CustomAuth({
|
|
|
41
42
|
exports.netsuite = (0, pieces_framework_1.createPiece)({
|
|
42
43
|
displayName: 'NetSuite',
|
|
43
44
|
logoUrl: 'https://cdn.activepieces.com/pieces/netsuite.png',
|
|
44
|
-
categories: [shared_1.PieceCategory.
|
|
45
|
+
categories: [shared_1.PieceCategory.ACCOUNTING],
|
|
45
46
|
auth: exports.netsuiteAuth,
|
|
46
|
-
authors: ['geekyme'],
|
|
47
|
+
authors: ['geekyme', 'danielpoonwj'],
|
|
47
48
|
actions: [
|
|
48
49
|
get_vendor_1.getVendor,
|
|
49
50
|
get_customer_1.getCustomer,
|
|
51
|
+
run_suiteql_1.runSuiteQL,
|
|
50
52
|
(0, pieces_common_1.createCustomApiCallAction)({
|
|
51
53
|
baseUrl: (auth) => {
|
|
52
54
|
const authValue = auth;
|
|
@@ -55,10 +57,7 @@ exports.netsuite = (0, pieces_framework_1.createPiece)({
|
|
|
55
57
|
auth: exports.netsuiteAuth,
|
|
56
58
|
authMapping: (auth, propsValue) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
57
59
|
const authValue = auth;
|
|
58
|
-
const
|
|
59
|
-
// sanitize cases where params etc are entered directly in the url field
|
|
60
|
-
const baseUrl = `${parsedUrl.origin}${parsedUrl.pathname}`;
|
|
61
|
-
const authHeader = (0, oauth_1.createOAuthHeader)(authValue.accountId, authValue.consumerKey, authValue.consumerSecret, authValue.tokenId, authValue.tokenSecret, baseUrl, propsValue['method']);
|
|
60
|
+
const authHeader = (0, oauth_1.createOAuthHeader)(authValue.accountId, authValue.consumerKey, authValue.consumerSecret, authValue.tokenId, authValue.tokenSecret, propsValue['url']['url'], propsValue['method'], propsValue['queryParams']);
|
|
62
61
|
return {
|
|
63
62
|
Authorization: authHeader,
|
|
64
63
|
prefer: 'transient',
|
package/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/pieces/community/netsuite/src/index.ts"],"names":[],"mappings":";;;;AAAA,qEAKwC;AACxC,yDAAqD;AACrD,6DAAyD;AACzD,iDAAqD;AACrD,+DAAwE;AACxE,uCAAgD;AAEnC,QAAA,YAAY,GAAG,4BAAS,CAAC,UAAU,CAAC;IAC/C,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE;QACL,SAAS,EAAE,2BAAQ,CAAC,SAAS,CAAC;YAC5B,WAAW,EAAE,YAAY;YACzB,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,0BAA0B;SACxC,CAAC;QACF,WAAW,EAAE,2BAAQ,CAAC,SAAS,CAAC;YAC9B,WAAW,EAAE,cAAc;YAC3B,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,4BAA4B;SAC1C,CAAC;QACF,cAAc,EAAE,4BAAS,CAAC,UAAU,CAAC;YACnC,WAAW,EAAE,iBAAiB;YAC9B,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,+BAA+B;SAC7C,CAAC;QACF,OAAO,EAAE,2BAAQ,CAAC,SAAS,CAAC;YAC1B,WAAW,EAAE,UAAU;YACvB,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,wBAAwB;SACtC,CAAC;QACF,WAAW,EAAE,4BAAS,CAAC,UAAU,CAAC;YAChC,WAAW,EAAE,cAAc;YAC3B,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,4BAA4B;SAC1C,CAAC;KACH;CACF,CAAC,CAAC;AAEU,QAAA,QAAQ,GAAG,IAAA,8BAAW,EAAC;IAClC,WAAW,EAAE,UAAU;IACvB,OAAO,EAAE,kDAAkD;IAC3D,UAAU,EAAE,CAAC,sBAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/pieces/community/netsuite/src/index.ts"],"names":[],"mappings":";;;;AAAA,qEAKwC;AACxC,yDAAqD;AACrD,6DAAyD;AACzD,2DAAuD;AACvD,iDAAqD;AACrD,+DAAwE;AACxE,uCAAgD;AAEnC,QAAA,YAAY,GAAG,4BAAS,CAAC,UAAU,CAAC;IAC/C,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE;QACL,SAAS,EAAE,2BAAQ,CAAC,SAAS,CAAC;YAC5B,WAAW,EAAE,YAAY;YACzB,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,0BAA0B;SACxC,CAAC;QACF,WAAW,EAAE,2BAAQ,CAAC,SAAS,CAAC;YAC9B,WAAW,EAAE,cAAc;YAC3B,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,4BAA4B;SAC1C,CAAC;QACF,cAAc,EAAE,4BAAS,CAAC,UAAU,CAAC;YACnC,WAAW,EAAE,iBAAiB;YAC9B,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,+BAA+B;SAC7C,CAAC;QACF,OAAO,EAAE,2BAAQ,CAAC,SAAS,CAAC;YAC1B,WAAW,EAAE,UAAU;YACvB,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,wBAAwB;SACtC,CAAC;QACF,WAAW,EAAE,4BAAS,CAAC,UAAU,CAAC;YAChC,WAAW,EAAE,cAAc;YAC3B,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,4BAA4B;SAC1C,CAAC;KACH;CACF,CAAC,CAAC;AAEU,QAAA,QAAQ,GAAG,IAAA,8BAAW,EAAC;IAClC,WAAW,EAAE,UAAU;IACvB,OAAO,EAAE,kDAAkD;IAC3D,UAAU,EAAE,CAAC,sBAAa,CAAC,UAAU,CAAC;IACtC,IAAI,EAAE,oBAAY;IAClB,OAAO,EAAE,CAAC,SAAS,EAAE,cAAc,CAAC;IACpC,OAAO,EAAE;QACP,sBAAS;QACT,0BAAW;QACX,wBAAU;QACV,IAAA,yCAAyB,EAAC;YACxB,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBAChB,MAAM,SAAS,GAAG,IAAiD,CAAC;gBACpE,OAAO,WAAW,SAAS,CAAC,SAAS,6BAA6B,CAAC;YACrE,CAAC;YACD,IAAI,EAAE,oBAAY;YAClB,WAAW,EAAE,CAAO,IAAI,EAAE,UAAU,EAAE,EAAE;gBACtC,MAAM,SAAS,GAAG,IAAiD,CAAC;gBAEpE,MAAM,UAAU,GAAG,IAAA,yBAAiB,EAClC,SAAS,CAAC,SAAS,EACnB,SAAS,CAAC,WAAW,EACrB,SAAS,CAAC,cAAc,EACxB,SAAS,CAAC,OAAO,EACjB,SAAS,CAAC,WAAW,EACrB,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EACxB,UAAU,CAAC,QAAQ,CAAC,EACpB,UAAU,CAAC,aAAa,CAAC,CAC1B,CAAC;gBAEF,OAAO;oBACL,aAAa,EAAE,UAAU;oBACzB,MAAM,EAAE,WAAW;oBACnB,MAAM,EAAE,4BAA4B;iBACrC,CAAC;YACJ,CAAC,CAAA;SACF,CAAC;KACH;IACD,QAAQ,EAAE,EAAE;CACb,CAAC,CAAC"}
|
|
@@ -22,16 +22,16 @@ exports.getCustomer = (0, pieces_framework_1.createAction)({
|
|
|
22
22
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
23
23
|
const { accountId, consumerKey, consumerSecret, tokenId, tokenSecret } = context.auth;
|
|
24
24
|
const { customerId } = context.propsValue;
|
|
25
|
-
const
|
|
25
|
+
const requestUrl = `https://${accountId}.suitetalk.api.netsuite.com/services/rest/record/v1/customer/${customerId}`;
|
|
26
26
|
const httpMethod = pieces_common_1.HttpMethod.GET;
|
|
27
|
-
const authHeader = (0, oauth_1.createOAuthHeader)(accountId, consumerKey, consumerSecret, tokenId, tokenSecret,
|
|
27
|
+
const authHeader = (0, oauth_1.createOAuthHeader)(accountId, consumerKey, consumerSecret, tokenId, tokenSecret, requestUrl, httpMethod);
|
|
28
28
|
const response = yield pieces_common_1.httpClient.sendRequest({
|
|
29
29
|
method: httpMethod,
|
|
30
|
-
url:
|
|
30
|
+
url: requestUrl,
|
|
31
31
|
headers: {
|
|
32
32
|
Authorization: authHeader,
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
prefer: 'transient',
|
|
34
|
+
Cookie: 'NS_ROUTING_VERSION=LAGGING',
|
|
35
35
|
},
|
|
36
36
|
});
|
|
37
37
|
return response.body;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-customer.js","sourceRoot":"","sources":["../../../../../../../../packages/pieces/community/netsuite/src/lib/actions/get-customer.ts"],"names":[],"mappings":";;;;AAAA,qEAAwE;AACxE,+DAAqE;AACrE,6BAAqC;AACrC,oCAA6C;AAEhC,QAAA,WAAW,GAAG,IAAA,+BAAY,EAAC;IACtC,IAAI,EAAE,aAAa;IACnB,IAAI,EAAE,gBAAY;IAClB,WAAW,EAAE,cAAc;IAC3B,WAAW,EAAE,sCAAsC;IACnD,KAAK,EAAE;QACL,UAAU,EAAE,2BAAQ,CAAC,SAAS,CAAC;YAC7B,WAAW,EAAE,aAAa;YAC1B,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,qCAAqC;SACnD,CAAC;KACH;IACK,GAAG,CAAC,OAAO;;YACf,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"get-customer.js","sourceRoot":"","sources":["../../../../../../../../packages/pieces/community/netsuite/src/lib/actions/get-customer.ts"],"names":[],"mappings":";;;;AAAA,qEAAwE;AACxE,+DAAqE;AACrE,6BAAqC;AACrC,oCAA6C;AAEhC,QAAA,WAAW,GAAG,IAAA,+BAAY,EAAC;IACtC,IAAI,EAAE,aAAa;IACnB,IAAI,EAAE,gBAAY;IAClB,WAAW,EAAE,cAAc;IAC3B,WAAW,EAAE,sCAAsC;IACnD,KAAK,EAAE;QACL,UAAU,EAAE,2BAAQ,CAAC,SAAS,CAAC;YAC7B,WAAW,EAAE,aAAa;YAC1B,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,qCAAqC;SACnD,CAAC;KACH;IACK,GAAG,CAAC,OAAO;;YACf,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,GACpE,OAAO,CAAC,IAAI,CAAC;YACf,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;YAE1C,MAAM,UAAU,GAAG,WAAW,SAAS,gEAAgE,UAAU,EAAE,CAAC;YACpH,MAAM,UAAU,GAAG,0BAAU,CAAC,GAAG,CAAC;YAElC,MAAM,UAAU,GAAG,IAAA,yBAAiB,EAClC,SAAS,EACT,WAAW,EACX,cAAc,EACd,OAAO,EACP,WAAW,EACX,UAAU,EACV,UAAU,CACX,CAAC;YAEF,MAAM,QAAQ,GAAG,MAAM,0BAAU,CAAC,WAAW,CAAC;gBAC5C,MAAM,EAAE,UAAU;gBAClB,GAAG,EAAE,UAAU;gBACf,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU;oBACzB,MAAM,EAAE,WAAW;oBACnB,MAAM,EAAE,4BAA4B;iBACrC;aACF,CAAC,CAAC;YAEH,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;KAAA;CACF,CAAC,CAAC"}
|
|
@@ -22,16 +22,16 @@ exports.getVendor = (0, pieces_framework_1.createAction)({
|
|
|
22
22
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
23
23
|
const { accountId, consumerKey, consumerSecret, tokenId, tokenSecret } = context.auth;
|
|
24
24
|
const { vendorId } = context.propsValue;
|
|
25
|
-
const
|
|
25
|
+
const requestUrl = `https://${accountId}.suitetalk.api.netsuite.com/services/rest/record/v1/vendor/${vendorId}`;
|
|
26
26
|
const httpMethod = pieces_common_1.HttpMethod.GET;
|
|
27
|
-
const authHeader = (0, oauth_1.createOAuthHeader)(accountId, consumerKey, consumerSecret, tokenId, tokenSecret,
|
|
27
|
+
const authHeader = (0, oauth_1.createOAuthHeader)(accountId, consumerKey, consumerSecret, tokenId, tokenSecret, requestUrl, httpMethod);
|
|
28
28
|
const response = yield pieces_common_1.httpClient.sendRequest({
|
|
29
29
|
method: httpMethod,
|
|
30
|
-
url:
|
|
30
|
+
url: requestUrl,
|
|
31
31
|
headers: {
|
|
32
32
|
Authorization: authHeader,
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
prefer: 'transient',
|
|
34
|
+
Cookie: 'NS_ROUTING_VERSION=LAGGING',
|
|
35
35
|
},
|
|
36
36
|
});
|
|
37
37
|
return response.body;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-vendor.js","sourceRoot":"","sources":["../../../../../../../../packages/pieces/community/netsuite/src/lib/actions/get-vendor.ts"],"names":[],"mappings":";;;;AAAA,qEAAwE;AACxE,+DAAqE;AACrE,6BAAqC;AACrC,oCAA6C;AAEhC,QAAA,SAAS,GAAG,IAAA,+BAAY,EAAC;IACpC,IAAI,EAAE,WAAW;IACjB,IAAI,EAAE,gBAAY;IAClB,WAAW,EAAE,YAAY;IACzB,WAAW,EAAE,oCAAoC;IACjD,KAAK,EAAE;QACL,QAAQ,EAAE,2BAAQ,CAAC,SAAS,CAAC;YAC3B,WAAW,EAAE,WAAW;YACxB,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,mCAAmC;SACjD,CAAC;KACH;IACK,GAAG,CAAC,OAAO;;YACf,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"get-vendor.js","sourceRoot":"","sources":["../../../../../../../../packages/pieces/community/netsuite/src/lib/actions/get-vendor.ts"],"names":[],"mappings":";;;;AAAA,qEAAwE;AACxE,+DAAqE;AACrE,6BAAqC;AACrC,oCAA6C;AAEhC,QAAA,SAAS,GAAG,IAAA,+BAAY,EAAC;IACpC,IAAI,EAAE,WAAW;IACjB,IAAI,EAAE,gBAAY;IAClB,WAAW,EAAE,YAAY;IACzB,WAAW,EAAE,oCAAoC;IACjD,KAAK,EAAE;QACL,QAAQ,EAAE,2BAAQ,CAAC,SAAS,CAAC;YAC3B,WAAW,EAAE,WAAW;YACxB,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,mCAAmC;SACjD,CAAC;KACH;IACK,GAAG,CAAC,OAAO;;YACf,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,GACpE,OAAO,CAAC,IAAI,CAAC;YACf,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;YAExC,MAAM,UAAU,GAAG,WAAW,SAAS,8DAA8D,QAAQ,EAAE,CAAC;YAChH,MAAM,UAAU,GAAG,0BAAU,CAAC,GAAG,CAAC;YAElC,MAAM,UAAU,GAAG,IAAA,yBAAiB,EAClC,SAAS,EACT,WAAW,EACX,cAAc,EACd,OAAO,EACP,WAAW,EACX,UAAU,EACV,UAAU,CACX,CAAC;YAEF,MAAM,QAAQ,GAAG,MAAM,0BAAU,CAAC,WAAW,CAAC;gBAC5C,MAAM,EAAE,UAAU;gBAClB,GAAG,EAAE,UAAU;gBACf,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU;oBACzB,MAAM,EAAE,WAAW;oBACnB,MAAM,EAAE,4BAA4B;iBACrC;aACF,CAAC,CAAC;YAEH,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;KAAA;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const runSuiteQL: import("@activepieces/pieces-framework").IAction<import("@activepieces/pieces-framework").CustomAuthProperty<{
|
|
2
|
+
accountId: import("@activepieces/pieces-framework").ShortTextProperty<true>;
|
|
3
|
+
consumerKey: import("@activepieces/pieces-framework").ShortTextProperty<true>;
|
|
4
|
+
consumerSecret: import("@activepieces/pieces-framework").SecretTextProperty<true>;
|
|
5
|
+
tokenId: import("@activepieces/pieces-framework").ShortTextProperty<true>;
|
|
6
|
+
tokenSecret: import("@activepieces/pieces-framework").SecretTextProperty<true>;
|
|
7
|
+
}>, {
|
|
8
|
+
markdown: import("dist/packages/pieces/community/framework/src/lib/property/input/markdown-property").MarkDownProperty;
|
|
9
|
+
query: import("@activepieces/pieces-framework").ShortTextProperty<true>;
|
|
10
|
+
args: import("@activepieces/pieces-framework").ArrayProperty<false>;
|
|
11
|
+
}>;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runSuiteQL = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const pieces_framework_1 = require("@activepieces/pieces-framework");
|
|
6
|
+
const pieces_common_1 = require("@activepieces/pieces-common");
|
|
7
|
+
const __1 = require("../..");
|
|
8
|
+
const oauth_1 = require("../oauth");
|
|
9
|
+
const sql_formatter_1 = require("sql-formatter");
|
|
10
|
+
const PAGE_SIZE = 1000;
|
|
11
|
+
const mkdown = `
|
|
12
|
+
- **DO NOT** insert dynamic input directly into the query string. Instead, use :1, :2, :3 and add them in args for parameterized queries
|
|
13
|
+
- Arguments are treated as string and inserted as a [Text Literal](https://docs.oracle.com/en/database/oracle/oracle-database/26/sqlrf/Literals.html)
|
|
14
|
+
`;
|
|
15
|
+
exports.runSuiteQL = (0, pieces_framework_1.createAction)({
|
|
16
|
+
name: 'runSuiteQL',
|
|
17
|
+
auth: __1.netsuiteAuth,
|
|
18
|
+
displayName: 'Run SuiteQL Query',
|
|
19
|
+
description: 'Run SuiteQL Query on NetSuite.',
|
|
20
|
+
props: {
|
|
21
|
+
markdown: pieces_framework_1.Property.MarkDown({
|
|
22
|
+
value: mkdown,
|
|
23
|
+
}),
|
|
24
|
+
query: pieces_framework_1.Property.ShortText({
|
|
25
|
+
displayName: 'Query',
|
|
26
|
+
description: 'Please use :1, :2, :3 etc. for parameterized queries',
|
|
27
|
+
required: true,
|
|
28
|
+
}),
|
|
29
|
+
args: pieces_framework_1.Property.Array({
|
|
30
|
+
displayName: 'Arguments',
|
|
31
|
+
description: 'Arguments to be used in the query',
|
|
32
|
+
required: false,
|
|
33
|
+
}),
|
|
34
|
+
},
|
|
35
|
+
run(context) {
|
|
36
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
37
|
+
var _a, _b;
|
|
38
|
+
const { accountId, consumerKey, consumerSecret, tokenId, tokenSecret } = context.auth;
|
|
39
|
+
const query = context.propsValue.query;
|
|
40
|
+
const args = context.propsValue.args || [];
|
|
41
|
+
// numbered placeholders: https://github.com/sql-formatter-org/sql-formatter/blob/master/docs/params.md#numbered-placeholders
|
|
42
|
+
const formattedArgs = args.reduce((acc, arg, idx) => {
|
|
43
|
+
// numbered placeholders are 1 indexed
|
|
44
|
+
const argNum = idx + 1;
|
|
45
|
+
// use q notation to escape quotes
|
|
46
|
+
acc[argNum] = `q'{${arg}}'`;
|
|
47
|
+
return acc;
|
|
48
|
+
}, {});
|
|
49
|
+
// netsuite uses oracle sql: https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_156257790831.html
|
|
50
|
+
const formattedSQL = (0, sql_formatter_1.format)(query, {
|
|
51
|
+
language: 'plsql',
|
|
52
|
+
params: formattedArgs,
|
|
53
|
+
});
|
|
54
|
+
const results = [];
|
|
55
|
+
let pageOffset = 0;
|
|
56
|
+
let hasMore = true;
|
|
57
|
+
const requestUrl = `https://${accountId}.suitetalk.api.netsuite.com/services/rest/query/v1/suiteql`;
|
|
58
|
+
const httpMethod = pieces_common_1.HttpMethod.POST;
|
|
59
|
+
// paginate results: https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_156414087576.html
|
|
60
|
+
while (hasMore) {
|
|
61
|
+
const queryParams = {
|
|
62
|
+
limit: String(PAGE_SIZE),
|
|
63
|
+
offset: String(pageOffset),
|
|
64
|
+
};
|
|
65
|
+
const authHeader = (0, oauth_1.createOAuthHeader)(accountId, consumerKey, consumerSecret, tokenId, tokenSecret, requestUrl, httpMethod, queryParams);
|
|
66
|
+
const response = yield pieces_common_1.httpClient.sendRequest({
|
|
67
|
+
method: httpMethod,
|
|
68
|
+
url: requestUrl,
|
|
69
|
+
headers: {
|
|
70
|
+
Authorization: authHeader,
|
|
71
|
+
prefer: 'transient',
|
|
72
|
+
Cookie: 'NS_ROUTING_VERSION=LAGGING',
|
|
73
|
+
},
|
|
74
|
+
body: {
|
|
75
|
+
q: formattedSQL,
|
|
76
|
+
},
|
|
77
|
+
queryParams: queryParams,
|
|
78
|
+
});
|
|
79
|
+
results.push(...(((_a = response.body) === null || _a === void 0 ? void 0 : _a.items) || []));
|
|
80
|
+
hasMore = ((_b = response.body) === null || _b === void 0 ? void 0 : _b.hasMore) || false;
|
|
81
|
+
pageOffset += PAGE_SIZE;
|
|
82
|
+
}
|
|
83
|
+
return results;
|
|
84
|
+
});
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
//# sourceMappingURL=run-suiteql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-suiteql.js","sourceRoot":"","sources":["../../../../../../../../packages/pieces/community/netsuite/src/lib/actions/run-suiteql.ts"],"names":[],"mappings":"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"}
|
package/src/lib/oauth.d.ts
CHANGED
|
@@ -1,3 +1 @@
|
|
|
1
|
-
export declare function
|
|
2
|
-
export declare function generateSignature(baseUrl: string, httpMethod: string, oauthNonce: string, timestamp: number, consumerKey: string, consumerSecret: string, tokenId: string, tokenSecret: string): string;
|
|
3
|
-
export declare function createOAuthHeader(accountId: string, consumerKey: string, consumerSecret: string, tokenId: string, tokenSecret: string, baseUrl: string, httpMethod: string): string;
|
|
1
|
+
export declare function createOAuthHeader(accountId: string, consumerKey: string, consumerSecret: string, tokenId: string, tokenSecret: string, requestUrl: string, httpMethod: string, queryParams?: Record<string, string | number | boolean>): string;
|
package/src/lib/oauth.js
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.generateNonce = generateNonce;
|
|
4
|
-
exports.generateSignature = generateSignature;
|
|
5
3
|
exports.createOAuthHeader = createOAuthHeader;
|
|
6
4
|
const crypto_1 = require("crypto");
|
|
7
5
|
const SIGN_METHOD = 'HMAC-SHA256';
|
|
@@ -11,19 +9,37 @@ function generateNonce() {
|
|
|
11
9
|
const possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
|
12
10
|
return Array.from({ length }, () => possible[Math.floor(Math.random() * possible.length)]).join('');
|
|
13
11
|
}
|
|
14
|
-
function generateSignature(
|
|
15
|
-
|
|
12
|
+
function generateSignature(requestUrl, httpMethod, oauthNonce, timestamp, consumerKey, consumerSecret, tokenId, tokenSecret, queryParams) {
|
|
13
|
+
// Parse URL to get base URL and existing query params
|
|
14
|
+
const parsedUrl = new URL(requestUrl);
|
|
15
|
+
const baseUrl = `${parsedUrl.origin}${parsedUrl.pathname}`;
|
|
16
|
+
// Collect OAuth parameters
|
|
17
|
+
const allParams = {
|
|
16
18
|
oauth_consumer_key: consumerKey,
|
|
17
19
|
oauth_nonce: oauthNonce,
|
|
18
20
|
oauth_signature_method: SIGN_METHOD,
|
|
19
21
|
oauth_timestamp: timestamp.toString(),
|
|
20
22
|
oauth_token: tokenId,
|
|
21
23
|
oauth_version: OAUTH_VERSION,
|
|
24
|
+
};
|
|
25
|
+
// Include query parameters from URL
|
|
26
|
+
parsedUrl.searchParams.forEach((value, key) => {
|
|
27
|
+
allParams[key] = value;
|
|
22
28
|
});
|
|
29
|
+
// Include additional query parameters (will override URL params if same key)
|
|
30
|
+
if (queryParams) {
|
|
31
|
+
Object.entries(queryParams).forEach(([key, value]) => {
|
|
32
|
+
allParams[key] = String(value);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
// Sort parameters by key, then by value (OAuth 1.0 spec)
|
|
36
|
+
const sortedKeys = Object.keys(allParams).sort();
|
|
37
|
+
const paramPairs = sortedKeys.map((key) => `${encodeURIComponent(key)}=${encodeURIComponent(allParams[key])}`);
|
|
38
|
+
const paramString = paramPairs.join('&');
|
|
23
39
|
const signatureBaseString = [
|
|
24
|
-
httpMethod,
|
|
40
|
+
httpMethod.toUpperCase(),
|
|
25
41
|
encodeURIComponent(baseUrl),
|
|
26
|
-
encodeURIComponent(
|
|
42
|
+
encodeURIComponent(paramString),
|
|
27
43
|
].join('&');
|
|
28
44
|
const signingKey = [
|
|
29
45
|
encodeURIComponent(consumerSecret),
|
|
@@ -34,10 +50,10 @@ function generateSignature(baseUrl, httpMethod, oauthNonce, timestamp, consumerK
|
|
|
34
50
|
const signature = hmac.digest('base64');
|
|
35
51
|
return encodeURIComponent(signature);
|
|
36
52
|
}
|
|
37
|
-
function createOAuthHeader(accountId, consumerKey, consumerSecret, tokenId, tokenSecret,
|
|
53
|
+
function createOAuthHeader(accountId, consumerKey, consumerSecret, tokenId, tokenSecret, requestUrl, httpMethod, queryParams) {
|
|
38
54
|
const oauthNonce = generateNonce();
|
|
39
55
|
const timestamp = Math.floor(Date.now() / 1000);
|
|
40
|
-
const signature = generateSignature(
|
|
56
|
+
const signature = generateSignature(requestUrl, httpMethod, oauthNonce, timestamp, consumerKey, consumerSecret, tokenId, tokenSecret, queryParams);
|
|
41
57
|
const headerParams = [
|
|
42
58
|
`realm="${accountId}"`,
|
|
43
59
|
`oauth_token="${tokenId}"`,
|
package/src/lib/oauth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../../../../../../packages/pieces/community/netsuite/src/lib/oauth.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../../../../../../packages/pieces/community/netsuite/src/lib/oauth.ts"],"names":[],"mappings":"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"}
|