deep_linking #127

Open
anomalist wants to merge 70 commits from deep_linking into master
  1. 6
      .env.example
  2. 25
      .eslintrc.js
  3. 22
      .gitignore
  4. 129
      BUILDING.md
  5. 559
      CHANGELOG.md
  6. 5
      Gemfile
  7. 21
      README.md
  8. BIN
      android/.gradle/8.11.1/checksums/checksums.lock
  9. BIN
      android/.gradle/8.11.1/checksums/md5-checksums.bin
  10. BIN
      android/.gradle/8.11.1/checksums/sha1-checksums.bin
  11. BIN
      android/.gradle/8.11.1/executionHistory/executionHistory.bin
  12. BIN
      android/.gradle/8.11.1/executionHistory/executionHistory.lock
  13. BIN
      android/.gradle/8.11.1/fileChanges/last-build.bin
  14. BIN
      android/.gradle/8.11.1/fileHashes/fileHashes.bin
  15. BIN
      android/.gradle/8.11.1/fileHashes/fileHashes.lock
  16. BIN
      android/.gradle/8.11.1/fileHashes/resourceHashesCache.bin
  17. 0
      android/.gradle/8.11.1/gc.properties
  18. BIN
      android/.gradle/buildOutputCleanup/buildOutputCleanup.lock
  19. 2
      android/.gradle/buildOutputCleanup/cache.properties
  20. BIN
      android/.gradle/file-system.probe
  21. 0
      android/.gradle/vcs-1/gc.properties
  22. 3
      android/Gemfile
  23. 11
      android/app/build.gradle
  24. 2
      android/app/capacitor.build.gradle
  25. 398
      android/app/lint-baseline.xml
  26. 7
      android/app/src/main/AndroidManifest.xml
  27. 21
      android/app/src/main/assets/capacitor.config.json
  28. 6
      android/app/src/main/assets/capacitor.plugins.json
  29. 11
      android/app/src/main/assets/public/assets/AccountViewView-YLErCGrQ.js
  30. 1
      android/app/src/main/assets/public/assets/ClaimAddRawView-r1zivfpU.js
  31. 8
      android/app/src/main/assets/public/assets/ClaimCertificateView-BzzNchV3.js
  32. 1
      android/app/src/main/assets/public/assets/ClaimView-BUQRK2PH.css
  33. 1
      android/app/src/main/assets/public/assets/ClaimView-TDchL-2m.js
  34. 1
      android/app/src/main/assets/public/assets/ConfirmContactView-TGGkhQR0.js
  35. 1
      android/app/src/main/assets/public/assets/ConfirmGiftView-B1gN6jJz.js
  36. 1
      android/app/src/main/assets/public/assets/ContactAmountsView-BdmE91Ad.js
  37. 1
      android/app/src/main/assets/public/assets/ContactEditView-B5dhe40j.js
  38. 1
      android/app/src/main/assets/public/assets/ContactGiftingView-BuFRYhw_.js
  39. 1
      android/app/src/main/assets/public/assets/ContactImportView-BFNfn1SC.js
  40. 1
      android/app/src/main/assets/public/assets/ContactNameDialog-CKcSc-WW.js
  41. 5
      android/app/src/main/assets/public/assets/ContactQRScanShowView-CBPOZUSt.js
  42. 1
      android/app/src/main/assets/public/assets/ContactScanView-C6Zm1ZTY.js
  43. 1
      android/app/src/main/assets/public/assets/ContactsView-DyJfZfmm.js
  44. 1
      android/app/src/main/assets/public/assets/DIDView-CYsX9_-v.css
  45. 1
      android/app/src/main/assets/public/assets/DIDView-DHQTbrWX.js
  46. 1
      android/app/src/main/assets/public/assets/DiscoverView-DB9VWQSd.css
  47. 1
      android/app/src/main/assets/public/assets/DiscoverView-rWbfArNI.js
  48. 1
      android/app/src/main/assets/public/assets/EntityIcon-BCaUw-N4.js
  49. 3
      android/app/src/main/assets/public/assets/GiftedDetailsView-C-hGAQc_.js
  50. 1
      android/app/src/main/assets/public/assets/GiftedDialog-Pytrg6u7.js
  51. 1
      android/app/src/main/assets/public/assets/HelpNotificationTypesView-BcHKmg9i.js
  52. 1
      android/app/src/main/assets/public/assets/HelpNotificationsView-DTwRcdk3.js
  53. 1
      android/app/src/main/assets/public/assets/HelpOnboardingView-DzGyZoaR.js
  54. 1
      android/app/src/main/assets/public/assets/HelpView-DsXG13ZM.js
  55. 1
      android/app/src/main/assets/public/assets/HomeView-B5WscYpf.css
  56. 1
      android/app/src/main/assets/public/assets/HomeView-CXlWa-io.js
  57. 1
      android/app/src/main/assets/public/assets/IdentitySwitcherView-Djq6J6Uq.js
  58. 1
      android/app/src/main/assets/public/assets/ImageMethodDialog-BWunsoUB.js
  59. 1
      android/app/src/main/assets/public/assets/ImageMethodDialog-CTvzd81h.css
  60. 1
      android/app/src/main/assets/public/assets/ImportAccountView-BQQjRLVc.js
  61. 1
      android/app/src/main/assets/public/assets/ImportDerivedAccountView-C1I7EFbj.js
  62. 1
      android/app/src/main/assets/public/assets/InfiniteScroll-BPyLyh-5.js
  63. 1
      android/app/src/main/assets/public/assets/InviteOneAcceptView-Cw0tVuoN.js
  64. 1
      android/app/src/main/assets/public/assets/InviteOneView-DYmASMSL.js
  65. 1
      android/app/src/main/assets/public/assets/MembersList-DHiPQX6B.js
  66. 1
      android/app/src/main/assets/public/assets/NewActivityView-BUxprUgh.js
  67. 1
      android/app/src/main/assets/public/assets/NewEditAccountView-08XchwHh.js
  68. 1
      android/app/src/main/assets/public/assets/NewEditProjectView-BpvVO4QU.js
  69. 1
      android/app/src/main/assets/public/assets/NewIdentifierView-BcMJ3Mja.js
  70. 1
      android/app/src/main/assets/public/assets/OfferDetailsView-D06S-2fj.js
  71. 1
      android/app/src/main/assets/public/assets/OfferDialog-CbOg1Z4I.js
  72. 1
      android/app/src/main/assets/public/assets/OnboardMeetingListView-CKTUf9rb.js
  73. 1
      android/app/src/main/assets/public/assets/OnboardMeetingMembersView-CiyaSIo1.js
  74. 1
      android/app/src/main/assets/public/assets/OnboardMeetingSetupView-BcK1UlJ5.js
  75. 1
      android/app/src/main/assets/public/assets/OnboardingDialog-B6NPp3C9.js
  76. 1
      android/app/src/main/assets/public/assets/OnboardingDialog-DBDPRnmU.css
  77. 1
      android/app/src/main/assets/public/assets/PhotoDialog-VFFukDsZ.css
  78. 20
      android/app/src/main/assets/public/assets/PhotoDialog-YJiUta46.js
  79. 1
      android/app/src/main/assets/public/assets/ProjectIcon-YlqUDe0d.js
  80. 1
      android/app/src/main/assets/public/assets/ProjectViewView-76gMhKPr.js
  81. 1
      android/app/src/main/assets/public/assets/ProjectsView-BmYqJOlI.js
  82. 1
      android/app/src/main/assets/public/assets/PushNotificationPermission-DHBIo4Kb.js
  83. 0
      android/app/src/main/assets/public/assets/PushNotificationPermission-tn0RQdqM.css
  84. 1
      android/app/src/main/assets/public/assets/QuickActionBvcBeginView-4yNKq9KY.js
  85. 1
      android/app/src/main/assets/public/assets/QuickActionBvcEndView-DP7Td2Wb.js
  86. 1
      android/app/src/main/assets/public/assets/QuickActionBvcView-ChtpH9P5.js
  87. 1
      android/app/src/main/assets/public/assets/QuickNav-knx6iT2l.js
  88. 1
      android/app/src/main/assets/public/assets/RecentOffersToUserProjectsView-C46Za4gr.js
  89. 1
      android/app/src/main/assets/public/assets/RecentOffersToUserView-DXfEKlxZ.js
  90. 1
      android/app/src/main/assets/public/assets/SearchAreaView-BWuZiMV4.js
  91. 1
      android/app/src/main/assets/public/assets/SeedBackupView-BKuqLWuk.js
  92. 1
      android/app/src/main/assets/public/assets/ShareMyContactInfoView-zbUpYmQk.js
  93. 1
      android/app/src/main/assets/public/assets/SharedPhotoView-CE4fTsIo.js
  94. 1
      android/app/src/main/assets/public/assets/StartView-BSIe2Mpp.js
  95. 3563
      android/app/src/main/assets/public/assets/StatisticsView-BLj_phFS.js
  96. 1
      android/app/src/main/assets/public/assets/TestView-BKEgz8iQ.js
  97. 1
      android/app/src/main/assets/public/assets/TopMessage-ClRBomc-.js
  98. 1
      android/app/src/main/assets/public/assets/UserNameDialog-CHrrQR5T.js
  99. 1
      android/app/src/main/assets/public/assets/UserProfileView-CvmDXlki.js
  100. 1
      android/app/src/main/assets/public/assets/_isString-BCVd99Zj.js

6
.env.example

@ -0,0 +1,6 @@
# Admin DID credentials
ADMIN_DID=did:ethr:0x0000694B58C2cC69658993A90D3840C560f2F51F
ADMIN_PRIVATE_KEY=2b6472c026ec2aa2c4235c994a63868fc9212d18b58f6cbfe861b52e71330f5b
# API Configuration
ENDORSER_API_URL=https://test-api.endorser.ch/api/v2/claim

25
.eslintrc.js

@ -5,30 +5,27 @@ module.exports = {
es2022: true,
},
extends: [
"plugin:vue/vue3-essential",
"plugin:vue/vue3-recommended",
"eslint:recommended",
"@vue/typescript/recommended",
"plugin:prettier/recommended",
"plugin:prettier/recommended"
],
// parserOptions: {
// ecmaVersion: 2020,
// },
rules: {
"max-len": [
"warn",
{
code: 120,
ignoreComments: true, // why does this not make it allow comment of any length?
"max-len": ["warn", {
code: 100,
ignoreComments: true,
ignorePattern: '^\\s*class="[^"]*"$',
ignoreStrings: true,
ignoreTemplateLiterals: true,
ignoreTrailingComments: true,
ignoreUrls: true,
},
],
"no-console": process.env.NODE_ENV === "production" ? "warn" : "off",
"no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off",
// "prettier/prettier": ["warn", { printWidth: 120 }], // removes errors but adds thousands of warnings
"@typescript-eslint/no-unnecessary-type-constraint": "off",
}],
"no-console": process.env.NODE_ENV === "production" ? "error" : "warn",
"no-debugger": process.env.NODE_ENV === "production" ? "error" : "warn",
"@typescript-eslint/no-explicit-any": "warn",
"@typescript-eslint/explicit-function-return-type": "off",
"@typescript-eslint/no-unnecessary-type-constraint": "off"
},
};

22
.gitignore

@ -37,3 +37,25 @@ pnpm-debug.log*
/dist-electron-build/
/dist-capacitor/
/test-playwright-results/
playwright-tests
test-playwright
dist-electron-packages
ios
.ruby-version
+.env
# Generated test files
.generated/
# Fastlane
ios/fastlane/report.xml
ios/fastlane/Preview.html
ios/fastlane/screenshots
ios/fastlane/test_output
android/fastlane/report.xml
android/fastlane/Preview.html
android/fastlane/screenshots
android/fastlane/test_output
.env.default
vendor/

129
BUILDING.md

@ -14,12 +14,14 @@ This guide explains how to build TimeSafari for different platforms.
## Initial Setup
1. Clone the repository:
```bash
git clone [repository-url]
cd TimeSafari
```
2. Install dependencies:
```bash
npm install
```
@ -29,6 +31,7 @@ This guide explains how to build TimeSafari for different platforms.
To build for web deployment:
1. Run the production build:
```bash
npm run build
```
@ -36,6 +39,7 @@ To build for web deployment:
2. The built files will be in the `dist` directory.
3. To test the production build locally:
```bash
npm run serve
```
@ -45,11 +49,13 @@ To build for web deployment:
### Building for Linux
1. Build the electron app in production mode:
```bash
npm run build:electron-prod
```
2. Package the Electron app for Linux:
```bash
# For AppImage (recommended)
npm run electron:build-linux
@ -65,12 +71,14 @@ To build for web deployment:
### Running the Packaged App
- AppImage: Make executable and run
```bash
chmod +x dist-electron-packages/TimeSafari-*.AppImage
./dist-electron-packages/TimeSafari-*.AppImage
```
- DEB: Install and run
```bash
sudo dpkg -i dist-electron-packages/timesafari_*_amd64.deb
timesafari
@ -95,21 +103,25 @@ npm run build:electron-prod && npm run electron:start
Prerequisites: macOS with Xcode installed
1. Build the web assets:
```bash
npm run build -- --mode capacitor
npm run build:capacitor
```
2. Add iOS platform if not already added:
```bash
npx cap add ios
```
3. Update iOS project with latest build:
```bash
npx cap sync ios
```
4. Open the project in Xcode:
```bash
npx cap open ios
```
@ -121,42 +133,128 @@ Prerequisites: macOS with Xcode installed
Prerequisites: Android Studio with SDK installed
1. Build the web assets:
```bash
npm run build -- --mode capacitor
rm -rf dist
npm run build:web
npm run build:capacitor
```
2. Add Android platform if not already added:
```bash
npx cap add android
```
3. Update Android project with latest build:
```bash
npx cap sync android
```
4. Open the project in Android Studio:
```bash
npx cap open android
```
5. Use Android Studio to build and run on emulator or device.
## Building Android for deep links
You must add the following intent filter to the `android/app/src/main/AndroidManifest.xml` file:
```xml
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="timesafari" />
</intent-filter>
```
You must also add the following to the `android/app/build.gradle` file:
```gradle
android {
// ... existing config ...
lintOptions {
disable 'UnsanitizedFilenameFromContentProvider'
abortOnError false
baseline file("lint-baseline.xml")
// Ignore Capacitor module issues
ignore 'DefaultLocale'
ignore 'UnsanitizedFilenameFromContentProvider'
ignore 'LintBaseline'
ignore 'LintBaselineFixed'
}
}
```
Modify `/android/build.gradle` to use a stable version of AGP and make sure Kotlin version is compatible.
```gradle
buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
// Use a stable version of AGP
classpath 'com.android.tools.build:gradle:8.1.0'
// Make sure Kotlin version is compatible
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.0"
}
}
allprojects {
repositories {
google()
mavenCentral()
}
}
// Add this to handle version conflicts
configurations.all {
resolutionStrategy {
force 'org.jetbrains.kotlin:kotlin-stdlib:1.8.0'
force 'org.jetbrains.kotlin:kotlin-stdlib-common:1.8.0'
}
}
```
## Building Android from the console
```bash
cd android
./gradlew clean
./gradlew build -Dlint.baselines.continue=true
cd ..
npx cap run android
```
## Development
To run the application in development mode:
1. Start the development server:
```bash
npm run dev
```
## PyWebView Desktop Build
### Prerequisites
### Prerequisites for PyWebView
- Python 3.8 or higher
- pip (Python package manager)
- virtualenv (recommended)
- System dependencies:
```bash
# For Ubuntu/Debian
sudo apt-get install python3-webview
@ -173,7 +271,9 @@ To run the application in development mode:
```
### Setup
1. Create and activate a virtual environment (recommended):
```bash
python -m venv .venv
source .venv/bin/activate # On Linux/macOS
@ -182,6 +282,7 @@ To run the application in development mode:
```
2. Install Python dependencies:
```bash
pip install -r requirements.txt
```
@ -189,13 +290,16 @@ To run the application in development mode:
### Troubleshooting
If encountering PyInstaller version errors:
```bash
# Try installing the latest stable version
pip install --upgrade pyinstaller
```
### Development
### Development of PyWebView
1. Start the PyWebView development build:
```bash
npm run pywebview:dev
```
@ -203,26 +307,33 @@ pip install --upgrade pyinstaller
### Building for Distribution
#### Linux
```bash
npm run pywebview:package-linux
```
The packaged application will be in `dist/TimeSafari`
#### Windows
```bash
npm run pywebview:package-win
```
The packaged application will be in `dist/TimeSafari`
#### macOS
```bash
npm run pywebview:package-mac
```
The packaged application will be in `dist/TimeSafari`
## Testing
Run local tests:
```bash
npm run test-local
```
@ -232,11 +343,13 @@ See [TESTING.md](test-playwright/TESTING.md) for more details.
## Linting
Check code style:
```bash
npm run lint
```
Fix code style issues:
```bash
npm run lint-fix
```
@ -257,16 +370,20 @@ See `.env.*` files for configuration.
## Deployment
### Version Management
1. Update CHANGELOG.md with new changes
2. Update version in package.json
3. Commit changes and tag release:
```bash
git tag <VERSION_TAG>
git push origin <VERSION_TAG>
```
4. After deployment, update package.json with next version + "-beta"
### Test Server
```bash
# Build using staging environment
npm run build -- --mode staging
@ -276,6 +393,7 @@ rsync -azvu -e "ssh -i ~/.ssh/<YOUR_KEY>" dist ubuntutest@test.timesafari.app:ti
```
### Production Server
```bash
# On the production server:
pkgx +npm sh
@ -290,7 +408,7 @@ cd -
mv time-safari/dist time-safari-dist-prev.0 && mv crowd-funder-for-time-pwa/dist time-safari/
```
## Troubleshooting
## Troubleshooting Builds
### Common Build Issues
@ -307,4 +425,3 @@ mv time-safari/dist time-safari-dist-prev.0 && mv crowd-funder-for-time-pwa/dist
- For iOS: Xcode command line tools must be installed
- For Android: Correct SDK version must be installed
- Check Capacitor configuration in capacitor.config.ts

559
CHANGELOG.md

