skeleton.

This commit is contained in:
fiatjaf
2022-01-09 21:30:15 -03:00
commit 853a2b304b
13 changed files with 1316 additions and 0 deletions

143
.eslintrc.json Normal file
View File

@@ -0,0 +1,143 @@
{
"root": true,
"parserOptions": {
"ecmaVersion": 9,
"ecmaFeatures": {
"jsx": true
},
"sourceType": "module",
"allowImportExportEverywhere": false
},
"env": {
"es6": true,
"node": true
},
"plugins": [
"babel"
],
"globals": {
"document": false,
"navigator": false,
"window": false,
"location": false,
"URL": false,
"URLSearchParams": false,
"fetch": false,
"EventSource": false,
"localStorage": false,
"sessionStorage": false
},
"rules": {
"accessor-pairs": 2,
"arrow-spacing": [2, { "before": true, "after": true }],
"block-spacing": [2, "always"],
"brace-style": [2, "1tbs", { "allowSingleLine": true }],
"comma-dangle": 0,
"comma-spacing": [2, { "before": false, "after": true }],
"comma-style": [2, "last"],
"constructor-super": 2,
"curly": [0, "multi-line"],
"dot-location": [2, "property"],
"eol-last": 2,
"eqeqeq": [2, "allow-null"],
"generator-star-spacing": [2, { "before": true, "after": true }],
"handle-callback-err": [2, "^(err|error)$" ],
"indent": 0,
"jsx-quotes": [2, "prefer-double"],
"key-spacing": [2, { "beforeColon": false, "afterColon": true }],
"keyword-spacing": [2, { "before": true, "after": true }],
"new-cap": 0,
"new-parens": 0,
"no-array-constructor": 2,
"no-caller": 2,
"no-class-assign": 2,
"no-cond-assign": 2,
"no-const-assign": 2,
"no-control-regex": 0,
"no-debugger": 0,
"no-delete-var": 2,
"no-dupe-args": 2,
"no-dupe-class-members": 2,
"no-dupe-keys": 2,
"no-duplicate-case": 2,
"no-empty-character-class": 2,
"no-empty-pattern": 2,
"no-eval": 0,
"no-ex-assign": 2,
"no-extend-native": 2,
"no-extra-bind": 2,
"no-extra-boolean-cast": 2,
"no-extra-parens": [2, "functions"],
"no-fallthrough": 2,
"no-floating-decimal": 2,
"no-func-assign": 2,
"no-implied-eval": 2,
"no-inner-declarations": [0, "functions"],
"no-invalid-regexp": 2,
"no-irregular-whitespace": 2,
"no-iterator": 2,
"no-label-var": 2,
"no-labels": [2, { "allowLoop": false, "allowSwitch": false }],
"no-lone-blocks": 2,
"no-mixed-spaces-and-tabs": 2,
"no-multi-spaces": 2,
"no-multi-str": 2,
"no-multiple-empty-lines": [2, { "max": 2 }],
"no-native-reassign": 2,
"no-negated-in-lhs": 2,
"no-new": 0,
"no-new-func": 2,
"no-new-object": 2,
"no-new-require": 2,
"no-new-symbol": 2,
"no-new-wrappers": 2,
"no-obj-calls": 2,
"no-octal": 2,
"no-octal-escape": 2,
"no-path-concat": 0,
"no-proto": 2,
"no-redeclare": 2,
"no-regex-spaces": 2,
"no-return-assign": 0,
"no-self-assign": 2,
"no-self-compare": 2,
"no-sequences": 2,
"no-shadow-restricted-names": 2,
"no-spaced-func": 2,
"no-sparse-arrays": 2,
"no-this-before-super": 2,
"no-throw-literal": 2,
"no-trailing-spaces": 2,
"no-undef": 2,
"no-undef-init": 2,
"no-unexpected-multiline": 2,
"no-unneeded-ternary": [2, { "defaultAssignment": false }],
"no-unreachable": 2,
"no-unused-vars": [2, { "vars": "local", "args": "none", "varsIgnorePattern": "^_"}],
"no-useless-call": 2,
"no-useless-constructor": 2,
"no-with": 2,
"one-var": [0, { "initialized": "never" }],
"operator-linebreak": [2, "after", { "overrides": { "?": "before", ":": "before" } }],
"padded-blocks": [2, "never"],
"quotes": [2, "single", { "avoidEscape": true, "allowTemplateLiterals": true }],
"semi": [2, "never"],
"semi-spacing": [2, { "before": false, "after": true }],
"space-before-blocks": [2, "always"],
"space-before-function-paren": 0,
"space-in-parens": [2, "never"],
"space-infix-ops": 2,
"space-unary-ops": [2, { "words": true, "nonwords": false }],
"spaced-comment": 0,
"template-curly-spacing": [2, "never"],
"use-isnan": 2,
"valid-typeof": 2,
"wrap-iife": [2, "any"],
"yield-star-spacing": [2, "both"],
"yoda": [0]
}
}

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
node_modules

