cloudcommerce 0.0.48 → 0.0.51

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.
Files changed (69) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/package.json +9 -9
  3. package/packages/api/lib/index.d.ts +40 -104
  4. package/packages/api/lib/types/applications.d.ts +10 -62
  5. package/packages/api/package.json +1 -1
  6. package/packages/api/src/types/applications.d.ts +10 -62
  7. package/packages/apps/_app.config.js +80 -0
  8. package/packages/apps/discounts/lib/discounts.config.d.ts +14 -0
  9. package/packages/apps/discounts/lib/discounts.config.js +19 -0
  10. package/packages/apps/discounts/lib/discounts.config.js.map +1 -0
  11. package/packages/apps/discounts/lib/discounts.d.ts +2 -0
  12. package/packages/apps/discounts/lib/discounts.js +7 -0
  13. package/packages/apps/discounts/lib/discounts.js.map +1 -0
  14. package/packages/apps/discounts/lib/index.d.ts +1 -3
  15. package/packages/apps/discounts/lib/index.js +1 -8
  16. package/packages/apps/discounts/lib/index.js.map +1 -1
  17. package/packages/apps/discounts/package.json +3 -2
  18. package/packages/apps/discounts/src/discounts.config.ts +25 -0
  19. package/packages/apps/discounts/src/discounts.ts +8 -0
  20. package/packages/apps/discounts/src/index.ts +1 -9
  21. package/packages/cli/config/firebase.json +5 -0
  22. package/packages/cli/lib/config-gcloud.js +79 -0
  23. package/packages/cli/lib/create-auth.js +7 -7
  24. package/packages/cli/lib/index.js +12 -1
  25. package/packages/cli/package.json +2 -2
  26. package/packages/cli/src/config-gcloud.ts +93 -0
  27. package/packages/cli/src/create-auth.ts +7 -7
  28. package/packages/cli/src/index.ts +13 -2
  29. package/packages/events/lib/firebase.js +0 -2
  30. package/packages/events/lib/firebase.js.map +1 -1
  31. package/packages/events/package.json +1 -1
  32. package/packages/events/src/firebase.ts +0 -2
  33. package/packages/firebase/lib/config.js +12 -8
  34. package/packages/firebase/lib/config.js.map +1 -1
  35. package/packages/firebase/lib/index.d.ts +0 -1
  36. package/packages/firebase/lib/index.js +0 -4
  37. package/packages/firebase/lib/index.js.map +1 -1
  38. package/packages/firebase/package.json +1 -1
  39. package/packages/firebase/src/config.ts +13 -8
  40. package/packages/firebase/src/index.ts +0 -4
  41. package/packages/modules/lib/firebase/call-app-module.js +1 -1
  42. package/packages/modules/lib/firebase/call-app-module.js.map +1 -1
  43. package/packages/modules/lib/firebase/handle-module.js.map +1 -1
  44. package/packages/modules/lib/firebase.js +0 -2
  45. package/packages/modules/lib/firebase.js.map +1 -1
  46. package/packages/modules/package.json +2 -2
  47. package/packages/modules/src/firebase/call-app-module.ts +1 -1
  48. package/packages/modules/src/firebase/handle-module.ts +3 -3
  49. package/packages/modules/src/firebase.ts +0 -2
  50. package/packages/passport/lib/firebase/handle-passport.js +108 -0
  51. package/packages/passport/lib/firebase/handle-passport.js.map +1 -0
  52. package/packages/passport/lib/firebase/serve-passport-api.js +41 -0
  53. package/packages/passport/lib/firebase/serve-passport-api.js.map +1 -0
  54. package/packages/passport/lib/firebase.js +22 -5
  55. package/packages/passport/lib/firebase.js.map +1 -1
  56. package/packages/passport/package.json +1 -1
  57. package/packages/passport/src/firebase/handle-passport.ts +149 -0
  58. package/packages/passport/src/firebase/serve-passport-api.ts +62 -0
  59. package/packages/passport/src/firebase.ts +32 -7
  60. package/packages/ssr/package.json +1 -1
  61. package/packages/storefront/package.json +12 -2
  62. package/packages/types/index.ts +9 -0
  63. package/packages/types/package.json +1 -1
  64. package/pnpm-lock.yaml +1278 -614
  65. package/packages/firebase/lib/handlers/auth-callback.d.ts +0 -3
  66. package/packages/firebase/lib/handlers/auth-callback.js +0 -45
  67. package/packages/firebase/lib/handlers/auth-callback.js.map +0 -1
  68. package/packages/firebase/src/handlers/auth-callback.ts +0 -49
  69. package/packages/passport/src/firebase/.gitkeep +0 -0
