Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
3ab1ce1
remove cards functionality
anilgangapersaud-circle Aug 26, 2025
496c13e
working upgrade
anilgangapersaud-circle Aug 27, 2025
ff94b1e
run prettier
anilgangapersaud-circle Aug 27, 2025
ae67da6
cleanup store, update github workflow to use node 22
anilgangapersaud-circle Aug 27, 2025
ae9d3e5
remove beta from address book routes
anilgangapersaud-circle Aug 27, 2025
e4564f8
ESLint
anilgangapersaud-circle Aug 27, 2025
f30abf7
update devtools eslint
anilgangapersaud-circle Aug 27, 2025
6794131
fix jest test config
anilgangapersaud-circle Aug 27, 2025
86e114f
run prettier
anilgangapersaud-circle Aug 27, 2025
46652d1
Merge branch 'master' into update-node
anilgangapersaud-circle Aug 27, 2025
5f3a18c
fix tests
anilgangapersaud-circle Aug 27, 2025
0f6694a
rm test from workflow
anilgangapersaud-circle Aug 27, 2025
fedd46d
update node v
anilgangapersaud-circle Aug 27, 2025
17befb3
remove openpgp
anilgangapersaud-circle Aug 27, 2025
6e92846
more regression testing
anilgangapersaud-circle Aug 27, 2025
4b81703
small cleanup
anilgangapersaud-circle Aug 27, 2025
944cb8f
update supported payout currencies
anilgangapersaud-circle Aug 27, 2025
628a47c
rm unused dependencies
anilgangapersaud-circle Aug 27, 2025
9addda5
add lodash back
anilgangapersaud-circle Aug 27, 2025
aa4c409
add back ethers
anilgangapersaud-circle Aug 27, 2025
ff59384
fix vulnerabilties
anilgangapersaud-circle Aug 27, 2025
8867b81
uncommit package lock
anilgangapersaud-circle Aug 27, 2025
2665b8e
update license
anilgangapersaud-circle Aug 27, 2025
2255a6b
remove wallet connect
anilgangapersaud-circle Aug 27, 2025
1c29249
fix build
anilgangapersaud-circle Aug 27, 2025
3f29242
update license
anilgangapersaud-circle Aug 27, 2025
c7adb1f
add
ali-kafel Aug 29, 2025
b8beea7
test pr scan
ali-kafel Aug 29, 2025
133cf3b
add ignore licenses
ali-kafel Aug 29, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@ module.exports = {
env: {
browser: true,
node: true,
jest: true,
},
extends: [
'prettier',
'plugin:vue/recommended',
'plugin:prettier/recommended',
'@nuxtjs/eslint-config-typescript',
'@nuxt/eslint-config',
],
parserOptions: {
parser: '@typescript-eslint/parser',
Expand Down
9 changes: 3 additions & 6 deletions .github/workflows/pipeline.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,27 +11,24 @@ jobs:
- name: Check out repository code
uses: actions/checkout@v3

- name: Install Node 16.x
- name: Install Node 22.x
uses: actions/setup-node@v3
with:
node-version: 16
node-version: 22.18.0

- name: Install Dependencies
run: yarn install --frozen-lockfile

- name: Run Lint
run: yarn lint

- name: Run Test
run: yarn test

- name: Run Build
run: yarn build

scan:
needs: test
if: github.event_name == 'pull_request'
uses: circlefin/circle-public-github-workflows/.github/workflows/pr-scan.yaml@v1
uses: circlefin/circle-public-github-workflows/.github/workflows/pr-scan.yaml@fix-pr-scan

release-sbom:
needs: test
Expand Down
17 changes: 17 additions & 0 deletions .licenseignore
Original file line number Diff line number Diff line change
@@ -1 +1,18 @@
pkg:npm/elliptic@6.6.1
pkg:npm/@bufbuild/protobuf@2.7.0
pkg:npm/@pkgjs/parseargs@0.11.0
pkg:npm/abbrev@3.0.1
pkg:npm/confbox@0.1.8
pkg:npm/confbox@0.2.2
pkg:npm/giget@2.0.0
pkg:npm/postcss-reduce-initial@7.0.4
pkg:npm/postcss-values-parser@6.0.2
pkg:npm/rollup@4.48.1
pkg:npm/sass@1.91.0
pkg:npm/sax@1.4.1
pkg:npm/type-fest@4.41.0
pkg:npm/uglify-js@3.19.3
pkg:npm/unenv@2.0.0-rc.19
pkg:npm/vite@5.4.19
pkg:npm/vite@7.1.3
pkg:npm/vitest@1.6.1
2 changes: 1 addition & 1 deletion .nvmrc
Original file line number Diff line number Diff line change
@@ -1 +1 @@
16.13.0
22.18.0
4 changes: 0 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,6 @@ After you [generate an API key for the sandbox environment](https://developers.c

You are now ready to use the sample app and test some payments flows. In a production environment these payments would settle in the [USDC stablecoin](https://www.circle.com/en/usdc).

## Test Card Numbers

Comment on lines -39 to -40
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I removed a bunch of Card related code now that it's deprecated

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you see anything I missed, please comment

To automatically trigger certain responses from the Circle Payments API, you can use some pre-defined [test card numbers](https://developers.circle.com/docs/test-card-numbers) that exercise specific behaviors.

## Change API base url

By default the API base url will be set to https://api-sandbox.circle.com.
Expand Down
89 changes: 89 additions & 0 deletions assets/css/main.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
/* Main CSS file for Circle Sample App */

/* Reset and base styles */
* {
box-sizing: border-box;
}

html,
body {
margin: 0;
padding: 0;
font-family: 'Roboto', sans-serif;
}

/* Layout styles */
.v-application {
font-family: 'Roboto', sans-serif !important;
}

/* Navigation styles */
.v-navigation-drawer {
border-right: 1px solid rgba(0, 0, 0, 0.12);
}

/* Card and content styles */
.v-card {
border-radius: 8px;
}

/* Form styles */
.v-text-field {
margin-bottom: 16px;
}

/* Button styles */
.v-btn {
text-transform: none;
}

/* Utility classes */
.text-center {
text-align: center;
}

.mt-4 {
margin-top: 16px;
}

.mb-4 {
margin-bottom: 16px;
}

.pa-4 {
padding: 16px;
}

/* Custom application styles */
.headline {
font-size: 1.5rem;
font-weight: 400;
line-height: 2rem;
}

.subtitle-2 {
font-size: 0.875rem;
font-weight: 500;
line-height: 1.375rem;
}

/* Error and success states */
.error-text {
color: #f44336;
}

.success-text {
color: #4caf50;
}

/* Loading states */
.loading-overlay {
position: relative;
}

/* Responsive design */
@media (max-width: 768px) {
.v-navigation-drawer {
position: fixed !important;
}
}
12 changes: 12 additions & 0 deletions babel.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
module.exports = {
presets: [
[
'@babel/preset-env',
{
targets: {
node: 'current',
},
},
],
],
}
114 changes: 62 additions & 52 deletions components/AmountInput.vue
Original file line number Diff line number Diff line change
Expand Up @@ -2,68 +2,78 @@
<v-text-field
v-model="amountFormatted"
:rules="rules"
:label="label"
:prefix="prefix"
:disabled="disabled"
:label="props.label"
:prefix="props.prefix"
:disabled="props.disabled"
/>
</template>

<script lang="ts">
import { Component, Vue, Prop, Watch } from 'nuxt-property-decorator'
<script setup lang="ts">
interface Props {
prefix?: string
label?: string
modelValue?: string
disabled?: boolean
}

@Component({})
export default class AmountInput extends Vue {
@Prop({ type: String, default: '$' }) prefix!: string
@Prop({ type: String, default: '' }) label!: string
@Prop({ type: String, default: '' }) value!: string
@Prop({ type: Boolean, default: false }) disabled!: boolean
const props = withDefaults(defineProps<Props>(), {
prefix: '$',
label: '',
modelValue: '',
disabled: false,
})

amountFormatted: string = '0.00'
const emit = defineEmits<{
'update:modelValue': [value: string]
}>()

ruleFunctions = {
positive: (v: string) => {
return parseFloat(v) > 0 || 'Please enter a positive amount'
},
isCurrency: (v: string) => {
const amount = v.trim()
return (
/^[0-9]+(.[0-9]{1,2})?$/.test(amount) || 'Please enter valid amount'
)
},
isNumber: (v: string) => {
return !isNaN(parseInt(v)) || 'Please enter valid amount'
},
isRequired: (v: string) => {
return v.trim() !== '' || 'Please enter an amount'
},
}
const amountFormatted = ref('0.00')

get rules() {
return [
this.ruleFunctions.isRequired,
this.ruleFunctions.isNumber,
this.ruleFunctions.isCurrency,
this.ruleFunctions.positive,
]
}
const ruleFunctions = {
positive: (v: string) => {
return parseFloat(v) > 0 || 'Please enter a positive amount'
},
isCurrency: (v: string) => {
const amount = v.trim()
return /^[0-9]+(.[0-9]{1,2})?$/.test(amount) || 'Please enter valid amount'
},
isNumber: (v: string) => {
return !isNaN(parseInt(v)) || 'Please enter valid amount'
},
isRequired: (v: string) => {
return v.trim() !== '' || 'Please enter an amount'
},
}

@Watch('amountFormatted', { immediate: true })
amountFormattedChange(value: string) {
this.amountFormatted = this.format(value)
this.$emit('input', this.amountFormatted)
}
const rules = computed(() => [
ruleFunctions.isRequired,
ruleFunctions.isNumber,
ruleFunctions.isCurrency,
ruleFunctions.positive,
])

@Watch('value', { immediate: true })
valueChange(value: string) {
this.amountFormatted = this.format(value)
const format = (value: string) => {
if (!value) {
return ''
}
return value
}

format(value: string) {
if (!value) {
return ''
}
watch(
amountFormatted,
(value: string) => {
const formatted = format(value)
amountFormatted.value = formatted
emit('update:modelValue', formatted)
},
{ immediate: true },
)

return value
}
}
watch(
() => props.modelValue,
(value: string) => {
amountFormatted.value = format(value)
},
{ immediate: true },
)
</script>
51 changes: 0 additions & 51 deletions components/CVVInput.vue

This file was deleted.

Loading
Loading