@hobokengrace/n8n-nodes-pco 0.1.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.
- package/LICENSE.md +21 -0
- package/README.md +79 -0
- package/dist/credentials/PlanningCenterPatApi.credentials.d.ts +9 -0
- package/dist/credentials/PlanningCenterPatApi.credentials.js +84 -0
- package/dist/credentials/PlanningCenterPatApi.credentials.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/nodes/assets/api.svg +4 -0
- package/dist/nodes/assets/calendar.svg +4 -0
- package/dist/nodes/assets/check-ins.svg +4 -0
- package/dist/nodes/assets/current.svg +4 -0
- package/dist/nodes/assets/giving.svg +4 -0
- package/dist/nodes/assets/groups.svg +4 -0
- package/dist/nodes/assets/pco.svg +4 -0
- package/dist/nodes/assets/people.svg +4 -0
- package/dist/nodes/assets/publishing.svg +4 -0
- package/dist/nodes/assets/registrations.svg +4 -0
- package/dist/nodes/assets/services.svg +4 -0
- package/dist/nodes/assets/webhooks.svg +4 -0
- package/dist/nodes/generated/api/PlanningCenterApi.node.d.ts +16 -0
- package/dist/nodes/generated/api/PlanningCenterApi.node.js +745 -0
- package/dist/nodes/generated/api/PlanningCenterApi.node.js.map +1 -0
- package/dist/nodes/generated/api/api.svg +4 -0
- package/dist/nodes/generated/api/pco.svg +4 -0
- package/dist/nodes/generated/calendar/PlanningCenterCalendar.node.d.ts +305 -0
- package/dist/nodes/generated/calendar/PlanningCenterCalendar.node.js +33813 -0
- package/dist/nodes/generated/calendar/PlanningCenterCalendar.node.js.map +1 -0
- package/dist/nodes/generated/calendar/calendar.svg +4 -0
- package/dist/nodes/generated/calendar/pco.svg +4 -0
- package/dist/nodes/generated/check-ins/PlanningCenterCheckIns.node.d.ts +308 -0
- package/dist/nodes/generated/check-ins/PlanningCenterCheckIns.node.js +29142 -0
- package/dist/nodes/generated/check-ins/PlanningCenterCheckIns.node.js.map +1 -0
- package/dist/nodes/generated/check-ins/check-ins.svg +4 -0
- package/dist/nodes/generated/check-ins/pco.svg +4 -0
- package/dist/nodes/generated/current/PlanningCenterCurrent.node.d.ts +13 -0
- package/dist/nodes/generated/current/PlanningCenterCurrent.node.js +564 -0
- package/dist/nodes/generated/current/PlanningCenterCurrent.node.js.map +1 -0
- package/dist/nodes/generated/current/current.svg +4 -0
- package/dist/nodes/generated/current/pco.svg +4 -0
- package/dist/nodes/generated/giving/PlanningCenterGiving.node.d.ts +308 -0
- package/dist/nodes/generated/giving/PlanningCenterGiving.node.js +25566 -0
- package/dist/nodes/generated/giving/PlanningCenterGiving.node.js.map +1 -0
- package/dist/nodes/generated/giving/giving.svg +4 -0
- package/dist/nodes/generated/giving/pco.svg +4 -0
- package/dist/nodes/generated/groups/PlanningCenterGroups.node.d.ts +189 -0
- package/dist/nodes/generated/groups/PlanningCenterGroups.node.js +15344 -0
- package/dist/nodes/generated/groups/PlanningCenterGroups.node.js.map +1 -0
- package/dist/nodes/generated/groups/groups.svg +4 -0
- package/dist/nodes/generated/groups/pco.svg +4 -0
- package/dist/nodes/generated/people/PlanningCenterPeople.node.d.ts +979 -0
- package/dist/nodes/generated/people/PlanningCenterPeople.node.js +102040 -0
- package/dist/nodes/generated/people/PlanningCenterPeople.node.js.map +1 -0
- package/dist/nodes/generated/people/pco.svg +4 -0
- package/dist/nodes/generated/people/people.svg +4 -0
- package/dist/nodes/generated/publishing/PlanningCenterPublishing.node.d.ts +130 -0
- package/dist/nodes/generated/publishing/PlanningCenterPublishing.node.js +10671 -0
- package/dist/nodes/generated/publishing/PlanningCenterPublishing.node.js.map +1 -0
- package/dist/nodes/generated/publishing/pco.svg +4 -0
- package/dist/nodes/generated/publishing/publishing.svg +4 -0
- package/dist/nodes/generated/registrations/PlanningCenterRegistrations.node.d.ts +55 -0
- package/dist/nodes/generated/registrations/PlanningCenterRegistrations.node.js +3640 -0
- package/dist/nodes/generated/registrations/PlanningCenterRegistrations.node.js.map +1 -0
- package/dist/nodes/generated/registrations/pco.svg +4 -0
- package/dist/nodes/generated/registrations/registrations.svg +4 -0
- package/dist/nodes/generated/services/PlanningCenterServices.node.d.ts +1032 -0
- package/dist/nodes/generated/services/PlanningCenterServices.node.js +82196 -0
- package/dist/nodes/generated/services/PlanningCenterServices.node.js.map +1 -0
- package/dist/nodes/generated/services/pco.svg +4 -0
- package/dist/nodes/generated/services/services.svg +4 -0
- package/dist/nodes/generated/webhooks/PlanningCenterWebhooks.node.d.ts +25 -0
- package/dist/nodes/generated/webhooks/PlanningCenterWebhooks.node.js +1346 -0
- package/dist/nodes/generated/webhooks/PlanningCenterWebhooks.node.js.map +1 -0
- package/dist/nodes/generated/webhooks/pco.svg +4 -0
- package/dist/nodes/generated/webhooks/webhooks.svg +4 -0
- package/dist/src/generator/checkGenerated.d.ts +1 -0
- package/dist/src/generator/checkGenerated.js +34 -0
- package/dist/src/generator/checkGenerated.js.map +1 -0
- package/dist/src/generator/config.d.ts +13 -0
- package/dist/src/generator/config.js +114 -0
- package/dist/src/generator/config.js.map +1 -0
- package/dist/src/generator/generate.d.ts +1 -0
- package/dist/src/generator/generate.js +26 -0
- package/dist/src/generator/generate.js.map +1 -0
- package/dist/src/generator/labels.d.ts +3 -0
- package/dist/src/generator/labels.js +23 -0
- package/dist/src/generator/labels.js.map +1 -0
- package/dist/src/generator/model.d.ts +81 -0
- package/dist/src/generator/model.js +3 -0
- package/dist/src/generator/model.js.map +1 -0
- package/dist/src/generator/openapi.d.ts +3 -0
- package/dist/src/generator/openapi.js +667 -0
- package/dist/src/generator/openapi.js.map +1 -0
- package/dist/src/generator/refreshSnapshots.d.ts +1 -0
- package/dist/src/generator/refreshSnapshots.js +28 -0
- package/dist/src/generator/refreshSnapshots.js.map +1 -0
- package/dist/src/generator/render.d.ts +3 -0
- package/dist/src/generator/render.js +580 -0
- package/dist/src/generator/render.js.map +1 -0
- package/dist/src/runtime/execute.d.ts +2 -0
- package/dist/src/runtime/execute.js +25 -0
- package/dist/src/runtime/execute.js.map +1 -0
- package/dist/src/runtime/jsonApi.d.ts +3 -0
- package/dist/src/runtime/jsonApi.js +43 -0
- package/dist/src/runtime/jsonApi.js.map +1 -0
- package/dist/src/runtime/pagination.d.ts +8 -0
- package/dist/src/runtime/pagination.js +68 -0
- package/dist/src/runtime/pagination.js.map +1 -0
- package/dist/src/runtime/request.d.ts +22 -0
- package/dist/src/runtime/request.js +93 -0
- package/dist/src/runtime/request.js.map +1 -0
- package/dist/src/runtime/resourceLocator.d.ts +1 -0
- package/dist/src/runtime/resourceLocator.js +15 -0
- package/dist/src/runtime/resourceLocator.js.map +1 -0
- package/dist/tests/generator.test.d.ts +1 -0
- package/dist/tests/generator.test.js +622 -0
- package/dist/tests/generator.test.js.map +1 -0
- package/dist/tests/metadata.test.d.ts +1 -0
- package/dist/tests/metadata.test.js +124 -0
- package/dist/tests/metadata.test.js.map +1 -0
- package/dist/tests/runtime.test.d.ts +1 -0
- package/dist/tests/runtime.test.js +181 -0
- package/dist/tests/runtime.test.js.map +1 -0
- package/package.json +80 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonApi.js","sourceRoot":"","sources":["../../../src/runtime/jsonApi.ts"],"names":[],"mappings":";;AAQA,4DAoBC;AAED,4DAeC;AA3CD,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAEvF,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAgB,wBAAwB,CAAC,QAAiB;IACxD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAC7B,CAAC;IAED,MAAM,MAAM,GAAe,EAAE,CAAC;IAE9B,IAAI,IAAI,IAAI,QAAQ;QAAE,MAAM,CAAC,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;IAC9C,IAAI,MAAM,IAAI,QAAQ;QAAE,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IAEpD,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5E,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACtD,MAAM,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC3E,CAAC;IAED,IAAI,eAAe,IAAI,QAAQ;QAAE,MAAM,CAAC,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC;IAC/E,IAAI,OAAO,IAAI,QAAQ;QAAE,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;IACvD,IAAI,MAAM,IAAI,QAAQ;QAAE,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IAEpD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,wBAAwB,CAAC,QAAiB;IACxD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,QAAQ,CAAC,EAAE,CAAC;QACjD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;IAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { IExecuteFunctions } from 'n8n-workflow';
|
|
2
|
+
import { type JsonObject } from './jsonApi';
|
|
3
|
+
import { type PlanningCenterRequestOptions } from './request';
|
|
4
|
+
export interface PaginationOptions {
|
|
5
|
+
returnAll: boolean;
|
|
6
|
+
limit: number;
|
|
7
|
+
}
|
|
8
|
+
export declare function collectPaginatedPlanningCenterResults(this: IExecuteFunctions, request: PlanningCenterRequestOptions, options: PaginationOptions): Promise<JsonObject[]>;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.collectPaginatedPlanningCenterResults = collectPaginatedPlanningCenterResults;
|
|
4
|
+
const jsonApi_1 = require("./jsonApi");
|
|
5
|
+
const request_1 = require("./request");
|
|
6
|
+
const MAX_PAGE_SIZE = 100;
|
|
7
|
+
function nextPathFromLink(next) {
|
|
8
|
+
try {
|
|
9
|
+
const url = new URL(next, 'https://api.planningcenter.invalid');
|
|
10
|
+
return `${url.pathname}${url.search}`;
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return next;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
function pathWithPageSize(path, pageSize) {
|
|
17
|
+
try {
|
|
18
|
+
const url = new URL(path, 'https://api.planningcenter.invalid');
|
|
19
|
+
url.searchParams.set('per_page', String(pageSize));
|
|
20
|
+
return `${url.pathname}${url.search}`;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
const separator = path.includes('?') ? '&' : '?';
|
|
24
|
+
return `${path}${separator}per_page=${pageSize}`;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function requestWithPageSize(request, pageSize) {
|
|
28
|
+
return {
|
|
29
|
+
...request,
|
|
30
|
+
qs: {
|
|
31
|
+
...request.qs,
|
|
32
|
+
per_page: pageSize,
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
async function collectPaginatedPlanningCenterResults(request, options) {
|
|
37
|
+
const collected = [];
|
|
38
|
+
const requestedLimit = Number(options.limit);
|
|
39
|
+
const limit = Number.isFinite(requestedLimit) ? Math.max(0, Math.floor(requestedLimit)) : 0;
|
|
40
|
+
if (!options.returnAll && limit === 0) {
|
|
41
|
+
return [];
|
|
42
|
+
}
|
|
43
|
+
let nextRequest = options.returnAll
|
|
44
|
+
? request
|
|
45
|
+
: requestWithPageSize(request, Math.min(limit, MAX_PAGE_SIZE));
|
|
46
|
+
while (nextRequest) {
|
|
47
|
+
const response = (await request_1.planningCenterApiRequest.call(this, nextRequest));
|
|
48
|
+
collected.push(...(0, jsonApi_1.normalizeJsonApiResponse)(response));
|
|
49
|
+
if (!options.returnAll && collected.length >= limit) {
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
const next = response.links?.next;
|
|
53
|
+
if (!next) {
|
|
54
|
+
nextRequest = undefined;
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
const path = nextPathFromLink(next);
|
|
58
|
+
nextRequest = {
|
|
59
|
+
...request,
|
|
60
|
+
path: options.returnAll
|
|
61
|
+
? path
|
|
62
|
+
: pathWithPageSize(path, Math.min(limit - collected.length, MAX_PAGE_SIZE)),
|
|
63
|
+
qs: undefined,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
return options.returnAll ? collected : collected.slice(0, limit);
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=pagination.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../../src/runtime/pagination.ts"],"names":[],"mappings":";;AAqDA,sFA0CC;AA7FD,uCAAsE;AACtE,uCAAwF;AAUxF,MAAM,aAAa,GAAG,GAAG,CAAC;AAO1B,SAAS,gBAAgB,CAAC,IAAY;IACpC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,oCAAoC,CAAC,CAAC;QAChE,OAAO,GAAG,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY,EAAE,QAAgB;IACtD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,oCAAoC,CAAC,CAAC;QAChE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QACnD,OAAO,GAAG,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACjD,OAAO,GAAG,IAAI,GAAG,SAAS,YAAY,QAAQ,EAAE,CAAC;IACnD,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAC1B,OAAqC,EACrC,QAAgB;IAEhB,OAAO;QACL,GAAG,OAAO;QACV,EAAE,EAAE;YACF,GAAG,OAAO,CAAC,EAAE;YACb,QAAQ,EAAE,QAAQ;SACnB;KACF,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,qCAAqC,CAEzD,OAAqC,EACrC,OAA0B;IAE1B,MAAM,SAAS,GAAiB,EAAE,CAAC;IACnC,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5F,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QACtC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,WAAW,GAA6C,OAAO,CAAC,SAAS;QAC3E,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC;IAEjE,OAAO,WAAW,EAAE,CAAC;QACnB,MAAM,QAAQ,GAAG,CAAC,MAAM,kCAAwB,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAgB,CAAC;QACzF,SAAS,CAAC,IAAI,CAAC,GAAG,IAAA,kCAAwB,EAAC,QAAQ,CAAC,CAAC,CAAC;QAEtD,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;YACpD,MAAM;QACR,CAAC;QAED,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;QAClC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,WAAW,GAAG,SAAS,CAAC;YACxB,SAAS;QACX,CAAC;QAED,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACpC,WAAW,GAAG;YACZ,GAAG,OAAO;YACV,IAAI,EAAE,OAAO,CAAC,SAAS;gBACrB,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;YAC7E,EAAE,EAAE,SAAS;SACd,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACnE,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { IDataObject, IExecuteFunctions, IHttpRequestMethods } from 'n8n-workflow';
|
|
2
|
+
import { NodeOperationError } from 'n8n-workflow';
|
|
3
|
+
export interface PlanningCenterCredentials {
|
|
4
|
+
applicationId: string;
|
|
5
|
+
secret: string;
|
|
6
|
+
baseUrl: string;
|
|
7
|
+
}
|
|
8
|
+
export interface PlanningCenterRequestOptions {
|
|
9
|
+
method: IHttpRequestMethods;
|
|
10
|
+
path: string;
|
|
11
|
+
qs?: IDataObject;
|
|
12
|
+
body?: any;
|
|
13
|
+
headers?: Record<string, string>;
|
|
14
|
+
}
|
|
15
|
+
export declare const MAX_ATTEMPTS = 5;
|
|
16
|
+
export declare function normalizeBaseUrl(baseUrl: string): string;
|
|
17
|
+
export declare function buildBasicAuthHeader(applicationId: string, secret: string): string;
|
|
18
|
+
export declare function sanitizePlanningCenterError(error: unknown, credentials?: Partial<PlanningCenterCredentials>): string;
|
|
19
|
+
export declare function shouldRetry(statusCode: number | undefined): boolean;
|
|
20
|
+
export declare function retryDelayMs(statusCode: number | undefined, retryAfter: string | undefined, attempt: number): number;
|
|
21
|
+
export declare function planningCenterApiRequest(this: IExecuteFunctions, options: PlanningCenterRequestOptions): Promise<unknown>;
|
|
22
|
+
export declare function toNodeOperationError(context: IExecuteFunctions, error: unknown, itemIndex: number): NodeOperationError;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MAX_ATTEMPTS = void 0;
|
|
4
|
+
exports.normalizeBaseUrl = normalizeBaseUrl;
|
|
5
|
+
exports.buildBasicAuthHeader = buildBasicAuthHeader;
|
|
6
|
+
exports.sanitizePlanningCenterError = sanitizePlanningCenterError;
|
|
7
|
+
exports.shouldRetry = shouldRetry;
|
|
8
|
+
exports.retryDelayMs = retryDelayMs;
|
|
9
|
+
exports.planningCenterApiRequest = planningCenterApiRequest;
|
|
10
|
+
exports.toNodeOperationError = toNodeOperationError;
|
|
11
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
12
|
+
exports.MAX_ATTEMPTS = 5;
|
|
13
|
+
function normalizeBaseUrl(baseUrl) {
|
|
14
|
+
return baseUrl.replace(/\/+$/, '');
|
|
15
|
+
}
|
|
16
|
+
function buildBasicAuthHeader(applicationId, secret) {
|
|
17
|
+
return `Basic ${Buffer.from(`${applicationId}:${secret}`).toString('base64')}`;
|
|
18
|
+
}
|
|
19
|
+
function sanitizePlanningCenterError(error, credentials) {
|
|
20
|
+
const raw = error instanceof Error ? error.message : String(error);
|
|
21
|
+
let message = raw || 'Planning Center API request failed';
|
|
22
|
+
for (const secretValue of [credentials?.applicationId, credentials?.secret].filter(Boolean)) {
|
|
23
|
+
message = message.split(String(secretValue)).join('[redacted]');
|
|
24
|
+
}
|
|
25
|
+
return message;
|
|
26
|
+
}
|
|
27
|
+
function shouldRetry(statusCode) {
|
|
28
|
+
return statusCode === 429 || (statusCode !== undefined && statusCode >= 500 && statusCode <= 599);
|
|
29
|
+
}
|
|
30
|
+
function retryDelayMs(statusCode, retryAfter, attempt) {
|
|
31
|
+
if (statusCode === 429 && retryAfter) {
|
|
32
|
+
const seconds = Number(retryAfter);
|
|
33
|
+
if (Number.isFinite(seconds)) {
|
|
34
|
+
return Math.max(0, seconds * 1000);
|
|
35
|
+
}
|
|
36
|
+
const retryDate = Date.parse(retryAfter);
|
|
37
|
+
if (!Number.isNaN(retryDate)) {
|
|
38
|
+
return Math.max(0, retryDate - Date.now());
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return Math.min(1000 * 2 ** attempt, 8000);
|
|
42
|
+
}
|
|
43
|
+
async function sleep(ms) {
|
|
44
|
+
if (ms <= 0)
|
|
45
|
+
return;
|
|
46
|
+
await new Promise((resolve) => setTimeout(resolve, ms));
|
|
47
|
+
}
|
|
48
|
+
function errorStatus(error) {
|
|
49
|
+
return error?.httpCode ?? error?.statusCode ?? error?.response?.statusCode ?? error?.response?.status;
|
|
50
|
+
}
|
|
51
|
+
function retryAfterHeader(error) {
|
|
52
|
+
const headers = error?.response?.headers ?? error?.headers;
|
|
53
|
+
return headers?.['retry-after'] ?? headers?.['Retry-After'];
|
|
54
|
+
}
|
|
55
|
+
async function planningCenterApiRequest(options) {
|
|
56
|
+
const credentials = (await this.getCredentials('planningCenterPatApi'));
|
|
57
|
+
const requestOptions = {
|
|
58
|
+
method: options.method,
|
|
59
|
+
url: `${normalizeBaseUrl(credentials.baseUrl)}${options.path}`,
|
|
60
|
+
qs: options.qs,
|
|
61
|
+
body: options.body,
|
|
62
|
+
json: true,
|
|
63
|
+
headers: {
|
|
64
|
+
Accept: 'application/json',
|
|
65
|
+
'Content-Type': 'application/json',
|
|
66
|
+
Authorization: buildBasicAuthHeader(credentials.applicationId, credentials.secret),
|
|
67
|
+
...options.headers,
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
let lastError;
|
|
71
|
+
for (let attempt = 0; attempt < exports.MAX_ATTEMPTS; attempt += 1) {
|
|
72
|
+
try {
|
|
73
|
+
return await this.helpers.httpRequest(requestOptions);
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
lastError = error;
|
|
77
|
+
const statusCode = errorStatus(error);
|
|
78
|
+
if (attempt === exports.MAX_ATTEMPTS - 1 || !shouldRetry(statusCode)) {
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
await sleep(retryDelayMs(statusCode, retryAfterHeader(error), attempt));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
const message = sanitizePlanningCenterError(lastError, credentials);
|
|
85
|
+
throw new n8n_workflow_1.NodeApiError(this.getNode(), lastError, { message });
|
|
86
|
+
}
|
|
87
|
+
function toNodeOperationError(context, error, itemIndex) {
|
|
88
|
+
if (error instanceof n8n_workflow_1.NodeOperationError) {
|
|
89
|
+
return error;
|
|
90
|
+
}
|
|
91
|
+
return new n8n_workflow_1.NodeOperationError(context.getNode(), sanitizePlanningCenterError(error), { itemIndex });
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../../src/runtime/request.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function extractResourceLocatorId(value: unknown): string;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.extractResourceLocatorId = extractResourceLocatorId;
|
|
4
|
+
function isResourceLocatorValue(value) {
|
|
5
|
+
return Boolean(value && typeof value === 'object' && value.__rl === true);
|
|
6
|
+
}
|
|
7
|
+
function extractResourceLocatorId(value) {
|
|
8
|
+
const resolved = isResourceLocatorValue(value) ? value.value : value;
|
|
9
|
+
if (resolved === undefined || resolved === null)
|
|
10
|
+
return '';
|
|
11
|
+
if (typeof resolved === 'string' || typeof resolved === 'number' || typeof resolved === 'boolean')
|
|
12
|
+
return String(resolved);
|
|
13
|
+
return '';
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=resourceLocator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resourceLocator.js","sourceRoot":"","sources":["../../../src/runtime/resourceLocator.ts"],"names":[],"mappings":";;AAMA,4DAOC;AAXD,SAAS,sBAAsB,CAAC,KAAc;IAC5C,OAAO,OAAO,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAK,KAA4B,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACpG,CAAC;AAED,SAAgB,wBAAwB,CAAC,KAAc;IACrD,MAAM,QAAQ,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAErE,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IAC3D,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,QAAQ,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC;IAE3H,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|