@@ -0,0 +1,14 @@
1
+ declare const _default: () => {
2
+ app_id: number;
3
+ title: string;
4
+ slug: string;
5
+ type: string;
6
+ state: string;
7
+ modules: {
8
+ apply_discount: {
9
+ enabled: boolean;
10
+ };
11
+ };
12
+ admin_settings: {};
13
+ };
14
+ export default _default;
@@ -0,0 +1,19 @@
1
+ import config from '@cloudcommerce/firebase/lib/config';
2
+
3
+ export default () => {
4
+ const { lang, apps: { discounts: { appId } } } = config.get();
5
+ return {
6
+ app_id: appId,
7
+ title: lang.startsWith('en') ? 'Campaigns and discounts' : 'Campanhas e descontos',
8
+ slug: 'discounts',
9
+ type: 'external',
10
+ state: 'active',
11
+ modules: {
12
+ apply_discount: {
13
+ enabled: true,
14
+ },
15
+ },
16
+ admin_settings: {},
17
+ };
18
+ };
19
+ // # sourceMappingURL=discounts.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discounts.config.js","sourceRoot":"","sources":["../src/discounts.config.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oCAAoC,CAAC;AAExD,eAAe,GAAG,EAAE;IAClB,MAAM,EACJ,IAAI,EACJ,IAAI,EAAE,EACJ,SAAS,EAAE,EAAE,KAAK,EAAE,GACrB,GACF,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;IAEjB,OAAO;QACL,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,uBAAuB;QAClF,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,QAAQ;QACf,OAAO,EAAE;YACP,cAAc,EAAE;gBACd,OAAO,EAAE,IAAI;aACd;SACF;QACD,cAAc,EAAE,EACf;KACF,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { AppModuleBody } from '@cloudcommerce/types';
2
+ export declare const applyDiscount: (modBody: AppModuleBody) => Promise<{}>;
@@ -0,0 +1,7 @@
1
+ import { logger } from 'firebase-functions';
2
+
3
+ export const applyDiscount = async (modBody) => {
4
+ logger.info(modBody);
5
+ return {};
6
+ };
7
+ // # sourceMappingURL=discounts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discounts.js","sourceRoot":"","sources":["../src/discounts.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,OAAsB,EAAE,EAAE;IAC5D,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrB,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC"}
@@ -1,3 +1 @@
1
- import type { AppEventsTopic } from '@cloudcommerce/types';
2
- export declare const events: AppEventsTopic[];
3
- export declare const applyDiscount: () => Promise<{}>;
1
+ export * from './discounts';
@@ -1,9 +1,2 @@
1
- import { logger } from 'firebase-functions';
2
-
3
- export const events = [];
4
-
5
- export const applyDiscount = async () => {
6
- logger.info('Hello discounts app');
7
- return {};
8
- };
1
+ export * from './discounts';
9
2
  // # sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,CAAC,MAAM,MAAM,GAAqB,EAAE,CAAC;AAE3C,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;IACtC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACnC,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-discounts",
3
3
  "type": "module",
4
- "version": "0.0.48",
4
+ "version": "0.0.51",
5
5
  "description": "E-Com Plus Cloud Commerce app for complex discount rules",
6
- "main": "lib/index.js",
6
+ "main": "lib/discounts.js",
7
7
  "repository": {
8
8
  "type": "git",
9
9
  "url": "git+https://github.com/ecomplus/cloud-commerce.git",
@@ -20,6 +20,7 @@
20
20
  },
21
21
  "dependencies": {
22
22
  "@cloudcommerce/api": "workspace:*",
23
+ "@cloudcommerce/firebase": "workspace:*",
23
24
  "firebase-admin": "^11.0.1",
24
25
  "firebase-functions": "^3.22.0"
25
26
  },
@@ -0,0 +1,25 @@
1
+ import config from '@cloudcommerce/firebase/lib/config';
2
+
3
+ export default () => {
4
+ const {
5
+ lang,
6
+ apps: {
7
+ discounts: { appId },
8
+ },
9
+ } = config.get();
10
+
11
+ return {
12
+ app_id: appId,
13
+ title: lang.startsWith('en') ? 'Campaigns and discounts' : 'Campanhas e descontos',
14
+ slug: 'discounts',
15
+ type: 'external',
16
+ state: 'active',
17
+ modules: {
18
+ apply_discount: {
19
+ enabled: true,
20
+ },
21
+ },
22
+ admin_settings: {
23
+ },
24
+ };
25
+ };
@@ -0,0 +1,8 @@
1
+ /* eslint-disable import/prefer-default-export */
2
+ import type { AppModuleBody } from '@cloudcommerce/types';
3
+ import { logger } from 'firebase-functions';
4
+
5
+ export const applyDiscount = async (modBody: AppModuleBody) => {
6
+ logger.info(modBody);
7
+ return {};
8
+ };
@@ -1,9 +1 @@
1
- import type { AppEventsTopic } from '@cloudcommerce/types';
2
- import { logger } from 'firebase-functions';
3
-
4
- export const events: AppEventsTopic[] = [];
5
-
6
- export const applyDiscount = async () => {
7
- logger.info('Hello discounts app');
8
- return {};
9
- };
1
+ export * from './discounts';
@@ -9,6 +9,11 @@
9
9
  "source": "functions/core",
