n8n-nodes-pocketbase 2.0.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/README.md +19 -1
  2. package/dist/credentials/PocketbaseHttpApi.credentials.js +1 -1
  3. package/dist/credentials/PocketbaseHttpApi.credentials.js.map +1 -1
  4. package/dist/nodes/{PocketbaseHttp → Common}/GenericFunctions.d.ts +3 -2
  5. package/dist/nodes/Common/GenericFunctions.js +85 -0
  6. package/dist/nodes/Common/GenericFunctions.js.map +1 -0
  7. package/dist/nodes/{PocketbaseHttp → Common}/LoadOptions.d.ts +1 -1
  8. package/dist/nodes/{PocketbaseHttp → Common}/LoadOptions.js +47 -20
  9. package/dist/nodes/Common/LoadOptions.js.map +1 -0
  10. package/dist/nodes/{PocketbaseHttp → Common}/PocketbaseAuth.d.ts +3 -0
  11. package/dist/nodes/Common/PocketbaseAuth.js +122 -0
  12. package/dist/nodes/Common/PocketbaseAuth.js.map +1 -0
  13. package/dist/nodes/Common/RequestBodyFunctions.js +131 -0
  14. package/dist/nodes/Common/RequestBodyFunctions.js.map +1 -0
  15. package/dist/nodes/PocketbaseHttp/PocketbaseHttp.node.js +4 -3
  16. package/dist/nodes/PocketbaseHttp/PocketbaseHttp.node.js.map +1 -1
  17. package/dist/nodes/PocketbaseHttp/PocketbaseHttp.node.json +2 -2
  18. package/dist/nodes/PocketbaseTrigger/PocketbaseTrigger.node.d.ts +13 -0
  19. package/dist/nodes/PocketbaseTrigger/PocketbaseTrigger.node.js +239 -0
  20. package/dist/nodes/PocketbaseTrigger/PocketbaseTrigger.node.js.map +1 -0
  21. package/dist/nodes/PocketbaseTrigger/PocketbaseTrigger.node.json +18 -0
  22. package/dist/nodes/PocketbaseTrigger/pocketbaseTrigger.dark.svg +10 -0
  23. package/dist/nodes/PocketbaseTrigger/pocketbaseTrigger.svg +10 -0
  24. package/dist/package.json +11 -7
  25. package/dist/tests/GenericFunctions.spec.d.ts +1 -0
  26. package/dist/tests/GenericFunctions.spec.js +177 -0
  27. package/dist/tests/GenericFunctions.spec.js.map +1 -0
  28. package/dist/tests/PocketbaseAuth.spec.js +80 -50
  29. package/dist/tests/PocketbaseAuth.spec.js.map +1 -1
  30. package/dist/tests/PocketbaseAuthIntegration.spec.d.ts +1 -0
  31. package/dist/tests/PocketbaseAuthIntegration.spec.js +202 -0
  32. package/dist/tests/PocketbaseAuthIntegration.spec.js.map +1 -0
  33. package/dist/tests/PocketbaseTrigger.spec.d.ts +1 -0
  34. package/dist/tests/PocketbaseTrigger.spec.js +243 -0
  35. package/dist/tests/PocketbaseTrigger.spec.js.map +1 -0
  36. package/dist/tests/PocketbaseTriggerIntegration.spec.d.ts +1 -0
  37. package/dist/tests/PocketbaseTriggerIntegration.spec.js +125 -0
  38. package/dist/tests/PocketbaseTriggerIntegration.spec.js.map +1 -0
  39. package/dist/tests/RequestBodyFunctions.spec.d.ts +1 -0
  40. package/dist/tests/RequestBodyFunctions.spec.js +232 -0
  41. package/dist/tests/RequestBodyFunctions.spec.js.map +1 -0
  42. package/dist/tsconfig.tsbuildinfo +1 -1
  43. package/package.json +11 -7
  44. package/dist/nodes/PocketbaseHttp/GenericFunctions.js +0 -42
  45. package/dist/nodes/PocketbaseHttp/GenericFunctions.js.map +0 -1
  46. package/dist/nodes/PocketbaseHttp/LoadOptions.js.map +0 -1
  47. package/dist/nodes/PocketbaseHttp/PocketbaseAuth.js +0 -50
  48. package/dist/nodes/PocketbaseHttp/PocketbaseAuth.js.map +0 -1
  49. package/dist/nodes/PocketbaseHttp/RequestBodyFunctions.js +0 -62
  50. package/dist/nodes/PocketbaseHttp/RequestBodyFunctions.js.map +0 -1
  51. /package/dist/nodes/{PocketbaseHttp → Common}/RequestBodyFunctions.d.ts +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"LoadOptions.js","sourceRoot":"","sources":["../../../nodes/PocketbaseHttp/LoadOptions.ts"],"names":[],"mappings":"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"}
