n8n-nodes-vodafone 1.0.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 ADDED
@@ -0,0 +1,19 @@
1
+ Copyright (c) Daniel Tschinder
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,42 @@
1
+ # n8n-nodes-vodafone
2
+
3
+ This is an n8n community node for downloading Vodafone Germany cable invoices as binary PDF files.
4
+
5
+ [n8n](https://n8n.io/) is a workflow automation platform.
6
+
7
+ ## Installation
8
+
9
+ Follow the [community nodes installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n documentation.
10
+
11
+ ## Operations
12
+
13
+ - Invoice
14
+ - Download the latest invoices from all cable contracts on a Vodafone account
15
+
16
+ ## Credentials
17
+
18
+ Create a Vodafone API credential with your MeinVodafone username and password.
19
+
20
+ The password is stored as an encrypted n8n credential value. The node uses it only to perform the Vodafone login flow and does not log credentials, session cookies, tokens, or invoice payloads.
21
+
22
+ ## Usage
23
+
24
+ Add the Vodafone node to a workflow and choose:
25
+
26
+ - Resource: `Invoice`
27
+ - Operation: `Download`
28
+ - Number of Invoices: How many latest invoices to fetch per contract. The default is `1`.
29
+ - Binary Property: The output binary property name. The default is `data`.
30
+
31
+ The node discovers all cable contracts in the account, fetches the newest invoices for each contract, downloads each invoice document, and returns one item per PDF.
32
+
33
+ Each output item includes invoice and contract metadata in `json` and the PDF in the configured binary property.
34
+
35
+ ## Compatibility
36
+
37
+ Requires n8n `1.116.0` or newer.
38
+
39
+ ## Resources
40
+
41
+ - [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
42
+ - [n8n creating nodes documentation](https://docs.n8n.io/integrations/creating-nodes/overview/)
@@ -0,0 +1,8 @@
1
+ import type { ICredentialType, Icon, INodeProperties } from 'n8n-workflow';
2
+ export declare class VodafoneApi implements ICredentialType {
3
+ name: string;
4
+ displayName: string;
5
+ icon: Icon;
6
+ documentationUrl: string;
7
+ properties: INodeProperties[];
8
+ }
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VodafoneApi = void 0;
4
+ class VodafoneApi {
5
+ name = 'vodafoneApi';
6
+ displayName = 'Vodafone API';
7
+ icon = 'file:../icons/vodafone.svg';
8
+ documentationUrl = 'https://github.com/danez/n8n-nodes-vodafone#credentials';
9
+ properties = [
10
+ {
11
+ displayName: 'Username',
12
+ name: 'username',
13
+ type: 'string',
14
+ default: '',
15
+ required: true,
16
+ },
17
+ {
18
+ displayName: 'Password',
19
+ name: 'password',
20
+ type: 'string',
21
+ typeOptions: { password: true },
22
+ default: '',
23
+ required: true,
24
+ },
25
+ ];
26
+ }
27
+ exports.VodafoneApi = VodafoneApi;
28
+ //# sourceMappingURL=VodafoneApi.credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VodafoneApi.credentials.js","sourceRoot":"","sources":["../../credentials/VodafoneApi.credentials.ts"],"names":[],"mappings":";;;AAEA,MAAa,WAAW;IACtB,IAAI,GAAG,aAAa,CAAC;IAErB,WAAW,GAAG,cAAc,CAAC;IAE7B,IAAI,GAAS,4BAA4B,CAAC;IAE1C,gBAAgB,GAAG,yDAAyD,CAAC;IAE7E,UAAU,GAAsB;QAC9B;YACE,WAAW,EAAE,UAAU;YACvB,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,EAAE;YACX,QAAQ,EAAE,IAAI;SACf;QACD;YACE,WAAW,EAAE,UAAU;YACvB,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC/B,OAAO,EAAE,EAAE;YACX,QAAQ,EAAE,IAAI;SACf;KACF,CAAC;CACH;AA1BD,kCA0BC"}
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="2400" height="2400" version="1.0" viewBox="0 0 1800 1800"><path fill="#fff" d="M1040.5 542.3c14.8 5.5 8.9-.1 125 116.5 60 60.2 110.1 111.3 111.6 113.6a52 52 0 0 1 7.8 22.6c.8 5.7 1.1 88.5 1.1 256.8 0 271.2.2 263.3-5.7 285.2-1.4 5.2-2.8 10.5-3 11.8-.3 1.2-.9 2.5-1.4 2.8q-.8.6-.9 2.1c0 .8-.6 2.9-1.4 4.6l-4.6 10.2c-5.1 11.3-17 30.1-23.5 37.1a169 169 0 0 1-51.5 40.7c-9.4 4.6-9.8 4.8-25 10.2a1320 1320 0 0 1-53.5 18.2l-20.8 5.7a379 379 0 0 1-24.2 6.1c-2.2.3-6 1.2-8.5 2-2.5.7-7.9 2.1-12 3a119 119 0 0 0-46.5 20.4c-5.1 3.9-22.2 20-39.5 37.3-22.3 22.3-31.8 31.2-35.5 33a52 52 0 0 1-47.7.9 61 61 0 0 1-19.6-17l-11.8-13.6c-2-2.2-6-6.9-8.9-10.5a130 130 0 0 0-31.5-29.1c-10.7-7.2-12.7-8.1-46-18.9a528 528 0 0 1-29-10c-.8-.1-3.3-.9-5.5-2a30 30 0 0 0-5-2 194 194 0 0 1-19-7 72 72 0 0 0-15.3-6l-5.2-2.4a279 279 0 0 1-18.3-8.2 30 30 0 0 0-5.9-2.4c-.6 0-4.4-1.6-8.5-3.5s-7.6-3.5-7.9-3.5a176 176 0 0 1-65.4-59.3c0-.3-2-4-4.5-8.1a80 80 0 0 1-5.9-11.9 164 164 0 0 1-15.1-53.2c-1.3-10.5-1.5-52.9-1.5-357 0-368.8-.1-356.9 4.6-367.5 7-15.5 9.6-19.6 18.2-28.3a60 60 0 0 1 24.7-16.7c3-1.2 13.6-3.9 17-4.3 1.7-.3 96.8-.4 211.5-.3 199.3.1 208.7.2 213.5 1.9"/><g fill="#ef0201"><path d="M1014 119c-25.4 1-51.9 3.7-81.5 8.5l-15.6 2.4c-3.6.6-7.2 1.3-8 1.6s-4.8 1.2-8.9 2c-4.1.7-10.5 2.1-14.3 2.9l-13 3c-5.8 1.3-21.6 5.5-28.2 7.5L834 150c-16.8 5-54.7 18-61.7 21.1-2.3 1-4.9 1.9-5.7 1.9q-1.4 0-2 .9c-.3.5-1.7 1.2-3 1.5s-5.5 2-9.3 3.7l-10.3 4.5-5.5 2.4a997 997 0 0 0-62.5 31.2c-.8.3-6.8 3.8-13.4 7.7-6.5 3.9-12.1 7.1-12.5 7.1a47 47 0 0 0-6.2 3.8l-14.3 9.2c-4.7 3-11.6 7.5-15.2 10l-13 9a965 965 0 0 0-52.4 39.7l-7.5 6.3c-5.2 4.4-15.3 13.2-23.9 21-12.2 11-41 39.8-53.4 53.5l-14.7 16.1-5.5 6.4-10.9 12.9a1151 1151 0 0 0-47.1 63.5c0 .3-2 3.5-4.4 7.1a299 299 0 0 0-8.6 13.2l-5 8.3a756 756 0 0 0-42.2 79c-4.6 9.9-5 10.8-7.8 17.5l-3 7-3 7-3 7c-3.9 8.7-5 11.6-5 12.7q0 1.4-.9 2.3c-.4.6-1.9 4.4-3.1 8.5a52 52 0 0 1-3.2 8.5q-.7 1-.8 2.3c0 .8-.6 2.8-1.4 4.5s-3.1 8.6-5.1 15.2a413 413 0 0 1-6.4 20L277 719a476 476 0 0 0-7 28c-.6 3-1.6 7-2.2 8.8-.5 1.9-1.4 5.7-1.9 8.5-.4 2.9-1.5 8.8-2.3 13.2a694 694 0 0 0-11.7 93c-1.3 19.2-.6 99.3.9 111l2.2 18.5a615 615 0 0 0 8.5 57.5c.9 4.4 2 10.7 2.5 14s1.3 6.7 1.6 7.5c.7 1.5 2.8 10.1 4.5 17.9.5 2.5 1.3 5.9 1.9 7.5l2.6 9.1a759 759 0 0 0 16.4 51.9l3.6 9.6c2.5 7.1 4.7 12.5 8 19.7a16 16 0 0 1 1.4 4.1c0 .6.7 2.3 1.5 3.9.8 1.5 2.9 5.9 4.6 9.8a800 800 0 0 0 29.7 59.2c1.2 1.7 2.2 3.4 2.2 3.8a683 683 0 0 0 186 211.1 789 789 0 0 0 60.7 40.7c2.4 1.5 6.8 4.1 9.8 5.7l11.3 6.1c3.1 1.8 12.2 6.4 20.2 10.5 12.7 6.3 18 8.9 31.5 15l31 12.4c2.7 1.3 14.5 5.3 29.5 10.2l16.8 5.4c2.3.8 4.9 1.4 5.7 1.4.9 0 2.3.4 3.3 1a29 29 0 0 0 6.2 1.9l10.5 2.6c25.6 7 70.2 14.5 104.5 17.7 16 1.4 77.8 1.4 93.5 0a616 616 0 0 0 125-23.3 489 489 0 0 0 43.2-14.9c1.3 0 4.5-1.3 14-5.6a154 154 0 0 0 18.8-7.9 811 811 0 0 0 55.7-29 793 793 0 0 0 60.3-40.2l19.5-15.3 10.5-9c5.5-4.6 14.1-12.3 19-17l15.9-15.1a802 802 0 0 0 46.1-50.5c6-6.3 26.3-33.7 37.8-50.9 23.6-35.2 40-64.4 55.7-99l4.6-10c9-19.8 24.6-63.7 28.9-81.5l2.9-11a589 589 0 0 0 17.6-96.5c.5-6.6 1.5-17 2.1-23 1.5-14.9.6-75.2-1.5-96.5a580 580 0 0 0-13.5-82l-3.1-11-2.9-10.5-3.1-10.5a507 507 0 0 0-15.1-42.7 21 21 0 0 1-1.9-5.3c0-.5-.4-1.8-1-2.8l-3.1-6.7A578 578 0 0 0 1437 644c-.3-.3-3.5-4.3-7-9a520 520 0 0 0-98.6-98.3l-6-4.5a574 574 0 0 0-57.6-37 616 616 0 0 0-42.3-21.1l-8-3.6-5.5-2.3-7-3c-2.5-1.1-6.7-2.7-9.5-3.6l-7-2.6a638 638 0 0 0-31-10.7l-10-3a696 696 0 0 0-97-20.9c-41.2-5.5-92.8-7.9-117.5-5.4a539 539 0 0 0-49 7.9 37 37 0 0 1-18.5-.3c-2-.9-4.5-3.2-6-5.7-2.5-3.9-2.7-4.7-2.2-12.8a182 182 0 0 1 9.2-45.1c1.4-4.8 3.1-9.5 6.4-17.5 3.7-8.8 15.3-31.5 21.5-41.6a363 363 0 0 1 38.1-51.4c7.7-9.3 16-17.8 28.5-29.4a360 360 0 0 1 34-29.1 488 488 0 0 1 86.2-53.7c11.5-5.6 13.8-7.6 13.8-12.1 0-.9-.9-2.8-1.9-4.1-1.5-2-3.3-2.5-12.2-3.6a546 546 0 0 0-66.9-1.5m26.5 423.3c14.8 5.5 8.9-.1 125 116.5 60 60.2 110.1 111.3 111.6 113.6a52 52 0 0 1 7.8 22.6c.8 5.7 1.1 88.5 1.1 256.8 0 271.2.2 263.3-5.7 285.2-1.4 5.2-2.8 10.5-3 11.8-.3 1.2-.9 2.5-1.4 2.8q-.8.6-.9 2.1c0 .8-.6 2.9-1.4 4.6l-4.6 10.2c-5.1 11.3-17 30.1-23.5 37.1a169 169 0 0 1-51.5 40.7c-9.4 4.6-9.8 4.8-25 10.2a1320 1320 0 0 1-53.5 18.2l-20.8 5.7a379 379 0 0 1-24.2 6.1c-2.2.3-6 1.2-8.5 2-2.5.7-7.9 2.1-12 3a119 119 0 0 0-46.5 20.4c-5.1 3.9-22.2 20-39.5 37.3-22.3 22.3-31.8 31.2-35.5 33a52 52 0 0 1-47.7.9 61 61 0 0 1-19.6-17l-11.8-13.6c-2-2.2-6-6.9-8.9-10.5a130 130 0 0 0-31.5-29.1c-10.7-7.2-12.7-8.1-46-18.9a528 528 0 0 1-29-10c-.8-.1-3.3-.9-5.5-2a30 30 0 0 0-5-2 194 194 0 0 1-19-7 72 72 0 0 0-15.3-6l-5.2-2.4a279 279 0 0 1-18.3-8.2 30 30 0 0 0-5.9-2.4c-.6 0-4.4-1.6-8.5-3.5s-7.6-3.5-7.9-3.5a176 176 0 0 1-65.4-59.3c0-.3-2-4-4.5-8.1a80 80 0 0 1-5.9-11.9 164 164 0 0 1-15.1-53.2c-1.3-10.5-1.5-52.9-1.5-357 0-368.8-.1-356.9 4.6-367.5 7-15.5 9.6-19.6 18.2-28.3a60 60 0 0 1 24.7-16.7c3-1.2 13.6-3.9 17-4.3 1.7-.3 96.8-.4 211.5-.3 199.3.1 208.7.2 213.5 1.9"/><path d="M1034.5 621.1c-.3.8-.4 33.9-.3 73.5l.3 71.9 2.9 5.9a37 37 0 0 0 14.1 16.1c11 6.9 6.4 6.5 86.2 6.3l72.1-.3-87.3-87.5c-62-62-87.6-87-88-85.9M683 871.5c-18.8 10.5-18.5 36.8.5 45.5 4 1.8 8.2 2 93.6 2.8 49.2.5 141.1.9 204.2 1l114.8.2 5.4-2.5c5.8-2.8 12.2-9.3 13.1-13.5.3-1.4 1-3.7 1.6-5.2 1.5-3.9-.9-13.3-4.7-18.1a46 46 0 0 0-6.8-7.1l-3.9-3.1-22.1-.7c-12.2-.3-105.2-.9-206.7-1.2l-184.5-.6zm5 117.5c-14.1 2.5-23 19.6-17.1 33.2a31 31 0 0 0 12.9 13.1c3.1 1.3 115.6 2.4 275 2.6 109.6.1 104.5.4 111.7-6.7a24 24 0 0 0-.5-35.1c-8.1-7.5 5.9-7-197-7.4-99.8-.1-183.1 0-185 .3m-1 116.9c-7.2 2.3-16 10-16 14 0 1.1-.4 2.3-1 2.6-1.6 1-1.2 12.8.6 16.6 2.2 4.6 7.1 9.7 11.4 11.8 3.2 1.7 8.8 1.9 63 2.5 102.2 1.1 186.4.8 191.1-.5a30 30 0 0 0 14.5-13.4c.8-1.9 1.4-6.2 1.4-9.5a21 21 0 0 0-7.7-17.1c-7.6-7.3 2.4-6.7-132.8-7.3-67.1-.3-123.1-.2-124.5.3m177.5 125.8a29 29 0 0 0-5.9 3.3c-7.5 5.6-7.1.8-7.4 75-.1 36.5-.6 66.8-1.1 67.3-.4.4-3.1-.6-5.8-2.3l-5-3.1-35.3.3-35.2.3-3.4 3.9c-2.7 3.1-3.4 4.8-3.4 8a17 17 0 0 0 1.3 6.3c.7 1.1 31.3 32.4 68 69.4l66.8 67.2 5.6.5 5.5.5 34.5-34.9 67.8-68.4c28.8-28.9 33.4-34 34-37.2 1-5.1.1-8.1-3.5-11.7q-3-3-7.3-3.6c-2.3-.3-18.6-.5-36.2-.3-28.6.3-32.3.5-34.5 2-4.1 3-5.8 2.3-6.5-2.5-.4-2.4-.5-28.8-.3-58.8s.2-57.9-.2-62.1c-.8-8.8-3.2-13.4-9-17.1-3.5-2.2-4-2.2-42.5-2.4a808 808 0 0 0-41 .4"/></g></svg>
@@ -0,0 +1,8 @@
1
+ import type { ICredentialDataDecryptedObject, ICredentialsDecrypted, ICredentialTestFunctions, IExecuteFunctions, INodeCredentialTestResult } from 'n8n-workflow';
2
+ import type { VodafoneCredentials, VodafoneDocumentData, VodafoneInvoiceList, VodafoneSession, VodafoneUserInfo } from './interfaces.js';
3
+ export declare function testVodafoneCredentials(this: ICredentialTestFunctions, credential: ICredentialsDecrypted<ICredentialDataDecryptedObject>): Promise<INodeCredentialTestResult>;
4
+ export declare function login(executeFunctions: IExecuteFunctions, credentials: VodafoneCredentials, itemIndex: number): Promise<VodafoneSession>;
5
+ export declare function getUserInfo(executeFunctions: IExecuteFunctions, session: VodafoneSession, itemIndex: number): Promise<VodafoneUserInfo>;
6
+ export declare function getInvoiceList(executeFunctions: IExecuteFunctions, session: VodafoneSession, contractId: string, itemIndex: number): Promise<VodafoneInvoiceList>;
7
+ export declare function getInvoiceDocument(executeFunctions: IExecuteFunctions, session: VodafoneSession, customerId: string, documentId: string, itemIndex: number): Promise<VodafoneDocumentData>;
8
+ export declare function sanitizeFileName(value: string): string;
@@ -0,0 +1,432 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.testVodafoneCredentials = testVodafoneCredentials;
4
+ exports.login = login;
5
+ exports.getUserInfo = getUserInfo;
6
+ exports.getInvoiceList = getInvoiceList;
7
+ exports.getInvoiceDocument = getInvoiceDocument;
8
+ exports.sanitizeFileName = sanitizeFileName;
9
+ const crypto_1 = require("crypto");
10
+ const n8n_workflow_1 = require("n8n-workflow");
11
+ const ACCEPT = 'application/json, text/plain, */*';
12
+ const ACCEPT_LANGUAGE = 'en-US,en;q=0.5';
13
+ const USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:121.0) Gecko/20100101 Firefox/121.0';
14
+ const LOGIN_URL = 'https://www.vodafone.de/mint/rest/v60/session/start';
15
+ const LOGIN_REFERER = 'https://www.vodafone.de/meinvodafone/account/login';
16
+ const OIDC_AUTHORIZE_URL = 'https://www.vodafone.de/mint/oidc/authorize';
17
+ const OIDC_TOKEN_URL = 'https://www.vodafone.de/mint/oidc/token';
18
+ const OIDC_CLIENT_ID = 'b0595a44-0726-11ec-9011-9457a55a403c';
19
+ const OIDC_REDIRECT_URI = 'https://www.vodafone.de/meinvodafone/services/';
20
+ const OIDC_SCOPES = 'openid profile webseal user-groups user-accounts validate-token update-email-username account';
21
+ const OIDC_CODE_CHALLENGE_LENGTH = 43;
22
+ const VODAFONE_API_KEY = 'aEIoMCae0A933wBL0bLlS6SwSBfkKwM5';
23
+ const USER_INFO_URL = 'https://api.vodafone.de/meinvodafone/v2/tmf-api/openid/v4/userinfo';
24
+ function defaultHeaders() {
25
+ return {
26
+ Accept: ACCEPT,
27
+ 'Accept-Language': ACCEPT_LANGUAGE,
28
+ 'User-Agent': USER_AGENT,
29
+ };
30
+ }
31
+ function generateCodeVerifier() {
32
+ const letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
33
+ let verifier = '';
34
+ for (let i = 0; i < OIDC_CODE_CHALLENGE_LENGTH; i++) {
35
+ verifier += letters[(0, crypto_1.randomInt)(letters.length)];
36
+ }
37
+ return verifier;
38
+ }
39
+ function codeChallengeFor(verifier) {
40
+ return (0, crypto_1.createHash)('sha256').update(verifier).digest('base64url');
41
+ }
42
+ function oidcAuthorizationUrl(verifier, state) {
43
+ const url = new URL(OIDC_AUTHORIZE_URL);
44
+ url.searchParams.set('response_type', 'code');
45
+ url.searchParams.set('client_id', OIDC_CLIENT_ID);
46
+ url.searchParams.set('scope', OIDC_SCOPES);
47
+ url.searchParams.set('redirect_uri', OIDC_REDIRECT_URI);
48
+ url.searchParams.set('code_challenge', codeChallengeFor(verifier));
49
+ url.searchParams.set('code_challenge_method', 'S256');
50
+ url.searchParams.set('prompt', 'none');
51
+ if (state !== undefined) {
52
+ url.searchParams.set('state', state);
53
+ }
54
+ return url.toString();
55
+ }
56
+ function headerValue(headers, name) {
57
+ const lowerName = name.toLowerCase();
58
+ for (const [key, value] of Object.entries(headers)) {
59
+ if (key.toLowerCase() === lowerName) {
60
+ return value;
61
+ }
62
+ }
63
+ return undefined;
64
+ }
65
+ function parseSetCookieHeaders(headers) {
66
+ const rawSetCookie = headerValue(headers, 'set-cookie');
67
+ const setCookieHeaders = Array.isArray(rawSetCookie)
68
+ ? rawSetCookie
69
+ : typeof rawSetCookie === 'string'
70
+ ? [rawSetCookie]
71
+ : [];
72
+ return setCookieHeaders.flatMap((setCookieHeader) => {
73
+ if (typeof setCookieHeader !== 'string') {
74
+ return [];
75
+ }
76
+ const cookiePair = setCookieHeader.split(';', 1)[0];
77
+ const separatorIndex = cookiePair.indexOf('=');
78
+ if (separatorIndex === -1) {
79
+ return [];
80
+ }
81
+ return [
82
+ {
83
+ name: cookiePair.slice(0, separatorIndex),
84
+ value: cookiePair.slice(separatorIndex + 1),
85
+ },
86
+ ];
87
+ });
88
+ }
89
+ function mergeCookies(cookies, response) {
90
+ const mergedCookies = new Map(cookies);
91
+ for (const cookie of parseSetCookieHeaders(response.headers)) {
92
+ mergedCookies.set(cookie.name, cookie.value);
93
+ }
94
+ return mergedCookies;
95
+ }
96
+ function cookieHeader(cookies) {
97
+ return [...cookies.entries()]
98
+ .map(([name, value]) => `${name}=${value}`)
99
+ .join('; ');
100
+ }
101
+ function locationHeader(response) {
102
+ const location = headerValue(response.headers, 'location');
103
+ if (typeof location === 'string') {
104
+ return location;
105
+ }
106
+ if (Array.isArray(location) && typeof location[0] === 'string') {
107
+ return location[0];
108
+ }
109
+ return '';
110
+ }
111
+ function createApiError(executeFunctions, message, itemIndex, response) {
112
+ const statusText = response?.statusCode
113
+ ? `${message} (HTTP ${response.statusCode}${response.statusMessage ? ` ${response.statusMessage}` : ''})`
114
+ : message;
115
+ const errorResponse = { message: statusText };
116
+ if (response?.statusCode !== undefined) {
117
+ errorResponse.statusCode = response.statusCode;
118
+ }
119
+ if (response?.statusMessage !== undefined) {
120
+ errorResponse.statusMessage = response.statusMessage;
121
+ }
122
+ if (typeof response?.body === 'string') {
123
+ errorResponse.body = response.body;
124
+ }
125
+ if (response?.body &&
126
+ typeof response.body === 'object' &&
127
+ !Buffer.isBuffer(response.body)) {
128
+ errorResponse.body = response.body;
129
+ }
130
+ return new n8n_workflow_1.NodeApiError(executeFunctions.getNode(), errorResponse, {
131
+ itemIndex,
132
+ httpCode: response?.statusCode ? String(response.statusCode) : undefined,
133
+ message: statusText,
134
+ });
135
+ }
136
+ async function credentialTestRequest(credentialTestFunctions, options) {
137
+ return (await credentialTestFunctions.helpers.request({
138
+ ...options,
139
+ resolveWithFullResponse: true,
140
+ simple: false,
141
+ }));
142
+ }
143
+ async function requestJson(executeFunctions, session, url, requestName, itemIndex) {
144
+ const response = (await executeFunctions.helpers.httpRequest({
145
+ url,
146
+ method: 'GET',
147
+ headers: {
148
+ ...defaultHeaders(),
149
+ 'Content-Type': 'application/json',
150
+ Authorization: `${session.token.token_type} ${session.token.access_token}`,
151
+ Cookie: cookieHeader(session.cookies),
152
+ Referer: OIDC_REDIRECT_URI,
153
+ 'x-api-key': VODAFONE_API_KEY,
154
+ },
155
+ json: true,
156
+ returnFullResponse: true,
157
+ ignoreHttpStatusErrors: true,
158
+ }));
159
+ if (response.statusCode !== 200) {
160
+ throw createApiError(executeFunctions, `Vodafone API request failed while ${requestName}`, itemIndex, response);
161
+ }
162
+ return response.body;
163
+ }
164
+ async function getInitialMintCookiesForCredentialTest(credentialTestFunctions) {
165
+ const verifier = generateCodeVerifier();
166
+ const response = await credentialTestRequest(credentialTestFunctions, {
167
+ uri: oidcAuthorizationUrl(verifier),
168
+ method: 'GET',
169
+ headers: {
170
+ 'User-Agent': USER_AGENT,
171
+ },
172
+ followRedirect: false,
173
+ });
174
+ if (response.statusCode !== 302) {
175
+ throw new Error('Could not start Vodafone login session');
176
+ }
177
+ return mergeCookies(new Map(), response);
178
+ }
179
+ async function getInitialMintCookies(executeFunctions, itemIndex) {
180
+ const verifier = generateCodeVerifier();
181
+ const response = (await executeFunctions.helpers.httpRequest({
182
+ url: oidcAuthorizationUrl(verifier),
183
+ method: 'GET',
184
+ headers: {
185
+ 'User-Agent': USER_AGENT,
186
+ },
187
+ disableFollowRedirect: true,
188
+ returnFullResponse: true,
189
+ ignoreHttpStatusErrors: true,
190
+ }));
191
+ if (response.statusCode !== 302) {
192
+ throw createApiError(executeFunctions, 'Could not start Vodafone login session', itemIndex, response);
193
+ }
194
+ return mergeCookies(new Map(), response);
195
+ }
196
+ async function exchangeCodeForTokenForCredentialTest(credentialTestFunctions, code, verifier) {
197
+ const url = new URL(OIDC_TOKEN_URL);
198
+ url.searchParams.set('client_id', OIDC_CLIENT_ID);
199
+ url.searchParams.set('grant_type', 'authorization_code');
200
+ url.searchParams.set('code', code);
201
+ url.searchParams.set('code_verifier', verifier);
202
+ url.searchParams.set('redirect_uri', OIDC_REDIRECT_URI);
203
+ const response = await credentialTestRequest(credentialTestFunctions, {
204
+ uri: url.toString(),
205
+ method: 'POST',
206
+ headers: defaultHeaders(),
207
+ json: true,
208
+ });
209
+ if (response.statusCode !== 200) {
210
+ throw new Error('Could not exchange Vodafone login code for a token');
211
+ }
212
+ const token = response.body;
213
+ if (!token.access_token || !token.token_type) {
214
+ throw new Error('Vodafone login response did not include an access token');
215
+ }
216
+ return token;
217
+ }
218
+ async function exchangeCodeForToken(executeFunctions, code, verifier, itemIndex) {
219
+ const url = new URL(OIDC_TOKEN_URL);
220
+ url.searchParams.set('client_id', OIDC_CLIENT_ID);
221
+ url.searchParams.set('grant_type', 'authorization_code');
222
+ url.searchParams.set('code', code);
223
+ url.searchParams.set('code_verifier', verifier);
224
+ url.searchParams.set('redirect_uri', OIDC_REDIRECT_URI);
225
+ const response = (await executeFunctions.helpers.httpRequest({
226
+ url: url.toString(),
227
+ method: 'POST',
228
+ headers: defaultHeaders(),
229
+ json: true,
230
+ returnFullResponse: true,
231
+ ignoreHttpStatusErrors: true,
232
+ }));
233
+ if (response.statusCode !== 200) {
234
+ throw createApiError(executeFunctions, 'Could not exchange Vodafone login code for a token', itemIndex, response);
235
+ }
236
+ const token = response.body;
237
+ if (!token.access_token || !token.token_type) {
238
+ throw new n8n_workflow_1.NodeOperationError(executeFunctions.getNode(), 'Vodafone login response did not include an access token', {
239
+ itemIndex,
240
+ });
241
+ }
242
+ return token;
243
+ }
244
+ async function testVodafoneCredentials(credential) {
245
+ try {
246
+ const credentials = credential.data;
247
+ let cookies = await getInitialMintCookiesForCredentialTest(this);
248
+ const loginResponse = await credentialTestRequest(this, {
249
+ uri: LOGIN_URL,
250
+ method: 'POST',
251
+ headers: {
252
+ ...defaultHeaders(),
253
+ 'Content-Type': 'application/json',
254
+ Referer: LOGIN_REFERER,
255
+ Cookie: cookieHeader(cookies),
256
+ },
257
+ body: {
258
+ authnIdentifier: credentials.username,
259
+ context: '',
260
+ conversation: '',
261
+ credential: credentials.password,
262
+ targetURL: '',
263
+ },
264
+ json: true,
265
+ });
266
+ if (loginResponse.statusCode !== 200) {
267
+ throw new Error('Vodafone login failed');
268
+ }
269
+ cookies = mergeCookies(cookies, loginResponse);
270
+ const verifier = generateCodeVerifier();
271
+ const authorizeResponse = await credentialTestRequest(this, {
272
+ uri: oidcAuthorizationUrl(verifier, ''),
273
+ method: 'GET',
274
+ headers: {
275
+ ...defaultHeaders(),
276
+ Cookie: cookieHeader(cookies),
277
+ },
278
+ followRedirect: false,
279
+ });
280
+ if (authorizeResponse.statusCode !== 302) {
281
+ throw new Error('Vodafone login did not return an authorization code');
282
+ }
283
+ const location = locationHeader(authorizeResponse);
284
+ const code = location
285
+ ? new URL(location, OIDC_REDIRECT_URI).searchParams.get('code')
286
+ : '';
287
+ if (!code) {
288
+ throw new Error('Vodafone login response did not include an authorization code');
289
+ }
290
+ await exchangeCodeForTokenForCredentialTest(this, code, verifier);
291
+ return {
292
+ status: 'OK',
293
+ message: 'Connection successful',
294
+ };
295
+ }
296
+ catch (error) {
297
+ return {
298
+ status: 'Error',
299
+ message: error instanceof Error
300
+ ? error.message
301
+ : 'Vodafone credential test failed',
302
+ };
303
+ }
304
+ }
305
+ async function login(executeFunctions, credentials, itemIndex) {
306
+ let cookies = await getInitialMintCookies(executeFunctions, itemIndex);
307
+ const loginResponse = (await executeFunctions.helpers.httpRequest({
308
+ url: LOGIN_URL,
309
+ method: 'POST',
310
+ headers: {
311
+ ...defaultHeaders(),
312
+ 'Content-Type': 'application/json',
313
+ Referer: LOGIN_REFERER,
314
+ Cookie: cookieHeader(cookies),
315
+ },
316
+ body: {
317
+ authnIdentifier: credentials.username,
318
+ context: '',
319
+ conversation: '',
320
+ credential: credentials.password,
321
+ targetURL: '',
322
+ },
323
+ json: true,
324
+ returnFullResponse: true,
325
+ ignoreHttpStatusErrors: true,
326
+ }));
327
+ if (loginResponse.statusCode !== 200) {
328
+ throw createApiError(executeFunctions, 'Vodafone login failed', itemIndex, loginResponse);
329
+ }
330
+ cookies = mergeCookies(cookies, loginResponse);
331
+ const verifier = generateCodeVerifier();
332
+ const authorizeResponse = (await executeFunctions.helpers.httpRequest({
333
+ url: oidcAuthorizationUrl(verifier, ''),
334
+ method: 'GET',
335
+ headers: {
336
+ ...defaultHeaders(),
337
+ Cookie: cookieHeader(cookies),
338
+ },
339
+ disableFollowRedirect: true,
340
+ returnFullResponse: true,
341
+ ignoreHttpStatusErrors: true,
342
+ }));
343
+ if (authorizeResponse.statusCode !== 302) {
344
+ throw createApiError(executeFunctions, 'Vodafone login did not return an authorization code', itemIndex, authorizeResponse);
345
+ }
346
+ cookies = mergeCookies(cookies, authorizeResponse);
347
+ const location = locationHeader(authorizeResponse);
348
+ if (!location) {
349
+ throw new n8n_workflow_1.NodeOperationError(executeFunctions.getNode(), 'Vodafone login response did not include a redirect location', {
350
+ itemIndex,
351
+ });
352
+ }
353
+ const code = new URL(location, OIDC_REDIRECT_URI).searchParams.get('code');
354
+ if (!code) {
355
+ throw new n8n_workflow_1.NodeOperationError(executeFunctions.getNode(), 'Vodafone login response did not include an authorization code', {
356
+ itemIndex,
357
+ });
358
+ }
359
+ return {
360
+ cookies,
361
+ token: await exchangeCodeForToken(executeFunctions, code, verifier, itemIndex),
362
+ };
363
+ }
364
+ async function getUserInfo(executeFunctions, session, itemIndex) {
365
+ const userInfo = await requestJson(executeFunctions, session, USER_INFO_URL, 'loading user info', itemIndex);
366
+ return {
367
+ userAccountVBO: {
368
+ cable: userInfo.flatMap((user) => (user.userAssets ?? []).flatMap(toCableAccount)),
369
+ },
370
+ };
371
+ }
372
+ async function getInvoiceList(executeFunctions, session, contractId, itemIndex) {
373
+ const url = `https://api.vodafone.de/meinvodafone/v2/customer/urn:vf-de:cable:can:${contractId}/invoice`;
374
+ return await requestJson(executeFunctions, session, url, `loading invoices for contract ${contractId}`, itemIndex);
375
+ }
376
+ async function getInvoiceDocument(executeFunctions, session, customerId, documentId, itemIndex) {
377
+ const url = `https://api.vodafone.de/meinvodafone/v2/customer/${customerId}/invoiceDocument/${documentId}`;
378
+ return await requestJson(executeFunctions, session, url, `downloading invoice document ${documentId}`, itemIndex);
379
+ }
380
+ function toCableAccount(asset) {
381
+ if (!isCableAsset(asset)) {
382
+ return [];
383
+ }
384
+ const customerNumber = findExternalIdentifier(asset.externalIdentifier, 'customerNumber') ??
385
+ findExternalIdentifier(asset.relatedAsset?.flatMap((relatedAsset) => relatedAsset.externalIdentifier ?? []), 'accountNumber') ??
386
+ findCustomerNumberInUrn(asset.id);
387
+ if (!customerNumber) {
388
+ return [];
389
+ }
390
+ const relatedBillingAccount = asset.relatedAsset?.find((relatedAsset) => relatedAsset.entityType === 'billingAccount');
391
+ const characteristics = [
392
+ ...(asset.characteristic ?? []),
393
+ ...(relatedBillingAccount?.characteristic ?? []),
394
+ ];
395
+ return [
396
+ {
397
+ id: customerNumber,
398
+ name: asset.name,
399
+ isActiveContract: asset.status === 'activated',
400
+ isDefaultContract: characteristicValue(characteristics, 'isDefault') === 'true',
401
+ hasCableMail: characteristicValue(characteristics, 'hasCableMail') === 'true',
402
+ subscription: [
403
+ {
404
+ id: findExternalIdentifier(asset.externalIdentifier, 'subscriptionId'),
405
+ type: characteristicValue(asset.characteristic, 'subType'),
406
+ displayName: asset.name,
407
+ },
408
+ ],
409
+ },
410
+ ];
411
+ }
412
+ function isCableAsset(asset) {
413
+ return (asset.status === 'activated' &&
414
+ (asset.assetType === 'Broadband' ||
415
+ asset.id?.includes(':cable:') === true) &&
416
+ (asset.characteristic?.some((characteristic) => characteristic.name === 'stack' && characteristic.value === 'Cable') === true ||
417
+ asset.id?.includes(':cable:') === true));
418
+ }
419
+ function findExternalIdentifier(identifiers, type) {
420
+ return identifiers?.find((identifier) => identifier.type === type)?.id;
421
+ }
422
+ function characteristicValue(characteristics, name) {
423
+ return characteristics?.find((characteristic) => characteristic.name === name)
424
+ ?.value;
425
+ }
426
+ function findCustomerNumberInUrn(id) {
427
+ return id?.match(/:can:(\d+)$/)?.[1];
428
+ }
429
+ function sanitizeFileName(value) {
430
+ return value.replace(/[^a-zA-Z0-9._-]+/g, '-').replace(/^-+|-+$/g, '');
431
+ }
432
+ //# sourceMappingURL=GenericFunctions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GenericFunctions.js","sourceRoot":"","sources":["../../../nodes/Vodafone/GenericFunctions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { type ICredentialDataDecryptedObject, type ICredentialsDecrypted, type ICredentialTestFunctions, type IExecuteFunctions, type INodeCredentialTestResult, type INodeExecutionData, type INodeType, type INodeTypeDescription } from 'n8n-workflow';
2
+ export declare class Vodafone implements INodeType {
3
+ description: INodeTypeDescription;
4
+ methods: {
5
+ credentialTest: {
6
+ vodafoneApiTest(this: ICredentialTestFunctions, credential: ICredentialsDecrypted<ICredentialDataDecryptedObject>): Promise<INodeCredentialTestResult>;
7
+ };
8
+ };
9
+ execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
10
+ }