@meddleware/token-deployer-ui 0.0.1 → 0.0.2

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,367 @@
1
+ name: Publish
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "v*"
7
+
8
+ env:
9
+ IMAGE: token-deployer-ui
10
+
11
+ jobs:
12
+ # ── Library source: @meddleware/token-deployer-ui → npmjs ──────────────────
13
+ # Uses OIDC trusted publisher — no static NPM_TOKEN secret required.
14
+ publish-npm:
15
+ name: npmjs (@meddleware/token-deployer-ui)
16
+ runs-on: ubuntu-latest
17
+ permissions:
18
+ contents: read
19
+ id-token: write
20
+ steps:
21
+ - uses: actions/checkout@v7.0.1
22
+
23
+ - uses: actions/setup-node@v7.0.0
24
+ with:
25
+ node-version: '24'
26
+ registry-url: 'https://registry.npmjs.org'
27
+
28
+ - name: Install dependencies
29
+ run: npm ci
30
+
31
+ - name: Type-check
32
+ run: npm run type-check
33
+
34
+ - name: Test
35
+ run: npm test
36
+
37
+ - name: Publish to npmjs (provenance via OIDC, idempotent)
38
+ run: |
39
+ VERSION=$(node -p "require('./package.json').version")
40
+ if npm view "@meddleware/token-deployer-ui@${VERSION}" version >/dev/null 2>&1; then
41
+ echo "::notice::v${VERSION} already published to npmjs — skipping"
42
+ else
43
+ npm publish --provenance
44
+ fi
45
+
46
+ # ── App: Docker image → quay.io + Docker Hub ────────────────────────────────
47
+ # Split into per-arch native builds + merge so each platform compiles on its
48
+ # own native runner. The arm64 Vite build runs on ubuntu-24.04-arm rather than
49
+ # QEMU emulation, eliminating the ~3-5× slowdown for npm install + tsc + vite.
50
+
51
+ build-docker-amd64-public:
52
+ name: Docker amd64 (quay.io + Docker Hub)
53
+ runs-on: ubuntu-latest
54
+ permissions:
55
+ contents: read
56
+ steps:
57
+ - uses: actions/checkout@v7.0.1
58
+ - uses: docker/setup-buildx-action@v4.3.0
59
+
60
+ - name: Log in to quay.io
61
+ uses: docker/login-action@v4.6.0
62
+ with:
63
+ registry: quay.io
64
+ username: ${{ secrets.QUAY_USERNAME }}
65
+ password: ${{ secrets.QUAY_TOKEN }}
66
+
67
+ - name: Log in to Docker Hub
68
+ uses: docker/login-action@v4.6.0
69
+ with:
70
+ registry: docker.io
71
+ username: ${{ secrets.DOCKERHUB_USERNAME }}
72
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
73
+
74
+ - name: Build and push (linux/amd64)
75
+ uses: docker/build-push-action@v7.3.0
76
+ with:
77
+ context: .
78
+ platforms: linux/amd64
79
+ push: true
80
+ tags: |
81
+ quay.io/${{ vars.QUAY_NAMESPACE }}/${{ env.IMAGE }}:${{ github.sha }}-amd64
82
+ docker.io/${{ vars.DOCKERHUB_NAMESPACE }}/${{ env.IMAGE }}:${{ github.sha }}-amd64
83
+ cache-from: type=gha,scope=amd64-public
84
+ cache-to: type=gha,scope=amd64-public,mode=max
85
+ build-args: |
86
+ VITE_NETWORK=${{ vars.VITE_NETWORK || 'testnet' }}
87
+ VITE_FEE_TREASURY_TESTNET=${{ vars.VITE_FEE_TREASURY_TESTNET }}
88
+ VITE_FEE_TREASURY_MAINNET=${{ vars.VITE_FEE_TREASURY_MAINNET }}
89
+ VITE_FEE_MIST=${{ vars.VITE_FEE_MIST }}
90
+ VITE_WALRUS_RELAY_TESTNET=${{ vars.VITE_WALRUS_RELAY_TESTNET }}
91
+ VITE_WALRUS_RELAY_MAINNET=${{ vars.VITE_WALRUS_RELAY_MAINNET }}
92
+ VITE_ACCESS_GATE_ID_TESTNET=${{ vars.VITE_ACCESS_GATE_ID_TESTNET }}
93
+ VITE_ACCESS_GATE_NFT_TYPE_TESTNET=${{ vars.VITE_ACCESS_GATE_NFT_TYPE_TESTNET }}
94
+ VITE_ACCESS_GATE_SOULBOUND_TESTNET=${{ vars.VITE_ACCESS_GATE_SOULBOUND_TESTNET }}
95
+ VITE_ACCESS_GATE_PRICE_MIST_TESTNET=${{ vars.VITE_ACCESS_GATE_PRICE_MIST_TESTNET }}
96
+ VITE_ACCESS_GATE_ID_MAINNET=${{ vars.VITE_ACCESS_GATE_ID_MAINNET }}
97
+ VITE_ACCESS_GATE_NFT_TYPE_MAINNET=${{ vars.VITE_ACCESS_GATE_NFT_TYPE_MAINNET }}
98
+ VITE_ACCESS_GATE_SOULBOUND_MAINNET=${{ vars.VITE_ACCESS_GATE_SOULBOUND_MAINNET }}
99
+ VITE_ACCESS_GATE_PRICE_MIST_MAINNET=${{ vars.VITE_ACCESS_GATE_PRICE_MIST_MAINNET }}
100
+ VITE_WALRUS_MAX_TIP_MIST=${{ vars.VITE_WALRUS_MAX_TIP_MIST }}
101
+ VITE_PUBLIC_URL=${{ vars.VITE_PUBLIC_URL }}
102
+
103
+ build-docker-arm64-public:
104
+ name: Docker arm64 (quay.io + Docker Hub)
105
+ runs-on: ubuntu-24.04-arm
106
+ permissions:
107
+ contents: read
108
+ steps:
109
+ - uses: actions/checkout@v7.0.1
110
+ - uses: docker/setup-buildx-action@v4.3.0
111
+
112
+ - name: Log in to quay.io
113
+ uses: docker/login-action@v4.6.0
114
+ with:
115
+ registry: quay.io
116
+ username: ${{ secrets.QUAY_USERNAME }}
117
+ password: ${{ secrets.QUAY_TOKEN }}
118
+
119
+ - name: Log in to Docker Hub
120
+ uses: docker/login-action@v4.6.0
121
+ with:
122
+ registry: docker.io
123
+ username: ${{ secrets.DOCKERHUB_USERNAME }}
124
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
125
+
126
+ - name: Build and push (linux/arm64)
127
+ uses: docker/build-push-action@v7.3.0
128
+ with:
129
+ context: .
130
+ platforms: linux/arm64
131
+ push: true
132
+ tags: |
133
+ quay.io/${{ vars.QUAY_NAMESPACE }}/${{ env.IMAGE }}:${{ github.sha }}-arm64
134
+ docker.io/${{ vars.DOCKERHUB_NAMESPACE }}/${{ env.IMAGE }}:${{ github.sha }}-arm64
135
+ cache-from: type=gha,scope=arm64-public
136
+ cache-to: type=gha,scope=arm64-public,mode=max
137
+ build-args: |
138
+ VITE_NETWORK=${{ vars.VITE_NETWORK || 'testnet' }}
139
+ VITE_FEE_TREASURY_TESTNET=${{ vars.VITE_FEE_TREASURY_TESTNET }}
140
+ VITE_FEE_TREASURY_MAINNET=${{ vars.VITE_FEE_TREASURY_MAINNET }}
141
+ VITE_FEE_MIST=${{ vars.VITE_FEE_MIST }}
142
+ VITE_WALRUS_RELAY_TESTNET=${{ vars.VITE_WALRUS_RELAY_TESTNET }}
143
+ VITE_WALRUS_RELAY_MAINNET=${{ vars.VITE_WALRUS_RELAY_MAINNET }}
144
+ VITE_ACCESS_GATE_ID_TESTNET=${{ vars.VITE_ACCESS_GATE_ID_TESTNET }}
145
+ VITE_ACCESS_GATE_NFT_TYPE_TESTNET=${{ vars.VITE_ACCESS_GATE_NFT_TYPE_TESTNET }}
146
+ VITE_ACCESS_GATE_SOULBOUND_TESTNET=${{ vars.VITE_ACCESS_GATE_SOULBOUND_TESTNET }}
147
+ VITE_ACCESS_GATE_PRICE_MIST_TESTNET=${{ vars.VITE_ACCESS_GATE_PRICE_MIST_TESTNET }}
148
+ VITE_ACCESS_GATE_ID_MAINNET=${{ vars.VITE_ACCESS_GATE_ID_MAINNET }}
149
+ VITE_ACCESS_GATE_NFT_TYPE_MAINNET=${{ vars.VITE_ACCESS_GATE_NFT_TYPE_MAINNET }}
150
+ VITE_ACCESS_GATE_SOULBOUND_MAINNET=${{ vars.VITE_ACCESS_GATE_SOULBOUND_MAINNET }}
151
+ VITE_ACCESS_GATE_PRICE_MIST_MAINNET=${{ vars.VITE_ACCESS_GATE_PRICE_MIST_MAINNET }}
152
+ VITE_WALRUS_MAX_TIP_MIST=${{ vars.VITE_WALRUS_MAX_TIP_MIST }}
153
+ VITE_PUBLIC_URL=${{ vars.VITE_PUBLIC_URL }}
154
+
155
+ merge-docker-public:
156
+ name: Merge + sign (quay.io + Docker Hub)
157
+ needs: [build-docker-amd64-public, build-docker-arm64-public]
158
+ runs-on: ubuntu-latest
159
+ permissions:
160
+ contents: read
161
+ id-token: write
162
+ attestations: write
163
+ steps:
164
+ - uses: docker/setup-buildx-action@v4.3.0
165
+
166
+ - name: Log in to quay.io
167
+ uses: docker/login-action@v4.6.0
168
+ with:
169
+ registry: quay.io
170
+ username: ${{ secrets.QUAY_USERNAME }}
171
+ password: ${{ secrets.QUAY_TOKEN }}
172
+
173
+ - name: Log in to Docker Hub
174
+ uses: docker/login-action@v4.6.0
175
+ with:
176
+ registry: docker.io
177
+ username: ${{ secrets.DOCKERHUB_USERNAME }}
178
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
179
+
180
+ - name: Compute final tags and labels
181
+ id: meta
182
+ uses: docker/metadata-action@v6.2.0
183
+ with:
184
+ images: |
185
+ quay.io/${{ vars.QUAY_NAMESPACE }}/${{ env.IMAGE }}
186
+ docker.io/${{ vars.DOCKERHUB_NAMESPACE }}/${{ env.IMAGE }}
187
+ tags: |
188
+ type=semver,pattern={{version}}
189
+ type=semver,pattern={{major}}.{{minor}}
190
+ flavor: |
191
+ latest=auto
192
+
193
+ - name: Merge multi-arch manifests
194
+ id: merge
195
+ env:
196
+ QUAY_NS: ${{ vars.QUAY_NAMESPACE }}
197
+ DOCKERHUB_NS: ${{ vars.DOCKERHUB_NAMESPACE }}
198
+ SHA: ${{ github.sha }}
199
+ run: |
200
+ QUAY_SRC="quay.io/${QUAY_NS}/${IMAGE}:${SHA}"
201
+ HUB_SRC="docker.io/${DOCKERHUB_NS}/${IMAGE}:${SHA}"
202
+
203
+ QUAY_FLAGS=""
204
+ HUB_FLAGS=""
205
+ while IFS= read -r tag; do
206
+ if [[ "$tag" == quay.io/* ]]; then
207
+ QUAY_FLAGS="$QUAY_FLAGS --tag $tag"
208
+ elif [[ "$tag" == docker.io/* ]]; then
209
+ HUB_FLAGS="$HUB_FLAGS --tag $tag"
210
+ fi
211
+ done <<< "${{ steps.meta.outputs.tags }}"
212
+
213
+ docker buildx imagetools create $QUAY_FLAGS "${QUAY_SRC}-amd64" "${QUAY_SRC}-arm64"
214
+ docker buildx imagetools create $HUB_FLAGS "${HUB_SRC}-amd64" "${HUB_SRC}-arm64"
215
+
216
+ PRIMARY=$(echo "${{ steps.meta.outputs.tags }}" | grep 'quay.io' | grep -v 'latest' | head -1)
217
+ DIGEST=$(docker buildx imagetools inspect "${PRIMARY}" --format '{{.Manifest.Digest}}')
218
+ echo "digest=${DIGEST}" >> "$GITHUB_OUTPUT"
219
+
220
+ - uses: sigstore/cosign-installer@v4.1.2
221
+
222
+ - name: Sign images (keyless)
223
+ env:
224
+ DIGEST: ${{ steps.merge.outputs.digest }}
225
+ QUAY_NS: ${{ vars.QUAY_NAMESPACE }}
226
+ DOCKERHUB_NS: ${{ vars.DOCKERHUB_NAMESPACE }}
227
+ run: |
228
+ cosign sign --yes "quay.io/${QUAY_NS}/${IMAGE}@${DIGEST}"
229
+ cosign sign --yes "docker.io/${DOCKERHUB_NS}/${IMAGE}@${DIGEST}"
230
+
231
+ - name: Attest build provenance (quay.io)
232
+ uses: actions/attest-build-provenance@v4.2.2
233
+ continue-on-error: true
234
+ with:
235
+ subject-name: quay.io/${{ vars.QUAY_NAMESPACE }}/${{ env.IMAGE }}
236
+ subject-digest: ${{ steps.merge.outputs.digest }}
237
+ push-to-registry: true
238
+
239
+ - name: Attest build provenance (Docker Hub)
240
+ uses: actions/attest-build-provenance@v4.2.2
241
+ continue-on-error: true
242
+ with:
243
+ subject-name: docker.io/${{ vars.DOCKERHUB_NAMESPACE }}/${{ env.IMAGE }}
244
+ subject-digest: ${{ steps.merge.outputs.digest }}
245
+ push-to-registry: true
246
+
247
+ - name: Summary
248
+ run: echo "Published & signed @ ${{ steps.merge.outputs.digest }}" >> "$GITHUB_STEP_SUMMARY"
249
+
250
+ # ── Self-hosted registry (best-effort) ─────────────────────────────────────
251
+
252
+ build-docker-amd64-private:
253
+ name: Docker amd64 (self-hosted registry)
254
+ runs-on: ubuntu-latest
255
+ continue-on-error: true
256
+ permissions:
257
+ contents: read
258
+ steps:
259
+ - uses: actions/checkout@v7.0.1
260
+ - uses: docker/setup-buildx-action@v4.3.0
261
+
262
+ - name: Log in to self-hosted registry
263
+ uses: docker/login-action@v4.6.0
264
+ with:
265
+ registry: ${{ vars.PRIVATE_REGISTRY }}
266
+ username: ${{ secrets.PRIVATE_REGISTRY_USERNAME }}
267
+ password: ${{ secrets.PRIVATE_REGISTRY_TOKEN }}
268
+
269
+ - name: Build and push (linux/amd64)
270
+ uses: docker/build-push-action@v7.3.0
271
+ with:
272
+ context: .
273
+ platforms: linux/amd64
274
+ push: true
275
+ tags: ${{ vars.PRIVATE_REGISTRY }}/${{ vars.PRIVATE_NAMESPACE }}/${{ env.IMAGE }}:${{ github.sha }}-amd64
276
+ cache-from: type=gha,scope=amd64-private
277
+ cache-to: type=gha,scope=amd64-private,mode=max
278
+ build-args: |
279
+ VITE_NETWORK=${{ vars.VITE_NETWORK || 'testnet' }}
280
+ VITE_FEE_TREASURY_TESTNET=${{ vars.VITE_FEE_TREASURY_TESTNET }}
281
+ VITE_FEE_TREASURY_MAINNET=${{ vars.VITE_FEE_TREASURY_MAINNET }}
282
+ VITE_FEE_MIST=${{ vars.VITE_FEE_MIST }}
283
+ VITE_WALRUS_RELAY_TESTNET=${{ vars.VITE_WALRUS_RELAY_TESTNET }}
284
+ VITE_ACCESS_GATE_ID_TESTNET=${{ vars.VITE_ACCESS_GATE_ID_TESTNET }}
285
+ VITE_ACCESS_GATE_NFT_TYPE_TESTNET=${{ vars.VITE_ACCESS_GATE_NFT_TYPE_TESTNET }}
286
+ VITE_ACCESS_GATE_SOULBOUND_TESTNET=${{ vars.VITE_ACCESS_GATE_SOULBOUND_TESTNET }}
287
+ VITE_ACCESS_GATE_PRICE_MIST_TESTNET=${{ vars.VITE_ACCESS_GATE_PRICE_MIST_TESTNET }}
288
+ VITE_WALRUS_MAX_TIP_MIST=${{ vars.VITE_WALRUS_MAX_TIP_MIST }}
289
+
290
+ build-docker-arm64-private:
291
+ name: Docker arm64 (self-hosted registry)
292
+ runs-on: ubuntu-24.04-arm
293
+ continue-on-error: true
294
+ permissions:
295
+ contents: read
296
+ steps:
297
+ - uses: actions/checkout@v7.0.1
298
+ - uses: docker/setup-buildx-action@v4.3.0
299
+
300
+ - name: Log in to self-hosted registry
301
+ uses: docker/login-action@v4.6.0
302
+ with:
303
+ registry: ${{ vars.PRIVATE_REGISTRY }}
304
+ username: ${{ secrets.PRIVATE_REGISTRY_USERNAME }}
305
+ password: ${{ secrets.PRIVATE_REGISTRY_TOKEN }}
306
+
307
+ - name: Build and push (linux/arm64)
308
+ uses: docker/build-push-action@v7.3.0
309
+ with:
310
+ context: .
311
+ platforms: linux/arm64
312
+ push: true
313
+ tags: ${{ vars.PRIVATE_REGISTRY }}/${{ vars.PRIVATE_NAMESPACE }}/${{ env.IMAGE }}:${{ github.sha }}-arm64
314
+ cache-from: type=gha,scope=arm64-private
315
+ cache-to: type=gha,scope=arm64-private,mode=max
316
+ build-args: |
317
+ VITE_NETWORK=${{ vars.VITE_NETWORK || 'testnet' }}
318
+ VITE_FEE_TREASURY_TESTNET=${{ vars.VITE_FEE_TREASURY_TESTNET }}
319
+ VITE_FEE_TREASURY_MAINNET=${{ vars.VITE_FEE_TREASURY_MAINNET }}
320
+ VITE_FEE_MIST=${{ vars.VITE_FEE_MIST }}
321
+ VITE_WALRUS_RELAY_TESTNET=${{ vars.VITE_WALRUS_RELAY_TESTNET }}
322
+ VITE_ACCESS_GATE_ID_TESTNET=${{ vars.VITE_ACCESS_GATE_ID_TESTNET }}
323
+ VITE_ACCESS_GATE_NFT_TYPE_TESTNET=${{ vars.VITE_ACCESS_GATE_NFT_TYPE_TESTNET }}
324
+ VITE_ACCESS_GATE_SOULBOUND_TESTNET=${{ vars.VITE_ACCESS_GATE_SOULBOUND_TESTNET }}
325
+ VITE_ACCESS_GATE_PRICE_MIST_TESTNET=${{ vars.VITE_ACCESS_GATE_PRICE_MIST_TESTNET }}
326
+ VITE_WALRUS_MAX_TIP_MIST=${{ vars.VITE_WALRUS_MAX_TIP_MIST }}
327
+
328
+ merge-docker-private:
329
+ name: Merge (self-hosted registry)
330
+ needs: [build-docker-amd64-private, build-docker-arm64-private]
331
+ runs-on: ubuntu-latest
332
+ continue-on-error: true
333
+ permissions:
334
+ contents: read
335
+ steps:
336
+ - uses: docker/setup-buildx-action@v4.3.0
337
+
338
+ - name: Log in to self-hosted registry
339
+ uses: docker/login-action@v4.6.0
340
+ with:
341
+ registry: ${{ vars.PRIVATE_REGISTRY }}
342
+ username: ${{ secrets.PRIVATE_REGISTRY_USERNAME }}
343
+ password: ${{ secrets.PRIVATE_REGISTRY_TOKEN }}
344
+
345
+ - name: Compute tags
346
+ id: meta
347
+ uses: docker/metadata-action@v6.2.0
348
+ with:
349
+ images: ${{ vars.PRIVATE_REGISTRY }}/${{ vars.PRIVATE_NAMESPACE }}/${{ env.IMAGE }}
350
+ tags: |
351
+ type=semver,pattern={{version}}
352
+ type=semver,pattern={{major}}.{{minor}}
353
+ flavor: |
354
+ latest=auto
355
+
356
+ - name: Merge multi-arch manifests
357
+ env:
358
+ SHA: ${{ github.sha }}
359
+ REG: ${{ vars.PRIVATE_REGISTRY }}
360
+ NS: ${{ vars.PRIVATE_NAMESPACE }}
361
+ run: |
362
+ SRC="${REG}/${NS}/${IMAGE}:${SHA}"
363
+ FLAGS=""
364
+ while IFS= read -r tag; do
365
+ FLAGS="$FLAGS --tag $tag"
366
+ done <<< "${{ steps.meta.outputs.tags }}"
367
+ docker buildx imagetools create $FLAGS "${SRC}-amd64" "${SRC}-arm64"
package/Dockerfile ADDED
@@ -0,0 +1,96 @@
1
+ # ── build stage ───────────────────────────────────────────────────────────────
2
+ # Standalone build — the Docker context is this repo root. All @meddleware/*
3
+ # dependencies resolve from the npm registry, so they must be published before
4
+ # this image is built.
5
+ #
6
+ # docker build \
7
+ # --build-arg VITE_NETWORK=testnet \
8
+ # --build-arg VITE_FEE_TREASURY_TESTNET=0x... \
9
+ # --build-arg VITE_FEE_TREASURY_MAINNET=0x... \
10
+ # -t token-deployer-ui:<tag> .
11
+ #
12
+ # Build args (VITE_* are baked into the static bundle at build time):
13
+ # VITE_NETWORK — "testnet" | "mainnet" (default: testnet)
14
+ # VITE_FEE_TREASURY_TESTNET — operator treasury for testnet (REQUIRED — build fails without it)
15
+ # VITE_FEE_TREASURY_MAINNET — operator treasury for mainnet (REQUIRED — build fails without it)
16
+ # VITE_FEE_MIST — fee in MIST (optional, default 1000000000)
17
+ # VITE_WALRUS_RELAY_TESTNET — operator relay URL for testnet (optional)
18
+ # VITE_WALRUS_RELAY_MAINNET — operator relay URL for mainnet (optional)
19
+ # VITE_WALRUS_RPC_TESTNET — gRPC fullnode for Walrus testnet (optional)
20
+ # VITE_WALRUS_RPC_MAINNET — gRPC fullnode for Walrus mainnet (optional)
21
+ # VITE_RPC_TESTNET / VITE_RPC_MAINNET — override JSON-RPC fullnode URLs (optional)
22
+ # VITE_ACCESS_GATE_ID_{NET} — operator's Gate shared object ID (optional)
23
+ # VITE_ACCESS_GATE_NFT_TYPE_{NET} — access NFT type (optional)
24
+ # VITE_ACCESS_GATE_SOULBOUND_{NET} — "true" if soulbound (optional)
25
+ # VITE_ACCESS_GATE_PRICE_MIST_{NET} — purchase price in MIST (optional)
26
+ # VITE_WALRUS_MAX_TIP_MIST — max relay tip cap in MIST (optional)
27
+ # VITE_PUBLIC_URL — canonical origin for OG/JSON-LD (optional)
28
+ #
29
+ # .env.production is gitignored — treasury addresses must be supplied via build args.
30
+ FROM node:24-slim AS build
31
+
32
+ WORKDIR /app
33
+
34
+ COPY package.json package-lock.json ./
35
+
36
+ RUN npm ci
37
+
38
+ COPY . .
39
+
40
+ ARG VITE_NETWORK=testnet
41
+ ARG VITE_FEE_TREASURY_TESTNET
42
+ ARG VITE_FEE_TREASURY_MAINNET
43
+ ARG VITE_FEE_MIST
44
+ ARG VITE_WALRUS_RELAY_TESTNET
45
+ ARG VITE_WALRUS_RELAY_MAINNET
46
+ ARG VITE_WALRUS_RPC_TESTNET
47
+ ARG VITE_WALRUS_RPC_MAINNET
48
+ ARG VITE_RPC_TESTNET
49
+ ARG VITE_RPC_MAINNET
50
+ ARG VITE_ACCESS_GATE_ID_TESTNET
51
+ ARG VITE_ACCESS_GATE_NFT_TYPE_TESTNET
52
+ ARG VITE_ACCESS_GATE_SOULBOUND_TESTNET
53
+ ARG VITE_ACCESS_GATE_PRICE_MIST_TESTNET
54
+ ARG VITE_ACCESS_GATE_ID_MAINNET
55
+ ARG VITE_ACCESS_GATE_NFT_TYPE_MAINNET
56
+ ARG VITE_ACCESS_GATE_SOULBOUND_MAINNET
57
+ ARG VITE_ACCESS_GATE_PRICE_MIST_MAINNET
58
+ ARG VITE_WALRUS_MAX_TIP_MIST
59
+ ARG VITE_PUBLIC_URL
60
+
61
+ ENV VITE_NETWORK=${VITE_NETWORK} \
62
+ VITE_FEE_TREASURY_TESTNET=${VITE_FEE_TREASURY_TESTNET} \
63
+ VITE_FEE_TREASURY_MAINNET=${VITE_FEE_TREASURY_MAINNET} \
64
+ VITE_FEE_MIST=${VITE_FEE_MIST} \
65
+ VITE_WALRUS_RELAY_TESTNET=${VITE_WALRUS_RELAY_TESTNET} \
66
+ VITE_WALRUS_RELAY_MAINNET=${VITE_WALRUS_RELAY_MAINNET} \
67
+ VITE_WALRUS_RPC_TESTNET=${VITE_WALRUS_RPC_TESTNET} \
68
+ VITE_WALRUS_RPC_MAINNET=${VITE_WALRUS_RPC_MAINNET} \
69
+ VITE_RPC_TESTNET=${VITE_RPC_TESTNET} \
70
+ VITE_RPC_MAINNET=${VITE_RPC_MAINNET} \
71
+ VITE_ACCESS_GATE_ID_TESTNET=${VITE_ACCESS_GATE_ID_TESTNET} \
72
+ VITE_ACCESS_GATE_NFT_TYPE_TESTNET=${VITE_ACCESS_GATE_NFT_TYPE_TESTNET} \
73
+ VITE_ACCESS_GATE_SOULBOUND_TESTNET=${VITE_ACCESS_GATE_SOULBOUND_TESTNET} \
74
+ VITE_ACCESS_GATE_PRICE_MIST_TESTNET=${VITE_ACCESS_GATE_PRICE_MIST_TESTNET} \
75
+ VITE_ACCESS_GATE_ID_MAINNET=${VITE_ACCESS_GATE_ID_MAINNET} \
76
+ VITE_ACCESS_GATE_NFT_TYPE_MAINNET=${VITE_ACCESS_GATE_NFT_TYPE_MAINNET} \
77
+ VITE_ACCESS_GATE_SOULBOUND_MAINNET=${VITE_ACCESS_GATE_SOULBOUND_MAINNET} \
78
+ VITE_ACCESS_GATE_PRICE_MIST_MAINNET=${VITE_ACCESS_GATE_PRICE_MIST_MAINNET} \
79
+ VITE_WALRUS_MAX_TIP_MIST=${VITE_WALRUS_MAX_TIP_MIST} \
80
+ VITE_PUBLIC_URL=${VITE_PUBLIC_URL}
81
+
82
+ RUN npm run build
83
+
84
+ # ── runtime stage ─────────────────────────────────────────────────────────────
85
+ # static-server is a minimal Go binary image — no shell, no package manager.
86
+ # SPA_FALLBACK serves index.html for any extensionless path (Vue Router history mode).
87
+ # CACHE_IMMUTABLE_PREFIX matches the /assets/ directory Vite emits with content hashes.
88
+ FROM quay.io/meddleware-org/static-server:0.1.1
89
+
90
+ COPY --from=build /app/dist /app/public
91
+
92
+ ENV SERVE_DIR=/app/public \
93
+ SPA_FALLBACK=true \
94
+ CACHE_IMMUTABLE_PREFIX=/assets/
95
+
96
+ EXPOSE 8080
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meddleware/token-deployer-ui",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": { "default": "./src/index.ts" }
@@ -31,7 +31,7 @@
31
31
  },
32
32
  "dependencies": {
33
33
  "@meddleware/wallet-adapter": "^0.0.7",
34
- "@meddleware/walrus-relay": "^0.1.0",
34
+ "@meddleware/walrus-relay": "^0.1.16",
35
35
  "@mysten/bcs": "~2.1.0",
36
36
  "@mysten/move-bytecode-template": "~0.4.0",
37
37
  "@mysten/sui": "^2.31.0",
@@ -59,7 +59,7 @@
59
59
  "vue-tsc": "~3.3.0"
60
60
  },
61
61
  "optionalDependencies": {
62
- "@meddleware/sui-token-template": "^1.0.0"
62
+ "@meddleware/sui-token-template": "^1.0.1"
63
63
  },
64
64
  "engines": {
65
65
  "node": "^22.18.0 || >=24.12.0"
@@ -25,7 +25,7 @@ const files = {
25
25
  'Move.toml': read('Move.toml'),
26
26
  'source.move': read('sources/sui_token_template.move'),
27
27
  'scripts/publish.sh': read('templates/publish.sh'),
28
- '.gitignore': read('templates/.gitignore'),
28
+ '.gitignore': read('templates/gitignore'),
29
29
  'README.md': read('templates/README.md'),
30
30
  'deployments.md': read('templates/deployments.md'),
31
31
  'CLAUDE.md': read('templates/CLAUDE.md'),
@@ -32,7 +32,7 @@ const SOURCE_OF: Record<string, string> = {
32
32
  'Move.toml': 'Move.toml',
33
33
  'source.move': 'sources/sui_token_template.move',
34
34
  'scripts/publish.sh': 'templates/publish.sh',
35
- '.gitignore': 'templates/.gitignore',
35
+ '.gitignore': 'templates/gitignore',
36
36
  'README.md': 'templates/README.md',
37
37
  'deployments.md': 'templates/deployments.md',
38
38
  'CLAUDE.md': 'templates/CLAUDE.md',
package/.env.production DELETED
@@ -1,7 +0,0 @@
1
- # Committed defaults for the standalone SPA production build (auto-loaded by `vite build`).
2
- # These are public Sui addresses — not secrets — so they are safe to commit.
3
- # Override at deploy time via Cloudflare Pages environment variables (takes precedence).
4
- # Local dev: copy .env.example to .env.local and edit there (never commit .env.local).
5
-
6
- VITE_FEE_TREASURY_TESTNET=0xe6b2810abfc5a6f37a375f73e3ba76cfc37584196e453255ad3c9ca2f0ede0ed
7
- VITE_FEE_TREASURY_MAINNET=0xe6b2810abfc5a6f37a375f73e3ba76cfc37584196e453255ad3c9ca2f0ede0ed