@@ -1,50 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.login = login;
4
- exports.refresh = refresh;
5
- async function login(credentials) {
6
- if (typeof credentials !== "object" || credentials === null) {
7
- throw new Error("Credentials must be an object");
8
- }
9
- const { username, password, url } = credentials;
10
- if (typeof url !== "string" || url.trim() === "") {
11
- throw new Error("PocketBase URL is missing or invalid in Credentials");
12
- }
13
- if (typeof username !== "string" || username.trim() === "") {
14
- throw new Error("PocketBase Admin username is missing or invalid in Credentials");
15
- }
16
- if (typeof password !== "string" || password.trim() === "") {
17
- throw new Error("PocketBase Admin password is missing or invalid in Credentials");
18
- }
19
- const normalizedUrl = url.endsWith("/") ? url.slice(0, -1) : url;
20
- const { token } = (await this.helpers.httpRequest({
21
- method: "POST",
22
- url: `${normalizedUrl}/api/collections/_superusers/auth-with-password`,
23
- body: {
24
- identity: username,
25
- password,
26
- },
27
- }));
28
- return { token };
29
- }
30
- async function refresh(credentials) {
31
- const { url, token: existingToken } = credentials;
32
- const normalizedUrl = url.endsWith("/") ? url.slice(0, -1) : url;
33
- try {
34
- const { token } = (await this.helpers.httpRequest({
35
- method: "POST",
36
- url: `${normalizedUrl}/api/collections/_superusers/auth-refresh`,
37
- headers: {
38
- Authorization: existingToken,
39
- },
40
- }));
41
- return { token };
42
- }
43
- catch (error) {
44
- if (error.status === 401 || error.status === 403 || error.status === 404) {
45
- return await login.call(this, credentials);
46
- }
47
- throw error;
48
- }
49
- }
50
- //# sourceMappingURL=PocketbaseAuth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PocketbaseAuth.js","sourceRoot":"","sources":["../../../nodes/PocketbaseHttp/PocketbaseAuth.ts"],"names":[],"mappings":";;AAQA,sBA+BC;AAED,0BAsBC;AAvDM,KAAK,UAAU,KAAK,CAEzB,WAA2C;IAE3C,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,WAAqC,CAAC;IAE1E,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;IACpF,CAAC;IACD,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;IACpF,CAAC;IAED,MAAM,aAAa,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAEjE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;QAChD,MAAM,EAAE,MAAM;QACd,GAAG,EAAE,GAAG,aAAa,iDAAiD;QACtE,IAAI,EAAE;YACJ,QAAQ,EAAE,QAAQ;YAClB,QAAQ;SACT;KACF,CAAC,CAAsB,CAAC;IACzB,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC;AAEM,KAAK,UAAU,OAAO,CAE3B,WAA2C;IAE3C,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,WAAyD,CAAC;IAChG,MAAM,aAAa,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAEjE,IAAI,CAAC;QACH,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;YAChD,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,GAAG,aAAa,2CAA2C;YAChE,OAAO,EAAE;gBACP,aAAa,EAAE,aAAa;aAC7B;SACF,CAAC,CAAsB,CAAC;QACzB,OAAO,EAAE,KAAK,EAAE,CAAC;IACnB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACzE,OAAO,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC7C,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -1,62 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.prepareRequestBody = prepareRequestBody;
7
- const form_data_1 = __importDefault(require("form-data"));
8
- async function prepareRequestBody(requestOptions) {
9
- var _a, _b, _c;
10
- const bodyType = this.getNodeParameter("bodyType", ["parameters"]);
11
- const formData = new form_data_1.default();
12
- if (bodyType.includes("fields")) {
13
- (_b = (_a = this.getNodeParameter("fields", {
14
- assignments: [],
15
- })) === null || _a === void 0 ? void 0 : _a.assignments) === null || _b === void 0 ? void 0 : _b.forEach(function ({ name, value }) {
16
- formData.append(name, value);
17
- });
18
- }
19
- if (bodyType.includes("bodyJson")) {
20
- if (typeof requestOptions.body === "object" && requestOptions.body !== null) {
21
- Object.entries(requestOptions.body).forEach(([key, value]) => {
22
- formData.append(key, value);
23
- });
24
- }
25
- else if (requestOptions.body !== undefined) {
26
- formData.append("body", requestOptions.body);
27
- }
28
- }
29
- if (bodyType.includes("binaryData")) {
30
- await handleBinaryData.apply(this, [formData]);
31
- }
32
- if (!requestOptions.headers) {
33
- requestOptions.headers = {};
34
- }
35
- Object.assign(requestOptions.headers, formData.getHeaders());
36
- requestOptions.body = formData;
37
- const isMultipart = requestOptions.body instanceof form_data_1.default ||
38
- (requestOptions.headers &&
39
- ((_c = requestOptions.headers["content-type"]) === null || _c === void 0 ? void 0 : _c.toString().includes("multipart")));
40
- const loggedBody = isMultipart ? "[multipart body omitted]" : JSON.stringify(requestOptions.body);
41
- this.logger.info(`Request URL: ${requestOptions.url} | ${loggedBody}`);
42
- return requestOptions;
43
- }
44
- async function handleBinaryData(formData) {
45
- const binaryPropertyName = this.getNodeParameter("binaryPropertyName", undefined);
46
- if (!binaryPropertyName) {
47
- this.logger.info("No binary data to send. Skipping...");
48
- return;
49
- }
50
- const binaryFieldName = this.getNodeParameter("binaryFieldName", undefined);
51
- this.logger.info("Adding binary data to request formData from property: " +
52
- binaryPropertyName +
53
- "\nat: " +
54
- binaryFieldName);
55
- const binaryData = this.helpers.assertBinaryData(binaryPropertyName);
56
- const dataBuffer = await this.helpers.getBinaryDataBuffer(binaryPropertyName);
57
- formData.append(binaryFieldName, dataBuffer, {
58
- contentType: binaryData.mimeType,
59
- filename: binaryData.fileName,
60
- });
61
- }
62
- //# sourceMappingURL=RequestBodyFunctions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RequestBodyFunctions.js","sourceRoot":"","sources":["../../../nodes/PocketbaseHttp/RequestBodyFunctions.ts"],"names":[],"mappings":"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"}