firebase-tools 11.30.0 → 12.0.1
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/lib/api.js +4 -2
- package/lib/commands/ext-configure.js +2 -1
- package/lib/commands/ext-dev-deprecate.js +24 -20
- package/lib/commands/ext-dev-list.js +12 -11
- package/lib/commands/ext-dev-publish.js +13 -47
- package/lib/commands/ext-dev-register.js +8 -5
- package/lib/commands/ext-dev-undeprecate.js +4 -4
- package/lib/commands/ext-dev-upload.js +88 -0
- package/lib/commands/ext-dev-usage.js +3 -3
- package/lib/commands/ext-install.js +5 -10
- package/lib/commands/ext-uninstall.js +0 -1
- package/lib/commands/ext-update.js +4 -10
- package/lib/commands/index.js +9 -19
- package/lib/deploy/extensions/planner.js +13 -7
- package/lib/deploy/extensions/prepare.js +16 -32
- package/lib/emulator/eventarcEmulatorUtils.js +4 -2
- package/lib/emulator/storage/rules/config.js +17 -7
- package/lib/experiments.js +7 -6
- package/lib/extensions/extensionsApi.js +24 -151
- package/lib/extensions/extensionsHelper.js +282 -145
- package/lib/extensions/manifest.js +1 -8
- package/lib/extensions/publisherApi.js +215 -0
- package/lib/extensions/refs.js +1 -1
- package/lib/extensions/resolveSource.js +1 -18
- package/lib/extensions/tos.js +78 -0
- package/lib/extensions/warnings.js +21 -41
- package/lib/frameworks/angular/index.js +67 -185
- package/lib/frameworks/angular/interfaces.js +2 -0
- package/lib/frameworks/angular/utils.js +274 -0
- package/lib/frameworks/constants.js +5 -2
- package/lib/frameworks/index.js +60 -28
- package/lib/frameworks/next/index.js +86 -40
- package/lib/frameworks/next/utils.js +29 -12
- package/lib/frameworks/utils.js +11 -4
- package/lib/functions/python.js +2 -2
- package/lib/hosting/api.js +32 -1
- package/package.json +2 -2
- package/templates/extensions/POSTINSTALL.md +2 -2
- package/templates/extensions/PREINSTALL.md +1 -1
- package/templates/extensions/extension.yaml +10 -6
- package/templates/extensions/javascript/WELCOME.md +1 -1
- package/templates/extensions/typescript/WELCOME.md +1 -1
- package/templates/extensions/typescript/index.ts +1 -1
- package/templates/init/functions/javascript/index.js +16 -6
- package/templates/init/functions/javascript/package.lint.json +4 -4
- package/templates/init/functions/javascript/package.nolint.json +4 -4
- package/templates/init/functions/typescript/index.ts +16 -6
- package/templates/init/functions/typescript/package.lint.json +4 -4
- package/templates/init/functions/typescript/package.nolint.json +4 -4
- package/lib/commands/ext-dev-emulators-exec.js +0 -27
- package/lib/commands/ext-dev-emulators-start.js +0 -24
- package/lib/commands/ext-dev-extension-delete.js +0 -45
- package/lib/commands/ext-dev-unpublish.js +0 -49
- package/lib/commands/ext-sources-create.js +0 -24
- package/lib/extensions/askUserForConsent.js +0 -33
- package/npm-shrinkwrap.json +0 -12368
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getExtension = exports.listExtensionVersions = exports.listExtensions = exports.getExtensionVersion = exports.createExtensionVersionFromGitHubSource = exports.createExtensionVersionFromLocalSource = exports.undeprecateExtensionVersion = exports.deprecateExtensionVersion = exports.registerPublisherProfile = exports.getPublisherProfile = void 0;
|
|
4
|
+
const clc = require("colorette");
|
|
5
|
+
const operationPoller = require("../operation-poller");
|
|
6
|
+
const refs = require("./refs");
|
|
7
|
+
const api_1 = require("../api");
|
|
8
|
+
const apiv2_1 = require("../apiv2");
|
|
9
|
+
const error_1 = require("../error");
|
|
10
|
+
const extensionsApi_1 = require("./extensionsApi");
|
|
11
|
+
const PUBLISHER_API_VERSION = "v1beta";
|
|
12
|
+
const PAGE_SIZE_MAX = 100;
|
|
13
|
+
const extensionsPublisherApiClient = new apiv2_1.Client({
|
|
14
|
+
urlPrefix: api_1.extensionsPublisherOrigin,
|
|
15
|
+
apiVersion: PUBLISHER_API_VERSION,
|
|
16
|
+
});
|
|
17
|
+
async function getPublisherProfile(projectId, publisherId) {
|
|
18
|
+
const res = await extensionsPublisherApiClient.get(`/projects/${projectId}/publisherProfile`, {
|
|
19
|
+
queryParams: publisherId === undefined
|
|
20
|
+
? undefined
|
|
21
|
+
: {
|
|
22
|
+
publisherId,
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
return res.body;
|
|
26
|
+
}
|
|
27
|
+
exports.getPublisherProfile = getPublisherProfile;
|
|
28
|
+
async function registerPublisherProfile(projectId, publisherId) {
|
|
29
|
+
const res = await extensionsPublisherApiClient.patch(`/projects/${projectId}/publisherProfile`, {
|
|
30
|
+
publisherId,
|
|
31
|
+
displayName: publisherId,
|
|
32
|
+
}, {
|
|
33
|
+
queryParams: {
|
|
34
|
+
updateMask: "publisher_id,display_name",
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
return res.body;
|
|
38
|
+
}
|
|
39
|
+
exports.registerPublisherProfile = registerPublisherProfile;
|
|
40
|
+
async function deprecateExtensionVersion(extensionRef, deprecationMessage) {
|
|
41
|
+
const ref = refs.parse(extensionRef);
|
|
42
|
+
try {
|
|
43
|
+
const res = await extensionsPublisherApiClient.post(`/${refs.toExtensionVersionName(ref)}:deprecate`, {
|
|
44
|
+
deprecationMessage,
|
|
45
|
+
});
|
|
46
|
+
return res.body;
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
if (err.status === 403) {
|
|
50
|
+
throw new error_1.FirebaseError(`You are not the owner of extension '${clc.bold(extensionRef)}' and don’t have the correct permissions to deprecate this extension version.` + err, { status: err.status });
|
|
51
|
+
}
|
|
52
|
+
else if (err.status === 404) {
|
|
53
|
+
throw new error_1.FirebaseError(`Extension version ${clc.bold(extensionRef)} was not found.`);
|
|
54
|
+
}
|
|
55
|
+
else if (err instanceof error_1.FirebaseError) {
|
|
56
|
+
throw err;
|
|
57
|
+
}
|
|
58
|
+
throw new error_1.FirebaseError(`Error occurred deprecating extension version '${extensionRef}': ${err}`, {
|
|
59
|
+
status: err.status,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
exports.deprecateExtensionVersion = deprecateExtensionVersion;
|
|
64
|
+
async function undeprecateExtensionVersion(extensionRef) {
|
|
65
|
+
const ref = refs.parse(extensionRef);
|
|
66
|
+
try {
|
|
67
|
+
const res = await extensionsPublisherApiClient.post(`/${refs.toExtensionVersionName(ref)}:undeprecate`);
|
|
68
|
+
return res.body;
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
if (err.status === 403) {
|
|
72
|
+
throw new error_1.FirebaseError(`You are not the owner of extension '${clc.bold(extensionRef)}' and don’t have the correct permissions to undeprecate this extension version.`, { status: err.status });
|
|
73
|
+
}
|
|
74
|
+
else if (err.status === 404) {
|
|
75
|
+
throw new error_1.FirebaseError(`Extension version ${clc.bold(extensionRef)} was not found.`);
|
|
76
|
+
}
|
|
77
|
+
else if (err instanceof error_1.FirebaseError) {
|
|
78
|
+
throw err;
|
|
79
|
+
}
|
|
80
|
+
throw new error_1.FirebaseError(`Error occurred undeprecating extension version '${extensionRef}': ${err}`, {
|
|
81
|
+
status: err.status,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
exports.undeprecateExtensionVersion = undeprecateExtensionVersion;
|
|
86
|
+
async function createExtensionVersionFromLocalSource(args) {
|
|
87
|
+
var _a;
|
|
88
|
+
const ref = refs.parse(args.extensionVersionRef);
|
|
89
|
+
if (!ref.version) {
|
|
90
|
+
throw new error_1.FirebaseError(`Extension version ref "${args.extensionVersionRef}" must supply a version.`);
|
|
91
|
+
}
|
|
92
|
+
const uploadRes = await extensionsPublisherApiClient.post(`/${refs.toExtensionName(ref)}/versions:createFromSource`, {
|
|
93
|
+
versionId: ref.version,
|
|
94
|
+
extensionRoot: (_a = args.extensionRoot) !== null && _a !== void 0 ? _a : "/",
|
|
95
|
+
remoteArchiveSource: {
|
|
96
|
+
packageUri: args.packageUri,
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
const pollRes = await operationPoller.pollOperation({
|
|
100
|
+
apiOrigin: api_1.extensionsPublisherOrigin,
|
|
101
|
+
apiVersion: PUBLISHER_API_VERSION,
|
|
102
|
+
operationResourceName: uploadRes.body.name,
|
|
103
|
+
masterTimeout: 600000,
|
|
104
|
+
});
|
|
105
|
+
return pollRes;
|
|
106
|
+
}
|
|
107
|
+
exports.createExtensionVersionFromLocalSource = createExtensionVersionFromLocalSource;
|
|
108
|
+
async function createExtensionVersionFromGitHubSource(args) {
|
|
109
|
+
var _a;
|
|
110
|
+
const ref = refs.parse(args.extensionVersionRef);
|
|
111
|
+
if (!ref.version) {
|
|
112
|
+
throw new error_1.FirebaseError(`Extension version ref "${args.extensionVersionRef}" must supply a version.`);
|
|
113
|
+
}
|
|
114
|
+
const uploadRes = await extensionsPublisherApiClient.post(`/${refs.toExtensionName(ref)}/versions:createFromSource`, {
|
|
115
|
+
versionId: ref.version,
|
|
116
|
+
extensionRoot: (_a = args.extensionRoot) !== null && _a !== void 0 ? _a : "/",
|
|
117
|
+
githubRepositorySource: {
|
|
118
|
+
uri: args.repoUri,
|
|
119
|
+
sourceRef: args.sourceRef,
|
|
120
|
+
},
|
|
121
|
+
});
|
|
122
|
+
const pollRes = await operationPoller.pollOperation({
|
|
123
|
+
apiOrigin: api_1.extensionsPublisherOrigin,
|
|
124
|
+
apiVersion: PUBLISHER_API_VERSION,
|
|
125
|
+
operationResourceName: uploadRes.body.name,
|
|
126
|
+
masterTimeout: 600000,
|
|
127
|
+
});
|
|
128
|
+
return pollRes;
|
|
129
|
+
}
|
|
130
|
+
exports.createExtensionVersionFromGitHubSource = createExtensionVersionFromGitHubSource;
|
|
131
|
+
async function getExtensionVersion(extensionVersionRef) {
|
|
132
|
+
const ref = refs.parse(extensionVersionRef);
|
|
133
|
+
if (!ref.version) {
|
|
134
|
+
throw new error_1.FirebaseError(`ExtensionVersion ref "${extensionVersionRef}" must supply a version.`);
|
|
135
|
+
}
|
|
136
|
+
try {
|
|
137
|
+
const res = await extensionsPublisherApiClient.get(`/${refs.toExtensionVersionName(ref)}`);
|
|
138
|
+
if (res.body.spec) {
|
|
139
|
+
(0, extensionsApi_1.populateSpec)(res.body.spec);
|
|
140
|
+
}
|
|
141
|
+
return res.body;
|
|
142
|
+
}
|
|
143
|
+
catch (err) {
|
|
144
|
+
if (err.status === 404) {
|
|
145
|
+
throw (0, extensionsApi_1.refNotFoundError)(ref);
|
|
146
|
+
}
|
|
147
|
+
else if (err instanceof error_1.FirebaseError) {
|
|
148
|
+
throw err;
|
|
149
|
+
}
|
|
150
|
+
throw new error_1.FirebaseError(`Failed to query the extension version '${clc.bold(extensionVersionRef)}': ${err}`);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
exports.getExtensionVersion = getExtensionVersion;
|
|
154
|
+
async function listExtensions(publisherId) {
|
|
155
|
+
const extensions = [];
|
|
156
|
+
const getNextPage = async (pageToken = "") => {
|
|
157
|
+
const res = await extensionsPublisherApiClient.get(`/publishers/${publisherId}/extensions`, {
|
|
158
|
+
queryParams: {
|
|
159
|
+
pageSize: PAGE_SIZE_MAX,
|
|
160
|
+
pageToken,
|
|
161
|
+
},
|
|
162
|
+
});
|
|
163
|
+
if (Array.isArray(res.body.extensions)) {
|
|
164
|
+
extensions.push(...res.body.extensions);
|
|
165
|
+
}
|
|
166
|
+
if (res.body.nextPageToken) {
|
|
167
|
+
await getNextPage(res.body.nextPageToken);
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
await getNextPage();
|
|
171
|
+
return extensions;
|
|
172
|
+
}
|
|
173
|
+
exports.listExtensions = listExtensions;
|
|
174
|
+
async function listExtensionVersions(ref, filter = "", showPrereleases = false) {
|
|
175
|
+
const { publisherId, extensionId } = refs.parse(ref);
|
|
176
|
+
const extensionVersions = [];
|
|
177
|
+
const getNextPage = async (pageToken = "") => {
|
|
178
|
+
const res = await extensionsPublisherApiClient.get(`/publishers/${publisherId}/extensions/${extensionId}/versions`, {
|
|
179
|
+
queryParams: {
|
|
180
|
+
filter,
|
|
181
|
+
showPrereleases: String(showPrereleases),
|
|
182
|
+
pageSize: PAGE_SIZE_MAX,
|
|
183
|
+
pageToken,
|
|
184
|
+
},
|
|
185
|
+
});
|
|
186
|
+
if (Array.isArray(res.body.extensionVersions)) {
|
|
187
|
+
extensionVersions.push(...res.body.extensionVersions);
|
|
188
|
+
}
|
|
189
|
+
if (res.body.nextPageToken) {
|
|
190
|
+
await getNextPage(res.body.nextPageToken);
|
|
191
|
+
}
|
|
192
|
+
};
|
|
193
|
+
await getNextPage();
|
|
194
|
+
return extensionVersions;
|
|
195
|
+
}
|
|
196
|
+
exports.listExtensionVersions = listExtensionVersions;
|
|
197
|
+
async function getExtension(extensionRef) {
|
|
198
|
+
const ref = refs.parse(extensionRef);
|
|
199
|
+
try {
|
|
200
|
+
const res = await extensionsPublisherApiClient.get(`/${refs.toExtensionName(ref)}`);
|
|
201
|
+
return res.body;
|
|
202
|
+
}
|
|
203
|
+
catch (err) {
|
|
204
|
+
if (err.status === 404) {
|
|
205
|
+
throw (0, extensionsApi_1.refNotFoundError)(ref);
|
|
206
|
+
}
|
|
207
|
+
else if (err instanceof error_1.FirebaseError) {
|
|
208
|
+
throw err;
|
|
209
|
+
}
|
|
210
|
+
throw new error_1.FirebaseError(`Failed to query the extension '${clc.bold(extensionRef)}': ${err}`, {
|
|
211
|
+
status: err.status,
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
exports.getExtension = getExtension;
|
package/lib/extensions/refs.js
CHANGED
|
@@ -12,7 +12,7 @@ function parse(refOrName) {
|
|
|
12
12
|
if (ret.version &&
|
|
13
13
|
!semver.valid(ret.version) &&
|
|
14
14
|
!semver.validRange(ret.version) &&
|
|
15
|
-
|
|
15
|
+
!["latest", "latest-approved"].includes(ret.version)) {
|
|
16
16
|
throw new error_1.FirebaseError(`Extension reference ${ret} contains an invalid version ${ret.version}.`);
|
|
17
17
|
}
|
|
18
18
|
return ret;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
const logger_1 = require("../logger");
|
|
3
|
+
exports.getExtensionRegistry = void 0;
|
|
5
4
|
const apiv2_1 = require("../apiv2");
|
|
6
5
|
const api_1 = require("../api");
|
|
7
6
|
const EXTENSIONS_REGISTRY_ENDPOINT = "/extensions.json";
|
|
@@ -23,19 +22,3 @@ async function getExtensionRegistry(onlyFeatured = false) {
|
|
|
23
22
|
return extensions;
|
|
24
23
|
}
|
|
25
24
|
exports.getExtensionRegistry = getExtensionRegistry;
|
|
26
|
-
async function getTrustedPublishers() {
|
|
27
|
-
let registry;
|
|
28
|
-
try {
|
|
29
|
-
registry = await getExtensionRegistry();
|
|
30
|
-
}
|
|
31
|
-
catch (err) {
|
|
32
|
-
logger_1.logger.debug("Couldn't get extensions registry, assuming no trusted publishers except Firebase.");
|
|
33
|
-
return ["firebase"];
|
|
34
|
-
}
|
|
35
|
-
const publisherIds = new Set();
|
|
36
|
-
for (const entry in registry) {
|
|
37
|
-
publisherIds.add(registry[entry].publisher);
|
|
38
|
-
}
|
|
39
|
-
return Array.from(publisherIds);
|
|
40
|
-
}
|
|
41
|
-
exports.getTrustedPublishers = getTrustedPublishers;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.displayDeveloperTOSWarning = exports.acceptLatestAppDeveloperTOS = exports.acceptLatestPublisherTOS = exports.acceptPublisherTOS = exports.getPublisherTOSStatus = exports.acceptAppDeveloperTOS = exports.getAppDeveloperTOSStatus = void 0;
|
|
4
|
+
const apiv2_1 = require("../apiv2");
|
|
5
|
+
const api_1 = require("../api");
|
|
6
|
+
const logger_1 = require("../logger");
|
|
7
|
+
const prompt_1 = require("../prompt");
|
|
8
|
+
const error_1 = require("../error");
|
|
9
|
+
const extensionsHelper_1 = require("./extensionsHelper");
|
|
10
|
+
const utils = require("../utils");
|
|
11
|
+
const VERSION = "v1";
|
|
12
|
+
const extensionsTosUrl = (tos) => `https://firebase.google.com/terms/extensions/${tos}`;
|
|
13
|
+
const apiClient = new apiv2_1.Client({ urlPrefix: api_1.extensionsTOSOrigin, apiVersion: VERSION });
|
|
14
|
+
async function getAppDeveloperTOSStatus(projectId) {
|
|
15
|
+
const res = await apiClient.get(`/projects/${projectId}/appdevtos`);
|
|
16
|
+
return res.body;
|
|
17
|
+
}
|
|
18
|
+
exports.getAppDeveloperTOSStatus = getAppDeveloperTOSStatus;
|
|
19
|
+
async function acceptAppDeveloperTOS(projectId, tosVersion, instanceId = "") {
|
|
20
|
+
const res = await apiClient.post(`/projects/${projectId}/appdevtos:accept`, {
|
|
21
|
+
name: `project/${projectId}/appdevtos`,
|
|
22
|
+
instanceId,
|
|
23
|
+
version: tosVersion,
|
|
24
|
+
});
|
|
25
|
+
return res.body;
|
|
26
|
+
}
|
|
27
|
+
exports.acceptAppDeveloperTOS = acceptAppDeveloperTOS;
|
|
28
|
+
async function getPublisherTOSStatus(projectId) {
|
|
29
|
+
const res = await apiClient.get(`/projects/${projectId}/publishertos`);
|
|
30
|
+
return res.body;
|
|
31
|
+
}
|
|
32
|
+
exports.getPublisherTOSStatus = getPublisherTOSStatus;
|
|
33
|
+
async function acceptPublisherTOS(projectId, tosVersion) {
|
|
34
|
+
const res = await apiClient.post(`/projects/${projectId}/publishertos:accept`, {
|
|
35
|
+
name: `project/${projectId}/publishertos`,
|
|
36
|
+
version: tosVersion,
|
|
37
|
+
});
|
|
38
|
+
return res.body;
|
|
39
|
+
}
|
|
40
|
+
exports.acceptPublisherTOS = acceptPublisherTOS;
|
|
41
|
+
async function acceptLatestPublisherTOS(options, projectId) {
|
|
42
|
+
logger_1.logger.debug(`Checking if latest publisher TOS has been accepted by ${projectId}...`);
|
|
43
|
+
const currentAcceptance = await getPublisherTOSStatus(projectId);
|
|
44
|
+
if (currentAcceptance.lastAcceptedVersion) {
|
|
45
|
+
logger_1.logger.debug(`Already accepted version ${currentAcceptance.lastAcceptedVersion} of Extensions publisher TOS.`);
|
|
46
|
+
return currentAcceptance;
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
const tosLink = extensionsTosUrl("publisher");
|
|
50
|
+
logger_1.logger.info(`To continue, you must accept the Firebase Extensions Publisher Terms of Service: ${tosLink}`);
|
|
51
|
+
if (await (0, prompt_1.confirm)(Object.assign(Object.assign({}, options), { message: "Do you accept the Firebase Extensions Publisher Terms of Service?" }))) {
|
|
52
|
+
return acceptPublisherTOS(projectId, currentAcceptance.latestTosVersion);
|
|
53
|
+
}
|
|
54
|
+
throw new error_1.FirebaseError("You must accept the terms of service to continue.");
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
exports.acceptLatestPublisherTOS = acceptLatestPublisherTOS;
|
|
58
|
+
async function acceptLatestAppDeveloperTOS(options, projectId, instanceIds) {
|
|
59
|
+
logger_1.logger.debug(`Checking if latest AppDeveloper TOS has been accepted by ${projectId}...`);
|
|
60
|
+
displayDeveloperTOSWarning();
|
|
61
|
+
const currentAcceptance = await getAppDeveloperTOSStatus(projectId);
|
|
62
|
+
if (currentAcceptance.lastAcceptedVersion) {
|
|
63
|
+
logger_1.logger.debug(`User Terms of Service aready accepted on project ${projectId}.`);
|
|
64
|
+
}
|
|
65
|
+
else if (!(await (0, prompt_1.confirm)(Object.assign(Object.assign({}, options), { message: "Do you accept the Firebase Extensions User Terms of Service?" })))) {
|
|
66
|
+
throw new error_1.FirebaseError("You must accept the terms of service to continue.");
|
|
67
|
+
}
|
|
68
|
+
const tosPromises = instanceIds.map((instanceId) => {
|
|
69
|
+
return acceptAppDeveloperTOS(projectId, currentAcceptance.latestTosVersion, instanceId);
|
|
70
|
+
});
|
|
71
|
+
return Promise.all(tosPromises);
|
|
72
|
+
}
|
|
73
|
+
exports.acceptLatestAppDeveloperTOS = acceptLatestAppDeveloperTOS;
|
|
74
|
+
function displayDeveloperTOSWarning() {
|
|
75
|
+
const tosLink = extensionsTosUrl("user");
|
|
76
|
+
utils.logLabeledBullet(extensionsHelper_1.logPrefix, `By installing an extension instance onto a Firebase project, you accept the Firebase Extensions User Terms of Service: ${tosLink}`);
|
|
77
|
+
}
|
|
78
|
+
exports.displayDeveloperTOSWarning = displayDeveloperTOSWarning;
|
|
@@ -1,59 +1,39 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.outOfBandChangesWarning = exports.displayWarningsForDeploy =
|
|
4
|
-
const marked_1 = require("marked");
|
|
3
|
+
exports.outOfBandChangesWarning = exports.displayWarningsForDeploy = void 0;
|
|
5
4
|
const clc = require("colorette");
|
|
6
|
-
const
|
|
5
|
+
const TerminalRenderer = require("marked-terminal");
|
|
6
|
+
const marked_1 = require("marked");
|
|
7
|
+
marked_1.marked.setOptions({
|
|
8
|
+
renderer: new TerminalRenderer(),
|
|
9
|
+
});
|
|
7
10
|
const extensionsHelper_1 = require("./extensionsHelper");
|
|
8
|
-
const resolveSource_1 = require("./resolveSource");
|
|
9
11
|
const deploymentSummary_1 = require("../deploy/extensions/deploymentSummary");
|
|
10
12
|
const planner_1 = require("../deploy/extensions/planner");
|
|
11
|
-
const utils = require("../utils");
|
|
12
13
|
const logger_1 = require("../logger");
|
|
13
|
-
|
|
14
|
-
const publisherNameLink = githubLink ? `[${publisherId}](${githubLink})` : publisherId;
|
|
15
|
-
const warningMsg = `This extension is in preview and is built by a developer in the [Extensions Publisher Early Access Program](http://bit.ly/firex-provider). Its functionality might change in backward-incompatible ways. Since this extension isn't built by Firebase, reach out to ${publisherNameLink} with questions about this extension.`;
|
|
16
|
-
const legalMsg = "\n\nIt is provided “AS IS”, without any warranty, express or implied, from Google. Google disclaims all liability for any damages, direct or indirect, resulting from the use of the extension, and its functionality might change in backward - incompatible ways.";
|
|
17
|
-
utils.logLabeledBullet(extensionsHelper_1.logPrefix, (0, marked_1.marked)(warningMsg + legalMsg));
|
|
18
|
-
(0, displayExtensionInfo_1.printSourceDownloadLink)(sourceDownloadUri);
|
|
19
|
-
}
|
|
20
|
-
async function displayWarningPrompts(publisherId, extensionVersion) {
|
|
21
|
-
const trustedPublishers = await (0, resolveSource_1.getTrustedPublishers)();
|
|
22
|
-
if (!trustedPublishers.includes(publisherId)) {
|
|
23
|
-
displayEAPWarning({
|
|
24
|
-
publisherId,
|
|
25
|
-
sourceDownloadUri: extensionVersion.sourceDownloadUri,
|
|
26
|
-
githubLink: extensionVersion.spec.sourceUrl,
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
exports.displayWarningPrompts = displayWarningPrompts;
|
|
14
|
+
const utils = require("../utils");
|
|
34
15
|
const toListEntry = (i) => {
|
|
35
|
-
var _a, _b, _c, _d;
|
|
16
|
+
var _a, _b, _c, _d, _e, _f;
|
|
36
17
|
const idAndRef = (0, deploymentSummary_1.humanReadable)(i);
|
|
37
|
-
const sourceCodeLink = `\n\t[Source Code](${(_a = i.extensionVersion) === null || _a === void 0 ? void 0 : _a.sourceDownloadUri})`;
|
|
38
|
-
const githubLink = ((
|
|
39
|
-
? `\n\t[Publisher Contact](${(
|
|
18
|
+
const sourceCodeLink = `\n\t[Source Code](${(_b = (_a = i.extensionVersion) === null || _a === void 0 ? void 0 : _a.buildSourceUri) !== null && _b !== void 0 ? _b : (_c = i.extensionVersion) === null || _c === void 0 ? void 0 : _c.sourceDownloadUri})`;
|
|
19
|
+
const githubLink = ((_e = (_d = i.extensionVersion) === null || _d === void 0 ? void 0 : _d.spec) === null || _e === void 0 ? void 0 : _e.sourceUrl)
|
|
20
|
+
? `\n\t[Publisher Contact](${(_f = i.extensionVersion) === null || _f === void 0 ? void 0 : _f.spec.sourceUrl})`
|
|
40
21
|
: "";
|
|
41
22
|
return `${idAndRef}${sourceCodeLink}${githubLink}`;
|
|
42
23
|
};
|
|
43
24
|
async function displayWarningsForDeploy(instancesToCreate) {
|
|
44
|
-
const
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
await (0, planner_1.getExtension)(i);
|
|
25
|
+
const uploadedExtensionInstances = instancesToCreate.filter((i) => i.ref);
|
|
26
|
+
for (const i of uploadedExtensionInstances) {
|
|
27
|
+
await (0, planner_1.getExtensionVersion)(i);
|
|
48
28
|
}
|
|
49
|
-
const
|
|
50
|
-
if (
|
|
51
|
-
const humanReadableList =
|
|
52
|
-
utils.logLabeledBullet(extensionsHelper_1.logPrefix, (0, marked_1.marked)(`
|
|
53
|
-
|
|
54
|
-
|
|
29
|
+
const unpublishedExtensions = uploadedExtensionInstances.filter((i) => { var _a, _b; return ((_b = (_a = i.extensionVersion) === null || _a === void 0 ? void 0 : _a.listing) === null || _b === void 0 ? void 0 : _b.state) !== "APPROVED"; });
|
|
30
|
+
if (unpublishedExtensions.length) {
|
|
31
|
+
const humanReadableList = unpublishedExtensions.map(toListEntry).join("\n");
|
|
32
|
+
utils.logLabeledBullet(extensionsHelper_1.logPrefix, (0, marked_1.marked)(`The following extension versions have not been published to the Firebase Extensions Hub:\n${humanReadableList}\n.` +
|
|
33
|
+
"Unpublished extensions have not been reviewed by " +
|
|
34
|
+
"Firebase. Please make sure you trust the extension publisher before installing this extension.", { gfm: false }));
|
|
55
35
|
}
|
|
56
|
-
return
|
|
36
|
+
return unpublishedExtensions.length > 0;
|
|
57
37
|
}
|
|
58
38
|
exports.displayWarningsForDeploy = displayWarningsForDeploy;
|
|
59
39
|
function outOfBandChangesWarning(instanceIds) {
|