Compare commits

..
Author SHA1 Message Date
Daniel Sogl e8397d8e16 feat(in-app-purchase-3): sync wrapper with cordova-plugin-purchase 13.18.0
Add missing v13.16-13.18 API surface (obfuscator, getStorefront, quantity
support, storefrontUpdated event, IAPTIC_JS platform) and fix pre-existing
type mismatches against upstream typings.
2026-07-27 22:25:21 +02:00
Daniel Sogl 1204bc52e7 chore(deps): update angular to 21.2.18
Angular 21 needs typescript >=5.9 <6.1; the pinned ~5.9.3 already satisfies
it, and the node engine range is unchanged from 20.

Verified against the published 9.3.0 artifacts (built with Angular 20.3.18):
the emitted .d.ts files are byte-identical and the only diff in the emitted
JS is the partial-compilation metadata string, version "20.3.18" -> "21.2.18".
minVersion stays "12.0.0", so the Angular linker floor for consumers does not
move — the library only uses @Injectable, whose declaration format has been
stable since Angular 12.

Raises the renovate cap accordingly. Angular 22 stays out: it requires
typescript >=6.0 <6.1, which turns the `module: ES2022` + `moduleResolution:
Node16` pair in scripts/build/ngx.ts into a hard TS5110 error.
2026-07-27 21:52:32 +02:00
Daniel Sogl 8b997cf357 fix(deps): update angular to 20.3.26 to patch @babel/core advisory
@angular/compiler-cli pinned @babel/core 7.29.0, which is affected by
GHSA-4x5r-pxfx-6jf8 (arbitrary file read via sourceMappingURL). 20.3.26 pins
7.29.7. Staying inside Angular 20 keeps the emitted partial-compilation
declarations unchanged (minVersion 12.0.0), so nothing changes for consumers.

npm audit fix additionally resolved the transitive brace-expansion
GHSA-3jxr-9vmj-r5cp in the lockfile.
2026-07-27 21:41:54 +02:00
Daniel Sogl 8f1a6da545 ci: let renovate manage github action versions
enabledManagers was limited to npm, so action versions never got update PRs
and drifted up to three majors behind — checkout and setup-node were still on
v4 while v7 was current.

The existing packageRules all match on `matchManagers: ["npm"]`, so action
updates fall through to the defaults: individual PRs, no automerge, reviewed
like any other major.
2026-07-27 21:35:14 +02:00
Daniel Sogl ef358238c2 ci: update release-please-action to v5
The only breaking change in v5.0.0 is the move to the node 24 runtime; inputs,
outputs and the manifest/config format are unchanged. Kept as its own commit
since this action drives the release flow and is the one worth reverting alone
if anything misbehaves.
2026-07-27 21:35:14 +02:00
Daniel Sogl 1789d08183 ci: update first-party actions to latest majors
checkout v4.3.1 -> v7.0.1, setup-node v4.4.0 -> v7.0.0, stale v9.1.0 -> v10.4.0.

The breaking changes across those majors do not apply here:
- checkout v5/v6 harden `pull_request_target` checkouts; no workflow uses it
- setup-node v5 auto-caches when package.json has a `packageManager` field;
  it has none, and `cache: npm` is set explicitly anyway
- setup-node v7 drops the dummy NODE_AUTH_TOKEN export; the publish job sets
  NODE_AUTH_TOKEN itself
- stale v10 only moves the runtime to node 24

