@schibsted/account-sdk-browser 4.7.2 → 4.7.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +55 -204
- package/es5/global.js +15 -2
- package/es5/global.js.map +1 -1
- package/es5/global.min.js +1 -1
- package/es5/global.min.js.map +1 -1
- package/es5/identity.js +15 -2
- package/es5/identity.js.map +1 -1
- package/es5/identity.min.js +1 -1
- package/es5/identity.min.js.map +1 -1
- package/es5/index.js +15 -2
- package/es5/index.js.map +1 -1
- package/es5/index.min.js +1 -1
- package/es5/index.min.js.map +1 -1
- package/es5/monetization.js +15 -2
- package/es5/monetization.js.map +1 -1
- package/es5/monetization.min.js +1 -1
- package/es5/monetization.min.js.map +1 -1
- package/package.json +4 -2
- package/src/cache.js +14 -1
- package/src/identity.d.ts +4 -2
- package/CHANGELOG.md +0 -538
- package/NOTICE +0 -19
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[](https://github.com/schibsted/account-sdk-browser)
|
|
2
2
|
|
|
3
|
-
[](https://travis-ci.com/schibsted/account-sdk-browser)
|
|
3
|
+
[](https://app.travis-ci.com/schibsted/account-sdk-browser)
|
|
4
4
|
[](https://codecov.io/gh/schibsted/account-sdk-browser)
|
|
5
5
|
[](https://snyk.io/test/github/schibsted/account-sdk-browser)
|
|
6
6
|
|
|
@@ -11,197 +11,40 @@ to use Schibsted account to sign up and log in users. Use it to generate URLs fo
|
|
|
11
11
|
in" button, query the logged-in status of your users, and to check whether they have access to
|
|
12
12
|
products and subscriptions, etc.
|
|
13
13
|
|
|
14
|
-
<a name="getting-started"></a>
|
|
15
|
-
|
|
16
14
|
## Getting started
|
|
17
15
|
|
|
18
|
-
|
|
16
|
+
This sdk mainly communicates with a service named Session Service, which is available on brand
|
|
17
|
+
domains (i.e. id.vg.no) to avoid Third-Party Cookie request.
|
|
19
18
|
|
|
20
19
|
Since browsers started to block Third-Party Cookies, your top domain from local machine needs to
|
|
21
20
|
match your session service top domain. Otherwise session service cookie will be Third-Party Cookie,
|
|
22
21
|
and will not be sent with XHR request.
|
|
23
22
|
|
|
23
|
+
The same applies to cross scheme requests. The session service is hosted on https and therefore you need to [run your site with HTTPS locally](https://web.dev/how-to-use-local-https/).
|
|
24
|
+
|
|
24
25
|
For example if your `pre` domain is pre.sdk-example.com, and it uses id.pre.sdk-example.com session
|
|
25
26
|
service domain, your local domain should be local.sdk-example.com.
|
|
26
27
|
|
|
27
28
|
1. Do `npm install --save @schibsted/account-sdk-browser`
|
|
28
|
-
1. Use this library as you would any other npm module: `import { Identity, Monetization, Payment }
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
JavaScript bundle **and** don't need all of Identity, Monetization and Payment modules from
|
|
32
|
-
this SDK — it's possible to `require('@schibsted/account-sdk-browser/identity')` (note the
|
|
33
|
-
`/identity` at the end) or `/monetization'` or `/payment'`
|
|
29
|
+
1. Use this library as you would any other npm module: `import { Identity, Monetization, Payment } from '@schibsted/account-sdk-browser'`
|
|
30
|
+
With CommonJS it is possible to `require` the modules Identity, Monetization and Payment
|
|
31
|
+
by appending `/identity`, `/monetization'` or `/payment'` at the end.
|
|
34
32
|
1. Build your site as you prefer. This library uses modern JavaScript syntax (including async/await
|
|
35
33
|
and other ES2017 and WHATWG features) by default. We recommend that you do any transpilation
|
|
36
|
-
yourself for the browser versions you need to cater to. See [this paragraph](#polyfills
|
|
34
|
+
yourself for the browser versions you need to cater to. See [this paragraph](#polyfills) for
|
|
37
35
|
info about our babelified version and info about polyfills.
|
|
36
|
+
1. Initiate the SDK and provide at least `clientId`, `env` and `sessionDomain`.
|
|
38
37
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
## Upgrading from 2.x
|
|
42
|
-
|
|
43
|
-
If you already use the 2.x branch of the Schibsted account JS SDK, certain changes will be required
|
|
44
|
-
to use this version of the SDK. We have chosen what we believe to be a middle ground between
|
|
45
|
-
"remembering the work done in the old SDK" and "starting fresh". Therefore it is recommended that
|
|
46
|
-
you read this document in full. But ok, let's present some highlighted differences:
|
|
47
|
-
|
|
48
|
-
<a name="differences-from-2.x"></a>
|
|
49
|
-
|
|
50
|
-
#### Differences from 2.x
|
|
51
|
-
|
|
52
|
-
* Instead of using `SPiD.init()` for initialization, the new SDK exports three classes; `Identity`,
|
|
53
|
-
`Monetization` and `Payment`
|
|
54
|
-
* Many features (like logging in) requires a `redirectUri` parameter — both in the 2.x and 3.x
|
|
55
|
-
versions of the SDK. An important difference in the new version of our backends, is that we strive
|
|
56
|
-
to be more compliant with OpenID Connect standards. This means that redirect uris need to match
|
|
57
|
-
**exactly** (that is — including the query string). This will be a breaking change for some
|
|
58
|
-
people, because in the 2.x world, a redirect uri might look like `https://site.com` in self
|
|
59
|
-
service, and a login attempt with `redirectUri=https://site.com?article=1234` would then be ok
|
|
60
|
-
because it would only match on domain+path — but not query string. However — this will **not**
|
|
61
|
-
work in the 3.x world. OpenID Connect **does** have a suggestion for how to handle these
|
|
62
|
-
situations though, which is a parameter called `state` that you send in addition to the
|
|
63
|
-
`redirectUri`. See [this paragraph](#regarding-state) for more information
|
|
64
|
-
* The `'SPiD.'` string is removed from the name of all SDK events. So the event that used to be
|
|
65
|
-
`'SPiD.login'` is now just `'login'`
|
|
66
|
-
* You don't log in by setting `window.location`. Instead, you use the `login()` method on an
|
|
67
|
-
instance of `Identity`
|
|
68
|
-
* The JavaScript code in this browser SDK does **NOT** set any `document.cookie = ...` by default.
|
|
69
|
-
There is a function `enableVarnishCookie` that you can call on an `Identity` instance. This will
|
|
70
|
-
enable setting the `SP_ID` cookie whenever `hasSession()` is called (though most browsers require
|
|
71
|
-
that you are on a "real domain" for this to work — so, **not** `localhost`). Any other cookie
|
|
72
|
-
that you need set, you will have to set yourself
|
|
73
|
-
* All functions that used to take callback functions in the 2.x version of the SDK don't do that
|
|
74
|
-
anymore. The new SDK instead uses promises where it makes sense (often written as `async`
|
|
75
|
-
functions). For example `Identity.getUser()` returns a promise. So, for instance if you used to do
|
|
76
|
-
this in v2.x:
|
|
77
|
-
```javascript
|
|
78
|
-
identity.hasSession((err, data) => {
|
|
79
|
-
if (err) {
|
|
80
|
-
console.log('Nooo!', err)
|
|
81
|
-
} else {
|
|
82
|
-
console.log('Yay', data)
|
|
83
|
-
}
|
|
84
|
-
});
|
|
85
|
-
```
|
|
86
|
-
Now you should instead do:
|
|
87
|
-
```javascript
|
|
88
|
-
// Either
|
|
89
|
-
identity.hasSession()
|
|
90
|
-
.then(data => console.log('Yay', data))
|
|
91
|
-
.catch(err => console.log('Nooo!', err));
|
|
92
|
-
// ... or if you're using async functions
|
|
93
|
-
try {
|
|
94
|
-
const data = await identity.hasSession();
|
|
95
|
-
console.log('Yay', data);
|
|
96
|
-
} catch (err) {
|
|
97
|
-
console.log('Nooo!', err);
|
|
98
|
-
}
|
|
99
|
-
```
|
|
100
|
-
* Listening to events is still supported, although since many functions return Promises, we expect
|
|
101
|
-
many users will find the use of Promise results preferable. But for those that prefer the events,
|
|
102
|
-
it works using a function `.on` that's compatible with Node's `EventEmitter`. For example
|
|
103
|
-
`SPiD.event.subscribe('SPiD.login', handler)` from 2.x becomes `Identity.on('login', handler)`.
|
|
104
|
-
Also, the functions `.off` and `.once` are supported
|
|
105
|
-
* SPiD URI is gone. There are a handful of `***Url()` functions in each of the `Identity`,
|
|
106
|
-
`Monetization` and `Payment` classes for the relevant flows
|
|
107
|
-
* The new SDK has inline jsdoc documentation that's available
|
|
108
|
-
[here](https://schibsted.github.io/account-sdk-browser/) instead of tech docs.
|
|
109
|
-
These documents will always be up to date with the latest release so make sure to run `npm
|
|
110
|
-
outdated` in your project to be notified about any new releases
|
|
111
|
-
* The new UI flows are different than the old ones in that they use the Schibsted account API
|
|
112
|
-
endpoints just like any other client. For most clients this means absolutely nothing at all, but
|
|
113
|
-
for some, it's quite important; If you have ever asked our support staff to disable certain API
|
|
114
|
-
endpoint accesses, there is a chance that you'll encounter problems. For instance, if you've set
|
|
115
|
-
`NO ACCESS` on the `POST /signup` endpoint, **users will not be able to sign up to your site**
|
|
116
|
-
using the new flows
|
|
117
|
-
* If you use our session-service, there are certain changes in the response from the session endpoint.
|
|
118
|
-
* The `userStatus` field makes no sense in the session-service world, since it operates "per-site"
|
|
119
|
-
(there is one id.site.example domain for each site, so being logged in and connected for that
|
|
120
|
-
site means the same thing. Also, there is the `Identity.isConnected` function that's still kept
|
|
121
|
-
in case people prefer to keep the same logic with and without the session-service).
|
|
122
|
-
* The `id` field (the one returning a MongoDb identifier like `abcdef0123456789abcdd00d`) has
|
|
123
|
-
finally been removed. It's been deprecated for a long time. The numeric `userId` (legacy) and
|
|
124
|
-
`uuid` fields are still present.
|
|
125
|
-
|
|
126
|
-
<a name="polyfills-yo"></a>
|
|
127
|
-
|
|
128
|
-
#### Polyfills required for older browsers
|
|
129
|
-
|
|
130
|
-
This SDK uses modern JavaScript features. If you support older browsers, you should use a tool like
|
|
131
|
-
babel to transform the JavaScript as needed. However — since certain teams have deployment pipelines
|
|
132
|
-
where it's difficult to do their own transpilation, we do provide some opt-in es5 files as well:
|
|
133
|
-
|
|
134
|
-
1. `@schibsted/account-sdk-browser/es5`: Include both `Identity`, `Monetization` and `Payment`.
|
|
135
|
-
1. `@schibsted/account-sdk-browser/es5/global`: Include both `Identity`, `Monetization` and
|
|
136
|
-
`Payment`. In addition, add them as variables to the global `window` object.
|
|
137
|
-
1. `@schibsted/account-sdk-browser/es5/identity`, `@schibsted/account-sdk-browser/es5/monetization`
|
|
138
|
-
or `@schibsted/account-sdk-browser/es5/payment` can be used to only include each class by itself.
|
|
139
|
-
|
|
140
|
-
But then regardless of whether you use the es5 versions or not, you might need to polyfill certain
|
|
141
|
-
things that might be missing in the browsers you wish to support. A quick test using IE11 showed
|
|
142
|
-
that we needed polyfills for `Promise`, `URL`, `Object.entries`, `fetch`, `Number.isFinite` and
|
|
143
|
-
`Number.isInteger`. If you want any sort of debugging to work (say, if you're passing a function
|
|
144
|
-
using `console.log` as a parameter to any SDK function that supports logging), you might also need
|
|
145
|
-
to polyfill `console` and `console.log` (yeah, it's baffling, but a [known
|
|
146
|
-
issue](https://stackoverflow.com/questions/22315167/in-ie11-how-to-use-console-log) in IE). We added
|
|
147
|
-
them from polyfill.io like this:
|
|
148
|
-
|
|
149
|
-
<script src="https://cdn.polyfill.io/v2/polyfill.js?features=Promise,URL,Object.entries,fetch,Number.isFinite,Number.isInteger,console,console.log"></script>
|
|
150
|
-
|
|
151
|
-
<a name="itp-yo"></a>
|
|
152
|
-
|
|
153
|
-
#### Local development on Chrome version 88 (or higher)
|
|
154
|
-
|
|
155
|
-
Google Chrome in version 88 (or higher) [introduced changes](https://support.google.com/chrome/a/answer/7679408#88&zippy=%2Cchrome) in the definition of cookies `same-site` attribute.
|
|
156
|
-
From now on cross-scheme requests (e.g. `http` <-> `https`) will be considered cross-site instead of same-site, hence you may experience problems with localhost development, resulting in `Bad Request` responses from `hasSession` calls.
|
|
157
|
-
While we are working on more permanent resolution of this this issue, as a temporary workaround we can suggest [running your site with HTTPS locally](https://web.dev/how-to-use-local-https/) or disabling `schemeful-same-site` flag in Chrome for the time of local development.
|
|
158
|
-
|
|
159
|
-
More info: https://web.dev/schemeful-samesite/
|
|
160
|
-
|
|
161
|
-
## Notes on Apple Intelligent Tracking Prevention (ITP)
|
|
162
|
-
#### or.. how I learned to stop worrying and ❤️ the Schibsted account session service
|
|
163
|
-
|
|
164
|
-
Right, as of Safari 12, we can't rely on making requests from a site domain to the Schibsted account
|
|
165
|
-
domain. Safari 12 will possibly partition cookies in such requests in an attempt to protect the
|
|
166
|
-
user's privacy. While this is good for end-users, it presented a real problem for Schibsted account,
|
|
167
|
-
since our technique for deciding whether a user is logged in, is to send a request in precisely this
|
|
168
|
-
manner.
|
|
169
|
-
|
|
170
|
-
To ensure consistent user sessions despite these restrictions, we have re-designed our platform and
|
|
171
|
-
introduced what we call the
|
|
172
|
-
session-service. If your site lives on site.example, you should assign a sub-domain for use with the
|
|
173
|
-
session-service (we propose id.site.example for production and id-pre.site.example for staging —
|
|
174
|
-
talk to our Customer Success team regarding how to get this set up). The goal is to have
|
|
175
|
-
https://id.site.example be a DNS name resolving to our session-service, since this enables us to
|
|
176
|
-
place a cookie on that domain that indicates that the user is logged in.
|
|
177
|
-
|
|
178
|
-
When the domain is set up, your client needs to be modified by our Customer Success team to enable
|
|
179
|
-
using this feature (this is done by them setting `session_service_domain = https://id.site.example`
|
|
180
|
-
in SysAdmin).
|
|
181
|
-
|
|
182
|
-
Finally, and this is where you, the user of account-sdk-browser need a change; When creating an
|
|
183
|
-
instance of `Identity` or `Monetization`, include the property `sessionDomain:
|
|
184
|
-
'https://id.site.example` in the constructor'.
|
|
185
|
-
|
|
186
|
-
So to sum up:
|
|
187
|
-
|
|
188
|
-
1. Prepare a subdomain id.site.example (optionally id-pre.site.example for staging)
|
|
189
|
-
2. Enable the session-service for the client you use on your site
|
|
190
|
-
3. Add the `sessionDomain` property to the `Identity` or `Monetization` constructors
|
|
191
|
-
|
|
192
|
-
1 and 2 requires [communication with us](mailto:schibstedaccount@schibsted.com), and 3 is done by you at a time of your choosing.
|
|
193
|
-
|
|
194
|
-
<a name="example-project"></a>
|
|
38
|
+
If this is for a new site and there is no sessionDomain yet, contact
|
|
39
|
+
[support](mailto:schibstedaccount@schibsted.com) to initiate the process.
|
|
195
40
|
|
|
196
41
|
## Simplified login widget
|
|
197
42
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
1.
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
4. If the user is not logged-in to your site, call the [showSimplifiedLoginWidget](https://schibsted.github.io/account-sdk-browser/Identity.html#showSimplifiedLoginWidget) function. The `showSimplifiedLoginWidget` accepts the same params as login function (`state` is required, it might be string or async function). If the simplified login prompt is to be loaded, `showSimplifiedLoginWidget` will return `true`.
|
|
204
|
-
5. Set up a way to store information about which users have been shown the simplified login prompt. How you do this is up to you, but one way is to use localStorage. Use this information to execute on the rules defined in #2.
|
|
43
|
+
1. Ensure that your site has no site specific terms and conditions in the Schibsted account login flow.
|
|
44
|
+
1. Define rules for when and how often the simplified login prompt should be shown to unique users on your site. How you do this is up to you, but we recommend starting with showing the prompt once per user before potentially increasing this frequency over time.
|
|
45
|
+
1. Set up a function to check if users landing on your domain [is logged in](https://schibsted.github.io/account-sdk-browser/Identity.html#isLoggedIn) to your site.
|
|
46
|
+
1. If the user is not logged-in to your site, call the [showSimplifiedLoginWidget](https://schibsted.github.io/account-sdk-browser/Identity.html#showSimplifiedLoginWidget) function. The `showSimplifiedLoginWidget` accepts the same params as login function (`state` is required, it might be string or async function). If the simplified login prompt is to be loaded, `showSimplifiedLoginWidget` will return `true`.
|
|
47
|
+
1. Set up a way to store information about which users have been shown the simplified login prompt. How you do this is up to you, but one way is to use localStorage. Use this information to execute on the rules defined in #2.
|
|
205
48
|
|
|
206
49
|
## Example project
|
|
207
50
|
|
|
@@ -223,8 +66,6 @@ send the AT (and never ever the RT!) to the browser but rather keep it on the se
|
|
|
223
66
|
associate it with that particular user session in order to be able to call Schibsted account APIs on
|
|
224
67
|
behalf of that user.
|
|
225
68
|
|
|
226
|
-
<a name="events"></a>
|
|
227
|
-
|
|
228
69
|
## Events
|
|
229
70
|
|
|
230
71
|
The SDK fires events when something we deem interesting is happening. For example the
|
|
@@ -234,8 +75,6 @@ very similar to Node's [EventEmitter](https://nodejs.org/api/events.html). The m
|
|
|
234
75
|
methods are `.on(eventName, listener)` (to subscribe to an event) and `.off(eventName, listener)`
|
|
235
76
|
(to unsubscribe to an event).
|
|
236
77
|
|
|
237
|
-
<a name="identity"></a>
|
|
238
|
-
|
|
239
78
|
## Identity
|
|
240
79
|
|
|
241
80
|
Let's start with a bit of example code:
|
|
@@ -269,8 +108,6 @@ function userClicksLogIn() {
|
|
|
269
108
|
}
|
|
270
109
|
```
|
|
271
110
|
|
|
272
|
-
<a name="regarding-state"></a>
|
|
273
|
-
|
|
274
111
|
#### Regarding `state`
|
|
275
112
|
|
|
276
113
|
This parameter is an OpenID Connect parameter (described in [this paragraph in the
|
|
@@ -297,8 +134,6 @@ attacks. For example this can be accomplished by:
|
|
|
297
134
|
attempted. If successful, remove the token from the tokenCache so the same token can't be used
|
|
298
135
|
again, and continue to show `decodedState.article`
|
|
299
136
|
|
|
300
|
-
<a name="authentication-methods"></a>
|
|
301
|
-
|
|
302
137
|
#### Authentication methods
|
|
303
138
|
|
|
304
139
|
Although Schibsted account abstracts away the details of how the users sign up or log in, it's worth
|
|
@@ -308,19 +143,19 @@ mentioning that your end users have a few ways to log in:
|
|
|
308
143
|
self-chosen password
|
|
309
144
|
* Passwordless - email: here, the users enter their email address and receive a one-time code that
|
|
310
145
|
they can use to log in
|
|
311
|
-
* Multifactor authentication: first client indicates which methods should be preferred, later these
|
|
146
|
+
* Multifactor authentication: first client indicates which methods should be preferred, later these
|
|
312
147
|
will be included (if fulfilled) in `AMR` claim of IDToken
|
|
313
148
|
|
|
314
149
|
The default is username & password. If you wish to use one of the passwordless login methods, the
|
|
315
150
|
`login()` function takes an optional parameter called `acrValues` (Authentication Context Class Reference).
|
|
316
|
-
The `acrValues` parameter with multifactor authentication can take following values:
|
|
151
|
+
The `acrValues` parameter with multifactor authentication can take following values:
|
|
317
152
|
- `eid` - authentication using BankID (for DEV and PRE environments you can choose between country specific solution by specifying `eid-no` or `eid-se` instead)
|
|
318
153
|
- `otp-email` - passwordless authentication using code sent to registered email
|
|
319
154
|
- `password` - force password authentication (even if user is already logged in)
|
|
320
155
|
- `otp` - authentication using registered one time code generator (https://tools.ietf.org/html/rfc6238)
|
|
321
|
-
- `sms` - authentication using SMS code sent to phone number
|
|
156
|
+
- `sms` - authentication using SMS code sent to phone number
|
|
322
157
|
- `password otp sms` - those authentication methods might be combined
|
|
323
|
-
|
|
158
|
+
|
|
324
159
|
The classic way to authenticate a user, is to send them from your site to the Schibsted account
|
|
325
160
|
domain, let the user authenticate there, and then have us redirect them back to your site. If you
|
|
326
161
|
prefer, we also provide a popup that you can use. In this method, the authentication happens on a
|
|
@@ -332,8 +167,6 @@ automatically fall back to the redirect flow. The SDK Example project mentioned
|
|
|
332
167
|
how it can work. Again, you can see [sdk-example](https://github.com/schibsted/sdk-example) if you
|
|
333
168
|
want a working example.
|
|
334
169
|
|
|
335
|
-
<a name="is-the-user-logged-in"></a>
|
|
336
|
-
|
|
337
170
|
#### Is the user logged in?
|
|
338
171
|
|
|
339
172
|
Schibsted account relies on browser cookies to determine whether a user is recognized as logged in.
|
|
@@ -351,22 +184,11 @@ If you've lately changed your terms & conditions, maybe the user still hasn't ac
|
|
|
351
184
|
case they are considered *not connected*. In that case, if they click "Log in" from your site, we
|
|
352
185
|
will just ask them to accept those terms and redirect them right back to your site.
|
|
353
186
|
|
|
354
|
-
<a name="logging-out"></a>
|
|
355
|
-
|
|
356
187
|
#### Logging out
|
|
357
188
|
|
|
358
189
|
If you want to log the user out of Schibsted account, you can call
|
|
359
190
|
[Identity#logout](https://schibsted.github.io/account-sdk-browser/Identity.html#logout). This
|
|
360
|
-
will remove the Schibsted account
|
|
361
|
-
that browser.
|
|
362
|
-
|
|
363
|
-
On your site backend, it may or may not make sense to remove the access/refresh tokens that you got
|
|
364
|
-
from Schibsted account. This can simply be achieved by removing it from your session or just
|
|
365
|
-
deleting the session. At this time, there are no ways to invalidate the tokens so they will not be
|
|
366
|
-
usable. *In the future you might be able to invalidate tokens. This comes in handy if you know that
|
|
367
|
-
a token is compromised and you don't want them to be usable in the future.*
|
|
368
|
-
|
|
369
|
-
<a name="monetization"></a>
|
|
191
|
+
will remove the Schibsted account brand session. User will still be logged into Schibsted account.
|
|
370
192
|
|
|
371
193
|
## Monetization
|
|
372
194
|
|
|
@@ -396,8 +218,6 @@ try {
|
|
|
396
218
|
}
|
|
397
219
|
```
|
|
398
220
|
|
|
399
|
-
<a name="payment"></a>
|
|
400
|
-
|
|
401
221
|
## Payment
|
|
402
222
|
|
|
403
223
|
This class provides methods for paying with a so-called paylink, buying a product, getting links to
|
|
@@ -422,10 +242,31 @@ const paylinkUrl = paymentSDK.purchasePaylinkUrl(paylink)
|
|
|
422
242
|
paymentSDK.payWithPaylink(paylink)
|
|
423
243
|
```
|
|
424
244
|
|
|
425
|
-
<a name="appendix"></a>
|
|
426
|
-
|
|
427
245
|
## Appendix
|
|
428
246
|
|
|
247
|
+
#### Polyfills
|
|
248
|
+
|
|
249
|
+
This SDK uses modern JavaScript features. If you support older browsers, you should use a tool like
|
|
250
|
+
babel to transform the JavaScript as needed. However — since certain teams have deployment pipelines
|
|
251
|
+
where it's difficult to do their own transpilation, we do provide some opt-in es5 files as well:
|
|
252
|
+
|
|
253
|
+
1. `@schibsted/account-sdk-browser/es5`: Include both `Identity`, `Monetization` and `Payment`.
|
|
254
|
+
1. `@schibsted/account-sdk-browser/es5/global`: Include both `Identity`, `Monetization` and
|
|
255
|
+
`Payment`. In addition, add them as variables to the global `window` object.
|
|
256
|
+
1. `@schibsted/account-sdk-browser/es5/identity`, `@schibsted/account-sdk-browser/es5/monetization`
|
|
257
|
+
or `@schibsted/account-sdk-browser/es5/payment` can be used to only include each class by itself.
|
|
258
|
+
|
|
259
|
+
But then regardless of whether you use the es5 versions or not, you might need to polyfill certain
|
|
260
|
+
things that might be missing in the browsers you wish to support. A quick test using IE11 showed
|
|
261
|
+
that we needed polyfills for `Promise`, `URL`, `Object.entries`, `fetch`, `Number.isFinite` and
|
|
262
|
+
`Number.isInteger`. If you want any sort of debugging to work (say, if you're passing a function
|
|
263
|
+
using `console.log` as a parameter to any SDK function that supports logging), you might also need
|
|
264
|
+
to polyfill `console` and `console.log` (yeah, it's baffling, but a [known
|
|
265
|
+
issue](https://stackoverflow.com/questions/22315167/in-ie11-how-to-use-console-log) in IE). We added
|
|
266
|
+
them from polyfill.io like this:
|
|
267
|
+
|
|
268
|
+
<script src="https://cdn.polyfill.io/v2/polyfill.js?features=Promise,URL,Object.entries,fetch,Number.isFinite,Number.isInteger,console,console.log"></script>
|
|
269
|
+
|
|
429
270
|
#### Cookies
|
|
430
271
|
|
|
431
272
|
There are some cookies used by Schibsted account. They should all be considered opaque on the
|
|
@@ -455,6 +296,16 @@ browser side. Nevertheless, here is a short description of them.
|
|
|
455
296
|
* `referer` (yep, missing the double "rr"..): If this is missing, a call to hassession will
|
|
456
297
|
return a `401` with a `UserException` that says `No session found`.
|
|
457
298
|
|
|
299
|
+
## Releasing
|
|
300
|
+
Tags are pushed to NPM via Travis. To release a new version, run in master
|
|
301
|
+
|
|
302
|
+
```bash
|
|
303
|
+
$ npm version <major|minor|patch>
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
which will run the test, update version in package.json, commi, tag the commit
|
|
307
|
+
and push.
|
|
308
|
+
|
|
458
309
|
## LICENSE
|
|
459
310
|
|
|
460
311
|
Copyright (c) 2018 Schibsted Products & Technology AS
|
package/es5/global.js
CHANGED
|
@@ -10735,9 +10735,22 @@ var Cache = /*#__PURE__*/function () {
|
|
|
10735
10735
|
_createClass(Cache, [{
|
|
10736
10736
|
key: "get",
|
|
10737
10737
|
value: function get(key) {
|
|
10738
|
+
/**
|
|
10739
|
+
* JSON.parse safe wrapper
|
|
10740
|
+
* @param {string} raw
|
|
10741
|
+
* @returns {*} parsed value or null if failed to parse
|
|
10742
|
+
*/
|
|
10743
|
+
function getObj(raw) {
|
|
10744
|
+
try {
|
|
10745
|
+
return JSON.parse(raw);
|
|
10746
|
+
} catch (e) {
|
|
10747
|
+
return null;
|
|
10748
|
+
}
|
|
10749
|
+
}
|
|
10750
|
+
|
|
10738
10751
|
try {
|
|
10739
10752
|
var raw = this.cache.get(key);
|
|
10740
|
-
var obj =
|
|
10753
|
+
var obj = getObj(raw);
|
|
10741
10754
|
|
|
10742
10755
|
if (obj && Number.isInteger(obj.expiresOn) && obj.expiresOn > Date.now()) {
|
|
10743
10756
|
return obj.value;
|
|
@@ -11551,7 +11564,7 @@ function emulate(global) {
|
|
|
11551
11564
|
/* 175 */
|
|
11552
11565
|
/***/ (function(module) {
|
|
11553
11566
|
|
|
11554
|
-
module.exports = JSON.parse("{\"name\":\"@schibsted/account-sdk-browser\",\"version\":\"4.7.
|
|
11567
|
+
module.exports = JSON.parse("{\"name\":\"@schibsted/account-sdk-browser\",\"version\":\"4.7.5\",\"description\":\"Schibsted account SDK for browsers\",\"main\":\"index.js\",\"scripts\":{\"build\":\"./build.sh\",\"clean\":\"rimraf .cache coverage dist docs\",\"docs\":\"rimraf docs && jsdoc -c ./utils/jsdoc.js --verbose\",\"lint\":\"eslint .\",\"pretest\":\"npm run lint\",\"test\":\"jest\",\"precover\":\"npm run lint\",\"cover\":\"jest --coverage\",\"postcover\":\"codecov\",\"preversion\":\"npm test\",\"postversion\":\"git push && git push --tags\"},\"author\":\"\",\"license\":\"MIT\",\"dependencies\":{\"tiny-emitter\":\"^2.1.0\"},\"devDependencies\":{\"@babel/core\":\"^7.11.4\",\"@babel/preset-env\":\"^7.11.0\",\"babel-loader\":\"^8.1.0\",\"codecov\":\"^3.6.5\",\"core-js\":\"^3.6.5\",\"docdash\":\"git+https://github.com/torarvid/docdash.git#v0.5.0\",\"eslint\":\"^6.8.0\",\"eslint-plugin-import\":\"^2.20.2\",\"jest\":\"^26.4.2\",\"jest-junit\":\"^10.0.0\",\"jsdoc\":\"^3.6.5\",\"node-fetch\":\"^2.6.0\",\"regenerator-runtime\":\"^0.13.7\",\"webpack\":\"^4.44.1\",\"webpack-cli\":\"^3.3.12\",\"whatwg-url\":\"^8.0.0\"},\"repository\":{\"type\":\"git\",\"url\":\"git://github.com/schibsted/account-sdk-browser.git\"},\"babel\":{\"presets\":[[\"@babel/preset-env\",{\"useBuiltIns\":\"usage\",\"corejs\":3,\"targets\":{\"browsers\":[\"> 1%\",\"last 10 chrome major versions\",\"last 10 firefox major versions\",\"last 10 opera major versions\",\"last 2 safari major versions\",\"last 2 ios major versions\",\"last 2 ie major versions\",\"last 5 edge major versions\"]}}]]},\"typings\":\"index.d.ts\"}");
|
|
11555
11568
|
|
|
11556
11569
|
/***/ }),
|
|
11557
11570
|
/* 176 */
|