@fireproof/use-fireproof 0.0.0-smoke-b310d20f-1765361723

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.
@@ -0,0 +1,177 @@
1
+ import { BuildURI, Lazy } from "@adviser/cement";
2
+ import { decodeJwt } from "jose";
3
+ import DOMPurify from "dompurify";
4
+ import { Api } from "@fireproof/core-protocols-dashboard";
5
+ import { WebCtx } from "./react/use-attach.js";
6
+ import { hashObjectSync } from "@fireproof/core-runtime";
7
+ function defaultOverlayHtml(redirectLink) {
8
+ return `
9
+ <div class="fpOverlayContent">
10
+ <div class="fpCloseButton">&times;</div>
11
+ Fireproof Dashboard
12
+ Sign in to Fireproof Dashboard
13
+ <a href="${redirectLink}" target="_blank">Redirect to Fireproof</a>
14
+ </div>
15
+ `;
16
+ }
17
+ const defaultOverlayCss = `
18
+ .fpContainer {
19
+ position: relative; /* Needed for absolute positioning of the overlay */
20
+ }
21
+
22
+ .fpOverlay {
23
+ display: none; /* Initially hidden */
24
+ position: fixed; /* Covers the whole viewport */
25
+ top: 0;
26
+ left: 0;
27
+ width: 100%;
28
+ height: 100%;
29
+ background-color: rgba(0, 0, 0, 0.5); /* Semi-transparent background */
30
+ z-index: 1; /* Ensure it's on top of other content */
31
+ }
32
+
33
+ .fpOverlayContent {
34
+ position: absolute;
35
+ // width: calc(100vw - 50px);
36
+ // height: calc(100vh - 50px);
37
+ top: 50%;
38
+ left: 50%;
39
+ transform: translate(-50%, -50%); /* Center the content */
40
+ // transform: translate(0%, 0%); /* Center the content */
41
+ background-color: white;
42
+ color: black;
43
+ // margin: 10px;
44
+ padding: 20px;
45
+ border-radius: 5px;
46
+ box-shadow: 0 0 10px rgba(0, 0, 0, 0.3);
47
+ }
48
+
49
+ .fpCloseButton {
50
+ position: absolute;
51
+ top: 10px;
52
+ right: 15px;
53
+ font-size: 20px;
54
+ cursor: pointer;
55
+ }
56
+ `;
57
+ export class RedirectStrategy {
58
+ resultId;
59
+ overlayNode;
60
+ waitState = "stopped";
61
+ overlayCss;
62
+ overlayHtml;
63
+ constructor(opts = {}) {
64
+ this.overlayCss = opts.overlayCss ?? defaultOverlayCss;
65
+ this.overlayHtml = opts.overlayHtml ?? defaultOverlayHtml;
66
+ }
67
+ hash = Lazy(() => hashObjectSync({
68
+ overlayCss: this.overlayCss,
69
+ overlayHtml: this.overlayHtml("X").toString(),
70
+ }));
71
+ open(sthis, logger, deviceId, opts) {
72
+ const redirectCtx = opts.context.get(WebCtx);
73
+ logger.Debug().Url(redirectCtx.dashboardURI).Msg("open redirect");
74
+ this.resultId = sthis.nextId().str;
75
+ const url = BuildURI.from(redirectCtx.dashboardURI)
76
+ .setParam("back_url", window.location.href)
77
+ .setParam("result_id", this.resultId)
78
+ .setParam("local_ledger_name", deviceId);
79
+ if (opts.ledger) {
80
+ url.setParam("ledger", opts.ledger);
81
+ }
82
+ if (opts.tenant) {
83
+ url.setParam("tenant", opts.tenant);
84
+ }
85
+ let overlayNode = document.body.querySelector("#fpOverlay");
86
+ if (!overlayNode) {
87
+ const styleNode = document.createElement("style");
88
+ styleNode.innerHTML = DOMPurify.sanitize(this.overlayCss);
89
+ document.head.appendChild(styleNode);
90
+ overlayNode = document.createElement("div");
91
+ overlayNode.id = "fpOverlay";
92
+ overlayNode.className = "fpOverlay";
93
+ overlayNode.innerHTML = DOMPurify.sanitize(this.overlayHtml(url.toString()));
94
+ document.body.appendChild(overlayNode);
95
+ overlayNode.querySelector(".fpCloseButton")?.addEventListener("click", () => {
96
+ if (overlayNode) {
97
+ if (overlayNode.style.display === "block") {
98
+ overlayNode.style.display = "none";
99
+ this.stop();
100
+ }
101
+ else {
102
+ overlayNode.style.display = "block";
103
+ }
104
+ }
105
+ });
106
+ }
107
+ overlayNode.style.display = "block";
108
+ this.overlayNode = overlayNode;
109
+ const width = 800;
110
+ const height = 600;
111
+ const parentScreenX = window.screenX || window.screenLeft;
112
+ const parentScreenY = window.screenY || window.screenTop;
113
+ const parentOuterWidth = window.outerWidth;
114
+ const parentOuterHeight = window.outerHeight;
115
+ const left = parentScreenX + parentOuterWidth / 2 - width / 2;
116
+ const top = parentScreenY + parentOuterHeight / 2 - height / 2;
117
+ window.open(url.asURL(), "Fireproof Login", `left=${left},top=${top},width=${width},height=${height},scrollbars=yes,resizable=yes,popup=yes`);
118
+ }
119
+ currentToken;
120
+ waiting;
121
+ stop() {
122
+ if (this.waiting) {
123
+ clearTimeout(this.waiting);
124
+ this.waiting = undefined;
125
+ }
126
+ this.waitState = "stopped";
127
+ }
128
+ async tryToken(sthis, logger, opts) {
129
+ if (!this.currentToken) {
130
+ const webCtx = opts.context.get(WebCtx);
131
+ this.currentToken = await webCtx.token();
132
+ // console.log("RedirectStrategy tryToken - ctx", this.currentToken);
133
+ }
134
+ return this.currentToken;
135
+ }
136
+ async getTokenAndClaimsByResultId(logger, dashApi, resultId, opts, resolve, attempts = 0) {
137
+ if (!resultId) {
138
+ return logger.Error().Msg("No resultId");
139
+ }
140
+ if (this.waitState !== "started") {
141
+ return;
142
+ }
143
+ if (attempts * opts.intervalSec > opts.tokenWaitTimeSec) {
144
+ logger.Error().Uint64("attempts", attempts).Msg("Token polling timed out");
145
+ this.stop();
146
+ return;
147
+ }
148
+ const rWaitForToken = await dashApi.waitForToken({ resultId }, logger);
149
+ if (rWaitForToken.isErr()) {
150
+ return logger.Error().Err(rWaitForToken).Msg("Error fetching token").ResultError();
151
+ }
152
+ const waitedTokenByResultId = rWaitForToken.unwrap();
153
+ if (waitedTokenByResultId.status === "found" && waitedTokenByResultId.token) {
154
+ const token = waitedTokenByResultId.token;
155
+ const claims = decodeJwt(token);
156
+ this.overlayNode?.style.setProperty("display", "none");
157
+ resolve({ token, claims });
158
+ return;
159
+ }
160
+ this.waiting = setTimeout(() => this.getTokenAndClaimsByResultId(logger, dashApi, resultId, opts, resolve), opts.intervalSec);
161
+ }
162
+ async waitForToken(sthis, logger, deviceId, opts) {
163
+ if (!this.resultId) {
164
+ throw new Error("waitForToken not working on redirect strategy");
165
+ }
166
+ const webCtx = opts.context.get(WebCtx);
167
+ const dashApi = new Api(webCtx.tokenApiURI);
168
+ this.waitState = "started";
169
+ return new Promise((resolve) => {
170
+ this.getTokenAndClaimsByResultId(logger, dashApi, this.resultId, opts, (tokenAndClaims) => {
171
+ this.currentToken = tokenAndClaims;
172
+ resolve(tokenAndClaims);
173
+ });
174
+ });
175
+ }
176
+ }
177
+ //# sourceMappingURL=redirect-strategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redirect-strategy.js","sourceRoot":"","sources":["../jsr/redirect-strategy.ts"],"names":[],"mappings":"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"}
package/tsconfig.json ADDED
@@ -0,0 +1,18 @@
1
+ {
2
+ "extends": [
3
+ "/Users/menabe/Software/fproof/fireproof-gdrive/tsconfig.dist.json"
4
+ ],
5
+ "compilerOptions": {
6
+ "outDir": "../npm/",
7
+ "noEmit": false
8
+ },
9
+ "include": [
10
+ "**/*"
11
+ ],
12
+ "exclude": [
13
+ "node_modules",
14
+ "dist",
15
+ ".git",
16
+ ".vscode"
17
+ ]
18
+ }