Complete Pezkuwi rebrand for Play Store release

User-visible changes:
- All strings.xml: Nova → Pezkuwi (12 languages, 721 references)
- App name: Pezkuwi Wallet
- Deep links: pezkuwiwallet://
- WalletConnect: Pezkuwi Wallet metadata
- Backup files: pezkuwiwallet_backup.json
- Push notifications: Pezkuwi Wallet branding

Technical changes:
- Gradle namespaces: io.pezkuwichain.wallet.*
- JS interface prefix: Pezkuwi_*
- User-Agent: Pezkuwi Wallet (Android)
- Firebase: pezkuwi-wallet project config

Assets:
- Nevroz fire logo (Kurdish colors theme)
- 6 density PNG files

Documentation:
- PACKAGE_STRUCTURE_REBRAND.md for future refactoring
This commit is contained in:
2026-01-23 02:15:34 +03:00
parent 31c8c5995f
commit bc76590b34
100 changed files with 781 additions and 426 deletions
@@ -29,7 +29,7 @@ class MetamaskInjector(
}
override fun injectForPage(into: WebView, extensionStore: ExtensionsStore) {
webViewScriptInjector.injectScript(R.raw.metamask_min, into, scriptId = "novawallet-metamask-bundle")
webViewScriptInjector.injectScript(R.raw.metamask_min, into, scriptId = "pezkuwi-metamask-bundle")
injectProvider(extensionStore, into)
}
@@ -42,13 +42,13 @@ class MetamaskInjector(
val providerConfigJson = gson.toJson(providerConfig)
val content = """
window.ethereum = new novawallet.Provider($providerConfigJson);
window.web3 = new novawallet.Web3(window.ethereum);
novawallet.postMessage = (jsonString) => {
Nova_Metamask.onNewMessage(JSON.stringify(jsonString))
window.ethereum = new pezkuwi.Provider($providerConfigJson);
window.web3 = new pezkuwi.Web3(window.ethereum);
pezkuwi.postMessage = (jsonString) => {
Pezkuwi_Metamask.onNewMessage(JSON.stringify(jsonString))
};
""".trimIndent()
webViewScriptInjector.injectScript(content, into, scriptId = "novawallet-metamask-provider")
webViewScriptInjector.injectScript(content, into, scriptId = "pezkuwi-metamask-provider")
}
}
@@ -20,7 +20,7 @@ class PolkadotJsInjector(
}
override fun injectForPage(into: WebView, extensionStore: ExtensionsStore) {
webViewScriptInjector.injectScript(R.raw.polkadotjs_min, into, scriptId = "novawallet-polkadotjs-bundle")
webViewScriptInjector.injectScript(R.raw.javascript_interface_bridge, into, scriptId = "novawallet-polkadotjs-provider")
webViewScriptInjector.injectScript(R.raw.polkadotjs_min, into, scriptId = "pezkuwi-polkadotjs-bundle")
webViewScriptInjector.injectScript(R.raw.javascript_interface_bridge, into, scriptId = "pezkuwi-polkadotjs-provider")
}
}
@@ -4,7 +4,7 @@ import android.webkit.WebView
import androidx.annotation.RawRes
import io.novafoundation.nova.common.resources.ResourceManager
private const val JAVASCRIPT_INTERFACE_PREFIX = "Nova"
private const val JAVASCRIPT_INTERFACE_PREFIX = "Pezkuwi"
class WebViewScriptInjector(
private val resourceManager: ResourceManager
File diff suppressed because one or more lines are too long
@@ -256,7 +256,7 @@ var r=require("process");Object.defineProperty(exports,"__esModule",{value:!0}),
},{}],"GzV5":[function(require,module,exports) {
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=function(){return function(){var e=this;this.addHandler=function(t,s,r){e._messageHandlers.set(t,{resolve:s,reject:r})},this.getHandler=function(t){return e._messageHandlers.get(t)},this._messageHandlers=new Map}}();exports.default=e;
},{}],"EHrm":[function(require,module,exports) {
module.exports={name:"@novawallet/extension",description:"A Novawallet signer for the @polkadot/api",version:"0.1.0",author:"Ruslan Rezin <ruslan@novawallet.io>",license:"Apache-2",scripts:{clean:"rm -rf dist .cache",build:"rm -rf dist && parcel build src/index.ts --no-source-maps -o nova_min.js -d dist",lint:"prettier --write 'src/**/*.ts'",test:"env TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\" }' mocha -r ts-node/register -r jsdom-global/register 'src/test/**/*.ts' --timeout 20000","jest-init":"jest --init"},dependencies:{"@babel/plugin-transform-modules-commonjs":"^7.16.5","@babel/preset-typescript":"^7.16.5","@babel/runtime":"^7.11.2","@polkadot/extension-base":"^0.38.4","@polkadot/extension-dapp":"^0.38.4","@polkadot/extension-inject":"^0.38.4","@types/chai":"^4.3.0","@types/mocha":"^9.0.0","babel-jest":"^27.4.5",chai:"^4.3.4","jest-cli":"^27.4.5","jsdom-global":"^3.0.2",mocha:"^9.1.3",parcel:"^2.14.4","ts-jest":"^27.1.2","ts-node":"^10.4.0"},devDependencies:{"@babel/core":"^7.8.3","@babel/preset-env":"^7.8.3","babel-loader":"^8.0.6",jest:"^27.4.5","parcel-bundler":"^1.12.4","parcel-plugin-static-files-copy":"^2.6.0",prettier:"^1.19.1",typescript:"^4.5.4"},staticFiles:{staticPath:["extension"]},jest:{transform:{"^.+\\.(t|j)s?$":"ts-jest"}}};
module.exports={name:"@pezkuwi/extension",description:"A Novawallet signer for the @polkadot/api",version:"0.1.0",author:"Ruslan Rezin <ruslan@pezkuwi.io>",license:"Apache-2",scripts:{clean:"rm -rf dist .cache",build:"rm -rf dist && parcel build src/index.ts --no-source-maps -o nova_min.js -d dist",lint:"prettier --write 'src/**/*.ts'",test:"env TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\" }' mocha -r ts-node/register -r jsdom-global/register 'src/test/**/*.ts' --timeout 20000","jest-init":"jest --init"},dependencies:{"@babel/plugin-transform-modules-commonjs":"^7.16.5","@babel/preset-typescript":"^7.16.5","@babel/runtime":"^7.11.2","@polkadot/extension-base":"^0.38.4","@polkadot/extension-dapp":"^0.38.4","@polkadot/extension-inject":"^0.38.4","@types/chai":"^4.3.0","@types/mocha":"^9.0.0","babel-jest":"^27.4.5",chai:"^4.3.4","jest-cli":"^27.4.5","jsdom-global":"^3.0.2",mocha:"^9.1.3",parcel:"^2.14.4","ts-jest":"^27.1.2","ts-node":"^10.4.0"},devDependencies:{"@babel/core":"^7.8.3","@babel/preset-env":"^7.8.3","babel-loader":"^8.0.6",jest:"^27.4.5","parcel-bundler":"^1.12.4","parcel-plugin-static-files-copy":"^2.6.0",prettier:"^1.19.1",typescript:"^4.5.4"},staticFiles:{staticPath:["extension"]},jest:{transform:{"^.+\\.(t|j)s?$":"ts-jest"}}};
},{}],"QCba":[function(require,module,exports) {
"use strict";var e=this&&this.__assign||function(){return(e=Object.assign||function(e){for(var t,n=1,s=arguments.length;n<s;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)},t=this&&this.__awaiter||function(e,t,n,s){return new(n||(n=Promise))(function(o,r){function i(e){try{u(s.next(e))}catch(t){r(t)}}function a(e){try{u(s.throw(e))}catch(t){r(t)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(i,a)}u((s=s.apply(e,t||[])).next())})},n=this&&this.__generator||function(e,t){var n,s,o,r,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return r={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(r[Symbol.iterator]=function(){return this}),r;function a(r){return function(a){return function(r){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,s&&(o=2&r[0]?s.return:r[0]?s.throw||((o=s.return)&&o.call(s),0):s.next)&&!(o=o.call(s,r[1])).done)return o;switch(s=0,o&&(r=[2&r[0],o.value]),r[0]){case 0:case 1:o=r;break;case 4:return i.label++,{value:r[1],done:!1};case 5:i.label++,s=r[1],r=[0];continue;case 7:r=i.ops.pop(),i.trys.pop();continue;default:if(!(o=(o=i.trys).length>0&&o[o.length-1])&&(6===r[0]||2===r[0])){i=0;continue}if(3===r[0]&&(!o||r[1]>o[0]&&r[1]<o[3])){i.label=r[1];break}if(6===r[0]&&i.label<o[1]){i.label=o[1],o=r;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(r);break}o[2]&&i.ops.pop(),i.trys.pop();continue}r=t.call(e,i)}catch(a){r=[6,a],s=0}finally{n=o=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}([r,a])}}},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});var o=require("@polkadot/extension-base/page"),r=require("@polkadot/extension-inject"),i=s(require("./handlers")),a=s(require("../package.json"));function u(){(0,r.injectExtension)(o.enable,{name:"polkadot-js",version:a.default.version}),window.injectedWeb3["nova-wallet"]=window.injectedWeb3["polkadot-js"]}var c=function(){function s(){var e=this;this.handlers=new i.default,window.send=this.sendRequest,window.addEventListener("message",function(t){var n=t.data;t.source===window&&("content"===n.origin?n.id?(0,o.handleResponse)(n):console.error("Missing id for response."):"page"===n.origin&&e.handleMessage(n))}),u(),window.walletExtension={onAppResponse:this.onAppResponse.bind(this),onAppSubscription:this.onAppSubscription.bind(this),isNovaWallet:!0}}return s.prototype.postResponse=function(e){this._postMessage("content",e)},s.prototype.sendRequest=function(e){this._postMessage("dapp-request",e)},s.prototype._postMessage=function(t,n){window.postMessage(e(e({},n),{origin:t}),"*")},s.prototype.sendAppRequest=function(e){var s=e.id,o=e.message,r=e.request;return t(this,void 0,void 0,function(){var e=this;return n(this,function(t){return[2,new Promise(function(t,n){e.handlers.addHandler(s,t,n),console.log("Saved handler for id: {id}"),e.sendRequest({id:s,msgType:o,request:r,url:window.location.href})})]})})},s.prototype.onAppResponse=function(e,t,n){var s=this.handlers.getHandler(e);console.log("Got handler for id: {id}"),s&&(n?s.reject(n):s.resolve(t))},s.prototype.onAppSubscription=function(e,t){this.postResponse({id:e,subscription:t})},s.prototype.handleMessage=function(e){return t(this,void 0,void 0,function(){var t,s;return n(this,function(n){switch(n.label){case 0:switch(e.message){case"pub(authorize.tab)":case"pub(metadata.list)":case"pub(metadata.provide)":case"pub(accounts.list)":case"pub(accounts.subscribe)":case"pub(bytes.sign)":case"pub(extrinsic.sign)":return[3,1]}return[3,4];case 1:return n.trys.push([1,3,,4]),[4,this.sendAppRequest(e)];case 2:return t=n.sent(),[2,this.postResponse({id:e.id,response:t})];case 3:return s=n.sent(),[2,this.postResponse({id:e.id,error:s.message})];case 4:throw new Error("Unable to handle message: ".concat(e.message))}})})},s}(),p=new c;exports.default=p;
},{"@polkadot/extension-base/page":"q70l","@polkadot/extension-inject":"ZSaT","./handlers":"GzV5","../package.json":"EHrm"}]},{},["QCba"], null)