@sesamy/sesamy-js 1.2.0 → 1.3.1

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.
Files changed (53) hide show
  1. package/.env +2 -0
  2. package/.env.production +2 -0
  3. package/.eslintignore +4 -0
  4. package/.eslintrc +18 -0
  5. package/.github/workflows/release.yml +23 -0
  6. package/.nvmrc +1 -0
  7. package/.prettierignore +4 -0
  8. package/.prettierrc +5 -0
  9. package/CHANGELOG.md +132 -0
  10. package/article.html +65 -0
  11. package/contracts.html +23 -0
  12. package/dts-bundle-generator.config.ts +11 -0
  13. package/entitlements.html +23 -0
  14. package/index.html +24 -0
  15. package/package.json +14 -10
  16. package/public/sesamy.png +0 -0
  17. package/renovate.json +4 -0
  18. package/src/SesamyContracts.ts +86 -0
  19. package/src/SesamyEntitlements.ts +85 -0
  20. package/src/app.ts +101 -0
  21. package/src/constants.ts +2 -0
  22. package/src/controllers/index.ts +1 -0
  23. package/src/controllers/paywall.ts +14 -0
  24. package/src/entitlementsStyle.css +147 -0
  25. package/src/events/ready.ts +12 -0
  26. package/src/index.ts +36 -0
  27. package/src/javascript-api.ts +84 -0
  28. package/src/services/analytics/element-tracker.ts +117 -0
  29. package/src/services/analytics/index.ts +234 -0
  30. package/src/services/analytics/listeners/index.ts +2 -0
  31. package/src/services/analytics/listeners/route.ts +9 -0
  32. package/src/services/analytics/listeners/scroll.ts +62 -0
  33. package/src/services/analytics/session-id.ts +11 -0
  34. package/src/services/analytics/types/analytics-activity-utils.d.ts +54 -0
  35. package/src/services/analytics/types/analytics-router-utils.d.ts +7 -0
  36. package/src/services/analytics/types/analytics-scroll-utils.d.ts +4 -0
  37. package/src/services/analytics/types/track-event.ts +70 -0
  38. package/src/services/auth/index.ts +74 -0
  39. package/src/services/sesamy/index.ts +160 -0
  40. package/src/state.ts +3 -0
  41. package/src/style.css +99 -0
  42. package/src/types/Bills.ts +12 -0
  43. package/src/types/Config.ts +11 -0
  44. package/src/types/Contracts.ts +12 -0
  45. package/src/types/Entitlement.ts +9 -0
  46. package/src/types/Events.ts +6 -0
  47. package/src/types/Tag.ts +16 -0
  48. package/src/vite-env.d.ts +1 -0
  49. package/tsconfig.json +23 -0
  50. package/vite.config.ts +43 -0
  51. package/vite.dev.config.ts +14 -0
  52. package/dist/sesamy-js.es.js +0 -3169
  53. package/dist/sesamy-js.umd.js +0 -41