9
.prettierrc.yaml Normal file
View File

@@ -0,0 +1,9 @@
arrowParens: avoid
bracketSpacing: false
jsxBracketSameLine: false
printWidth: 80
proseWrap: preserve
semi: false
singleQuote: true
trailingComma: none
useTabs: false

19
README.md Normal file
View File

@@ -0,0 +1,19 @@
# nos2x
### notes and other stuff signed by an extension)
## Nostr Signer Extension
This allows you to sign [Nostr](https://github.com/fiatjaf/nostr) events on web-apps without having to give them your keys.
It provides a `window.nostr` object which has the following methods:
```
async window.nostr.getPublicKey(): string // returns your public key as hex
async window.nostr.signEvent(event) // signs the given event in place
```
---
LICENSE: public domain.
Icon made by <a href="https://www.freepik.com" title="Freepik">Freepik</a> from <a href="https://www.flaticon.com/" title="Flaticon">www.flaticon.com</a>.

15
babel.config.js Normal file
View File

@@ -0,0 +1,15 @@
module.exports = api => {
return {
presets: [
[
'@quasar/babel-preset-app',
api.caller(caller => caller && caller.target === 'node')
? { targets: { node: 'current' } }
: {}
]
]
}
}

9
extension/background.js Normal file
View File

@@ -0,0 +1,9 @@
browser.runtime.onMessage.addListener((req, sender, reply) => {
switch (req.type) {
case 'getPublicKey':
reply({})
break
case 'signEvent':
break
}
})

View File

@@ -0,0 +1,24 @@
// inject the script that will provide window.nostr
let script = document.createElement('script')
script.src = 'nostr-provider.js'
document.head.appendChild(script)
// listen for messages from that script
window.addEventListener('message', async ev => {
if (ev.source !== window) return
if (!ev.data || ev.data.ext !== 'nostr') {
// pass on to background
var reply
try {
reply = browser.runtime.sendMessage({
...ev.data,
host: window.location.host
})
} catch (error) {
reply = {error}
}
// return response
window.postMessage({id: ev.data.id, reply})
}
})

29
extension/manifest.json Normal file
View File

@@ -0,0 +1,29 @@
{
"name": "nos2x",
"description": "Nostr Signer Extension",
"version": "0.0.1",
"manifest_version": 2,
"icons": {
"16": "icons/icon-16x16.png",
"48": "icons/icon-48x48.png",
"128": "icons/icon-128x128.png"
},
"options_page": "options.html",
"background": {
"scripts": [
"background.js"
],
"persistent": false
},
"content_scripts": [{
"matches": ["<all_urls>"],
"js": [
"content-script.js"
]
}],
"permissions": [
"activeTab",
"storage"
],
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self';"
}

View File

@@ -0,0 +1,4 @@
window.nostr = {
getPublicKey() {},
signEvent(event) {}
}

0
extension/options.html Normal file
View File

BIN
icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

8
package.json Normal file
View File

@@ -0,0 +1,8 @@
{
"dependencies": {
"esbuild": "^0.14.11",
"eslint": "^8.6.0",
"nostr-tools": "^0.17.0",
"prettier": "^2.5.1"
}
}

1055
yarn.lock Normal file

File diff suppressed because it is too large Load Diff