10
10
  "codebase": "core"
11
11
  },
12
+ {
13
+ "predeploy": "npm run build -- --codebase events --dir \"$RESOURCE_DIR\"",
14
+ "source": "functions/events",
15
+ "codebase": "events"
16
+ },
12
17
  {
13
18
  "predeploy": "npm run build -- --codebase modules --dir \"$RESOURCE_DIR\"",
14
19
  "source": "functions/modules",
@@ -0,0 +1,79 @@
1
+ import path from 'path';
2
+ import { $, echo, fs } from 'zx';
3
+
4
+ const serviceAccountId = 'cloud-commerce-gh-actions';
5
+ const serviceAccountEmail = (projectId) => {
6
+ return `${serviceAccountId}@${projectId}.iam.gserviceaccount.com`;
7
+ };
8
+ const checkServiceAccountExists = async (projectId) => {
9
+ try {
10
+ return $`gcloud iam service-accounts describe ${serviceAccountEmail(projectId)}`;
11
+ } catch (e) {
12
+ return null;
13
+ }
14
+ };
15
+ const siginGcloudAndSetIAM = async (projectId, pwd) => {
16
+ await $`gcloud auth login`;
17
+ await $`gcloud config set project ${projectId} `;
18
+ const roles = [
19
+ 'roles/cloudconfig.admin',
20
+ 'roles/appengine.appAdmin',
21
+ 'roles/appengine.appCreator',
22
+ 'roles/artifactregistry.admin',
23
+ 'roles/cloudfunctions.admin',
24
+ 'roles/cloudscheduler.admin',
25
+ 'roles/iam.serviceAccountUser',
26
+ 'roles/run.viewer',
27
+ 'roles/serviceusage.apiKeysViewer',
28
+ ];
29
+ const serviceAccount = await checkServiceAccountExists(projectId);
30
+ if (!serviceAccount) {
31
+ await $`gcloud iam service-accounts create ${serviceAccountId} \
32
+ --description="A service account with permission to deploy Cloud Commerce from the GitHub repository to Firebase" \
33
+ --display-name="Cloud Commerce GH Actions"`;
34
+ }
35
+ const pathPolicyIAM = path.join(pwd, 'policyIAM.json');
36
+ await $`gcloud projects get-iam-policy ${projectId} --format json > ${pathPolicyIAM}`;
37
+ const policyIAM = fs.readJSONSync(pathPolicyIAM);
38
+ const { bindings } = policyIAM;
39
+ let updatePolicy = false;
40
+ roles.forEach((role) => {
41
+ const roleFound = bindings.find((binding) => binding.role === role);
42
+ const memberServiceAccount = `serviceAccount:${serviceAccountEmail(projectId)}`;
43
+ if (!roleFound) {
44
+ const newBinding = {
45
+ members: [
46
+ memberServiceAccount,
47
+ ],
48
+ role,
49
+ };
50
+ bindings.push(newBinding);
51
+ updatePolicy = true;
52
+ } else {
53
+ const serviceAccountHavePermission = roleFound.members.find((account) => account === memberServiceAccount);
54
+ if (!serviceAccountHavePermission) {
55
+ roleFound.members.push(memberServiceAccount);
56
+ updatePolicy = true;
57
+ }
58
+ }
59
+ });
60
+ if (updatePolicy) {
61
+ fs.writeJSONSync(pathPolicyIAM, policyIAM);
62
+ return $`gcloud projects set-iam-policy ${projectId} ${pathPolicyIAM}`;
63
+ }
64
+ return echo``;
65
+ };
66
+ const createKeyServiceAccount = async (projectId, pwd) => {
67
+ try {
68
+ const pathFileKey = path.join(pwd, 'serviceAccountKey.json');
69
+ await $`gcloud iam service-accounts keys create ${pathFileKey} \
70
+ --iam-account=${serviceAccountEmail(projectId)}`;
71
+ return JSON.stringify(fs.readJSONSync(pathFileKey));
72
+ } catch (e) {
73
+ return null;
74
+ }
75
+ };
76
+
77
+ export default siginGcloudAndSetIAM;
78
+
79
+ export { siginGcloudAndSetIAM, createKeyServiceAccount };
@@ -26,15 +26,15 @@ export default async (storeId, accessToken) => {
26
26
  username: `cloudcomm${Date.now()}`,
27
27
  permissions: {
28
28
  applications: ['all'],
29
- brands: ['GET'],
30
- carts: ['all'],
31
- categories: ['GET'],
32
- collections: ['GET'],
29
+ brands: ['all'],
30
+ categories: ['all'],
31
+ collections: ['all'],
32
+ grids: ['all'],
33
+ products: ['all'],
33
34
  customers: ['all'],
34
- grids: ['GET'],
35
+ carts: ['all'],
35
36
  orders: ['GET', 'POST', 'PATCH'],
36
- products: ['GET', 'PATCH'],
37
- stores: ['GET'],
37
+ stores: ['GET', 'PATCH'],
38
38
  },
39
39
  }, apiConfig);
