From 36a013c6282822e68e1c72fcfa5de8671f1658a7 Mon Sep 17 00:00:00 2001 From: Samuel Witke Date: Mon, 29 Nov 2021 17:35:51 -0500 Subject: [PATCH] =?UTF-8?q?feat(ctp.alumni.newsletter):=20slackbot=20imple?= =?UTF-8?q?mentation=20of=20ctp.alumni.ne=E2=80=A6=20(#25)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(ctp.alumni.newsletter): slackbot implementation of ctp.alumni.newsletter * feat(ctp.alumni.newsletter): updates to newsletter * feat(ctp.alumni.newsletter): included google form question * fix(security update) * feat(updated ctp.newsletter image) Co-authored-by: Samuel Witke --- .github/workflows/main.yml | 4 +- .gitignore | 2 +- jest.config.js | 2 +- libs/ctp.alumni.advice/package.json | 2 +- libs/ctp.alumni.newsletter/.babelrc | 12 + libs/ctp.alumni.newsletter/.eslintrc.json | 18 + libs/ctp.alumni.newsletter/README.md | 7 + libs/ctp.alumni.newsletter/jest.config.js | 11 + libs/ctp.alumni.newsletter/package-lock.json | 419 + libs/ctp.alumni.newsletter/package.json | 12 + libs/ctp.alumni.newsletter/src/index.js | 1 + .../src/lib/assets/C7DemoNightInvite (1).png | Bin 0 -> 714438 bytes .../src/lib/ctp.alumni.newsletter.jsx | 102 + .../src/lib/ctp.alumni.newsletter.spec.tsx | 14 + .../lib/use-slack-bot/use-slack-bot.spec.ts | 11 + .../src/lib/use-slack-bot/use-slack-bot.ts | 24 + libs/ctp.alumni.newsletter/tsconfig.json | 24 + libs/ctp.alumni.newsletter/tsconfig.lib.json | 22 + libs/ctp.alumni.newsletter/tsconfig.spec.json | 19 + package-lock.json | 88293 +++++++++++----- package.json | 69 +- tsconfig.base.json | 1 + workspace.json | 61 +- 23 files changed, 61505 insertions(+), 27625 deletions(-) create mode 100644 libs/ctp.alumni.newsletter/.babelrc create mode 100644 libs/ctp.alumni.newsletter/.eslintrc.json create mode 100644 libs/ctp.alumni.newsletter/README.md create mode 100644 libs/ctp.alumni.newsletter/jest.config.js create mode 100644 libs/ctp.alumni.newsletter/package-lock.json create mode 100644 libs/ctp.alumni.newsletter/package.json create mode 100644 libs/ctp.alumni.newsletter/src/index.js create mode 100644 libs/ctp.alumni.newsletter/src/lib/assets/C7DemoNightInvite (1).png create mode 100644 libs/ctp.alumni.newsletter/src/lib/ctp.alumni.newsletter.jsx create mode 100644 libs/ctp.alumni.newsletter/src/lib/ctp.alumni.newsletter.spec.tsx create mode 100644 libs/ctp.alumni.newsletter/src/lib/use-slack-bot/use-slack-bot.spec.ts create mode 100644 libs/ctp.alumni.newsletter/src/lib/use-slack-bot/use-slack-bot.ts create mode 100644 libs/ctp.alumni.newsletter/tsconfig.json create mode 100644 libs/ctp.alumni.newsletter/tsconfig.lib.json create mode 100644 libs/ctp.alumni.newsletter/tsconfig.spec.json diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 84ca9c9..caa11ac 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -2,7 +2,7 @@ name: Build and Deploy on: push: branches: - - main + - master jobs: build-and-deploy: runs-on: ubuntu-latest @@ -22,7 +22,7 @@ jobs: run: | npm ci npm run affected:test - npm run build + npm run affected:build npm run dep-graph:build mv ./apps/ctp.alumni.slack.code-of-conduct ./apps/ctp.alumni.app/public diff --git a/.gitignore b/.gitignore index 2bf7106..4757541 100644 --- a/.gitignore +++ b/.gitignore @@ -6,7 +6,7 @@ /out-tsc # dependencies -/node_modules +node_modules # IDEs and editors /.idea diff --git a/jest.config.js b/jest.config.js index 7877cda..ac69d02 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1 +1 @@ -module.exports = { projects: '/libs/ctp.alumni.advice' }; +module.exports = { projects: '/libs/ctp.alumni.newsletter' }; diff --git a/libs/ctp.alumni.advice/package.json b/libs/ctp.alumni.advice/package.json index 876a4e7..3708002 100644 --- a/libs/ctp.alumni.advice/package.json +++ b/libs/ctp.alumni.advice/package.json @@ -1,4 +1,4 @@ { - "name": "@cuny-tech-prep/ctp.alumni.advice", + "name": "@cunytechprep/ctp.alumni.advice", "version": "0.0.1" } diff --git a/libs/ctp.alumni.newsletter/.babelrc b/libs/ctp.alumni.newsletter/.babelrc new file mode 100644 index 0000000..e24c51e --- /dev/null +++ b/libs/ctp.alumni.newsletter/.babelrc @@ -0,0 +1,12 @@ +{ + "presets": [ + [ + "@nrwl/react/babel", + { + "runtime": "automatic", + "importSource": "jsx-slack" + } + ] + ], + "plugins": [] +} diff --git a/libs/ctp.alumni.newsletter/.eslintrc.json b/libs/ctp.alumni.newsletter/.eslintrc.json new file mode 100644 index 0000000..734ddac --- /dev/null +++ b/libs/ctp.alumni.newsletter/.eslintrc.json @@ -0,0 +1,18 @@ +{ + "extends": ["plugin:@nrwl/nx/react", "../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": {} + }, + { + "files": ["*.ts", "*.tsx"], + "rules": {} + }, + { + "files": ["*.js", "*.jsx"], + "rules": {} + } + ] +} diff --git a/libs/ctp.alumni.newsletter/README.md b/libs/ctp.alumni.newsletter/README.md new file mode 100644 index 0000000..821f23c --- /dev/null +++ b/libs/ctp.alumni.newsletter/README.md @@ -0,0 +1,7 @@ +# ctp.alumni.newsletter + +This library was generated with [Nx](https://nx.dev). + +## Running unit tests + +Run `nx test ctp.alumni.newsletter` to execute the unit tests via [Jest](https://jestjs.io). diff --git a/libs/ctp.alumni.newsletter/jest.config.js b/libs/ctp.alumni.newsletter/jest.config.js new file mode 100644 index 0000000..aadacee --- /dev/null +++ b/libs/ctp.alumni.newsletter/jest.config.js @@ -0,0 +1,11 @@ +module.exports = { + displayName: 'ctp.alumni.newsletter', + preset: '../../jest.preset.js', + transform: { + '^.+\\.[tj]sx?$': 'babel-jest', + }, + testTimeout: 20000, + moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'], + coverageDirectory: '../../coverage/libs/ctp.alumni.newsletter', + testEnvironment: "node" +}; diff --git a/libs/ctp.alumni.newsletter/package-lock.json b/libs/ctp.alumni.newsletter/package-lock.json new file mode 100644 index 0000000..3b62874 --- /dev/null +++ b/libs/ctp.alumni.newsletter/package-lock.json @@ -0,0 +1,419 @@ +{ + "name": "@cuny-tech-prep/ctp.alumni.newsletter", + "version": "0.0.1", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "@cuny-tech-prep/ctp.alumni.newsletter", + "version": "0.0.1", + "dependencies": { + "@slack/web-api": "^6.5.1", + "jsx-slack": "^4.4.3" + } + }, + "node_modules/@slack/logger": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@slack/logger/-/logger-3.0.0.tgz", + "integrity": "sha512-DTuBFbqu4gGfajREEMrkq5jBhcnskinhr4+AnfJEk48zhVeEv3XnUKGIX98B74kxhYsIMfApGGySTn7V3b5yBA==", + "dependencies": { + "@types/node": ">=12.0.0" + }, + "engines": { + "node": ">= 12.13.0", + "npm": ">= 6.12.0" + } + }, + "node_modules/@slack/types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@slack/types/-/types-2.2.0.tgz", + "integrity": "sha512-/yHEFvgp0UY/lfFvQqbq9BocW/pM4xnGycqGAx+plRgYp96dZp1y50Whz7yzOgasEUsy5TyQfBK07cj0RwUyIg==", + "engines": { + "node": ">= 12.13.0", + "npm": ">= 6.12.0" + } + }, + "node_modules/@slack/web-api": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@slack/web-api/-/web-api-6.5.1.tgz", + "integrity": "sha512-W1PDIdHz/GtDpC8afpPUsXMfAQ+sZGwmfxx+Ug83uhRD8zECrypGTmIyCqrCSWzf2qVKT9XvMftZX3m0AmPY8A==", + "dependencies": { + "@slack/logger": "^3.0.0", + "@slack/types": "^2.0.0", + "@types/is-stream": "^1.1.0", + "@types/node": ">=12.0.0", + "axios": "^0.24.0", + "eventemitter3": "^3.1.0", + "form-data": "^2.5.0", + "is-electron": "2.2.0", + "is-stream": "^1.1.0", + "p-queue": "^6.6.1", + "p-retry": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0", + "npm": ">= 6.12.0" + } + }, + "node_modules/@types/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@types/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-jkZatu4QVbR60mpIzjINmtS1ZF4a/FqdTUTBeQDVOQ2PYyidtwFKr0B5G6ERukKwliq+7mIXvxyppwzG5EgRYg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "16.11.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.10.tgz", + "integrity": "sha512-3aRnHa1KlOEEhJ6+CvyHKK5vE9BcLGjtUpwvqYLRvYNQKMfabu3BwfJaA/SLW8dxe28LsNDjtHwePTuzn3gmOA==" + }, + "node_modules/@types/retry": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", + "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "node_modules/axios": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", + "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", + "dependencies": { + "follow-redirects": "^1.14.4" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" + }, + "node_modules/follow-redirects": { + "version": "1.14.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz", + "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/is-electron": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-electron/-/is-electron-2.2.0.tgz", + "integrity": "sha512-SpMppC2XR3YdxSzczXReBjqs2zGscWQpBIKqwXYBFic0ERaxNVgwLCHwOLZeESfdJQjX0RDvrJ1lBXX2ij+G1Q==" + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsx-slack": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/jsx-slack/-/jsx-slack-4.4.3.tgz", + "integrity": "sha512-Mv9GlV2rDzKdm1I1Jy7Mgn3Sd+/Vk/Sx7ArH6Id9v2YgT3tgXna6mRLr5ZHm6rg3OpCIbV8nd38T0K6yprmtzw==", + "dependencies": { + "@slack/types": "^2.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "dependencies": { + "mime-db": "1.51.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue/node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/p-retry": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", + "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", + "dependencies": { + "@types/retry": "^0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "engines": { + "node": ">= 4" + } + } + }, + "dependencies": { + "@slack/logger": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@slack/logger/-/logger-3.0.0.tgz", + "integrity": "sha512-DTuBFbqu4gGfajREEMrkq5jBhcnskinhr4+AnfJEk48zhVeEv3XnUKGIX98B74kxhYsIMfApGGySTn7V3b5yBA==", + "requires": { + "@types/node": ">=12.0.0" + } + }, + "@slack/types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@slack/types/-/types-2.2.0.tgz", + "integrity": "sha512-/yHEFvgp0UY/lfFvQqbq9BocW/pM4xnGycqGAx+plRgYp96dZp1y50Whz7yzOgasEUsy5TyQfBK07cj0RwUyIg==" + }, + "@slack/web-api": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@slack/web-api/-/web-api-6.5.1.tgz", + "integrity": "sha512-W1PDIdHz/GtDpC8afpPUsXMfAQ+sZGwmfxx+Ug83uhRD8zECrypGTmIyCqrCSWzf2qVKT9XvMftZX3m0AmPY8A==", + "requires": { + "@slack/logger": "^3.0.0", + "@slack/types": "^2.0.0", + "@types/is-stream": "^1.1.0", + "@types/node": ">=12.0.0", + "axios": "^0.24.0", + "eventemitter3": "^3.1.0", + "form-data": "^2.5.0", + "is-electron": "2.2.0", + "is-stream": "^1.1.0", + "p-queue": "^6.6.1", + "p-retry": "^4.0.0" + } + }, + "@types/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@types/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-jkZatu4QVbR60mpIzjINmtS1ZF4a/FqdTUTBeQDVOQ2PYyidtwFKr0B5G6ERukKwliq+7mIXvxyppwzG5EgRYg==", + "requires": { + "@types/node": "*" + } + }, + "@types/node": { + "version": "16.11.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.10.tgz", + "integrity": "sha512-3aRnHa1KlOEEhJ6+CvyHKK5vE9BcLGjtUpwvqYLRvYNQKMfabu3BwfJaA/SLW8dxe28LsNDjtHwePTuzn3gmOA==" + }, + "@types/retry": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", + "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "axios": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", + "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", + "requires": { + "follow-redirects": "^1.14.4" + } + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" + }, + "follow-redirects": { + "version": "1.14.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz", + "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==" + }, + "form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "is-electron": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-electron/-/is-electron-2.2.0.tgz", + "integrity": "sha512-SpMppC2XR3YdxSzczXReBjqs2zGscWQpBIKqwXYBFic0ERaxNVgwLCHwOLZeESfdJQjX0RDvrJ1lBXX2ij+G1Q==" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "jsx-slack": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/jsx-slack/-/jsx-slack-4.4.3.tgz", + "integrity": "sha512-Mv9GlV2rDzKdm1I1Jy7Mgn3Sd+/Vk/Sx7ArH6Id9v2YgT3tgXna6mRLr5ZHm6rg3OpCIbV8nd38T0K6yprmtzw==", + "requires": { + "@slack/types": "^2.2.0" + } + }, + "mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" + }, + "mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "requires": { + "mime-db": "1.51.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "requires": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "dependencies": { + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + } + } + }, + "p-retry": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", + "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", + "requires": { + "@types/retry": "^0.12.0", + "retry": "^0.13.1" + } + }, + "p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "requires": { + "p-finally": "^1.0.0" + } + }, + "retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==" + } + } +} diff --git a/libs/ctp.alumni.newsletter/package.json b/libs/ctp.alumni.newsletter/package.json new file mode 100644 index 0000000..ffbada4 --- /dev/null +++ b/libs/ctp.alumni.newsletter/package.json @@ -0,0 +1,12 @@ +{ + "name": "@cunytechprep/ctp.alumni.newsletter", + "version": "0.0.1", + "dependencies": { + "@slack/web-api": "^6.5.1", + "jsx-slack": "^4.4.3" + }, + "repository": "git://github.com/CUNYTechPrep/ctp.apps", + "publishConfig": { + "registry":"https://npm.pkg.github.com" + } +} diff --git a/libs/ctp.alumni.newsletter/src/index.js b/libs/ctp.alumni.newsletter/src/index.js new file mode 100644 index 0000000..4263ea4 --- /dev/null +++ b/libs/ctp.alumni.newsletter/src/index.js @@ -0,0 +1 @@ +export * from './lib/use-slack-bot/use-slack-bot' diff --git a/libs/ctp.alumni.newsletter/src/lib/assets/C7DemoNightInvite (1).png b/libs/ctp.alumni.newsletter/src/lib/assets/C7DemoNightInvite (1).png new file mode 100644 index 0000000000000000000000000000000000000000..5937f90b422531a5377af5ce708ae09e9dff6a52 GIT binary patch literal 714438 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