NiseLine is inspired by LocalStack. Goal of this tool is to create a mock service for LINE.
Launch NiseLine server by Docker image.
docker run -d -p 3000:3000 dyoshikawa/niseline:latest
And install NiseLiff SDK.
npm i @niseline/niseliff
Use NiseLiff SDK in your client app!
import { buildNiseliff } from '@niseline/niseliff'
import React from 'react'
import ReactDOM from 'react-dom'
const liff = buildNiseliff({
liffId: 'DUMMY_LIFF_ID',
})
liff
.init({
liffId: 'DUMMY_LIFF_ID',
})
.then(() => {
ReactDOM.render(
<React.StrictMode>Your client app</React.StrictMode>,
document.getElementById('root')
)
})
Install @niseline/niseliff.
npm i @niseline/niseliff
You can use with npm package of LIFF SDK. Switch between the real LIFF SDK and the NiseLiff SDK for each environment. In this example, the NiseLiff SDK is used only in the local environment.
// /path/to/config.ts
export const env: 'local' | 'development' | 'staging' | 'production' = 'local'
// /path/to/liff.ts
import * as config from '/path/to/config'
import realLiff, { Liff } from '@line/liff'
import { buildNiseliff } from '@niseline/niseliff'
const liff =
config.env === 'local' ? buildNiseliff({ liffId: 'DUMMY_LIFF_ID' }) : realLiff
export default liff
// /path/to/index.tsx
import liff from '/path/to/liff'
import React from 'react'
import ReactDOM from 'react-dom'
liff.init({ liffId: 'DUMMY_LIFF_ID' }).then(() => {
ReactDOM.render(
<React.StrictMode>Your client app</React.StrictMode>,
document.getElementById('root')
)
})
You can also use with CDN of LIFF SDK. If you use typescript, it is recommended that you install the @line/liff package. The actual runtime is a CDN, but the type definitions are available from the npm package.
// /path/to/config.ts
export const env: 'local' | 'development' | 'staging' | 'production' = 'local'
// /path/to/index.tsx
import * as config from '/path/to/config'
import { Liff } from '@line/liff'
import { buildNiseliff } from '@niseline/niseliff'
import React from 'react'
import ReactDOM from 'react-dom'
declare global {
var liff: Liff
}
if (config.env === 'local') {
window.liff = buildNiseliff({
liffId: 'DUMMY_LIFF_ID',
})
}
window.liff
.init({
liffId: 'DUMMY_LIFF_ID',
})
.then(() => {
ReactDOM.render(
<React.StrictMode>Your client app</React.StrictMode>,
document.getElementById('root')
)
})
- Ready
- Id
- Initialize liff app
- Get os
- Get language
- Get version
- Get line version
- Is in client
- Is logged in
- Is api available
- Login
- Logout
- Get access token
- Get ID token
- Get decoded ID token
- Get context
- Get profile
- Get friendship
- Permission query
- Permission request all
- Permanent link create url by
- Permanent link create url
- Permanent link set extra query param
- Send messages
- Open window
- Share target picker
- Scan code v2
- Scan code
- Close window
- Init plugins
- Bluetooth get availability
- Bluetooth request device
- Bluetooth referring device
Pull and run dyoshikawa/niseline.
docker run -d -p 3000:3000 dyoshikawa/niseline:latest
curl http://localhost:3000/niseline/api/ping
# => {"ping":"pong"}
# docker-compose.yml
version: '3'
services:
niseline:
image: dyoshikawa/niseline:latest
ports:
- 3000:3000
docker compose up -d
curl http://localhost:3000/niseline/api/ping
# => {"ping":"pong"}
curl --request POST \
--url http://localhost:3000/niseline/api/users \
--header 'content-type: application/json' \
--data '{"id": "FOO_ID","name": "Foo","picture": "http://example.com/foo.jpg","email": "[email protected]"}'
# => null
curl -v -X POST 'http://localhost:3000/oauth2/v2.1/verify' \
-H 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'id_token=FOO_ID' \
--data-urlencode 'client_id=1234567890'
# => {"iss":"https://example.com","sub":"FOO_ID","aud":"1234567890","exp":1504169092,"iat":1504263657,"nonce":"0987654asdf","amr":["pwd"],"name":"Foo","picture":"http://example.com/foo.jpg","email":"[email protected]"}
- Issue access token
- Verify access token
- Refresh access token
- Revoke access token
- Verify ID token
- Get user profile
- Get friendship status
- Send reply message
- Send push message
- Send multicast message
- Send narrowcast message
- Get narrowcast progress status
- Send broadcast message
- Get content
- Get quota
- Get consumption
- Get number of reply messages
- Get number of push messages
- Get number of multicast messages
- Get number of broadcast messages
- Retry api request