@ -15,269 +15,347 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [0.4.4] - 2025.02.17
### Fixed
- On production (due to data?) the search results would disappear after scrolling down. Now we don't show any results when going to the people map with a shortcut.
### Fixed in 0.4.4
- On production (due to data?) the search results would disappear after scrolling down. Now we don't show any results when going to the people map with a shortcut.
## [0.4.3] - 2025.02.17
### Added
- Discover query parameter searchPeople to go directly to the people map
### Added in 0.4.3
- Discover query parameter searchPeople to go directly to the people map
## [0.4.2] - 2025.02.17
### Added
- Capacitor build to Android
- Capacitor on iOS and Android
### Fixed
- Path issues
- Path issues
## [0.4.1] - 2025.02.16
### Fixed
### Fixed in 0.4.1
- nostr build issue
- Linting
## [0.4.0] - 2025.02.14
### Changed
- Images in the home feed now take up the full width of the card.
- Clicking the image previously, would open the image in a new tab. Now, clicking the image opens the image in a lightbox view.
### Added
### Added in 0.4.0
- Clicking an image also now displays an in-app lightbox view of the image.
- The lightbox view includes a download button for the image in mobile view.
## [0.3.57] - 2025.02.11
### Added
- Automatic user creation in onboarding meetings
### Added in 0.3.57
- Automatic user creation in onboarding meetings
## [0.3.55] - 2025.02.07
### Added
- End time for projects
### Added in 0.3.55
- End time for projects
## [0.3.54] - 2025.02.06
### Added
- Group onboarding meetings
### Added in 0.3.54
- Group onboarding meetings
## [0.3.53] - 2025.01.30
### Added
- Hints for contacting the creator of a project
### Added in 0.3.53
- Hints for contacting the creator of a project
## [0.3.52] - 2025.01.22
### Fixed
- User profile endpoint server for map was broken.
### Fixed in 0.3.52
- User profile endpoint server for map was broken.
## [0.3.51] - 2025.01.22
### Fixed
- User profile map jumped on first zoom.
### Fixed in 0.3.51
- User profile map jumped on first zoom.
## [0.3.50] - 2025.01.20 - b9fedcd3fd3e34c3fb0fc79150d1a81a76eaeb40
### Added
- User public profiles
### Added in 0.3.50
- User public profiles
## [0.3.49] - 2025.01.09 - 36301ed238ff84df25bb11a8d44a295ee7eaf0f8
### Changed
### Changed in 0.3.49
- Make all external contact links direct to the contact-import page.
- Handle all new-single-contact JWTs in the contacts page, and multiple-contact JWTs in the contacts-import page.
## [0.3.48] - 2025.01.08 - 398f3e64a376789f7eb1c400cd886f5a2cacd588 (but app shows 07c4e58)
### Added
- More sanity-checks on contact-import JWT
### Added in 0.3.48
- More sanity-checks on contact-import JWT
## [0.3.47] - 2025.01.06 - 5bf6dd1ee32ca7cc46d39bd7afca58365b422f93
### Added
### Added in 0.3.47
- Notes on contacts page with new contact-edit page
- Contact methods (only on contact-edit page and under DID details)
- DID view with no DID shows user's info.
### Changed
### Changed in 0.3.47
- URL for user's contact info is now URL to this app (not endorser.ch).
- Extended details (eg. full claim) is beneath details link on claim page.
## [0.3.46] - 2025.01.03 - 9e7056616b5e5acc51e5a8cf7354d408029fefb3
### Added
### Added in 0.3.46
- More action-oriented questions for the gift prompts
### Fixed
- Contact-list import set visibility for all, even if not chosen.
### Fixed in 0.3.46
- Contact-list import set visibility for all, even if not chosen.
## [0.3.45] - 2025.01.01 - 65402dc68ce69ccc6cb9aa8d2e7a9249bf4298e0
### Fixed
- Previous project links stayed when following a link.
### Fixed in 0.3.45
- Previous project links stayed when following a link.
## [0.3.44] - 2024.12.31 - 694b22987b05482e4527c2478bbe15e6b6f3b532
### Added
- Project counts on a map
### Added in 0.3.44
- Project counts on a map
## [0.3.42] - 2024.12.27 - 9751934bc24a1040415a8cfeacbae59ed91f92a5
### Added
### Added in 0.3.42
- Link from certificate page to the claim
### Changed
### Changed in 0.3.42
- Contact data sharing is now a verified JWT.
- Feed pictures are larger.
## [0.3.41] - 2024.12.21 - ff6d14138f26daea6216b051562f0a04681f69fc
### Added
- Link from certificate page to the claim
### Added in 0.3.41
- Link from certificate page to the claim
## [0.3.40] - 2024.12.20 - 77290d9fed3c364243793dc3e9bfe2e994a016b8
### Added
- Only show issuer on certificate if it's not the agent.
### Added in 0.3.40
- Only show issuer on certificate if it's not the agent.
## [0.3.39] - 2024.12.20 - d8819155e2acd2b57fdab523168fa5d1d09e80cc
### Added
- Page for a framed claim certificate
### Added in 0.3.39
- Page for a framed claim certificate
## [0.3.38] - 2024.12.14 - f8cae5ad4fee1f114320dcce052299eab12108b2
### Fixed
- Error on BVC confirmation screen (from IndexedDB refactor)
### Fixed in 0.3.38
- Error on BVC confirmation screen (from IndexedDB refactor)
## [0.3.37] - 2024.12.13 - 4d805b43cd25eed73cdd6651f36ad1ec8c109555
### Added
### Added in 0.3.37
- Record a give from a project on the project page.
- New button on home page opens the gifted dialog.
- On confirmation buttons on the project page gives, mark when unavailable and explain why.
### Changed
### Changed in 0.3.37
- Moved the secret into IndexedDB (and out of localStorage) for more reliability.
- New "invite" destination page helps troubleshoot when JWT link doesn't come through.
### Fixed
### Fixed in 0.3.37
- Problem showing claim issuer name
- Problem going "back" from a project page
## [0.3.36] - 2024.11.24 - c8d23647d165016f8a8f575e13d32583242e53ac
### Changed
### Changed in 0.3.36
- More friendly default reminder message
- Blue borders around people to indicate clickability
## [0.3.35] - 2024.11.24 - bff7d0a6320b70349185e26bfac72e3bb17f76df
### Added
### Added in 0.3.35
- Daily reliable, hard-coded notification message
- Setting to change the partner API server
## [0.3.33] - 2024.11.07 - adb7b16ecf1343c39cba71a7d6bb0e7a973e1102
### Fixed
### Fixed in 0.3.33
- Affirm Delivery button on offer claim page didn't work.
- Plans were not showing by default on project page.
## [0.3.32] - 2024.11.06 - 9a3fa38a3fd28f977e06f0265fc39e635c9c5ccd
### Added
- Highlight in green new offers to user & to user's projects on the front page.
### Added in 0.3.32
- Highlight in green new offers to user & to user's projects on the front page.
## [0.3.31] - 2024.10.25 - 07c02ab98a09d293dd90d9289a7872e7d681d296
### Changed
- Onboarding messages about offers
### Changed in 0.3.31
- Onboarding messages about offers
## [0.3.30]
### Added
- Onboarding messages
### Added in 0.3.30
- Onboarding messages
## [0.3.29] - 2024.10.09 - babd3832bdfe0c40eaa3869de1b41399a51713c1
### Added
### Added in 0.3.29
- Invite for a contact to join immediately
### Changed
### Changed in 0.3.29
- Send signed data to nostr endpoints to verify public key ownership.
- Enhanced help & help onboarding.
### Changed in DB or environment
- Uses Endorser.ch version 4.1.1
- Uses Endorser.ch version 4.1.1
## [0.3.28] - 2024.09.30 - 84720b94049d29cc0ddd99c50cef2e7176130133
### Added
### Added in 0.3.28
- Posting to nostr apps Trustroots & TripHopping
- Display of providers on claim view page
### Changed
### Changed in 0.3.28
- Switched BVC-meeting-ending gift to be a gift from the group.
### Changed in DB or environment
- Requires Endorser.ch version 4.1.0
### Changed in DB or environment in 0.3.28
- Requires Endorser.ch version 4.1.0
## [0.3.27] - 2024.09.22 - ee23e6f005e47f5bd6f04d804599f6395371b0e4
### Fixed
### Fixed in 0.3.27
- Error loading BVC claims to confirm
- Really allow visibility of bulk-imported contacts
## [0.3.26] - 2024.09.16 - 8263ed2b29947b3ccc6f3133bbc9454c222bce28
### Added
### Added in 0.3.26
- Separate 'isRegistered' flag for each account
### Fixed
### Fixed in 0.3.26
- Failure to assign offers to their project
- Alert when looking at one's own activity if not in contacts.
## [0.3.25] - 2024.08.30 - dcbe02d877aecb4cdef2643d90e6595d246a9f82
### Added
### Added in 0.3.25
- "Ideas" now jumps directly to giving prompt or contact list.
### Fixed
### Fixed in 0.3.25
- Empty giver name on gifted-details view
- Previously visited project would show up on the giving-details page.
### Removed
- All unnecessary localStorage for project IDs
### Removed in 0.3.25
- All unnecessary localStorage for project IDs
## [0.3.23] - 2024.08.30
### Added
### Added in 0.3.23
- Sections in Help for different kinds of users
- Discovery page parameters so that links with search text work
- Message when no projects are found
## [0.3.21] - 2024.08.24 - a7b89f4bb6da928d56daeffaae7741fa74cc80bf
### Added
### Added in 0.3.21
- Send list of contacts to someone, and move individual contact actions to detail page.
- Prompt for name in pop-up, and send to different contact-sharing screens.
### Changed
- Moved contact actions from list onto detail page
### Changed in 0.3.21
- Moved contact actions from list onto detail page
## [0.3.20] - 2024.08.18 - 4064eb75a9743ca268bf00016fa0a5fc5dec4e30
### Fixed
### Fixed in 0.3.20
- Bad "give" verbiage on offer page
- Failing offer test
## [0.3.19] - 2024.08.18 - ee9c14942ceba993bf21a11249601f205158ec71
### Added
### Added in 0.3.19
- Update of an offer
- Recipient description in offer list
### Fixed
### Fixed in 0.3.19
- List of offers wasn't showing.
- Destination page after sharing photo was wrong.
## [0.3.17] - 2024.07.11 - cefa384ff1a2d922848c370640c096c529920fab
### Added
### Added in 0.3.17
- Photos on more screens
### Fixed
### Fixed in 0.3.17
- Share of a photo, including sharing a photo from webkit/Safari which never worked
### Changed in DB or environment
- Nothing (though there's a new temp field in IndexedDB)
### Changed in DB or environment in 0.3.17
- Nothing (though there's a new temp field in IndexedDB)
## [0.3.15] - 2024.08.04 - c8f0f2c2b16b9f0b4b47d40f7bf29058c7baa68e
### Added
### Added in 0.3.15
- Edit gives
- Page to edit claim JSON before submitting
- Update of imported contacts
@ -288,263 +366,364 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Cache signatures for reports for passkey-signed requests
- Refactor: consolidate alternative signing, eg. for passkeys & did:peer
- Playwright tests
### Changed
### Changed in 0.3.15
- Linked projects display below description (instead of at bottom)
### Fixed
### Fixed in 0.3.15
- Visibility toggle appearance
### Changed in DB or environment
- Nothing
### Changed in DB or environment in 0.3.15
- Nothing
## [0.3.14] - 2024.06.22 - 1611d22892f683f43856d2503eee7f391b6bbce8
### Added
### Added in 0.3.14
- Clearer give-confirmation screen
- BX currency https://thebx.medium.com/
- BX currency <https://thebx.medium.com/>
- Deselection of project on gifted details page
### Fixed
### Fixed in 0.3.14
- Don't show registration pop-up for a new contact that is registered
### Changed in DB or environment
- Nothing
### Changed in DB or environment in 0.3.14
- Nothing
## [0.3.13] - 2024.05.24 - 08b67984e443c58d9178ad3776013b0bce7afddc
### Added
### Added in 0.3.13
- Photos on projects
### Changed in DB or environment
- Nothing
### Changed in DB or environment in 0.3.13
- Nothing
## [0.3.12] - 2024.05.19 - 141fb39ad19c44d82fe1a33bf85115beacf50870
### Fixed
### Fixed in 0.3.12
- Photo share (share_target) failed because requests were sent to server
### Changed in DB or environment
- Nothing
### Changed in DB or environment in 0.3.12
- Nothing
## [0.3.11] - 2024.05.19 - 567bcad88dfb7e9ac8fea72530d1163985e4a7cc
### Added
### Added in 0.3.11
- Choose a file for gifts, and a URL for gifts & profiles
### Fixed
### Fixed in 0.3.11
- Multiple button pushes were required to switch camera
### Changed in DB or environment
- Nothing
### Changed in DB or environment in 0.3.11
- Nothing
## [0.3.10] - 2024.05.11 - 03ac31d98110f7828cf9acb366db8d01b185f64c
### Added
### Added in 0.3.10
- Share an image
- Choose a file on the device for a profile image
### Changed in DB or environment
- Nothing
### Changed in DB or environment in 0.3.10
- Nothing
## [0.3.9] - 2024.04.28 - 874e717e698b93a1ace9f588e675b8a3dccd7617
### Added
### Added in 0.3.9
- Offers on contacts page
- Checks on front page until they show as registered
### Changed
### Changed in 0.3.9
- Scanned contacts now add immediately and prompt for registration.
- Better UI for gives on contact page
- Better UI for all confirmation messages
### Fixed
### Fixed in 0.3.9
- Repeated elements at top of main feed
### Changed in DB or environment
- Nothing
### Changed in DB or environment in 0.3.9
- Nothing
## [0.3.8] - 2024.04.20 - 15c026c80ce03a26cae3ff80b0888934c101c7e2
### Added
### Added in 0.3.8
- Profile image for user
### Fixed
### Fixed in 0.3.8
- Slow loading of home page feed
### Changed in DB or environment
- Nothing
### Changed in DB or environment in 0.3.8
- Nothing
## [0.3.7] - 2024.04.10 - cf18f1543a700d62a5f9e764905a4aafe1fb229b
### Added
### Added in 0.3.7
- Filter on home page feed
- Ability to set time of daily notification
- Jump to app on click of notification
### Changed
### Changed in 0.3.7
- Built with vite
- Descriptions on home page to include projects
### Changed in DB or environment
- Nothing
### Changed in DB or environment in 0.3.7
- Nothing
## [0.3.6] - 2024.03.24 - 3a07e31d6313ab95711265562d9023c42916e141
### Added
### Added in 0.3.6
- Button to mirror photo during video
- More detailed onboarding help screen
- Public-data blurb
### Changed in DB or environment
- Nothing
### Changed in DB or environment in 0.3.6
- Nothing
## [0.3.5] - 2024.03.23 - 28754bdfb1e11aa221dd49a5dce4219b69cf6a9d
### Added
### Added in 0.3.5
- Photo on gift records
### Fixed
### Fixed in 0.3.5
- Environment variable for BVC meetings project
- Environment variables and build enhancements for test vs prod
### Changed in DB or environment
### Changed in DB or environment in 0.3.5
- New environment variable for image API server
- Test that a new browser session will get the right default APIs.
- Test that a new browser session will send the right BVC meetings project.
## [0.2.17] - 2024.03.01 - 3612ea42240c5e1b7d7eff29a39ff18f1b869b36
### Added
### Added in 0.2.17
- Shortcut page for Bountiful Voluntaryist Community
### Changed
### Changed in 0.2.17
- More readable, targeted summaries in home-page feed items
### Changed in DB
- Nothing
- Nothing
## [0.2.14] - 2024.02.14 - 5f9edea1167dbfb64e16648764eed8c09b24eaeb
### Changed
### Changed in 0.2.14
- Combine all service worker scripts into a single file.
### Changed in DB
- Nothing
### Changed in DB in 0.2.14
- Nothing
## [0.2.13] - 2024.02.07
### Added
### Added in 0.2.13
- Display of user's offers
- Check for valid DIDs
### Fixed
### Fixed in 0.2.13
- Name display on give prompt
- Non-numbers on number input & autocapitalize on URL input
### Changed in DB
- Nothing
### Changed in DB in 0.2.13
- Nothing
## [0.2.12] - 2024.02.01
### Added
- Prompts for gratitude
### Added in 0.2.12
- Prompts for gratitude
## [0.2.11] - 2024.01.28
### Added
### Added in 0.2.11
- Actions to share claim data with contacts
- Bulk CSV import from Endorser Mobile export
- Dates on give summaries
## [0.2.10] - 2024.01.18 - 667e1e8890b42de59cd939caca1a01c7a7a702be
### Added
### Added in 0.2.10
- Person identicons for contacts
- Confirmation & delivery directly from project page
- Offer dialog now allows units
- Links from claim detail page to the fulfilled project or offer
- Link to project from home feed
- Copy to clipboard in more places
### Fixed
- "More Contacts" for give on project page now links correctly.
### Fixed in 0.2.10
- "More Contacts" for give on project page now links correctly.
## [0.2.9] - 2024.01.15 - e5e702f8a5a53a6efbed48d35f0bc3cee63024a0
### Fixed
- Set visibility for new contact.
### Fixed in 0.2.9
- Set visibility for new contact.
## [0.2.8] - 2024.01.14
### Added
### Added in 0.2.8
- Automatic ID creation from home page
- Agent who can also edit a project
### Fixed
- Cannot declare anonymous gift
### Fixed in 0.2.8
- Cannot declare anonymous gift
## [0.2.7] - 2024.01.12
### Added
### Added in 0.2.7
- Give to fulfill a particular offer
- Give as part of a trade as opposed to a donation
- Error notifications on import
### Changed
### Changed in 0.2.7
- Library security updates
- Visibility of actions & confirmations on claim page
### Fixed
- Name of offerer
### Fixed in 0.2.7
- Name of offerer
## [0.2.2] - 2024.01.05
### Added
### Added in 0.2.2
- Check for notification capability on front screen
- Contact next-public-key-hash in manual textual input
- Confirmation for contact visibility change
- YAML rendering of full claim details
- Hints for onboarding on the contact screen
## [0.2.0] - 2024.01.04
### Added
### Added in 0.2.0
- Contact next-public-key-hash
- Icon for Android
- More thorough messaging and testing for notifications
## [0.1.9] - 2024.01.01
### Added
### Added in 0.1.9
- Import for contacts and settings
- Second download button for DuckDuckGo
### Changed
- Removed some keys from Dexie's IndexedDB declarations
### Changed in 0.1.9
- Removed some keys from Dexie's IndexedDB declarations
## [0.1.8] - 2023.12.27- d26d1d360152a7d0e559b68486e85b72b88bd9ff
### Added
### Added in 0.1.8
- DB logging for service-worker events
- Help page for notifications
- Test notification & web-push triggers inside app
- Check that the app is installed
### Fixed
- Project issuer display name
### Fixed in 0.1.8
- Project issuer display name
## [0.1.7] - 2023.12.19 - 91c6c7c11c71f96006cc876fc946f1f98a274ba2
### Changed
### Changed in 0.1.7
- Icons
### Fixed
### Fixed in 0.1.7
- Notification switch now shows message
- Prod/test server warning message at top of page
## [0.1.6] - 2023.12.17 - b445b1234fbfcf6b37d695373f259aab0eda1118
### Added
### Added in 0.1.6
- Infinite scroll on home page
### Changed
### Changed in 0.1.6
- UI improvements
- Show web-push subscription info
- Icon
## [0.1.5] - 2023.12.09 - 9c36bb509a9bae9bb3306d3bd9eeb144b67aa8ad
### Added
### Added in 0.1.5
- Web push notifications (though not finalized)
- Credentials details page
- See more data without an ID
- Change units of a give
## [0.1.4] - 2023.11.20 - 7311d36726f3667ec4c68f241f91d404273ad4db
### Added
### Added in 0.1.4
- Offer on a project
### Changed
- Automatically set as visible when importing a contact
### Changed in 0.1.4
- Automatically set as visible when importing a contact
## [0.1.3] - 2023.11.08 - 910f57ec7d2e50803ae3d04f4b927e0f5219fbde
### Added
### Added in 0.1.3
- Contact name editing
### Changed
### Changed in 0.1.3
- Don't show actions on front page if not registered.
### Removed
- Home page Notiwind test buttons
### Removed in 0.1.3
- Home page Notiwind test buttons
## [0.1.2] - 2023.11.01 - 7f6c93802911a030a89fe3706e18b5c17151e5bb
### Added
### Added in 0.1.2
- Basics: create ID, record a give, declare a project, search, and get notifications.

5
Gemfile

@ -0,0 +1,5 @@
source "https://rubygems.org"
gem "fastlane"
gem "cocoapods"

21
README.md

@ -8,8 +8,6 @@ and expand to crowd-fund with time & money, then record and see the impact of co
See [project.task.yaml](project.task.yaml) for current priorities.
(Numbers at the beginning of lines are estimated hours. See [taskyaml.org](https://taskyaml.org/) for details.)
## Setup & Building
Quick start:
@ -29,7 +27,6 @@ See the test locations for "IMAGE_API_SERVER" or "PARTNER_API_SERVER" below, or
Look at [BUILDING.md](BUILDING.md) for the "test-all" instructions and [TESTING.md](test-playwright/TESTING.md) for more details.
### Compile and minify for test & production
* If there are DB changes: before updating the test server, open browser(s) with current version to test DB migrations.
@ -46,11 +43,15 @@ Look at [BUILDING.md](BUILDING.md) for the "test-all" instructions and [TESTING.
* For test, build the app (because test server is not yet set up to build):
```
```bash
TIME_SAFARI_APP_TITLE="TimeSafari_Test" VITE_APP_SERVER=https://test.timesafari.app VITE_BVC_MEETUPS_PROJECT_CLAIM_ID=https://endorser.ch/entity/01HWE8FWHQ1YGP7GFZYYPS272F VITE_DEFAULT_ENDORSER_API_SERVER=https://test-api.endorser.ch VITE_DEFAULT_IMAGE_API_SERVER=https://test-image-api.timesafari.app VITE_DEFAULT_PARTNER_API_SERVER=https://test-partner-api.endorser.ch VITE_PASSKEYS_ENABLED=true npm run build
```
... and transfer to the test server: `rsync -azvu -e "ssh -i ~/.ssh/..." dist ubuntutest@test.timesafari.app:time-safari`
... and transfer to the test server:
```bash
rsync -azvu -e "ssh -i ~/.ssh/..." dist ubuntutest@test.timesafari.app:time-safari
```
(Let's replace that with a .env.development or .env.staging file.)
@ -74,11 +75,16 @@ TIME_SAFARI_APP_TITLE="TimeSafari_Test" VITE_APP_SERVER=https://test.timesafari.
## Icons
## Tests
See [TESTING.md](test-playwright/TESTING.md) for detailed test instructions.
To add an icon, add to main.ts and reference with `fa` element and `icon` attribute with the hyphenated name.
## Icons
To add an icon, add to main.ts and reference with `fa` element and `icon` attribute with the hyphenated name.
## Other
@ -91,7 +97,6 @@ To add an icon, add to main.ts and reference with `fa` element and `icon` attrib
* If you are deploying in a subdirectory, add it to `publicPath` in vue.config.js, eg: `publicPath: "/app/time-tracker/",`
### Kudos
Gifts make the world go 'round!

BIN
android/.gradle/8.11.1/checksums/checksums.lock

Binary file not shown.

BIN
android/.gradle/8.11.1/checksums/md5-checksums.bin

Binary file not shown.

BIN
android/.gradle/8.11.1/checksums/sha1-checksums.bin

Binary file not shown.

BIN
android/.gradle/8.11.1/executionHistory/executionHistory.bin

Binary file not shown.

BIN
android/.gradle/8.11.1/executionHistory/executionHistory.lock

Binary file not shown.

BIN
android/.gradle/8.11.1/fileChanges/last-build.bin

Binary file not shown.

BIN
android/.gradle/8.11.1/fileHashes/fileHashes.bin

Binary file not shown.

BIN
android/.gradle/8.11.1/fileHashes/fileHashes.lock

Binary file not shown.

BIN
android/.gradle/8.11.1/fileHashes/resourceHashesCache.bin

Binary file not shown.

0
android/.gradle/8.11.1/gc.properties

BIN
android/.gradle/buildOutputCleanup/buildOutputCleanup.lock

Binary file not shown.

2
android/.gradle/buildOutputCleanup/cache.properties

@ -0,0 +1,2 @@
#Tue Mar 11 10:01:05 UTC 2025
gradle.version=8.10.2

BIN
android/.gradle/file-system.probe

Binary file not shown.

0
android/.gradle/vcs-1/gc.properties

3
android/Gemfile

@ -0,0 +1,3 @@
source "https://rubygems.org"
gem "fastlane"

11
android/app/build.gradle

@ -22,6 +22,17 @@ android {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions {
disable 'UnsanitizedFilenameFromContentProvider'
abortOnError false
baseline file("lint-baseline.xml")
// Ignore Capacitor module issues
ignore 'DefaultLocale'
ignore 'UnsanitizedFilenameFromContentProvider'
ignore 'LintBaseline'
ignore 'LintBaselineFixed'
}
}
repositories {

2
android/app/capacitor.build.gradle

@ -9,7 +9,7 @@ android {
apply from: "../capacitor-cordova-android-plugins/cordova.variables.gradle"
dependencies {
implementation project(':capacitor-app')
}

398
android/app/lint-baseline.xml

@ -0,0 +1,398 @@
<?xml version="1.0" encoding="UTF-8"?>
<issues format="6" by="lint 8.1.0" type="baseline" client="gradle" dependencies="true" name="AGP (8.1.0)" variant="all" version="8.1.0">
<issue
id="UnknownIssueId"
message="Unknown issue id &quot;UnsanitizedFilenameFromContentProvider&quot;"
errorLine1=" disable &apos;UnsanitizedFilenameFromContentProvider&apos;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="build.gradle"
line="26"
column="18"/>
</issue>
<issue
id="UnknownIssueId"
message="Unknown issue id &quot;UnsanitizedFilenameFromContentProvider&quot;"
errorLine1=" disable &apos;UnsanitizedFilenameFromContentProvider&apos;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="build.gradle"
line="26"
column="18"/>
</issue>
<issue
id="UnknownIssueId"
message="Unknown issue id &quot;LintBaselineFixed&quot;"
errorLine1=" ignore &apos;LintBaselineFixed&apos;"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
file="build.gradle"
line="34"
column="17"/>
</issue>
<issue
id="UnknownIssueId"
message="Unknown issue id &quot;LintBaselineFixed&quot;"
errorLine1=" ignore &apos;LintBaselineFixed&apos;"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
file="build.gradle"
line="34"
column="17"/>
</issue>
<issue
id="DefaultLocale"
message="Implicitly using the default locale is a common source of bugs: Use `String.format(Locale, ...)` instead"
errorLine1=" String msg = String.format("
errorLine2=" ^">
<location
file="src/main/java/com/getcapacitor/BridgeWebChromeClient.java"
line="467"
column="26"/>
</issue>
<issue
id="DefaultLocale"
message="Implicitly using the default locale is a common source of bugs: Use `toUpperCase(Locale)` instead. For strings meant to be internal use `Locale.ROOT`, otherwise `Locale.getDefault()`."
errorLine1=" return mask.toUpperCase().equals(string.toUpperCase());"
errorLine2=" ~~~~~~~~~~~">
<location
file="src/main/java/com/getcapacitor/util/HostMask.java"
line="110"
column="29"/>
</issue>
<issue
id="DefaultLocale"
message="Implicitly using the default locale is a common source of bugs: Use `toUpperCase(Locale)` instead. For strings meant to be internal use `Locale.ROOT`, otherwise `Locale.getDefault()`."
errorLine1=" return mask.toUpperCase().equals(string.toUpperCase());"
errorLine2=" ~~~~~~~~~~~">
<location
file="src/main/java/com/getcapacitor/util/HostMask.java"
line="110"
column="57"/>
</issue>
<issue
id="DefaultLocale"
message="Implicitly using the default locale is a common source of bugs: Use `toLowerCase(Locale)` instead. For strings meant to be internal use `Locale.ROOT`, otherwise `Locale.getDefault()`."
errorLine1=" if (header.getKey().equalsIgnoreCase(&quot;Accept&quot;) &amp;&amp; header.getValue().toLowerCase().contains(&quot;text/html&quot;)) {"
errorLine2=" ~~~~~~~~~~~">
<location
file="src/main/java/com/getcapacitor/WebViewLocalServer.java"
line="474"
column="93"/>
</issue>
<issue
id="SimpleDateFormat"
message="To get local formatting use `getDateInstance()`, `getDateTimeInstance()`, or `getTimeInstance()`, or use `new SimpleDateFormat(String template, Locale locale)` with for example `Locale.US` for ASCII dates."
errorLine1=" String timeStamp = new SimpleDateFormat(&quot;yyyyMMdd_HHmmss&quot;).format(new Date());"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="src/main/java/com/getcapacitor/BridgeWebChromeClient.java"
line="504"
column="28"/>
</issue>
<issue
id="SimpleDateFormat"
message="To get local formatting use `getDateInstance()`, `getDateTimeInstance()`, or `getTimeInstance()`, or use `new SimpleDateFormat(String template, Locale locale)` with for example `Locale.US` for ASCII dates."
errorLine1=" DateFormat df = new SimpleDateFormat(&quot;yyyy-MM-dd&apos;T&apos;HH:mm&apos;Z&apos;&quot;);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="src/main/java/com/getcapacitor/PluginResult.java"
line="44"
column="25"/>
</issue>
<issue
id="UnusedAttribute"
message="Attribute `usesCleartextTraffic` is only used in API level 23 and higher (current min is 22)"
errorLine1="&lt;application android:usesCleartextTraffic=&quot;true&quot;>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="src/main/AndroidManifest.xml"
line="4"
column="15"/>
</issue>
<issue
id="UnusedAttribute"
message="Attribute `autoVerify` is only used in API level 23 and higher (current min is 22)"
errorLine1=" &lt;intent-filter android:autoVerify=&quot;true&quot;>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="src/main/AndroidManifest.xml"
line="25"
column="28"/>
</issue>
<issue
id="ManifestOrder"
message="`&lt;uses-permission>` tag appears after `&lt;application>` tag"
errorLine1=" &lt;uses-permission android:name=&quot;android.permission.INTERNET&quot; />"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
file="src/main/AndroidManifest.xml"
line="47"
column="6"/>
</issue>
<issue
id="AndroidGradlePluginVersion"
message="A newer version of com.android.tools.build:gradle than 8.2.1 is available: 8.9.0. (There is also a newer version of 8.2.𝑥 available, if upgrading to 8.9.0 is difficult: 8.2.2)"
errorLine1=" classpath &apos;com.android.tools.build:gradle:8.2.1&apos;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="build.gradle"
line="12"
column="9"/>
</issue>
<issue
id="AndroidGradlePluginVersion"
message="A newer version of com.android.tools.build:gradle than 8.2.1 is available: 8.9.0. (There is also a newer version of 8.2.𝑥 available, if upgrading to 8.9.0 is difficult: 8.2.2)"
errorLine1=" classpath &apos;com.android.tools.build:gradle:8.2.1&apos;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="build.gradle"
line="18"
column="9"/>
</issue>
<issue
id="GradleDependency"
message="A newer version of androidx.appcompat:appcompat than 1.6.1 is available: 1.7.0"
errorLine1=" implementation &quot;androidx.appcompat:appcompat:$androidxAppCompatVersion&quot;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="build.gradle"
line="46"
column="20"/>
</issue>
<issue
id="GradleDependency"
message="A newer version of androidx.appcompat:appcompat than 1.6.1 is available: 1.7.0"
errorLine1=" implementation &quot;androidx.appcompat:appcompat:$androidxAppCompatVersion&quot;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="build.gradle"
line="46"
column="20"/>
</issue>
<issue
id="GradleDependency"
message="A newer version of androidx.coordinatorlayout:coordinatorlayout than 1.2.0 is available: 1.3.0"
errorLine1=" implementation &quot;androidx.coordinatorlayout:coordinatorlayout:$androidxCoordinatorLayoutVersion&quot;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="build.gradle"
line="47"
column="20"/>
</issue>
<issue
id="GradleDependency"
message="A newer version of androidx.test.ext:junit than 1.1.5 is available: 1.2.1"
errorLine1=" androidTestImplementation &quot;androidx.test.ext:junit:$androidxJunitVersion&quot;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="build.gradle"
line="51"
column="31"/>
</issue>
<issue
id="GradleDependency"
message="A newer version of androidx.test.espresso:espresso-core than 3.5.1 is available: 3.6.1"
errorLine1=" androidTestImplementation &quot;androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion&quot;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="build.gradle"
line="52"
column="31"/>
</issue>
<issue
id="GradleDependency"
message="A newer version of androidx.appcompat:appcompat than 1.6.1 is available: 1.7.0"
errorLine1=" implementation &quot;androidx.appcompat:appcompat:$androidxAppCompatVersion&quot;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="build.gradle"
line="75"
column="20"/>
</issue>
<issue
id="GradleDependency"
message="A newer version of androidx.test.ext:junit than 1.1.5 is available: 1.2.1"
errorLine1=" androidTestImplementation &quot;androidx.test.ext:junit:$androidxJunitVersion&quot;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="build.gradle"
line="77"
column="31"/>
</issue>
<issue
id="GradleDependency"
message="A newer version of androidx.test.espresso:espresso-core than 3.5.1 is available: 3.6.1"
errorLine1=" androidTestImplementation &quot;androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion&quot;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="build.gradle"
line="78"
column="31"/>
</issue>
<issue
id="Recycle"
message="This `TypedArray` should be recycled after use with `#recycle()`"
errorLine1=" TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.bridge_fragment);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
file="src/main/java/com/getcapacitor/BridgeFragment.java"
line="99"
column="32"/>
</issue>
<issue
id="Overdraw"
message="Possible overdraw: Root element paints background `#F0FF1414` with a theme that also paints a background (inferred theme is `@android:style/Theme.Holo`)"
errorLine1=" android:background=&quot;#F0FF1414&quot;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="src/main/res/layout/fragment_bridge.xml"
line="5"
column="5"/>
</issue>
<issue
id="UnusedResources"
message="The resource `R.layout.activity_main` appears to be unused"
errorLine1="&lt;androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;"
errorLine2="^">
<location
file="src/main/res/layout/activity_main.xml"
line="2"
column="1"/>
</issue>
<issue
id="UnusedResources"
message="The resource `R.xml.config` appears to be unused"
errorLine1="&lt;widget version=&quot;1.0.0&quot; xmlns=&quot;http://www.w3.org/ns/widgets&quot; xmlns:cdv=&quot;http://cordova.apache.org/ns/1.0&quot;>"
errorLine2="^">
<location
file="src/main/res/xml/config.xml"
line="2"
column="1"/>
</issue>
<issue
id="UnusedResources"
message="The resource `R.drawable.ic_launcher_background` appears to be unused"
errorLine1="&lt;vector xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;"
errorLine2="^">
<location
file="src/main/res/drawable/ic_launcher_background.xml"
line="2"
column="1"/>
</issue>
<issue
id="UnusedResources"
message="The resource `R.drawable.ic_launcher_foreground` appears to be unused"
errorLine1="&lt;vector xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;"
errorLine2="^">
<location
file="src/main/res/drawable-v24/ic_launcher_foreground.xml"
line="1"
column="1"/>
</issue>
<issue
id="UnusedResources"
message="The resource `R.string.package_name` appears to be unused"
errorLine1=" &lt;string name=&quot;package_name&quot;>app.timesafari.app&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
file="src/main/res/values/strings.xml"
line="5"
column="13"/>
</issue>
<issue
id="UnusedResources"
message="The resource `R.string.custom_url_scheme` appears to be unused"
errorLine1=" &lt;string name=&quot;custom_url_scheme&quot;>app.timesafari.app&lt;/string>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="src/main/res/values/strings.xml"
line="6"
column="13"/>
</issue>
<issue
id="MonochromeLauncherIcon"
message="The application adaptive icon is missing a monochrome tag"
errorLine1="&lt;adaptive-icon xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;>"
errorLine2="^">
<location
file="src/main/res/mipmap-anydpi-v26/ic_launcher.xml"
line="2"
column="1"/>
</issue>
<issue
id="MonochromeLauncherIcon"
message="The application adaptive roundIcon is missing a monochrome tag"
errorLine1="&lt;adaptive-icon xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;>"
errorLine2="^">
<location
file="src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml"
line="2"
column="1"/>
</issue>
<issue
id="IconDipSize"
message="The image `splash.png` varies significantly in its density-independent (dip) size across the various density versions: drawable-land-hdpi/splash.png: 533x320 dp (800x480 px), drawable-land-mdpi/splash.png: 480x320 dp (480x320 px), drawable-land-xhdpi/splash.png: 640x360 dp (1280x720 px), drawable-land-xxhdpi/splash.png: 533x320 dp (1600x960 px), drawable-land-xxxhdpi/splash.png: 480x320 dp (1920x1280 px)">
<location
file="src/main/res/drawable-land-mdpi/splash.png"/>
<location
file="src/main/res/drawable-land-xxxhdpi/splash.png"/>
<location
file="src/main/res/drawable-land-hdpi/splash.png"/>
<location
file="src/main/res/drawable-land-xxhdpi/splash.png"/>
<location
file="src/main/res/drawable-land-xhdpi/splash.png"/>
</issue>
<issue
id="IconDuplicatesConfig"
message="The `splash.png` icon has identical contents in the following configuration folders: drawable-land-mdpi, drawable">
<location
file="src/main/res/drawable/splash.png"/>
<location
file="src/main/res/drawable-land-mdpi/splash.png"/>
</issue>
<issue
id="IconLocation"
message="Found bitmap drawable `res/drawable/splash.png` in densityless folder">
<location
file="src/main/res/drawable/splash.png"/>
</issue>
</issues>

7
android/app/src/main/AndroidManifest.xml

@ -22,6 +22,13 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="timesafari" />
</intent-filter>
</activity>
<provider

21
android/app/src/main/assets/capacitor.config.json

@ -0,0 +1,21 @@
{
"appId": "app.timesafari.app",
"appName": "TimeSafari",
"webDir": "dist",
"bundledWebRuntime": false,
"server": {
"cleartext": true
},
"plugins": {
"App": {
"appUrlOpen": {
"handlers": [
{
"url": "timesafari://*",
"autoVerify": true
}
]
}
}
}
}

6
android/app/src/main/assets/capacitor.plugins.json

@ -0,0 +1,6 @@
[
{
"pkg": "@capacitor/app",
"classpath": "com.capacitorjs.plugins.app.AppPlugin"
}
]

11
android/app/src/main/assets/public/assets/AccountViewView-YLErCGrQ.js

File diff suppressed because one or more lines are too long

1
android/app/src/main/assets/public/assets/ClaimAddRawView-r1zivfpU.js

@ -0,0 +1 @@
var h=Object.defineProperty;var f=(a,e,t)=>e in a?h(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var o=(a,e,t)=>f(a,typeof e!="symbol"?e+"":e,t);import{V as g,f as w,a as v,l as C,C as x,_ as y,j as S,k as u,m as l,o as b,p as _,x as $,F as D,B as d,E as N}from"./main.common-CyN0wKDJ.js";import{Q as V}from"./QuickNav-knx6iT2l.js";import{j as k,g as E,x as F,e as J,v as A}from"./index-BuQXBPSi.js";import"./index-DVAb2BqV.js";import"./index-B6aF1R1z.js";import"./_isString-BCVd99Zj.js";var I=Object.getOwnPropertyDescriptor,O=(a,e,t,i)=>{for(var s=i>1?void 0:i?I(e,t):e,r=a.length-1,n;r>=0;r--)(n=a[r])&&(s=n(s)||s);return s};let m=class extends g{constructor(){super(...arguments);o(this,"$notify");o(this,"$route");o(this,"$router");o(this,"axios");o(this,"accountIdentityStr","null");o(this,"activeDid","");o(this,"apiServer","");o(this,"claimStr","")}async mounted(){await this.initializeSettings(),await this.loadClaimData()}async initializeSettings(){const t=await w();this.activeDid=t.activeDid||"",this.apiServer=t.apiServer||""}async loadClaimData(){await this.loadClaimFromQueryParam()||await this.loadClaimFromJwtId()}async loadClaimFromQueryParam(){if(this.claimStr=this.$route.query.claim||"",!this.claimStr)return!1;try{const t=JSON.parse(this.claimStr);return this.claimStr=JSON.stringify(t,null,2),!0}catch{return!1}}async loadClaimFromJwtId(){const t=this.$route.query.claimJwtId||"";if(!t)return;const i=k(t)?"/api/claim/byHandle/":"/api/claim/",s=this.apiServer+i+encodeURIComponent(t);try{const r=await this.fetchClaimData(s);this.formatClaimResponse(r,t)}catch(r){this.handleClaimError(r)}}async fetchClaimData(t){const i=await E(this.activeDid);return await this.axios.get(t,{headers:i})}formatClaimResponse(t,i){var s;if(t.status===200){const r=(s=t.data)==null?void 0:s.claim;r.lastClaimId=F(i),this.claimStr=JSON.stringify(r,null,2)}else throw{message:"Got an error loading that claim.",response:{status:t.status,statusText:t.statusText}}}handleClaimError(t){v("Error retrieving claim: "+J(t),!0),this.$notify({group:"alert",type:"danger",title:"Error",text:"Got an error retrieving claim data."},3e3)}async submitClaim(){const t=JSON.parse(this.claimStr),i=await A(t,this.activeDid,this.apiServer,this.axios);i.type==="success"?this.$notify({group:"alert",type:"success",title:"Success",text:"Claim submitted."},5e3):(C.error("Got error submitting the claim:",i),this.$notify({group:"alert",type:"danger",title:"Error",text:"There was a problem submitting the claim."},5e3))}};m=O([x({components:{QuickNav:V}})],m);const R={id:"Content",class:"p-6 pb-24 max-w-3xl mx-auto"},P={id:"ViewBreadcrumb",class:"mb-8"},Q={class:"text-lg text-center font-light relative px-7"},B={class:"flex"};function T(a,e,t,i,s,r){const n=d("QuickNav"),p=d("font-awesome");return N(),S(D,null,[u(n),l("section",R,[l("div",P,[l("h1",Q,[l("button",{class:"text-lg text-center px-2 py-1 absolute -left-2 -top-1",onClick:e[0]||(e[0]=c=>a.$router.back())},[u(p,{icon:"chevron-left",class:"fa-fw"})]),e[3]||(e[3]=b(" Raw Claim "))])]),l("div",B,[_(l("textarea",{"onUpdate:modelValue":e[1]||(e[1]=c=>a.claimStr=c),rows:"20",class:"border-2 w-full"},null,512),[[$,a.claimStr]])]),l("button",{class:"block w-full text-center text-lg font-bold uppercase bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-3 rounded-md",onClick:e[2]||(e[2]=c=>a.submitClaim())}," Sign & Send ")])],64)}const K=y(m,[["render",T]]);export{K as default};

8
android/app/src/main/assets/public/assets/ClaimCertificateView-BzzNchV3.js

File diff suppressed because one or more lines are too long

1
android/app/src/main/assets/public/assets/ClaimView-BUQRK2PH.css

@ -0,0 +1 @@
.tooltip{position:relative;display:inline-block;border-bottom:1px dotted black}.tooltip .tooltiptext{visibility:hidden;width:200px;background-color:#000;color:#fff;text-align:center;padding:5px 0;border-radius:6px;position:absolute;z-index:1}.tooltip:hover .tooltiptext,.tooltip:hover .tooltiptext-left{visibility:visible}

1
android/app/src/main/assets/public/assets/ClaimView-TDchL-2m.js

File diff suppressed because one or more lines are too long

1
android/app/src/main/assets/public/assets/ConfirmContactView-TGGkhQR0.js

@ -0,0 +1 @@
import{V as m,C as x,_ as u,j as _,m as c,K as f,k as d,o as b,w as v,B as i,E as w}from"./main.common-CyN0wKDJ.js";import"./index-DVAb2BqV.js";var g=Object.getOwnPropertyDescriptor,C=(o,t,r,a)=>{for(var e=a>1?void 0:a?g(t,r):t,s=o.length-1,n;s>=0;s--)(n=o[s])&&(e=n(e)||e);return e};let l=class extends m{};l=C([x({components:{}})],l);const h={id:"Content",class:"p-6 pb-24 max-w-3xl mx-auto"},k={id:"ViewBreadcrumb",class:"mb-8"},V={class:"text-lg text-center font-light relative px-7"};function y(o,t,r,a,e,s){const n=i("font-awesome"),p=i("router-link");return w(),_("section",h,[c("div",k,[c("h1",V,[d(p,{to:{name:"account"},class:"text-lg text-center px-2 py-1 absolute -left-2 -top-1"},{default:v(()=>[d(n,{icon:"chevron-left",class:"fa-fw"})]),_:1}),t[0]||(t[0]=b(" Confirm Contact "))])]),t[1]||(t[1]=f('<p class="text-center text-xl mb-4 font-light"> Would you like to add <i>Firstname</i> to your network? </p><div class="bg-slate-100 rounded-md overflow-hidden px-4 py-3 mb-4"><h2 class="text-xl font-semibold mb-2">Firstname Lastname</h2><div class="text-slate-500 text-sm font-bold">ID</div><div class="text-sm text-slate-500 mb-1"><span><code>did:peer:kl45kj41lk451kl3</code></span></div></div><div class="mt-8"><div class="grid grid-cols-1 sm:grid-cols-2 gap-2"><input type="submit" class="block w-full text-center text-lg font-bold uppercase bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-3 rounded-md" value="Add Contact"><button type="button" class="block w-full text-center text-md uppercase bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1.5 py-2 rounded-md"> Cancel </button></div></div>',3))])}const j=u(l,[["render",y]]);export{j as default};

1
android/app/src/main/assets/public/assets/ConfirmGiftView-B1gN6jJz.js

File diff suppressed because one or more lines are too long

1
android/app/src/main/assets/public/assets/ContactAmountsView-BdmE91Ad.js

File diff suppressed because one or more lines are too long

1
android/app/src/main/assets/public/assets/ContactEditView-B5dhe40j.js

File diff suppressed because one or more lines are too long

1
android/app/src/main/assets/public/assets/ContactGiftingView-BuFRYhw_.js

@ -0,0 +1 @@
var y=Object.defineProperty;var v=(o,t,e)=>t in o?y(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e;var n=(o,t,e)=>v(o,typeof t!="symbol"?t+"":t,e);import{V as C,f as k,e as D,l as $,C as G,_ as j,j as u,k as a,m as s,o as _,w as V,F as g,G as E,B as p,E as f,t as I}from"./main.common-CyN0wKDJ.js";import{G as N}from"./GiftedDialog-Pytrg6u7.js";import{Q as B}from"./QuickNav-knx6iT2l.js";import{E as S}from"./EntityIcon-BCaUw-N4.js";import{_ as Q}from"./blank-square-D9dGgMJw.js";import"./index-DVAb2BqV.js";import"./index-BuQXBPSi.js";import"./index-B6aF1R1z.js";import"./_isString-BCVd99Zj.js";var A=Object.getOwnPropertyDescriptor,F=(o,t,e,r)=>{for(var i=r>1?void 0:r?A(t,e):t,c=o.length-1,d;c>=0;c--)(d=o[c])&&(i=d(i)||i);return i};let b=class extends C{constructor(){super(...arguments);n(this,"$notify");n(this,"$route");n(this,"$router");n(this,"activeDid","");n(this,"allContacts",[]);n(this,"apiServer","");n(this,"description","");n(this,"projectId","");n(this,"prompt","")}async created(){try{const e=await k();this.apiServer=e.apiServer||"",this.activeDid=e.activeDid||"";const r=await D.contacts.toArray();this.allContacts=r.sort((i,c)=>(i.name||"").localeCompare(c.name||"")),this.projectId=this.$route.query.projectId||"",this.prompt=this.$route.query.prompt??this.prompt}catch(e){$.error("Error retrieving settings & contacts:",e),this.$notify({group:"alert",type:"danger",title:"Error",text:e.message||"There was an error retrieving your settings or contacts."},5e3)}}openDialog(e){const r=this.projectId?void 0:{did:this.activeDid,name:"you"};this.$refs.customDialog.open(e,r,void 0,"Given by "+((e==null?void 0:e.name)||"someone not named"),this.prompt)}};b=F([G({components:{GiftedDialog:N,QuickNav:B,EntityIcon:S}})],b);const O={id:"Content",class:"p-6 pb-24 max-w-3xl mx-auto"},q={id:"ViewBreadcrumb",class:"mb-8"},P={class:"text-lg text-center font-light relative px-7"},T={class:"border-t border-slate-300"},U={class:"border-b border-slate-300 py-3"},z={class:"text-base flex gap-4 items-center"},H={class:"text-right"},L={class:"text-base flex gap-4 items-center"},J={class:"grow font-semibold"},K={class:"text-right"},M=["onClick"];function R(o,t,e,r,i,c){const d=p("QuickNav"),m=p("font-awesome"),h=p("router-link"),x=p("EntityIcon"),w=p("GiftedDialog");return f(),u(g,null,[a(d,{selected:"Home"}),s("section",O,[s("div",q,[s("h1",P,[a(h,{to:{name:"home"},class:"text-lg text-center px-2 py-1 absolute -left-2 -top-1"},{default:V(()=>[a(m,{icon:"chevron-left",class:"fa-fw"})]),_:1}),t[1]||(t[1]=_(" Given by... "))])]),s("ul",T,[s("li",U,[s("h2",z,[t[2]||(t[2]=s("span",{class:"grow"},[s("img",{src:Q,width:"32",class:"inline-block align-middle border border-slate-300 rounded-md mr-1"}),_(" Unnamed/Unknown ")],-1)),s("span",H,[s("button",{type:"button",class:"block w-full text-center text-sm uppercase bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-3 py-1.5 rounded-md",onClick:t[0]||(t[0]=l=>o.openDialog())},[a(m,{icon:"gift",class:"fa-fw"})])])])]),(f(!0),u(g,null,E(o.allContacts,l=>(f(),u("li",{key:l.did,class:"border-b border-slate-300 py-3"},[s("h2",L,[s("span",J,[a(x,{contact:l,"icon-size":32,class:"inline-block align-middle border border-slate-300 rounded-md mr-1"},null,8,["contact"]),_(" "+I(l.name||"(no name)"),1)]),s("span",K,[s("button",{type:"button",class:"block w-full text-center text-sm uppercase bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-3 py-1.5 rounded-md",onClick:W=>o.openDialog(l)},[a(m,{icon:"gift",class:"fa-fw"})],8,M)])])]))),128))]),a(w,{ref:"customDialog","to-project-id":o.projectId},null,8,["to-project-id"])])],64)}const ct=j(b,[["render",R]]);export{ct as default};

1
android/app/src/main/assets/public/assets/ContactImportView-BFNfn1SC.js

File diff suppressed because one or more lines are too long

1
android/app/src/main/assets/public/assets/ContactNameDialog-CKcSc-WW.js

@ -0,0 +1 @@
var b=Object.defineProperty;var p=(t,e,s)=>e in t?b(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s;var o=(t,e,s)=>p(t,typeof e!="symbol"?e+"":e,s);import{C as h,V as C,_ as m,j as v,n as g,E as u,m as i,o as k,p as x,t as d,x as f}from"./main.common-CyN0wKDJ.js";var _=Object.getOwnPropertyDescriptor,w=(t,e,s,c)=>{for(var l=c>1?void 0:c?_(e,s):e,n=t.length-1,a;n>=0;n--)(a=t[n])&&(l=a(l)||l);return l};let r=class extends C{constructor(){super(...arguments);o(this,"cancelCallback",()=>{});o(this,"saveCallback",()=>{});o(this,"message","");o(this,"newText","");o(this,"title","Contact Name");o(this,"visible",!1)}async open(s,c,l,n,a){this.cancelCallback=n||this.cancelCallback,this.saveCallback=l||this.saveCallback,this.message=c??this.message,this.newText=a??"",this.title=s??this.title,this.visible=!0}async onClickSaveChanges(){this.visible=!1,this.saveCallback&&this.saveCallback(this.newText)}onClickCancel(){this.visible=!1,this.cancelCallback&&this.cancelCallback()}};r=w([h],r);const y={key:0,class:"dialog-overlay"},N={class:"dialog"},D={class:"text-xl font-bold text-center mb-4"},T={class:"mt-8"},$={class:"grid grid-cols-1 sm:grid-cols-2 gap-2"};function V(t,e,s,c,l,n){return t.visible?(u(),v("div",y,[i("div",N,[i("h1",D,d(t.title),1),k(" "+d(t.message)+" Note that their name is only stored on this device. ",1),x(i("input",{"onUpdate:modelValue":e[0]||(e[0]=a=>t.newText=a),type:"text",placeholder:"Name",class:"block w-full rounded border border-slate-400 mb-4 px-3 py-2"},null,512),[[f,t.newText]]),i("div",T,[i("div",$,[i("button",{type:"button",class:"block w-full text-center text-lg font-bold uppercase bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-3 rounded-md mb-2",onClick:e[1]||(e[1]=a=>t.onClickSaveChanges())}," Save "),i("button",{type:"button",class:"block w-full text-center text-md uppercase bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-3 rounded-md mb-2",onClick:e[2]||(e[2]=a=>t.onClickCancel())}," Cancel ")])])])])):g("",!0)}const j=m(r,[["render",V]]);export{j as C};

5
android/app/src/main/assets/public/assets/ContactQRScanShowView-CBPOZUSt.js

File diff suppressed because one or more lines are too long

1
android/app/src/main/assets/public/assets/ContactScanView-C6Zm1ZTY.js

@ -0,0 +1 @@
import{V as p,C as u,_ as m,j as h,m as c,K as w,k as n,o as v,w as x,B as i,E as f}from"./main.common-CyN0wKDJ.js";import"./index-DVAb2BqV.js";var _=Object.getOwnPropertyDescriptor,g=(o,t,d,r)=>{for(var e=r>1?void 0:r?_(t,d):t,s=o.length-1,a;s>=0;s--)(a=o[s])&&(e=a(e)||e);return e};let l=class extends p{};l=g([u({components:{}})],l);const k={id:"Content",class:"p-6 pb-24 max-w-3xl mx-auto"},C={id:"ViewBreadcrumb",class:"mb-8"},y={class:"text-lg text-center font-light relative px-7"};function V(o,t,d,r,e,s){const a=i("font-awesome"),b=i("router-link");return f(),h("section",k,[c("div",C,[c("h1",y,[n(b,{to:{name:"account"},class:"text-lg text-center px-2 py-1 absolute -left-2 -top-1"},{default:x(()=>[n(a,{icon:"chevron-left",class:"fa-fw"})]),_:1}),t[0]||(t[0]=v(" Scan Contact "))])]),t[1]||(t[1]=w('<h3 class="text-sm uppercase font-semibold mb-2">Scan a QR Code…</h3><div class="bg-black rounded overflow-hidden relative mb-4"><img src="https://picsum.photos/400/400?random=1" class="w-full"><div class="absolute top-0 left-0 right-0 bg-black/50 h-1/4"></div><div class="absolute top-1/4 bottom-1/4 left-0 bg-black/50 w-1/4"></div><div class="absolute top-1/4 bottom-1/4 right-0 bg-black/50 w-1/4"></div><div class="absolute bottom-0 left-0 right-0 bg-black/50 h-1/4"></div><div class="absolute top-1/4 left-1/4 h-6 w-6 border-white border-t-4 border-l-4 drop-shadow"></div><div class="absolute top-1/4 right-1/4 h-6 w-6 border-white border-t-4 border-r-4 drop-shadow"></div><div class="absolute bottom-1/4 left-1/4 h-6 w-6 border-white border-b-4 border-l-4 drop-shadow"></div><div class="absolute bottom-1/4 right-1/4 h-6 w-6 border-white border-b-4 border-r-4 drop-shadow"></div></div><h3 class="text-sm uppercase font-semibold mb-2">…or Enter Contact Data</h3><input type="text" placeholder="Name (optional)" class="block w-full rounded border border-slate-400 mb-2 px-3 py-2"><input type="text" placeholder="ID" class="block w-full rounded border border-slate-400 mb-2 px-3 py-2"><input type="text" placeholder="Public Key (optional)" class="block w-full rounded border border-slate-400 mb-4 px-3 py-2"><div class="mt-8"><div class="grid grid-cols-1 sm:grid-cols-2 gap-2"><input type="submit" class="block w-full text-center text-lg font-bold uppercase bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-3 rounded-md" value="Look Up Contact"><button type="button" class="block w-full text-center text-md uppercase bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1.5 py-2 rounded-md"> Cancel </button></div></div>',7))])}const $=m(l,[["render",V]]);export{$ as default};

1
android/app/src/main/assets/public/assets/ContactsView-DyJfZfmm.js

File diff suppressed because one or more lines are too long

1
android/app/src/main/assets/public/assets/DIDView-CYsX9_-v.css

@ -0,0 +1 @@
.dialog-overlay{z-index:50;position:fixed;top:0;left:0;right:0;bottom:0;background-color:#00000080;display:flex;justify-content:center;align-items:center;padding:1.5rem}.dialog{background-color:#fff;padding:1rem;border-radius:.5rem;width:100%;max-width:500px}

1
android/app/src/main/assets/public/assets/DIDView-DHQTbrWX.js

File diff suppressed because one or more lines are too long

1
android/app/src/main/assets/public/assets/DiscoverView-DB9VWQSd.css

@ -0,0 +1 @@
.numbered-marker{display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px;font-weight:700;color:#fff;background:#00f;width:24px;height:24px;border-radius:50%;border:2px solid white}

1
android/app/src/main/assets/public/assets/DiscoverView-rWbfArNI.js

File diff suppressed because one or more lines are too long

1
android/app/src/main/assets/public/assets/EntityIcon-BCaUw-N4.js

File diff suppressed because one or more lines are too long

3
android/app/src/main/assets/public/assets/GiftedDetailsView-C-hGAQc_.js

File diff suppressed because one or more lines are too long

1
android/app/src/main/assets/public/assets/GiftedDialog-Pytrg6u7.js

File diff suppressed because one or more lines are too long

1
android/app/src/main/assets/public/assets/HelpNotificationTypesView-BcHKmg9i.js

@ -0,0 +1 @@
import{V as y,C as d,_ as v,j as w,k as a,m as e,o as r,w as g,F as h,B as p,E as x}from"./main.common-CyN0wKDJ.js";import{Q as b}from"./QuickNav-knx6iT2l.js";import"./index-DVAb2BqV.js";var N=Object.getOwnPropertyDescriptor,k=(o,t,f,l)=>{for(var i=l>1?void 0:l?N(t,f):t,n=o.length-1,s;n>=0;n--)(s=o[n])&&(i=s(i)||i);return i};let u=class extends y{};u=k([d({components:{QuickNav:b}})],u);const T={id:"Content",class:"p-6 pb-24 max-w-3xl mx-auto"},V={class:"mb-8"},C={class:"text-lg text-center font-light relative px-7"};function $(o,t,f,l,i,n){const s=p("QuickNav"),c=p("font-awesome"),m=p("router-link");return x(),w(h,null,[a(s),e("section",T,[e("div",V,[e("div",C,[e("h1",{class:"text-lg text-center px-2 py-1 absolute -left-2 -top-1",onClick:t[0]||(t[0]=_=>o.$router.back())},[a(c,{icon:"chevron-left",class:"fa-fw"})])]),t[1]||(t[1]=e("h1",{id:"ViewHeading",class:"text-4xl text-center font-light pt-4 mb-8"}," Notification Types ",-1))]),e("div",null,[t[6]||(t[6]=e("p",null,"There are two types of notifications:",-1)),t[7]||(t[7]=e("h2",{class:"text-xl font-semibold mt-4"},"Reminder Notifications",-1)),t[8]||(t[8]=e("div",null,[e("p",null," The Reminder Notification will be sent to you daily with a specific message, at whatever time you choose. Use it to remind yourself to act, for example: pause and consider who has given you something, so you can record thanks in here. "),e("p",null," This is a reliable message, but it doesn't contain any details about activity that might be especially interesting to you. ")],-1)),t[9]||(t[9]=e("h2",{class:"text-xl font-semibold mt-4"},"New Activity Notifications",-1)),e("div",null,[t[5]||(t[5]=e("p",null," The New Activity Notification will be sent to you when there is new, relevant activity for you. It will only trigger if something involves you or a project of interest; it will not bug you for other, general activity. ",-1)),e("p",null,[t[3]||(t[3]=r(" This type is not as reliable as a Reminder Notification because mobile devices often suppress such notifications to save battery. (If you want to quickly check for relevant activity daily, use the Reminder Notification and open the app and look for a large green button that points out new activity that is personal to you. We are working on other ways to notify you more reliably. ")),a(m,{class:"text-blue-500",to:"/help"},{default:g(()=>[t[2]||(t[2]=r(" go here to follow us or contact us ")),a(c,{icon:"chevron-right",class:"fa-fw"})]),_:1}),t[4]||(t[4]=r(".) "))])])])])],64)}const j=v(u,[["render",$]]);export{j as default};

1
android/app/src/main/assets/public/assets/HelpNotificationsView-DTwRcdk3.js

File diff suppressed because one or more lines are too long

1
android/app/src/main/assets/public/assets/HelpOnboardingView-DzGyZoaR.js

@ -0,0 +1 @@
import{V as f,C as h,_ as g,j as x,m as e,o,k as i,w as y,B as u,E as v}from"./main.common-CyN0wKDJ.js";import{Q as b}from"./QuickNav-knx6iT2l.js";import"./index-DVAb2BqV.js";var w=Object.getOwnPropertyDescriptor,k=(l,t,p,a)=>{for(var s=a>1?void 0:a?w(t,p):t,r=l.length-1,n;r>=0;r--)(n=l[r])&&(s=n(s)||s);return s};let d=class extends f{};d=k([h({components:{QuickNav:b}})],d);const T={id:"Content",class:"p-6 pb-24 max-w-3xl mx-auto"},C={class:"ml-4"},c={class:"ml-4"};function S(l,t,p,a,s,r){const n=u("font-awesome"),m=u("router-link");return v(),x("section",T,[t[21]||(t[21]=e("div",{class:"mb-8"},[e("h1",{id:"ViewHeading",class:"text-4xl text-center font-light pt-4 mb-8"}," Time Safari Onboarding Instructions ")],-1)),e("p",null,[t[0]||(t[0]=o(" To invite someone the easiest way, send them a link that you generate from this page: ")),i(m,{to:{name:"invite-one"},class:"bg-gradient-to-b from-green-400 to-green-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1.5 py-2 rounded-md"},{default:y(()=>[i(n,{icon:"envelope-open-text",class:"fa-fw text-xl"})]),_:1})]),t[22]||(t[22]=e("p",null,"Then watch that page to see when they accept their invite.",-1)),e("p",null,[t[1]||(t[1]=o(" (That page is also reachable from the Contacts ")),i(n,{icon:"users"}),t[2]||(t[2]=o(" page though the invitation ")),i(n,{icon:"envelope-open-text"}),t[3]||(t[3]=o(" icon.) "))]),t[23]||(t[23]=e("h1",{class:"mt-4 font-bold text-xl"},"Next Steps",-1)),t[24]||(t[24]=o(" Although not totally necessary, backups are important to understand. ")),e("div",C,[t[6]||(t[6]=e("h1",{class:"font-bold text-xl"},"Without a backup, you can lose data.",-1)),e("div",null,[e("p",null,[t[4]||(t[4]=o(" Exporting backups (from the Account ")),i(n,{icon:"circle-user"}),t[5]||(t[5]=o(" screen) is important for the case where they lose their device. This is especially true for the Identifier Seed: that is theirs and and theirs alone, and currently nobody else can recover it if they lose it. The good thing is that anyone can create a new account and simply inform their network of their new ID. "))])])]),t[25]||(t[25]=e("h1",{class:"mt-4 font-bold text-xl"},"Advanced",-1)),t[26]||(t[26]=o(" The following are optional steps for even more functionality. ")),e("div",c,[t[15]||(t[15]=e("h1",{class:"font-bold text-xl"},"Add Contact & Register",-1)),e("p",null,[t[7]||(t[7]=o(" You share even more information such as your picture and name when you share with your QR code at these links: ")),i(n,{icon:"qrcode"})]),t[16]||(t[16]=e("p",null," Scanning those with your cameras will automatically register people and add them to each other's contact lists. ",-1)),t[17]||(t[17]=e("p",null," The following are more detailed manual steps: ",-1)),e("div",null,[t[12]||(t[12]=e("p",null," 1) Have them follow their yellow prompts. ",-1)),e("p",null,[t[8]||(t[8]=o(" 2) Scan their QR, or have them tap on it to copy their info and send it to you. Then you can add them to your Contacts ")),i(n,{icon:"users"})]),e("p",null,[t[9]||(t[9]=o(" 3) You can register them at their info page ")),i(n,{icon:"circle-info"}),t[10]||(t[10]=o(" and click on the register button ")),i(n,{icon:"person-circle-question"})]),e("p",null,[t[11]||(t[11]=o(" 4) Add yourself to their Contacts ")),i(n,{icon:"users"})])]),t[18]||(t[18]=e("h1",{class:"font-bold text-xl"},"Install",-1)),t[19]||(t[19]=e("div",null,[e("p",null,' Have them visit TimeSafari.app in a browser, preferably Chrome or Safari, and then look for the "Install" selection which adds this app to their desktop. This enables other things, like the ability to "share" a photo from their device directly to Time Safari, and it makes notifications more reliable. ')],-1)),t[20]||(t[20]=e("h1",{class:"font-bold text-xl"},"Enable Notifications",-1)),e("div",null,[e("p",null,[t[13]||(t[13]=o(" Enable notifications from the Account page ")),i(n,{icon:"circle-user"}),t[14]||(t[14]=o(". Those notifications might show up on the device depending on your settings. For the most reliable habits, set an alarm or do some other ritual to record gratitude every day. "))])])])])}const E=g(d,[["render",S]]);export{E as default};

1
android/app/src/main/assets/public/assets/HelpView-DsXG13ZM.js

File diff suppressed because one or more lines are too long

1
android/app/src/main/assets/public/assets/HomeView-B5WscYpf.css

@ -0,0 +1 @@
.dialog-overlay{z-index:50;position:fixed;top:0;left:0;right:0;bottom:0;background-color:#00000080;display:flex;justify-content:center;align-items:center;padding:1.5rem}#dialogFeedFilters.dialog-overlay{z-index:100;overflow:scroll}.dialog{background-color:#fff;padding:1rem;border-radius:.5rem;width:100%;max-width:500px}.fade-enter-active[data-v-9670bbe2],.fade-leave-active[data-v-9670bbe2]{transition:opacity .2s ease}.fade-enter-from[data-v-9670bbe2],.fade-leave-to[data-v-9670bbe2]{opacity:0}

1
android/app/src/main/assets/public/assets/HomeView-CXlWa-io.js

File diff suppressed because one or more lines are too long

1
android/app/src/main/assets/public/assets/IdentitySwitcherView-Djq6J6Uq.js

File diff suppressed because one or more lines are too long

1
android/app/src/main/assets/public/assets/ImageMethodDialog-BWunsoUB.js

@ -0,0 +1 @@
var v=Object.defineProperty;var y=(t,e,o)=>e in t?v(t,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[e]=o;var r=(t,e,o)=>y(t,typeof e!="symbol"?e+"":e,o);import{g as w,C as _,V as x,a7 as k,_ as C,B as h,j as u,E as d,n as D,k as g,m as a,o as U,p as $,x as P,z as f,F as B}from"./main.common-CyN0wKDJ.js";import{P as I}from"./PhotoDialog-YJiUta46.js";var T=Object.getOwnPropertyDescriptor,V=(t,e,o,s)=>{for(var l=s>1?void 0:s?T(e,o):e,p=t.length-1,i;p>=0;p--)(i=t[p])&&(l=i(l)||l);return l};const b=w();let m=class extends x{constructor(){super(...arguments);r(this,"$notify");r(this,"claimType");r(this,"crop",!1);r(this,"imageCallback",()=>{});r(this,"imageUrl");r(this,"visible",!1)}open(o,s,l){this.claimType=s,this.crop=!!l,this.imageCallback=o,this.visible=!0}openPhotoDialog(o,s){this.visible=!1,this.$refs.photoDialog.open(this.imageCallback,this.claimType,this.crop,o,s)}async uploadImageFile(o){this.visible=!1,b.value=o.target.files[0];const s=b.value;if(s!=null){const l=new FileReader;l.onload=async p=>{var c;const i=(c=p.target)==null?void 0:c.result;if(i){const n=new Blob([new Uint8Array(i)],{type:s.type});this.openPhotoDialog(n,s.name)}},l.readAsArrayBuffer(s)}}async acceptUrl(){if(this.visible=!1,this.crop)try{const o=await k.get(this.imageUrl,{responseType:"blob"}),l=new URL(this.imageUrl).pathname.split("/").pop();this.$refs.photoDialog.open(this.imageCallback,this.claimType,this.crop,o.data,l)}catch{this.$notify({group:"alert",type:"danger",title:"Error",text:"There was an error retrieving that image."},5e3)}else this.imageCallback(this.imageUrl)}close(){this.visible=!1}};m=V([_({components:{PhotoDialog:I}})],m);const F={key:0,class:"dialog-overlay z-[60]"},N={class:"dialog relative"},R={class:"text-lg text-center font-light relative z-50"},A={class:"text-center mt-8"},M={class:"mt-4"},z={class:"mt-4"},E={class:"mt-2"},O={class:"ml-2"};function j(t,e,o,s,l,p){const i=h("font-awesome"),c=h("PhotoDialog");return d(),u(B,null,[t.visible?(d(),u("div",F,[a("div",N,[a("div",R,[e[4]||(e[4]=a("div",{id:"ViewHeading",class:"text-center font-bold absolute top-0 left-0 right-0 px-4 py-0.5 bg-black/50 text-white leading-none"}," Add Photo ",-1)),a("div",{class:"text-lg text-center px-2 py-0.5 leading-none absolute right-0 top-0 text-white",onClick:e[0]||(e[0]=n=>t.close())},[g(i,{icon:"xmark",class:"w-[1em]"})])]),a("div",null,[a("div",A,[a("div",null,[g(i,{icon:"camera",class:"bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-2 rounded-md",onClick:e[1]||(e[1]=n=>t.openPhotoDialog())})]),a("div",M,[a("input",{type:"file",onChange:e[2]||(e[2]=(...n)=>t.uploadImageFile&&t.uploadImageFile(...n))},null,32)]),a("div",z,[a("span",E,[e[5]||(e[5]=U(" ... or paste a URL: ")),$(a("input",{"onUpdate:modelValue":e[3]||(e[3]=n=>t.imageUrl=n),type:"text",class:"border-2"},null,512),[[P,t.imageUrl]])]),a("span",O,[t.imageUrl?(d(),f(i,{key:0,icon:"check",class:"bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-2 rounded-md cursor-pointer",onClick:t.acceptUrl},null,8,["onClick"])):(d(),f(i,{key:1,icon:"check",class:"text-white bg-white px-2 py-2"}))])])])])])])):D("",!0),g(c,{ref:"photoDialog"},null,512)],64)}const J=C(m,[["render",j]]);export{J as I};

1
android/app/src/main/assets/public/assets/ImageMethodDialog-CTvzd81h.css

@ -0,0 +1 @@
.dialog-overlay{z-index:50;position:fixed;top:0;left:0;right:0;bottom:0;background-color:#00000080;display:flex;justify-content:center;align-items:center;padding:1.5rem}.dialog{background-color:#fff;padding:1rem;border-radius:.5rem;width:100%;max-width:700px}

1
android/app/src/main/assets/public/assets/ImportAccountView-BQQjRLVc.js

@ -0,0 +1 @@
var w=Object.defineProperty;var y=(t,e,r)=>e in t?w(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var s=(t,e,r)=>y(t,typeof e!="symbol"?e+"":e,r);import{V as x,A as g,f as E,a6 as A,e as h,M as k,l as C,C as P,_ as S,j as u,m as o,p as m,n as c,o as v,k as I,x as f,s as T,B as $,E as p}from"./main.common-CyN0wKDJ.js";import{a9 as V,E as N,aa as O,ab as R}from"./index-BuQXBPSi.js";import"./index-DVAb2BqV.js";import"./index-B6aF1R1z.js";import"./_isString-BCVd99Zj.js";var _=Object.getOwnPropertyDescriptor,D=(t,e,r,n)=>{for(var a=n>1?void 0:n?_(e,r):e,d=t.length-1,l;d>=0;d--)(l=t[d])&&(a=l(a)||a);return a};let b=class extends x{constructor(){super(...arguments);s(this,"TEST_USER_0_MNEMONIC","rigid shrug mobile smart veteran half all pond toilet brave review universe ship congress found yard skate elite apology jar uniform subway slender luggage");s(this,"UPORT_DERIVATION_PATH","m/7696500'/0'/0'/0'");s(this,"AppString",g);s(this,"$notify");s(this,"$router");s(this,"apiServer","");s(this,"address","");s(this,"derivationPath",V);s(this,"mnemonic","");s(this,"numAccounts",0);s(this,"privateHex","");s(this,"publicHex","");s(this,"showAdvanced",!1);s(this,"shouldErase",!1)}async created(){this.numAccounts=await N();const r=await E();this.apiServer=r.apiServer||""}onCancelClick(){this.$router.back()}isNotProdServer(){return this.apiServer!==g.PROD_ENDORSER_API_SERVER}async fromMnemonic(){const r=this.mnemonic.trim().toLowerCase();try{[this.address,this.privateHex,this.publicHex]=O(r,this.derivationPath);const n=R(this.address,this.publicHex,this.privateHex,this.derivationPath),a=await A;this.shouldErase&&await a.accounts.clear(),await a.accounts.add({dateCreated:new Date().toISOString(),derivationPath:this.derivationPath,did:n.did,identity:JSON.stringify(n),mnemonic:r,publicKeyHex:n.keys[0].publicKeyHex}),await h.open(),await h.settings.update(k,{activeDid:n.did}),this.$router.push({name:"account"})}catch(n){C.error("Error saving mnemonic & updating settings:",n),n=="Error: invalid mnemonic"?this.$notify({group:"alert",type:"danger",title:"Invalid Mnemonic",text:"Please check your mnemonic and try again."},5e3):this.$notify({group:"alert",type:"danger",title:"Error",text:"Got an error creating that identifier."},5e3)}}};b=D([P({components:{}})],b);const H={id:"Content",class:"p-6 pb-24 max-w-3xl mx-auto"},M={id:"ViewBreadcrumb",class:"mb-8"},U={class:"text-lg text-center font-light relative px-7"},B={key:0},j={class:"ml-4"},F={key:0,class:"mt-4"},K={key:1,class:"mt-4 text-blue-500"},G={class:"mt-8"},L={class:"grid grid-cols-1 sm:grid-cols-2 gap-2"};function J(t,e,r,n,a,d){const l=$("font-awesome");return p(),u("section",H,[o("div",M,[o("h1",U,[o("button",{class:"text-lg text-center px-2 py-1 absolute -left-2 -top-1",onClick:e[0]||(e[0]=i=>t.$router.go(-1))},[I(l,{icon:"chevron-left"})]),e[9]||(e[9]=v(" Import Existing Identifier "))])]),e[13]||(e[13]=o("p",{class:"text-center text-xl mb-4 font-light"}," Enter your seed phrase below to import your identifier on this device. ",-1)),m(o("textarea",{id:"seed-input","onUpdate:modelValue":e[1]||(e[1]=i=>t.mnemonic=i),type:"text",placeholder:"Seed Phrase",class:"block w-full rounded border border-slate-400 mb-4 px-3 py-2"},null,512),[[f,t.mnemonic]]),o("h3",{class:"text-sm uppercase font-semibold mb-3",onClick:e[2]||(e[2]=i=>t.showAdvanced=!t.showAdvanced)}," Advanced "),t.showAdvanced?(p(),u("div",B,[e[12]||(e[12]=v(" Enter a custom derivation path ")),m(o("input",{"onUpdate:modelValue":e[3]||(e[3]=i=>t.derivationPath=i),type:"text",class:"block w-full rounded border border-slate-400 mb-2 px-3 py-2"},null,512),[[f,t.derivationPath]]),o("span",j,[e[10]||(e[10]=v(" For previous uPort or Endorser users, ")),o("a",{class:"text-blue-500",onClick:e[4]||(e[4]=i=>t.derivationPath=t.UPORT_DERIVATION_PATH)}," click here to use that value. ")]),t.numAccounts==1?(p(),u("div",F,[m(o("input",{"onUpdate:modelValue":e[5]||(e[5]=i=>t.shouldErase=i),type:"checkbox",class:"mr-2"},null,512),[[T,t.shouldErase]]),e[11]||(e[11]=o("label",null,"Erase the previous identifier.",-1))])):c("",!0),t.isNotProdServer()?(p(),u("div",K,[o("button",{onClick:e[6]||(e[6]=i=>t.mnemonic=t.TEST_USER_0_MNEMONIC)}," Use mnemonic for Test User #0 ")])):c("",!0)])):c("",!0),o("div",G,[o("div",L,[o("button",{class:"block w-full text-center text-lg font-bold uppercase bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-3 rounded-md",onClick:e[7]||(e[7]=i=>t.fromMnemonic())}," Import "),o("button",{type:"button",class:"block w-full text-center text-md uppercase bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1.5 py-2 rounded-md",onClick:e[8]||(e[8]=i=>t.onCancelClick())}," Cancel ")])])])}const ee=S(b,[["render",J]]);export{ee as default};

1
android/app/src/main/assets/public/assets/ImportDerivedAccountView-C1I7EFbj.js

@ -0,0 +1 @@
var g=Object.defineProperty;var b=(e,t,s)=>t in e?g(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s;var l=(e,t,s)=>b(e,typeof t!="symbol"?t+"":t,s);import{V as _,a6 as w,e as x,M as D,l as A,C as k,_ as C,j as u,m as o,o as P,k as $,n as I,F as E,G as O,B as V,E as m,z as y,t as F}from"./main.common-CyN0wKDJ.js";import{a9 as B,ac as T,ad as N,aa as S,ab as H}from"./index-BuQXBPSi.js";import"./index-DVAb2BqV.js";import"./index-B6aF1R1z.js";import"./_isString-BCVd99Zj.js";var j=Object.getOwnPropertyDescriptor,M=(e,t,s,i)=>{for(var n=i>1?void 0:i?j(t,s):t,c=e.length-1,r;c>=0;c--)(r=e[c])&&(n=r(n)||n);return n};let h=class extends _{constructor(){super(...arguments);l(this,"$route");l(this,"$router");l(this,"derivationPath",B);l(this,"didArrays",[]);l(this,"selectedArrayFirstDid","")}async mounted(){const t=await T(),s={};t.forEach(i=>{const n=s[i.mnemonic]||[];s[i.mnemonic]=n.concat([i.did])}),this.didArrays=Object.values(s),this.selectedArrayFirstDid=this.didArrays[0][0]}onCancelClick(){this.$router.back()}switchAccount(t){this.selectedArrayFirstDid=t}async incrementDerivation(){const t=this.didArrays.find(d=>d[0]===this.selectedArrayFirstDid)||[],s=await w,i=await s.accounts.where("did").anyOf(...t).toArray(),n=i[0];i.slice(1).forEach(d=>{d.derivationPath>n.derivationPath&&(n.derivationPath=d.derivationPath)});const c=N(n.derivationPath),r=n.mnemonic,[a,v,f]=S(r,c),p=H(a,f,v,c);try{await s.accounts.add({dateCreated:new Date().toISOString(),derivationPath:c,did:p.did,identity:JSON.stringify(p),mnemonic:r,publicKeyHex:p.keys[0].publicKeyHex}),await x.open(),await x.settings.update(D,{activeDid:p.did}),this.$router.push({name:"account"})}catch(d){A.error("Error saving mnemonic & updating settings:",d)}}};h=M([k({components:{}})],h);const K={id:"Content",class:"p-6 pb-24 max-w-3xl mx-auto"},R={id:"ViewBreadcrumb",class:"mb-8"},G={class:"text-lg text-center font-light relative px-7"},L={key:0},W={class:"mb-4"},z=["onClick"],J={class:"overflow-hidden"},U={class:"text-sm text-slate-500 truncate"},Y={class:"mt-8"},q={class:"grid grid-cols-1 sm:grid-cols-2 gap-2"};function Q(e,t,s,i,n,c){const r=V("font-awesome");return m(),u("section",K,[o("div",R,[o("h1",G,[o("button",{class:"text-lg text-center px-2 py-1 absolute -left-2 -top-1",onClick:t[0]||(t[0]=a=>e.$router.go(-1))},[$(r,{icon:"chevron-left"})]),t[3]||(t[3]=P(" Derive from Existing Identity "))])]),o("div",null,[t[4]||(t[4]=o("p",{class:"text-center text-xl mb-4 font-light"}," Will increment the maximum known derivation path from the existing seed. ",-1)),e.didArrays.length>1?(m(),u("p",L," Choose existing DIDs from same seed phrase to compute derivation. ")):I("",!0),o("ul",W,[(m(!0),u(E,null,O(e.didArrays,a=>(m(),u("li",{key:a[0],class:"block bg-slate-100 rounded-md flex items-center px-4 py-3 mb-2",onClick:v=>e.switchAccount(a[0])},[a[0]==e.selectedArrayFirstDid?(m(),y(r,{key:0,icon:"circle",class:"fa-fw text-blue-500 text-xl mr-3"})):(m(),y(r,{key:1,icon:"circle",class:"fa-fw text-slate-400 text-xl mr-3"})),o("span",J,[o("div",U,[o("code",null,F(a.join(",")),1)])])],8,z))),128))])]),o("div",Y,[o("div",q,[o("button",{class:"block w-full text-center text-lg font-bold uppercase bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-3 rounded-md",onClick:t[1]||(t[1]=a=>e.incrementDerivation())}," Increment and Import "),o("button",{type:"button",class:"block w-full text-center text-md uppercase bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1.5 py-2 rounded-md",onClick:t[2]||(t[2]=a=>e.onCancelClick())}," Cancel ")])])])}const nt=C(h,[["render",Q]]);export{nt as default};

1
android/app/src/main/assets/public/assets/InfiniteScroll-BPyLyh-5.js

@ -0,0 +1 @@
var p=Object.defineProperty;var d=(r,e,t)=>e in r?p(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var a=(r,e,t)=>d(r,typeof e!="symbol"?e+"":e,t);import{a2 as f,ax as h,C as u,V as v,_,j as b,E as I,W as x,m as $}from"./main.common-CyN0wKDJ.js";var m=Object.defineProperty,y=Object.getOwnPropertyDescriptor,l=(r,e,t,n)=>{for(var s=n>1?void 0:n?y(e,t):e,i=r.length-1,c;i>=0;i--)(c=r[i])&&(s=(n?c(e,t,s):c(s))||s);return n&&s&&m(e,t,s),s};let o=class extends v{constructor(){super(...arguments);a(this,"distance");a(this,"observer");a(this,"isInitialRender",!0)}updated(){if(!this.observer){const t={root:null,rootMargin:`0px 0px ${this.distance}px 0px`,threshold:1};this.observer=new IntersectionObserver(this.handleIntersection,t),this.observer.observe(this.$refs.sentinel)}}beforeUnmount(){this.observer&&this.observer.disconnect()}handleIntersection(t){return!!t[0].isIntersecting}};l([f({default:200})],o.prototype,"distance",2);l([h("reached-bottom")],o.prototype,"handleIntersection",1);o=l([u],o);const O={ref:"scrollContainer"},C={ref:"sentinel",style:{height:"1px"}};function P(r,e,t,n,s,i){return I(),b("div",O,[x(r.$slots,"default"),$("div",C,null,512)],512)}const w=_(o,[["render",P]]);export{w as I};

1
android/app/src/main/assets/public/assets/InviteOneAcceptView-Cw0tVuoN.js

@ -0,0 +1 @@
var w=Object.defineProperty;var g=(i,t,e)=>t in i?w(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e;var a=(i,t,e)=>g(i,typeof t!="symbol"?t+"":t,e);import{V as y,e as I,f as k,a as x,J as v,C as $,_ as A,j as p,k as h,m as c,p as J,x as b,F as E,B as u,E as l}from"./main.common-CyN0wKDJ.js";import{Q as D}from"./QuickNav-knx6iT2l.js";import{P as V,I as C,e as S}from"./index-BuQXBPSi.js";import"./index-DVAb2BqV.js";import"./index-B6aF1R1z.js";import"./_isString-BCVd99Zj.js";var P=Object.getOwnPropertyDescriptor,F=(i,t,e,s)=>{for(var n=s>1?void 0:s?P(t,e):t,r=i.length-1,o;r>=0;r--)(o=i[r])&&(n=o(n)||n);return n};let d=class extends y{constructor(){super(...arguments);a(this,"$notify");a(this,"$router");a(this,"$route");a(this,"activeDid","");a(this,"apiServer","");a(this,"checkingInvite",!0);a(this,"inputJwt","")}async mounted(){this.checkingInvite=!0,await I.open();const e=await k();this.activeDid=e.activeDid||"",this.apiServer=e.apiServer||"",this.activeDid||(this.activeDid=await V());const s=this.$route.params.jwt||"";await this.processInvite(s,!1),this.checkingInvite=!1}async processInvite(e,s){this.checkingInvite=!0;try{const n=this.extractJwtFromInput(e);if(!n){this.handleMissingJwt(s);return}await this.validateAndRedirect(n)}catch(n){this.handleError(n,s)}finally{this.checkingInvite=!1}}extractJwtFromInput(e){const s=e??"",n=s.match(/(https?:\/\/[^\s]+)/);if(n!=null&&n[1]){const o=n[1].match(/\/invite-one-accept\/([^?]+)/);if(o!=null&&o[1])return o[1]}const r=s.match(/(ey[\w.-]+)/);return r!=null&&r[1]?r[1]:""}async validateAndRedirect(e){C(e),this.$router.push({name:"contacts",query:{inviteJwt:e}})}handleMissingJwt(e){e&&this.$notify({group:"alert",type:"danger",title:"Missing Invite",text:"There was no invite. Paste the entire text that has the data."},5e3)}handleError(e,s){const n="Error accepting invite: "+S(e);x(n,!0),s&&this.$notify({group:"alert",type:"danger",title:"Error",text:"There was an error processing that invite."},3e3)}async checkInvite(e){(e.endsWith(v)||e.endsWith(v+"/")||e.endsWith("invite-one-accept")||e.endsWith("invite-one-accept/"))&&this.$notify({group:"alert",type:"danger",title:"Error",text:"That is only part of the invite data; it's missing some at the end. Try another way to get the full data."},5e3)}};d=F([$({components:{QuickNav:D}})],d);const O={id:"Content",class:"p-6 pb-24 max-w-3xl mx-auto"},T={key:0,class:"text-lg text-center font-light relative px-7"},N={key:1,class:"text-center mt-4"};function B(i,t,e,s,n,r){const o=u("QuickNav"),m=u("font-awesome");return l(),p(E,null,[h(o,{selected:"Invite"}),c("section",O,[i.checkingInvite?(l(),p("div",T,[h(m,{icon:"spinner",class:"fa-spin-pulse"})])):(l(),p("div",N,[t[3]||(t[3]=c("p",null,"That invitation did not work.",-1)),t[4]||(t[4]=c("p",{class:"mt-2"}," Go back to your invite message and copy the entire text, then paste it here. ",-1)),t[5]||(t[5]=c("p",{class:"mt-2"}," If the data looks correct, try Chrome. (For example, iOS may have cut off the invite data, or it may have shown a preview that stole your invite.) If it still complains, you may need the person who invited you to send a new one. ",-1)),J(c("textarea",{"onUpdate:modelValue":t[0]||(t[0]=f=>i.inputJwt=f),placeholder:"Paste invitation...",class:"mt-4 border-2 border-gray-300 p-2 rounded",cols:"30",onInput:t[1]||(t[1]=()=>i.checkInvite(i.inputJwt))},null,544),[[b,i.inputJwt]]),t[6]||(t[6]=c("br",null,null,-1)),c("button",{class:"ml-2 p-2 bg-blue-500 text-white rounded",onClick:t[2]||(t[2]=()=>i.processInvite(i.inputJwt,!0))}," Accept ")]))])],64)}const M=A(d,[["render",B]]);export{M as default};

1
android/app/src/main/assets/public/assets/InviteOneView-DYmASMSL.js

File diff suppressed because one or more lines are too long

1
android/app/src/main/assets/public/assets/MembersList-DHiPQX6B.js

File diff suppressed because one or more lines are too long

1
android/app/src/main/assets/public/assets/NewActivityView-BUxprUgh.js

File diff suppressed because one or more lines are too long

1
android/app/src/main/assets/public/assets/NewEditAccountView-08XchwHh.js

@ -0,0 +1 @@
var p=Object.defineProperty;var m=(t,e,s)=>e in t?p(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s;var c=(t,e,s)=>m(t,typeof e!="symbol"?e+"":e,s);import{V as u,f as b,e as g,M as v,C as f,_ as w,j as x,m as o,p as _,o as C,k as N,x as k,B as h,E as $}from"./main.common-CyN0wKDJ.js";import"./index-DVAb2BqV.js";var y=Object.getOwnPropertyDescriptor,V=(t,e,s,i)=>{for(var n=i>1?void 0:i?y(e,s):e,a=t.length-1,r;a>=0;a--)(r=t[a])&&(n=r(n)||n);return n};let d=class extends u{constructor(){super(...arguments);c(this,"$router");c(this,"givenName","")}async created(){const s=await b();this.givenName=(s.firstName||"")+(s.lastName?` ${s.lastName}`:"")}async onClickSaveChanges(){await g.settings.update(v,{firstName:this.givenName,lastName:""}),this.$router.back()}onClickCancel(){this.$router.back()}};d=V([f({components:{}})],d);const E={id:"Content",class:"p-6 pb-24 max-w-3xl mx-auto"},S={id:"ViewBreadcrumb",class:"mb-8"},A={class:"text-lg text-center font-light relative px-7"},B={class:"mt-8"},T={class:"grid grid-cols-1 sm:grid-cols-2 gap-2"};function D(t,e,s,i,n,a){const r=h("font-awesome");return $(),x("section",E,[o("div",S,[o("h1",A,[o("button",{class:"text-lg text-center px-2 py-1 absolute -left-2 -top-1",onClick:e[0]||(e[0]=l=>t.$router.back())},[N(r,{icon:"chevron-left",class:"fa-fw"})]),e[4]||(e[4]=C(" Edit Identity "))])]),_(o("input",{"onUpdate:modelValue":e[1]||(e[1]=l=>t.givenName=l),type:"text",placeholder:"Name",class:"block w-full rounded border border-slate-400 mb-4 px-3 py-2"},null,512),[[k,t.givenName]]),o("div",B,[o("div",T,[o("button",{type:"button",class:"block w-full text-center text-lg font-bold uppercase bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-3 rounded-md mb-2",onClick:e[2]||(e[2]=l=>t.onClickSaveChanges())}," Save Changes "),o("button",{type:"button",class:"block w-full text-center text-md uppercase bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-3 rounded-md mb-2",onClick:e[3]||(e[3]=l=>t.onClickCancel())}," Cancel ")])])])}const P=w(d,[["render",D]]);export{P as default};

1
android/app/src/main/assets/public/assets/NewEditProjectView-BpvVO4QU.js

File diff suppressed because one or more lines are too long

1
android/app/src/main/assets/public/assets/NewIdentifierView-BcMJ3Mja.js

@ -0,0 +1 @@
var v=Object.defineProperty;var x=(t,e,s)=>e in t?v(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s;var d=(t,e,s)=>x(t,typeof e!="symbol"?e+"":e,s);import"./dexie-export-import-C-BBh-BJ.js";import{V as g,C as w,_,j as c,k as r,m as n,F as y,B as u,E as m}from"./main.common-CyN0wKDJ.js";import{P as b}from"./index-BuQXBPSi.js";import{Q as k}from"./QuickNav-knx6iT2l.js";import"./index-DVAb2BqV.js";import"./index-B6aF1R1z.js";import"./_isString-BCVd99Zj.js";var $=Object.getOwnPropertyDescriptor,C=(t,e,s,l)=>{for(var o=l>1?void 0:l?$(e,s):e,i=t.length-1,a;i>=0;i--)(a=t[i])&&(o=a(o)||o);return o};let f=class extends g{constructor(){super(...arguments);d(this,"loading",!0);d(this,"$router")}async mounted(){await b(),this.loading=!1,setTimeout(()=>{this.$router.push({name:"home"})},1e3)}};f=C([w({components:{QuickNav:k}})],f);const N={id:"Content",class:"p-6 pb-24 max-w-3xl mx-auto"},V={class:"mb-8"},h={class:"text-lg text-center font-light relative px-7"},I={class:"flex justify-center py-12"},B={key:0},Q={key:1};function j(t,e,s,l,o,i){const a=u("QuickNav"),p=u("font-awesome");return m(),c(y,null,[r(a),n("section",N,[n("div",V,[n("div",h,[n("h1",{class:"text-lg text-center px-2 py-1 absolute -left-2 -top-1",onClick:e[0]||(e[0]=A=>t.$router.back())},[r(p,{icon:"chevron-left",class:"fa-fw"})])]),e[1]||(e[1]=n("h1",{id:"ViewHeading",class:"text-4xl text-center font-light pt-4 mb-8"}," Your Identity ",-1))]),n("div",I,[e[4]||(e[4]=n("div",null,null,-1)),t.loading?(m(),c("div",B,[e[2]||(e[2]=n("span",{class:"text-xl"},"Creating... ",-1)),r(p,{icon:"spinner",class:"fa-spin fa-spin-pulse",color:"green",size:"128"})])):(m(),c("div",Q,[e[3]||(e[3]=n("span",{class:"text-xl"},"Created!",-1)),r(p,{icon:"burst",class:"fa-beat px-12",color:"green",style:{"--fa-animation-duration":"1s","--fa-animation-direction":"reverse","--fa-animation-iteration-count":"1","--fa-beat-scale":"6"}})])),e[5]||(e[5]=n("div",null,null,-1))])])],64)}const Y=_(f,[["render",j]]);export{Y as default};

1
android/app/src/main/assets/public/assets/OfferDetailsView-D06S-2fj.js

File diff suppressed because one or more lines are too long

1
android/app/src/main/assets/public/assets/OfferDialog-CbOg1Z4I.js

File diff suppressed because one or more lines are too long

1
android/app/src/main/assets/public/assets/OnboardMeetingListView-CKTUf9rb.js

File diff suppressed because one or more lines are too long

1
android/app/src/main/assets/public/assets/OnboardMeetingMembersView-CiyaSIo1.js

@ -0,0 +1 @@
var N=Object.defineProperty;var _=(r,t,e)=>t in r?N(r,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[t]=e;var o=(r,t,e)=>_(r,typeof t!="symbol"?t+"":t,e);import{V as k,f as x,a as h,C as S,_ as $,j as l,k as m,m as c,z as R,t as T,F as I,B as g,E as p}from"./main.common-CyN0wKDJ.js";import{Q as O}from"./QuickNav-knx6iT2l.js";import{T as L}from"./TopMessage-ClRBomc-.js";import{M as E}from"./MembersList-DHiPQX6B.js";import{U as V}from"./UserNameDialog-CHrrQR5T.js";import{P as C,g as u,ap as f,e as b,au as w}from"./index-BuQXBPSi.js";import"./index-DVAb2BqV.js";import"./index-B6aF1R1z.js";import"./_isString-BCVd99Zj.js";var F=Object.getOwnPropertyDescriptor,A=(r,t,e,i)=>{for(var s=i>1?void 0:i?F(t,e):t,n=r.length-1,a;n>=0;n--)(a=r[n])&&(s=a(s)||s);return s};let M=class extends k{constructor(){super(...arguments);o(this,"activeDid","");o(this,"apiServer","");o(this,"errorMessage","");o(this,"firstName","");o(this,"isRegistered",!1);o(this,"isLoading",!0);o(this,"$route");o(this,"$router");o(this,"userNameDialog")}get groupId(){return this.$route.params.groupId||""}get password(){return this.$route.query.password||""}async created(){var i;if(!this.groupId){this.errorMessage="The group info is missing. Go back and try again.";return}if(!this.password){this.errorMessage="The password is missing. Go back and try again.";return}const e=await x();this.activeDid=e.activeDid||"",this.apiServer=e.apiServer||"",this.firstName=e.firstName||"",this.isRegistered=e.isRegistered||!1;try{this.activeDid||(this.activeDid=await C(),this.isRegistered=!1);const s=await u(this.activeDid),a=(i=(await this.axios.get(`${this.apiServer}/api/partner/groupOnboardMember`,{headers:s})).data)==null?void 0:i.data;a?String(a.groupId)!==this.groupId?(this.errorMessage="You are already in a different meeting. Reload or go back and try again.",this.isLoading=!1):this.firstName?await this.updateMemberInMeeting(this.firstName):this.$refs.userNameDialog.open(this.updateMemberInMeeting):this.firstName?await this.addMemberToMeeting(this.firstName):this.$refs.userNameDialog.open(this.addMemberToMeeting)}catch(s){this.errorMessage=f(s)||"There was an error checking for that meeting. Reload or go back and try again.",h("Error checking meeting: "+b(s),!0),this.isLoading=!1}}async addMemberToMeeting(e){e!=null&&(this.firstName=e);const i={name:this.firstName,did:this.activeDid,isRegistered:this.isRegistered},s=JSON.stringify(i),n=await w(s,this.password),a=await u(this.activeDid);try{await this.axios.post(`${this.apiServer}/api/partner/groupOnboardMember`,{groupId:this.groupId,content:n},{headers:a})}catch(d){h("Error adding member to meeting: "+b(d),!0),this.errorMessage=f(d)||"You're not in a meeting and couldn't be added to this one. Reload or go back and try again."}this.isLoading=!1}async updateMemberInMeeting(e){e!=null&&(this.firstName=e);const i={name:this.firstName,did:this.activeDid,isRegistered:this.isRegistered},s=JSON.stringify(i),n=await w(s,this.password),a=await u(this.activeDid);try{await this.axios.put(`${this.apiServer}/api/partner/groupOnboardMember`,{content:n},{headers:a})}catch(d){h("Error updating member in meeting: "+b(d),!0),this.errorMessage=f(d)||"There was an error updating your name. Reload or go back and try again."}this.isLoading=!1}handleError(e){this.errorMessage=e}};M=A([S({components:{QuickNav:O,TopMessage:L,MembersList:E,UserNameDialog:V}})],M);const B={id:"Content",class:"p-6 pb-24 max-w-3xl mx-auto"},U={key:0,class:"mt-16 text-center text-4xl bg-slate-400 text-white w-14 py-2.5 rounded-full mx-auto"},Q={key:1},z={class:"text-center text-red-600 py-8"};function P(r,t,e,i,s,n){const a=g("QuickNav"),d=g("TopMessage"),v=g("font-awesome"),y=g("MembersList"),D=g("UserNameDialog");return p(),l(I,null,[m(a,{selected:"Contacts"}),m(d),c("section",B,[t[1]||(t[1]=c("h1",{id:"ViewHeading",class:"text-4xl text-center font-light mb-8"}," Meeting Members ",-1)),r.isLoading?(p(),l("div",U,[m(v,{icon:"spinner",class:"fa-spin-pulse"})])):r.errorMessage?(p(),l("div",Q,[c("div",z,T(r.errorMessage),1),t[0]||(t[0]=c("div",{class:"text-center"}," For authorization, wait for your meeting organizer to approve you. ",-1))])):(p(),R(y,{key:2,password:r.password,onError:r.handleError},null,8,["password","onError"]))]),m(D,{ref:"userNameDialog","callback-on-cancel":!0,"sharing-explanation":"This is encrypted and shared only with people in this meeting."},null,512)],64)}const te=$(M,[["render",P]]);export{te as default};

1
android/app/src/main/assets/public/assets/OnboardMeetingSetupView-BcK1UlJ5.js

File diff suppressed because one or more lines are too long

1
android/app/src/main/assets/public/assets/OnboardingDialog-B6NPp3C9.js

File diff suppressed because one or more lines are too long

1
android/app/src/main/assets/public/assets/OnboardingDialog-DBDPRnmU.css

@ -0,0 +1 @@
.dialog-overlay{z-index:40;position:fixed;top:0;left:0;right:0;bottom:0;background-color:#00000080;display:flex;justify-content:center;align-items:center;padding:1.5rem}.dialog{background-color:#fff;padding:1rem;border-radius:.5rem;width:100%;max-width:500px}

1
android/app/src/main/assets/public/assets/PhotoDialog-VFFukDsZ.css

@ -0,0 +1 @@
.dialog-overlay{z-index:60;position:fixed;top:0;left:0;right:0;bottom:0;background-color:#00000080;display:flex;justify-content:center;align-items:center;padding:1.5rem}.dialog{background-color:#fff;padding:1rem;border-radius:.5rem;width:100%;max-width:700px}.mirror-video{transform:scaleX(-1);-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1)}

20
android/app/src/main/assets/public/assets/PhotoDialog-YJiUta46.js

File diff suppressed because one or more lines are too long

1
android/app/src/main/assets/public/assets/ProjectIcon-YlqUDe0d.js

File diff suppressed because one or more lines are too long

1
android/app/src/main/assets/public/assets/ProjectViewView-76gMhKPr.js

File diff suppressed because one or more lines are too long

1
android/app/src/main/assets/public/assets/ProjectsView-BmYqJOlI.js

File diff suppressed because one or more lines are too long

1
android/app/src/main/assets/public/assets/PushNotificationPermission-DHBIo4Kb.js

File diff suppressed because one or more lines are too long

0
android/app/src/main/assets/public/assets/PushNotificationPermission-tn0RQdqM.css

1
android/app/src/main/assets/public/assets/QuickActionBvcBeginView-4yNKq9KY.js

@ -0,0 +1 @@
var S=Object.defineProperty;var k=(t,e,s)=>e in t?S(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s;var p=(t,e,s)=>k(t,typeof e!="symbol"?e+"":e,s);import{V as T,f as $,a7 as x,l as v,C,_ as V,j as m,k as f,m as r,p as h,s as w,o as B,x as D,F as M,B as b,E as g}from"./main.common-CyN0wKDJ.js";import{D as _}from"./datetime-BDQ5ptpc.js";import{Q as A}from"./QuickNav-knx6iT2l.js";import{T as O}from"./TopMessage-ClRBomc-.js";import{a4 as E,a0 as P,az as N,v as Q,aA as j}from"./index-BuQXBPSi.js";import"./index-DVAb2BqV.js";import"./index-B6aF1R1z.js";import"./_isString-BCVd99Zj.js";var U=Object.getOwnPropertyDescriptor,Y=(t,e,s,a)=>{for(var i=a>1?void 0:a?U(e,s):e,l=t.length-1,d;l>=0;l--)(d=t[l])&&(i=d(i)||i);return i};let y=class extends T{constructor(){super(...arguments);p(this,"$notify");p(this,"$router");p(this,"attended",!0);p(this,"gaveTime",!0);p(this,"hoursStr","1");p(this,"todayOrPreviousStartDate","")}async mounted(){let s=_.now().setZone("America/Denver");s.weekday<6&&(s=s.minus({week:1}));const a=s.set({weekday:6}).set({hour:9}).startOf("hour");this.todayOrPreviousStartDate=a.toISO({suppressMilliseconds:!0})||""}async record(){var l,d;const s=await $(),a=s.activeDid||"",i=s.apiServer||"";try{const u=E(this.hoursStr);this.$notify({group:"alert",type:"toast",title:"Sent..."},1e3);let c=!1;if(this.gaveTime&&u>0){const o=await P(x,i,a,a,void 0,void 0,u,"HUR",N);o.type==="success"?c=!0:(v.error("Error sending time:",o),this.$notify({group:"alert",type:"danger",title:"Error",text:((l=o==null?void 0:o.error)==null?void 0:l.userMessage)||"There was an error sending the time."},5e3))}let n=!1;if(this.attended){const o=await Q(j(a,this.todayOrPreviousStartDate),a,i,x);o.type==="success"?n=!0:(v.error("Error sending attendance:",o),this.$notify({group:"alert",type:"danger",title:"Error",text:((d=o==null?void 0:o.error)==null?void 0:d.userMessage)||"There was an error sending the attendance."},5e3))}if(c||n){const o=c&&n?"Your attendance and time have been recorded.":c?"Your time has been recorded.":"Your attendance has been recorded.";this.$notify({group:"alert",type:"success",title:"Success",text:o},3e3),this.$router.push({path:"/quick-action-bvc"})}}catch(u){v.error("Error sending claims.",u),this.$notify({group:"alert",type:"danger",title:"Error",text:u.userMessage||"There was an error sending the claims."},5e3)}}};y=Y([C({components:{QuickNav:A,TopMessage:O}})],y);const H={id:"Content",class:"p-6 pb-24 max-w-3xl mx-auto"},F={class:"text-lg text-center font-light relative px-7"},I={class:"m-2 flex"},z={class:"m-2 flex"},J={key:0},Z={key:1,class:"h-6"},q={key:0,class:"flex justify-center mt-4"},G={key:1,class:"flex justify-center mt-4"};function L(t,e,s,a,i,l){const d=b("QuickNav"),u=b("TopMessage"),c=b("font-awesome");return g(),m(M,null,[f(d),f(u),r("section",H,[r("div",F,[r("h1",{class:"text-lg text-center px-2 py-1 absolute -left-2 -top-1",onClick:e[0]||(e[0]=n=>t.$router.back())},[f(c,{icon:"chevron-left",class:"fa-fw"})])]),e[10]||(e[10]=r("h1",{id:"ViewHeading",class:"text-4xl text-center font-light px-4 mb-4"}," Beginning of BVC Saturday Meeting ",-1)),r("div",null,[e[8]||(e[8]=r("h2",{class:"text-2xl m-2"},"You're Here",-1)),r("div",I,[h(r("input",{"onUpdate:modelValue":e[1]||(e[1]=n=>t.attended=n),type:"checkbox",class:"h-6 w-6"},null,512),[[w,t.attended]]),e[5]||(e[5]=r("span",{class:"pb-2 pl-2 pr-2"},"Attended",-1))]),r("div",z,[h(r("input",{"onUpdate:modelValue":e[2]||(e[2]=n=>t.gaveTime=n),type:"checkbox",class:"h-6 w-6"},null,512),[[w,t.gaveTime]]),e[7]||(e[7]=r("span",{class:"pb-2 pl-2 pr-2"},"Spent Time",-1)),t.gaveTime?(g(),m("span",J,[h(r("input",{"onUpdate:modelValue":e[3]||(e[3]=n=>t.hoursStr=n),type:"text",placeholder:"How much time",size:"1",class:"border border-slate-400 h-6 px-2"},null,512),[[D,t.hoursStr]]),e[6]||(e[6]=B(" hour(s) "))])):(g(),m("span",Z))])]),t.attended||t.gaveTime&&t.hoursStr&&t.hoursStr!="0"?(g(),m("div",q,[r("button",{class:"block text-center text-md font-bold bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-3 rounded-md w-56",onClick:e[4]||(e[4]=n=>t.record())}," Sign & Send ")])):(g(),m("div",G,e[9]||(e[9]=[r("button",{class:"block text-center text-md font-bold bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-3 rounded-md w-56"}," Select Your Actions ",-1)])))])],64)}const ae=V(y,[["render",L]]);export{ae as default};

1
android/app/src/main/assets/public/assets/QuickActionBvcEndView-DP7Td2Wb.js

File diff suppressed because one or more lines are too long

1
android/app/src/main/assets/public/assets/QuickActionBvcView-ChtpH9P5.js

@ -0,0 +1 @@
var b=Object.defineProperty;var g=(e,t,o)=>t in e?b(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var m=(e,t,o)=>g(e,typeof t!="symbol"?t+"":t,o);import{V as v,C as k,_ as w,j as V,k as s,m as a,w as d,F as B,B as c,E as C,o as x}from"./main.common-CyN0wKDJ.js";import{Q as $}from"./QuickNav-knx6iT2l.js";import{T as Q}from"./TopMessage-ClRBomc-.js";import"./index-DVAb2BqV.js";var h=Object.getOwnPropertyDescriptor,y=(e,t,o,l)=>{for(var n=l>1?void 0:l?h(t,o):t,r=e.length-1,i;r>=0;r--)(i=e[r])&&(n=i(n)||n);return n};let p=class extends v{constructor(){super(...arguments);m(this,"$router")}};p=y([k({components:{QuickNav:$,TopMessage:Q}})],p);const N={id:"Content",class:"p-6 pb-24 max-w-3xl mx-auto"},M={class:"text-lg text-center font-light relative px-7"};function T(e,t,o,l,n,r){const i=c("QuickNav"),_=c("TopMessage"),f=c("font-awesome"),u=c("router-link");return C(),V(B,null,[s(i),s(_),a("section",N,[a("div",M,[a("h1",{class:"text-lg text-center px-2 py-1 absolute -left-2 -top-1",onClick:t[0]||(t[0]=A=>e.$router.back())},[s(f,{icon:"chevron-left",class:"fa-fw"})])]),t[3]||(t[3]=a("h1",{id:"ViewHeading",class:"text-4xl text-center font-light px-4 mb-4"}," Bountiful Voluntaryist Community Actions ",-1)),a("div",null,[s(u,{to:{name:"quick-action-bvc-begin"},class:"block text-center text-md font-bold uppercase bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white mt-2 px-2 py-3 rounded-md"},{default:d(()=>t[1]||(t[1]=[x(" Beginning of Meeting ")])),_:1}),s(u,{to:{name:"quick-action-bvc-end"},class:"block text-center text-md font-bold uppercase bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white mt-2 px-2 py-3 rounded-md"},{default:d(()=>t[2]||(t[2]=[x(" End of Meeting ")])),_:1})])])],64)}const P=w(p,[["render",T]]);export{P as default};

1
android/app/src/main/assets/public/assets/QuickNav-knx6iT2l.js

@ -0,0 +1 @@
var v=Object.defineProperty;var b=(s,e,o)=>e in s?v(s,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):s[e]=o;var m=(s,e,o)=>b(s,typeof e!="symbol"?e+"":e,o);import{a2 as w,C as _,V as g,_ as h,B as u,j as k,E as y,m as t,y as i,k as l,w as d}from"./main.common-CyN0wKDJ.js";var C=Object.defineProperty,P=Object.getOwnPropertyDescriptor,p=(s,e,o,n)=>{for(var c=n>1?void 0:n?P(e,o):e,f=s.length-1,a;f>=0;f--)(a=s[f])&&(c=(n?a(e,o,c):a(c))||c);return n&&c&&C(e,o,c),c};let x=class extends g{constructor(){super(...arguments);m(this,"selected","")}};p([w],x.prototype,"selected",2);x=p([_],x);const j={id:"QuickNav",class:"fixed bottom-0 left-0 right-0 bg-slate-200 z-50"},N={class:"flex text-2xl p-2 gap-2 max-w-3xl mx-auto"},Q={class:"flex flex-col items-center"},$={class:"flex flex-col items-center"},B={class:"flex flex-col items-center"},D={class:"flex flex-col items-center"},O={class:"flex flex-col items-center"};function V(s,e,o,n,c,f){const a=u("font-awesome"),r=u("router-link");return y(),k("nav",j,[t("ul",N,[t("li",{class:i({"basis-1/5":!0,"rounded-md":!0,"bg-slate-400 text-white":s.selected==="Home","text-slate-500":s.selected!=="Home"})},[l(r,{to:{name:"home"},class:"block text-center py-2 px-1"},{default:d(()=>[t("div",Q,[l(a,{icon:"house-chimney",class:"fa-fw"}),e[0]||(e[0]=t("span",{class:"text-xs mt-1"},"feed",-1))])]),_:1})],2),t("li",{class:i({"basis-1/5":!0,"rounded-md":!0,"bg-slate-400 text-white":s.selected==="Discover","text-slate-500":s.selected!=="Discover"})},[l(r,{to:{name:"discover"},class:"block text-center py-2 px-1"},{default:d(()=>[t("div",$,[l(a,{icon:"magnifying-glass",class:"fa-fw"}),e[1]||(e[1]=t("span",{class:"text-xs mt-1"},"search",-1))])]),_:1})],2),t("li",{class:i({"basis-1/5":!0,"rounded-md":!0,"bg-slate-400 text-white":s.selected==="Projects","text-slate-500":s.selected!=="Projects"})},[l(r,{to:{name:"projects"},class:"block text-center py-2 px-1"},{default:d(()=>[t("div",B,[l(a,{icon:"hand",class:"fa-fw"}),e[2]||(e[2]=t("span",{class:"text-xs mt-1"},"your work",-1))])]),_:1})],2),t("li",{class:i({"basis-1/5":!0,"rounded-md":!0,"bg-slate-400 text-white":s.selected==="Contacts","text-slate-500":s.selected!=="Contacts"})},[l(r,{to:{name:"contacts"},class:"block text-center py-2 px-1"},{default:d(()=>[t("div",D,[l(a,{icon:"users",class:"fa-fw"}),e[3]||(e[3]=t("span",{class:"text-xs mt-1"},"contacts",-1))])]),_:1})],2),t("li",{class:i({"basis-1/5":!0,"rounded-md":!0,"bg-slate-400 text-white":s.selected==="Profile","text-slate-500":s.selected!=="Profile"})},[l(r,{to:{name:"account"},class:"block text-center py-2 px-1"},{default:d(()=>[t("div",O,[l(a,{icon:"circle-user",class:"fa-fw"}),e[4]||(e[4]=t("span",{class:"text-xs mt-1"},"profile",-1))])]),_:1})],2)])])}const q=h(x,[["render",V]]);export{q as Q};

1
android/app/src/main/assets/public/assets/RecentOffersToUserProjectsView-C46Za4gr.js

@ -0,0 +1 @@
var U=Object.defineProperty;var b=(t,e,r)=>e in t?U(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var s=(t,e,r)=>b(t,typeof e!="symbol"?e+"":e,r);import{V as D,f as I,e as k,l as _,C as A,_ as x,j as l,k as n,m as a,n as w,o as i,w as v,F as O,B as h,E as c,G as C,t as f}from"./main.common-CyN0wKDJ.js";import{E}from"./EntityIcon-BCaUw-N4.js";import{G as N}from"./GiftedDialog-Pytrg6u7.js";import{I as S}from"./InfiniteScroll-BPyLyh-5.js";import{Q as V}from"./QuickNav-knx6iT2l.js";import{i as $,z as B,h as M,a6 as P}from"./index-BuQXBPSi.js";import"./index-DVAb2BqV.js";import"./index-B6aF1R1z.js";import"./_isString-BCVd99Zj.js";var R=Object.getOwnPropertyDescriptor,J=(t,e,r,j)=>{for(var d=j>1?void 0:j?R(e,r):e,p=t.length-1,u;p>=0;p--)(u=t[p])&&(d=u(d)||d);return d};let g=class extends D{constructor(){super(...arguments);s(this,"$notify");s(this,"$router");s(this,"activeDid","");s(this,"allContacts",[]);s(this,"allMyDids",[]);s(this,"apiServer","");s(this,"lastAckedOfferToUserProjectsJwtId","");s(this,"newOffersToUserProjects",[]);s(this,"newOffersToUserProjectsAtEnd",!1);s(this,"showOffersDetails",!1);s(this,"showOffersToUserProjectsDetails",!1);s(this,"didInfo",$);s(this,"displayAmount",B)}async created(){try{const e=await I();this.apiServer=e.apiServer||"",this.activeDid=e.activeDid||"",this.lastAckedOfferToUserProjectsJwtId=e.lastAckedOfferToUserProjectsJwtId||"",this.allContacts=await k.contacts.toArray(),this.allMyDids=await M();const r=await P(this.axios,this.apiServer,this.activeDid,void 0,void 0);this.newOffersToUserProjects=r.data,this.newOffersToUserProjectsAtEnd=!r.hitLimit}catch(e){_.error("Error retrieving settings & contacts:",e),this.$notify({group:"alert",type:"danger",title:"Error",text:e.message||"There was an error retrieving your activity."},5e3)}}async loadMoreOffersToUserProjects(){if(this.newOffersToUserProjectsAtEnd)return;const e=await P(this.axios,this.apiServer,this.activeDid,void 0,this.newOffersToUserProjects[this.newOffersToUserProjects.length-1].jwtId);this.newOffersToUserProjects.push(...e.data),this.newOffersToUserProjectsAtEnd=!e.hitLimit}};g=J([A({components:{EntityIcon:E,GiftedDialog:N,InfiniteScroll:S,QuickNav:V}})],g);const Q={id:"Content",class:"p-6 pb-24 max-w-3xl mx-auto"},Y={id:"ViewBreadcrumb",class:"mb-8"},F={class:"text-lg text-center font-light relative px-7"},G={key:0},L={class:"mt-2"},z={class:"mt-2"},H={"data-testId":"listRecentOffersToUserProjects",class:"border-t border-slate-300"},q={key:0,class:"border-b border-slate-300 text-orange-400 pb-2 mb-2 font-bold text-sm"},K={key:1},W={key:2};function X(t,e,r,j,d,p){const u=h("QuickNav"),m=h("font-awesome"),y=h("router-link"),T=h("InfiniteScroll");return c(),l(O,null,[n(u,{selected:"Home"}),a("section",Q,[a("div",Y,[a("h1",F,[n(m,{icon:"chevron-left",class:"fa-fw text-lg text-center px-2 py-1 absolute -left-2 -top-1",onClick:e[0]||(e[0]=o=>t.$router.back())}),e[1]||(e[1]=i(" Offers to Your Projects "))])]),t.newOffersToUserProjects.length===0?(c(),l("div",G,[e[6]||(e[6]=a("p",null,"Nobody has given any offers to your projects.",-1)),a("p",L,[e[3]||(e[3]=i(" Maybe there are already some projects you can help on the ")),n(y,{to:"/discover",class:"text-blue-500"},{default:v(()=>[e[2]||(e[2]=i(" Discover page ")),n(m,{icon:"search"})]),_:1})]),a("p",z,[e[5]||(e[5]=i(" You can announce more of your own on ")),n(y,{to:"/contacts",class:"text-blue-500"},{default:v(()=>[e[4]||(e[4]=i(" Your Ideas page ")),n(m,{icon:"hand"})]),_:1})])])):w("",!0),n(T,{onReachedBottom:t.loadMoreOffersToUserProjects},{default:v(()=>[a("ul",H,[(c(!0),l(O,null,C(t.newOffersToUserProjects,o=>(c(),l("li",{key:o.jwtId,class:"mt-4 relative group"},[o.jwtId==t.lastAckedOfferToUserProjectsJwtId?(c(),l("div",q," You've already seen all the following ")):w("",!0),a("span",null,f(t.didInfo(o.offeredByDid,t.activeDid,t.allMyDids,t.allContacts)),1),e[7]||(e[7]=i(" offered ")),o.objectDescription?(c(),l("span",K,f(o.objectDescription),1)):w("",!0),i(f(o.objectDescription&&o.amount?", and ":"")+" ",1),o.amount?(c(),l("span",W,f(t.displayAmount(o.unit,o.amount)),1)):w("",!0),e[8]||(e[8]=i(" to ")),a("span",null,f(o.planName),1),n(y,{to:{path:"/claim/"+encodeURIComponent(o.jwtId)},class:"text-blue-500"},{default:v(()=>[n(m,{icon:"file-lines",class:"pl-2 text-blue-500 cursor-pointer"})]),_:2},1032,["to"])]))),128))])]),_:1},8,["onReachedBottom"])])],64)}const ce=x(g,[["render",X]]);export{ce as default};

1
android/app/src/main/assets/public/assets/RecentOffersToUserView-DXfEKlxZ.js

@ -0,0 +1 @@
var D=Object.defineProperty;var k=(t,e,s)=>e in t?D(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s;var o=(t,e,s)=>k(t,typeof e!="symbol"?e+"":e,s);import{V as I,f as _,e as A,l as x,C,_ as j,j as i,k as n,m as a,n as m,o as f,w as y,F as g,B as w,E as l,G as E,t as h}from"./main.common-CyN0wKDJ.js";import{G as S}from"./GiftedDialog-Pytrg6u7.js";import{E as V}from"./EntityIcon-BCaUw-N4.js";import{I as $}from"./InfiniteScroll-BPyLyh-5.js";import{Q as N}from"./QuickNav-knx6iT2l.js";import{i as B,z as R,h as M,a5 as U}from"./index-BuQXBPSi.js";import"./index-DVAb2BqV.js";import"./index-B6aF1R1z.js";import"./_isString-BCVd99Zj.js";var J=Object.getOwnPropertyDescriptor,Q=(t,e,s,d)=>{for(var c=d>1?void 0:d?J(e,s):e,p=t.length-1,u;p>=0;p--)(u=t[p])&&(c=u(c)||c);return c};let O=class extends I{constructor(){super(...arguments);o(this,"$notify");o(this,"$router");o(this,"activeDid","");o(this,"allContacts",[]);o(this,"allMyDids",[]);o(this,"apiServer","");o(this,"lastAckedOfferToUserJwtId","");o(this,"newOffersToUser",[]);o(this,"newOffersToUserAtEnd",!1);o(this,"showOffersDetails",!1);o(this,"showOffersToUserProjectsDetails",!1);o(this,"didInfo",B);o(this,"displayAmount",R)}async created(){try{const s=await _();this.apiServer=s.apiServer||"",this.activeDid=s.activeDid||"",this.lastAckedOfferToUserJwtId=s.lastAckedOfferToUserJwtId||"",this.allContacts=await A.contacts.toArray(),this.allMyDids=await M();const d=await U(this.axios,this.apiServer,this.activeDid,void 0,void 0);this.newOffersToUser=d.data,this.newOffersToUserAtEnd=!d.hitLimit}catch(s){x.error("Error retrieving settings & contacts:",s),this.$notify({group:"alert",type:"danger",title:"Error",text:s.message||"There was an error retrieving your activity."},5e3)}}async loadMoreOffersToUser(){if(this.newOffersToUserAtEnd)return;const s=await U(this.axios,this.apiServer,this.activeDid,void 0,this.newOffersToUser[this.newOffersToUser.length-1].jwtId);this.newOffersToUser.push(...s.data),this.newOffersToUserAtEnd=!s.hitLimit}};O=Q([C({components:{EntityIcon:V,GiftedDialog:S,InfiniteScroll:$,QuickNav:N}})],O);const F={id:"Content",class:"p-6 pb-24 max-w-3xl mx-auto"},G={id:"ViewBreadcrumb",class:"mb-8"},L={class:"text-lg text-center font-light relative px-7"},P={key:0},Y={class:"mt-2"},H={"data-testId":"listRecentOffersToUser",class:"border-t border-slate-300"},z={key:0,class:"border-b border-slate-300 text-orange-400 pb-2 mb-2 font-bold text-sm"},q={key:1},K={key:2};function W(t,e,s,d,c,p){const u=w("QuickNav"),v=w("font-awesome"),T=w("router-link"),b=w("InfiniteScroll");return l(),i(g,null,[n(u,{selected:"Home"}),a("section",F,[a("div",G,[a("h1",L,[n(v,{icon:"chevron-left",class:"fa-fw text-lg text-center px-2 py-1 absolute -left-2 -top-1",onClick:e[0]||(e[0]=r=>t.$router.back())}),e[1]||(e[1]=f(" Offers to You "))])]),t.newOffersToUser.length===0?(l(),i("div",P,[e[5]||(e[5]=a("p",null,"Nobody has given you an offer.",-1)),a("p",Y,[e[3]||(e[3]=f(" You can start the cycle on the ")),n(T,{to:"/contacts",class:"text-blue-500"},{default:y(()=>[e[2]||(e[2]=f(" Contacts page ")),n(v,{icon:"users"})]),_:1}),e[4]||(e[4]=f(` with an "Offer" directly to someone. Hopefully you'll find a common interest! `))])])):m("",!0),n(b,{onReachedBottom:t.loadMoreOffersToUser},{default:y(()=>[a("ul",H,[(l(!0),i(g,null,E(t.newOffersToUser,r=>(l(),i("li",{key:r.jwtId,class:"mt-4 relative group"},[r.jwtId==t.lastAckedOfferToUserJwtId?(l(),i("div",z," You've already seen all the following ")):m("",!0),a("span",null,h(t.didInfo(r.offeredByDid,t.activeDid,t.allMyDids,t.allContacts)),1),e[6]||(e[6]=f(" offered ")),r.objectDescription?(l(),i("span",q,h(r.objectDescription),1)):m("",!0),f(h(r.objectDescription&&r.amount?", and ":"")+" ",1),r.amount?(l(),i("span",K,h(t.displayAmount(r.unit,r.amount)),1)):m("",!0),n(T,{to:{path:"/claim/"+encodeURIComponent(r.jwtId)},class:"text-blue-500"},{default:y(()=>[n(v,{icon:"file-lines",class:"pl-2 text-blue-500 cursor-pointer"})]),_:2},1032,["to"])]))),128))])]),_:1},8,["onReachedBottom"])])],64)}const de=j(O,[["render",W]]);export{de as default};

1
android/app/src/main/assets/public/assets/SearchAreaView-BWuZiMV4.js

File diff suppressed because one or more lines are too long

1
android/app/src/main/assets/public/assets/SeedBackupView-BKuqLWuk.js

@ -0,0 +1 @@
var C=Object.defineProperty;var k=(t,e,s)=>e in t?C(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s;var i=(t,e,s)=>k(t,typeof e!="symbol"?e+"":e,s);import{V as x,f as S,l as A,C as D,_ as $,j as a,k as l,m as o,w as V,n as B,o as p,p as m,t as g,v,F as N,B as f,E as r}from"./main.common-CyN0wKDJ.js";import{u as _}from"./index-B6aF1R1z.js";import{Q as P}from"./QuickNav-knx6iT2l.js";import{E,ar as R}from"./index-BuQXBPSi.js";import"./index-DVAb2BqV.js";import"./_isString-BCVd99Zj.js";var T=Object.getOwnPropertyDescriptor,F=(t,e,s,n)=>{for(var d=n>1?void 0:n?T(e,s):e,u=t.length-1,c;u>=0;u--)(c=t[u])&&(d=c(d)||d);return d};let y=class extends x{constructor(){super(...arguments);i(this,"$notify");i(this,"$router");i(this,"activeAccount",null);i(this,"numAccounts",0);i(this,"showCopiedDeri",!1);i(this,"showCopiedSeed",!1);i(this,"showSeed",!1)}async created(){try{const n=(await S()).activeDid||"";this.numAccounts=await E(),this.activeAccount=await R(n)}catch(s){A.error("Got an error loading an identifier:",s),this.$notify({group:"alert",type:"danger",title:"Error Loading Profile",text:"Got an error loading your seed data."},3e3)}}doCopyTwoSecRedo(s,n){n(),_().copy(s).then(()=>setTimeout(n,2e3))}};y=F([D({components:{QuickNav:P}})],y);const O={id:"Content",class:"p-6 pb-24 max-w-3xl mx-auto"},Q={class:"text-lg text-center font-light relative px-7"},j={class:"flex justify-between py-2"},H={key:0},G={key:0},W={class:"bg-slate-100 rounded-md overflow-hidden p-4 mb-4"},Y={key:0,class:"text-center text-slate-700 mt-2"},I={class:"text-sm text-green-500"},L={class:"text-sm text-green-500"},q={key:1};function z(t,e,s,n,d,u){const c=f("QuickNav"),w=f("font-awesome"),b=f("router-link");return r(),a(N,null,[l(c,{selected:"Profile"}),o("section",O,[o("div",Q,[o("h1",{class:"text-lg text-center px-2 py-1 absolute -left-2 -top-1",onClick:e[0]||(e[0]=h=>t.$router.back())},[l(w,{icon:"chevron-left",class:"fa-fw"})])]),e[10]||(e[10]=o("h1",{id:"ViewHeading",class:"text-4xl text-center font-light pt-4 mb-8"}," Seed Backup ",-1)),o("div",j,[e[5]||(e[5]=o("span",null,null,-1)),o("span",null,[l(b,{to:{name:"help"},class:"text-xs uppercase bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1.5 py-1 rounded-md ml-1"},{default:V(()=>e[4]||(e[4]=[p(" Help ")])),_:1})])]),t.activeAccount?(r(),a("div",H,[e[9]||(e[9]=o("p",{class:"text-center mb-4"},[o("b",{class:"text-red-600"},"BEWARE!"),p(" Anyone who has this seed phrase will be able impersonate you and take over any digital holdings based on it. Reveal it when you are somewhere private, when only you can see your screen, and record it somewhere only you have access. A password manager is a good idea, and so is a piece of paper in a vault. "),o("i",null,"We recommend you do NOT take a screenshot or send it to any online service.")],-1)),t.numAccounts>1?(r(),a("p",G,e[6]||(e[6]=[o("b",{class:"text-orange-600"},"Note:",-1),p(" You have more than one identifier stored in this browser. If they are all based on the same seed as the current identifier, this one backup is sufficient, as long as you also record the derivation path. However, if you have different seeds for other identifiers, you will have to back them up separately. ")]))):B("",!0),o("div",W,[t.showSeed?(r(),a("p",Y,[p(g(t.activeAccount.mnemonic)+" ",1),m(o("button",{onClick:e[1]||(e[1]=h=>t.doCopyTwoSecRedo(t.activeAccount.mnemonic,()=>t.showCopiedSeed=!t.showCopiedSeed))},[l(w,{icon:"copy",class:"text-slate-400 fa-fw"})],512),[[v,!t.showCopiedSeed]]),m(o("span",I," Copied ",512),[[v,t.showCopiedSeed]]),e[7]||(e[7]=o("br",null,null,-1)),e[8]||(e[8]=o("br",null,null,-1)),p(" Derivation Path: "+g(t.activeAccount.derivationPath)+" ",1),m(o("button",{onClick:e[2]||(e[2]=h=>t.doCopyTwoSecRedo(t.activeAccount.derivationPath,()=>t.showCopiedDeri=!t.showCopiedDeri))},[l(w,{icon:"copy",class:"text-slate-400 fa-fw"})],512),[[v,!t.showCopiedDeri]]),m(o("span",L,"Copied",512),[[v,t.showCopiedDeri]])])):(r(),a("button",{key:1,class:"block w-full text-center text-md uppercase bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1.5 py-2 rounded-md",onClick:e[3]||(e[3]=h=>t.showSeed=!0)}," Reveal my Seed Phrase "))])])):(r(),a("div",q,"You do not have an active identity."))])],64)}const oe=$(y,[["render",z]]);export{oe as default};

1
android/app/src/main/assets/public/assets/ShareMyContactInfoView-zbUpYmQk.js

@ -0,0 +1 @@
var h=Object.defineProperty;var v=(e,t,o)=>t in e?h(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var m=(e,t,o)=>v(e,typeof t!="symbol"?t+"":t,o);import{V as x,l as w,J as y,f as C,e as b,C as _,_ as $,j as k,k as p,m as s,o as g,F as S,B as d,E as V}from"./main.common-CyN0wKDJ.js";import{u as N}from"./index-B6aF1R1z.js";import{Q as E}from"./QuickNav-knx6iT2l.js";import{T as M}from"./TopMessage-ClRBomc-.js";import{r as I,M as T}from"./index-BuQXBPSi.js";import"./index-DVAb2BqV.js";import"./_isString-BCVd99Zj.js";var A=Object.getOwnPropertyDescriptor,D=(e,t,o,i)=>{for(var n=i>1?void 0:i?A(t,o):t,a=e.length-1,r;a>=0;a--)(r=e[a])&&(n=r(n)||n);return n};let f=class extends x{constructor(){super(...arguments);m(this,"$notify");m(this,"$router")}mounted(){w.log("APP_SERVER in mounted:",y)}async onClickShare(){const o=await C(),i=o.activeDid||"",n=o.firstName||"",a=!!o.isRegistered,r=o.profileImageUrl||"",c=await I(i),l=await b.contacts.count();if(c){const u=await T(c,a,n,r,!0);N().copy(u).then(()=>{this.$notify({group:"alert",type:"info",title:"Copied",text:"Your contact info was copied to the clipboard. Have them paste it in the box on their 'Contacts' screen."},5e3),l>0&&setTimeout(()=>{this.$notify({group:"alert",type:"success",title:"Share Other Contacts",text:"You may want to share some of your contacts with them. Select them below to copy and send."},1e4)},3e3)}),this.$router.push({name:"contacts"})}else this.$notify({group:"alert",type:"error",title:"Error",text:"No account was found for the active DID."},5e3)}};f=D([_({components:{QuickNav:E,TopMessage:M}})],f);const P={id:"Content",class:"p-2 pb-24 max-w-3xl mx-auto"},R={class:"text-lg text-center font-light relative px-7"},B={class:"flex justify-center mt-8"},F={class:"ml-12"};function O(e,t,o,i,n,a){const r=d("QuickNav"),c=d("TopMessage"),l=d("font-awesome");return V(),k(S,null,[p(r),p(c),s("section",P,[s("div",null,[s("div",R,[s("h1",{class:"text-lg text-center px-2 py-1 absolute -left-2 -top-1",onClick:t[0]||(t[0]=u=>e.$router.back())},[p(l,{icon:"chevron-left",class:"fa-fw"})])]),t[2]||(t[2]=s("h1",{id:"ViewHeading",class:"text-4xl text-center font-light"}," Share Your Contact Info ",-1))]),s("div",B,[s("button",{class:"block w-fit text-center text-lg font-bold bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-3 rounded-md",onClick:t[1]||(t[1]=u=>e.onClickShare())}," Copy to Clipboard ")]),s("div",F,[t[5]||(t[5]=s("div",{class:"mt-8"},"Click to copy your info, then send it to them.",-1)),s("div",null,[t[3]||(t[3]=g(" They will paste it in the input box on the Contacts ")),p(l,{icon:"users"}),t[4]||(t[4]=g(" screen. "))])])])],64)}const K=$(f,[["render",O]]);export{K as default};

1
android/app/src/main/assets/public/assets/SharedPhotoView-CE4fTsIo.js

File diff suppressed because one or more lines are too long

1
android/app/src/main/assets/public/assets/StartView-BSIe2Mpp.js

@ -0,0 +1 @@
var f=Object.defineProperty;var x=(t,e,o)=>e in t?f(t,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[e]=o;var i=(t,e,o)=>x(t,typeof e!="symbol"?e+"":e,o);import{V as b,a4 as v,f as h,A as k,C as y,_,j as d,m as s,k as m,n as g,o as p,B as A,E as u}from"./main.common-CyN0wKDJ.js";import{E as N,aG as S}from"./index-BuQXBPSi.js";import"./index-DVAb2BqV.js";import"./index-B6aF1R1z.js";import"./_isString-BCVd99Zj.js";var C=Object.getOwnPropertyDescriptor,E=(t,e,o,c)=>{for(var r=c>1?void 0:c?C(e,o):e,a=t.length-1,n;a>=0;a--)(n=t[a])&&(r=n(r)||r);return r};let w=class extends b{constructor(){super(...arguments);i(this,"$router");i(this,"PASSKEYS_ENABLED",v);i(this,"givenName","");i(this,"numAccounts",0)}async mounted(){const o=await h();this.givenName=o.firstName||"",this.numAccounts=await N()}onClickNewSeed(){this.$router.push({name:"new-identifier"})}async onClickNewPasskey(){const o=k.APP_NAME+(this.givenName?" - "+this.givenName:"");await S(o),this.$router.push({name:"account"})}onClickNo(){this.$router.push({name:"import-account"})}onClickDerive(){this.$router.push({name:"import-derive"})}};w=E([y({components:{}})],w);const $={id:"Content",class:"p-6 pb-24 min-h-screen flex flex-col justify-center"},P={class:"text-lg text-center font-light relative px-7"},V={id:"start-question",class:"mt-8"},D={class:"max-w-3xl mx-auto"},B={key:0,class:"text-center font-light mt-6"},Y={href:"https://www.perplexity.ai/search/what-are-passkeys-v2SHV3yLQlyA2CYH6.Nvhg",target:"_blank"},K={class:"text-center font-light mt-4"},L={href:"https://www.perplexity.ai/search/what-is-a-seed-phrase-OqiP9foVRXidr_2le5OFKA",target:"_blank"},O={class:"grid grid-cols-1 sm:grid-cols-2 gap-2 mt-4"},G={class:"grid grid-cols-1 sm:grid-cols-2 gap-2 mt-2"};function H(t,e,o,c,r,a){const n=A("font-awesome");return u(),d("section",$,[s("div",null,[s("div",P,[s("h1",{class:"text-lg text-center px-2 py-1 absolute -left-2 -top-1",onClick:e[0]||(e[0]=l=>t.$router.back())},[m(n,{icon:"chevron-left",class:"fa-fw"})])]),e[5]||(e[5]=s("h1",{id:"ViewHeading",class:"text-4xl text-center font-light pt-4 mb-8"}," Generate an Identity ",-1))]),s("div",V,[s("div",D,[e[12]||(e[12]=s("p",{class:"text-center text-xl font-light"}," How do you want to create this identifier? ",-1)),t.PASSKEYS_ENABLED?(u(),d("p",B,[e[6]||(e[6]=p(" A ")),e[7]||(e[7]=s("strong",null,"passkey",-1)),e[8]||(e[8]=p(" is easy to manage, though it is less interoperable with other systems for advanced uses. ")),s("a",Y,[m(n,{icon:"info-circle",class:"fa-fw text-blue-500"})])])):g("",!0),s("p",K,[e[9]||(e[9]=p(" A ")),e[10]||(e[10]=s("strong",null,"new seed",-1)),e[11]||(e[11]=p(" allows you full control over the keys, though you are responsible for backups. ")),s("a",L,[m(n,{icon:"info-circle",class:"fa-fw text-blue-500"})])]),s("div",O,[t.PASSKEYS_ENABLED?(u(),d("a",{key:0,class:"block w-full text-center text-lg uppercase bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-3 rounded-md mb-2 cursor-pointer",onClick:e[1]||(e[1]=l=>t.onClickNewPasskey())}," Generate one with a passkey ")):g("",!0),s("a",{class:"block w-full text-center text-lg uppercase bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-3 rounded-md mb-2 cursor-pointer","data-testId":"newSeed",onClick:e[2]||(e[2]=l=>t.onClickNewSeed())}," Generate one with a new seed ")]),e[13]||(e[13]=s("p",{class:"text-center font-light mt-4"}," You can also import an existing seed or derive a new address from an existing seed. ",-1)),s("div",G,[s("a",{class:"block w-full text-center text-md uppercase bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1.5 py-2 rounded-md cursor-pointer",onClick:e[3]||(e[3]=l=>t.onClickNo())}," You have a seed "),t.numAccounts>0?(u(),d("a",{key:0,class:"block w-full text-center text-md uppercase bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1.5 py-2 rounded-md cursor-pointer",onClick:e[4]||(e[4]=l=>t.onClickDerive())}," Derive new address from existing seed ")):g("",!0)])])])])}const T=_(w,[["render",H]]);export{T as default};

3563
android/app/src/main/assets/public/assets/StatisticsView-BLj_phFS.js

File diff suppressed because one or more lines are too long

1
android/app/src/main/assets/public/assets/TestView-BKEgz8iQ.js

File diff suppressed because one or more lines are too long

1
android/app/src/main/assets/public/assets/TopMessage-ClRBomc-.js

@ -0,0 +1 @@
var _=Object.defineProperty;var u=(r,t,s)=>t in r?_(r,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):r[t]=s;var i=(r,t,s)=>u(r,typeof t!="symbol"?t+"":t,s);import{a2 as f,C as g,V as v,f as m,A as p,_ as x,B as h,j as S,E,m as l,t as P,k as D,w as R,o as w}from"./main.common-CyN0wKDJ.js";var y=Object.defineProperty,O=Object.getOwnPropertyDescriptor,d=(r,t,s,o)=>{for(var e=o>1?void 0:o?O(t,s):t,a=r.length-1,n;a>=0;a--)(n=r[a])&&(e=(o?n(t,s,e):n(e))||e);return o&&e&&y(t,s,e),e};let c=class extends v{constructor(){super(...arguments);i(this,"$notify");i(this,"selected","");i(this,"message","")}async mounted(){var s,o;try{const e=await m();if(e.warnIfTestServer&&e.apiServer!==p.PROD_ENDORSER_API_SERVER){const a=(s=e.activeDid)==null?void 0:s.slice(11,15);this.message="You're linked to a non-prod server, user "+a}else if(e.warnIfProdServer&&e.apiServer===p.PROD_ENDORSER_API_SERVER){const a=(o=e.activeDid)==null?void 0:o.slice(11,15);this.message="You're linked to the production server, user "+a}}catch(e){this.$notify({group:"alert",type:"danger",title:"Error Detecting Server",text:JSON.stringify(e)},-1)}}};d([f],c.prototype,"selected",2);c=d([g],c);const b={class:"absolute right-5 top-3"},V={class:"align-center text-red-500 mr-2"},$={class:"ml-2"};function A(r,t,s,o,e,a){const n=h("router-link");return E(),S("div",b,[l("span",V,P(r.message),1),l("span",$,[D(n,{to:{name:"help"},class:"text-xs uppercase bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1.5 py-1 rounded-md ml-1"},{default:R(()=>t[0]||(t[0]=[w(" Help ")])),_:1})])])}const B=x(c,[["render",A]]);export{B as T};

1
android/app/src/main/assets/public/assets/UserNameDialog-CHrrQR5T.js

@ -0,0 +1 @@
var b=Object.defineProperty;var m=(t,e,s)=>e in t?b(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s;var n=(t,e,s)=>m(t,typeof e!="symbol"?e+"":e,s);import{a2 as p,C as v,V as g,f as u,e as f,M as h,_ as x,j as _,n as C,E as N,m as i,o as y,p as k,t as w,x as S}from"./main.common-CyN0wKDJ.js";var E=Object.defineProperty,$=Object.getOwnPropertyDescriptor,d=(t,e,s,l)=>{for(var a=l>1?void 0:l?$(e,s):e,c=t.length-1,o;c>=0;c--)(o=t[c])&&(a=(l?o(e,s,a):o(a))||a);return l&&a&&E(e,s,a),a};let r=class extends g{constructor(){super(...arguments);n(this,"$notify");n(this,"sharingExplanation");n(this,"callbackOnCancel");n(this,"callback",()=>{});n(this,"givenName","");n(this,"visible",!1)}async open(s){this.callback=s||this.callback;const l=await u();this.givenName=l.firstName||"",this.visible=!0}async onClickSaveChanges(){await f.settings.update(h,{firstName:this.givenName}),this.visible=!1,this.callback(this.givenName)}onClickCancel(){this.visible=!1,this.callbackOnCancel&&this.callback()}};d([p({default:"This is not sent to servers. It is only shared with people when you send it to them."})],r.prototype,"sharingExplanation",2);d([p({default:!1})],r.prototype,"callbackOnCancel",2);r=d([v],r);const D={key:0,class:"dialog-overlay"},O={class:"dialog"},T={class:"mt-8"},V={class:"grid grid-cols-1 sm:grid-cols-2 gap-2"};function U(t,e,s,l,a,c){return t.visible?(N(),_("div",D,[i("div",O,[e[3]||(e[3]=i("h1",{class:"text-xl font-bold text-center mb-4"},"Set Your Name",-1)),y(" "+w(t.sharingExplanation)+" ",1),k(i("input",{"onUpdate:modelValue":e[0]||(e[0]=o=>t.givenName=o),type:"text",placeholder:"Name",class:"block w-full rounded border border-slate-400 mb-4 px-3 py-2"},null,512),[[S,t.givenName]]),i("div",T,[i("div",V,[i("button",{type:"button",class:"block w-full text-center text-lg font-bold uppercase bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-3 rounded-md mb-2",onClick:e[1]||(e[1]=o=>t.onClickSaveChanges())}," Save "),i("button",{type:"button",class:"block w-full text-center text-md uppercase bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-3 rounded-md mb-2",onClick:e[2]||(e[2]=o=>t.onClickCancel())}," Cancel ")])])])])):C("",!0)}const B=x(r,[["render",U]]);export{B as U};

1
android/app/src/main/assets/public/assets/UserProfileView-CvmDXlki.js

@ -0,0 +1 @@
var V=Object.defineProperty;var A=(e,t,o)=>t in e?V(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var r=(e,t,o)=>A(e,typeof t!="symbol"?t+"":t,o);/* empty css */import{V as E,c as S,e as $,l as T,C as I,_ as N,j as n,k as s,m as a,o as u,n as h,t as v,w as f,F as B,B as p,E as d}from"./main.common-CyN0wKDJ.js";import{v as O,y as R,u as U,i as z}from"./vue-leaflet.es-SCy-wj_O.js";import{Q as F}from"./QuickNav-knx6iT2l.js";import{T as Q}from"./TopMessage-ClRBomc-.js";import{i as j,h as H,g as G}from"./index-BuQXBPSi.js";import"./index-DVAb2BqV.js";import"./index-B6aF1R1z.js";import"./_isString-BCVd99Zj.js";var q=Object.getOwnPropertyDescriptor,J=(e,t,o,i)=>{for(var l=i>1?void 0:i?q(t,o):t,c=e.length-1,m;c>=0;c--)(m=e[c])&&(l=m(l)||l);return l};let y=class extends E{constructor(){super(...arguments);r(this,"$notify");r(this,"$router");r(this,"$route");r(this,"activeDid","");r(this,"allContacts",[]);r(this,"allMyDids",[]);r(this,"isLoading",!0);r(this,"partnerApiServer",S);r(this,"profile",null);r(this,"didInfo",j)}async mounted(){var i,l;const o=await $.settings.toArray();this.activeDid=((i=o[0])==null?void 0:i.activeDid)||"",this.partnerApiServer=((l=o[0])==null?void 0:l.partnerApiServer)||this.partnerApiServer,this.allContacts=await $.contacts.toArray(),this.allMyDids=await H(),await this.loadProfile()}async loadProfile(){const o=this.$route.params.id;if(!o){this.isLoading=!1;return}try{const i=await fetch(`${this.partnerApiServer}/api/partner/userProfile/${encodeURIComponent(o)}`,{method:"GET",headers:await G(this.activeDid)});if(i.status===200){const l=await i.json();this.profile=l.data}else throw new Error("Failed to load profile")}catch(i){T.error("Error loading profile:",i),this.$notify({group:"alert",type:"danger",title:"Error",text:"There was a problem loading the profile."},5e3)}finally{this.isLoading=!1}}};y=J([I({components:{LMap:z,LMarker:U,LPopup:R,LTileLayer:O,QuickNav:F,TopMessage:Q}})],y);const K={id:"Content",class:"p-6 pb-24 max-w-3xl mx-auto"},W={id:"ViewBreadcrumb",class:"mb-8"},X={id:"ViewHeading",class:"text-lg text-center font-light relative px-7"},Y={key:0,class:"fixed left-6 mt-16 text-center text-4xl leading-none bg-slate-400 text-white w-14 py-2.5 rounded-full"},Z={key:1},x={class:"mt-8"},ee={class:"text-sm"},te={key:0,class:"mt-4 text-slate-600"},oe={key:0,class:"mt-4"},se={class:"h-96 mt-2 w-full"},ie={key:1,class:"mt-4"},re={class:"h-96 mt-2 w-full"},ae={key:2,class:"text-center mt-8"};function le(e,t,o,i,l,c){var k,b,C,M;const m=p("QuickNav"),P=p("TopMessage"),g=p("font-awesome"),w=p("l-tile-layer"),L=p("l-popup"),_=p("l-marker"),D=p("l-map");return d(),n(B,null,[s(m,{selected:"Discover"}),s(P),a("section",K,[a("div",W,[a("h1",X,[a("button",{class:"text-lg text-center px-2 py-1 absolute -left-2 -top-1",onClick:t[0]||(t[0]=ne=>e.$router.back())},[s(g,{icon:"chevron-left",class:"fa-fw"})]),t[1]||(t[1]=u(" Individual Profile "))])]),e.isLoading?(d(),n("div",Y,[s(g,{icon:"spinner",class:"fa-spin-pulse"})])):e.profile?(d(),n("div",Z,[a("div",x,[a("div",ee,[s(g,{icon:"user",class:"fa-fw text-slate-400"}),u(" "+v(e.didInfo(e.profile.issuerDid,e.activeDid,e.allMyDids,e.allContacts)),1)]),e.profile.description?(d(),n("p",te,v(e.profile.description),1)):h("",!0)]),(k=e.profile)!=null&&k.locLat&&((b=e.profile)!=null&&b.locLon)?(d(),n("div",oe,[t[2]||(t[2]=a("h2",{class:"text-lg font-semibold"},"Location",-1)),a("div",se,[s(D,{ref:"profileMap",center:[e.profile.locLat,e.profile.locLon],zoom:12},{default:f(()=>[s(w,{url:"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png","layer-type":"base",name:"OpenStreetMap"}),s(_,{"lat-lng":[e.profile.locLat,e.profile.locLon]},{default:f(()=>[s(L,null,{default:f(()=>[u(v(e.didInfo(e.profile.issuerDid,e.activeDid,e.allMyDids,e.allContacts)),1)]),_:1})]),_:1},8,["lat-lng"])]),_:1},8,["center"])])])):h("",!0),(C=e.profile)!=null&&C.locLat2&&((M=e.profile)!=null&&M.locLon2)?(d(),n("div",ie,[t[3]||(t[3]=a("h2",{class:"text-lg font-semibold"},"Second Location",-1)),a("div",re,[s(D,{ref:"profileMap",center:[e.profile.locLat2,e.profile.locLon2],zoom:12},{default:f(()=>[s(w,{url:"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png","layer-type":"base",name:"OpenStreetMap"}),s(_,{"lat-lng":[e.profile.locLat2,e.profile.locLon2]},{default:f(()=>[s(L,null,{default:f(()=>[u(v(e.didInfo(e.profile.issuerDid,e.activeDid,e.allMyDids,e.allContacts)),1)]),_:1})]),_:1},8,["lat-lng"])]),_:1},8,["center"])])])):h("",!0)])):(d(),n("div",ae,t[4]||(t[4]=[a("p",{class:"text-lg text-slate-500"},"Profile not found.",-1)])))])],64)}const Le=N(y,[["render",le]]);export{Le as default};

1
android/app/src/main/assets/public/assets/_isString-BCVd99Zj.js

File diff suppressed because one or more lines are too long

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save