backend-manager 3.2.151 → 3.2.152

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "backend-manager",
3
- "version": "3.2.151",
3
+ "version": "3.2.152",
4
4
  "description": "Quick tools for developing Firebase functions",
5
5
  "main": "src/manager/index.js",
6
6
  "bin": {
@@ -0,0 +1,158 @@
1
+ const fetch = require('wonderful-fetch');
2
+ const moment = require('moment');
3
+ const jetpack = require('fs-jetpack');
4
+ const powertools = require('node-powertools');
5
+ const uuidv4 = require('uuid').v4;
6
+ const path = require('path');
7
+ const { Octokit } = require('@octokit/rest');
8
+
9
+ function Module() {
10
+
11
+ }
12
+
13
+ Module.prototype.main = function () {
14
+ const self = this;
15
+ const Manager = self.Manager;
16
+ const Api = self.Api;
17
+ const assistant = self.assistant;
18
+ const payload = self.payload;
19
+
20
+ return new Promise(async function(resolve, reject) {
21
+ try {
22
+ // Perform checks
23
+ if (!payload.user.roles.admin && !payload.user.roles.blogger) {
24
+ return reject(assistant.errorify(`Admin required.`, {code: 401}));
25
+ }
26
+
27
+ // Log payload
28
+ assistant.log(`main(): payload.data`, payload.data);
29
+
30
+ // Set now
31
+ const now = assistant.meta.startTime.timestamp;
32
+ const bemRepo = assistant.parseRepo(Manager?.config?.github?.repo_website);
33
+
34
+ // Setup Octokit
35
+ self.octokit = new Octokit({
36
+ auth: Manager?.config?.github?.key,
37
+ });
38
+
39
+ // Check for required values
40
+ if (!payload.data.payload.url) {
41
+ return reject(assistant.errorify(`Missing required parameter: url`, {code: 400}));
42
+ } else if (!payload.data.payload.body) {
43
+ return reject(assistant.errorify(`Missing required parameter: body`, {code: 400}));
44
+ }
45
+
46
+ // Set defaults
47
+ payload.data.payload.url = payload.data.payload.url
48
+ // Replace blog/
49
+ .replace(/blog\//ig, '')
50
+ // Remove leading and trailing slashes
51
+ .replace(/^\/|\/$/g, '')
52
+ // Trim
53
+ .trim();
54
+ payload.data.payload.body = payload.data.payload.body
55
+ .replace(powertools.regexify(`/# ${payload.data.payload.title}/i`), '')
56
+ .replace(/\n\n\n+/g, '\n\n')
57
+ .trim();
58
+
59
+ // Fix even more values
60
+ payload.data.payload.path = `_posts/${moment(now).format('YYYY')}/${payload.data.payload.path || 'guest'}`;
61
+ payload.data.payload.githubUser = payload.data.payload.githubUser || bemRepo.user;
62
+ payload.data.payload.githubRepo = payload.data.payload.githubRepo || bemRepo.name;
63
+
64
+ // Log
65
+ assistant.log(`main(): Editing post...`, payload.data.payload);
66
+
67
+ // Upload post
68
+ const fetchedPost = await self.fetchPost(payload.data.payload.url);
69
+
70
+ // Upload post
71
+ const uploadPost = await self.uploadPost(fetchedPost, payload.data.payload.body);
72
+
73
+ // Log
74
+ assistant.log(`main(): uploadPost`, uploadPost);
75
+
76
+ // Resolve
77
+ return resolve({data: payload.data.payload});
78
+ } catch (e) {
79
+ return reject(e);
80
+ }
81
+ });
82
+ };
83
+
84
+ // Fetch post
85
+ Module.prototype.fetchPost = function (url) {
86
+ const self = this;
87
+
88
+ const Manager = self.Manager;
89
+ const Api = self.Api;
90
+ const assistant = self.assistant;
91
+ const payload = self.payload;
92
+
93
+ return new Promise(async function(resolve, reject) {
94
+ fetch(`${Manager.project.functionsUrl}/bm_api`, {
95
+ method: 'post',
96
+ response: 'json',
97
+ timeout: 190000,
98
+ tries: 1,
99
+ body: {
100
+ command: 'general:fetch-post',
101
+ payload: {
102
+ url: url,
103
+ },
104
+ },
105
+ })
106
+ .then((r) => {
107
+ assistant.log(`fetchPost(): Result`, r);
108
+
109
+ return resolve(r);
110
+ })
111
+ .catch((e) => {
112
+ assistant.log(`fetchPost(): Error`, e);
113
+
114
+ return reject(e);
115
+ });
116
+ })
117
+ };
118
+
119
+ Module.prototype.uploadPost = function (fetchedPost, content) {
120
+ const self = this;
121
+ const Manager = self.Manager;
122
+ const Api = self.Api;
123
+ const assistant = self.assistant;
124
+ const payload = self.payload;
125
+
126
+ return new Promise(async function(resolve, reject) {
127
+ const filename = fetchedPost.path;
128
+ const sha = fetchedPost.sha;
129
+ const frontmatter = fetchedPost.frontmatter;
130
+ const owner = payload.data.payload.githubUser;
131
+ const repo = payload.data.payload.githubRepo;
132
+
133
+ // Combine content
134
+ const fullContent = '---\n'
135
+ + `${frontmatter}\n`
136
+ + '---\n'
137
+ + '\n'
138
+ + content;
139
+
140
+ // Upload post
141
+ await self.octokit.rest.repos.createOrUpdateFileContents({
142
+ owner: owner,
143
+ repo: repo,
144
+ path: filename,
145
+ sha: sha,
146
+ message: `📦 admin:edit-post:upload-post ${filename}`,
147
+ content: Buffer.from(fullContent).toString('base64'),
148
+ })
149
+ .then((r) => {
150
+ assistant.log(`uploadPost(): Result`, r);
151
+
152
+ return resolve(r);
153
+ })
154
+ .catch((e) => reject(e));
155
+ });
156
+ };
157
+
158
+ module.exports = Module;
@@ -84,6 +84,10 @@ Module.prototype.main = function () {
84
84
  // Return
85
85
  return resolve({
86
86
  data: {
87
+ name: post.data.name,
88
+ path: post.data.path,
89
+ size: post.data.size,
90
+ sha: post.data.sha,
87
91
  frontmatter: frontmatter,
88
92
  body: body,
89
93
  }
@@ -40,6 +40,7 @@
40
40
  '$app',
41
41
  // Add more sources here
42
42
  ],
43
+ links: [],
43
44
  prompt: '',
44
45
  }
45
46
  ],