@stacksjs/browser-extension 0.70.260 → 0.70.262
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/safari.d.ts +27 -0
- package/dist/safari.js +2 -2
- package/package.json +1 -1
package/dist/safari.d.ts
CHANGED
|
@@ -49,6 +49,33 @@ export declare function buildSafariUniversalApp(config: ExtensionConfig, options
|
|
|
49
49
|
export declare function buildSafariApp(config: ExtensionConfig, options?: SafariAppBuildOptions): Promise<{ appPath?: string, resources: string }>;
|
|
50
50
|
/** Resolve and validate App Store Connect credentials from options or environment variables. */
|
|
51
51
|
export declare function resolveAppStoreConnectAuth(options: AppStoreConnectAuth): Required<AppStoreConnectAuth>;
|
|
52
|
+
/**
|
|
53
|
+
* Signing settings for the *archive* step. The export below is what signs for
|
|
54
|
+
* real, through App Store Connect with the API key, so neither platform needs a
|
|
55
|
+
* developer identity here — but "needs no identity" is not the same as "skip
|
|
56
|
+
* signing", and the difference cost us every macOS upload for two days.
|
|
57
|
+
*
|
|
58
|
+
* iOS archives with signing off outright: a development-signed device archive
|
|
59
|
+
* needs a registered UDID, and iOS has no entitlement that the export cannot
|
|
60
|
+
* supply for itself.
|
|
61
|
+
*
|
|
62
|
+
* macOS ad-hoc signs instead. Turning signing off entirely (which is what this
|
|
63
|
+
* used to do) also skips entitlement processing, so the archived app and appex
|
|
64
|
+
* carried no `com.apple.security.app-sandbox`; `-exportArchive` re-signs from
|
|
65
|
+
* whatever the archive holds, so it had none to preserve, and App Store Connect
|
|
66
|
+
* rejected every macOS build with "App sandbox not enabled". The `-` identity
|
|
67
|
+
* is local and costs nothing — entitlements get embedded, no certificate is
|
|
68
|
+
* requested from Apple, and the export re-signs over the top.
|
|
69
|
+
*
|
|
70
|
+
* Not signing at all was itself a fix, for a real problem: `xcodeAuthArgs`
|
|
71
|
+
* passes `-allowProvisioningUpdates` with an API key, so on a CI runner whose
|
|
72
|
+
* keychain starts empty every run, Xcode asked Apple for a *new* Mac
|
|
73
|
+
* Development certificate, used it once, and threw the machine away. Enough
|
|
74
|
+
* releases and the team hits Apple's certificate cap. Ad-hoc signing keeps that
|
|
75
|
+
* fixed: `Manual` style with an explicit empty profile is what stops Xcode
|
|
76
|
+
* reaching for a certificate, so all three settings have to travel together.
|
|
77
|
+
*/
|
|
78
|
+
export declare function archiveSigningArgs(platform: SafariPlatform): string[];
|
|
52
79
|
/**
|
|
53
80
|
* Create a signed Release archive and either validate it or upload it to App
|
|
54
81
|
* Store Connect. Xcode owns certificate/profile creation and the upload so the
|
package/dist/safari.js
CHANGED
|
@@ -25,7 +25,7 @@ import{cpSync,existsSync,readdirSync,statSync}from"node:fs";import{mkdir,rm}from
|
|
|
25
25
|
`),outputs=synced.map((rel)=>`$(TARGET_BUILD_DIR)/$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/${rel}`).join(`
|
|
26
26
|
`);await Bun.write(join(projectDir,`${appName} Extension`,"Resources.inputs.xcfilelist"),`${inputs}
|
|
27
27
|
`);await Bun.write(join(projectDir,`${appName} Extension`,"Resources.outputs.xcfilelist"),`${outputs}
|
|
28
|
-
`);return{resources,files:synced.length}}export async function createSafariUniversalProject(config,options={}){const cwd=options.cwd??process.cwd();if(options.build!==!1){if(!options.version)throw Error("[browser-extension] createSafariUniversalProject needs a version to build the extension");await buildExtension(config,{target:"safari",version:options.version,cwd})}const outdir=resolve(cwd,options.outdir??resolveOutdir(config,"safari"));if(!existsSync(join(outdir,"manifest.json")))throw Error(`[browser-extension] ${outdir}/manifest.json is missing. Run extension:build --target safari first.`);const appName=safariAppName(config),bundleId=config.safariBundleId;if(!bundleId)throw Error("[browser-extension] universal Safari packaging needs safariBundleId in config/extension.ts");const platforms=resolveSafariPlatforms(config,options.platforms);if(!platforms.length)throw Error("[browser-extension] universal Safari packaging needs at least one platform");const buildDir=join(safariProjectDir(cwd,options.dir),"build"),resources=join(buildDir,"universal-resources"),projectLocation=join(buildDir,"universal-project");await mirrorSafariResources(config,outdir,resources);await rm(projectLocation,{recursive:!0,force:!0});await mkdir(projectLocation,{recursive:!0});const args=safariPackagerArgs(resources,projectLocation,appName,bundleId,platforms),exitCode=await Bun.spawn(["xcrun",...args],{cwd,stdout:"inherit",stderr:"inherit"}).exited;if(exitCode!==0)throw Error(`[browser-extension] Safari web extension packager failed (${exitCode})`);const dir=join(projectLocation,appName),project=join(dir,`${appName}.xcodeproj`);if(!existsSync(project))throw Error(`[browser-extension] Safari packager did not create ${project}`);return{dir,project,resources,platforms}}export async function buildSafariUniversalApp(config,options={}){const generated=await createSafariUniversalProject(config,options),appPaths={};if(options.skipXcodebuild)return{...generated,appPaths};const appName=safariAppName(config),configuration=options.release?"Release":"Debug",derivedData=join(safariProjectDir(options.cwd??process.cwd(),options.dir),"build","universal-derived");await rm(derivedData,{recursive:!0,force:!0});for(const platform of generated.platforms){const ios=platform==="ios",args=["xcodebuild","-project",generated.project,"-scheme",`${appName} (${ios?"iOS":"macOS"})`,"-configuration",configuration,"-destination",ios?"generic/platform=iOS Simulator":"generic/platform=macOS","-derivedDataPath",derivedData,...ios?["-sdk","iphonesimulator","CODE_SIGNING_ALLOWED=NO"]:options.signed?["-allowProvisioningUpdates"]:["CODE_SIGNING_ALLOWED=NO"],"build"],exitCode=await Bun.spawn(args,{cwd:generated.dir,stdout:"inherit",stderr:"inherit"}).exited;if(exitCode!==0)throw Error(`[browser-extension] Safari ${platform} app build failed (${exitCode})`);const products=ios?`${configuration}-iphonesimulator`:configuration;appPaths[platform]=join(derivedData,"Build","Products",products,`${appName}.app`)}return{...generated,appPaths}}export async function buildSafariApp(config,options={}){const cwd=options.cwd??process.cwd();if(options.build!==!1){if(!options.version)throw Error("[browser-extension] buildSafariApp needs a version to build the extension");await buildExtension(config,{target:"safari",version:options.version,cwd})}const{resources}=await syncSafariResources(config,options);if(options.skipXcodebuild)return{resources};const appName=safariAppName(config),dir=safariProjectDir(cwd,options.dir),configuration=options.release?"Release":"Debug",derivedData=join(dir,"build"),developerDir=(process.env.DEVELOPER_DIR??(await Bun.$`xcode-select -p`.text()).trim()).replace(/\/$/,"");if(!developerDir.includes(".app/Contents/Developer")){console.error(`[browser-extension] full Xcode is required to build the app (active developer directory: ${developerDir}).`);console.error("Install Xcode, then: sudo xcode-select -s /Applications/Xcode.app/Contents/Developer");console.error("or point DEVELOPER_DIR at any Xcode toolchain (betas included) for this shell.");console.error(`The extension payload is built and synced at ${resources}`);return{resources}}const signing=options.signed?["-allowProvisioningUpdates"]:["CODE_SIGNING_ALLOWED=NO"];await Bun.$`xcodebuild -project ${join(dir,`${appName}.xcodeproj`)} -scheme ${appName} -configuration ${configuration} -derivedDataPath ${derivedData} ${signing} build`;return{appPath:join(derivedData,"Build","Products",configuration,`${appName}.app`),resources}}export function resolveAppStoreConnectAuth(options){const keyId=options.keyId??process.env.APP_STORE_CONNECT_API_KEY_ID,issuerId=options.issuerId??process.env.APP_STORE_CONNECT_API_ISSUER_ID,keyPath=options.keyPath??process.env.APP_STORE_CONNECT_API_KEY_PATH,missing=[!keyId&&"APP_STORE_CONNECT_API_KEY_ID",!issuerId&&"APP_STORE_CONNECT_API_ISSUER_ID",!keyPath&&"APP_STORE_CONNECT_API_KEY_PATH"].filter(Boolean);if(missing.length)throw Error(`[browser-extension] missing App Store Connect credentials: ${missing.join(", ")}`);if(!existsSync(resolve(keyPath)))throw Error(`[browser-extension] App Store Connect API key not found: ${resolve(keyPath)}`);return{keyId,issuerId,keyPath:resolve(keyPath)}}function xcodeAuthArgs(auth){return["-allowProvisioningUpdates","-authenticationKeyPath",auth.keyPath,"-authenticationKeyID",auth.keyId,"-authenticationKeyIssuerID",auth.issuerId]}async function runXcodebuild(args,cwd,operation){const exitCode=await Bun.spawn(["xcodebuild",...args],{cwd,stdout:"inherit",stderr:"inherit"}).exited;if(exitCode!==0)throw Error(`[browser-extension] ${operation} failed (${exitCode})`)}function exportOptionsPlist(method,teamId){return`<?xml version="1.0" encoding="UTF-8"?>
|
|
28
|
+
`);return{resources,files:synced.length}}export async function createSafariUniversalProject(config,options={}){const cwd=options.cwd??process.cwd();if(options.build!==!1){if(!options.version)throw Error("[browser-extension] createSafariUniversalProject needs a version to build the extension");await buildExtension(config,{target:"safari",version:options.version,cwd})}const outdir=resolve(cwd,options.outdir??resolveOutdir(config,"safari"));if(!existsSync(join(outdir,"manifest.json")))throw Error(`[browser-extension] ${outdir}/manifest.json is missing. Run extension:build --target safari first.`);const appName=safariAppName(config),bundleId=config.safariBundleId;if(!bundleId)throw Error("[browser-extension] universal Safari packaging needs safariBundleId in config/extension.ts");const platforms=resolveSafariPlatforms(config,options.platforms);if(!platforms.length)throw Error("[browser-extension] universal Safari packaging needs at least one platform");const buildDir=join(safariProjectDir(cwd,options.dir),"build"),resources=join(buildDir,"universal-resources"),projectLocation=join(buildDir,"universal-project");await mirrorSafariResources(config,outdir,resources);await rm(projectLocation,{recursive:!0,force:!0});await mkdir(projectLocation,{recursive:!0});const args=safariPackagerArgs(resources,projectLocation,appName,bundleId,platforms),exitCode=await Bun.spawn(["xcrun",...args],{cwd,stdout:"inherit",stderr:"inherit"}).exited;if(exitCode!==0)throw Error(`[browser-extension] Safari web extension packager failed (${exitCode})`);const dir=join(projectLocation,appName),project=join(dir,`${appName}.xcodeproj`);if(!existsSync(project))throw Error(`[browser-extension] Safari packager did not create ${project}`);return{dir,project,resources,platforms}}export async function buildSafariUniversalApp(config,options={}){const generated=await createSafariUniversalProject(config,options),appPaths={};if(options.skipXcodebuild)return{...generated,appPaths};const appName=safariAppName(config),configuration=options.release?"Release":"Debug",derivedData=join(safariProjectDir(options.cwd??process.cwd(),options.dir),"build","universal-derived");await rm(derivedData,{recursive:!0,force:!0});for(const platform of generated.platforms){const ios=platform==="ios",args=["xcodebuild","-project",generated.project,"-scheme",`${appName} (${ios?"iOS":"macOS"})`,"-configuration",configuration,"-destination",ios?"generic/platform=iOS Simulator":"generic/platform=macOS","-derivedDataPath",derivedData,...ios?["-sdk","iphonesimulator","CODE_SIGNING_ALLOWED=NO"]:options.signed?["-allowProvisioningUpdates"]:["CODE_SIGNING_ALLOWED=NO"],"build"],exitCode=await Bun.spawn(args,{cwd:generated.dir,stdout:"inherit",stderr:"inherit"}).exited;if(exitCode!==0)throw Error(`[browser-extension] Safari ${platform} app build failed (${exitCode})`);const products=ios?`${configuration}-iphonesimulator`:configuration;appPaths[platform]=join(derivedData,"Build","Products",products,`${appName}.app`)}return{...generated,appPaths}}export async function buildSafariApp(config,options={}){const cwd=options.cwd??process.cwd();if(options.build!==!1){if(!options.version)throw Error("[browser-extension] buildSafariApp needs a version to build the extension");await buildExtension(config,{target:"safari",version:options.version,cwd})}const{resources}=await syncSafariResources(config,options);if(options.skipXcodebuild)return{resources};const appName=safariAppName(config),dir=safariProjectDir(cwd,options.dir),configuration=options.release?"Release":"Debug",derivedData=join(dir,"build"),developerDir=(process.env.DEVELOPER_DIR??(await Bun.$`xcode-select -p`.text()).trim()).replace(/\/$/,"");if(!developerDir.includes(".app/Contents/Developer")){console.error(`[browser-extension] full Xcode is required to build the app (active developer directory: ${developerDir}).`);console.error("Install Xcode, then: sudo xcode-select -s /Applications/Xcode.app/Contents/Developer");console.error("or point DEVELOPER_DIR at any Xcode toolchain (betas included) for this shell.");console.error(`The extension payload is built and synced at ${resources}`);return{resources}}const signing=options.signed?["-allowProvisioningUpdates"]:["CODE_SIGNING_ALLOWED=NO"];await Bun.$`xcodebuild -project ${join(dir,`${appName}.xcodeproj`)} -scheme ${appName} -configuration ${configuration} -derivedDataPath ${derivedData} ${signing} build`;return{appPath:join(derivedData,"Build","Products",configuration,`${appName}.app`),resources}}export function resolveAppStoreConnectAuth(options){const keyId=options.keyId??process.env.APP_STORE_CONNECT_API_KEY_ID,issuerId=options.issuerId??process.env.APP_STORE_CONNECT_API_ISSUER_ID,keyPath=options.keyPath??process.env.APP_STORE_CONNECT_API_KEY_PATH,missing=[!keyId&&"APP_STORE_CONNECT_API_KEY_ID",!issuerId&&"APP_STORE_CONNECT_API_ISSUER_ID",!keyPath&&"APP_STORE_CONNECT_API_KEY_PATH"].filter(Boolean);if(missing.length)throw Error(`[browser-extension] missing App Store Connect credentials: ${missing.join(", ")}`);if(!existsSync(resolve(keyPath)))throw Error(`[browser-extension] App Store Connect API key not found: ${resolve(keyPath)}`);return{keyId,issuerId,keyPath:resolve(keyPath)}}function xcodeAuthArgs(auth){return["-allowProvisioningUpdates","-authenticationKeyPath",auth.keyPath,"-authenticationKeyID",auth.keyId,"-authenticationKeyIssuerID",auth.issuerId]}export function archiveSigningArgs(platform){if(platform==="ios")return["CODE_SIGNING_ALLOWED=NO"];return["CODE_SIGN_STYLE=Manual","CODE_SIGN_IDENTITY=-","PROVISIONING_PROFILE_SPECIFIER="]}async function runXcodebuild(args,cwd,operation){const exitCode=await Bun.spawn(["xcodebuild",...args],{cwd,stdout:"inherit",stderr:"inherit"}).exited;if(exitCode!==0)throw Error(`[browser-extension] ${operation} failed (${exitCode})`)}function exportOptionsPlist(method,teamId){return`<?xml version="1.0" encoding="UTF-8"?>
|
|
29
29
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
30
30
|
<plist version="1.0">
|
|
31
31
|
<dict>
|
|
@@ -43,4 +43,4 @@ import{cpSync,existsSync,readdirSync,statSync}from"node:fs";import{mkdir,rm}from
|
|
|
43
43
|
<true/>
|
|
44
44
|
</dict>
|
|
45
45
|
</plist>
|
|
46
|
-
`}export async function publishSafariApp(config,options){const cwd=options.cwd??process.cwd(),teamId=options.teamId??config.safariTeamId;if(!teamId)throw Error("[browser-extension] Safari publishing needs safariTeamId in config/extension.ts or --team-id");const auth=resolveAppStoreConnectAuth(options),buildNumber=options.buildNumber??process.env.GITHUB_RUN_NUMBER??String(Math.floor(Date.now()/1000));if(!/^\d+(?:\.\d+){0,2}$/.test(buildNumber))throw Error(`[browser-extension] invalid Safari build number ${buildNumber}; use one to three dot-separated integers`);const platforms=resolveSafariPlatforms(config,options.platforms);if(!platforms.length)throw Error("[browser-extension] Safari publishing needs at least one platform");const{AppStoreConnectClient,attachSafariBuilds,provisionSafariApp}=await import("./app-store-connect"),provisioned=await provisionSafariApp(config,{...auth,version:options.validateOnly?void 0:options.version,platforms});if(!provisioned.appRecord.exists)throw Error("[browser-extension] the App Store Connect app record is missing; create it once in App Store Connect before publishing");const publishablePlatforms=options.validateOnly?platforms:platforms.filter((platform)=>provisioned.appStoreVersions.some((version)=>version.platform===platform&&version.status!=="deferred"&&version.status!=="published")),deferred=provisioned.appStoreVersions.filter((version)=>version.status==="deferred").map((version)=>({platform:version.platform,version:version.version,state:version.appStoreState,reason:version.reason??`Safari ${version.platform} publication is deferred`})),alreadyPublished=provisioned.appStoreVersions.filter((version)=>version.status==="published").map((version)=>({platform:version.platform,version:version.version,state:version.appStoreState}));if(!publishablePlatforms.length)return{archivePath:"",exportPath:"",buildNumber,artifacts:[],attachments:[],deferred,alreadyPublished};if(options.build!==!1)await buildExtension(config,{target:"safari",version:options.version,cwd});const appName=safariAppName(config),dir=safariProjectDir(cwd,options.dir),buildDir=join(dir,"build"),universal=publishablePlatforms.includes("ios");let project,projectCwd;if(universal){const generated=await createSafariUniversalProject(config,{...options,build:!1,platforms:publishablePlatforms});project=generated.project;projectCwd=generated.dir}else{await syncSafariResources(config,options);project=join(dir,`${appName}.xcodeproj`);projectCwd=dir}const authArgs=xcodeAuthArgs(auth);await mkdir(buildDir,{recursive:!0});const method=options.validateOnly?"validation":"app-store-connect",artifacts=[];for(const platform of publishablePlatforms){const suffix=universal?`-${platform}`:"",archivePath=join(buildDir,`${appName}${suffix}.xcarchive`),exportPath=join(buildDir,`${options.validateOnly?"validation":"upload"}${suffix}`),plistPath=join(buildDir,`ExportOptions.${method}${suffix}.plist`),scheme=universal?`${appName} (${platform==="ios"?"iOS":"macOS"})`:appName,destination=platform==="ios"?"generic/platform=iOS":"generic/platform=macOS";await rm(archivePath,{recursive:!0,force:!0});await rm(exportPath,{recursive:!0,force:!0});await runXcodebuild(["-project",project,"-scheme",scheme,"-configuration","Release","-destination",destination,"-archivePath",archivePath,`MARKETING_VERSION=${options.version}`,`CURRENT_PROJECT_VERSION=${buildNumber}`,`DEVELOPMENT_TEAM=${teamId}`,"INFOPLIST_KEY_ITSAppUsesNonExemptEncryption=NO"
|
|
46
|
+
`}export async function publishSafariApp(config,options){const cwd=options.cwd??process.cwd(),teamId=options.teamId??config.safariTeamId;if(!teamId)throw Error("[browser-extension] Safari publishing needs safariTeamId in config/extension.ts or --team-id");const auth=resolveAppStoreConnectAuth(options),buildNumber=options.buildNumber??process.env.GITHUB_RUN_NUMBER??String(Math.floor(Date.now()/1000));if(!/^\d+(?:\.\d+){0,2}$/.test(buildNumber))throw Error(`[browser-extension] invalid Safari build number ${buildNumber}; use one to three dot-separated integers`);const platforms=resolveSafariPlatforms(config,options.platforms);if(!platforms.length)throw Error("[browser-extension] Safari publishing needs at least one platform");const{AppStoreConnectClient,attachSafariBuilds,provisionSafariApp}=await import("./app-store-connect"),provisioned=await provisionSafariApp(config,{...auth,version:options.validateOnly?void 0:options.version,platforms});if(!provisioned.appRecord.exists)throw Error("[browser-extension] the App Store Connect app record is missing; create it once in App Store Connect before publishing");const publishablePlatforms=options.validateOnly?platforms:platforms.filter((platform)=>provisioned.appStoreVersions.some((version)=>version.platform===platform&&version.status!=="deferred"&&version.status!=="published")),deferred=provisioned.appStoreVersions.filter((version)=>version.status==="deferred").map((version)=>({platform:version.platform,version:version.version,state:version.appStoreState,reason:version.reason??`Safari ${version.platform} publication is deferred`})),alreadyPublished=provisioned.appStoreVersions.filter((version)=>version.status==="published").map((version)=>({platform:version.platform,version:version.version,state:version.appStoreState}));if(!publishablePlatforms.length)return{archivePath:"",exportPath:"",buildNumber,artifacts:[],attachments:[],deferred,alreadyPublished};if(options.build!==!1)await buildExtension(config,{target:"safari",version:options.version,cwd});const appName=safariAppName(config),dir=safariProjectDir(cwd,options.dir),buildDir=join(dir,"build"),universal=publishablePlatforms.includes("ios");let project,projectCwd;if(universal){const generated=await createSafariUniversalProject(config,{...options,build:!1,platforms:publishablePlatforms});project=generated.project;projectCwd=generated.dir}else{await syncSafariResources(config,options);project=join(dir,`${appName}.xcodeproj`);projectCwd=dir}const authArgs=xcodeAuthArgs(auth);await mkdir(buildDir,{recursive:!0});const method=options.validateOnly?"validation":"app-store-connect",artifacts=[];for(const platform of publishablePlatforms){const suffix=universal?`-${platform}`:"",archivePath=join(buildDir,`${appName}${suffix}.xcarchive`),exportPath=join(buildDir,`${options.validateOnly?"validation":"upload"}${suffix}`),plistPath=join(buildDir,`ExportOptions.${method}${suffix}.plist`),scheme=universal?`${appName} (${platform==="ios"?"iOS":"macOS"})`:appName,destination=platform==="ios"?"generic/platform=iOS":"generic/platform=macOS";await rm(archivePath,{recursive:!0,force:!0});await rm(exportPath,{recursive:!0,force:!0});await runXcodebuild(["-project",project,"-scheme",scheme,"-configuration","Release","-destination",destination,"-archivePath",archivePath,`MARKETING_VERSION=${options.version}`,`CURRENT_PROJECT_VERSION=${buildNumber}`,`DEVELOPMENT_TEAM=${teamId}`,"INFOPLIST_KEY_ITSAppUsesNonExemptEncryption=NO",...archiveSigningArgs(platform),...platform==="macos"&&config.safariAppCategory?[`INFOPLIST_KEY_LSApplicationCategoryType=${config.safariAppCategory}`]:[],...authArgs,"archive"],projectCwd,`Safari ${platform} archive`);await Bun.write(plistPath,exportOptionsPlist(method,teamId));await runXcodebuild(["-exportArchive","-archivePath",archivePath,"-exportPath",exportPath,"-exportOptionsPlist",plistPath,...authArgs],projectCwd,`Safari ${platform} export`);artifacts.push({platform,archivePath,exportPath})}const attachments=options.validateOnly?[]:await attachSafariBuilds(new AppStoreConnectClient(auth),provisioned.appRecord.id,provisioned.appStoreVersions.filter((version)=>version.status!=="deferred"&&version.status!=="published"),buildNumber,{timeoutMs:options.processingTimeoutMs,pollIntervalMs:options.processingPollIntervalMs}),appStoreSubmission=!options.validateOnly&&config.safariAppStore?await(await import("./app-store-submission")).prepareSafariAppStoreSubmission(new AppStoreConnectClient(auth),config,provisioned.appRecord.id,attachments.map((attachment)=>({platform:attachment.platform,id:attachment.versionId,buildId:attachment.buildId})),{cwd}):void 0,firstArtifact=artifacts[0];return{archivePath:firstArtifact.archivePath,exportPath:firstArtifact.exportPath,buildNumber,artifacts,deferred,alreadyPublished,attachments,appStoreSubmission:appStoreSubmission?{versions:appStoreSubmission.versions,reviewSubmissionIds:appStoreSubmission.reviewSubmissionIds}:void 0}}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stacksjs/browser-extension",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.70.
|
|
4
|
+
"version": "0.70.262",
|
|
5
5
|
"description": "Build MV3 browser extensions (Chrome, Firefox, Safari) the Stacks way — manifest, content/background scripts, DNR rules, packaging, Safari container app, all config-driven.",
|
|
6
6
|
"author": "Chris Breuer",
|
|
7
7
|
"contributors": [
|