@activepieces/piece-netsuite 0.1.8 → 0.1.10
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 +34 -76
- package/src/index.d.ts +0 -15
- package/src/index.d.ts.map +0 -1
- package/src/index.js.map +0 -1
- package/src/lib/actions/execute-dataset.d.ts +0 -16
- package/src/lib/actions/execute-dataset.d.ts.map +0 -1
- package/src/lib/actions/execute-dataset.js +0 -59
- package/src/lib/actions/execute-dataset.js.map +0 -1
- package/src/lib/actions/get-customer.d.ts +0 -10
- package/src/lib/actions/get-customer.d.ts.map +0 -1
- package/src/lib/actions/get-customer.js +0 -37
- package/src/lib/actions/get-customer.js.map +0 -1
- package/src/lib/actions/get-vendor.d.ts +0 -10
- package/src/lib/actions/get-vendor.d.ts.map +0 -1
- package/src/lib/actions/get-vendor.js +0 -37
- package/src/lib/actions/get-vendor.js.map +0 -1
- package/src/lib/actions/run-suiteql.d.ts +0 -12
- package/src/lib/actions/run-suiteql.d.ts.map +0 -1
- package/src/lib/actions/run-suiteql.js +0 -67
- package/src/lib/actions/run-suiteql.js.map +0 -1
- package/src/lib/common/client.d.ts +0 -23
- package/src/lib/common/client.d.ts.map +0 -1
- package/src/lib/common/client.js +0 -59
- package/src/lib/common/client.js.map +0 -1
- package/src/lib/common/oauth.d.ts +0 -2
- package/src/lib/common/oauth.d.ts.map +0 -1
- package/src/lib/common/oauth.js +0 -75
- package/src/lib/common/oauth.js.map +0 -1
package/src/index.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
export declare const netsuiteAuth: 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
|
-
export declare const netsuite: import("@activepieces/pieces-framework").Piece<import("@activepieces/pieces-framework").CustomAuthProperty<{
|
|
9
|
-
accountId: import("@activepieces/pieces-framework").ShortTextProperty<true>;
|
|
10
|
-
consumerKey: import("@activepieces/pieces-framework").ShortTextProperty<true>;
|
|
11
|
-
consumerSecret: import("@activepieces/pieces-framework").SecretTextProperty<true>;
|
|
12
|
-
tokenId: import("@activepieces/pieces-framework").ShortTextProperty<true>;
|
|
13
|
-
tokenSecret: import("@activepieces/pieces-framework").SecretTextProperty<true>;
|
|
14
|
-
}>>;
|
|
15
|
-
//# sourceMappingURL=index.d.ts.map
|
package/src/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,YAAY;;;;;;EA6BvB,CAAC;AAEH,eAAO,MAAM,QAAQ;;;;;;GA2CnB,CAAC"}
|
package/src/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;AAAA,qEAKwC;AACxC,yDAAqD;AACrD,6DAAyD;AACzD,2DAAuD;AACvD,mEAA+D;AAC/D,iDAAqD;AACrD,+DAAwE;AACxE,8CAAuD;AAE1C,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,gCAAc;QACd,IAAA,yCAAyB,EAAC;YACxB,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBAChB,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,OAAO,EAAE,CAAC;gBACZ,CAAC;gBACD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;gBAC7B,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,IAAI,CAAC,KAAK,CAAC;gBAE7B,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"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
export declare const executeDataset: 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
|
-
datasetId: import("@activepieces/pieces-framework").DropdownProperty<string, true, import("@activepieces/pieces-framework").CustomAuthProperty<{
|
|
9
|
-
accountId: import("@activepieces/pieces-framework").ShortTextProperty<true>;
|
|
10
|
-
consumerKey: import("@activepieces/pieces-framework").ShortTextProperty<true>;
|
|
11
|
-
consumerSecret: import("@activepieces/pieces-framework").SecretTextProperty<true>;
|
|
12
|
-
tokenId: import("@activepieces/pieces-framework").ShortTextProperty<true>;
|
|
13
|
-
tokenSecret: import("@activepieces/pieces-framework").SecretTextProperty<true>;
|
|
14
|
-
}>>;
|
|
15
|
-
}>;
|
|
16
|
-
//# sourceMappingURL=execute-dataset.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"execute-dataset.d.ts","sourceRoot":"","sources":["../../../../src/lib/actions/execute-dataset.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,cAAc;;;;;;;;;;;;;;EAuDzB,CAAC"}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.executeDataset = 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 client_1 = require("../common/client");
|
|
9
|
-
exports.executeDataset = (0, pieces_framework_1.createAction)({
|
|
10
|
-
name: 'executeDataset',
|
|
11
|
-
auth: __1.netsuiteAuth,
|
|
12
|
-
displayName: 'Execute Dataset',
|
|
13
|
-
description: 'Execute Dataset on NetSuite.',
|
|
14
|
-
audience: 'both',
|
|
15
|
-
aiMetadata: {
|
|
16
|
-
description: 'Runs a saved NetSuite dataset (workbook query) by its dataset ID and returns all result rows, auto-paginating across them. Use when a predefined dataset already captures the query you need, rather than writing raw SuiteQL. The dataset ID is selected from the datasets available on the connected account. This is a read-only execution and is safe to repeat.',
|
|
17
|
-
idempotent: true,
|
|
18
|
-
},
|
|
19
|
-
props: {
|
|
20
|
-
datasetId: pieces_framework_1.Property.Dropdown({
|
|
21
|
-
auth: __1.netsuiteAuth,
|
|
22
|
-
displayName: 'Dataset',
|
|
23
|
-
required: true,
|
|
24
|
-
refreshers: [],
|
|
25
|
-
options: (_a) => tslib_1.__awaiter(void 0, [_a], void 0, function* ({ auth }) {
|
|
26
|
-
if (!auth) {
|
|
27
|
-
return {
|
|
28
|
-
disabled: true,
|
|
29
|
-
placeholder: 'Please connect your account first',
|
|
30
|
-
options: [],
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
const client = new client_1.NetSuiteClient(auth.props);
|
|
34
|
-
const items = yield client.makePaginatedRequest({
|
|
35
|
-
method: pieces_common_1.HttpMethod.GET,
|
|
36
|
-
url: `${client.baseUrl}/services/rest/query/v1/dataset`,
|
|
37
|
-
});
|
|
38
|
-
return {
|
|
39
|
-
disabled: false,
|
|
40
|
-
options: items.map((item) => ({
|
|
41
|
-
label: item.name,
|
|
42
|
-
value: item.id,
|
|
43
|
-
})),
|
|
44
|
-
};
|
|
45
|
-
}),
|
|
46
|
-
}),
|
|
47
|
-
},
|
|
48
|
-
run(context) {
|
|
49
|
-
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
50
|
-
const client = new client_1.NetSuiteClient(context.auth.props);
|
|
51
|
-
const { datasetId } = context.propsValue;
|
|
52
|
-
return client.makePaginatedRequest({
|
|
53
|
-
method: pieces_common_1.HttpMethod.GET,
|
|
54
|
-
url: `${client.baseUrl}/services/rest/query/v1/dataset/${datasetId}/result`,
|
|
55
|
-
});
|
|
56
|
-
});
|
|
57
|
-
},
|
|
58
|
-
});
|
|
59
|
-
//# sourceMappingURL=execute-dataset.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"execute-dataset.js","sourceRoot":"","sources":["../../../../src/lib/actions/execute-dataset.ts"],"names":[],"mappings":";;;;AAAA,qEAAwE;AACxE,+DAAyD;AACzD,6BAAqC;AACrC,6CAAkD;AAErC,QAAA,cAAc,GAAG,IAAA,+BAAY,EAAC;IACzC,IAAI,EAAE,gBAAgB;IACtB,IAAI,EAAE,gBAAY;IAClB,WAAW,EAAE,iBAAiB;IAC9B,WAAW,EAAE,8BAA8B;IAC3C,QAAQ,EAAE,MAAM;IAChB,UAAU,EAAE;QACV,WAAW,EACT,sWAAsW;QACxW,UAAU,EAAE,IAAI;KACjB;IACD,KAAK,EAAE;QACL,SAAS,EAAE,2BAAQ,CAAC,QAAQ,CAAC;YAC3B,IAAI,EAAE,gBAAY;YAClB,WAAW,EAAE,SAAS;YACtB,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,EAAE;YACd,OAAO,EAAE,KAAiB,EAAE,oDAAZ,EAAE,IAAI,EAAE;gBACtB,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,OAAO;wBACL,QAAQ,EAAE,IAAI;wBACd,WAAW,EAAE,mCAAmC;wBAChD,OAAO,EAAE,EAAE;qBACZ,CAAC;gBACJ,CAAC;gBAED,MAAM,MAAM,GAAG,IAAI,uBAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAE9C,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAG5C;oBACD,MAAM,EAAE,0BAAU,CAAC,GAAG;oBACtB,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,iCAAiC;iBACxD,CAAC,CAAC;gBAEH,OAAO;oBACL,QAAQ,EAAE,KAAK;oBACf,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;wBAC5B,KAAK,EAAE,IAAI,CAAC,IAAI;wBAChB,KAAK,EAAE,IAAI,CAAC,EAAE;qBACf,CAAC,CAAC;iBACJ,CAAC;YACJ,CAAC,CAAA;SACF,CAAC;KACH;IACK,GAAG,CAAC,OAAO;;YACf,MAAM,MAAM,GAAG,IAAI,uBAAc,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtD,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;YAEzC,OAAO,MAAM,CAAC,oBAAoB,CAAC;gBACjC,MAAM,EAAE,0BAAU,CAAC,GAAG;gBACtB,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,mCAAmC,SAAS,SAAS;aAC5E,CAAC,CAAC;QACL,CAAC;KAAA;CACF,CAAC,CAAC"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export declare const getCustomer: 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
|
-
customerId: import("@activepieces/pieces-framework").ShortTextProperty<true>;
|
|
9
|
-
}>;
|
|
10
|
-
//# sourceMappingURL=get-customer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-customer.d.ts","sourceRoot":"","sources":["../../../../src/lib/actions/get-customer.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,WAAW;;;;;;;;EA2BtB,CAAC"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getCustomer = 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 client_1 = require("../common/client");
|
|
9
|
-
exports.getCustomer = (0, pieces_framework_1.createAction)({
|
|
10
|
-
name: 'getCustomer',
|
|
11
|
-
auth: __1.netsuiteAuth,
|
|
12
|
-
displayName: 'Get Customer',
|
|
13
|
-
description: 'Gets customer details from NetSuite.',
|
|
14
|
-
audience: 'both',
|
|
15
|
-
aiMetadata: {
|
|
16
|
-
description: 'Fetches a single customer record from NetSuite by its internal record ID. Use when you already have the customer ID and need its full details; this is a read-only lookup that is safe to repeat.',
|
|
17
|
-
idempotent: true,
|
|
18
|
-
},
|
|
19
|
-
props: {
|
|
20
|
-
customerId: pieces_framework_1.Property.ShortText({
|
|
21
|
-
displayName: 'Customer ID',
|
|
22
|
-
required: true,
|
|
23
|
-
description: 'The ID of the customer to retrieve.',
|
|
24
|
-
}),
|
|
25
|
-
},
|
|
26
|
-
run(context) {
|
|
27
|
-
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
28
|
-
const client = new client_1.NetSuiteClient(context.auth.props);
|
|
29
|
-
const { customerId } = context.propsValue;
|
|
30
|
-
return client.makeRequest({
|
|
31
|
-
method: pieces_common_1.HttpMethod.GET,
|
|
32
|
-
url: `${client.baseUrl}/services/rest/record/v1/customer/${customerId}`,
|
|
33
|
-
});
|
|
34
|
-
});
|
|
35
|
-
},
|
|
36
|
-
});
|
|
37
|
-
//# sourceMappingURL=get-customer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-customer.js","sourceRoot":"","sources":["../../../../src/lib/actions/get-customer.ts"],"names":[],"mappings":";;;;AAAA,qEAAwE;AACxE,+DAAyD;AACzD,6BAAqC;AACrC,6CAAkD;AAErC,QAAA,WAAW,GAAG,IAAA,+BAAY,EAAC;IACtC,IAAI,EAAE,aAAa;IACnB,IAAI,EAAE,gBAAY;IAClB,WAAW,EAAE,cAAc;IAC3B,WAAW,EAAE,sCAAsC;IACnD,QAAQ,EAAE,MAAM;IAChB,UAAU,EAAE;QACV,WAAW,EACT,mMAAmM;QACrM,UAAU,EAAE,IAAI;KACjB;IACD,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,MAAM,GAAG,IAAI,uBAAc,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtD,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;YAE1C,OAAO,MAAM,CAAC,WAAW,CAAC;gBACxB,MAAM,EAAE,0BAAU,CAAC,GAAG;gBACtB,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,qCAAqC,UAAU,EAAE;aACxE,CAAC,CAAC;QACL,CAAC;KAAA;CACF,CAAC,CAAC"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export declare const getVendor: 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
|
-
vendorId: import("@activepieces/pieces-framework").ShortTextProperty<true>;
|
|
9
|
-
}>;
|
|
10
|
-
//# sourceMappingURL=get-vendor.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-vendor.d.ts","sourceRoot":"","sources":["../../../../src/lib/actions/get-vendor.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,SAAS;;;;;;;;EA2BpB,CAAC"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getVendor = 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 client_1 = require("../common/client");
|
|
9
|
-
exports.getVendor = (0, pieces_framework_1.createAction)({
|
|
10
|
-
name: 'getVendor',
|
|
11
|
-
auth: __1.netsuiteAuth,
|
|
12
|
-
displayName: 'Get Vendor',
|
|
13
|
-
description: 'Gets vendor details from NetSuite.',
|
|
14
|
-
audience: 'both',
|
|
15
|
-
aiMetadata: {
|
|
16
|
-
description: 'Fetches a single vendor record from NetSuite by its internal record ID. Use when you already have the vendor ID and need its full details; this is a read-only lookup that is safe to repeat.',
|
|
17
|
-
idempotent: true,
|
|
18
|
-
},
|
|
19
|
-
props: {
|
|
20
|
-
vendorId: pieces_framework_1.Property.ShortText({
|
|
21
|
-
displayName: 'Vendor ID',
|
|
22
|
-
required: true,
|
|
23
|
-
description: 'The ID of the vendor to retrieve.',
|
|
24
|
-
}),
|
|
25
|
-
},
|
|
26
|
-
run(context) {
|
|
27
|
-
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
28
|
-
const client = new client_1.NetSuiteClient(context.auth.props);
|
|
29
|
-
const { vendorId } = context.propsValue;
|
|
30
|
-
return client.makeRequest({
|
|
31
|
-
method: pieces_common_1.HttpMethod.GET,
|
|
32
|
-
url: `${client.baseUrl}/services/rest/record/v1/vendor/${vendorId}`,
|
|
33
|
-
});
|
|
34
|
-
});
|
|
35
|
-
},
|
|
36
|
-
});
|
|
37
|
-
//# sourceMappingURL=get-vendor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-vendor.js","sourceRoot":"","sources":["../../../../src/lib/actions/get-vendor.ts"],"names":[],"mappings":";;;;AAAA,qEAAwE;AACxE,+DAAyD;AACzD,6BAAqC;AACrC,6CAAkD;AAErC,QAAA,SAAS,GAAG,IAAA,+BAAY,EAAC;IACpC,IAAI,EAAE,WAAW;IACjB,IAAI,EAAE,gBAAY;IAClB,WAAW,EAAE,YAAY;IACzB,WAAW,EAAE,oCAAoC;IACjD,QAAQ,EAAE,MAAM;IAChB,UAAU,EAAE;QACV,WAAW,EACT,+LAA+L;QACjM,UAAU,EAAE,IAAI;KACjB;IACD,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,MAAM,GAAG,IAAI,uBAAc,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtD,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;YAExC,OAAO,MAAM,CAAC,WAAW,CAAC;gBACxB,MAAM,EAAE,0BAAU,CAAC,GAAG;gBACtB,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,mCAAmC,QAAQ,EAAE;aACpE,CAAC,CAAC;QACL,CAAC;KAAA;CACF,CAAC,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
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("@activepieces/pieces-framework/dist/src/lib/property/input/markdown-property").MarkDownProperty;
|
|
9
|
-
query: import("@activepieces/pieces-framework").ShortTextProperty<true>;
|
|
10
|
-
args: import("@activepieces/pieces-framework").ArrayProperty<false>;
|
|
11
|
-
}>;
|
|
12
|
-
//# sourceMappingURL=run-suiteql.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"run-suiteql.d.ts","sourceRoot":"","sources":["../../../../src/lib/actions/run-suiteql.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,UAAU;;;;;;;;;;EAyDrB,CAAC"}
|
|
@@ -1,67 +0,0 @@
|
|
|
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 client_1 = require("../common/client");
|
|
9
|
-
const sql_formatter_1 = require("sql-formatter");
|
|
10
|
-
const mkdown = `
|
|
11
|
-
- **DO NOT** insert dynamic input directly into the query string. Instead, use :1, :2, :3 and add them in args for parameterized queries
|
|
12
|
-
- Arguments are treated as string and inserted as a [Text Literal](https://docs.oracle.com/en/database/oracle/oracle-database/26/sqlrf/Literals.html)
|
|
13
|
-
`;
|
|
14
|
-
exports.runSuiteQL = (0, pieces_framework_1.createAction)({
|
|
15
|
-
name: 'runSuiteQL',
|
|
16
|
-
auth: __1.netsuiteAuth,
|
|
17
|
-
displayName: 'Run SuiteQL Query',
|
|
18
|
-
description: 'Run SuiteQL Query on NetSuite.',
|
|
19
|
-
audience: 'both',
|
|
20
|
-
aiMetadata: {
|
|
21
|
-
description: 'Runs an arbitrary SuiteQL (Oracle SQL) query against NetSuite and returns all matching rows, auto-paginating across results. Use this for flexible read queries across any NetSuite record type when no dedicated action fits. Pass dynamic values via numbered placeholders (:1, :2, ...) and the Arguments list rather than interpolating into the query string. This is a read-only query and is safe to repeat.',
|
|
22
|
-
idempotent: true,
|
|
23
|
-
},
|
|
24
|
-
props: {
|
|
25
|
-
markdown: pieces_framework_1.Property.MarkDown({
|
|
26
|
-
value: mkdown,
|
|
27
|
-
}),
|
|
28
|
-
query: pieces_framework_1.Property.ShortText({
|
|
29
|
-
displayName: 'Query',
|
|
30
|
-
description: 'Please use :1, :2, :3 etc. for parameterized queries',
|
|
31
|
-
required: true,
|
|
32
|
-
}),
|
|
33
|
-
args: pieces_framework_1.Property.Array({
|
|
34
|
-
displayName: 'Arguments',
|
|
35
|
-
description: 'Arguments to be used in the query',
|
|
36
|
-
required: false,
|
|
37
|
-
}),
|
|
38
|
-
},
|
|
39
|
-
run(context) {
|
|
40
|
-
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
41
|
-
const client = new client_1.NetSuiteClient(context.auth.props);
|
|
42
|
-
const query = context.propsValue.query;
|
|
43
|
-
const args = context.propsValue.args || [];
|
|
44
|
-
// numbered placeholders: https://github.com/sql-formatter-org/sql-formatter/blob/master/docs/params.md#numbered-placeholders
|
|
45
|
-
const formattedArgs = args.reduce((acc, arg, idx) => {
|
|
46
|
-
// numbered placeholders are 1 indexed
|
|
47
|
-
const argNum = idx + 1;
|
|
48
|
-
// use q notation to escape quotes
|
|
49
|
-
acc[argNum] = `q'{${arg}}'`;
|
|
50
|
-
return acc;
|
|
51
|
-
}, {});
|
|
52
|
-
// netsuite uses oracle sql: https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_156257790831.html
|
|
53
|
-
const formattedSQL = (0, sql_formatter_1.format)(query, {
|
|
54
|
-
language: 'plsql',
|
|
55
|
-
params: formattedArgs,
|
|
56
|
-
});
|
|
57
|
-
return client.makePaginatedRequest({
|
|
58
|
-
method: pieces_common_1.HttpMethod.POST,
|
|
59
|
-
url: `${client.baseUrl}/services/rest/query/v1/suiteql`,
|
|
60
|
-
body: {
|
|
61
|
-
q: formattedSQL,
|
|
62
|
-
},
|
|
63
|
-
});
|
|
64
|
-
});
|
|
65
|
-
},
|
|
66
|
-
});
|
|
67
|
-
//# sourceMappingURL=run-suiteql.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"run-suiteql.js","sourceRoot":"","sources":["../../../../src/lib/actions/run-suiteql.ts"],"names":[],"mappings":";;;;AAAA,qEAAwE;AACxE,+DAAyD;AACzD,6BAAqC;AACrC,6CAAkD;AAClD,iDAAgE;AAEhE,MAAM,MAAM,GAAG;;;CAGd,CAAC;AAEW,QAAA,UAAU,GAAG,IAAA,+BAAY,EAAC;IACrC,IAAI,EAAE,YAAY;IAClB,IAAI,EAAE,gBAAY;IAClB,WAAW,EAAE,mBAAmB;IAChC,WAAW,EAAE,gCAAgC;IAC7C,QAAQ,EAAE,MAAM;IAChB,UAAU,EAAE;QACV,WAAW,EACT,qZAAqZ;QACvZ,UAAU,EAAE,IAAI;KACjB;IACD,KAAK,EAAE;QACL,QAAQ,EAAE,2BAAQ,CAAC,QAAQ,CAAC;YAC1B,KAAK,EAAE,MAAM;SACd,CAAC;QAEF,KAAK,EAAE,2BAAQ,CAAC,SAAS,CAAC;YACxB,WAAW,EAAE,OAAO;YACpB,WAAW,EAAE,sDAAsD;YACnE,QAAQ,EAAE,IAAI;SACf,CAAC;QAEF,IAAI,EAAE,2BAAQ,CAAC,KAAK,CAAC;YACnB,WAAW,EAAE,WAAW;YACxB,WAAW,EAAE,mCAAmC;YAChD,QAAQ,EAAE,KAAK;SAChB,CAAC;KACH;IACK,GAAG,CAAC,OAAO;;YACf,MAAM,MAAM,GAAG,IAAI,uBAAc,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEtD,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC;YACvC,MAAM,IAAI,GAAc,OAAO,CAAC,UAAU,CAAC,IAAiB,IAAI,EAAE,CAAC;YAEnE,6HAA6H;YAC7H,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;gBAClD,sCAAsC;gBACtC,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC;gBACvB,kCAAkC;gBAClC,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC;gBAC5B,OAAO,GAAG,CAAC;YACb,CAAC,EAAE,EAAgB,CAAC,CAAC;YAErB,oHAAoH;YACpH,MAAM,YAAY,GAAG,IAAA,sBAAS,EAAC,KAAK,EAAE;gBACpC,QAAQ,EAAE,OAAO;gBACjB,MAAM,EAAE,aAAa;aACtB,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC,oBAAoB,CAAC;gBACjC,MAAM,EAAE,0BAAU,CAAC,IAAI;gBACvB,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,iCAAiC;gBACvD,IAAI,EAAE;oBACJ,CAAC,EAAE,YAAY;iBAChB;aACF,CAAC,CAAC;QACL,CAAC;KAAA;CACF,CAAC,CAAC"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { HttpMethod, QueryParams } from '@activepieces/pieces-common';
|
|
2
|
-
interface NetSuiteAuth {
|
|
3
|
-
accountId: string;
|
|
4
|
-
consumerKey: string;
|
|
5
|
-
consumerSecret: string;
|
|
6
|
-
tokenId: string;
|
|
7
|
-
tokenSecret: string;
|
|
8
|
-
}
|
|
9
|
-
interface MakeRequestParams {
|
|
10
|
-
method: HttpMethod;
|
|
11
|
-
url: string;
|
|
12
|
-
queryParams?: QueryParams;
|
|
13
|
-
body?: unknown;
|
|
14
|
-
}
|
|
15
|
-
export declare class NetSuiteClient {
|
|
16
|
-
private auth;
|
|
17
|
-
constructor(auth: NetSuiteAuth);
|
|
18
|
-
get baseUrl(): string;
|
|
19
|
-
makeRequest<T>({ method, url, queryParams, body, }: MakeRequestParams): Promise<T>;
|
|
20
|
-
makePaginatedRequest<T>({ method, url, body, }: Omit<MakeRequestParams, 'queryParams'>): Promise<T[]>;
|
|
21
|
-
}
|
|
22
|
-
export {};
|
|
23
|
-
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/lib/common/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EACV,WAAW,EACZ,MAAM,6BAA6B,CAAC;AAKrC,UAAU,YAAY;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,iBAAiB;IACzB,MAAM,EAAE,UAAU,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAOD,qBAAa,cAAc;IACzB,OAAO,CAAC,IAAI,CAAe;gBAEf,IAAI,EAAE,YAAY;IAI9B,IAAI,OAAO,IAAI,MAAM,CAEpB;IAEK,WAAW,CAAC,CAAC,EAAE,EACnB,MAAM,EACN,GAAG,EACH,WAAW,EACX,IAAI,GACL,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,CAAC;IA4B3B,oBAAoB,CAAC,CAAC,EAAE,EAC5B,MAAM,EACN,GAAG,EACH,IAAI,GACL,EAAE,IAAI,CAAC,iBAAiB,EAAE,aAAa,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;CAyBzD"}
|
package/src/lib/common/client.js
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.NetSuiteClient = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const pieces_common_1 = require("@activepieces/pieces-common");
|
|
6
|
-
const oauth_1 = require("./oauth");
|
|
7
|
-
const PAGE_SIZE = 1000;
|
|
8
|
-
class NetSuiteClient {
|
|
9
|
-
constructor(auth) {
|
|
10
|
-
this.auth = auth;
|
|
11
|
-
}
|
|
12
|
-
get baseUrl() {
|
|
13
|
-
return `https://${this.auth.accountId}.suitetalk.api.netsuite.com`;
|
|
14
|
-
}
|
|
15
|
-
makeRequest(_a) {
|
|
16
|
-
return tslib_1.__awaiter(this, arguments, void 0, function* ({ method, url, queryParams, body, }) {
|
|
17
|
-
const authHeader = (0, oauth_1.createOAuthHeader)(this.auth.accountId, this.auth.consumerKey, this.auth.consumerSecret, this.auth.tokenId, this.auth.tokenSecret, url, method, queryParams);
|
|
18
|
-
const response = yield pieces_common_1.httpClient.sendRequest({
|
|
19
|
-
method,
|
|
20
|
-
url,
|
|
21
|
-
headers: {
|
|
22
|
-
Authorization: authHeader,
|
|
23
|
-
prefer: 'transient',
|
|
24
|
-
Cookie: 'NS_ROUTING_VERSION=LAGGING',
|
|
25
|
-
},
|
|
26
|
-
queryParams,
|
|
27
|
-
body,
|
|
28
|
-
});
|
|
29
|
-
return response.body;
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
// paginate results: https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_156414087576.html
|
|
33
|
-
makePaginatedRequest(_a) {
|
|
34
|
-
return tslib_1.__awaiter(this, arguments, void 0, function* ({ method, url, body, }) {
|
|
35
|
-
var _b;
|
|
36
|
-
const results = [];
|
|
37
|
-
let pageOffset = 0;
|
|
38
|
-
let hasMore = true;
|
|
39
|
-
while (hasMore) {
|
|
40
|
-
const queryParams = {
|
|
41
|
-
limit: String(PAGE_SIZE),
|
|
42
|
-
offset: String(pageOffset),
|
|
43
|
-
};
|
|
44
|
-
const response = yield this.makeRequest({
|
|
45
|
-
method,
|
|
46
|
-
url,
|
|
47
|
-
queryParams,
|
|
48
|
-
body,
|
|
49
|
-
});
|
|
50
|
-
results.push(...(response.items || []));
|
|
51
|
-
hasMore = (_b = response.hasMore) !== null && _b !== void 0 ? _b : false;
|
|
52
|
-
pageOffset += PAGE_SIZE;
|
|
53
|
-
}
|
|
54
|
-
return results;
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
exports.NetSuiteClient = NetSuiteClient;
|
|
59
|
-
//# sourceMappingURL=client.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/lib/common/client.ts"],"names":[],"mappings":";;;;AAAA,+DAIqC;AACrC,mCAA4C;AAE5C,MAAM,SAAS,GAAG,IAAI,CAAC;AAsBvB,MAAa,cAAc;IAGzB,YAAY,IAAkB;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,WAAW,IAAI,CAAC,IAAI,CAAC,SAAS,6BAA6B,CAAC;IACrE,CAAC;IAEK,WAAW;qEAAI,EACnB,MAAM,EACN,GAAG,EACH,WAAW,EACX,IAAI,GACc;YAClB,MAAM,UAAU,GAAG,IAAA,yBAAiB,EAClC,IAAI,CAAC,IAAI,CAAC,SAAS,EACnB,IAAI,CAAC,IAAI,CAAC,WAAW,EACrB,IAAI,CAAC,IAAI,CAAC,cAAc,EACxB,IAAI,CAAC,IAAI,CAAC,OAAO,EACjB,IAAI,CAAC,IAAI,CAAC,WAAW,EACrB,GAAG,EACH,MAAM,EACN,WAAW,CACZ,CAAC;YAEF,MAAM,QAAQ,GAAG,MAAM,0BAAU,CAAC,WAAW,CAAC;gBAC5C,MAAM;gBACN,GAAG;gBACH,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU;oBACzB,MAAM,EAAE,WAAW;oBACnB,MAAM,EAAE,4BAA4B;iBACrC;gBACD,WAAW;gBACX,IAAI;aACL,CAAC,CAAC;YAEH,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;KAAA;IAED,4GAA4G;IACtG,oBAAoB;qEAAI,EAC5B,MAAM,EACN,GAAG,EACH,IAAI,GACmC;;YACvC,MAAM,OAAO,GAAQ,EAAE,CAAC;YACxB,IAAI,UAAU,GAAG,CAAC,CAAC;YACnB,IAAI,OAAO,GAAG,IAAI,CAAC;YAEnB,OAAO,OAAO,EAAE,CAAC;gBACf,MAAM,WAAW,GAAG;oBAClB,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC;oBACxB,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC;iBAC3B,CAAC;gBAEF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAuB;oBAC5D,MAAM;oBACN,GAAG;oBACH,WAAW;oBACX,IAAI;iBACL,CAAC,CAAC;gBAEH,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;gBACxC,OAAO,GAAG,MAAA,QAAQ,CAAC,OAAO,mCAAI,KAAK,CAAC;gBACpC,UAAU,IAAI,SAAS,CAAC;YAC1B,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC;KAAA;CACF;AAzED,wCAyEC"}
|
|
@@ -1,2 +0,0 @@
|
|
|
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;
|
|
2
|
-
//# sourceMappingURL=oauth.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../../../src/lib/common/oauth.ts"],"names":[],"mappings":"AAqFA,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GACtD,MAAM,CA2BR"}
|
package/src/lib/common/oauth.js
DELETED
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createOAuthHeader = createOAuthHeader;
|
|
4
|
-
const crypto_1 = require("crypto");
|
|
5
|
-
const SIGN_METHOD = 'HMAC-SHA256';
|
|
6
|
-
const OAUTH_VERSION = '1.0';
|
|
7
|
-
// OAuth 1.0 (RFC 5849 §3.6) requires RFC 3986 percent-encoding, which encodes
|
|
8
|
-
// '!', '*', "'", '(', ')' — characters that encodeURIComponent leaves unencoded.
|
|
9
|
-
function oauthEncode(str) {
|
|
10
|
-
return encodeURIComponent(str).replace(/[!'()*]/g, (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`);
|
|
11
|
-
}
|
|
12
|
-
function generateNonce() {
|
|
13
|
-
// Use CSPRNG instead of Math.random() for unpredictable nonces.
|
|
14
|
-
return (0, crypto_1.randomBytes)(16).toString('hex');
|
|
15
|
-
}
|
|
16
|
-
function generateSignature(requestUrl, httpMethod, oauthNonce, timestamp, consumerKey, consumerSecret, tokenId, tokenSecret, queryParams) {
|
|
17
|
-
// Parse URL to get base URL and existing query params
|
|
18
|
-
const parsedUrl = new URL(requestUrl);
|
|
19
|
-
const baseUrl = `${parsedUrl.origin}${parsedUrl.pathname}`;
|
|
20
|
-
// Collect OAuth parameters
|
|
21
|
-
const allParams = {
|
|
22
|
-
oauth_consumer_key: consumerKey,
|
|
23
|
-
oauth_nonce: oauthNonce,
|
|
24
|
-
oauth_signature_method: SIGN_METHOD,
|
|
25
|
-
oauth_timestamp: timestamp.toString(),
|
|
26
|
-
oauth_token: tokenId,
|
|
27
|
-
oauth_version: OAUTH_VERSION,
|
|
28
|
-
};
|
|
29
|
-
// Include query parameters from URL
|
|
30
|
-
parsedUrl.searchParams.forEach((value, key) => {
|
|
31
|
-
allParams[key] = value;
|
|
32
|
-
});
|
|
33
|
-
// Include additional query parameters (will override URL params if same key)
|
|
34
|
-
if (queryParams) {
|
|
35
|
-
Object.entries(queryParams).forEach(([key, value]) => {
|
|
36
|
-
allParams[key] = String(value);
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
// RFC 5849 §3.4.1.3: encode keys/values first, then sort the encoded pairs.
|
|
40
|
-
// Sorting on raw strings would differ from sorting on encoded strings when
|
|
41
|
-
// param names contain characters whose encoded form changes byte order (e.g. '{' → '%7B').
|
|
42
|
-
const encodedPairs = Object.entries(allParams).map(([key, value]) => [oauthEncode(key), oauthEncode(value)]);
|
|
43
|
-
encodedPairs.sort(([ka, va], [kb, vb]) => ka < kb ? -1 : ka > kb ? 1 : va < vb ? -1 : va > vb ? 1 : 0);
|
|
44
|
-
const paramString = encodedPairs.map(([k, v]) => `${k}=${v}`).join('&');
|
|
45
|
-
const signatureBaseString = [
|
|
46
|
-
httpMethod.toUpperCase(),
|
|
47
|
-
oauthEncode(baseUrl),
|
|
48
|
-
oauthEncode(paramString),
|
|
49
|
-
].join('&');
|
|
50
|
-
const signingKey = [
|
|
51
|
-
oauthEncode(consumerSecret),
|
|
52
|
-
oauthEncode(tokenSecret),
|
|
53
|
-
].join('&');
|
|
54
|
-
const hmac = (0, crypto_1.createHmac)('sha256', signingKey);
|
|
55
|
-
hmac.update(signatureBaseString);
|
|
56
|
-
const signature = hmac.digest('base64');
|
|
57
|
-
return oauthEncode(signature);
|
|
58
|
-
}
|
|
59
|
-
function createOAuthHeader(accountId, consumerKey, consumerSecret, tokenId, tokenSecret, requestUrl, httpMethod, queryParams) {
|
|
60
|
-
const oauthNonce = generateNonce();
|
|
61
|
-
const timestamp = Math.floor(Date.now() / 1000);
|
|
62
|
-
const signature = generateSignature(requestUrl, httpMethod, oauthNonce, timestamp, consumerKey, consumerSecret, tokenId, tokenSecret, queryParams);
|
|
63
|
-
const headerParams = [
|
|
64
|
-
`realm="${accountId}"`,
|
|
65
|
-
`oauth_token="${tokenId}"`,
|
|
66
|
-
`oauth_consumer_key="${consumerKey}"`,
|
|
67
|
-
`oauth_nonce="${oauthNonce}"`,
|
|
68
|
-
`oauth_timestamp="${timestamp}"`,
|
|
69
|
-
`oauth_signature_method="${SIGN_METHOD}"`,
|
|
70
|
-
`oauth_version="${OAUTH_VERSION}"`,
|
|
71
|
-
`oauth_signature="${signature}"`,
|
|
72
|
-
].join(',');
|
|
73
|
-
return `OAuth ${headerParams}`;
|
|
74
|
-
}
|
|
75
|
-
//# sourceMappingURL=oauth.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../../../src/lib/common/oauth.ts"],"names":[],"mappings":"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"}
|