All of them also raise the runtime to node 24, which clears the deprecation
warnings on recent runs.
2026-07-27 21:35:14 +02:00
Daniel Sogl 4de0e83d51 ci: run workflows on node 24
Also drops the explicit `npm install -g npm@latest` step: node 24 bundles
npm 11.16, well over the >= 11.5.1 that trusted publishing requires. Pulling
an unpinned npm@latest right before publishing 258 packages was the larger
risk of the two.
2026-07-27 21:35:14 +02:00
b853b94f2d chore: release main (#5161)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-27 21:20:03 +02:00
Daniel Sogl 9818f74831 ci: publish to npm via trusted publishing (OIDC)
npm validates the OIDC claim of the entry-point workflow, not the one that
runs `npm publish`. Calling publish.yml via workflow_call meant the trust
check could never match, so the publish job moves inline into
release-please.yml and publish.yml is removed.

setup-node with Node 22 ships npm 10.x; trusted publishing needs >= 11.5.1,
hence the explicit npm upgrade before publishing.

NPM_TOKEN stays as a fallback for packages that have no trusted publisher
yet — a brand new plugin cannot get one until it exists on npm. OIDC takes
precedence wherever a config is present.

Adds scripts/tasks/trust-packages.sh to configure the trusted publisher for
all 258 packages; npm has no multi-package call and `npm trust` requires
interactive 2FA, so it runs locally, in parallel, and is resumable.
2026-07-27 21:18:10 +02:00
Venkadesh PandGitHub 4294ebb2ff feat(unvired-cordova-sdk): update SDK interface with push config and missing kernel methods (#5189)
- Add `firebasePushConfig` property to `LoginParameters`
- Export `FirebasePushConfig` interface for Web/Electron push setup
- Add missing SDK methods (`checkConnectionStatus`, `getDatabasePath`, `downloadAttachmentSync`, `unRegisterNotifListener`, `prepareDatabaseForExport`, `updateSyncItemsCount`, `setAuthCredentials`)
2026-07-27 20:41:27 +02:00
cd687ffcb7 chore(deps): update linting and formatting (#5191)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-27 14:42:42 +00:00
fda4686768 chore(deps): update dependency rollup to ^4.62.3 (#5190)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-27 05:10:22 +00:00
01155f6618 chore(deps-dev): bump esbuild from 0.28.0 to 0.28.1 (#5166)
Bumps [esbuild](https://github.com/evanw/esbuild) from 0.28.0 to 0.28.1.
- [Release notes](https://github.com/evanw/esbuild/releases)
- [Changelog](https://github.com/evanw/esbuild/blob/main/CHANGELOG.md)
- [Commits](https://github.com/evanw/esbuild/compare/v0.28.0...v0.28.1)

---
updated-dependencies:
- dependency-name: esbuild
  dependency-version: 0.28.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-21 22:31:37 +02:00
8f16af0e8b chore(deps): update linting and formatting (#5188)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-21 14:03:12 +00:00
587534e401 chore(deps): update dependency @swc/core to ^1.15.46 (#5187)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-20 09:12:21 +00:00
ad2b96532b chore(deps): update dependency tsx to ^4.23.1 (#5186)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-13 19:51:42 +00:00
3aba9fb3be chore(deps): update dependency @types/node to ^24.13.3 (#5185)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-13 08:41:02 +00:00
c929197b72 chore(deps): update linting and formatting (#5184)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-06 06:42:21 +00:00
c889c29fd7 chore(deps): update dependency typedoc to ^0.28.20 (#5183)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-06 06:39:34 +00:00
92f25e05f0 chore(deps): lock file maintenance (#5182)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-29 06:08:59 +00:00
1323d60d93 chore(deps): update dependency eslint-plugin-jsdoc to v63 (#5181)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-29 02:05:30 +00:00
5d4b19b16f chore(deps): update dependency @types/node to v24 (#5179)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-29 02:04:02 +00:00
100c31f4ae chore(deps): update linting and formatting (#5178)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-29 02:02:26 +00:00
b1c6135d40 chore(deps): update dependency @types/node to ^22.20.0 (#5177)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-29 02:00:35 +00:00
1ddb8ca2b9 chore(deps): update dependency @swc/core to ^1.15.43 (#5176)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-29 01:58:05 +00:00
7042240c4c chore(deps): update documentation tools to ^4.12.0 (#5173)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-22 05:29:56 +00:00
b27760071f chore(deps): update build and bundling tools to ^4.62.2 (#5172)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-22 05:28:17 +00:00
e5c5ab5646 chore(deps): update typescript type definitions to ^22.19.21 (#5168)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-15 13:05:12 +00:00
2655a557d2 chore(deps): update testing framework to ^1.15.41 (#5167)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-15 05:13:50 +00:00
346b93dae1 chore(deps): update build and bundling tools (#5165)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-08 12:02:02 +00:00
0687f8b4f8 chore(deps): update typescript type definitions to ^22.19.20 (#5164)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-08 05:13:50 +00:00
8dbb439908 chore(deps): update testing framework (#5163)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-25 08:44:47 +00:00
dbcfe59b75 chore(deps): update dependency tsx to ^4.22.3 (#5162)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-25 04:55:45 +00:00
d7d7f5ba7c chore(deps): update dependency @types/node to ^22.19.19 (#5160)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-18 08:56:10 +00:00
dbcd8c0bda chore(deps): update build and bundling tools (#5159)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-18 05:40:17 +00:00
2f7eca8932 chore: release main (#5148)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-05-11 10:43:34 +02:00
0c5380ff10 chore(deps): update dependency rollup to ^4.60.3 (#5158)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-11 10:42:59 +02:00
Uglješa ErcegandGitHub fa13dd16f4 feat(adjust): update adjust sdk index.ts api to v5.6.0 (#5154) 2026-05-11 10:42:38 +02:00
70d5b1e2f2 chore(deps): update dependency typescript to ~5.9.3 (#5151)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-11 10:42:17 +02:00
694078a325 chore(deps): update dependency @types/node to ^22.19.18 (#5157)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-11 05:54:57 +00:00
4597727725 chore(deps): update linting and formatting (#5156)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-04 10:27:25 +00:00
0ef3fa9655 chore(deps): update dependency @swc/core to ^1.15.33 (#5155)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-04 06:26:57 +00:00
cc087382e4 chore(deps): update linting and formatting (#5152)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-27 05:24:07 +00:00
5b4a0a4eff chore(deps): update dependency rollup to ^4.60.2 (#5147)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-20 09:41:30 +00:00
ee64b91371 chore(deps): update dependency @swc/core to ^1.15.30 (#5146)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-20 09:09:04 +00:00
9005eab47e chore: release main (#5145)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-04-15 11:01:37 +02:00
ff293a931e fix: restore v9 plugin exports (#5144)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-15 11:00:56 +02:00
6764b252cd chore: release main (#5133)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-04-15 07:08:58 +02:00
Justin BullandGitHub b7d9d9022f docs(core): fix dead link to Capacitor docs (#5143) 2026-04-15 07:08:35 +02:00
c6c21acf37 chore(deps): update dependency rollup to ^4.60.1 (#5142)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-13 10:41:28 +00:00
8e54b98941 chore(deps): update dependency typedoc to ^0.28.19 (#5141)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-13 04:57:27 +00:00
412320dd44 chore(deps): update dependency @types/node to ^22.19.17 (#5137)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-06 09:57:42 +00:00
3447bd33f5 chore(deps): update dependency @swc/core to ^1.15.24 (#5136)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-06 04:39:49 +00:00
d2fb499b30 chore(deps): update linting and formatting (#5135)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-30 09:13:41 +00:00
87e1f12993 chore(deps): update dependency typedoc to ^0.28.18 (#5134)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-30 05:08:26 +00:00
ac35af8abf chore(deps-dev): bump picomatch from 2.3.1 to 2.3.2 (#5132)
Bumps [picomatch](https://github.com/micromatch/picomatch) from 2.3.1 to 2.3.2.
- [Release notes](https://github.com/micromatch/picomatch/releases)
- [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/picomatch/compare/2.3.1...2.3.2)

---
updated-dependencies:
- dependency-name: picomatch
  dependency-version: 2.3.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-27 15:14:05 +01:00
18 changed files with 2064 additions and 1328 deletions
+3 -3
View File
@@ -15,12 +15,12 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.3.1
- uses: actions/checkout@v7.0.1
- name: Setup Node.js
uses: actions/setup-node@v4.4.0
uses: actions/setup-node@v7.0.0
with:
node-version: 22
node-version: 24
cache: npm
- name: Install dependencies
-39
View File
@@ -1,39 +0,0 @@
name: Publish to npm
on:
workflow_call:
workflow_dispatch:
permissions:
contents: read
id-token: write
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.3.1
- name: Setup Node.js
uses: actions/setup-node@v4.4.0
with:
node-version: 22
cache: npm
registry-url: https://registry.npmjs.org
- name: Install dependencies
run: npm ci
- name: Lint
run: npm run lint -- --quiet
- name: Test
run: npm test
- name: Build
run: npm run build
- name: Publish to npm
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
run: npm run npmpub
+37 -3
View File
@@ -21,14 +21,48 @@ jobs:
steps:
- name: Run Release Please
id: release
uses: googleapis/release-please-action@v4.4.0
uses: googleapis/release-please-action@v5.0.0
with:
token: ${{ secrets.GITHUB_TOKEN }}
config-file: release-please-config.json
manifest-file: .release-please-manifest.json
# npm trusted publishing validates the OIDC claim of the *entry point* workflow,
# not the one that runs `npm publish`. Keep this job inline — a reusable workflow
# here breaks the trust check. See https://github.com/npm/documentation/issues/1755
publish:
needs: release-please
if: ${{ needs.release-please.outputs.release_created }}
uses: ./.github/workflows/publish.yml
secrets: inherit
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
steps:
- uses: actions/checkout@v7.0.1
- name: Setup Node.js
uses: actions/setup-node@v7.0.0
with:
# node 24 bundles npm 11.16, over the >= 11.5.1 that trusted publishing needs
node-version: 24
cache: npm
registry-url: https://registry.npmjs.org
- name: Install dependencies
run: npm ci
- name: Lint
run: npm run lint -- --quiet
- name: Test
run: npm test
- name: Build
run: npm run build
- name: Publish to npm
env:
# fallback for packages without a trusted publisher yet (e.g. brand new plugins).
# OIDC takes precedence whenever the package has one configured.
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
run: npm run npmpub
+1 -1
View File
@@ -12,7 +12,7 @@ jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v9.1.0
- uses: actions/stale@v10.4.0
with:
stale-issue-message: >
This issue has been automatically marked as inactive due to lack of
+2
View File
@@ -7,3 +7,5 @@ src/@awesome-cordova-plugins/plugins/**/ngx
*.d.ts
injectable-classes.json
# npm trust bulk setup progress
.npm-trust-done
+1 -1
View File
@@ -1,3 +1,3 @@
{
".": "9.1.2"
".": "9.3.0"
}
+80
View File
@@ -256,6 +256,86 @@
## [9.3.0](https://github.com/danielsogl/awesome-cordova-plugins/compare/awesome-cordova-plugins-v9.2.0...awesome-cordova-plugins-v9.3.0) (2026-07-27)
### Features
* **unvired-cordova-sdk:** update SDK interface with push config and missing kernel methods ([#5189](https://github.com/danielsogl/awesome-cordova-plugins/issues/5189)) ([4294ebb](https://github.com/danielsogl/awesome-cordova-plugins/commit/4294ebb2ffc0b6a384a53785a2b84a9efc9e24f9))
### Miscellaneous Chores
* **deps-dev:** bump esbuild from 0.28.0 to 0.28.1 ([#5166](https://github.com/danielsogl/awesome-cordova-plugins/issues/5166)) ([01155f6](https://github.com/danielsogl/awesome-cordova-plugins/commit/01155f661827d9ed9c21a29f837c8479fd2f43b3))
* **deps:** lock file maintenance ([#5182](https://github.com/danielsogl/awesome-cordova-plugins/issues/5182)) ([92f25e0](https://github.com/danielsogl/awesome-cordova-plugins/commit/92f25e05f00b240096db4db9d7a8f4676acfb6b4))
* **deps:** update build and bundling tools ([#5159](https://github.com/danielsogl/awesome-cordova-plugins/issues/5159)) ([dbcd8c0](https://github.com/danielsogl/awesome-cordova-plugins/commit/dbcd8c0bda657ed65cbfbf8ffeec4094b5cfa399))
* **deps:** update build and bundling tools ([#5165](https://github.com/danielsogl/awesome-cordova-plugins/issues/5165)) ([346b93d](https://github.com/danielsogl/awesome-cordova-plugins/commit/346b93dae11042ace6c57e516ce236b1e58a9081))
* **deps:** update build and bundling tools to ^4.62.2 ([#5172](https://github.com/danielsogl/awesome-cordova-plugins/issues/5172)) ([b277600](https://github.com/danielsogl/awesome-cordova-plugins/commit/b27760071fa7113bc50ce3c6a6d24937bebb9c0b))
* **deps:** update dependency @swc/core to ^1.15.43 ([#5176](https://github.com/danielsogl/awesome-cordova-plugins/issues/5176)) ([1ddb8ca](https://github.com/danielsogl/awesome-cordova-plugins/commit/1ddb8ca2b98d3087d22b76e7f01de6214a7b64ff))
* **deps:** update dependency @swc/core to ^1.15.46 ([#5187](https://github.com/danielsogl/awesome-cordova-plugins/issues/5187)) ([587534e](https://github.com/danielsogl/awesome-cordova-plugins/commit/587534e401bdb23d0cbf1e0107380e4d535096ad))
* **deps:** update dependency @types/node to ^22.19.19 ([#5160](https://github.com/danielsogl/awesome-cordova-plugins/issues/5160)) ([d7d7f5b](https://github.com/danielsogl/awesome-cordova-plugins/commit/d7d7f5ba7ca6737ad3321fa8ac8726e1724b5fae))
* **deps:** update dependency @types/node to ^22.20.0 ([#5177](https://github.com/danielsogl/awesome-cordova-plugins/issues/5177)) ([b1c6135](https://github.com/danielsogl/awesome-cordova-plugins/commit/b1c6135d401c5e64c0fa1c18c89b4a6c917c472e))
* **deps:** update dependency @types/node to ^24.13.3 ([#5185](https://github.com/danielsogl/awesome-cordova-plugins/issues/5185)) ([3aba9fb](https://github.com/danielsogl/awesome-cordova-plugins/commit/3aba9fb3be2f3819997b8bf6667193a815a64e7c))
* **deps:** update dependency @types/node to v24 ([#5179](https://github.com/danielsogl/awesome-cordova-plugins/issues/5179)) ([5d4b19b](https://github.com/danielsogl/awesome-cordova-plugins/commit/5d4b19b16f5f399d9f7c7e7d2a53907961343258))
* **deps:** update dependency eslint-plugin-jsdoc to v63 ([#5181](https://github.com/danielsogl/awesome-cordova-plugins/issues/5181)) ([1323d60](https://github.com/danielsogl/awesome-cordova-plugins/commit/1323d60d934489fb8cd6b25c58bd109763b0e81b))
* **deps:** update dependency rollup to ^4.62.3 ([#5190](https://github.com/danielsogl/awesome-cordova-plugins/issues/5190)) ([fda4686](https://github.com/danielsogl/awesome-cordova-plugins/commit/fda4686768b036acd71f700cd7ac79452ecb8475))
* **deps:** update dependency tsx to ^4.22.3 ([#5162](https://github.com/danielsogl/awesome-cordova-plugins/issues/5162)) ([dbcfe59](https://github.com/danielsogl/awesome-cordova-plugins/commit/dbcfe59b752b256a72b45ddfb27f27200de0f337))
* **deps:** update dependency tsx to ^4.23.1 ([#5186](https://github.com/danielsogl/awesome-cordova-plugins/issues/5186)) ([ad2b965](https://github.com/danielsogl/awesome-cordova-plugins/commit/ad2b96532b5010ec5b0763f4a2418ba109b0c107))
* **deps:** update dependency typedoc to ^0.28.20 ([#5183](https://github.com/danielsogl/awesome-cordova-plugins/issues/5183)) ([c889c29](https://github.com/danielsogl/awesome-cordova-plugins/commit/c889c29fd71073a87d7750af58284371523dc01c))
* **deps:** update documentation tools to ^4.12.0 ([#5173](https://github.com/danielsogl/awesome-cordova-plugins/issues/5173)) ([7042240](https://github.com/danielsogl/awesome-cordova-plugins/commit/7042240c4c6488fb02cf86ad4c025bad0fe563d8))
* **deps:** update linting and formatting ([#5178](https://github.com/danielsogl/awesome-cordova-plugins/issues/5178)) ([100c31f](https://github.com/danielsogl/awesome-cordova-plugins/commit/100c31f4aec11ec2b949be6a4a9fc844ef019484))
* **deps:** update linting and formatting ([#5184](https://github.com/danielsogl/awesome-cordova-plugins/issues/5184)) ([c929197](https://github.com/danielsogl/awesome-cordova-plugins/commit/c929197b72a546cc8da43a16a98479f98b6616ec))
* **deps:** update linting and formatting ([#5188](https://github.com/danielsogl/awesome-cordova-plugins/issues/5188)) ([8f16af0](https://github.com/danielsogl/awesome-cordova-plugins/commit/8f16af0e8be8102ad50f4e2ce63b6a5cf04272fa))
* **deps:** update linting and formatting ([#5191](https://github.com/danielsogl/awesome-cordova-plugins/issues/5191)) ([cd687ff](https://github.com/danielsogl/awesome-cordova-plugins/commit/cd687ffcb7c1a70f57d6d4ca4092ae07e4082e0a))
* **deps:** update testing framework ([#5163](https://github.com/danielsogl/awesome-cordova-plugins/issues/5163)) ([8dbb439](https://github.com/danielsogl/awesome-cordova-plugins/commit/8dbb4399089b3812530c7660625cf3e9be2836e3))
* **deps:** update testing framework to ^1.15.41 ([#5167](https://github.com/danielsogl/awesome-cordova-plugins/issues/5167)) ([2655a55](https://github.com/danielsogl/awesome-cordova-plugins/commit/2655a557d24a19941406d838ace6f2b3adcb484b))
* **deps:** update typescript type definitions to ^22.19.20 ([#5164](https://github.com/danielsogl/awesome-cordova-plugins/issues/5164)) ([0687f8b](https://github.com/danielsogl/awesome-cordova-plugins/commit/0687f8b4f891b418712db9ba3388f4c2307bff73))
* **deps:** update typescript type definitions to ^22.19.21 ([#5168](https://github.com/danielsogl/awesome-cordova-plugins/issues/5168)) ([e5c5ab5](https://github.com/danielsogl/awesome-cordova-plugins/commit/e5c5ab5646a49dbf5fd07f7de2688f75a7bb04d0))
## [9.2.0](https://github.com/danielsogl/awesome-cordova-plugins/compare/awesome-cordova-plugins-v9.1.4...awesome-cordova-plugins-v9.2.0) (2026-05-11)
### Features
* **adjust:** update adjust sdk index.ts api to v5.6.0 ([#5154](https://github.com/danielsogl/awesome-cordova-plugins/issues/5154)) ([fa13dd1](https://github.com/danielsogl/awesome-cordova-plugins/commit/fa13dd16f44dd8163854039877ff019e3b461892))
### Miscellaneous Chores
* **deps:** update dependency @swc/core to ^1.15.30 ([#5146](https://github.com/danielsogl/awesome-cordova-plugins/issues/5146)) ([ee64b91](https://github.com/danielsogl/awesome-cordova-plugins/commit/ee64b913711da74c0d76709c15bcc48abec702d8))
* **deps:** update dependency @swc/core to ^1.15.33 ([#5155](https://github.com/danielsogl/awesome-cordova-plugins/issues/5155)) ([0ef3fa9](https://github.com/danielsogl/awesome-cordova-plugins/commit/0ef3fa9655477d457401e230053f410058186641))
* **deps:** update dependency @types/node to ^22.19.18 ([#5157](https://github.com/danielsogl/awesome-cordova-plugins/issues/5157)) ([694078a](https://github.com/danielsogl/awesome-cordova-plugins/commit/694078a325882872a80997434d3a2731754271e2))
* **deps:** update dependency rollup to ^4.60.2 ([#5147](https://github.com/danielsogl/awesome-cordova-plugins/issues/5147)) ([5b4a0a4](https://github.com/danielsogl/awesome-cordova-plugins/commit/5b4a0a4efff086c91424bbf53667d57d17103e3d))
* **deps:** update dependency rollup to ^4.60.3 ([#5158](https://github.com/danielsogl/awesome-cordova-plugins/issues/5158)) ([0c5380f](https://github.com/danielsogl/awesome-cordova-plugins/commit/0c5380ff10adb71000218af62785b7ca893b44d2))
* **deps:** update dependency typescript to ~5.9.3 ([#5151](https://github.com/danielsogl/awesome-cordova-plugins/issues/5151)) ([70d5b1e](https://github.com/danielsogl/awesome-cordova-plugins/commit/70d5b1e2f2382ed06c4d7ab269a51bc4735c6319))
* **deps:** update linting and formatting ([#5152](https://github.com/danielsogl/awesome-cordova-plugins/issues/5152)) ([cc08738](https://github.com/danielsogl/awesome-cordova-plugins/commit/cc087382e4f6e458d3a2fad000cd3ca3895e4873))
* **deps:** update linting and formatting ([#5156](https://github.com/danielsogl/awesome-cordova-plugins/issues/5156)) ([4597727](https://github.com/danielsogl/awesome-cordova-plugins/commit/459772772581a20b54d2f73c508fcfd7b6286f09))
## [9.1.4](https://github.com/danielsogl/awesome-cordova-plugins/compare/awesome-cordova-plugins-v9.1.3...awesome-cordova-plugins-v9.1.4) (2026-04-15)
### Bug Fixes
* restore v9 plugin exports ([#5144](https://github.com/danielsogl/awesome-cordova-plugins/issues/5144)) ([ff293a9](https://github.com/danielsogl/awesome-cordova-plugins/commit/ff293a931e135d86e4f8b16f75fd2e8a3e42c11a))
## [9.1.3](https://github.com/danielsogl/awesome-cordova-plugins/compare/awesome-cordova-plugins-v9.1.2...awesome-cordova-plugins-v9.1.3) (2026-04-15)
### Miscellaneous Chores
* **deps-dev:** bump picomatch from 2.3.1 to 2.3.2 ([#5132](https://github.com/danielsogl/awesome-cordova-plugins/issues/5132)) ([ac35af8](https://github.com/danielsogl/awesome-cordova-plugins/commit/ac35af8abf33534782d44cf24785cd991202d03b))
* **deps:** update dependency @swc/core to ^1.15.24 ([#5136](https://github.com/danielsogl/awesome-cordova-plugins/issues/5136)) ([3447bd3](https://github.com/danielsogl/awesome-cordova-plugins/commit/3447bd33f5fbe6faacb495a3546db9d97723d687))
* **deps:** update dependency @types/node to ^22.19.17 ([#5137](https://github.com/danielsogl/awesome-cordova-plugins/issues/5137)) ([412320d](https://github.com/danielsogl/awesome-cordova-plugins/commit/412320dd447ded3bc36e1051b496b146f9a21937))
* **deps:** update dependency rollup to ^4.60.1 ([#5142](https://github.com/danielsogl/awesome-cordova-plugins/issues/5142)) ([c6c21ac](https://github.com/danielsogl/awesome-cordova-plugins/commit/c6c21acf37fefa169ceba0d6a73e5ac0602fa21d))
* **deps:** update dependency typedoc to ^0.28.18 ([#5134](https://github.com/danielsogl/awesome-cordova-plugins/issues/5134)) ([87e1f12](https://github.com/danielsogl/awesome-cordova-plugins/commit/87e1f1299331d3e1eef498b559c477e7d22388b3))
* **deps:** update dependency typedoc to ^0.28.19 ([#5141](https://github.com/danielsogl/awesome-cordova-plugins/issues/5141)) ([8e54b98](https://github.com/danielsogl/awesome-cordova-plugins/commit/8e54b98941b8df3a348e0a54b235829dc6cd1903))
* **deps:** update linting and formatting ([#5135](https://github.com/danielsogl/awesome-cordova-plugins/issues/5135)) ([d2fb499](https://github.com/danielsogl/awesome-cordova-plugins/commit/d2fb499b30fbc1728b72e2c592dac01abef5741a))
### Documentation
* **core:** fix dead link to Capacitor docs ([#5143](https://github.com/danielsogl/awesome-cordova-plugins/issues/5143)) ([b7d9d90](https://github.com/danielsogl/awesome-cordova-plugins/commit/b7d9d9022fe98938f94c9c338f1e0cfffd535ff4))
## [9.1.2](https://github.com/danielsogl/awesome-cordova-plugins/compare/awesome-cordova-plugins-v9.1.1...awesome-cordova-plugins-v9.1.2) (2026-03-23)
+1 -1
View File
@@ -12,7 +12,7 @@ These plugins are submitted and maintained by the community. While community mem
## Capacitor Support
In addition to Cordova, Awesome Cordova Plugins also works with [Capacitor](https://capacitorjs.com/), Ionic's official native runtime. Basic usage below. For complete details, [see the Capacitor documentation](https://capacitorjs.com/docs/cordova/using-cordova-plugins).
In addition to Cordova, Awesome Cordova Plugins also works with [Capacitor](https://capacitorjs.com/), Ionic's official native runtime. Basic usage below. For complete details, [see the Capacitor documentation](https://capacitorjs.com/docs/plugins/cordova).
## Usage
+1299 -1215
View File
File diff suppressed because it is too large Load Diff
+19 -19
View File
@@ -1,6 +1,6 @@
{
"name": "awesome-cordova-plugins",
"version": "9.1.2",
"version": "9.3.0",
"description": "Native plugin wrappers for Cordova and Ionic with TypeScript, ES6+, Promise and Observable support",
"homepage": "https://awesome-cordova-plugins.com",
"author": "Daniel Sogl <me@danielsogl.com> (https://danielsogl.com)",
@@ -27,30 +27,30 @@
"tslib": "2.8.1"
},
"devDependencies": {
"@angular/common": "20.3.18",
"@angular/compiler": "20.3.18",
"@angular/compiler-cli": "20.3.18",
"@angular/core": "20.3.18",
"@angular/common": "21.2.18",
"@angular/compiler": "21.2.18",
"@angular/compiler-cli": "21.2.18",
"@angular/core": "21.2.18",
"@eslint/js": "^10.0.0",
"@swc/core": "^1.15.21",
"@swc/core": "^1.15.46",
"@swc/jest": "^0.2.39",
"@types/cordova": "11.0.3",
"@types/jest": "^30.0.0",
"@types/node": "^22.19.15",
"eslint": "^10.1.0",
"@types/node": "^24.13.3",
"eslint": "^10.8.0",
"eslint-config-prettier": "10.1.8",
"eslint-plugin-jsdoc": "^62.8.0",
"jest": "^30.3.0",
"jest-environment-jsdom": "^30.3.0",
"lefthook": "^2.1.4",
"prettier": "^3.8.1",
"rollup": "^4.59.0",
"eslint-plugin-jsdoc": "^63.3.1",
"jest": "^30.4.2",
"jest-environment-jsdom": "^30.4.1",
"lefthook": "^2.1.10",
"prettier": "^3.9.6",
"rollup": "^4.62.3",
"rxjs": "^7.8.2",
"tsx": "^4.21.0",
"typedoc": "^0.28.17",
"typedoc-plugin-markdown": "^4.11.0",
"typescript": "~5.8.3",
"typescript-eslint": "^8.57.1"
"tsx": "^4.23.1",
"typedoc": "^0.28.20",
"typedoc-plugin-markdown": "^4.12.0",
"typescript": "~5.9.3",
"typescript-eslint": "^8.65.0"
},
"repository": {
"type": "git",
+2 -2
View File
@@ -52,7 +52,7 @@
},
{
"groupName": "Angular",
"allowedVersions": "<=20",
"allowedVersions": "<=21",
"automerge": false,
"matchPackageNames": ["/^@angular//", "/^@angular-devkit//", "/@schematics/angular/"]
},
@@ -101,7 +101,7 @@
"prHourlyLimit": 2,
"prConcurrentLimit": 5,
"updatePinnedDependencies": false,
"enabledManagers": ["npm"],
"enabledManagers": ["npm", "github-actions"],
"ignoreDeps": [],
"ignorePaths": ["**/node_modules/**", "**/dist/**", "**/coverage/**"]
}
+33
View File
@@ -0,0 +1,33 @@
import { rewriteInjectableExports } from './esm-exports';
describe('rewriteInjectableExports', () => {
test('rewrites inline class exports into instance exports', () => {
const jsFile = `import { AwesomeCordovaNativePlugin } from '@awesome-cordova-plugins/core';
export class File extends AwesomeCordovaNativePlugin {
static pluginName = 'File';
}
//# sourceMappingURL=index.js.map`;
expect(rewriteInjectableExports(jsFile, [{ className: 'File', dirName: 'file', file: '/tmp/file/index.ts' }]))
.toBe(`import { AwesomeCordovaNativePlugin } from '@awesome-cordova-plugins/core';
class FileOriginal extends AwesomeCordovaNativePlugin {
static pluginName = 'File';
}
const File = new FileOriginal();
export { File };
//# sourceMappingURL=index.js.map`);
});
test('keeps supporting legacy named exports', () => {
const jsFile = `class SocialSharingOriginal {}
export { SocialSharingOriginal };`;
expect(
rewriteInjectableExports(jsFile, [
{ className: 'SocialSharing', dirName: 'social-sharing', file: '/tmp/social-sharing/index.ts' },
])
).toBe(`class SocialSharingOriginal {}
const SocialSharing = new SocialSharingOriginal();
export { SocialSharing };`);
});
});
+45
View File
@@ -0,0 +1,45 @@
import { InjectableClassEntry } from './transformers/extract-injectables';
const SOURCE_MAP_COMMENT = '\n//# sourceMappingURL=';
function insertBeforeSourceMapComment(contents: string, addition: string): string {
const sourceMapIndex = contents.lastIndexOf(SOURCE_MAP_COMMENT);
if (sourceMapIndex === -1) {
return `${contents}\n${addition}`;
}
return `${contents.slice(0, sourceMapIndex)}\n${addition}${contents.slice(sourceMapIndex)}`;
}
export function rewriteInjectableExports(jsFile: string, classes: InjectableClassEntry[]): string {
let rewrittenFile = jsFile;
const exportBlocks: string[] = [];
classes.forEach((entry) => {
const originalClassName = `${entry.className}Original`;
rewrittenFile = rewrittenFile.replace(
new RegExp(`([\\s\\(])${entry.className}([\\s\\.;\\(,])`, 'g'),
`$1${originalClassName}$2`
);
const legacyExportPattern = new RegExp(`\\nexport\\s*\\{\\s*${originalClassName}\\s*\\};?`);
if (legacyExportPattern.test(rewrittenFile)) {
rewrittenFile = rewrittenFile.replace(legacyExportPattern, '');
} else {
const inlineClassExportPattern = new RegExp(`export\\s+class\\s+${originalClassName}(?=\\s)`);
if (!inlineClassExportPattern.test(rewrittenFile)) {
throw new Error(`Could not rewrite ESM export for injectable class "${entry.className}"`);
}
rewrittenFile = rewrittenFile.replace(inlineClassExportPattern, `class ${originalClassName}`);
}
exportBlocks.push(`const ${entry.className} = new ${originalClassName}();\nexport { ${entry.className} };`);
});
if (exportBlocks.length === 0) {
return rewrittenFile;
}
return insertBeforeSourceMapComment(rewrittenFile, exportBlocks.join('\n'));
}
+3 -8
View File
@@ -1,6 +1,7 @@
import { readFileSync, writeFileSync } from 'node:fs';
import { join } from 'node:path';
import { rewriteInjectableExports } from '../build/esm-exports';
import { PLUGIN_PATHS, ROOT } from '../build/helpers';
import { InjectableClassEntry, EMIT_PATH } from '../build/transformers/extract-injectables';
import { generateDeclarations, transpile } from '../build/transpile';
@@ -17,17 +18,11 @@ outDirs.forEach((dir: string) => {
let jsFile: string = readFileSync(join(dir, 'index.js'), 'utf-8'),
dtsFile: string = readFileSync(join(dir, 'index.d.ts'), 'utf-8');
jsFile = rewriteInjectableExports(jsFile, classes);
classes.forEach((entry) => {
dtsFile = dtsFile.replace(`class ${entry.className} `, 'class ' + entry.className + 'Original ');
dtsFile += `\nexport declare const ${entry.className}: ${entry.className}Original;`;
jsFile = jsFile.replace(
new RegExp(`([\\s\\(])${entry.className}([\\s\\.;\\(,])`, 'g'),
'$1' + entry.className + 'Original$2'
);
jsFile = jsFile.replace(
`export { ${entry.className}Original }`,
`var ${entry.className} = new ${entry.className}Original();\nexport { ${entry.className} }`
);
});
writeFileSync(join(dir, 'index.js'), jsFile, 'utf-8');
+109
View File
@@ -0,0 +1,109 @@
#!/usr/bin/env bash
# One-time (and after adding new plugins) bulk setup of npm trusted publishers.
# Run locally after `npm login` — `npm trust` needs interactive 2FA and cannot run in CI.
#
# ./scripts/tasks/trust-packages.sh # 4 parallel workers
# JOBS=8 ./scripts/tasks/trust-packages.sh # more, at the risk of rate limiting
#
# npm has no multi-package call, so this loops. The first package runs on its own to
# trigger the browser 2FA prompt — tick "skip 2FA for the next 5 minutes" there. That
# window is server-side, so the parallel batch afterwards runs unattended inside it.
# Parallelism is what keeps the whole set inside a single window instead of ~4.
#
# A trust call is ~2s, so JOBS=4 is ~2 req/s — 4x npm's serial guidance, and the
# reason there is no extra sleep here. If npm rate-limits, the affected packages
# just land in the failed list and the next run picks them up.
#
# Packages that already have a trust config come back as E409 — npm only ever creates,
# there is no update path — so those are treated as done. To actually *change* a config,
# revoke it first: npm trust list <pkg> && npm trust revoke <pkg> --id=<id>, then re-run.
#
# Progress is recorded in .npm-trust-done; re-running resumes where it stopped.
# Packages must already exist on npm; a brand new plugin publishes via NPM_TOKEN
# on its first release, then gets its trust config here.
set -euo pipefail
REPO=danielsogl/awesome-cordova-plugins
WORKFLOW=release-please.yml
JOBS="${JOBS:-4}"
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
SELF="$ROOT/scripts/tasks/trust-packages.sh"
DONE="$ROOT/.npm-trust-done"
create() {
npm trust github "$1" --file "$WORKFLOW" --repo "$REPO" --allow-publish --yes
}
trust_one() {
local pkg="$1" err rc=0
err=$(mktemp)
# stderr is buffered so E409 can be detected; stdout flows through untouched,
# otherwise npm's "Press ENTER to open in the browser" prompt would be invisible
create "$pkg" 2>"$err" || rc=$?
if [ "$rc" -eq 0 ]; then
# single short line + O_APPEND is atomic, so parallel workers can't interleave
echo "$pkg" >> "$DONE"
elif grep -q "E409" "$err"; then
# already has a trust config; npm only ever creates, so this is a no-op, not a failure
echo ">> $pkg already configured, skipping" >&2
echo "$pkg" >> "$DONE"
rc=0
else
cat "$err" >&2
fi
rm -f "$err"
return "$rc"
}
# re-entry point for xargs workers
if [ "${1:-}" = "--one" ]; then
trust_one "$2"
exit
fi
packages=(core)
for dir in "$ROOT"/src/@awesome-cordova-plugins/plugins/*/; do
packages+=("$(basename "$dir")")
done
touch "$DONE"
todo=()
for name in "${packages[@]}"; do
pkg="@awesome-cordova-plugins/$name"
grep -qxF "$pkg" "$DONE" || todo+=("$pkg")
done
if [ ${#todo[@]} -eq 0 ]; then
echo "All ${#packages[@]} packages already configured."
exit 0
fi
echo "${#todo[@]} of ${#packages[@]} packages left for $REPO/.github/workflows/$WORKFLOW"
echo
echo ">> ${todo[0]} runs first. Approve in the browser and tick"
echo ">> \"skip 2FA for the next 5 minutes\" — the rest then runs unattended."
echo
trust_one "${todo[0]}" || true
if [ ${#todo[@]} -gt 1 ]; then
echo
echo "Configuring the remaining $((${#todo[@]} - 1)) with $JOBS parallel workers..."
printf '%s\n' "${todo[@]:1}" | xargs -P "$JOBS" -n1 "$SELF" --one || true
fi
failed=()
for pkg in "${todo[@]}"; do
grep -qxF "$pkg" "$DONE" || failed+=("$pkg")
done
if [ ${#failed[@]} -gt 0 ]; then
echo
printf 'failed: %s\n' "${failed[@]}"
echo
echo "An expired 2FA window is the usual cause — re-run and approve again."
echo "Re-run retries only the failures; successes are recorded in $DONE."
exit 1
fi
echo "Done."
@@ -27,6 +27,7 @@ export class AdjustConfig {
private sessionTrackingSucceededCallback: (session: AdjustSessionSuccess) => void = null;
private sessionTrackingFailedCallback: (session: AdjustSessionFailure) => void = null;
private deferredDeeplinkCallback: (deeplink: string) => void = null;
private remoteTriggerCallback: (remoteTrigger: AdjustRemoteTrigger) => void = null;
// android only
private processName: string = null;
@@ -34,6 +35,7 @@ export class AdjustConfig {
private preinstallFilePath: string = null;
private isPlayStoreKidsComplianceEnabled: boolean = null;
private fbAppId: string = null;
private isAppSetIdReadingEnabled: boolean = null;
// ios only
private isAdServicesEnabled: boolean = null;
@@ -125,6 +127,10 @@ export class AdjustConfig {
this.deferredDeeplinkCallback = deferredDeeplinkCallback;
}
setRemoteTriggerCallback(remoteTriggerCallback: (remoteTrigger: AdjustRemoteTrigger) => void): void {
this.remoteTriggerCallback = remoteTriggerCallback;
}
private getAttributionCallback(): ((attribution: AdjustAttribution) => void) | null {
return this.attributionCallback;
}
@@ -149,6 +155,10 @@ export class AdjustConfig {
return this.deferredDeeplinkCallback;
}
private getRemoteTriggerCallback(): ((remoteTrigger: AdjustRemoteTrigger) => void) | null {
return this.remoteTriggerCallback;
}
private hasAttributionCallback(): boolean {
return this.attributionCallback !== null;
}
@@ -173,6 +183,10 @@ export class AdjustConfig {
return this.deferredDeeplinkCallback !== null;
}
private hasRemoteTriggerCallback(): boolean {
return this.remoteTriggerCallback !== null;
}
// android only
setProcessName(processName: string): void {
this.processName = processName;
@@ -190,6 +204,10 @@ export class AdjustConfig {
this.fbAppId = fbAppId;
}
disableAppSetIdReading(): void {
this.isAppSetIdReadingEnabled = false;
}
// ios only
disableIdfaReading(): void {
this.isIdfaReadingEnabled = false;
@@ -525,6 +543,11 @@ export interface AdjustSkanData {
error: string;
}
export interface AdjustRemoteTrigger {
label: string;
payloadJson: string;
}
export interface AdjustPurchaseVerificationResult {
verificationStatus: string;
code: number;
@@ -574,6 +597,7 @@ export enum AdjustLogLevel {
* AdjustEventSuccess
* AdjustEventFailure
* AdjustSkanData
* AdjustRemoteTrigger
* AdjustPurchaseVerificationResult
* @classes
* AdjustConfig
@@ -679,10 +703,22 @@ export class Adjust extends AwesomeCordovaNativePlugin {
* This method is used to send and potentially resolve shortened deep links
*
* @param {AdjustDeeplink} adjustDeeplink AdjustDeeplink instance containing shortened deep link that has opened your app
* @returns {Promise<string>} Returns a promise with either resolved (if it was resolved) or echoed deep link
* @returns {Promise<string | null>} Returns a promise with either resolved (if it was resolved) or echoed deep link
*/
@Cordova()
processAndResolveDeeplink(adjustDeeplink: AdjustDeeplink): Promise<string> {
processAndResolveDeeplink(adjustDeeplink: AdjustDeeplink): Promise<string | null> {
return;
}
/**
* This method resolves the underlying Adjust link from other links that wrap Adjust links.
*
* @param {string} url URL to resolve
* @param {string[]} resolveUrlSuffixArray Array of URL suffixes to resolve
* @returns {Promise<string | null>} Returns a promise with resolved link or null
*/
@Cordova()
resolveLinkWithUrl(url: string, resolveUrlSuffixArray: string[]): Promise<string | null> {
return;
}
@@ -727,40 +763,40 @@ export class Adjust extends AwesomeCordovaNativePlugin {
/**
* Function used to get Google AdId
*
* @returns {Promise<string>} Returns a promise with Google advertising ID value
* @returns {Promise<string | null>} Returns a promise with Google advertising ID value
*/
@Cordova()
getGoogleAdId(): Promise<string> {
getGoogleAdId(): Promise<string | null> {
return;
}
/**
* If you need to obtain the Amazon Fire Advertising ID, you can make a call to this function.
*
* @returns {Promise<string>} Returns a promise with Amazon Fire advertising ID
* @returns {Promise<string | null>} Returns a promise with Amazon Fire advertising ID
*/
@Cordova()
getAmazonAdId(): Promise<string> {
getAmazonAdId(): Promise<string | null> {
return;
}
/**
* To obtain the IDFA, call this function
*
* @returns {Promise<string>} Returns a promise with IDFA string value
* @returns {Promise<string | null>} Returns a promise with IDFA string value
*/
@Cordova()
getIdfa(): Promise<string> {
getIdfa(): Promise<string | null> {
return;
}
/**
* To obtain the IDFV, call this function
*
* @returns {Promise<string>} Returns a promise with IDFV string value
* @returns {Promise<string | null>} Returns a promise with IDFV string value
*/
@Cordova()
getIdfv(): Promise<string> {
getIdfv(): Promise<string | null> {
return;
}
@@ -768,30 +804,52 @@ export class Adjust extends AwesomeCordovaNativePlugin {
* For every device with your app installed on it, the Adjust backend generates a unique Adjust device identifier (adid).
* In order to obtain this identifier, call this function
*
* @returns {Promise<string>} Returns a promise with adid value
* @returns {Promise<string | null>} Returns a promise with adid value
*/
@Cordova()
getAdid(): Promise<string> {
getAdid(): Promise<string | null> {
return;
}
/**
* This method allows retrieving the ADID with a specified timeout. If the value is not obtained in time, null is returned.
*
* @param {number} timeoutInMilliseconds Timeout in milliseconds
* @returns {Promise<string | null>} Returns a promise with adid value or null if timeout
*/
@Cordova()
getAdidWithTimeout(timeoutInMilliseconds: number): Promise<string | null> {
return;
}
/**
* If you want to access information about a user's current attribution whenever you need it, you can make a call to this function
*
* @returns {Promise<AdjustAttribution>} Returns a promise with AdjustAttribution object
* @returns {Promise<AdjustAttribution | null>} Returns a promise with AdjustAttribution object
*/
@Cordova()
getAttribution(): Promise<AdjustAttribution> {
getAttribution(): Promise<AdjustAttribution | null> {
return;
}
/**
* This method allows retrieving the current attribution information with a specified timeout. If the value is not obtained in time, null is returned.
*
* @param {number} timeoutInMilliseconds Timeout in milliseconds
* @returns {Promise<AdjustAttribution | null>} Returns a promise with AdjustAttribution object or null if timeout
*/
@Cordova()
getAttributionWithTimeout(timeoutInMilliseconds: number): Promise<AdjustAttribution | null> {
return;
}
/**
* Get the information about version of the SDK used
*
* @returns {Promise<string>} Returns a promise with SDK version information
* @returns {Promise<string | null>} Returns a promise with SDK version information
*/
@Cordova()
getSdkVersion(): Promise<string> {
getSdkVersion(): Promise<string | null> {
return;
}
@@ -875,10 +933,10 @@ export class Adjust extends AwesomeCordovaNativePlugin {
/**
* To obtain the last deep link which has opened your app, call this function
*
* @returns {Promise<string>} Returns a promise with last opened deep link string value
* @returns {Promise<string | null>} Returns a promise with last opened deep link string value
*/
@Cordova()
getLastDeeplink(): Promise<string> {
getLastDeeplink(): Promise<string | null> {
return;
}
@@ -14,6 +14,14 @@ export interface IAPAdapter {
isSupported: boolean;
/**
* Returns true if the adapter can skip the native finish method for a transaction.
*
* Some platforms (e.g. Apple AppStore) require explicit acknowledgement of a purchase so it can be removed from
* the queue of pending transactions, regardless of whether the transaction is acknowledged or consumed already.
*/
canSkipFinish?: boolean;
initialize(): Promise<IAPError | undefined>;
loadProducts(products: IAPProductOptions[]): Promise<(IAPProduct | IAPError)[]>;
@@ -31,7 +39,7 @@ export interface IAPAdapter {
handleReceiptValidationResponse(receipt: IAPReceipt, response: object): Promise<void>;
requestPayment(
payment: PaymentRequest,
payment: IAPPaymentRequest,
additionalData?: IAPAdditionalData
): Promise<IAPError | IAPTransaction | undefined>;
@@ -42,6 +50,14 @@ export interface IAPAdapter {
checkSupport(functionality: string): boolean;
restorePurchases(): Promise<IAPError | undefined>;
/**
* Retrieve the billing country code from the platform's storefront.
*
* Returns an ISO 3166-1 alpha-2 country code (e.g., "US", "FR"),
* or undefined if the storefront information is not available.
*/
getStorefront?(): Promise<string | undefined>;
}
export interface IAPProductOptions {
@@ -59,9 +75,26 @@ export interface IAPProductOptions {
* @see {@link InAppPurchase3.requestPayment}
*/
export interface IAPAdditionalData {
/** The application's user identifier, will be obfuscated with md5 to fill `accountId` if necessary */
/**
* The application's user identifier, will be obfuscated with md5 to fill `accountId` if necessary
*
* @deprecated Set {@link InAppPurchase3.applicationUsername} instead. The per-transaction value is
* ignored by upstream adapters, which always read the store-level username so receipt validation later
* (which doesn't have access to the original additionalData) sees the same value that was sent to the
* native API at purchase time.
*/
applicationUsername?: string;
/**
* Quantity of items to purchase.
*
* Only supported on platforms that report the `'orderQuantity'` capability.
* Platforms without support will ignore this field.
*
* @see {@link InAppPurchase3.checkSupport}
*/
quantity?: number;
/** GooglePlay specific additional data. See cordova-plugin-purchase documentation.*/
googlePlay?: object;
@@ -127,9 +160,10 @@ export interface IAPPricingPhase {
priceMicros: number;
currency: string;
currency?: string;
billingPeriod?: number;
/** ISO 8601 duration of the period (https://en.wikipedia.org/wiki/ISO_8601#Durations) */
billingPeriod?: string;
billingCycles?: number;
@@ -205,6 +239,17 @@ export interface IAPTransaction {
currency?: string;
/**
* Quantity of items purchased in a single transaction.
*
* For consumable products, this value represents the number of items purchased.
* For non-consumable products and subscriptions, this value is always 1.
*
* Supported on Android (Google Play) and iOS (Apple AppStore).
* Use `additionalData.quantity` when placing an order to purchase multiple units in a single transaction.
*/
quantity?: number;
products: { id: string; offerId?: string }[];
/**
@@ -243,12 +288,21 @@ export interface IAPVerifiedPurchase {
purchaseId?: string;
/** Identifier of the last transaction (optional) */
transactionId?: string;
purchaseDate?: number;
expiryDate?: number;
isExpired?: boolean;
/** True when a purchase has been acknowledged to the platform. */
isAcknowledged?: boolean;
/** True when a purchase has been consumed (for consumable products). */
isConsumed?: boolean;
renewalIntent?: string;
renewalIntentChangeDate?: number;
@@ -266,6 +320,14 @@ export interface IAPVerifiedPurchase {
priceConsentStatus?: PriceConsentStatus;
lastRenewalDate?: number;
/**
* Quantity of items purchased in a single transaction.
*
* For consumable products, this value represents the number of items purchased.
* For non-consumable products and subscriptions, this value is always 1.
*/
quantity?: number;
}
export interface IAPProductEvents {
@@ -321,6 +383,17 @@ export interface IAPProductEvents {
* If no platforms have any receipts (user made no purchase), this will also get called.
*/
receiptsVerified(cb: Callback<void>, callbackName?: string): IAPProductEvents;
/**
* Register a function called when a platform's storefront country code changes.
*
* Fires when a platform's cached value transitions to a different non-empty
* string. Does not fire for no-op refreshes, failed refreshes, or transitions
* to undefined (the cache preserves the last-known value).
*
* @param cb - Callback invoked with the updated {@link IAPStorefront}
*/
storefrontUpdated(cb: Callback<IAPStorefront>, callbackName?: string): IAPProductEvents;
}
export interface IAPPaymentRequest {
@@ -371,6 +444,67 @@ export interface IAPPaymentRequest {
};
}
/**
* Result of a call to {@link InAppPurchase3.requestPayment}.
*
* A chainable set of event registration methods, each returning the same instance.
*
* @example
* store.requestPayment(paymentRequest)
* .cancelled(() => { // user cancelled by closing the window
* })
* .failed(error => { // payment request failed
* })
* .initiated(transaction => { // transaction initiated
* })
* .approved(transaction => { // transaction approved
* })
* .finished(transaction => { // transaction finished
* });
*/
export interface IAPPaymentRequestPromise {
/** Register a function called when the payment request failed. */
failed(callback: Callback<IAPError>): IAPPaymentRequestPromise;
/** Register a function called when the payment request has been initiated. */
initiated(callback: Callback<IAPTransaction>): IAPPaymentRequestPromise;
/** Register a function called when the payment request has been approved. */
approved(callback: Callback<IAPTransaction>): IAPPaymentRequestPromise;
/** Register a function called when the payment request has been finished. */
finished(callback: Callback<IAPTransaction>): IAPPaymentRequestPromise;
/** Register a function called when the payment request was cancelled by the user. */
cancelled(callback: Callback<void>): IAPPaymentRequestPromise;
}
/**
* A storefront country code, scoped to a specific payment platform.
*
* @see {@link InAppPurchase3.getStorefront}
*/
export interface IAPStorefront {
/** The platform this storefront belongs to. */
platform: Platform;
/**
* ISO 3166-1 alpha-2 country code (e.g., "US", "FR").
*
* Undefined if the value has not been fetched yet, or if the fetch failed.
*/
countryCode?: string;
}
/**
* Obfuscation strategy for the application username.
*
* Controls how `applicationUsername` is transformed before being sent to each platform's native API.
*
* @see {@link InAppPurchase3.obfuscator}
*/
export type Obfuscator = 'legacy' | 'uuid' | 'disabled' | ((applicationUsername: string, platform: Platform) => string);
/**
* Purchase platforms supported by the plugin
*/
@@ -392,6 +526,9 @@ export enum Platform {
/** Test platform */
TEST = 'test',
/** Iaptic.js */
IAPTIC_JS = 'iaptic-js',
}
/** Types of In-App Products */
@@ -512,11 +649,91 @@ export enum LogLevel {
DEBUG = 4,
}
/**
* Error codes returned by the plugin.
*
* @see {@link IAPError.code}
* @see https://github.com/j3k0/cordova-plugin-purchase/blob/master/doc/api.md#error-codes
*/
export enum ErrorCode {
/** Error: Failed to intialize the in-app purchase library */
SETUP,
/** Error: Failed to load in-app products metadata */
LOAD,
/** Error: Failed to make a purchase */
PURCHASE,
/** Error: Failed to load the purchase receipt */
LOAD_RECEIPTS,
/** Error: Client is not allowed to issue the request */
CLIENT_INVALID,
/** Error: Purchase flow has been cancelled by user */
PAYMENT_CANCELLED,
/** Error: Something is suspicious about a purchase */
PAYMENT_INVALID,
/** Error: The user is not allowed to make a payment */
PAYMENT_NOT_ALLOWED,
/** Error: Unknown error */
UNKNOWN,
/** Error: Failed to refresh the purchase receipt */
REFRESH_RECEIPTS,
/** Error: The product identifier is invalid */
INVALID_PRODUCT_ID,
/** Error: Cannot finalize a transaction or acknowledge a purchase */
FINISH,
/** Error: Failed to communicate with the server */
COMMUNICATION,
/** Error: Subscriptions are not available */
SUBSCRIPTIONS_NOT_AVAILABLE,
/** Error: Purchase information is missing token */
MISSING_TOKEN,
/** Error: Verification of store data failed */
VERIFICATION_FAILED,
/** Error: Bad response from the server */
BAD_RESPONSE,
/** Error: Failed to refresh the store */
REFRESH,
/** Error: Payment has expired */
PAYMENT_EXPIRED,
/** Error: Failed to download the content */
DOWNLOAD,
/** Error: Failed to update a subscription */
SUBSCRIPTION_UPDATE_NOT_AVAILABLE,
/** Error: The requested product is not available in the store. */
PRODUCT_NOT_AVAILABLE,
/** Error: The user has not allowed access to Cloud service information */
CLOUD_SERVICE_PERMISSION_DENIED,
/** Error: The device could not connect to the network. */
CLOUD_SERVICE_NETWORK_CONNECTION_FAILED,
/** Error: The user has revoked permission to use this cloud service. */
CLOUD_SERVICE_REVOKED,
/** Error: The user has not yet acknowledged Apple's privacy policy */
PRIVACY_ACKNOWLEDGEMENT_REQUIRED,
/** Error: The app is attempting to use a property for which it does not have the required entitlement. */
UNAUTHORIZED_REQUEST_DATA,
/** Error: The offer identifier is invalid. */
INVALID_OFFER_IDENTIFIER,
/** Error: The price you specified in App Store Connect is no longer valid. */
INVALID_OFFER_PRICE,
/** Error: The signature in a payment discount is not valid. */
INVALID_SIGNATURE,
/** Error: Parameters are missing in a payment discount. */
MISSING_OFFER_PARAMS,
/** Error: The store is blocked (e.g. Google Play blocking purchases). */
STORE_BLOCKED,
/**
* Server code used when a subscription expired.
*
* @deprecated Validator should now return the transaction in the collection as expired.
*/
VALIDATOR_SUBSCRIPTION_EXPIRED = 6778003,
}
/**
* @hidden
*/
export class IAPError {
isError: true;
/** @see {@link ErrorCode} */
code: number;
message: string;
platform: Platform | null;
@@ -874,6 +1091,8 @@ export class IAPError {
* IAPVerifiedPurchase
* IAPProductEvents
* IAPPaymentRequest
* IAPPaymentRequestPromise
* IAPStorefront
* ```
*/
@Plugin({
@@ -914,18 +1133,38 @@ export class InAppPurchase3 extends AwesomeCordovaNativePlugin {
@CordovaProperty()
verbosity: number;
/** Return the identifier of the user for your application */
/**
* Return the identifier of the user for your application.
*
* This value is obfuscated according to {@link InAppPurchase3.obfuscator} before being
* sent to the native platform API.
*/
@CordovaProperty()
applicationUsername: string | (() => string);
applicationUsername: string | (() => string | undefined) | undefined;
/**
* Get the application username as a string by either calling or returning {@link InAppPurchase3.applicationUsername}
*/
@Cordova({ sync: true })
getApplicationUsername(): string {
getApplicationUsername(): string | undefined {
return;
}
/**
* Obfuscation strategy for the application username.
*
* Controls how `applicationUsername` is transformed before being sent
* to each platform's native API. `'uuid'` is the recommended setting
* for new integrations; the default `'legacy'` exists only for
* backward compatibility with server-side modules that already
* correlate against the raw 32-hex MD5 value.
*
* @default 'legacy'
* @see {@link Obfuscator}
*/
@CordovaProperty()
obfuscator: Obfuscator | undefined;
/**
* URL or implementation of the receipt validation service
*
@@ -971,12 +1210,7 @@ export class InAppPurchase3 extends AwesomeCordovaNativePlugin {
*/
@CordovaProperty()
validator_privacy_policy:
| 'fraud'
| 'support'
| 'analytics'
| 'tracking'
| ('fraud' | 'support' | 'analytics' | 'tracking')[]
| undefined;
'fraud' | 'support' | 'analytics' | 'tracking' | ('fraud' | 'support' | 'analytics' | 'tracking')[] | undefined;
/**
* Register a product.
@@ -1003,10 +1237,10 @@ export class InAppPurchase3 extends AwesomeCordovaNativePlugin {
* Call to initialize the in-app purchase plugin.
*
* @param platforms - List of payment platforms to initialize, default to Store.defaultPlatform().
* @returns {Promise<IAPError | undefined>}
* @returns {Promise<IAPError[]>}
*/
@Cordova({ sync: true })
initialize(platforms: (Platform | { platform: Platform; options?: object })[]): Promise<IAPError | undefined> {
initialize(platforms?: (Platform | { platform: Platform; options?: object })[]): Promise<IAPError[]> {
return;
}
@@ -1170,7 +1404,7 @@ export class InAppPurchase3 extends AwesomeCordovaNativePlugin {
* @param {IAPAdditionalData?} additionalData Additional parameters
*/
@Cordova({ sync: false })
requestPayment(paymentRequest: IAPPaymentRequest, additionalData?: IAPAdditionalData): object {
requestPayment(paymentRequest: IAPPaymentRequest, additionalData?: IAPAdditionalData): IAPPaymentRequestPromise {
return;
}
@@ -1222,9 +1456,34 @@ export class InAppPurchase3 extends AwesomeCordovaNativePlugin {
* @example
* if (purchase.isBillingRetryPeriod)
* store.manageBilling(purchase.platform);
* @param {Platform?} platform
*/
@Cordova({ sync: false })
manageBilling(): Promise<IAPError | undefined> {
manageBilling(platform?: Platform): Promise<IAPError | undefined> {
return;
}
/**
* Retrieve the billing country code from the platform's storefront.
*
* Returns a `IAPStorefront` object with the platform and its ISO 3166-1
* alpha-2 country code (e.g., "US", "FR"). The country code may be
* undefined if the underlying fetch has not yet completed or failed —
* the platform is still reported. Returns `undefined` only when no
* matching adapter is ready.
*
* @param platform - Optional platform. If omitted, returns the first
* cached non-empty storefront, or a `{ platform, countryCode: undefined }`
* object for the first ready adapter.
*
* @example
* const storefront = store.getStorefront();
* if (storefront?.countryCode) {
* console.log(`Billing country: ${storefront.countryCode}`);
* }
*/
@Cordova({ sync: true })
getStorefront(platform?: Platform): IAPStorefront | undefined {
return;
}
@@ -443,8 +443,22 @@ export class LoginParameters {
*/
dbUpdateStatements: string;
/**
* Specify Firebase push configuration for Web/Elector Push.
*/
firebasePushConfig: FirebasePushConfig;
}
export interface FirebasePushConfig {
apiKey: string;
authDomain: string;
projectId: string;
storageBucket: string;
messagingSenderId: string;
appId: string;
vapidKey: string; // VAPID public key for Web Push
}
export class LoginResult extends UnviredResult {
type: LoginListenerType;
}
@@ -1860,4 +1874,66 @@ export class UnviredCordovaSDK extends AwesomeCordovaNativePlugin {
getUMPRequestConfig(endpoint: string, options?: { customUrl?: string }): Promise<UMPRequestConfig> {
return;
}
/**
* Check connection status.
* Returns networkNotReachable, umpNotReachable, or connected.
*/
@Cordova()
checkConnectionStatus(): Promise<any> {
return;
}
/**
* Get database directory path.
*/
@Cordova()
getDatabasePath(): Promise<string> {
return;
}
/**
* Download attachment synchronously.
* @param structureObject Attachment Item JSON object containing field name-value.
*/
@Cordova()
downloadAttachmentSync(structureObject: any): Promise<any> {
return;
}
/**
* Unregister for callback on GetMessage status (Mobile only).
*/
@Cordova({ sync: true })
unRegisterNotifListener(): void {
return;
}
/**
* Prepare database for export.
*/
@Cordova()
prepareDatabaseForExport(): Promise<boolean> {
return;
}
/**
* Register a callback to listen for sync items count updates.
*/
@Cordova({
observable: true,
})
updateSyncItemsCount(): Observable<any> {
return;
}
/**
* Set authentication credentials.
* @param username Username
* @param password Password
*/
@Cordova()
setAuthCredentials(username: string, password: string): Promise<boolean> {
return;
}
}