@paywatchglobal/n8n-nodes-azure-storage-plus 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/README.md +46 -0
- package/dist/credentials/AzureBlobStoragePlusApi.credentials.d.ts +11 -0
- package/dist/credentials/AzureBlobStoragePlusApi.credentials.js +49 -0
- package/dist/credentials/AzureBlobStoragePlusApi.credentials.js.map +1 -0
- package/dist/nodes/AzureStoragePlus/AzureStoragePlus.node.d.ts +15 -0
- package/dist/nodes/AzureStoragePlus/AzureStoragePlus.node.js +457 -0
- package/dist/nodes/AzureStoragePlus/AzureStoragePlus.node.js.map +1 -0
- package/dist/nodes/AzureStoragePlus/AzureStoragePlus.node.json +22 -0
- package/dist/nodes/AzureStoragePlus/GenericFunctions.d.ts +28 -0
- package/dist/nodes/AzureStoragePlus/GenericFunctions.js +330 -0
- package/dist/nodes/AzureStoragePlus/GenericFunctions.js.map +1 -0
- package/dist/nodes/AzureStoragePlus/azureStorage.svg +19 -0
- package/dist/nodes/AzureStoragePlus/descriptions/BlobDescription.d.ts +3 -0
- package/dist/nodes/AzureStoragePlus/descriptions/BlobDescription.js +455 -0
- package/dist/nodes/AzureStoragePlus/descriptions/BlobDescription.js.map +1 -0
- package/dist/nodes/AzureStoragePlus/descriptions/ContainerDescription.d.ts +3 -0
- package/dist/nodes/AzureStoragePlus/descriptions/ContainerDescription.js +227 -0
- package/dist/nodes/AzureStoragePlus/descriptions/ContainerDescription.js.map +1 -0
- package/dist/nodes/AzureStoragePlus/descriptions/index.d.ts +2 -0
- package/dist/nodes/AzureStoragePlus/descriptions/index.js +10 -0
- package/dist/nodes/AzureStoragePlus/descriptions/index.js.map +1 -0
- package/dist/package.json +52 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +52 -0
package/README.md
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# @paywatchglobal/n8n-nodes-azure-storage-plus
|
|
2
|
+
|
|
3
|
+
This is an n8n community node. It lets you use _app/service name_ in your n8n workflows.
|
|
4
|
+
|
|
5
|
+
_App/service name_ is _one or two sentences describing the service this node integrates with_.
|
|
6
|
+
|
|
7
|
+
[n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/sustainable-use-license/) workflow automation platform.
|
|
8
|
+
|
|
9
|
+
[Installation](#installation)
|
|
10
|
+
[Operations](#operations)
|
|
11
|
+
[Credentials](#credentials)
|
|
12
|
+
[Compatibility](#compatibility)
|
|
13
|
+
[Usage](#usage)
|
|
14
|
+
[Resources](#resources)
|
|
15
|
+
[Version history](#version-history)
|
|
16
|
+
|
|
17
|
+
## Installation
|
|
18
|
+
|
|
19
|
+
Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n community nodes documentation.
|
|
20
|
+
|
|
21
|
+
## Operations
|
|
22
|
+
|
|
23
|
+
_List the operations supported by your node._
|
|
24
|
+
|
|
25
|
+
## Credentials
|
|
26
|
+
|
|
27
|
+
_If users need to authenticate with the app/service, provide details here. You should include prerequisites (such as signing up with the service), available authentication methods, and how to set them up._
|
|
28
|
+
|
|
29
|
+
## Compatibility
|
|
30
|
+
|
|
31
|
+
_State the minimum n8n version, as well as which versions you test against. You can also include any known version incompatibility issues._
|
|
32
|
+
|
|
33
|
+
## Usage
|
|
34
|
+
|
|
35
|
+
_This is an optional section. Use it to help users with any difficult or confusing aspects of the node._
|
|
36
|
+
|
|
37
|
+
_By the time users are looking for community nodes, they probably already know n8n basics. But if you expect new users, you can link to the [Try it out](https://docs.n8n.io/try-it-out/) documentation to help them get started._
|
|
38
|
+
|
|
39
|
+
## Resources
|
|
40
|
+
|
|
41
|
+
* [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
|
|
42
|
+
* _Link to app/service documentation._
|
|
43
|
+
|
|
44
|
+
## Version history
|
|
45
|
+
|
|
46
|
+
_This is another optional section. If your node has multiple versions, include a short description of available versions and what changed, as well as any compatibility impact._
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ICredentialType, INodeProperties } from 'n8n-workflow';
|
|
2
|
+
export declare class AzureBlobStoragePlusApi implements ICredentialType {
|
|
3
|
+
name: string;
|
|
4
|
+
displayName: string;
|
|
5
|
+
icon: {
|
|
6
|
+
readonly light: "file:azureStorage.svg";
|
|
7
|
+
readonly dark: "file:azureStorage.svg";
|
|
8
|
+
};
|
|
9
|
+
documentationUrl: string;
|
|
10
|
+
properties: INodeProperties[];
|
|
11
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AzureBlobStoragePlusApi = void 0;
|
|
4
|
+
class AzureBlobStoragePlusApi {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.name = 'azureBlobStoragePlusApi';
|
|
7
|
+
this.displayName = 'Azure Blob Storage Plus API';
|
|
8
|
+
this.icon = { light: 'file:azureStorage.svg', dark: 'file:azureStorage.svg' };
|
|
9
|
+
this.documentationUrl = 'https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction';
|
|
10
|
+
this.properties = [
|
|
11
|
+
{
|
|
12
|
+
displayName: 'Storage Account URL',
|
|
13
|
+
name: 'storageAccountUrl',
|
|
14
|
+
type: 'string',
|
|
15
|
+
default: '',
|
|
16
|
+
required: true,
|
|
17
|
+
placeholder: 'e.g. https://myaccount.blob.core.windows.net',
|
|
18
|
+
description: 'The URL of your Azure Blob Storage account',
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
displayName: 'Tenant ID',
|
|
22
|
+
name: 'tenantId',
|
|
23
|
+
type: 'string',
|
|
24
|
+
default: '',
|
|
25
|
+
required: true,
|
|
26
|
+
description: 'The Azure AD / Microsoft Entra tenant ID',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
displayName: 'Client ID',
|
|
30
|
+
name: 'clientId',
|
|
31
|
+
type: 'string',
|
|
32
|
+
default: '',
|
|
33
|
+
required: true,
|
|
34
|
+
description: 'The Application (client) ID from the app registration',
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
displayName: 'Client Secret',
|
|
38
|
+
name: 'clientSecret',
|
|
39
|
+
type: 'string',
|
|
40
|
+
typeOptions: { password: true },
|
|
41
|
+
default: '',
|
|
42
|
+
required: true,
|
|
43
|
+
description: 'The client secret from the app registration',
|
|
44
|
+
},
|
|
45
|
+
];
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
exports.AzureBlobStoragePlusApi = AzureBlobStoragePlusApi;
|
|
49
|
+
//# sourceMappingURL=AzureBlobStoragePlusApi.credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AzureBlobStoragePlusApi.credentials.js","sourceRoot":"","sources":["../../credentials/AzureBlobStoragePlusApi.credentials.ts"],"names":[],"mappings":";;;AAEA,MAAa,uBAAuB;IAApC;QACC,SAAI,GAAG,yBAAyB,CAAC;QAEjC,gBAAW,GAAG,6BAA6B,CAAC;QAE5C,SAAI,GAAG,EAAE,KAAK,EAAE,uBAAuB,EAAE,IAAI,EAAE,uBAAuB,EAAW,CAAC;QAElF,qBAAgB,GACf,kFAAkF,CAAC;QAEpF,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,qBAAqB;gBAClC,IAAI,EAAE,mBAAmB;gBACzB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,8CAA8C;gBAC3D,WAAW,EAAE,4CAA4C;aACzD;YACD;gBACC,WAAW,EAAE,WAAW;gBACxB,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,0CAA0C;aACvD;YACD;gBACC,WAAW,EAAE,WAAW;gBACxB,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,uDAAuD;aACpE;YACD;gBACC,WAAW,EAAE,eAAe;gBAC5B,IAAI,EAAE,cAAc;gBACpB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,6CAA6C;aAC1D;SACD,CAAC;IACH,CAAC;CAAA;AA9CD,0DA8CC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ICredentialsDecrypted, ICredentialTestFunctions, IExecuteFunctions, INodeCredentialTestResult, INodeExecutionData, INodeType, INodeTypeDescription } from 'n8n-workflow';
|
|
2
|
+
import { getBlobs, getContainers } from './GenericFunctions';
|
|
3
|
+
export declare class AzureStoragePlus implements INodeType {
|
|
4
|
+
description: INodeTypeDescription;
|
|
5
|
+
methods: {
|
|
6
|
+
credentialTest: {
|
|
7
|
+
azureBlobStoragePlusApiTest(this: ICredentialTestFunctions, credential: ICredentialsDecrypted): Promise<INodeCredentialTestResult>;
|
|
8
|
+
};
|
|
9
|
+
listSearch: {
|
|
10
|
+
getContainers: typeof getContainers;
|
|
11
|
+
getBlobs: typeof getBlobs;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,457 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AzureStoragePlus = void 0;
|
|
4
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
5
|
+
const GenericFunctions_1 = require("./GenericFunctions");
|
|
6
|
+
const descriptions_1 = require("./descriptions");
|
|
7
|
+
class AzureStoragePlus {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.description = {
|
|
10
|
+
displayName: 'Azure Storage Plus',
|
|
11
|
+
name: 'azureStoragePlus',
|
|
12
|
+
icon: 'file:azureStorage.svg',
|
|
13
|
+
group: ['input'],
|
|
14
|
+
version: 1,
|
|
15
|
+
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
|
|
16
|
+
description: 'Interact with Azure Blob Storage using service principal authentication',
|
|
17
|
+
defaults: {
|
|
18
|
+
name: 'Azure Storage Plus',
|
|
19
|
+
},
|
|
20
|
+
inputs: [n8n_workflow_1.NodeConnectionTypes.Main],
|
|
21
|
+
outputs: [n8n_workflow_1.NodeConnectionTypes.Main],
|
|
22
|
+
usableAsTool: true,
|
|
23
|
+
credentials: [
|
|
24
|
+
{
|
|
25
|
+
name: 'azureBlobStoragePlusApi',
|
|
26
|
+
required: true,
|
|
27
|
+
testedBy: 'azureBlobStoragePlusApiTest',
|
|
28
|
+
},
|
|
29
|
+
],
|
|
30
|
+
properties: [
|
|
31
|
+
{
|
|
32
|
+
displayName: 'Resource',
|
|
33
|
+
name: 'resource',
|
|
34
|
+
type: 'options',
|
|
35
|
+
noDataExpression: true,
|
|
36
|
+
options: [
|
|
37
|
+
{ name: 'Blob', value: 'blob' },
|
|
38
|
+
{ name: 'Container', value: 'container' },
|
|
39
|
+
],
|
|
40
|
+
default: 'blob',
|
|
41
|
+
},
|
|
42
|
+
...descriptions_1.blobOperations,
|
|
43
|
+
...descriptions_1.blobFields,
|
|
44
|
+
...descriptions_1.containerOperations,
|
|
45
|
+
...descriptions_1.containerFields,
|
|
46
|
+
],
|
|
47
|
+
};
|
|
48
|
+
this.methods = {
|
|
49
|
+
credentialTest: {
|
|
50
|
+
async azureBlobStoragePlusApiTest(credential) {
|
|
51
|
+
const credentials = credential.data;
|
|
52
|
+
const { tenantId, clientId, clientSecret, storageAccountUrl } = credentials;
|
|
53
|
+
try {
|
|
54
|
+
const body = new URLSearchParams({
|
|
55
|
+
grant_type: 'client_credentials',
|
|
56
|
+
client_id: clientId,
|
|
57
|
+
client_secret: clientSecret,
|
|
58
|
+
scope: 'https://storage.azure.com/.default',
|
|
59
|
+
}).toString();
|
|
60
|
+
const tokenResponse = (await this.helpers.request({
|
|
61
|
+
method: 'POST',
|
|
62
|
+
uri: `https://login.microsoftonline.com/${tenantId}/oauth2/v2.0/token`,
|
|
63
|
+
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
64
|
+
body,
|
|
65
|
+
}));
|
|
66
|
+
const { access_token } = JSON.parse(tokenResponse);
|
|
67
|
+
const baseUrl = storageAccountUrl.replace(/\/$/, '');
|
|
68
|
+
await this.helpers.request({
|
|
69
|
+
method: 'GET',
|
|
70
|
+
uri: `${baseUrl}/?comp=list&maxresults=1`,
|
|
71
|
+
headers: {
|
|
72
|
+
Authorization: `Bearer ${access_token}`,
|
|
73
|
+
'x-ms-date': new Date().toUTCString(),
|
|
74
|
+
'x-ms-version': '2021-12-02',
|
|
75
|
+
},
|
|
76
|
+
});
|
|
77
|
+
return {
|
|
78
|
+
status: 'OK',
|
|
79
|
+
message: 'Connection successful',
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
return {
|
|
84
|
+
status: 'Error',
|
|
85
|
+
message: `Connection failed: ${error.message}`,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
listSearch: {
|
|
91
|
+
getContainers: GenericFunctions_1.getContainers,
|
|
92
|
+
getBlobs: GenericFunctions_1.getBlobs,
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
async execute() {
|
|
97
|
+
const items = this.getInputData();
|
|
98
|
+
const returnData = [];
|
|
99
|
+
const resource = this.getNodeParameter('resource', 0);
|
|
100
|
+
const operation = this.getNodeParameter('operation', 0);
|
|
101
|
+
for (let i = 0; i < items.length; i++) {
|
|
102
|
+
try {
|
|
103
|
+
if (resource === 'container') {
|
|
104
|
+
if (operation === 'create') {
|
|
105
|
+
await executeContainerCreate.call(this, i, returnData);
|
|
106
|
+
}
|
|
107
|
+
else if (operation === 'delete') {
|
|
108
|
+
await executeContainerDelete.call(this, i, returnData);
|
|
109
|
+
}
|
|
110
|
+
else if (operation === 'get') {
|
|
111
|
+
await executeContainerGet.call(this, i, returnData);
|
|
112
|
+
}
|
|
113
|
+
else if (operation === 'getAll') {
|
|
114
|
+
await executeContainerGetAll.call(this, i, returnData);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
else if (resource === 'blob') {
|
|
118
|
+
if (operation === 'create') {
|
|
119
|
+
await executeBlobCreate.call(this, i, returnData);
|
|
120
|
+
}
|
|
121
|
+
else if (operation === 'delete') {
|
|
122
|
+
await executeBlobDelete.call(this, i, returnData);
|
|
123
|
+
}
|
|
124
|
+
else if (operation === 'get') {
|
|
125
|
+
await executeBlobGet.call(this, i, returnData);
|
|
126
|
+
}
|
|
127
|
+
else if (operation === 'getAll') {
|
|
128
|
+
await executeBlobGetAll.call(this, i, returnData);
|
|
129
|
+
}
|
|
130
|
+
else if (operation === 'getProperties') {
|
|
131
|
+
await executeBlobGetProperties.call(this, i, returnData);
|
|
132
|
+
}
|
|
133
|
+
else if (operation === 'copy') {
|
|
134
|
+
await executeBlobCopy.call(this, i, returnData);
|
|
135
|
+
}
|
|
136
|
+
else if (operation === 'setTier') {
|
|
137
|
+
await executeBlobSetTier.call(this, i, returnData);
|
|
138
|
+
}
|
|
139
|
+
else if (operation === 'setMetadata') {
|
|
140
|
+
await executeBlobSetMetadata.call(this, i, returnData);
|
|
141
|
+
}
|
|
142
|
+
else if (operation === 'undelete') {
|
|
143
|
+
await executeBlobUndelete.call(this, i, returnData);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
if (this.continueOnFail()) {
|
|
149
|
+
returnData.push({
|
|
150
|
+
json: { error: error.message },
|
|
151
|
+
pairedItem: { item: i },
|
|
152
|
+
});
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
throw error;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return [returnData];
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
exports.AzureStoragePlus = AzureStoragePlus;
|
|
162
|
+
async function executeContainerCreate(i, returnData) {
|
|
163
|
+
const containerName = this.getNodeParameter('containerName', i);
|
|
164
|
+
const options = this.getNodeParameter('options', i, {});
|
|
165
|
+
const headers = {};
|
|
166
|
+
if (options.accessLevel && options.accessLevel !== 'private') {
|
|
167
|
+
headers['x-ms-blob-public-access'] = options.accessLevel;
|
|
168
|
+
}
|
|
169
|
+
if (options.metadata) {
|
|
170
|
+
const metadataEntries = options.metadata.metadataValues || [];
|
|
171
|
+
for (const entry of metadataEntries) {
|
|
172
|
+
if (entry.key) {
|
|
173
|
+
headers[`x-ms-meta-${entry.key}`] = entry.value;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
const response = await GenericFunctions_1.azureStorageApiRequest.call(this, 'PUT', `/${containerName}?restype=container`, undefined, {}, headers);
|
|
178
|
+
returnData.push({
|
|
179
|
+
json: {
|
|
180
|
+
name: containerName,
|
|
181
|
+
...(0, GenericFunctions_1.parseHeaders)(response.headers),
|
|
182
|
+
},
|
|
183
|
+
pairedItem: { item: i },
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
async function executeContainerDelete(i, returnData) {
|
|
187
|
+
const container = (0, GenericFunctions_1.resolveResourceLocator)(this.getNodeParameter('container', i));
|
|
188
|
+
const response = await GenericFunctions_1.azureStorageApiRequest.call(this, 'DELETE', `/${container}?restype=container`);
|
|
189
|
+
returnData.push({
|
|
190
|
+
json: { success: true, container, ...(0, GenericFunctions_1.parseHeaders)(response.headers) },
|
|
191
|
+
pairedItem: { item: i },
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
async function executeContainerGet(i, returnData) {
|
|
195
|
+
const container = (0, GenericFunctions_1.resolveResourceLocator)(this.getNodeParameter('container', i));
|
|
196
|
+
const response = await GenericFunctions_1.azureStorageApiRequest.call(this, 'GET', `/${container}?restype=container`);
|
|
197
|
+
returnData.push({
|
|
198
|
+
json: {
|
|
199
|
+
name: container,
|
|
200
|
+
...(0, GenericFunctions_1.parseHeaders)(response.headers),
|
|
201
|
+
},
|
|
202
|
+
pairedItem: { item: i },
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
async function executeContainerGetAll(i, returnData) {
|
|
206
|
+
const returnAll = this.getNodeParameter('returnAll', i);
|
|
207
|
+
const options = this.getNodeParameter('options', i, {});
|
|
208
|
+
const qs = { comp: 'list' };
|
|
209
|
+
if (options.prefix) {
|
|
210
|
+
qs.prefix = options.prefix;
|
|
211
|
+
}
|
|
212
|
+
if (returnAll) {
|
|
213
|
+
const containers = await GenericFunctions_1.azureStorageApiRequestAllItems.call(this, '/', qs, async (xml) => {
|
|
214
|
+
const parsed = await (0, GenericFunctions_1.parseContainerList)(xml);
|
|
215
|
+
return { items: parsed.containers, nextMarker: parsed.nextMarker };
|
|
216
|
+
});
|
|
217
|
+
for (const container of containers) {
|
|
218
|
+
returnData.push({ json: container, pairedItem: { item: i } });
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
const limit = this.getNodeParameter('limit', i);
|
|
223
|
+
qs.maxresults = limit;
|
|
224
|
+
const response = await GenericFunctions_1.azureStorageApiRequest.call(this, 'GET', '/', undefined, qs);
|
|
225
|
+
const parsed = await (0, GenericFunctions_1.parseContainerList)(response.body);
|
|
226
|
+
for (const container of parsed.containers) {
|
|
227
|
+
returnData.push({ json: container, pairedItem: { item: i } });
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
async function executeBlobCreate(i, returnData) {
|
|
232
|
+
const container = (0, GenericFunctions_1.resolveResourceLocator)(this.getNodeParameter('container', i));
|
|
233
|
+
const blobName = this.getNodeParameter('blobName', i);
|
|
234
|
+
const from = this.getNodeParameter('from', i);
|
|
235
|
+
const options = this.getNodeParameter('options', i, {});
|
|
236
|
+
const headers = {
|
|
237
|
+
'x-ms-blob-type': 'BlockBlob',
|
|
238
|
+
};
|
|
239
|
+
if (options.accessTier) {
|
|
240
|
+
headers['x-ms-access-tier'] = options.accessTier;
|
|
241
|
+
}
|
|
242
|
+
if (options.metadata) {
|
|
243
|
+
const metadataEntries = options.metadata.metadataValues || [];
|
|
244
|
+
for (const entry of metadataEntries) {
|
|
245
|
+
if (entry.key) {
|
|
246
|
+
headers[`x-ms-meta-${entry.key}`] = entry.value;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
if (options.tags) {
|
|
251
|
+
const tagEntries = options.tags.tagValues || [];
|
|
252
|
+
if (tagEntries.length > 0) {
|
|
253
|
+
const tagsObj = {};
|
|
254
|
+
for (const entry of tagEntries) {
|
|
255
|
+
if (entry.key) {
|
|
256
|
+
tagsObj[entry.key] = entry.value;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
headers['x-ms-tags'] = (0, GenericFunctions_1.buildTagsQueryString)(tagsObj);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
let body;
|
|
263
|
+
if (from === 'binary') {
|
|
264
|
+
const binaryPropertyName = this.getNodeParameter('binaryPropertyName', i);
|
|
265
|
+
const binaryData = this.helpers.assertBinaryData(i, binaryPropertyName);
|
|
266
|
+
body = await this.helpers.getBinaryDataBuffer(i, binaryPropertyName);
|
|
267
|
+
if (options.contentType) {
|
|
268
|
+
headers['Content-Type'] = options.contentType;
|
|
269
|
+
}
|
|
270
|
+
else if (binaryData.mimeType) {
|
|
271
|
+
headers['Content-Type'] = binaryData.mimeType;
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
headers['Content-Type'] = 'application/octet-stream';
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
const sourceUrl = this.getNodeParameter('sourceUrl', i);
|
|
279
|
+
headers['x-ms-copy-source'] = sourceUrl;
|
|
280
|
+
headers['Content-Length'] = '0';
|
|
281
|
+
}
|
|
282
|
+
const response = await GenericFunctions_1.azureStorageApiRequest.call(this, 'PUT', `/${container}/${blobName}`, body, {}, headers);
|
|
283
|
+
returnData.push({
|
|
284
|
+
json: {
|
|
285
|
+
container,
|
|
286
|
+
name: blobName,
|
|
287
|
+
...(0, GenericFunctions_1.parseHeaders)(response.headers),
|
|
288
|
+
},
|
|
289
|
+
pairedItem: { item: i },
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
async function executeBlobDelete(i, returnData) {
|
|
293
|
+
const container = (0, GenericFunctions_1.resolveResourceLocator)(this.getNodeParameter('container', i));
|
|
294
|
+
const blob = (0, GenericFunctions_1.resolveResourceLocator)(this.getNodeParameter('blob', i));
|
|
295
|
+
const response = await GenericFunctions_1.azureStorageApiRequest.call(this, 'DELETE', `/${container}/${blob}`);
|
|
296
|
+
returnData.push({
|
|
297
|
+
json: { success: true, container, blob, ...(0, GenericFunctions_1.parseHeaders)(response.headers) },
|
|
298
|
+
pairedItem: { item: i },
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
async function executeBlobGet(i, returnData) {
|
|
302
|
+
const container = (0, GenericFunctions_1.resolveResourceLocator)(this.getNodeParameter('container', i));
|
|
303
|
+
const blob = (0, GenericFunctions_1.resolveResourceLocator)(this.getNodeParameter('blob', i));
|
|
304
|
+
const binaryPropertyName = this.getNodeParameter('binaryPropertyName', i);
|
|
305
|
+
const response = await GenericFunctions_1.azureStorageApiRequest.call(this, 'GET', `/${container}/${blob}`, undefined, {}, {}, 'arraybuffer');
|
|
306
|
+
const headerData = (0, GenericFunctions_1.parseHeaders)(response.headers);
|
|
307
|
+
const binaryData = await this.helpers.prepareBinaryData(response.body, blob, headerData.contentType);
|
|
308
|
+
returnData.push({
|
|
309
|
+
json: {
|
|
310
|
+
container,
|
|
311
|
+
name: blob,
|
|
312
|
+
...headerData,
|
|
313
|
+
},
|
|
314
|
+
binary: { [binaryPropertyName]: binaryData },
|
|
315
|
+
pairedItem: { item: i },
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
async function executeBlobGetAll(i, returnData) {
|
|
319
|
+
const container = (0, GenericFunctions_1.resolveResourceLocator)(this.getNodeParameter('container', i));
|
|
320
|
+
const returnAll = this.getNodeParameter('returnAll', i);
|
|
321
|
+
const limit = returnAll ? 0 : this.getNodeParameter('limit', i);
|
|
322
|
+
const options = this.getNodeParameter('options', i, {});
|
|
323
|
+
const qs = {
|
|
324
|
+
restype: 'container',
|
|
325
|
+
comp: 'list',
|
|
326
|
+
};
|
|
327
|
+
if (options.prefix) {
|
|
328
|
+
qs.prefix = options.prefix;
|
|
329
|
+
}
|
|
330
|
+
if (options.delimiter) {
|
|
331
|
+
qs.delimiter = options.delimiter;
|
|
332
|
+
}
|
|
333
|
+
if (options.include && options.include.length > 0) {
|
|
334
|
+
qs.include = options.include.join(',');
|
|
335
|
+
}
|
|
336
|
+
const nameFilter = options.nameFilter;
|
|
337
|
+
const nameMatchFn = nameFilter ? buildNameMatchFn(nameFilter) : null;
|
|
338
|
+
let collected = 0;
|
|
339
|
+
let nextMarker;
|
|
340
|
+
do {
|
|
341
|
+
if (nextMarker) {
|
|
342
|
+
qs.marker = nextMarker;
|
|
343
|
+
}
|
|
344
|
+
const response = await GenericFunctions_1.azureStorageApiRequest.call(this, 'GET', `/${container}`, undefined, qs);
|
|
345
|
+
const parsed = await (0, GenericFunctions_1.parseBlobList)(response.body);
|
|
346
|
+
for (const blob of parsed.blobs) {
|
|
347
|
+
if (nameMatchFn && !nameMatchFn(blob.name)) {
|
|
348
|
+
continue;
|
|
349
|
+
}
|
|
350
|
+
returnData.push({ json: blob, pairedItem: { item: i } });
|
|
351
|
+
collected++;
|
|
352
|
+
if (!returnAll && collected >= limit) {
|
|
353
|
+
return;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
nextMarker = parsed.nextMarker;
|
|
357
|
+
} while (nextMarker);
|
|
358
|
+
}
|
|
359
|
+
const REGEX_METACHARACTERS = /[\\*+?^${}()[\]|]/;
|
|
360
|
+
function buildNameMatchFn(filter) {
|
|
361
|
+
if (REGEX_METACHARACTERS.test(filter)) {
|
|
362
|
+
const regex = new RegExp(filter);
|
|
363
|
+
return (name) => regex.test(name);
|
|
364
|
+
}
|
|
365
|
+
const lower = filter.toLowerCase();
|
|
366
|
+
return (name) => name.toLowerCase().includes(lower);
|
|
367
|
+
}
|
|
368
|
+
async function executeBlobGetProperties(i, returnData) {
|
|
369
|
+
const container = (0, GenericFunctions_1.resolveResourceLocator)(this.getNodeParameter('container', i));
|
|
370
|
+
const blob = (0, GenericFunctions_1.resolveResourceLocator)(this.getNodeParameter('blob', i));
|
|
371
|
+
const response = await GenericFunctions_1.azureStorageApiRequest.call(this, 'HEAD', `/${container}/${blob}`);
|
|
372
|
+
returnData.push({
|
|
373
|
+
json: {
|
|
374
|
+
container,
|
|
375
|
+
name: blob,
|
|
376
|
+
...(0, GenericFunctions_1.parseHeaders)(response.headers),
|
|
377
|
+
},
|
|
378
|
+
pairedItem: { item: i },
|
|
379
|
+
});
|
|
380
|
+
}
|
|
381
|
+
async function executeBlobCopy(i, returnData) {
|
|
382
|
+
const credentials = (await this.getCredentials('azureBlobStoragePlusApi'));
|
|
383
|
+
const storageAccountUrl = credentials.storageAccountUrl.replace(/\/$/, '');
|
|
384
|
+
const sourceContainer = (0, GenericFunctions_1.resolveResourceLocator)(this.getNodeParameter('container', i));
|
|
385
|
+
const sourceBlob = (0, GenericFunctions_1.resolveResourceLocator)(this.getNodeParameter('blob', i));
|
|
386
|
+
const destContainer = (0, GenericFunctions_1.resolveResourceLocator)(this.getNodeParameter('destContainer', i));
|
|
387
|
+
const destBlobName = this.getNodeParameter('destBlobName', i);
|
|
388
|
+
const sourceUrl = `${storageAccountUrl}/${sourceContainer}/${sourceBlob}`;
|
|
389
|
+
const response = await GenericFunctions_1.azureStorageApiRequest.call(this, 'PUT', `/${destContainer}/${destBlobName}`, undefined, {}, {
|
|
390
|
+
'x-ms-copy-source': sourceUrl,
|
|
391
|
+
});
|
|
392
|
+
returnData.push({
|
|
393
|
+
json: {
|
|
394
|
+
sourceContainer,
|
|
395
|
+
sourceBlob,
|
|
396
|
+
destContainer,
|
|
397
|
+
destBlob: destBlobName,
|
|
398
|
+
...(0, GenericFunctions_1.parseHeaders)(response.headers),
|
|
399
|
+
},
|
|
400
|
+
pairedItem: { item: i },
|
|
401
|
+
});
|
|
402
|
+
}
|
|
403
|
+
async function executeBlobSetTier(i, returnData) {
|
|
404
|
+
const container = (0, GenericFunctions_1.resolveResourceLocator)(this.getNodeParameter('container', i));
|
|
405
|
+
const blob = (0, GenericFunctions_1.resolveResourceLocator)(this.getNodeParameter('blob', i));
|
|
406
|
+
const accessTier = this.getNodeParameter('accessTier', i);
|
|
407
|
+
const response = await GenericFunctions_1.azureStorageApiRequest.call(this, 'PUT', `/${container}/${blob}`, undefined, { comp: 'tier' }, { 'x-ms-access-tier': accessTier });
|
|
408
|
+
returnData.push({
|
|
409
|
+
json: {
|
|
410
|
+
success: true,
|
|
411
|
+
container,
|
|
412
|
+
blob,
|
|
413
|
+
accessTier,
|
|
414
|
+
...(0, GenericFunctions_1.parseHeaders)(response.headers),
|
|
415
|
+
},
|
|
416
|
+
pairedItem: { item: i },
|
|
417
|
+
});
|
|
418
|
+
}
|
|
419
|
+
async function executeBlobSetMetadata(i, returnData) {
|
|
420
|
+
const container = (0, GenericFunctions_1.resolveResourceLocator)(this.getNodeParameter('container', i));
|
|
421
|
+
const blob = (0, GenericFunctions_1.resolveResourceLocator)(this.getNodeParameter('blob', i));
|
|
422
|
+
const metadataParam = this.getNodeParameter('metadata', i);
|
|
423
|
+
const metadataEntries = metadataParam.metadataValues || [];
|
|
424
|
+
const metadataObj = {};
|
|
425
|
+
for (const entry of metadataEntries) {
|
|
426
|
+
if (entry.key) {
|
|
427
|
+
metadataObj[entry.key] = entry.value;
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
const headers = (0, GenericFunctions_1.buildMetadataHeaders)(metadataObj);
|
|
431
|
+
const response = await GenericFunctions_1.azureStorageApiRequest.call(this, 'PUT', `/${container}/${blob}`, undefined, { comp: 'metadata' }, headers);
|
|
432
|
+
returnData.push({
|
|
433
|
+
json: {
|
|
434
|
+
success: true,
|
|
435
|
+
container,
|
|
436
|
+
blob,
|
|
437
|
+
metadata: metadataObj,
|
|
438
|
+
...(0, GenericFunctions_1.parseHeaders)(response.headers),
|
|
439
|
+
},
|
|
440
|
+
pairedItem: { item: i },
|
|
441
|
+
});
|
|
442
|
+
}
|
|
443
|
+
async function executeBlobUndelete(i, returnData) {
|
|
444
|
+
const container = (0, GenericFunctions_1.resolveResourceLocator)(this.getNodeParameter('container', i));
|
|
445
|
+
const blob = (0, GenericFunctions_1.resolveResourceLocator)(this.getNodeParameter('blob', i));
|
|
446
|
+
const response = await GenericFunctions_1.azureStorageApiRequest.call(this, 'PUT', `/${container}/${blob}`, undefined, { comp: 'undelete' });
|
|
447
|
+
returnData.push({
|
|
448
|
+
json: {
|
|
449
|
+
success: true,
|
|
450
|
+
container,
|
|
451
|
+
blob,
|
|
452
|
+
...(0, GenericFunctions_1.parseHeaders)(response.headers),
|
|
453
|
+
},
|
|
454
|
+
pairedItem: { item: i },
|
|
455
|
+
});
|
|
456
|
+
}
|
|
457
|
+
//# sourceMappingURL=AzureStoragePlus.node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AzureStoragePlus.node.js","sourceRoot":"","sources":["../../../nodes/AzureStoragePlus/AzureStoragePlus.node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"node": "@paywatchglobal/n8n-nodes-azure-storage-plus",
|
|
3
|
+
"nodeVersion": "1.0",
|
|
4
|
+
"codexVersion": "1.0",
|
|
5
|
+
"categories": ["Development", "Developer Tools"],
|
|
6
|
+
"resources": {
|
|
7
|
+
"credentialDocumentation": [
|
|
8
|
+
{
|
|
9
|
+
"url": "https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction"
|
|
10
|
+
}
|
|
11
|
+
],
|
|
12
|
+
"primaryDocumentation": [
|
|
13
|
+
{
|
|
14
|
+
"url": "https://learn.microsoft.com/en-us/rest/api/storageservices/"
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
},
|
|
18
|
+
"alias": ["azure", "blob", "storage", "container", "microsoft"],
|
|
19
|
+
"subcategories": {
|
|
20
|
+
"Development": ["Cloud Infrastructure"]
|
|
21
|
+
}
|
|
22
|
+
}
|