How to use breeze in aurelia? - breeze
I am new to aurelia, and I use the skeleton-typescript-aspnetcore skeleton project to build my first application. The skeleton works fine, but when I followed aurelia-breeze plugin guide to integrate it to my application, I use
import breeze from 'breeze';
on a ts file, but there is an error: cannot find module 'breeze'. I googled so much that someone mentioned the d.ts file is missing, and I copy it from git(https://github.com/jdanyow/aurelia-breeze/blob/master/dist/aurelia-breeze.d.ts) to typings folder, but the d.ts file rose an other error in the first line, cannot find module 'breeze-client':
import breeze from 'breeze-client';
I checked the nmp folder(wwwroot/nmp), both aurelia-breeze and breeze-client are there,also, the same in package.json.
I compared the aurelia-breeze.d.ts with other d.ts file under typings folder,
the files come with the skeleton all named index.d.ts, and with a typings.json for decalaration.
So I suppose the error should be caused by typings configuration, and I Googled for a long time, but there is no answer, can you tell me how to make it work? thanks in advance.
I don't use TypeScript in my Aurelia app but I had the same problem integrating breeze. In the end I solved it (or rather found this workaround) by adding it as a simple script instead of loading it from the node_modules (or jspm_packages, depending which one you use).
This is my new main.js file:
export function configure(aurelia) {
aurelia.use
.standardConfiguration()
.plugin('aurelia-knockout');
return aurelia.start().then(() => {
require(["../scripts/lib/breeze.debug"], function(breeze) {
require([
"../scripts/lib/breeze.savequeuing",
], function(savequeuing){
aurelia.setRoot();
});
});
});
}
Hope this helps. In my case I even integrate the breeze.savequeuing plugin of breeze after breeze itself has been loaded. There are probably better ways to do this though.
Also notice I use "require" as the module loader. I use the Aurelia CLI so I have set it in the aurelia.json file under "build" like this:
"loader": {
"type": "require",
"configTarget": "vendor-bundle.js",
"includeBundleMetadataInConfig": "auto",
"config": {
"waitSeconds": 0,
"paths": {
"jquery": "../scripts/lib/cdn/jquery-3.1.0.min",
"knockout": "../scripts/lib/knockout-3.4.0"
}
},
....
}
and under "bundles" like this:
{
"name": "vendor-bundle.js",
"prepend": [
"node_modules/bluebird/js/browser/bluebird.core.js",
"scripts/lib/require.js"
],
...
}
To use breezejs client with aurelia you must do as follows
Install the required packages.
npm install breeze-client --save
npm install aurelia-breeze --save
Configure dependencies on your module loader.
In my case, I am using amd with requirejs thus the dependencies will be as follows...
paths...
"aurelia-breeze":'../node_modules/aurelia-breeze/dist/amd/aurelia-breeze'
"breeze-client": '../node_modules/breeze-client/breeze.base.min'
"breeze.modelLibrary": '../node_modules/breeze-client/breeze.modelLibrary.backingStore'
"breeze.dataService": '../node_modules/breeze-client/breeze.dataService.webApi'
"breeze.uriBuilder": '../node_modules/breeze-client/breeze.uriBuilder.json'
shims...
'aurelia-breeze': {
exports: 'BreezeObjectObserver',
deps: ['breeze-client', 'breeze.modelLibrary', 'breeze.dataService', 'breeze.uriBuilder']
}
'breeze-client': {
exports: 'breeze'
}
(requirejs config.js file and aurelia.json full files included below)
Import and initialize the library on your TypeScript project as you need
import * as breeze from 'breeze-client'
breeze.NamingConvention.camelCase.setAsDefault();
breeze.config.initializeAdapterInstance('modelLibrary',
'backingStore', true);
It´s done!! you can now use breeze. i.e.
const entityManager = new
EntityManager'http://zzaapi.azurewebsites.net/breeze/zza') const
entityQuery = EntityQuery.from(‘Customers’);
entityManager.executeQuery(entityQuery).then(queryResult =>
console.log(queryResult.results));
(from Brian Noyes excellent course on https://www.pluralsight.com/courses/building-data-centric-apps-angular-breezejs)
PS: I will post the full content of my requirejs config.js file and also the aurelia.json for aurelia cli build, take look and notice prepends, preload and shims.
//-------------------config.js----------------------------------------------
require.config(
{
baseUrl: 'src',
paths: {
pipelines: 'resources/pipelines',
templates: 'resources/templates',
interceptors: 'resources/interceptors',
bluebird: '../node_modules/bluebird/js/browser/bluebird.min',
bootstrap: '../node_modules/bootstrap/dist/js/bootstrap.min',
"aurelia-animator-css": '../node_modules/aurelia-animator-css/dist/amd/aurelia-animator-css',
"aurelia-binding": '../node_modules/aurelia-binding/dist/amd/aurelia-binding',
"aurelia-bootstrapper": '../node_modules/aurelia-bootstrapper/dist/amd/aurelia-bootstrapper',
"aurelia-breeze": '../node_modules/aurelia-breeze/dist/amd/aurelia-breeze',
"aurelia-computed": '../node_modules/aurelia-computed/dist/amd/aurelia-computed',
"aurelia-dependency-injection": '../node_modules/aurelia-dependency-injection/dist/amd/aurelia-dependency-injection',
"aurelia-event-aggregator": '../node_modules/aurelia-event-aggregator/dist/amd/aurelia-event-aggregator',
"aurelia-fetch-client": '../node_modules/aurelia-fetch-client/dist/amd/aurelia-fetch-client',
"aurelia-framework": '../node_modules/aurelia-framework/dist/amd/aurelia-framework',
"aurelia-history": '../node_modules/aurelia-history/dist/amd/aurelia-history',
"aurelia-history-browser": '../node_modules/aurelia-history-browser/dist/amd/aurelia-history-browser',
"aurelia-http-client": '../node_modules/aurelia-http-client/dist/amd/aurelia-http-client',
"aurelia-loader": '../node_modules/aurelia-loader/dist/amd/aurelia-loader',
"aurelia-loader-default": '../node_modules/aurelia-loader-default/dist/amd/aurelia-loader-default',
"aurelia-logging": '../node_modules/aurelia-logging/dist/amd/aurelia-logging',
"aurelia-logging-console": '../node_modules/aurelia-logging-console/dist/amd/aurelia-logging-console',
"aurelia-metadata": '../node_modules/aurelia-metadata/dist/amd/aurelia-metadata',
"aurelia-pal": '../node_modules/aurelia-pal/dist/amd/aurelia-pal',
"aurelia-pal-browser": '../node_modules/aurelia-pal-browser/dist/amd/aurelia-pal-browser',
"aurelia-path": '../node_modules/aurelia-path/dist/amd/aurelia-path',
"aurelia-polyfills": '../node_modules/aurelia-polyfills/dist/amd/aurelia-polyfills',
"aurelia-router": '../node_modules/aurelia-router/dist/amd/aurelia-router',
"aurelia-route-recognizer": '../node_modules/aurelia-route-recognizer/dist/amd/aurelia-route-recognizer',
"aurelia-task-queue": '../node_modules/aurelia-task-queue/dist/amd/aurelia-task-queue',
"aurelia-templating": '../node_modules/aurelia-templating/dist/amd/aurelia-templating',
"aurelia-templating-binding": '../node_modules/aurelia-templating-binding/dist/amd/aurelia-templating-binding',
"breeze-client": '../node_modules/breeze-client/breeze.base.min',
"breeze.modelLibrary": '../node_modules/breeze-client/breeze.modelLibrary.backingStore',
"breeze.dataService": '../node_modules/breeze-client/breeze.dataService.webApi',
"breeze.uriBuilder": '../node_modules/breeze-client/breeze.uriBuilder.json',
jquery: '../node_modules/jquery/dist/jquery.min',
lodash: '../node_modules/lodash/lodash.min',
moment: '../node_modules/moment/min/moment-with-locales.min',
numeral: '../node_modules/numeral/min/numeral.min',
pouchdb: '../node_modules/pouchdb/dist/pouchdb.min',
text: '../node_modules/text/text',
toastr: '../node_modules/toastr/build/toastr.min',
"jquery-ui": '../node_modules/jquery-ui/dist/jquery-ui.min'
},
packages: [
{
name: 'aurelia-dialog',
location: '../node_modules/aurelia-dialog/dist/amd',
main: 'aurelia-dialog'
},
{
name: 'aurelia-templating-resources',
location: '../node_modules/aurelia-templating-resources/dist/amd',
main: 'aurelia-templating-resources'
},
{
name: 'aurelia-templating-router',
location: '../node_modules/aurelia-templating-router/dist/amd',
main: 'aurelia-templating-router'
},
{
name: 'aurelia-testing',
location: '../node_modules/aurelia-testing/dist/amd',
main: 'aurelia-testing'
},
{
name: 'aurelia-validation',
location: '../node_modules/aurelia-validation/dist/amd',
main: 'aurelia-validation'
},
{
name: 'popper.js',
location: '../node_modules/popper.js/dist/umd/',
main: 'popper.min'
}
],
shim: {
'aurelia-breeze': {
exports: 'BreezeObjectObserver',
deps: ['breeze-client', 'breeze.modelLibrary', 'breeze.dataService', 'breeze.uriBuilder']
},
'breeze-client': {
exports: 'breeze'
},
bootstrap: {
exports: '$.fn.button',
deps: ['jquery', 'popper.js']
},
jquery: {
exports: '$'
},
"jquery-ui": {
exports: '$.autocomplete',
deps: ['jquery']
},
lodash: {
exports: '_'
},
"popper.js": {
exports: 'Popper'
},
toastr: {
deps: ['jquery']
}
}
});
require(['aurelia-bootstrapper']);
//-------------------aurelia.json----------------------------------------------
{
"name": "mgame",
"type": "project:application",
"bundler": {
"id": "cli",
"displayName": "Aurelia-CLI"
},
"platform": {
"id": "aspnetcore",
"displayName": "ASP.NET Core",
"index": "index.html",
"baseDir": ".",
"output": "dist"
},
"transpiler": {
"id": "typescript",
"displayName": "TypeScript",
"fileExtension": ".ts",
"dtsSource": [ "./custom_typings/**/*.d.ts" ],
"source": "src/**/*.ts"
},
"markupProcessor": {
"id": "maximum",
"displayName": "Maximum Minification",
"fileExtension": ".html",
"source": "src/**/*.html"
},
"cssProcessor": {
"id": "sass",
"displayName": "Sass",
"fileExtension": ".scss",
"source": "src/**/*.scss"
},
"editor": {
"id": "visualstudio",
"displayName": "Visual Studio"
},
"testFramework": {
"id": "jasmine",
"displayName": "Jasmine"
},
"unitTestRunner": {
"id": "karma",
"displayName": "Karma",
"source": "test/unit/**/*.ts"
},
"e2eTestRunner": {
"id": "protractor",
"displayName": "Protractor",
"source": "test/e2e/src/**/*.ts",
"dist": "test/e2e/dist/",
"typingsSource": [ "node_modules//#types/**/*.d.ts", "custom_typings/**/*.d.ts" ]
},
"paths": {
"root": "src",
"resources": "resources",
"elements": "resources/elements",
"pipelines": "resources/pipelines",
"templates": "resources/templates",
"attributes": "resources/attributes",
"interceptors": "resources/interceptors",
"valueConverters": "resources/converters",
"bindingBehaviors": "resources/behaviors",
"assets": [
{
"src": "node_modules/jquery-ui/dist/images/*",
"dest": "/../images"
},
{
"src": "node_modules/font-awesome/css/font-awesome.min.css",
"dest": "/css"
},
{
"src": "node_modules/font-awesome/fonts/*",
"dest": "/fonts"
}
]
},
"build": {
"targets": [
{
"id": "aspnetcore",
"displayName": "ASP.NET Core",
"index": "index.html",
"baseDir": ".",
"output": "dist"
}
],
"loader": {
"type": "require",
"configTarget": "vendor-bundle.js",
"includeBundleMetadataInConfig": "auto",
"plugins": [
{
"name": "text",
"extensions": [
".html",
".css"
],
"stub": true
}
]
},
"options": {
"minify": "stage & prod",
"sourcemaps": "dev & stage"
},
"bundles": [
{
"name": "app-bundle.js",
"source": [
"[**/*.js]",
"**/*.{css,html}"
]
},
{
"name": "vendor-bundle.js",
"prepend": [
"node_modules/bluebird/js/browser/bluebird.min.js",
"node_modules/popper.js/dist/umd/popper.min.js",
"node_modules/requirejs/require.js"
],
"dependencies": [
"jquery",
"lodash",
"moment",
"numeral",
"text",
{
"name": "aurelia-animator-css",
"path": "../node_modules/aurelia-animator-css/dist/amd",
"main": "aurelia-animator-css"
},
{
"name": "aurelia-binding",
"path": "../node_modules/aurelia-binding/dist/amd",
"main": "aurelia-binding"
},
{
"name": "aurelia-bootstrapper",
"path": "../node_modules/aurelia-bootstrapper/dist/amd",
"main": "aurelia-bootstrapper"
},
{
"name": "aurelia-breeze",
"path": "../node_modules/aurelia-breeze/dist/amd",
"main": "aurelia-breeze",
"exports": "BreezeObjectObserver",
"deps": [ "breeze-client", "breeze.modelLibrary", "breeze.dataService", "breeze.uriBuilder" ]
},
{
"name": "aurelia-computed",
"path": "../node_modules/aurelia-computed/dist/amd",
"main": "aurelia-computed"
},
{
"name": "aurelia-dependency-injection",
"path": "../node_modules/aurelia-dependency-injection/dist/amd",
"main": "aurelia-dependency-injection"
},
{
"name": "aurelia-dialog",
"path": "../node_modules/aurelia-dialog/dist/amd",
"main": "aurelia-dialog"
},
{
"name": "aurelia-event-aggregator",
"path": "../node_modules/aurelia-event-aggregator/dist/amd",
"main": "aurelia-event-aggregator"
},
{
"name": "aurelia-fetch-client",
"path": "../node_modules/aurelia-fetch-client/dist/amd",
"main": "aurelia-fetch-client"
},
{
"name": "aurelia-framework",
"path": "../node_modules/aurelia-framework/dist/amd",
"main": "aurelia-framework"
},
{
"name": "aurelia-history",
"path": "../node_modules/aurelia-history/dist/amd",
"main": "aurelia-history"
},
{
"name": "aurelia-history-browser",
"path": "../node_modules/aurelia-history-browser/dist/amd",
"main": "aurelia-history-browser"
},
{
"name": "aurelia-http-client",
"path": "../node_modules/aurelia-http-client/dist/amd",
"main": "aurelia-http-client"
},
{
"name": "aurelia-loader",
"path": "../node_modules/aurelia-loader/dist/amd",
"main": "aurelia-loader"
},
{
"name": "aurelia-loader-default",
"path": "../node_modules/aurelia-loader-default/dist/amd",
"main": "aurelia-loader-default"
},
{
"name": "aurelia-logging",
"path": "../node_modules/aurelia-logging/dist/amd",
"main": "aurelia-logging"
},
{
"name": "aurelia-logging-console",
"path": "../node_modules/aurelia-logging-console/dist/amd",
"main": "aurelia-logging-console"
},
{
"name": "aurelia-metadata",
"path": "../node_modules/aurelia-metadata/dist/amd",
"main": "aurelia-metadata"
},
{
"name": "aurelia-pal",
"path": "../node_modules/aurelia-pal/dist/amd",
"main": "aurelia-pal"
},
{
"name": "aurelia-pal-browser",
"path": "../node_modules/aurelia-pal-browser/dist/amd",
"main": "aurelia-pal-browser"
},
{
"name": "aurelia-path",
"path": "../node_modules/aurelia-path/dist/amd",
"main": "aurelia-path"
},
{
"name": "aurelia-polyfills",
"path": "../node_modules/aurelia-polyfills/dist/amd",
"main": "aurelia-polyfills"
},
{
"name": "aurelia-router",
"path": "../node_modules/aurelia-router/dist/amd",
"main": "aurelia-router"
},
{
"name": "aurelia-route-recognizer",
"path": "../node_modules/aurelia-route-recognizer/dist/amd",
"main": "aurelia-route-recognizer"
},
{
"name": "aurelia-task-queue",
"path": "../node_modules/aurelia-task-queue/dist/amd",
"main": "aurelia-task-queue"
},
{
"name": "aurelia-templating",
"path": "../node_modules/aurelia-templating/dist/amd",
"main": "aurelia-templating"
},
{
"name": "aurelia-templating-binding",
"path": "../node_modules/aurelia-templating-binding/dist/amd",
"main": "aurelia-templating-binding"
},
{
"name": "aurelia-templating-resources",
"path": "../node_modules/aurelia-templating-resources/dist/amd",
"main": "aurelia-templating-resources"
},
{
"name": "aurelia-templating-router",
"path": "../node_modules/aurelia-templating-router/dist/amd",
"main": "aurelia-templating-router"
},
{
"name": "aurelia-testing",
"path": "../node_modules/aurelia-testing/dist/amd",
"main": "aurelia-testing",
"env": "dev"
},
{
"name": "aurelia-validation",
"path": "../node_modules/aurelia-validation/dist/amd",
"main": "aurelia-validation"
},
{
"name": "bluebird",
"path": "../node_modules/bluebird/js/browser",
"main": "bluebird.min"
},
{
"name": "bootstrap",
"path": "../node_modules/bootstrap/dist",
"main": "js/bootstrap.min",
"deps": [ "jquery", "popper.js" ],
"exports": "$.fn.button",
"resources": [
"css/bootstrap.min.css"
]
},
{
"name": "breeze-client",
"path": "../node_modules/breeze-client",
"main": "breeze.base.min",
"exports": "breeze"
},
{
"name": "breeze.modelLibrary",
"path": "../node_modules/breeze-client",
"main": "breeze.modelLibrary.backingStore"
},
{
"name": "breeze.dataService",
"path": "../node_modules/breeze-client",
"main": "breeze.dataService.webApi"
},
{
"name": "breeze.uriBuilder",
"path": "../node_modules/breeze-client",
"main": "breeze.uriBuilder.json"
},
{
"name": "jquery-ui",
"path": "../node_modules/jquery-ui/dist",
"main": "jquery-ui.min",
"deps": [ "jquery" ],
"exports": "$.autocomplete",
"resources": [ "jquery-ui.min.css" ]
},
{
"name": "popper.js",
"path": "../node_modules/popper.js/dist/umd",
"main": "popper.min",
"exports": "Popper"
},
{
"name": "pouchdb",
"path": "../node_modules/pouchdb/dist",
"main": "pouchdb.min"
},
{
"name": "toastr",
"path": "../node_modules/toastr",
"main": "toastr",
"deps": [ "jquery" ],
"resources": [ "build/toastr.min.css" ]
}
]
}
]
}
}
Related
Electron build error: file not found in artifact
this is my first time building an electron app and I am getting confused about this error I got in my production package. I've created my app using the electron-react-boilerplate, and I am running the package build with the default config. "build": { "productName": "App", "appId": "org.erb.ElectronReact", "asar": true, "asarUnpack": "**\\*.{node,dll}", "files": [ "dist", "node_modules", "package.json" ], "afterSign": ".erb/scripts/notarize.js", "mac": { "target": { "target": "default", "arch": [ "arm64", "x64" ] }, "type": "distribution", "hardenedRuntime": true, "entitlements": "assets/entitlements.mac.plist", "entitlementsInherit": "assets/entitlements.mac.plist", "gatekeeperAssess": false }, "dmg": { "contents": [ { "x": 130, "y": 220 }, { "x": 410, "y": 220, "type": "link", "path": "/Applications" } ] }, "win": { "target": [ "nsis" ] }, "linux": { "target": [ "AppImage" ], "category": "Development" }, "directories": { "app": "release/app", "buildResources": "assets", "output": "release/build" }, "extraResources": [ "./assets/**" ] }, My preload.js file is requiring a module (module.umd.js) that is reading from three .trie files, so my folder structure looks like this: Once builded, the app is not working and I see this error on the web console inspector: Error: ENOENT, dist\main\data.trie not found in C:\Users\ivan\Desktop\app-electron\release\build\win-unpacked\resources\app.asar So my question is: Do I have to somehow add those .trie files in app.asar in order to solve this problem?
How can I set the filename of the created .deb file when building my Electron.NET application for Linux?
This is my electron.manifest.json { "executable": "MyApplication.UI", "splashscreen": { "imageFile": "/wwwroot/assets/Animation.svg" }, "author": "MyCompany", "environment": "Production", "singleInstance": false, "build": { "appId": "com.mycompany.myapplication", "productName": "MyApplication", "copyright": "Copyright # 2022", "buildVersion": "2022.1.0", "compression": "maximum", "fileAssociations": [ { "ext": "sdg", "name": "MyApplication File", "role": "Editor" } ], "publish": { "provider": "generic", "url": "https://mydomain.io/Installer/MyApplication/", "channel": "latest" }, "nsis": { "allowToChangeInstallationDirectory": true, "oneClick": false, "perMachine": true, "installerIcon": "bin/Assets/icon.ico", "uninstallerIcon": "bin/Assets/icon.ico", "installerHeaderIcon": "bin/Assets/icon.ico", "menuCategory": true }, "win": { "target": [ "nsis" ], "icon": "Assets/icon.ico" }, "linux": { "target": "deb", "maintainer": "MyCompany", "vendor": "MyCompany", "synopsis": "MyApplication", "executableName": "MyApplication", "description": "Doing some magic.", "category": "Development", "icon": "./../../Assets/Icons/32x32.png" }, "directories": { "output": "../../../bin/Installer", "buildResources": "Assets" }, "extraResources": [ { "from": "./bin", "to": "bin", "filter": [ "**/*" ] } ], "files": [ { "from": "./ElectronHostHook/node_modules", "to": "ElectronHostHook/node_modules", "filter": [ "**/*" ] }, "**/*" ] } } The created .deb file when building for linux is called electron-net_{version}.deb. That wouldn't be a problem but when executed, the application name electron-net is shown. How can I change that? I checked the documentation (here https://www.electron.build/configuration/linux) already but I dont see any more options in my config? I am using ElectronNET.CLI Version 15.5.1 on Ubuntu 20.04.4, .NET Version 5.0.406
I think you're looking for the artifactName property under build for your file name and the name property under at root for the name that is displayed { "name" : "MyApplication", "executable" : "MyApplication", "build": { "artifactName": "my-application.${ext}", } }
not able to notarize electron app using forge
hello I am building electron app for the mac platform and having trouble notarize the app using Forge and getting this error: Packaging ApplicationWARNING: Code sign failed; please retry manually. Error: Command failed: spctl --assess --type execute --verbose --ignore-cache --no-cache /var/folders/q7//T/electron-packager/darwin-arm64/Integration-darwin-arm64/Integration.app /var/folders/q7/*/T/electron-packager/darwin-arm64/Integration-darwin-arm64/Integration.app: rejected source=Unnotarized Developer ID my forge config "forge": { "packagerConfig": { "appBundleId": "com.anyfolder.integrations", "osxSign": { "identity": "Developer ID Application: ****** (****)", "hardened-runtime": true, "entitlements": "entitlements.plist", "entitlements-inherit": "entitlements.plist", "signature-flags": "library" }, "osxNotarize": { "appleId": "myid#id.com", "appleIdPassword": "my-password" }, "protocols": [ { "name": "Any Folder", "schemes": [ "electron-****" ] } ], "icon": "public/images/icon.ico" }, "publishers": [ { "name": "#electron-forge/publisher-s3", "config": { "bucket": "*******", "folder": "integrations", "public": true } }, { "name": "#electron-forge/publisher-github", "config": { "repository": { "owner": "****", "name": "****" }, "draft": false, "prerelease": false } } ], "makers": [ { "name": "#electron-forge/maker-squirrel", "config": { "name": "integrations" } }, { "name": "#electron-forge/maker-dmg", "config": { "icon": "public/images/icon.icns", "format": "ULFO", "name": "Name", "overwrite": true, "debug": true } } ], "plugins": [ [ "#electron-forge/plugin-webpack", { "mainConfig": "./webpack.main.config.js", "renderer": { "config": "./webpack.renderer.config.js", "entryPoints": [ { "html": "./src/render/imageEditor/index.html", "js": "./src/render/imageEditor/index.tsx", "name": "capture_window", "preload": { "js": "./src/render/imageEditor/preload.ts" } }, { "name": "main_window", "html": "./src/index.html", "js": "./src/render/main/index.tsx", "preload": { "js": "./src/render/main/preload.ts" } }, { "name": "integrations_menu", "html": "./src/index.html", "js": "./src/render/integrations/index.tsx", "preload": { "js": "./src/render/integrations/preload.ts" } } ] } } ] ] }
Electron app Failed to get ipaddress when exported as Flatpak
I am trying to make a Flatpak for my little application “OpenSpeedTest-Server” This is a simple network performance estimation tool. It is working fine on Windows, Mac and Linux (DEB). 1) When i Export the same in Flatpak, Application unable to get the client device ip address. 2) Also i am not able to put a custom icon for my Flatpak. I used electronforge. Here is my package.json { "name": "OpenSpeedTest-Server", "productName": "OpenSpeedTest-Server", "version": "2.1.0", "description": "Network Speed Test Server - by OpenSpeedTest", "main": "src/index.js", "scripts": { "start": "electron-forge start", "package": "electron-forge package", "make": "electron-forge make", "publish": "electron-forge publish", "lint": "echo \"No linting configured\"" }, "keywords": [], "author": { "name": "OpenSpeedTest", "email": "support#openspeedtest.com" }, "license": "MIT", "config": { "forge": { "packagerConfig": { "icon": "src/icon.png" }, "makers": [ { "name": "#electron-forge/maker-flatpak", "config": { "name": "OpenSpeedTest_Server", "options": { "categories": [ "Utility" ], "icon": "src/icon.png" } } }, { "name": "#electron-forge/maker-zip", "platforms": [ "darwin" ] }, { "name": "#electron-forge/maker-deb", "config": {} }, { "name": "#electron-forge/maker-rpm", "config": {} } ] } }, "dependencies": { "cors": "^2.8.5", "electron-squirrel-startup": "^1.0.0", "express": "^4.17.1", "internal-ip": "^6.2.0", "tcp-port-used": "^1.0.2" }, "devDependencies": { "#davidwinter/electron-forge-maker-snap": "^2.0.4", "#electron-forge/cli": "^6.0.0-beta.57", "#electron-forge/maker-deb": "^6.0.0-beta.57", "#electron-forge/maker-flatpak": "^6.0.0-beta.57", "#electron-forge/maker-rpm": "^6.0.0-beta.57", "#electron-forge/maker-squirrel": "^6.0.0-beta.57", "#electron-forge/maker-zip": "^6.0.0-beta.57", "electron": "13.1.2" } } How can i solve this issue?
Solved the issue by adding iproute2 to source and specifying icon dimension. Max supported was 512x512 and i was using 1024x1024 { "name": "#electron-forge/maker-flatpak", "config": { "name": "OpenSpeedTest_Server", "options": { "categories": [ "Utility" ], "icon": { "512x512": "src/android-chrome-512x512.png" } }, "modules": [ { "name": "zypak", "sources": [ { "type": "git", "url": "https://github.com/refi64/zypak", "tag": "v2021.02" } ] }, { "name": "iproute2", "make-install-args": [ "PREFIX=/app", "CONFDIR=/app/share/iproute2", "SBINDIR=/app/bin" ], "sources": [ { "type": "archive", "url": "https://www.kernel.org/pub/linux/utils/net/iproute2/iproute2-5.7.0.tar.xz", "sha256": "725dc7ba94aae54c6f8d4223ca055d9fb4fe89d6994b1c03bfb4411c4dd10f21" } ], "cleanup": [ "/include", "/share/bash-completion", "/share/man" ] } ] } },
ARM Template for Importing Azure Key Vault Certificate in Function App
I have a function app which calls another API with a certificate. This certificate (.pfx) file is already present in the key vault. I am using below ARM template to import the certificate to SSL settings of the function app. Note: the function app gets deployed fine when I remove section "hostNameSslStates". But after adding it, I get - "Code": "Conflict", "Message": "The certificate with thumbprint 'XXXXXXXX' does not match the hostname 'blobcreate-eventgridtrigger-functionapp.azurewebsites.net'." ARM Template resources section- ` "resources": [ //StorageAccount { "type": "Microsoft.Storage/storageAccounts", "apiVersion": "2019-06-01", "name": "[parameters('storageAccounts_name')]", "location": "[resourceGroup().location]", "sku": { "name": "[parameters('storageSKU')]", "tier": "Standard" }, "kind": "StorageV2", "properties": { "networkAcls": { "bypass": "AzureServices", "virtualNetworkRules": [], "ipRules": [], "defaultAction": "Allow" }, "supportsHttpsTrafficOnly": true, "encryption": { "services": { "file": { "keyType": "Account", "enabled": true }, "blob": { "keyType": "Account", "enabled": true } }, "keySource": "Microsoft.Storage" }, "accessTier": "Hot" } }, //BlobService { "type": "Microsoft.Storage/storageAccounts/blobServices", "apiVersion": "2019-06-01", "name": "[variables('blobServiceName')]", "dependsOn": ["[variables('storageAccountResourceId')]"], "sku": { "name": "[parameters('storageSKU')]"//, // "tier": "Standard" }, "properties": { "cors": { "corsRules": [] }, "deleteRetentionPolicy": { "enabled": false } } }, //function app with server farm //cert store access policies update- { "type": "Microsoft.KeyVault/vaults", "name": "testARMTemplateKeyVault", "apiVersion": "2016-10-01", "location": "[resourceGroup().location]", "properties": { "sku": { "family": "A", "name": "standard" }, "tenantId": "c29678d0-eceb-4df2-a225-79cf795a6b64", "accessPolicies": [ { "tenantId": "tenantIdOfSubscription", //obtained from Get-AzTenant "objectId": "objectid of Microsoft Azure App Service", //obtained from Get-AzADServicePrincipal "permissions": { "keys": [ "Get", "List", "Update", "Create", "Import", "Delete", "Recover", "Backup", "Restore" ], "secrets": [ "Get", "List", "Set", "Delete", "Recover", "Backup", "Restore" ], "certificates": [ "Get", "List", "Update", "Create", "Import", "Delete", "Recover", "ManageContacts", "ManageIssuers", "GetIssuers", "ListIssuers", "DeleteIssuers" ], "storage": [] } } ], "enabledForDeployment": false, "enabledForDiskEncryption": false, "enabledForTemplateDeployment": true, "enableSoftDelete": true } }, { "type": "Microsoft.Web/serverfarms", "apiVersion": "2018-02-01", "name": "[variables('azurefunction_hostingPlanName')]", "location": "[resourceGroup().location]", "sku": { "name": "Y1", "tier": "Dynamic" }, "properties": { "name": "[variables('azurefunction_hostingPlanName')]", "computeMode": "Dynamic" } }, { "type": "Microsoft.Web/certificates", "name": "testingcert", "apiVersion": "2016-03-01", "location": "[resourceGroup().location]", "properties": { "keyVaultId": "[resourceId('Microsoft.KeyVault/vaults', 'testARMTemplateKeyVault')]", "keyVaultSecretName": "testingcert", "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('azurefunction_hostingPlanName'))]" } }, { "apiVersion": "2018-11-01", "type": "Microsoft.Web/sites", "name": "[parameters('functionAppName')]", "location": "[resourceGroup().location]", "kind": "functionapp", "dependsOn": [ "[variables('azureFunction_serverFarmResourceId')]", "[variables('storageAccountResourceId')]", "[resourceId('Microsoft.Web/certificates', 'testingcert')]" ], "properties": { "serverFarmId": "[variables('azureFunction_serverFarmResourceId')]", "siteConfig": { "appSettings": [ { "name": "AzureWebJobsStorage", "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', parameters('storageAccounts_name'), ';AccountKey=', listKeys(variables('storageAccountResourceId'),variables('storageAccountApiVersion')).keys[0].value)]" }, { "name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING", "value": "[concat('DefaultEndpointsProtocol=https;AccountName=', parameters('storageAccounts_name'), ';AccountKey=', listKeys(variables('storageAccountResourceId'),variables('storageAccountApiVersion')).keys[0].value)]" }, { "name": "WEBSITE_CONTENTSHARE", "value": "[toLower(parameters('functionAppName'))]" }, { "name": "FUNCTIONS_EXTENSION_VERSION", "value": "~2" }, { "name": "WEBSITE_NODE_DEFAULT_VERSION", "value": "~10" }, { "name": "APPINSIGHTS_INSTRUMENTATIONKEY", "value": "[reference(resourceId('microsoft.insights/components/', parameters('functionApp_applicationInsightsName')), '2015-05-01').InstrumentationKey]" }, { "name": "FUNCTIONS_WORKER_RUNTIME", "value": "dotnet" }, { "name": "WEBSITE_LOAD_CERTIFICATES", "value": "required certificate thumprint" } ] }, "hostNameSslStates": [ { "name": "blobcreate-eventgridtrigger-functionapp.azurewebsites.net",//obtained from custom domains flatform features of the function app "sslState": "SniEnabled", "thumbprint": "[reference(resourceId('Microsoft.Web/certificates', 'testingcert')).Thumbprint]", "toUpdate": true } ] } } ]`
add certificates section in template - { "type": "Microsoft.Web/certificates", "name": "[parameters('CertificateName')]", "apiVersion": "2019-08-01", "location": "[resourceGroup().location]", "dependsOn": [ "[concat('Microsoft.Web/serverFarms/', variables('azurefunction_hostingPlanName'))]" ], "properties": { "keyVaultId": "[parameters('keyvaultResourceId')]", "keyVaultSecretName": "[parameters('invoiceApiCertificateKeyVaultSecretName')]", "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('azurefunction_hostingPlanName'))]" } } and then add dependsOn for this certificate in the function app- [resourceId('Microsoft.Web/certificates', parameters('CertificateName'))]
well, the error is quite obvious, you are trying to add a certificate for blobcreate-eventgridtrigger-functionapp.azurewebsites.net but the dns name on the certificate doesnt match that, hence the error. that is probably not the right way to add a certificate unless its going to be used for SSL termination