package/src/style.css ADDED
@@ -0,0 +1,99 @@
1
+ :root {
2
+ font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
3
+ line-height: 1.5;
4
+ font-weight: 400;
5
+
6
+ color-scheme: light dark;
7
+ color: rgba(255, 255, 255, 0.87);
8
+ background-color: #242424;
9
+
10
+ font-synthesis: none;
11
+ text-rendering: optimizeLegibility;
12
+ -webkit-font-smoothing: antialiased;
13
+ -moz-osx-font-smoothing: grayscale;
14
+ }
15
+
16
+ a {
17
+ font-weight: 500;
18
+ color: #646cff;
19
+ text-decoration: inherit;
20
+ }
21
+ a:hover {
22
+ color: #535bf2;
23
+ }
24
+
25
+ body {
26
+ margin: 0;
27
+ display: flex;
28
+ place-items: center;
29
+ min-width: 320px;
30
+ min-height: 100vh;
31
+ }
32
+
33
+ h1 {
34
+ font-size: 3.2em;
35
+ line-height: 1.1;
36
+ }
37
+
38
+ sesamy-app {
39
+ max-width: 1280px;
40
+ margin: 0 auto;
41
+ padding: 2rem;
42
+ text-align: center;
43
+ }
44
+
45
+ .logo {
46
+ height: 6em;
47
+ padding: 1.5em;
48
+ will-change: filter;
49
+ transition: filter 300ms;
50
+ }
51
+ .logo:hover {
52
+ filter: drop-shadow(0 0 2em #646cffaa);
53
+ }
54
+ .logo.vanilla:hover {
55
+ filter: drop-shadow(0 0 2em #3178c6aa);
56
+ }
57
+
58
+ .card {
59
+ padding: 2em;
60
+ }
61
+
62
+ .read-the-docs {
63
+ color: #888;
64
+ }
65
+
66
+ button {
67
+ border-radius: 8px;
68
+ border: 1px solid transparent;
69
+ padding: 0.6em 1.2em;
70
+ font-size: 1em;
71
+ font-weight: 500;
72
+ font-family: inherit;
73
+ background-color: #1a1a1a;
74
+ cursor: pointer;
75
+ transition: border-color 0.25s;
76
+ }
77
+ button:hover {
78
+ border-color: #646cff;
79
+ }
80
+ button:focus,
81
+ button:focus-visible {
82
+ outline: 4px auto -webkit-focus-ring-color;
83
+ }
84
+ .hidden {
85
+ display: none;
86
+ }
87
+
88
+ @media (prefers-color-scheme: light) {
89
+ :root {
90
+ color: #213547;
91
+ background-color: #ffffff;
92
+ }
93
+ a:hover {
94
+ color: #747bff;
95
+ }
96
+ button {
97
+ background-color: #f9f9f9;
98
+ }
99
+ }
@@ -0,0 +1,12 @@
1
+ export type Bill = {
2
+ id: string;
3
+ items: [
4
+ {
5
+ sku: string;
6
+ title: string;
7
+ purchaseOption: string;
8
+ },
9
+ ];
10
+ status: string;
11
+ createdAt: string;
12
+ };
@@ -0,0 +1,11 @@
1
+ export interface Config {
2
+ clientId: string;
3
+ namespace?: string;
4
+ analytics?: Partial<AnalyticsConfig>;
5
+ }
6
+
7
+ export interface AnalyticsConfig {
8
+ clientId: string;
9
+ enabled?: boolean;
10
+ endpoint?: string;
11
+ }
@@ -0,0 +1,12 @@
1
+ export type Contract = {
2
+ id: string;
3
+ items: [
4
+ {
5
+ sku: string;
6
+ title: string;
7
+ purchaseOption: string;
8
+ },
9
+ ];
10
+ status: string;
11
+ createdAt: string;
12
+ };
@@ -0,0 +1,9 @@
1
+ export type Entitlement = {
2
+ id: string;
3
+ sku: string;
4
+ cover: string;
5
+ title: string;
6
+ description: string;
7
+ createdAt: string;
8
+ updatedAt: string;
9
+ };
@@ -0,0 +1,6 @@
1
+ export enum Events {
2
+ READY = 'sesamyReady',
3
+ AUTHENTICATED = 'sesamyAuthenticated',
4
+ LOGOUT = 'sesamyLogout',
5
+ SOFT_PAYWALL = 'sesamySoftPaywall',
6
+ }
@@ -0,0 +1,16 @@
1
+ export type TagValue = string | number | (string | number)[];
2
+
3
+ export type Tag = {
4
+ id: string;
5
+ value: TagValue;
6
+ policies?: {
7
+ // ttl in seconds
8
+ ttl?: number;
9
+ maxItems?: number;
10
+ unique?: boolean;
11
+ overflow?: "block" | "fifo";
12
+ ipSessionSharing?: boolean;
13
+ };
14
+ updatedAt: string;
15
+ createdAt: string;
16
+ };
@@ -0,0 +1 @@
1
+ /// <reference types="vite/client" />
package/tsconfig.json ADDED
@@ -0,0 +1,23 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2020",
4
+ "useDefineForClassFields": true,
5
+ "module": "ESNext",
6
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
7
+
8
+ /* Bundler mode */
9
+ "moduleResolution": "bundler",
10
+ "allowImportingTsExtensions": true,
11
+ "resolveJsonModule": true,
12
+ "isolatedModules": true,
13
+ "noEmit": true,
14
+
15
+ /* Linting */
16
+ "strict": true,
17
+ "noUnusedLocals": true,
18
+ "noUnusedParameters": true,
19
+ "noFallthroughCasesInSwitch": true,
20
+ "types": ["vite/client"]
21
+ },
22
+ "include": ["src"]
23
+ }
package/vite.config.ts ADDED
@@ -0,0 +1,43 @@
1
+ /// <reference types="vitest" />
2
+ import path from 'path';
3
+ import { defineConfig } from 'vite';
4
+
5
+ const getPackageName = () => {
6
+ return 'sesamy-js';
7
+ };
8
+
9
+ const getPackageNameCamelCase = () => {
10
+ try {
11
+ return getPackageName().replace(/-./g, char => char[1].toUpperCase());
12
+ } catch (err) {
13
+ throw new Error('Name property in package.json is missing.');
14
+ }
15
+ };
16
+
17
+ const fileName = {
18
+ es: `${getPackageName()}.mjs`,
19
+ cjs: `${getPackageName()}.cjs`,
20
+ iife: `${getPackageName()}.iife.js`,
21
+ };
22
+
23
+ const formats = Object.keys(fileName) as Array<keyof typeof fileName>;
24
+
25
+ module.exports = defineConfig({
26
+ base: './',
27
+ build: {
28
+ outDir: './build/dist',
29
+ lib: {
30
+ entry: path.resolve(__dirname, 'src/index.ts'),
31
+ name: getPackageNameCamelCase(),
32
+ formats,
33
+ fileName: format => fileName[format],
34
+ },
35
+ },
36
+ test: {},
37
+ resolve: {
38
+ alias: [
39
+ { find: '@', replacement: path.resolve(__dirname, 'src') },
40
+ { find: '@@', replacement: path.resolve(__dirname) },
41
+ ],
42
+ },
43
+ });
@@ -0,0 +1,14 @@
1
+ import { defineConfig } from 'vite';
2
+
3
+ export default defineConfig({
4
+ build: {
5
+ rollupOptions: {
6
+ input: {
7
+ main: 'index.html',
8
+ article: 'article.html',
9
+ entitlements: 'entitlements.html',
10
+ contracts: 'contracts.html',
11
+ },
12
+ },
13
+ },
14
+ });