40
40
  authenticationId = _id;
@@ -5,6 +5,7 @@ import {
5
5
  } from 'zx';
6
6
  import login from './login.js';
7
7
  import build from './build.js';
8
+ import { siginGcloudAndSetIAM, createKeyServiceAccount } from './config-gcloud.js';
8
9
 
9
10
  const { FIREBASE_PROJECT_ID, GOOGLE_APPLICATION_CREDENTIALS } = process.env;
10
11
  const __dirname = url.fileURLToPath(new URL('.', import.meta.url));
@@ -43,6 +44,9 @@ export default async () => {
43
44
  return opts;
44
45
  }, '');
45
46
  const $firebase = (cmd) => {
47
+ if (cmd === 'deploy') {
48
+ return $`firebase --project=${projectId} ${cmd}${options} --force`;
49
+ }
46
50
  return $`firebase --project=${projectId} ${cmd}${options}`;
47
51
  };
48
52
  if (argv._.includes('serve')) {
@@ -94,6 +98,13 @@ ECOM_STORE_ID=${storeId}
94
98
  //
95
99
  }
96
100
  }
101
+ let serviceAccountJSON = null;
102
+ try {
103
+ await siginGcloudAndSetIAM(projectId, pwd);
104
+ serviceAccountJSON = await createKeyServiceAccount(projectId, pwd);
105
+ } catch (e) {
106
+ //
107
+ }
97
108
  return echo`
98
109
  ****
99
110
 
@@ -103,7 +114,7 @@ Finish by saving the following secrets to your GitHub repository:
103
114
 
104
115
  ${chalk.bold('ECOM_API_KEY')} = ${chalk.bgMagenta(apiKey)}
105
116
 
106
- ${chalk.bold('FIREBASE_SERVICE_ACCOUNT')} = {YOUR_SERVICE_ACCOUNT_JSON}
117
+ ${chalk.bold('FIREBASE_SERVICE_ACCOUNT')} = ${chalk.bgMagenta(serviceAccountJSON || '{YOUR_SERVICE_ACCOUNT_JSON}')}
107
118
 
108
119
  -- More info at https://github.com/ecomplus/store#getting-started
109
120
  `;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/cli",
3
3
  "type": "module",
4
- "version": "0.0.48",
4
+ "version": "0.0.51",
5
5
  "description": "E-Com Plus Cloud Commerce CLI tools",
6
6
  "bin": {
7
7
  "cloudcommerce": "./bin/run.mjs"
@@ -28,6 +28,6 @@
28
28
  "dependencies": {
29
29
  "@cloudcommerce/api": "workspace:*",
30
30
  "md5": "^2.3.0",
31
- "zx": "^7.0.7"
31
+ "zx": "^7.0.8"
32
32
  }
33
33
  }
