diff --git a/CHANGELOG.md b/CHANGELOG.md index 4646d7f0..68dfdfb8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ ### 💡 Others - Upgrade @react-native-clipboard/clipboard to 1.13.1 and remove patch. ([#116](https://github.com/expo/orbit/pull/116) by [@gabrieldonadel](https://github.com/gabrieldonadel)) +- Configure EAS build workflow. ([#115](https://github.com/expo/orbit/pull/115) by [@gabrieldonadel](https://github.com/gabrieldonadel)) ## 1.0.1 — 2023-12-01 diff --git a/apps/menu-bar/.eas/build/build-preview.yml b/apps/menu-bar/.eas/build/build-preview.yml new file mode 100644 index 00000000..58f8d91c --- /dev/null +++ b/apps/menu-bar/.eas/build/build-preview.yml @@ -0,0 +1,45 @@ +build: + name: Build Orbit preview + steps: + - eas/checkout + - configure_macos_credentials: + inputs: + buildCredentials: ${ eas.job.secrets.buildCredentials } + - eas/install_node_modules + - run: + name: Build packages + working_directory: ../../ + command: | + yarn build + - run: + name: Archive CLI + working_directory: ../../apps/cli + command: | + yarn archive + - run: + name: Codesign CLI + working_directory: ../../apps/cli + command: | + yarn codesign + - run: + name: Install menu-bar pods + working_directory: ./macos + command: pod install + - run: + name: Archive menu-bar + working_directory: ../../apps/menu-bar + command: | + yarn archive + - run: + name: Export archive menu-bar + working_directory: ../../apps/menu-bar + command: | + yarn export-local-archive + - eas/find_and_upload_build_artifacts +functions: + configure_macos_credentials: + name: Configure macOS Credentials + inputs: + - name: buildCredentials + type: json + path: ./configureMacOSCredentials diff --git a/apps/menu-bar/.eas/build/build-release.yml b/apps/menu-bar/.eas/build/build-release.yml new file mode 100644 index 00000000..0070eef1 --- /dev/null +++ b/apps/menu-bar/.eas/build/build-release.yml @@ -0,0 +1,50 @@ +build: + name: Build and notarize Orbit + steps: + - eas/checkout + - configure_macos_credentials: + inputs: + buildCredentials: ${ eas.job.secrets.buildCredentials } + - eas/install_node_modules + - run: + name: Build packages + working_directory: ../../ + command: | + yarn build + - run: + name: Archive CLI + working_directory: ../../apps/cli + command: | + yarn archive + - run: + name: Codesign CLI + working_directory: ../../apps/cli + command: | + yarn codesign + - run: + name: Install menu-bar pods + working_directory: ./macos + command: pod install + - run: + name: Archive menu-bar + working_directory: ../../apps/menu-bar + command: | + yarn archive + - run: + name: Export archive menu-bar + working_directory: ../../apps/menu-bar + command: | + yarn export-upload-archive + - run: + name: Notarize menu-bar + working_directory: ../../apps/menu-bar + command: | + yarn notarize + - eas/find_and_upload_build_artifacts +functions: + configure_macos_credentials: + name: Configure macOS Credentials + inputs: + - name: buildCredentials + type: json + path: ./configureMacOSCredentials diff --git a/apps/menu-bar/.eas/build/configureMacOSCredentials/README.md b/apps/menu-bar/.eas/build/configureMacOSCredentials/README.md new file mode 100644 index 00000000..ebb0909f --- /dev/null +++ b/apps/menu-bar/.eas/build/configureMacOSCredentials/README.md @@ -0,0 +1,35 @@ +# Configure macOS credentials + +This is a custom EAS build function written in TypeScript that configures the credentials for a macOS build while EAS +doesn't add official support. It can be used as a step in a [custom build](https://docs.expo.dev/preview/custom-build-config/). + +## How to use it + +1. Install dependencies: `npm install`. +2. Implement your function in `src/index.ts`. +3. Install [`ncc`](https://github.com/vercel/ncc) if not yet installed: `npm install -g @vercel/ncc`. +4. Compile the function with `ncc` by running `npm run build`. Ensure that the `build` directory is not ignored by `.gitignore` / `.easignore`, it must be included in the [archive uploaded when running `eas build`](https://expo.fyi/eas-build-archive). +5. Use the function in a custom build YAML config. For example: + + ```yml + build: + name: Custom build + steps: + - run: + name: Hi! + command: echo "Hello! Let's run a custom function!" + - configure_macos_credentials: + id: my-function-call + - run: + name: Bye! + command: echo "Bye! The custom function has finished its job." + + functions: + configure_macos_credentials: + name: Configure macOS Credentials + path: ./configureMacOSCredentials # The path is resolved relative to this config file. + ``` + +## Learn more + +Refer to the [custom builds documentation](https://docs.expo.dev/preview/custom-build-config/). diff --git a/apps/menu-bar/.eas/build/configureMacOSCredentials/build/index.js b/apps/menu-bar/.eas/build/configureMacOSCredentials/build/index.js new file mode 100644 index 00000000..e84ec3a3 --- /dev/null +++ b/apps/menu-bar/.eas/build/configureMacOSCredentials/build/index.js @@ -0,0 +1 @@ +(()=>{var e={2522:function(e,t,r){"use strict";var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};const i=n(r(6443));function spawnAsync(e,t,r={}){const n=new Error;const o=n.stack?n.stack.replace(/^.*/," ..."):null;let s;let c=new Promise(((n,c)=>{let{ignoreStdio:a,...u}=r;s=(0,i.default)(e,t,u);let f="";let l="";if(!a){if(s.stdout){s.stdout.on("data",(e=>{f+=e}))}if(s.stderr){s.stderr.on("data",(e=>{l+=e}))}}let completionListener=(r,i)=>{s.removeListener("error",errorListener);let a={pid:s.pid,output:[f,l],stdout:f,stderr:l,status:r,signal:i};if(r!==0){let n=t&&t.length>0?` ${t.join(" ")}`:"";let s=i?new Error(`${e}${n} exited with signal: ${i}`):new Error(`${e}${n} exited with non-zero code: ${r}`);if(s.stack&&o){s.stack+=`\n${o}`}Object.assign(s,a);c(s)}else{n(a)}};let errorListener=e=>{if(a){s.removeListener("exit",completionListener)}else{s.removeListener("close",completionListener)}Object.assign(e,{pid:s.pid,output:[f,l],stdout:f,stderr:l,status:null,signal:null});c(e)};if(a){s.once("exit",completionListener)}else{s.once("close",completionListener)}s.once("error",errorListener)}));c.child=s;return c}e.exports=spawnAsync},6443:(e,t,r)=>{"use strict";const n=r(2081);const i=r(7111);const o=r(4522);function spawn(e,t,r){const s=i(e,t,r);const c=n.spawn(s.command,s.args,s.options);o.hookChildProcess(c,s);return c}function spawnSync(e,t,r){const s=i(e,t,r);const c=n.spawnSync(s.command,s.args,s.options);c.error=c.error||o.verifyENOENTSync(c.status,s);return c}e.exports=spawn;e.exports.spawn=spawn;e.exports.sync=spawnSync;e.exports._parse=i;e.exports._enoent=o},4522:e=>{"use strict";const t=process.platform==="win32";function notFoundError(e,t){return Object.assign(new Error(`${t} ${e.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${t} ${e.command}`,path:e.command,spawnargs:e.args})}function hookChildProcess(e,r){if(!t){return}const n=e.emit;e.emit=function(t,i){if(t==="exit"){const t=verifyENOENT(i,r,"spawn");if(t){return n.call(e,"error",t)}}return n.apply(e,arguments)}}function verifyENOENT(e,r){if(t&&e===1&&!r.file){return notFoundError(r.original,"spawn")}return null}function verifyENOENTSync(e,r){if(t&&e===1&&!r.file){return notFoundError(r.original,"spawnSync")}return null}e.exports={hookChildProcess:hookChildProcess,verifyENOENT:verifyENOENT,verifyENOENTSync:verifyENOENTSync,notFoundError:notFoundError}},7111:(e,t,r)=>{"use strict";const n=r(1017);const i=r(5236);const o=r(6777);const s=r(1296);const c=process.platform==="win32";const a=/\.(?:com|exe)$/i;const u=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function detectShebang(e){e.file=i(e);const t=e.file&&s(e.file);if(t){e.args.unshift(e.file);e.command=t;return i(e)}return e.file}function parseNonShell(e){if(!c){return e}const t=detectShebang(e);const r=!a.test(t);if(e.options.forceShell||r){const r=u.test(t);e.command=n.normalize(e.command);e.command=o.command(e.command);e.args=e.args.map((e=>o.argument(e,r)));const i=[e.command].concat(e.args).join(" ");e.args=["/d","/s","/c",`"${i}"`];e.command=process.env.comspec||"cmd.exe";e.options.windowsVerbatimArguments=true}return e}function parse(e,t,r){if(t&&!Array.isArray(t)){r=t;t=null}t=t?t.slice(0):[];r=Object.assign({},r);const n={command:e,args:t,options:r,file:undefined,original:{command:e,args:t}};return r.shell?n:parseNonShell(n)}e.exports=parse},6777:e=>{"use strict";const t=/([()\][%!^"`<>&|;, *?])/g;function escapeCommand(e){e=e.replace(t,"^$1");return e}function escapeArgument(e,r){e=`${e}`;e=e.replace(/(\\*)"/g,'$1$1\\"');e=e.replace(/(\\*)$/,"$1$1");e=`"${e}"`;e=e.replace(t,"^$1");if(r){e=e.replace(t,"^$1")}return e}e.exports.command=escapeCommand;e.exports.argument=escapeArgument},1296:(e,t,r)=>{"use strict";const n=r(7147);const i=r(3692);function readShebang(e){const t=150;const r=Buffer.alloc(t);let o;try{o=n.openSync(e,"r");n.readSync(o,r,0,t,0);n.closeSync(o)}catch(e){}return i(r.toString())}e.exports=readShebang},5236:(e,t,r)=>{"use strict";const n=r(1017);const i=r(2643);const o=r(5223);function resolveCommandAttempt(e,t){const r=e.options.env||process.env;const s=process.cwd();const c=e.options.cwd!=null;const a=c&&process.chdir!==undefined&&!process.chdir.disabled;if(a){try{process.chdir(e.options.cwd)}catch(e){}}let u;try{u=i.sync(e.command,{path:r[o({env:r})],pathExt:t?n.delimiter:undefined})}catch(e){}finally{if(a){process.chdir(s)}}if(u){u=n.resolve(c?e.options.cwd:"",u)}return u}function resolveCommand(e){return resolveCommandAttempt(e)||resolveCommandAttempt(e,true)}e.exports=resolveCommand},7402:(e,t,r)=>{"use strict";const n=r(7719);const i=r(1017);const o=r(1585).mkdirsSync;const s=r(7827).utimesMillisSync;const c=r(5920);function copySync(e,t,r){if(typeof r==="function"){r={filter:r}}r=r||{};r.clobber="clobber"in r?!!r.clobber:true;r.overwrite="overwrite"in r?!!r.overwrite:r.clobber;if(r.preserveTimestamps&&process.arch==="ia32"){process.emitWarning("Using the preserveTimestamps option in 32-bit node is not recommended;\n\n"+"\tsee https://github.com/jprichardson/node-fs-extra/issues/269","Warning","fs-extra-WARN0002")}const{srcStat:s,destStat:a}=c.checkPathsSync(e,t,"copy",r);c.checkParentPathsSync(e,s,t,"copy");if(r.filter&&!r.filter(e,t))return;const u=i.dirname(t);if(!n.existsSync(u))o(u);return getStats(a,e,t,r)}function getStats(e,t,r,i){const o=i.dereference?n.statSync:n.lstatSync;const s=o(t);if(s.isDirectory())return onDir(s,e,t,r,i);else if(s.isFile()||s.isCharacterDevice()||s.isBlockDevice())return onFile(s,e,t,r,i);else if(s.isSymbolicLink())return onLink(e,t,r,i);else if(s.isSocket())throw new Error(`Cannot copy a socket file: ${t}`);else if(s.isFIFO())throw new Error(`Cannot copy a FIFO pipe: ${t}`);throw new Error(`Unknown file: ${t}`)}function onFile(e,t,r,n,i){if(!t)return copyFile(e,r,n,i);return mayCopyFile(e,r,n,i)}function mayCopyFile(e,t,r,i){if(i.overwrite){n.unlinkSync(r);return copyFile(e,t,r,i)}else if(i.errorOnExist){throw new Error(`'${r}' already exists`)}}function copyFile(e,t,r,i){n.copyFileSync(t,r);if(i.preserveTimestamps)handleTimestamps(e.mode,t,r);return setDestMode(r,e.mode)}function handleTimestamps(e,t,r){if(fileIsNotWritable(e))makeFileWritable(r,e);return setDestTimestamps(t,r)}function fileIsNotWritable(e){return(e&128)===0}function makeFileWritable(e,t){return setDestMode(e,t|128)}function setDestMode(e,t){return n.chmodSync(e,t)}function setDestTimestamps(e,t){const r=n.statSync(e);return s(t,r.atime,r.mtime)}function onDir(e,t,r,n,i){if(!t)return mkDirAndCopy(e.mode,r,n,i);return copyDir(r,n,i)}function mkDirAndCopy(e,t,r,i){n.mkdirSync(r);copyDir(t,r,i);return setDestMode(r,e)}function copyDir(e,t,r){n.readdirSync(e).forEach((n=>copyDirItem(n,e,t,r)))}function copyDirItem(e,t,r,n){const o=i.join(t,e);const s=i.join(r,e);if(n.filter&&!n.filter(o,s))return;const{destStat:a}=c.checkPathsSync(o,s,"copy",n);return getStats(a,o,s,n)}function onLink(e,t,r,o){let s=n.readlinkSync(t);if(o.dereference){s=i.resolve(process.cwd(),s)}if(!e){return n.symlinkSync(s,r)}else{let e;try{e=n.readlinkSync(r)}catch(e){if(e.code==="EINVAL"||e.code==="UNKNOWN")return n.symlinkSync(s,r);throw e}if(o.dereference){e=i.resolve(process.cwd(),e)}if(c.isSrcSubdir(s,e)){throw new Error(`Cannot copy '${s}' to a subdirectory of itself, '${e}'.`)}if(c.isSrcSubdir(e,s)){throw new Error(`Cannot overwrite '${e}' with '${s}'.`)}return copyLink(s,r)}}function copyLink(e,t){n.unlinkSync(t);return n.symlinkSync(e,t)}e.exports=copySync},716:(e,t,r)=>{"use strict";const n=r(6295);const i=r(1017);const{mkdirs:o}=r(1585);const{pathExists:s}=r(6045);const{utimesMillis:c}=r(7827);const a=r(5920);async function copy(e,t,r={}){if(typeof r==="function"){r={filter:r}}r.clobber="clobber"in r?!!r.clobber:true;r.overwrite="overwrite"in r?!!r.overwrite:r.clobber;if(r.preserveTimestamps&&process.arch==="ia32"){process.emitWarning("Using the preserveTimestamps option in 32-bit node is not recommended;\n\n"+"\tsee https://github.com/jprichardson/node-fs-extra/issues/269","Warning","fs-extra-WARN0001")}const{srcStat:n,destStat:c}=await a.checkPaths(e,t,"copy",r);await a.checkParentPaths(e,n,t,"copy");const u=await runFilter(e,t,r);if(!u)return;const f=i.dirname(t);const l=await s(f);if(!l){await o(f)}await getStatsAndPerformCopy(c,e,t,r)}async function runFilter(e,t,r){if(!r.filter)return true;return r.filter(e,t)}async function getStatsAndPerformCopy(e,t,r,i){const o=i.dereference?n.stat:n.lstat;const s=await o(t);if(s.isDirectory())return onDir(s,e,t,r,i);if(s.isFile()||s.isCharacterDevice()||s.isBlockDevice())return onFile(s,e,t,r,i);if(s.isSymbolicLink())return onLink(e,t,r,i);if(s.isSocket())throw new Error(`Cannot copy a socket file: ${t}`);if(s.isFIFO())throw new Error(`Cannot copy a FIFO pipe: ${t}`);throw new Error(`Unknown file: ${t}`)}async function onFile(e,t,r,i,o){if(!t)return copyFile(e,r,i,o);if(o.overwrite){await n.unlink(i);return copyFile(e,r,i,o)}if(o.errorOnExist){throw new Error(`'${i}' already exists`)}}async function copyFile(e,t,r,i){await n.copyFile(t,r);if(i.preserveTimestamps){if(fileIsNotWritable(e.mode)){await makeFileWritable(r,e.mode)}const i=await n.stat(t);await c(r,i.atime,i.mtime)}return n.chmod(r,e.mode)}function fileIsNotWritable(e){return(e&128)===0}function makeFileWritable(e,t){return n.chmod(e,t|128)}async function onDir(e,t,r,o,s){if(!t){await n.mkdir(o)}const c=await n.readdir(r);await Promise.all(c.map((async e=>{const t=i.join(r,e);const n=i.join(o,e);const c=await runFilter(t,n,s);if(!c)return;const{destStat:u}=await a.checkPaths(t,n,"copy",s);return getStatsAndPerformCopy(u,t,n,s)})));if(!t){await n.chmod(o,e.mode)}}async function onLink(e,t,r,o){let s=await n.readlink(t);if(o.dereference){s=i.resolve(process.cwd(),s)}if(!e){return n.symlink(s,r)}let c=null;try{c=await n.readlink(r)}catch(e){if(e.code==="EINVAL"||e.code==="UNKNOWN")return n.symlink(s,r);throw e}if(o.dereference){c=i.resolve(process.cwd(),c)}if(a.isSrcSubdir(s,c)){throw new Error(`Cannot copy '${s}' to a subdirectory of itself, '${c}'.`)}if(a.isSrcSubdir(c,s)){throw new Error(`Cannot overwrite '${c}' with '${s}'.`)}await n.unlink(r);return n.symlink(s,r)}e.exports=copy},8304:(e,t,r)=>{"use strict";const n=r(5104).fromPromise;e.exports={copy:n(r(716)),copySync:r(7402)}},127:(e,t,r)=>{"use strict";const n=r(5104).fromPromise;const i=r(6295);const o=r(1017);const s=r(1585);const c=r(8280);const a=n((async function emptyDir(e){let t;try{t=await i.readdir(e)}catch{return s.mkdirs(e)}return Promise.all(t.map((t=>c.remove(o.join(e,t)))))}));function emptyDirSync(e){let t;try{t=i.readdirSync(e)}catch{return s.mkdirsSync(e)}t.forEach((t=>{t=o.join(e,t);c.removeSync(t)}))}e.exports={emptyDirSync:emptyDirSync,emptydirSync:emptyDirSync,emptyDir:a,emptydir:a}},2226:(e,t,r)=>{"use strict";const n=r(5104).fromPromise;const i=r(1017);const o=r(6295);const s=r(1585);async function createFile(e){let t;try{t=await o.stat(e)}catch{}if(t&&t.isFile())return;const r=i.dirname(e);let n=null;try{n=await o.stat(r)}catch(t){if(t.code==="ENOENT"){await s.mkdirs(r);await o.writeFile(e,"");return}else{throw t}}if(n.isDirectory()){await o.writeFile(e,"")}else{await o.readdir(r)}}function createFileSync(e){let t;try{t=o.statSync(e)}catch{}if(t&&t.isFile())return;const r=i.dirname(e);try{if(!o.statSync(r).isDirectory()){o.readdirSync(r)}}catch(e){if(e&&e.code==="ENOENT")s.mkdirsSync(r);else throw e}o.writeFileSync(e,"")}e.exports={createFile:n(createFile),createFileSync:createFileSync}},5668:(e,t,r)=>{"use strict";const{createFile:n,createFileSync:i}=r(2226);const{createLink:o,createLinkSync:s}=r(3320);const{createSymlink:c,createSymlinkSync:a}=r(1711);e.exports={createFile:n,createFileSync:i,ensureFile:n,ensureFileSync:i,createLink:o,createLinkSync:s,ensureLink:o,ensureLinkSync:s,createSymlink:c,createSymlinkSync:a,ensureSymlink:c,ensureSymlinkSync:a}},3320:(e,t,r)=>{"use strict";const n=r(5104).fromPromise;const i=r(1017);const o=r(6295);const s=r(1585);const{pathExists:c}=r(6045);const{areIdentical:a}=r(5920);async function createLink(e,t){let r;try{r=await o.lstat(t)}catch{}let n;try{n=await o.lstat(e)}catch(e){e.message=e.message.replace("lstat","ensureLink");throw e}if(r&&a(n,r))return;const u=i.dirname(t);const f=await c(u);if(!f){await s.mkdirs(u)}await o.link(e,t)}function createLinkSync(e,t){let r;try{r=o.lstatSync(t)}catch{}try{const t=o.lstatSync(e);if(r&&a(t,r))return}catch(e){e.message=e.message.replace("lstat","ensureLink");throw e}const n=i.dirname(t);const c=o.existsSync(n);if(c)return o.linkSync(e,t);s.mkdirsSync(n);return o.linkSync(e,t)}e.exports={createLink:n(createLink),createLinkSync:createLinkSync}},8514:(e,t,r)=>{"use strict";const n=r(1017);const i=r(6295);const{pathExists:o}=r(6045);const s=r(5104).fromPromise;async function symlinkPaths(e,t){if(n.isAbsolute(e)){try{await i.lstat(e)}catch(e){e.message=e.message.replace("lstat","ensureSymlink");throw e}return{toCwd:e,toDst:e}}const r=n.dirname(t);const s=n.join(r,e);const c=await o(s);if(c){return{toCwd:s,toDst:e}}try{await i.lstat(e)}catch(e){e.message=e.message.replace("lstat","ensureSymlink");throw e}return{toCwd:e,toDst:n.relative(r,e)}}function symlinkPathsSync(e,t){if(n.isAbsolute(e)){const t=i.existsSync(e);if(!t)throw new Error("absolute srcpath does not exist");return{toCwd:e,toDst:e}}const r=n.dirname(t);const o=n.join(r,e);const s=i.existsSync(o);if(s){return{toCwd:o,toDst:e}}const c=i.existsSync(e);if(!c)throw new Error("relative srcpath does not exist");return{toCwd:e,toDst:n.relative(r,e)}}e.exports={symlinkPaths:s(symlinkPaths),symlinkPathsSync:symlinkPathsSync}},511:(e,t,r)=>{"use strict";const n=r(6295);const i=r(5104).fromPromise;async function symlinkType(e,t){if(t)return t;let r;try{r=await n.lstat(e)}catch{return"file"}return r&&r.isDirectory()?"dir":"file"}function symlinkTypeSync(e,t){if(t)return t;let r;try{r=n.lstatSync(e)}catch{return"file"}return r&&r.isDirectory()?"dir":"file"}e.exports={symlinkType:i(symlinkType),symlinkTypeSync:symlinkTypeSync}},1711:(e,t,r)=>{"use strict";const n=r(5104).fromPromise;const i=r(1017);const o=r(6295);const{mkdirs:s,mkdirsSync:c}=r(1585);const{symlinkPaths:a,symlinkPathsSync:u}=r(8514);const{symlinkType:f,symlinkTypeSync:l}=r(511);const{pathExists:d}=r(6045);const{areIdentical:p}=r(5920);async function createSymlink(e,t,r){let n;try{n=await o.lstat(t)}catch{}if(n&&n.isSymbolicLink()){const[r,n]=await Promise.all([o.stat(e),o.stat(t)]);if(p(r,n))return}const c=await a(e,t);e=c.toDst;const u=await f(c.toCwd,r);const l=i.dirname(t);if(!await d(l)){await s(l)}return o.symlink(e,t,u)}function createSymlinkSync(e,t,r){let n;try{n=o.lstatSync(t)}catch{}if(n&&n.isSymbolicLink()){const r=o.statSync(e);const n=o.statSync(t);if(p(r,n))return}const s=u(e,t);e=s.toDst;r=l(s.toCwd,r);const a=i.dirname(t);const f=o.existsSync(a);if(f)return o.symlinkSync(e,t,r);c(a);return o.symlinkSync(e,t,r)}e.exports={createSymlink:n(createSymlink),createSymlinkSync:createSymlinkSync}},6295:(e,t,r)=>{"use strict";const n=r(5104).fromCallback;const i=r(7719);const o=["access","appendFile","chmod","chown","close","copyFile","fchmod","fchown","fdatasync","fstat","fsync","ftruncate","futimes","lchmod","lchown","link","lstat","mkdir","mkdtemp","open","opendir","readdir","readFile","readlink","realpath","rename","rm","rmdir","stat","symlink","truncate","unlink","utimes","writeFile"].filter((e=>typeof i[e]==="function"));Object.assign(t,i);o.forEach((e=>{t[e]=n(i[e])}));t.exists=function(e,t){if(typeof t==="function"){return i.exists(e,t)}return new Promise((t=>i.exists(e,t)))};t.read=function(e,t,r,n,o,s){if(typeof s==="function"){return i.read(e,t,r,n,o,s)}return new Promise(((s,c)=>{i.read(e,t,r,n,o,((e,t,r)=>{if(e)return c(e);s({bytesRead:t,buffer:r})}))}))};t.write=function(e,t,...r){if(typeof r[r.length-1]==="function"){return i.write(e,t,...r)}return new Promise(((n,o)=>{i.write(e,t,...r,((e,t,r)=>{if(e)return o(e);n({bytesWritten:t,buffer:r})}))}))};t.readv=function(e,t,...r){if(typeof r[r.length-1]==="function"){return i.readv(e,t,...r)}return new Promise(((n,o)=>{i.readv(e,t,...r,((e,t,r)=>{if(e)return o(e);n({bytesRead:t,buffers:r})}))}))};t.writev=function(e,t,...r){if(typeof r[r.length-1]==="function"){return i.writev(e,t,...r)}return new Promise(((n,o)=>{i.writev(e,t,...r,((e,t,r)=>{if(e)return o(e);n({bytesWritten:t,buffers:r})}))}))};if(typeof i.realpath.native==="function"){t.realpath.native=n(i.realpath.native)}else{process.emitWarning("fs.realpath.native is not a function. Is fs being monkey-patched?","Warning","fs-extra-WARN0003")}},3092:(e,t,r)=>{"use strict";e.exports={...r(6295),...r(8304),...r(127),...r(5668),...r(8947),...r(1585),...r(1913),...r(2074),...r(6045),...r(8280)}},8947:(e,t,r)=>{"use strict";const n=r(5104).fromPromise;const i=r(441);i.outputJson=n(r(4758));i.outputJsonSync=r(7218);i.outputJSON=i.outputJson;i.outputJSONSync=i.outputJsonSync;i.writeJSON=i.writeJson;i.writeJSONSync=i.writeJsonSync;i.readJSON=i.readJson;i.readJSONSync=i.readJsonSync;e.exports=i},441:(e,t,r)=>{"use strict";const n=r(3869);e.exports={readJson:n.readFile,readJsonSync:n.readFileSync,writeJson:n.writeFile,writeJsonSync:n.writeFileSync}},7218:(e,t,r)=>{"use strict";const{stringify:n}=r(3226);const{outputFileSync:i}=r(2074);function outputJsonSync(e,t,r){const o=n(t,r);i(e,o,r)}e.exports=outputJsonSync},4758:(e,t,r)=>{"use strict";const{stringify:n}=r(3226);const{outputFile:i}=r(2074);async function outputJson(e,t,r={}){const o=n(t,r);await i(e,o,r)}e.exports=outputJson},1585:(e,t,r)=>{"use strict";const n=r(5104).fromPromise;const{makeDir:i,makeDirSync:o}=r(1098);const s=n(i);e.exports={mkdirs:s,mkdirsSync:o,mkdirp:s,mkdirpSync:o,ensureDir:s,ensureDirSync:o}},1098:(e,t,r)=>{"use strict";const n=r(6295);const{checkPath:i}=r(9107);const getMode=e=>{const t={mode:511};if(typeof e==="number")return e;return{...t,...e}.mode};e.exports.makeDir=async(e,t)=>{i(e);return n.mkdir(e,{mode:getMode(t),recursive:true})};e.exports.makeDirSync=(e,t)=>{i(e);return n.mkdirSync(e,{mode:getMode(t),recursive:true})}},9107:(e,t,r)=>{"use strict";const n=r(1017);e.exports.checkPath=function checkPath(e){if(process.platform==="win32"){const t=/[<>:"|?*]/.test(e.replace(n.parse(e).root,""));if(t){const t=new Error(`Path contains invalid characters: ${e}`);t.code="EINVAL";throw t}}}},1913:(e,t,r)=>{"use strict";const n=r(5104).fromPromise;e.exports={move:n(r(3825)),moveSync:r(1857)}},1857:(e,t,r)=>{"use strict";const n=r(7719);const i=r(1017);const o=r(8304).copySync;const s=r(8280).removeSync;const c=r(1585).mkdirpSync;const a=r(5920);function moveSync(e,t,r){r=r||{};const n=r.overwrite||r.clobber||false;const{srcStat:o,isChangingCase:s=false}=a.checkPathsSync(e,t,"move",r);a.checkParentPathsSync(e,o,t,"move");if(!isParentRoot(t))c(i.dirname(t));return doRename(e,t,n,s)}function isParentRoot(e){const t=i.dirname(e);const r=i.parse(t);return r.root===t}function doRename(e,t,r,i){if(i)return rename(e,t,r);if(r){s(t);return rename(e,t,r)}if(n.existsSync(t))throw new Error("dest already exists.");return rename(e,t,r)}function rename(e,t,r){try{n.renameSync(e,t)}catch(n){if(n.code!=="EXDEV")throw n;return moveAcrossDevice(e,t,r)}}function moveAcrossDevice(e,t,r){const n={overwrite:r,errorOnExist:true,preserveTimestamps:true};o(e,t,n);return s(e)}e.exports=moveSync},3825:(e,t,r)=>{"use strict";const n=r(6295);const i=r(1017);const{copy:o}=r(8304);const{remove:s}=r(8280);const{mkdirp:c}=r(1585);const{pathExists:a}=r(6045);const u=r(5920);async function move(e,t,r={}){const n=r.overwrite||r.clobber||false;const{srcStat:o,isChangingCase:s=false}=await u.checkPaths(e,t,"move",r);await u.checkParentPaths(e,o,t,"move");const a=i.dirname(t);const f=i.parse(a);if(f.root!==a){await c(a)}return doRename(e,t,n,s)}async function doRename(e,t,r,i){if(!i){if(r){await s(t)}else if(await a(t)){throw new Error("dest already exists.")}}try{await n.rename(e,t)}catch(n){if(n.code!=="EXDEV"){throw n}await moveAcrossDevice(e,t,r)}}async function moveAcrossDevice(e,t,r){const n={overwrite:r,errorOnExist:true,preserveTimestamps:true};await o(e,t,n);return s(e)}e.exports=move},2074:(e,t,r)=>{"use strict";const n=r(5104).fromPromise;const i=r(6295);const o=r(1017);const s=r(1585);const c=r(6045).pathExists;async function outputFile(e,t,r="utf-8"){const n=o.dirname(e);if(!await c(n)){await s.mkdirs(n)}return i.writeFile(e,t,r)}function outputFileSync(e,...t){const r=o.dirname(e);if(!i.existsSync(r)){s.mkdirsSync(r)}i.writeFileSync(e,...t)}e.exports={outputFile:n(outputFile),outputFileSync:outputFileSync}},6045:(e,t,r)=>{"use strict";const n=r(5104).fromPromise;const i=r(6295);function pathExists(e){return i.access(e).then((()=>true)).catch((()=>false))}e.exports={pathExists:n(pathExists),pathExistsSync:i.existsSync}},8280:(e,t,r)=>{"use strict";const n=r(7719);const i=r(5104).fromCallback;function remove(e,t){n.rm(e,{recursive:true,force:true},t)}function removeSync(e){n.rmSync(e,{recursive:true,force:true})}e.exports={remove:i(remove),removeSync:removeSync}},5920:(e,t,r)=>{"use strict";const n=r(6295);const i=r(1017);const o=r(5104).fromPromise;function getStats(e,t,r){const i=r.dereference?e=>n.stat(e,{bigint:true}):e=>n.lstat(e,{bigint:true});return Promise.all([i(e),i(t).catch((e=>{if(e.code==="ENOENT")return null;throw e}))]).then((([e,t])=>({srcStat:e,destStat:t})))}function getStatsSync(e,t,r){let i;const o=r.dereference?e=>n.statSync(e,{bigint:true}):e=>n.lstatSync(e,{bigint:true});const s=o(e);try{i=o(t)}catch(e){if(e.code==="ENOENT")return{srcStat:s,destStat:null};throw e}return{srcStat:s,destStat:i}}async function checkPaths(e,t,r,n){const{srcStat:o,destStat:s}=await getStats(e,t,n);if(s){if(areIdentical(o,s)){const n=i.basename(e);const c=i.basename(t);if(r==="move"&&n!==c&&n.toLowerCase()===c.toLowerCase()){return{srcStat:o,destStat:s,isChangingCase:true}}throw new Error("Source and destination must not be the same.")}if(o.isDirectory()&&!s.isDirectory()){throw new Error(`Cannot overwrite non-directory '${t}' with directory '${e}'.`)}if(!o.isDirectory()&&s.isDirectory()){throw new Error(`Cannot overwrite directory '${t}' with non-directory '${e}'.`)}}if(o.isDirectory()&&isSrcSubdir(e,t)){throw new Error(errMsg(e,t,r))}return{srcStat:o,destStat:s}}function checkPathsSync(e,t,r,n){const{srcStat:o,destStat:s}=getStatsSync(e,t,n);if(s){if(areIdentical(o,s)){const n=i.basename(e);const c=i.basename(t);if(r==="move"&&n!==c&&n.toLowerCase()===c.toLowerCase()){return{srcStat:o,destStat:s,isChangingCase:true}}throw new Error("Source and destination must not be the same.")}if(o.isDirectory()&&!s.isDirectory()){throw new Error(`Cannot overwrite non-directory '${t}' with directory '${e}'.`)}if(!o.isDirectory()&&s.isDirectory()){throw new Error(`Cannot overwrite directory '${t}' with non-directory '${e}'.`)}}if(o.isDirectory()&&isSrcSubdir(e,t)){throw new Error(errMsg(e,t,r))}return{srcStat:o,destStat:s}}async function checkParentPaths(e,t,r,o){const s=i.resolve(i.dirname(e));const c=i.resolve(i.dirname(r));if(c===s||c===i.parse(c).root)return;let a;try{a=await n.stat(c,{bigint:true})}catch(e){if(e.code==="ENOENT")return;throw e}if(areIdentical(t,a)){throw new Error(errMsg(e,r,o))}return checkParentPaths(e,t,c,o)}function checkParentPathsSync(e,t,r,o){const s=i.resolve(i.dirname(e));const c=i.resolve(i.dirname(r));if(c===s||c===i.parse(c).root)return;let a;try{a=n.statSync(c,{bigint:true})}catch(e){if(e.code==="ENOENT")return;throw e}if(areIdentical(t,a)){throw new Error(errMsg(e,r,o))}return checkParentPathsSync(e,t,c,o)}function areIdentical(e,t){return t.ino&&t.dev&&t.ino===e.ino&&t.dev===e.dev}function isSrcSubdir(e,t){const r=i.resolve(e).split(i.sep).filter((e=>e));const n=i.resolve(t).split(i.sep).filter((e=>e));return r.every(((e,t)=>n[t]===e))}function errMsg(e,t,r){return`Cannot ${r} '${e}' to a subdirectory of itself, '${t}'.`}e.exports={checkPaths:o(checkPaths),checkPathsSync:checkPathsSync,checkParentPaths:o(checkParentPaths),checkParentPathsSync:checkParentPathsSync,isSrcSubdir:isSrcSubdir,areIdentical:areIdentical}},7827:(e,t,r)=>{"use strict";const n=r(6295);const i=r(5104).fromPromise;async function utimesMillis(e,t,r){const i=await n.open(e,"r+");let o=null;try{await n.futimes(i,t,r)}finally{try{await n.close(i)}catch(e){o=e}}if(o){throw o}}function utimesMillisSync(e,t,r){const i=n.openSync(e,"r+");n.futimesSync(i,t,r);return n.closeSync(i)}e.exports={utimesMillis:i(utimesMillis),utimesMillisSync:utimesMillisSync}},6742:e=>{"use strict";e.exports=clone;var t=Object.getPrototypeOf||function(e){return e.__proto__};function clone(e){if(e===null||typeof e!=="object")return e;if(e instanceof Object)var r={__proto__:t(e)};else var r=Object.create(null);Object.getOwnPropertyNames(e).forEach((function(t){Object.defineProperty(r,t,Object.getOwnPropertyDescriptor(e,t))}));return r}},7719:(e,t,r)=>{var n=r(7147);var i=r(9112);var o=r(1010);var s=r(6742);var c=r(3837);var a;var u;if(typeof Symbol==="function"&&typeof Symbol.for==="function"){a=Symbol.for("graceful-fs.queue");u=Symbol.for("graceful-fs.previous")}else{a="___graceful-fs.queue";u="___graceful-fs.previous"}function noop(){}function publishQueue(e,t){Object.defineProperty(e,a,{get:function(){return t}})}var f=noop;if(c.debuglog)f=c.debuglog("gfs4");else if(/\bgfs4\b/i.test(process.env.NODE_DEBUG||""))f=function(){var e=c.format.apply(c,arguments);e="GFS4: "+e.split(/\n/).join("\nGFS4: ");console.error(e)};if(!n[a]){var l=global[a]||[];publishQueue(n,l);n.close=function(e){function close(t,r){return e.call(n,t,(function(e){if(!e){resetQueue()}if(typeof r==="function")r.apply(this,arguments)}))}Object.defineProperty(close,u,{value:e});return close}(n.close);n.closeSync=function(e){function closeSync(t){e.apply(n,arguments);resetQueue()}Object.defineProperty(closeSync,u,{value:e});return closeSync}(n.closeSync);if(/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")){process.on("exit",(function(){f(n[a]);r(9491).equal(n[a].length,0)}))}}if(!global[a]){publishQueue(global,n[a])}e.exports=patch(s(n));if(process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH&&!n.__patched){e.exports=patch(n);n.__patched=true}function patch(e){i(e);e.gracefulify=patch;e.createReadStream=createReadStream;e.createWriteStream=createWriteStream;var t=e.readFile;e.readFile=readFile;function readFile(e,r,n){if(typeof r==="function")n=r,r=null;return go$readFile(e,r,n);function go$readFile(e,r,n,i){return t(e,r,(function(t){if(t&&(t.code==="EMFILE"||t.code==="ENFILE"))enqueue([go$readFile,[e,r,n],t,i||Date.now(),Date.now()]);else{if(typeof n==="function")n.apply(this,arguments)}}))}}var r=e.writeFile;e.writeFile=writeFile;function writeFile(e,t,n,i){if(typeof n==="function")i=n,n=null;return go$writeFile(e,t,n,i);function go$writeFile(e,t,n,i,o){return r(e,t,n,(function(r){if(r&&(r.code==="EMFILE"||r.code==="ENFILE"))enqueue([go$writeFile,[e,t,n,i],r,o||Date.now(),Date.now()]);else{if(typeof i==="function")i.apply(this,arguments)}}))}}var n=e.appendFile;if(n)e.appendFile=appendFile;function appendFile(e,t,r,i){if(typeof r==="function")i=r,r=null;return go$appendFile(e,t,r,i);function go$appendFile(e,t,r,i,o){return n(e,t,r,(function(n){if(n&&(n.code==="EMFILE"||n.code==="ENFILE"))enqueue([go$appendFile,[e,t,r,i],n,o||Date.now(),Date.now()]);else{if(typeof i==="function")i.apply(this,arguments)}}))}}var s=e.copyFile;if(s)e.copyFile=copyFile;function copyFile(e,t,r,n){if(typeof r==="function"){n=r;r=0}return go$copyFile(e,t,r,n);function go$copyFile(e,t,r,n,i){return s(e,t,r,(function(o){if(o&&(o.code==="EMFILE"||o.code==="ENFILE"))enqueue([go$copyFile,[e,t,r,n],o,i||Date.now(),Date.now()]);else{if(typeof n==="function")n.apply(this,arguments)}}))}}var c=e.readdir;e.readdir=readdir;var a=/^v[0-5]\./;function readdir(e,t,r){if(typeof t==="function")r=t,t=null;var n=a.test(process.version)?function go$readdir(e,t,r,n){return c(e,fs$readdirCallback(e,t,r,n))}:function go$readdir(e,t,r,n){return c(e,t,fs$readdirCallback(e,t,r,n))};return n(e,t,r);function fs$readdirCallback(e,t,r,i){return function(o,s){if(o&&(o.code==="EMFILE"||o.code==="ENFILE"))enqueue([n,[e,t,r],o,i||Date.now(),Date.now()]);else{if(s&&s.sort)s.sort();if(typeof r==="function")r.call(this,o,s)}}}}if(process.version.substr(0,4)==="v0.8"){var u=o(e);ReadStream=u.ReadStream;WriteStream=u.WriteStream}var f=e.ReadStream;if(f){ReadStream.prototype=Object.create(f.prototype);ReadStream.prototype.open=ReadStream$open}var l=e.WriteStream;if(l){WriteStream.prototype=Object.create(l.prototype);WriteStream.prototype.open=WriteStream$open}Object.defineProperty(e,"ReadStream",{get:function(){return ReadStream},set:function(e){ReadStream=e},enumerable:true,configurable:true});Object.defineProperty(e,"WriteStream",{get:function(){return WriteStream},set:function(e){WriteStream=e},enumerable:true,configurable:true});var d=ReadStream;Object.defineProperty(e,"FileReadStream",{get:function(){return d},set:function(e){d=e},enumerable:true,configurable:true});var p=WriteStream;Object.defineProperty(e,"FileWriteStream",{get:function(){return p},set:function(e){p=e},enumerable:true,configurable:true});function ReadStream(e,t){if(this instanceof ReadStream)return f.apply(this,arguments),this;else return ReadStream.apply(Object.create(ReadStream.prototype),arguments)}function ReadStream$open(){var e=this;open(e.path,e.flags,e.mode,(function(t,r){if(t){if(e.autoClose)e.destroy();e.emit("error",t)}else{e.fd=r;e.emit("open",r);e.read()}}))}function WriteStream(e,t){if(this instanceof WriteStream)return l.apply(this,arguments),this;else return WriteStream.apply(Object.create(WriteStream.prototype),arguments)}function WriteStream$open(){var e=this;open(e.path,e.flags,e.mode,(function(t,r){if(t){e.destroy();e.emit("error",t)}else{e.fd=r;e.emit("open",r)}}))}function createReadStream(t,r){return new e.ReadStream(t,r)}function createWriteStream(t,r){return new e.WriteStream(t,r)}var y=e.open;e.open=open;function open(e,t,r,n){if(typeof r==="function")n=r,r=null;return go$open(e,t,r,n);function go$open(e,t,r,n,i){return y(e,t,r,(function(o,s){if(o&&(o.code==="EMFILE"||o.code==="ENFILE"))enqueue([go$open,[e,t,r,n],o,i||Date.now(),Date.now()]);else{if(typeof n==="function")n.apply(this,arguments)}}))}}return e}function enqueue(e){f("ENQUEUE",e[0].name,e[1]);n[a].push(e);retry()}var d;function resetQueue(){var e=Date.now();for(var t=0;t2){n[a][t][3]=e;n[a][t][4]=e}}retry()}function retry(){clearTimeout(d);d=undefined;if(n[a].length===0)return;var e=n[a].shift();var t=e[0];var r=e[1];var i=e[2];var o=e[3];var s=e[4];if(o===undefined){f("RETRY",t.name,r);t.apply(null,r)}else if(Date.now()-o>=6e4){f("TIMEOUT",t.name,r);var c=r.pop();if(typeof c==="function")c.call(null,i)}else{var u=Date.now()-s;var l=Math.max(s-o,1);var p=Math.min(l*1.2,100);if(u>=p){f("RETRY",t.name,r);t.apply(null,r.concat([o]))}else{n[a].push(e)}}if(d===undefined){d=setTimeout(retry,0)}}},1010:(e,t,r)=>{var n=r(2781).Stream;e.exports=legacy;function legacy(e){return{ReadStream:ReadStream,WriteStream:WriteStream};function ReadStream(t,r){if(!(this instanceof ReadStream))return new ReadStream(t,r);n.call(this);var i=this;this.path=t;this.fd=null;this.readable=true;this.paused=false;this.flags="r";this.mode=438;this.bufferSize=64*1024;r=r||{};var o=Object.keys(r);for(var s=0,c=o.length;sthis.end){throw new Error("start must be <= end")}this.pos=this.start}if(this.fd!==null){process.nextTick((function(){i._read()}));return}e.open(this.path,this.flags,this.mode,(function(e,t){if(e){i.emit("error",e);i.readable=false;return}i.fd=t;i.emit("open",t);i._read()}))}function WriteStream(t,r){if(!(this instanceof WriteStream))return new WriteStream(t,r);n.call(this);this.path=t;this.fd=null;this.writable=true;this.flags="w";this.encoding="binary";this.mode=438;this.bytesWritten=0;r=r||{};var i=Object.keys(r);for(var o=0,s=i.length;o= zero")}this.pos=this.start}this.busy=false;this._queue=[];if(this.fd===null){this._open=e.open;this._queue.push([this._open,this.path,this.flags,this.mode,undefined]);this.flush()}}}},9112:(e,t,r)=>{var n=r(2057);var i=process.cwd;var o=null;var s=process.env.GRACEFUL_FS_PLATFORM||process.platform;process.cwd=function(){if(!o)o=i.call(process);return o};try{process.cwd()}catch(e){}if(typeof process.chdir==="function"){var c=process.chdir;process.chdir=function(e){o=null;c.call(process,e)};if(Object.setPrototypeOf)Object.setPrototypeOf(process.chdir,c)}e.exports=patch;function patch(e){if(n.hasOwnProperty("O_SYMLINK")&&process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)){patchLchmod(e)}if(!e.lutimes){patchLutimes(e)}e.chown=chownFix(e.chown);e.fchown=chownFix(e.fchown);e.lchown=chownFix(e.lchown);e.chmod=chmodFix(e.chmod);e.fchmod=chmodFix(e.fchmod);e.lchmod=chmodFix(e.lchmod);e.chownSync=chownFixSync(e.chownSync);e.fchownSync=chownFixSync(e.fchownSync);e.lchownSync=chownFixSync(e.lchownSync);e.chmodSync=chmodFixSync(e.chmodSync);e.fchmodSync=chmodFixSync(e.fchmodSync);e.lchmodSync=chmodFixSync(e.lchmodSync);e.stat=statFix(e.stat);e.fstat=statFix(e.fstat);e.lstat=statFix(e.lstat);e.statSync=statFixSync(e.statSync);e.fstatSync=statFixSync(e.fstatSync);e.lstatSync=statFixSync(e.lstatSync);if(e.chmod&&!e.lchmod){e.lchmod=function(e,t,r){if(r)process.nextTick(r)};e.lchmodSync=function(){}}if(e.chown&&!e.lchown){e.lchown=function(e,t,r,n){if(n)process.nextTick(n)};e.lchownSync=function(){}}if(s==="win32"){e.rename=typeof e.rename!=="function"?e.rename:function(t){function rename(r,n,i){var o=Date.now();var s=0;t(r,n,(function CB(c){if(c&&(c.code==="EACCES"||c.code==="EPERM"||c.code==="EBUSY")&&Date.now()-o<6e4){setTimeout((function(){e.stat(n,(function(e,o){if(e&&e.code==="ENOENT")t(r,n,CB);else i(c)}))}),s);if(s<100)s+=10;return}if(i)i(c)}))}if(Object.setPrototypeOf)Object.setPrototypeOf(rename,t);return rename}(e.rename)}e.read=typeof e.read!=="function"?e.read:function(t){function read(r,n,i,o,s,c){var a;if(c&&typeof c==="function"){var u=0;a=function(f,l,d){if(f&&f.code==="EAGAIN"&&u<10){u++;return t.call(e,r,n,i,o,s,a)}c.apply(this,arguments)}}return t.call(e,r,n,i,o,s,a)}if(Object.setPrototypeOf)Object.setPrototypeOf(read,t);return read}(e.read);e.readSync=typeof e.readSync!=="function"?e.readSync:function(t){return function(r,n,i,o,s){var c=0;while(true){try{return t.call(e,r,n,i,o,s)}catch(e){if(e.code==="EAGAIN"&&c<10){c++;continue}throw e}}}}(e.readSync);function patchLchmod(e){e.lchmod=function(t,r,i){e.open(t,n.O_WRONLY|n.O_SYMLINK,r,(function(t,n){if(t){if(i)i(t);return}e.fchmod(n,r,(function(t){e.close(n,(function(e){if(i)i(t||e)}))}))}))};e.lchmodSync=function(t,r){var i=e.openSync(t,n.O_WRONLY|n.O_SYMLINK,r);var o=true;var s;try{s=e.fchmodSync(i,r);o=false}finally{if(o){try{e.closeSync(i)}catch(e){}}else{e.closeSync(i)}}return s}}function patchLutimes(e){if(n.hasOwnProperty("O_SYMLINK")&&e.futimes){e.lutimes=function(t,r,i,o){e.open(t,n.O_SYMLINK,(function(t,n){if(t){if(o)o(t);return}e.futimes(n,r,i,(function(t){e.close(n,(function(e){if(o)o(t||e)}))}))}))};e.lutimesSync=function(t,r,i){var o=e.openSync(t,n.O_SYMLINK);var s;var c=true;try{s=e.futimesSync(o,r,i);c=false}finally{if(c){try{e.closeSync(o)}catch(e){}}else{e.closeSync(o)}}return s}}else if(e.futimes){e.lutimes=function(e,t,r,n){if(n)process.nextTick(n)};e.lutimesSync=function(){}}}function chmodFix(t){if(!t)return t;return function(r,n,i){return t.call(e,r,n,(function(e){if(chownErOk(e))e=null;if(i)i.apply(this,arguments)}))}}function chmodFixSync(t){if(!t)return t;return function(r,n){try{return t.call(e,r,n)}catch(e){if(!chownErOk(e))throw e}}}function chownFix(t){if(!t)return t;return function(r,n,i,o){return t.call(e,r,n,i,(function(e){if(chownErOk(e))e=null;if(o)o.apply(this,arguments)}))}}function chownFixSync(t){if(!t)return t;return function(r,n,i){try{return t.call(e,r,n,i)}catch(e){if(!chownErOk(e))throw e}}}function statFix(t){if(!t)return t;return function(r,n,i){if(typeof n==="function"){i=n;n=null}function callback(e,t){if(t){if(t.uid<0)t.uid+=4294967296;if(t.gid<0)t.gid+=4294967296}if(i)i.apply(this,arguments)}return n?t.call(e,r,n,callback):t.call(e,r,callback)}}function statFixSync(t){if(!t)return t;return function(r,n){var i=n?t.call(e,r,n):t.call(e,r);if(i){if(i.uid<0)i.uid+=4294967296;if(i.gid<0)i.gid+=4294967296}return i}}function chownErOk(e){if(!e)return true;if(e.code==="ENOSYS")return true;var t=!process.getuid||process.getuid()!==0;if(t){if(e.code==="EINVAL"||e.code==="EPERM")return true}return false}}},9508:(e,t,r)=>{var n=r(7147);var i;if(process.platform==="win32"||global.TESTING_WINDOWS){i=r(9075)}else{i=r(1774)}e.exports=isexe;isexe.sync=sync;function isexe(e,t,r){if(typeof t==="function"){r=t;t={}}if(!r){if(typeof Promise!=="function"){throw new TypeError("callback not provided")}return new Promise((function(r,n){isexe(e,t||{},(function(e,t){if(e){n(e)}else{r(t)}}))}))}i(e,t||{},(function(e,n){if(e){if(e.code==="EACCES"||t&&t.ignoreErrors){e=null;n=false}}r(e,n)}))}function sync(e,t){try{return i.sync(e,t||{})}catch(e){if(t&&t.ignoreErrors||e.code==="EACCES"){return false}else{throw e}}}},1774:(e,t,r)=>{e.exports=isexe;isexe.sync=sync;var n=r(7147);function isexe(e,t,r){n.stat(e,(function(e,n){r(e,e?false:checkStat(n,t))}))}function sync(e,t){return checkStat(n.statSync(e),t)}function checkStat(e,t){return e.isFile()&&checkMode(e,t)}function checkMode(e,t){var r=e.mode;var n=e.uid;var i=e.gid;var o=t.uid!==undefined?t.uid:process.getuid&&process.getuid();var s=t.gid!==undefined?t.gid:process.getgid&&process.getgid();var c=parseInt("100",8);var a=parseInt("010",8);var u=parseInt("001",8);var f=c|a;var l=r&u||r&a&&i===s||r&c&&n===o||r&f&&o===0;return l}},9075:(e,t,r)=>{e.exports=isexe;isexe.sync=sync;var n=r(7147);function checkPathExt(e,t){var r=t.pathExt!==undefined?t.pathExt:process.env.PATHEXT;if(!r){return true}r=r.split(";");if(r.indexOf("")!==-1){return true}for(var n=0;n{let n;try{n=r(7719)}catch(e){n=r(7147)}const i=r(5104);const{stringify:o,stripBom:s}=r(3226);async function _readFile(e,t={}){if(typeof t==="string"){t={encoding:t}}const r=t.fs||n;const o="throws"in t?t.throws:true;let c=await i.fromCallback(r.readFile)(e,t);c=s(c);let a;try{a=JSON.parse(c,t?t.reviver:null)}catch(t){if(o){t.message=`${e}: ${t.message}`;throw t}else{return null}}return a}const c=i.fromPromise(_readFile);function readFileSync(e,t={}){if(typeof t==="string"){t={encoding:t}}const r=t.fs||n;const i="throws"in t?t.throws:true;try{let n=r.readFileSync(e,t);n=s(n);return JSON.parse(n,t.reviver)}catch(t){if(i){t.message=`${e}: ${t.message}`;throw t}else{return null}}}async function _writeFile(e,t,r={}){const s=r.fs||n;const c=o(t,r);await i.fromCallback(s.writeFile)(e,c,r)}const a=i.fromPromise(_writeFile);function writeFileSync(e,t,r={}){const i=r.fs||n;const s=o(t,r);return i.writeFileSync(e,s,r)}const u={readFile:c,readFileSync:readFileSync,writeFile:a,writeFileSync:writeFileSync};e.exports=u},3226:e=>{function stringify(e,{EOL:t="\n",finalEOL:r=true,replacer:n=null,spaces:i}={}){const o=r?t:"";const s=JSON.stringify(e,n,i);return s.replace(/\n/g,t)+o}function stripBom(e){if(Buffer.isBuffer(e))e=e.toString("utf8");return e.replace(/^\uFEFF/,"")}e.exports={stringify:stringify,stripBom:stripBom}},5223:e=>{"use strict";const pathKey=(e={})=>{const t=e.env||process.env;const r=e.platform||process.platform;if(r!=="win32"){return"PATH"}return Object.keys(t).reverse().find((e=>e.toUpperCase()==="PATH"))||"Path"};e.exports=pathKey;e.exports["default"]=pathKey},3692:(e,t,r)=>{"use strict";const n=r(431);e.exports=(e="")=>{const t=e.match(n);if(!t){return null}const[r,i]=t[0].replace(/#! ?/,"").split(" ");const o=r.split("/").pop();if(o==="env"){return i}return i?`${o} ${i}`:o}},431:e=>{"use strict";e.exports=/^#!(.*)/},5104:(e,t)=>{"use strict";t.fromCallback=function(e){return Object.defineProperty((function(...t){if(typeof t[t.length-1]==="function")e.apply(this,t);else{return new Promise(((r,n)=>{t.push(((e,t)=>e!=null?n(e):r(t)));e.apply(this,t)}))}}),"name",{value:e.name})};t.fromPromise=function(e){return Object.defineProperty((function(...t){const r=t[t.length-1];if(typeof r!=="function")return e.apply(this,t);else{t.pop();e.apply(this,t).then((e=>r(null,e)),r)}}),"name",{value:e.name})}},749:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});Object.defineProperty(t,"NIL",{enumerable:true,get:function(){return c.default}});Object.defineProperty(t,"parse",{enumerable:true,get:function(){return l.default}});Object.defineProperty(t,"stringify",{enumerable:true,get:function(){return f.default}});Object.defineProperty(t,"v1",{enumerable:true,get:function(){return n.default}});Object.defineProperty(t,"v3",{enumerable:true,get:function(){return i.default}});Object.defineProperty(t,"v4",{enumerable:true,get:function(){return o.default}});Object.defineProperty(t,"v5",{enumerable:true,get:function(){return s.default}});Object.defineProperty(t,"validate",{enumerable:true,get:function(){return u.default}});Object.defineProperty(t,"version",{enumerable:true,get:function(){return a.default}});var n=_interopRequireDefault(r(3376));var i=_interopRequireDefault(r(2223));var o=_interopRequireDefault(r(8e3));var s=_interopRequireDefault(r(1430));var c=_interopRequireDefault(r(1934));var a=_interopRequireDefault(r(2065));var u=_interopRequireDefault(r(7243));var f=_interopRequireDefault(r(8247));var l=_interopRequireDefault(r(6193));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}},3089:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var n=_interopRequireDefault(r(6113));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function md5(e){if(Array.isArray(e)){e=Buffer.from(e)}else if(typeof e==="string"){e=Buffer.from(e,"utf8")}return n.default.createHash("md5").update(e).digest()}var i=md5;t["default"]=i},4577:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var n=_interopRequireDefault(r(6113));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}var i={randomUUID:n.default.randomUUID};t["default"]=i},1934:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var r="00000000-0000-0000-0000-000000000000";t["default"]=r},6193:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var n=_interopRequireDefault(r(7243));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function parse(e){if(!(0,n.default)(e)){throw TypeError("Invalid UUID")}let t;const r=new Uint8Array(16);r[0]=(t=parseInt(e.slice(0,8),16))>>>24;r[1]=t>>>16&255;r[2]=t>>>8&255;r[3]=t&255;r[4]=(t=parseInt(e.slice(9,13),16))>>>8;r[5]=t&255;r[6]=(t=parseInt(e.slice(14,18),16))>>>8;r[7]=t&255;r[8]=(t=parseInt(e.slice(19,23),16))>>>8;r[9]=t&255;r[10]=(t=parseInt(e.slice(24,36),16))/1099511627776&255;r[11]=t/4294967296&255;r[12]=t>>>24&255;r[13]=t>>>16&255;r[14]=t>>>8&255;r[15]=t&255;return r}var i=parse;t["default"]=i},9848:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var r=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;t["default"]=r},1823:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=rng;var n=_interopRequireDefault(r(6113));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const i=new Uint8Array(256);let o=i.length;function rng(){if(o>i.length-16){n.default.randomFillSync(i);o=0}return i.slice(o,o+=16)}},5510:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var n=_interopRequireDefault(r(6113));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function sha1(e){if(Array.isArray(e)){e=Buffer.from(e)}else if(typeof e==="string"){e=Buffer.from(e,"utf8")}return n.default.createHash("sha1").update(e).digest()}var i=sha1;t["default"]=i},8247:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;t.unsafeStringify=unsafeStringify;var n=_interopRequireDefault(r(7243));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const i=[];for(let e=0;e<256;++e){i.push((e+256).toString(16).slice(1))}function unsafeStringify(e,t=0){return i[e[t+0]]+i[e[t+1]]+i[e[t+2]]+i[e[t+3]]+"-"+i[e[t+4]]+i[e[t+5]]+"-"+i[e[t+6]]+i[e[t+7]]+"-"+i[e[t+8]]+i[e[t+9]]+"-"+i[e[t+10]]+i[e[t+11]]+i[e[t+12]]+i[e[t+13]]+i[e[t+14]]+i[e[t+15]]}function stringify(e,t=0){const r=unsafeStringify(e,t);if(!(0,n.default)(r)){throw TypeError("Stringified UUID is invalid")}return r}var o=stringify;t["default"]=o},3376:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var n=_interopRequireDefault(r(1823));var i=r(8247);function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}let o;let s;let c=0;let a=0;function v1(e,t,r){let u=t&&r||0;const f=t||new Array(16);e=e||{};let l=e.node||o;let d=e.clockseq!==undefined?e.clockseq:s;if(l==null||d==null){const t=e.random||(e.rng||n.default)();if(l==null){l=o=[t[0]|1,t[1],t[2],t[3],t[4],t[5]]}if(d==null){d=s=(t[6]<<8|t[7])&16383}}let p=e.msecs!==undefined?e.msecs:Date.now();let y=e.nsecs!==undefined?e.nsecs:a+1;const m=p-c+(y-a)/1e4;if(m<0&&e.clockseq===undefined){d=d+1&16383}if((m<0||p>c)&&e.nsecs===undefined){y=0}if(y>=1e4){throw new Error("uuid.v1(): Can't create more than 10M uuids/sec")}c=p;a=y;s=d;p+=122192928e5;const h=((p&268435455)*1e4+y)%4294967296;f[u++]=h>>>24&255;f[u++]=h>>>16&255;f[u++]=h>>>8&255;f[u++]=h&255;const S=p/4294967296*1e4&268435455;f[u++]=S>>>8&255;f[u++]=S&255;f[u++]=S>>>24&15|16;f[u++]=S>>>16&255;f[u++]=d>>>8|128;f[u++]=d&255;for(let e=0;e<6;++e){f[u+e]=l[e]}return t||(0,i.unsafeStringify)(f)}var u=v1;t["default"]=u},2223:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var n=_interopRequireDefault(r(7955));var i=_interopRequireDefault(r(3089));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const o=(0,n.default)("v3",48,i.default);var s=o;t["default"]=s},7955:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.URL=t.DNS=void 0;t["default"]=v35;var n=r(8247);var i=_interopRequireDefault(r(6193));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function stringToBytes(e){e=unescape(encodeURIComponent(e));const t=[];for(let r=0;r{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var n=_interopRequireDefault(r(4577));var i=_interopRequireDefault(r(1823));var o=r(8247);function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function v4(e,t,r){if(n.default.randomUUID&&!t&&!e){return n.default.randomUUID()}e=e||{};const s=e.random||(e.rng||i.default)();s[6]=s[6]&15|64;s[8]=s[8]&63|128;if(t){r=r||0;for(let e=0;e<16;++e){t[r+e]=s[e]}return t}return(0,o.unsafeStringify)(s)}var s=v4;t["default"]=s},1430:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var n=_interopRequireDefault(r(7955));var i=_interopRequireDefault(r(5510));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const o=(0,n.default)("v5",80,i.default);var s=o;t["default"]=s},7243:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var n=_interopRequireDefault(r(9848));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function validate(e){return typeof e==="string"&&n.default.test(e)}var i=validate;t["default"]=i},2065:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var n=_interopRequireDefault(r(7243));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function version(e){if(!(0,n.default)(e)){throw TypeError("Invalid UUID")}return parseInt(e.slice(14,15),16)}var i=version;t["default"]=i},2643:(e,t,r)=>{const n=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys";const i=r(1017);const o=n?";":":";const s=r(9508);const getNotFoundError=e=>Object.assign(new Error(`not found: ${e}`),{code:"ENOENT"});const getPathInfo=(e,t)=>{const r=t.colon||o;const i=e.match(/\//)||n&&e.match(/\\/)?[""]:[...n?[process.cwd()]:[],...(t.path||process.env.PATH||"").split(r)];const s=n?t.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"";const c=n?s.split(r):[""];if(n){if(e.indexOf(".")!==-1&&c[0]!=="")c.unshift("")}return{pathEnv:i,pathExt:c,pathExtExe:s}};const which=(e,t,r)=>{if(typeof t==="function"){r=t;t={}}if(!t)t={};const{pathEnv:n,pathExt:o,pathExtExe:c}=getPathInfo(e,t);const a=[];const step=r=>new Promise(((o,s)=>{if(r===n.length)return t.all&&a.length?o(a):s(getNotFoundError(e));const c=n[r];const u=/^".*"$/.test(c)?c.slice(1,-1):c;const f=i.join(u,e);const l=!u&&/^\.[\\\/]/.test(e)?e.slice(0,2)+f:f;o(subStep(l,r,0))}));const subStep=(e,r,n)=>new Promise(((i,u)=>{if(n===o.length)return i(step(r+1));const f=o[n];s(e+f,{pathExt:c},((o,s)=>{if(!o&&s){if(t.all)a.push(e+f);else return i(e+f)}return i(subStep(e,r,n+1))}))}));return r?step(0).then((e=>r(null,e)),r):step(0)};const whichSync=(e,t)=>{t=t||{};const{pathEnv:r,pathExt:n,pathExtExe:o}=getPathInfo(e,t);const c=[];for(let a=0;a{"use strict";e.exports=require("assert")},2081:e=>{"use strict";e.exports=require("child_process")},2057:e=>{"use strict";e.exports=require("constants")},6113:e=>{"use strict";e.exports=require("crypto")},7147:e=>{"use strict";e.exports=require("fs")},1017:e=>{"use strict";e.exports=require("path")},2781:e=>{"use strict";e.exports=require("stream")},3837:e=>{"use strict";e.exports=require("util")}};var t={};function __nccwpck_require__(r){var n=t[r];if(n!==undefined){return n.exports}var i=t[r]={exports:{}};var o=true;try{e[r].call(i.exports,i,i.exports,__nccwpck_require__);o=false}finally{if(o)delete t[r]}return i.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var r=__nccwpck_require__(6791);module.exports=r})(); \ No newline at end of file diff --git a/apps/menu-bar/.eas/build/configureMacOSCredentials/eas.json b/apps/menu-bar/.eas/build/configureMacOSCredentials/eas.json new file mode 100644 index 00000000..05ee6fda --- /dev/null +++ b/apps/menu-bar/.eas/build/configureMacOSCredentials/eas.json @@ -0,0 +1,18 @@ +{ + "cli": { + "version": ">= 5.4.0" + }, + "build": { + "development": { + "developmentClient": true, + "distribution": "internal" + }, + "preview": { + "distribution": "internal" + }, + "production": {} + }, + "submit": { + "production": {} + } +} diff --git a/apps/menu-bar/.eas/build/configureMacOSCredentials/package.json b/apps/menu-bar/.eas/build/configureMacOSCredentials/package.json new file mode 100644 index 00000000..f5754db0 --- /dev/null +++ b/apps/menu-bar/.eas/build/configureMacOSCredentials/package.json @@ -0,0 +1,18 @@ +{ + "name": "configure-macos-credentials", + "version": "1.0.0", + "description": "", + "main": "./build/index.js", + "type": "commonjs", + "scripts": { + "build": "ncc build ./src/index.ts -o build/ --minify --no-cache --no-source-map-register", + "watch": "ncc build ./src/index.ts -o build/ --minify --no-cache --no-source-map-register --watch" + }, + "keywords": [], + "author": "", + "devDependencies": { + "@types/node": "^18.11.18", + "typescript": "^5.1.6", + "@expo/steps": "^1.0.34" + } +} diff --git a/apps/menu-bar/.eas/build/configureMacOSCredentials/src/index.ts b/apps/menu-bar/.eas/build/configureMacOSCredentials/src/index.ts new file mode 100644 index 00000000..4e3843a8 --- /dev/null +++ b/apps/menu-bar/.eas/build/configureMacOSCredentials/src/index.ts @@ -0,0 +1,111 @@ +import path from 'path'; +import fs from 'fs-extra'; +import { v4 as uuid } from 'uuid'; +import { BuildStepInput, BuildStepInputValueTypeName } from '@expo/steps'; +import spawnAsync from '@expo/spawn-async'; + +import { BuildStepContext } from '@expo/steps'; + +interface FunctionInputs { + buildCredentials: BuildStepInput; +} + +const KEYCHAIN_NAME = 'orbit-keychain'; +const KEYCHAIN_PASSWORD = 'orbit-keychain-password'; + +async function configureMacOSCredentials( + ctx: BuildStepContext, + { + inputs, + }: { + inputs: FunctionInputs; + } +): Promise { + try { + // Download Apple Developer ID intermediate certificate + await spawnAsync('curl', [ + 'https://www.apple.com/certificateauthority/DeveloperIDG2CA.cer', + '-o', + 'DeveloperIDG2CA.cer', + ]); + + // Allow `security add-trusted-cert` command to run without password prompt + await spawnAsync('sudo', [ + 'security', + 'authorizationdb', + 'write', + 'com.apple.trust-settings.admin', + 'allow', + ]); + + // Add DeveloperIDG2CA certificate to System keychain + await spawnAsync('sudo', [ + 'security', + 'add-trusted-cert', + '-d', + '-k', + '/Library/Keychains/System.keychain', + '-r', + 'trustRoot', + 'DeveloperIDG2CA.cer', + ]); + + // Read distribution certificate from build credentials and write it to a file + const rawCredentialsInput = inputs.buildCredentials.value as Record; + const target = Object.keys(rawCredentialsInput)[0]; + const certificate = rawCredentialsInput[target].distributionCertificate; + const distCertPath = path.join(ctx.workingDirectory, `${uuid()}.p12`); + ctx.logger.info(`Writing distribution certificate to ${distCertPath}`); + await fs.writeFile(distCertPath, Buffer.from(certificate.dataBase64, 'base64')); + + // Create a new keychain + await spawnAsync('security', ['create-keychain', '-p', KEYCHAIN_PASSWORD, KEYCHAIN_NAME]); + + // Add new keychain to search list + const keychainsListResult = await spawnAsync('security', ['list-keychains']); + await spawnAsync('security', [ + 'list-keychains', + '-s', + KEYCHAIN_NAME, + ...keychainsListResult.output, + ]); + + // Import the distribution certificate into the new keychain + await spawnAsync('security', [ + 'import', + distCertPath, + '-P', + certificate.password, + '-k', + KEYCHAIN_NAME, + '-T', + '/usr/bin/codesign', + ]); + + // Set a partition list to avoid interactive prompts + await spawnAsync('security', [ + 'set-key-partition-list', + '-S', + 'apple-tool:,apple:', + '-s', + '-k', + KEYCHAIN_PASSWORD, + KEYCHAIN_NAME, + ]); + + // List all available identities + let result = await spawnAsync('security', ['find-identity']); + ctx.logger.info(`Identities: ${result.output}`); + + // Unlock the keychain so we don't get prompted for the password + await spawnAsync('security', ['unlock-keychain', '-p', KEYCHAIN_PASSWORD, KEYCHAIN_NAME]); + + // Set the keychain timeout to infinity + await spawnAsync('security', ['set-keychain-settings', KEYCHAIN_NAME]); + } catch (error) { + ctx.logger.error(`ERROR: ${error}`); + throw error; + } +} + +export default configureMacOSCredentials; diff --git a/apps/menu-bar/.eas/build/configureMacOSCredentials/tsconfig.json b/apps/menu-bar/.eas/build/configureMacOSCredentials/tsconfig.json new file mode 100644 index 00000000..8d9ff717 --- /dev/null +++ b/apps/menu-bar/.eas/build/configureMacOSCredentials/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "commonjs", + "sourceMap": true, + "inlineSources": true, + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "esModuleInterop": true, + "skipLibCheck": true, + "noEmit": false, + "forceConsistentCasingInFileNames": true, + "outDir": "build", + "resolveJsonModule": true, + "allowSyntheticDefaultImports": true, + "moduleResolution": "node", + "rootDir": "src", + "declaration": false, + "composite": false + }, + "include": ["src/**/*.ts"], + "exclude": ["**/__mocks__/*", "**/__tests__/*"] +} diff --git a/apps/menu-bar/.eas/build/configureMacOSCredentials/yarn.lock b/apps/menu-bar/.eas/build/configureMacOSCredentials/yarn.lock new file mode 100644 index 00000000..f96226e3 --- /dev/null +++ b/apps/menu-bar/.eas/build/configureMacOSCredentials/yarn.lock @@ -0,0 +1,332 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@expo/logger@1.0.52": + version "1.0.52" + resolved "https://registry.yarnpkg.com/@expo/logger/-/logger-1.0.52.tgz#758a23fbb70afe8213be93f57962331fc38670d5" + integrity sha512-lt8ZHc7c3kIK5zMLA8C8k4ojj80hF3YWvTEmLs6cmGFfbrFiA4c6kDuMuJlw4RkO1OvLouqQEENNfbZPNcciXg== + dependencies: + "@types/bunyan" "^1.8.8" + bunyan "^1.8.15" + +"@expo/spawn-async@^1.7.2": + version "1.7.2" + resolved "https://registry.yarnpkg.com/@expo/spawn-async/-/spawn-async-1.7.2.tgz#fcfe66c3e387245e72154b1a7eae8cada6a47f58" + integrity sha512-QdWi16+CHB9JYP7gma19OVVg0BFkvU8zNj9GjWorYI8Iv8FUxjOCcYRuAmX4s/h91e4e7BPsskc8cSrZYho9Ew== + dependencies: + cross-spawn "^7.0.3" + +"@expo/steps@^1.0.34": + version "1.0.55" + resolved "https://registry.yarnpkg.com/@expo/steps/-/steps-1.0.55.tgz#0b30940f801c118d6dcdf3a405f024c8927ca375" + integrity sha512-PS/GNqF2JPzje0vIhNjwWq66BFMuAa2EQo+8ZiBDEnc8JW27ktNLnRqLITCcVOlAgJUwUhM42ffZLh0WWssLFw== + dependencies: + "@expo/logger" "1.0.52" + "@expo/spawn-async" "^1.7.2" + arg "^5.0.2" + fs-extra "^11.1.1" + joi "^17.9.2" + lodash.clonedeep "^4.5.0" + lodash.get "^4.4.2" + this-file "^2.0.3" + uuid "^9.0.0" + yaml "^2.3.1" + +"@hapi/hoek@^9.0.0": + version "9.3.0" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" + integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== + +"@hapi/topo@^5.0.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" + integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@sideway/address@^4.1.3": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" + integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@sideway/formula@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f" + integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== + +"@sideway/pinpoint@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" + integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== + +"@types/bunyan@^1.8.8": + version "1.8.11" + resolved "https://registry.yarnpkg.com/@types/bunyan/-/bunyan-1.8.11.tgz#0b9e7578a5aa2390faf12a460827154902299638" + integrity sha512-758fRH7umIMk5qt5ELmRMff4mLDlN+xyYzC+dkPTdKwbSkJFvz6xwyScrytPU0QIBbRRwbiE8/BIg8bpajerNQ== + dependencies: + "@types/node" "*" + +"@types/node@*": + version "20.10.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.4.tgz#b246fd84d55d5b1b71bf51f964bd514409347198" + integrity sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg== + dependencies: + undici-types "~5.26.4" + +"@types/node@^18.11.18": + version "18.19.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.3.tgz#e4723c4cb385641d61b983f6fe0b716abd5f8fc0" + integrity sha512-k5fggr14DwAytoA/t8rPrIz++lXK7/DqckthCmoZOKNsEbJkId4Z//BqgApXBUGrGddrigYa1oqheo/7YmW4rg== + dependencies: + undici-types "~5.26.4" + +arg@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" + integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +bunyan@^1.8.15: + version "1.8.15" + resolved "https://registry.yarnpkg.com/bunyan/-/bunyan-1.8.15.tgz#8ce34ca908a17d0776576ca1b2f6cbd916e93b46" + integrity sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig== + optionalDependencies: + dtrace-provider "~0.8" + moment "^2.19.3" + mv "~2" + safe-json-stringify "~1" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +dtrace-provider@~0.8: + version "0.8.8" + resolved "https://registry.yarnpkg.com/dtrace-provider/-/dtrace-provider-0.8.8.tgz#2996d5490c37e1347be263b423ed7b297fb0d97e" + integrity sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg== + dependencies: + nan "^2.14.0" + +fs-extra@^11.1.1: + version "11.2.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" + integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +glob@^6.0.1: + version "6.0.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" + integrity sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A== + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +joi@^17.9.2: + version "17.11.0" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.11.0.tgz#aa9da753578ec7720e6f0ca2c7046996ed04fc1a" + integrity sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ== + dependencies: + "@hapi/hoek" "^9.0.0" + "@hapi/topo" "^5.0.0" + "@sideway/address" "^4.1.3" + "@sideway/formula" "^3.0.1" + "@sideway/pinpoint" "^2.0.0" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== + +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== + +"minimatch@2 || 3": + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +mkdirp@~0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +moment@^2.19.3: + version "2.29.4" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" + integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== + +mv@~2: + version "2.1.1" + resolved "https://registry.yarnpkg.com/mv/-/mv-2.1.1.tgz#ae6ce0d6f6d5e0a4f7d893798d03c1ea9559b6a2" + integrity sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg== + dependencies: + mkdirp "~0.5.1" + ncp "~2.0.0" + rimraf "~2.4.0" + +nan@^2.14.0: + version "2.18.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.18.0.tgz#26a6faae7ffbeb293a39660e88a76b82e30b7554" + integrity sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w== + +ncp@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ncp/-/ncp-2.0.0.tgz#195a21d6c46e361d2fb1281ba38b91e9df7bdbb3" + integrity sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA== + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +rimraf@~2.4.0: + version "2.4.5" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.4.5.tgz#ee710ce5d93a8fdb856fb5ea8ff0e2d75934b2da" + integrity sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ== + dependencies: + glob "^6.0.1" + +safe-json-stringify@~1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz#356e44bc98f1f93ce45df14bcd7c01cda86e0afd" + integrity sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +this-file@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/this-file/-/this-file-2.0.3.tgz#13bd2bcfbab2ce86a37a15689df1d14861032b1b" + integrity sha512-IdMH1bUkVJdJjM7o8v83Mv4QvVPdkAofur20STl2Bbw9uMuuS/bT/PZURkEdZsy9XC/1ZXWgZ1wIL9nvouGaEg== + +typescript@^5.1.6: + version "5.3.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" + integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== + +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +uuid@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +yaml@^2.3.1: + version "2.3.4" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2" + integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA== diff --git a/apps/menu-bar/.gitignore b/apps/menu-bar/.gitignore index 90d2c9b1..6f939a97 100644 --- a/apps/menu-bar/.gitignore +++ b/apps/menu-bar/.gitignore @@ -4,7 +4,8 @@ # Xcode # -build/ +./build/ +macos/build/ *.pbxuser !default.pbxuser *.mode1v3 @@ -25,7 +26,6 @@ macos/.xcode.env.local # Android/IntelliJ # -build/ .idea .gradle local.properties @@ -62,3 +62,5 @@ yarn-error.log # Temporary files created by Metro to check the health of the file watcher .metro-health-check* + +!.eas/build/ diff --git a/apps/menu-bar/app.json b/apps/menu-bar/app.json index e0dbe0ea..aa9b4202 100644 --- a/apps/menu-bar/app.json +++ b/apps/menu-bar/app.json @@ -1,4 +1,17 @@ { "name": "ExpoMenuBar", - "displayName": "ExpoMenuBar" -} \ No newline at end of file + "expo": { + "name": "Orbit", + "slug": "orbit", + "description": "Accelerate your development workflow with one-click build launches and simulator management", + "owner": "expo", + "extra": { + "eas": { + "projectId": "6f773599-3109-410f-97c0-fd197cf47995" + } + }, + "ios": { + "bundleIdentifier": "dev.expo.orbit" + } + } +} diff --git a/apps/menu-bar/eas.json b/apps/menu-bar/eas.json new file mode 100644 index 00000000..0503498e --- /dev/null +++ b/apps/menu-bar/eas.json @@ -0,0 +1,27 @@ +{ + "cli": { + "version": ">= 3.18.3", + "promptToConfigurePushNotifications": false + }, + "build": { + "preview": { + "config": "build-preview.yml", + "credentialsSource": "remote", + "ios": { + "image": "latest", + "applicationArchivePath": "build/Release/*.app" + } + }, + "production": { + "config": "build-release.yml", + "credentialsSource": "remote", + "ios": { + "image": "latest", + "applicationArchivePath": "build/Notarized/*.app" + } + } + }, + "submit": { + "production": {} + } +} diff --git a/apps/menu-bar/ios/ExpoMenuBar.xcodeproj b/apps/menu-bar/ios/ExpoMenuBar.xcodeproj new file mode 120000 index 00000000..db7adcab --- /dev/null +++ b/apps/menu-bar/ios/ExpoMenuBar.xcodeproj @@ -0,0 +1 @@ +/Users/gabriel/Workspace/expo/ExpoMenuBar/apps/menu-bar/macos/ExpoMenuBar.xcodeproj \ No newline at end of file diff --git a/apps/menu-bar/macos/ExportLocalOptions.plist b/apps/menu-bar/macos/ExportLocalOptions.plist new file mode 100644 index 00000000..01376392 --- /dev/null +++ b/apps/menu-bar/macos/ExportLocalOptions.plist @@ -0,0 +1,14 @@ + + + + + destination + export + method + developer-id + signingCertificate + Developer ID Application + teamID + C8D8QTF339 + + diff --git a/apps/menu-bar/macos/ExportUploadOptions.plist b/apps/menu-bar/macos/ExportUploadOptions.plist new file mode 100644 index 00000000..2bfe2c9c --- /dev/null +++ b/apps/menu-bar/macos/ExportUploadOptions.plist @@ -0,0 +1,14 @@ + + + + + destination + upload + method + developer-id + signingCertificate + Developer ID Application + teamID + C8D8QTF339 + + diff --git a/apps/menu-bar/package.json b/apps/menu-bar/package.json index 8fdf7aa9..7be14899 100644 --- a/apps/menu-bar/package.json +++ b/apps/menu-bar/package.json @@ -3,6 +3,11 @@ "version": "1.0.1", "private": true, "scripts": { + "archive": "yarn update-cli && xcodebuild archive -workspace macos/ExpoMenuBar.xcworkspace -scheme ExpoMenuBar-macOS -destination 'generic/platform=macOS,name=Any Mac' -archivePath build/ExpoOrbit.xcarchive", + "export-archive": "xcodebuild -exportArchive -archivePath build/ExpoOrbit.xcarchive -exportPath build/Release", + "export-upload-archive": "yarn export-archive -exportOptionsPlist macos/ExportUploadOptions.plist", + "export-local-archive": "yarn export-archive -exportOptionsPlist macos/ExportLocalOptions.plist", + "notarize": "xcodebuild -exportNotarizedApp -archivePath build/ExpoOrbit.xcarchive -exportPath build/Notarized", "lint": "eslint .", "macos": "react-native run-macos", "start": "react-native start", diff --git a/eas.json b/eas.json new file mode 100644 index 00000000..05ee6fda --- /dev/null +++ b/eas.json @@ -0,0 +1,18 @@ +{ + "cli": { + "version": ">= 5.4.0" + }, + "build": { + "development": { + "developmentClient": true, + "distribution": "internal" + }, + "preview": { + "distribution": "internal" + }, + "production": {} + }, + "submit": { + "production": {} + } +}