{"_id":"@finqu/app-link","_rev":"28-8625e4bfa234fb8794c48f59768af0d0","name":"@finqu/app-link","dist-tags":{"latest":"4.1.3"},"versions":{"4.0.1":{"name":"@finqu/app-link","version":"4.0.1","keywords":[],"author":{"name":"Finqu"},"license":"MIT","_id":"@finqu/app-link@4.0.1","maintainers":[{"name":"wreakz","email":"Ovaska.aki@gmail.com"},{"name":"ozmium","email":"miikka@finquteam.com"}],"homepage":"https://developers.finqu.com/docs/apps/app-link/","bugs":{"url":"https://github.com/finqu/app-link/issues"},"dist":{"shasum":"8c399fb8cfa6027e4057c20f4fc3cc6d0ed76800","tarball":"https://registry.npmjs.org/@finqu/app-link/-/app-link-4.0.1.tgz","fileCount":69,"integrity":"sha512-BaI+LLEqe8m3MfNLfs2gi2sk0S+2RXtEfrYrv2LgVfNSgvM7LB09JXBf8AcU5P7YWqyaWghDXhZ7DPF6KqUqmg==","signatures":[{"sig":"MEUCIGVYLMSnctrACu2zfH65dcTE++fUaVWyICJXqnj9uthKAiEA3pYqrZ9wEhm1YypgnevWbir+PHbXhCZiPl2r5kvuyQg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":225549,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg0w9kCRA9TVsSAnZWagAAFQkP/0AZNEXm/SL/OIXFvN55\nHpYwoNRYXza+bpYZCVrg2CjoRvZby8wzIt7PAUqe09JRyfHKAAvG2QSjN56m\nXeMVwqp5XQ2Fvl3rVCWKOFeS4nkUdGwccudCKBNxVhTfjBVjD/YNGOcgQGjN\nQLSjI0wseDFUjYnwUblAJJYlC/8GqgFkBK8PpSoy6AwMnmV/GIs+GrOmnMBM\n1D4uVnVjhsYzd4ecxBFPutBIvm/FsUxw+mRIjriHjWg5hoOSFejyamWm5iqi\nwtCdvnfhpQGmkfNYEVoqhTybaPRAWMg6R7s9rQ/H0CseVL08rMpJ5WqGul5n\ntxxuvuUUD/o5Z8hnyjoy/1kjTG1bfZ4kxcHCkd2+QtbJUeQGKejsRgMkc8SX\nxfwWkboQ2PTMgNP0Jw3a+dVFiN8AsyTvNqzvtkSAaShalVwBUVhLmCDB41zc\nhkL7zLCiTFuDjFerAQQkJo6iPC2lFqc9bRBOws/gEXoYKRTo8b0wHvkkCDC+\n7NKgNBYM4gnHHrd5YTMgIWoBlFOFA8VTma87C5DT9cdmBwCBgmJZD3yBNbGY\nEUEQa2o0kX/+9qubXNmcezQ77F1iO9RMa8YVB2edGEPo7a2AeD4kOlAJ8yuX\n+r59+7L74Qe3wspbhzlip25dTfg/VUZvVRdxL0lcE7LCqRjkzybqfPb6NE9I\nuW5c\r\n=VoaB\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","types":"index.d.ts","scripts":{"copy":"cp -rf README.md dist && cp -rf .npmignore dist && cp -rf package.json dist && cp -rf release-it.json dist","dist":"cd dist && release-it","lint":"tslint -p tsconfig.json","build":"npm run build:types && npm run build:js","clean":"npm prune && rimraf dist","bundle":"npm run clean && npm run format && npm run lint && npm run build && npm run copy","format":"prettier --write \"src/**/*.ts\" \"src/**/*.js\" && tslint --fix -p tsconfig.json 'src/**/*.ts'","build:js":"babel src --out-dir dist --extensions \".ts,.tsx\" --source-maps inline","type-check":"tsc --noEmit","build:types":"tsc --emitDeclarationOnly","type-check:watch":"npm run type-check -- --watch"},"_npmUser":{"name":"ozmium","email":"miikka@finquteam.com"},"repository":{"url":"git+https://github.com/finqu/app-link.git","type":"git"},"_npmVersion":"5.6.0","description":"AppLink for Finqu Apps.","directories":{},"_nodeVersion":"9.11.2","dependencies":{"uuid":"^3.4.0","url-parse":"^1.4.7","@types/uuid":"^3.4.7","iframe-resizer":"^4.2.10","@types/url-parse":"^1.4.3"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^2.7.1","tslint":"^5.20.1","prettier":"^1.19.1","babel-cli":"^6.26.0","@babel/cli":"^7.8.4","release-it":"^12.6.1","typescript":"^3.8.2","@babel/core":"^7.8.4","@babel/preset-env":"^7.8.4","tslint-config-prettier":"^1.18.0","@babel/preset-typescript":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-class-properties":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3"},"_npmOperationalInternal":{"tmp":"tmp/app-link_4.0.1_1624444771581_0.5962643613420424","host":"s3://npm-registry-packages"}},"4.1.1":{"name":"@finqu/app-link","version":"4.1.1","keywords":[],"author":{"name":"Finqu"},"license":"MIT","_id":"@finqu/app-link@4.1.1","maintainers":[{"name":"ozmium","email":"miikka@finquteam.com"},{"name":"wreakz","email":"Ovaska.aki@gmail.com"}],"homepage":"https://developers.finqu.com/build-with-finqu/apps-integrations/app-link/introduction","dist":{"shasum":"794daf7ab48e0f384b76cf9b80fee608e47baecb","tarball":"https://registry.npmjs.org/@finqu/app-link/-/app-link-4.1.1.tgz","fileCount":177,"integrity":"sha512-nWayQZ+Bu0t9itK5MSyPxQLKwzOnc0wavl3InSRTzG2oJVrMP0S+bwH2TDnj+i+lekYsT2znqwvETX9DkLE8RQ==","signatures":[{"sig":"MEYCIQD7HgB/HwKxJjUvOdACRbARV9c/fkDi3H0+xDsk6oxawAIhAKZCn3fpERBqqGLuXnKRa7wJdB89mM7Kb9oqPOLXCi9H","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":862032},"main":"index.js","types":"index.d.ts","gitHead":"366150094a80fd28d3404bbe95c77603a84ff8e1","scripts":{"copy":"cp -rf README.md dist && cp -rf .npmignore dist && cp -rf package.json dist && cp -rf release-it.json dist","dist":"release-it","lint":"tslint -p tsconfig.json","test":"vitest","build":"npm run build:types && npm run build:js","clean":"npm prune && rimraf dist","bundle":"npm run clean && npm run format && npm run lint && npm run build && npm run copy","format":"prettier --write \"src/**/*.ts\" && tslint --fix -p tsconfig.json 'src/**/*.ts'","build:js":"babel src --out-dir dist --extensions \".ts,.tsx\" --source-maps inline","test:run":"vitest run","type-check":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","build:test-app":"esbuild src/index.ts --bundle --format=iife --global-name=AppLink --outfile=test-app/app-link.js --alias:iframe-resizer=./test-app/stubs/iframe-resizer.js","serve:test-app":"npm run build:test-app && npx serve test-app -p 3333","type-check:watch":"npm run type-check -- --watch"},"_npmUser":{"name":"ozmium","email":"miikka@finquteam.com"},"_npmVersion":"10.9.2","description":"AppLink for Finqu Apps.","directories":{},"_nodeVersion":"22.15.0","dependencies":{"uuid":"^13.0.0","url-parse":"^1.5.10","iframe-resizer":"^5.5.9","@types/url-parse":"^1.4.11"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^28.1.0","rimraf":"^6.1.3","tslint":"^6.1.3","vitest":"^4.0.18","esbuild":"^0.27.3","prettier":"^3.8.1","babel-cli":"^6.26.0","@babel/cli":"^7.28.6","release-it":"^19.2.4","typescript":"^5.9.3","@babel/core":"^7.29.0","@babel/preset-env":"^7.29.0","tslint-config-prettier":"^1.18.0","@babel/preset-typescript":"^7.28.5","@babel/plugin-proposal-decorators":"^7.29.0","@babel/plugin-proposal-class-properties":"^7.18.6","@babel/plugin-proposal-object-rest-spread":"^7.20.7"},"_npmOperationalInternal":{"tmp":"tmp/app-link_4.1.1_1771252674152_0.03857692182274408","host":"s3://npm-registry-packages-npm-production"}},"4.1.2":{"name":"@finqu/app-link","version":"4.1.2","keywords":[],"author":{"name":"Finqu"},"license":"MIT","_id":"@finqu/app-link@4.1.2","maintainers":[{"name":"ozmium","email":"miikka@finquteam.com"},{"name":"wreakz","email":"Ovaska.aki@gmail.com"}],"homepage":"https://developers.finqu.com/build-with-finqu/apps-integrations/app-link/introduction","dist":{"shasum":"024e7092ecd26e8551a8285bcfe4a3f97aed7cff","tarball":"https://registry.npmjs.org/@finqu/app-link/-/app-link-4.1.2.tgz","fileCount":78,"integrity":"sha512-dEq5ahx9YE3kcDPtQIQdcC5W7K+Q39OZzgULEzJVccWl0pe93nACLuzkhSfueypGu6oSO6/Yt0Es9V18CHkk4A==","signatures":[{"sig":"MEYCIQCvLo1JAVi3oxkqzqhhMXJI6Xayel1/OASOXHp7SCyOjQIhAMpml/Hbl7Hv6+VzuEY+uWsBZHyrq0h5XVQpYwHoU5Zr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":646635},"main":"index.js","types":"index.d.ts","gitHead":"54e4c5a76d9c1f6f9552fb5c011002dd0988b4f5","scripts":{"copy":"cp -rf README.md dist && cp -rf .npmignore dist && cp -rf package.json dist && cp -rf release-it.json dist","dist":"release-it","lint":"tslint -p tsconfig.json","test":"vitest","build":"npm run build:types && npm run build:js","clean":"npm prune && rimraf dist","bundle":"npm run clean && npm run format && npm run lint && npm run build && npm run copy","format":"prettier --write \"src/**/*.ts\" && tslint --fix -p tsconfig.json 'src/**/*.ts'","build:js":"babel src --out-dir dist --extensions \".ts,.tsx\" --source-maps inline","test:run":"vitest run","type-check":"tsc --noEmit","build:types":"tsc -p tsconfig.build.json","build:test-app":"esbuild src/index.ts --bundle --format=iife --global-name=AppLink --outfile=test-app/app-link.js --alias:iframe-resizer=./test-app/stubs/iframe-resizer.js","serve:test-app":"npm run build:test-app && npx serve test-app -p 3333","type-check:watch":"npm run type-check -- --watch"},"_npmUser":{"name":"ozmium","email":"miikka@finquteam.com"},"_npmVersion":"10.9.2","description":"AppLink for Finqu Apps.","directories":{},"_nodeVersion":"22.15.0","dependencies":{"uuid":"^13.0.0","url-parse":"^1.5.10","iframe-resizer":"^5.5.9","@types/url-parse":"^1.4.11"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^28.1.0","rimraf":"^6.1.3","tslint":"^6.1.3","vitest":"^4.0.18","esbuild":"^0.27.3","prettier":"^3.8.1","babel-cli":"^6.26.0","@babel/cli":"^7.28.6","release-it":"^19.2.4","typescript":"^5.9.3","@babel/core":"^7.29.0","@babel/preset-env":"^7.29.0","tslint-config-prettier":"^1.18.0","@babel/preset-typescript":"^7.28.5","@babel/plugin-proposal-decorators":"^7.29.0","@babel/plugin-proposal-class-properties":"^7.18.6","@babel/plugin-proposal-object-rest-spread":"^7.20.7"},"_npmOperationalInternal":{"tmp":"tmp/app-link_4.1.2_1773908629468_0.9588215673255323","host":"s3://npm-registry-packages-npm-production"}},"4.1.3":{"name":"@finqu/app-link","version":"4.1.3","description":"AppLink for Finqu Apps.","main":"index.js","types":"index.d.ts","scripts":{"test":"vitest","test:run":"vitest run","build:test-app":"esbuild src/index.ts --bundle --format=iife --global-name=AppLink --outfile=test-app/app-link.js --alias:iframe-resizer=./test-app/stubs/iframe-resizer.js","serve:test-app":"npm run build:test-app && npx serve test-app -p 3333","clean":"npm prune && rimraf dist","type-check":"tsc --noEmit","type-check:watch":"npm run type-check -- --watch","build":"npm run build:types && npm run build:js","build:types":"tsc -p tsconfig.build.json","build:js":"babel src --out-dir dist --extensions \".ts,.tsx\" --source-maps inline","format":"prettier --write \"src/**/*.ts\" && tslint --fix -p tsconfig.json 'src/**/*.ts'","lint":"tslint -p tsconfig.json","copy":"cp -rf README.md dist && cp -rf .npmignore dist && cp -rf package.json dist && cp -rf release-it.json dist","bundle":"npm run clean && npm run format && npm run lint && npm run build && npm run copy","dist":"release-it"},"keywords":[],"homepage":"https://developers.finqu.com/build-with-finqu/apps-integrations/app-link/introduction","author":{"name":"Finqu"},"license":"MIT","dependencies":{"@types/url-parse":"^1.4.11","iframe-resizer":"^4.4.5","url-parse":"^1.5.10","uuid":"^13.0.0"},"devDependencies":{"@babel/cli":"^7.28.6","@babel/core":"^7.29.0","@babel/plugin-proposal-class-properties":"^7.18.6","@babel/plugin-proposal-decorators":"^7.29.0","@babel/plugin-proposal-object-rest-spread":"^7.20.7","@babel/preset-env":"^7.29.0","@babel/preset-typescript":"^7.28.5","babel-cli":"^6.26.0","esbuild":"^0.27.3","jsdom":"^28.1.0","prettier":"^3.8.1","release-it":"^19.2.4","rimraf":"^6.1.3","tslint":"^6.1.3","tslint-config-prettier":"^1.18.0","typescript":"^5.9.3","vitest":"^4.0.18"},"_id":"@finqu/app-link@4.1.3","gitHead":"b9d0d8966c8233dc2443f8083867c8df044179d4","_nodeVersion":"22.15.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-8+rZuBn45E8Rww1FWJDsbBSprYkWWXURmYEmGR0XKPn5Ns1XzxJp2fJjqbkiSC/8a1+fF8CgLKdPPiJVEayTQA==","shasum":"88fd0f2aa2e8fa825b5a3e014813bcfa00bded14","tarball":"https://registry.npmjs.org/@finqu/app-link/-/app-link-4.1.3.tgz","fileCount":78,"unpackedSize":646635,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGGT3nqa7ZEWDG1FTkyk+sOev7UpcgP8Qmkba3G2MjQxAiAZ6fREyV7zorFt+2C7WWGVLNMavTx0dD/g2jy86SBz1w=="}]},"_npmUser":{"name":"ozmium","email":"miikka@finquteam.com"},"directories":{},"maintainers":[{"name":"ozmium","email":"miikka@finquteam.com"},{"name":"wreakz","email":"Ovaska.aki@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/app-link_4.1.3_1774259626407_0.9045871582770382"},"_hasShrinkwrap":false}},"time":{"created":"2021-06-23T10:39:31.580Z","modified":"2026-03-23T09:53:46.718Z","3.1.0":"2021-06-22T07:13:28.859Z","1.0.0":"2021-06-22T07:13:28.859Z","1.0.1":"2021-06-22T07:13:28.859Z","3.0.0":"2021-06-22T07:13:28.859Z","2.0.0":"2021-06-22T07:13:28.859Z","1.1.5":"2021-06-22T07:13:28.859Z","1.1.1":"2021-06-22T07:13:28.859Z","3.1.1":"2021-06-22T07:13:28.859Z","1.1.6":"2021-06-22T07:13:28.859Z","3.0.1":"2021-06-22T07:13:28.859Z","1.0.2":"2021-06-22T07:13:28.859Z","2.0.2":"2021-06-22T07:13:28.859Z","2.0.1":"2021-06-22T07:13:28.859Z","1.1.4":"2021-06-22T07:13:28.859Z","1.1.2":"2021-06-22T07:13:28.859Z","1.1.7":"2021-06-22T07:13:28.859Z","1.1.0":"2021-06-22T07:13:28.859Z","1.1.3":"2021-06-22T07:13:28.859Z","3.0.2":"2021-06-22T07:13:28.859Z","4.0.1":"2021-06-23T10:39:31.778Z","4.1.1":"2026-02-16T14:37:54.343Z","4.1.2":"2026-03-19T08:23:49.667Z","4.1.3":"2026-03-23T09:53:46.584Z"},"author":{"name":"Finqu"},"license":"MIT","homepage":"https://developers.finqu.com/build-with-finqu/apps-integrations/app-link/introduction","keywords":[],"description":"AppLink for Finqu Apps.","maintainers":[{"name":"ozmium","email":"miikka@finquteam.com"},{"name":"wreakz","email":"Ovaska.aki@gmail.com"}],"readme":"# Finqu AppLink\n\n**AppLink** lets Finqu Apps talk to Finqu services over PostMessage. Use it to build embedded admin UIs, dialogs, and resource views that run inside the Finqu Commerce administration.\n\n## Installation\n\n```bash\nnpm install @finqu/app-link\n```\n\n## Quick start\n\nCreate an app instance with your app id and (for admin views) the administration origin. The origin is used to validate PostMessage communication. You can fetch the admin URL from the OAuth 2.0 resource.\n\n```typescript\nimport { App } from '@finqu/app-link';\n\nconst app = App.create('my-app-id', 'https://my-admin-url.myfinqu.com');\n```\n\nRun your logic once the app is ready:\n\n```typescript\napp.ready(() => {\n  console.log('App ID:', app.getId());\n  console.log('Session ID:', app.getSessionId());\n});\n```\n\n## Core API\n\n| Method                            | Description                                                                                                    |\n| --------------------------------- | -------------------------------------------------------------------------------------------------------------- |\n| `App.create(appName, origin?)`    | Create and initialize an app. `origin` defaults to `'*'`; set it to your admin URL for Commerce admin iframes. |\n| `app.ready(fn)`                   | Run a callback when the app is initialized (or immediately if already initialized).                            |\n| `app.getId()`                     | Get the app instance id from the host.                                                                         |\n| `app.getSessionId()`              | Get the current session id.                                                                                    |\n| `app.dispatch(message)`           | Send a message to the host.                                                                                    |\n| `app.subscribe(group?, callback)` | Subscribe to messages; optionally filter by `ComponentGroup`. Returns an unsubscribe function.                 |\n| `app.getResizer()`                | Get the iframe-resizer API when running inside a resizable iframe, or `null`.                                  |\n\n## Features\n\n- **App and lifecycle** — `App.create()`, `app.ready()`, `app.getId()`, `app.getSessionId()`.\n- **Component groups** — Filter messages with `app.subscribe(ComponentGroup.Dialog, callback)`.\n- **Dialogs** — `Dialog`, `Confirm`, `ConfirmRemove`, `Loader` for modal UI.\n- **Navigation** — `History`, `Redirect` for routing and navigation.\n- **Resources** — `Resource` with `ResourceType` for product, order, customer, etc.\n- **Feature** — `Feature` for host-driven feature flags (subscribe to NEW, UPDATE, REMOVE).\n\nImport components and types from the main package:\n\n```typescript\nimport { App, ComponentGroup, Dialog, ResourceType } from '@finqu/app-link';\n```\n\n## Usage examples\n\n**Dialog (show and close):**\n\n```typescript\nconst dialog = Dialog.create(app, {\n  title: 'My Dialog',\n  content: 'Hello',\n  buttons: { confirm: 'OK', close: 'Cancel' },\n});\nawait dialog.show();\nconst result = await dialog.done();\n```\n\n**Resource (dispatch and subscribe):**\n\n```typescript\nconst resource = Resource.create(app);\nresource.dispatch(Resource.Action.SAVE, {\n  id: '123',\n  type: ResourceType.PRODUCT,\n  data: { name: 'Foo' },\n});\nresource.subscribe(Resource.Action.DONE, (payload) =>\n  console.log('Saved', payload),\n);\n```\n\n**Host API** (parent page): use `Host`, `Client`, `ComponentRef`, and `bootstrap` from the same package to register iframes and handle component creation. See JSDoc on those classes for examples.\n\n## Documentation\n\nFull documentation: **[Finqu Developers](https://developers.finqu.com)**\n\n## License\n\nMIT © [Finqu](https://github.com/finqu)\n","readmeFilename":"README.md"}