@@ -0,0 +1,93 @@
1
+ import path from 'path';
2
+ import { $, echo, fs } from 'zx';
3
+
4
+ const serviceAccountId = 'cloud-commerce-gh-actions';
5
+ const serviceAccountEmail = (projectId: string) => {
6
+ return `${serviceAccountId}@${projectId}.iam.gserviceaccount.com`;
7
+ };
8
+
9
+ const checkServiceAccountExists = async (projectId: string) => {
10
+ try {
11
+ return $`gcloud iam service-accounts describe ${serviceAccountEmail(projectId)}`;
12
+ } catch (e) {
13
+ return null;
14
+ }
15
+ };
16
+
17
+ const siginGcloudAndSetIAM = async (
18
+ projectId: string,
19
+ pwd: string,
20
+ ) => {
21
+ await $`gcloud auth login`;
22
+ await $`gcloud config set project ${projectId} `;
23
+ const roles = [
24
+ 'roles/cloudconfig.admin',
25
+ 'roles/appengine.appAdmin',
26
+ 'roles/appengine.appCreator',
27
+ 'roles/artifactregistry.admin',
28
+ 'roles/cloudfunctions.admin',
29
+ 'roles/cloudscheduler.admin',
30
+ 'roles/iam.serviceAccountUser',
31
+ 'roles/run.viewer',
32
+ 'roles/serviceusage.apiKeysViewer',
33
+ ];
34
+ const serviceAccount = await checkServiceAccountExists(projectId);
35
+ if (!serviceAccount) {
36
+ await $`gcloud iam service-accounts create ${serviceAccountId} \
37
+ --description="A service account with permission to deploy Cloud Commerce from the GitHub repository to Firebase" \
38
+ --display-name="Cloud Commerce GH Actions"`;
39
+ }
40
+ const pathPolicyIAM = path.join(pwd, 'policyIAM.json');
41
+ await $`gcloud projects get-iam-policy ${projectId} --format json > ${pathPolicyIAM}`;
42
+ const policyIAM = fs.readJSONSync(pathPolicyIAM);
43
+ const { bindings } = policyIAM;
44
+ let updatePolicy = false;
45
+
46
+ roles.forEach((role) => {
47
+ const roleFound = bindings.find(
48
+ (binding: { [key: string]: string | string[] }) => binding.role === role,
49
+ );
50
+ const memberServiceAccount = `serviceAccount:${serviceAccountEmail(projectId)}`;
51
+ if (!roleFound) {
52
+ const newBinding = {
53
+ members: [
54
+ memberServiceAccount,
55
+ ],
56
+ role,
57
+ };
58
+ bindings.push(newBinding);
59
+ updatePolicy = true;
60
+ } else {
61
+ const serviceAccountHavePermission = roleFound.members.find(
62
+ (account: string) => account === memberServiceAccount,
63
+ );
64
+ if (!serviceAccountHavePermission) {
65
+ roleFound.members.push(memberServiceAccount);
66
+ updatePolicy = true;
67
+ }
68
+ }
69
+ });
70
+ if (updatePolicy) {
71
+ fs.writeJSONSync(pathPolicyIAM, policyIAM);
72
+ return $`gcloud projects set-iam-policy ${projectId} ${pathPolicyIAM}`;
73
+ }
74
+ return echo``;
75
+ };
76
+
77
+ const createKeyServiceAccount = async (projectId: string, pwd: string) => {
78
+ try {
79
+ const pathFileKey = path.join(pwd, 'serviceAccountKey.json');
80
+ await $`gcloud iam service-accounts keys create ${pathFileKey} \
81
+ --iam-account=${serviceAccountEmail(projectId)}`;
82
+ return JSON.stringify(fs.readJSONSync(pathFileKey));
83
+ } catch (e) {
84
+ return null;
85
+ }
86
+ };
87
+
88
+ export default siginGcloudAndSetIAM;
89
+
90
+ export {
91
+ siginGcloudAndSetIAM,
92
+ createKeyServiceAccount,
93
+ };
@@ -27,15 +27,15 @@ export default async (storeId: number, accessToken: string) => {
27
27
  username: `cloudcomm${Date.now()}`,
28
28
  permissions: {
29
29
  applications: ['all'],
30
- brands: ['GET'],
31
- carts: ['all'],
32
- categories: ['GET'],
33
- collections: ['GET'],
30
+ brands: ['all'],
31
+ categories: ['all'],
32
+ collections: ['all'],
33
+ grids: ['all'],
34
+ products: ['all'],
34
35
  customers: ['all'],
35
- grids: ['GET'],
36
+ carts: ['all'],
36
37
  orders: ['GET', 'POST', 'PATCH'],
37
- products: ['GET', 'PATCH'],
38
- stores: ['GET'],
38
+ stores: ['GET', 'PATCH'],
39
39
  },
40
40
  }, apiConfig);
41
41
  authenticationId = _id;
@@ -9,6 +9,7 @@ import {
9
9
  } from 'zx';
10
10
  import login from './login';
11
11
  import build from './build';
12
+ import { siginGcloudAndSetIAM, createKeyServiceAccount } from './config-gcloud';
12
13
 
13
14
  const {
14
15
  FIREBASE_PROJECT_ID,
@@ -56,6 +57,9 @@ export default async () => {
56
57
  return opts;
57
58
  }, '');
58
59
  const $firebase = (cmd: string) => {
60
+ if (cmd === 'deploy') {
61
+ return $`firebase --project=${projectId} ${cmd}${options} --force`;
62
+ }
59
63
  return $`firebase --project=${projectId} ${cmd}${options}`;
60
64
  };
61
65
 
@@ -116,6 +120,14 @@ ECOM_STORE_ID=${storeId}
116
120
  //
117
121
  }
118
122
  }
