@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@activepieces/piece-netsuite",
3
- "version": "0.0.10",
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.7.0",
14
- "@activepieces/pieces-framework": "0.20.1",
15
- "@activepieces/shared": "0.22.0",
16
- "tslib": "2.8.1"
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.SALES_AND_CRM],
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 parsedUrl = new URL(propsValue['url']['url']);
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,aAAa,CAAC;IACzC,IAAI,EAAE,oBAAY;IAClB,OAAO,EAAE,CAAC,SAAS,CAAC;IACpB,OAAO,EAAE;QACP,sBAAS;QACT,0BAAW;QACX,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,SAAS,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;gBACpD,wEAAwE;gBACxE,MAAM,OAAO,GAAG,GAAG,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;gBAE3D,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,OAAO,EACP,UAAU,CAAC,QAAQ,CAAC,CACrB,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"}
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 baseUrl = `https://${accountId}.suitetalk.api.netsuite.com/services/rest/record/v1/customer/${customerId}`;
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, baseUrl, httpMethod);
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: baseUrl,
30
+ url: requestUrl,
31
31
  headers: {
32
32
  Authorization: authHeader,
33
- 'prefer': 'transient',
34
- 'Cookie': 'NS_ROUTING_VERSION=LAGGING',
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,GAAG,OAAO,CAAC,IAAI,CAAC;YACtF,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;YAE1C,MAAM,OAAO,GAAG,WAAW,SAAS,gEAAgE,UAAU,EAAE,CAAC;YACjH,MAAM,UAAU,GAAG,0BAAU,CAAC,GAAG,CAAC;YAElC,MAAM,UAAU,GAAG,IAAA,yBAAiB,EAClC,SAAS,EACT,WAAW,EACX,cAAc,EACd,OAAO,EACP,WAAW,EACX,OAAO,EACP,UAAU,CACX,CAAC;YAEF,MAAM,QAAQ,GAAG,MAAM,0BAAU,CAAC,WAAW,CAAC;gBAC5C,MAAM,EAAE,UAAU;gBAClB,GAAG,EAAE,OAAO;gBACZ,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU;oBACzB,QAAQ,EAAE,WAAW;oBACrB,QAAQ,EAAE,4BAA4B;iBACvC;aACF,CAAC,CAAC;YAEH,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;KAAA;CACF,CAAC,CAAC"}
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 baseUrl = `https://${accountId}.suitetalk.api.netsuite.com/services/rest/record/v1/vendor/${vendorId}`;
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, baseUrl, httpMethod);
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: baseUrl,
30
+ url: requestUrl,
31
31
  headers: {
32
32
  Authorization: authHeader,
33
- 'prefer': 'transient',
34
- 'Cookie': 'NS_ROUTING_VERSION=LAGGING',
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,GAAG,OAAO,CAAC,IAAI,CAAC;YACtF,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;YAExC,MAAM,OAAO,GAAG,WAAW,SAAS,8DAA8D,QAAQ,EAAE,CAAC;YAC7G,MAAM,UAAU,GAAG,0BAAU,CAAC,GAAG,CAAC;YAElC,MAAM,UAAU,GAAG,IAAA,yBAAiB,EAClC,SAAS,EACT,WAAW,EACX,cAAc,EACd,OAAO,EACP,WAAW,EACX,OAAO,EACP,UAAU,CACX,CAAC;YAEF,MAAM,QAAQ,GAAG,MAAM,0BAAU,CAAC,WAAW,CAAC;gBAC5C,MAAM,EAAE,UAAU;gBAClB,GAAG,EAAE,OAAO;gBACZ,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU;oBACzB,QAAQ,EAAE,WAAW;oBACrB,QAAQ,EAAE,4BAA4B;iBACvC;aACF,CAAC,CAAC;YAEH,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;KAAA;CACF,CAAC,CAAC"}
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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"}
@@ -1,3 +1 @@
1
- export declare function generateNonce(): string;
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(baseUrl, httpMethod, oauthNonce, timestamp, consumerKey, consumerSecret, tokenId, tokenSecret) {
15
- const params = new URLSearchParams({
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(params.toString()),
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, baseUrl, httpMethod) {
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(baseUrl, httpMethod, oauthNonce, timestamp, consumerKey, consumerSecret, tokenId, tokenSecret);
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}"`,
@@ -1 +1 @@
1
- {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../../../../../../packages/pieces/community/netsuite/src/lib/oauth.ts"],"names":[],"mappings":";;AAOA,sCAIC;AAED,8CAmCC;AAED,8CAkCC;AAnFD,mCAAoC;AAGpC,MAAM,WAAW,GAAG,aAAa,CAAC;AAClC,MAAM,aAAa,GAAG,KAAK,CAAC;AAE5B,SAAgB,aAAa;IAC3B,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,MAAM,QAAQ,GAAG,gEAAgE,CAAC;IAClF,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACtG,CAAC;AAED,SAAgB,iBAAiB,CAC/B,OAAe,EACf,UAAkB,EAClB,UAAkB,EAClB,SAAiB,EACjB,WAAmB,EACnB,cAAsB,EACtB,OAAe,EACf,WAAmB;IAEnB,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;QACjC,kBAAkB,EAAE,WAAW;QAC/B,WAAW,EAAE,UAAU;QACvB,sBAAsB,EAAE,WAAW;QACnC,eAAe,EAAE,SAAS,CAAC,QAAQ,EAAE;QACrC,WAAW,EAAE,OAAO;QACpB,aAAa,EAAE,aAAa;KAC7B,CAAC,CAAC;IAEH,MAAM,mBAAmB,GAAG;QAC1B,UAAU;QACV,kBAAkB,CAAC,OAAO,CAAC;QAC3B,kBAAkB,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;KACtC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEZ,MAAM,UAAU,GAAG;QACjB,kBAAkB,CAAC,cAAc,CAAC;QAClC,kBAAkB,CAAC,WAAW,CAAC;KAChC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEZ,MAAM,IAAI,GAAG,IAAA,mBAAU,EAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IACjC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAExC,OAAO,kBAAkB,CAAC,SAAS,CAAC,CAAC;AACvC,CAAC;AAED,SAAgB,iBAAiB,CAC/B,SAAiB,EACjB,WAAmB,EACnB,cAAsB,EACtB,OAAe,EACf,WAAmB,EACnB,OAAe,EACf,UAAkB;IAElB,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,iBAAiB,CACjC,OAAO,EACP,UAAU,EACV,UAAU,EACV,SAAS,EACT,WAAW,EACX,cAAc,EACd,OAAO,EACP,WAAW,CACZ,CAAC;IAEF,MAAM,YAAY,GAAG;QACnB,UAAU,SAAS,GAAG;QACtB,gBAAgB,OAAO,GAAG;QAC1B,uBAAuB,WAAW,GAAG;QACrC,gBAAgB,UAAU,GAAG;QAC7B,oBAAoB,SAAS,GAAG;QAChC,2BAA2B,WAAW,GAAG;QACzC,kBAAkB,aAAa,GAAG;QAClC,oBAAoB,SAAS,GAAG;KACjC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEZ,OAAO,SAAS,YAAY,EAAE,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../../../../../../packages/pieces/community/netsuite/src/lib/oauth.ts"],"names":[],"mappings":";;AA6EA,8CAoCC;AAjHD,mCAAoC;AAEpC,MAAM,WAAW,GAAG,aAAa,CAAC;AAClC,MAAM,aAAa,GAAG,KAAK,CAAC;AAE5B,SAAS,aAAa;IACpB,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,MAAM,QAAQ,GACZ,gEAAgE,CAAC;IACnE,OAAO,KAAK,CAAC,IAAI,CACf,EAAE,MAAM,EAAE,EACV,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAC5D,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACb,CAAC;AAED,SAAS,iBAAiB,CACxB,UAAkB,EAClB,UAAkB,EAClB,UAAkB,EAClB,SAAiB,EACjB,WAAmB,EACnB,cAAsB,EACtB,OAAe,EACf,WAAmB,EACnB,WAAuD;IAEvD,sDAAsD;IACtD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,GAAG,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;IAE3D,2BAA2B;IAC3B,MAAM,SAAS,GAA2B;QACxC,kBAAkB,EAAE,WAAW;QAC/B,WAAW,EAAE,UAAU;QACvB,sBAAsB,EAAE,WAAW;QACnC,eAAe,EAAE,SAAS,CAAC,QAAQ,EAAE;QACrC,WAAW,EAAE,OAAO;QACpB,aAAa,EAAE,aAAa;KAC7B,CAAC;IAEF,oCAAoC;IACpC,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QAC5C,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,6EAA6E;IAC7E,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YACnD,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,yDAAyD;IACzD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;IACjD,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAC/B,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,kBAAkB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAC5E,CAAC;IACF,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEzC,MAAM,mBAAmB,GAAG;QAC1B,UAAU,CAAC,WAAW,EAAE;QACxB,kBAAkB,CAAC,OAAO,CAAC;QAC3B,kBAAkB,CAAC,WAAW,CAAC;KAChC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEZ,MAAM,UAAU,GAAG;QACjB,kBAAkB,CAAC,cAAc,CAAC;QAClC,kBAAkB,CAAC,WAAW,CAAC;KAChC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEZ,MAAM,IAAI,GAAG,IAAA,mBAAU,EAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IACjC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAExC,OAAO,kBAAkB,CAAC,SAAS,CAAC,CAAC;AACvC,CAAC;AAED,SAAgB,iBAAiB,CAC/B,SAAiB,EACjB,WAAmB,EACnB,cAAsB,EACtB,OAAe,EACf,WAAmB,EACnB,UAAkB,EAClB,UAAkB,EAClB,WAAuD;IAEvD,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,iBAAiB,CACjC,UAAU,EACV,UAAU,EACV,UAAU,EACV,SAAS,EACT,WAAW,EACX,cAAc,EACd,OAAO,EACP,WAAW,EACX,WAAW,CACZ,CAAC;IAEF,MAAM,YAAY,GAAG;QACnB,UAAU,SAAS,GAAG;QACtB,gBAAgB,OAAO,GAAG;QAC1B,uBAAuB,WAAW,GAAG;QACrC,gBAAgB,UAAU,GAAG;QAC7B,oBAAoB,SAAS,GAAG;QAChC,2BAA2B,WAAW,GAAG;QACzC,kBAAkB,aAAa,GAAG;QAClC,oBAAoB,SAAS,GAAG;KACjC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEZ,OAAO,SAAS,YAAY,EAAE,CAAC;AACjC,CAAC"}