123
+ let serviceAccountJSON : string | null = null;
124
+ try {
125
+ await siginGcloudAndSetIAM(projectId as string, pwd);
126
+ serviceAccountJSON = await createKeyServiceAccount(projectId as string, pwd);
127
+ } catch (e) {
128
+ //
129
+ }
130
+
119
131
  return echo`
120
132
  ****
121
133
 
@@ -125,11 +137,10 @@ Finish by saving the following secrets to your GitHub repository:
125
137
 
126
138
  ${chalk.bold('ECOM_API_KEY')} = ${chalk.bgMagenta(apiKey)}
127
139
 
128
- ${chalk.bold('FIREBASE_SERVICE_ACCOUNT')} = {YOUR_SERVICE_ACCOUNT_JSON}
140
+ ${chalk.bold('FIREBASE_SERVICE_ACCOUNT')} = ${chalk.bgMagenta(serviceAccountJSON || '{YOUR_SERVICE_ACCOUNT_JSON}')}
129
141
 
130
142
  -- More info at https://github.com/ecomplus/store#getting-started
131
143
  `;
132
144
  }
133
-
134
145
  return $`echo 'Hello from @cloudcommerce/cli'`;
135
146
  };
@@ -19,8 +19,6 @@ export const onNewOrder = functions.region(region)
19
19
  logger.warn(`Dropping event ${context.eventId} with age[ms]: ${eventAgeMs}`);
20
20
  return;
21
21
  }
22
- // Hide API key for security
23
- process.env.ECOM_API_KEY = '***';
24
22
  const { json } = message;
25
23
  logger.info({
26
24
  topic: newOrderTopic,
@@ -1 +1 @@
1
- {"version":3,"file":"firebase.js","sourceRoot":"","sources":["../src/firebase.ts"],"names":[],"mappings":"AAAA,iDAAiD;AAGjD,OAAO,gCAAgC,CAAC;AACxC,gDAAgD;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,MAAM,MAAM,oCAAoC,CAAC;AAExD,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;AAC7B,aAAa,EAAE,CAAC;AAEhB,MAAM,aAAa,GAAG,KAAK,CAAC;AAC5B,MAAM,aAAa,GAAmB,YAAY,CAAC;AACnD,MAAM,EAAE,oBAAoB,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AAE1D,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;KAC/C,OAAO,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;KAChC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;IAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC9D,IAAI,UAAU,GAAG,aAAa,EAAE;QAC9B,MAAM,CAAC,IAAI,CAAC,kBAAkB,OAAO,CAAC,OAAO,kBAAkB,UAAU,EAAE,CAAC,CAAC;QAC7E,OAAO;KACR;IACD,4BAA4B;IAC5B,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,KAAK,CAAC;IACjC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IACzB,MAAM,CAAC,IAAI,CAAC;QACV,KAAK,EAAE,aAAa;QACpB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,IAAI;KACL,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"firebase.js","sourceRoot":"","sources":["../src/firebase.ts"],"names":[],"mappings":"AAAA,iDAAiD;AAGjD,OAAO,gCAAgC,CAAC;AACxC,gDAAgD;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,MAAM,MAAM,oCAAoC,CAAC;AAExD,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;AAC7B,aAAa,EAAE,CAAC;AAEhB,MAAM,aAAa,GAAG,KAAK,CAAC;AAC5B,MAAM,aAAa,GAAmB,YAAY,CAAC;AACnD,MAAM,EAAE,oBAAoB,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AAE1D,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;KAC/C,OAAO,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;KAChC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;IAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC9D,IAAI,UAAU,GAAG,aAAa,EAAE;QAC9B,MAAM,CAAC,IAAI,CAAC,kBAAkB,OAAO,CAAC,OAAO,kBAAkB,UAAU,EAAE,CAAC,CAAC;QAC7E,OAAO;KACR;IACD,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IACzB,MAAM,CAAC,IAAI,CAAC;QACV,KAAK,EAAE,aAAa;QACpB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,IAAI;KACL,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/events",
3
3
  "type": "module",
4
- "version": "0.0.48",
4
+ "version": "0.0.51",
5
5
  "description": "E-Com Plus Cloud Commerce app events",
6
6
  "main": "lib/index.js",
7
7
  "exports": {
@@ -22,8 +22,6 @@ export const onNewOrder = functions.region(region)
22
22
  logger.warn(`Dropping event ${context.eventId} with age[ms]: ${eventAgeMs}`);
23
23
  return;
24
24
  }
25
- // Hide API key for security
26
- process.env.ECOM_API_KEY = '***';
27
25
  const { json } = message;
28
26
  logger.info({
29
27
  topic: newOrderTopic,
@@ -3,21 +3,25 @@ import {
3
3
  DEFAULT_LANG, DEFAULT_CURRENCY, DEFAULT_CURRENCY_SYMBOL, DEFAULT_COUNTRY_CODE,
4
4
  } from './defaults.js';
5
5
 
6
+ // @ts-ignore
7
+ const env = (typeof process === 'object' && process?.env)
8
+ || (typeof window === 'object' && window)
9
+ || {};
6
10
  const deepmerge = Deepmerge();
7
11
  const self = {
8
12
  __config: {
9
13
  hello: 'from @cloudcommerce/firebase',
10
- lang: process.env.ECOM_LANG || DEFAULT_LANG,
11
- currency: process.env.ECOM_CURRENCY || DEFAULT_CURRENCY,
12
- currencySymbol: process.env.ECOM_CURRENCY_SYMBOL || DEFAULT_CURRENCY_SYMBOL,
13
- countryCode: process.env.ECOM_COUNTRY_CODE || DEFAULT_COUNTRY_CODE,
14
- storeId: Number(process.env.ECOM_STORE_ID),
14
+ lang: env.ECOM_LANG || DEFAULT_LANG,
15
+ currency: env.ECOM_CURRENCY || DEFAULT_CURRENCY,
16
+ currencySymbol: env.ECOM_CURRENCY_SYMBOL || DEFAULT_CURRENCY_SYMBOL,
17
+ countryCode: env.ECOM_COUNTRY_CODE || DEFAULT_COUNTRY_CODE,
18
+ storeId: Number(env.ECOM_STORE_ID),
15
19
  httpsFunctionOptions: {
16
- region: process.env.DEPLOY_REGION || 'us-east1',
20
+ region: env.DEPLOY_REGION || 'us-east1',
17
21
  },
18
22
  apps: {
19
23
  discounts: {
20
- appId: 912000,
24
+ appId: 1252,
21
25
  },
22
26
  },
23
27
  },
@@ -30,7 +34,7 @@ export default {
30
34
  set(config) {
31
35
  self.__config = deepmerge(self.__config, config);
32
36
  if (config.storeId) {
33
- process.env.ECOM_STORE_ID = config.storeId;
37
+ env.ECOM_STORE_ID = config.storeId;
34
38
  }
35
39
  },
36
40
  };
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAEpB,MAAM,SAAS,GAAG,SAAS,EAAE,CAAC;AAE9B,MAAM,IAAI,GAAG;IACX,QAAQ,EAAE;QACR,KAAK,EAAE,8BAA8B;QACrC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,YAAY;QAC3C,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,gBAAgB;QACvD,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,uBAAuB;QAC3E,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,oBAAoB;QAClE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;QAC1C,oBAAoB,EAAE;YACpB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,UAAU;SAChD;QACD,IAAI,EAAE;YACJ,SAAS,EAAE;gBACT,KAAK,EAAE,MAAM;aACd;SACF;KACF;CACF,CAAC;AAEF,eAAe;IACb,GAAG;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IACD,GAAG,CAAC,MAAM;QACR,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,MAAM,CAAC,OAAO,EAAE;YAClB,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC;SAC5C;IACH,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAEpB,aAAa;AACb,MAAM,GAAG,GAA8B,CAAC,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,EAAE,GAAG,CAAC;OAC/E,CAAC,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC;OACtC,EAAE,CAAC;AAER,MAAM,SAAS,GAAG,SAAS,EAAE,CAAC;AAE9B,MAAM,IAAI,GAAG;IACX,QAAQ,EAAE;QACR,KAAK,EAAE,8BAA8B;QACrC,IAAI,EAAE,GAAG,CAAC,SAAS,IAAI,YAAY;QACnC,QAAQ,EAAE,GAAG,CAAC,aAAa,IAAI,gBAAgB;QAC/C,cAAc,EAAE,GAAG,CAAC,oBAAoB,IAAI,uBAAuB;QACnE,WAAW,EAAE,GAAG,CAAC,iBAAiB,IAAI,oBAAoB;QAC1D,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC;QAClC,oBAAoB,EAAE;YACpB,MAAM,EAAE,GAAG,CAAC,aAAa,IAAI,UAAU;SACxC;QACD,IAAI,EAAE;YACJ,SAAS,EAAE;gBACT,KAAK,EAAE,IAAI;aACZ;SACF;KACF;CACF,CAAC;AAEF,eAAe;IACb,GAAG;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IACD,GAAG,CAAC,MAAM;QACR,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,MAAM,CAAC,OAAO,EAAE;YAClB,GAAG,CAAC,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC;SACpC;IACH,CAAC;CACF,CAAC"}
@@ -2,4 +2,3 @@ import 'source-map-support/register.js';
2
2
  import '@cloudcommerce/api/fetch-polyfill.js';
3
3
  import functions from 'firebase-functions';
4
4
  export declare const cronStoreEvents: functions.CloudFunction<unknown>;
5
- export declare const appAuthCallback: functions.HttpsFunction;
@@ -7,7 +7,6 @@ import { initializeApp } from 'firebase-admin/app';
7
7
  import functions from 'firebase-functions';
8
8
  import config from './config.js';
9
9
  import checkStoreEvents from './handlers/check-store-events.js';
10
- import handleAuthCallback from './handlers/auth-callback.js';
11
10
 
12
11
  initializeApp();
13
12
  const { httpsFunctionOptions: { region } } = config.get();
@@ -23,7 +22,4 @@ export const cronStoreEvents = functionBuilder.pubsub
23
22
  .onRun(() => {
24
23
  return checkStoreEvents();
25
24
  });
26
-
27
- export const appAuthCallback = functionBuilder.https
28
- .onRequest(handleAuthCallback);
29
25
  // # sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iDAAiD;AAEjD,OAAO,gCAAgC,CAAC;AACxC,OAAO,sCAAsC,CAAC;AAC9C,gEAAgE;AAChE,gDAAgD;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,OAAO,gBAAgB,MAAM,+BAA+B,CAAC;AAC7D,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAE1D,aAAa,EAAE,CAAC;AAEhB,MAAM,EAAE,oBAAoB,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AAE1D,MAAM,eAAe,GAAG,SAAS;KAC9B,MAAM,CAAC,MAAM,CAAC;KACd,OAAO,CAAC;IACP,cAAc,EAAE,GAAG;IACnB,MAAM,EAAE,OAAO;CAChB,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM;KAClD,QAAQ,CAAC,WAAW,CAAC;KACrB,KAAK,CAAC,GAAG,EAAE;IACV,OAAO,gBAAgB,EAAE,CAAC;AAC5B,CAAC,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,eAAe,GAAG,eAAe,CAAC,KAAK;KACjD,SAAS,CAAC,kBAAkB,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iDAAiD;AAEjD,OAAO,gCAAgC,CAAC;AACxC,OAAO,sCAAsC,CAAC;AAC9C,gEAAgE;AAChE,gDAAgD;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,OAAO,gBAAgB,MAAM,+BAA+B,CAAC;AAE7D,aAAa,EAAE,CAAC;AAEhB,MAAM,EAAE,oBAAoB,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AAE1D,MAAM,eAAe,GAAG,SAAS;KAC9B,MAAM,CAAC,MAAM,CAAC;KACd,OAAO,CAAC;IACP,cAAc,EAAE,GAAG;IACnB,MAAM,EAAE,OAAO;CAChB,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM;KAClD,QAAQ,CAAC,WAAW,CAAC;KACrB,KAAK,CAAC,GAAG,EAAE;IACV,OAAO,gBAAgB,EAAE,CAAC;AAC5B,CAAC,CAAC,CAAC"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/firebase",
3
3
  "type": "module",
4
- "version": "0.0.48",
4
+ "version": "0.0.51",
5
5
  "description": "E-Com Plus Cloud Commerce on Firebase",
6
6
  "main": "lib/index.js",
7
7
  "types": "lib/index.d.ts",
@@ -6,22 +6,27 @@ import {
6
6
  DEFAULT_COUNTRY_CODE,
7
7
  } from './defaults';
8
8
 
9
+ // @ts-ignore
10
+ const env: { [key: string]: string } = (typeof process === 'object' && process?.env)
11
+ || (typeof window === 'object' && window)
12
+ || {};
13
+
9
14
  const deepmerge = Deepmerge();
10
15
 
11
16
  const self = {
12
17
  __config: {
13
18
  hello: 'from @cloudcommerce/firebase',
14
- lang: process.env.ECOM_LANG || DEFAULT_LANG,
15
- currency: process.env.ECOM_CURRENCY || DEFAULT_CURRENCY,
16
- currencySymbol: process.env.ECOM_CURRENCY_SYMBOL || DEFAULT_CURRENCY_SYMBOL,
17
- countryCode: process.env.ECOM_COUNTRY_CODE || DEFAULT_COUNTRY_CODE,
18
- storeId: Number(process.env.ECOM_STORE_ID),
19
+ lang: env.ECOM_LANG || DEFAULT_LANG,
20
+ currency: env.ECOM_CURRENCY || DEFAULT_CURRENCY,
21
+ currencySymbol: env.ECOM_CURRENCY_SYMBOL || DEFAULT_CURRENCY_SYMBOL,
22
+ countryCode: env.ECOM_COUNTRY_CODE || DEFAULT_COUNTRY_CODE,
23
+ storeId: Number(env.ECOM_STORE_ID),
19
24
  httpsFunctionOptions: {
20
- region: process.env.DEPLOY_REGION || 'us-east1',
25
+ region: env.DEPLOY_REGION || 'us-east1',
21
26
  },
22
27
  apps: {
23
28
  discounts: {
24
- appId: 912000,
29
+ appId: 1252,
25
30
  },
26
31
  },
27
32
  },
@@ -34,7 +39,7 @@ export default {
34
39
  set(config) {
35
40
  self.__config = deepmerge(self.__config, config);
36
41
  if (config.storeId) {
37
- process.env.ECOM_STORE_ID = config.storeId;
42
+ env.ECOM_STORE_ID = config.storeId;
38
43
  }
39
44
  },
40
45
  };